diff --git a/elementspanel.cpp b/elementspanel.cpp index db8033331..5744b52da 100644 --- a/elementspanel.cpp +++ b/elementspanel.cpp @@ -41,6 +41,9 @@ ElementsPanel::ElementsPanel(QWidget *parent) : QTreeWidget(parent) { // double-cliquer sur un element permet de l'editer connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slot_doubleClick(QTreeWidgetItem *, int))); + + // emet un signal au lieu de gerer son menu contextuel + setContextMenuPolicy(Qt::CustomContextMenu); } /** diff --git a/elementspanelwidget.cpp b/elementspanelwidget.cpp index b21c49250..deeb592e2 100644 --- a/elementspanelwidget.cpp +++ b/elementspanelwidget.cpp @@ -18,6 +18,8 @@ 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); + context_menu = new QMenu(this); + connect(reload, SIGNAL(triggered()), elements_panel, SLOT(reload())); connect(new_category, SIGNAL(triggered()), this, SLOT(newCategory())); connect(edit_category, SIGNAL(triggered()), elements_panel, SLOT(editCategory())); @@ -27,6 +29,7 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) { connect(delete_element, SIGNAL(triggered()), elements_panel, SLOT(deleteElement())); connect(elements_panel, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(updateButtons())); + connect(elements_panel, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(handleContextMenu(const QPoint &))); // initialise la barre d'outils toolbar = new QToolBar(this); @@ -100,3 +103,32 @@ void ElementsPanelWidget::updateButtons() { edit_element -> setEnabled(element_selected); delete_element -> setEnabled(element_selected); } + +/** + Gere le menu contextuel du panel d'elements + @param pos Position ou le menu contextuel a ete demande +*/ +void ElementsPanelWidget::handleContextMenu(const QPoint &pos) { + // recupere l'item concerne par l'evenement ainsi que son chemin + QTreeWidgetItem *item = elements_panel -> itemAt(pos); + if (!item) return; + + // recupere le fichier associe a l'item + QString item_file = item -> data(0, 42).toString(); + QFileInfo item_file_infos(item_file); + if (item_file.isNull() || !item_file_infos.exists()) return; + + // remplit le menu differemment selon qu'il s'agit d'un element ou d'une categorie + if (item_file_infos.isDir()) { + context_menu -> addAction(new_category); + context_menu -> addAction(edit_category); + context_menu -> addAction(delete_category); + context_menu -> addAction(new_element); + } else { + context_menu -> addAction(edit_element); + context_menu -> addAction(delete_element); + } + + // affiche le menu + context_menu -> popup(mapToGlobal(elements_panel -> mapTo(this, pos))); +} diff --git a/elementspanelwidget.h b/elementspanelwidget.h index b483617a9..87ffad0fe 100644 --- a/elementspanelwidget.h +++ b/elementspanelwidget.h @@ -25,6 +25,7 @@ class ElementsPanelWidget : public QWidget { QAction *reload; QAction *new_category, *edit_category, *delete_category; QAction *new_element, *edit_element, *delete_element; + QMenu *context_menu; // methodes public: @@ -34,6 +35,7 @@ class ElementsPanelWidget : public QWidget { void newElement(); void newCategory(); void updateButtons(); + void handleContextMenu(const QPoint &); }; /**