diff options
author | Sumit Chauhan <sumitcn25@gmail.com> | 2019-08-05 20:27:54 +0530 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2019-08-28 08:13:11 +0200 |
commit | e0d29fb937b0f423f151e0a504bfe326f4d8279e (patch) | |
tree | b15c7b8371b0846930ec10df8dfcc35aa839f69b /vcl/source/window | |
parent | ff898ea321299b370d3776430c490ad4acc3b0d2 (diff) |
GtkWidget for the priority of extension under Extension Tab.
The new structure :
PriorityMergedHBox
--OptionalBox
--ToolBoxExtension
--Extension1
--OptionalBox
.....
Change-Id: I72760e4f0d60eb6f1f82c1e928601d41a2e4b6ce
Reviewed-on: https://gerrit.libreoffice.org/76987
Tested-by: Jenkins
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Diffstat (limited to 'vcl/source/window')
-rw-r--r-- | vcl/source/window/NotebookBarAddonsMerger.cxx | 104 | ||||
-rw-r--r-- | vcl/source/window/OptionalBox.cxx | 66 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 5 |
3 files changed, 137 insertions, 38 deletions
diff --git a/vcl/source/window/NotebookBarAddonsMerger.cxx b/vcl/source/window/NotebookBarAddonsMerger.cxx index 5fc0b14b8087..f9f4c70343fa 100644 --- a/vcl/source/window/NotebookBarAddonsMerger.cxx +++ b/vcl/source/window/NotebookBarAddonsMerger.cxx @@ -21,6 +21,10 @@ #include <vcl/commandinfoprovider.hxx> #include <vcl/vclenum.hxx> #include <vcl/toolbox.hxx> +#include <osl/module.hxx> +#include <vcl/OptionalBox.hxx> +#include <sfx2/sidebar/SidebarToolBox.hxx> +#include <vcl/IPrioritable.hxx> static const char STYLE_TEXT[] = "Text"; static const char STYLE_ICON[] = "Icon"; @@ -58,16 +62,61 @@ static void GetAddonNotebookBarItem(const css::uno::Sequence<css::beans::Propert } } +static void CreateNotebookBarToolBox(vcl::Window* pNotebookbarToolBox, + const css::uno::Reference<css::frame::XFrame>& m_xFrame, + const AddonNotebookBarItem& aAddonNotebookBarItem, + const std::vector<Image>& aImageVec, + const unsigned long& nIter) +{ + sal_uInt16 nItemId = 0; + ToolBox* pToolbox = dynamic_cast<ToolBox*>(pNotebookbarToolBox); + if (pToolbox) + { + pToolbox->InsertSeparator(); + pToolbox->Show(); + Size aSize(0, 0); + Image sImage; + pToolbox->InsertItem(aAddonNotebookBarItem.sCommandURL, m_xFrame, ToolBoxItemBits::NONE, + aSize); + nItemId = pToolbox->GetItemId(aAddonNotebookBarItem.sCommandURL); + pToolbox->SetItemCommand(nItemId, aAddonNotebookBarItem.sCommandURL); + pToolbox->SetQuickHelpText(nItemId, aAddonNotebookBarItem.sLabel); + + if (nIter < aImageVec.size()) + { + sImage = aImageVec[nIter]; + if (!sImage) + { + sImage = vcl::CommandInfoProvider::GetImageForCommand( + aAddonNotebookBarItem.sImageIdentifier, m_xFrame); + } + } + + if (aAddonNotebookBarItem.sStyle == STYLE_TEXT) + pToolbox->SetItemText(nItemId, aAddonNotebookBarItem.sLabel); + else if (aAddonNotebookBarItem.sStyle == STYLE_ICON) + pToolbox->SetItemImage(nItemId, sImage); + else + { + pToolbox->SetItemText(nItemId, aAddonNotebookBarItem.sLabel); + pToolbox->SetItemImage(nItemId, sImage); + } + pToolbox->Show(); + } +} + NotebookBarAddonsMerger::NotebookBarAddonsMerger() {} NotebookBarAddonsMerger::~NotebookBarAddonsMerger() {} void NotebookBarAddonsMerger::MergeNotebookBarAddons( - vcl::Window* pParent, const css::uno::Reference<css::frame::XFrame>& m_xFrame, - const NotebookBarAddonsItem& aNotebookBarAddonsItem) + vcl::Window* pParent, const customMakeWidget& pFunction, + const css::uno::Reference<css::frame::XFrame>& m_xFrame, + const NotebookBarAddonsItem& aNotebookBarAddonsItem, NotebookBarAddonsMerger::stringmap rMap) { std::vector<Image> aImageVec = aNotebookBarAddonsItem.aImageValues; unsigned long nIter = 0; + sal_uInt16 nPriorityIdx = aImageVec.size(); css::uno::Sequence<css::uno::Sequence<css::beans::PropertyValue>> aExtension; for (unsigned long nIdx = 0; nIdx < aNotebookBarAddonsItem.aAddonValues.size(); nIdx++) { @@ -75,44 +124,25 @@ void NotebookBarAddonsMerger::MergeNotebookBarAddons( for (int nSecIdx = 0; nSecIdx < aExtension.getLength(); nSecIdx++) { - sal_uInt16 nItemId = 0; + VclPtr<vcl::Window> pOptionalParent; + pOptionalParent = VclPtr<OptionalBox>::Create(pParent); + pOptionalParent->Show(); + + vcl::IPrioritable* pPrioritable + = dynamic_cast<vcl::IPrioritable*>(pOptionalParent.get()); + if (pPrioritable) + pPrioritable->SetPriority(nPriorityIdx - nIter); + + VclPtr<vcl::Window> pNotebookbarToolBox; + pFunction(pNotebookbarToolBox, pOptionalParent, rMap); + AddonNotebookBarItem aAddonNotebookBarItem; const css::uno::Sequence<css::beans::PropertyValue> pExtension = aExtension[nSecIdx]; GetAddonNotebookBarItem(pExtension, aAddonNotebookBarItem); - ToolBox* pToolbox = dynamic_cast<ToolBox*>(pParent); - if (pToolbox) - { - Size aSize(0, 0); - Image sImage; - pToolbox->InsertItem(aAddonNotebookBarItem.sCommandURL, m_xFrame, - ToolBoxItemBits::NONE, aSize); - nItemId = pToolbox->GetItemId(aAddonNotebookBarItem.sCommandURL); - pToolbox->SetItemCommand(nItemId, aAddonNotebookBarItem.sCommandURL); - pToolbox->SetQuickHelpText(nItemId, aAddonNotebookBarItem.sLabel); - - if (nIter < aImageVec.size()) - { - sImage = aImageVec[nIter]; - if (!sImage) - { - sImage = vcl::CommandInfoProvider::GetImageForCommand( - aAddonNotebookBarItem.sImageIdentifier, m_xFrame); - } - nIter++; - } - - if (aAddonNotebookBarItem.sStyle == STYLE_TEXT) - pToolbox->SetItemText(nItemId, aAddonNotebookBarItem.sLabel); - else if (aAddonNotebookBarItem.sStyle == STYLE_ICON) - pToolbox->SetItemImage(nItemId, sImage); - else - { - pToolbox->SetItemText(nItemId, aAddonNotebookBarItem.sLabel); - pToolbox->SetItemImage(nItemId, sImage); - } - } - if (nSecIdx == aExtension.getLength() - 1) - pToolbox->InsertSeparator(); + + CreateNotebookBarToolBox(pNotebookbarToolBox, m_xFrame, aAddonNotebookBarItem, + aImageVec, nIter); + nIter++; } } } diff --git a/vcl/source/window/OptionalBox.cxx b/vcl/source/window/OptionalBox.cxx new file mode 100644 index 000000000000..6f47b468f194 --- /dev/null +++ b/vcl/source/window/OptionalBox.cxx @@ -0,0 +1,66 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <vcl/builderfactory.hxx> +#include <vcl/layout.hxx> +#include <vcl/OptionalBox.hxx> + +/* + * OptionalBox - shows or hides the content. To use with PriorityHBox + * or PriorityMergedHBox + */ + +OptionalBox::OptionalBox(vcl::Window* pParent) + : VclHBox(pParent) + , IPrioritable() + , m_bInFullView(true) +{ +} + +OptionalBox::~OptionalBox() { disposeOnce(); } + +void OptionalBox::HideContent() +{ + if (m_bInFullView) + { + m_bInFullView = false; + + for (int i = 0; i < GetChildCount(); i++) + GetChild(i)->Hide(); + + SetOutputSizePixel(Size(10, GetSizePixel().Height())); + } +} + +void OptionalBox::ShowContent() +{ + if (!m_bInFullView) + { + m_bInFullView = true; + + for (int i = 0; i < GetChildCount(); i++) + GetChild(i)->Show(); + } +} + +bool OptionalBox::IsHidden() { return !m_bInFullView; } + +VCL_BUILDER_FACTORY(OptionalBox) + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 3b7db3eea3ab..b4678d20d77e 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -2187,7 +2187,10 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString & } else if (name == "NotebookBarAddonsToolMergePoint") { - NotebookBarAddonsMerger::MergeNotebookBarAddons(pParent, m_xFrame, m_pNotebookBarAddonsItem); + customMakeWidget pFunction = nullptr; + ModuleMap::iterator aI = g_aModuleMap.find("libsfxlo.so"); + pFunction = reinterpret_cast<customMakeWidget>(aI->second->getFunctionSymbol("makeNotebookbarToolBox")); + NotebookBarAddonsMerger::MergeNotebookBarAddons( pParent, pFunction, m_xFrame, m_pNotebookBarAddonsItem, rMap ); return nullptr; } else if (name == "GtkToolButton" || name == "GtkMenuToolButton" || |