[DEV] remove dependency of frend in the text viewer

This commit is contained in:
Edouard DUPIN 2013-11-24 16:07:43 +01:00
parent 157bd7bcd2
commit d3440c153b
6 changed files with 113 additions and 52 deletions

View File

@ -293,7 +293,7 @@ const char *const ednEventPopUpFileSaveAs = "edn-mainWindows-saveAsSelected";
void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) { void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) {
ewol::Windows::onReceiveMessage(_msg); ewol::Windows::onReceiveMessage(_msg);
APPL_INFO("Receive Event from the main windows: " << _msg ); APPL_VERBOSE("Receive Event from the main windows: " << _msg );
// open file Section ... // open file Section ...
if (_msg.getMessage() == ednMsgGuiOpen) { if (_msg.getMessage() == ednMsgGuiOpen) {
widget::FileChooser* tmpWidget = new widget::FileChooser(); widget::FileChooser* tmpWidget = new widget::FileChooser();

View File

@ -21,17 +21,7 @@
#include <tuple> #include <tuple>
namespace appl { namespace appl {
class TextViewerPlugin;
class TextPluginCopy;
class TextPluginMultiLineTab;
class TextPluginAutoIndent;
class TextPluginHistory;
class TextViewer : public widget::WidgetScrooled { class TextViewer : public widget::WidgetScrooled {
friend class appl::TextViewerPlugin;
friend class appl::TextPluginCopy;
friend class appl::TextPluginMultiLineTab;
friend class appl::TextPluginAutoIndent;
friend class appl::TextPluginHistory;
private: private:
appl::GlyphPainting* m_paintingProperties; //!< element painting property appl::GlyphPainting* m_paintingProperties; //!< element painting property
esize_t m_colorBackground; esize_t m_colorBackground;
@ -86,8 +76,68 @@ namespace appl {
bool replace(const std::u32string& _data) { bool replace(const std::u32string& _data) {
return replace(to_u8string(_data)); return replace(to_u8string(_data));
} }
/**
* @brief Remove selected data ...
*/
void remove(void); void remove(void);
/**
* @brief Remove selected data ... (No plugin call)
*/
void removeDirect(void) {
if (m_buffer==NULL) {
return;
}
m_buffer->removeSelection();
}
/**
* @brief copy data in the _data ref value.
* @param[out] _data Output stream to copy.
* @return true of no error occured.
*/
bool copy(std::string& _data) {
if (m_buffer==NULL) {
return false;
}
return m_buffer->copy(_data);
}
/**
* @brief copy data in the _data ref value.
* @param[out] _data Output stream to copy.
* @param[in] _pos Position to add the data.
* @param[in] _posEnd End position to end replace the data.
*/
void copy(std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) {
if (m_buffer==NULL) {
return;
}
m_buffer->copy(_data, _pos, _posEnd);
}
/**
* @brief Write data at a specific position (No plugin call)
* @param[in] _data Data to insert in the buffer
* @param[in] _pos Position to add the data.
* @return true if the write is done corectly
*/
bool writeDirect(const std::string& _data, const appl::Buffer::Iterator& _pos) {
if (m_buffer==NULL) {
return false;
}
return m_buffer->write(_data, _pos);
}
/**
* @brief Write data at a specific position (No plugin call)
* @param[in] _data Data to insert in the buffer
* @param[in] _pos Position to add the data.
* @param[in] _posEnd End position to end replace the data.
* @return true if the write is done corectly
*/
bool replaceDirect(const std::string& _data, const appl::Buffer::Iterator& _pos, const appl::Buffer::Iterator& _posEnd) {
if (m_buffer==NULL) {
return false;
}
return m_buffer->replace(_data, _pos, _posEnd);
}
appl::Buffer::Iterator getMousePosition(const vec2& _relativePos); appl::Buffer::Iterator getMousePosition(const vec2& _relativePos);
void mouseEventDouble(void); void mouseEventDouble(void);
@ -163,7 +213,7 @@ namespace appl {
* @param[in] _start Start position of the selection * @param[in] _start Start position of the selection
* @param[in] _stop Stop position of the selection (the curor is set at this position) * @param[in] _stop Stop position of the selection (the curor is set at this position)
*/ */
virtual void select(appl::Buffer::Iterator& _start, appl::Buffer::Iterator& _stop) { virtual void select(const appl::Buffer::Iterator& _start, const appl::Buffer::Iterator& _stop) {
if (m_buffer==NULL) { if (m_buffer==NULL) {
return; return;
} }
@ -216,6 +266,17 @@ namespace appl {
} }
return ret; return ret;
} }
/**
* @brief Get an iterator an an specific position
* @param[in] _pos Requested position of the iterator.
* @return The Iterator
*/
appl::Buffer::Iterator position(int64_t _pos) {
if (m_buffer==NULL) {
return appl::Buffer::Iterator();
}
return m_buffer->position(_pos);
}
/** /**
* @brief Get the cursor position. * @brief Get the cursor position.
* @return The iterator on the cursor position * @return The iterator on the cursor position

View File

@ -38,11 +38,11 @@ bool appl::TextPluginAutoIndent::onEventEntry(appl::TextViewer& _textDrawer,
if (_event.getSpecialKey().isSetShift() == true) { if (_event.getSpecialKey().isSetShift() == true) {
return false; return false;
} }
appl::Buffer::Iterator startLine = _textDrawer.m_buffer->cursor(); appl::Buffer::Iterator startLine = _textDrawer.cursor();
if (_textDrawer.m_buffer->hasTextSelected() == true) { if (_textDrawer.hasTextSelected() == true) {
startLine = _textDrawer.m_buffer->selectStart(); startLine = _textDrawer.selectStart();
} }
startLine = _textDrawer.m_buffer->getStartLine(startLine); startLine = _textDrawer.getStartLine(startLine);
std::string data = "\n"; std::string data = "\n";

View File

@ -21,12 +21,12 @@ appl::TextPluginCopy::TextPluginCopy(void) {
void appl::TextPluginCopy::onPluginEnable(appl::TextViewer& _textDrawer) { void appl::TextPluginCopy::onPluginEnable(appl::TextViewer& _textDrawer) {
// add event : // add event :
_textDrawer.registerMultiCast(ednMsgGuiCopy); _textDrawer.ext_registerMultiCast(ednMsgGuiCopy);
_textDrawer.registerMultiCast(ednMsgGuiPaste); _textDrawer.ext_registerMultiCast(ednMsgGuiPaste);
_textDrawer.registerMultiCast(ednMsgGuiCut); _textDrawer.ext_registerMultiCast(ednMsgGuiCut);
_textDrawer.shortCutAdd("ctrl+x", ednMsgGuiCut, "STD"); _textDrawer.ext_shortCutAdd("ctrl+x", ednMsgGuiCut, "STD");
_textDrawer.shortCutAdd("ctrl+c", ednMsgGuiCopy, "STD"); _textDrawer.ext_shortCutAdd("ctrl+c", ednMsgGuiCopy, "STD");
_textDrawer.shortCutAdd("ctrl+v", ednMsgGuiPaste, "STD"); _textDrawer.ext_shortCutAdd("ctrl+v", ednMsgGuiPaste, "STD");
} }
void appl::TextPluginCopy::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginCopy::onPluginDisable(appl::TextViewer& _textDrawer) {
@ -40,9 +40,9 @@ bool appl::TextPluginCopy::onReceiveMessage(appl::TextViewer& _textDrawer,
} }
if ( _msg.getMessage() == ednMsgGuiCopy if ( _msg.getMessage() == ednMsgGuiCopy
|| _msg.getMessage() == ednMsgGuiCut) { || _msg.getMessage() == ednMsgGuiCut) {
if (_textDrawer.m_buffer != NULL) { if (_textDrawer.hasBuffer() == true) {
std::string value; std::string value;
_textDrawer.m_buffer->copy(value); _textDrawer.copy(value);
if (value.size() != 0) { if (value.size() != 0) {
ewol::clipBoard::set(ewol::clipBoard::clipboardStd, value); ewol::clipBoard::set(ewol::clipBoard::clipboardStd, value);
} }
@ -52,7 +52,7 @@ bool appl::TextPluginCopy::onReceiveMessage(appl::TextViewer& _textDrawer,
} }
return true; return true;
} else if (_msg.getMessage() == ednMsgGuiPaste) { } else if (_msg.getMessage() == ednMsgGuiPaste) {
if (_textDrawer.m_buffer != NULL) { if (_textDrawer.hasBuffer() == true) {
ewol::clipBoard::request(ewol::clipBoard::clipboardStd); ewol::clipBoard::request(ewol::clipBoard::clipboardStd);
} }
return true; return true;

View File

@ -29,10 +29,10 @@ appl::TextPluginHistory::~TextPluginHistory(void) {
void appl::TextPluginHistory::onPluginEnable(appl::TextViewer& _textDrawer) { void appl::TextPluginHistory::onPluginEnable(appl::TextViewer& _textDrawer) {
// add event : // add event :
_textDrawer.registerMultiCast(ednMsgGuiRedo); _textDrawer.ext_registerMultiCast(ednMsgGuiRedo);
_textDrawer.registerMultiCast(ednMsgGuiUndo); _textDrawer.ext_registerMultiCast(ednMsgGuiUndo);
_textDrawer.shortCutAdd("ctrl+z", ednMsgGuiUndo); _textDrawer.ext_shortCutAdd("ctrl+z", ednMsgGuiUndo);
_textDrawer.shortCutAdd("ctrl+shift+z", ednMsgGuiRedo); _textDrawer.ext_shortCutAdd("ctrl+shift+z", ednMsgGuiRedo);
} }
void appl::TextPluginHistory::onPluginDisable(appl::TextViewer& _textDrawer) { void appl::TextPluginHistory::onPluginDisable(appl::TextViewer& _textDrawer) {
@ -55,9 +55,9 @@ bool appl::TextPluginHistory::onReceiveMessage(appl::TextViewer& _textDrawer,
appl::History *tmpElement = m_redo[m_redo.size()-1]; appl::History *tmpElement = m_redo[m_redo.size()-1];
m_redo.pop_back(); m_redo.pop_back();
m_undo.push_back(tmpElement); m_undo.push_back(tmpElement);
_textDrawer.m_buffer->replace(tmpElement->m_addedText, _textDrawer.replaceDirect(tmpElement->m_addedText,
_textDrawer.m_buffer->position(tmpElement->m_posAdded), _textDrawer.position(tmpElement->m_posAdded),
_textDrawer.m_buffer->position(tmpElement->m_endPosRemoved) ); _textDrawer.position(tmpElement->m_endPosRemoved) );
return true; return true;
} else if (_msg.getMessage() == ednMsgGuiUndo) { } else if (_msg.getMessage() == ednMsgGuiUndo) {
@ -71,9 +71,9 @@ bool appl::TextPluginHistory::onReceiveMessage(appl::TextViewer& _textDrawer,
appl::History *tmpElement = m_undo[m_undo.size()-1]; appl::History *tmpElement = m_undo[m_undo.size()-1];
m_undo.pop_back(); m_undo.pop_back();
m_redo.push_back(tmpElement); m_redo.push_back(tmpElement);
_textDrawer.m_buffer->replace(tmpElement->m_removedText, _textDrawer.replaceDirect(tmpElement->m_removedText,
_textDrawer.m_buffer->position(tmpElement->m_posAdded), _textDrawer.position(tmpElement->m_posAdded),
_textDrawer.m_buffer->position(tmpElement->m_endPosAdded) ); _textDrawer.position(tmpElement->m_endPosAdded) );
return true; return true;
} }
@ -121,13 +121,13 @@ bool appl::TextPluginHistory::onWrite(appl::TextViewer& _textDrawer,
tmpElement->m_posAdded = (int64_t)_pos; tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_endPosRemoved = (int64_t)_pos; tmpElement->m_endPosRemoved = (int64_t)_pos;
} }
_textDrawer.m_buffer->write(_data, _pos); _textDrawer.writeDirect(_data, _pos);
if (tmpElement != NULL) { if (tmpElement != NULL) {
tmpElement->m_endPosAdded = (int64_t)_textDrawer.m_buffer->cursor(); tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor();
clearRedo(); clearRedo();
m_undo.push_back(tmpElement); m_undo.push_back(tmpElement);
} }
appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.m_buffer->cursor()); appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.cursor());
return true; return true;
} }
@ -143,15 +143,15 @@ bool appl::TextPluginHistory::onReplace(appl::TextViewer& _textDrawer,
tmpElement->m_posAdded = (int64_t)_pos; tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_addedText = _data; tmpElement->m_addedText = _data;
tmpElement->m_endPosRemoved = (int64_t)_posEnd; tmpElement->m_endPosRemoved = (int64_t)_posEnd;
_textDrawer.m_buffer->copy(tmpElement->m_removedText, _pos, _posEnd); _textDrawer.copy(tmpElement->m_removedText, _pos, _posEnd);
} }
_textDrawer.m_buffer->replace(_data, _pos, _posEnd); _textDrawer.replaceDirect(_data, _pos, _posEnd);
if (tmpElement != NULL) { if (tmpElement != NULL) {
tmpElement->m_endPosAdded = (int64_t)_textDrawer.m_buffer->cursor(); tmpElement->m_endPosAdded = (int64_t)_textDrawer.cursor();
clearRedo(); clearRedo();
m_undo.push_back(tmpElement); m_undo.push_back(tmpElement);
} }
appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.m_buffer->cursor()); appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.cursor());
return true; return true;
} }
@ -167,12 +167,12 @@ bool appl::TextPluginHistory::onRemove(appl::TextViewer& _textDrawer,
tmpElement->m_posAdded = (int64_t)_pos; tmpElement->m_posAdded = (int64_t)_pos;
tmpElement->m_endPosAdded = tmpElement->m_posAdded; tmpElement->m_endPosAdded = tmpElement->m_posAdded;
tmpElement->m_endPosRemoved = (int64_t)_posEnd; tmpElement->m_endPosRemoved = (int64_t)_posEnd;
_textDrawer.m_buffer->copy(tmpElement->m_removedText, _pos, _posEnd); _textDrawer.copy(tmpElement->m_removedText, _pos, _posEnd);
clearRedo(); clearRedo();
m_undo.push_back(tmpElement); m_undo.push_back(tmpElement);
} }
_textDrawer.m_buffer->removeSelection(); _textDrawer.removeDirect();
appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.m_buffer->cursor()); appl::textPluginManager::onCursorMove(_textDrawer, _textDrawer.cursor());
return true; return true;
} }

View File

@ -34,17 +34,17 @@ bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer,
if (localValue != etk::UChar::Tabulation) { if (localValue != etk::UChar::Tabulation) {
return false; return false;
} }
if (_textDrawer.m_buffer->hasTextSelected() == false) { if (_textDrawer.hasTextSelected() == false) {
return false; return false;
} }
appl::Buffer::Iterator itStart = _textDrawer.m_buffer->selectStart(); appl::Buffer::Iterator itStart = _textDrawer.selectStart();
appl::Buffer::Iterator itStop = _textDrawer.m_buffer->selectStop(); appl::Buffer::Iterator itStop = _textDrawer.selectStop();
// get the compleate section of the buffer : // get the compleate section of the buffer :
itStart = _textDrawer.m_buffer->getStartLine(itStart); itStart = _textDrawer.getStartLine(itStart);
itStop = _textDrawer.m_buffer->getEndLine(itStop); itStop = _textDrawer.getEndLine(itStop);
// copy the curent data in a classicle string: // copy the curent data in a classicle string:
std::string data; std::string data;
_textDrawer.m_buffer->copy(data, itStart, itStop); _textDrawer.copy(data, itStart, itStop);
// TODO : Change this ... // TODO : Change this ...
bool m_useTabs = true; bool m_useTabs = true;
int32_t m_tabDist = 4; int32_t m_tabDist = 4;
@ -91,6 +91,6 @@ bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer,
} }
// Real replace of DATA : // Real replace of DATA :
_textDrawer.replace(data, itStart, itStop); _textDrawer.replace(data, itStart, itStop);
_textDrawer.m_buffer->setSelectionPos(itStart); _textDrawer.select(itStart, itStart+data.size());
return true; return true;
} }