diff --git a/elementspanel.cpp b/elementspanel.cpp index 6899a0e5f..296d1c30f 100644 --- a/elementspanel.cpp +++ b/elementspanel.cpp @@ -344,3 +344,29 @@ QTreeWidgetItem *ElementsPanel::findFile(const QString &file) const { } return(0); } + +/** + N'affiche que les elements contenant une chaine donnee + @param m Chaine a filtrer +*/ +void ElementsPanel::filter(const QString &m) { + QList items = findItems("*", Qt::MatchRecursive | Qt::MatchWildcard); + if (m.isEmpty()) { + foreach(QTreeWidgetItem *item, items) item -> setHidden(false); + } else { + foreach(QTreeWidgetItem *item, items) { + QString file = item -> data(0, 42).toString(); + bool item_matches = item -> text(0).contains(m, Qt::CaseInsensitive); + item -> setHidden(!item_matches); + if (item_matches) { + // remonte l'arborescence pour afficher les categories contenant l'element + QTreeWidgetItem *parent_qtwi = item -> parent(); + while(parent_qtwi && (parent_qtwi -> isHidden() || !parent_qtwi -> isExpanded())) { + parent_qtwi -> setHidden(false); + parent_qtwi -> setExpanded(true); + parent_qtwi = parent_qtwi -> parent(); + } + } + } + } +} diff --git a/elementspanel.h b/elementspanel.h index 02c2daddf..4be9d3908 100644 --- a/elementspanel.h +++ b/elementspanel.h @@ -61,5 +61,6 @@ class ElementsPanel : public QTreeWidget { void editElement(); void deleteCategory(); void deleteElement(); + void filter(const QString &); }; #endif diff --git a/elementspanelwidget.cpp b/elementspanelwidget.cpp index 746b390ad..519ddde5d 100644 --- a/elementspanelwidget.cpp +++ b/elementspanelwidget.cpp @@ -35,6 +35,13 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { edit_element = new QAction(QIcon(":/ico/edit.png"), tr("\311diter l'\351l\351ment"), this); delete_element = new QAction(QIcon(":/ico/delete.png"), tr("Supprimer l'\351l\351ment"), this); + // initialise le champ de texte pour filtrer avec une disposition horizontale + QLabel *filter_label = new QLabel(tr("Filtrer : "), this); + filter_textfield = new QLineEdit(this); + QHBoxLayout *hlayout = new QHBoxLayout(); + hlayout -> addWidget(filter_label); + hlayout -> addWidget(filter_textfield); + context_menu = new QMenu(this); connect(reload, SIGNAL(triggered()), elements_panel, SLOT(reload())); @@ -45,6 +52,8 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { connect(edit_element, SIGNAL(triggered()), elements_panel, SLOT(editElement())); connect(delete_element, SIGNAL(triggered()), elements_panel, SLOT(deleteElement())); + connect(filter_textfield, SIGNAL(textEdited(const QString &)), elements_panel, SLOT(filter(const QString &))); + connect(elements_panel, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons())); connect(elements_panel, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(handleContextMenu(const QPoint &))); @@ -66,6 +75,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { vlayout -> setMargin(0); vlayout -> setSpacing(0); vlayout -> addWidget(toolbar); + vlayout -> addLayout(hlayout); vlayout -> addWidget(elements_panel); vlayout -> setStretchFactor(elements_panel, 75000); setLayout(vlayout); diff --git a/elementspanelwidget.h b/elementspanelwidget.h index 820343cdc..3889dfa63 100644 --- a/elementspanelwidget.h +++ b/elementspanelwidget.h @@ -43,6 +43,7 @@ class ElementsPanelWidget : public QWidget { QAction *new_category, *edit_category, *delete_category; QAction *new_element, *edit_element, *delete_element; QMenu *context_menu; + QLineEdit *filter_textfield; // methodes public: