Author: tgoettlicher
Date: Fri Mar 6 15:32:25 2009
New Revision: 55976
URL: http://svn.opensuse.org/viewcvs/yast?rev=55976&view=rev
Log:
added YQContextMenu.*
Added:
trunk/qt/src/YQContextMenu.cc
trunk/qt/src/YQContextMenu.h
Modified:
trunk/qt/src/YQTable.cc
trunk/qt/src/YQTree.cc
Added: trunk/qt/src/YQContextMenu.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQContextMenu.cc?rev=55976&view=auto
==============================================================================
--- trunk/qt/src/YQContextMenu.cc (added)
+++ trunk/qt/src/YQContextMenu.cc Fri Mar 6 15:32:25 2009
@@ -0,0 +1,228 @@
+/*---------------------------------------------------------------------\
+| |
+| __ __ ____ _____ ____ |
+| \ \ / /_ _/ ___|_ _|___ \ |
+| \ V / _` \___ \ | | __) | |
+| | | (_| |___) || | / __/ |
+| |_|\__,_|____/ |_| |_____| |
+| |
+| core system |
+| (C) SuSE GmbH |
+\----------------------------------------------------------------------/
+
+ File: YQContextMenu.cc
+
+ Author: Thomas Goettlicher
+
+/-*/
+
+
+#include <QMenu>
+#include
+#define YUILogComponent "qt-ui"
+#include "YUILog.h"
+
+#include "utf8.h"
+#include "YQUI.h"
+#include "YQContextMenu.h"
+#include "YEvent.h"
+
+
+/*
+YQContextMenu::YQContextMenu( YWidget * parent,
+ const string & label )
+ : QWidget( (QWidget *) parent->widgetRep() )
+ , YContextMenu( parent, label )
+ , _selectedItem( 0 )
+{
+// setWidgetRep( this );
+// _qt_button = new QPushButton( fromUTF8( label ), this );
+// // _qt_button->setMinimumSize( 2,2 );
+// _qt_button->move( YQButtonBorder, YQButtonBorder );
+// setMinimumSize( _qt_button->minimumSize()
+// + 2 * QSize( YQButtonBorder, YQButtonBorder ) );
+}
+*/
+
+YQContextMenu::YQContextMenu()
+ : QObject ()
+ , YContextMenu( )
+{
+ yuiWarning() << "YQContextMenu";
+
+}
+
+YQContextMenu::YQContextMenu( const QPoint position )
+ : QObject ()
+ , YContextMenu( )
+ , _position ( position )
+{
+ yuiWarning() << "YQContextMenu";
+
+}
+
+
+
+
+YQContextMenu::~YQContextMenu()
+{
+ // NOP
+}
+
+
+//void
+//YQContextMenu::setLabel( const string & label )
+//{
+// _qt_button->setText( fromUTF8( label ) );
+// YContextMenu::setLabel( label );
+//}
+
+
+void
+YQContextMenu::rebuildMenuTree()
+{
+// return;
+ //
+ // Delete any previous menu
+ // (in case the menu items got replaced)
+ //
+
+// if ( _qt_button->menu() )
+// delete _qt_button->menu();
+
+ //
+ // Create toplevel menu
+ //
+
+ QMenu * menu = new QMenu( 0 );
+ YUI_CHECK_NEW( menu );
+// _qt_button->setMenu( menu );
+ menu->setProperty( "class", "ycontextmenu QMenu" );
+
+ connect( menu, SIGNAL( triggered ( QAction * ) ),
+ this, SLOT ( menuEntryActivated( QAction * ) ) );
+
+ //
+ // Recursively add Qt menu items from the YMenuItems
+ //
+
+ rebuildMenuTree( menu, itemsBegin(), itemsEnd() );
+ menu->exec( _position );
+}
+
+
+void
+YQContextMenu::rebuildMenuTree( QMenu * parentMenu, YItemIterator begin, YItemIterator end )
+{
+ for ( YItemIterator it = begin; it != end; ++it )
+ {
+ YItem * item = *it;
+ QPixmap icon;
+
+ if ( item->hasIconName() )
+ {
+ string iconName = iconFullPath( item );
+ icon = QPixmap( iconName.c_str() );
+
+ if ( icon.isNull() )
+ yuiWarning() << "Can't load icon " << iconName << endl;
+ }
+
+ if ( item->hasChildren() )
+ {
+ QMenu * subMenu;
+
+ if ( icon.isNull() )
+ subMenu = parentMenu->addMenu( fromUTF8( item->label() ));
+ else
+ subMenu = parentMenu->addMenu( QIcon( icon ), fromUTF8( item->label() ));
+
+ connect( subMenu, SIGNAL( triggered ( QAction * ) ),
+ this, SLOT ( menuEntryActivated( QAction * ) ) );
+
+ rebuildMenuTree( subMenu, item->childrenBegin(), item->childrenEnd() );
+ }
+ else // No children - leaf entry
+ {
+ // item->index() is guaranteed to be unique within this YContextMenu's items,
+ // so it can easily be used as unique ID in all Q3PopupMenus that belong
+ // to this YQContextMenu.
+
+ QAction *act;
+
+ if ( icon.isNull() )
+ act = parentMenu->addAction( fromUTF8( item->label() ) );
+ else
+ act = parentMenu->addAction( QIcon( icon ), fromUTF8( item->label() ) );
+
+ _serials[act] = item->index();
+ }
+ }
+}
+
+
+void
+YQContextMenu::menuEntryActivated( QAction* action )
+{
+ int serialNo = -1;
+ if ( _serials.contains( action ) )
+ serialNo = _serials[action];
+
+ // yuiDebug() << "Selected menu entry #" << menu_item_index << endl;
+ _selectedItem = findMenuItem( serialNo );
+
+ if ( _selectedItem )
+ {
+ /*
+ * Defer the real returnNow() until all popup related events have been
+ * processed. This took me some hours to figure out; obviously
+ * exit_loop() doesn't have any effect as long as there are still
+ * popups open. So be it - use a zero timer to perform the real
+ * returnNow() later.
+ */
+
+ /*
+ * the 100 delay is a ugly dirty workaround
+ */
+ QTimer::singleShot( 100, this, SLOT( returnNow() ) );
+ }
+ else
+ {
+ yuiError() << "No menu item with serial no. " << serialNo << endl;
+ }
+}
+
+
+void
+YQContextMenu::returnNow()
+{
+ if ( _selectedItem )
+ {
+ YQUI::ui()->sendEvent( new YMenuEvent( _selectedItem ) );
+ _selectedItem = 0;
+ }
+}
+
+
+int YQContextMenu::preferredWidth()
+{
+ return 42;
+}
+
+
+int YQContextMenu::preferredHeight()
+{
+ return 42;
+}
+
+
+void
+YQContextMenu::setSize( int newWidth, int newHeight )
+{
+
+}
+
+
+
+
+#include "YQContextMenu.moc"
Added: trunk/qt/src/YQContextMenu.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQContextMenu.h?rev=55976&view=auto
==============================================================================
--- trunk/qt/src/YQContextMenu.h (added)
+++ trunk/qt/src/YQContextMenu.h Fri Mar 6 15:32:25 2009
@@ -0,0 +1,134 @@
+/*---------------------------------------------------------------------\
+| |
+| __ __ ____ _____ ____ |
+| \ \ / /_ _/ ___|_ _|___ \ |
+| \ V / _` \___ \ | | __) | |
+| | | (_| |___) || | / __/ |
+| |_|\__,_|____/ |_| |_____| |
+| |
+| core system |
+| (C) SuSE GmbH |
+\----------------------------------------------------------------------/
+
+ File: YQContextMenu.h
+
+ Author: Thomas Goettlicher
+
+/-*/
+
+
+#ifndef YQContextMenu_h
+#define YQContextMenu_h
+
+#include
+#include "YContextMenu.h"
+#include <QHash>
+
+class QAction;
+class QPushButton;
+class QMenu;
+
+class YQContextMenu : public QObject, public YContextMenu
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constructor.
+ **/
+// YQContextMenu( YWidget * parent,
+// const string & label );
+ YQContextMenu( );
+ YQContextMenu( const QPoint position );
+
+
+ /**
+ * Destructor.
+ **/
+ virtual ~YQContextMenu();
+
+ /**
+ * Change the label on the button.
+ *
+ * Reimplemented from YContextMenu / YSelectionWidget.
+ **/
+// virtual void setLabel( const string & label );
+
+ /**
+ * Rebuild the displayed menu tree from the internally stored YMenuItems.
+ *
+ * Implemented from YContextMenu.
+ **/
+ virtual void rebuildMenuTree();
+
+ /**
+ * Set enabled / disabled state.
+ *
+ * Reimplemented from YWidget.
+ **/
+// virtual void setEnabled( bool enabled );
+
+ /**
+ * Preferred width of the widget.
+ *
+ * Reimplemented from YWidget.
+ **/
+ virtual int preferredWidth();
+
+ /**
+ * Preferred height of the widget.
+ *
+ * Reimplemented from YWidget.
+ **/
+ virtual int preferredHeight();
+
+ /**
+ * Set the new size of the widget.
+ *
+ * Reimplemented from YWidget.
+ **/
+ virtual void setSize( int newWidth, int newHeight );
+
+ /**
+ * Accept the keyboard focus.
+ **/
+// virtual bool setKeyboardFocus();
+
+
+protected slots:
+
+ /**
+ * Triggered when any menu item is activated.
+ **/
+ void menuEntryActivated( QAction * menuItem );
+
+ /**
+ * Triggered via menuEntryActivated() by zero timer to get back in sync
+ * with the Qt event loop.
+ **/
+ void returnNow();
+
+
+protected:
+
+ /**
+ * Recursively insert menu items into 'menu' from iterator 'begin' to iterator 'end'.
+ **/
+ void rebuildMenuTree( QMenu * menu, YItemIterator begin, YItemIterator end );
+
+
+ //
+ // Data members
+ //
+
+ YMenuItem * _selectedItem;
+ QPushButton * _qt_button;
+ QHash _serials;
+
+
+private:
+ QPoint _position;
+
+};
+
+#endif // YQContextMenu_h
Modified: trunk/qt/src/YQTable.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQTable.cc?rev=55976&r1=55975&r2=55976&view=diff
==============================================================================
--- trunk/qt/src/YQTable.cc (original)
+++ trunk/qt/src/YQTable.cc Fri Mar 6 15:32:25 2009
@@ -48,11 +48,13 @@
layout->addWidget( _qt_listView );
_qt_listView->setAllColumnsShowFocus( true );
_qt_listView->header()->setStretchLastSection( false );
+
setKeepSorting( keepSorting() );
if ( multiSelectionMode )
_qt_listView->setSelectionMode( QAbstractItemView::ExtendedSelection );
+ _qt_treeWidget->setContextMenuPolicy( Qt::CustomContextMenu );
//
// Add columns
@@ -80,6 +82,10 @@
connect( _qt_listView, SIGNAL( currentItemChanged ( QTreeWidgetItem *, QTreeWidgetItem * ) ),
this, SLOT ( slotSelected ( QTreeWidgetItem * ) ) );
+ connect( _qt_listView, SIGNAL( customContextMenuRequested ( const QPoint & ) ),
+ this, SLOT ( slotContextMenu ( const QPoint & ) ) );
+
+
if ( multiSelectionMode )
{
// This is the exceptional case - avoid performance drop in the normal case
Modified: trunk/qt/src/YQTree.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQTree.cc?rev=55976&r1=55975&r2=55976&view=diff
==============================================================================
--- trunk/qt/src/YQTree.cc (original)
+++ trunk/qt/src/YQTree.cc Fri Mar 6 15:32:25 2009
@@ -69,7 +69,7 @@
_qt_treeWidget->header()->hide();
// _qt_treeWidget->setHeader(0L);
_qt_treeWidget->setRootIsDecorated ( true );
- _qt_treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
+ _qt_treeWidget->setContextMenuPolicy( Qt::CustomContextMenu );
_caption->setBuddy ( _qt_treeWidget );
@@ -292,9 +292,8 @@
void YQTree::slotContextMenu ( const QPoint & pos )
{
- exit(0);
YQUI::yqApp()->setContextMenuPos( pos );
-// if ( contextMenu() )
+ if ( contextMenu() )
YQUI::ui()->sendEvent( new YWidgetEvent( this, YEvent::ContextMenuActivated ) );
}
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org