[DEV] buffer manager better work
This commit is contained in:
parent
7ddaa68bb0
commit
50c1830696
@ -118,6 +118,7 @@ bool appl::Buffer::loadFile(const etk::UString& _name) {
|
||||
setHighlightType("");
|
||||
etk::FSNode file(m_fileName);
|
||||
if (file.exist() == false) {
|
||||
APPL_INFO("File doesn not exist !!! " << file);
|
||||
return false;
|
||||
}
|
||||
m_nbLines = 0;
|
||||
@ -753,3 +754,4 @@ appl::HighlightInfo* appl::Buffer::getElementColorAtPosition(appl::DisplayHLData
|
||||
}
|
||||
return getElementColorAtPosition(_pos, _MData.posHLPass1);
|
||||
}
|
||||
|
||||
|
@ -514,16 +514,15 @@ namespace appl {
|
||||
|
||||
void regenerateHighLightAt(int32_t _pos, int32_t _nbDeleted, int32_t _nbAdded);
|
||||
void findMainHighLightPosition(int32_t _startPos,
|
||||
int32_t _endPos,
|
||||
int32_t& _startId,
|
||||
int32_t& _stopId,
|
||||
bool _backPreviousNotEnded);
|
||||
int32_t _endPos,
|
||||
int32_t& _startId,
|
||||
int32_t& _stopId,
|
||||
bool _backPreviousNotEnded);
|
||||
void generateHighLightAt(int32_t _pos, int32_t _endPos, int32_t _addingPos=0);
|
||||
void cleanHighLight(void);
|
||||
appl::HighlightInfo* getElementColorAtPosition(int32_t _pos, int32_t &_starPos);
|
||||
void hightlightGenerateLines(appl::DisplayHLData& _MData, int32_t _HLStart, int32_t _nbLines);
|
||||
appl::HighlightInfo* getElementColorAtPosition(appl::DisplayHLData& _MData, int32_t _pos);
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -8,13 +8,107 @@
|
||||
|
||||
#include <appl/debug.h>
|
||||
#include <appl/global.h>
|
||||
#include <BufferManager.h>
|
||||
#include <appl/BufferManager.h>
|
||||
#include <ewol/renderer/EObject.h>
|
||||
#include <ewol/renderer/EObjectManager.h>
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "BufferManager"
|
||||
|
||||
appl::BufferManager::BufferManager(void) :
|
||||
ewol::Resource("???BufferManager???") {
|
||||
|
||||
}
|
||||
|
||||
appl::BufferManager::~BufferManager(void) {
|
||||
esize_t previousCount = m_list.size();
|
||||
for (esize_t iii = m_list.size()-1; iii >= 0 ; --iii) {
|
||||
if (m_list[iii] == NULL) {
|
||||
continue;
|
||||
}
|
||||
delete(m_list[iii]);
|
||||
if (previousCount == m_list.size()) {
|
||||
APPL_ERROR("Error in removing buffer !! ");
|
||||
}
|
||||
previousCount = m_list.size();
|
||||
}
|
||||
m_list.clear();
|
||||
}
|
||||
|
||||
appl::Buffer* appl::BufferManager::get(const etk::UString& _fileName, bool _createIfNeeded) {
|
||||
for (esize_t iii = 0; iii < m_list.size(); ++iii) {
|
||||
if (m_list[iii] == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (m_list[iii]->getFileName() == _fileName) {
|
||||
return m_list[iii];
|
||||
}
|
||||
}
|
||||
if (_createIfNeeded == true) {
|
||||
appl::Buffer* tmp = new appl::Buffer();
|
||||
if (tmp == NULL) {
|
||||
APPL_ERROR("Can not allocate the Buffer class : " << _fileName);
|
||||
return NULL;
|
||||
}
|
||||
tmp->loadFile(_fileName);
|
||||
m_list.pushBack(tmp);
|
||||
return tmp;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void appl::BufferManager::onObjectRemove(ewol::EObject * _removeObject) {
|
||||
for (esize_t iii = 0; iii < m_list.size(); ++iii) {
|
||||
if (m_list[iii] != _removeObject) {
|
||||
continue;
|
||||
}
|
||||
m_list[iii] = NULL;
|
||||
m_list.remove(iii);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void appl::BufferManager::open(const etk::UString& _fileName) {
|
||||
(void)get(_fileName, true);
|
||||
sendMultiCast(appl::MsgSelectNewFile, _fileName);
|
||||
}
|
||||
|
||||
void appl::BufferManager::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||
APPL_DEBUG("receive message !!! " << _msg);
|
||||
}
|
||||
|
||||
appl::BufferManager* appl::BufferManager::keep(void) {
|
||||
//EWOL_INFO("KEEP : appl::GlyphPainting : file : \"" << _filename << "\"");
|
||||
appl::BufferManager* object = static_cast<appl::BufferManager*>(getManager().localKeep("???BufferManager???"));
|
||||
if (NULL != object) {
|
||||
return object;
|
||||
}
|
||||
// this element create a new one every time ....
|
||||
EWOL_INFO("CREATE : appl::BufferManager: ???BufferManager???");
|
||||
object = new appl::BufferManager();
|
||||
if (NULL == object) {
|
||||
EWOL_ERROR("allocation error of a resource : ???BufferManager???");
|
||||
return NULL;
|
||||
}
|
||||
getManager().localAdd(object);
|
||||
return object;
|
||||
}
|
||||
|
||||
void appl::BufferManager::release(appl::BufferManager*& _object) {
|
||||
if (NULL == _object) {
|
||||
return;
|
||||
}
|
||||
ewol::Resource* object2 = static_cast<ewol::Resource*>(_object);
|
||||
getManager().release(object2);
|
||||
_object = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef QSGDQSDFGSDFGSDFGZS8DFGHD_sDFGSDFGDGT
|
||||
|
||||
|
||||
class classBufferManager: public ewol::EObject {
|
||||
public:
|
||||
// Constructeur
|
||||
@ -399,30 +493,4 @@ appl::Buffer* get(esize_t _bufferID);
|
||||
esize_t size(void):
|
||||
|
||||
|
||||
|
||||
appl::BufferManager* appl::BufferManager::keep(void) {
|
||||
//EWOL_INFO("KEEP : appl::GlyphPainting : file : \"" << _filename << "\"");
|
||||
appl::GlyphPainting* object = static_cast<appl::GlyphPainting*>(getManager().localKeep("???BufferManager???"));
|
||||
if (NULL != object) {
|
||||
return object;
|
||||
}
|
||||
// this element create a new one every time ....
|
||||
EWOL_INFO("CREATE : appl::BufferManager: ???BufferManager???");
|
||||
object = new appl::BufferManager();
|
||||
if (NULL == object) {
|
||||
EWOL_ERROR("allocation error of a resource : ???BufferManager???");
|
||||
return NULL;
|
||||
}
|
||||
getManager().localAdd(object);
|
||||
return object;
|
||||
}
|
||||
|
||||
void appl::GlyphPainting::release(appl::BufferManager*& _object) {
|
||||
if (NULL == _object) {
|
||||
return;
|
||||
}
|
||||
ewol::Resource* object2 = static_cast<ewol::Resource*>(_object);
|
||||
getManager().release(object2);
|
||||
_object = NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -17,13 +17,31 @@
|
||||
namespace appl {
|
||||
class BufferManager : public ewol::Resource {
|
||||
protected:
|
||||
void BufferManager(void);
|
||||
void ~BufferManager(void);
|
||||
BufferManager(void);
|
||||
~BufferManager(void);
|
||||
private:
|
||||
etk::Vector<appl::Buffer*> m_list; // list of all buffer curently open
|
||||
public:
|
||||
appl::Buffer* get(const etk::UString& _filename);
|
||||
/**
|
||||
* @brief Get a specific buffer with his name (can create a new buffer).
|
||||
* @param[in] _fileName Name of the file to open.
|
||||
* @param[in] _createIfNeeded Create the buffer if not existed.
|
||||
* @return a pointer on the buffer
|
||||
*/
|
||||
appl::Buffer* get(const etk::UString& _fileName, bool _createIfNeeded=false);
|
||||
/**
|
||||
* @brief Load a specific file, event if it not existed:
|
||||
* @param[in] _fileName Name of the file to open or create.
|
||||
*/
|
||||
void open(const etk::UString& _fileName);
|
||||
/*
|
||||
appl::Buffer* get(esize_t _bufferID);
|
||||
esize_t size(void):
|
||||
|
||||
esize_t size(void);
|
||||
*/
|
||||
public: // herited function
|
||||
void onReceiveMessage(const ewol::EMessage& _msg);
|
||||
void onObjectRemove(ewol::EObject * _removeObject);
|
||||
public: // resource manager
|
||||
/**
|
||||
* @brief keep the resource pointer.
|
||||
* @note Never free this pointer by your own...
|
||||
|
@ -68,10 +68,10 @@ void BufferView::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||
// clean The list
|
||||
removeAllElement();
|
||||
// get all the buffer name and properties:
|
||||
int32_t nbBufferOpen = BufferManager::size();
|
||||
int32_t nbBufferOpen = 0; // BufferManager::size();
|
||||
for (int32_t iii=0; iii<nbBufferOpen; iii++) {
|
||||
/*
|
||||
if (BufferManager::exist(iii)) {
|
||||
/*
|
||||
BufferText* tmpBuffer = BufferManager::get(iii);
|
||||
if (NULL != tmpBuffer) {
|
||||
bool isModify = tmpBuffer->isModify();
|
||||
@ -83,15 +83,15 @@ void BufferView::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||
APPL_ERROR("Allocation error of the tmp buffer list element");
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
*/
|
||||
}
|
||||
if (true == globals::OrderTheBufferList() ) {
|
||||
SortElementList(m_list);
|
||||
}
|
||||
markToRedraw();
|
||||
}else if (_msg.getMessage() == ednMsgBufferId) {
|
||||
m_selectedIdRequested = BufferManager::getSelected();
|
||||
m_selectedIdRequested = 0; //BufferManager::getSelected();
|
||||
markToRedraw();
|
||||
}else if (_msg.getMessage() == ednMsgBufferState) {
|
||||
// update list of modify section ...
|
||||
|
@ -282,15 +282,15 @@ void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||
widget::FileChooser* tmpWidget = new widget::FileChooser();
|
||||
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());
|
||||
}
|
||||
*/
|
||||
}
|
||||
*/
|
||||
popUpWidgetPush(tmpWidget);
|
||||
tmpWidget->registerOnEvent(this, ewolEventFileChooserValidate, ednEventPopUpFileSelected);
|
||||
} else if (_msg.getMessage() == ednEventPopUpFileSelected) {
|
||||
@ -302,15 +302,14 @@ void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||
} else {
|
||||
m_currentSavingAsIdBuffer = -1;
|
||||
if (_msg.getData() == "current") {
|
||||
m_currentSavingAsIdBuffer = BufferManager::getSelected();
|
||||
m_currentSavingAsIdBuffer = -1;//BufferManager::getSelected();
|
||||
} 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);
|
||||
} else {
|
||||
/*
|
||||
BufferText* myBuffer = BufferManager::get(m_currentSavingAsIdBuffer);
|
||||
widget::FileChooser* tmpWidget = new widget::FileChooser();
|
||||
if (NULL == tmpWidget) {
|
||||
@ -330,16 +329,17 @@ void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||
popUpWidgetPush(tmpWidget);
|
||||
tmpWidget->registerOnEvent(this, ewolEventFileChooserValidate, ednEventPopUpFileSaveAs);
|
||||
}
|
||||
*/
|
||||
}
|
||||
*/
|
||||
}
|
||||
} else if (_msg.getMessage() == ednEventPopUpFileSaveAs) {
|
||||
// get the filename :
|
||||
etk::UString tmpData = _msg.getData();
|
||||
APPL_DEBUG("Request Saving As file : " << tmpData);
|
||||
|
||||
/*
|
||||
BufferManager::get(m_currentSavingAsIdBuffer)->setFileName(tmpData);
|
||||
sendMultiCast(ednMsgGuiSave, m_currentSavingAsIdBuffer);
|
||||
*/
|
||||
} else if( _msg.getMessage() == ednMsgBufferState
|
||||
|| _msg.getMessage() == ednMsgBufferId) {
|
||||
// the buffer change we need to update the widget string
|
||||
|
@ -33,6 +33,7 @@ appl::TextViewer::TextViewer(const etk::UString& _fontName, int32_t _fontSize) :
|
||||
registerMultiCast(ednMsgGuiFind);
|
||||
registerMultiCast(ednMsgGuiReplace);
|
||||
registerMultiCast(ednMsgGuiGotoLine);
|
||||
registerMultiCast(appl::MsgSelectNewFile);
|
||||
setLimitScrolling(0.2);
|
||||
|
||||
shortCutAdd("ctrl+w", ednMsgGuiRm, "Line");
|
||||
@ -40,6 +41,9 @@ appl::TextViewer::TextViewer(const etk::UString& _fontName, int32_t _fontSize) :
|
||||
shortCutAdd("ctrl+a", ednMsgGuiSelect, "ALL");
|
||||
shortCutAdd("ctrl+shift+a", ednMsgGuiSelect, "NONE");
|
||||
|
||||
// load buffer manager:
|
||||
m_bufferManager = appl::BufferManager::keep();
|
||||
|
||||
// load color properties
|
||||
m_paintingProperties = appl::GlyphPainting::keep("THEME:COLOR:textViewer.json");
|
||||
// get all id properties ...
|
||||
@ -65,6 +69,12 @@ appl::TextViewer::TextViewer(const etk::UString& _fontName, int32_t _fontSize) :
|
||||
|
||||
appl::TextViewer::~TextViewer(void) {
|
||||
appl::textPluginManager::disconnect(*this);
|
||||
if (m_paintingProperties != NULL) {
|
||||
appl::GlyphPainting::release(m_paintingProperties);
|
||||
}
|
||||
if (m_bufferManager != NULL) {
|
||||
appl::BufferManager::release(m_bufferManager);
|
||||
}
|
||||
}
|
||||
|
||||
bool appl::TextViewer::calculateMinSize(void) {
|
||||
@ -519,13 +529,24 @@ void appl::TextViewer::onEventClipboard(ewol::clipBoard::clipboardListe_te _clip
|
||||
|
||||
void appl::TextViewer::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||
// First call plugin
|
||||
//APPL_DEBUG("receive msg: " << _msg);
|
||||
if (appl::textPluginManager::onReceiveMessage(*this, _msg) == true) {
|
||||
markToRedraw();
|
||||
return;
|
||||
}
|
||||
if (_msg.getMessage() == appl::MsgSelectNewFile) {
|
||||
m_buffer = m_bufferManager->get(_msg.getData());
|
||||
}
|
||||
markToRedraw();
|
||||
}
|
||||
|
||||
void appl::TextViewer::onObjectRemove(ewol::EObject* _removeObject) {
|
||||
if (m_buffer == _removeObject) {
|
||||
m_buffer = NULL;
|
||||
markToRedraw();
|
||||
}
|
||||
}
|
||||
|
||||
void appl::TextViewer::onGetFocus(void) {
|
||||
showKeyboard();
|
||||
APPL_INFO("Focus - In");
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <ewol/widget/WidgetScrolled.h>
|
||||
#include <ewol/compositing/Text.h>
|
||||
#include <ewol/compositing/Drawing.h>
|
||||
#include <appl/BufferManager.h>
|
||||
|
||||
namespace appl {
|
||||
class TextViewerPlugin;
|
||||
@ -38,6 +39,8 @@ namespace appl {
|
||||
esize_t m_colorLineNumber;
|
||||
esize_t m_colorSelection;
|
||||
esize_t m_colorNormal;
|
||||
private:
|
||||
appl::BufferManager* m_bufferManager; //!< handle on the buffer manager
|
||||
public:
|
||||
TextViewer(const etk::UString& _fontName="", int32_t _fontSize=-1);
|
||||
virtual ~TextViewer(void);
|
||||
@ -55,6 +58,7 @@ namespace appl {
|
||||
virtual bool calculateMinSize(void);
|
||||
virtual void onRegenerateDisplay(void);
|
||||
virtual void onReceiveMessage(const ewol::EMessage& _msg);
|
||||
virtual void onObjectRemove(ewol::EObject* _removeObject);
|
||||
virtual bool onEventInput(const ewol::EventInput& _event);
|
||||
virtual bool onEventEntry(const ewol::EventEntry& _event);
|
||||
virtual void onEventClipboard(ewol::clipBoard::clipboardListe_te clipboardID);
|
||||
|
@ -167,8 +167,8 @@ void CTagsManager::loadTagFile(void) {
|
||||
|
||||
void CTagsManager::registerHistory(void) {
|
||||
APPL_INFO("save curent filename and position : ");
|
||||
int32_t currentSelected = BufferManager::getSelected();
|
||||
/*
|
||||
int32_t currentSelected = BufferManager::getSelected();
|
||||
BufferText* tmpBuf = BufferManager::get(currentSelected);
|
||||
if (NULL != tmpBuf) {
|
||||
etk::FSNode * bufferFilename = new etk::FSNode();
|
||||
|
@ -58,3 +58,6 @@ extern const char* const ednMsgBufferListChange = "edn-Msg-BufferListChange";
|
||||
extern const char* const ednMsgBufferColor = "edn-Msg-Buffer-Color";
|
||||
|
||||
|
||||
extern const char* const appl::MsgSelectNewFile = "edn-msg-select-new-file";
|
||||
|
||||
|
||||
|
@ -57,6 +57,9 @@
|
||||
|
||||
extern const char* const ednMsgBufferColor; // data : "new"
|
||||
|
||||
namespace appl {
|
||||
extern const char* const MsgSelectNewFile; // data : "buffer/name"
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -40,7 +40,7 @@ int main(int _argc, const char *_argv[])
|
||||
// only one things to do:
|
||||
return ewol::run(_argc, _argv);
|
||||
}
|
||||
|
||||
appl::BufferManager* bufferManager = NULL;
|
||||
|
||||
/**
|
||||
* @brief main application function initialisation
|
||||
@ -71,7 +71,7 @@ bool APP_Init(ewol::eContext& _context)
|
||||
|
||||
// init ALL Singleton :
|
||||
//(void)CTagsManager::getInstance();
|
||||
BufferManager::init();
|
||||
bufferManager = appl::BufferManager::keep();
|
||||
|
||||
appl::highlightManager::init();
|
||||
cTagsManager::init();
|
||||
@ -113,7 +113,7 @@ bool APP_Init(ewol::eContext& _context)
|
||||
_context.getEObjectManager().multiCast().anonymousSend(ednMsgCtagsLoadFile, tmpppp);
|
||||
} else {
|
||||
APPL_INFO("need load file : \"" << tmpppp << "\"" );
|
||||
_context.getEObjectManager().multiCast().anonymousSend(ednMsgOpenFile, tmpppp);
|
||||
bufferManager->open(tmpppp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,8 +142,11 @@ void APP_UnInit(ewol::eContext& _context)
|
||||
APPL_INFO("Stop Hightlight");
|
||||
appl::highlightManager::unInit();
|
||||
//Kill all singleton
|
||||
APPL_INFO("Stop BufferManager");
|
||||
BufferManager::unInit();
|
||||
if (bufferManager != NULL) {
|
||||
APPL_INFO("Stop BufferManager");
|
||||
appl::BufferManager::release(bufferManager);
|
||||
bufferManager = NULL;
|
||||
}
|
||||
APPL_INFO(" == > Un-Init "PROJECT_NAME" (END)");
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user