Ajout d'un menu contextuel dans le panel d'elements

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@197 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet 2007-10-28 16:03:18 +00:00
parent 5c1260fe0c
commit 66194ba970
3 changed files with 37 additions and 0 deletions

View File

@ -41,6 +41,9 @@ ElementsPanel::ElementsPanel(QWidget *parent) : QTreeWidget(parent) {
// double-cliquer sur un element permet de l'editer // double-cliquer sur un element permet de l'editer
connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slot_doubleClick(QTreeWidgetItem *, int))); 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);
} }
/** /**

View File

@ -18,6 +18,8 @@ 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);
context_menu = new QMenu(this);
connect(reload, SIGNAL(triggered()), elements_panel, SLOT(reload())); connect(reload, SIGNAL(triggered()), elements_panel, SLOT(reload()));
connect(new_category, SIGNAL(triggered()), this, SLOT(newCategory())); connect(new_category, SIGNAL(triggered()), this, SLOT(newCategory()));
connect(edit_category, SIGNAL(triggered()), elements_panel, SLOT(editCategory())); 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(delete_element, SIGNAL(triggered()), elements_panel, SLOT(deleteElement()));
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 &)));
// initialise la barre d'outils // initialise la barre d'outils
toolbar = new QToolBar(this); toolbar = new QToolBar(this);
@ -100,3 +103,32 @@ void ElementsPanelWidget::updateButtons() {
edit_element -> setEnabled(element_selected); edit_element -> setEnabled(element_selected);
delete_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)));
}

View File

@ -25,6 +25,7 @@ class ElementsPanelWidget : public QWidget {
QAction *reload; QAction *reload;
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;
// methodes // methodes
public: public:
@ -34,6 +35,7 @@ class ElementsPanelWidget : public QWidget {
void newElement(); void newElement();
void newCategory(); void newCategory();
void updateButtons(); void updateButtons();
void handleContextMenu(const QPoint &);
}; };
/** /**