1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SD_SOURCE_UI_INC_TASKPANE_TOOLPANELVIEWSHELL_HXX
#define INCLUDED_SD_SOURCE_UI_INC_TASKPANE_TOOLPANELVIEWSHELL_HXX
#include "ViewShell.hxx"
#include "glob.hxx"
#include "taskpane/PanelId.hxx"
#include "framework/FrameworkHelper.hxx"
#include <vcl/button.hxx>
#include <sfx2/shell.hxx>
#include <sfx2/viewfac.hxx>
#include <sfx2/dockwin.hxx>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
class PopupMenu;
namespace com { namespace sun { namespace star { namespace ui {
class XUIElement;
} } } }
namespace sd {
namespace toolpanel {
class TaskPaneShellManager;
class ToolPanelViewShell_Impl;
/** The tool panel is a view shell for some very specific reasons:
- It fits better into the concept of panes being docking windows whose
content, a view shell, can be exchanged on runtime.
- A control in the tool panel that wants to show a context menu has to
do that over the dispatcher of a shell. These shells, usually
implemented by the controls themselves, have to be managed by someone.
If interpreted as object bars this can be handled by the
ObjectBarManager of the ViewShell.
*/
class ToolPanelViewShell
: public ViewShell
{
public:
TYPEINFO_OVERRIDE();
SFX_DECL_INTERFACE(SD_IF_SDTOOLPANELSHELL)
private:
/// SfxInterface initializer.
static void InitInterface_Impl();
public:
ToolPanelViewShell (
SfxViewFrame* pFrame,
ViewShellBase& rViewShellBase,
vcl::Window* pParentWindow,
FrameView* pFrameView);
virtual ~ToolPanelViewShell();
void GetFocus();
void LoseFocus();
void KeyInput (const KeyEvent& rEvent);
using sd::ViewShell::KeyInput;
virtual SdPage* GetActualPage() SAL_OVERRIDE;
virtual SdPage* getCurrentPage() const SAL_OVERRIDE;
virtual void ArrangeGUIElements() SAL_OVERRIDE;
TaskPaneShellManager& GetSubShellManager() const;
/** deactivates the given panel, bypassing the configuration controller. Only valid for tool panels which are
not under the drawing framework's control.
*/
void ActivatePanel( const OUString& i_rPanelResourceURL );
/** deactivates the given panel, bypassing the configuration controller
*/
void DeactivatePanel( const OUString& i_rPanelResourceURL );
/** Return a pointer to the docking window that is the parent or a
predecessor of the content window.
@return
When the view shell is not placed in a docking window, e.g. when
shown in the center pane, then <NULL?> is returned.
*/
DockingWindow* GetDockingWindow();
virtual ::com::sun::star::uno::Reference<
::com::sun::star::accessibility::XAccessible>
CreateAccessibleDocumentView (::sd::Window* pWindow) SAL_OVERRIDE;
virtual css::uno::Reference<css::drawing::XDrawSubController> CreateSubController() SAL_OVERRIDE;
/** Relocate all toplevel controls to the given parent window.
*/
virtual bool RelocateToParentWindow (vcl::Window* pParentWindow) SAL_OVERRIDE;
/// returns <TRUE/> if and only if the given window is the panel anchor window of our ToolPanelDeck
bool IsPanelAnchorWindow( const vcl::Window& i_rWindow ) const;
/** creates an XUIElement for the given standard panel
*/
::com::sun::star::uno::Reference< ::com::sun::star::ui::XUIElement >
CreatePanelUIElement(
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& i_rDocFrame,
const OUString& i_rPanelResourceURL
);
private:
::boost::scoped_ptr< ToolPanelViewShell_Impl > mpImpl;
::boost::shared_ptr<TaskPaneShellManager> mpSubShellManager;
/** The id of the menu in the menu bar/tool box of the parent docking
window.
*/
sal_uInt16 mnMenuId;
/** Create a popup menu. it contains two sections, one for
docking or un-docking the tool panel, one for toggling the
visibility state of the tool panel items.
@param bIsDocking
According to this flag one of the lock/unlock entries is
made disabled.
*/
::std::unique_ptr<PopupMenu> CreatePopupMenu (bool bIsDocking);
/** Initialize the task pane view shell if that has not yet been done
before. If mbIsInitialized is already set to <TRUE/> then this
method returns immediately.
*/
void Initialize();
};
} } // end of namespace ::sd::toolpanel
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|