From 7bab80da4fae3708bdbe5928b2e978d5c3288cff Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Thu, 16 Aug 2018 22:08:49 +0200 Subject: [PATCH] [DEV] start chage the API of the ListView to be ready to do a treeView --- ewol/widget/List.cpp | 17 ++++----- ewol/widget/List.hpp | 33 +++++++++++----- ewol/widget/ListFileSystem.cpp | 70 ++++++++++++++++++---------------- ewol/widget/ListFileSystem.hpp | 2 +- lutin_ewol.py | 3 +- 5 files changed, 71 insertions(+), 54 deletions(-) diff --git a/ewol/widget/List.cpp b/ewol/widget/List.cpp index e35c5c0d..0a3b437c 100644 --- a/ewol/widget/List.cpp +++ b/ewol/widget/List.cpp @@ -118,9 +118,8 @@ void ewol::widget::List::onRegenerateDisplay() { tmpOriginY += m_paddingSizeY; // TODO : remove this ... int32_t minHeight = 25; - uint32_t nbColomn = getNuberOfColomn(); - int32_t nbRaw = getNuberOfRaw(); + int32_t nbRaw = getNuberOfRaw(); // For the scrooling windows m_maxSize = ivec2(m_size.x(), (minHeight + 2*m_paddingSizeY) * nbRaw ); @@ -165,10 +164,10 @@ void ewol::widget::List::onRegenerateDisplay() { m_nbVisibleRaw = 0; for (int32_t iii=startRaw; iii= 0; iii++) { m_nbVisibleRaw++; - etk::String myTextToWrite; - etk::Color<> fg; - etk::Color<> bg; - getElement(jjj, iii, myTextToWrite, fg, bg); + ivec2 position(jjj, iii); + etk::String myTextToWrite = getData(ListRole::Text, position).getSafeString(); + etk::Color<> fg = getData(ListRole::FgColor, position).getSafeColor(); + etk::Color<> bg = getData(ListRole::BgColor, position).getSafeColor(); ewol::compositing::Text * tmpText = ETK_NEW(ewol::compositing::Text); if (null != tmpText) { @@ -227,10 +226,8 @@ bool ewol::widget::List::onEventInput(const ewol::event::Input& _event) { break; } } - - //EWOL_DEBUG("List event : idInput=" << IdInput << " typeEvent=" << typeEvent << " raw=" << rawID << " pos=" << pos << ""); - bool isUsed = onItemEvent(_event.getId(), _event.getStatus(), 0, rawID, _event.getPos().x(), _event.getPos().y()); - if (true == isUsed) { + bool isUsed = onItemEvent(_event.getId(), _event.getStatus(), ivec2(0, rawID), _event.getPos()); + if (isUsed == true) { // TODO : this generate bugs ... I did not understand why .. //ewol::WidgetSharedManager::focusKeep(this); } diff --git a/ewol/widget/List.hpp b/ewol/widget/List.hpp index 7525614a..ed77c530 100644 --- a/ewol/widget/List.hpp +++ b/ewol/widget/List.hpp @@ -10,12 +10,22 @@ #include #include #include +#include namespace ewol { namespace widget { class List; using ListShared = ememory::SharedPtr; using ListWeak = ememory::WeakPtr; + + enum ListRole { + Text = 11234, + BgColor, + FgColor, + // Every other role must be set here: + EndOfEwolRole + }; + /** * @ingroup ewolWidgetGroup */ @@ -55,18 +65,21 @@ namespace ewol { virtual uint32_t getNuberOfRaw() { return 0; }; - virtual bool getElement(int32_t _colomn, int32_t _raw, etk::String &_myTextToWrite, etk::Color<> &_fg, etk::Color<> &_bg) { - _myTextToWrite = ""; - _bg = etk::Color<>(0xFF, 0xFF, 0xFF, 0xFF); - _fg = etk::Color<>(0x00, 0x00, 0x00, 0xFF); - if (_raw % 2) { - _bg = etk::Color<>(0xFF, 0xFF, 0xFF, 0xFF); - } else { - _bg = etk::Color<>(0x7F, 0x7F, 0x7F, 0xFF); + virtual fluorine::Variant getData(int32_t _role, const ivec2& _pos) { + switch (_role) { + case ListRole::Text: + return ""; + case ListRole::FgColor: + return etk::Color<>(0x00, 0x00, 0x00, 0xFF); + case ListRole::BgColor: + if (_pos.y() % 2 == 0) { + return etk::Color<>(0xFF, 0xFF, 0xFF, 0xFF); + } + return etk::Color<>(0x7F, 0x7F, 0x7F, 0xFF); } - return false; + return fluorine::Variant(); }; - virtual bool onItemEvent(int32_t _IdInput, enum gale::key::status _typeEvent, int32_t _colomn, int32_t _raw, float _x, float _y) { + virtual bool onItemEvent(int32_t _IdInput, enum gale::key::status _typeEvent, const ivec2& _pos, const vec2& _mousePosition) { return false; } /** diff --git a/ewol/widget/ListFileSystem.cpp b/ewol/widget/ListFileSystem.cpp index 648076c5..35910e45 100644 --- a/ewol/widget/ListFileSystem.cpp +++ b/ewol/widget/ListFileSystem.cpp @@ -133,39 +133,45 @@ uint32_t ewol::widget::ListFileSystem::getNuberOfRaw() { return m_list.size() + offset; } -bool ewol::widget::ListFileSystem::getElement(int32_t _colomn, int32_t _raw, etk::String& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg) { - int32_t offset = 0; - if (*propertyShowFolder == true) { - if (*propertyPath == "/") { - offset = 1; - } else { - offset = 2; - } - if (_raw == 0) { - _myTextToWrite = "."; - } else if ( _raw == 1 - && propertyPath.get() != "/") { - _myTextToWrite = ".."; - } +fluorine::Variant ewol::widget::ListFileSystem::getData(int32_t _role, const ivec2& _pos) { + switch (_role) { + case ListRole::Text: + { + int32_t offset = 0; + if (*propertyShowFolder == true) { + if (*propertyPath == "/") { + offset = 1; + } else { + offset = 2; + } + if (_pos.y() == 0) { + return "."; + } else if ( _pos.y() == 1 + && propertyPath.get() != "/") { + return ".."; + } + } + if( _pos.y()-offset >= 0 + && _pos.y()-offset < (int32_t)m_list.size() + && m_list[_pos.y()-offset] != null) { + EWOL_VERBOSE("get filename for : '" << *m_list[_pos.y()-offset] << ":'" << m_list[_pos.y()-offset]->getNameFile() << "'"); + return m_list[_pos.y()-offset]->getNameFile(); + } + } + return "<<>>"; + case ListRole::FgColor: + return m_colorProperty->get(m_colorIdText); + case ListRole::BgColor: + if (m_selectedLine == _pos.y()) { + return m_colorProperty->get(m_colorIdBackgroundSelected); + } + if (_pos.y() % 2) { + return m_colorProperty->get(m_colorIdBackground1); + } + return m_colorProperty->get(m_colorIdBackground2); } - if( _raw-offset >= 0 - && _raw-offset < (int32_t)m_list.size() - && m_list[_raw-offset] != null) { - _myTextToWrite = m_list[_raw-offset]->getNameFile(); - EWOL_VERBOSE("get filename for : '" << *m_list[_raw-offset] << ":'" << _myTextToWrite << "'"); - } - _fg = m_colorProperty->get(m_colorIdText); - if (_raw % 2) { - _bg = m_colorProperty->get(m_colorIdBackground1); - } else { - _bg = m_colorProperty->get(m_colorIdBackground2); - } - if (m_selectedLine == _raw) { - _bg = m_colorProperty->get(m_colorIdBackgroundSelected); - } - return true; -}; - + return fluorine::Variant(); +} bool ewol::widget::ListFileSystem::onItemEvent(int32_t _IdInput, enum gale::key::status _typeEvent, diff --git a/ewol/widget/ListFileSystem.hpp b/ewol/widget/ListFileSystem.hpp index e5dc56e4..4043db18 100644 --- a/ewol/widget/ListFileSystem.hpp +++ b/ewol/widget/ListFileSystem.hpp @@ -47,7 +47,7 @@ namespace ewol { uint32_t getNuberOfColomn() override; bool getTitle(int32_t _colomn, etk::String& _myTitle, etk::Color<>& _fg, etk::Color<>& _bg) override; uint32_t getNuberOfRaw() override; - bool getElement(int32_t _colomn, int32_t _raw, etk::String& _myTextToWrite, etk::Color<>& _fg, etk::Color<>& _bg) override; + fluorine::Variant getData(int32_t _role, const ivec2& _pos) override; bool onItemEvent(int32_t _IdInput, enum gale::key::status _typeEvent, int32_t _colomn, int32_t _raw, float _x, float _y) override; protected: // TODO: use shred_ptr diff --git a/lutin_ewol.py b/lutin_ewol.py index ebb6183f..21361b37 100644 --- a/lutin_ewol.py +++ b/lutin_ewol.py @@ -235,7 +235,8 @@ def configure(target, my_module): 'egami', 'edtaa3', 'etranslate', - 'ewol-data' + 'ewol-data', + 'fluorine', ]) my_module.add_path(".")