[DEV] add treeView fist element Draw
This commit is contained in:
parent
ba31625447
commit
0b2e9d4129
@ -28,6 +28,7 @@ namespace ewol {
|
|||||||
ParentId, // uint_t
|
ParentId, // uint_t
|
||||||
BgColor, // color
|
BgColor, // color
|
||||||
FgColor, // color
|
FgColor, // color
|
||||||
|
DistanceToRoot, // uint_t
|
||||||
// Every other role must be set here:
|
// Every other role must be set here:
|
||||||
EndOfEwolRole
|
EndOfEwolRole
|
||||||
};
|
};
|
||||||
@ -41,9 +42,8 @@ namespace ewol {
|
|||||||
public:
|
public:
|
||||||
virtual ~List();
|
virtual ~List();
|
||||||
void calculateMinMaxSize() override;
|
void calculateMinMaxSize() override;
|
||||||
void setLabel(etk::String _newLabel);
|
|
||||||
// drawing capabilities ....
|
// drawing capabilities ....
|
||||||
private:
|
protected:
|
||||||
etk::Vector<ewol::Compositing*> m_listOObject; //!< generic element to display...
|
etk::Vector<ewol::Compositing*> m_listOObject; //!< generic element to display...
|
||||||
etk::Vector<int32_t> m_listSizeX; //!< size of every colomns
|
etk::Vector<int32_t> m_listSizeX; //!< size of every colomns
|
||||||
etk::Vector<int32_t> m_listSizeY; //!< size of every rows
|
etk::Vector<int32_t> m_listSizeY; //!< size of every rows
|
||||||
@ -51,7 +51,7 @@ namespace ewol {
|
|||||||
void addOObject(ewol::Compositing* _newObject, int32_t _pos=-1);
|
void addOObject(ewol::Compositing* _newObject, int32_t _pos=-1);
|
||||||
void clearOObjectList();
|
void clearOObjectList();
|
||||||
// list properties ...
|
// list properties ...
|
||||||
private:
|
protected:
|
||||||
int32_t m_paddingSizeX;
|
int32_t m_paddingSizeX;
|
||||||
int32_t m_paddingSizeY;
|
int32_t m_paddingSizeY;
|
||||||
int32_t m_displayStartRaw; //!< Current starting diaplayed raw
|
int32_t m_displayStartRaw; //!< Current starting diaplayed raw
|
||||||
|
106
ewol/widget/TreeView.cpp
Normal file
106
ewol/widget/TreeView.cpp
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
* @license MPL v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ewol/widget/TreeView.hpp>
|
||||||
|
|
||||||
|
#include <ewol/compositing/Drawing.hpp>
|
||||||
|
#include <ewol/compositing/Text.hpp>
|
||||||
|
#include <ewol/compositing/Image.hpp>
|
||||||
|
#include <ewol/widget/Manager.hpp>
|
||||||
|
|
||||||
|
#include <etk/typeInfo.hpp>
|
||||||
|
ETK_DECLARE_TYPE(ewol::widget::TreeView);
|
||||||
|
|
||||||
|
ewol::widget::TreeView::TreeView():
|
||||||
|
ewol::widget::List(),
|
||||||
|
propertyOffsetTreeView(this, "offsetTreeView",
|
||||||
|
30,
|
||||||
|
"Offset indentation for each node",
|
||||||
|
&ewol::widget::TreeView::onChangePropertyOffsetTreeView),
|
||||||
|
propertyIconTreeViewSize(this, "iconTreeViewSize",
|
||||||
|
30,
|
||||||
|
"Size of the icon for treeView",
|
||||||
|
&ewol::widget::TreeView::onChangePropertyOffsetTreeView) {
|
||||||
|
addObjectType("ewol::widget::TreeView");
|
||||||
|
}
|
||||||
|
|
||||||
|
ewol::widget::TreeView::~TreeView() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 ewol::widget::TreeView::calculateElementSize(const ivec2& _pos) {
|
||||||
|
ewol::compositing::Text tmpText;
|
||||||
|
etk::String myTextToWrite = getData(ListRole::Text, _pos).getSafeString();
|
||||||
|
float_t treeOffset = 0;
|
||||||
|
if (_pos.x() == 0) {
|
||||||
|
treeOffset += getData(ListRole::DistanceToRoot, _pos).getSafeNumber() * propertyOffsetTreeView.get();
|
||||||
|
}
|
||||||
|
etk::String iconName;
|
||||||
|
float_t iconSize = 0;
|
||||||
|
if (_pos.x() == 0) {
|
||||||
|
iconName = getData(ListRole::Icon, _pos).getSafeString();
|
||||||
|
if (iconName != "") {
|
||||||
|
iconSize += propertyIconTreeViewSize.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vec3 textSize = tmpText.calculateSize(myTextToWrite);
|
||||||
|
ivec2 count = getMatrixSize();
|
||||||
|
return vec2(textSize.x() + treeOffset + iconSize,
|
||||||
|
etk::max(textSize.y(), iconSize) + m_paddingSizeY*3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ewol::widget::TreeView::drawElement(const ivec2& _pos, const vec2& _start, const vec2& _size) {
|
||||||
|
vec2 posStart = _start;
|
||||||
|
etk::String iconName;
|
||||||
|
if (_pos.x() == 0) {
|
||||||
|
auto value = getData(ListRole::DistanceToRoot, _pos);
|
||||||
|
if (value.isNumber() == true) {
|
||||||
|
posStart.setX(posStart.x() + value.getSafeNumber() * propertyOffsetTreeView.get());
|
||||||
|
}
|
||||||
|
iconName = getData(ListRole::Icon, _pos).getSafeString();
|
||||||
|
}
|
||||||
|
|
||||||
|
etk::String myTextToWrite = getData(ListRole::Text, _pos).getSafeString();
|
||||||
|
etk::Color<> fg = getData(ListRole::FgColor, _pos).getSafeColor();
|
||||||
|
auto backgroundVariant = getData(ListRole::BgColor, _pos);
|
||||||
|
if (backgroundVariant.isColor() == true) {
|
||||||
|
etk::Color<> bg = backgroundVariant.getColor();
|
||||||
|
ewol::compositing::Drawing * BGOObjects = ETK_NEW(ewol::compositing::Drawing);
|
||||||
|
if (BGOObjects != null) {
|
||||||
|
addOObject(BGOObjects);
|
||||||
|
BGOObjects->setColor(bg);
|
||||||
|
BGOObjects->setPos(_start);
|
||||||
|
BGOObjects->rectangleWidth(_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
posStart += vec2(m_paddingSizeX, m_paddingSizeY);
|
||||||
|
if (iconName != "") {
|
||||||
|
ewol::compositing::Image * tmpImage = ETK_NEW(ewol::compositing::Image, iconName);
|
||||||
|
if (tmpImage != null) {
|
||||||
|
addOObject(tmpImage);
|
||||||
|
tmpImage->setColor(fg);
|
||||||
|
tmpImage->setPos(posStart);
|
||||||
|
tmpImage->print(vec2(propertyIconTreeViewSize.get(), propertyIconTreeViewSize.get()));
|
||||||
|
}
|
||||||
|
// move right
|
||||||
|
posStart.setX(posStart.x() + propertyIconTreeViewSize.get());
|
||||||
|
}
|
||||||
|
if (myTextToWrite != "") {
|
||||||
|
ewol::compositing::Text * tmpText = ETK_NEW(ewol::compositing::Text);
|
||||||
|
if (tmpText != null) {
|
||||||
|
addOObject(tmpText);
|
||||||
|
tmpText->setColor(fg);
|
||||||
|
tmpText->setPos(posStart);
|
||||||
|
tmpText->print(myTextToWrite);;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ewol::widget::TreeView::onChangePropertyOffsetTreeView() {
|
||||||
|
markToRedraw();
|
||||||
|
}
|
||||||
|
|
54
ewol/widget/TreeView.hpp
Normal file
54
ewol/widget/TreeView.hpp
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
* @license MPL v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <etk/types.hpp>
|
||||||
|
#include <etk/Color.hpp>
|
||||||
|
#include <ewol/debug.hpp>
|
||||||
|
#include <ewol/widget/List.hpp>
|
||||||
|
#include <ewol/compositing/Compositing.hpp>
|
||||||
|
#include <fluorine/Variant.hpp>
|
||||||
|
|
||||||
|
namespace ewol {
|
||||||
|
namespace widget {
|
||||||
|
class TreeView;
|
||||||
|
using TreeViewShared = ememory::SharedPtr<ewol::widget::TreeView>;
|
||||||
|
using TreeViewWeak = ememory::WeakPtr<ewol::widget::TreeView>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup ewolWidgetGroup
|
||||||
|
*/
|
||||||
|
class TreeView : public ewol::widget::List {
|
||||||
|
public: // signals
|
||||||
|
public: // properties
|
||||||
|
eproperty::Value<float> propertyOffsetTreeView; //!< indentation betwwen every new element.
|
||||||
|
eproperty::Value<float> propertyIconTreeViewSize; //!< Size of the icon.
|
||||||
|
protected:
|
||||||
|
TreeView();
|
||||||
|
public:
|
||||||
|
virtual ~TreeView();
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* @brief Calculate an element size to extimate the render size.
|
||||||
|
* @note Does not generate the with the same size.
|
||||||
|
* @param[in] _pos Position of colomn and Raw of the element.
|
||||||
|
* @return The estimate size of the element.
|
||||||
|
*/
|
||||||
|
vec2 calculateElementSize(const ivec2& _pos) override;
|
||||||
|
/**
|
||||||
|
* @brief Draw an element in the specific size and position.
|
||||||
|
* @param[in] _pos Position of colomn and Raw of the element.
|
||||||
|
* @param[in] _start Start display position.
|
||||||
|
* @param[in] _size Render raw size
|
||||||
|
* @return The estimate size of the element.
|
||||||
|
*/
|
||||||
|
void drawElement(const ivec2& _pos, const vec2& _start, const vec2& _size) override;
|
||||||
|
protected:
|
||||||
|
virtual void onChangePropertyOffsetTreeView();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -171,6 +171,7 @@ def configure(target, my_module):
|
|||||||
'ewol/widget/Windows.cpp',
|
'ewol/widget/Windows.cpp',
|
||||||
'ewol/widget/WSlider.cpp',
|
'ewol/widget/WSlider.cpp',
|
||||||
'ewol/widget/Spin.cpp',
|
'ewol/widget/Spin.cpp',
|
||||||
|
'ewol/widget/TreeView.cpp',
|
||||||
])
|
])
|
||||||
my_module.add_header_file([
|
my_module.add_header_file([
|
||||||
'ewol/widget/Menu.hpp',
|
'ewol/widget/Menu.hpp',
|
||||||
@ -210,7 +211,8 @@ def configure(target, my_module):
|
|||||||
'ewol/widget/Image.hpp',
|
'ewol/widget/Image.hpp',
|
||||||
'ewol/widget/List.hpp',
|
'ewol/widget/List.hpp',
|
||||||
'ewol/widget/Select.hpp',
|
'ewol/widget/Select.hpp',
|
||||||
'ewol/widget/Spin.hpp'
|
'ewol/widget/Spin.hpp',
|
||||||
|
'ewol/widget/TreeView.hpp',
|
||||||
])
|
])
|
||||||
|
|
||||||
# tools:
|
# tools:
|
||||||
|
@ -14,8 +14,6 @@ ETK_DECLARE_TYPE(appl::widget::BasicTree);
|
|||||||
appl::widget::BasicTree::BasicTree() {
|
appl::widget::BasicTree::BasicTree() {
|
||||||
addObjectType("appl::widget::BasicTree");
|
addObjectType("appl::widget::BasicTree");
|
||||||
setMouseLimit(1);
|
setMouseLimit(1);
|
||||||
|
|
||||||
|
|
||||||
m_tree = NodeElement::create("root");
|
m_tree = NodeElement::create("root");
|
||||||
for (size_t iii=0; iii<10; ++iii) {
|
for (size_t iii=0; iii<10; ++iii) {
|
||||||
auto elem_iii = NodeElement::create("elem_" + etk::toString(iii));
|
auto elem_iii = NodeElement::create("elem_" + etk::toString(iii));
|
||||||
@ -33,18 +31,39 @@ appl::widget::BasicTree::~BasicTree() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
etk::Color<> appl::widget::BasicTree::getBasicBG() {
|
etk::Color<> appl::widget::BasicTree::getBasicBG() {
|
||||||
return etk::Color<>(0,0,0xFF,0xFF);
|
return etk::Color<>(0xAF,0xAF,0xAF,0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ivec2 appl::widget::BasicTree::getMatrixSize() const {
|
ivec2 appl::widget::BasicTree::getMatrixSize() const {
|
||||||
return ivec2(3, 10);
|
return ivec2(4, m_flatTree.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
fluorine::Variant appl::widget::BasicTree::getData(int32_t _role, const ivec2& _pos) {
|
fluorine::Variant appl::widget::BasicTree::getData(int32_t _role, const ivec2& _pos) {
|
||||||
|
auto elem = m_flatTree[_pos.y()];
|
||||||
|
etk::String value = elem->getData();
|
||||||
switch (_role) {
|
switch (_role) {
|
||||||
case ewol::widget::ListRole::Text:
|
case ewol::widget::ListRole::Text:
|
||||||
|
if (_pos.x() == 0) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
if (_pos.x() == 1) {
|
||||||
|
//return etk::toString(countToRoot);
|
||||||
|
}
|
||||||
return "value: " + etk::toString(_pos);
|
return "value: " + etk::toString(_pos);
|
||||||
|
case ewol::widget::ListRole::DistanceToRoot:
|
||||||
|
return uint_t(elem->countToRoot());
|
||||||
|
case ewol::widget::ListRole::Icon:
|
||||||
|
if (elem->countToRoot() == 0) {
|
||||||
|
return "{ewol}THEME:GUI:Home.svg";
|
||||||
|
}
|
||||||
|
if (elem->countToRoot() == 1) {
|
||||||
|
return "{ewol}THEME:GUI:Folder.svg";
|
||||||
|
}
|
||||||
|
if (elem->countToRoot() == 2) {
|
||||||
|
return "{ewol}THEME:GUI:File.svg";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
case ewol::widget::ListRole::FgColor:
|
case ewol::widget::ListRole::FgColor:
|
||||||
return etk::Color<>(0,0,0,0xFF);
|
return etk::Color<>(0,0,0,0xFF);
|
||||||
case ewol::widget::ListRole::BgColor:
|
case ewol::widget::ListRole::BgColor:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ewol/widget/List.hpp>
|
#include <ewol/widget/TreeView.hpp>
|
||||||
#include <etk/os/FSNode.hpp>
|
#include <etk/os/FSNode.hpp>
|
||||||
#include <ewol/resource/ColorFile.hpp>
|
#include <ewol/resource/ColorFile.hpp>
|
||||||
#include <esignal/Signal.hpp>
|
#include <esignal/Signal.hpp>
|
||||||
@ -19,7 +19,7 @@ namespace appl {
|
|||||||
/**
|
/**
|
||||||
* @brief Generic display folder class. This widget display the content of a single folder :
|
* @brief Generic display folder class. This widget display the content of a single folder :
|
||||||
*/
|
*/
|
||||||
class BasicTree : public ewol::widget::List {
|
class BasicTree : public ewol::widget::TreeView {
|
||||||
protected:
|
protected:
|
||||||
BasicTree();
|
BasicTree();
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user