From c5417af885d7e9ff52f0b27526516dd39a788288 Mon Sep 17 00:00:00 2001 From: Markku Luukkainen Date: Mon, 18 May 2009 10:52:17 +0200 Subject: Initial implementation for context menus --- src/gui/widgets/qmenu_symbian.cpp | 45 ++++++++++++++++++++++++++++++--------- src/gui/widgets/qmenubar_p.h | 1 + src/gui/widgets/qsoftkeyaction.h | 2 +- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp index 1dc727c..b9633b5 100644 --- a/src/gui/widgets/qmenu_symbian.cpp +++ b/src/gui/widgets/qmenu_symbian.cpp @@ -26,7 +26,8 @@ #include #include #include - +#include +#include #ifndef QT_NO_MENUBAR QT_BEGIN_NAMESPACE @@ -47,6 +48,7 @@ struct SymbianMenuItem static QList symbianMenus; static QList nativeMenuBars; static uint qt_symbian_menu_static_cmd_id = QT_FIRST_MENU_ITEM; +static QWidget* widgetWithContextMenu=0; bool menuExists() { @@ -177,6 +179,22 @@ static void rebuildMenu() { QMenuBarPrivate *mb = 0; QWidget *w = qApp->activeWindow(); + QMainWindow *mainWindow = qobject_cast(w); + QSoftKeyStack* softKeyStack = mainWindow->softKeyStack(); + const QSoftkeySet& softKeyTop = softKeyStack->top(); + + int index=0; + bool found=false; + while( indexrole(); + if(softAction->role() == QSoftKeyAction::ContextMenu) { + widgetWithContextMenu = softAction->parentWidget(); + found=true; + } + index++; + } if (w) { mb = menubars()->value(w); @@ -186,7 +204,8 @@ static void rebuildMenu() return; mb->symbian_menubar->rebuild(); } - } + widgetWithContextMenu = 0; +} Q_GUI_EXPORT void qt_symbian_show_toplevel( CEikMenuPane* menuPane) { @@ -358,21 +377,27 @@ void QMenuBarPrivate::QSymbianMenuBarPrivate::removeAction(QSymbianMenuAction *a rebuild(); } -void QMenuBarPrivate::QSymbianMenuBarPrivate::rebuild() +void QMenuBarPrivate::QSymbianMenuBarPrivate::InsertNativeMenuItems(const QList &actions) { - qt_symbian_menu_static_cmd_id = QT_FIRST_MENU_ITEM; - deleteAll( &symbianMenus ); - if (!d) - return; - for (int i = 0; i < d->actions.size(); ++i) { + for (int i = 0; i action = d->actions.at(i); + symbianActionTopLevel->action = actions.at(i); symbianActionTopLevel->parent = 0; symbianActionTopLevel->command = qt_symbian_menu_static_cmd_id++; qt_symbian_insert_action(symbianActionTopLevel, &symbianMenus); - } + } } +void QMenuBarPrivate::QSymbianMenuBarPrivate::rebuild() +{ + qt_symbian_menu_static_cmd_id = QT_FIRST_MENU_ITEM; + deleteAll( &symbianMenus ); + if (d) + InsertNativeMenuItems(d->actions); + + if (widgetWithContextMenu) + InsertNativeMenuItems(widgetWithContextMenu->actions()); + } QT_END_NAMESPACE #endif //QT_NO_MENUBAR diff --git a/src/gui/widgets/qmenubar_p.h b/src/gui/widgets/qmenubar_p.h index d562cd9..1b9bac7 100644 --- a/src/gui/widgets/qmenubar_p.h +++ b/src/gui/widgets/qmenubar_p.h @@ -257,6 +257,7 @@ public: } return 0; } + void InsertNativeMenuItems(const QList &actions); } *symbian_menubar; bool symbianCommands(int command); diff --git a/src/gui/widgets/qsoftkeyaction.h b/src/gui/widgets/qsoftkeyaction.h index 4ce5c5b..43c4ea7 100644 --- a/src/gui/widgets/qsoftkeyaction.h +++ b/src/gui/widgets/qsoftkeyaction.h @@ -56,7 +56,7 @@ class Q_GUI_EXPORT QSoftKeyAction : public QAction { public: enum StandardRole { - Options, + Options=0, Select, Back, Next, -- cgit v0.12