diff --git a/sources/appl/Buffer.cpp b/sources/appl/Buffer.cpp index f955b5d..2a0e99d 100644 --- a/sources/appl/Buffer.cpp +++ b/sources/appl/Buffer.cpp @@ -20,6 +20,10 @@ const char* const appl::Buffer::eventChangeName = "edn-buffer-name-change"; appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ (void) { m_value = etk::UChar::Null; + if (m_current<0) { + m_current = 0; + return *this; + } if ( m_data != NULL && m_current < m_data->m_data.size() ) { int8_t nbChar = etk::UChar::theoricUTF8Len(m_data->m_data[m_current]); @@ -47,6 +51,8 @@ appl::Buffer::Iterator& appl::Buffer::Iterator::operator-- (void) { m_current = -1; } return *this; + } else { + m_current = -1; } return *this; } @@ -91,6 +97,9 @@ appl::Buffer::Iterator appl::Buffer::end(void) { } appl::Buffer::Iterator appl::Buffer::cursor(void) { + if (m_cursorPos<= 0) { + return begin(); + } return position( m_cursorPos ); } @@ -107,7 +116,7 @@ appl::Buffer::Buffer(void) : m_hasFileName(false), m_fileName(""), m_isModify(false), - m_cursorPos(0), + m_cursorPos(-1), m_cursorSelectPos(-1), m_cursorPreferredCol(-1), m_nbLines(1), @@ -133,6 +142,7 @@ bool appl::Buffer::loadFile(const std::string& _name) { m_fileName = _name; m_hasFileName = true; m_isModify = true; + m_cursorPos = 0; setHighlightType(""); etk::FSNode file(m_fileName); if (file.exist() == false) { @@ -181,12 +191,8 @@ void appl::Buffer::setModification(bool _status) { } } - +// TODO : Naming error void appl::Buffer::countNumberofLine(void) { - if (m_data.size() == 0) { - m_nbLines = 1; - return; - } m_nbLines = 0; for (Iterator it = begin(); (bool)it == true; @@ -195,6 +201,9 @@ void appl::Buffer::countNumberofLine(void) { ++m_nbLines; } } + if (m_nbLines == 0) { + m_nbLines = 1; + } } @@ -203,7 +212,8 @@ appl::Buffer::Iterator appl::Buffer::getStartLine(const appl::Buffer::Iterator& if (false == searchBack(_pos, etk::UChar::Return, startPos)) { return begin(); } - return startPos; + // note search will return the position of \n ==> the lione start just after ... + return startPos+1; } appl::Buffer::Iterator appl::Buffer::getEndLine(const appl::Buffer::Iterator& _pos) { @@ -211,6 +221,7 @@ appl::Buffer::Iterator appl::Buffer::getEndLine(const appl::Buffer::Iterator& _p if (false == search(_pos, etk::UChar::Return, endPos)) { endPos = end(); } + // Note the line end at the \n return endPos; } @@ -412,7 +423,7 @@ appl::Buffer::Iterator appl::Buffer::countForwardNLines(const appl::Buffer::Iter char32_t value; int32_t lineCount = 0; //APPL_INFO("startPos=" << startPos << " nLines=" << nLines); - for (Iterator it = ++position(_startPos); + for (Iterator it = position(_startPos); (bool)it == true; ++it) { value = *it; @@ -433,7 +444,7 @@ appl::Buffer::Iterator appl::Buffer::countBackwardNLines(const appl::Buffer::Ite char32_t value; int32_t lineCount = 0; for (Iterator it = --position(_startPos); - it != begin(); + (bool)it == true; --it) { value = *it; if (value == etk::UChar::Return) { diff --git a/sources/appl/Buffer.h b/sources/appl/Buffer.h index 2ef7034..5c2b7ca 100644 --- a/sources/appl/Buffer.h +++ b/sources/appl/Buffer.h @@ -323,7 +323,7 @@ namespace appl { return m_data; }; protected: - esize_t m_cursorPos; //!< cursor position. + int64_t m_cursorPos; //!< cursor position. public: void moveCursor(esize_t _pos); protected: @@ -353,14 +353,14 @@ namespace appl { * @brief Get the Start position of the selection. * @return position of the start selection. */ - esize_t getStartSelectionPos(void) { + int64_t getStartSelectionPos(void) { return etk_min(m_cursorPos, m_cursorSelectPos); } /** * @brief Get the Stop position of the selection. * @return position of the stop selection. */ - esize_t getStopSelectionPos(void) { + int64_t getStopSelectionPos(void) { return etk_max(m_cursorPos, m_cursorSelectPos); } protected: diff --git a/sources/appl/Gui/MainWindows.cpp b/sources/appl/Gui/MainWindows.cpp index 277d3d7..84aefef 100644 --- a/sources/appl/Gui/MainWindows.cpp +++ b/sources/appl/Gui/MainWindows.cpp @@ -238,9 +238,9 @@ MainWindows::MainWindows(void) { (void)myMenu->addSpacer(); (void)myMenu->add(idMenugDisplay, "Reload openGl Shader", "", ednMsgGuiReloadShader); - m_widgetLabelFileName = new widget::Label("FileName"); + m_widgetLabelFileName = new widget::Label("FileName"); m_widgetLabelFileName->setExpand(bvec2(true,false)); - m_widgetLabelFileName->setFill(bvec2(false,true));; + m_widgetLabelFileName->setFill(bvec2(true,false));; mySizerHori->subWidgetAdd(m_widgetLabelFileName); @@ -279,6 +279,7 @@ MainWindows::MainWindows(void) { registerMultiCast(ednMsgBufferId); registerMultiCast(ednMsgGuiReloadShader); registerMultiCast(appl::MsgNameGuiChangeColor); + registerMultiCast(appl::MsgSelectNewFile); } @@ -350,11 +351,23 @@ void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) { APPL_ERROR("can not call unexistant buffer manager ... "); return; } - if (_msg.getMessage() == ednMsgGuiNew) { - if (m_bufferManager == NULL) { - APPL_ERROR("can not call unexistant buffer manager ... "); - return; + if (_msg.getMessage() == appl::MsgSelectNewFile) { + // select a new Buffer ==> change title: + appl::Buffer* tmpp = m_bufferManager->getBufferSelected(); + if (tmpp == NULL) { + setTitle("Edn"); + if (m_widgetLabelFileName != NULL) { + m_widgetLabelFileName->setLabel(""); + } + } else { + setTitle(std::string("Edn : ") + (tmpp->isModify()==true?" *":"") + tmpp->getFileName()); + if (m_widgetLabelFileName != NULL) { + m_widgetLabelFileName->setLabel(tmpp->getFileName() + (tmpp->isModify()==true?" *":"")); + } } + + + } else if (_msg.getMessage() == ednMsgGuiNew) { (void)m_bufferManager->createNewBuffer(); } else if (_msg.getMessage() == ednEventPopUpFileSelected) { APPL_DEBUG("Request opening the file : " << _msg.getData()); diff --git a/sources/appl/Gui/TextViewer.cpp b/sources/appl/Gui/TextViewer.cpp index e407cfa..4c7e4bb 100644 --- a/sources/appl/Gui/TextViewer.cpp +++ b/sources/appl/Gui/TextViewer.cpp @@ -696,7 +696,7 @@ void appl::TextViewer::updateScrolling(void) { m_originScrooled.setY(realCursorPosition.y()-m_size.y()+lineSize*2.0f); } m_originScrooled.setMax(vec2(0,0)); - + // TODO : Limit min position too ... } bool appl::TextViewer::moveCursor(const appl::Buffer::Iterator& _pos) { @@ -790,6 +790,7 @@ void appl::TextViewer::moveCursorRight(appl::TextViewer::moveMode _mode) { case moveLetter: it = m_buffer->cursor(); ++it; + APPL_ERROR("Cursor position : " << (esize_t)it); moveCursor(it); break; case moveWord: @@ -813,6 +814,7 @@ void appl::TextViewer::moveCursorLeft(appl::TextViewer::moveMode _mode) { case moveLetter: it = m_buffer->cursor();; --it; + APPL_ERROR("Cursor position : " << (esize_t)it); moveCursor(it); break; case moveWord: @@ -820,7 +822,7 @@ void appl::TextViewer::moveCursorLeft(appl::TextViewer::moveMode _mode) { break; case moveEnd: it = m_buffer->getStartLine(m_buffer->cursor()); - moveCursor(++it); + moveCursor(it); break; } } @@ -838,12 +840,11 @@ void appl::TextViewer::moveCursorUp(esize_t _nbLine) { } // Decide what column to move to, if there's a preferred column use that if (m_buffer->getFavoriteUpDownPos() < 0) { - // TODO : Remove this +1 !!! - m_buffer->setFavoriteUpDownPos(getScreenSize(lineStartPos+1, m_buffer->cursor())); + m_buffer->setFavoriteUpDownPos(getScreenSize(lineStartPos, m_buffer->cursor())); } EWOL_DEBUG("move_up : " << m_buffer->getFavoriteUpDownPos()); // get the previous line - appl::Buffer::Iterator prevLineStartPos = m_buffer->countBackwardNLines(lineStartPos, _nbLine); + appl::Buffer::Iterator prevLineStartPos = m_buffer->countBackwardNLines(lineStartPos-1, _nbLine); //APPL_INFO("Move line UP result : prevLineStartPos=" << prevLineStartPos); // get the display char position appl::Buffer::Iterator newPos = getPosSize(prevLineStartPos, m_buffer->getFavoriteUpDownPos()); @@ -866,8 +867,7 @@ void appl::TextViewer::moveCursorDown(esize_t _nbLine) { appl::Buffer::Iterator lineStartPos = m_buffer->getStartLine(m_buffer->cursor()); if (m_buffer->getFavoriteUpDownPos() < 0) { - // TODO : Remove this +1 !!! - m_buffer->setFavoriteUpDownPos(getScreenSize(lineStartPos+1, m_buffer->cursor())); + m_buffer->setFavoriteUpDownPos(getScreenSize(lineStartPos, m_buffer->cursor())); } EWOL_DEBUG("move down : " << m_buffer->getFavoriteUpDownPos()); // get the next line : diff --git a/sources/appl/TextPluginCopy.cpp b/sources/appl/TextPluginCopy.cpp index e0e671a..60c1ede 100644 --- a/sources/appl/TextPluginCopy.cpp +++ b/sources/appl/TextPluginCopy.cpp @@ -48,7 +48,7 @@ bool appl::TextPluginCopy::onReceiveMessage(appl::TextViewer& _textDrawer, } } if (_msg.getMessage() == ednMsgGuiCut) { - _textDrawer.m_buffer->removeSelection(); + _textDrawer.remove(); } return true; } else if (_msg.getMessage() == ednMsgGuiPaste) { diff --git a/sources/appl/TextPluginMultiLineTab.cpp b/sources/appl/TextPluginMultiLineTab.cpp index 354c7e4..64f4877 100644 --- a/sources/appl/TextPluginMultiLineTab.cpp +++ b/sources/appl/TextPluginMultiLineTab.cpp @@ -40,7 +40,7 @@ bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer, appl::Buffer::Iterator itStart = _textDrawer.m_buffer->selectStart(); appl::Buffer::Iterator itStop = _textDrawer.m_buffer->selectStop(); // get the compleate section of the buffer : - itStart = _textDrawer.m_buffer->getStartLine(itStart+1); + itStart = _textDrawer.m_buffer->getStartLine(itStart); itStop = _textDrawer.m_buffer->getEndLine(itStop); // copy the curent data in a classicle string: std::string data; @@ -91,6 +91,6 @@ bool appl::TextPluginMultiLineTab::onEventEntry(appl::TextViewer& _textDrawer, } // Real replace of DATA : _textDrawer.replace(data, itStart, itStop); - _textDrawer.m_buffer->setSelectionPos(itStart+1); + _textDrawer.m_buffer->setSelectionPos(itStart); return true; } \ No newline at end of file