Salome HOME
Merge branch 'Dev_1.1.0' of newgeom:newgeom into Dev_1.1.0
[modules/shaper.git] / src / XGUI / XGUI_HistoryMenu.cpp
index 2aa5cbc88a74b53eea5db933dc5fd67c22e381b3..bfdae5390686816d58f6cd6fb00056083e99dccb 100644 (file)
 #include <QListWidget>
 #include <QWidgetAction>
 #include <QToolButton>
+#include <QAction>
+
+XGUI_HistoryMenu::XGUI_HistoryMenu(QAction* theParent)
+ : QMenu(NULL),
+   myHistoryList(NULL)
+{
+  theParent->setMenu(this);
+  initMenu();
+
+  connect(theParent, SIGNAL(destroyed()), this, SLOT(deleteLater()));
+}
 
-//! Extends given feature with previously created context menu.
-//! \param theId - Id of the feature to add \a theMenu
-//! \param theMenu - Enables or disables menu feature
 XGUI_HistoryMenu::XGUI_HistoryMenu(QToolButton* theParent)
  : QMenu(theParent),
-   myHistoryList(new QListWidget(this))
+   myHistoryList(NULL)
 {
   theParent->setMenu(this);
   theParent->setPopupMode(QToolButton::MenuButtonPopup);
 
+  initMenu();
+}
+
+void XGUI_HistoryMenu::initMenu()
+{
+  myHistoryList = new QListWidget(this);
   QWidgetAction* aListAction = new QWidgetAction(this);
   aListAction->setDefaultWidget(myHistoryList);
   this->addAction(aListAction);
-
-  myHistoryList->setMouseTracking(true); // track mouse hover
+  myHistoryList->setMouseTracking(true);  // track mouse hover
   myHistoryList->setSelectionMode(QAbstractItemView::ExtendedSelection);
-  connect(myHistoryList, SIGNAL(itemEntered(QListWidgetItem *)),
-          this,          SLOT(setStackSelectedTo(QListWidgetItem *)));
-  connect(myHistoryList, SIGNAL(itemClicked(QListWidgetItem *)),
-          this,          SLOT(onItemPressed(QListWidgetItem *)));
+  connect(myHistoryList, SIGNAL(itemEntered(QListWidgetItem *)), this,
+          SLOT(setStackSelectedTo(QListWidgetItem *)));
+  connect(myHistoryList, SIGNAL(itemClicked(QListWidgetItem *)), this,
+          SLOT(onItemPressed(QListWidgetItem *)));
 }
 
 XGUI_HistoryMenu::~XGUI_HistoryMenu()
@@ -47,14 +60,16 @@ void XGUI_HistoryMenu::setHistory(const QList<ActionInfo>& theActions)
   }
 }
 
+void XGUI_HistoryMenu::leaveEvent(QEvent* theEvent)
+{
+  setStackSelectedTo(NULL);
+  QMenu::leaveEvent(theEvent);
+}
 
 void XGUI_HistoryMenu::setStackSelectedTo(QListWidgetItem * theItem)
 {
-  if (!theItem)
-    return;
-
   QListWidgetItem* eachItem = NULL;
-  bool isSelect = true;
+  bool isSelect = theItem != NULL;
   for(int aRow = 0; aRow < myHistoryList->count(); ++aRow) {
     eachItem = myHistoryList->item(aRow);
     myHistoryList->setItemSelected(eachItem, isSelect);
@@ -63,12 +78,13 @@ void XGUI_HistoryMenu::setStackSelectedTo(QListWidgetItem * theItem)
       isSelect = false;
     }
   }
+  // to avoid blinking caused by QMenu paint event (paints on top of the list)
+  myHistoryList->repaint();
 }
 
 void XGUI_HistoryMenu::onItemPressed(QListWidgetItem * theItem)
 {
   int selectedSize = myHistoryList->row(theItem) + 1;
-  emit actionsSelected(selectedSize);
+  emit actionSelected(selectedSize);
   hide();
-  myHistoryList->clear();
 }