summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-11-04 15:22:53 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-11-12 09:49:09 +0100
commit64dcfe295762864656bc5876da10bec37b7fb6ec (patch)
tree4e8ca37b771bfd19a7cc1ae1c8dde264e05cf639
parent590b4e75e3a3d4d415f71c17f2aa2aea2326daf9 (diff)
weld panel TitleBar
use an expander for the expander-like feature Change-Id: I3af63dc252479914a0000aab59a30744f8073fd1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105310 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--include/sfx2/sidebar/Panel.hxx3
-rw-r--r--include/sfx2/sidebar/Theme.hxx5
-rw-r--r--sfx2/Library_sfx.mk1
-rw-r--r--sfx2/UIConfig_sfx.mk2
-rw-r--r--sfx2/inc/sidebar/AccessibleTitleBar.hxx44
-rw-r--r--sfx2/inc/sidebar/DeckTitleBar.hxx25
-rw-r--r--sfx2/inc/sidebar/PanelTitleBar.hxx23
-rw-r--r--sfx2/inc/sidebar/TitleBar.hxx48
-rw-r--r--sfx2/source/sidebar/AccessibleTitleBar.cxx60
-rw-r--r--sfx2/source/sidebar/DeckTitleBar.cxx134
-rw-r--r--sfx2/source/sidebar/FocusManager.cxx24
-rw-r--r--sfx2/source/sidebar/Panel.cxx3
-rw-r--r--sfx2/source/sidebar/PanelTitleBar.cxx136
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx10
-rw-r--r--sfx2/source/sidebar/Theme.cxx35
-rw-r--r--sfx2/source/sidebar/TitleBar.cxx142
-rw-r--r--sfx2/uiconfig/ui/decktitlebar.ui82
-rw-r--r--sfx2/uiconfig/ui/paneltitlebar.ui89
-rw-r--r--solenv/clang-format/excludelist2
-rw-r--r--solenv/sanitizers/ui/sfx.suppr5
20 files changed, 367 insertions, 506 deletions
diff --git a/include/sfx2/sidebar/Panel.hxx b/include/sfx2/sidebar/Panel.hxx
index ee635220cf55..cdeee5223559 100644
--- a/include/sfx2/sidebar/Panel.hxx
+++ b/include/sfx2/sidebar/Panel.hxx
@@ -73,7 +73,6 @@ public:
private:
const OUString msPanelId;
- VclPtr<PanelTitleBar> mpTitleBar;
const bool mbIsTitleBarOptional;
css::uno::Reference<css::ui::XUIElement> mxElement;
css::uno::Reference<css::ui::XSidebarPanel> mxPanelComponent;
@@ -81,8 +80,8 @@ private:
bool mbLurking;
const std::function<void()> maDeckLayoutTrigger;
const std::function<Context()> maContextAccess;
-
const css::uno::Reference<css::frame::XFrame>& mxFrame;
+ VclPtr<PanelTitleBar> mpTitleBar;
};
typedef std::vector<VclPtr<Panel> > SharedPanelContainer;
diff --git a/include/sfx2/sidebar/Theme.hxx b/include/sfx2/sidebar/Theme.hxx
index 38ba8d1e7078..7c6b441334e1 100644
--- a/include/sfx2/sidebar/Theme.hxx
+++ b/include/sfx2/sidebar/Theme.hxx
@@ -56,12 +56,7 @@ public:
AnyItem_ = Pre_Image_,
- Image_Grip,
- Image_Expand,
- Image_Collapse,
Image_TabBarMenu,
- Image_PanelMenu,
- Image_Closer,
Image_CloseIndicator,
Image_Color_,
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 05c31e58034d..aa722d248f48 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -259,7 +259,6 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/sidebar/SidebarPanelBase \
sfx2/source/sidebar/SidebarToolBox \
sfx2/source/sidebar/Accessible \
- sfx2/source/sidebar/AccessibleTitleBar \
sfx2/source/sidebar/AsynchronousCall \
sfx2/source/sidebar/Context \
sfx2/source/sidebar/ContextChangeBroadcaster \
diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk
index 5bb91d7ac6f6..b2851a75e205 100644
--- a/sfx2/UIConfig_sfx.mk
+++ b/sfx2/UIConfig_sfx.mk
@@ -22,6 +22,7 @@ $(eval $(call gb_UIConfig_add_uifiles,sfx,\
sfx2/uiconfig/ui/cmisinfopage \
sfx2/uiconfig/ui/cmisline \
sfx2/uiconfig/ui/custominfopage \
+ sfx2/uiconfig/ui/decktitlebar \
sfx2/uiconfig/ui/descriptioninfopage \
sfx2/uiconfig/ui/dockingwindow \
sfx2/uiconfig/ui/documentfontspage \
@@ -50,6 +51,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/password \
sfx2/uiconfig/ui/notebookbarpopup \
sfx2/uiconfig/ui/printeroptionsdialog \
diff --git a/sfx2/inc/sidebar/AccessibleTitleBar.hxx b/sfx2/inc/sidebar/AccessibleTitleBar.hxx
deleted file mode 100644
index f2105dabbd1d..000000000000
--- a/sfx2/inc/sidebar/AccessibleTitleBar.hxx
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- 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 .
- */
-#pragma once
-
-#include <toolkit/awt/vclxaccessiblecomponent.hxx>
-
-namespace com::sun::star::accessibility { class XAccessible; }
-
-namespace sfx2::sidebar {
-
-class TitleBar;
-
-class AccessibleTitleBar final
- : public VCLXAccessibleComponent
-{
-public:
- static css::uno::Reference<css::accessibility::XAccessible> Create (TitleBar& rTitleBar);
-
-private:
- virtual void FillAccessibleStateSet (utl::AccessibleStateSetHelper& rStateSet) override;
-
- explicit AccessibleTitleBar (VCLXWindow* pWindow);
- virtual ~AccessibleTitleBar() override;
-};
-
-} // end of namespace sfx2::sidebar
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/DeckTitleBar.hxx b/sfx2/inc/sidebar/DeckTitleBar.hxx
index eee139556020..3b1451ab449c 100644
--- a/sfx2/inc/sidebar/DeckTitleBar.hxx
+++ b/sfx2/inc/sidebar/DeckTitleBar.hxx
@@ -19,31 +19,40 @@
#pragma once
#include <sidebar/TitleBar.hxx>
+#include <vcl/customweld.hxx>
namespace sfx2::sidebar {
+class GripWidget;
+
class DeckTitleBar final : public TitleBar
{
public:
DeckTitleBar(const OUString& rsTitle,
vcl::Window* pParentWindow,
const std::function<void()>& rCloserAction);
+ virtual void dispose() override;
+ virtual ~DeckTitleBar() override;
+
+ virtual void SetTitle (const OUString& rsTitle) override;
+ virtual OUString GetTitle() const override;
void SetCloserVisible(const bool bIsCloserVisible);
- static tools::Rectangle GetDragArea();
+ tools::Rectangle GetDragArea();
virtual void DataChanged(const DataChangedEvent& rEvent) override;
- virtual void MouseMove(const MouseEvent& rMouseEvent) override;
private:
- virtual tools::Rectangle GetTitleArea(const tools::Rectangle& rTitleBarBox) override;
- virtual void PaintDecoration(vcl::RenderContext& rRenderContext) override;
- virtual Color GetBackgroundPaintColor() override;
- virtual void HandleToolBoxItemClick(const sal_uInt16 nItemIndex) override;
- virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+ virtual void HandleToolBoxItemClick() override;
+
+ DECL_LINK(DrawGripHdl, weld::DrawingArea::draw_args, void);
+
+ std::unique_ptr<GripWidget> mxGripWidget;
+ std::unique_ptr<weld::CustomWeld> mxGripWeld;
+ std::unique_ptr<weld::Label> mxLabel;
- static const sal_uInt16 mnCloserItemIndex = 1;
const std::function<void()> maCloserAction;
+ BitmapEx maGrip;
bool mbIsCloserVisible;
};
diff --git a/sfx2/inc/sidebar/PanelTitleBar.hxx b/sfx2/inc/sidebar/PanelTitleBar.hxx
index e84febf1e125..7be18d71f1fd 100644
--- a/sfx2/inc/sidebar/PanelTitleBar.hxx
+++ b/sfx2/inc/sidebar/PanelTitleBar.hxx
@@ -32,25 +32,26 @@ class PanelTitleBar final
{
public:
PanelTitleBar(const OUString& rsTitle, vcl::Window* pParentWindow, Panel* pPanel);
- virtual ~PanelTitleBar() override;
virtual void dispose() override;
+ virtual ~PanelTitleBar() override;
+
+ virtual void SetTitle (const OUString& rsTitle) override;
+ virtual OUString GetTitle() const override;
void SetMoreOptionsCommand(const OUString& rsCommandName,
- const css::uno::Reference<css::frame::XFrame>& rxFrame,
- const css::uno::Reference<css::frame::XController>& rxController);
+ const css::uno::Reference<css::frame::XFrame>& rxFrame);
+
+ void UpdateExpandedState();
virtual void DataChanged(const DataChangedEvent& rEvent) override;
- virtual void MouseButtonDown(const MouseEvent& rMouseEvent) override;
- virtual void MouseButtonUp(const MouseEvent& rMouseEvent) override;
private:
- virtual tools::Rectangle GetTitleArea(const tools::Rectangle& rTitleBarBox) override;
- virtual void PaintDecoration(vcl::RenderContext& rRenderContext) override;
- virtual Color GetBackgroundPaintColor() override;
- virtual void HandleToolBoxItemClick (const sal_uInt16 nItemIndex) override;
- virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+ virtual void HandleToolBoxItemClick() override;
+
+ DECL_LINK(ExpandHdl, weld::Expander&, void);
+
+ std::unique_ptr<weld::Expander> mxExpander;
- bool mbIsLeftButtonDown;
VclPtr<Panel> mpPanel;
static const sal_uInt16 mnMenuItemIndex = 1;
css::uno::Reference<css::frame::XFrame> mxFrame;
diff --git a/sfx2/inc/sidebar/TitleBar.hxx b/sfx2/inc/sidebar/TitleBar.hxx
index f86a39324d70..772b349b6a2c 100644
--- a/sfx2/inc/sidebar/TitleBar.hxx
+++ b/sfx2/inc/sidebar/TitleBar.hxx
@@ -19,54 +19,46 @@
#pragma once
#include <sidebar/SidebarToolBox.hxx>
+#include <sfx2/sidebar/Theme.hxx>
+#include <sfx2/weldutils.hxx>
+#include <vcl/InterimItemWindow.hxx>
namespace sfx2::sidebar {
-class TitleBar : public vcl::Window
+class TitleBar : public InterimItemWindow
{
public:
- TitleBar (const OUString& rsTitle,
- vcl::Window* pParentWindow,
- const Color& rInitialBackgroundColor);
- virtual ~TitleBar() override;
+ TitleBar(vcl::Window* pParentWindow,
+ const OUString& rUIXMLDescription, const OString& rID,
+ Theme::ThemeItem eThemeItem);
virtual void dispose() override;
+ virtual ~TitleBar() override;
- void SetTitle (const OUString& rsTitle);
- const OUString& GetTitle() const {return msTitle; }
+ virtual void SetTitle (const OUString& rsTitle) = 0;
+ virtual OUString GetTitle() const = 0;
void SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon);
- virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
- virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rUpdateArea) override;
virtual void DataChanged (const DataChangedEvent& rEvent) override;
- virtual void setPosSizePixel (tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, PosSizeFlags nFlags = PosSizeFlags::All) override;
- ToolBox& GetToolBox()
+ weld::Toolbar& GetToolBox()
{
- return *maToolBox;
+ return *mxToolBox;
}
- const ToolBox& GetToolBox() const
+ const weld::Toolbar& GetToolBox() const
{
- return *maToolBox;
+ return *mxToolBox;
}
protected:
- VclPtr<SidebarToolBox> maToolBox;
- OUString msTitle;
-
- virtual tools::Rectangle GetTitleArea (const tools::Rectangle& rTitleBarBox) = 0;
- virtual void PaintDecoration (vcl::RenderContext& rRenderContext) = 0;
- void PaintFocus(vcl::RenderContext& rRenderContext, const tools::Rectangle& rFocusBox);
- virtual Color GetBackgroundPaintColor() = 0;
- virtual void HandleToolBoxItemClick (const sal_uInt16 nItemIndex);
- virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+ std::unique_ptr<weld::Image> mxAddonImage;
+ std::unique_ptr<weld::Toolbar> mxToolBox;
+ std::unique_ptr<ToolbarUnoDispatcher> mxToolBoxController;
+ Theme::ThemeItem meThemeItem;
-private:
- Image maIcon;
- Color maBackgroundColor;
+ virtual void HandleToolBoxItemClick() = 0;
- void PaintTitle(vcl::RenderContext& rRenderContext, const tools::Rectangle& rTitleBox);
- DECL_LINK(SelectionHandler, ToolBox*, void);
+ DECL_LINK(SelectionHandler, const OString&, void);
};
} // end of namespace sfx2::sidebar
diff --git a/sfx2/source/sidebar/AccessibleTitleBar.cxx b/sfx2/source/sidebar/AccessibleTitleBar.cxx
deleted file mode 100644
index c92fbf59e812..000000000000
--- a/sfx2/source/sidebar/AccessibleTitleBar.cxx
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- 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 <sidebar/AccessibleTitleBar.hxx>
-#include <sidebar/Accessible.hxx>
-#include <sidebar/TitleBar.hxx>
-
-#include <com/sun/star/accessibility/AccessibleStateType.hpp>
-
-#include <unotools/accessiblestatesethelper.hxx>
-
-using namespace css;
-using namespace css::uno;
-
-namespace sfx2::sidebar {
-
-Reference<accessibility::XAccessible> AccessibleTitleBar::Create (TitleBar& rTitleBar)
-{
- rTitleBar.GetComponentInterface();
- VCLXWindow* pWindow = rTitleBar.GetWindowPeer();
- if (pWindow != nullptr)
- return new Accessible(new AccessibleTitleBar(pWindow));
- else
- return nullptr;
-}
-
-AccessibleTitleBar::AccessibleTitleBar (VCLXWindow* pWindow)
- : VCLXAccessibleComponent(pWindow)
-{
-}
-
-AccessibleTitleBar::~AccessibleTitleBar()
-{
-}
-
-void AccessibleTitleBar::FillAccessibleStateSet (utl::AccessibleStateSetHelper& rStateSet)
-{
- VCLXAccessibleComponent::FillAccessibleStateSet(rStateSet);
- rStateSet.AddState(accessibility::AccessibleStateType::FOCUSABLE);
-}
-
-} // end of namespace sfx2::sidebar
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/sidebar/DeckTitleBar.cxx b/sfx2/source/sidebar/DeckTitleBar.cxx
index 2d8fcd92b1c2..f7e0a8df7b7e 100644
--- a/sfx2/source/sidebar/DeckTitleBar.cxx
+++ b/sfx2/source/sidebar/DeckTitleBar.cxx
@@ -22,8 +22,7 @@
#include <sfx2/sfxresid.hxx>
#include <sfx2/strings.hrc>
-#include <vcl/event.hxx>
-#include <vcl/image.hxx>
+#include <vcl/customweld.hxx>
#include <vcl/ptrstyle.hxx>
#ifdef DEBUG
@@ -32,19 +31,46 @@
namespace sfx2::sidebar {
-namespace
+class GripWidget : public weld::CustomWidgetController
{
-const sal_Int32 gaLeftGripPadding (3);
-const sal_Int32 gaRightGripPadding (6);
-}
+private:
+ BitmapEx maGrip;
+public:
+ virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override
+ {
+ weld::CustomWidgetController::SetDrawingArea(pDrawingArea);
+ StyleUpdated();
+ }
+
+ virtual void StyleUpdated() override
+ {
+ maGrip = BitmapEx("sfx2/res/grip.png");
+ Size aGripSize(maGrip.GetSizePixel());
+ set_size_request(aGripSize.Width(), aGripSize.Height());
+ weld::CustomWidgetController::StyleUpdated();
+ }
+
+ virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& /*rRect*/) override
+ {
+ rRenderContext.SetBackground(Theme::GetColor(Theme::Color_DeckTitleBarBackground));
+ rRenderContext.DrawBitmapEx(Point(0, 0), maGrip);
+ }
+};
DeckTitleBar::DeckTitleBar (const OUString& rsTitle,
vcl::Window* pParentWindow,
const std::function<void()>& rCloserAction)
- : TitleBar(rsTitle, pParentWindow, GetBackgroundPaintColor())
+ : TitleBar(pParentWindow, "sfx/ui/decktitlebar.ui", "DeckTitleBar",
+ Theme::Color_DeckTitleBarBackground)
+ , mxGripWidget(new GripWidget)
+ , mxGripWeld(new weld::CustomWeld(*m_xBuilder, "grip", *mxGripWidget))
+ , mxLabel(m_xBuilder->weld_label("label"))
, maCloserAction(rCloserAction)
, mbIsCloserVisible(false)
{
+ mxLabel->set_label(rsTitle);
+ mxGripWidget->SetPointer(PointerStyle::Move);
+
OSL_ASSERT(pParentWindow != nullptr);
if (maCloserAction)
@@ -55,91 +81,69 @@ DeckTitleBar::DeckTitleBar (const OUString& rsTitle,
#endif
}
-void DeckTitleBar::SetCloserVisible (const bool bIsCloserVisible)
+DeckTitleBar::~DeckTitleBar()
{
- if (mbIsCloserVisible == bIsCloserVisible)
- return;
-
- mbIsCloserVisible = bIsCloserVisible;
-
- if (mbIsCloserVisible)
- {
- maToolBox->InsertItem(mnCloserItemIndex,
- Theme::GetImage(Theme::Image_Closer));
- maToolBox->SetQuickHelpText(mnCloserItemIndex,
- SfxResId(SFX_STR_SIDEBAR_CLOSE_DECK));
- }
- else
- maToolBox->RemoveItem(maToolBox->GetItemPos(mnCloserItemIndex));
+ disposeOnce();
}
-tools::Rectangle DeckTitleBar::GetTitleArea (const tools::Rectangle& rTitleBarBox)
+void DeckTitleBar::dispose()
{
- Image aGripImage (Theme::GetImage(Theme::Image_Grip));
- return tools::Rectangle(
- aGripImage.GetSizePixel().Width() + gaLeftGripPadding + gaRightGripPadding,
- rTitleBarBox.Top(),
- rTitleBarBox.Right(),
- rTitleBarBox.Bottom());
+ mxLabel.reset();
+ mxGripWeld.reset();
+ mxGripWidget.reset();
+ TitleBar::dispose();
}
tools::Rectangle DeckTitleBar::GetDragArea()
{
- Image aGripImage (Theme::GetImage(Theme::Image_Grip));
- return tools::Rectangle(0,0,
- aGripImage.GetSizePixel().Width() + gaLeftGripPadding + gaRightGripPadding,
- aGripImage.GetSizePixel().Height()
- );
+ int x, y, width, height;
+ if (mxGripWidget->GetDrawingArea()->get_extents_relative_to(*m_xContainer, x, y, width, height))
+ return tools::Rectangle(Point(x, y), Size(width, height));
+ return tools::Rectangle();
}
-void DeckTitleBar::PaintDecoration(vcl::RenderContext& rRenderContext)
+void DeckTitleBar::SetTitle(const OUString& rsTitle)
{
- Image aImage (Theme::GetImage(Theme::Image_Grip));
- const Point aTopLeft(gaLeftGripPadding,
- (GetSizePixel().Height() - aImage.GetSizePixel().Height()) / 2);
- rRenderContext.DrawImage(aTopLeft, aImage);
+ mxLabel->set_label(rsTitle);
}
-Color DeckTitleBar::GetBackgroundPaintColor()
+OUString DeckTitleBar::GetTitle() const
{
- return Theme::GetColor(Theme::Color_DeckTitleBarBackground);
+ return mxLabel->get_label();
}
-void DeckTitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex)
+void DeckTitleBar::SetCloserVisible (const bool bIsCloserVisible)
{
- if (nItemIndex == mnCloserItemIndex && maCloserAction)
- maCloserAction();
+ if (mbIsCloserVisible == bIsCloserVisible)
+ return;
+
+ mbIsCloserVisible = bIsCloserVisible;
+
+ if (mbIsCloserVisible)
+ {
+ mxToolBox->set_item_visible("button", true);
+ mxToolBox->set_item_icon_name("button", "sfx2/res/closedoc.png");
+ mxToolBox->set_item_tooltip_text("button",
+ SfxResId(SFX_STR_SIDEBAR_CLOSE_DECK));
+ }
+ else
+ {
+ mxToolBox->set_item_visible("button", false);
+ }
}
-css::uno::Reference<css::accessibility::XAccessible> DeckTitleBar::CreateAccessible()
+void DeckTitleBar::HandleToolBoxItemClick()
{
- SetAccessibleName(msTitle);
- SetAccessibleDescription(msTitle);
- return TitleBar::CreateAccessible();
+ if (maCloserAction)
+ maCloserAction();
}
void DeckTitleBar::DataChanged (const DataChangedEvent& rEvent)
{
- maToolBox->SetItemImage(
- mnCloserItemIndex,
- Theme::GetImage(Theme::Image_Closer));
+ mxToolBox->set_item_icon_name("button", "sfx2/res/closedoc.png");
TitleBar::DataChanged(rEvent);
}
-
-void DeckTitleBar::MouseMove (const MouseEvent& rMouseEvent)
-{
- tools::Rectangle aGrip = GetDragArea();
- PointerStyle eStyle = PointerStyle::Arrow;
-
- if ( aGrip.IsInside( rMouseEvent.GetPosPixel() ) )
- eStyle = PointerStyle::Move;
-
- SetPointer( eStyle );
-
- Window::MouseMove( rMouseEvent );
-}
-
} // end of namespace sfx2::sidebar
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/sidebar/FocusManager.cxx b/sfx2/source/sidebar/FocusManager.cxx
index 4a5140c1ae17..7c6ab781ff83 100644
--- a/sfx2/source/sidebar/FocusManager.cxx
+++ b/sfx2/source/sidebar/FocusManager.cxx
@@ -78,7 +78,6 @@ void FocusManager::ClearPanels()
if (panel->GetTitleBar())
{
UnregisterWindow(*panel->GetTitleBar());
- UnregisterWindow(panel->GetTitleBar()->GetToolBox());
}
panel->RemoveChildEventListener(LINK(this, FocusManager, ChildEventListener));
@@ -100,14 +99,12 @@ void FocusManager::SetDeckTitle (DeckTitleBar* pDeckTitleBar)
if (mpDeckTitleBar != nullptr)
{
UnregisterWindow(*mpDeckTitleBar);
- UnregisterWindow(mpDeckTitleBar->GetToolBox());
}
mpDeckTitleBar = pDeckTitleBar;
if (mpDeckTitleBar != nullptr)
{
RegisterWindow(*mpDeckTitleBar);
- RegisterWindow(mpDeckTitleBar->GetToolBox());
}
}
@@ -120,7 +117,6 @@ void FocusManager::SetPanels (const SharedPanelContainer& rPanels)
if (panel->GetTitleBar())
{
RegisterWindow(*panel->GetTitleBar());
- RegisterWindow(panel->GetTitleBar()->GetToolBox());
}
// Register also as child event listener at the panel.
@@ -157,8 +153,6 @@ FocusManager::FocusLocation FocusManager::GetFocusLocation (const vcl::Window& r
{
if (mpDeckTitleBar == &rWindow)
return FocusLocation(PC_DeckTitle, -1);
- else if (&mpDeckTitleBar->GetToolBox() == &rWindow)
- return FocusLocation(PC_DeckToolBox, -1);
}
// Search the panels.
@@ -169,8 +163,6 @@ FocusManager::FocusLocation FocusManager::GetFocusLocation (const vcl::Window& r
VclPtr<TitleBar> pTitleBar = maPanels[nIndex]->GetTitleBar();
if (pTitleBar == &rWindow)
return FocusLocation(PC_PanelTitle, nIndex);
- if (pTitleBar!=nullptr && &pTitleBar->GetToolBox()==&rWindow)
- return FocusLocation(PC_PanelToolBox, nIndex);
}
// Search the buttons.
@@ -190,11 +182,10 @@ void FocusManager::FocusDeckTitle()
{
mpDeckTitleBar->GrabFocus();
}
- else if (mpDeckTitleBar->GetToolBox().GetItemCount() > 0)
+ else if (mpDeckTitleBar->GetToolBox().get_n_items() > 0)
{
- ToolBox& rToolBox = mpDeckTitleBar->GetToolBox();
- rToolBox.GrabFocus();
- rToolBox.Invalidate();
+ weld::Toolbar& rToolBox = mpDeckTitleBar->GetToolBox();
+ rToolBox.grab_focus();
}
else
FocusPanel(0, false);
@@ -293,7 +284,6 @@ void FocusManager::RemoveWindow (vcl::Window& rWindow)
if ((*iPanel)->GetTitleBar() != nullptr)
{
UnregisterWindow(*(*iPanel)->GetTitleBar());
- UnregisterWindow((*iPanel)->GetTitleBar()->GetToolBox());
}
maPanels.erase(iPanel);
return;
@@ -313,12 +303,12 @@ void FocusManager::MoveFocusInsidePanel (
const sal_Int32 nDirection)
{
const bool bHasToolBoxItem (
- maPanels[rFocusLocation.mnIndex]->GetTitleBar()->GetToolBox().GetItemCount() > 0);
+ maPanels[rFocusLocation.mnIndex]->GetTitleBar()->GetToolBox().get_n_items() > 0);
switch (rFocusLocation.meComponent)
{
case PC_PanelTitle:
if (nDirection > 0 && bHasToolBoxItem)
- maPanels[rFocusLocation.mnIndex]->GetTitleBar()->GetToolBox().GrabFocus();
+ maPanels[rFocusLocation.mnIndex]->GetTitleBar()->GetToolBox().grab_focus();
else
FocusPanelContent(rFocusLocation.mnIndex);
break;
@@ -343,14 +333,14 @@ void FocusManager::MoveFocusInsideDeckTitle (
// is moved between a) deck title, b) deck closer and c) content
// of panel 0.
const bool bHasToolBoxItem (
- mpDeckTitleBar->GetToolBox().GetItemCount() > 0);
+ mpDeckTitleBar->GetToolBox().get_n_items() > 0);
switch (rFocusLocation.meComponent)
{
case PC_DeckTitle:
if (nDirection<0 && ! IsPanelTitleVisible(0))
FocusPanelContent(0);
else if (bHasToolBoxItem)
- mpDeckTitleBar->GetToolBox().GrabFocus();
+ mpDeckTitleBar->GetToolBox().grab_focus();
break;
case PC_DeckToolBox:
diff --git a/sfx2/source/sidebar/Panel.cxx b/sfx2/source/sidebar/Panel.cxx
index c4de2280f891..c45a1e5efd42 100644
--- a/sfx2/source/sidebar/Panel.cxx
+++ b/sfx2/source/sidebar/Panel.cxx
@@ -51,7 +51,6 @@ Panel::Panel(const PanelDescriptor& rPanelDescriptor,
)
: Window(pParentWindow)
, msPanelId(rPanelDescriptor.msId)
- , mpTitleBar(VclPtr<PanelTitleBar>::Create(rPanelDescriptor.msTitle, pParentWindow, this))
, mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional)
, mxElement()
, mxPanelComponent()
@@ -60,6 +59,7 @@ Panel::Panel(const PanelDescriptor& rPanelDescriptor,
, maDeckLayoutTrigger(rDeckLayoutTrigger)
, maContextAccess(rContextAccess)
, mxFrame(rxFrame)
+ , mpTitleBar(VclPtr<PanelTitleBar>::Create(rPanelDescriptor.msTitle, pParentWindow, this))
{
SetText(rPanelDescriptor.msTitle);
}
@@ -134,6 +134,7 @@ void Panel::SetExpanded (const bool bIsExpanded)
return;
mbIsExpanded = bIsExpanded;
+ mpTitleBar->UpdateExpandedState();
maDeckLayoutTrigger();
if (maContextAccess && pSidebarController)
diff --git a/sfx2/source/sidebar/PanelTitleBar.cxx b/sfx2/source/sidebar/PanelTitleBar.cxx
index 4dbb787cd3bd..3cf1cff8fbb1 100644
--- a/sfx2/source/sidebar/PanelTitleBar.cxx
+++ b/sfx2/source/sidebar/PanelTitleBar.cxx
@@ -36,25 +36,43 @@ using namespace css::uno;
namespace sfx2::sidebar {
-const sal_Int32 gaLeftIconPadding (5);
-const sal_Int32 gaRightIconPadding (5);
-
PanelTitleBar::PanelTitleBar(const OUString& rsTitle,
vcl::Window* pParentWindow,
Panel* pPanel)
- : TitleBar(rsTitle, pParentWindow, GetBackgroundPaintColor()),
- mbIsLeftButtonDown(false),
+ : TitleBar(pParentWindow, "sfx/ui/paneltitlebar.ui", "PanelTitleBar",
+ Theme::Color_PanelTitleBarBackground),
+ mxExpander(m_xBuilder->weld_expander("expander")),
mpPanel(pPanel),
mxFrame(),
msMoreOptionsCommand()
{
- OSL_ASSERT(mpPanel != nullptr);
+ mxExpander->set_label(rsTitle);
+ mxExpander->connect_expanded(LINK(this, PanelTitleBar, ExpandHdl));
+
+ assert(mpPanel);
+
+ UpdateExpandedState();
#ifdef DEBUG
SetText(OUString("PanelTitleBar"));
#endif
}
+void PanelTitleBar::SetTitle(const OUString& rsTitle)
+{
+ mxExpander->set_label(rsTitle);
+}
+
+OUString PanelTitleBar::GetTitle() const
+{
+ return mxExpander->get_label();
+}
+
+void PanelTitleBar::UpdateExpandedState()
+{
+ mxExpander->set_expanded(mpPanel->IsExpanded());
+}
+
PanelTitleBar::~PanelTitleBar()
{
disposeOnce();
@@ -63,18 +81,18 @@ PanelTitleBar::~PanelTitleBar()
void PanelTitleBar::dispose()
{
mpPanel.clear();
+ mxExpander.reset();
TitleBar::dispose();
}
void PanelTitleBar::SetMoreOptionsCommand(const OUString& rsCommandName,
- const css::uno::Reference<css::frame::XFrame>& rxFrame,
- const css::uno::Reference<css::frame::XController>& rxController)
+ const css::uno::Reference<css::frame::XFrame>& rxFrame)
{
if (rsCommandName == msMoreOptionsCommand)
return;
if (msMoreOptionsCommand.getLength() > 0)
- maToolBox->RemoveItem(maToolBox->GetItemPos(mnMenuItemIndex));
+ mxToolBox->set_item_visible("button", false);
msMoreOptionsCommand = rsCommandName;
mxFrame = rxFrame;
@@ -82,63 +100,15 @@ void PanelTitleBar::SetMoreOptionsCommand(const OUString& rsCommandName,
if (msMoreOptionsCommand.getLength() <= 0)
return;
- maToolBox->InsertItem(
- mnMenuItemIndex,
- Theme::GetImage(Theme::Image_PanelMenu));
- Reference<frame::XToolbarController> xController (
- ControllerFactory::CreateToolBoxController(
- maToolBox.get(),
- mnMenuItemIndex,
- msMoreOptionsCommand,
- rxFrame, rxController,
- VCLUnoHelper::GetInterface(maToolBox.get()),
- 0, true));
- maToolBox->SetController(mnMenuItemIndex, xController);
- maToolBox->SetQuickHelpText(
- mnMenuItemIndex,
+ mxToolBox->set_item_visible("button", true);
+ mxToolBox->set_item_icon_name("button", "sfx2/res/symphony/morebutton.png");
+ mxToolBox->set_item_tooltip_text(
+ "button",
SfxResId(SFX_STR_SIDEBAR_MORE_OPTIONS));
}
-tools::Rectangle PanelTitleBar::GetTitleArea (const tools::Rectangle& rTitleBarBox)
-{
- if (mpPanel != nullptr)
- {
- Image aImage (mpPanel->IsExpanded()
- ? Theme::GetImage(Theme::Image_Expand)
- : Theme::GetImage(Theme::Image_Collapse));
- return tools::Rectangle(
- aImage.GetSizePixel().Width() + gaLeftIconPadding + gaRightIconPadding,
- rTitleBarBox.Top(),
- rTitleBarBox.Right(),
- rTitleBarBox.Bottom());
- }
- else
- return rTitleBarBox;
-}
-
-void PanelTitleBar::PaintDecoration (vcl::RenderContext& rRenderContext)
+void PanelTitleBar::HandleToolBoxItemClick()
{
- if (mpPanel != nullptr)
- {
- Image aImage (mpPanel->IsExpanded()
- ? Theme::GetImage(Theme::Image_Collapse)
- : Theme::GetImage(Theme::Image_Expand));
- const Point aTopLeft(gaLeftIconPadding,
- (GetSizePixel().Height() - aImage.GetSizePixel().Height()) / 2);
- rRenderContext.DrawImage(aTopLeft, aImage);
- }
-}
-
-Color PanelTitleBar::GetBackgroundPaintColor()
-{
- return Theme::GetColor(Theme::Color_PanelTitleBarBackground);
-}
-
-void PanelTitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex)
-{
- if (nItemIndex != mnMenuItemIndex)
- return;
-
if (msMoreOptionsCommand.getLength() <= 0)
return;
@@ -155,48 +125,16 @@ void PanelTitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex)
}
}
-Reference<accessibility::XAccessible> PanelTitleBar::CreateAccessible()
-{
- SetAccessibleName(msTitle);
- SetAccessibleDescription(msTitle);
- return TitleBar::CreateAccessible();
-}
-
-void PanelTitleBar::MouseButtonDown (const MouseEvent& rMouseEvent)
+IMPL_LINK(PanelTitleBar, ExpandHdl, weld::Expander&, rExpander, void)
{
- if (rMouseEvent.IsLeft())
- {
- mbIsLeftButtonDown = true;
- CaptureMouse();
- }
-}
-
-void PanelTitleBar::MouseButtonUp (const MouseEvent& rMouseEvent)
-{
- if (IsMouseCaptured())
- ReleaseMouse();
-
- if (rMouseEvent.IsLeft())
- {
- if (mbIsLeftButtonDown)
- {
- if (mpPanel != nullptr)
- {
- mpPanel->SetExpanded( ! mpPanel->IsExpanded());
- Invalidate();
- GrabFocus();
- }
- }
- }
- if (mbIsLeftButtonDown)
- mbIsLeftButtonDown = false;
+ if (!mpPanel)
+ return;
+ mpPanel->SetExpanded(rExpander.get_expanded());
}
void PanelTitleBar::DataChanged (const DataChangedEvent& rEvent)
{
- maToolBox->SetItemImage(
- mnMenuItemIndex,
- Theme::GetImage(Theme::Image_PanelMenu));
+ mxToolBox->set_item_icon_name("button", "sfx2/res/symphony/morebutton.png");
TitleBar::DataChanged(rEvent);
}
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 435ea63150d3..8a0e851cff66 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -734,7 +734,7 @@ void SidebarController::CreatePanels(const OUString& rDeckId, const Context& rCo
{
pTitleBar->SetMoreOptionsCommand(
rPanelContexDescriptor.msMenuCommand,
- mxFrame, xController);
+ mxFrame);
}
++nWriteIndex;
}
@@ -1575,17 +1575,15 @@ void SidebarController::FadeIn()
tools::Rectangle SidebarController::GetDeckDragArea() const
{
tools::Rectangle aRect;
-
- if(mpCurrentDeck)
+ if (mpCurrentDeck)
{
VclPtr<DeckTitleBar> pTitleBar(mpCurrentDeck->GetTitleBar());
- if(pTitleBar)
+ if (pTitleBar)
{
- aRect = DeckTitleBar::GetDragArea();
+ aRect = pTitleBar->GetDragArea();
}
}
-
return aRect;
}
diff --git a/sfx2/source/sidebar/Theme.cxx b/sfx2/source/sidebar/Theme.cxx
index da66a71c292d..361a77414a8e 100644
--- a/sfx2/source/sidebar/Theme.cxx
+++ b/sfx2/source/sidebar/Theme.cxx
@@ -241,24 +241,9 @@ void Theme::UpdateTheme()
maPropertyIdToNameMap[Color_VerticalBorder],
Any(sal_Int32(aBorderColor.GetRGBColor())));
setPropertyValue(
- maPropertyIdToNameMap[Image_Grip],
- Any(OUString("private:graphicrepository/sfx2/res/grip.png")));
- setPropertyValue(
- maPropertyIdToNameMap[Image_Expand],
- Any(OUString("private:graphicrepository/res/plus.png")));
- setPropertyValue(
- maPropertyIdToNameMap[Image_Collapse],
- Any(OUString("private:graphicrepository/res/minus.png")));
- setPropertyValue(
maPropertyIdToNameMap[Image_TabBarMenu],
Any(OUString("private:graphicrepository/sfx2/res/symphony/open_more.png")));
setPropertyValue(
- maPropertyIdToNameMap[Image_PanelMenu],
- Any(OUString("private:graphicrepository/sfx2/res/symphony/morebutton.png")));
- setPropertyValue(
- maPropertyIdToNameMap[Image_Closer],
- Any(OUString("private:graphicrepository/sfx2/res/closedoc.png")));
- setPropertyValue(
maPropertyIdToNameMap[Image_CloseIndicator],
Any(OUString("private:graphicrepository/cmd/lc_decrementlevel.png")));
}
@@ -532,24 +517,9 @@ void Theme::SetupPropertyMaps()
maIntegers.resize(Int_Bool_ - Color_Int_ - 1);
maBooleans.resize(Post_Bool_ - Int_Bool_ - 1);
- maPropertyNameToIdMap["Image_Grip"]=Image_Grip;
- maPropertyIdToNameMap[Image_Grip]="Image_Grip";
-
- maPropertyNameToIdMap["Image_Expand"]=Image_Expand;
- maPropertyIdToNameMap[Image_Expand]="Image_Expand";
-
- maPropertyNameToIdMap["Image_Collapse"]=Image_Collapse;
- maPropertyIdToNameMap[Image_Collapse]="Image_Collapse";
-
maPropertyNameToIdMap["Image_TabBarMenu"]=Image_TabBarMenu;
maPropertyIdToNameMap[Image_TabBarMenu]="Image_TabBarMenu";
- maPropertyNameToIdMap["Image_PanelMenu"]=Image_PanelMenu;
- maPropertyIdToNameMap[Image_PanelMenu]="Image_PanelMenu";
-
- maPropertyNameToIdMap["Image_Closer"]=Image_Closer;
- maPropertyIdToNameMap[Image_Closer]="Image_Closer";
-
maPropertyNameToIdMap["Image_CloseIndicator"]=Image_CloseIndicator;
maPropertyIdToNameMap[Image_CloseIndicator]="Image_CloseIndicator";
@@ -672,12 +642,7 @@ Theme::PropertyType Theme::GetPropertyType (const ThemeItem eItem)
{
switch(eItem)
{
- case Image_Grip:
- case Image_Expand:
- case Image_Collapse:
case Image_TabBarMenu:
- case Image_PanelMenu:
- case Image_Closer:
case Image_CloseIndicator:
return PT_Image;
diff --git a/sfx2/source/sidebar/TitleBar.cxx b/sfx2/source/sidebar/TitleBar.cxx
index 5324857c56cc..615cb6de3b7b 100644
--- a/sfx2/source/sidebar/TitleBar.cxx
+++ b/sfx2/source/sidebar/TitleBar.cxx
@@ -18,28 +18,22 @@
*/
#include <sidebar/TitleBar.hxx>
-#include <sidebar/AccessibleTitleBar.hxx>
-
-#include <com/sun/star/accessibility/AccessibleRole.hpp>
-
-namespace
-{
- const sal_Int32 gnLeftIconSpace (3);
- const sal_Int32 gnRightIconSpace (3);
-}
namespace sfx2::sidebar {
-TitleBar::TitleBar(const OUString& rsTitle,
- vcl::Window* pParentWindow,
- const Color& rInitialBackgroundColor)
- : Window(pParentWindow)
- , maToolBox(VclPtr<SidebarToolBox>::Create(this))
- , msTitle(rsTitle)
- , maIcon()
- , maBackgroundColor(rInitialBackgroundColor)
+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"))
+ , meThemeItem(eThemeItem)
{
- maToolBox->SetSelectHdl(LINK(this, TitleBar, SelectionHandler));
+ Color aBgColor = Theme::GetColor(meThemeItem);
+ m_xContainer->set_background(aBgColor);
+ mxToolBox->set_background(aBgColor);
+
+ mxToolBox->connect_clicked(LINK(this, TitleBar, SelectionHandler));
}
TitleBar::~TitleBar()
@@ -49,121 +43,25 @@ TitleBar::~TitleBar()
void TitleBar::dispose()
{
- maToolBox.disposeAndClear();
- vcl::Window::dispose();
-}
-
-void TitleBar::SetTitle(const OUString& rsTitle)
-{
- msTitle = rsTitle;
- Invalidate();
+ mxToolBox.reset();
+ mxAddonImage.reset();
+ InterimItemWindow::dispose();
}
void TitleBar::SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon)
{
- maIcon = Image(rIcon);
- Invalidate();
-}
-
-void TitleBar::ApplySettings(vcl::RenderContext& rRenderContext)
-{
- rRenderContext.SetBackground(maBackgroundColor);
-}
-
-void TitleBar::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& /*rUpdateArea*/)
-{
- // Paint title bar background.
- Size aWindowSize (GetSizePixel());
- tools::Rectangle aTitleBarBox(0,0, aWindowSize.Width(), aWindowSize.Height());
-
- PaintDecoration(rRenderContext);
- const tools::Rectangle aTitleBox(GetTitleArea(aTitleBarBox));
- PaintTitle(rRenderContext, aTitleBox);
- PaintFocus(rRenderContext, aTitleBox);
+ mxAddonImage->set_image(rIcon);
+ mxAddonImage->set_visible(rIcon.is());
}
void TitleBar::DataChanged (const DataChangedEvent& /*rEvent*/)
{
- maBackgroundColor = GetBackgroundPaintColor();
- Invalidate();
-}
-
-void TitleBar::setPosSizePixel (tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, PosSizeFlags nFlags)
-{
- Window::setPosSizePixel(nX, nY, nWidth, nHeight, nFlags);
-
- // Place the toolbox.
- const sal_Int32 nToolBoxWidth (maToolBox->GetItemPosRect(0).GetWidth());
- maToolBox->setPosSizePixel(nWidth - nToolBoxWidth,0, nToolBoxWidth, nHeight);
- maToolBox->Show();
+ m_xContainer->set_background(Theme::GetColor(meThemeItem));
}
-void TitleBar::HandleToolBoxItemClick(const sal_uInt16 /*nItemIndex*/)
+IMPL_LINK_NOARG(TitleBar, SelectionHandler, const OString&, void)
{
- // Any real processing has to be done in derived class.
-}
-
-css::uno::Reference<css::accessibility::XAccessible> TitleBar::CreateAccessible()
-{
- SetAccessibleRole(css::accessibility::AccessibleRole::PANEL);
- return AccessibleTitleBar::Create(*this);
-}
-
-void TitleBar::PaintTitle(vcl::RenderContext& rRenderContext, const tools::Rectangle& rTitleBox)
-{
- rRenderContext.Push(PushFlags::FONT | PushFlags::TEXTCOLOR);
-
- tools::Rectangle aTitleBox(rTitleBox);
-
- // When there is an icon then paint it at the left of the given
- // box.
- if (!!maIcon)
- {
- rRenderContext.DrawImage(Point(aTitleBox.Left() + gnLeftIconSpace,
- aTitleBox.Top() + (aTitleBox.GetHeight() - maIcon.GetSizePixel().Height()) / 2),
- maIcon);
- aTitleBox.AdjustLeft(gnLeftIconSpace + maIcon.GetSizePixel().Width() + gnRightIconSpace );
- }
-
- vcl::Font aFont(rRenderContext.GetFont());
- aFont.SetWeight(WEIGHT_BOLD);
- rRenderContext.SetFont(aFont);
-
- // Paint title bar text.
- rRenderContext.SetTextColor(rRenderContext.GetTextColor());
- rRenderContext.DrawText(aTitleBox, msTitle, DrawTextFlags::Left | DrawTextFlags::VCenter);
- rRenderContext.Pop();
-}
-
-void TitleBar::PaintFocus(vcl::RenderContext& rRenderContext, const tools::Rectangle& rFocusBox)
-{
- rRenderContext.Push(PushFlags::FONT | PushFlags::TEXTCOLOR);
-
- vcl::Font aFont(rRenderContext.GetFont());
- aFont.SetWeight(WEIGHT_BOLD);
- rRenderContext.SetFont(aFont);
-
- const tools::Rectangle aTextBox(rRenderContext.GetTextRect(rFocusBox, msTitle, DrawTextFlags::Left | DrawTextFlags::VCenter));
-
- const tools::Rectangle aLargerTextBox(aTextBox.Left() - 2,
- aTextBox.Top() - 2,
- aTextBox.Right() + 2,
- aTextBox.Bottom() + 2);
-
- if (HasFocus())
- Window::ShowFocus(aLargerTextBox);
- else
- Window::HideFocus();
-
- rRenderContext.Pop();
-}
-
-IMPL_LINK(TitleBar, SelectionHandler, ToolBox*, pToolBox, void)
-{
- OSL_ASSERT(maToolBox.get()==pToolBox);
- const sal_uInt16 nItemId (maToolBox->GetHighlightItemId());
-
- HandleToolBoxItemClick(nItemId);
+ HandleToolBoxItemClick();
}
} // end of namespace sfx2::sidebar
diff --git a/sfx2/uiconfig/ui/decktitlebar.ui b/sfx2/uiconfig/ui/decktitlebar.ui
new file mode 100644
index 000000000000..0e48eddd815f
--- /dev/null
+++ b/sfx2/uiconfig/ui/decktitlebar.ui
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.1 -->
+<interface domain="sfx">
+ <requires lib="gtk+" version="3.20"/>
+ <object class="GtkBox" id="DeckTitleBar">
+ <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="GtkDrawingArea" id="grip">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkImage" id="addonimage">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">center</property>
+ <property name="stock">gtk-missing-image</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </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="visible">True</property>
+ <property name="can-focus">False</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="use-underline">True</property>
+ </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>
diff --git a/sfx2/uiconfig/ui/paneltitlebar.ui b/sfx2/uiconfig/ui/paneltitlebar.ui
new file mode 100644
index 000000000000..721abab47dfd
--- /dev/null
+++ b/sfx2/uiconfig/ui/paneltitlebar.ui
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.1 -->
+<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="stock">gtk-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="visible">True</property>
+ <property name="can-focus">False</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="use-underline">True</property>
+ </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>
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index c14029e5e69f..e0379086f6ea 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -11697,7 +11697,6 @@ sfx2/inc/notebookbar/NotebookbarTabControl.hxx
sfx2/inc/preventduplicateinteraction.hxx
sfx2/inc/recentdocsview.hxx
sfx2/inc/sidebar/Accessible.hxx
-sfx2/inc/sidebar/AccessibleTitleBar.hxx
sfx2/inc/sidebar/ContextChangeBroadcaster.hxx
sfx2/inc/sidebar/ContextList.hxx
sfx2/inc/sidebar/ControlFactory.hxx
@@ -11947,7 +11946,6 @@ sfx2/source/notify/hintpost.cxx
sfx2/source/notify/openurlhint.cxx
sfx2/source/safemode/safemode.cxx
sfx2/source/sidebar/Accessible.cxx
-sfx2/source/sidebar/AccessibleTitleBar.cxx
sfx2/source/sidebar/AsynchronousCall.cxx
sfx2/source/sidebar/Context.cxx
sfx2/source/sidebar/ContextChangeBroadcaster.cxx
diff --git a/solenv/sanitizers/ui/sfx.suppr b/solenv/sanitizers/ui/sfx.suppr
index c201fb3dd810..72aeef4dfec8 100644
--- a/solenv/sanitizers/ui/sfx.suppr
+++ b/solenv/sanitizers/ui/sfx.suppr
@@ -10,6 +10,9 @@ sfx2/uiconfig/ui/cmisline.ui://GtkSpinButton[@id='time'] no-labelled-by
sfx2/uiconfig/ui/custominfopage.ui://GtkLabel[@id='name'] orphan-label
sfx2/uiconfig/ui/custominfopage.ui://GtkLabel[@id='type'] orphan-label
sfx2/uiconfig/ui/custominfopage.ui://GtkLabel[@id='value'] orphan-label
+sfx2/uiconfig/ui/decktitlebar.ui://GtkImage[@id='addonimage'] no-labelled-by
+sfx2/uiconfig/ui/decktitlebar.ui://GtkLabel[@id='label'] orphan-label
+sfx2/uiconfig/ui/decktitlebar.ui://GtkToolButton[@id='button'] button-no-label
sfx2/uiconfig/ui/documentinfopage.ui://GtkLabel[@id='showcreate'] orphan-label
sfx2/uiconfig/ui/documentinfopage.ui://GtkLabel[@id='showmodify'] orphan-label
sfx2/uiconfig/ui/documentinfopage.ui://GtkLabel[@id='showsigned'] orphan-label
@@ -41,6 +44,8 @@ sfx2/uiconfig/ui/templatepanel.ui://GtkToggleToolButton[@id='5'] button-no-label
sfx2/uiconfig/ui/templatepanel.ui://GtkToggleToolButton[@id='6'] button-no-label
sfx2/uiconfig/ui/templatepanel.ui://GtkToggleToolButton[@id='65535'] button-no-label
sfx2/uiconfig/ui/templatedlg.ui://GtkLabel[@id='label1'] orphan-label
+sfx2/uiconfig/ui/paneltitlebar.ui://GtkImage[@id='addonimage'] no-labelled-by
+sfx2/uiconfig/ui/paneltitlebar.ui://GtkToolButton[@id='button'] button-no-label
sfx2/uiconfig/ui/versioncommentdialog.ui://GtkLabel[@id='timestamp'] orphan-label
sfx2/uiconfig/ui/versioncommentdialog.ui://GtkLabel[@id='author'] orphan-label
sfx2/uiconfig/ui/versioncommentdialog.ui://GtkTextView[@id='textview'] no-labelled-by