]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Tooltips and status tips for actions in the drop down list.
authorstv <stv@opencascade.com>
Thu, 27 Mar 2008 12:24:20 +0000 (12:24 +0000)
committerstv <stv@opencascade.com>
Thu, 27 Mar 2008 12:24:20 +0000 (12:24 +0000)
src/Qtx/QtxMultiAction.cxx
src/Qtx/QtxMultiAction.h

index 37b8f440ab30bd37d4c7cc41c5cb7206bf06b531..88e2b764b6a42996b3ecb9c778e18145a5d64cea 100644 (file)
@@ -26,6 +26,7 @@
 #include <QLayout>
 #include <QToolBar>
 #include <QPainter>
+#include <QHelpEvent>
 #include <QToolButton>
 #include <QApplication>
 #include <QStyleOptionButton>
@@ -56,6 +57,57 @@ public:
   }
 };
 
+/*!
+  \class QtxMultiAction::Menu
+  \brief Custom menu to be used with the toolbuttons as drop down list.
+  \internal
+*/
+
+class QtxMultiAction::Menu : public QMenu
+{
+public:
+  //! \brief Constructor
+  Menu( QWidget* parent = 0 ) : QMenu( parent ) {}
+  //! \brief Destructor
+  ~Menu() {};
+
+protected:
+  //! \brief Paint the button
+  virtual bool event( QEvent* e )
+  {
+    bool res = false;
+    switch ( e->type() )
+    {
+    case QEvent::ToolTip:
+    case QEvent::WhatsThis:
+    case QEvent::QueryWhatsThis:
+      {
+        QHelpEvent* help = static_cast<QHelpEvent*>( e );
+        QWidget* w = QApplication::widgetAt( help->globalPos() );
+        if ( w && Qtx::isParent( w, this ) )
+        {
+          QHelpEvent he( help->type(), w->mapFromGlobal( help->globalPos() ), help->globalPos() );
+          QApplication::sendEvent( w, &he );
+          res = true;
+        }
+      }
+      break;
+    case QEvent::StatusTip:
+    case QEvent::WhatsThisClicked:
+      if ( parentWidget() )
+      {
+        QApplication::sendEvent( parentWidget(), e );
+        res = true;
+      }
+      break;
+    default:
+      res = QMenu::event( e );
+      break;
+    }
+    return res;
+  }
+};
+
 /*!
   \class QtxMultiAction::Button
   \brief Custom button to be used in the toolbar.
@@ -170,7 +222,8 @@ QtxMultiAction::~QtxMultiAction()
 */
 void QtxMultiAction::setActiveAction( QAction* a )
 {
-  if ( a && actions().contains( a ) && a != myCurrent && a->isEnabled() ) {
+  if ( a && actions().contains( a ) && a != myCurrent && a->isEnabled() )
+  {
     myCurrent = a;
     updateAction();
   }
@@ -276,7 +329,8 @@ QWidget* QtxMultiAction::createWidget( QWidget* parent )
     return 0;
 
   QToolButton* w = new Button( tb );
-  w->setMenu( new QMenu( w ) );
+  w->setMenu( new Menu( w ) );
+  w->setMouseTracking( true );
   w->setFocusPolicy( Qt::NoFocus );
   w->setIconSize( tb->iconSize() );
   w->setToolButtonStyle( tb->toolButtonStyle() );
@@ -352,6 +406,7 @@ void QtxMultiAction::updateButton( QToolButton* btn )
     QToolButton* b = new QToolButton( pm );
     b->setDefaultAction( *itr );
     b->setToolTip( (*itr)->toolTip() );
+    b->setStatusTip( (*itr)->statusTip() );
     b->setAutoRaise( true );
     b->setIconSize( btn->iconSize() );
     b->setToolButtonStyle( btn->toolButtonStyle() );
index 07bb3e062f83d5c3077d82a58c9b52766d879777..a4d9683bdf6ec3b4b4f3c1a525652f92864d2e1b 100644 (file)
@@ -31,6 +31,7 @@ class QTX_EXPORT QtxMultiAction : public QtxActionSet
 {
   Q_OBJECT
 
+  class Menu;
   class Button;
   class Filter;