libyui-qt  2.43.5
/usr/src/RPM/BUILD/libyui-qt-2.43.5/src/YQMenuButton.h
00001 /*
00002   Copyright (C) 2000-2012 Novell, Inc
00003   This library is free software; you can redistribute it and/or modify
00004   it under the terms of the GNU Lesser General Public License as
00005   published by the Free Software Foundation; either version 2.1 of the
00006   License, or (at your option) version 3.0 of the License. This library
00007   is distributed in the hope that it will be useful, but WITHOUT ANY
00008   WARRANTY; without even the implied warranty of MERCHANTABILITY or
00009   FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
00010   License for more details. You should have received a copy of the GNU
00011   Lesser General Public License along with this library; if not, write
00012   to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
00013   Floor, Boston, MA 02110-1301 USA
00014 */
00015 
00016 
00017 /*-/
00018 
00019   File:       YQMenuButton.h
00020 
00021   Author:     Stefan Hundhammer <sh@suse.de>
00022 
00023 /-*/
00024 
00025 
00026 #ifndef YQMenuButton_h
00027 #define YQMenuButton_h
00028 
00029 #include <qwidget.h>
00030 #include <yui/YMenuButton.h>
00031 #include <QHash>
00032 
00033 class QAction;
00034 class QPushButton;
00035 class QMenu;
00036 
00037 class YQMenuButton : public QWidget, public YMenuButton
00038 {
00039     Q_OBJECT
00040 
00041 public:
00042     /**
00043      * Constructor.
00044      **/
00045     YQMenuButton( YWidget *             parent,
00046                   const std::string &   label );
00047 
00048     /**
00049      * Destructor.
00050      **/
00051     virtual ~YQMenuButton();
00052 
00053     /**
00054      * Change the label on the button.
00055      *
00056      * Reimplemented from YMenuButton / YSelectionWidget.
00057      **/
00058     virtual void setLabel( const std::string & label );
00059 
00060     /**
00061      * Rebuild the displayed menu tree from the internally stored YMenuItems.
00062      *
00063      * Implemented from YMenuButton.
00064      **/
00065     virtual void rebuildMenuTree();
00066 
00067     /**
00068      * Set enabled / disabled state.
00069      *
00070      * Reimplemented from YWidget.
00071      **/
00072     virtual void setEnabled( bool enabled );
00073 
00074     /**
00075      * Preferred width of the widget.
00076      *
00077      * Reimplemented from YWidget.
00078      **/
00079     virtual int preferredWidth();
00080 
00081     /**
00082      * Preferred height of the widget.
00083      *
00084      * Reimplemented from YWidget.
00085      **/
00086     virtual int preferredHeight();
00087 
00088     /**
00089      * Set the new size of the widget.
00090      *
00091      * Reimplemented from YWidget.
00092      **/
00093     virtual void setSize( int newWidth, int newHeight );
00094 
00095     /**
00096      * Accept the keyboard focus.
00097      **/
00098     virtual bool setKeyboardFocus();
00099 
00100 
00101 protected slots:
00102 
00103     /**
00104      * Triggered when any menu item is activated.
00105      **/
00106     void menuEntryActivated( QAction * menuItem );
00107 
00108     /**
00109      * Triggered via menuEntryActivated() by zero timer to get back in sync
00110      * with the Qt event loop.
00111      **/
00112     void returnNow();
00113 
00114 
00115 protected:
00116 
00117     /**
00118      * Recursively insert menu items into 'menu' from iterator 'begin' to iterator 'end'.
00119      **/
00120     void rebuildMenuTree( QMenu * menu, YItemIterator begin, YItemIterator end );
00121 
00122 
00123     //
00124     // Data members
00125     //
00126 
00127     YMenuItem *         _selectedItem;
00128     QPushButton *       _qt_button;
00129     QHash<QAction*,int> _serials;
00130 };
00131 
00132 #endif // YQMenuButton_h
 All Classes Functions Variables