summaryrefslogtreecommitdiff
path: root/sd/source/ui/toolpanel
diff options
context:
space:
mode:
authorFrank Schoenheit [fs] <frank.schoenheit@sun.com>2010-06-03 18:53:52 +0200
committerFrank Schoenheit [fs] <frank.schoenheit@sun.com>2010-06-03 18:53:52 +0200
commitf884576207758a6fae1cd190c064f4e115938cc0 (patch)
treec24f0da00ce9e2f078075b762879d7066aebd599 /sd/source/ui/toolpanel
parentc2a240b1d4f0aea0db9490f0c5249806e5829ba7 (diff)
parent798d48ee776fe1bc443d273eeb688ad584f65d7c (diff)
slidecopy: merge after copying in CWS renaissance2
Diffstat (limited to 'sd/source/ui/toolpanel')
-rwxr-xr-xsd/source/ui/toolpanel/LayoutMenu.cxx61
-rwxr-xr-xsd/source/ui/toolpanel/LayoutMenu.hxx33
-rwxr-xr-xsd/source/ui/toolpanel/LayoutableWindow.hxx79
-rw-r--r--sd/source/ui/toolpanel/MethodGuard.hxx67
-rwxr-xr-xsd/source/ui/toolpanel/ScrollPanel.cxx26
-rwxr-xr-xsd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx41
-rwxr-xr-xsd/source/ui/toolpanel/SubToolPanel.cxx29
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneControlFactory.cxx9
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneShellManager.cxx17
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneShellManager.hxx7
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneTreeNode.cxx11
-rwxr-xr-xsd/source/ui/toolpanel/TaskPaneViewShell.cxx889
-rwxr-xr-xsd/source/ui/toolpanel/TestMenu.cxx12
-rwxr-xr-xsd/source/ui/toolpanel/TestMenu.hxx2
-rwxr-xr-xsd/source/ui/toolpanel/TestPanel.cxx8
-rwxr-xr-xsd/source/ui/toolpanel/TestPanel.hxx2
-rwxr-xr-xsd/source/ui/toolpanel/TitleBar.cxx149
-rwxr-xr-xsd/source/ui/toolpanel/TitleToolBox.cxx49
-rwxr-xr-xsd/source/ui/toolpanel/TitleToolBox.hxx18
-rwxr-xr-xsd/source/ui/toolpanel/TitledControl.cxx104
-rwxr-xr-xsd/source/ui/toolpanel/ToolPanel.cxx310
-rw-r--r--sd/source/ui/toolpanel/ToolPanel.hxx80
-rwxr-xr-xsd/source/ui/toolpanel/ToolPanelChildWindow.cxx68
-rwxr-xr-xsd/source/ui/toolpanel/ToolPanelChildWindow.src52
-rw-r--r--sd/source/ui/toolpanel/ToolPanelFactory.cxx255
-rw-r--r--sd/source/ui/toolpanel/ToolPanelUIElement.cxx134
-rw-r--r--sd/source/ui/toolpanel/ToolPanelUIElement.hxx87
-rwxr-xr-xsd/source/ui/toolpanel/ToolPanelViewShell.cxx900
-rwxr-xr-xsd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx21
-rwxr-xr-xsd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx12
-rwxr-xr-xsd/source/ui/toolpanel/controls/DocumentHelper.cxx6
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx3
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPagesPanel.cxx32
-rwxr-xr-xsd/source/ui/toolpanel/controls/MasterPagesPanel.hxx16
-rwxr-xr-xsd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx23
-rwxr-xr-xsd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx12
-rwxr-xr-xsd/source/ui/toolpanel/controls/TableDesignPanel.cxx21
-rwxr-xr-xsd/source/ui/toolpanel/controls/TableDesignPanel.hxx12
-rwxr-xr-xsd/source/ui/toolpanel/makefile.mk6
39 files changed, 1882 insertions, 1781 deletions
diff --git a/sd/source/ui/toolpanel/LayoutMenu.cxx b/sd/source/ui/toolpanel/LayoutMenu.cxx
index 2fc995aa45f9..7e0fd41ffb89 100755
--- a/sd/source/ui/toolpanel/LayoutMenu.cxx
+++ b/sd/source/ui/toolpanel/LayoutMenu.cxx
@@ -47,6 +47,7 @@
#include "controller/SlideSorterController.hxx"
#include "controller/SlsPageSelector.hxx"
#include "taskpane/TaskPaneControlFactory.hxx"
+#include "taskpane/ToolPanelViewShell.hxx"
#include "taskpane/ScrollPanel.hxx"
#include "tools/SlotStateListener.hxx"
#include "EventMultiplexer.hxx"
@@ -84,40 +85,32 @@ using ::sd::framework::FrameworkHelper;
namespace sd { namespace toolpanel {
-/** This factory class stores references to ViewShellBase and DrawDocShell
- and passes them to new LayoutMenu objects.
-*/
-class LayoutMenuFactory
+class LayoutMenuRootFactory
: public ControlFactory
{
public:
- LayoutMenuFactory (ViewShellBase& rBase, DrawDocShell& rDocShell)
- : mrBase(rBase),
- mrDocShell(rDocShell)
- {}
+ LayoutMenuRootFactory (ToolPanelViewShell& i_rPanelViewShell)
+ :mrPanelViewShell(i_rPanelViewShell)
+ {
+ }
protected:
- virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode)
+ virtual TreeNode* InternalCreateControl( ::Window& i_rParent )
{
- ScrollPanel* pScrollPanel = new ScrollPanel (pTreeNode);
+ ScrollPanel* pScrollPanel = new ScrollPanel (i_rParent);
::std::auto_ptr<TreeNode> pMenu (
new LayoutMenu (
pScrollPanel,
- mrDocShell,
- mrBase,
- false));
+ mrPanelViewShell));
pScrollPanel->AddControl(pMenu);
return pScrollPanel;
}
private:
- ViewShellBase& mrBase;
- DrawDocShell& mrDocShell;
+ ToolPanelViewShell& mrPanelViewShell;
};
-
-
SFX_IMPL_INTERFACE(LayoutMenu, SfxShell,
SdResId(STR_TASKPANELAYOUTMENU))
{
@@ -182,22 +175,29 @@ static snewfoil_value_info standard[] =
{0, 0, 0, WritingMode_LR_TB, AUTOLAYOUT_NONE}
};
-LayoutMenu::LayoutMenu (
- TreeNode* pParent,
- DrawDocShell& rDocumentShell,
- ViewShellBase& rViewShellBase,
- bool bUseOwnScrollBar)
+LayoutMenu::LayoutMenu( TreeNode* pParent, ToolPanelViewShell& i_rPanelViewShell )
: ValueSet (pParent->GetWindow()),
TreeNode(pParent),
DragSourceHelper(this),
DropTargetHelper(this),
- mrBase (rViewShellBase),
- mbUseOwnScrollBar (bUseOwnScrollBar),
+ mrBase( i_rPanelViewShell.GetViewShellBase() ),
+ mpShellManager (&i_rPanelViewShell.GetSubShellManager()),
+ mbUseOwnScrollBar( false ),
mnPreferredColumnCount(3),
mxListener(NULL),
mbSelectionUpdatePending(true),
mbIsMainViewChangePending(false)
{
+ implConstruct( *mrBase.GetDocument()->GetDocSh() );
+}
+
+
+void LayoutMenu::implConstruct( DrawDocShell& rDocumentShell )
+{
+ OSL_ENSURE( mrBase.GetDocument()->GetDocSh() == &rDocumentShell,
+ "LayoutMenu::implConstruct: hmm?" );
+ // if this fires, then my assumption that the rDocumentShell parameter to our first ctor is superfluous ...
+
SetStyle (
( GetStyle() & ~(WB_ITEMBORDER) )
| WB_TABSTOP
@@ -236,7 +236,6 @@ LayoutMenu::LayoutMenu (
-
LayoutMenu::~LayoutMenu (void)
{
// Tell the shell factory that this object is no longer available.
@@ -256,10 +255,9 @@ LayoutMenu::~LayoutMenu (void)
::std::auto_ptr<ControlFactory> LayoutMenu::CreateControlFactory (
- ViewShellBase& rBase,
- DrawDocShell& rDocShell)
+ ToolPanelViewShell& i_rPanelViewShell )
{
- return ::std::auto_ptr<ControlFactory>(new LayoutMenuFactory(rBase, rDocShell));
+ return ::std::auto_ptr<ControlFactory>(new LayoutMenuRootFactory(i_rPanelViewShell));
}
@@ -591,6 +589,13 @@ void LayoutMenu::InsertPageWithLayout (AutoLayout aLayout)
+TaskPaneShellManager* LayoutMenu::GetShellManager()
+{
+ if ( mpShellManager )
+ return mpShellManager;
+ return TreeNode::GetShellManager();
+}
+
void LayoutMenu::InvalidateContent (void)
{
// The number of items may have changed. Request a resize so that the
diff --git a/sd/source/ui/toolpanel/LayoutMenu.hxx b/sd/source/ui/toolpanel/LayoutMenu.hxx
index bd121403c2d3..86e01e9f803b 100755
--- a/sd/source/ui/toolpanel/LayoutMenu.hxx
+++ b/sd/source/ui/toolpanel/LayoutMenu.hxx
@@ -60,6 +60,7 @@ class EventMultiplexerEvent;
namespace sd { namespace toolpanel {
class ControlFactory;
+class ToolPanelViewShell;
class LayoutMenu
@@ -76,28 +77,18 @@ public:
/** Create a new layout menu. Depending on the given flag it
displays its own scroll bar or lets a surrounding window
handle that.
- @param rDocumentShell
- Used to determine writing direction.
- @param rViewShellBase
- Gives access to the view shell at whose active page the
- layout will be set.
- @param bUseOwnScrollBar
- When <TRUE/> then we will show our own scroll bar when not
- all icons can be displayed in the visible window area.
- When <FALSE/> then rely on an outer scroll bar. In this
- case we will set the height of the window so that all
- icons are visible.
+ @param i_pParent
+ the parent node in the control tree
+ @param i_rPanelViewShell
+ the view shell of the task pane.
*/
LayoutMenu (
- TreeNode* pParent,
- DrawDocShell& rDocumentShell,
- ViewShellBase& rViewShellBase,
- bool bUseOwnScrollBar);
+ TreeNode* i_pParent,
+ ToolPanelViewShell& i_rPanelViewShell);
virtual ~LayoutMenu (void);
static std::auto_ptr<ControlFactory> CreateControlFactory (
- ViewShellBase& rBase,
- DrawDocShell& rDocShell);
+ ToolPanelViewShell& i_rPanelViewShell );
/** Return the name of the currently selected layout.
*/
@@ -140,6 +131,9 @@ public:
enum MasterMode { MM_NORMAL, MM_MASTER, MM_UNKNOWN };
void UpdateEnabledState (const MasterMode eMode);
+ // TreeNode overridables
+ virtual TaskPaneShellManager* GetShellManager (void);
+
/** Call this method when the set of displayed layouts is not up-to-date
anymore. It will re-assemple this set according to the current
settings.
@@ -168,6 +162,8 @@ public:
private:
ViewShellBase& mrBase;
+ TaskPaneShellManager* mpShellManager;
+
/** Do we use our own scroll bar or is viewport handling done by
our parent?
*/
@@ -231,6 +227,9 @@ private:
*/
void UpdateSelection (void);
+ // internal ctor
+ void implConstruct( DrawDocShell& rDocumentShell );
+
/** When clicked then set the current page of the view in the center pane.
*/
DECL_LINK(ClickHandler, ValueSet*);
diff --git a/sd/source/ui/toolpanel/LayoutableWindow.hxx b/sd/source/ui/toolpanel/LayoutableWindow.hxx
deleted file mode 100755
index ed4e1ec77959..000000000000
--- a/sd/source/ui/toolpanel/LayoutableWindow.hxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SD_TOOLPANEL_I_LAYOUTABLE_WINDOW_HXX
-#define SD_TOOLPANEL_I_LAYOUTABLE_WINDOW_HXX
-
-#include <vcl/gen.hxx>
-
-class Window;
-
-namespace sd { namespace toolpanel {
-
-
-/** This interface has to be implemented by windows that want to be
- layouted by a ToolPanel, SubToolPanel, or ScrollablePanel object.
-*/
-class LayoutableWindow
-{
-public:
- /** Return the preferred size without constraints on either the
- height or the width.
- The size the window will later be set to may but does not have
- to be equal to this size.
- */
- virtual Size GetPreferredSize (void) = 0;
-
- /** Return the preferred width with the constraint, that the
- window will be set to the given height.
- The width the window will later be set to may but does not have
- to be equal to this width.
- */
- virtual int GetPreferredWidth (int nHeight) = 0;
-
- /** Return the preferred height with the constraint, that the
- window will be set to the given width.
- The height the window will later be set to may but does not have
- to be equal to this height.
- */
- virtual int GetPreferredHeight (int nWidth) = 0;
-
- /** Return wether the window is generally resizable. When used by
- a VerticalLayouter then the width will always be resized and
- the return value of this method determines whether the height
- may be modified as well.
- */
- virtual bool IsResizable (void) = 0;
-
- /** Return the window so that its size and position can be set.
- */
- virtual ::Window& GetWindow (void) = 0;
-};
-
-} } // end of namespace ::sd::toolpanel
-
-#endif
diff --git a/sd/source/ui/toolpanel/MethodGuard.hxx b/sd/source/ui/toolpanel/MethodGuard.hxx
new file mode 100644
index 000000000000..45b81367c8de
--- /dev/null
+++ b/sd/source/ui/toolpanel/MethodGuard.hxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SD_METHODGUARD_HXX
+#define SD_METHODGUARD_HXX
+
+#include <osl/mutex.hxx>
+
+//......................................................................................................................
+namespace sd { namespace toolpanel
+{
+//......................................................................................................................
+
+ //==================================================================================================================
+ //= MethodGuard
+ //==================================================================================================================
+ template < class COMPONENT >
+ class MethodGuard
+ {
+ public:
+ MethodGuard( COMPONENT& i_rComponent )
+ :m_aGuard( i_rComponent.getMutex() )
+ {
+ i_rComponent.checkDisposed();
+ }
+
+ ~MethodGuard()
+ {
+ }
+
+ inline void clear()
+ {
+ m_aGuard.clear();
+ }
+
+ private:
+ ::osl::ClearableMutexGuard m_aGuard;
+ };
+
+//......................................................................................................................
+} } // namespace sd::toolpanel
+//......................................................................................................................
+
+#endif // SD_METHODGUARD_HXX
diff --git a/sd/source/ui/toolpanel/ScrollPanel.cxx b/sd/source/ui/toolpanel/ScrollPanel.cxx
index cff065777235..cae08c76ca39 100755
--- a/sd/source/ui/toolpanel/ScrollPanel.cxx
+++ b/sd/source/ui/toolpanel/ScrollPanel.cxx
@@ -56,6 +56,30 @@ ScrollPanel::ScrollPanel (
mnVerticalGap(3),
mnHorizontalBorder(2)
{
+ Construct();
+}
+
+ScrollPanel::ScrollPanel (
+ ::Window& i_rParentWindow)
+ : Control (&i_rParentWindow, WB_DIALOGCONTROL),
+ TreeNode(NULL),
+ maScrollWindow(this, WB_DIALOGCONTROL),
+ maVerticalScrollBar(this, WB_VERT),
+ maHorizontalScrollBar(this, WB_HORZ),
+ maScrollBarFiller(this),
+ maScrollWindowFiller(&maScrollWindow),
+ mbIsRearrangePending(true),
+ mbIsLayoutPending(true),
+ mnChildrenWidth(0),
+ mnVerticalBorder(2),
+ mnVerticalGap(3),
+ mnHorizontalBorder(2)
+{
+ Construct();
+}
+
+void ScrollPanel::Construct()
+{
SetAccessibleName (
::rtl::OUString::createFromAscii("Sub Task Panel"));
mpControlContainer->SetMultiSelection (true);
@@ -95,7 +119,7 @@ ScrollPanel::~ScrollPanel (void)
// control instead of pNode directly.
TitledControl* pTitledControl = static_cast<TitledControl*>(pNode);
if (pTitledControl != NULL)
- pControl = pTitledControl->GetControl(false);
+ pControl = pTitledControl->GetControl();
// Remove this object as listener from the control.
if (pControl != NULL && pControl->GetWindow()!=NULL)
diff --git a/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx b/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx
index 3cef1ca6ee88..a032b6ef02f0 100755
--- a/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx
+++ b/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx
@@ -71,38 +71,6 @@ namespace sd { namespace toolpanel {
::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*> SlideSorterCacheDisplay::maDisplays;
-/** This factory class is used to create instances of TestPanel. It can be
- extended so that its constructor stores arguments that later are passed
- to new TestPanel objects.
-*/
-class SlideSorterCacheDisplayFactory
- : public ControlFactory
-{
-public:
- SlideSorterCacheDisplayFactory (const SdDrawDocument* pDocument)
- : mpDocument(pDocument)
- {
- }
-
-protected:
- virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode)
- {
- SlideSorterCacheDisplay* pDisplay = SlideSorterCacheDisplay::Instance(mpDocument);
- pDisplay->SetParentWindow(pTreeNode->GetWindow());
- pDisplay->SetParentNode(pTreeNode);
- return pDisplay;
- }
-
-private:
- const SdDrawDocument* mpDocument;
-};
-
-
-
-
-
-
-
SlideSorterCacheDisplay::SlideSorterCacheDisplay (const SdDrawDocument* pDocument)
: TreeNode(NULL),
mpWindow(NULL),
@@ -137,15 +105,6 @@ void SlideSorterCacheDisplay::SetParentWindow (::Window* pParentWindow)
-std::auto_ptr<ControlFactory> SlideSorterCacheDisplay::CreateControlFactory (
- const SdDrawDocument* pDocument)
-{
- return std::auto_ptr<ControlFactory>(new SlideSorterCacheDisplayFactory(pDocument));
-}
-
-
-
-
void SlideSorterCacheDisplay::Paint (const Rectangle& rBoundingBox)
{
if (maCellSize.Width()>0 && maCellSize.Height()>0 && mpWindow!=NULL)
diff --git a/sd/source/ui/toolpanel/SubToolPanel.cxx b/sd/source/ui/toolpanel/SubToolPanel.cxx
index 31c29f4f1c08..f554d44e8f18 100755
--- a/sd/source/ui/toolpanel/SubToolPanel.cxx
+++ b/sd/source/ui/toolpanel/SubToolPanel.cxx
@@ -70,6 +70,35 @@ SubToolPanel::SubToolPanel (
+SubToolPanel::SubToolPanel (
+ Window& i_rParentWindow)
+ : Control (&i_rParentWindow, WB_DIALOGCONTROL),
+ TreeNode(NULL),
+ maWindowFiller(this),
+ mbIsRearrangePending(true),
+ mbIsLayoutPending(true),
+ mnChildrenWidth(0),
+ mnVerticalBorder(0),
+ mnVerticalGap(3),
+ mnHorizontalBorder(2)
+{
+ SetAccessibleName (
+ ::rtl::OUString::createFromAscii("Sub Task Panel"));
+ mpControlContainer->SetMultiSelection (true);
+
+ SetBorderStyle (WINDOW_BORDER_NORMAL);
+ SetMapMode (MapMode(MAP_PIXEL));
+
+ // To reduce flickering during repaints make the container windows
+ // transparent and rely on their children to paint the whole area.
+ SetBackground(Wallpaper());
+ maWindowFiller.SetBackground(
+ Application::GetSettings().GetStyleSettings().GetWindowColor());
+}
+
+
+
+
SubToolPanel::~SubToolPanel (void)
{
sal_uInt32 nCount = mpControlContainer->GetControlCount();
diff --git a/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx b/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx
index c1651d62010b..4ad610df7f7f 100755
--- a/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx
+++ b/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx
@@ -48,13 +48,10 @@ ControlFactory::~ControlFactory (void)
-::std::auto_ptr<TreeNode> ControlFactory::CreateControl (TreeNode* pTreeNode)
+::std::auto_ptr<TreeNode> ControlFactory::CreateControl( ::Window& i_rParent )
{
- // Create a new control by using the protected virtual hook.
- TreeNode* pNewNode = InternalCreateControl(pTreeNode);
-
- return ::std::auto_ptr<TreeNode>(pNewNode);
+ TreeNode* pNewNode = InternalCreateControl( i_rParent );
+ return ::std::auto_ptr<TreeNode>( pNewNode );
}
-
} } // end of namespace ::sd::toolpanel
diff --git a/sd/source/ui/toolpanel/TaskPaneShellManager.cxx b/sd/source/ui/toolpanel/TaskPaneShellManager.cxx
index 5a4875340840..52054c43fe8b 100755
--- a/sd/source/ui/toolpanel/TaskPaneShellManager.cxx
+++ b/sd/source/ui/toolpanel/TaskPaneShellManager.cxx
@@ -31,7 +31,7 @@
#include "TaskPaneShellManager.hxx"
#include "ViewShellManager.hxx"
-#include <osl/diagnose.h>
+#include <tools/diagnose_ex.h>
#include <vcl/window.hxx>
#include <algorithm>
@@ -111,6 +111,21 @@ void TaskPaneShellManager::AddSubShell (
+void TaskPaneShellManager::RemoveSubShell (const ShellId i_nShellId)
+{
+ SubShells::iterator pos = maSubShells.find( i_nShellId );
+ ENSURE_OR_RETURN_VOID( pos != maSubShells.end(), "no shell for this ID" );
+ if ( pos->second.mpWindow != NULL )
+ {
+ pos->second.mpWindow->RemoveEventListener( LINK( this, TaskPaneShellManager, WindowCallback ) );
+ }
+ mpViewShellManager->DeactivateSubShell( mrViewShell, pos->first );
+ maSubShells.erase( pos );
+}
+
+
+
+
void TaskPaneShellManager::RemoveSubShell (const SfxShell* pShell)
{
if (pShell != NULL)
diff --git a/sd/source/ui/toolpanel/TaskPaneShellManager.hxx b/sd/source/ui/toolpanel/TaskPaneShellManager.hxx
index 2c2e49b98c48..92e7b6b83b8d 100755
--- a/sd/source/ui/toolpanel/TaskPaneShellManager.hxx
+++ b/sd/source/ui/toolpanel/TaskPaneShellManager.hxx
@@ -46,7 +46,7 @@ namespace sd { namespace toolpanel {
/** The TaskPaneShellManager implements the ViewShellManager::ShellFactory
interface. However, it does not create or delete shells. It only
gives the ViewShellManager access to the sub shells of the
- TaskPaneViewShell. Life time control of the sub shells is managed by
+ ToolPanelViewShell. Life time control of the sub shells is managed by
the sub shells themselves.
*/
class TaskPaneShellManager
@@ -86,6 +86,11 @@ public:
NULL when this shell is requested.
*/
void RemoveSubShell (const SfxShell* pShell);
+ /** removes the shell given by its ID from the set of sub shells managed by the
+ TaskPaneShellManager. Subsequent calls to CreateShell() will return
+ NULL when this shell is requested.
+ */
+ void RemoveSubShell (const ShellId i_nShellId);
/** Move the given sub-shell to the top of the local shell stack.
Furthermore move the view shell whose sub-shells this class manages
diff --git a/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx b/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx
index 152f576bd5bc..f70e643636d5 100755
--- a/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx
+++ b/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx
@@ -122,17 +122,6 @@ sal_Int32 TreeNode::GetMinimumWidth (void)
-ObjectBarManager* TreeNode::GetObjectBarManager (void)
-{
- if (mpParent != NULL)
- return mpParent->GetObjectBarManager();
- else
- return NULL;
-}
-
-
-
-
bool TreeNode::IsResizable (void)
{
return false;
diff --git a/sd/source/ui/toolpanel/TaskPaneViewShell.cxx b/sd/source/ui/toolpanel/TaskPaneViewShell.cxx
deleted file mode 100755
index d80beba7cd10..000000000000
--- a/sd/source/ui/toolpanel/TaskPaneViewShell.cxx
+++ /dev/null
@@ -1,889 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "TaskPaneViewShell.hxx"
-
-#include "TaskPaneShellManager.hxx"
-#include "ToolPanelChildWindow.hrc"
-#include "ToolPanelChildWindow.hxx"
-#include "taskpane/SlideSorterCacheDisplay.hxx"
-#include "taskpane/ToolPanel.hxx"
-#include "taskpane/TitledControl.hxx"
-#include "LayoutMenu.hxx"
-#include "TaskPaneFocusManager.hxx"
-#include "taskpane/SubToolPanel.hxx"
-#include "taskpane/ScrollPanel.hxx"
-#include "taskpane/TaskPaneControlFactory.hxx"
-#include "controls/MasterPagesPanel.hxx"
-#include "controls/MasterPagesSelector.hxx"
-#include "controls/TableDesignPanel.hxx"
-#include "controls/CustomAnimationPanel.hxx"
-#include "controls/SlideTransitionPanel.hxx"
-#include "controls/AnimationSchemesPanel.hxx"
-#include "TitleToolBox.hxx"
-#include "taskpane/ControlContainer.hxx"
-#include "FrameView.hxx"
-#include "Window.hxx"
-#include "PaneDockingWindow.hxx"
-#include "AccessibleTaskPane.hxx"
-#include "DrawSubController.hxx"
-#include "sdmod.hxx"
-#include "app.hrc"
-#include "glob.hrc"
-#include "res_bmp.hrc"
-#include "helpids.h"
-#include "strings.hrc"
-#include "sdresid.hxx"
-#include "framework/FrameworkHelper.hxx"
-#include <com/sun/star/drawing/framework/XResourceId.hpp>
-#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp>
-#include <com/sun/star/drawing/XDrawSubController.hpp>
-
-#include <svx/dlgctrl.hxx>
-#include <sfx2/bindings.hxx>
-#include <sfx2/dispatch.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <sfx2/msg.hxx>
-#include <sfx2/objface.hxx>
-#include <svx/colrctrl.hxx>
-#include <svx/xtable.hxx>
-#include <vcl/dockwin.hxx>
-#include "sdtreelb.hxx"
-#include "DrawViewShell.hxx"
-#include "drawdoc.hxx"
-#include "ViewShellBase.hxx"
-#include <svx/ruler.hxx>
-#include <vcl/svapp.hxx>
-
-//#define SHOW_TEST_PANEL
-#ifdef SHOW_TEST_PANEL
-#include "TestPanel.hxx"
-#endif
-//#define SHOW_COLOR_MENU
-#ifdef SHOW_COLOR_MENU
-#include "TestMenu.hxx"
-#endif
-
-#include <vector>
-#include <boost/shared_ptr.hpp>
-
-using namespace ::sd::toolpanel;
-
-#define TaskPaneViewShell
-#include "sdslots.hxx"
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using ::sd::framework::FrameworkHelper;
-
-namespace sd { namespace toolpanel {
-
-SFX_IMPL_INTERFACE(TaskPaneViewShell, SfxShell, SdResId(STR_TASKPANEVIEWSHELL))
-{
-}
-
-
-TYPEINIT1(TaskPaneViewShell, ViewShell);
-
-
-/** Inner implementation class of TaskPaneViewShell.
-*/
-class TaskPaneViewShell::Implementation
-{
-public:
- static const sal_uInt32 mnInvalidId = 0xffffffff;
-
- Implementation (void);
- ~Implementation (void);
-
- /** Here the panels are created that are shown in the task pane.
- */
- void Setup (ToolPanel* pToolPanel, ViewShellBase& rBase);
-
- /** Make a new panel known to the translation table that translates
- between internal indices as returned by
- ControlContainer::AddControl() and public indices defined by
- TaskPaneViewShell::PanelId.
- */
- void AddPanel (sal_uInt32 nInternalId, PanelId nPublicId);
-
- /** Return the public id for the given internal one.
- @return
- When the given public id is not known then PID_UNKNOWN is
- returned.
- */
- PanelId GetPublicId (sal_uInt32 nInternalId) const;
-
- /** Return the internal id for the given public one.
- @return
- When the given public id is not known then mnInvalidId is
- returned.
- */
- sal_uInt32 GetInternalId (PanelId nPublicId) const;
-
-private:
- /** This map translates between internal indices returned by
- ControlContainer::AddControl() and public indices defined by
- TaskPaneViewShell::PanelId.
- */
- typedef ::std::vector<PanelId> InternalIdToPanelIdMap;
- InternalIdToPanelIdMap maIndexMap;
-};
-
-
-
-
-namespace {
-
-enum MenuId {
- MID_UNLOCK_TASK_PANEL = 1,
- MID_LOCK_TASK_PANEL = 2,
- MID_CUSTOMIZE = 3,
- MID_FIRST_CONTROL = 4
-};
-
-/** This control is used for extracting the title string from the resource
- of some dialogs that are displayed in the task pane. With this the
- actual controls can be created on demand. This class only loads (a part
- of) their resource.
-*/
-class DummyControl : public Control
-{
-public:
- DummyControl (::Window* pParent, const ResId& rResId)
- : Control(pParent,rResId)
- {
- FreeResource();
- }
-};
-
-class ResourceActivationClickHandler
-{
-public:
- ResourceActivationClickHandler (
- const ::boost::shared_ptr<FrameworkHelper>& rpFrameworkHelper,
- const Reference<drawing::framework::XResourceId>& rxResourceId,
- ControlContainer& rControlContainer);
- void operator () (TitledControl& rTitledControl);
-
-private:
- ::boost::shared_ptr<FrameworkHelper> mpFrameworkHelper;
- Reference<drawing::framework::XResourceId> mxResourceId;
- ControlContainer& mrControlContainer;
-};
-
-} // end of anonymouse namespace
-
-
-
-
-
-void TaskPaneViewShell::Implementation::Setup (
- ToolPanel* pToolPanel,
- ViewShellBase& rBase)
-{
- SdDrawDocument* pDocument = rBase.GetDocument();
- sal_uInt32 nId;
- sal_uInt32 nIdOfControlToExpand;
-
- ::boost::shared_ptr<FrameworkHelper> pFrameworkHelper (FrameworkHelper::Instance(rBase));
- Reference<drawing::framework::XResourceId> xTaskPaneId (pFrameworkHelper->CreateResourceId(
- FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL));
-
- // The master page controls.
- nId = pToolPanel->AddControl (
- controls::MasterPagesPanel::CreateControlFactory(rBase),
- SdResId(STR_TASKPANEL_MASTER_PAGE_TITLE),
- HID_SD_SLIDE_DESIGNS,
- ResourceActivationClickHandler(
- pFrameworkHelper,
- pFrameworkHelper->CreateResourceId(
- FrameworkHelper::msMasterPagesTaskPanelURL, xTaskPaneId),
- pToolPanel->GetControlContainer()));
- AddPanel (nId, PID_MASTER_PAGES);
-
- // Layout Menu.
- nId = pToolPanel->AddControl (
- LayoutMenu::CreateControlFactory(rBase, *pDocument->GetDocSh()),
- SdResId(STR_TASKPANEL_LAYOUT_MENU_TITLE),
- HID_SD_SLIDE_LAYOUTS,
- ResourceActivationClickHandler(
- pFrameworkHelper,
- pFrameworkHelper->CreateResourceId(
- FrameworkHelper::msLayoutTaskPanelURL, xTaskPaneId),
- pToolPanel->GetControlContainer()));
- AddPanel (nId, PID_LAYOUT);
- nIdOfControlToExpand = nId;
-
- {
- DummyControl aControl (pToolPanel, SdResId(DLG_TABLEDESIGNPANE));
-
- // TableDesignPanel
- nId = pToolPanel->AddControl (
- controls::TableDesignPanel::CreateControlFactory(rBase),
- aControl.GetText(),
- HID_SD_TABLE_DESIGN,
- ResourceActivationClickHandler(
- pFrameworkHelper,
- pFrameworkHelper->CreateResourceId(
- FrameworkHelper::msTableDesignPanelURL, xTaskPaneId),
- pToolPanel->GetControlContainer()));
- AddPanel (nId, PID_TABLE_DESIGN);
- }
-
- {
- DummyControl aControl (pToolPanel, SdResId(RID_CUSTOMANIMATION_START+0));
-
- // CustomAnimationPanel
- nId = pToolPanel->AddControl (
- controls::CustomAnimationPanel::CreateControlFactory(rBase),
- aControl.GetText(),
- HID_SD_CUSTOM_ANIMATIONS,
- ResourceActivationClickHandler(
- pFrameworkHelper,
- pFrameworkHelper->CreateResourceId(
- FrameworkHelper::msCustomAnimationTaskPanelURL, xTaskPaneId),
- pToolPanel->GetControlContainer()));
- AddPanel (nId, PID_CUSTOM_ANIMATION);
- }
-
- // SlideTransitionPanel
- {
- DummyControl aControl (pToolPanel, SdResId(RID_CUSTOMANIMATION_START+3));
-
- nId = pToolPanel->AddControl (
- controls::SlideTransitionPanel::CreateControlFactory(rBase),
- aControl.GetText(),
- HID_SD_SLIDE_TRANSITIONS,
- ResourceActivationClickHandler(
- pFrameworkHelper,
- pFrameworkHelper->CreateResourceId(
- FrameworkHelper::msSlideTransitionTaskPanelURL, xTaskPaneId),
- pToolPanel->GetControlContainer()));
- AddPanel (nId, PID_SLIDE_TRANSITION);
- }
-
-#ifdef SHOW_COLOR_MENU
- // Test Menu.
- pToolPanel->AddControl (
- ColorMenu::CreateControlFactory(),
- String::CreateFromAscii ("Color Test Menu"),
- 0);
-#endif
-
-#ifdef SHOW_TEST_PANEL
- // Test Panel.
- pToolPanel->AddControl (
- TestPanel::CreateControlFactory(),
- String::CreateFromAscii ("Test Panel"),
- 0);
-#endif
-
-#ifdef USE_SLIDE_SORTER_CACHE_DISPLAY
- pToolPanel->AddControl (
- SlideSorterCacheDisplay::CreateControlFactory(pDocument),
- String::CreateFromAscii("Slide Sorter Cache Status"),
- 0);
-#endif
-
- // Expand the layout menu.
- pToolPanel->GetControlContainer().SetExpansionState (
- nIdOfControlToExpand,
- ControlContainer::ES_EXPAND);
-
- pToolPanel->GetWindow()->Show();
-}
-
-
-
-
-void TaskPaneViewShell::Initialize (void)
-{
- if ( ! mbIsInitialized)
- {
- mbIsInitialized = true;
- mpImpl->Setup (mpTaskPane.get(), GetViewShellBase());
- }
-}
-
-
-
-
-TaskPaneViewShell::TaskPaneViewShell (
- SfxViewFrame* pFrame,
- ViewShellBase& rViewShellBase,
- ::Window* pParentWindow,
- FrameView* pFrameViewArgument)
- : ViewShell (pFrame, pParentWindow, rViewShellBase),
- mpImpl(NULL),
- mpTaskPane(NULL),
- mbIsInitialized(false),
- mpSubShellManager(),
- mnMenuId(0)
-{
- meShellType = ST_TASK_PANE;
-
- mpImpl.reset (new Implementation());
-
- mpContentWindow->SetCenterAllowed (false);
- pParentWindow->SetStyle(pParentWindow->GetStyle() | WB_DIALOGCONTROL);
-
- mpTaskPane = ::std::auto_ptr<ToolPanel>(new ToolPanel (
- mpContentWindow.get(), *this));
-
- GetParentWindow()->SetBackground(Wallpaper());
- mpContentWindow->SetBackground(Wallpaper());
-
- GetParentWindow()->SetHelpId(HID_SD_TASK_PANE);
-
- PaneDockingWindow* pDockingWindow = dynamic_cast<PaneDockingWindow*>(GetDockingWindow());
- if (pDockingWindow != NULL)
- {
- pDockingWindow->InitializeTitleToolBox();
- mnMenuId = pDockingWindow->AddMenu (
- String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_TITLE)),
- HID_SD_TASK_PANE_VIEW_MENU,
- LINK(this, TaskPaneViewShell, ToolboxClickHandler));
- }
-
- // Tell the focus manager that we want to pass the focus to our
- // child.
- FocusManager::Instance().RegisterDownLink(pParentWindow, mpTaskPane.get());
-
- SetPool (&GetDoc()->GetPool());
-
- if (pFrameViewArgument != NULL)
- mpFrameView = pFrameViewArgument;
- else
- mpFrameView = new FrameView(GetDoc());
- GetFrameView()->Connect();
-
- // Hide or delete unused controls that we have inherited from the
- // ViewShell base class.
- mpHorizontalScrollBar.reset();
- mpVerticalScrollBar.reset();
- mpScrollBarBox.reset();
- mpHorizontalRuler.reset();
- mpVerticalRuler.reset();
-
- SetName (String (RTL_CONSTASCII_USTRINGPARAM("TaskPaneViewShell")));
-
- // For accessibility we have to shortly hide the content window. This
- // triggers the construction of a new accessibility object for the new
- // view shell. (One is created earlier while the construtor of the base
- // class is executed. At that time the correct accessibility object can
- // not be constructed.)
- if (mpContentWindow.get() !=NULL)
- {
- mpContentWindow->Hide();
- mpContentWindow->Show();
- }
-
- // Register the shell manager as factory at the ViewShellManager.
- mpSubShellManager.reset (new TaskPaneShellManager(
- GetViewShellBase().GetViewShellManager(),
- *this));
- GetViewShellBase().GetViewShellManager()->AddSubShellFactory(this, mpSubShellManager);
-}
-
-
-
-
-TaskPaneViewShell::~TaskPaneViewShell (void)
-{
- GetViewShellBase().GetViewShellManager()->RemoveSubShellFactory(this, mpSubShellManager);
-}
-
-
-
-// static
-void TaskPaneViewShell::RegisterControls (void)
-{
- SfxModule* pModule = SD_MOD();
- controls::MasterPagesSelector::RegisterInterface (pModule);
- LayoutMenu::RegisterInterface (pModule);
-}
-
-
-
-
-void TaskPaneViewShell::ArrangeGUIElements (void)
-{
- ViewShell::ArrangeGUIElements();
-
- Point aOrigin (maViewPos);
- Size aSize (maViewSize);
-
- Initialize();
-
- // Place the task pane.
- if (mpTaskPane.get() != NULL)
- mpTaskPane->SetPosSizePixel (Point(0,0), aSize);
-}
-
-
-
-
-void TaskPaneViewShell::GetFocus (void)
-{
- Invalidate ();
-}
-
-
-
-
-void TaskPaneViewShell::LoseFocus (void)
-{
- Invalidate ();
-}
-
-
-
-
-void TaskPaneViewShell::KeyInput (const KeyEvent& rEvent)
-{
- KeyCode nCode = rEvent.GetKeyCode();
- if (nCode == KEY_RETURN)
- {
- mpTaskPane->GrabFocus();
- }
- else
- ViewShell::KeyInput (rEvent, NULL);
-}
-
-
-
-
-IMPL_LINK(TaskPaneViewShell, ToolboxClickHandler, ToolBox*, pToolBox)
-{
- if (pToolBox->GetCurItemId() == mnMenuId)
- {
- pToolBox->EndSelection();
-
- DockingWindow* pDockingWindow = GetDockingWindow();
- ::std::auto_ptr<PopupMenu> pMenu = CreatePopupMenu (
- pDockingWindow!=NULL && !pDockingWindow->IsFloatingMode());
- pMenu->SetSelectHdl (
- LINK(this, TaskPaneViewShell, MenuSelectHandler));
-
- // pass toolbox button rect so the menu can stay open on button up
- Rectangle aRect = pToolBox->GetItemRect(mnMenuId);
- aRect.SetPos(pToolBox->GetPosPixel() );
- pMenu->Execute (pDockingWindow, aRect, POPUPMENU_EXECUTE_DOWN);
- }
-
- return 0;
-}
-
-
-
-
-IMPL_LINK(TaskPaneViewShell, MenuSelectHandler, Menu*, pMenu)
-{
- if (pMenu)
- {
- pMenu->Deactivate();
- switch (pMenu->GetCurItemId())
- {
- case MID_UNLOCK_TASK_PANEL:
- {
- DockingWindow* pDockingWindow = GetDockingWindow();
- if (pDockingWindow != NULL)
- pDockingWindow->SetFloatingMode (TRUE);
- }
- break;
-
- case MID_LOCK_TASK_PANEL:
- {
- DockingWindow* pDockingWindow = GetDockingWindow();
- if (pDockingWindow != NULL)
- pDockingWindow->SetFloatingMode (FALSE);
- }
- break;
-
- case MID_CUSTOMIZE:
- DBG_ASSERT (0, "Customization not yet implemented");
- break;
-
- default:
- {
- sal_uInt32 nIndex (pMenu->GetUserValue(pMenu->GetCurItemId()));
- mpTaskPane->GetControlContainer().SetVisibilityState (
- nIndex,
- ControlContainer::VS_TOGGLE);
- // mpTaskPane->Resize();
- // mpTaskPane->Invalidate();
- }
- break;
- }
- }
-
- return 0;
-}
-
-
-
-
-::std::auto_ptr<PopupMenu> TaskPaneViewShell::CreatePopupMenu (
- bool bIsDocking)
-{
- ::std::auto_ptr<PopupMenu> pMenu (new PopupMenu ());
- FloatingWindow* pFloat = static_cast<FloatingWindow*>(pMenu->GetWindow());
- if (pFloat != NULL)
- {
- pFloat->SetPopupModeFlags (
- pFloat->GetPopupModeFlags()
- | FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE);
- }
-
- // warning free code changes:
- // FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE is 0x10000, so cast to USHORT is 0
- // so why was this used anyway?
- pMenu->SetMenuFlags (
- pMenu->GetMenuFlags() /* | (USHORT)FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE */ );
-
- // Add one entry for every tool panel element to individually make
- // them visible or hide them.
- USHORT nIndex = MID_FIRST_CONTROL;
- sal_uInt32 nControlIndex;
- ControlContainer& rContainer (mpTaskPane->GetControlContainer());
- for (nControlIndex=0;
- nControlIndex<rContainer.GetControlCount();
- nControlIndex=rContainer.GetNextIndex(nControlIndex,true,false))
- {
- TreeNode* pChild = rContainer.GetControl(nControlIndex);
- TitledControl* pControl
- = static_cast<TitledControl*>(pChild->GetWindow());
- pMenu->InsertItem (nIndex,
- pControl->GetTitle(),
- MIB_CHECKABLE);
- pMenu->SetUserValue (nIndex, nControlIndex);
- if (pControl->IsVisible())
- pMenu->CheckItem (nIndex, TRUE);
- nIndex++;
- }
-
- pMenu->InsertSeparator ();
-
- // Add entry for docking or un-docking the tool panel.
- if (bIsDocking)
- pMenu->InsertItem (
- MID_UNLOCK_TASK_PANEL,
- String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_UNLOCK)));
- else
- pMenu->InsertItem (
- MID_LOCK_TASK_PANEL,
- String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_LOCK)));
- pMenu->RemoveDisabledEntries (FALSE, FALSE);
-
- return pMenu;
-}
-
-
-
-
-SdPage* TaskPaneViewShell::GetActualPage (void)
-{
- return NULL;
-}
-
-SdPage* TaskPaneViewShell::getCurrentPage(void) const
-{
- return NULL;
-}
-
-
-
-void TaskPaneViewShell::Execute (SfxRequest& )
-{
-}
-
-
-
-
-void TaskPaneViewShell::GetState (SfxItemSet& rItemSet)
-{
- (void)rItemSet;
-}
-
-
-
-
-TaskPaneShellManager& TaskPaneViewShell::GetSubShellManager (void) const
-{
- return *mpSubShellManager.get();
-}
-
-
-
-
-DockingWindow* TaskPaneViewShell::GetDockingWindow (void)
-{
- ::Window* pParentWindow = GetParentWindow();
- DockingWindow* pDockingWindow = NULL;
- while (pParentWindow!=NULL && pDockingWindow==NULL)
- {
- pDockingWindow = dynamic_cast<DockingWindow*>(pParentWindow);
- pParentWindow = pParentWindow->GetParent();
- }
- return pDockingWindow;
-}
-
-
-
-
-void TaskPaneViewShell::ShowPanel (const PanelId nPublicId)
-{
- Initialize();
- sal_uInt32 nId (mpImpl->GetInternalId(nPublicId));
- if (nId != Implementation::mnInvalidId)
- {
- mpTaskPane->GetControlContainer().SetVisibilityState (
- nId,
- ControlContainer::VS_SHOW);
- }
-}
-
-
-
-
-void TaskPaneViewShell::HidePanel (const PanelId nPublicId)
-{
- Initialize();
- sal_uInt32 nId (mpImpl->GetInternalId(nPublicId));
- if (nId != Implementation::mnInvalidId)
- {
- mpTaskPane->GetControlContainer().SetVisibilityState (
- nId,
- ControlContainer::VS_HIDE);
- }
-}
-
-
-
-
-void TaskPaneViewShell::ExpandPanel (const PanelId nPublicId)
-{
- Initialize();
- sal_uInt32 nId (mpImpl->GetInternalId(nPublicId));
- if (nId != Implementation::mnInvalidId)
- {
- mpTaskPane->GetControlContainer().SetExpansionState (
- nId,
- ControlContainer::ES_EXPAND);
- }
-}
-
-
-
-
-void TaskPaneViewShell::CollapsePanel (const PanelId nPublicId)
-{
- Initialize();
- sal_uInt32 nId (mpImpl->GetInternalId(nPublicId));
- if (nId != Implementation::mnInvalidId)
- {
- mpTaskPane->GetControlContainer().SetExpansionState (
- nId,
- ControlContainer::ES_COLLAPSE);
- }
-}
-
-
-
-
-::com::sun::star::uno::Reference<
- ::com::sun::star::accessibility::XAccessible>
- TaskPaneViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow)
-{
- ::com::sun::star::uno::Reference<
- ::com::sun::star::accessibility::XAccessible> xAccessible;
-
- if (mpTaskPane.get()!=NULL && pWindow!=NULL)
- {
- // We have to call CreateAccessible directly so that we can specify
- // the correct accessible parent.
- ::Window* pParentWindow = pWindow->GetAccessibleParentWindow();
- if (pParentWindow != NULL)
- xAccessible = mpTaskPane->CreateAccessibleObject(
- pParentWindow->GetAccessible());
- }
-
- return xAccessible;
-}
-
-
-
-
-Reference<drawing::XDrawSubController> TaskPaneViewShell::CreateSubController (void)
-{
- // This view shell is not designed to be the main view shell and thus
- // does not support a UNO sub controller.
- return Reference<drawing::XDrawSubController>();
-}
-
-
-
-
-bool TaskPaneViewShell::RelocateToParentWindow (::Window* pParentWindow)
-{
- ::Window* pOldParentWindow = GetParentWindow();
- FocusManager::Instance().RemoveLinks(pOldParentWindow, mpTaskPane.get());
- FocusManager::Instance().RemoveLinks(mpTaskPane.get(), pOldParentWindow);
-
- ViewShell::RelocateToParentWindow(pParentWindow);
-
- PaneDockingWindow* pDockingWindow = dynamic_cast<PaneDockingWindow*>(GetDockingWindow());
- if (pDockingWindow != NULL)
- {
- pDockingWindow->InitializeTitleToolBox();
- mnMenuId = pDockingWindow->AddMenu (
- String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_TITLE)),
- HID_SD_TASK_PANE_VIEW_MENU,
- LINK(this, TaskPaneViewShell, ToolboxClickHandler));
- }
- FocusManager::Instance().RegisterDownLink(pParentWindow, mpTaskPane.get());
-
- Resize();
-
- return true;
-}
-
-
-
-
-//===== TaskPaneViewShell::Implementation =====================================
-
-TaskPaneViewShell::Implementation::Implementation (void)
- : maIndexMap(
- (InternalIdToPanelIdMap::size_type)PID__END,
- PID_UNKNOWN)
-{
-}
-
-
-
-
-TaskPaneViewShell::Implementation::~Implementation (void)
-{
-}
-
-
-
-
-void TaskPaneViewShell::Implementation::AddPanel (
- sal_uInt32 nInternalId,
- PanelId nPublicId)
-{
- maIndexMap[nInternalId] = nPublicId;
-}
-
-
-
-
-TaskPaneViewShell::PanelId
- TaskPaneViewShell::Implementation::GetPublicId (
- sal_uInt32 nInternalId) const
-{
- if (nInternalId < maIndexMap.size())
- return maIndexMap[nInternalId];
- else
- return PID_UNKNOWN;
-}
-
-
-
-
-sal_uInt32
- TaskPaneViewShell::Implementation::GetInternalId (
- TaskPaneViewShell::PanelId nPublicId) const
-{
- sal_uInt32 nId = mnInvalidId;
- for (sal_uInt32 nI=0; nI<maIndexMap.size(); nI++)
- if (maIndexMap[nI] == nPublicId)
- {
- nId = nI;
- break;
- }
-
- return nId;
-}
-
-
-
-
-//===== PanelActivation =======================================================
-
-PanelActivation::PanelActivation (ViewShellBase& rBase, TaskPaneViewShell::PanelId nPanelId)
- : mrBase(rBase),
- mnPanelId(nPanelId)
-{
-}
-
-void PanelActivation::operator() (bool)
-{
- toolpanel::TaskPaneViewShell* pTaskPane
- = dynamic_cast<toolpanel::TaskPaneViewShell*>(
- framework::FrameworkHelper::Instance(mrBase)
- ->GetViewShell(framework::FrameworkHelper::msRightPaneURL).get());
- if (pTaskPane != NULL)
- pTaskPane->ShowPanel(mnPanelId);
-}
-
-
-
-
-//===== ResourceActivationClickHandler ========================================
-
-ResourceActivationClickHandler::ResourceActivationClickHandler (
- const ::boost::shared_ptr<FrameworkHelper>& rpFrameworkHelper,
- const Reference<drawing::framework::XResourceId>& rxResourceId,
- ControlContainer& rControlContainer)
- : mpFrameworkHelper(rpFrameworkHelper),
- mxResourceId(rxResourceId),
- mrControlContainer(rControlContainer)
-{
-}
-
-
-
-
-void ResourceActivationClickHandler::operator () (TitledControl& rTitledControl)
-{
- mrControlContainer.SetExpansionState (
- &rTitledControl,
- ControlContainer::ES_EXPAND);
- mpFrameworkHelper->GetConfigurationController()->requestResourceActivation(
- mxResourceId, drawing::framework::ResourceActivationMode_REPLACE);
-}
-
-
-} } // end of namespace ::sd::toolpanel
diff --git a/sd/source/ui/toolpanel/TestMenu.cxx b/sd/source/ui/toolpanel/TestMenu.cxx
index 7bfb6adebe8d..54c865f12728 100755
--- a/sd/source/ui/toolpanel/TestMenu.cxx
+++ b/sd/source/ui/toolpanel/TestMenu.cxx
@@ -45,16 +45,16 @@ class ColorMenuFactory
: public ControlFactory
{
protected:
- virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode)
+ virtual TreeNode* InternalCreateControl( ::Window& i_rParent )
{
- return new ColorMenu (pTreeNode);
+ return new ColorMenu (&i_rParent);
}
};
-ColorMenu::ColorMenu (TreeNode* pParent)
- : Window (pParent->GetWindow()),
- TreeNode(pParent),
+ColorMenu::ColorMenu (::Window* i_pParent)
+ : Window (i_pParent),
+ TreeNode(NULL),
maSet (this),
mnPreferredColumnCount(2)
{
@@ -71,7 +71,7 @@ ColorMenu::ColorMenu (TreeNode* pParent)
Fill ();
maSet.Show();
- pParent->RequestResize();
+ i_pParent->Resize();
}
diff --git a/sd/source/ui/toolpanel/TestMenu.hxx b/sd/source/ui/toolpanel/TestMenu.hxx
index 37ac6542970d..2b5dfe2e2e57 100755
--- a/sd/source/ui/toolpanel/TestMenu.hxx
+++ b/sd/source/ui/toolpanel/TestMenu.hxx
@@ -47,7 +47,7 @@ class ColorMenu
public TreeNode
{
public:
- ColorMenu (TreeNode* pParent);
+ ColorMenu (::Window* i_pParent);
virtual ~ColorMenu (void);
static ::std::auto_ptr<ControlFactory> CreateControlFactory (void);
diff --git a/sd/source/ui/toolpanel/TestPanel.cxx b/sd/source/ui/toolpanel/TestPanel.cxx
index e2786e23a0c5..f0b6951cefc4 100755
--- a/sd/source/ui/toolpanel/TestPanel.cxx
+++ b/sd/source/ui/toolpanel/TestPanel.cxx
@@ -45,9 +45,9 @@ class TestPanelFactory
: public ControlFactory
{
protected:
- virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode)
+ virtual TreeNode* InternalCreateControl( ::Window& i_rParent )
{
- return new TestPanel (pTreeNode);
+ return new TestPanel (i_rParent);
}
};
@@ -109,8 +109,8 @@ private:
};
-TestPanel::TestPanel (TreeNode* pParent)
- : SubToolPanel (pParent)
+TestPanel::TestPanel (::Window& i_rParent)
+ : SubToolPanel (i_rParent)
{
// Create a scrollable panel with two list boxes.
ScrollPanel* pScrollPanel = new ScrollPanel (this);
diff --git a/sd/source/ui/toolpanel/TestPanel.hxx b/sd/source/ui/toolpanel/TestPanel.hxx
index f883cc08c1e1..af1b97d0f885 100755
--- a/sd/source/ui/toolpanel/TestPanel.hxx
+++ b/sd/source/ui/toolpanel/TestPanel.hxx
@@ -42,7 +42,7 @@ class TestPanel
: public SubToolPanel
{
public:
- TestPanel (TreeNode* pParent);
+ TestPanel (::Window& i_rParent);
virtual ~TestPanel (void);
static std::auto_ptr<ControlFactory> CreateControlFactory (void);
diff --git a/sd/source/ui/toolpanel/TitleBar.cxx b/sd/source/ui/toolpanel/TitleBar.cxx
index e0b48a6cf57b..de49b7a6abb5 100755
--- a/sd/source/ui/toolpanel/TitleBar.cxx
+++ b/sd/source/ui/toolpanel/TitleBar.cxx
@@ -60,13 +60,12 @@ namespace sd { namespace toolpanel {
const int TitleBar::snIndentationWidth = 16;
TitleBar::TitleBar ( ::Window* pParent, const String& rsTitle, TitleBarType eType, bool bIsExpandable)
-: ::Window (pParent)
+: ::Window (pParent, WB_TABSTOP)
, TreeNode(this)
, meType(eType)
, msTitle(rsTitle)
, mbExpanded(false)
, mbFocused(false)
-, mbMouseOver(false)
, mpDevice(new VirtualDevice (*this))
, mbIsExpandable (bIsExpandable)
{
@@ -77,10 +76,6 @@ TitleBar::TitleBar ( ::Window* pParent, const String& rsTitle, TitleBarType eTyp
// Change the mouse pointer shape so that it acts as a mouse over effect.
switch (meType)
{
- case TBT_WINDOW_TITLE:
- break;
-
- case TBT_CONTROL_TITLE:
case TBT_SUB_CONTROL_HEADLINE:
if (mbIsExpandable)
SetPointer (POINTER_REFHAND);
@@ -170,14 +165,6 @@ void TitleBar::Paint (const Rectangle& rBoundingBox)
switch (meType)
{
- case TBT_WINDOW_TITLE:
- PaintWindowTitleBar ();
- break;
-
- case TBT_CONTROL_TITLE:
- PaintPanelControlTitle ();
- break;
-
case TBT_SUB_CONTROL_HEADLINE:
PaintSubPanelHeadLineBar ();
break;
@@ -223,22 +210,21 @@ void TitleBar::SetEnabledState(bool bFlag)
}
-void TitleBar::SetFocus (bool bFlag)
+
+
+void TitleBar::GetFocus()
{
- mbFocused = bFlag;
- Invalidate ();
+ mbFocused = true;
+ Invalidate();
}
-void TitleBar::SetMouseOver (bool bFlag)
+void TitleBar::LoseFocus()
{
- if (bFlag != mbMouseOver)
- {
- mbMouseOver = bFlag;
- // Invalidate();
- }
+ mbFocused = false;
+ Invalidate();
}
@@ -251,15 +237,9 @@ bool TitleBar::HasExpansionIndicator (void) const
{
switch (meType)
{
- case TBT_CONTROL_TITLE:
case TBT_SUB_CONTROL_HEADLINE:
bHasExpansionIndicator = true;
break;
-
- default:
- case TBT_WINDOW_TITLE:
- // bHasExpansionIndicator remains false
- break;
}
}
return bHasExpansionIndicator;
@@ -277,21 +257,6 @@ Image TitleBar::GetExpansionIndicator (void) const
USHORT nResourceId = 0;
switch (meType)
{
- case TBT_CONTROL_TITLE:
- if (mbExpanded)
- if (bHighContrastMode)
- nResourceId = BMP_TRIANGLE_DOWN_H;
- else
- nResourceId = BMP_TRIANGLE_DOWN;
- else
- if (bHighContrastMode)
- nResourceId = BMP_TRIANGLE_RIGHT_H;
- else
- nResourceId = BMP_TRIANGLE_RIGHT;
-
- aIndicator = IconCache::Instance().GetIcon(nResourceId);
- break;
-
case TBT_SUB_CONTROL_HEADLINE:
if (mbExpanded)
if (bHighContrastMode)
@@ -306,11 +271,6 @@ Image TitleBar::GetExpansionIndicator (void) const
aIndicator = IconCache::Instance().GetIcon(nResourceId);
break;
-
- default:
- case TBT_WINDOW_TITLE:
- // aIndicator remains empty Image.
- break;
}
}
@@ -320,35 +280,6 @@ Image TitleBar::GetExpansionIndicator (void) const
-void TitleBar::PaintPanelControlTitle (void)
-{
- int nWidth (GetOutputSizePixel().Width());
- Rectangle aTextBox (CalculateTextBoundingBox (nWidth, true));
- PaintBackground(CalculateTitleBarBox(aTextBox, nWidth));
- Rectangle aFocusBox (PaintExpansionIndicator (aTextBox));
- PaintText (aTextBox);
- aFocusBox.Union (aTextBox);
- aFocusBox.Left() += 2;
- PaintFocusIndicator (aFocusBox);
- PaintMouseOverIndicator (aTextBox);
-}
-
-
-
-
-void TitleBar::PaintWindowTitleBar (void)
-{
- Rectangle aTextBox (CalculateTextBoundingBox (
- GetOutputSizePixel().Width(),
- true));
-
- PaintText (aTextBox);
- PaintFocusIndicator (aTextBox);
-}
-
-
-
-
void TitleBar::PaintSubPanelHeadLineBar (void)
{
int nWidth (GetOutputSizePixel().Width());
@@ -369,7 +300,6 @@ void TitleBar::PaintSubPanelHeadLineBar (void)
aFocusBox.Left() -= 2;
aFocusBox.Right() += 1;
PaintFocusIndicator (aFocusBox);
- PaintMouseOverIndicator (aTextBox);
}
@@ -406,21 +336,6 @@ void TitleBar::PaintFocusIndicator (const Rectangle& rTextBox)
-void TitleBar::PaintMouseOverIndicator (const Rectangle& rTextBox)
-{
- if (mbMouseOver)
- {
- Rectangle aBox (rTextBox);
- // Show the line below the focus rectangle (which is painted
- // after and over the mouse over indicator.)
- // aBox.Bottom() += 2;
- // DrawLine (aBox.BottomLeft(), aBox.BottomRight());
- }
-}
-
-
-
-
Rectangle TitleBar::PaintExpansionIndicator (const Rectangle& rTextBox)
{
Rectangle aExpansionIndicatorArea;
@@ -482,29 +397,6 @@ void TitleBar::PaintBackground (const Rectangle& rTitleBarBox)
switch (meType)
{
- case TBT_CONTROL_TITLE:
- {
- mpDevice->SetFillColor (
- GetSettings().GetStyleSettings().GetDialogColor());
- mpDevice->DrawRect(rTitleBarBox);
-
- mpDevice->SetFillColor();
- mpDevice->SetLineColor (
- GetSettings().GetStyleSettings().GetLightColor());
- mpDevice->DrawLine(
- rTitleBarBox.TopLeft(),rTitleBarBox.TopRight());
- mpDevice->DrawLine(
- rTitleBarBox.TopLeft(),rTitleBarBox.BottomLeft());
-
- mpDevice->SetLineColor (
- GetSettings().GetStyleSettings().GetShadowColor());
- mpDevice-> DrawLine(
- rTitleBarBox.BottomLeft(), rTitleBarBox.BottomRight());
- mpDevice->DrawLine(
- rTitleBarBox.TopRight(), rTitleBarBox.BottomRight());
- }
- break;
-
case TBT_SUB_CONTROL_HEADLINE:
{
Color aColor (GetSettings().GetStyleSettings().GetDialogColor());
@@ -534,10 +426,6 @@ void TitleBar::PaintBackground (const Rectangle& rTitleBarBox)
Point(rTitleBarBox.Right(), rTitleBarBox.Bottom()));
}
break;
-
- default:
- case TBT_WINDOW_TITLE:
- break;
}
}
@@ -588,16 +476,6 @@ Rectangle TitleBar::CalculateTitleBarBox (
switch (meType)
{
- case TBT_WINDOW_TITLE:
- aTitleBarBox.Bottom() += aTitleBarBox.Top();
- aTitleBarBox.Top() = 0;
- break;
-
- case TBT_CONTROL_TITLE:
- aTitleBarBox.Bottom() += aTitleBarBox.Top();
- aTitleBarBox.Top() = 0;
- break;
-
case TBT_SUB_CONTROL_HEADLINE:
aTitleBarBox.Top() -= 3;
aTitleBarBox.Bottom() += 3;
@@ -614,15 +492,8 @@ Rectangle TitleBar::CalculateTitleBarBox (
-void TitleBar::MouseMove (const MouseEvent& rEvent)
+void TitleBar::MouseMove (const MouseEvent& )
{
- Point aRelativePosition = rEvent.GetPosPixel() - GetPosPixel();
- Size aSize = GetSizePixel();
- SetMouseOver (
- aRelativePosition.X() >= 0
- && aRelativePosition.Y() >= 0
- && aRelativePosition.X() < aSize.Width()
- && aRelativePosition.Y() < aSize.Height());
}
diff --git a/sd/source/ui/toolpanel/TitleToolBox.cxx b/sd/source/ui/toolpanel/TitleToolBox.cxx
index 57cbac3fe132..403e826ee27a 100755
--- a/sd/source/ui/toolpanel/TitleToolBox.cxx
+++ b/sd/source/ui/toolpanel/TitleToolBox.cxx
@@ -42,18 +42,6 @@ namespace sd { namespace toolpanel {
TitleToolBox::TitleToolBox (::Window* pParent, WinBits nStyle )
: ToolBox( pParent, nStyle )
{
- lastSize = -1;
-
- Bitmap aBitmap (SdResId (BMP_CLOSE_DOC));
- Bitmap aBitmapHC (SdResId (BMP_CLOSE_DOC_H));
- Bitmap aTriangleRight (SdResId (BMP_TRIANGLE_RIGHT));
- Bitmap aTriangleDown (SdResId (BMP_TRIANGLE_DOWN));
-
- maImage = Image (aBitmap, Color (COL_LIGHTMAGENTA));
- maImageHC = Image (aBitmapHC, Color (BMP_COLOR_HIGHCONTRAST));
- maTriangleRight = Image (aTriangleRight, Color (COL_LIGHTMAGENTA));
- maTriangleDown = Image (aTriangleDown, Color (COL_LIGHTMAGENTA));
-
SetOutStyle (TOOLBOX_STYLE_FLAT);
SetBackground (Wallpaper (
GetSettings().GetStyleSettings().GetDialogColor()));
@@ -62,43 +50,6 @@ TitleToolBox::TitleToolBox (::Window* pParent, WinBits nStyle )
-void TitleToolBox::AddItem (ToolBoxId aId)
-{
- switch (aId)
- {
- case TBID_PANEL_MENU:
- InsertItem (TBID_PANEL_MENU,
- String::CreateFromAscii ("Panel"),
- TIB_DROPDOWN);
- break;
-
- case TBID_DOCUMENT_CLOSE:
- InsertItem (TBID_DOCUMENT_CLOSE,
- GetSettings().GetStyleSettings().GetHighContrastMode()
- ? maImageHC : maImage, 0 );
- break;
-
- case TBID_TRIANGLE_RIGHT:
- InsertItem (TBID_TRIANGLE_RIGHT,
- maTriangleRight, 0);
- break;
-
- case TBID_TRIANGLE_DOWN:
- InsertItem (TBID_TRIANGLE_DOWN,
- maTriangleDown, 0);
- break;
-
- case TBID_TEST:
- InsertItem (TBID_TEST,
- String::CreateFromAscii ("Test"),
- TIB_DROPDOWN);
- break;
- }
-}
-
-
-
-
void TitleToolBox::DataChanged (const DataChangedEvent& rDCEvt)
{
Window::DataChanged (rDCEvt);
diff --git a/sd/source/ui/toolpanel/TitleToolBox.hxx b/sd/source/ui/toolpanel/TitleToolBox.hxx
index 9433706579df..db2c971c3539 100755
--- a/sd/source/ui/toolpanel/TitleToolBox.hxx
+++ b/sd/source/ui/toolpanel/TitleToolBox.hxx
@@ -42,27 +42,9 @@ class TitleToolBox
: public ToolBox
{
public:
- enum ToolBoxId {
- TBID_DOCUMENT_CLOSE = 1,
- TBID_PANEL_MENU = 2,
- TBID_TRIANGLE_RIGHT = 3,
- TBID_TRIANGLE_DOWN = 4,
- TBID_TEST
- };
-
TitleToolBox (::Window* pParent, WinBits nStyle = 0);
- void AddItem (ToolBoxId aId);
-
void DataChanged (const DataChangedEvent& rDCEvt);
-
-private:
- Image maImage;
- Image maImageHC;
- Image maTriangleRight;
- Image maTriangleDown;
-
- long lastSize;
};
} } // end of namespace ::sd::toolbox
diff --git a/sd/source/ui/toolpanel/TitledControl.cxx b/sd/source/ui/toolpanel/TitledControl.cxx
index 7930bb4cd7f1..4843102feb48 100755
--- a/sd/source/ui/toolpanel/TitledControl.cxx
+++ b/sd/source/ui/toolpanel/TitledControl.cxx
@@ -52,53 +52,15 @@ TitledControl::TitledControl (
msTitle(rTitle),
mbVisible(true),
mpUserData(NULL),
- mpControlFactory(NULL),
- mpClickHandler(new ClickHandler(rClickHandler)),
- mbExpansionModeIsToggle(eType!=TitleBar::TBT_CONTROL_TITLE)
-{
- if (pControl.get() != NULL)
- {
- mpControlContainer->AddControl (::std::auto_ptr<TreeNode> (
- new TitleBar (this, rTitle, eType, pControl->IsExpandable())));
- pControl->SetParentNode (this);
- }
- mpControlContainer->AddControl (pControl);
-
- FocusManager::Instance().RegisterDownLink(this, GetControl()->GetWindow());
- FocusManager::Instance().RegisterUpLink(GetControl()->GetWindow(), this);
-
- SetBackground (Wallpaper());
-
- GetTitleBar()->GetWindow()->Show ();
- GetTitleBar()->GetWindow()->AddEventListener (
- LINK(this,TitledControl,WindowEventListener));
-
- UpdateStates ();
-}
-
-
-
-
-TitledControl::TitledControl (
- TreeNode* pParent,
- ::std::auto_ptr<ControlFactory> pControlFactory,
- const String& rTitle,
- const ClickHandler& rClickHandler,
- TitleBar::TitleBarType eType)
- : ::Window (pParent->GetWindow(), WB_TABSTOP),
- TreeNode(pParent),
- msTitle (rTitle),
- mbVisible (true),
- mpUserData (NULL),
- mpControlFactory(pControlFactory),
- mpClickHandler(new ClickHandler(rClickHandler)),
- mbExpansionModeIsToggle(eType!=TitleBar::TBT_CONTROL_TITLE)
+ mpClickHandler(new ClickHandler(rClickHandler))
{
mpControlContainer->AddControl (::std::auto_ptr<TreeNode> (
- new TitleBar (this, rTitle, eType, true)));
+ new TitleBar (this, rTitle, eType, pControl->IsExpandable())));
+ pControl->SetParentNode (this);
+ mpControlContainer->AddControl (pControl);
- // The second control is created on demand, i.e. when GetControl(true)
- // is called the first time.
+ FocusManager::Instance().RegisterDownLink( GetTitleBar()->GetWindow(), GetControl()->GetWindow() );
+ FocusManager::Instance().RegisterUpLink( GetControl()->GetWindow(), GetTitleBar()->GetWindow() );
SetBackground (Wallpaper());
@@ -124,7 +86,7 @@ TitledControl::~TitledControl (void)
Size TitledControl::GetPreferredSize (void)
{
Size aPreferredSize;
- if (GetControl(false) != NULL)
+ if (GetControl() != NULL)
{
aPreferredSize = GetControl()->GetPreferredSize();
if ( ! IsExpanded())
@@ -146,7 +108,7 @@ Size TitledControl::GetPreferredSize (void)
sal_Int32 TitledControl::GetPreferredWidth (sal_Int32 nHeight)
{
int nPreferredWidth = 0;
- if (GetControl(false) != NULL)
+ if (GetControl() != NULL)
nPreferredWidth = GetControl()->GetPreferredWidth(
nHeight - GetTitleBar()->GetWindow()->GetSizePixel().Height());
else
@@ -163,7 +125,7 @@ sal_Int32 TitledControl::GetPreferredWidth (sal_Int32 nHeight)
sal_Int32 TitledControl::GetPreferredHeight (sal_Int32 nWidth)
{
int nPreferredHeight = 0;
- if (IsExpanded() && GetControl(false)!=NULL)
+ if (IsExpanded() && GetControl()!=NULL)
nPreferredHeight = GetControl()->GetPreferredHeight(nWidth);
nPreferredHeight += GetTitleBar()->GetPreferredHeight(nWidth);
@@ -201,7 +163,7 @@ void TitledControl::Resize (void)
Size (aWindowSize.Width(), nTitleBarHeight));
- TreeNode* pControl = GetControl(false);
+ TreeNode* pControl = GetControl();
if (pControl != NULL
&& pControl->GetWindow() != NULL
&& pControl->GetWindow()->IsVisible())
@@ -219,17 +181,7 @@ void TitledControl::GetFocus (void)
{
::Window::GetFocus();
if (GetTitleBar() != NULL)
- GetTitleBar()->SetFocus (true);
-}
-
-
-
-
-void TitledControl::LoseFocus (void)
-{
- ::Window::LoseFocus();
- if (GetTitleBar() != NULL)
- GetTitleBar()->SetFocus (false);
+ GetTitleBar()->GrabFocus();
}
@@ -258,7 +210,7 @@ void TitledControl::KeyInput (const KeyEvent& rEvent)
if ( ! FocusManager::Instance().TransferFocus(this,nCode))
{
// When already expanded then put focus on first child.
- TreeNode* pControl = GetControl(false);
+ TreeNode* pControl = GetControl();
if (pControl!=NULL && IsExpanded())
if (pControl->GetWindow() != NULL)
pControl->GetWindow()->GrabFocus();
@@ -296,7 +248,7 @@ bool TitledControl::Expand (bool bExpanded)
// Get the control. Use the bExpanded parameter as argument to
// indicate that a control is created via its factory only when it
// is to be expanded. When it is collapsed this is not necessary.
- TreeNode* pControl = GetControl(bExpanded);
+ TreeNode* pControl = GetControl();
if (pControl != NULL
&& GetControl()->IsExpanded() != bExpanded)
{
@@ -314,7 +266,7 @@ bool TitledControl::Expand (bool bExpanded)
bool TitledControl::IsExpandable (void) const
{
- const TreeNode* pControl = GetConstControl(false);
+ const TreeNode* pControl = GetConstControl();
if (pControl != NULL)
return pControl->IsExpandable();
else
@@ -328,7 +280,7 @@ bool TitledControl::IsExpandable (void) const
bool TitledControl::IsExpanded (void) const
{
- const TreeNode* pControl = GetConstControl(false);
+ const TreeNode* pControl = GetConstControl();
if (pControl != NULL)
return pControl->IsExpanded();
else
@@ -402,7 +354,7 @@ void TitledControl::UpdateStates (void)
else
GetWindow()->Hide();
- TreeNode* pControl = GetControl(false);
+ TreeNode* pControl = GetControl();
if (pControl!=NULL && pControl->GetWindow() != NULL)
{
if (IsVisible() && IsExpanded())
@@ -435,33 +387,17 @@ IMPL_LINK(TitledControl, WindowEventListener,
-TreeNode* TitledControl::GetControl (bool bCreate)
+TreeNode* TitledControl::GetControl (void)
{
- TreeNode* pNode = mpControlContainer->GetControl(1);
- if (pNode==NULL && mpControlFactory.get()!=NULL && bCreate)
- {
- // We have to create the control with the factory object.
- ::std::auto_ptr<TreeNode> pControl (mpControlFactory->CreateControl(this));//GetParentNode()));
- if (pControl.get() != NULL)
- {
- pControl->SetParentNode(this);
- mpControlContainer->AddControl(pControl);
-
- pNode = mpControlContainer->GetControl(1);
- FocusManager::Instance().RegisterDownLink(this, pNode->GetWindow());
- FocusManager::Instance().RegisterUpLink(pNode->GetWindow(), this);
- }
- }
-
- return pNode;
+ return mpControlContainer->GetControl(1);
}
-const TreeNode* TitledControl::GetConstControl (bool bCreate) const
+const TreeNode* TitledControl::GetConstControl () const
{
- return const_cast<TitledControl*>(this)->GetControl(bCreate);
+ return const_cast<TitledControl*>(this)->GetControl();
}
diff --git a/sd/source/ui/toolpanel/ToolPanel.cxx b/sd/source/ui/toolpanel/ToolPanel.cxx
index c87b3cc63ef5..6dbcae52547a 100755
--- a/sd/source/ui/toolpanel/ToolPanel.cxx
+++ b/sd/source/ui/toolpanel/ToolPanel.cxx
@@ -1,5 +1,4 @@
/*************************************************************************
- *
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
@@ -25,265 +24,90 @@
*
************************************************************************/
-// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"
-#include "taskpane/ToolPanel.hxx"
-
-#include "TaskPaneFocusManager.hxx"
-#include "taskpane/TitleBar.hxx"
-#include "taskpane/TitledControl.hxx"
-#include "taskpane/ControlContainer.hxx"
-#include "TaskPaneViewShell.hxx"
-#include "taskpane/TaskPaneControlFactory.hxx"
-#include "AccessibleTaskPane.hxx"
-
-#include "strings.hrc"
-#include "sdresid.hxx"
-#include <vcl/decoview.hxx>
-#include <vcl/menu.hxx>
-#include <vcl/svapp.hxx>
-
-namespace sd { namespace toolpanel {
-
-
-/** Use WB_DIALOGCONTROL as argument for the Control constructor to
- let VCL handle focus traveling. In addition the control
- descriptors have to use WB_TABSTOP.
-*/
-ToolPanel::ToolPanel (
- Window* pParentWindow,
- TaskPaneViewShell& rViewShell)
- : Control (pParentWindow, WB_DIALOGCONTROL),
- TreeNode (NULL),
- mrViewShell(rViewShell),
- mbRearrangeActive(false)
-{
- SetBackground (Wallpaper ());
-}
-
-
-
-
-ToolPanel::~ToolPanel (void)
-{
-}
-
+#include "ToolPanel.hxx"
+#include "MethodGuard.hxx"
+#include <taskpane/TaskPaneTreeNode.hxx>
+/** === begin UNO includes === **/
+#include <com/sun/star/lang/DisposedException.hpp>
+/** === end UNO includes === **/
+#include <vcl/window.hxx>
-sal_uInt32 ToolPanel::AddControl (
- ::std::auto_ptr<ControlFactory> pControlFactory,
- const String& rTitle,
- ULONG nHelpId,
- const TitledControl::ClickHandler& rClickHandler)
+//......................................................................................................................
+namespace sd { namespace toolpanel
{
- TitledControl* pTitledControl = new TitledControl (
- this,
- pControlFactory,
- rTitle,
- rClickHandler,
- TitleBar::TBT_CONTROL_TITLE);
- ::std::auto_ptr<TreeNode> pChild (pTitledControl);
-
- // Get the (grand) parent window which is focus-wise our parent.
- Window* pParent = GetParent();
- if (pParent != NULL)
- pParent = pParent->GetParent();
-
- FocusManager& rFocusManager (FocusManager::Instance());
- int nControlCount (mpControlContainer->GetControlCount());
-
- // Add a link up from every control to the parent. A down link is added
- // only for the first control so that when entering the sub tool panel
- // the focus is set to the first control.
- if (pParent != NULL)
+//......................................................................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::lang::DisposedException;
+ using ::com::sun::star::awt::XWindow;
+ using ::com::sun::star::accessibility::XAccessible;
+ /** === end UNO using === **/
+
+ typedef MethodGuard< ToolPanel > ToolPanelGuard;
+
+ //==================================================================================================================
+ //= ToolPanel
+ //==================================================================================================================
+ //------------------------------------------------------------------------------------------------------------------
+ ToolPanel::ToolPanel( ::std::auto_ptr< TreeNode >& i_rControl )
+ :ToolPanel_Base( m_aMutex )
+ ,m_pControl( i_rControl )
{
- if (nControlCount == 1)
- rFocusManager.RegisterDownLink(pParent, pChild->GetWindow());
- rFocusManager.RegisterUpLink(pChild->GetWindow(), pParent);
}
- // Replace the old links for cycling between first and last child by
- // current onems.
- if (nControlCount > 0)
+ //------------------------------------------------------------------------------------------------------------------
+ ToolPanel::~ToolPanel()
{
- ::Window* pFirst = mpControlContainer->GetControl(0)->GetWindow();
- ::Window* pLast = mpControlContainer->GetControl(nControlCount-1)->GetWindow();
- rFocusManager.RemoveLinks(pFirst,pLast);
- rFocusManager.RemoveLinks(pLast,pFirst);
-
- rFocusManager.RegisterLink(pFirst,pChild->GetWindow(), KEY_UP);
- rFocusManager.RegisterLink(pChild->GetWindow(),pFirst, KEY_DOWN);
}
- pTitledControl->GetWindow()->SetHelpId(nHelpId);
-
- return mpControlContainer->AddControl (pChild);
-}
-
-
-
-
-void ToolPanel::ListHasChanged (void)
-{
- mpControlContainer->ListHasChanged ();
- Rearrange ();
-}
-
-
-
-
-void ToolPanel::Resize (void)
-{
- Control::Resize();
- Rearrange ();
-}
-
-
-
-
-void ToolPanel::RequestResize (void)
-{
- Invalidate();
- Rearrange ();
-}
-
-
-
-
-/** Subtract the space for the title bars from the available space and
- give the remaining space to the active control.
-*/
-void ToolPanel::Rearrange (void)
-{
- // Prevent recursive calls.
- if ( ! mbRearrangeActive && mpControlContainer->GetVisibleControlCount()>0)
+ //------------------------------------------------------------------------------------------------------------------
+ void ToolPanel::checkDisposed()
{
- mbRearrangeActive = true;
-
- SetBackground (Wallpaper ());
-
- // Make the area that is covered by the children a little bit
- // smaller so that a frame is visible arround them.
- Rectangle aAvailableArea (Point(0,0), GetOutputSizePixel());
-
- int nWidth = aAvailableArea.GetWidth();
- sal_uInt32 nControlCount (mpControlContainer->GetControlCount());
- sal_uInt32 nActiveControlIndex (
- mpControlContainer->GetActiveControlIndex());
+ if ( m_pControl.get() == NULL )
+ throw DisposedException( ::rtl::OUString(), *this );
+ }
- // Place title bars of controls above the active control and thereby
- // determine the top of the active control.
- sal_uInt32 nIndex;
- for (nIndex=mpControlContainer->GetFirstIndex();
- nIndex<nActiveControlIndex;
- nIndex=mpControlContainer->GetNextIndex(nIndex))
- {
- TreeNode* pChild = mpControlContainer->GetControl(nIndex);
- if (pChild != NULL)
- {
- sal_uInt32 nHeight = pChild->GetPreferredHeight (nWidth);
- pChild->GetWindow()->SetPosSizePixel (
- aAvailableArea.TopLeft(),
- Size(nWidth, nHeight));
- aAvailableArea.Top() += nHeight;
- }
- }
+ //------------------------------------------------------------------------------------------------------------------
+ Reference< XWindow > SAL_CALL ToolPanel::getWindow() throw (RuntimeException)
+ {
+ ToolPanelGuard aGuard( *this );
+ return Reference< XWindow >( m_pControl->GetWindow()->GetComponentInterface(), UNO_QUERY_THROW );
+ }
- // Place title bars of controls below the active control and thereby
- // determine the bottom of the active control.
- for (nIndex=mpControlContainer->GetLastIndex();
- nIndex<nControlCount && nIndex!=nActiveControlIndex;
- nIndex=mpControlContainer->GetPreviousIndex(nIndex))
+ //------------------------------------------------------------------------------------------------------------------
+ Reference< XAccessible > SAL_CALL ToolPanel::createAccessible( const Reference< XAccessible >& i_rParentAccessible ) throw (RuntimeException)
+ {
+ ToolPanelGuard aGuard( *this );
+ Reference< XAccessible > xAccessible( m_pControl->GetWindow()->GetAccessible( FALSE ) );
+ if ( !xAccessible.is() )
{
- TreeNode* pChild = mpControlContainer->GetControl(nIndex);
- if (pChild != NULL)
- {
- sal_uInt32 nHeight = pChild->GetPreferredHeight (nWidth);
- pChild->GetWindow()->SetPosSizePixel (
- Point(aAvailableArea.Left(),
- aAvailableArea.Bottom()-nHeight+1),
- Size(nWidth, nHeight));
- aAvailableArea.Bottom() -= nHeight;
- }
+ xAccessible.set( m_pControl->CreateAccessibleObject( i_rParentAccessible ) );
+ m_pControl->GetWindow()->SetAccessible( xAccessible );
}
-
- // Finally place the active control.
- TreeNode* pChild = mpControlContainer->GetControl(nActiveControlIndex);
- if (pChild != NULL)
- pChild->GetWindow()->SetPosSizePixel (
- aAvailableArea.TopLeft(),
- aAvailableArea.GetSize());
-
- mbRearrangeActive = false;
+ return xAccessible;
}
- else
- SetBackground (
- Application::GetSettings().GetStyleSettings().GetDialogColor());
-}
-
-
-
-
-Size ToolPanel::GetPreferredSize (void)
-{
- return Size(300,300);
-}
-
-
-
-
-sal_Int32 ToolPanel::GetPreferredWidth (sal_Int32 )
-{
- return 300;
-}
-
-
-
-
-sal_Int32 ToolPanel::GetPreferredHeight (sal_Int32 )
-{
- return 300;
-}
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL ToolPanel::disposing()
+ {
+ m_pControl.reset();
+ }
-
-
-bool ToolPanel::IsResizable (void)
-{
- return true;
-}
-
-
-
-
-::Window* ToolPanel::GetWindow (void)
-{
- return this;
-}
-
-
-
-
-TaskPaneShellManager* ToolPanel::GetShellManager (void)
-{
- return &mrViewShell.GetSubShellManager();
-}
-
-
-
-
-::com::sun::star::uno::Reference<
- ::com::sun::star::accessibility::XAccessible> ToolPanel::CreateAccessibleObject (
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::accessibility::XAccessible>& rxParent)
-{
- return new ::accessibility::AccessibleTaskPane (
- rxParent,
- String(SdResId(STR_RIGHT_PANE_TITLE)),
- String(SdResId(STR_RIGHT_PANE_TITLE)),
- *this);
-}
-
-} } // end of namespace ::sd::toolpanel
+//......................................................................................................................
+} } // namespace sd::toolpanel
+//......................................................................................................................
diff --git a/sd/source/ui/toolpanel/ToolPanel.hxx b/sd/source/ui/toolpanel/ToolPanel.hxx
new file mode 100644
index 000000000000..2fe4a64c71be
--- /dev/null
+++ b/sd/source/ui/toolpanel/ToolPanel.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SD_TOOLPANEL_HXX
+#define SD_TOOLPANEL_HXX
+
+/** === begin UNO includes === **/
+#include <com/sun/star/ui/XToolPanel.hpp>
+/** === end UNO includes === **/
+
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/compbase1.hxx>
+
+#include <memory>
+
+//......................................................................................................................
+namespace sd { namespace toolpanel
+{
+//......................................................................................................................
+
+ class TreeNode;
+
+ //==================================================================================================================
+ //= ToolPanel
+ //==================================================================================================================
+ typedef ::cppu::WeakComponentImplHelper1 < ::com::sun::star::ui::XToolPanel
+ > ToolPanel_Base;
+ class ToolPanel :public ::cppu::BaseMutex
+ ,public ToolPanel_Base
+ {
+ public:
+ ToolPanel(
+ ::std::auto_ptr< TreeNode >& i_rControl
+ );
+
+ // XToolPanel
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL getWindow() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL createAccessible( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& ParentAccessible ) throw (::com::sun::star::uno::RuntimeException);
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing();
+
+ ::osl::Mutex& getMutex() { return m_aMutex; }
+ void checkDisposed();
+
+ protected:
+ ~ToolPanel();
+
+ private:
+ ::std::auto_ptr< TreeNode > m_pControl;
+ };
+
+//......................................................................................................................
+} } // namespace sd::toolpanel
+//......................................................................................................................
+
+#endif // SD_TOOLPANEL_HXX
diff --git a/sd/source/ui/toolpanel/ToolPanelChildWindow.cxx b/sd/source/ui/toolpanel/ToolPanelChildWindow.cxx
deleted file mode 100755
index 1db383091bff..000000000000
--- a/sd/source/ui/toolpanel/ToolPanelChildWindow.cxx
+++ /dev/null
@@ -1,68 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include "ToolPanelChildWindow.hxx"
-#include "ToolPanelDockingWindow.hxx"
-
-#include "sdresid.hxx"
-#include "app.hrc"
-#include "sfx2/app.hxx"
-
-
-namespace sd { namespace toolpanel {
-
-
-
-ToolPanelChildWindow::ToolPanelChildWindow (
- ::Window* pParentWindow,
- USHORT nId,
- SfxBindings* pBindings,
- SfxChildWinInfo* pInfo)
- : SfxChildWindow (pParentWindow, nId)
-{
- pWindow = new ToolPanelDockingWindow (pBindings, this, pParentWindow);
- eChildAlignment = SFX_ALIGN_RIGHT;
- static_cast<SfxDockingWindow*>(pWindow)->Initialize (pInfo);
- // SetHideNotDelete (TRUE);
-};
-
-
-
-
-ToolPanelChildWindow::~ToolPanelChildWindow()
-{}
-
-
-SFX_IMPL_DOCKINGWINDOW(ToolPanelChildWindow, SID_TOOLPANEL)
-
-
-
-
-} } // end of namespace ::sd::toolpanel
diff --git a/sd/source/ui/toolpanel/ToolPanelChildWindow.src b/sd/source/ui/toolpanel/ToolPanelChildWindow.src
deleted file mode 100755
index 079f9608f616..000000000000
--- a/sd/source/ui/toolpanel/ToolPanelChildWindow.src
+++ /dev/null
@@ -1,52 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "app.hrc"
-#include "ToolPanelChildWindow.hrc"
-
-DockingWindow FLT_WIN_TOOLPANEL
-{
- HelpID = SID_TOOLPANEL ;
- Border = TRUE ;
- Hide = FALSE ;
- SVLook = TRUE ;
- Sizeable = TRUE ;
- Moveable = TRUE ;
- Closeable = TRUE ;
- Zoomable = TRUE ;
- Dockable = TRUE ;
- EnableResizing = TRUE ;
- Size = MAP_APPFONT ( 140 , 120 ) ;
- Text = "Tool Panel" ;
-
- Control TOOLPANEL
- {
- Pos = MAP_APPFONT ( 0 , 0 ) ;
- Size = MAP_APPFONT ( 69, 150 ) ;
- Border = FALSE;
- };
-};
diff --git a/sd/source/ui/toolpanel/ToolPanelFactory.cxx b/sd/source/ui/toolpanel/ToolPanelFactory.cxx
new file mode 100644
index 000000000000..db4602c991d0
--- /dev/null
+++ b/sd/source/ui/toolpanel/ToolPanelFactory.cxx
@@ -0,0 +1,255 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_sd.hxx"
+
+#include "taskpane/ToolPanelViewShell.hxx"
+#include "framework/FrameworkHelper.hxx"
+#include "PaneChildWindows.hxx"
+#include "ViewShellBase.hxx"
+#include "app.hrc"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/ui/XUIElementFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
+/** === end UNO includes === **/
+
+#include <sfx2/frame.hxx>
+#include <vcl/svapp.hxx>
+#include <vos/mutex.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <cppuhelper/implbase3.hxx>
+#include <comphelper/namedvaluecollection.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
+
+//......................................................................................................................
+namespace sd { namespace toolpanel
+{
+//......................................................................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::uno::XComponentContext;
+ using ::com::sun::star::ui::XUIElementFactory;
+ using ::com::sun::star::ui::XUIElement;
+ using ::com::sun::star::beans::PropertyValue;
+ using ::com::sun::star::container::NoSuchElementException;
+ using ::com::sun::star::lang::IllegalArgumentException;
+ using ::com::sun::star::lang::XServiceInfo;
+ using ::com::sun::star::lang::XInitialization;
+ using ::com::sun::star::frame::XFrame;
+ using ::com::sun::star::awt::XWindow;
+ /** === end UNO using === **/
+
+ //==================================================================================================================
+ //= ToolPanelFactory
+ //==================================================================================================================
+ typedef ::cppu::WeakImplHelper3 < XUIElementFactory
+ , XServiceInfo
+ , XInitialization
+ > ToolPanelFactory_Base;
+ class ToolPanelFactory : public ToolPanelFactory_Base
+ {
+ public:
+ ToolPanelFactory( const Reference< XComponentContext >& i_rContext );
+
+ // XUIElementFactory
+ virtual Reference< XUIElement > SAL_CALL createUIElement( const ::rtl::OUString& ResourceURL, const Sequence< PropertyValue >& Args ) throw (NoSuchElementException, IllegalArgumentException, RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException);
+
+ protected:
+ virtual ~ToolPanelFactory();
+
+ private:
+ const Reference< XComponentContext > m_xContext;
+ };
+
+ //------------------------------------------------------------------------------------------------------------------
+ Reference< XInterface > SAL_CALL ToolPanelFactory_createInstance( const Reference< XComponentContext >& i_rContext )
+ {
+ return Reference< XInterface >( *new ToolPanelFactory( i_rContext ) );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::rtl::OUString ToolPanelFactory_getImplementationName() throw(RuntimeException)
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.drawing.ToolPanelFactory" ) );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ Sequence< ::rtl::OUString > SAL_CALL ToolPanelFactory_getSupportedServiceNames (void)
+ throw (RuntimeException)
+ {
+ const ::rtl::OUString sServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.DefaultToolPanelFactory" ) );
+ return Sequence< ::rtl::OUString >( &sServiceName, 1 );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ToolPanelFactory::ToolPanelFactory( const Reference< XComponentContext >& i_rContext )
+ :m_xContext( i_rContext )
+ {
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ToolPanelFactory::~ToolPanelFactory()
+ {
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ Reference< XUIElement > SAL_CALL ToolPanelFactory::createUIElement( const ::rtl::OUString& i_rResourceURL, const Sequence< PropertyValue >& i_rArgs ) throw (NoSuchElementException, IllegalArgumentException, RuntimeException)
+ {
+ ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
+
+ const PanelId ePanelId( toolpanel::GetStandardPanelId( i_rResourceURL ) );
+ if ( ePanelId == PID_UNKNOWN )
+ throw NoSuchElementException( i_rResourceURL, *this );
+
+ const ::comphelper::NamedValueCollection aArgs( i_rArgs );
+ const Reference< XFrame > xDocFrame( aArgs.getOrDefault( "Frame", Reference< XFrame >() ) );
+ const Reference< XWindow > xParentWindow( aArgs.getOrDefault( "ParentWindow", Reference< XWindow >() ) );
+ if ( !xDocFrame.is() || !xParentWindow.is() )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "For creating a standard tool panel, a Frame and a Parent window are needed." ) ),
+ *this,
+ 2
+ );
+
+ // look up the Sfx(View)Frame for the given XFrame
+ SfxViewFrame* pViewFrame = NULL;
+ for ( SfxFrame* pFrame = SfxFrame::GetFirst();
+ pFrame != NULL;
+ pFrame = SfxFrame::GetNext( *pFrame )
+ )
+ {
+ if ( pFrame->GetFrameInterface() == xDocFrame )
+ {
+ pViewFrame = pFrame->GetCurrentViewFrame();
+ break;
+ }
+ }
+
+ if ( !pViewFrame || !pViewFrame->HasChildWindow( SID_TASKPANE ) )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Illegal frame." ) ),
+ *this,
+ 2
+ );
+
+ // retrieve the task pane
+ ToolPanelChildWindow* pToolPanelWindow( dynamic_cast< ToolPanelChildWindow* >( pViewFrame->GetChildWindow( SID_TASKPANE ) ) );
+ if ( !pToolPanelWindow )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No Impress document, or no Impress Task Pane." ) ),
+ *this,
+ 2
+ );
+
+ // retrieve the ViewShellBase, and the view shell of the task pane
+ ViewShellBase* pViewShellBase = dynamic_cast< ViewShellBase* >( pViewFrame->GetViewShell() );
+ ::boost::shared_ptr< framework::FrameworkHelper > pFrameworkHelper;
+ if ( pViewShellBase )
+ pFrameworkHelper = framework::FrameworkHelper::Instance( *pViewShellBase );
+ ::boost::shared_ptr< ViewShell > pViewShell;
+ if ( pFrameworkHelper.get() )
+ pViewShell = pFrameworkHelper->GetViewShell( framework::FrameworkHelper::msRightPaneURL );
+ ToolPanelViewShell* pToolPanelShell = dynamic_cast< ToolPanelViewShell* >( pViewShell.get() );
+
+ if ( !pToolPanelShell )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Wrong document type." ) ),
+ *this,
+ 2
+ );
+
+ ::Window* pParentWindow = VCLUnoHelper::GetWindow( xParentWindow );
+ if ( !pParentWindow || !pToolPanelShell->IsPanelAnchorWindow( *pParentWindow ) )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported parent window." ) ),
+ *this,
+ 2
+ );
+
+ return pToolPanelShell->CreatePanelUIElement( xDocFrame, i_rResourceURL );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::rtl::OUString SAL_CALL ToolPanelFactory::getImplementationName( ) throw (RuntimeException)
+ {
+ return ToolPanelFactory_getImplementationName();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::sal_Bool SAL_CALL ToolPanelFactory::supportsService( const ::rtl::OUString& i_rServiceName ) throw (RuntimeException)
+ {
+ const Sequence< ::rtl::OUString > aSupported( getSupportedServiceNames() );
+ for ( const ::rtl::OUString* pSupported = aSupported.getConstArray();
+ pSupported != aSupported.getConstArray() + aSupported.getLength();
+ ++pSupported
+ )
+ if ( *pSupported == i_rServiceName )
+ return sal_True;
+
+ return sal_False;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ Sequence< ::rtl::OUString > SAL_CALL ToolPanelFactory::getSupportedServiceNames( ) throw (RuntimeException)
+ {
+ return ToolPanelFactory_getSupportedServiceNames();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL ToolPanelFactory::initialize( const Sequence< Any >& i_rArguments ) throw (Exception, RuntimeException)
+ {
+ ::comphelper::NamedValueCollection aArgs( i_rArguments );
+ (void)aArgs;
+ // TODO
+ }
+
+//......................................................................................................................
+} } // namespace sd::toolpanel
+//......................................................................................................................
diff --git a/sd/source/ui/toolpanel/ToolPanelUIElement.cxx b/sd/source/ui/toolpanel/ToolPanelUIElement.cxx
new file mode 100644
index 000000000000..e81f683bcfa7
--- /dev/null
+++ b/sd/source/ui/toolpanel/ToolPanelUIElement.cxx
@@ -0,0 +1,134 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "precompiled_sd.hxx"
+
+#include "ToolPanelUIElement.hxx"
+#include "MethodGuard.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/ui/UIElementType.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+/** === end UNO includes === **/
+
+#include <tools/diagnose_ex.h>
+
+//......................................................................................................................
+namespace sd { namespace toolpanel
+{
+//......................................................................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::frame::XFrame;
+ using ::com::sun::star::lang::XComponent;
+ using ::com::sun::star::ui::XToolPanel;
+ using ::com::sun::star::lang::DisposedException;
+ /** === end UNO using === **/
+ namespace UIElementType = ::com::sun::star::ui::UIElementType;
+
+ typedef MethodGuard< ToolPanelUIElement > UIElementMethodGuard;
+
+ //==================================================================================================================
+ //= ToolPanelUIElement
+ //==================================================================================================================
+ //------------------------------------------------------------------------------------------------------------------
+ ToolPanelUIElement::ToolPanelUIElement( const Reference< XFrame >& i_rFrame, const ::rtl::OUString& i_rResourceURL,
+ const Reference< XToolPanel >& i_rToolPanel )
+ :ToolPanelUIElement_Base( m_aMutex )
+ ,m_xFrame( i_rFrame )
+ ,m_sResourceURL( i_rResourceURL )
+ ,m_xToolPanel( i_rToolPanel )
+ {
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ToolPanelUIElement::~ToolPanelUIElement()
+ {
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void ToolPanelUIElement::checkDisposed()
+ {
+ if ( !m_xToolPanel.is() )
+ throw DisposedException( ::rtl::OUString(), *this );
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ Reference< XFrame > SAL_CALL ToolPanelUIElement::getFrame() throw (RuntimeException)
+ {
+ UIElementMethodGuard aGuard( *this );
+ return m_xFrame;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::rtl::OUString SAL_CALL ToolPanelUIElement::getResourceURL() throw (RuntimeException)
+ {
+ UIElementMethodGuard aGuard( *this );
+ return m_sResourceURL;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ ::sal_Int16 SAL_CALL ToolPanelUIElement::getType() throw (RuntimeException)
+ {
+ UIElementMethodGuard aGuard( *this );
+ return UIElementType::TOOLPANEL;
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ Reference< XInterface > SAL_CALL ToolPanelUIElement::getRealInterface( ) throw (RuntimeException)
+ {
+ UIElementMethodGuard aGuard( *this );
+ return m_xToolPanel.get();
+ }
+
+ //------------------------------------------------------------------------------------------------------------------
+ void SAL_CALL ToolPanelUIElement::disposing()
+ {
+ try
+ {
+ Reference< XComponent > xPanelComponent( m_xToolPanel, UNO_QUERY_THROW );
+ xPanelComponent->dispose();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+
+//......................................................................................................................
+} } // namespace sd::toolpanel
+//......................................................................................................................
diff --git a/sd/source/ui/toolpanel/ToolPanelUIElement.hxx b/sd/source/ui/toolpanel/ToolPanelUIElement.hxx
new file mode 100644
index 000000000000..0a74b7bd449e
--- /dev/null
+++ b/sd/source/ui/toolpanel/ToolPanelUIElement.hxx
@@ -0,0 +1,87 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SD_TOOLPANELUIELEMENT_HXX
+#define SD_TOOLPANELUIELEMENT_HXX
+
+/** === begin UNO includes === **/
+#include <com/sun/star/ui/XUIElement.hpp>
+#include <com/sun/star/ui/XToolPanel.hpp>
+/** === end UNO includes === **/
+
+#include <cppuhelper/compbase1.hxx>
+#include <cppuhelper/basemutex.hxx>
+
+#include <memory>
+
+//......................................................................................................................
+namespace sd { namespace toolpanel
+{
+//......................................................................................................................
+
+ class TreeNode;
+
+ //==================================================================================================================
+ //= ToolPanelUIElement
+ //==================================================================================================================
+ typedef ::cppu::WeakComponentImplHelper1 < ::com::sun::star::ui::XUIElement
+ > ToolPanelUIElement_Base;
+ class ToolPanelUIElement :public ::cppu::BaseMutex
+ ,public ToolPanelUIElement_Base
+ {
+ public:
+ ToolPanelUIElement(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& i_rFrame,
+ const ::rtl::OUString& i_rResourceURL,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ui::XToolPanel >& i_rToolPanel
+ );
+
+ // XUIElement
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > SAL_CALL getFrame() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getResourceURL() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Int16 SAL_CALL getType() throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getRealInterface( ) throw (::com::sun::star::uno::RuntimeException);
+
+ void checkDisposed();
+ ::osl::Mutex& getMutex() { return m_aMutex; }
+
+ protected:
+ virtual ~ToolPanelUIElement();
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing();
+
+ private:
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > m_xFrame;
+ const ::rtl::OUString m_sResourceURL;
+ const ::com::sun::star::uno::Reference< ::com::sun::star::ui::XToolPanel > m_xToolPanel;
+ };
+
+//......................................................................................................................
+} } // namespace sd::toolpanel
+//......................................................................................................................
+
+#endif // SD_TOOLPANELUIELEMENT_HXX
diff --git a/sd/source/ui/toolpanel/ToolPanelViewShell.cxx b/sd/source/ui/toolpanel/ToolPanelViewShell.cxx
new file mode 100755
index 000000000000..c62faf29ca50
--- /dev/null
+++ b/sd/source/ui/toolpanel/ToolPanelViewShell.cxx
@@ -0,0 +1,900 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#include "taskpane/ToolPanelViewShell.hxx"
+
+#include "TaskPaneShellManager.hxx"
+#include "TaskPaneFocusManager.hxx"
+#include "taskpane/TaskPaneControlFactory.hxx"
+#include "controls/MasterPagesPanel.hxx"
+#include "LayoutMenu.hxx"
+#include "DrawDocShell.hxx"
+#include "controls/TableDesignPanel.hxx"
+#include "controls/CustomAnimationPanel.hxx"
+#include "controls/SlideTransitionPanel.hxx"
+#include "controls/MasterPagesSelector.hxx"
+#include "ToolPanel.hxx"
+#include "ToolPanelUIElement.hxx"
+#include "PaneDockingWindow.hxx"
+#include "FrameView.hxx"
+#include "Window.hxx"
+#include "sdmod.hxx"
+#include "app.hrc"
+#include "glob.hrc"
+#include "res_bmp.hrc"
+#include "helpids.h"
+#include "strings.hrc"
+#include "sdresid.hxx"
+#include "framework/FrameworkHelper.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/drawing/framework/XResourceId.hpp>
+#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp>
+#include <com/sun/star/drawing/framework/AnchorBindingMode.hpp>
+#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp>
+#include <com/sun/star/drawing/XDrawSubController.hpp>
+/** === end UNO includes === **/
+
+#include <svtools/toolpanel/toolpanel.hxx>
+#include <svtools/toolpanel/toolpaneldeck.hxx>
+#include <svx/dlgctrl.hxx>
+#include <sfx2/taskpane.hxx>
+#include <sfx2/imagemgr.hxx>
+#include <sfx2/bindings.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <sfx2/msg.hxx>
+#include <sfx2/objface.hxx>
+#include <svx/colrctrl.hxx>
+#include <svx/xtable.hxx>
+#include <vcl/dockwin.hxx>
+#include "sdtreelb.hxx"
+#include "DrawViewShell.hxx"
+#include "drawdoc.hxx"
+#include "ViewShellBase.hxx"
+#include <svx/ruler.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/toolbox.hxx>
+#include <tools/diagnose_ex.h>
+#include <unotools/confignode.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/componentcontext.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/basemutex.hxx>
+
+#include <vector>
+
+using namespace ::sd::toolpanel;
+
+#define ToolPanelViewShell
+#include "sdslots.hxx"
+
+/** === begin UNO using === **/
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::XInterface;
+using ::com::sun::star::uno::UNO_QUERY;
+using ::com::sun::star::uno::UNO_QUERY_THROW;
+using ::com::sun::star::uno::UNO_SET_THROW;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::uno::RuntimeException;
+using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::makeAny;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::Type;
+using ::com::sun::star::accessibility::XAccessible;
+using ::com::sun::star::drawing::XDrawSubController;
+using ::com::sun::star::frame::XFrame;
+using ::com::sun::star::drawing::framework::XResourceId;
+using ::com::sun::star::drawing::framework::XConfigurationChangeListener;
+using ::com::sun::star::drawing::framework::ConfigurationChangeEvent;
+using ::com::sun::star::lang::EventObject;
+using ::com::sun::star::lang::DisposedException;
+using ::com::sun::star::drawing::framework::XConfigurationControllerBroadcaster;
+using ::com::sun::star::drawing::framework::XConfigurationController;
+using ::com::sun::star::drawing::framework::XConfiguration;
+using ::com::sun::star::drawing::framework::AnchorBindingMode_DIRECT;
+using ::com::sun::star::ui::XUIElement;
+using ::com::sun::star::ui::XToolPanel;
+using ::com::sun::star::drawing::framework::ResourceActivationMode_REPLACE;
+/** === end UNO using === **/
+
+using ::sd::framework::FrameworkHelper;
+
+namespace sd { namespace toolpanel {
+
+// =====================================================================================================================
+// = misc helper
+// =====================================================================================================================
+// ---------------------------------------------------------------------------------------------------------------------
+PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL, const bool i_bIgnoreUnknown )
+{
+ PanelId ePanelId( PID_UNKNOWN );
+
+ if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msMasterPagesTaskPanelURL ) )
+ {
+ ePanelId = PID_MASTER_PAGES;
+ }
+ else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msLayoutTaskPanelURL ) )
+ {
+ ePanelId = PID_LAYOUT;
+ }
+ else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msTableDesignPanelURL ) )
+ {
+ ePanelId = PID_TABLE_DESIGN;
+ }
+ else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msCustomAnimationTaskPanelURL ) )
+ {
+ ePanelId = PID_CUSTOM_ANIMATION;
+ }
+ else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msSlideTransitionTaskPanelURL ) )
+ {
+ ePanelId = PID_SLIDE_TRANSITION;
+ }
+ else
+ {
+ OSL_ENSURE( i_bIgnoreUnknown, "GetStandardPanelId: cannot translate the given resource URL!" );
+ (void)i_bIgnoreUnknown;
+ }
+
+ return ePanelId;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL )
+{
+ return GetStandardPanelId( i_rTaskPanelResourceURL, false );
+}
+
+// =====================================================================================================================
+// = ConfigurationListener - declaration
+// =====================================================================================================================
+typedef ::cppu::WeakImplHelper1 < XConfigurationChangeListener
+ > ConfigurationListener_Base;
+
+class ConfigurationListener :public ::cppu::BaseMutex
+ ,public ConfigurationListener_Base
+{
+public:
+ ConfigurationListener( ToolPanelViewShell_Impl& i_rShellImpl );
+
+ // XConfigurationChangeListener
+ virtual void SAL_CALL notifyConfigurationChange( const ConfigurationChangeEvent& aEvent ) throw (RuntimeException);
+
+ // XEventListener
+ virtual void SAL_CALL disposing( const EventObject& Source ) throw (RuntimeException);
+
+ // XComponent equivalents (not available per UNO interface)
+ void dispose();
+
+protected:
+ ~ConfigurationListener();
+
+ void impl_checkDisposed_throw()
+ {
+ if ( !m_pShellImpl )
+ throw DisposedException( ::rtl::OUString(), *this );
+ }
+
+private:
+ ToolPanelViewShell_Impl* m_pShellImpl;
+};
+
+// =====================================================================================================================
+// = ToolPanelViewShell_Impl - declaration
+// =====================================================================================================================
+/** Inner implementation class of ToolPanelViewShell.
+*/
+class ToolPanelViewShell_Impl :public ::boost::noncopyable
+ ,public ::svt::IToolPanelDeckListener
+ ,public ::sfx2::IToolPanelCompare
+{
+public:
+ static const size_t mnInvalidId = static_cast< size_t >( -1 );
+
+ ToolPanelViewShell_Impl( ToolPanelViewShell& i_rPanelViewShell, ::Window& i_rPanelDeckParent );
+ ~ToolPanelViewShell_Impl();
+
+ ToolPanelViewShell& GetAntiImpl() { return m_rPanelViewShell; }
+
+ /** Here the panels are created that are shown in the task pane.
+ */
+ void Setup();
+
+ /** clean up the instance
+ */
+ void Cleanup();
+
+ /** activates the panel which has the given resource URL
+ */
+ void ActivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL );
+
+ /** de-activates the panel given by its resource URL, bypassing the configuration controller
+
+ If the panel is not active currently, nothing happens.
+ */
+ void DeactivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL );
+
+ /** provides access to the the VCL window of the panel deck
+ */
+ ::sfx2::ModuleTaskPane& GetTaskPane() { return *m_pTaskPane; }
+ const ::sfx2::ModuleTaskPane& GetTaskPane() const { return *m_pTaskPane; }
+
+ ::svt::ToolPanelDeck& GetToolPanelDeck() { return GetTaskPane().GetPanelDeck(); }
+ const ::svt::ToolPanelDeck& GetToolPanelDeck() const { return GetTaskPane().GetPanelDeck(); }
+
+ Reference< XAccessible >
+ CreateAccessible( ::sd::Window& i_rWindow );
+
+ void ConnectToDockingWindow();
+
+private:
+ // IToolPanelDeckListener overridables
+ virtual void PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition );
+ virtual void PanelRemoved( const size_t i_nPosition );
+ virtual void ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive );
+ virtual void LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter );
+ virtual void Dying();
+
+ // IToolPanelCompare overridables
+ virtual short compareToolPanelsURLs( const ::rtl::OUString& i_rLHS, const ::rtl::OUString& i_rRHS ) const;
+
+private:
+ struct InitialPanel
+ {
+ ::rtl::OUString sPanelResourceURL;
+ bool bActivateDirectly;
+ InitialPanel()
+ :sPanelResourceURL()
+ ,bActivateDirectly( true )
+ {
+ }
+ };
+ InitialPanel impl_determineInitialPanel();
+ ::rtl::OUString impl_getPanelURL( const ::boost::optional< size_t >& i_rPanel );
+
+private:
+ ToolPanelViewShell& m_rPanelViewShell;
+ ::boost::scoped_ptr< ::sfx2::ModuleTaskPane > m_pTaskPane;
+ ::std::auto_ptr< ::sfx2::TaskPaneController > m_pTaskPaneController;
+ ::rtl::Reference< ConfigurationListener > m_pConfigListener;
+ bool m_bInitialized;
+};
+
+// =====================================================================================================================
+// = ConfigurationListener - implementation
+// =====================================================================================================================
+// ---------------------------------------------------------------------------------------------------------------------
+ConfigurationListener::ConfigurationListener( ToolPanelViewShell_Impl& i_rShellImpl )
+ :m_pShellImpl( &i_rShellImpl )
+{
+ ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( i_rShellImpl.GetAntiImpl().GetViewShellBase() ) );
+ Reference< XConfigurationControllerBroadcaster > xBroadcaster;
+ if ( pFrameworkHelper.get() )
+ xBroadcaster.set( pFrameworkHelper->GetConfigurationController().get() );
+ ENSURE_OR_THROW( pFrameworkHelper.get(), "no access to the config controller" );
+
+ osl_incrementInterlockedCount( &m_refCount );
+ {
+ xBroadcaster->addConfigurationChangeListener( this, ::rtl::OUString(), Any() );
+ }
+ osl_decrementInterlockedCount( &m_refCount );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+ConfigurationListener::~ConfigurationListener()
+{
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void SAL_CALL ConfigurationListener::notifyConfigurationChange( const ConfigurationChangeEvent& i_rEvent ) throw (RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+
+ // is this an event we're interested in?
+ if ( i_rEvent.Type != FrameworkHelper::msResourceActivationEvent )
+ return;
+
+ // is this a resource we're interested in? Must be anchored in the task pane ...
+ Reference< XResourceId > xAnchorId;
+ if ( i_rEvent.ResourceId.is() )
+ xAnchorId = i_rEvent.ResourceId->getAnchor();
+ if ( !xAnchorId.is() )
+ return;
+ const ::rtl::OUString sAnchorURL( xAnchorId->getResourceURL() );
+ if ( sAnchorURL != FrameworkHelper::msTaskPaneURL )
+ return;
+
+ m_pShellImpl->ActivatePanelByResource( i_rEvent.ResourceId->getResourceURL() );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void SAL_CALL ConfigurationListener::disposing( const EventObject& i_rEvent ) throw (RuntimeException)
+{
+ (void)i_rEvent;
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+ impl_checkDisposed_throw();
+ }
+
+ dispose();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ConfigurationListener::dispose()
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ m_pShellImpl = NULL;
+}
+
+// =====================================================================================================================
+// = ToolPanelViewShell
+// =====================================================================================================================
+// ---------------------------------------------------------------------------------------------------------------------
+SFX_IMPL_INTERFACE(ToolPanelViewShell, SfxShell, SdResId(STR_TASKPANEVIEWSHELL))
+{
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+TYPEINIT1(ToolPanelViewShell, ViewShell);
+
+// ---------------------------------------------------------------------------------------------------------------------
+ToolPanelViewShell_Impl::InitialPanel ToolPanelViewShell_Impl::impl_determineInitialPanel()
+{
+ InitialPanel aPanelToActivate;
+ if ( GetAntiImpl().GetViewShellBase().GetDocShell()->GetDocumentType() == DOCUMENT_TYPE_DRAW )
+ // for Draw, rely on SFX's default handling, which is to activate the previously active panel
+ return aPanelToActivate;
+
+ // Default to Layout panel, but check whether the requested configuration already contains a tool panel, in this case,
+ // use that one.
+ aPanelToActivate.sPanelResourceURL = FrameworkHelper::msLayoutTaskPanelURL;
+ aPanelToActivate.bActivateDirectly = false;
+ try
+ {
+ ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( m_rPanelViewShell.GetViewShellBase() ) );
+ const Reference< XResourceId > xToolPanelId( pFrameworkHelper->CreateResourceId( FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL ) );
+ Reference< XConfigurationController > xCC( pFrameworkHelper->GetConfigurationController(), UNO_QUERY_THROW );
+ Reference< XConfiguration > xConfiguration( xCC->getRequestedConfiguration(), UNO_QUERY_THROW );
+ Sequence< Reference< XResourceId > > aViewIds( xConfiguration->getResources(
+ FrameworkHelper::CreateResourceId( FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL ),
+ FrameworkHelper::msTaskPanelURLPrefix, AnchorBindingMode_DIRECT ) );
+
+ if ( aViewIds.getLength() > 0 )
+ {
+ const ::rtl::OUString sResourceURL( aViewIds[0]->getResourceURL() );
+ PanelId nRequestedPanel = GetStandardPanelId( sResourceURL );
+ if ( nRequestedPanel != PID_UNKNOWN )
+ {
+ aPanelToActivate.sPanelResourceURL = sResourceURL;
+ aPanelToActivate.bActivateDirectly = true;
+ }
+ }
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return aPanelToActivate;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::Setup()
+{
+ if ( m_bInitialized )
+ return;
+ m_bInitialized = true;
+
+ // initially activate a panel
+ const InitialPanel aInitialPanel = impl_determineInitialPanel();
+ if ( aInitialPanel.sPanelResourceURL.getLength() )
+ {
+ if ( aInitialPanel.bActivateDirectly )
+ {
+ ActivatePanelByResource( aInitialPanel.sPanelResourceURL );
+ }
+ else
+ {
+ ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( GetAntiImpl().GetViewShellBase() ) );
+ pFrameworkHelper->RequestTaskPanel( aInitialPanel.sPanelResourceURL );
+ }
+ }
+
+ // listen at the configuration
+ m_pConfigListener.set( new ConfigurationListener( *this ) );
+
+ m_pTaskPane->Show();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::Cleanup()
+{
+ if ( m_bInitialized )
+ {
+ if ( m_pConfigListener.is() )
+ m_pConfigListener->dispose();
+ }
+ GetToolPanelDeck().RemoveListener( *this );
+ m_pTaskPaneController.reset();
+ m_pTaskPane.reset();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::ActivatePanelByResource( const ::rtl::OUString& i_rResourceURL )
+{
+ // determine position of the requested panel
+ ::boost::optional< size_t > aPanelPos = GetTaskPane().GetPanelPos( i_rResourceURL );
+ OSL_ENSURE( !!aPanelPos, "ToolPanelViewShell_Impl::ActivatePanelByResource: illegal panel resource, or illegal panel deck setup!" );
+ if ( !!aPanelPos )
+ GetToolPanelDeck().ActivatePanel( *aPanelPos );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::DeactivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL )
+{
+ // determine position of the requested panel
+ ::boost::optional< size_t > aPanelPos = GetTaskPane().GetPanelPos( i_rPanelResourceURL );
+ OSL_ENSURE( !!aPanelPos, "ToolPanelViewShell_Impl::DeactivatePanelByResource: illegal panel resource, or illegal panel deck setup!" );
+ if ( !!aPanelPos )
+ {
+ if ( GetToolPanelDeck().GetActivePanel() == *aPanelPos )
+ GetToolPanelDeck().ActivatePanel( ::boost::optional< size_t >() );
+ }
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::Initialize()
+{
+ mpImpl->Setup();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+ToolPanelViewShell::ToolPanelViewShell( SfxViewFrame* pFrame, ViewShellBase& rViewShellBase, ::Window* pParentWindow,
+ FrameView* pFrameViewArgument )
+ :ViewShell(pFrame, pParentWindow, rViewShellBase)
+ ,mpImpl( new ToolPanelViewShell_Impl( *this, *mpContentWindow.get() ) )
+ ,mpSubShellManager()
+ ,mnMenuId(0)
+{
+ meShellType = ST_TASK_PANE;
+
+ mpContentWindow->SetCenterAllowed( false );
+ pParentWindow->SetStyle( pParentWindow->GetStyle() | WB_DIALOGCONTROL );
+
+ GetParentWindow()->SetBackground( Wallpaper() );
+ mpContentWindow->SetBackground( Wallpaper() );
+
+ GetParentWindow()->SetHelpId(HID_SD_TASK_PANE);
+
+ mpImpl->ConnectToDockingWindow();
+
+ SetPool( &GetDoc()->GetPool() );
+
+ if ( pFrameViewArgument )
+ mpFrameView = pFrameViewArgument;
+ else
+ mpFrameView = new FrameView( GetDoc() );
+ GetFrameView()->Connect();
+
+ // Hide or delete unused controls that we have inherited from the
+ // ViewShell base class.
+ mpHorizontalScrollBar.reset();
+ mpVerticalScrollBar.reset();
+ mpScrollBarBox.reset();
+ mpHorizontalRuler.reset();
+ mpVerticalRuler.reset();
+
+ SetName( String( RTL_CONSTASCII_USTRINGPARAM( "ToolPanelViewShell" ) ) );
+
+ // For accessibility we have to shortly hide the content window. This
+ // triggers the construction of a new accessibility object for the new
+ // view shell. (One is created earlier while the construtor of the base
+ // class is executed. At that time the correct accessibility object can
+ // not be constructed.)
+ if ( mpContentWindow.get() )
+ {
+ mpContentWindow->Hide();
+ mpContentWindow->Show();
+ }
+
+ // Register the shell manager as factory at the ViewShellManager.
+ mpSubShellManager.reset( new TaskPaneShellManager(
+ GetViewShellBase().GetViewShellManager(),
+ *this
+ ) );
+ GetViewShellBase().GetViewShellManager()->AddSubShellFactory( this, mpSubShellManager );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+ToolPanelViewShell::~ToolPanelViewShell()
+{
+ mpImpl->Cleanup();
+
+ // reset our impl before destroying the panel deck, to ensure the hidden panels are properly
+ // disposed/destroyed, too
+ mpImpl.reset();
+ GetViewShellBase().GetViewShellManager()->RemoveSubShellFactory(this, mpSubShellManager);
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+// static
+void ToolPanelViewShell::RegisterControls()
+{
+ SfxModule* pModule = SD_MOD();
+ controls::MasterPagesSelector::RegisterInterface( pModule );
+ LayoutMenu::RegisterInterface( pModule );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::ArrangeGUIElements()
+{
+ ViewShell::ArrangeGUIElements();
+
+ Initialize();
+
+ mpImpl->GetTaskPane().SetPosSizePixel( Point(), maViewSize );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::GetFocus()
+{
+ Invalidate();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::LoseFocus()
+{
+ Invalidate();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::KeyInput( const KeyEvent& i_rKeyEvent )
+{
+ const KeyCode nCode = i_rKeyEvent.GetKeyCode();
+ if ( nCode == KEY_RETURN )
+ {
+ if ( !mpImpl->GetTaskPane().HasChildPathFocus() )
+ mpImpl->GetTaskPane().GrabFocus();
+ }
+ else
+ ViewShell::KeyInput( i_rKeyEvent, NULL );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+SdPage* ToolPanelViewShell::GetActualPage()
+{
+ return NULL;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+SdPage* ToolPanelViewShell::getCurrentPage() const
+{
+ return NULL;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::Execute( SfxRequest& )
+{
+ OSL_ENSURE( false, "ToolPanelViewShell::Execute: not to be called! (right?)" );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::GetState( SfxItemSet& )
+{
+ OSL_ENSURE( false, "ToolPanelViewShell::GetState: not to be called! (right?)" );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+TaskPaneShellManager& ToolPanelViewShell::GetSubShellManager() const
+{
+ return *mpSubShellManager.get();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+DockingWindow* ToolPanelViewShell::GetDockingWindow()
+{
+ ::Window* pParentWindow = GetParentWindow();
+ DockingWindow* pDockingWindow = NULL;
+ while (pParentWindow!=NULL && pDockingWindow==NULL)
+ {
+ pDockingWindow = dynamic_cast<DockingWindow*>(pParentWindow);
+ pParentWindow = pParentWindow->GetParent();
+ }
+ return pDockingWindow;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+Reference< XAccessible > ToolPanelViewShell::CreateAccessibleDocumentView( ::sd::Window* i_pWindow )
+{
+ ENSURE_OR_RETURN( i_pWindow, "ToolPanelViewShell::CreateAccessibleDocumentView: illegal window!", NULL );
+ return mpImpl->CreateAccessible( *i_pWindow );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+Reference< XDrawSubController > ToolPanelViewShell::CreateSubController()
+{
+ // This view shell is not designed to be the main view shell and thus
+ // does not support a UNO sub controller.
+ return Reference< XDrawSubController >();
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+bool ToolPanelViewShell::RelocateToParentWindow( ::Window* pParentWindow )
+{
+ ::Window* pOldParentWindow = GetParentWindow();
+ FocusManager::Instance().RemoveLinks( pOldParentWindow, &mpImpl->GetTaskPane() );
+ FocusManager::Instance().RemoveLinks( &mpImpl->GetTaskPane(), pOldParentWindow );
+
+ PaneDockingWindow* pDockingWindow = dynamic_cast< PaneDockingWindow* >( GetDockingWindow() );
+ if ( pDockingWindow != NULL )
+ {
+ pDockingWindow->SetEndDockingHdl( Link() );
+ }
+
+ ViewShell::RelocateToParentWindow(pParentWindow);
+
+ mpImpl->ConnectToDockingWindow();
+
+ Resize();
+
+ return true;
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+bool ToolPanelViewShell::IsPanelAnchorWindow( const ::Window& i_rWindow ) const
+{
+ return &mpImpl->GetToolPanelDeck().GetPanelWindowAnchor() == &i_rWindow;
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+namespace
+{
+ typedef std::auto_ptr< ControlFactory > (*ControlFactoryFactory)( ToolPanelViewShell& i_rToolPanelShell );
+
+ struct PanelFactory
+ {
+ ControlFactoryFactory pFactory;
+ ULONG nHelpID;
+ PanelFactory( const ControlFactoryFactory i_pFactory, const ULONG i_nHelpID )
+ :pFactory( i_pFactory )
+ ,nHelpID( i_nHelpID )
+ {
+ }
+ };
+
+ const PanelFactory lcl_describePanel( const PanelId i_ePanelId )
+ {
+ switch ( i_ePanelId )
+ {
+ case PID_MASTER_PAGES:
+ return PanelFactory( &controls::MasterPagesPanel::CreateControlFactory, HID_SD_SLIDE_DESIGNS );
+ case PID_LAYOUT:
+ return PanelFactory( &LayoutMenu::CreateControlFactory, HID_SD_SLIDE_LAYOUTS );
+ case PID_TABLE_DESIGN:
+ return PanelFactory( &controls::TableDesignPanel::CreateControlFactory, HID_SD_TABLE_DESIGN );
+ case PID_CUSTOM_ANIMATION:
+ return PanelFactory( &controls::CustomAnimationPanel::CreateControlFactory, HID_SD_CUSTOM_ANIMATIONS );
+ case PID_SLIDE_TRANSITION:
+ return PanelFactory( &controls::SlideTransitionPanel::CreateControlFactory, HID_SD_SLIDE_TRANSITIONS );
+ default:
+ break;
+ }
+ throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "illegal panel ID" ) ), NULL );
+ }
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+Reference< XUIElement > ToolPanelViewShell::CreatePanelUIElement( const Reference< XFrame >& i_rDocFrame, const ::rtl::OUString& i_rPanelResourceURL )
+{
+ const PanelId ePanelId( GetStandardPanelId( i_rPanelResourceURL ) );
+ ENSURE_OR_RETURN( ePanelId != PID_UNKNOWN, "ToolPanelViewShell::CreatePanelUIElement: illegal panel URL!", NULL );
+
+ // a TreeNode which will resemble the panel
+ const PanelFactory aPanelFactory( lcl_describePanel( ePanelId ) );
+ ::std::auto_ptr< ControlFactory > pControlFactory( (*aPanelFactory.pFactory)( *this ) );
+ ::std::auto_ptr< TreeNode > pNode( pControlFactory->CreateControl( mpImpl->GetToolPanelDeck().GetPanelWindowAnchor() ) );
+ ENSURE_OR_THROW( ( pNode.get() != NULL ) && ( pNode->GetWindow() != NULL ),
+ "illegal node returned by the control factory" );
+ pNode->GetWindow()->SetHelpId( aPanelFactory.nHelpID );
+
+ // create an XToolPanel
+ Reference< XToolPanel > xPanel( new ToolPanel( pNode ) );
+
+ // create an XUIElement providing this panel
+ const Reference< XUIElement > xUIElement( new ToolPanelUIElement( i_rDocFrame, i_rPanelResourceURL, xPanel ) );
+
+ return xUIElement;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::ActivatePanel( const ::rtl::OUString& i_rPanelResourceURL )
+{
+ OSL_ENSURE( i_rPanelResourceURL.indexOf( FrameworkHelper::msTaskPanelURLPrefix ) < 0,
+ "ToolPanelViewShell::ActivatePanel: for drawing-framework-controller panels, please use FrameworkHelper::RequestTaskPanel!" );
+ mpImpl->ActivatePanelByResource( i_rPanelResourceURL );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell::DeactivatePanel( const ::rtl::OUString& i_rPanelResourceURL )
+{
+ mpImpl->DeactivatePanelByResource( i_rPanelResourceURL );
+}
+
+// =====================================================================================================================
+// = ToolPanelViewShell_Impl - implementation
+// =====================================================================================================================
+// ---------------------------------------------------------------------------------------------------------------------
+ToolPanelViewShell_Impl::ToolPanelViewShell_Impl( ToolPanelViewShell& i_rPanelViewShell, ::Window& i_rPanelDeckParent )
+ :m_rPanelViewShell( i_rPanelViewShell )
+ ,m_pTaskPane( new ::sfx2::ModuleTaskPane( i_rPanelDeckParent, i_rPanelViewShell.GetViewShellBase().GetViewFrame()->GetFrame().GetFrameInterface(), *this ) )
+ ,m_bInitialized( false )
+{
+ const String sPaneTitle( SdResId( STR_RIGHT_PANE_TITLE ) );
+ GetToolPanelDeck().SetAccessibleName( sPaneTitle );
+ GetToolPanelDeck().SetAccessibleDescription( sPaneTitle );
+
+ GetToolPanelDeck().AddListener( *this );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+ToolPanelViewShell_Impl::~ToolPanelViewShell_Impl()
+{
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition )
+{
+ // not interested in
+ (void)i_pPanel;
+ (void)i_nPosition;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::PanelRemoved( const size_t i_nPosition )
+{
+ // not interested in
+ (void)i_nPosition;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+::rtl::OUString ToolPanelViewShell_Impl::impl_getPanelURL( const ::boost::optional< size_t >& i_rPanel )
+{
+ ::rtl::OUString sPanelURL;
+ if ( !!i_rPanel )
+ {
+ sPanelURL = GetTaskPane().GetPanelResourceURL( *i_rPanel );
+ const PanelId ePanelId( GetStandardPanelId( sPanelURL, true ) );
+ if ( ePanelId == PID_UNKNOWN )
+ sPanelURL = ::rtl::OUString();
+ }
+ return sPanelURL;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive )
+{
+ // update the configuration controller, since this change in the active panel might have been triggered by means other
+ // than the drawing framework, so it does not yet know about it.
+
+ const ::rtl::OUString sOldPanelURL( impl_getPanelURL( i_rOldActive ) );
+ const ::rtl::OUString sNewPanelURL( impl_getPanelURL( i_rNewActive ) );
+
+ const ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( GetAntiImpl().GetViewShellBase() ) );
+ if ( sNewPanelURL.getLength() )
+ {
+ // activate the resource belonging to the new panel. This will automatically de-activate the previously active
+ // panel resource (since ResourceActivationMode_REPLACE is used)
+ pFrameworkHelper->RequestTaskPanel( sNewPanelURL );
+ }
+ else if ( sOldPanelURL.getLength() )
+ {
+ // there is no new active panel, or it is not one of our standard panels, i.e. it is not covered by the
+ // resource framework. => Deactivate the old resource.
+ try
+ {
+ Reference< XConfigurationController > xConfigController( pFrameworkHelper->GetConfigurationController(), UNO_QUERY_THROW );
+ xConfigController->requestResourceDeactivation(
+ pFrameworkHelper->CreateResourceId(
+ sOldPanelURL,
+ FrameworkHelper::msTaskPaneURL,
+ FrameworkHelper::msRightPaneURL
+ )
+ );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter )
+{
+ // not interested in
+ (void)i_rNewLayouter;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::Dying()
+{
+ // not interested in
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+short ToolPanelViewShell_Impl::compareToolPanelsURLs( const ::rtl::OUString& i_rLHS, const ::rtl::OUString& i_rRHS ) const
+{
+ const PanelId eLHS( GetStandardPanelId( i_rLHS, true ) );
+ const PanelId eRHS( GetStandardPanelId( i_rRHS, true ) );
+ if ( eLHS < eRHS )
+ return -1;
+ if ( eLHS == eRHS )
+ return 0;
+ return 1;
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+void ToolPanelViewShell_Impl::ConnectToDockingWindow()
+{
+ m_pTaskPaneController.reset();
+ DockingWindow* pDockingWindow( GetAntiImpl().GetDockingWindow() );
+ if ( pDockingWindow )
+ {
+ PaneDockingWindow* pPaneDockingWindow = dynamic_cast< PaneDockingWindow* >( pDockingWindow );
+ OSL_ENSURE( pPaneDockingWindow, "ToolPanelViewShell_Impl::ConnectToDockingWindow: unsupported docking window type!" );
+ if ( pPaneDockingWindow != NULL )
+ m_pTaskPaneController.reset( new ::sfx2::TaskPaneController( GetTaskPane(), *pPaneDockingWindow ) );
+ }
+
+ // Tell the focus manager that we want to pass the focus to our
+ // child.
+ FocusManager::Instance().RegisterDownLink( GetAntiImpl().GetParentWindow(), &GetTaskPane() );
+}
+
+// ---------------------------------------------------------------------------------------------------------------------
+Reference< XAccessible > ToolPanelViewShell_Impl::CreateAccessible( ::sd::Window& i_rWindow )
+{
+ Reference< XAccessible > xAccessible( GetToolPanelDeck().GetAccessible( FALSE ) );
+ if ( !xAccessible.is() )
+ {
+ // determine the XAccessible which is the parent of the to-be-created object
+ ::Window* pAccessibleParent = i_rWindow.GetAccessibleParentWindow();
+ OSL_ENSURE( pAccessibleParent, "ToolPanelViewShell_Impl::CreateAccessible: illegal accessible parent provided by the sd::Window!" );
+ GetToolPanelDeck().SetAccessibleParentWindow( pAccessibleParent );
+
+ xAccessible = GetToolPanelDeck().GetAccessible( TRUE );
+ ENSURE_OR_RETURN( xAccessible.is(), "ToolPanelViewShell_Impl::CreateAccessible: illegal ToolPanelDeck accessible!", NULL );
+ OSL_ENSURE( xAccessible->getAccessibleContext().is()
+ && xAccessible->getAccessibleContext()->getAccessibleParent() == pAccessibleParent->GetAccessible(),
+ "ToolPanelViewShell_Impl::CreateAccessible: illegal parenthood!" );
+ }
+ return xAccessible;
+}
+
+} } // end of namespace ::sd::toolpanel
diff --git a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx
index 9767efe87c48..e7edf109cffd 100755
--- a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx
+++ b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx
@@ -31,6 +31,7 @@
#include "CustomAnimationPanel.hxx"
#include "taskpane/TaskPaneControlFactory.hxx"
+#include "taskpane/ToolPanelViewShell.hxx"
#include "strings.hrc"
#include "sdresid.hxx"
@@ -44,10 +45,11 @@ namespace sd
namespace toolpanel { namespace controls {
-CustomAnimationPanel::CustomAnimationPanel(TreeNode* pParent, ViewShellBase& rBase)
- : SubToolPanel (pParent)
+CustomAnimationPanel::CustomAnimationPanel(Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell)
+ :SubToolPanel( i_rParentWindow )
+ ,m_pPanelViewShell( &i_rPanelViewShell )
{
- mpWrappedControl = createCustomAnimationPanel( pParent->GetWindow(), rBase );
+ mpWrappedControl = createCustomAnimationPanel( &i_rParentWindow, i_rPanelViewShell.GetViewShellBase() );
mpWrappedControl->Show();
}
@@ -56,10 +58,17 @@ CustomAnimationPanel::~CustomAnimationPanel()
delete mpWrappedControl;
}
-std::auto_ptr<ControlFactory> CustomAnimationPanel::CreateControlFactory (ViewShellBase& rBase)
+std::auto_ptr< ControlFactory > CustomAnimationPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell )
{
- return std::auto_ptr<ControlFactory>(
- new ControlFactoryWithArgs1<CustomAnimationPanel,ViewShellBase>(rBase));
+ return std::auto_ptr< ControlFactory >(
+ new RootControlFactoryWithArg< CustomAnimationPanel, ToolPanelViewShell >( i_rToolPanelShell ) );
+}
+
+TaskPaneShellManager* CustomAnimationPanel::GetShellManager()
+{
+ if ( m_pPanelViewShell )
+ return &m_pPanelViewShell->GetSubShellManager();
+ return SubToolPanel::GetShellManager();
}
Size CustomAnimationPanel::GetPreferredSize()
diff --git a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx
index 734965e5264b..864ba637b94d 100755
--- a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx
+++ b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx
@@ -37,6 +37,7 @@ class ViewShellBase;
namespace sd { namespace toolpanel {
class TreeNode;
class ControlFactory;
+class ToolPanelViewShell;
} }
namespace sd { namespace toolpanel { namespace controls {
@@ -46,12 +47,16 @@ class CustomAnimationPanel
{
public:
CustomAnimationPanel (
- TreeNode* pParent,
- ViewShellBase& rBase);
+ Window& i_rParentWindow,
+ ToolPanelViewShell& i_rPanelViewShell);
virtual ~CustomAnimationPanel (void);
- static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase);
+ static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rPanelViewShell);
+ // TreeNode overridables
+ virtual TaskPaneShellManager* GetShellManager();
+
+ // ILayoutableWindow overridables
virtual Size GetPreferredSize (void);
virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh);
virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth);
@@ -68,6 +73,7 @@ public:
private:
Size maPreferredSize;
::Window* mpWrappedControl;
+ ToolPanelViewShell* m_pPanelViewShell;
};
} } } // end of namespace ::sd::toolpanel::controls
diff --git a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
index 2e121098194a..b9040e72283f 100755
--- a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
+++ b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
@@ -44,6 +44,8 @@
#include <com/sun/star/container/XIndexAccess.hpp>
#include "stlpool.hxx"
#include <svx/xfillit0.hxx>
+#include <tools/diagnose_ex.h>
+
using namespace ::com::sun::star;
namespace sd { namespace toolpanel { namespace controls {
@@ -245,9 +247,7 @@ SdPage* DocumentHelper::AddMasterPage (
catch (uno::Exception& rException)
{
pClonedMasterPage = NULL;
- OSL_TRACE("caught exception while adding master page: %s",
- ::rtl::OUStringToOString(rException.Message,
- RTL_TEXTENCODING_UTF8).getStr());
+ DBG_UNHANDLED_EXCEPTION();
}
catch (::std::exception rException)
{
diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx b/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx
index 6b9ff09bbed3..9a5eefb6d925 100755
--- a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx
+++ b/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx
@@ -40,6 +40,7 @@
#include <vcl/image.hxx>
#include <vcl/pngread.hxx>
#include <com/sun/star/embed/ElementModes.hpp>
+#include <tools/diagnose_ex.h>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
@@ -291,7 +292,7 @@ SdPage* TemplatePageObjectProvider::operator() (SdDrawDocument* pContainerDocume
}
catch (uno::RuntimeException)
{
- OSL_TRACE ("caught exception while loading page from template file");
+ DBG_UNHANDLED_EXCEPTION();
pPage = NULL;
}
diff --git a/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx b/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx
index b897e1514862..8dab51e93a58 100755
--- a/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx
+++ b/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx
@@ -33,6 +33,7 @@
#include "CurrentMasterPagesSelector.hxx"
#include "RecentMasterPagesSelector.hxx"
#include "AllMasterPagesSelector.hxx"
+#include "taskpane/ToolPanelViewShell.hxx"
#include "taskpane/TaskPaneControlFactory.hxx"
#include "taskpane/TitledControl.hxx"
#include "../TaskPaneShellManager.hxx"
@@ -48,8 +49,14 @@
namespace sd { namespace toolpanel { namespace controls {
-MasterPagesPanel::MasterPagesPanel (TreeNode* pParent, ViewShellBase& rBase)
- : ScrollPanel (pParent)
+MasterPagesPanel::MasterPagesPanel (::Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell)
+ :ScrollPanel (i_rParentWindow)
+ ,m_pPanelViewShell( &i_rPanelViewShell )
+{
+ impl_construct( m_pPanelViewShell->GetViewShellBase() );
+}
+
+void MasterPagesPanel::impl_construct( ViewShellBase& rBase )
{
SdDrawDocument* pDocument = rBase.GetDocument();
::std::auto_ptr<controls::MasterPagesSelector> pSelector;
@@ -118,18 +125,33 @@ MasterPagesPanel::MasterPagesPanel (TreeNode* pParent, ViewShellBase& rBase)
MasterPagesPanel::~MasterPagesPanel (void)
{
+ TaskPaneShellManager* pShellManager( GetShellManager() );
+ OSL_ENSURE( pShellManager, "MasterPagesPanel::~MasterPagesPanel: no shell manager anymore - cannot remove sub shells!" );
+ if ( pShellManager )
+ {
+ pShellManager->RemoveSubShell( HID_SD_TASK_PANE_PREVIEW_CURRENT );
+ pShellManager->RemoveSubShell( HID_SD_TASK_PANE_PREVIEW_RECENT );
+ pShellManager->RemoveSubShell( HID_SD_TASK_PANE_PREVIEW_ALL );
+ }
}
-std::auto_ptr<ControlFactory> MasterPagesPanel::CreateControlFactory (ViewShellBase& rBase)
+TaskPaneShellManager* MasterPagesPanel::GetShellManager()
{
- return std::auto_ptr<ControlFactory>(
- new ControlFactoryWithArgs1<MasterPagesPanel,ViewShellBase>(rBase));
+ if ( m_pPanelViewShell )
+ return &m_pPanelViewShell->GetSubShellManager();
+ return TreeNode::GetShellManager();
}
+std::auto_ptr< ControlFactory > MasterPagesPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell )
+{
+ return std::auto_ptr< ControlFactory >(
+ new RootControlFactoryWithArg< MasterPagesPanel, ToolPanelViewShell >( i_rToolPanelShell ) );
+}
+
} } } // end of namespace ::sd::toolpanel::controls
diff --git a/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx b/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx
index 1c6d75ea8dcb..932007802ebf 100755
--- a/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx
+++ b/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx
@@ -37,6 +37,7 @@ class ViewShellBase;
namespace sd { namespace toolpanel {
class ControlFactory;
class TreeNode;
+class ToolPanelViewShell;
} }
namespace sd { namespace toolpanel { namespace controls {
@@ -50,11 +51,20 @@ class MasterPagesPanel
{
public:
MasterPagesPanel (
- TreeNode* pParent,
- ViewShellBase& rBase);
+ ::Window& i_rParentWindow,
+ ToolPanelViewShell& i_rPanelViewShell);
virtual ~MasterPagesPanel (void);
- static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase);
+ // TreeNode overridables
+ virtual TaskPaneShellManager* GetShellManager (void);
+
+ static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell);
+
+private:
+ void impl_construct( ViewShellBase& rBase );
+
+private:
+ ToolPanelViewShell* m_pPanelViewShell;
};
} } } // end of namespace ::sd::toolpanel::controls
diff --git a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx
index 2cb0f58a029b..4ad67b876983 100755
--- a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx
+++ b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx
@@ -30,6 +30,7 @@
#include "SlideTransitionPanel.hxx"
#include "taskpane/TaskPaneControlFactory.hxx"
+#include "taskpane/ToolPanelViewShell.hxx"
#include "strings.hrc"
#include "sdresid.hxx"
@@ -45,11 +46,12 @@ namespace toolpanel { namespace controls {
-SlideTransitionPanel::SlideTransitionPanel(TreeNode* pParent, ViewShellBase& rBase)
- : SubToolPanel (pParent),
- maPreferredSize( 100, 200 )
+SlideTransitionPanel::SlideTransitionPanel(Window& i_rParentWindow, ToolPanelViewShell& i_rToolPanelShell)
+ :SubToolPanel( i_rParentWindow )
+ ,maPreferredSize( 100, 200 )
+ ,m_pPanelViewShell( &i_rToolPanelShell )
{
- mpWrappedControl = createSlideTransitionPanel( pParent->GetWindow(), rBase );
+ mpWrappedControl = createSlideTransitionPanel( &i_rParentWindow, i_rToolPanelShell.GetViewShellBase() );
mpWrappedControl->Show();
}
@@ -58,10 +60,17 @@ SlideTransitionPanel::~SlideTransitionPanel()
delete mpWrappedControl;
}
-std::auto_ptr<ControlFactory> SlideTransitionPanel::CreateControlFactory (ViewShellBase& rBase)
+std::auto_ptr< ControlFactory > SlideTransitionPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell )
{
- return std::auto_ptr<ControlFactory>(
- new ControlFactoryWithArgs1<SlideTransitionPanel,ViewShellBase>(rBase));
+ return std::auto_ptr< ControlFactory >(
+ new RootControlFactoryWithArg< SlideTransitionPanel, ToolPanelViewShell >( i_rToolPanelShell ) );
+}
+
+TaskPaneShellManager* SlideTransitionPanel::GetShellManager()
+{
+ if ( m_pPanelViewShell )
+ return &m_pPanelViewShell->GetSubShellManager();
+ return SubToolPanel::GetShellManager();
}
Size SlideTransitionPanel::GetPreferredSize()
diff --git a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx
index 478f69091f63..f62cb918806b 100755
--- a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx
+++ b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx
@@ -36,6 +36,7 @@ class ViewShellBase;
namespace sd { namespace toolpanel {
class ControlFactory;
class TreeNode;
+class ToolPanelViewShell;
} }
namespace sd { namespace toolpanel { namespace controls {
@@ -45,12 +46,16 @@ class SlideTransitionPanel
{
public:
SlideTransitionPanel (
- TreeNode* pParent,
- ViewShellBase& rBase);
+ Window& i_rParentWindow,
+ ToolPanelViewShell& i_rToolPanelShell);
virtual ~SlideTransitionPanel (void);
- static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase);
+ static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell);
+ // TreeNode overridables
+ virtual TaskPaneShellManager* GetShellManager();
+
+ // ILayoutableWindow overridables
virtual Size GetPreferredSize (void);
virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh);
virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth);
@@ -68,6 +73,7 @@ public:
private:
Size maPreferredSize;
::Window* mpWrappedControl;
+ ToolPanelViewShell* m_pPanelViewShell;
};
} } } // end of namespace ::sd::toolpanel::controls
diff --git a/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx b/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx
index ce242d557ee7..d6507a25c11f 100755
--- a/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx
+++ b/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx
@@ -31,6 +31,7 @@
#include "TableDesignPanel.hxx"
#include "taskpane/TaskPaneControlFactory.hxx"
+#include "taskpane/ToolPanelViewShell.hxx"
#include "strings.hrc"
#include "sdresid.hxx"
@@ -44,10 +45,11 @@ namespace sd
namespace toolpanel { namespace controls {
-TableDesignPanel::TableDesignPanel(TreeNode* pParent, ViewShellBase& rBase)
- : SubToolPanel (pParent)
+TableDesignPanel::TableDesignPanel( ::Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell )
+ :SubToolPanel( i_rParentWindow )
+ ,m_pPanelViewShell( &i_rPanelViewShell )
{
- mpWrappedControl = createTableDesignPanel( pParent->GetWindow(), rBase );
+ mpWrappedControl = createTableDesignPanel( &i_rParentWindow, i_rPanelViewShell.GetViewShellBase() );
mpWrappedControl->Show();
}
@@ -56,10 +58,17 @@ TableDesignPanel::~TableDesignPanel()
delete mpWrappedControl;
}
-std::auto_ptr<ControlFactory> TableDesignPanel::CreateControlFactory (ViewShellBase& rBase)
+std::auto_ptr< ControlFactory > TableDesignPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell )
{
- return std::auto_ptr<ControlFactory>(
- new ControlFactoryWithArgs1<TableDesignPanel,ViewShellBase>(rBase));
+ return std::auto_ptr< ControlFactory >(
+ new RootControlFactoryWithArg< TableDesignPanel, ToolPanelViewShell >( i_rToolPanelShell ) );
+}
+
+TaskPaneShellManager* TableDesignPanel::GetShellManager()
+{
+ if ( m_pPanelViewShell )
+ return &m_pPanelViewShell->GetSubShellManager();
+ return SubToolPanel::GetShellManager();
}
Size TableDesignPanel::GetPreferredSize()
diff --git a/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx b/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx
index aae06e37ad14..a3620df2ef68 100755
--- a/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx
+++ b/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx
@@ -37,6 +37,7 @@ class ViewShellBase;
namespace sd { namespace toolpanel {
class TreeNode;
class ControlFactory;
+class ToolPanelViewShell;
} }
namespace sd { namespace toolpanel { namespace controls {
@@ -46,12 +47,16 @@ class TableDesignPanel
{
public:
TableDesignPanel (
- TreeNode* pParent,
- ViewShellBase& rBase);
+ ::Window& i_rParentWindow,
+ ToolPanelViewShell& i_rPanelViewShell);
virtual ~TableDesignPanel (void);
- static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase);
+ static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell);
+ // TreeNode overridables
+ virtual TaskPaneShellManager* GetShellManager();
+
+ // ILayoutableWindow overridables
virtual Size GetPreferredSize (void);
virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh);
virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth);
@@ -68,6 +73,7 @@ public:
private:
Size maPreferredSize;
::Window* mpWrappedControl;
+ ToolPanelViewShell* m_pPanelViewShell;
};
} } } // end of namespace ::sd::toolpanel::controls
diff --git a/sd/source/ui/toolpanel/makefile.mk b/sd/source/ui/toolpanel/makefile.mk
index 08a966fe4061..4d83b8a85a70 100755
--- a/sd/source/ui/toolpanel/makefile.mk
+++ b/sd/source/ui/toolpanel/makefile.mk
@@ -50,12 +50,14 @@ SLOFILES = \
$(SLO)$/TitleBar.obj \
$(SLO)$/TitleToolBox.obj \
$(SLO)$/TitledControl.obj \
- $(SLO)$/ToolPanel.obj \
$(SLO)$/TaskPaneControlFactory.obj \
$(SLO)$/TaskPaneFocusManager.obj \
$(SLO)$/TaskPaneShellManager.obj \
$(SLO)$/TaskPaneTreeNode.obj \
- $(SLO)$/TaskPaneViewShell.obj \
+ $(SLO)$/ToolPanel.obj \
+ $(SLO)$/ToolPanelViewShell.obj \
+ $(SLO)$/ToolPanelFactory.obj \
+ $(SLO)$/ToolPanelUIElement.obj \
\
$(SLO)$/EmptyWindow.obj \
$(SLO)$/LayoutMenu.obj \