]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
no message
authorstv <stv@opencascade.com>
Fri, 15 Jun 2007 11:23:22 +0000 (11:23 +0000)
committerstv <stv@opencascade.com>
Fri, 15 Jun 2007 11:23:22 +0000 (11:23 +0000)
src/Qtx/QtxAction.cxx
src/Qtx/QtxAction.h
src/Qtx/QtxActionSet.cxx
src/Qtx/QtxActionSet.h
src/Qtx/QtxComboBox.cxx

index 6e6692bb822845bdcbe848cb1382a7ddd9486213..53f0f16e564c1779b47c0174572c3587ccee436b 100755 (executable)
 #include <QActionEvent>
 #include <QApplication>
 
+class QtxAction::ActionNotify : public QEvent
+{
+public:
+  ActionNotify( bool add, QWidget* wid ) : QEvent( QEvent::User ), myAdd( add ), myWidget( wid ) {};
+  ~ActionNotify() {};
+
+  bool     isAdded() const { return myAdd; }
+  QWidget* widget() const { return myWidget; }
+
+private:
+  bool     myAdd;
+  QWidget* myWidget;
+};
+
 /*!
   \class QtxAction
   \brief Generic action class.
@@ -40,7 +54,7 @@
   \param toggle if \c true the action is a toggle action
 */
 QtxAction::QtxAction( QObject* parent, bool toggle )
-: QAction( parent )
+: QWidgetAction( parent )
 {
   setCheckable( toggle );
 
@@ -60,10 +74,12 @@ QtxAction::QtxAction( QObject* parent, bool toggle )
   \param name action name (in terms of QObject)
   \param toggle if \c true the action is a toggle action
 */
-QtxAction::QtxAction( const QString& text, const QIcon& icon, const QString& menuText,
-                      int accel, QObject* parent, bool toggle )
-: QAction( icon, menuText, parent )
+QtxAction::QtxAction( const QString& text, const QIcon& icon,
+                      const QString& menuText, int accel, QObject* parent, bool toggle )
+: QWidgetAction( parent )
 {
+  setIcon( icon );
+  setText( menuText );
   setToolTip( text );
   setShortcut( accel );
   setCheckable( toggle );
@@ -85,8 +101,9 @@ QtxAction::QtxAction( const QString& text, const QIcon& icon, const QString& men
 */
 QtxAction::QtxAction( const QString& text, const QString& menuText,
                       int accel, QObject* parent, bool toggle )
-: QAction( menuText, parent )
+: QWidgetAction( parent )
 {
+  setText( menuText );
   setToolTip( text );
   setShortcut( accel );
   setCheckable( toggle );
@@ -117,11 +134,11 @@ bool QtxAction::eventFilter( QObject* o, QEvent* e )
   if ( o && o->isWidgetType() )
   {
     if ( e->type() == QEvent::ActionAdded && ((QActionEvent*)e)->action() == this )
-      addedTo( (QWidget*)o );
+      QApplication::postEvent( this, new ActionNotify( true, (QWidget*)o ) );
     if ( e->type() == QEvent::ActionRemoved && ((QActionEvent*)e)->action() == this )
-      removedFrom( (QWidget*)o );
+      QApplication::postEvent( this, new ActionNotify( false, (QWidget*)o ) );
   }
-  return QAction::eventFilter( o, e );
+  return QWidgetAction::eventFilter( o, e );
 }
 
 /*!
@@ -185,7 +202,7 @@ bool QtxAction::removeFrom( QWidget* w )
 
   \param w widget (menu or toolbar)
 */
-void QtxAction::addedTo( QWidget* /*w*/ )
+void QtxAction::addedTo( QWidget* )
 {
 }
 
@@ -197,6 +214,15 @@ void QtxAction::addedTo( QWidget* /*w*/ )
 
   \param w widget (menu or toolbar)
 */
-void QtxAction::removedFrom( QWidget* /*w*/ )
+void QtxAction::removedFrom( QWidget* )
+{
+}
+
+void QtxAction::customEvent( QEvent* e )
 {
+  ActionNotify* ae = (ActionNotify*)e;
+  if ( ae->isAdded() )
+    addedTo( ae->widget() );
+  else
+    removedFrom( ae->widget() );
 }
index e599c1f4c62aea0c621f1b0d01f3c2c737cf1fcd..265a1a4bbe186958acf80b627b77303999fc7ad9 100755 (executable)
@@ -24,7 +24,7 @@
 
 #include "Qtx.h"
 
-#include <QAction>
+#include <QWidgetAction>
 
 class QIcon;
 
@@ -32,10 +32,12 @@ class QIcon;
 #pragma warning ( disable:4251 )
 #endif
 
-class QTX_EXPORT QtxAction : public QAction
+class QTX_EXPORT QtxAction : public QWidgetAction
 {
   Q_OBJECT
 
+  class ActionNotify;
+
 public:
   QtxAction( QObject* = 0, bool = false );
   QtxAction( const QString&, const QString&, int, QObject*, bool = false );
@@ -51,6 +53,8 @@ public:
 protected:
   virtual void addedTo( QWidget* );
   virtual void removedFrom( QWidget* );
+
+  virtual void customEvent( QEvent* );
 };
 
 #ifdef WIN32
index fb43788532b57f44c20926fd614697df66697d57..7cfa6a63abcf90b1a9ec95a9b1061d33de18cfc8 100644 (file)
@@ -214,7 +214,7 @@ void QtxActionSet::clear()
 */
 void QtxActionSet::onChanged()
 {
-  if ( !isVisible() )
+  if ( !isVisible() || !isEmptyAction() )
     return;
 
   bool block = signalsBlocked();
@@ -352,6 +352,11 @@ void QtxActionSet::update( QWidget* w )
   }
 }
 
+bool QtxActionSet::isEmptyAction() const
+{
+  return true;
+}
+
 /*!
   \fn void QtxActionSet::triggered( int id );
   \brief Emitted when some child action is activated by the user.
index 703f8081fceb94ec784976d5e218a60f854d373e..4de8997879bd5b2370a2dd762faf915708483924 100644 (file)
@@ -68,6 +68,8 @@ protected:
   int             actionId( QAction* ) const;
   void            setActionId( QAction*, const int );
 
+  virtual bool    isEmptyAction() const;
+
 private:
   void            update();
   void            update( QWidget* );
index 8ffc1c0732b1fb9f7f8e08ee1c19b3a059f9a721..360cd98e8f902e8be5f01e3d3f73be6f832d4abd 100755 (executable)
@@ -145,9 +145,11 @@ void QtxComboBox::paintEvent( QPaintEvent* e )
   \brief Called when any item is activated by the user.
   \param idx activated item index (not used)
 */
-void QtxComboBox::onActivated( int /*idx*/ )
+void QtxComboBox::onActivated( int idx )
 {
   resetClear();
+
+  emit activatedId( id( idx ) );
 }
 
 /*!