summaryrefslogtreecommitdiff
path: root/sfx2/inc/sidebar
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2020-02-12 20:52:59 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2020-02-16 07:00:15 +0100
commit37f227344f387257a5d8613449ffbd1bb0537be4 (patch)
tree32402dd0ff6c2b4200334206059b76979de342db /sfx2/inc/sidebar
parent15c0f22c31a46ce37e98f9394e6a8e0bc92495f9 (diff)
move some headers inside sfx2/
Change-Id: I806735926661ae4a666725f970ee86f0cb816a49 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88562 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sfx2/inc/sidebar')
-rw-r--r--sfx2/inc/sidebar/Accessible.hxx60
-rw-r--r--sfx2/inc/sidebar/AccessibleTitleBar.hxx44
-rw-r--r--sfx2/inc/sidebar/ContextList.hxx66
-rw-r--r--sfx2/inc/sidebar/ControllerFactory.hxx66
-rw-r--r--sfx2/inc/sidebar/DeckDescriptor.hxx53
-rw-r--r--sfx2/inc/sidebar/DeckLayouter.hxx48
-rw-r--r--sfx2/inc/sidebar/DeckTitleBar.hxx52
-rw-r--r--sfx2/inc/sidebar/DrawHelper.hxx47
-rw-r--r--sfx2/inc/sidebar/MenuButton.hxx45
-rw-r--r--sfx2/inc/sidebar/Paint.hxx73
-rw-r--r--sfx2/inc/sidebar/PanelDescriptor.hxx50
-rw-r--r--sfx2/inc/sidebar/PanelTitleBar.hxx62
-rw-r--r--sfx2/inc/sidebar/TabItem.hxx46
-rw-r--r--sfx2/inc/sidebar/TitleBar.hxx76
-rw-r--r--sfx2/inc/sidebar/UnoDeck.hxx62
-rw-r--r--sfx2/inc/sidebar/UnoDecks.hxx54
-rw-r--r--sfx2/inc/sidebar/UnoPanel.hxx69
-rw-r--r--sfx2/inc/sidebar/UnoPanels.hxx57
18 files changed, 1030 insertions, 0 deletions
diff --git a/sfx2/inc/sidebar/Accessible.hxx b/sfx2/inc/sidebar/Accessible.hxx
new file mode 100644
index 000000000000..f216da980cf2
--- /dev/null
+++ b/sfx2/inc/sidebar/Accessible.hxx
@@ -0,0 +1,60 @@
+/* -*- 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 <com/sun/star/accessibility/XAccessible.hpp>
+
+#include <cppuhelper/compbase.hxx>
+#include <cppuhelper/basemutex.hxx>
+
+namespace com::sun::star::accessibility { class XAccessibleContext; }
+
+typedef cppu::WeakComponentImplHelper <
+ css::accessibility::XAccessible
+ > AccessibleInterfaceBase;
+
+namespace sfx2 { namespace sidebar {
+
+
+/** Simple implementation of the XAccessible interface.
+ Its getAccessibleContext() method returns a context object given
+ to its constructor.
+*/
+class Accessible final
+ : private ::cppu::BaseMutex,
+ public AccessibleInterfaceBase
+{
+public:
+ explicit Accessible (
+ const css::uno::Reference<css::accessibility::XAccessibleContext>& rxContext);
+ virtual ~Accessible() override;
+ Accessible(const Accessible&) = delete;
+ Accessible& operator=( const Accessible& ) = delete;
+
+ virtual void SAL_CALL disposing() override;
+ // XAccessible
+ virtual css::uno::Reference<css::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext() override;
+
+private:
+ css::uno::Reference<css::accessibility::XAccessibleContext> mxContext;
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/AccessibleTitleBar.hxx b/sfx2/inc/sidebar/AccessibleTitleBar.hxx
new file mode 100644
index 000000000000..58f70e3efd3b
--- /dev/null
+++ b/sfx2/inc/sidebar/AccessibleTitleBar.hxx
@@ -0,0 +1,44 @@
+/* -*- 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 { namespace 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/ContextList.hxx b/sfx2/inc/sidebar/ContextList.hxx
new file mode 100644
index 000000000000..2ca07d36d416
--- /dev/null
+++ b/sfx2/inc/sidebar/ContextList.hxx
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#pragma once
+
+#include <sfx2/sidebar/Context.hxx>
+#include <rtl/ustring.hxx>
+
+#include <vector>
+
+namespace sfx2 { namespace sidebar {
+
+/** Per context data for deck and panel descriptors.
+*/
+class ContextList
+{
+public:
+ ContextList();
+
+ class Entry
+ {
+ public:
+ Context maContext;
+ bool mbIsInitiallyVisible;
+ OUString msMenuCommand;
+ };
+
+ /** Return <TRUE/> when the given context matches any of the stored contexts.
+ */
+ const Entry* GetMatch (
+ const Context& rContext) const;
+ Entry* GetMatch (
+ const Context& rContext);
+
+ void AddContextDescription (
+ const Context& rContext,
+ const bool bIsInitiallyVisible,
+ const OUString& rsMenuCommand);
+
+ void ToggleVisibilityForContext( const Context& rContext,const bool bIsInitiallyVisible );
+ const ::std::vector<Entry>& GetEntries() const {return maEntries;};
+
+private:
+ ::std::vector<Entry> maEntries;
+
+ ::std::vector<Entry>::const_iterator FindBestMatch (const Context& rContext) const;
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/ControllerFactory.hxx b/sfx2/inc/sidebar/ControllerFactory.hxx
new file mode 100644
index 000000000000..66c3e432aebc
--- /dev/null
+++ b/sfx2/inc/sidebar/ControllerFactory.hxx
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#pragma once
+
+#include <sfx2/dllapi.h>
+#include <com/sun/star/uno/Reference.hxx>
+
+namespace com::sun::star::awt { class XWindow; }
+namespace com::sun::star::frame { class XController; }
+namespace com::sun::star::frame { class XFrame; }
+namespace com::sun::star::frame { class XToolbarController; }
+
+class ToolBox;
+
+namespace weld { class Toolbar; }
+
+namespace sfx2 { namespace sidebar {
+
+/** Convenience class for the easy creation of toolbox controllers.
+*/
+class ControllerFactory
+{
+public:
+ static css::uno::Reference<css::frame::XToolbarController> CreateToolBoxController(
+ ToolBox* pToolBox,
+ const sal_uInt16 nItemId,
+ const OUString& rsCommandName,
+ const css::uno::Reference<css::frame::XFrame>& rxFrame,
+ const css::uno::Reference<css::frame::XController>& rxController,
+ const css::uno::Reference<css::awt::XWindow>& rxParentWindow,
+ const sal_Int32 nItemWidth);
+
+ static css::uno::Reference<css::frame::XToolbarController> CreateToolBoxController(
+ weld::Toolbar& rToolbar,
+ const OUString& rsCommandName,
+ const css::uno::Reference<css::frame::XFrame>& rxFrame);
+
+private:
+ static css::uno::Reference<css::frame::XToolbarController> CreateToolBarController(
+ const css::uno::Reference<css::awt::XWindow>& rToolbar,
+ const OUString& rsCommandName,
+ const css::uno::Reference<css::frame::XFrame>& rxFrame,
+ const css::uno::Reference<css::frame::XController>& rxController,
+ const sal_Int32 nWidth);
+};
+
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/DeckDescriptor.hxx b/sfx2/inc/sidebar/DeckDescriptor.hxx
new file mode 100644
index 000000000000..92a229f41c47
--- /dev/null
+++ b/sfx2/inc/sidebar/DeckDescriptor.hxx
@@ -0,0 +1,53 @@
+/* -*- 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 <sidebar/ContextList.hxx>
+
+#include <sfx2/sidebar/Deck.hxx>
+
+namespace sfx2 { namespace sidebar {
+
+class DeckDescriptor
+{
+public:
+ OUString msTitle;
+ OUString msId;
+ OUString msIconURL;
+ OUString msHighContrastIconURL;
+ OUString msTitleBarIconURL;
+ OUString msHighContrastTitleBarIconURL;
+ OUString msHelpText;
+ ContextList maContextList;
+ bool mbIsEnabled;
+ sal_Int32 mnOrderIndex;
+ bool mbExperimental;
+
+ OUString msNodeName; // some impress deck nodes names are different from their Id
+
+ VclPtr<Deck> mpDeck;
+
+ DeckDescriptor();
+ DeckDescriptor (const DeckDescriptor& rOther);
+ ~DeckDescriptor();
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/DeckLayouter.hxx b/sfx2/inc/sidebar/DeckLayouter.hxx
new file mode 100644
index 000000000000..ed74e6261742
--- /dev/null
+++ b/sfx2/inc/sidebar/DeckLayouter.hxx
@@ -0,0 +1,48 @@
+/* -*- 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 <sfx2/sidebar/Panel.hxx>
+
+class ScrollBar;
+namespace vcl { class Window; }
+namespace tools { class Rectangle; }
+
+namespace sfx2 { namespace sidebar {
+
+/** Helper for layouting the direct and indirect children of a
+ deck like title bars, panels, and scroll bars.
+*/
+namespace DeckLayouter
+{
+ void LayoutDeck (
+ 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);
+}
+
+} } // 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
new file mode 100644
index 000000000000..bc522d87a889
--- /dev/null
+++ b/sfx2/inc/sidebar/DeckTitleBar.hxx
@@ -0,0 +1,52 @@
+/* -*- 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 <sidebar/TitleBar.hxx>
+
+namespace sfx2 { namespace sidebar {
+
+class DeckTitleBar final : public TitleBar
+{
+public:
+ DeckTitleBar(const OUString& rsTitle,
+ vcl::Window* pParentWindow,
+ const std::function<void()>& rCloserAction);
+
+ void SetCloserVisible(const bool bIsCloserVisible);
+ static 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 sidebar::Paint GetBackgroundPaint() override;
+ virtual void HandleToolBoxItemClick(const sal_uInt16 nItemIndex) override;
+ virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+
+ static const sal_uInt16 mnCloserItemIndex = 1;
+ const std::function<void()> maCloserAction;
+ bool mbIsCloserVisible;
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/DrawHelper.hxx b/sfx2/inc/sidebar/DrawHelper.hxx
new file mode 100644
index 000000000000..64e173ce317a
--- /dev/null
+++ b/sfx2/inc/sidebar/DrawHelper.hxx
@@ -0,0 +1,47 @@
+/* -*- 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 <vcl/outdev.hxx>
+
+class Color;
+class SvBorder;
+
+namespace sfx2 { namespace sidebar {
+
+class Paint;
+
+/** Some convenience functions for painting backgrounds and borders.
+*/
+class DrawHelper
+{
+public:
+ static void DrawBorder(vcl::RenderContext& rRenderContext, const tools::Rectangle& rBox, const SvBorder& rBorderSize,
+ const Paint& rHorizontalPaint, const Paint& rVerticalPaint);
+ static void DrawHorizontalLine(vcl::RenderContext& rRenderContext, const sal_Int32 nLeft, const sal_Int32 nRight,
+ const sal_Int32 nY, const sal_Int32 nHeight, const Paint& rPaint);
+ static void DrawVerticalLine(vcl::RenderContext& rRenderContext, const sal_Int32 nTop, const sal_Int32 nBottom,
+ const sal_Int32 nX, const sal_Int32 nWidth, const Paint& rPaint);
+ static void DrawRoundedRectangle(vcl::RenderContext& rRenderContext, const tools::Rectangle& rBox, const sal_Int32 nCornerRadius,
+ const Color& rBorderColor, const Paint& rFillPaint);
+};
+
+}} // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/MenuButton.hxx b/sfx2/inc/sidebar/MenuButton.hxx
new file mode 100644
index 000000000000..36d18a0b836a
--- /dev/null
+++ b/sfx2/inc/sidebar/MenuButton.hxx
@@ -0,0 +1,45 @@
+/* -*- 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 <vcl/button.hxx>
+
+namespace sfx2 { namespace sidebar {
+
+class MenuButton final
+ : public CheckBox
+{
+public:
+ MenuButton (vcl::Window* pParentWindow);
+
+ virtual void Paint (vcl::RenderContext& /*rRenderContext*/, const tools::Rectangle& rUpdateArea) override;
+ virtual void MouseMove (const MouseEvent& rEvent) override;
+ virtual void MouseButtonDown (const MouseEvent& rMouseEvent) override;
+ virtual void MouseButtonUp (const MouseEvent& rMouseEvent) override;
+
+protected:
+ using CheckBox::FillLayoutData;
+
+private:
+ bool mbIsLeftButtonDown;
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/Paint.hxx b/sfx2/inc/sidebar/Paint.hxx
new file mode 100644
index 000000000000..e93c6d28d829
--- /dev/null
+++ b/sfx2/inc/sidebar/Paint.hxx
@@ -0,0 +1,73 @@
+/* -*- 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 <vcl/gradient.hxx>
+#include <vcl/wall.hxx>
+
+#include <boost/variant.hpp>
+
+namespace sfx2 { namespace sidebar {
+
+/** Abstraction of different ways to fill outlines.
+ Can be
+ - none (empty: outline is not filled)
+ - singular color
+ - gradient
+*/
+class Paint
+{
+public:
+ enum Type
+ {
+ NoPaint,
+ ColorPaint,
+ GradientPaint
+ };
+
+ // Create a Paint object for an Any that may contain a color, a
+ // awt::Gradient, or nothing.
+ static Paint Create (const css::uno::Any& rValue);
+
+ // Create paint with type NoPaint.
+ explicit Paint();
+
+ // Create a Paint object for the given color.
+ explicit Paint (const Color& rColor);
+
+ // Create a Paint object for the given gradient.
+ explicit Paint (const Gradient& rGradient);
+
+ Type GetType() const { return meType;}
+ const Color& GetColor() const;
+ const Gradient& GetGradient() const;
+
+ Wallpaper GetWallpaper() const;
+
+private:
+ Type meType;
+ ::boost::variant<
+ Color,
+ Gradient
+ > maValue;
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/PanelDescriptor.hxx b/sfx2/inc/sidebar/PanelDescriptor.hxx
new file mode 100644
index 000000000000..42dd7b8578c3
--- /dev/null
+++ b/sfx2/inc/sidebar/PanelDescriptor.hxx
@@ -0,0 +1,50 @@
+/* -*- 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 <sidebar/ContextList.hxx>
+
+namespace sfx2 { namespace sidebar {
+
+class PanelDescriptor
+{
+public:
+ OUString msTitle;
+ bool mbIsTitleBarOptional;
+ OUString msId;
+ OUString msDeckId;
+ OUString msTitleBarIconURL;
+ OUString msHighContrastTitleBarIconURL;
+ ContextList maContextList;
+ OUString msImplementationURL;
+ sal_Int32 mnOrderIndex;
+ bool mbShowForReadOnlyDocuments;
+ bool mbWantsCanvas;
+ bool mbExperimental;
+
+ OUString msNodeName; // some impress panel nodes names are different from their Id
+
+ PanelDescriptor();
+ PanelDescriptor (const PanelDescriptor& rPanelDescriptor);
+ ~PanelDescriptor();
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/PanelTitleBar.hxx b/sfx2/inc/sidebar/PanelTitleBar.hxx
new file mode 100644
index 000000000000..1806f1bb133d
--- /dev/null
+++ b/sfx2/inc/sidebar/PanelTitleBar.hxx
@@ -0,0 +1,62 @@
+/* -*- 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 <sidebar/TitleBar.hxx>
+
+namespace com::sun::star::frame { class XController; }
+namespace com::sun::star::frame { class XFrame; }
+
+namespace sfx2 { namespace sidebar {
+
+class Panel;
+
+class PanelTitleBar final
+ : public TitleBar
+{
+public:
+ PanelTitleBar(const OUString& rsTitle, vcl::Window* pParentWindow, Panel* pPanel);
+ virtual ~PanelTitleBar() override;
+ virtual void dispose() override;
+
+ void SetMoreOptionsCommand(const OUString& rsCommandName,
+ const css::uno::Reference<css::frame::XFrame>& rxFrame,
+ const css::uno::Reference<css::frame::XController>& rxController);
+
+ 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 sidebar::Paint GetBackgroundPaint() override;
+ virtual void HandleToolBoxItemClick (const sal_uInt16 nItemIndex) override;
+ virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+
+ bool mbIsLeftButtonDown;
+ VclPtr<Panel> mpPanel;
+ static const sal_uInt16 mnMenuItemIndex = 1;
+ css::uno::Reference<css::frame::XFrame> mxFrame;
+ OUString msMoreOptionsCommand;
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/TabItem.hxx b/sfx2/inc/sidebar/TabItem.hxx
new file mode 100644
index 000000000000..c80604b86b6f
--- /dev/null
+++ b/sfx2/inc/sidebar/TabItem.hxx
@@ -0,0 +1,46 @@
+/* -*- 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 <vcl/button.hxx>
+
+namespace vcl { class Window; }
+
+namespace sfx2 { namespace sidebar {
+
+/** A single button in the tab bar.
+*/
+class TabItem final
+ : public RadioButton
+{
+public:
+ TabItem (vcl::Window* pParentWindow);
+
+ virtual void Paint (vcl::RenderContext& rRenderContext, const tools::Rectangle& rUpdateArea) override;
+ virtual void MouseMove (const MouseEvent& rEvent) override;
+ virtual void MouseButtonDown (const MouseEvent& rMouseEvent) override;
+ virtual void MouseButtonUp (const MouseEvent& rMouseEvent) override;
+
+private:
+ bool mbIsLeftButtonDown;
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/TitleBar.hxx b/sfx2/inc/sidebar/TitleBar.hxx
new file mode 100644
index 000000000000..8a22303aabbf
--- /dev/null
+++ b/sfx2/inc/sidebar/TitleBar.hxx
@@ -0,0 +1,76 @@
+/* -*- 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 <sidebar/Paint.hxx>
+
+#include <sfx2/sidebar/SidebarToolBox.hxx>
+
+namespace sfx2 { namespace sidebar {
+
+class TitleBar : public vcl::Window
+{
+public:
+ TitleBar (const OUString& rsTitle,
+ vcl::Window* pParentWindow,
+ const sidebar::Paint& rInitialBackgroundPaint);
+ virtual ~TitleBar() override;
+ virtual void dispose() override;
+
+ void SetTitle (const OUString& rsTitle);
+ const OUString& GetTitle() const {return msTitle; }
+
+ void SetIcon (const Image& 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 (long nX, long nY, long nWidth, long nHeight, PosSizeFlags nFlags = PosSizeFlags::All) override;
+
+ ToolBox& GetToolBox()
+ {
+ return *maToolBox;
+ }
+ const ToolBox& GetToolBox() const
+ {
+ return *maToolBox;
+ }
+
+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 sidebar::Paint GetBackgroundPaint() = 0;
+ virtual void HandleToolBoxItemClick (const sal_uInt16 nItemIndex);
+ virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
+
+private:
+ Image maIcon;
+ sidebar::Paint maBackgroundPaint;
+
+ void PaintTitle(vcl::RenderContext& rRenderContext, const tools::Rectangle& rTitleBox);
+ DECL_LINK(SelectionHandler, ToolBox*, void);
+};
+
+} } // end of namespace sfx2::sidebar
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/UnoDeck.hxx b/sfx2/inc/sidebar/UnoDeck.hxx
new file mode 100644
index 000000000000..c2f10b36452e
--- /dev/null
+++ b/sfx2/inc/sidebar/UnoDeck.hxx
@@ -0,0 +1,62 @@
+/* -*- 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/.
+ *
+ */
+
+#pragma once
+
+
+#include <com/sun/star/ui/XDeck.hpp>
+
+#include <cppuhelper/implbase.hxx>
+
+#include <sfx2/sidebar/ResourceManager.hxx>
+
+namespace com::sun::star::frame { class XFrame; }
+namespace com::sun::star::ui { class XPanels; }
+namespace sfx2 { namespace sidebar { class SidebarController; } }
+
+/** get the decks
+*/
+class SfxUnoDeck final : public cppu::WeakImplHelper<css::ui::XDeck>
+{
+
+public:
+
+ SfxUnoDeck(const css::uno::Reference<css::frame::XFrame>& , const OUString&);
+
+ virtual OUString SAL_CALL getId() override;
+
+ virtual OUString SAL_CALL getTitle() override;
+ virtual void SAL_CALL setTitle( const OUString& newTitle ) override;
+
+ virtual sal_Bool SAL_CALL isActive() override;
+ virtual void SAL_CALL activate( const sal_Bool bActivate ) override;
+
+ virtual css::uno::Reference<css::ui::XPanels> SAL_CALL getPanels() override;
+
+ virtual sal_Int32 SAL_CALL getOrderIndex() override;
+ virtual void SAL_CALL setOrderIndex( const sal_Int32 newOrderIndex ) override;
+ virtual void SAL_CALL moveFirst() override;
+ virtual void SAL_CALL moveLast() override;
+ virtual void SAL_CALL moveUp() override;
+ virtual void SAL_CALL moveDown() override;
+
+private:
+
+ const css::uno::Reference<css::frame::XFrame> xFrame;
+ sfx2::sidebar::SidebarController* getSidebarController();
+
+ const OUString mDeckId;
+
+ sal_Int32 GetMaxOrderIndex(sfx2::sidebar::ResourceManager::DeckContextDescriptorContainer aDecks);
+ sal_Int32 GetMinOrderIndex(sfx2::sidebar::ResourceManager::DeckContextDescriptorContainer aDecks);
+
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/UnoDecks.hxx b/sfx2/inc/sidebar/UnoDecks.hxx
new file mode 100644
index 000000000000..d0a5b710e05a
--- /dev/null
+++ b/sfx2/inc/sidebar/UnoDecks.hxx
@@ -0,0 +1,54 @@
+/* -*- 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/.
+ *
+ */
+
+#pragma once
+
+#include <com/sun/star/ui/XDecks.hpp>
+
+#include <cppuhelper/implbase.hxx>
+
+namespace com::sun::star::frame { class XFrame; }
+namespace sfx2 { namespace sidebar { class SidebarController; } }
+
+/** get the decks
+*/
+class SfxUnoDecks final : public cppu::WeakImplHelper<css::ui::XDecks>
+{
+
+public:
+
+ SfxUnoDecks(const css::uno::Reference<css::frame::XFrame>&);
+
+// XNameAccess
+
+ virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override;
+
+ virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
+
+ virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override;
+
+// XIndexAccess
+
+ virtual sal_Int32 SAL_CALL getCount() override;
+
+ virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override;
+
+// XElementAccess
+ virtual css::uno::Type SAL_CALL getElementType() override;
+ virtual sal_Bool SAL_CALL hasElements() override;
+
+private:
+
+ const css::uno::Reference<css::frame::XFrame> xFrame;
+ sfx2::sidebar::SidebarController* getSidebarController();
+
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/UnoPanel.hxx b/sfx2/inc/sidebar/UnoPanel.hxx
new file mode 100644
index 000000000000..07fa526907a1
--- /dev/null
+++ b/sfx2/inc/sidebar/UnoPanel.hxx
@@ -0,0 +1,69 @@
+/* -*- 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/.
+ *
+ */
+
+#pragma once
+
+#include <com/sun/star/ui/XPanel.hpp>
+
+
+#include <cppuhelper/implbase.hxx>
+
+#include <sfx2/sidebar/Panel.hxx>
+#include <sfx2/sidebar/Deck.hxx>
+#include <sfx2/sidebar/ResourceManager.hxx>
+
+namespace com::sun::star::awt { class XWindow; }
+namespace com::sun::star::frame { class XFrame; }
+namespace sfx2 { namespace sidebar { class SidebarController; } }
+
+
+/** get the Panel
+*/
+class SfxUnoPanel final : public cppu::WeakImplHelper<css::ui::XPanel>
+{
+
+public:
+
+ SfxUnoPanel(const css::uno::Reference<css::frame::XFrame>& , const OUString&, const OUString&);
+
+ virtual OUString SAL_CALL getId() override;
+
+ virtual OUString SAL_CALL getTitle() override;
+ virtual void SAL_CALL setTitle( const OUString& newTitle ) override;
+
+ virtual sal_Bool SAL_CALL isExpanded() override;
+ virtual void SAL_CALL expand( const sal_Bool bCollapseOther ) override;
+ virtual void SAL_CALL collapse( ) override;
+
+ virtual sal_Int32 SAL_CALL getOrderIndex() override;
+ virtual void SAL_CALL setOrderIndex( const sal_Int32 newOrderIndex ) override;
+ virtual void SAL_CALL moveFirst() override;
+ virtual void SAL_CALL moveLast() override;
+ virtual void SAL_CALL moveUp() override;
+ virtual void SAL_CALL moveDown() override;
+
+ virtual css::uno::Reference<css::awt::XWindow> SAL_CALL getDialog() override;
+
+private:
+
+ const css::uno::Reference<css::frame::XFrame> xFrame;
+ sfx2::sidebar::SidebarController* getSidebarController();
+
+ const OUString mPanelId;
+ const OUString mDeckId;
+
+ VclPtr<sfx2::sidebar::Deck> mpDeck;
+ VclPtr<sfx2::sidebar::Panel> mpPanel;
+
+ sal_Int32 GetMaxOrderIndex(sfx2::sidebar::ResourceManager::PanelContextDescriptorContainer aPanels);
+ sal_Int32 GetMinOrderIndex(sfx2::sidebar::ResourceManager::PanelContextDescriptorContainer aPanels);
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sidebar/UnoPanels.hxx b/sfx2/inc/sidebar/UnoPanels.hxx
new file mode 100644
index 000000000000..598db749ee1f
--- /dev/null
+++ b/sfx2/inc/sidebar/UnoPanels.hxx
@@ -0,0 +1,57 @@
+/* -*- 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/.
+ */
+#pragma once
+
+
+#include <com/sun/star/ui/XPanels.hpp>
+
+#include <cppuhelper/implbase.hxx>
+
+namespace com::sun::star::frame { class XFrame; }
+namespace sfx2 { namespace sidebar { class SidebarController; } }
+
+/** get the decks
+*/
+class SfxUnoPanels final : public cppu::WeakImplHelper<css::ui::XPanels>
+{
+
+public:
+
+ SfxUnoPanels(const css::uno::Reference<css::frame::XFrame>& , const OUString&);
+
+// XPanels
+ virtual OUString SAL_CALL getDeckId() override;
+
+// XNameAccess
+
+ virtual css::uno::Any SAL_CALL getByName( const OUString& aName ) override;
+
+ virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
+
+ virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) override;
+
+// XIndexAccess
+
+ virtual sal_Int32 SAL_CALL getCount() override;
+
+ virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) override;
+
+// XElementAccess
+ virtual css::uno::Type SAL_CALL getElementType() override;
+ virtual sal_Bool SAL_CALL hasElements() override;
+
+private:
+
+ const css::uno::Reference<css::frame::XFrame> xFrame;
+ sfx2::sidebar::SidebarController* getSidebarController();
+ const OUString& mDeckId;
+
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */