summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-03-02 16:18:43 +0000
committerCaolán McNamara <caolanm@redhat.com>2021-03-11 14:29:54 +0100
commitd764415977ad65bb4a657ccada7c9b2c19b689e1 (patch)
tree8f2a84b795e9a4cf5036dae0984c9ed2937933a7
parentfeb8164afa67d3e2e5fe27dd01c5101d6d0cb847 (diff)
merge panel and panel title
so one combined InterimItemWindow instead of two separate ones for each panel Change-Id: Ie8e1b6a28f124ef23cf88ec47442ccf15ab51d3e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111903 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--include/sfx2/sidebar/Panel.hxx13
-rw-r--r--sfx2/UIConfig_sfx.mk2
-rw-r--r--sfx2/inc/sidebar/PanelTitleBar.hxx14
-rw-r--r--sfx2/inc/sidebar/TitleBar.hxx28
-rw-r--r--sfx2/source/sidebar/Deck.cxx3
-rw-r--r--sfx2/source/sidebar/DeckLayouter.cxx62
-rw-r--r--sfx2/source/sidebar/FocusManager.cxx15
-rw-r--r--sfx2/source/sidebar/Panel.cxx49
-rw-r--r--sfx2/source/sidebar/PanelTitleBar.cxx31
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx5
-rw-r--r--sfx2/source/sidebar/TitleBar.cxx50
-rw-r--r--sfx2/source/sidebar/UnoPanel.cxx4
-rw-r--r--sfx2/uiconfig/ui/panel.ui122
-rw-r--r--sfx2/uiconfig/ui/paneltitlebar.ui96
14 files changed, 270 insertions, 224 deletions
diff --git a/include/sfx2/sidebar/Panel.hxx b/include/sfx2/sidebar/Panel.hxx
index ea4a81870744..cd820ff937b2 100644
--- a/include/sfx2/sidebar/Panel.hxx
+++ b/include/sfx2/sidebar/Panel.hxx
@@ -20,7 +20,7 @@
#include <sfx2/dllapi.h>
-#include <vcl/window.hxx>
+#include <vcl/InterimItemWindow.hxx>
#include <vector>
@@ -51,7 +51,7 @@ class Context;
* Multiple panels form a single deck.
* E.g. the Properties deck has panels like Styles, Character, paragraph.
*/
-class SFX2_DLLPUBLIC Panel final : public vcl::Window
+class SFX2_DLLPUBLIC Panel final : public InterimItemWindow
{
public:
Panel(const PanelDescriptor& rPanelDescriptor, vcl::Window* pParentWindow,
@@ -62,13 +62,15 @@ public:
virtual ~Panel() override;
virtual void dispose() override;
- VclPtr<PanelTitleBar> const& GetTitleBar() const;
+ PanelTitleBar* GetTitleBar() const;
+ void ShowTitlebar(bool bShowTitlebar);
bool IsTitleBarOptional() const { return mbIsTitleBarOptional; }
void SetUIElement(const css::uno::Reference<css::ui::XUIElement>& rxElement);
const css::uno::Reference<css::ui::XSidebarPanel>& GetPanelComponent() const
{
return mxPanelComponent;
}
+ css::uno::Reference<css::awt::XWindow> GetElementParentWindow() const { return mxXWindow; }
css::uno::Reference<css::awt::XWindow> GetElementWindow();
void SetExpanded(const bool bIsExpanded);
bool IsExpanded() const { return mbIsExpanded; }
@@ -80,7 +82,6 @@ public:
void SetLurkMode(bool bLurk);
bool IsLurking() const { return mbLurking; }
- virtual void Resize() override;
virtual void DataChanged(const DataChangedEvent& rEvent) override;
virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
virtual void DumpAsPropertyTree(tools::JsonWriter&) override;
@@ -95,7 +96,9 @@ private:
const std::function<void()> maDeckLayoutTrigger;
const std::function<Context()> maContextAccess;
const css::uno::Reference<css::frame::XFrame>& mxFrame;
- VclPtr<PanelTitleBar> mpTitleBar;
+ std::unique_ptr<PanelTitleBar> mxTitleBar;
+ std::unique_ptr<weld::Container> mxContents;
+ css::uno::Reference<css::awt::XWindow> mxXWindow;
};
typedef std::vector<VclPtr<Panel>> SharedPanelContainer;
diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk
index 7bdbd7a85a1e..a21bbeed53bb 100644
--- a/sfx2/UIConfig_sfx.mk
+++ b/sfx2/UIConfig_sfx.mk
@@ -52,7 +52,7 @@ $(eval $(call gb_UIConfig_add_uifiles,sfx,\
sfx2/uiconfig/ui/newstyle \
sfx2/uiconfig/ui/notebookbar \
sfx2/uiconfig/ui/optprintpage \
- sfx2/uiconfig/ui/paneltitlebar \
+ sfx2/uiconfig/ui/panel \
sfx2/uiconfig/ui/password \
sfx2/uiconfig/ui/notebookbarpopup \
sfx2/uiconfig/ui/printeroptionsdialog \
diff --git a/sfx2/inc/sidebar/PanelTitleBar.hxx b/sfx2/inc/sidebar/PanelTitleBar.hxx
index ff00eb9f9294..64a77833dddd 100644
--- a/sfx2/inc/sidebar/PanelTitleBar.hxx
+++ b/sfx2/inc/sidebar/PanelTitleBar.hxx
@@ -29,35 +29,39 @@ namespace sfx2::sidebar {
class Panel;
class PanelTitleBar final
- : public TitleBar
+ : public TitleBarBase
{
public:
- PanelTitleBar(const OUString& rsTitle, vcl::Window* pParentWindow, Panel* pPanel);
- virtual void dispose() override;
+ PanelTitleBar(const OUString& rsTitle, weld::Builder& rBuilder, Panel* pPanel);
virtual ~PanelTitleBar() override;
virtual void SetTitle (const OUString& rsTitle) override;
virtual OUString GetTitle() const override;
+ virtual bool GetVisible() const override;
void SetMoreOptionsCommand(const OUString& rsCommandName,
const css::uno::Reference<css::frame::XFrame>& rxFrame,
const css::uno::Reference<css::frame::XController>& rxController);
void UpdateExpandedState();
+ void Show(bool bShow)
+ {
+ mxTitlebar->set_visible(bShow);
+ }
weld::Expander& GetExpander()
{
return *mxExpander;
}
- virtual void DataChanged(const DataChangedEvent& rEvent) override;
-
private:
virtual void HandleToolBoxItemClick() override;
DECL_LINK(ExpandHdl, weld::Expander&, void);
+ std::unique_ptr<weld::Container> mxTitlebar;
std::unique_ptr<weld::Expander> mxExpander;
+
css::uno::Reference<css::frame::XToolbarController> mxController;
VclPtr<Panel> mpPanel;
diff --git a/sfx2/inc/sidebar/TitleBar.hxx b/sfx2/inc/sidebar/TitleBar.hxx
index 772b349b6a2c..425e859cc690 100644
--- a/sfx2/inc/sidebar/TitleBar.hxx
+++ b/sfx2/inc/sidebar/TitleBar.hxx
@@ -25,22 +25,19 @@
namespace sfx2::sidebar {
-class TitleBar : public InterimItemWindow
+class TitleBarBase
{
public:
- TitleBar(vcl::Window* pParentWindow,
- const OUString& rUIXMLDescription, const OString& rID,
- Theme::ThemeItem eThemeItem);
- virtual void dispose() override;
- virtual ~TitleBar() override;
+ TitleBarBase(weld::Builder& rBuilder, Theme::ThemeItem eThemeItem);
+ void reset();
+ virtual ~TitleBarBase();
virtual void SetTitle (const OUString& rsTitle) = 0;
virtual OUString GetTitle() const = 0;
+ virtual bool GetVisible() const = 0;
void SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon);
- virtual void DataChanged (const DataChangedEvent& rEvent) override;
-
weld::Toolbar& GetToolBox()
{
return *mxToolBox;
@@ -51,6 +48,7 @@ public:
}
protected:
+ weld::Builder& mrBuilder;
std::unique_ptr<weld::Image> mxAddonImage;
std::unique_ptr<weld::Toolbar> mxToolBox;
std::unique_ptr<ToolbarUnoDispatcher> mxToolBoxController;
@@ -61,6 +59,20 @@ protected:
DECL_LINK(SelectionHandler, const OString&, void);
};
+class TitleBar : public InterimItemWindow
+ , public TitleBarBase
+{
+public:
+ TitleBar(vcl::Window* pParentWindow,
+ const OUString& rUIXMLDescription, const OString& rID,
+ Theme::ThemeItem eThemeItem);
+ virtual void dispose() override;
+ virtual bool GetVisible() const override { return IsVisible(); }
+ virtual ~TitleBar() override;
+
+ virtual void DataChanged (const DataChangedEvent& rEvent) override;
+};
+
} // end of namespace sfx2::sidebar
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/sidebar/Deck.cxx b/sfx2/source/sidebar/Deck.cxx
index 8578c398e3fa..0a3a925aa89c 100644
--- a/sfx2/source/sidebar/Deck.cxx
+++ b/sfx2/source/sidebar/Deck.cxx
@@ -349,9 +349,6 @@ void Deck::ShowPanel(const Panel& rPanel)
// Get vertical extent of the panel.
sal_Int32 nPanelTop (rPanel.GetPosPixel().Y());
const sal_Int32 nPanelBottom (nPanelTop + rPanel.GetSizePixel().Height() - 1);
- // Add the title bar into the extent.
- if (rPanel.GetTitleBar() && rPanel.GetTitleBar()->IsVisible())
- nPanelTop = rPanel.GetTitleBar()->GetPosPixel().Y();
// Determine what the new thumb position should be like.
// When the whole panel does not fit then make its top visible
diff --git a/sfx2/source/sidebar/DeckLayouter.cxx b/sfx2/source/sidebar/DeckLayouter.cxx
index bebc75e726ad..05098986b826 100644
--- a/sfx2/source/sidebar/DeckLayouter.cxx
+++ b/sfx2/source/sidebar/DeckLayouter.cxx
@@ -297,46 +297,39 @@ sal_Int32 PlacePanels (
nY += nDeckSeparatorHeight;
}
- // Place the title bar.
- VclPtr<PanelTitleBar> pTitleBar = rPanel.GetTitleBar();
- if (pTitleBar)
- {
- const sal_Int32 nPanelTitleBarHeight (Theme::GetInteger(Theme::Int_PanelTitleBarHeight) * rPanel.GetDPIScaleFactor());
+ const sal_Int32 nPanelTitleBarHeight(Theme::GetInteger(Theme::Int_PanelTitleBarHeight) * rPanel.GetDPIScaleFactor());
- if (iItem->mbShowTitleBar)
- {
- pTitleBar->setPosSizePixel(0, nY, nWidth, nPanelTitleBarHeight);
- pTitleBar->Show();
- nY += nPanelTitleBarHeight;
- }
- else
- {
- pTitleBar->Hide();
- }
- }
+ bool bShowTitlebar = iItem->mbShowTitleBar;
+ rPanel.ShowTitlebar(bShowTitlebar);
- if (rPanel.IsExpanded() && !rPanel.IsLurking())
+ bool bExpanded = rPanel.IsExpanded() && !rPanel.IsLurking();
+ if (bShowTitlebar || bExpanded)
{
rPanel.Show();
- // Determine the height of the panel depending on layout
- // mode and distributed heights.
- sal_Int32 nPanelHeight (0);
- switch(eMode)
+ sal_Int32 nPanelHeight(0);
+ if (bExpanded)
{
- case MinimumOrLarger:
- nPanelHeight = iItem->maLayoutSize.Minimum + iItem->mnDistributedHeight;
- break;
- case PreferredOrLarger:
- nPanelHeight = iItem->maLayoutSize.Preferred + iItem->mnDistributedHeight;
- break;
- case Preferred:
- nPanelHeight = iItem->maLayoutSize.Preferred;
- break;
- default:
- OSL_ASSERT(false);
- break;
+ // Determine the height of the panel depending on layout
+ // mode and distributed heights.
+ switch(eMode)
+ {
+ case MinimumOrLarger:
+ nPanelHeight = iItem->maLayoutSize.Minimum + iItem->mnDistributedHeight;
+ break;
+ case PreferredOrLarger:
+ nPanelHeight = iItem->maLayoutSize.Preferred + iItem->mnDistributedHeight;
+ break;
+ case Preferred:
+ nPanelHeight = iItem->maLayoutSize.Preferred;
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
}
+ if (bShowTitlebar)
+ nPanelHeight += nPanelTitleBarHeight;
// Place the panel.
Point aNewPos(0, nY);
@@ -354,7 +347,10 @@ sal_Int32 PlacePanels (
else
{
rPanel.Hide();
+ }
+ if (!bExpanded)
+ {
// Add a separator below the collapsed panel, if it is the
// last panel in the deck.
if (iItem == rLayoutItems.end()-1)
diff --git a/sfx2/source/sidebar/FocusManager.cxx b/sfx2/source/sidebar/FocusManager.cxx
index 159bb27d6c05..b5132344db34 100644
--- a/sfx2/source/sidebar/FocusManager.cxx
+++ b/sfx2/source/sidebar/FocusManager.cxx
@@ -146,9 +146,6 @@ FocusManager::FocusLocation FocusManager::GetFocusLocation (const vcl::Window& r
{
if (maPanels[nIndex] == &rWindow)
return FocusLocation(PC_PanelContent, nIndex);
- VclPtr<TitleBar> pTitleBar = maPanels[nIndex]->GetTitleBar();
- if (pTitleBar == &rWindow)
- return FocusLocation(PC_PanelTitle, nIndex);
}
return FocusLocation(PC_None, -1);
@@ -163,7 +160,7 @@ FocusManager::FocusLocation FocusManager::GetFocusLocation() const
// Search the panels.
for (size_t nIndex = 0; nIndex < maPanels.size(); ++nIndex)
{
- VclPtr<PanelTitleBar> pTitleBar = maPanels[nIndex]->GetTitleBar();
+ PanelTitleBar* pTitleBar = maPanels[nIndex]->GetTitleBar();
if (!pTitleBar)
continue;
if (pTitleBar->GetExpander().has_focus())
@@ -199,7 +196,7 @@ void FocusManager::FocusDeckTitle()
bool FocusManager::IsDeckTitleVisible() const
{
- return mpDeckTitleBar != nullptr && mpDeckTitleBar->IsVisible();
+ return mpDeckTitleBar != nullptr && mpDeckTitleBar->GetVisible();
}
bool FocusManager::IsPanelTitleVisible (const sal_Int32 nPanelIndex) const
@@ -207,10 +204,10 @@ bool FocusManager::IsPanelTitleVisible (const sal_Int32 nPanelIndex) const
if (nPanelIndex<0 || nPanelIndex>=static_cast<sal_Int32>(maPanels.size()))
return false;
- VclPtr<TitleBar> pTitleBar = maPanels[nPanelIndex]->GetTitleBar();
+ TitleBarBase* pTitleBar = maPanels[nPanelIndex]->GetTitleBar();
if (!pTitleBar)
return false;
- return pTitleBar->IsVisible();
+ return pTitleBar->GetVisible();
}
void FocusManager::FocusPanel (
@@ -225,8 +222,8 @@ void FocusManager::FocusPanel (
}
Panel& rPanel (*maPanels[nPanelIndex]);
- VclPtr<PanelTitleBar> pTitleBar = rPanel.GetTitleBar();
- if (pTitleBar && pTitleBar->IsVisible())
+ PanelTitleBar* pTitleBar = rPanel.GetTitleBar();
+ if (pTitleBar && pTitleBar->GetVisible())
{
rPanel.SetExpanded(true);
pTitleBar->GetExpander().grab_focus();
diff --git a/sfx2/source/sidebar/Panel.cxx b/sfx2/source/sidebar/Panel.cxx
index 793ee94ab85b..7c66838b2d8e 100644
--- a/sfx2/source/sidebar/Panel.cxx
+++ b/sfx2/source/sidebar/Panel.cxx
@@ -47,9 +47,8 @@ Panel::Panel(const PanelDescriptor& rPanelDescriptor,
const bool bIsInitiallyExpanded,
const std::function<void()>& rDeckLayoutTrigger,
const std::function<Context()>& rContextAccess,
- const css::uno::Reference<css::frame::XFrame>& rxFrame
- )
- : Window(pParentWindow)
+ const css::uno::Reference<css::frame::XFrame>& rxFrame)
+ : InterimItemWindow(pParentWindow, "sfx/ui/panel.ui", "Panel")
, msPanelId(rPanelDescriptor.msId)
, mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional)
, mxElement()
@@ -59,15 +58,18 @@ Panel::Panel(const PanelDescriptor& rPanelDescriptor,
, maDeckLayoutTrigger(rDeckLayoutTrigger)
, maContextAccess(rContextAccess)
, mxFrame(rxFrame)
- , mpTitleBar(VclPtr<PanelTitleBar>::Create(rPanelDescriptor.msTitle, pParentWindow, this))
+ , mxTitleBar(new PanelTitleBar(rPanelDescriptor.msTitle, *m_xBuilder, this))
+ , mxContents(m_xBuilder->weld_container("contents"))
+ , mxXWindow(mxContents->CreateChildFrame())
{
SetText(rPanelDescriptor.msTitle);
+ mxContents->set_visible(mbIsExpanded);
}
Panel::~Panel()
{
disposeOnce();
- assert(!mpTitleBar);
+ assert(!mxTitleBar);
}
void Panel::SetLurkMode(bool bLurk)
@@ -85,7 +87,7 @@ void Panel::DumpAsPropertyTree(tools::JsonWriter& rJsonWriter)
{
if (!IsLurking())
{
- vcl::Window::DumpAsPropertyTree(rJsonWriter);
+ InterimItemWindow::DumpAsPropertyTree(rJsonWriter);
rJsonWriter.put("type", "panel");
}
}
@@ -107,14 +109,23 @@ void Panel::dispose()
xComponent->dispose();
}
- mpTitleBar.disposeAndClear();
+ mxTitleBar.reset();
- vcl::Window::dispose();
+ mxXWindow->dispose();
+ mxXWindow.clear();
+ mxContents.reset();
+
+ InterimItemWindow::dispose();
+}
+
+PanelTitleBar* Panel::GetTitleBar() const
+{
+ return mxTitleBar.get();
}
-VclPtr<PanelTitleBar> const & Panel::GetTitleBar() const
+void Panel::ShowTitlebar(bool bShowTitlebar)
{
- return mpTitleBar;
+ mxTitleBar->Show(bShowTitlebar);
}
void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement)
@@ -134,7 +145,7 @@ void Panel::SetExpanded (const bool bIsExpanded)
return;
mbIsExpanded = bIsExpanded;
- mpTitleBar->UpdateExpandedState();
+ mxTitleBar->UpdateExpandedState();
maDeckLayoutTrigger();
if (maContextAccess && pSidebarController)
@@ -144,6 +155,8 @@ void Panel::SetExpanded (const bool bIsExpanded)
bIsExpanded,
maContextAccess());
}
+
+ mxContents->set_visible(mbIsExpanded);
}
bool Panel::HasIdPredicate (std::u16string_view rsId) const
@@ -151,20 +164,6 @@ bool Panel::HasIdPredicate (std::u16string_view rsId) const
return msPanelId == rsId;
}
-void Panel::Resize()
-{
- Window::Resize();
-
- // Forward new size to window of XUIElement.
- Reference<awt::XWindow> xElementWindow (GetElementWindow());
- if(xElementWindow.is())
- {
- const Size aSize(GetSizePixel());
- xElementWindow->setPosSize(0, 0, aSize.Width(), aSize.Height(),
- awt::PosSize::POSSIZE);
- }
-}
-
void Panel::DataChanged (const DataChangedEvent&)
{
Invalidate();
diff --git a/sfx2/source/sidebar/PanelTitleBar.cxx b/sfx2/source/sidebar/PanelTitleBar.cxx
index ddde9ca7aa6f..2ac2a6f73a8f 100644
--- a/sfx2/source/sidebar/PanelTitleBar.cxx
+++ b/sfx2/source/sidebar/PanelTitleBar.cxx
@@ -31,15 +31,17 @@ using namespace css::uno;
namespace sfx2::sidebar {
PanelTitleBar::PanelTitleBar(const OUString& rsTitle,
- vcl::Window* pParentWindow,
+ weld::Builder& rBuilder,
Panel* pPanel)
- : TitleBar(pParentWindow, "sfx/ui/paneltitlebar.ui", "PanelTitleBar",
- Theme::Color_PanelTitleBarBackground),
- mxExpander(m_xBuilder->weld_expander("expander")),
+ : TitleBarBase(rBuilder, Theme::Color_PanelTitleBarBackground),
+ mxTitlebar(rBuilder.weld_container("titlebar")),
+ mxExpander(rBuilder.weld_expander("expander")),
mpPanel(pPanel),
msIdent("button"),
msMoreOptionsCommand()
{
+ mxTitlebar->set_background(Theme::GetColor(meThemeItem));
+
mxExpander->set_label(rsTitle);
mxExpander->connect_expanded(LINK(this, PanelTitleBar, ExpandHdl));
@@ -52,6 +54,11 @@ PanelTitleBar::PanelTitleBar(const OUString& rsTitle,
#endif
}
+bool PanelTitleBar::GetVisible() const
+{
+ return mxTitlebar->get_visible();
+}
+
void PanelTitleBar::SetTitle(const OUString& rsTitle)
{
mxExpander->set_label(rsTitle);
@@ -69,18 +76,14 @@ void PanelTitleBar::UpdateExpandedState()
PanelTitleBar::~PanelTitleBar()
{
- disposeOnce();
-}
-
-void PanelTitleBar::dispose()
-{
Reference<lang::XComponent> xComponent(mxController, UNO_QUERY);
if (xComponent.is())
xComponent->dispose();
mxController.clear();
mpPanel.clear();
mxExpander.reset();
- TitleBar::dispose();
+ mxTitlebar.reset();
+ reset();
}
void PanelTitleBar::SetMoreOptionsCommand(const OUString& rsCommandName,
@@ -106,7 +109,7 @@ void PanelTitleBar::SetMoreOptionsCommand(const OUString& rsCommandName,
xComponent->dispose();
mxController =
ControllerFactory::CreateToolBoxController(
- *mxToolBox, *m_xBuilder, msMoreOptionsCommand, rxFrame, rxController, true);
+ *mxToolBox, mrBuilder, msMoreOptionsCommand, rxFrame, rxController, true);
mxToolBox->show();
}
@@ -126,12 +129,6 @@ IMPL_LINK(PanelTitleBar, ExpandHdl, weld::Expander&, rExpander, void)
mpPanel->SetExpanded(rExpander.get_expanded());
}
-void PanelTitleBar::DataChanged (const DataChangedEvent& rEvent)
-{
- mxToolBox->set_item_icon_name(msIdent, "sfx2/res/symphony/morebutton.png");
- TitleBar::DataChanged(rEvent);
-}
-
} // end of namespace sfx2::sidebar
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index be6572c85180..e6a24e3b632a 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -774,7 +774,7 @@ void SidebarController::CreatePanels(std::u16string_view rDeckId, const Context&
// Depending on the context we have to change the command
// for the "more options" dialog.
- VclPtr<PanelTitleBar> pTitleBar = aNewPanels[nWriteIndex]->GetTitleBar();
+ PanelTitleBar* pTitleBar = aNewPanels[nWriteIndex]->GetTitleBar();
if (pTitleBar)
{
pTitleBar->SetMoreOptionsCommand(
@@ -954,8 +954,9 @@ VclPtr<Panel> SidebarController::CreatePanel (
mxFrame);
// Create the XUIElement.
+ Reference<awt::XWindowPeer> xPeer(pPanel->GetElementParentWindow(), UNO_QUERY);
Reference<ui::XUIElement> xUIElement (CreateUIElement(
- pPanel->GetComponentInterface(),
+ xPeer,
xPanelDescriptor->msImplementationURL,
xPanelDescriptor->mbWantsCanvas,
rContext));
diff --git a/sfx2/source/sidebar/TitleBar.cxx b/sfx2/source/sidebar/TitleBar.cxx
index 615cb6de3b7b..b88b4e92e1db 100644
--- a/sfx2/source/sidebar/TitleBar.cxx
+++ b/sfx2/source/sidebar/TitleBar.cxx
@@ -21,47 +21,61 @@
namespace sfx2::sidebar {
-TitleBar::TitleBar(vcl::Window* pParentWindow,
- const OUString& rUIXMLDescription, const OString& rID,
- Theme::ThemeItem eThemeItem)
- : InterimItemWindow(pParentWindow, rUIXMLDescription, rID)
- , mxAddonImage(m_xBuilder->weld_image("addonimage"))
- , mxToolBox(m_xBuilder->weld_toolbar("toolbar"))
+TitleBarBase::TitleBarBase(weld::Builder& rBuilder, Theme::ThemeItem eThemeItem)
+ : mrBuilder(rBuilder)
+ , mxAddonImage(rBuilder.weld_image("addonimage"))
+ , mxToolBox(rBuilder.weld_toolbar("toolbar"))
, meThemeItem(eThemeItem)
{
- Color aBgColor = Theme::GetColor(meThemeItem);
- m_xContainer->set_background(aBgColor);
- mxToolBox->set_background(aBgColor);
+ mxToolBox->set_background(Theme::GetColor(meThemeItem));
- mxToolBox->connect_clicked(LINK(this, TitleBar, SelectionHandler));
+ mxToolBox->connect_clicked(LINK(this, TitleBarBase, SelectionHandler));
}
-TitleBar::~TitleBar()
+TitleBarBase::~TitleBarBase()
{
- disposeOnce();
}
-void TitleBar::dispose()
+void TitleBarBase::reset()
{
mxToolBox.reset();
mxAddonImage.reset();
- InterimItemWindow::dispose();
}
-void TitleBar::SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon)
+void TitleBarBase::SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon)
{
mxAddonImage->set_image(rIcon);
mxAddonImage->set_visible(rIcon.is());
}
-void TitleBar::DataChanged (const DataChangedEvent& /*rEvent*/)
+IMPL_LINK_NOARG(TitleBarBase, SelectionHandler, const OString&, void)
+{
+ HandleToolBoxItemClick();
+}
+
+TitleBar::TitleBar(vcl::Window* pParentWindow,
+ const OUString& rUIXMLDescription, const OString& rID,
+ Theme::ThemeItem eThemeItem)
+ : InterimItemWindow(pParentWindow, rUIXMLDescription, rID)
+ , TitleBarBase(*m_xBuilder, eThemeItem)
{
m_xContainer->set_background(Theme::GetColor(meThemeItem));
}
-IMPL_LINK_NOARG(TitleBar, SelectionHandler, const OString&, void)
+TitleBar::~TitleBar()
{
- HandleToolBoxItemClick();
+ disposeOnce();
+}
+
+void TitleBar::dispose()
+{
+ reset();
+ InterimItemWindow::dispose();
+}
+
+void TitleBar::DataChanged (const DataChangedEvent& /*rEvent*/)
+{
+ m_xContainer->set_background(Theme::GetColor(meThemeItem));
}
} // end of namespace sfx2::sidebar
diff --git a/sfx2/source/sidebar/UnoPanel.cxx b/sfx2/source/sidebar/UnoPanel.cxx
index eee70429aa30..1170cbce1674 100644
--- a/sfx2/source/sidebar/UnoPanel.cxx
+++ b/sfx2/source/sidebar/UnoPanel.cxx
@@ -54,7 +54,7 @@ OUString SAL_CALL SfxUnoPanel::getTitle()
{
SolarMutexGuard aGuard;
- VclPtr<PanelTitleBar> pTitleBar = mpPanel->GetTitleBar();
+ PanelTitleBar* pTitleBar = mpPanel->GetTitleBar();
if (pTitleBar)
return pTitleBar->GetTitle();
else
@@ -71,7 +71,7 @@ void SAL_CALL SfxUnoPanel::setTitle( const OUString& newTitle )
if (xPanelDescriptor)
{
xPanelDescriptor->msTitle = newTitle;
- VclPtr<PanelTitleBar> pTitleBar = mpPanel->GetTitleBar();
+ PanelTitleBar* pTitleBar = mpPanel->GetTitleBar();
if (pTitleBar)
pTitleBar->SetTitle(newTitle);
}
diff --git a/sfx2/uiconfig/ui/panel.ui b/sfx2/uiconfig/ui/panel.ui
new file mode 100644
index 000000000000..689236e2eb28
--- /dev/null
+++ b/sfx2/uiconfig/ui/panel.ui
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.2 -->
+<interface domain="sfx">
+ <requires lib="gtk+" version="3.20"/>
+ <!-- n-columns=1 n-rows=2 -->
+ <object class="GtkGrid" id="Panel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkBox" id="titlebar">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkImage" id="addonimage">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">center</property>
+ <property name="icon-name">missing-image</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkExpander" id="expander">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="label-fill">True</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="use-underline">True</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="toolbar">
+ <property name="can-focus">False</property>
+ <property name="no-show-all">True</property>
+ <property name="toolbar-style">icons</property>
+ <property name="show-arrow">False</property>
+ <property name="icon_size">2</property>
+ <child>
+ <object class="GtkToolButton" id="button">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="tooltip-text" translatable="yes" context="paneltitlebar|SFX_STR_SIDEBAR_MORE_OPTIONS">More Options</property>
+ <property name="use-underline">True</property>
+ <property name="icon-name">sfx2/res/symphony/morebutton.png</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="button-atkobject">
+ <property name="AtkObject::accessible-name" translatable="yes" context="paneltitlebar|SFX_STR_SIDEBAR_MORE_OPTIONS">More Options</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">False</property>
+ </packing>
+ </child>
+ <style>
+ <class name="small-button"/>
+ </style>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="contents">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/sfx2/uiconfig/ui/paneltitlebar.ui b/sfx2/uiconfig/ui/paneltitlebar.ui
deleted file mode 100644
index eac7c877cf2e..000000000000
--- a/sfx2/uiconfig/ui/paneltitlebar.ui
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2 -->
-<interface domain="sfx">
- <requires lib="gtk+" version="3.20"/>
- <object class="GtkBox" id="PanelTitleBar">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="addonimage">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="valign">center</property>
- <property name="icon-name">missing-image</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkExpander" id="expander">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="valign">center</property>
- <property name="hexpand">True</property>
- <property name="label-fill">True</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="vexpand">True</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="hexpand">True</property>
- <property name="use-underline">True</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="toolbar">
- <property name="can-focus">False</property>
- <property name="no-show-all">True</property>
- <property name="toolbar-style">icons</property>
- <property name="show-arrow">False</property>
- <property name="icon_size">2</property>
- <child>
- <object class="GtkToolButton" id="button">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="tooltip-text" translatable="yes" context="paneltitlebar|SFX_STR_SIDEBAR_MORE_OPTIONS">More Options</property>
- <property name="use-underline">True</property>
- <property name="icon-name">sfx2/res/symphony/morebutton.png</property>
- <child internal-child="accessible">
- <object class="AtkObject" id="button-atkobject">
- <property name="AtkObject::accessible-name" translatable="yes" context="paneltitlebar|SFX_STR_SIDEBAR_MORE_OPTIONS">More Options</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">False</property>
- </packing>
- </child>
- <style>
- <class name="small-button"/>
- </style>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
-</interface>