From 07d9e11b5de6f0cbca348d7b99c3beaaab52dbcf Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Thu, 29 Jul 2010 09:22:46 +0000 Subject: [PATCH] info_widget, added context menu git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2602 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/gui/share/icons/delete_icon.png | Bin 769 -> 687 bytes modules/gui/src/info_widget/info_widget.cc | 95 +++++++++++++-------- modules/gui/src/info_widget/info_widget.hh | 3 + 3 files changed, 61 insertions(+), 37 deletions(-) diff --git a/modules/gui/share/icons/delete_icon.png b/modules/gui/share/icons/delete_icon.png index 07b57dcd7f83d499301f1f778330591ce16dee3d..998b49070fc98a0a67dc79392eebb879a9af7937 100644 GIT binary patch delta 602 zcmZo<ThBTnp<aqjhdofYW-kK+lfI{mV~EA+rBnC%J$4Xj-7lGw-15j{21m=2wydSK z3~NNbO#CEb<H%Atxs9)r<s-|<XobKFOCKy>a$=d+tPoE|C9f29H@U8<b1P)GIOLVq zmOlS+W@maDi+AAq>o3c8*N8cB<lIh6PG)X6nbH*0wRWxUx9|1eSB9<jTrZ{`9v;ra z#;i5fi|fskCoN737d(3Z{CT?I|0P$mRBO+s8T%^v>FMcZY`@)Q`sl}xh$~rJO&(95 zF3zxS{rYgdtnIh8Uw{ApouS7~IW9ha@~)oL8Gg&xNKZbgvUa0DQ;i+}ftN2|_BZOD zKE<?q-RZk`=W2*>z54deOs+oU(vKfMW-wM&R4^o1$Qa4+9ldx_u-A?G{O5mOhI0Kc zzg9`Q9}#rDSbwuE(PRJp=WpNU9<<<KvYN}cd-v{@&t@!rz3b$JuA@rk=H?7Hw#|K2 zUsd(!!Gi=to70;%=ydPhyI0;=%xS{ur#EiijAY2q&rg<M^IE%Y<CIU{hmCofKi7Z$ z%(@|n>#zYwQ-bd9m%HYD`}pR&ywBx7B0sc)7;^IRmNf=4T{f9{HZ9w8BBPnr{s}>! z{{7o0_P9qRP(*R*k?()EO6Y%Aow+QtCGkh@v5k|b1ZB*cW_Kw)Jv}BaF73^;U3rtl zyN{~qPd|NfqL|Z?J#%)x2siw_YTL$rlE)lA-3exx;<Yrtx}vg{D?+n%-D`_J<wq~| z@_oHJgSa$P(|+%JKl$|24>tK*Mfx6Jc>Q(8`RCg2o1P~At)9Zq&mX*%|6bMUo2#Ez SZ((3yVDNPHb6Mw<&;$ULLMo>K delta 685 zcmZ3_+Q>E`p<bL@N%Yv#?5_+AOpTr{jv*GOmrgnF^*BJJeSh`k7-=iF4Z30rrNfyw z3$m>$dFUq4V%O>)a3$}~4&jS-O?It$F5yZYhj>DkJ=Rj%ammr!_1AH=y_+vwTjCk` zBJ%E>JD;DH*FT@fQL}OL=EGmVnjUuIa5S2E#DIq(E-vmuRB~j!*i4_cuV26ZyBCok zs5gD*?%j(cbl4KKwYAHv=C1obPkU+?Ly{9metmuX_fOT;)sBLDk6ybbwtV^WS%OK4 ziH<orIV_^~wziBL_U@I9EGa8%6JR=Q@WF;(Q+3|+!pcg{1BVYYZ;jH;aNQYmtWbtw zO3=gy5o^{je818D`ez#kv3e&1Lqo;`uU=)XI3U07HD7K1?J@})d;9YrKYl!4V)gg+ zg9i)^w{J(k`nr8zY;5es3=^gWpFbBf$jQs^+`s?)*|TRi?%wUaGQ^3=#@_z11>e!6 zkL6P)<!%3+`Pgc%-{WV`mg%doUC7$HB5d`Npp^%nEnck5kd~fqX=%x*F#mjUMSTT_ zgVD?{`Txrb3lDzzVsc=1((P><b7!wyxzfXQ-t*d35gZ@$Yij14Jb9A8Kxv|bX6v=8 z7e{IpUwLVonVZ`mh{~Q4v?Xe7;IqS~zMKCmFy6BNC)9u3opt%KW5=2jwkXK;U(Va^ z&Y13$5c;=oiqQ2^cgFvmkr&^VO$@q}W2UTK-)35RAzAZjgXsI>`!7qBwEuXu)rMrx z{m{RQB_cZ7*-J8L+m<aZdefab4nBIM^s`2;!D*qx!T^aqUA+IdPMP2PF1+pW-;ibT zg*hL>IX3Ls^XF;b*Mzpj2nSu3Yf;Iw)Nba4eX-${d3#q&GgU#qWx>syq)4%)L7HnM z6lR}&WTD2le*Jpq<5sWQG?vboIg|6rKjw`-ckk|;Bvi`4z`)??>gTe~DWM4fR~tx{ diff --git a/modules/gui/src/info_widget/info_widget.cc b/modules/gui/src/info_widget/info_widget.cc index fd582d46b..4eeaa552a 100644 --- a/modules/gui/src/info_widget/info_widget.cc +++ b/modules/gui/src/info_widget/info_widget.cc @@ -19,9 +19,10 @@ /* Author: Stefan Scheuber */ +#include <QApplication> #include <QDir> +#include <QMenu> #include <QVBoxLayout> -#include <QApplication> #include <ost/platform.hh> @@ -30,7 +31,8 @@ #include "info_widget.hh" -namespace ost { namespace gui { +namespace ost { +namespace gui { class InfoWidgetFactory: public WidgetFactory { public: @@ -45,7 +47,9 @@ public: OST_REGISTER_WIDGET(InfoWidget, InfoWidgetFactory); -InfoWidget::InfoWidget(QWidget* parent) : Widget(NULL, parent), model_(new QStandardItemModel(this)), view_(new QListView(this)) { +InfoWidget::InfoWidget(QWidget* parent) : + Widget(NULL, parent), model_(new QStandardItemModel(this)), view_( + new QListView(this)) { QVBoxLayout* layout = new QVBoxLayout(this); layout->setMargin(0); layout->setSpacing(0); @@ -54,9 +58,12 @@ InfoWidget::InfoWidget(QWidget* parent) : Widget(NULL, parent), model_(new QStan view_->setModel(model_); view_->setSelectionBehavior(QAbstractItemView::SelectRows); view_->setDragEnabled(true); + view_->setContextMenuPolicy(Qt::CustomContextMenu); layout->addWidget(view_); + connect(view_, SIGNAL(customContextMenuRequested(const QPoint&)), this, + SLOT(ContextMenuRequested(const QPoint&))); QDir icon_path(GetSharedDataPath().c_str()); icon_path.cd("gui"); @@ -64,8 +71,9 @@ InfoWidget::InfoWidget(QWidget* parent) : Widget(NULL, parent), model_(new QStan QAction* clear_action = new QAction(this); clear_action->setToolTip("Clear info panel"); - clear_action->setIcon(QIcon(icon_path.absolutePath()+QDir::separator()+QString("delete_icon.png"))); - connect(clear_action,SIGNAL(triggered(bool)), this, SLOT(Clear())); + clear_action->setIcon(QIcon(icon_path.absolutePath() + QDir::separator() + + QString("delete_icon.png"))); + connect(clear_action, SIGNAL(triggered(bool)), this, SLOT(Clear())); this->actions_.append(clear_action); } @@ -73,67 +81,80 @@ void InfoWidget::Update() { view_->viewport()->update(); } -void InfoWidget::LogMessage(const QString& message, QMessageBox::Icon icon){ - QPixmap pix_icon = this->GetIcon(icon,this); +void InfoWidget::LogMessage(const QString& message, QMessageBox::Icon icon) { + QPixmap pix_icon = this->GetIcon(icon, this); QStandardItem* item = new QStandardItem(); item->setText(message); item->setIcon(QIcon(pix_icon)); this->model_->appendRow(item); } -void InfoWidget::LogMessage(QStandardItem* item){ +void InfoWidget::LogMessage(QStandardItem* item) { this->model_->appendRow(item); } -void InfoWidget::LogMessage(const QString& message, QIcon icon){ +void InfoWidget::LogMessage(const QString& message, QIcon icon) { QStandardItem* item = new QStandardItem(); item->setText(message); item->setIcon(icon); this->model_->appendRow(item); } -QPixmap InfoWidget::GetIcon(QMessageBox::Icon icon, QWidget* widget) -{ - QStyle *style = widget ? widget->style() : QApplication::style(); - int icon_size = style->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, widget); - QIcon tmp_icon; - switch (icon) { - case QMessageBox::Information: - tmp_icon = style->standardIcon(QStyle::SP_MessageBoxInformation, 0, widget); - break; - case QMessageBox::Warning: - tmp_icon = style->standardIcon(QStyle::SP_MessageBoxWarning, 0, widget); - break; - case QMessageBox::Critical: - tmp_icon = style->standardIcon(QStyle::SP_MessageBoxCritical, 0, widget); - break; - case QMessageBox::Question: - tmp_icon = style->standardIcon(QStyle::SP_MessageBoxQuestion, 0, widget); - default: - break; - } - if (!tmp_icon.isNull()) - return tmp_icon.pixmap(icon_size, icon_size); - return QPixmap(); +QPixmap InfoWidget::GetIcon(QMessageBox::Icon icon, QWidget* widget) { + QStyle *style = widget ? widget->style() : QApplication::style(); + int icon_size = style->pixelMetric(QStyle::PM_MessageBoxIconSize, 0, widget); + QIcon tmp_icon; + switch (icon) { + case QMessageBox::Information: + tmp_icon = style->standardIcon(QStyle::SP_MessageBoxInformation, 0, widget); + break; + case QMessageBox::Warning: + tmp_icon = style->standardIcon(QStyle::SP_MessageBoxWarning, 0, widget); + break; + case QMessageBox::Critical: + tmp_icon = style->standardIcon(QStyle::SP_MessageBoxCritical, 0, widget); + break; + case QMessageBox::Question: + tmp_icon = style->standardIcon(QStyle::SP_MessageBoxQuestion, 0, widget); + default: + break; + } + if (!tmp_icon.isNull()) + return tmp_icon.pixmap(icon_size, icon_size); + return QPixmap(); } -void InfoWidget::Clear(){ +void InfoWidget::Clear() { this->model_->clear(); } -void InfoWidget::RemoveSelected(){ +void InfoWidget::RemoveSelected() { QItemSelectionModel* selection_model = this->view_->selectionModel(); - const QItemSelection& item_selection = selection_model->selection(); + const QItemSelection& item_selection = selection_model->selection(); const QModelIndexList& model_indexes = item_selection.indexes(); - for(int i=0;i<model_indexes.size();i++){ + for (int i = 0; i < model_indexes.size(); i++) { this->model_->removeRow(model_indexes[i].row()); } } -ActionList InfoWidget::GetActions(){ +ActionList InfoWidget::GetActions() { return this->actions_; } +void InfoWidget::ContextMenuRequested(const QPoint& pos) { + + QAction* remove_selected_action = new QAction("Remove", this); + remove_selected_action->setToolTip("Remove this item"); + connect(remove_selected_action, SIGNAL(triggered(bool)), this, + SLOT(RemoveSelected())); + + QMenu* menu = new QMenu(); + menu->addAction(remove_selected_action); + if (menu->actions().size() > 0) { + menu->popup(view_->viewport()->mapToGlobal(pos)); + } +} + InfoWidget::~InfoWidget() { } diff --git a/modules/gui/src/info_widget/info_widget.hh b/modules/gui/src/info_widget/info_widget.hh index d74ceaa65..65857d37d 100644 --- a/modules/gui/src/info_widget/info_widget.hh +++ b/modules/gui/src/info_widget/info_widget.hh @@ -59,6 +59,9 @@ public slots: void RemoveSelected(); void Update(); +private slots: + void ContextMenuRequested(const QPoint& pos); + private: QPixmap GetIcon(QMessageBox::Icon icon, QWidget* widget); -- GitLab