2016-05-02 22:01:55 +02:00
|
|
|
/** @file
|
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
|
|
|
*/
|
2016-10-03 22:01:55 +02:00
|
|
|
#include <etk/types.hpp>
|
|
|
|
#include <etk/os/FSNode.hpp>
|
|
|
|
#include <appl/debug.hpp>
|
|
|
|
#include <appl/global.hpp>
|
|
|
|
#include <appl/BufferManager.hpp>
|
|
|
|
#include <ewol/object/Object.hpp>
|
|
|
|
#include <ewol/object/Manager.hpp>
|
|
|
|
#include <esignal/Signal.hpp>
|
|
|
|
#include <gale/resource/Manager.hpp>
|
2011-07-20 10:33:24 +02:00
|
|
|
|
2014-08-25 22:44:42 +02:00
|
|
|
appl::BufferManager::BufferManager() :
|
2016-03-02 21:51:44 +01:00
|
|
|
signalNewBuffer(this, "new-buffer", ""),
|
|
|
|
signalSelectFile(this, "select-buffer", ""),
|
|
|
|
signalTextSelectionChange(this, "text-selection-change", ""),
|
|
|
|
signalRemoveBuffer(this, "remove-buffer", "") {
|
2013-11-20 21:57:00 +01:00
|
|
|
addObjectType("appl::BufferManager");
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
|
|
|
|
2014-05-15 21:37:39 +02:00
|
|
|
appl::BufferManager::~BufferManager() {
|
2013-10-29 21:13:45 +01:00
|
|
|
m_list.clear();
|
|
|
|
}
|
|
|
|
|
2013-11-15 23:42:00 +01:00
|
|
|
|
2016-07-19 22:03:39 +02:00
|
|
|
ememory::SharedPtr<appl::Buffer> appl::BufferManager::createNewBuffer() {
|
|
|
|
ememory::SharedPtr<appl::Buffer> tmp = appl::Buffer::create();
|
2014-06-05 22:01:24 +02:00
|
|
|
if (tmp == nullptr) {
|
2013-11-15 23:42:00 +01:00
|
|
|
APPL_ERROR("Can not allocate the Buffer (empty).");
|
2014-06-05 22:01:24 +02:00
|
|
|
return nullptr;
|
2013-11-15 23:42:00 +01:00
|
|
|
}
|
2016-07-19 22:03:39 +02:00
|
|
|
tmp->setParent(ewol::Object::sharedFromThis());
|
2013-11-15 23:42:00 +01:00
|
|
|
m_list.push_back(tmp);
|
2014-08-25 22:44:42 +02:00
|
|
|
APPL_INFO("Create a new Buffer");
|
|
|
|
signalNewBuffer.emit(tmp->getFileName());
|
|
|
|
APPL_INFO("Create a new Buffer (done)");
|
|
|
|
APPL_INFO("select Buffer");
|
|
|
|
signalSelectFile.emit(tmp->getFileName());
|
|
|
|
APPL_INFO("select Buffer (done)");
|
2013-11-15 23:42:00 +01:00
|
|
|
return tmp;
|
|
|
|
}
|
|
|
|
|
2016-07-19 22:03:39 +02:00
|
|
|
ememory::SharedPtr<appl::Buffer> appl::BufferManager::get(const std::string& _fileName, bool _createIfNeeded) {
|
2014-08-25 22:44:42 +02:00
|
|
|
APPL_INFO("get('" << _fileName << "'," << _createIfNeeded << ")");
|
2014-05-25 21:17:06 +02:00
|
|
|
for (auto &it : m_list) {
|
2014-06-05 22:01:24 +02:00
|
|
|
if (it == nullptr) {
|
2013-10-29 21:13:45 +01:00
|
|
|
continue;
|
|
|
|
}
|
2014-05-25 21:17:06 +02:00
|
|
|
if (it->getFileName() == _fileName) {
|
|
|
|
return it;
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (_createIfNeeded == true) {
|
2016-04-08 22:10:37 +02:00
|
|
|
if (etk::FSNodeGetType(_fileName) == etk::typeNode_folder) {
|
2014-05-13 21:48:20 +02:00
|
|
|
APPL_WARNING("try open a folder : " << _fileName);
|
|
|
|
APPL_CRITICAL("plop");
|
2014-06-05 22:01:24 +02:00
|
|
|
return nullptr;
|
2013-11-25 21:20:13 +01:00
|
|
|
}
|
2016-07-19 22:03:39 +02:00
|
|
|
ememory::SharedPtr<appl::Buffer> tmp = appl::Buffer::create();
|
2014-06-05 22:01:24 +02:00
|
|
|
if (tmp == nullptr) {
|
2013-10-29 21:13:45 +01:00
|
|
|
APPL_ERROR("Can not allocate the Buffer class : " << _fileName);
|
2014-06-05 22:01:24 +02:00
|
|
|
return nullptr;
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
2016-07-19 22:03:39 +02:00
|
|
|
tmp->setParent(ewol::Object::sharedFromThis());
|
2013-10-29 21:13:45 +01:00
|
|
|
tmp->loadFile(_fileName);
|
2013-11-14 21:57:10 +01:00
|
|
|
m_list.push_back(tmp);
|
2014-08-25 22:44:42 +02:00
|
|
|
APPL_INFO("Creata a open Buffer");
|
|
|
|
signalNewBuffer.emit(tmp->getFileName());
|
|
|
|
APPL_INFO("Creata a open Buffer (done)");
|
2013-10-29 21:13:45 +01:00
|
|
|
return tmp;
|
|
|
|
}
|
2014-06-05 22:01:24 +02:00
|
|
|
return nullptr;
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
2014-08-25 22:44:42 +02:00
|
|
|
|
2016-07-19 22:03:39 +02:00
|
|
|
void appl::BufferManager::setBufferSelected(ememory::SharedPtr<appl::Buffer> _bufferSelected) {
|
2013-11-07 21:08:57 +01:00
|
|
|
m_bufferSelected = _bufferSelected;
|
2014-08-25 22:44:42 +02:00
|
|
|
if (m_bufferSelected == nullptr) {
|
|
|
|
APPL_ERROR("select a NULL buffer ...");
|
2016-02-11 21:45:21 +01:00
|
|
|
propertySetOnWidgetNamed("appl-widget-display-name", "value", "---");
|
2014-08-25 22:44:42 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
APPL_INFO("Set buffer selected");
|
|
|
|
//signalSelectFile.emit(m_bufferSelected->getName());
|
2016-02-11 21:45:21 +01:00
|
|
|
//propertySetOnWidgetNamed("appl-widget-display-name", "value", m_bufferSelected->getName());
|
2014-08-25 22:44:42 +02:00
|
|
|
APPL_INFO("Set buffer selected (done)");
|
2013-11-07 21:08:57 +01:00
|
|
|
}
|
2013-10-29 21:13:45 +01:00
|
|
|
|
2016-07-19 22:03:39 +02:00
|
|
|
ememory::SharedPtr<appl::Buffer> appl::BufferManager::get(int32_t _id) {
|
2014-05-25 21:17:06 +02:00
|
|
|
int32_t id = 0;
|
2014-06-02 21:04:35 +02:00
|
|
|
for (auto &it : m_list) {
|
2014-05-25 21:17:06 +02:00
|
|
|
if (id == _id) {
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
id++;
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
2014-05-25 21:17:06 +02:00
|
|
|
return m_list.back();
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
|
|
|
|
2013-11-14 21:57:10 +01:00
|
|
|
bool appl::BufferManager::exist(const std::string& _fileName) {
|
2014-06-02 21:04:35 +02:00
|
|
|
for (auto &it : m_list) {
|
2014-05-25 21:17:06 +02:00
|
|
|
if (it == nullptr) {
|
2013-10-30 21:16:38 +01:00
|
|
|
continue;
|
|
|
|
}
|
2014-05-25 21:17:06 +02:00
|
|
|
if (it->getFileName() == _fileName) {
|
2013-10-30 21:16:38 +01:00
|
|
|
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) {
|
2014-09-12 21:36:20 +02:00
|
|
|
APPL_WARNING(" the element '" << _fileName << "' already exist ... just reselect it ...");
|
|
|
|
signalSelectFile.emit(_fileName);
|
2016-02-11 21:45:21 +01:00
|
|
|
propertySetOnWidgetNamed("appl-widget-display-name", "value", etk::FSNodeGetRealName(_fileName));
|
2013-11-25 21:20:13 +01:00
|
|
|
return;
|
|
|
|
}
|
2014-06-05 22:01:24 +02:00
|
|
|
if (get(_fileName, true) == nullptr) {
|
2014-09-12 21:36:20 +02:00
|
|
|
APPL_ERROR("Error get '" << _fileName << "' ... ");
|
2013-11-25 21:20:13 +01:00
|
|
|
return;
|
2013-10-30 21:16:38 +01:00
|
|
|
}
|
2014-08-25 22:44:42 +02:00
|
|
|
signalSelectFile.emit(_fileName);
|
2016-02-11 21:45:21 +01:00
|
|
|
propertySetOnWidgetNamed("appl-widget-display-name", "value", etk::FSNodeGetRealName(_fileName));
|
2013-10-29 21:13:45 +01:00
|
|
|
}
|
|
|
|
|
2016-07-19 22:03:39 +02:00
|
|
|
void appl::BufferManager::requestDestroyFromChild(const ememory::SharedPtr<Object>& _child) {
|
2014-09-12 22:10:32 +02:00
|
|
|
APPL_WARNING("Buffer request a close...");
|
2014-09-15 07:21:22 +02:00
|
|
|
bool find = false;
|
|
|
|
int32_t newValue = -1;
|
2014-09-12 22:10:32 +02:00
|
|
|
auto it = m_list.begin();
|
|
|
|
while(it != m_list.end()) {
|
|
|
|
if (*it == nullptr) {
|
|
|
|
it = m_list.erase(it);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (*it == _child) {
|
|
|
|
it = m_list.erase(it);
|
2014-09-15 07:21:22 +02:00
|
|
|
find = true;
|
|
|
|
break;
|
2014-09-12 22:10:32 +02:00
|
|
|
}
|
2014-09-15 07:21:22 +02:00
|
|
|
newValue++;
|
2014-09-12 22:10:32 +02:00
|
|
|
++it;
|
|
|
|
}
|
2014-09-15 07:21:22 +02:00
|
|
|
if (find == true) {
|
2016-07-19 22:03:39 +02:00
|
|
|
signalRemoveBuffer.emit(ememory::dynamicPointerCast<appl::Buffer>(_child));
|
2014-09-15 07:21:22 +02:00
|
|
|
}
|
|
|
|
if (m_bufferSelected == _child) {
|
2015-10-21 22:10:13 +02:00
|
|
|
if ( it != m_list.end()
|
|
|
|
&& *it != nullptr) {
|
2015-10-21 22:12:01 +02:00
|
|
|
APPL_VERBOSE("Remove buffer select new one");
|
2015-10-21 22:10:13 +02:00
|
|
|
signalSelectFile.emit((*it)->getFileName());
|
2016-02-11 21:45:21 +01:00
|
|
|
propertySetOnWidgetNamed("appl-widget-display-name", "value", etk::FSNodeGetRealName((*it)->getFileName()));
|
2015-10-21 22:12:01 +02:00
|
|
|
APPL_VERBOSE("Remove buffer select new one (done)");
|
2015-10-21 22:10:13 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ( m_list.size() != 0
|
|
|
|
&& m_list.back() != nullptr) {
|
2015-10-21 22:12:01 +02:00
|
|
|
APPL_VERBOSE("Remove buffer select new one (last)");
|
2015-10-21 22:10:13 +02:00
|
|
|
signalSelectFile.emit(m_list.back()->getFileName());
|
2016-02-11 21:45:21 +01:00
|
|
|
propertySetOnWidgetNamed("appl-widget-display-name", "value", etk::FSNodeGetRealName(m_list.back()->getFileName()));
|
2015-10-21 22:12:01 +02:00
|
|
|
APPL_VERBOSE("Remove buffer select new one (done)");
|
2015-10-21 22:10:13 +02:00
|
|
|
return;
|
|
|
|
}
|
2014-09-15 07:21:22 +02:00
|
|
|
signalSelectFile.emit("");
|
2016-02-11 21:45:21 +01:00
|
|
|
propertySetOnWidgetNamed("appl-widget-display-name", "value", "---");
|
2014-09-15 07:21:22 +02:00
|
|
|
m_bufferSelected = nullptr;
|
|
|
|
}
|
2014-09-12 22:10:32 +02:00
|
|
|
}
|
2015-10-21 22:10:13 +02:00
|
|
|
|