Ajout d'un champ de texte pour filtrer le contenu du panel d'elements

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@255 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-12-29 15:00:30 +00:00
parent 6bf8eed171
commit 396dd54e8e
4 changed files with 38 additions and 0 deletions

View File

@@ -344,3 +344,29 @@ QTreeWidgetItem *ElementsPanel::findFile(const QString &file) const {
} }
return(0); return(0);
} }
/**
N'affiche que les elements contenant une chaine donnee
@param m Chaine a filtrer
*/
void ElementsPanel::filter(const QString &m) {
QList<QTreeWidgetItem *> 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();
}
}
}
}
}

View File

@@ -61,5 +61,6 @@ class ElementsPanel : public QTreeWidget {
void editElement(); void editElement();
void deleteCategory(); void deleteCategory();
void deleteElement(); void deleteElement();
void filter(const QString &);
}; };
#endif #endif

View File

@@ -35,6 +35,13 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
edit_element = new QAction(QIcon(":/ico/edit.png"), tr("\311diter l'\351l\351ment"), this); 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); 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); context_menu = new QMenu(this);
connect(reload, SIGNAL(triggered()), elements_panel, SLOT(reload())); 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(edit_element, SIGNAL(triggered()), elements_panel, SLOT(editElement()));
connect(delete_element, SIGNAL(triggered()), elements_panel, SLOT(deleteElement())); 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(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons()));
connect(elements_panel, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(handleContextMenu(const QPoint &))); 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 -> setMargin(0);
vlayout -> setSpacing(0); vlayout -> setSpacing(0);
vlayout -> addWidget(toolbar); vlayout -> addWidget(toolbar);
vlayout -> addLayout(hlayout);
vlayout -> addWidget(elements_panel); vlayout -> addWidget(elements_panel);
vlayout -> setStretchFactor(elements_panel, 75000); vlayout -> setStretchFactor(elements_panel, 75000);
setLayout(vlayout); setLayout(vlayout);

View File

@@ -43,6 +43,7 @@ class ElementsPanelWidget : public QWidget {
QAction *new_category, *edit_category, *delete_category; QAction *new_category, *edit_category, *delete_category;
QAction *new_element, *edit_element, *delete_element; QAction *new_element, *edit_element, *delete_element;
QMenu *context_menu; QMenu *context_menu;
QLineEdit *filter_textfield;
// methodes // methodes
public: public: