[DEV] remember multiple last lene in a buffer when change it

This commit is contained in:
Edouard DUPIN 2013-11-21 21:18:30 +01:00
parent 0bef90462b
commit 4efed97130
2 changed files with 42 additions and 5 deletions

View File

@ -473,10 +473,22 @@ bool appl::TextViewer::onEventInput(const ewol::EventInput& _event) {
} }
} else if (_event.getStatus() == ewol::keyEvent::statusDouble) { } else if (_event.getStatus() == ewol::keyEvent::statusDouble) {
mouseEventDouble(); mouseEventDouble();
// Copy selection :
std::string value;
m_buffer->copy(value);
if (value.size() != 0) {
ewol::clipBoard::set(ewol::clipBoard::clipboardSelection, value);
}
markToRedraw(); markToRedraw();
return true; return true;
} else if (_event.getStatus() == ewol::keyEvent::statusTriple) { } else if (_event.getStatus() == ewol::keyEvent::statusTriple) {
mouseEventTriple(); mouseEventTriple();
// Copy selection :
std::string value;
m_buffer->copy(value);
if (value.size() != 0) {
ewol::clipBoard::set(ewol::clipBoard::clipboardSelection, value);
}
markToRedraw(); markToRedraw();
return true; return true;
} else if (_event.getStatus() == ewol::keyEvent::statusMove) { } else if (_event.getStatus() == ewol::keyEvent::statusMove) {
@ -589,16 +601,39 @@ void appl::TextViewer::onReceiveMessage(const ewol::EMessage& _msg) {
return; return;
} }
if (_msg.getMessage() == appl::MsgSelectNewFile) { if (_msg.getMessage() == appl::MsgSelectNewFile) {
// reset scroll:
if (m_buffer != NULL) { if (m_buffer != NULL) {
m_buffer->unRegisterOnEvent(this); m_buffer->unRegisterOnEvent(this);
bool needAdd = true;
for (size_t iii=0; iii<m_drawingRemenber.size(); ++iii) {
if (m_drawingRemenber[iii].first == m_buffer) {
m_drawingRemenber[iii].second = m_originScrooled;
APPL_VERBOSE("store origin : " << m_originScrooled);
needAdd = false;
break;
}
}
if (needAdd == true) {
m_drawingRemenber.push_back(std::make_pair(m_buffer, m_originScrooled));
APPL_VERBOSE("Push origin : " << m_originScrooled);
}
} }
m_buffer = m_bufferManager->get(_msg.getData()); m_originScrooled = vec2(0,0);
if (m_buffer != NULL) {
m_buffer->registerOnEvent(this, appl::Buffer::eventIsModify);
m_buffer->registerOnEvent(this, appl::Buffer::eventSelectChange);
}
if (m_bufferManager != NULL) { if (m_bufferManager != NULL) {
m_buffer = m_bufferManager->get(_msg.getData());
m_bufferManager->setBufferSelected(m_buffer); m_bufferManager->setBufferSelected(m_buffer);
if (m_buffer != NULL) {
m_buffer->registerOnEvent(this, appl::Buffer::eventIsModify);
m_buffer->registerOnEvent(this, appl::Buffer::eventSelectChange);
for (auto element : m_drawingRemenber) {
if (element.first == m_buffer) {
m_originScrooled = element.second;
APPL_VERBOSE("retrive origin : " << m_originScrooled);
// TODO : Check if this element is not out of the display text ...
break;
}
}
}
} }
markToRedraw(); markToRedraw();
return; return;

View File

@ -17,6 +17,7 @@
#include <ewol/compositing/Text.h> #include <ewol/compositing/Text.h>
#include <ewol/compositing/Drawing.h> #include <ewol/compositing/Drawing.h>
#include <appl/BufferManager.h> #include <appl/BufferManager.h>
#include <tuple>
namespace appl { namespace appl {
class TextViewerPlugin; class TextViewerPlugin;
@ -48,6 +49,7 @@ namespace appl {
appl::Buffer* m_buffer; //!< pointer on the current buffer to display (can be null if the buffer is remover or in state of changing buffer) appl::Buffer* m_buffer; //!< pointer on the current buffer to display (can be null if the buffer is remover or in state of changing buffer)
ewol::Text m_displayText; //!< Text display properties. ewol::Text m_displayText; //!< Text display properties.
ewol::Drawing m_displayDrawing; //!< Other diaplay requested. ewol::Drawing m_displayDrawing; //!< Other diaplay requested.
std::vector<std::pair<appl::Buffer*, vec2>> m_drawingRemenber;
public: public:
void setFontSize(int32_t _size); void setFontSize(int32_t _size);
void setFontName(const std::string& _fontName); void setFontName(const std::string& _fontName);