27 #include "../../../se/Style.h"
28 #include "../../../se/Symbolizer.h"
29 #include "../../../se/Rule.h"
41 setAlternatingRowColors(
true);
42 setSelectionMode(QAbstractItemView::SingleSelection);
43 setHeaderHidden(
true);
44 setIconSize(QSize(16, 16));
52 connect(
this, SIGNAL(itemClicked(QTreeWidgetItem*,
int)), SLOT(
onItemClicked(QTreeWidgetItem*,
int)));
72 QTreeWidgetItem* root =
new QTreeWidgetItem(
this, STYLE);
73 root->setText(0, tr(
"Style"));
75 std::size_t nRules = m_style->getRules().size();
77 for(std::size_t i = 0; i < nRules; ++i)
80 const std::vector<te::se::Symbolizer*>& symbs = rule->
getSymbolizers();
82 QTreeWidgetItem* ruleItem =
new QTreeWidgetItem(root, RULE);
83 ruleItem->setText(0, tr(
"Rule"));
84 ruleItem->setData(0, Qt::UserRole, (
int)i);
87 for(std::size_t j = 0; j < symbs.size(); ++j)
89 QTreeWidgetItem* symbItem =
new QTreeWidgetItem(ruleItem, SYMBOLIZER);
91 QString symbTypeName = tr(
"Unknown Symbol");
93 std::map<QString, QString>::iterator it = m_symbolizerNames.find(symbs[j]->getType().c_str());
94 if(it != m_symbolizerNames.end())
95 symbTypeName = it->second;
100 symbTypeName.append(
" " + count);
102 symbItem->setText(0, symbTypeName);
103 symbItem->setData(0, Qt::UserRole, static_cast<int>(j));
108 setCurrentItem(symbItem);
109 emit symbolizerClicked(symbs[j]);
119 QTreeWidgetItem* selectedItem = getSelectedItem();
121 if(selectedItem == 0)
124 if(selectedItem->type() == RULE)
125 return getRule(selectedItem);
127 if(selectedItem->type() == SYMBOLIZER)
128 return getRule(selectedItem->parent());
135 QTreeWidgetItem* selectedItem = getSelectedItem();
137 if(selectedItem != 0 && selectedItem->type() == SYMBOLIZER)
138 return getSymbolizer(selectedItem);
145 QTreeWidgetItem* currentItem = getSelectedItem();
147 if(currentItem == 0 || currentItem->type() != SYMBOLIZER)
151 std::size_t index = currentItem->data(0, Qt::UserRole).toUInt();
160 swapSymbolizers(rule, index, index - 1);
167 QTreeWidgetItem* currentItem = getSelectedItem();
169 if(currentItem == 0 || currentItem->type() != SYMBOLIZER)
176 std::size_t index = currentItem->data(0, Qt::UserRole).toUInt();
182 swapSymbolizers(rule, index, index + 1);
189 setIconSize(QSize(size, size));
196 QTreeWidgetItem* symbolizerItem = getSelectedItem();
202 QTreeWidgetItem* ruleItem = symbolizerItem->parent();
206 const std::vector<te::se::Symbolizer*>& symbs = rule->
getSymbolizers();
213 assert(item && item->type() == RULE);
216 std::size_t index = item->data(0, Qt::UserRole).toUInt();
217 assert((index >= 0) && (index < m_style->getRules().size()));
219 return m_style->getRule(index);
224 assert(item && item->type() == SYMBOLIZER);
227 QTreeWidgetItem* parent = item->parent();
234 const std::vector<te::se::Symbolizer*>& symbs = rule->
getSymbolizers();
237 std::size_t index = item->data(0, Qt::UserRole).toUInt();
238 assert(index >= 0 && index < symbs.size());
245 QList<QTreeWidgetItem*> selected = selectedItems();
250 return selected.at(0);
274 emit ruleClicked(getRule(item));
278 emit symbolizerClicked(getSymbolizer(item));
static QPixmap build(const te::se::Symbolizer *symb, const QSize &size)
Generates the preview of given symbolizer element.
void swapSymbolizers(te::se::Rule *r, int indexFirst, int indexSecond)
std::map< QString, QString > m_symbolizerNames
A map of symbolizers names to user interface names.
te::se::Rule * getCurrentRule()
Gets the current rule.
const Symbolizer * getSymbolizer(std::size_t i) const
void setStyle(te::se::Style *style)
Sets a style element to this widget.
A Symbolizer describes how a feature is to appear on a map.
const std::vector< Symbolizer * > & getSymbolizers() const
te::se::Symbolizer * getCurrentSymbolizer()
Gets the current symbolizer.
A widget used to explore a style.
A Rule is used to attach property/scale conditions to and group the individual symbols used for rende...
void setLegendIconSize(int size)
virtual Symbolizer * clone() const =0
It creates a new copy of this object.
void onSymbolizerChanged(te::se::Symbolizer *symb)
StyleExplorer(QWidget *parent=0)
Constructs a style explorer widget which is a child of parent.
~StyleExplorer()
Destructor.
te::se::Rule * getRule(QTreeWidgetItem *item) const
Auxiliary internal method to retrieve a rule from a QTreeWidgetItem.
void onItemClicked(QTreeWidgetItem *item, int column)
The Style defines the styling that is to be applied to a geographic dataset (vector geometries or cov...
void updateStyleTree()
This method updates the Style Explorer.
QTreeWidgetItem * getSelectedItem() const
Auxiliary internal method to retrieve the selected item on Style Explorer.
Static class used to generate preview of Symbology elements.
void setSymbolizer(std::size_t i, Symbolizer *s)
te::se::Symbolizer * getSymbolizer(QTreeWidgetItem *item) const
Auxiliary internal method to retrieve a symbolizer from a QTreeWidgetItem.