[DEV] add treeView fist element Draw
This commit is contained in:
parent
ba31625447
commit
0b2e9d4129
@ -28,6 +28,7 @@ namespace ewol {
|
||||
ParentId, // uint_t
|
||||
BgColor, // color
|
||||
FgColor, // color
|
||||
DistanceToRoot, // uint_t
|
||||
// Every other role must be set here:
|
||||
EndOfEwolRole
|
||||
};
|
||||
@ -41,9 +42,8 @@ namespace ewol {
|
||||
public:
|
||||
virtual ~List();
|
||||
void calculateMinMaxSize() override;
|
||||
void setLabel(etk::String _newLabel);
|
||||
// drawing capabilities ....
|
||||
private:
|
||||
protected:
|
||||
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_listSizeY; //!< size of every rows
|
||||
@ -51,7 +51,7 @@ namespace ewol {
|
||||
void addOObject(ewol::Compositing* _newObject, int32_t _pos=-1);
|
||||
void clearOObjectList();
|
||||
// list properties ...
|
||||
private:
|
||||
protected:
|
||||
int32_t m_paddingSizeX;
|
||||
int32_t m_paddingSizeY;
|
||||
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/WSlider.cpp',
|
||||
'ewol/widget/Spin.cpp',
|
||||
'ewol/widget/TreeView.cpp',
|
||||
])
|
||||
my_module.add_header_file([
|
||||
'ewol/widget/Menu.hpp',
|
||||
@ -210,7 +211,8 @@ def configure(target, my_module):
|
||||
'ewol/widget/Image.hpp',
|
||||
'ewol/widget/List.hpp',
|
||||
'ewol/widget/Select.hpp',
|
||||
'ewol/widget/Spin.hpp'
|
||||
'ewol/widget/Spin.hpp',
|
||||
'ewol/widget/TreeView.hpp',
|
||||
])
|
||||
|
||||
# tools:
|
||||
|
@ -14,8 +14,6 @@ ETK_DECLARE_TYPE(appl::widget::BasicTree);
|
||||
appl::widget::BasicTree::BasicTree() {
|
||||
addObjectType("appl::widget::BasicTree");
|
||||
setMouseLimit(1);
|
||||
|
||||
|
||||
m_tree = NodeElement::create("root");
|
||||
for (size_t iii=0; iii<10; ++iii) {
|
||||
auto elem_iii = NodeElement::create("elem_" + etk::toString(iii));
|
||||
@ -33,18 +31,39 @@ appl::widget::BasicTree::~BasicTree() {
|
||||
}
|
||||
|
||||
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 {
|
||||
return ivec2(3, 10);
|
||||
return ivec2(4, m_flatTree.size());
|
||||
}
|
||||
|
||||
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) {
|
||||
case ewol::widget::ListRole::Text:
|
||||
if (_pos.x() == 0) {
|
||||
return value;
|
||||
}
|
||||
if (_pos.x() == 1) {
|
||||
//return etk::toString(countToRoot);
|
||||
}
|
||||
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:
|
||||
return etk::Color<>(0,0,0,0xFF);
|
||||
case ewol::widget::ListRole::BgColor:
|
||||
|
@ -5,7 +5,7 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <ewol/widget/List.hpp>
|
||||
#include <ewol/widget/TreeView.hpp>
|
||||
#include <etk/os/FSNode.hpp>
|
||||
#include <ewol/resource/ColorFile.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 :
|
||||
*/
|
||||
class BasicTree : public ewol::widget::List {
|
||||
class BasicTree : public ewol::widget::TreeView {
|
||||
protected:
|
||||
BasicTree();
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user