[DEV] multiple save and close start to work
This commit is contained in:
parent
e32253cd98
commit
9ca83d1718
@ -33,7 +33,9 @@
|
|||||||
#include <date/date.h>
|
#include <date/date.h>
|
||||||
#include <ewol/widget/meta/StdPopUp.h>
|
#include <ewol/widget/meta/StdPopUp.h>
|
||||||
#include <appl/Gui/WorkerSaveFile.h>
|
#include <appl/Gui/WorkerSaveFile.h>
|
||||||
|
#include <appl/Gui/WorkerSaveAllFile.h>
|
||||||
#include <appl/Gui/WorkerCloseFile.h>
|
#include <appl/Gui/WorkerCloseFile.h>
|
||||||
|
#include <appl/Gui/WorkerCloseAllFile.h>
|
||||||
|
|
||||||
namespace appl
|
namespace appl
|
||||||
{
|
{
|
||||||
@ -357,7 +359,7 @@ void MainWindows::onReceiveMessage(const ewol::EMessage& _msg) {
|
|||||||
} else if (_msg.getMessage() == ednMsgGuiSave) {
|
} else if (_msg.getMessage() == ednMsgGuiSave) {
|
||||||
APPL_DEBUG("Request saving the file : " << _msg.getData());
|
APPL_DEBUG("Request saving the file : " << _msg.getData());
|
||||||
if (to_lower(_msg.getData()) == "current") {
|
if (to_lower(_msg.getData()) == "current") {
|
||||||
appl::WorkerSaveFile* tmpWorker = new appl::WorkerSaveFile("");
|
appl::WorkerSaveFile* tmpWorker = new appl::WorkerSaveFile("", false);
|
||||||
#if 0
|
#if 0
|
||||||
appl::Buffer* tmpBuffer = m_bufferManager->getBufferSelected();
|
appl::Buffer* tmpBuffer = m_bufferManager->getBufferSelected();
|
||||||
if (tmpBuffer == NULL) {
|
if (tmpBuffer == NULL) {
|
||||||
|
@ -0,0 +1,93 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2010, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license GPL v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ewol/renderer/eContext.h>
|
||||||
|
#include <appl/debug.h>
|
||||||
|
#include <appl/Gui/WorkerCloseAllFile.h>
|
||||||
|
|
||||||
|
#undef __class__
|
||||||
|
#define __class__ "WorkerCloseAllFile"
|
||||||
|
|
||||||
|
static const char* s_closeDone = "close-done";
|
||||||
|
|
||||||
|
appl::WorkerCloseAllFile::WorkerCloseAllFile(void) :
|
||||||
|
m_worker(NULL),
|
||||||
|
m_bufferManager(NULL) {
|
||||||
|
// load buffer manager:
|
||||||
|
m_bufferManager = appl::BufferManager::keep();
|
||||||
|
|
||||||
|
if (m_bufferManager == NULL) {
|
||||||
|
APPL_ERROR("can not call unexistant buffer manager ... ");
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// List all current open file :
|
||||||
|
for (int64_t iii=m_bufferManager->size()-1; iii>=0; --iii) {
|
||||||
|
appl::Buffer* tmpBuffer = m_bufferManager->get(iii);
|
||||||
|
if (tmpBuffer == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (tmpBuffer->isModify() == false) {
|
||||||
|
tmpBuffer->removeObject();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
m_bufferNameList.push_back(tmpBuffer->getFileName());
|
||||||
|
}
|
||||||
|
// checkif an element has something to do in the queue
|
||||||
|
if (m_bufferNameList.size() == 0) {
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// create the worker :
|
||||||
|
m_worker = new appl::WorkerCloseFile(m_bufferNameList.front());
|
||||||
|
// remove first element :
|
||||||
|
m_bufferNameList.erase(m_bufferNameList.begin());
|
||||||
|
if (m_bufferNameList.size() == 0) {
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_worker->registerOnEvent(this, appl::WorkerCloseFile::eventCloseDone, s_closeDone);
|
||||||
|
}
|
||||||
|
|
||||||
|
appl::WorkerCloseAllFile::~WorkerCloseAllFile(void) {
|
||||||
|
appl::BufferManager::release(m_bufferManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
void appl::WorkerCloseAllFile::onReceiveMessage(const ewol::EMessage& _msg) {
|
||||||
|
if (m_bufferManager == NULL) {
|
||||||
|
// nothing to do in this case ==> can do nothing ...
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (_msg.getMessage() == s_closeDone) {
|
||||||
|
if (m_bufferNameList.size() == 0) {
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// create the worker :
|
||||||
|
m_worker = new appl::WorkerCloseFile(m_bufferNameList.front());
|
||||||
|
// remove first element :
|
||||||
|
m_bufferNameList.erase(m_bufferNameList.begin());
|
||||||
|
if (m_bufferNameList.size() == 0) {
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_worker->registerOnEvent(this, appl::WorkerCloseFile::eventCloseDone, s_closeDone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void appl::WorkerCloseAllFile::onObjectRemove(ewol::EObject* _removeObject) {
|
||||||
|
if (_removeObject == m_worker) {
|
||||||
|
m_worker = NULL;
|
||||||
|
APPL_VERBOSE("AutoRemove After saving sub widget ...");
|
||||||
|
autoDestroy();
|
||||||
|
} else if (_removeObject == m_bufferManager) {
|
||||||
|
m_bufferManager = NULL;
|
||||||
|
autoDestroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2010, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license GPL v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WORKER_CLOSE_ALL_FILE_H__
|
||||||
|
#define __WORKER_CLOSE_ALL_FILE_H__
|
||||||
|
|
||||||
|
#include <appl/BufferManager.h>
|
||||||
|
#include <appl/Gui/WorkerCloseFile.h>
|
||||||
|
|
||||||
|
namespace appl {
|
||||||
|
class WorkerCloseAllFile : public ewol::EObject {
|
||||||
|
public:
|
||||||
|
WorkerCloseAllFile(void);
|
||||||
|
virtual ~WorkerCloseAllFile(void);
|
||||||
|
private:
|
||||||
|
std::vector<std::string> m_bufferNameList;
|
||||||
|
appl::WorkerCloseFile* m_worker; //! pop-up element that is open...
|
||||||
|
appl::BufferManager* m_bufferManager; //!< handle on the buffer manager
|
||||||
|
public: // derived function
|
||||||
|
virtual void onReceiveMessage(const ewol::EMessage& _msg);
|
||||||
|
virtual void onObjectRemove(ewol::EObject * _removeObject);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -9,19 +9,23 @@
|
|||||||
#include <ewol/renderer/eContext.h>
|
#include <ewol/renderer/eContext.h>
|
||||||
#include <appl/debug.h>
|
#include <appl/debug.h>
|
||||||
#include <appl/Gui/WorkerCloseFile.h>
|
#include <appl/Gui/WorkerCloseFile.h>
|
||||||
|
#include <ewol/widget/meta/StdPopUp.h>
|
||||||
|
|
||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "WorkerCloseFile"
|
#define __class__ "WorkerCloseFile"
|
||||||
|
|
||||||
|
const char* appl::WorkerCloseFile::eventCloseDone = "close-file-done";
|
||||||
|
|
||||||
static const char* s_saveAsValidate = "save-as-validate";
|
static const char* s_saveAsValidate = "save-as-validate";
|
||||||
static const char* s_saveValidate = "save-validate";
|
static const char* s_saveValidate = "save-validate";
|
||||||
static const char* s_closeValidate = "close-validate";
|
static const char* s_closeValidate = "close-validate";
|
||||||
|
static const char* s_saveAsDone = "save-as-done";
|
||||||
|
|
||||||
appl::WorkerCloseFile::WorkerCloseFile(const std::string& _bufferName) :
|
appl::WorkerCloseFile::WorkerCloseFile(const std::string& _bufferName) :
|
||||||
m_closeAfter(_close),
|
|
||||||
m_bufferName(_bufferName),
|
m_bufferName(_bufferName),
|
||||||
m_worker(NULL),
|
m_worker(NULL),
|
||||||
m_bufferManager(NULL) {
|
m_bufferManager(NULL) {
|
||||||
|
addEventId(eventCloseDone);
|
||||||
// load buffer manager:
|
// load buffer manager:
|
||||||
m_bufferManager = appl::BufferManager::keep();
|
m_bufferManager = appl::BufferManager::keep();
|
||||||
|
|
||||||
@ -30,6 +34,16 @@ appl::WorkerCloseFile::WorkerCloseFile(const std::string& _bufferName) :
|
|||||||
autoDestroy();
|
autoDestroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (m_bufferName == "") {
|
||||||
|
// need to find the curent file ...
|
||||||
|
appl::Buffer* tmpp = m_bufferManager->getBufferSelected();
|
||||||
|
if (tmpp == NULL) {
|
||||||
|
APPL_ERROR("No selected buffer now ...");
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_bufferName = tmpp->getFileName();
|
||||||
|
}
|
||||||
if (m_bufferManager->exist(m_bufferName) == false) {
|
if (m_bufferManager->exist(m_bufferName) == false) {
|
||||||
APPL_ERROR("Try to close an non-existant file :" << m_bufferName);
|
APPL_ERROR("Try to close an non-existant file :" << m_bufferName);
|
||||||
autoDestroy();
|
autoDestroy();
|
||||||
@ -43,8 +57,7 @@ appl::WorkerCloseFile::WorkerCloseFile(const std::string& _bufferName) :
|
|||||||
}
|
}
|
||||||
if (tmpBuffer->isModify() == false) {
|
if (tmpBuffer->isModify() == false) {
|
||||||
tmpBuffer->removeObject();
|
tmpBuffer->removeObject();
|
||||||
// TODO : Send message ...
|
generateEventId(eventCloseDone);
|
||||||
|
|
||||||
autoDestroy();
|
autoDestroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -94,10 +107,45 @@ void appl::WorkerCloseFile::onReceiveMessage(const ewol::EMessage& _msg) {
|
|||||||
APPL_DEBUG("have message : " << _msg);
|
APPL_DEBUG("have message : " << _msg);
|
||||||
if (_msg.getMessage() == s_saveAsValidate) {
|
if (_msg.getMessage() == s_saveAsValidate) {
|
||||||
|
|
||||||
|
appl::WorkerSaveFile* tmpWorker = new appl::WorkerSaveFile(m_bufferName);
|
||||||
|
m_worker->registerOnEvent(this, appl::WorkerSaveFile::eventSaveDone, s_saveAsDone);
|
||||||
} else if (_msg.getMessage() == s_saveValidate) {
|
} else if (_msg.getMessage() == s_saveValidate) {
|
||||||
|
if (m_bufferManager->exist(m_bufferName) == false) {
|
||||||
} else if (_msg.getMessage() == s_closeValidate) {
|
APPL_ERROR("Try to close an non-existant file :" << m_bufferName);
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
appl::Buffer* tmpBuffer = m_bufferManager->get(m_bufferName);
|
||||||
|
if (tmpBuffer == NULL) {
|
||||||
|
APPL_ERROR("Error to get the buffer : " << m_bufferName);
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (tmpBuffer->storeFile() == false) {
|
||||||
|
ewol::Windows* tmpWindows = ewol::getContext().getWindows();
|
||||||
|
if (tmpWindows == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tmpWindows->displayWarningMessage("We can not save the file : <br/><i>" + tmpBuffer->getFileName() + "</i>");
|
||||||
|
} else {
|
||||||
|
generateEventId(eventCloseDone);
|
||||||
|
}
|
||||||
|
} else if ( _msg.getMessage() == s_closeValidate
|
||||||
|
|| _msg.getMessage() == s_saveAsDone) {
|
||||||
|
if (m_bufferManager->exist(m_bufferName) == false) {
|
||||||
|
APPL_ERROR("Try to close an non-existant file :" << m_bufferName);
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
appl::Buffer* tmpBuffer = m_bufferManager->get(m_bufferName);
|
||||||
|
if (tmpBuffer == NULL) {
|
||||||
|
APPL_ERROR("Error to get the buffer : " << m_bufferName);
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tmpBuffer->removeObject();
|
||||||
|
generateEventId(eventCloseDone);
|
||||||
|
tmpBuffer = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
|
|
||||||
namespace appl {
|
namespace appl {
|
||||||
class WorkerCloseFile : public ewol::EObject {
|
class WorkerCloseFile : public ewol::EObject {
|
||||||
|
public:
|
||||||
|
static const char* eventCloseDone;
|
||||||
public:
|
public:
|
||||||
// note : if == "" ==> current ...
|
// note : if == "" ==> current ...
|
||||||
WorkerCloseFile(const std::string& _bufferName);
|
WorkerCloseFile(const std::string& _bufferName);
|
||||||
|
@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
#include <ewol/renderer/eContext.h>
|
#include <ewol/renderer/eContext.h>
|
||||||
#include <appl/debug.h>
|
#include <appl/debug.h>
|
||||||
#include <appl/Gui/WorkerSaveFile.h>
|
#include <appl/Gui/WorkerSaveAllFile.h>
|
||||||
|
|
||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "WorkerSaveFile"
|
#define __class__ "WorkerSaveAllFile"
|
||||||
|
|
||||||
static const char* s_saveAsDone = "save-as-done";
|
static const char* s_saveAsDone = "save-as-done";
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ appl::WorkerSaveAllFile::WorkerSaveAllFile(void) :
|
|||||||
// create the worker :
|
// create the worker :
|
||||||
m_worker = new appl::WorkerSaveFile(m_bufferNameList.front());
|
m_worker = new appl::WorkerSaveFile(m_bufferNameList.front());
|
||||||
// remove first element :
|
// remove first element :
|
||||||
m_bufferNameList.pop_front();
|
m_bufferNameList.erase(m_bufferNameList.begin());
|
||||||
if (m_bufferNameList.size() == 0) {
|
if (m_bufferNameList.size() == 0) {
|
||||||
autoDestroy();
|
autoDestroy();
|
||||||
return;
|
return;
|
||||||
@ -74,7 +74,7 @@ void appl::WorkerSaveAllFile::onReceiveMessage(const ewol::EMessage& _msg) {
|
|||||||
// create the worker :
|
// create the worker :
|
||||||
m_worker = new appl::WorkerSaveFile(m_bufferNameList.front());
|
m_worker = new appl::WorkerSaveFile(m_bufferNameList.front());
|
||||||
// remove first element :
|
// remove first element :
|
||||||
m_bufferNameList.pop_front();
|
m_bufferNameList.erase(m_bufferNameList.begin());
|
||||||
if (m_bufferNameList.size() == 0) {
|
if (m_bufferNameList.size() == 0) {
|
||||||
autoDestroy();
|
autoDestroy();
|
||||||
return;
|
return;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#undef __class__
|
#undef __class__
|
||||||
#define __class__ "WorkerSaveFile"
|
#define __class__ "WorkerSaveFile"
|
||||||
|
|
||||||
static const char* appl::WorkerSaveFile::eventSaveDone = "save-file-done";
|
const char* appl::WorkerSaveFile::eventSaveDone = "save-file-done";
|
||||||
|
|
||||||
static const char* s_saveAsValidate = "save-as-validate";
|
static const char* s_saveAsValidate = "save-as-validate";
|
||||||
|
|
||||||
@ -30,7 +30,16 @@ appl::WorkerSaveFile::WorkerSaveFile(const std::string& _bufferName, bool _force
|
|||||||
autoDestroy();
|
autoDestroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO : if "" ==> it is current buffer selected ...
|
if (m_bufferName == "") {
|
||||||
|
// need to find the curent file ...
|
||||||
|
appl::Buffer* tmpp = m_bufferManager->getBufferSelected();
|
||||||
|
if (tmpp == NULL) {
|
||||||
|
APPL_ERROR("No selected buffer now ...");
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_bufferName = tmpp->getFileName();
|
||||||
|
}
|
||||||
if (m_bufferManager->exist(m_bufferName) == false) {
|
if (m_bufferManager->exist(m_bufferName) == false) {
|
||||||
APPL_ERROR("Try to save an non-existant file :" << m_bufferName);
|
APPL_ERROR("Try to save an non-existant file :" << m_bufferName);
|
||||||
autoDestroy();
|
autoDestroy();
|
||||||
@ -42,6 +51,14 @@ appl::WorkerSaveFile::WorkerSaveFile(const std::string& _bufferName, bool _force
|
|||||||
autoDestroy();
|
autoDestroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (_forceSaveAs == false) {
|
||||||
|
if (tmpBuffer->hasFileName() == true) {
|
||||||
|
tmpBuffer->storeFile();
|
||||||
|
generateEventId(eventSaveDone);
|
||||||
|
autoDestroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
m_chooser = new widget::FileChooser();
|
m_chooser = new widget::FileChooser();
|
||||||
if (NULL == m_chooser) {
|
if (NULL == m_chooser) {
|
||||||
APPL_ERROR("Can not allocate widget == > display might be in error");
|
APPL_ERROR("Can not allocate widget == > display might be in error");
|
||||||
@ -93,6 +110,8 @@ void appl::WorkerSaveFile::onReceiveMessage(const ewol::EMessage& _msg) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tmpWindows->displayWarningMessage("We can not save the file : <br/><i>" + tmpBuffer->getFileName() + "</i>");
|
tmpWindows->displayWarningMessage("We can not save the file : <br/><i>" + tmpBuffer->getFileName() + "</i>");
|
||||||
|
} else {
|
||||||
|
generateEventId(eventSaveDone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ namespace appl {
|
|||||||
public:
|
public:
|
||||||
static const char* eventSaveDone;
|
static const char* eventSaveDone;
|
||||||
public:
|
public:
|
||||||
WorkerSaveFile(const std::string& _bufferName, bool _forceSaveAs=false);
|
WorkerSaveFile(const std::string& _bufferName, bool _forceSaveAs=true);
|
||||||
virtual ~WorkerSaveFile(void);
|
virtual ~WorkerSaveFile(void);
|
||||||
private:
|
private:
|
||||||
std::string m_bufferName;
|
std::string m_bufferName;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user