[DEV] add store

This commit is contained in:
2013-11-07 21:08:57 +01:00
parent 4693119e7d
commit 4731dae6e4
11 changed files with 278 additions and 88 deletions

View File

@@ -45,6 +45,7 @@ BufferView::BufferView(void) {
registerMultiCast(ednMsgBufferState);
registerMultiCast(ednMsgBufferId);
registerMultiCast(appl::MsgSelectNewFile);
registerMultiCast(appl::MsgSelectChange);
m_selectedID = -1;
m_selectedIdRequested = -1;
// load buffer manager:
@@ -84,6 +85,8 @@ void BufferView::onReceiveMessage(const ewol::EMessage& _msg) {
APPL_ERROR("event on element nor exist : " << _msg.getData());
return;
}
buffer->registerOnEvent(this, appl::Buffer::eventIsSave);
buffer->registerOnEvent(this, appl::Buffer::eventIsModify);
appl::dataBufferStruct* tmp = new appl::dataBufferStruct(_msg.getData(), buffer);
if (tmp == NULL) {
APPL_ERROR("Allocation error of the tmp buffer list element");
@@ -91,6 +94,37 @@ void BufferView::onReceiveMessage(const ewol::EMessage& _msg) {
}
m_list.pushBack(tmp);
markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventIsSave) {
markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventIsModify) {
markToRedraw();
return;
}
APPL_DEBUG("message : " << _msg);
if (_msg.getMessage() == appl::MsgSelectChange) {
m_selectedID = -1;
appl::Buffer* tmpBuffer = NULL;
if (m_bufferManager != NULL) {
tmpBuffer = m_bufferManager->getBufferSelected();
}
if (tmpBuffer != NULL) {
for (esize_t iii=0; iii<m_list.size(); iii++) {
if (m_list[iii] == NULL) {
continue;
}
if (m_list[iii]->m_buffer != tmpBuffer) {
continue;
}
m_selectedID = iii;
break;
}
}
markToRedraw();
return;
}
if (_msg.getMessage() == ednMsgBufferListChange) {
// clean The list
@@ -170,10 +204,11 @@ bool BufferView::getElement(int32_t _colomn, int32_t _raw, etk::UString& _myText
&& _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 */ {
if ( m_list[_raw]->m_buffer != NULL
&& m_list[_raw]->m_buffer->isModify() == false) {
_fg = (*m_paintingProperties)[m_colorTextNormal].getForeground();
} else {
_fg = (*m_paintingProperties)[m_colorTextModify].getForeground();
}
if (_raw%2 == 0) {
@@ -182,63 +217,12 @@ bool BufferView::getElement(int32_t _colomn, int32_t _raw, etk::UString& _myText
_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;
basicColor_te selectBG = COLOR_LIST_BG_1;
// when requested a new display selection == > reset the previous one ...
if (m_selectedIdRequested != -1) {
m_selectedID = -1;
}
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) {
selectFG = COLOR_LIST_TEXT_MODIFY;
} else {
selectFG = COLOR_LIST_TEXT_NORMAL;
}
if (_raw%2 == 0) {
selectBG = COLOR_LIST_BG_1;
} else {
selectBG = COLOR_LIST_BG_2;
}
// 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) {
selectBG = COLOR_LIST_BG_SELECTED;
}
} else {
_myTextToWrite = "ERROR";
}
_fg = ColorizeManager::get(selectFG);
_bg = ColorizeManager::get(selectBG);
*/
return true;
}
@@ -249,11 +233,14 @@ 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_buffer;
//sendMultiCast(ednMsgBufferId, m_list[_raw]->m_buffer);
if (m_list[_raw]->m_buffer != NULL) {
sendMultiCast(appl::MsgSelectNewFile, m_list[_raw]->m_buffer->getFileName());
m_selectedID = _raw;
markToRedraw();
return true;
}
}
}
markToRedraw();
return false;
}

View File

@@ -122,6 +122,9 @@ MainWindows::MainWindows(void) {
BufferView * myBufferView = NULL;
widget::Menu * myMenu = NULL;
// load buffer manager:
m_bufferManager = appl::BufferManager::keep();
mySizerVert = new widget::Sizer(widget::Sizer::modeVert);
setSubWidget(mySizerVert);
@@ -270,7 +273,9 @@ MainWindows::MainWindows(void) {
MainWindows::~MainWindows(void) {
if (m_bufferManager != NULL) {
appl::BufferManager::release(m_bufferManager);
}
}
@@ -285,22 +290,80 @@ void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) {
// open file Section ...
if (_msg.getMessage() == ednMsgGuiOpen) {
widget::FileChooser* tmpWidget = new widget::FileChooser();
if (tmpWidget == NULL) {
APPL_ERROR("Can not open File chooser !!! ");
return;
}
tmpWidget->setTitle("Open files ...");
tmpWidget->setValidateLabel("Open");
/*
if (BufferManager::getSelected()!=-1) {
BufferText * myBuffer = BufferManager::get(BufferManager::getSelected());
if (NULL!=myBuffer) {
etk::FSNode tmpFile = myBuffer->getFileName();
tmpWidget->setFolder(tmpFile.getNameFolder());
}
if (m_bufferManager == NULL) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
*/
// Get a ref on the buffer selected (if null, no buffer was selected ...)
appl::Buffer* tmpBuffer = m_bufferManager->getBufferSelected();
if (tmpBuffer != NULL) {
etk::FSNode tmpFile = tmpBuffer->getFileName();
tmpWidget->setFolder(tmpFile.getNameFolder());
}
// apply widget pop-up ...
popUpWidgetPush(tmpWidget);
tmpWidget->registerOnEvent(this, ewolEventFileChooserValidate, ednEventPopUpFileSelected);
} else if (_msg.getMessage() == ednEventPopUpFileSelected) {
APPL_DEBUG("Request opening the file : " << _msg.getData());
sendMultiCast(ednMsgOpenFile, _msg.getData());
if (m_bufferManager == NULL) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
m_bufferManager->open(_msg.getData());
} else if (_msg.getMessage() == ednMsgGuiSave) {
APPL_DEBUG("Request saving the file : " << _msg.getData());
if (m_bufferManager == NULL) {
APPL_ERROR("can not call unexistant buffer manager ... ");
return;
}
if (_msg.getData().toLower() == "current") {
appl::Buffer* tmpBuffer = m_bufferManager->getBufferSelected();
if (tmpBuffer == NULL) {
APPL_WARNING("No buffer selected !!! ");
createPopUpMessage(widget::Windows::messageTypeError, "No buffer selected !!!");
return;
}
// Note : for direct saving, we do not chack the saving status ==> all time saving ...
if (tmpBuffer->getFileName() == "") {
// TODO : Has no name ==> must generate a a save AS !!!
APPL_TODO("Has no name ==> must generate a a save AS");
return;
}
if (tmpBuffer->storeFile() == false) {
// TODO : Generate a pop-up to inform error...
APPL_ERROR("can not save the file !!! '" << tmpBuffer->getFileName() << "'");
}
return;
} else if (_msg.getData().toLower() == "all") {
APPL_TODO("Need to save all the buffers ... ");
for (esize_t iii=0; iii < m_bufferManager->size(); ++iii) {
appl::Buffer* tmpBuffer = m_bufferManager->get(iii);
if (tmpBuffer == NULL) {
continue;
}
if (tmpBuffer->isModify() == false) {
continue;
}
if (tmpBuffer->getFileName() == "") {
// TODO : Has no name ==> must generate a a save AS !!!
APPL_TODO("Has no name ==> must generate a a save AS");
continue;
}
if (tmpBuffer->storeFile() == false) {
// TODO : Generate a pop-up to inform error...
APPL_ERROR("can not save the file !!! '" << tmpBuffer->getFileName() << "'");
}
}
return;
} else {
APPL_ERROR("UNKNOW request : " << _msg);
}
} else if (_msg.getMessage() == ednMsgGuiSaveAs) {
if (_msg.getData() == "") {
APPL_ERROR("Null data for Save As file ... ");
@@ -311,6 +374,7 @@ void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) {
} else {
sscanf(_msg.getData().c_str(), "%d", &m_currentSavingAsIdBuffer);
}
/*
if (false == BufferManager::exist(m_currentSavingAsIdBuffer)) {
APPL_ERROR("Request saveAs on non existant Buffer ID=" << m_currentSavingAsIdBuffer);

View File

@@ -15,6 +15,7 @@
#include <appl/Gui/BufferView.h>
#include <appl/BufferManager.h>
#include <ewol/widget/Label.h>
#include <appl/BufferManager.h>
class MainWindows : public ewol::Windows {
private:
@@ -24,6 +25,8 @@ class MainWindows : public ewol::Windows {
// Constructeur
MainWindows(void);
~MainWindows(void);
private:
appl::BufferManager* m_bufferManager; //!< handle on the buffer manager
public: // Derived function
virtual const char * const getObjectType(void) { return "MainWindows"; };
virtual void onReceiveMessage(const ewol::EMessage& _msg);

View File

@@ -65,6 +65,8 @@ appl::TextViewer::TextViewer(const etk::UString& _fontName, int32_t _fontSize) :
m_buffer->loadFile("./example.txt");
*/
appl::textPluginManager::connect(*this);
// last created has focus ...
setCurrentSelect();
}
appl::TextViewer::~TextViewer(void) {
@@ -390,10 +392,12 @@ bool appl::TextViewer::onEventEntry(const ewol::EventEntry& _event) {
}
bool appl::TextViewer::onEventInput(const ewol::EventInput& _event) {
if (_event.getId() != 0) {
keepFocus();
}
if (m_buffer == NULL) {
return false;
}
keepFocus();
// First call the scrolling widget :
if (WidgetScrooled::onEventInput(_event) == true) {
markToRedraw();
@@ -542,6 +546,19 @@ void appl::TextViewer::onReceiveMessage(const ewol::EMessage& _msg) {
markToRedraw();
return;
}
// event needed even if selection of buffer is not done ...
if (_msg.getMessage() == appl::Buffer::eventIsModify) {
markToRedraw();
return;
}
if (_msg.getMessage() == appl::Buffer::eventSelectChange) {
markToRedraw();
return;
}
// If not the last buffer selected, then no event parsing ...
if (isSelectedLast() == false) {
return;
}
if (_msg.getMessage() == appl::MsgSelectNewFile) {
if (m_buffer != NULL) {
m_buffer->unRegisterOnEvent(this);
@@ -551,14 +568,9 @@ void appl::TextViewer::onReceiveMessage(const ewol::EMessage& _msg) {
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) {
if (m_bufferManager != NULL) {
m_bufferManager->setBufferSelected(m_buffer);
}
markToRedraw();
return;
}
@@ -575,11 +587,14 @@ void appl::TextViewer::onObjectRemove(ewol::EObject* _removeObject) {
void appl::TextViewer::onGetFocus(void) {
showKeyboard();
APPL_INFO("Focus - In");
setCurrentSelect();
markToRedraw();
}
void appl::TextViewer::onLostFocus(void) {
hideKeyboard();
APPL_INFO("Focus - out");
markToRedraw();
}
void appl::TextViewer::setFontSize(int32_t _size) {
@@ -591,8 +606,6 @@ void appl::TextViewer::setFontName(const etk::UString& _fontName) {
m_displayText.setFontName(_fontName);
}
bool appl::TextViewer::moveCursor(const appl::Buffer::Iterator& _pos) {
if (m_buffer == NULL) {
return false;
@@ -826,3 +839,22 @@ float appl::TextViewer::getScreenSize(const appl::Buffer::Iterator& _startLinePo
}
return ret;
}
appl::TextViewer* appl::TextViewer::m_currentBufferSelect = NULL;
void appl::TextViewer::setCurrentSelect(void) {
if (this == m_currentBufferSelect) {
return;
}
m_currentBufferSelect = this;
if (m_bufferManager != NULL) {
m_bufferManager->setBufferSelected(m_buffer);
}
}
bool appl::TextViewer::isSelectedLast(void) {
if (this == m_currentBufferSelect) {
return true;
}
return false;
}

View File

@@ -112,6 +112,17 @@ namespace appl {
appl::Buffer::Iterator getPosSize(const appl::Buffer::Iterator& _startLinePos, float _distance);
float getScreenSize(const appl::Buffer::Iterator& _startLinePos, const appl::Buffer::Iterator& _stopPos);
private:
static TextViewer* m_currentBufferSelect; //!< to know which buffer is currently last selected
/**
* @brief Set the current buffer selected
*/
void setCurrentSelect(void);
/**
* @brief Check if the current buffer is last selected
* @return true if selected last
*/
bool isSelectedLast(void);
};
};