[DEV] test multiple display of one buffer

This commit is contained in:
Edouard DUPIN 2013-10-30 21:16:38 +01:00
parent 50c1830696
commit 4693119e7d
11 changed files with 185 additions and 34 deletions

View File

@ -1,9 +1,9 @@
{
"ednColor": [
{ name:"LIST_backgroung1", foreground:"#202020" },
{ name:"LIST_backgroung2", foreground:"#000000" },
{ name:"LIST_backgroungSelected", foreground:"#2f0ba4" },
{ name:"LIST_textNormal", foreground:"#EEEEEE" },
{ name:"LIST_textModify", foreground:"#FF0000" },
{ name:"backgroung1", foreground:"#202020" },
{ name:"backgroung2", foreground:"#000000" },
{ name:"backgroungSelected", foreground:"#2f0ba4" },
{ name:"textNormal", foreground:"#EEEEEE" },
{ name:"textModify", foreground:"#FF0000" },
]
}

View File

@ -1,9 +1,9 @@
{
"ednColor": [
{ name:"LIST_backgroung1", foreground:"#d9d7d7"},
{ name:"LIST_backgroung2", foreground:"#b7b6b6"},
{ name:"LIST_backgroungSelected", foreground:"#3da3f9"},
{ name:"LIST_textNormal", foreground:"#000000"},
{ name:"LIST_textModify", foreground:"#FF0000"}
{ name:"backgroung1", foreground:"#d9d7d7"},
{ name:"backgroung2", foreground:"#b7b6b6"},
{ name:"backgroungSelected", foreground:"#3da3f9"},
{ name:"textNormal", foreground:"#000000"},
{ name:"textModify", foreground:"#FF0000"}
]
}

View File

@ -12,6 +12,11 @@
#include <ewol/clipBoard.h>
#include <appl/HighlightManager.h>
const char* const appl::Buffer::eventIsModify = "edn-is-modify";
const char* const appl::Buffer::eventIsSave = "edn-is-save";
const char* const appl::Buffer::eventSelectChange = "edn-select-change";
appl::Buffer::Iterator& appl::Buffer::Iterator::operator++ (void) {
m_value = etk::UChar::Null;
if ( m_data != NULL
@ -103,7 +108,9 @@ appl::Buffer::Buffer(void) :
m_cursorPreferredCol(-1),
m_nbLines(0),
m_highlight(NULL) {
addEventId(eventIsModify);
addEventId(eventIsSave);
addEventId(eventSelectChange);
}
appl::Buffer::~Buffer(void) {
@ -208,11 +215,13 @@ void appl::Buffer::moveCursor(esize_t _pos) {
if (m_cursorPos == m_cursorSelectPos) {
m_cursorSelectPos = -1;
}
generateEventId(eventSelectChange);
return;
}
// move mode
m_cursorPos = _pos;
m_cursorSelectPos = -1;
generateEventId(eventSelectChange);
}
bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
@ -304,10 +313,12 @@ bool appl::Buffer::getPosAround(const appl::Buffer::Iterator& _startPos,
void appl::Buffer::setSelectionPos(const appl::Buffer::Iterator& _pos) {
m_cursorSelectPos = _pos;
generateEventId(eventSelectChange);
}
void appl::Buffer::unSelect(void) {
m_cursorSelectPos = -1;
generateEventId(eventSelectChange);
}
static const char *ControlCodeTable[32] = {
@ -438,6 +449,7 @@ bool appl::Buffer::write(const etk::UString& _data, const appl::Buffer::Iterator
m_selectMode = false;
moveCursor((esize_t)_pos+output.size());
countNumberofLine(); // TODO : use more intelligent counter
generateEventId(eventIsModify);
return true;
}
@ -448,6 +460,7 @@ bool appl::Buffer::replace(const etk::UString& _data, const appl::Buffer::Iterat
m_selectMode = false;
moveCursor((esize_t)_pos+output.size());
countNumberofLine(); // TODO : use more intelligent counter
generateEventId(eventIsModify);
return true;
}
@ -460,6 +473,7 @@ void appl::Buffer::removeSelection(void) {
m_selectMode = false;
moveCursor(startPos);
countNumberofLine(); // TODO : use more intelligent counter
generateEventId(eventIsModify);
}
}

View File

@ -260,6 +260,10 @@ namespace appl {
};
friend class Buffer;
};
public:
static const char* const eventIsModify;
static const char* const eventIsSave;
static const char* const eventSelectChange;
public:
Buffer(void);
~Buffer(void);

View File

@ -69,9 +69,23 @@ void appl::BufferManager::onObjectRemove(ewol::EObject * _removeObject) {
}
}
bool appl::BufferManager::exist(const etk::UString& _fileName) {
for (esize_t iii = 0; iii < m_list.size(); ++iii) {
if (m_list[iii] == NULL) {
continue;
}
if (m_list[iii]->getFileName() == _fileName) {
return true;
}
}
return false;
}
void appl::BufferManager::open(const etk::UString& _fileName) {
(void)get(_fileName, true);
sendMultiCast(appl::MsgSelectNewFile, _fileName);
if (exist(_fileName) == false) {
(void)get(_fileName, true);
sendMultiCast(appl::MsgSelectNewFile, _fileName);
}
}
void appl::BufferManager::onReceiveMessage(const ewol::EMessage& _msg) {

View File

@ -34,6 +34,12 @@ namespace appl {
* @param[in] _fileName Name of the file to open or create.
*/
void open(const etk::UString& _fileName);
/**
* @brief Check if a buffer is already open.
* @param[in] _fileName name of the file.
* @return true if the buffer is already open.
*/
bool exist(const etk::UString& _fileName);
/*
appl::Buffer* get(esize_t _bufferID);
esize_t size(void);

View File

@ -44,8 +44,19 @@ BufferView::BufferView(void) {
registerMultiCast(ednMsgBufferListChange);
registerMultiCast(ednMsgBufferState);
registerMultiCast(ednMsgBufferId);
registerMultiCast(appl::MsgSelectNewFile);
m_selectedID = -1;
m_selectedIdRequested = -1;
// load buffer manager:
m_bufferManager = appl::BufferManager::keep();
// load color properties
m_paintingProperties = appl::GlyphPainting::keep("THEME:COLOR:bufferList.json");
// get all id properties ...
m_colorBackground1 = m_paintingProperties->request("backgroung1");
m_colorBackground2 = m_paintingProperties->request("backgroung2");
m_colorBackgroundSelect = m_paintingProperties->request("backgroungSelected");
m_colorTextNormal = m_paintingProperties->request("textNormal");
m_colorTextModify = m_paintingProperties->request("textModify");
}
BufferView::~BufferView(void) {
@ -60,10 +71,27 @@ void BufferView::removeAllElement(void) {
}
}
m_list.clear();
if (m_bufferManager != NULL) {
appl::BufferManager::release(m_bufferManager);
}
}
void BufferView::onReceiveMessage(const ewol::EMessage& _msg) {
widget::List::onReceiveMessage(_msg);
if (_msg.getMessage() == appl::MsgSelectNewFile) {
appl::Buffer* buffer = m_bufferManager->get(_msg.getData());
if (buffer == NULL) {
APPL_ERROR("event on element nor exist : " << _msg.getData());
return;
}
appl::dataBufferStruct* tmp = new appl::dataBufferStruct(_msg.getData(), buffer);
if (tmp == NULL) {
APPL_ERROR("Allocation error of the tmp buffer list element");
return;
}
m_list.pushBack(tmp);
markToRedraw();
}
if (_msg.getMessage() == ednMsgBufferListChange) {
// clean The list
removeAllElement();
@ -104,9 +132,24 @@ void BufferView::onReceiveMessage(const ewol::EMessage& _msg) {
}
}
void BufferView::onObjectRemove(ewol::EObject* _removeObject) {
widget::List::onObjectRemove(_removeObject);
for (esize_t iii=0; iii<m_list.size(); iii++) {
if (m_list[iii] == NULL) {
continue;
}
if (m_list[iii]->m_buffer != _removeObject) {
continue;
}
m_list.remove(iii);
markToRedraw();
return;
}
}
etk::Color<> BufferView::getBasicBG(void) {
return etk::color::none; //ColorizeManager::get(COLOR_LIST_BG_1);
return (*m_paintingProperties)[m_colorBackground1].getForeground();
}
uint32_t BufferView::getNuberOfColomn(void) {
@ -123,6 +166,39 @@ uint32_t BufferView::getNuberOfRaw(void) {
}
bool BufferView::getElement(int32_t _colomn, int32_t _raw, etk::UString& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg) {
if( _raw >= 0
&& _raw<m_list.size()
&& NULL != m_list[_raw]) {
_myTextToWrite = m_list[_raw]->m_bufferName.getNameFile();
/*
if (true == m_list[_raw]->m_isModify) {
_fg = (*m_paintingProperties)[m_colorTextModify].getForeground();
} else */ {
_fg = (*m_paintingProperties)[m_colorTextModify].getForeground();
}
if (_raw%2 == 0) {
_bg = (*m_paintingProperties)[m_colorBackground1].getForeground();
} else {
_bg = (*m_paintingProperties)[m_colorBackground2].getForeground();
}
// the buffer change of selection ...
/*
if (m_selectedIdRequested == m_list[_raw]->m_bufferID) {
m_selectedID = _raw;
// stop searching
m_selectedIdRequested = -1;
// set the raw visible :
setRawVisible(m_selectedID);
}
*/
/*
if (m_selectedID == _raw) {
_bg = (*m_paintingProperties)[m_colorBackgroundSelect].getForeground();
}
*/
} else {
_myTextToWrite = "ERROR";
}
/*
bool isModify;
basicColor_te selectFG = COLOR_LIST_TEXT_NORMAL;
@ -173,8 +249,8 @@ bool BufferView::onItemEvent(int32_t _IdInput, ewol::keyEvent::status_te _typeEv
if( _raw >= 0
&& _raw<m_list.size()
&& NULL != m_list[_raw]) {
m_selectedIdRequested = m_list[_raw]->m_bufferID;
sendMultiCast(ednMsgBufferId, m_list[_raw]->m_bufferID);
//m_selectedIdRequested = m_list[_raw]->m_buffer;
//sendMultiCast(ednMsgBufferId, m_list[_raw]->m_buffer);
}
}
markToRedraw();

View File

@ -21,12 +21,10 @@ namespace appl
{
public:
etk::FSNode m_bufferName;
uint32_t m_bufferID;
bool m_isModify;
dataBufferStruct(etk::FSNode& _bufferName, int32_t _bufferID, bool _isModify) :
appl::Buffer* m_buffer;
dataBufferStruct(const etk::UString& _bufferName, appl::Buffer* _buffer) :
m_bufferName(_bufferName),
m_bufferID(_bufferID),
m_isModify(_isModify) {
m_buffer(_buffer) {
};
~dataBufferStruct(void) { };
@ -35,6 +33,15 @@ namespace appl
class BufferView : public widget::List
{
private:
appl::BufferManager* m_bufferManager; //!< handle on the buffer manager
private:
appl::GlyphPainting* m_paintingProperties; //!< element painting property
esize_t m_colorBackground1;
esize_t m_colorBackground2;
esize_t m_colorBackgroundSelect;
esize_t m_colorTextNormal;
esize_t m_colorTextModify;
private:
int32_t m_selectedIdRequested;
int32_t m_selectedID;
@ -47,6 +54,7 @@ class BufferView : public widget::List
const char * const getObjectType(void) { return "ApplBufferView"; };
// Derived function
virtual void onReceiveMessage(const ewol::EMessage& _msg);
virtual void onObjectRemove(ewol::EObject* _removeObject);
protected:
// function call to display the list :
virtual etk::Color<> getBasicBG(void);

View File

@ -136,6 +136,11 @@ MainWindows::MainWindows(void) {
mySizerHori->subWidgetAdd(mySizerVert2);
// main buffer Area :
myTextView = new appl::TextViewer("FreeMono;DejaVuSansMono;FreeSerif", 11);
myTextView->setExpand(bvec2(true,true));
myTextView->setFill(bvec2(true,true));
mySizerVert2->subWidgetAdd(myTextView);
myTextView = new appl::TextViewer("FreeMono;DejaVuSansMono;FreeSerif", 11);
myTextView->setExpand(bvec2(true,true));
myTextView->setFill(bvec2(true,true));

View File

@ -30,7 +30,6 @@ class MainWindows : public ewol::Windows {
virtual void onObjectRemove(ewol::EObject * _removeObject);
};
#define EDN_CAST_MAIN_WINDOWS(curentPointer) EWOL_CAST(TYPE_EOBJECT_EDN_MAIN_WINDOWS,MainWindows,curentPointer)
#endif

View File

@ -213,12 +213,14 @@ void appl::TextViewer::onRegenerateDisplay(void) {
countNbLine += 1;
countColomn = 0;
maxSizeX = etk_max(m_displayText.getPos().x(), maxSizeX);
// display the end line position
if (it >= selectPosStart && it < selectPosStop) {
ewol::Drawing& draw = m_displayText.getDrawing();
draw.setColor(etk::Color<>(0xFF0000FF));
draw.setPos(m_displayText.getPos() + tmpLetterSize/4.0f);
draw.rectangle(m_displayText.getPos() + tmpLetterSize*3.0f/4.0f);
// Display the end line position only if we have the focus ...
if (getFocus() == true) {
if (it >= selectPosStart && it < selectPosStop) {
ewol::Drawing& draw = m_displayText.getDrawing();
draw.setColor(etk::Color<>(0xFF0000FF));
draw.setPos(m_displayText.getPos() + tmpLetterSize/4.0f);
draw.rectangle(m_displayText.getPos() + tmpLetterSize*3.0f/4.0f);
}
}
m_displayText.forceLineReturn();
m_displayText.setPos(vec3(-m_originScrooled.x()+m_lastOffsetDisplay, m_displayText.getPos().y(), 0.0f));
@ -250,16 +252,21 @@ void appl::TextViewer::onRegenerateDisplay(void) {
}
}
m_buffer->expand(countColomn, *it, stringToDisplay);
if (it >= selectPosStart && it < selectPosStop) {
m_displayText.setColor((*m_paintingProperties)[m_colorSelection].getForeground());
m_displayText.setColorBg((*m_paintingProperties)[m_colorSelection].getBackground());
// Display selection only if we have the focus ...
if (getFocus() == true) {
if (it >= selectPosStart && it < selectPosStop) {
m_displayText.setColor((*m_paintingProperties)[m_colorSelection].getForeground());
m_displayText.setColorBg((*m_paintingProperties)[m_colorSelection].getBackground());
}
}
//APPL_DEBUG("display : '" << currentValue << "' == > '" << stringToDisplay << "'");
m_displayText.print(stringToDisplay);
countColomn += stringToDisplay.size();
}
maxSizeX = etk_max(m_displayText.getPos().x(), maxSizeX);
if (tmpCursorPosition.z()!=-1) {
// Display cursor only if we have the focus ...
if ( tmpCursorPosition.z() != -1
&& getFocus() == true) {
// display the cursor:
//APPL_DEBUG("display cursor at position : " << tmpCursorPosition);
m_displayText.setPos(tmpCursorPosition);
@ -528,19 +535,37 @@ void appl::TextViewer::onEventClipboard(ewol::clipBoard::clipboardListe_te _clip
}
void appl::TextViewer::onReceiveMessage(const ewol::EMessage& _msg) {
// First call plugin
widget::WidgetScrooled::onReceiveMessage(_msg);
//APPL_DEBUG("receive msg: " << _msg);
// First call plugin
if (appl::textPluginManager::onReceiveMessage(*this, _msg) == true) {
markToRedraw();
return;
}
if (_msg.getMessage() == appl::MsgSelectNewFile) {
if (m_buffer != NULL) {
m_buffer->unRegisterOnEvent(this);
}
m_buffer = m_bufferManager->get(_msg.getData());
if (m_buffer != NULL) {
m_buffer->registerOnEvent(this, appl::Buffer::eventIsModify);
m_buffer->registerOnEvent(this, appl::Buffer::eventSelectChange);
}
markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventIsModify) {
markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventSelectChange) {
markToRedraw();
return;
}
markToRedraw();
}
void appl::TextViewer::onObjectRemove(ewol::EObject* _removeObject) {
widget::WidgetScrooled::onObjectRemove(_removeObject);
if (m_buffer == _removeObject) {
m_buffer = NULL;
markToRedraw();