summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksei Nikiforov <darktemplar@basealt.ru>2018-11-22 12:27:26 +0300
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2018-11-27 14:53:55 +0100
commit4e32387e0f4d42ede00df7ac919b62b70556b2f1 (patch)
tree899b32fe4fc22dc7128fa400b0056aaa7c0cd6ff
parentb19e514cfefb021ab57e591f24bed660ecf5db0c (diff)
Move menu item insertion into separate function
Change-Id: I721910bbbd558827e9a5de1f8763426b460f08fa Reviewed-on: https://gerrit.libreoffice.org/63861 Tested-by: Jenkins Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
-rw-r--r--vcl/inc/qt5/Qt5Menu.hxx5
-rw-r--r--vcl/qt5/Qt5Menu.cxx124
2 files changed, 72 insertions, 57 deletions
diff --git a/vcl/inc/qt5/Qt5Menu.hxx b/vcl/inc/qt5/Qt5Menu.hxx
index e31c44fa8b55..92d2e18b9c5c 100644
--- a/vcl/inc/qt5/Qt5Menu.hxx
+++ b/vcl/inc/qt5/Qt5Menu.hxx
@@ -12,6 +12,7 @@
#include <salmenu.hxx>
class MenuItemList;
+class QActionGroup;
class QMenu;
class QMenuBar;
class Qt5MenuItem;
@@ -27,10 +28,14 @@ private:
Qt5Frame* mpFrame;
bool mbMenuBar;
QMenuBar* mpQMenuBar;
+ QMenu* mpQMenu;
+ QActionGroup* mpQActionGroup;
void DoFullMenuUpdate(Menu* pMenuBar, QMenu* pParentMenu = nullptr);
static void NativeItemText(OUString& rItemText);
+ QMenu* InsertMenuItem(Qt5MenuItem* pSalMenuItem);
+
public:
Qt5Menu(bool bMenuBar);
virtual ~Qt5Menu() override;
diff --git a/vcl/qt5/Qt5Menu.cxx b/vcl/qt5/Qt5Menu.cxx
index 9c4dc0f30678..b0173b0d55a0 100644
--- a/vcl/qt5/Qt5Menu.cxx
+++ b/vcl/qt5/Qt5Menu.cxx
@@ -22,6 +22,9 @@ Qt5Menu::Qt5Menu(bool bMenuBar)
, mpParentSalMenu(nullptr)
, mpFrame(nullptr)
, mbMenuBar(bMenuBar)
+ , mpQMenuBar(nullptr)
+ , mpQMenu(nullptr)
+ , mpQActionGroup(nullptr)
{
connect(this, &Qt5Menu::setFrameSignal, this, &Qt5Menu::SetFrame, Qt::BlockingQueuedConnection);
}
@@ -30,6 +33,67 @@ Qt5Menu::~Qt5Menu() { maItems.clear(); }
bool Qt5Menu::VisibleMenuBar() { return true; }
+QMenu* Qt5Menu::InsertMenuItem(Qt5MenuItem* pSalMenuItem)
+{
+ QMenu* pQMenu = mpQMenu;
+ sal_uInt16 nId = pSalMenuItem->mnId;
+ OUString aText = mpVCLMenu->GetItemText(nId);
+ NativeItemText(aText);
+ vcl::KeyCode nAccelKey = mpVCLMenu->GetAccelKey(nId);
+ bool bChecked = mpVCLMenu->IsItemChecked(nId);
+ MenuItemBits itemBits = mpVCLMenu->GetItemBits(nId);
+
+ if (mbMenuBar && mpQMenuBar)
+ // top-level menu
+ pQMenu = mpQMenuBar->addMenu(toQString(aText));
+ else
+ {
+ if (pSalMenuItem->mpSubMenu)
+ {
+ // submenu
+ pQMenu = pQMenu->addMenu(toQString(aText));
+ mpQActionGroup = new QActionGroup(pQMenu);
+ }
+ else
+ {
+ if (pSalMenuItem->mnType == MenuItemType::SEPARATOR)
+ pQMenu->addSeparator();
+ else
+ {
+ // leaf menu
+ QAction* pAction = pQMenu->addAction(toQString(aText));
+ pSalMenuItem->mpAction = pAction;
+ pAction->setShortcut(toQString(nAccelKey.GetName(GetFrame()->GetWindow())));
+
+ if (itemBits & MenuItemBits::CHECKABLE)
+ {
+ pAction->setCheckable(true);
+ pAction->setChecked(bChecked);
+ }
+ else if (itemBits & MenuItemBits::RADIOCHECK)
+ {
+ pAction->setCheckable(true);
+ if (!mpQActionGroup)
+ {
+ mpQActionGroup = new QActionGroup(pQMenu);
+ mpQActionGroup->setExclusive(true);
+ }
+ mpQActionGroup->addAction(pAction);
+ pAction->setChecked(bChecked);
+ }
+
+ pAction->setEnabled(pSalMenuItem->mbEnabled);
+ pAction->setVisible(pSalMenuItem->mbVisible);
+
+ connect(pAction, &QAction::triggered, this,
+ [pSalMenuItem] { slotMenuTriggered(pSalMenuItem); });
+ }
+ }
+ }
+
+ return pQMenu;
+}
+
void Qt5Menu::InsertItem(SalMenuItem* pSalMenuItem, unsigned nPos)
{
SolarMutexGuard aGuard;
@@ -87,70 +151,16 @@ void Qt5Menu::SetFrame(const SalFrame* pFrame)
void Qt5Menu::DoFullMenuUpdate(Menu* pMenuBar, QMenu* pParentMenu)
{
- Menu* pVCLMenu = mpVCLMenu;
+ mpQMenu = pParentMenu;
if (mbMenuBar && mpQMenuBar)
mpQMenuBar->clear();
- QActionGroup* pQAG = nullptr;
+ mpQActionGroup = nullptr;
for (sal_Int32 nItem = 0; nItem < static_cast<sal_Int32>(GetItemCount()); nItem++)
{
Qt5MenuItem* pSalMenuItem = GetItemAtPos(nItem);
- sal_uInt16 nId = pSalMenuItem->mnId;
- OUString aText = pVCLMenu->GetItemText(nId);
- QMenu* pQMenu = pParentMenu;
- NativeItemText(aText);
- vcl::KeyCode nAccelKey = pVCLMenu->GetAccelKey(nId);
- bool bChecked = pVCLMenu->IsItemChecked(nId);
- MenuItemBits itemBits = pVCLMenu->GetItemBits(nId);
-
- if (mbMenuBar && mpQMenuBar)
- // top-level menu
- pQMenu = mpQMenuBar->addMenu(toQString(aText));
- else
- {
- if (pSalMenuItem->mpSubMenu)
- {
- // submenu
- pQMenu = pQMenu->addMenu(toQString(aText));
- pQAG = new QActionGroup(pQMenu);
- }
- else
- {
- if (pSalMenuItem->mnType == MenuItemType::SEPARATOR)
- pQMenu->addSeparator();
- else
- {
- // leaf menu
- QAction* pAction = pQMenu->addAction(toQString(aText));
- pSalMenuItem->mpAction = pAction;
- pAction->setShortcut(toQString(nAccelKey.GetName(GetFrame()->GetWindow())));
-
- if (itemBits & MenuItemBits::CHECKABLE)
- {
- pAction->setCheckable(true);
- pAction->setChecked(bChecked);
- }
- else if (itemBits & MenuItemBits::RADIOCHECK)
- {
- pAction->setCheckable(true);
- if (!pQAG)
- {
- pQAG = new QActionGroup(pQMenu);
- pQAG->setExclusive(true);
- }
- pQAG->addAction(pAction);
- pAction->setChecked(bChecked);
- }
-
- pAction->setEnabled(pSalMenuItem->mbEnabled);
- pAction->setVisible(pSalMenuItem->mbVisible);
-
- connect(pAction, &QAction::triggered, this,
- [pSalMenuItem] { slotMenuTriggered(pSalMenuItem); });
- }
- }
- }
+ QMenu* pQMenu = InsertMenuItem(pSalMenuItem);
if (pSalMenuItem->mpSubMenu != nullptr)
{