CVS commit by mornfall: Make it possible to (un)install packages using a context menu in ListTreeWidget. TODO: Generalize, make the menu customizable (by client code). This may or may not be enough for what clee wants. At least very first version.
M +29 -0 listtreewidget.cpp 1.28 M +5 -0 listtreewidget.h 1.18 --- kdenonbeta/kdedebian/kapture/libkapture/listtreewidget.cpp #1.27:1.28 @@ -1,4 +1,6 @@ // -*- Mode: C++; c-basic-offset: 4; -*- // includes {{{ +#include <qpopupmenu.h> + #include <libcapture/treefactory.h> #include <libcapture/pkgcache.h> @@ -154,4 +156,7 @@ ListTreeWidget::ListTreeWidget (QWidget connect (this, SIGNAL (collapsed (QListViewItem *)), SLOT (nodeClosed (QListViewItem *))); + connect (this, SIGNAL (contextMenuRequested (QListViewItem *, const QPoint + &, int)), this, SLOT (contextMenu (QListViewItem *, const + QPoint &, int))); m_tip = new ListTreeWidgetTooltip (viewport (), this); } @@ -260,4 +265,28 @@ void ListTreeWidget::forwardSelectionCha } /* }}} */ +void ListTreeWidget::contextMenu (QListViewItem *it, const QPoint &p, int c) +{ + std::cerr << "ListTreeWidget::contextMenu (p);" << std::endl; + m_itemWithMenu = dynamic_cast <KListViewItemCustom *> (it) -> m_treeNode; + QPopupMenu *m = new QPopupMenu (this); + m -> insertItem ("Install", this, SLOT (contextInstall ())); + m -> insertItem ("Uninstall", this, SLOT (contextUninstall ())); + m -> exec (p); + delete m; +} + +void ListTreeWidget::contextInstall (void) +{ + PkgCElemPtr p = pkgCElem (**m_itemWithMenu); + if (p) + PkgManager::install (*p); +} + +void ListTreeWidget::contextUninstall (void) +{ + PkgCElemPtr p = pkgCElem (**m_itemWithMenu); + if (p) + PkgManager::uninstall (*p); +} void ListTreeWidgetTooltip::maybeTip (const QPoint &p) --- kdenonbeta/kdedebian/kapture/libkapture/listtreewidget.h #1.17:1.18 @@ -29,4 +29,5 @@ namespace kapture { class KListViewItemCustom; class ListTreeWidgetTooltip; + class ListTreeWidgetItem; // class ListTreeWidget {{{ @@ -48,7 +49,11 @@ namespace kapture { void nodeOpened (QListViewItem *); void nodeClosed (QListViewItem *); + void contextMenu (QListViewItem *, const QPoint &, int); + void contextInstall (); + void contextUninstall (); protected: std::set <std::string> m_open; ListTreeWidgetTooltip *m_tip; + ListTreeWidgetItem *m_itemWithMenu; }; /* }}} */