2011-07-20 10:33:24 +02:00
|
|
|
/**
|
|
|
|
* @author Edouard DUPIN
|
2012-11-25 11:55:06 +01:00
|
|
|
*
|
|
|
|
* @copyright 2010, Edouard DUPIN, all right reserved
|
|
|
|
*
|
|
|
|
* @license GPL v3 (see license file)
|
2011-07-20 10:33:24 +02:00
|
|
|
*/
|
|
|
|
|
2013-10-25 20:49:26 +02:00
|
|
|
#include <appl/debug.h>
|
2012-04-24 09:42:14 +02:00
|
|
|
#include <appl/global.h>
|
2013-10-29 21:13:45 +01:00
|
|
|
#include <appl/BufferManager.h>
|
2013-12-28 14:23:25 +01:00
|
|
|
#include <etk/types.h>
|
2013-12-13 21:50:40 +01:00
|
|
|
#include <ewol/object/Object.h>
|
|
|
|
#include <ewol/object/Manager.h>
|
|
|
|
#include <ewol/resource/Manager.h>
|
2011-07-20 10:33:24 +02:00
|
|
|
|
|
|
|
#undef __class__
|
2013-10-28 21:47:51 +01:00
|
|
|
#define __class__ "BufferManager"
|
|
|
|
|
2013-10-29 21:13:45 +01:00
|
|
|
appl::BufferManager::BufferManager(void) :
|
2013-11-07 21:08:57 +01:00
|
|
|
ewol::Resource("???BufferManager???"),
|
|
|
|
m_bufferSelected(NULL) {
|
2013-11-20 21:57:00 +01:00
|
|
|
addObjectType("appl::BufferManager");
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
appl::BufferManager::~BufferManager(void) {
|
2013-11-27 21:33:34 +01:00
|
|
|
int32_t previousCount = m_list.size();
|
|
|
|
for (int32_t iii = m_list.size()-1; iii >= 0 ; --iii) {
|
2013-10-29 21:13:45 +01:00
|
|
|
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();
|
|
|
|
}
|
|
|
|
|
2013-11-15 23:42:00 +01:00
|
|
|
|
|
|
|
appl::Buffer* appl::BufferManager::createNewBuffer(void) {
|
|
|
|
appl::Buffer* tmp = new appl::Buffer();
|
|
|
|
if (tmp == NULL) {
|
|
|
|
APPL_ERROR("Can not allocate the Buffer (empty).");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
m_list.push_back(tmp);
|
|
|
|
sendMultiCast(appl::MsgSelectNewFile, tmp->getFileName());
|
|
|
|
return tmp;
|
|
|
|
}
|
|
|
|
|
2013-11-14 21:57:10 +01:00
|
|
|
appl::Buffer* appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) {
|
2013-11-27 21:33:34 +01:00
|
|
|
for (int32_t iii = 0; iii < m_list.size(); ++iii) {
|
2013-10-29 21:13:45 +01:00
|
|
|
if (m_list[iii] == NULL) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (m_list[iii]->getFileName() == _fileName) {
|
|
|
|
return m_list[iii];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (_createIfNeeded == true) {
|
2013-11-25 21:20:13 +01:00
|
|
|
if (etk::FSNodeGetType(_fileName) == etk::FSN_FOLDER) {
|
|
|
|
APPL_INFO("try open a folder : " << _fileName);
|
|
|
|
return NULL;
|
|
|
|
}
|
2013-10-29 21:13:45 +01:00
|
|
|
appl::Buffer* tmp = new appl::Buffer();
|
|
|
|
if (tmp == NULL) {
|
|
|
|
APPL_ERROR("Can not allocate the Buffer class : " << _fileName);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
tmp->loadFile(_fileName);
|
2013-11-14 21:57:10 +01:00
|
|
|
m_list.push_back(tmp);
|
2013-10-29 21:13:45 +01:00
|
|
|
return tmp;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
2013-11-07 21:08:57 +01:00
|
|
|
void appl::BufferManager::setBufferSelected(appl::Buffer* _bufferSelected) {
|
|
|
|
m_bufferSelected = _bufferSelected;
|
|
|
|
sendMultiCast(appl::MsgSelectChange, "");
|
|
|
|
}
|
2013-10-29 21:13:45 +01:00
|
|
|
|
2013-12-13 21:50:40 +01:00
|
|
|
void appl::BufferManager::onObjectRemove(ewol::Object * _removeObject) {
|
2013-11-07 21:08:57 +01:00
|
|
|
if (m_bufferSelected == _removeObject) {
|
|
|
|
setBufferSelected(NULL);
|
|
|
|
}
|
2013-11-27 21:33:34 +01:00
|
|
|
for (int32_t iii = 0; iii < m_list.size(); ++iii) {
|
2013-10-29 21:13:45 +01:00
|
|
|
if (m_list[iii] != _removeObject) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
m_list[iii] = NULL;
|
2013-11-14 21:57:10 +01:00
|
|
|
m_list.erase(m_list.begin()+iii);
|
2013-10-29 21:13:45 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-11-14 21:57:10 +01:00
|
|
|
bool appl::BufferManager::exist(const std::string& _fileName) {
|
2013-11-27 21:33:34 +01:00
|
|
|
for (int32_t iii = 0; iii < m_list.size(); ++iii) {
|
2013-10-30 21:16:38 +01:00
|
|
|
if (m_list[iii] == NULL) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (m_list[iii]->getFileName() == _fileName) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2013-11-14 21:57:10 +01:00
|
|
|
void appl::BufferManager::open(const std::string& _fileName) {
|
2013-11-25 21:20:13 +01:00
|
|
|
if (exist(_fileName) == true) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (get(_fileName, true) == NULL) {
|
|
|
|
return;
|
2013-10-30 21:16:38 +01:00
|
|
|
}
|
2013-11-25 21:20:13 +01:00
|
|
|
sendMultiCast(appl::MsgSelectNewFile, _fileName);
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
|
|
|
|
2013-12-13 21:50:40 +01:00
|
|
|
void appl::BufferManager::onReceiveMessage(const ewol::object::Message& _msg) {
|
2013-10-29 21:13:45 +01:00
|
|
|
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;
|
|
|
|
}
|