edn/sources/appl/BufferManager.cpp

148 lines
3.7 KiB
C++
Raw Normal View History

/**
* @author Edouard DUPIN
2012-11-25 11:55:06 +01:00
*
* @copyright 2010, Edouard DUPIN, all right reserved
*
* @license GPL v3 (see license file)
*/
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>
#undef __class__
#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) {
addObjectType("appl::BufferManager");
2013-10-29 21:13:45 +01:00
}
appl::BufferManager::~BufferManager(void) {
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();
}
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) {
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);
}
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) {
for (int32_t iii = 0; iii < m_list.size(); ++iii) {
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-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;
}