27 #include "ui_NodeTreeView.h"
29 #include <QStandardItemModel>
30 #include <QSortFilterProxyModel>
31 #include <QVBoxLayout>
43 int source_row,
const QModelIndex& source_parent)
const {
44 return !source_parent.isValid() ||
45 QSortFilterProxyModel::filterAcceptsRow(source_row,source_parent);
58 int source_row,
const QModelIndex& source_parent)
const {
59 QModelIndex cur = sourceModel()->index(source_row,0,source_parent);
60 return source_parent.isValid() || sourceModel()->hasChildren(cur);
65 _ui =
new Ui::NodeTreeView;
67 _model =
new QStandardItemModel(1,1,
this);
72 _filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
73 _filter->setSortCaseSensitivity(Qt::CaseInsensitive);
78 NodeTreeView::~NodeTreeView() {
85 QStandardItem* root =
new QStandardItem(tr(
"All Modules"));
86 root->setDragEnabled(
false);
87 root->setEditable(
false);
88 root->setSelectable(
false);
90 _model->setItem(rootIndex++,0,root);
92 QStandardItem* untaggedRoot =
new QStandardItem(tr(
"Untagged"));
93 untaggedRoot->setDragEnabled(
false);
94 untaggedRoot->setEditable(
false);
95 untaggedRoot->setSelectable(
false);
96 _model->setItem(rootIndex++,0,untaggedRoot);
99 labels << tr(
"Names");
100 _model->setHorizontalHeaderLabels(labels);
102 QMap<QString,QStandardItem*> allTags ;
107 QStringListIterator classIter(classes);
108 while (classIter.hasNext()) {
109 const QString cur = classIter.next();
111 QStandardItem* node =
new QStandardItem(cur);
112 node->setEditable(
false);
113 node->setDragEnabled(
true);
114 root->appendRow(node);
117 QStringList tags = md.
getTags(cur) ;
120 if (tags.isEmpty()) {
121 QStandardItem* cnode =
new QStandardItem(cur);
122 cnode->setEditable(
false);
123 cnode->setDragEnabled(
true);
124 untaggedRoot->appendRow(cnode);
127 QStringListIterator tagIter(tags);
128 while (tagIter.hasNext()) {
129 const QString tag = tagIter.next();
131 QString parentTag =
"" ;
134 QStandardItem* cnode =
new QStandardItem(cur);
135 cnode->setEditable(
false);
136 cnode->setDragEnabled(
true);
138 subIndex = tag.indexOf(
"/",subIndex+1) ;
139 QString subtag = tag.mid(0,subIndex) ;
141 if(!allTags.contains(subtag))
144 QString subsubtag = subtag.mid(subtag.lastIndexOf(
"/")+1,-1) ;
145 QStandardItem* newRoot =
new QStandardItem(subsubtag) ;
146 newRoot->setDragEnabled(
false);
147 newRoot->setEditable(
false);
148 newRoot->setSelectable(
false);
149 if(parentTag.isEmpty())
150 _model->setItem(rootIndex++,0,newRoot);
152 allTags[parentTag]->appendRow(newRoot) ;
153 allTags.insert(subtag,newRoot) ;
156 allTags[subtag]->appendRow(cnode) ;
157 }
while(subIndex != -1) ;
160 _model->sort(0,Qt::AscendingOrder);
165 _ui->treeView->sortByColumn(0,Qt::AscendingOrder);
166 _ui->treeView->setExpanded(
_ui->treeView->model()->index(0,0),
true);
170 if (cur.parent().isValid()) {
176 _filter->setFilterWildcard(text);
178 _ui->treeView->sortByColumn(0,Qt::AscendingOrder);
179 _ui->treeView->setExpanded(
_ui->treeView->model()->index(0,0),
true);
180 _ui->treeView->scrollToTop();
181 _ui->editFilter->setFrame(
_ui->treeView->model()->rowCount());
185 if (idx.parent().isValid()) {
186 emit
addNode(idx.model()->data(idx).toString());
NodeTreeView(QWidget *parent=0)
default constructor
NoEmptyGroupsProxy(QObject *pp=0)
default constructor
Declaration of class FileManager.
void showClassDoc(const QString &className)
show documentation page
static const FileManager & instance()
get a reference to the file Manager instance
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
hide top-level entities without valid children
filer proxy to hide top-level entities without children
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
include top-level entities in the model
Declaration of class NodeTreeView.
filter proxy subclass keeping all top-level entities
void on_treeView_doubleClicked(const QModelIndex &)
handle double click events
QStandardItemModel * _model
the model of the view
void addNode(QString type)
initiate adding a new instance
Ui::NodeTreeView * _ui
designer gui
void on_treeView_clicked(const QModelIndex &index)
handle documentation display on selection change
MySortFilterProxy(QObject *pp=0)
default constructor
void reload()
loads nodes/modules from the classesFile
void on_editFilter_textChanged(const QString &text)
handle filter changes
QSortFilterProxyModel * _hideEmtptyGroups
hide emtpy groups proxy
QSortFilterProxyModel * _filter
filter wildcard proxy