diff options
Diffstat (limited to 'sfx2/source/sidebar/Panel.cxx')
-rw-r--r-- | sfx2/source/sidebar/Panel.cxx | 88 |
1 files changed, 62 insertions, 26 deletions
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() |