Rebased ref, commits from common ancestor: commit 3c6bf1ba72e62b01b7e7ec9343ff216f8cd2130d Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Mar 12 14:25:34 2021 +0000 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Thu May 20 13:22:22 2021 +0200
weld the sidebar deck Change-Id: Idc6710df7e59bcb5f61fca783e0cc0666cb13a1f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112404 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/sfx2/sidebar/Deck.hxx b/include/sfx2/sidebar/Deck.hxx index 5122e915da14..489f6137b3a7 100644 --- a/include/sfx2/sidebar/Deck.hxx +++ b/include/sfx2/sidebar/Deck.hxx @@ -19,15 +19,14 @@ #pragma once #include <sfx2/sidebar/Panel.hxx> - -#include <vcl/window.hxx> - -class ScrollBar; +#include <vcl/InterimItemWindow.hxx> +#include <vcl/weld.hxx> namespace sfx2::sidebar { class DeckDescriptor; class DeckTitleBar; +class SidebarDockingWindow; /** This is the parent window of the panels. It displays the deck title. @@ -35,25 +34,25 @@ class DeckTitleBar; A deck consists of multiple panels. E.g. Properties, Styles, Navigator. */ -class Deck final : public vcl::Window +class Deck final : public InterimItemWindow { public: - Deck(const DeckDescriptor& rDeckDescriptor, vcl::Window* pParentWindow, + Deck(const DeckDescriptor& rDeckDescriptor, SidebarDockingWindow* pParentWindow, const std::function<void()>& rCloserAction); virtual ~Deck() override; virtual void dispose() override; const OUString& GetId() const { return msId; } - VclPtr<DeckTitleBar> const& GetTitleBar() const; + DeckTitleBar* GetTitleBar() const; tools::Rectangle GetContentArea() const; void ResetPanels(const SharedPanelContainer& rPanels); const SharedPanelContainer& GetPanels() const { return maPanels; } - Panel* GetPanel(OUString const& panelId); + std::shared_ptr<Panel> GetPanel(std::u16string_view panelId); void RequestLayout(); - vcl::Window* GetPanelParentWindow(); + weld::Widget* GetPanelParentWindow(); /** Try to make the panel completely visible. When the whole panel does not fit then make its top visible @@ -61,11 +60,8 @@ public: */ void ShowPanel(const Panel& rPanel); - 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 bool EventNotify(NotifyEvent& rEvent) override; + virtual void Resize() override; virtual void DumpAsPropertyTree(tools::JsonWriter&) override; @@ -74,17 +70,7 @@ public: sal_Int32 GetMinimalWidth() const { return mnMinimalWidth; } - class ScrollContainerWindow final : public vcl::Window - { - public: - ScrollContainerWindow(vcl::Window* pParentWindow); - virtual void Paint(vcl::RenderContext& rRenderContext, - const tools::Rectangle& rUpdateArea) override; - void SetSeparators(const ::std::vector<sal_Int32>& rSeparators); - - private: - std::vector<sal_Int32> maSeparators; - }; + SidebarDockingWindow* GetDockingWindow() const { return mxParentWindow; } private: void RequestLayoutInternal(); @@ -94,14 +80,11 @@ private: sal_Int32 mnMinimalWidth; sal_Int32 mnMinimalHeight; SharedPanelContainer maPanels; - VclPtr<DeckTitleBar> mpTitleBar; - VclPtr<vcl::Window> mpScrollClipWindow; - VclPtr<ScrollContainerWindow> mpScrollContainer; - VclPtr<vcl::Window> mpFiller; - VclPtr<ScrollBar> mpVerticalScrollBar; - - DECL_LINK(HandleVerticalScrollBarChange, ScrollBar*, void); - bool ProcessWheelEvent(CommandEvent const* pCommandEvent); + + VclPtr<SidebarDockingWindow> mxParentWindow; + std::unique_ptr<DeckTitleBar> mxTitleBar; + std::unique_ptr<weld::ScrolledWindow> mxVerticalScrollBar; + std::unique_ptr<weld::Container> mxContents; }; } // end of namespace sfx2::sidebar diff --git a/include/sfx2/sidebar/FocusManager.hxx b/include/sfx2/sidebar/FocusManager.hxx index 0bebe247e634..2370ff3f801c 100644 --- a/include/sfx2/sidebar/FocusManager.hxx +++ b/include/sfx2/sidebar/FocusManager.hxx @@ -20,6 +20,7 @@ #include <sfx2/sidebar/Panel.hxx> #include <tools/link.hxx> +#include <vcl/vclevent.hxx> #include <vcl/keycod.hxx> namespace weld { @@ -64,13 +65,14 @@ public: void GrabFocus(); void GrabFocusPanel(); - void SetDeckTitle(DeckTitleBar* pDeckTitleBar); + void SetDeck(Deck* pDeck); void SetPanels(const SharedPanelContainer& rPanels); void SetButtons(const std::vector<weld::Widget*>& rButtons); private: - VclPtr<DeckTitleBar> mpDeckTitleBar; - std::vector<VclPtr<Panel> > maPanels; + VclPtr<Deck> mxDeck; + DeckTitleBar* mpDeckTitleBar; + SharedPanelContainer maPanels; std::vector<weld::Widget*> maButtons; const std::function<void(const Panel&)> maShowPanelFunctor; @@ -94,7 +96,6 @@ private: /** Listen for key events for panels and buttons. */ DECL_LINK(KeyInputHdl, const KeyEvent&, bool); - DECL_LINK(ChildEventListener, VclWindowEvent&, void); void ClearPanels(); void ClearButtons(); @@ -105,10 +106,6 @@ private: void RegisterWindow(weld::Widget& rWidget); static void UnregisterWindow(weld::Widget& rWidget); - /** Remove the window from the panel or the button container. - */ - void RemoveWindow(vcl::Window& rWindow); - void FocusDeckTitle(); bool IsDeckTitleVisible() const; bool IsPanelTitleVisible(const sal_Int32 nPanelIndex) const; @@ -130,13 +127,12 @@ private: void ClickButton(const sal_Int32 nButtonIndex); void MoveFocusInsidePanel(const FocusLocation& rLocation, const sal_Int32 nDirection); - void MoveFocusInsideDeckTitle(const FocusLocation& rLocation, + bool MoveFocusInsideDeckTitle(const FocusLocation& rLocation, const sal_Int32 nDirection); bool HandleKeyEvent(const vcl::KeyCode& rKeyCode, const FocusLocation& rLocation); - FocusLocation GetFocusLocation(const vcl::Window& rWindow) const; FocusLocation GetFocusLocation() const; }; diff --git a/include/sfx2/sidebar/Panel.hxx b/include/sfx2/sidebar/Panel.hxx index 9835ccd8207a..dd5926c6a984 100644 --- a/include/sfx2/sidebar/Panel.hxx +++ b/include/sfx2/sidebar/Panel.hxx @@ -19,9 +19,7 @@ #pragma once #include <sfx2/dllapi.h> - -#include <vcl/InterimItemWindow.hxx> - +#include <vcl/weld.hxx> #include <vector> namespace com::sun::star::frame @@ -43,27 +41,28 @@ class XWindow; namespace sfx2::sidebar { +class Context; +class Deck; class PanelDescriptor; class PanelTitleBar; -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 InterimItemWindow +class SFX2_DLLPUBLIC Panel final { public: - Panel(const PanelDescriptor& rPanelDescriptor, vcl::Window* pParentWindow, - const bool bIsInitiallyExpanded, const std::function<void()>& rDeckLayoutTrigger, + Panel(const PanelDescriptor& rPanelDescriptor, weld::Widget* pParentWindow, + const bool bIsInitiallyExpanded, Deck* pDeck, const std::function<Context()>& rContextAccess, const css::uno::Reference<css::frame::XFrame>& rxFrame); - virtual ~Panel() override; - virtual void dispose() override; + ~Panel(); PanelTitleBar* GetTitleBar() const; - void ShowTitlebar(bool bShowTitlebar); + weld::Container* GetContents() const; + void Show(bool bShow); bool IsTitleBarOptional() const { return mbIsTitleBarOptional; } void SetUIElement(const css::uno::Reference<css::ui::XUIElement>& rxElement); const css::uno::Reference<css::ui::XSidebarPanel>& GetPanelComponent() const @@ -76,32 +75,48 @@ public: bool IsExpanded() const { return mbIsExpanded; } bool HasIdPredicate(const OUString& rsId) const; const OUString& GetId() const { return msPanelId; } - void TriggerDeckLayouting() { maDeckLayoutTrigger(); } + const OUString& GetTitle() const { return msTitle; } + void TriggerDeckLayouting(); + + void SetHeightPixel(int nHeight); + + bool get_extents(tools::Rectangle& rExtents) const; /// Set whether a panel should be present but invisible / inactive void SetLurkMode(bool bLurk); bool IsLurking() const { return mbLurking; } - virtual void DataChanged(const DataChangedEvent& rEvent) override; - virtual void ApplySettings(vcl::RenderContext& rRenderContext) override; - virtual void DumpAsPropertyTree(tools::JsonWriter&) override; + void set_margin_top(int nMargin); + void set_margin_bottom(int nMargin); + void set_vexpand(bool bExpand); + + weld::Window* GetFrameWeld(); + + void DataChanged(); private: + std::unique_ptr<weld::Builder> mxBuilder; const OUString msPanelId; + const OUString msTitle; const bool mbIsTitleBarOptional; const bool mbWantsAWT; css::uno::Reference<css::ui::XUIElement> mxElement; css::uno::Reference<css::ui::XSidebarPanel> mxPanelComponent; bool mbIsExpanded; bool mbLurking; - const std::function<void()> maDeckLayoutTrigger; const std::function<Context()> maContextAccess; const css::uno::Reference<css::frame::XFrame>& mxFrame; + weld::Widget* mpParentWindow; + VclPtr<Deck> mxDeck; + std::unique_ptr<weld::Container> mxContainer; std::unique_ptr<PanelTitleBar> mxTitleBar; std::unique_ptr<weld::Container> mxContents; css::uno::Reference<css::awt::XWindow> mxXWindow; + + DECL_LINK(DumpAsPropertyTreeHdl, tools::JsonWriter&, void); }; -typedef std::vector<VclPtr<Panel>> SharedPanelContainer; + +typedef std::vector<std::shared_ptr<Panel>> SharedPanelContainer; } // end of namespace sfx2::sidebar diff --git a/include/sfx2/sidebar/PanelLayout.hxx b/include/sfx2/sidebar/PanelLayout.hxx index b03ebf97bb22..e5630180f99e 100644 --- a/include/sfx2/sidebar/PanelLayout.hxx +++ b/include/sfx2/sidebar/PanelLayout.hxx @@ -21,9 +21,9 @@ namespace tools { class JsonWriter; } class SFX2_DLLPUBLIC PanelLayout { protected: - VclPtr<sfx2::sidebar::Panel> m_xPanel; std::unique_ptr<weld::Builder> m_xBuilder; std::unique_ptr<weld::Container> m_xContainer; + sfx2::sidebar::Panel* m_pPanel; virtual void DataChanged(const DataChangedEvent& rEvent); virtual void DumpAsPropertyTree(tools::JsonWriter&); diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx index 78e9221000f9..629abf405c5c 100644 --- a/include/sfx2/sidebar/SidebarController.hxx +++ b/include/sfx2/sidebar/SidebarController.hxx @@ -239,9 +239,9 @@ private: void CreatePanels( const OUString& rDeckId, const Context& rContext); - VclPtr<Panel> CreatePanel ( - const OUString& rsPanelId, - vcl::Window* pParentWindow, + std::shared_ptr<Panel> CreatePanel ( + std::u16string_view rsPanelId, + weld::Widget* pParentWindow, const bool bIsInitiallyExpanded, const Context& rContext, const VclPtr<Deck>& pDeck); diff --git a/include/sfx2/sidebar/Theme.hxx b/include/sfx2/sidebar/Theme.hxx index c59d71233b00..26e185396594 100644 --- a/include/sfx2/sidebar/Theme.hxx +++ b/include/sfx2/sidebar/Theme.hxx @@ -59,8 +59,6 @@ public: Image_Color_, - Color_DeckTitleFont, - Color_PanelTitleFont, Color_Highlight, Color_HighlightText, Color_DeckBackground, @@ -68,16 +66,11 @@ public: Color_PanelBackground, Color_PanelTitleBarBackground, Color_TabBarBackground, - Color_HorizontalBorder, - Color_VerticalBorder, - Color_DropDownBackground, Color_Int_, - Int_DeckTitleBarHeight, Int_DeckBorderSize, Int_DeckSeparatorHeight, - Int_PanelTitleBarHeight, Int_DeckLeftPadding, Int_DeckTopPadding, Int_DeckRightPadding, diff --git a/sd/source/ui/sidebar/SlideBackground.cxx b/sd/source/ui/sidebar/SlideBackground.cxx index 43c566fb761c..035875e5bc20 100644 --- a/sd/source/ui/sidebar/SlideBackground.cxx +++ b/sd/source/ui/sidebar/SlideBackground.cxx @@ -343,8 +343,8 @@ void SlideBackground::HandleContextChange( mxInsertImage->hide(); // Need to do a relayouting, otherwise the panel size is not updated after show / hide controls - if (m_xPanel) - m_xPanel->TriggerDeckLayouting(); + if (m_pPanel) + m_pPanel->TriggerDeckLayouting(); } else if ( IsDraw() ) diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk index 88127c9f78b1..865b5c1c3362 100644 --- a/sfx2/UIConfig_sfx.mk +++ b/sfx2/UIConfig_sfx.mk @@ -22,7 +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/deck \ sfx2/uiconfig/ui/descriptioninfopage \ sfx2/uiconfig/ui/documentfontspage \ sfx2/uiconfig/ui/documentinfopage \ diff --git a/sfx2/inc/sidebar/DeckLayouter.hxx b/sfx2/inc/sidebar/DeckLayouter.hxx index b84496cd6646..c814abd98921 100644 --- a/sfx2/inc/sidebar/DeckLayouter.hxx +++ b/sfx2/inc/sidebar/DeckLayouter.hxx @@ -20,27 +20,26 @@ #include <sfx2/sidebar/Panel.hxx> -class ScrollBar; -namespace vcl { class Window; } namespace tools { class Rectangle; } namespace sfx2::sidebar { +class DeckTitleBar; +class SidebarDockingWindow; + /** Helper for layouting the direct and indirect children of a deck like title bars, panels, and scroll bars. */ namespace DeckLayouter { void LayoutDeck ( + SidebarDockingWindow* pDockingWindow, const tools::Rectangle& rContentArea, sal_Int32& rMinimalWidth, sal_Int32& rMinimalHeight, SharedPanelContainer& rPanels, - vcl::Window& pDeckTitleBar, - vcl::Window& pScrollClipWindow, - vcl::Window& pScrollContainer, - vcl::Window& pFiller, - ScrollBar& pVerticalScrollBar); + DeckTitleBar& pDeckTitleBar, + weld::ScrolledWindow& pVerticalScrollBar); } } // end of namespace sfx2::sidebar diff --git a/sfx2/inc/sidebar/DeckTitleBar.hxx b/sfx2/inc/sidebar/DeckTitleBar.hxx index 5fcc7403f134..c471039fe9af 100644 --- a/sfx2/inc/sidebar/DeckTitleBar.hxx +++ b/sfx2/inc/sidebar/DeckTitleBar.hxx @@ -23,14 +23,14 @@ namespace sfx2::sidebar { +class Deck; class GripWidget; class DeckTitleBar final : public TitleBar { public: - DeckTitleBar(const OUString& rsTitle, vcl::Window* pParentWindow, + DeckTitleBar(const OUString& rsTitle, weld::Builder& rBuilder, const std::function<void()>& rCloserAction); - virtual void dispose() override; virtual ~DeckTitleBar() override; virtual void SetTitle(const OUString& rsTitle) override; @@ -39,7 +39,7 @@ public: void SetCloserVisible(const bool bIsCloserVisible); tools::Rectangle GetDragArea(); - virtual void DataChanged(const DataChangedEvent& rEvent) override; + virtual void DataChanged() override; private: virtual void HandleToolBoxItemClick() override; diff --git a/sfx2/inc/sidebar/PanelTitleBar.hxx b/sfx2/inc/sidebar/PanelTitleBar.hxx index 08133be6cf10..8a90f8a79101 100644 --- a/sfx2/inc/sidebar/PanelTitleBar.hxx +++ b/sfx2/inc/sidebar/PanelTitleBar.hxx @@ -28,8 +28,7 @@ namespace sfx2::sidebar { class Panel; -class PanelTitleBar final - : public TitleBarBase +class PanelTitleBar final : public TitleBar { public: PanelTitleBar(const OUString& rsTitle, weld::Builder& rBuilder, Panel* pPanel); @@ -37,17 +36,12 @@ public: 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() { @@ -59,13 +53,11 @@ private: 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; - css::uno::Reference<css::frame::XFrame> mxFrame; + Panel* mpPanel; OString msIdent; OUString msMoreOptionsCommand; }; diff --git a/sfx2/inc/sidebar/TitleBar.hxx b/sfx2/inc/sidebar/TitleBar.hxx index 425e859cc690..4672342ffec5 100644 --- a/sfx2/inc/sidebar/TitleBar.hxx +++ b/sfx2/inc/sidebar/TitleBar.hxx @@ -21,20 +21,24 @@ #include <sidebar/SidebarToolBox.hxx> #include <sfx2/sidebar/Theme.hxx> #include <sfx2/weldutils.hxx> -#include <vcl/InterimItemWindow.hxx> namespace sfx2::sidebar { -class TitleBarBase +class TitleBar { public: - TitleBarBase(weld::Builder& rBuilder, Theme::ThemeItem eThemeItem); - void reset(); - virtual ~TitleBarBase(); + TitleBar(weld::Builder& rBuilder, Theme::ThemeItem eThemeItem); + virtual ~TitleBar(); virtual void SetTitle (const OUString& rsTitle) = 0; virtual OUString GetTitle() const = 0; - virtual bool GetVisible() const = 0; + + virtual void DataChanged(); + + void Show(bool bShow); + bool GetVisible() const; + + Size get_preferred_size() const; void SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon); @@ -49,6 +53,7 @@ public: protected: weld::Builder& mrBuilder; + std::unique_ptr<weld::Container> mxTitlebar; std::unique_ptr<weld::Image> mxAddonImage; std::unique_ptr<weld::Toolbar> mxToolBox; std::unique_ptr<ToolbarUnoDispatcher> mxToolBoxController; @@ -57,20 +62,9 @@ protected: virtual void HandleToolBoxItemClick() = 0; 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; +private: + void SetBackground(); }; } // end of namespace sfx2::sidebar diff --git a/sfx2/inc/sidebar/UnoPanel.hxx b/sfx2/inc/sidebar/UnoPanel.hxx index 50d9aba2c0fa..2b1197eb95f7 100644 --- a/sfx2/inc/sidebar/UnoPanel.hxx +++ b/sfx2/inc/sidebar/UnoPanel.hxx @@ -60,7 +60,7 @@ private: const OUString mDeckId; VclPtr<sfx2::sidebar::Deck> mpDeck; - VclPtr<sfx2::sidebar::Panel> mpPanel; + std::weak_ptr<sfx2::sidebar::Panel> mxPanel; sal_Int32 GetMaxOrderIndex(sfx2::sidebar::ResourceManager::PanelContextDescriptorContainer aPanels); sal_Int32 GetMinOrderIndex(sfx2::sidebar::ResourceManager::PanelContextDescriptorContainer aPanels); diff --git a/sfx2/source/sidebar/Deck.cxx b/sfx2/source/sidebar/Deck.cxx index ca988521d184..5070d500038d 100644 --- a/sfx2/source/sidebar/Deck.cxx +++ b/sfx2/source/sidebar/Deck.cxx @@ -24,6 +24,7 @@ #include <sidebar/DeckTitleBar.hxx> #include <sidebar/PanelTitleBar.hxx> #include <sfx2/sidebar/Panel.hxx> +#include <sfx2/sidebar/SidebarDockingWindow.hxx> #include <sfx2/sidebar/Theme.hxx> #include <sfx2/lokhelper.hxx> @@ -42,36 +43,24 @@ using namespace css::uno; namespace sfx2::sidebar { -Deck::Deck(const DeckDescriptor& rDeckDescriptor, vcl::Window* pParentWindow, +Deck::Deck(const DeckDescriptor& rDeckDescriptor, SidebarDockingWindow* pParentWindow, const std::function<void()>& rCloserAction) - : Window(pParentWindow, 0) + : InterimItemWindow(pParentWindow, "sfx/ui/deck.ui", "Deck") , msId(rDeckDescriptor.msId) , mnMinimalWidth(0) , mnMinimalHeight(0) , maPanels() - , mpTitleBar(VclPtr<DeckTitleBar>::Create(rDeckDescriptor.msTitle, this, rCloserAction)) - , mpScrollClipWindow(VclPtr<vcl::Window>::Create(this)) - , mpScrollContainer(VclPtr<ScrollContainerWindow>::Create(mpScrollClipWindow.get())) - , mpFiller(VclPtr<vcl::Window>::Create(this)) - , mpVerticalScrollBar(VclPtr<ScrollBar>::Create(this)) + , mxParentWindow(pParentWindow) + , mxTitleBar(new DeckTitleBar(rDeckDescriptor.msTitle, *m_xBuilder, rCloserAction)) + , mxVerticalScrollBar(m_xBuilder->weld_scrolled_window("scrolledwindow")) + , mxContents(m_xBuilder->weld_container("contents")) { - mpScrollClipWindow->SetBackground(Wallpaper()); - mpScrollClipWindow->Show(); - - mpScrollContainer->SetStyle(mpScrollContainer->GetStyle() | WB_DIALOGCONTROL); - mpScrollContainer->SetBackground(Wallpaper()); - mpScrollContainer->Show(); - - mpVerticalScrollBar->SetScrollHdl(LINK(this, Deck, HandleVerticalScrollBarChange)); - mpVerticalScrollBar->SetLineSize(10); - mpVerticalScrollBar->SetPageSize(100); - -#ifdef DEBUG - SetText(OUString("Deck")); - mpScrollClipWindow->SetText(OUString("ScrollClipWindow")); - mpFiller->SetText(OUString("Filler")); - mpVerticalScrollBar->SetText(OUString("VerticalScrollBar")); -#endif + SetStyle(GetStyle() | WB_DIALOGCONTROL); + + m_xContainer->set_background(Theme::GetColor(Theme::Color_DeckBackground)); + + mxVerticalScrollBar->vadjustment_set_step_increment(10); + mxVerticalScrollBar->vadjustment_set_page_increment(100); } Deck::~Deck() @@ -87,22 +76,22 @@ void Deck::dispose() // We have to explicitly trigger the destruction of panels. // Otherwise that is done by one of our base class destructors // without updating maPanels. - for (VclPtr<Panel> & rpPanel : aPanels) - rpPanel.disposeAndClear(); + for (auto& rpPanel : aPanels) + rpPanel.reset(); - maPanels.clear(); // just to keep the loplugin:vclwidgets happy - mpTitleBar.disposeAndClear(); - mpFiller.disposeAndClear(); - mpVerticalScrollBar.disposeAndClear(); - mpScrollContainer.disposeAndClear(); - mpScrollClipWindow.disposeAndClear(); + maPanels.clear(); + mxTitleBar.reset(); + mxContents.reset(); + mxVerticalScrollBar.reset(); - vcl::Window::dispose(); + mxParentWindow.clear(); + + InterimItemWindow::dispose(); } -VclPtr<DeckTitleBar> const & Deck::GetTitleBar() const +DeckTitleBar* Deck::GetTitleBar() const { - return mpTitleBar; + return mxTitleBar.get(); } tools::Rectangle Deck::GetContentArea() const @@ -119,65 +108,17 @@ tools::Rectangle Deck::GetContentArea() const aWindowSize.Height() - 1 - Theme::GetInteger(Theme::Int_DeckBottomPadding) - nBorderSize); } -void Deck::ApplySettings(vcl::RenderContext& rRenderContext) +void Deck::DataChanged(const DataChangedEvent&) { - rRenderContext.SetBackground(Wallpaper()); -} + for (auto& rpPanel : maPanels) + rpPanel->DataChanged(); -void Deck::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& /*rUpdateArea*/) -{ - const Size aWindowSize (GetSizePixel()); - const SvBorder aPadding(Theme::GetInteger(Theme::Int_DeckLeftPadding), - Theme::GetInteger(Theme::Int_DeckTopPadding), - Theme::GetInteger(Theme::Int_DeckRightPadding), - Theme::GetInteger(Theme::Int_DeckBottomPadding)); - - // Paint deck background outside the border. - tools::Rectangle aBox(0, 0, aWindowSize.Width() - 1, aWindowSize.Height() - 1); - DrawHelper::DrawBorder(rRenderContext, aBox, aPadding, - Theme::GetColor(Theme::Color_DeckBackground), - Theme::GetColor(Theme::Color_DeckBackground)); - - // Paint the border. - const int nBorderSize(Theme::GetInteger(Theme::Int_DeckBorderSize)); - aBox.AdjustLeft(aPadding.Left() ); - aBox.AdjustTop(aPadding.Top() ); - aBox.AdjustRight( -(aPadding.Right()) ); - aBox.AdjustBottom( -(aPadding.Bottom()) ); - const Color nHorizontalBorderPaint(Theme::GetColor(Theme::Color_HorizontalBorder)); - DrawHelper::DrawBorder(rRenderContext, aBox, - SvBorder(nBorderSize, nBorderSize, nBorderSize, nBorderSize), - nHorizontalBorderPaint, - Theme::GetColor(Theme::Color_VerticalBorder)); -} - -void Deck::DataChanged (const DataChangedEvent&) -{ RequestLayoutInternal(); } -bool Deck::EventNotify(NotifyEvent& rEvent) -{ - if (rEvent.GetType() == MouseNotifyEvent::COMMAND) - { - CommandEvent* pCommandEvent = static_cast<CommandEvent*>(rEvent.GetData()); - if (pCommandEvent != nullptr) - switch (pCommandEvent->GetCommand()) - { - case CommandEventId::Wheel: - return ProcessWheelEvent(pCommandEvent); - - default: - break; - } - } - - return Window::EventNotify(rEvent); -} - void Deck::Resize() { - Window::Resize(); + InterimItemWindow::Resize(); if (const vcl::ILibreOfficeKitNotifier* pNotifier = GetLOKNotifier()) { @@ -207,52 +148,26 @@ void Deck::DumpAsPropertyTree(tools::JsonWriter& rJsonWriter) continue; // collapse the panel itself out - auto xContent = it->GetElementWindow(); - if (!xContent.is()) - continue; - VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow(xContent); - if (!pWindow) + auto xContent = it->GetContents(); + if (!xContent) continue; auto childNode = rJsonWriter.startStruct(); rJsonWriter.put("id", it->GetId()); rJsonWriter.put("type", "panel"); - rJsonWriter.put("text", it->GetText()); - rJsonWriter.put("enabled", it->IsEnabled()); + rJsonWriter.put("text", it->GetTitle()); + rJsonWriter.put("enabled", true); { auto children2Node = rJsonWriter.startArray("children"); { auto child2Node = rJsonWriter.startStruct(); - pWindow->DumpAsPropertyTree(rJsonWriter); + xContent->get_property_tree(rJsonWriter); } } } } -bool Deck::ProcessWheelEvent(CommandEvent const * pCommandEvent) -{ - if ( ! mpVerticalScrollBar) - return false; - if ( ! mpVerticalScrollBar->IsVisible()) - return false; - - // Get the wheel data and check that it describes a valid vertical - // scroll. - const CommandWheelData* pData = pCommandEvent->GetWheelData(); - if (pData==nullptr - || pData->GetModifier() - || pData->GetMode() != CommandWheelMode::SCROLL - || pData->IsHorz()) - return false; - - // Execute the actual scroll action. - tools::Long nDelta = pData->GetDelta(); - mpVerticalScrollBar->DoScroll( - mpVerticalScrollBar->GetThumbPos() - nDelta); - return true; -} - /** * This container may contain existing panels that are * being re-used, and new ones too. @@ -262,7 +177,7 @@ void Deck::ResetPanels(const SharedPanelContainer& rPanelContainer) SharedPanelContainer aHiddens; // First hide old panels we don't need just now. - for (VclPtr<Panel> & rpPanel : maPanels) + for (auto& rpPanel : maPanels) { bool bFound = false; for (const auto & i : rPanelContainer) @@ -286,9 +201,9 @@ void Deck::RequestLayoutInternal() mnMinimalWidth = 0; mnMinimalHeight = 0; - DeckLayouter::LayoutDeck(GetContentArea(), mnMinimalWidth, mnMinimalHeight, maPanels, - *GetTitleBar(), *mpScrollClipWindow, *mpScrollContainer, - *mpFiller, *mpVerticalScrollBar); + DeckLayouter::LayoutDeck(mxParentWindow.get(), GetContentArea(), + mnMinimalWidth, mnMinimalHeight, maPanels, + *GetTitleBar(), *mxVerticalScrollBar); } void Deck::RequestLayout() @@ -323,18 +238,18 @@ void Deck::RequestLayout() setPosSizePixel(0, 0, aParentSize.Width(), aParentSize.Height()); } -vcl::Window* Deck::GetPanelParentWindow() +weld::Widget* Deck::GetPanelParentWindow() { - return mpScrollContainer.get(); + return mxContents.get(); } -Panel* Deck::GetPanel(const OUString & panelId) +std::shared_ptr<Panel> Deck::GetPanel(std::u16string_view panelId) { - for (const VclPtr<Panel> & pPanel : maPanels) + for (const auto& pPanel : maPanels) { if(pPanel->GetId() == panelId) { - return pPanel.get(); + return pPanel; } } return nullptr; @@ -343,100 +258,27 @@ Panel* Deck::GetPanel(const OUString & panelId) void Deck::ShowPanel(const Panel& rPanel) { - if (!mpVerticalScrollBar || !mpVerticalScrollBar->IsVisible()) + if (!mxVerticalScrollBar || mxVerticalScrollBar->get_vpolicy() == VclPolicyType::NEVER) return; // Get vertical extent of the panel. - sal_Int32 nPanelTop (rPanel.GetPosPixel().Y()); - const sal_Int32 nPanelBottom (nPanelTop + rPanel.GetSizePixel().Height() - 1); + tools::Rectangle aExtents; + if (!rPanel.get_extents(aExtents)) + return; + + auto nPanelTop = aExtents.Top(); + auto nPanelBottom = aExtents.Bottom() - 1; // Determine what the new thumb position should be like. // When the whole panel does not fit then make its top visible // and it off at the bottom. - sal_Int32 nNewThumbPos (mpVerticalScrollBar->GetThumbPos()); - if (nPanelBottom >= nNewThumbPos+mpVerticalScrollBar->GetVisibleSize()) - nNewThumbPos = nPanelBottom - mpVerticalScrollBar->GetVisibleSize(); + sal_Int32 nNewThumbPos(mxVerticalScrollBar->vadjustment_get_value()); + if (nPanelBottom >= nNewThumbPos + mxVerticalScrollBar->vadjustment_get_page_size()) + nNewThumbPos = nPanelBottom - mxVerticalScrollBar->vadjustment_get_page_size(); if (nPanelTop < nNewThumbPos) nNewThumbPos = nPanelTop; - mpVerticalScrollBar->SetThumbPos(nNewThumbPos); - mpScrollContainer->SetPosPixel( - Point( - mpScrollContainer->GetPosPixel().X(), - -nNewThumbPos)); -} - -static OUString GetWindowClassification(const vcl::Window* pWindow) -{ - const OUString& rsName (pWindow->GetText()); - if (!rsName.isEmpty()) - { - return rsName; - } - else - { - return "window"; - } -} - -void Deck::PrintWindowSubTree(vcl::Window* pRoot, int nIndentation) -{ - static const char* const sIndentation = " "; - const Point aLocation (pRoot->GetPosPixel()); - const Size aSize (pRoot->GetSizePixel()); - SAL_INFO( - "sfx.sidebar", - sIndentation + strlen(sIndentation) - nIndentation * 4 << pRoot << " " - << GetWindowClassification(pRoot) << " " - << (pRoot->IsVisible() ? "visible" : "hidden") << " +" - << aLocation.X() << "+" << aLocation.Y() << " x" << aSize.Width() - << "x" << aSize.Height()); - - const sal_uInt16 nChildCount(pRoot->GetChildCount()); - for (sal_uInt16 nIndex = 0; nIndex < nChildCount; ++nIndex) - PrintWindowSubTree(pRoot->GetChild(nIndex), nIndentation + 1); -} - -IMPL_LINK_NOARG(Deck, HandleVerticalScrollBarChange, ScrollBar*, void) -{ - const sal_Int32 nYOffset (-mpVerticalScrollBar->GetThumbPos()); - mpScrollContainer->SetPosPixel(Point(mpScrollContainer->GetPosPixel().X(), - nYOffset)); - mpScrollContainer->Invalidate(); -} - -//----- Deck::ScrollContainerWindow ------------------------------------------- - -Deck::ScrollContainerWindow::ScrollContainerWindow (vcl::Window* pParentWindow) - : Window(pParentWindow), - maSeparators() -{ -#ifdef DEBUG - SetText(OUString("ScrollContainerWindow")); -#endif -} - -void Deck::ScrollContainerWindow::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& /*rUpdateArea*/) -{ - // Paint the separators. - const sal_Int32 nSeparatorHeight(Theme::GetInteger(Theme::Int_DeckSeparatorHeight)); - const sal_Int32 nLeft(0); - const sal_Int32 nRight(GetSizePixel().Width() - 1); - const Color nHorizontalBorderPaint(Theme::GetColor(Theme::Color_HorizontalBorder)); - for (auto const& separator : maSeparators) - { - DrawHelper::DrawHorizontalLine(rRenderContext, nLeft, nRight, separator, - nSeparatorHeight, nHorizontalBorderPaint); - } -} - -void Deck::ScrollContainerWindow::SetSeparators (const ::std::vector<sal_Int32>& rSeparators) -{ - if (rSeparators != maSeparators) - { - maSeparators = rSeparators; - Invalidate(); - } + mxVerticalScrollBar->vadjustment_set_value(nNewThumbPos); } } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/DeckLayouter.cxx b/sfx2/source/sidebar/DeckLayouter.cxx index 05098986b826..36d6357ef305 100644 --- a/sfx2/source/sidebar/DeckLayouter.cxx +++ b/sfx2/source/sidebar/DeckLayouter.cxx @@ -18,10 +18,12 @@ */ #include <sidebar/DeckLayouter.hxx> -#include <sfx2/sidebar/Theme.hxx> -#include <sfx2/sidebar/Panel.hxx> +#include <sidebar/DeckTitleBar.hxx> #include <sidebar/PanelTitleBar.hxx> #include <sfx2/sidebar/Deck.hxx> +#include <sfx2/sidebar/Panel.hxx> +#include <sfx2/sidebar/Theme.hxx> +#include <sfx2/sidebar/SidebarDockingWindow.hxx> #include <sfx2/sidebar/SidebarController.hxx> #include <comphelper/lok.hxx> @@ -52,14 +54,14 @@ namespace { class LayoutItem { public: - VclPtr<Panel> mpPanel; + std::shared_ptr<Panel> mpPanel; css::ui::LayoutSize maLayoutSize; sal_Int32 mnDistributedHeight; sal_Int32 mnWeight; bool mbShowTitleBar; - LayoutItem(const VclPtr<Panel>& rPanel) - : mpPanel(rPanel) + LayoutItem(std::shared_ptr<Panel>& pPanel) + : mpPanel(pPanel) , maLayoutSize(0, 0, 0) , mnDistributedHeight(0) , mnWeight(0) @@ -67,14 +69,12 @@ namespace { { } }; - tools::Rectangle LayoutPanels ( + void LayoutPanels ( const tools::Rectangle& rContentArea, sal_Int32& rMinimalWidth, sal_Int32& rMinimalHeight, ::std::vector<LayoutItem>& rLayoutItems, - vcl::Window& rScrollClipWindow, - vcl::Window& rScrollContainer, - ScrollBar& pVerticalScrollBar, + weld::ScrolledWindow& pVerticalScrollBar, const bool bShowVerticalScrollBar); void GetRequestedSizes ( ::std::vector<LayoutItem>& rLayoutItem, @@ -86,81 +86,66 @@ namespace { const sal_Int32 nHeightToDistribute, const sal_Int32 nContainerHeight, const bool bMinimumHeightIsBase); - bool MoveResizePixel(const VclPtr<vcl::Window> &pWindow, - const Point &rNewPos, const Size &rNewSize); sal_Int32 PlacePanels ( ::std::vector<LayoutItem>& rLayoutItems, - const sal_Int32 nWidth, - const LayoutMode eMode, - vcl::Window& rScrollContainer); + const LayoutMode eMode_); tools::Rectangle PlaceDeckTitle ( - vcl::Window& rTitleBar, + SidebarDockingWindow* pDockingWindow, + DeckTitleBar& rTitleBar, const tools::Rectangle& rAvailableSpace); tools::Rectangle PlaceVerticalScrollBar ( - ScrollBar& rVerticalScrollBar, + weld::ScrolledWindow& rVerticalScrollBar, const tools::Rectangle& rAvailableSpace, const bool bShowVerticalScrollBar); void SetupVerticalScrollBar( - ScrollBar& rVerticalScrollBar, + weld::ScrolledWindow& rVerticalScrollBar, const sal_Int32 nContentHeight, const sal_Int32 nVisibleHeight); - void UpdateFiller ( - vcl::Window& rFiller, - const tools::Rectangle& rBox); } void DeckLayouter::LayoutDeck ( + SidebarDockingWindow* pDockingWindow, const tools::Rectangle& rContentArea, sal_Int32& rMinimalWidth, sal_Int32& rMinimalHeight, SharedPanelContainer& rPanels, - vcl::Window& rDeckTitleBar, - vcl::Window& rScrollClipWindow, - vcl::Window& rScrollContainer, - vcl::Window& rFiller, - ScrollBar& rVerticalScrollBar) + DeckTitleBar& rDeckTitleBar, + weld::ScrolledWindow& rVerticalScrollBar) { if (rContentArea.GetWidth()<=0 || rContentArea.GetHeight()<=0) return; - tools::Rectangle aBox (PlaceDeckTitle(rDeckTitleBar, rContentArea)); + tools::Rectangle aBox(PlaceDeckTitle(pDockingWindow, rDeckTitleBar, rContentArea)); if ( ! rPanels.empty()) { // Prepare the layout item container. ::std::vector<LayoutItem> aLayoutItems; aLayoutItems.reserve(rPanels.size()); - for (const auto& rPanel : rPanels) + for (auto& rPanel : rPanels) aLayoutItems.emplace_back(rPanel); - aBox = LayoutPanels( + LayoutPanels( aBox, rMinimalWidth, rMinimalHeight, aLayoutItems, - rScrollClipWindow, - rScrollContainer, rVerticalScrollBar, false); } - UpdateFiller(rFiller, aBox); } namespace { -tools::Rectangle LayoutPanels ( +void LayoutPanels ( const tools::Rectangle& rContentArea, sal_Int32& rMinimalWidth, sal_Int32& rMinimalHeight, ::std::vector<LayoutItem>& rLayoutItems, - vcl::Window& rScrollClipWindow, - vcl::Window& rScrollContainer, - ScrollBar& rVerticalScrollBar, + weld::ScrolledWindow& rVerticalScrollBar, const bool bShowVerticalScrollBar) { tools::Rectangle aBox (PlaceVerticalScrollBar(rVerticalScrollBar, rContentArea, bShowVerticalScrollBar)); - const sal_Int32 nWidth (aBox.GetWidth()); - // Get the requested heights of the panels and the available // height that is left when all panel titles and separators are // taken into account. @@ -186,15 +171,14 @@ tools::Rectangle LayoutPanels ( // Not enough space, even when all panels are shrunk to their // minimum height. // Show a vertical scrollbar. - return LayoutPanels( + LayoutPanels( rContentArea, rMinimalWidth, rMinimalHeight, rLayoutItems, - rScrollClipWindow, - rScrollContainer, rVerticalScrollBar, true); + return; } // We are now in one of three modes. @@ -227,58 +211,26 @@ tools::Rectangle LayoutPanels ( eMode==MinimumOrLarger); } - // Set position and size of the mpScrollClipWindow to the available - // size. Its child, the mpScrollContainer, may have a bigger - // height. - rScrollClipWindow.setPosSizePixel(aBox.Left(), aBox.Top(), aBox.GetWidth(), aBox.GetHeight()); - - const sal_Int32 nContentHeight ( - eMode==Preferred - ? nTotalPreferredHeight + nTotalDecorationHeight - : aBox.GetHeight()); - sal_Int32 nY = rVerticalScrollBar.GetThumbPos(); - if (nContentHeight-nY < aBox.GetHeight()) - nY = nContentHeight-aBox.GetHeight(); - if (nY < 0) - nY = 0; - rScrollContainer.setPosSizePixel( - 0, - -nY, - nWidth, - nContentHeight); - if (bShowVerticalScrollBar) + { + const sal_Int32 nContentHeight( + eMode==Preferred + ? nTotalPreferredHeight + nTotalDecorationHeight + : aBox.GetHeight()); SetupVerticalScrollBar(rVerticalScrollBar, nContentHeight, aBox.GetHeight()); + } - const sal_Int32 nUsedHeight (PlacePanels(rLayoutItems, nWidth, eMode, rScrollContainer)); - aBox.AdjustTop(nUsedHeight ); + const sal_Int32 nUsedHeight(PlacePanels(rLayoutItems, eMode)); rMinimalHeight = nUsedHeight; - return aBox; -} - -bool MoveResizePixel(const VclPtr<vcl::Window> &pWindow, - const Point &rNewPos, const Size &rNewSize) -{ - Point aCurPos = pWindow->GetPosPixel(); - Size aCurSize = pWindow->GetSizePixel(); - if (rNewPos == aCurPos && aCurSize == rNewSize) - return false; - pWindow->setPosSizePixel(rNewPos.X(), rNewPos.Y(), rNewSize.Width(), rNewSize.Height()); - return true; } sal_Int32 PlacePanels ( ::std::vector<LayoutItem>& rLayoutItems, - const sal_Int32 nWidth, - const LayoutMode eMode, - vcl::Window& rScrollContainer) + const LayoutMode eMode) { - ::std::vector<sal_Int32> aSeparators; const sal_Int32 nDeckSeparatorHeight (Theme::GetInteger(Theme::Int_DeckSeparatorHeight)); sal_Int32 nY (0); - vcl::Region aInvalidRegions; - // Assign heights and places. for(::std::vector<LayoutItem>::const_iterator iItem(rLayoutItems.begin()), iEnd(rLayoutItems.end()); @@ -290,22 +242,26 @@ sal_Int32 PlacePanels ( Panel& rPanel (*iItem->mpPanel); + rPanel.set_margin_top(nDeckSeparatorHeight); + rPanel.set_margin_bottom(0); + // Separator above the panel title bar. if (!rPanel.IsLurking()) { - aSeparators.push_back(nY); nY += nDeckSeparatorHeight; } - const sal_Int32 nPanelTitleBarHeight(Theme::GetInteger(Theme::Int_PanelTitleBarHeight) * rPanel.GetDPIScaleFactor()); - bool bShowTitlebar = iItem->mbShowTitleBar; - rPanel.ShowTitlebar(bShowTitlebar); + PanelTitleBar* pTitleBar = rPanel.GetTitleBar(); + pTitleBar->Show(bShowTitlebar); + rPanel.set_vexpand(!bShowTitlebar); + weld::Container* pContents = rPanel.GetContents(); + pContents->set_vexpand(true); bool bExpanded = rPanel.IsExpanded() && !rPanel.IsLurking(); if (bShowTitlebar || bExpanded) { - rPanel.Show(); + rPanel.Show(true); sal_Int32 nPanelHeight(0); if (bExpanded) @@ -329,24 +285,15 @@ sal_Int32 PlacePanels ( } } if (bShowTitlebar) - nPanelHeight += nPanelTitleBarHeight; + nPanelHeight += pTitleBar->get_preferred_size().Height(); - // Place the panel. - Point aNewPos(0, nY); - Size aNewSize(nWidth, nPanelHeight); - - // Only invalidate if we moved - if (MoveResizePixel(&rPanel, aNewPos, aNewSize)) - { - tools::Rectangle aRect(aNewPos, aNewSize); - aInvalidRegions.Union(rPanel.PixelToLogic(aRect)); - } + rPanel.SetHeightPixel(nPanelHeight); nY += nPanelHeight; } else { - rPanel.Hide(); + rPanel.Show(false); } if (!bExpanded) @@ -356,19 +303,12 @@ sal_Int32 PlacePanels ( if (iItem == rLayoutItems.end()-1) { // Separator below the panel title bar. - aSeparators.push_back(nY); + rPanel.set_margin_bottom(nDeckSeparatorHeight); nY += nDeckSeparatorHeight; } } } - Deck::ScrollContainerWindow* pScrollContainerWindow - = dynamic_cast<Deck::ScrollContainerWindow*>(&rScrollContainer); - if (pScrollContainerWindow != nullptr) - pScrollContainerWindow->SetSeparators(aSeparators); - - rScrollContainer.Invalidate(aInvalidRegions); - return nY; } @@ -407,7 +347,8 @@ void GetRequestedSizes ( { // Show the title bar and a separator above and below // the title bar. - const sal_Int32 nPanelTitleBarHeight (Theme::GetInteger(Theme::Int_PanelTitleBarHeight) * rItem.mpPanel->GetDPIScaleFactor()); + PanelTitleBar* pTitleBar = rItem.mpPanel->GetTitleBar(); + const sal_Int32 nPanelTitleBarHeight = pTitleBar->get_preferred_size().Height(); rAvailableHeight -= nPanelTitleBarHeight; rAvailableHeight -= nDeckSeparatorHeight; @@ -548,25 +489,21 @@ void DistributeHeights ( OSL_ASSERT(nRemainingHeightToDistribute==0); } -tools::Rectangle PlaceDeckTitle ( - vcl::Window& rDeckTitleBar, +tools::Rectangle PlaceDeckTitle( + SidebarDockingWindow* pDockingWindow, + DeckTitleBar& rDeckTitleBar, const tools::Rectangle& rAvailableSpace) { - if (static_cast<DockingWindow*>(rDeckTitleBar.GetParent()->GetParent())->IsFloatingMode()) + if (pDockingWindow->IsFloatingMode()) { // When the side bar is undocked then the outer system window displays the deck title. - rDeckTitleBar.Hide(); + rDeckTitleBar.Show(false); return rAvailableSpace; } else { - const sal_Int32 nDeckTitleBarHeight (Theme::GetInteger(Theme::Int_DeckTitleBarHeight) * rDeckTitleBar.GetDPIScaleFactor()); - rDeckTitleBar.setPosSizePixel( - rAvailableSpace.Left(), - rAvailableSpace.Top(), - rAvailableSpace.GetWidth(), - nDeckTitleBarHeight); - rDeckTitleBar.Show(); + rDeckTitleBar.Show(true); + const sal_Int32 nDeckTitleBarHeight(rDeckTitleBar.get_preferred_size().Height()); return tools::Rectangle( rAvailableSpace.Left(), rAvailableSpace.Top() + nDeckTitleBarHeight, @@ -576,19 +513,14 @@ tools::Rectangle PlaceDeckTitle ( } tools::Rectangle PlaceVerticalScrollBar ( - ScrollBar& rVerticalScrollBar, + weld::ScrolledWindow& rVerticalScrollBar, const tools::Rectangle& rAvailableSpace, const bool bShowVerticalScrollBar) { if (bShowVerticalScrollBar) { - const sal_Int32 nScrollBarWidth (rVerticalScrollBar.GetSizePixel().Width()); - rVerticalScrollBar.setPosSizePixel( - rAvailableSpace.Right() - nScrollBarWidth + 1, - rAvailableSpace.Top(), - nScrollBarWidth, - rAvailableSpace.GetHeight()); - rVerticalScrollBar.Show(); + const sal_Int32 nScrollBarWidth(rVerticalScrollBar.get_scroll_thickness()); + rVerticalScrollBar.set_vpolicy(VclPolicyType::ALWAYS); return tools::Rectangle( rAvailableSpace.Left(), rAvailableSpace.Top(), @@ -597,44 +529,20 @@ tools::Rectangle PlaceVerticalScrollBar ( } else { - rVerticalScrollBar.Hide(); + rVerticalScrollBar.set_vpolicy(VclPolicyType::NEVER); return rAvailableSpace; } } void SetupVerticalScrollBar( - ScrollBar& rVerticalScrollBar, + weld::ScrolledWindow& rVerticalScrollBar, const sal_Int32 nContentHeight, const sal_Int32 nVisibleHeight) { OSL_ASSERT(nContentHeight > nVisibleHeight); - rVerticalScrollBar.SetRangeMin(0); - rVerticalScrollBar.SetRangeMax(nContentHeight-1); - rVerticalScrollBar.SetVisibleSize(nVisibleHeight); -} - -void UpdateFiller ( - vcl::Window& rFiller, - const tools::Rectangle& rBox) -{ - if (comphelper::LibreOfficeKit::isActive()) - { - // Not shown on LOK, and causes invalidation thrash - rFiller.Hide(); - } - else if (rBox.GetHeight() > 0) - { - // Show the filler. - rFiller.SetBackground(Theme::GetColor(Theme::Color_PanelBackground)); - rFiller.SetPosSizePixel(rBox.TopLeft(), rBox.GetSize()); - rFiller.Show(); - } - else - { - // Hide the filler. - rFiller.Hide(); - } + rVerticalScrollBar.vadjustment_set_upper(nContentHeight-1); + rVerticalScrollBar.vadjustment_set_page_size(nVisibleHeight); } } diff --git a/sfx2/source/sidebar/DeckTitleBar.cxx b/sfx2/source/sidebar/DeckTitleBar.cxx index c797fc274f78..0124a651ab70 100644 --- a/sfx2/source/sidebar/DeckTitleBar.cxx +++ b/sfx2/source/sidebar/DeckTitleBar.cxx @@ -58,46 +58,30 @@ public: }; DeckTitleBar::DeckTitleBar (const OUString& rsTitle, - vcl::Window* pParentWindow, + weld::Builder& rBuilder, const std::function<void()>& rCloserAction) - : TitleBar(pParentWindow, "sfx/ui/decktitlebar.ui", "DeckTitleBar", - Theme::Color_DeckTitleBarBackground) + : TitleBar(rBuilder, Theme::Color_DeckTitleBarBackground) , mxGripWidget(new GripWidget) - , mxGripWeld(new weld::CustomWeld(*m_xBuilder, "grip", *mxGripWidget)) - , mxLabel(m_xBuilder->weld_label("label")) + , mxGripWeld(new weld::CustomWeld(rBuilder, "grip", *mxGripWidget)) + , mxLabel(rBuilder.weld_label("label")) , maCloserAction(rCloserAction) , mbIsCloserVisible(false) { mxLabel->set_label(rsTitle); mxGripWidget->SetPointer(PointerStyle::Move); - OSL_ASSERT(pParentWindow != nullptr); - if (maCloserAction) SetCloserVisible(true); - -#ifdef DEBUG - SetText(OUString("DeckTitleBar")); -#endif } DeckTitleBar::~DeckTitleBar() { - disposeOnce(); -} - -void DeckTitleBar::dispose() -{ - mxLabel.reset(); - mxGripWeld.reset(); - mxGripWidget.reset(); - TitleBar::dispose(); } tools::Rectangle DeckTitleBar::GetDragArea() { int x, y, width, height; - if (mxGripWidget->GetDrawingArea()->get_extents_relative_to(*m_xContainer, x, y, width, height)) + if (mxGripWidget->GetDrawingArea()->get_extents_relative_to(*mxTitlebar, x, y, width, height)) return tools::Rectangle(Point(x, y), Size(width, height)); return tools::Rectangle(); } @@ -138,10 +122,10 @@ void DeckTitleBar::HandleToolBoxItemClick() maCloserAction(); } -void DeckTitleBar::DataChanged (const DataChangedEvent& rEvent) +void DeckTitleBar::DataChanged() { mxToolBox->set_item_icon_name("button", "sfx2/res/closedoc.png"); - TitleBar::DataChanged(rEvent); + TitleBar::DataChanged(); } } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/FocusManager.cxx b/sfx2/source/sidebar/FocusManager.cxx index 2f05308e5ce5..ebdc03939d66 100644 --- a/sfx2/source/sidebar/FocusManager.cxx +++ b/sfx2/source/sidebar/FocusManager.cxx @@ -18,13 +18,13 @@ */ #include <sfx2/sidebar/FocusManager.hxx> +#include <sfx2/sidebar/Deck.hxx> #include <sfx2/sidebar/Panel.hxx> #include <sidebar/DeckTitleBar.hxx> #include <sidebar/PanelTitleBar.hxx> #include <sidebar/TitleBar.hxx> #include <vcl/event.hxx> -#include <vcl/svapp.hxx> -#include <toolkit/helper/vclunohelper.hxx> +#include <vcl/weld.hxx> namespace sfx2::sidebar { @@ -35,7 +35,7 @@ FocusManager::FocusLocation::FocusLocation (const PanelComponent eComponent, con } FocusManager::FocusManager(const std::function<void(const Panel&)>& rShowPanelFunctor) - : mpDeckTitleBar(), + : mpDeckTitleBar(nullptr), maPanels(), maButtons(), maShowPanelFunctor(rShowPanelFunctor) @@ -59,14 +59,14 @@ void FocusManager::GrabFocusPanel() void FocusManager::Clear() { - SetDeckTitle(nullptr); + SetDeck(nullptr); ClearPanels(); ClearButtons(); } void FocusManager::ClearPanels() { - std::vector<VclPtr<Panel> > aPanels; + SharedPanelContainer aPanels; aPanels.swap(maPanels); for (auto const& panel : aPanels) { @@ -76,7 +76,8 @@ void FocusManager::ClearPanels() UnregisterWindow(panel->GetTitleBar()->GetExpander()); } - panel->RemoveChildEventListener(LINK(this, FocusManager, ChildEventListener)); + weld::Container* pContents = panel->GetContents(); + UnregisterWindow(*pContents); } } @@ -90,12 +91,13 @@ void FocusManager::ClearButtons() } } -void FocusManager::SetDeckTitle (DeckTitleBar* pDeckTitleBar) +void FocusManager::SetDeck(Deck* pDeck) { + DeckTitleBar* pDeckTitleBar = pDeck ? pDeck->GetTitleBar() : nullptr; if (mpDeckTitleBar != nullptr) UnregisterWindow(mpDeckTitleBar->GetToolBox()); + mxDeck = pDeck; mpDeckTitleBar = pDeckTitleBar; - if (mpDeckTitleBar != nullptr) RegisterWindow(mpDeckTitleBar->GetToolBox()); } @@ -111,10 +113,11 @@ void FocusManager::SetPanels (const SharedPanelContainer& rPanels) RegisterWindow(panel->GetTitleBar()->GetExpander()); } - // Register also as child event listener at the panel. - panel->AddChildEventListener(LINK(this, FocusManager, ChildEventListener)); + // Register also as key event listener at the panel. + weld::Container* pContents = panel->GetContents(); + RegisterWindow(*pContents); - maPanels.emplace_back(panel.get()); + maPanels.emplace_back(panel); } } @@ -139,18 +142,6 @@ void FocusManager::UnregisterWindow(weld::Widget& rWidget) rWidget.connect_key_press(Link<const KeyEvent&, bool>()); } -FocusManager::FocusLocation FocusManager::GetFocusLocation (const vcl::Window& rWindow) const -{ - // Search the panels. - for (size_t nIndex = 0; nIndex < maPanels.size(); ++nIndex) - { - if (maPanels[nIndex] == &rWindow) - return FocusLocation(PC_PanelContent, nIndex); - } - - return FocusLocation(PC_None, -1); -} - FocusManager::FocusLocation FocusManager::GetFocusLocation() const { // Check the deck title. @@ -167,6 +158,9 @@ FocusManager::FocusLocation FocusManager::GetFocusLocation() const return FocusLocation(PC_PanelTitle, nIndex); if (pTitleBar->GetToolBox().has_focus()) return FocusLocation(PC_PanelToolBox, nIndex); + weld::Container* pContents = maPanels[nIndex]->GetContents(); + if (pContents->has_child_focus()) + return FocusLocation(PC_PanelContent, nIndex); } // Search the buttons. @@ -204,7 +198,7 @@ bool FocusManager::IsPanelTitleVisible (const sal_Int32 nPanelIndex) const if (nPanelIndex<0 || nPanelIndex>=static_cast<sal_Int32>(maPanels.size())) return false; - TitleBarBase* pTitleBar = maPanels[nPanelIndex]->GetTitleBar(); + TitleBar* pTitleBar = maPanels[nPanelIndex]->GetTitleBar(); if (!pTitleBar) return false; return pTitleBar->GetVisible(); @@ -247,14 +241,13 @@ void FocusManager::FocusPanel ( maShowPanelFunctor(rPanel); } -void FocusManager::FocusPanelContent (const sal_Int32 nPanelIndex) +void FocusManager::FocusPanelContent(const sal_Int32 nPanelIndex) { if (!maPanels[nPanelIndex]->IsExpanded()) maPanels[nPanelIndex]->SetExpanded(true); - VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow(maPanels[nPanelIndex]->GetElementWindow()); - if (pWindow) - pWindow->GrabFocus(); + weld::Container* pContents = maPanels[nPanelIndex]->GetContents(); + pContents->child_grab_focus(); } void FocusManager::FocusButton (const sal_Int32 nButtonIndex) @@ -262,21 +255,6 @@ void FocusManager::FocusButton (const sal_Int32 nButtonIndex) maButtons[nButtonIndex]->grab_focus(); } -void FocusManager::RemoveWindow (vcl::Window& rWindow) -{ - auto iPanel (::std::find(maPanels.begin(), maPanels.end(), &rWindow)); - if (iPanel != maPanels.end()) - { - if ((*iPanel)->GetTitleBar() != nullptr) - { - UnregisterWindow((*iPanel)->GetTitleBar()->GetToolBox()); - UnregisterWindow((*iPanel)->GetTitleBar()->GetExpander()); - } - maPanels.erase(iPanel); - return; - } -} - void FocusManager::MoveFocusInsidePanel ( const FocusLocation& rFocusLocation, const sal_Int32 nDirection) @@ -303,10 +281,11 @@ void FocusManager::MoveFocusInsidePanel ( } } -void FocusManager::MoveFocusInsideDeckTitle ( +bool FocusManager::MoveFocusInsideDeckTitle ( const FocusLocation& rFocusLocation, const sal_Int32 nDirection) { + bool bConsumed = false; // Note that when the title bar of the first (and only) panel is // not visible then the deck title takes its place and the focus // is moved between a) deck closer and b) content of panel 0. @@ -314,11 +293,15 @@ void FocusManager::MoveFocusInsideDeckTitle ( { case PC_DeckToolBox: if (nDirection>0 && ! IsPanelTitleVisible(0)) + { FocusPanelContent(0); + bConsumed = true; + } break; default: break; } + return bConsumed; } bool FocusManager::HandleKeyEvent( @@ -337,15 +320,21 @@ bool FocusManager::HandleKeyEvent( case PC_PanelTitle: case PC_PanelToolBox: { - vcl::Window* pFocusWin = Application::GetFocusWindow(); - if (pFocusWin) + if (mxDeck) { - pFocusWin->GrabFocusToDocument(); + mxDeck->GrabFocusToDocument(); bConsumed = true; } break; } - + case PC_PanelContent: + // Return focus to tab bar sidebar settings button or panel title. + if (!IsDeckTitleVisible() && maPanels.size() == 1) + FocusButton(0); + else + FocusPanel(aLocation.mnIndex, true); + bConsumed = true; + break; default: break; } @@ -380,19 +369,31 @@ bool FocusManager::HandleKeyEvent( { case PC_PanelTitle: case PC_PanelToolBox: - case PC_PanelContent: MoveFocusInsidePanel(aLocation, nDirection); bConsumed = true; break; case PC_DeckToolBox: - MoveFocusInsideDeckTitle(aLocation, nDirection); + bConsumed = MoveFocusInsideDeckTitle(aLocation, nDirection); + break; + + case PC_TabBar: + if (rKeyCode.IsShift()) + FocusPanel(maPanels.size()-1, true); + else + { + if (IsDeckTitleVisible()) + FocusDeckTitle(); + else + FocusPanel(0, true); + } bConsumed = true; break; default: break; } + fprintf(stderr, "seen here, consumed %d\n", bConsumed); break; } @@ -402,7 +403,6 @@ bool FocusManager::HandleKeyEvent( { case PC_PanelTitle: case PC_PanelToolBox: - case PC_PanelContent: // Go to previous panel or the deck title. if (aLocation.mnIndex > 0) FocusPanel(aLocation.mnIndex-1, true); @@ -452,7 +452,6 @@ bool FocusManager::HandleKeyEvent( { case PC_PanelTitle: case PC_PanelToolBox: - case PC_PanelContent: // Go to next panel. if (aLocation.mnIndex < static_cast<sal_Int32>(maPanels.size())-1) FocusPanel(aLocation.mnIndex+1, false); @@ -503,56 +502,6 @@ IMPL_LINK(FocusManager, KeyInputHdl, const KeyEvent&, rKeyEvent, bool) return HandleKeyEvent(rKeyEvent.GetKeyCode(), GetFocusLocation()); } -IMPL_LINK(FocusManager, ChildEventListener, VclWindowEvent&, rEvent, void) -{ - vcl::Window* pSource = rEvent.GetWindow(); - if (pSource == nullptr) - return; - - switch (rEvent.GetId()) - { - case VclEventId::WindowKeyInput: - { - KeyEvent* pKeyEvent = static_cast<KeyEvent*>(rEvent.GetData()); - - // Go up the window hierarchy to find out whether the - // parent of the event source is known to us. - vcl::Window* pWindow = pSource; - FocusLocation aLocation (PC_None, -1); - while (true) - { - if (pWindow == nullptr) - break; - aLocation = GetFocusLocation(*pWindow); - if (aLocation.meComponent != PC_None) - break; - pWindow = pWindow->GetParent(); - } - - if (aLocation.meComponent != PC_None) - { - switch (pKeyEvent->GetKeyCode().GetCode()) - { - case KEY_ESCAPE: - // Return focus to tab bar sidebar settings button or panel title. - if (!IsDeckTitleVisible() && maPanels.size() == 1) - FocusButton(0); - else - FocusPanel(aLocation.mnIndex, true); - break; - - default: - break; - } - } - return; - } - - default: - break; - } -} - } // end of namespace sfx2::sidebar /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/source/sidebar/Panel.cxx b/sfx2/source/sidebar/Panel.cxx index 3d03beb2e9a0..471a5f2b9507 100644 --- a/sfx2/source/sidebar/Panel.cxx +++ b/sfx2/source/sidebar/Panel.cxx @@ -45,56 +45,77 @@ using namespace css::uno; namespace sfx2::sidebar { Panel::Panel(const PanelDescriptor& rPanelDescriptor, - vcl::Window* pParentWindow, + weld::Widget* pParentWindow, const bool bIsInitiallyExpanded, - const std::function<void()>& rDeckLayoutTrigger, + Deck* pDeck, const std::function<Context()>& rContextAccess, const css::uno::Reference<css::frame::XFrame>& rxFrame) - : InterimItemWindow(pParentWindow, "sfx/ui/panel.ui", "Panel") + : mxBuilder(Application::CreateBuilder(pParentWindow, "sfx/ui/panel.ui")) , msPanelId(rPanelDescriptor.msId) + , msTitle(rPanelDescriptor.msTitle) , mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional) , mbWantsAWT(rPanelDescriptor.mbWantsAWT) , mxElement() , mxPanelComponent() , mbIsExpanded(bIsInitiallyExpanded) , mbLurking(false) - , maDeckLayoutTrigger(rDeckLayoutTrigger) , maContextAccess(rContextAccess) , mxFrame(rxFrame) - , mxTitleBar(new PanelTitleBar(rPanelDescriptor.msTitle, *m_xBuilder, this)) - , mxContents(m_xBuilder->weld_container("contents")) + , mpParentWindow(pParentWindow) + , mxDeck(pDeck) + , mxContainer(mxBuilder->weld_container("Panel")) + , mxTitleBar(new PanelTitleBar(rPanelDescriptor.msTitle, *mxBuilder, this)) + , mxContents(mxBuilder->weld_container("contents")) { - SetText(rPanelDescriptor.msTitle); mxContents->set_visible(mbIsExpanded); + mxContainer->connect_get_property_tree(LINK(this, Panel, DumpAsPropertyTreeHdl)); } -Panel::~Panel() +bool Panel::get_extents(tools::Rectangle &rExtents) const { - disposeOnce(); - assert(!mxTitleBar); + // Get vertical extent of the panel. + int x, y, width, height; + if (mxContainer->get_extents_relative_to(*mpParentWindow, x, y, width, height)) + { + rExtents = tools::Rectangle(Point(x, y), Size(width, height)); + return true; + } + return false; } -void Panel::SetLurkMode(bool bLurk) +void Panel::SetHeightPixel(int nHeight) { - // cf. DeckLayouter - mbLurking = bLurk; + mxContainer->set_size_request(-1, nHeight); +} + +void Panel::set_margin_top(int nMargin) +{ + mxContainer->set_margin_top(nMargin); +} + +void Panel::set_margin_bottom(int nMargin) +{ + mxContainer->set_margin_bottom(nMargin); +} + +void Panel::set_vexpand(bool bExpand) +{ + mxContainer->set_vexpand(bExpand); } -void Panel::ApplySettings(vcl::RenderContext& rRenderContext) +void Panel::SetLurkMode(bool bLurk) { - rRenderContext.SetBackground(Theme::GetColor(Theme::Color_PanelBackground)); + // cf. DeckLayouter + mbLurking = bLurk; } -void Panel::DumpAsPropertyTree(tools::JsonWriter& rJsonWriter) +IMPL_LINK(Panel, DumpAsPropertyTreeHdl, tools::JsonWriter&, rJsonWriter, void) { if (!IsLurking()) - { - InterimItemWindow::DumpAsPropertyTree(rJsonWriter); rJsonWriter.put("type", "panel"); - } } -void Panel::dispose() +Panel::~Panel() { mxPanelComponent = nullptr; @@ -120,7 +141,7 @@ void Panel::dispose() } mxContents.reset(); - InterimItemWindow::dispose(); + assert(!mxTitleBar); } PanelTitleBar* Panel::GetTitleBar() const @@ -128,9 +149,14 @@ PanelTitleBar* Panel::GetTitleBar() const return mxTitleBar.get(); } -void Panel::ShowTitlebar(bool bShowTitlebar) +weld::Container* Panel::GetContents() const +{ + return mxContents.get(); +} + +void Panel::Show(bool bShow) { - mxTitleBar->Show(bShowTitlebar); + mxContainer->set_visible(bShow); } void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement) @@ -146,6 +172,16 @@ void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement) pPanelBase->SetParentPanel(this); } +void Panel::TriggerDeckLayouting() +{ + mxDeck->RequestLayout(); +} + +weld::Window* Panel::GetFrameWeld() +{ + return mxDeck->GetFrameWeld(); +} + void Panel::SetExpanded (const bool bIsExpanded) { SidebarController* pSidebarController = SidebarController::GetSidebarControllerForFrame(mxFrame); @@ -155,7 +191,7 @@ void Panel::SetExpanded (const bool bIsExpanded) mbIsExpanded = bIsExpanded; mxTitleBar->UpdateExpandedState(); - maDeckLayoutTrigger(); + TriggerDeckLayouting(); if (maContextAccess && pSidebarController) { @@ -173,9 +209,9 @@ bool Panel::HasIdPredicate (const OUString& rsId) const return msPanelId == rsId; } -void Panel::DataChanged (const DataChangedEvent&) +void Panel::DataChanged() { - Invalidate(); + mxTitleBar->DataChanged(); } Reference<awt::XWindow> Panel::GetElementWindow() diff --git a/sfx2/source/sidebar/PanelLayout.cxx b/sfx2/source/sidebar/PanelLayout.cxx index 3a47773175ce..271f4d8a6c36 100644 --- a/sfx2/source/sidebar/PanelLayout.cxx +++ b/sfx2/source/sidebar/PanelLayout.cxx @@ -19,6 +19,7 @@ using namespace sfx2::sidebar; PanelLayout::PanelLayout(weld::Widget* pParent, const OString& rID, const OUString& rUIXMLDescription) : m_xBuilder(Application::CreateBuilder(pParent, rUIXMLDescription)) , m_xContainer(m_xBuilder->weld_container(rID)) + , m_pPanel(nullptr) { m_xContainer->set_background(Theme::GetColor(Theme::Color_PanelBackground)); m_xContainer->connect_get_property_tree(LINK(this, PanelLayout, DumpAsPropertyTreeHdl)); @@ -53,17 +54,17 @@ void PanelLayout::DataChanged(const DataChangedEvent& rEvent) void PanelLayout::SetPanel(sfx2::sidebar::Panel* pPanel) { - m_xPanel = pPanel; + m_pPanel = pPanel; } weld::Window* PanelLayout::GetFrameWeld() const { - if (!m_xPanel) + if (!m_pPanel) { SAL_WARN("sfx.sidebar", "Expected a toplevel Panel to exist"); return nullptr; } - return m_xPanel->GetFrameWeld(); + return m_pPanel->GetFrameWeld(); } PanelLayout::~PanelLayout() diff --git a/sfx2/source/sidebar/PanelTitleBar.cxx b/sfx2/source/sidebar/PanelTitleBar.cxx index 54adda78aa29..112602cfef4b 100644 --- a/sfx2/source/sidebar/PanelTitleBar.cxx +++ b/sfx2/source/sidebar/PanelTitleBar.cxx @@ -39,16 +39,12 @@ namespace sfx2::sidebar { PanelTitleBar::PanelTitleBar(const OUString& rsTitle, weld::Builder& rBuilder, Panel* pPanel) - : TitleBarBase(rBuilder, Theme::Color_PanelTitleBarBackground), - mxTitlebar(rBuilder.weld_container("titlebar")), + : TitleBar(rBuilder, Theme::Color_PanelTitleBarBackground), mxExpander(rBuilder.weld_expander("expander")), mpPanel(pPanel), - mxFrame(), msIdent("button"), msMoreOptionsCommand() { - mxTitlebar->set_background(Theme::GetColor(meThemeItem)); - mxExpander->set_label(rsTitle); mxExpander->connect_expanded(LINK(this, PanelTitleBar, ExpandHdl)); @@ -61,11 +57,6 @@ PanelTitleBar::PanelTitleBar(const OUString& rsTitle, #endif } -bool PanelTitleBar::GetVisible() const -{ - return mxTitlebar->get_visible(); -} - void PanelTitleBar::SetTitle(const OUString& rsTitle) { mxExpander->set_label(rsTitle); @@ -87,10 +78,8 @@ PanelTitleBar::~PanelTitleBar() if (xComponent.is()) xComponent->dispose(); mxController.clear(); - mpPanel.clear(); + mpPanel = nullptr; mxExpander.reset(); - mxTitlebar.reset(); - reset(); } void PanelTitleBar::SetMoreOptionsCommand(const OUString& rsCommandName, @@ -104,7 +93,6 @@ void PanelTitleBar::SetMoreOptionsCommand(const OUString& rsCommandName, mxToolBox->hide(); msMoreOptionsCommand = rsCommandName; - mxFrame = rxFrame; if (msMoreOptionsCommand.isEmpty()) return; diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 5294525f1d4b..51304f07bc9d 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -471,8 +471,8 @@ void SidebarController::NotifyResize() sal_Int32 nMinimalWidth = 0; if (mpCurrentDeck && !mpCurrentDeck->isDisposed()) { - VclPtr<DeckTitleBar> pTitleBar = mpCurrentDeck->GetTitleBar(); - if (pTitleBar && pTitleBar->IsVisible()) + DeckTitleBar* pTitleBar = mpCurrentDeck->GetTitleBar(); + if (pTitleBar && pTitleBar->GetVisible()) pTitleBar->SetCloserVisible(CanModifyChildWindowWidth()); nMinimalWidth = mpCurrentDeck->GetMinimalWidth(); } @@ -732,37 +732,36 @@ void SidebarController::CreatePanels(const OUString& rDeckId, const Context& rCo if ( ! bIsPanelVisible) continue; - Panel *const pPanel(pDeck->GetPanel(rPanelContexDescriptor.msId)); - if (pPanel != nullptr) + auto xOldPanel(pDeck->GetPanel(rPanelContexDescriptor.msId)); + if (xOldPanel) { - pPanel->SetLurkMode(false); - aNewPanels[nWriteIndex] = pPanel; - pPanel->SetExpanded( rPanelContexDescriptor.mbIsInitiallyVisible ); + xOldPanel->SetLurkMode(false); + aNewPanels[nWriteIndex] = xOldPanel; + xOldPanel->SetExpanded(rPanelContexDescriptor.mbIsInitiallyVisible); ++nWriteIndex; } else { - VclPtr<Panel> aPanel = CreatePanel( - rPanelContexDescriptor.msId, - pDeck->GetPanelParentWindow(), - rPanelContexDescriptor.mbIsInitiallyVisible, - rContext, - pDeck); - if (aPanel ) + auto aPanel = CreatePanel(rPanelContexDescriptor.msId, + pDeck->GetPanelParentWindow(), + rPanelContexDescriptor.mbIsInitiallyVisible, + rContext, + pDeck); + if (aPanel) + { + aNewPanels[nWriteIndex] = std::move(aPanel); + + // Depending on the context we have to change the command + // for the "more options" dialog. + PanelTitleBar* pTitleBar = aNewPanels[nWriteIndex]->GetTitleBar(); + if (pTitleBar) { - aNewPanels[nWriteIndex] = aPanel; - - // Depending on the context we have to change the command - // for the "more options" dialog. - PanelTitleBar* pTitleBar = aNewPanels[nWriteIndex]->GetTitleBar(); - if (pTitleBar) - { - pTitleBar->SetMoreOptionsCommand( - rPanelContexDescriptor.msMenuCommand, - mxFrame, xController); - } - ++nWriteIndex; + pTitleBar->SetMoreOptionsCommand( + rPanelContexDescriptor.msMenuCommand, + mxFrame, xController); } + ++nWriteIndex; + } } } @@ -895,7 +894,7 @@ void SidebarController::SwitchToDeck ( // Tell the focus manager about the new panels and tab bar // buttons. - maFocusManager.SetDeckTitle(mpCurrentDeck->GetTitleBar()); + maFocusManager.SetDeck(mpCurrentDeck); maFocusManager.SetPanels(mpCurrentDeck->GetPanels()); mpTabBar->UpdateFocusManager(maFocusManager); @@ -906,15 +905,15 @@ void SidebarController::notifyDeckTitle(const OUString& targetDeckId) { if (msCurrentDeckId == targetDeckId) { - maFocusManager.SetDeckTitle(mpCurrentDeck->GetTitleBar()); + maFocusManager.SetDeck(mpCurrentDeck); mpTabBar->UpdateFocusManager(maFocusManager); UpdateTitleBarIcons(); } } -VclPtr<Panel> SidebarController::CreatePanel ( - const OUString& rsPanelId, - vcl::Window* pParentWindow, +std::shared_ptr<Panel> SidebarController::CreatePanel ( + std::u16string_view rsPanelId, + weld::Widget* pParentWindow, const bool bIsInitiallyExpanded, const Context& rContext, const VclPtr<Deck>& pDeck) @@ -925,31 +924,31 @@ VclPtr<Panel> SidebarController::CreatePanel ( return nullptr; // Create the panel which is the parent window of the UIElement. - VclPtr<Panel> pPanel = VclPtr<Panel>::Create( + auto xPanel = std::make_shared<Panel>( *xPanelDescriptor, pParentWindow, bIsInitiallyExpanded, - [pDeck]() { return pDeck->RequestLayout(); }, + pDeck, [this]() { return this->GetCurrentContext(); }, mxFrame); // Create the XUIElement. Reference<ui::XUIElement> xUIElement (CreateUIElement( - pPanel->GetElementParentWindow(), + xPanel->GetElementParentWindow(), xPanelDescriptor->msImplementationURL, xPanelDescriptor->mbWantsCanvas, rContext)); if (xUIElement.is()) { // Initialize the panel and add it to the active deck. - pPanel->SetUIElement(xUIElement); + xPanel->SetUIElement(xUIElement); } else { - pPanel.disposeAndClear(); + xPanel.reset(); } - return pPanel; + return xPanel; } Reference<ui::XUIElement> SidebarController::CreateUIElement ( @@ -1570,9 +1569,7 @@ tools::Rectangle SidebarController::GetDeckDragArea() const tools::Rectangle aRect; if (mpCurrentDeck) { - VclPtr<DeckTitleBar> pTitleBar(mpCurrentDeck->GetTitleBar()); - - if (pTitleBar) + if (DeckTitleBar* pTitleBar = mpCurrentDeck->GetTitleBar()) { aRect = pTitleBar->GetDragArea(); } diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx index d7f52741fd6e..48698bb00937 100644 --- a/sfx2/source/sidebar/TabBar.cxx +++ b/sfx2/source/sidebar/TabBar.cxx @@ -63,6 +63,8 @@ TabBar::TabBar(vcl::Window* pParentWindow, , maPopupMenuProvider(rPopupMenuProvider) , pParentSidebarController(rParentSidebarController) { + InitControlBase(mxMenuButton.get()); + mxTempToplevel->move(mxContents.get(), m_xContainer.get()); gDefaultWidth = m_xContainer->get_preferred_size().Width(); diff --git a/sfx2/source/sidebar/Theme.cxx b/sfx2/source/sidebar/Theme.cxx index bd64a87b7907..dbbcabeadd55 100644 --- a/sfx2/source/sidebar/Theme.cxx +++ b/sfx2/source/sidebar/Theme.cxx @@ -130,14 +130,10 @@ void Theme::UpdateTheme() try { const StyleSettings& rStyle (Application::GetSettings().GetStyleSettings()); - const bool bUseSystemColors (GetBoolean(Bool_UseSystemColors)); - -#define Alternatives(n,hc,sys) (mbIsHighContrastMode ? hc : (bUseSystemColors ? sys : n)) Color aBaseBackgroundColor (rStyle.GetDialogColor()); // UX says this should be a little brighter, but that looks off when compared to the other windows. //aBaseBackgroundColor.IncreaseLuminance(7); - Color aBorderColor (aBaseBackgroundColor); Color aSecondColor (aBaseBackgroundColor); aSecondColor.DecreaseLuminance(15); @@ -151,15 +147,6 @@ void Theme::UpdateTheme() setPropertyValue( maPropertyIdToNameMap[Int_DeckSeparatorHeight], Any(sal_Int32(1))); - setPropertyValue( - maPropertyIdToNameMap[Color_DeckTitleFont], - Any(sal_Int32(rStyle.GetFontColor().GetRGBColor()))); - setPropertyValue( - maPropertyIdToNameMap[Int_DeckTitleBarHeight], - Any(sal_Int32(Alternatives( - 26, - 26, - rStyle.GetFloatTitleHeight())))); setPropertyValue( maPropertyIdToNameMap[Color_PanelBackground], Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); @@ -167,40 +154,16 @@ void Theme::UpdateTheme() setPropertyValue( maPropertyIdToNameMap[Color_PanelTitleBarBackground], Any(sal_Int32(aSecondColor.GetRGBColor()))); - setPropertyValue( - maPropertyIdToNameMap[Color_PanelTitleFont], - Any(sal_Int32(mbIsHighContrastMode ? 0x00ff00 : 0x262626))); - setPropertyValue( - maPropertyIdToNameMap[Int_PanelTitleBarHeight], - Any(sal_Int32(Alternatives( - 26, - 26, - rStyle.GetTitleHeight())))); setPropertyValue( maPropertyIdToNameMap[Color_TabBarBackground], Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); - setPropertyValue( - maPropertyIdToNameMap[Color_DropDownBackground], - Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); - setPropertyValue( maPropertyIdToNameMap[Color_Highlight], Any(sal_Int32(rStyle.GetHighlightColor().GetRGBColor()))); setPropertyValue( maPropertyIdToNameMap[Color_HighlightText], Any(sal_Int32(rStyle.GetHighlightTextColor().GetRGBColor()))); - - setPropertyValue( - maPropertyIdToNameMap[Color_HorizontalBorder], - Any(sal_Int32(aBorderColor.GetRGBColor()))); - - setPropertyValue( - maPropertyIdToNameMap[Color_VerticalBorder], - Any(sal_Int32(aBorderColor.GetRGBColor()))); - setPropertyValue( - maPropertyIdToNameMap[Image_CloseIndicator], - Any(OUString("private:graphicrepository/cmd/lc_decrementlevel.png"))); } catch(beans::UnknownPropertyException const &) { @@ -492,16 +455,6 @@ void Theme::SetupPropertyMaps() maIntegers.resize(Int_Bool_ - Color_Int_ - 1); maBooleans.resize(Post_Bool_ - Int_Bool_ - 1); - maPropertyNameToIdMap["Image_CloseIndicator"]=Image_CloseIndicator; - maPropertyIdToNameMap[Image_CloseIndicator]="Image_CloseIndicator"; - - - maPropertyNameToIdMap["Color_DeckTitleFont"]=Color_DeckTitleFont; - maPropertyIdToNameMap[Color_DeckTitleFont]="Color_DeckTitleFont"; - - maPropertyNameToIdMap["Color_PanelTitleFont"]=Color_PanelTitleFont; - maPropertyIdToNameMap[Color_PanelTitleFont]="Color_PanelTitleFont"; - maPropertyNameToIdMap["Color_Highlight"]=Color_Highlight; maPropertyIdToNameMap[Color_Highlight]="Color_Highlight"; @@ -524,18 +477,6 @@ void Theme::SetupPropertyMaps() maPropertyNameToIdMap["Color_TabBarBackground"]=Color_TabBarBackground; maPropertyIdToNameMap[Color_TabBarBackground]="Color_TabBarBackground"; - maPropertyNameToIdMap["Color_HorizontalBorder"]=Color_HorizontalBorder; - maPropertyIdToNameMap[Color_HorizontalBorder]="Color_HorizontalBorder"; - - maPropertyNameToIdMap["Color_VerticalBorder"]=Color_VerticalBorder; - maPropertyIdToNameMap[Color_VerticalBorder]="Color_VerticalBorder"; - - maPropertyNameToIdMap["Color_DropDownBackground"]=Color_DropDownBackground; - maPropertyIdToNameMap[Color_DropDownBackground]="Color_DropDownBackground"; - - - maPropertyNameToIdMap["Int_DeckTitleBarHeight"]=Int_DeckTitleBarHeight; - maPropertyIdToNameMap[Int_DeckTitleBarHeight]="Int_DeckTitleBarHeight"; maPropertyNameToIdMap["Int_DeckBorderSize"]=Int_DeckBorderSize; maPropertyIdToNameMap[Int_DeckBorderSize]="Int_DeckBorderSize"; @@ -543,9 +484,6 @@ void Theme::SetupPropertyMaps() maPropertyNameToIdMap["Int_DeckSeparatorHeight"]=Int_DeckSeparatorHeight; maPropertyIdToNameMap[Int_DeckSeparatorHeight]="Int_DeckSeparatorHeight"; - maPropertyNameToIdMap["Int_PanelTitleBarHeight"]=Int_PanelTitleBarHeight; - maPropertyIdToNameMap[Int_PanelTitleBarHeight]="Int_PanelTitleBarHeight"; - maPropertyNameToIdMap["Int_DeckLeftPadding"]=Int_DeckLeftPadding; maPropertyIdToNameMap[Int_DeckLeftPadding]="Int_DeckLeftPadding"; @@ -572,11 +510,6 @@ Theme::PropertyType Theme::GetPropertyType (const ThemeItem eItem) { switch(eItem) { - case Image_CloseIndicator: - return PT_Image; - - case Color_DeckTitleFont: - case Color_PanelTitleFont: case Color_Highlight: case Color_HighlightText: case Color_DeckBackground: @@ -584,15 +517,10 @@ Theme::PropertyType Theme::GetPropertyType (const ThemeItem eItem) case Color_PanelBackground: case Color_PanelTitleBarBackground: case Color_TabBarBackground: - case Color_HorizontalBorder: - case Color_VerticalBorder: - case Color_DropDownBackground: return PT_Color; - case Int_DeckTitleBarHeight: case Int_DeckBorderSize: case Int_DeckSeparatorHeight: - case Int_PanelTitleBarHeight: case Int_DeckLeftPadding: case Int_DeckTopPadding: case Int_DeckRightPadding: diff --git a/sfx2/source/sidebar/TitleBar.cxx b/sfx2/source/sidebar/TitleBar.cxx index b88b4e92e1db..9dc13d3aa274 100644 --- a/sfx2/source/sidebar/TitleBar.cxx +++ b/sfx2/source/sidebar/TitleBar.cxx @@ -21,61 +21,58 @@ namespace sfx2::sidebar { -TitleBarBase::TitleBarBase(weld::Builder& rBuilder, Theme::ThemeItem eThemeItem) +TitleBar::TitleBar(weld::Builder& rBuilder, Theme::ThemeItem eThemeItem) : mrBuilder(rBuilder) + , mxTitlebar(rBuilder.weld_container("titlebar")) , mxAddonImage(rBuilder.weld_image("addonimage")) , mxToolBox(rBuilder.weld_toolbar("toolbar")) , meThemeItem(eThemeItem) { - mxToolBox->set_background(Theme::GetColor(meThemeItem)); + SetBackground(); - mxToolBox->connect_clicked(LINK(this, TitleBarBase, SelectionHandler)); + mxToolBox->connect_clicked(LINK(this, TitleBar, SelectionHandler)); } -TitleBarBase::~TitleBarBase() +void TitleBar::SetBackground() { + Color aColor(Theme::GetColor(meThemeItem)); + mxTitlebar->set_background(aColor); + mxToolBox->set_background(aColor); } -void TitleBarBase::reset() +void TitleBar::DataChanged() { - mxToolBox.reset(); - mxAddonImage.reset(); + SetBackground(); } -void TitleBarBase::SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon) +TitleBar::~TitleBar() { - mxAddonImage->set_image(rIcon); - mxAddonImage->set_visible(rIcon.is()); } -IMPL_LINK_NOARG(TitleBarBase, SelectionHandler, const OString&, void) +Size TitleBar::get_preferred_size() const { - HandleToolBoxItemClick(); + return mxTitlebar->get_preferred_size(); } -TitleBar::TitleBar(vcl::Window* pParentWindow, - const OUString& rUIXMLDescription, const OString& rID, - Theme::ThemeItem eThemeItem) - : InterimItemWindow(pParentWindow, rUIXMLDescription, rID) - , TitleBarBase(*m_xBuilder, eThemeItem) +void TitleBar::Show(bool bShow) { - m_xContainer->set_background(Theme::GetColor(meThemeItem)); + mxTitlebar->set_visible(bShow); } -TitleBar::~TitleBar() +bool TitleBar::GetVisible() const { - disposeOnce(); + return mxTitlebar->get_visible(); } -void TitleBar::dispose() +void TitleBar::SetIcon(const css::uno::Reference<css::graphic::XGraphic>& rIcon) { - reset(); - InterimItemWindow::dispose(); + mxAddonImage->set_image(rIcon); + mxAddonImage->set_visible(rIcon.is()); } -void TitleBar::DataChanged (const DataChangedEvent& /*rEvent*/) +IMPL_LINK_NOARG(TitleBar, SelectionHandler, const OString&, void) { - m_xContainer->set_background(Theme::GetColor(meThemeItem)); + HandleToolBoxItemClick(); } } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/UnoDeck.cxx b/sfx2/source/sidebar/UnoDeck.cxx index 122afbe018a2..3af5c1c62b73 100644 --- a/sfx2/source/sidebar/UnoDeck.cxx +++ b/sfx2/source/sidebar/UnoDeck.cxx @@ -54,7 +54,7 @@ OUString SAL_CALL SfxUnoDeck::getTitle() pDeck = pSidebarController->GetResourceManager()->GetDeckDescriptor(mDeckId)->mpDeck; } - VclPtr<DeckTitleBar> pTitleBar = pDeck->GetTitleBar(); + DeckTitleBar* pTitleBar = pDeck->GetTitleBar(); return pTitleBar->GetTitle(); } @@ -70,7 +70,7 @@ void SAL_CALL SfxUnoDeck::setTitle( const OUString& newTitle ) if (xDeckDescriptor) { Deck* pDeck = xDeckDescriptor->mpDeck; - const VclPtr<DeckTitleBar>& pTitleBar = pDeck->GetTitleBar(); + DeckTitleBar* pTitleBar = pDeck->GetTitleBar(); pTitleBar->SetTitle(newTitle); xDeckDescriptor->msTitle = newTitle; diff --git a/sfx2/source/sidebar/UnoPanel.cxx b/sfx2/source/sidebar/UnoPanel.cxx index 1170cbce1674..802126873a7a 100644 --- a/sfx2/source/sidebar/UnoPanel.cxx +++ b/sfx2/source/sidebar/UnoPanel.cxx @@ -29,13 +29,13 @@ xFrame(rFrame), mPanelId(panelId), mDeckId(deckId), mpDeck(), -mpPanel() +mxPanel() { SidebarController* pSidebarController = getSidebarController(); pSidebarController->CreateDeck(mDeckId); // creates deck object is not already mpDeck = pSidebarController->GetResourceManager()->GetDeckDescriptor(mDeckId)->mpDeck; - mpPanel = mpDeck->GetPanel(mPanelId); + mxPanel = mpDeck->GetPanel(mPanelId); } SidebarController* SfxUnoPanel::getSidebarController() @@ -54,7 +54,8 @@ OUString SAL_CALL SfxUnoPanel::getTitle() { SolarMutexGuard aGuard; - PanelTitleBar* pTitleBar = mpPanel->GetTitleBar(); + auto xPanel = mxPanel.lock(); + PanelTitleBar* pTitleBar = xPanel ? xPanel->GetTitleBar() : nullptr; if (pTitleBar) return pTitleBar->GetTitle(); else @@ -71,7 +72,8 @@ void SAL_CALL SfxUnoPanel::setTitle( const OUString& newTitle ) if (xPanelDescriptor) { xPanelDescriptor->msTitle = newTitle; - PanelTitleBar* pTitleBar = mpPanel->GetTitleBar(); + auto xPanel = mxPanel.lock(); + PanelTitleBar* pTitleBar = xPanel ? xPanel->GetTitleBar() : nullptr; if (pTitleBar) pTitleBar->SetTitle(newTitle); } @@ -81,7 +83,8 @@ sal_Bool SAL_CALL SfxUnoPanel::isExpanded() { SolarMutexGuard aGuard; - return mpPanel->IsExpanded(); + auto xPanel = mxPanel.lock(); + return xPanel && xPanel->IsExpanded(); } @@ -90,7 +93,9 @@ void SAL_CALL SfxUnoPanel::expand( const sal_Bool bCollapseOther ) SolarMutexGuard aGuard; - mpPanel->SetExpanded(true); + auto xPanel = mxPanel.lock(); + if (xPanel) + xPanel->SetExpanded(true); if (bCollapseOther) { @@ -111,7 +116,9 @@ void SAL_CALL SfxUnoPanel::collapse() { SolarMutexGuard aGuard; - mpPanel->SetExpanded(false); + auto xPanel = mxPanel.lock(); + if (xPanel) + xPanel->SetExpanded(false); SidebarController* pSidebarController = getSidebarController(); pSidebarController->NotifyResize(); } @@ -120,10 +127,10 @@ uno::Reference<awt::XWindow> SAL_CALL SfxUnoPanel::getDialog() { SolarMutexGuard aGuard; - return mpPanel->GetElementWindow(); + auto xPanel = mxPanel.lock(); + return xPanel ? xPanel->GetElementWindow() : nullptr; } - sal_Int32 SAL_CALL SfxUnoPanel::getOrderIndex() { SolarMutexGuard aGuard; diff --git a/sfx2/uiconfig/ui/deck.ui b/sfx2/uiconfig/ui/deck.ui new file mode 100644 index 000000000000..61ad555c1cb3 --- /dev/null +++ b/sfx2/uiconfig/ui/deck.ui @@ -0,0 +1,132 @@ +<?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="Deck"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="vexpand">True</property> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <child> + <object class="GtkViewport"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <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> + </child> + </object> + </child> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">1</property> + </packing> + </child> + <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="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="icon-name">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="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="deck|SFX_STR_SIDEBAR_CLOSE_DECK">Close Sidebar Deck</property> + <property name="use-underline">True</property> + <property name="icon-name">sfx2/res/closedoc.png</property> + <child internal-child="accessible"> + <object class="AtkObject" id="button-atkobject"> + <property name="AtkObject::accessible-name" translatable="yes" context="deck|SFX_STR_SIDEBAR_CLOSE_DECK">Close Sidebar Deck</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> + </object> +</interface> diff --git a/sfx2/uiconfig/ui/decktitlebar.ui b/sfx2/uiconfig/ui/decktitlebar.ui deleted file mode 100644 index f7a706aae306..000000000000 --- a/sfx2/uiconfig/ui/decktitlebar.ui +++ /dev/null @@ -1,82 +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="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="icon-name">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="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="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/panel.ui b/sfx2/uiconfig/ui/panel.ui index 689236e2eb28..b2c5f9258fec 100644 --- a/sfx2/uiconfig/ui/panel.ui +++ b/sfx2/uiconfig/ui/panel.ui @@ -6,7 +6,6 @@ <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> @@ -72,12 +71,12 @@ <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="tooltip-text" translatable="yes" context="panel|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> + <property name="AtkObject::accessible-name" translatable="yes" context="panel|SFX_STR_SIDEBAR_MORE_OPTIONS">More Options</property> </object> </child> </object> @@ -107,7 +106,6 @@ <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/> diff --git a/solenv/sanitizers/ui/sfx.suppr b/solenv/sanitizers/ui/sfx.suppr index 2e36d5228275..e9358dabf17b 100644 --- a/solenv/sanitizers/ui/sfx.suppr +++ b/solenv/sanitizers/ui/sfx.suppr ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits