xref: /aoo4110/main/sd/source/ui/view/outlnvsh.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sd.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "OutlineViewShell.hxx"
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include "ViewShellImplementation.hxx"
30*b1cdbd2cSJim Jagielski #include <memory>
31*b1cdbd2cSJim Jagielski #include "helpids.h"
32*b1cdbd2cSJim Jagielski #include "app.hrc"
33*b1cdbd2cSJim Jagielski #include <svx/hyprlink.hxx>
34*b1cdbd2cSJim Jagielski #include <svx/hyperdlg.hxx>
35*b1cdbd2cSJim Jagielski #include <svx/zoomslideritem.hxx>
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #include <sfx2/objface.hxx>
38*b1cdbd2cSJim Jagielski #include <sot/exchange.hxx>
39*b1cdbd2cSJim Jagielski #include <svx/ruler.hxx>
40*b1cdbd2cSJim Jagielski #include <svx/zoomitem.hxx>
41*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
42*b1cdbd2cSJim Jagielski #include <editeng/flditem.hxx>
43*b1cdbd2cSJim Jagielski #include <sfx2/shell.hxx>
44*b1cdbd2cSJim Jagielski #include <sfx2/templdlg.hxx>
45*b1cdbd2cSJim Jagielski #include <sfx2/viewfac.hxx>
46*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/hlnkitem.hxx>
48*b1cdbd2cSJim Jagielski #include <svx/svdotext.hxx>
49*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
50*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx>
51*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
52*b1cdbd2cSJim Jagielski #include <editeng/editstat.hxx>
53*b1cdbd2cSJim Jagielski #include <svl/itempool.hxx>
54*b1cdbd2cSJim Jagielski #include <sfx2/tplpitem.hxx>
55*b1cdbd2cSJim Jagielski #include <sfx2/sidebar/SidebarChildWindow.hxx>
56*b1cdbd2cSJim Jagielski #include <sfx2/sidebar/EnumContext.hxx>
57*b1cdbd2cSJim Jagielski #include <svx/svdorect.hxx>
58*b1cdbd2cSJim Jagielski #include <sot/formats.hxx>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/linguistic2/XThesaurus.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/TransliterationModules.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
62*b1cdbd2cSJim Jagielski #include <editeng/unolingu.hxx>
63*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
64*b1cdbd2cSJim Jagielski #include <editeng/outlobj.hxx>
65*b1cdbd2cSJim Jagielski #include <svl/cjkoptions.hxx>
66*b1cdbd2cSJim Jagielski #include <svtools/cliplistener.hxx>
67*b1cdbd2cSJim Jagielski #include <svl/srchitem.hxx>
68*b1cdbd2cSJim Jagielski #include <editeng/editobj.hxx>
69*b1cdbd2cSJim Jagielski #include "fubullet.hxx"
70*b1cdbd2cSJim Jagielski #include "optsitem.hxx"
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski #include "strings.hrc"
73*b1cdbd2cSJim Jagielski #include "glob.hrc"
74*b1cdbd2cSJim Jagielski #include "res_bmp.hrc"
75*b1cdbd2cSJim Jagielski #include "Outliner.hxx"
76*b1cdbd2cSJim Jagielski #include "Window.hxx"
77*b1cdbd2cSJim Jagielski #include "TextObjectBar.hxx"
78*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
79*b1cdbd2cSJim Jagielski #include "sdresid.hxx"
80*b1cdbd2cSJim Jagielski #include "sdpage.hxx"
81*b1cdbd2cSJim Jagielski #include "fuoltext.hxx"
82*b1cdbd2cSJim Jagielski #include "FrameView.hxx"
83*b1cdbd2cSJim Jagielski #include "zoomlist.hxx"
84*b1cdbd2cSJim Jagielski #include "stlsheet.hxx"
85*b1cdbd2cSJim Jagielski #include "slideshow.hxx"
86*b1cdbd2cSJim Jagielski #include "SdUnoOutlineView.hxx"
87*b1cdbd2cSJim Jagielski #include "SpellDialogChildWindow.hxx"
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski #include "AccessibleOutlineView.hxx"
90*b1cdbd2cSJim Jagielski #include "ViewShellBase.hxx"
91*b1cdbd2cSJim Jagielski #include "ViewShellManager.hxx"
92*b1cdbd2cSJim Jagielski #include "DrawController.hxx"
93*b1cdbd2cSJim Jagielski #include "framework/FrameworkHelper.hxx"
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski using ::rtl::OUString;
96*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
97*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
98*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
99*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::linguistic2;
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski using namespace sd;
102*b1cdbd2cSJim Jagielski #define OutlineViewShell
103*b1cdbd2cSJim Jagielski #include "sdslots.hxx"
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski namespace sd {
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski #define MIN_ZOOM	       10       // Minimaler Zoomfaktor
108*b1cdbd2cSJim Jagielski #define MAX_ZOOM	     1000	    // Maximaler Zoomfaktor
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski /************************************************************************/
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski /*************************************************************************
114*b1cdbd2cSJim Jagielski |*
115*b1cdbd2cSJim Jagielski |* SFX-Slotmap und Standardinterface deklarieren
116*b1cdbd2cSJim Jagielski |*
117*b1cdbd2cSJim Jagielski \************************************************************************/
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 
SFX_IMPL_INTERFACE(OutlineViewShell,SfxShell,SdResId (STR_OUTLINEVIEWSHELL))120*b1cdbd2cSJim Jagielski SFX_IMPL_INTERFACE(OutlineViewShell, SfxShell, SdResId(STR_OUTLINEVIEWSHELL))
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski 	SFX_POPUPMENU_REGISTRATION( SdResId(RID_OUTLINE_POPUP) );
123*b1cdbd2cSJim Jagielski 	SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_TOOLS | SFX_VISIBILITY_STANDARD |
124*b1cdbd2cSJim Jagielski 								SFX_VISIBILITY_FULLSCREEN | SFX_VISIBILITY_SERVER,
125*b1cdbd2cSJim Jagielski 								SdResId(RID_OUTLINE_TOOLBOX) );
126*b1cdbd2cSJim Jagielski     SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_APPLICATION | SFX_VISIBILITY_DESKTOP | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_CLIENT | SFX_VISIBILITY_VIEWER | SFX_VISIBILITY_READONLYDOC,
127*b1cdbd2cSJim Jagielski             					SdResId(RID_DRAW_VIEWER_TOOLBOX) );
128*b1cdbd2cSJim Jagielski 	SFX_CHILDWINDOW_REGISTRATION( SfxTemplateDialogWrapper::GetChildWindowId() );
129*b1cdbd2cSJim Jagielski 	SFX_CHILDWINDOW_REGISTRATION( SvxHyperlinkDlgWrapper::GetChildWindowId() );
130*b1cdbd2cSJim Jagielski 	SFX_CHILDWINDOW_REGISTRATION( SvxHlinkDlgWrapper::GetChildWindowId() );
131*b1cdbd2cSJim Jagielski 	SFX_CHILDWINDOW_REGISTRATION( ::sd::SpellDialogChildWindow::GetChildWindowId() );
132*b1cdbd2cSJim Jagielski 	SFX_CHILDWINDOW_REGISTRATION( SID_SEARCH_DLG );
133*b1cdbd2cSJim Jagielski 	SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId());
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski TYPEINIT1( OutlineViewShell, ViewShell );
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski /*************************************************************************
141*b1cdbd2cSJim Jagielski |*
142*b1cdbd2cSJim Jagielski |* gemeinsamer Initialiserungsanteil der beiden Konstruktoren
143*b1cdbd2cSJim Jagielski |*
144*b1cdbd2cSJim Jagielski \************************************************************************/
145*b1cdbd2cSJim Jagielski 
Construct(DrawDocShell *)146*b1cdbd2cSJim Jagielski void OutlineViewShell::Construct(DrawDocShell* )
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski 	sal_Bool bModified = GetDoc()->IsChanged();
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski     meShellType = ST_OUTLINE;
151*b1cdbd2cSJim Jagielski 	Size aSize(29700, 21000);
152*b1cdbd2cSJim Jagielski 	Point aWinPos (0, 0);
153*b1cdbd2cSJim Jagielski 	Point aViewOrigin(0, 0);
154*b1cdbd2cSJim Jagielski 	GetActiveWindow()->SetMinZoomAutoCalc(sal_False);
155*b1cdbd2cSJim Jagielski 	GetActiveWindow()->SetMinZoom( MIN_ZOOM );
156*b1cdbd2cSJim Jagielski 	GetActiveWindow()->SetMaxZoom( MAX_ZOOM );
157*b1cdbd2cSJim Jagielski 	InitWindows(aViewOrigin, aSize, aWinPos);
158*b1cdbd2cSJim Jagielski 	pOlView = new OutlineView(GetDocSh(), GetActiveWindow(), this);
159*b1cdbd2cSJim Jagielski 	mpView = pOlView;			 // Pointer der Basisklasse ViewShell
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 	SetPool( &GetDoc()->GetPool() );
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 	SetZoom(69);
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski 	// Einstellungen der FrameView uebernehmen
166*b1cdbd2cSJim Jagielski 	ReadFrameViewData(mpFrameView);
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 	::Outliner* pOutl = pOlView->GetOutliner();
169*b1cdbd2cSJim Jagielski 	pOutl->SetUpdateMode(sal_True);
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski 	if (!bModified)
172*b1cdbd2cSJim Jagielski 	{
173*b1cdbd2cSJim Jagielski 		pOutl->ClearModifyFlag();
174*b1cdbd2cSJim Jagielski 	}
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 	pLastPage = GetActualPage();
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 	String aName( RTL_CONSTASCII_USTRINGPARAM( "OutlineViewShell" ));
179*b1cdbd2cSJim Jagielski 	SetName (aName);
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski 	SetHelpId( SD_IF_SDOUTLINEVIEWSHELL );
182*b1cdbd2cSJim Jagielski 	GetActiveWindow()->SetHelpId( HID_SDOUTLINEVIEWSHELL );
183*b1cdbd2cSJim Jagielski 	GetActiveWindow()->SetUniqueId( HID_SDOUTLINEVIEWSHELL );
184*b1cdbd2cSJim Jagielski }
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 
CreateSubController(void)189*b1cdbd2cSJim Jagielski Reference<drawing::XDrawSubController> OutlineViewShell::CreateSubController (void)
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski     Reference<drawing::XDrawSubController> xSubController;
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski     if (IsMainViewShell())
194*b1cdbd2cSJim Jagielski     {
195*b1cdbd2cSJim Jagielski         // Create uno sub controller for the main view shell.
196*b1cdbd2cSJim Jagielski         xSubController = Reference<drawing::XDrawSubController>(
197*b1cdbd2cSJim Jagielski             new SdUnoOutlineView (
198*b1cdbd2cSJim Jagielski                 GetViewShellBase().GetDrawController(),
199*b1cdbd2cSJim Jagielski                 *this,
200*b1cdbd2cSJim Jagielski                 *GetView()));
201*b1cdbd2cSJim Jagielski     }
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski     return xSubController;
204*b1cdbd2cSJim Jagielski }
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski /*************************************************************************
210*b1cdbd2cSJim Jagielski |*
211*b1cdbd2cSJim Jagielski |* Standard-Konstruktor, Fenster duerfen nicht automatisch zentrieren
212*b1cdbd2cSJim Jagielski |*
213*b1cdbd2cSJim Jagielski \************************************************************************/
214*b1cdbd2cSJim Jagielski 
OutlineViewShell(SfxViewFrame * pFrame,ViewShellBase & rViewShellBase,::Window * pParentWindow,FrameView * pFrameViewArgument)215*b1cdbd2cSJim Jagielski OutlineViewShell::OutlineViewShell (
216*b1cdbd2cSJim Jagielski     SfxViewFrame* pFrame,
217*b1cdbd2cSJim Jagielski     ViewShellBase& rViewShellBase,
218*b1cdbd2cSJim Jagielski     ::Window* pParentWindow,
219*b1cdbd2cSJim Jagielski     FrameView* pFrameViewArgument)
220*b1cdbd2cSJim Jagielski     : ViewShell(pFrame, pParentWindow, rViewShellBase),
221*b1cdbd2cSJim Jagielski       pOlView(NULL),
222*b1cdbd2cSJim Jagielski       pLastPage( NULL ),
223*b1cdbd2cSJim Jagielski       pClipEvtLstnr(NULL),
224*b1cdbd2cSJim Jagielski       bPastePossible(false),
225*b1cdbd2cSJim Jagielski       mbInitialized(false)
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski {
228*b1cdbd2cSJim Jagielski 	if (pFrameViewArgument != NULL)
229*b1cdbd2cSJim Jagielski 		mpFrameView = pFrameViewArgument;
230*b1cdbd2cSJim Jagielski 	else
231*b1cdbd2cSJim Jagielski         mpFrameView = new FrameView(GetDoc());
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski 	mpFrameView->Connect();
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 	Construct(GetDocSh());
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski     SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_OutlineText));
238*b1cdbd2cSJim Jagielski 	m_StrOldPageName.EmptyString();
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski /*************************************************************************
242*b1cdbd2cSJim Jagielski |*
243*b1cdbd2cSJim Jagielski |* Destruktor
244*b1cdbd2cSJim Jagielski |*
245*b1cdbd2cSJim Jagielski \************************************************************************/
246*b1cdbd2cSJim Jagielski 
~OutlineViewShell()247*b1cdbd2cSJim Jagielski OutlineViewShell::~OutlineViewShell()
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski 	DisposeFunctions();
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 	delete pOlView;
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski 	mpFrameView->Disconnect();
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 	if ( pClipEvtLstnr )
256*b1cdbd2cSJim Jagielski 	{
257*b1cdbd2cSJim Jagielski 		pClipEvtLstnr->AddRemoveListener( GetActiveWindow(), sal_False );
258*b1cdbd2cSJim Jagielski 		pClipEvtLstnr->ClearCallbackLink();		// #103849# prevent callback if another thread is waiting
259*b1cdbd2cSJim Jagielski 		pClipEvtLstnr->release();
260*b1cdbd2cSJim Jagielski 	}
261*b1cdbd2cSJim Jagielski }
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 
Shutdown(void)266*b1cdbd2cSJim Jagielski void OutlineViewShell::Shutdown (void)
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski     ViewShell::Shutdown();
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski     PrepareClose();
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski /*************************************************************************
277*b1cdbd2cSJim Jagielski |*
278*b1cdbd2cSJim Jagielski |* Paint-Methode: das Ereignis wird vom Fenster pWindow an
279*b1cdbd2cSJim Jagielski |* die Viewshell und die aktuelle Funktion weitergeleitet
280*b1cdbd2cSJim Jagielski |*
281*b1cdbd2cSJim Jagielski \************************************************************************/
282*b1cdbd2cSJim Jagielski 
Paint(const Rectangle & rRect,::sd::Window * pWin)283*b1cdbd2cSJim Jagielski void OutlineViewShell::Paint(const Rectangle& rRect, ::sd::Window* pWin)
284*b1cdbd2cSJim Jagielski {
285*b1cdbd2cSJim Jagielski 	if (pOlView)
286*b1cdbd2cSJim Jagielski 	{
287*b1cdbd2cSJim Jagielski 		pOlView->Paint(rRect, pWin);
288*b1cdbd2cSJim Jagielski 	}
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 	if(HasCurrentFunction())
291*b1cdbd2cSJim Jagielski 	{
292*b1cdbd2cSJim Jagielski 		GetCurrentFunction()->Paint(rRect, pWin);
293*b1cdbd2cSJim Jagielski 	}
294*b1cdbd2cSJim Jagielski }
295*b1cdbd2cSJim Jagielski 
ArrangeGUIElements()296*b1cdbd2cSJim Jagielski void OutlineViewShell::ArrangeGUIElements ()
297*b1cdbd2cSJim Jagielski {
298*b1cdbd2cSJim Jagielski     // Retrieve the current size (thickness) of the scroll bars.  That is
299*b1cdbd2cSJim Jagielski     // the width of the vertical and the height of the horizontal scroll
300*b1cdbd2cSJim Jagielski     // bar.
301*b1cdbd2cSJim Jagielski     int nScrollBarSize =
302*b1cdbd2cSJim Jagielski         GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize();
303*b1cdbd2cSJim Jagielski 	maScrBarWH = Size (nScrollBarSize, nScrollBarSize);
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski 	ViewShell::ArrangeGUIElements ();
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski     ::sd::Window* pWindow = mpContentWindow.get();
308*b1cdbd2cSJim Jagielski     if (pWindow != NULL)
309*b1cdbd2cSJim Jagielski     {
310*b1cdbd2cSJim Jagielski         pWindow->SetMinZoomAutoCalc(sal_False);
311*b1cdbd2cSJim Jagielski 
312*b1cdbd2cSJim Jagielski         // pWindow->SetPosSizePixel(rNewPos, Size(nSizeX, nSizeY));
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski         // OutputArea der OutlinerView aendern
315*b1cdbd2cSJim Jagielski         OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWindow);
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski         Rectangle aWin(Point(0,0), pWindow->GetOutputSizePixel());
318*b1cdbd2cSJim Jagielski //		aWin.nLeft = pOlView->GetPageNumberWidthPixel();
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski         aWin = pWindow->PixelToLogic(aWin);
321*b1cdbd2cSJim Jagielski         pOutlinerView->SetOutputArea(aWin);
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski         Rectangle aVis = pOutlinerView->GetVisArea();
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski         Rectangle aText = Rectangle(Point(0,0),
326*b1cdbd2cSJim Jagielski             Size(pOlView->GetPaperWidth(),
327*b1cdbd2cSJim Jagielski                 pOlView->GetOutliner()->GetTextHeight()));
328*b1cdbd2cSJim Jagielski         aText.Bottom() += aWin.GetHeight();
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski         if (!aWin.IsEmpty())			// nicht beim Oeffnen
331*b1cdbd2cSJim Jagielski         {
332*b1cdbd2cSJim Jagielski             InitWindows(Point(0,0), aText.GetSize(), Point(aVis.TopLeft()));
333*b1cdbd2cSJim Jagielski             UpdateScrollBars();
334*b1cdbd2cSJim Jagielski         }
335*b1cdbd2cSJim Jagielski     }
336*b1cdbd2cSJim Jagielski }
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski /*************************************************************************
339*b1cdbd2cSJim Jagielski |*
340*b1cdbd2cSJim Jagielski |* SfxRequests fuer Controller bearbeiten
341*b1cdbd2cSJim Jagielski |*
342*b1cdbd2cSJim Jagielski \************************************************************************/
343*b1cdbd2cSJim Jagielski 
ExecCtrl(SfxRequest & rReq)344*b1cdbd2cSJim Jagielski void OutlineViewShell::ExecCtrl(SfxRequest &rReq)
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski 	sal_uInt16 nSlot = rReq.GetSlot();
347*b1cdbd2cSJim Jagielski 	switch ( nSlot )
348*b1cdbd2cSJim Jagielski 	{
349*b1cdbd2cSJim Jagielski 		case SID_MAIL_SCROLLBODY_PAGEDOWN:
350*b1cdbd2cSJim Jagielski 		{
351*b1cdbd2cSJim Jagielski             ExecReq( rReq );
352*b1cdbd2cSJim Jagielski 			break;
353*b1cdbd2cSJim Jagielski 		}
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 		case SID_OPT_LOCALE_CHANGED:
356*b1cdbd2cSJim Jagielski 		{
357*b1cdbd2cSJim Jagielski 			pOlView->GetOutliner()->UpdateFields();
358*b1cdbd2cSJim Jagielski 			UpdatePreview( GetActualPage() );
359*b1cdbd2cSJim Jagielski 			rReq.Done();
360*b1cdbd2cSJim Jagielski             break;
361*b1cdbd2cSJim Jagielski 		}
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski 		default:
364*b1cdbd2cSJim Jagielski 		break;
365*b1cdbd2cSJim Jagielski 	}
366*b1cdbd2cSJim Jagielski }
367*b1cdbd2cSJim Jagielski 
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski 
AddWindow(::sd::Window * pWin)371*b1cdbd2cSJim Jagielski void OutlineViewShell::AddWindow (::sd::Window* pWin)
372*b1cdbd2cSJim Jagielski {
373*b1cdbd2cSJim Jagielski     pOlView->AddWindowToPaintView(pWin);
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 
RemoveWindow(::sd::Window * pWin)379*b1cdbd2cSJim Jagielski void OutlineViewShell::RemoveWindow (::sd::Window* pWin)
380*b1cdbd2cSJim Jagielski {
381*b1cdbd2cSJim Jagielski     pOlView->DeleteWindowFromPaintView(pWin);
382*b1cdbd2cSJim Jagielski }
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski /*************************************************************************
388*b1cdbd2cSJim Jagielski |*
389*b1cdbd2cSJim Jagielski |* Activate(), beim ersten Aufruf erfolgt ein Update der Felder
390*b1cdbd2cSJim Jagielski |*
391*b1cdbd2cSJim Jagielski \************************************************************************/
Activate(sal_Bool bIsMDIActivate)392*b1cdbd2cSJim Jagielski void OutlineViewShell::Activate( sal_Bool bIsMDIActivate )
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski     if ( ! mbInitialized)
395*b1cdbd2cSJim Jagielski     {
396*b1cdbd2cSJim Jagielski         mbInitialized = true;
397*b1cdbd2cSJim Jagielski     	SfxRequest aRequest (SID_EDIT_OUTLINER, 0, GetDoc()->GetItemPool());
398*b1cdbd2cSJim Jagielski         FuPermanent (aRequest);
399*b1cdbd2cSJim Jagielski     }
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski     ViewShell::Activate( bIsMDIActivate );
402*b1cdbd2cSJim Jagielski     SfxShell::BroadcastContextForActivation(true);
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski     pOlView->SetLinks();
405*b1cdbd2cSJim Jagielski     pOlView->ConnectToApplication();
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski     if( bIsMDIActivate )
408*b1cdbd2cSJim Jagielski     {
409*b1cdbd2cSJim Jagielski         OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
410*b1cdbd2cSJim Jagielski         ::Outliner* pOutl = pOutlinerView->GetOutliner();
411*b1cdbd2cSJim Jagielski         pOutl->UpdateFields();
412*b1cdbd2cSJim Jagielski     }
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski 
415*b1cdbd2cSJim Jagielski /*************************************************************************
416*b1cdbd2cSJim Jagielski |*
417*b1cdbd2cSJim Jagielski |* Deactivate()
418*b1cdbd2cSJim Jagielski |*
419*b1cdbd2cSJim Jagielski \************************************************************************/
Deactivate(sal_Bool bIsMDIActivate)420*b1cdbd2cSJim Jagielski void OutlineViewShell::Deactivate( sal_Bool bIsMDIActivate )
421*b1cdbd2cSJim Jagielski {
422*b1cdbd2cSJim Jagielski     pOlView->DisconnectFromApplication();
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski     // #96416# Links must be kept also on deactivated viewshell, to allow drag'n'drop
425*b1cdbd2cSJim Jagielski     // to function properly
426*b1cdbd2cSJim Jagielski     // pOlView->ResetLinks();
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski     ViewShell::Deactivate( bIsMDIActivate );
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski 
431*b1cdbd2cSJim Jagielski /*************************************************************************
432*b1cdbd2cSJim Jagielski |*
433*b1cdbd2cSJim Jagielski |* Status von Controller-SfxSlots setzen
434*b1cdbd2cSJim Jagielski |*
435*b1cdbd2cSJim Jagielski \************************************************************************/
GetCtrlState(SfxItemSet & rSet)436*b1cdbd2cSJim Jagielski void OutlineViewShell::GetCtrlState(SfxItemSet &rSet)
437*b1cdbd2cSJim Jagielski {
438*b1cdbd2cSJim Jagielski 	if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_HYPERLINK_GETLINK))
439*b1cdbd2cSJim Jagielski 	{
440*b1cdbd2cSJim Jagielski 		SvxHyperlinkItem aHLinkItem;
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski 		OutlinerView* pOLV = pOlView->GetViewByWindow(GetActiveWindow());
443*b1cdbd2cSJim Jagielski 		if (pOLV)
444*b1cdbd2cSJim Jagielski 		{
445*b1cdbd2cSJim Jagielski 			const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
446*b1cdbd2cSJim Jagielski 			if (pFieldItem)
447*b1cdbd2cSJim Jagielski 			{
448*b1cdbd2cSJim Jagielski                 ESelection aSel = pOLV->GetSelection();
449*b1cdbd2cSJim Jagielski                 if ( abs( aSel.nEndPos - aSel.nStartPos ) == 1 )
450*b1cdbd2cSJim Jagielski                 {
451*b1cdbd2cSJim Jagielski 				    const SvxFieldData* pField = pFieldItem->GetField();
452*b1cdbd2cSJim Jagielski 				    if ( pField->ISA(SvxURLField) )
453*b1cdbd2cSJim Jagielski 				    {
454*b1cdbd2cSJim Jagielski 					    aHLinkItem.SetName(((const SvxURLField*) pField)->GetRepresentation());
455*b1cdbd2cSJim Jagielski 					    aHLinkItem.SetURL(((const SvxURLField*) pField)->GetURL());
456*b1cdbd2cSJim Jagielski 					    aHLinkItem.SetTargetFrame(((const SvxURLField*) pField)->GetTargetFrame());
457*b1cdbd2cSJim Jagielski 				    }
458*b1cdbd2cSJim Jagielski                 }
459*b1cdbd2cSJim Jagielski 			}
460*b1cdbd2cSJim Jagielski 		}
461*b1cdbd2cSJim Jagielski 		rSet.Put(aHLinkItem);
462*b1cdbd2cSJim Jagielski 	}
463*b1cdbd2cSJim Jagielski     rSet.Put( SfxBoolItem( SID_READONLY_MODE, GetDocSh()->IsReadOnly() ) );
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_MAIL_SCROLLBODY_PAGEDOWN) )
466*b1cdbd2cSJim Jagielski 		rSet.Put( SfxBoolItem( SID_MAIL_SCROLLBODY_PAGEDOWN, sal_True ) );
467*b1cdbd2cSJim Jagielski 
468*b1cdbd2cSJim Jagielski 	if ( SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_HALFWIDTH) ||
469*b1cdbd2cSJim Jagielski 		 SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_FULLWIDTH) ||
470*b1cdbd2cSJim Jagielski 		 SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_HIRAGANA) ||
471*b1cdbd2cSJim Jagielski 		 SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_KATAGANA) )
472*b1cdbd2cSJim Jagielski 	{
473*b1cdbd2cSJim Jagielski         SvtCJKOptions aCJKOptions;
474*b1cdbd2cSJim Jagielski 		if( !aCJKOptions.IsChangeCaseMapEnabled() )
475*b1cdbd2cSJim Jagielski 		{
476*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, sal_False );
477*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, sal_False );
478*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, sal_False );
479*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, sal_False );
480*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH );
481*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_TRANSLITERATE_FULLWIDTH );
482*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_TRANSLITERATE_HIRAGANA );
483*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_TRANSLITERATE_KATAGANA );
484*b1cdbd2cSJim Jagielski 		}
485*b1cdbd2cSJim Jagielski         else
486*b1cdbd2cSJim Jagielski         {
487*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, sal_True );
488*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, sal_True );
489*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, sal_True );
490*b1cdbd2cSJim Jagielski             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, sal_True );
491*b1cdbd2cSJim Jagielski         }
492*b1cdbd2cSJim Jagielski 	}
493*b1cdbd2cSJim Jagielski }
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski /*************************************************************************
496*b1cdbd2cSJim Jagielski |*
497*b1cdbd2cSJim Jagielski |* SfxRequests fuer Support-Funktionen
498*b1cdbd2cSJim Jagielski |*
499*b1cdbd2cSJim Jagielski \************************************************************************/
500*b1cdbd2cSJim Jagielski 
FuSupport(SfxRequest & rReq)501*b1cdbd2cSJim Jagielski void OutlineViewShell::FuSupport(SfxRequest &rReq)
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski 	if( rReq.GetSlot() == SID_STYLE_FAMILY && rReq.GetArgs())
504*b1cdbd2cSJim Jagielski 		GetDocSh()->SetStyleFamily(((SfxUInt16Item&)rReq.GetArgs()->Get( SID_STYLE_FAMILY )).GetValue());
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 	sal_Bool bPreviewState = sal_False;
507*b1cdbd2cSJim Jagielski 	sal_uLong nSlot = rReq.GetSlot();
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski 	std::auto_ptr< OutlineViewModelChangeGuard > aGuard;
510*b1cdbd2cSJim Jagielski 	if( pOlView && (
511*b1cdbd2cSJim Jagielski         (nSlot == SID_TRANSLITERATE_SENTENCE_CASE) ||
512*b1cdbd2cSJim Jagielski         (nSlot == SID_TRANSLITERATE_TITLE_CASE) ||
513*b1cdbd2cSJim Jagielski         (nSlot == SID_TRANSLITERATE_TOGGLE_CASE) ||
514*b1cdbd2cSJim Jagielski 		(nSlot == SID_TRANSLITERATE_UPPER) ||
515*b1cdbd2cSJim Jagielski 		(nSlot == SID_TRANSLITERATE_LOWER) ||
516*b1cdbd2cSJim Jagielski 		(nSlot == SID_TRANSLITERATE_HALFWIDTH) ||
517*b1cdbd2cSJim Jagielski 		(nSlot == SID_TRANSLITERATE_FULLWIDTH) ||
518*b1cdbd2cSJim Jagielski 		(nSlot == SID_TRANSLITERATE_HIRAGANA) ||
519*b1cdbd2cSJim Jagielski 		(nSlot == SID_TRANSLITERATE_KATAGANA) ||
520*b1cdbd2cSJim Jagielski 		(nSlot == SID_CUT) ||
521*b1cdbd2cSJim Jagielski //		(nSlot == SID_COPY) ||
522*b1cdbd2cSJim Jagielski 		(nSlot == SID_PASTE) ||
523*b1cdbd2cSJim Jagielski 		(nSlot == SID_DELETE)))
524*b1cdbd2cSJim Jagielski 	{
525*b1cdbd2cSJim Jagielski 		aGuard.reset( new OutlineViewModelChangeGuard( *pOlView ) );
526*b1cdbd2cSJim Jagielski 	}
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski 	switch ( nSlot )
529*b1cdbd2cSJim Jagielski 	{
530*b1cdbd2cSJim Jagielski 		case SID_CUT:
531*b1cdbd2cSJim Jagielski 		{
532*b1cdbd2cSJim Jagielski 			if(HasCurrentFunction())
533*b1cdbd2cSJim Jagielski 			{
534*b1cdbd2cSJim Jagielski 				GetCurrentFunction()->DoCut();
535*b1cdbd2cSJim Jagielski 			}
536*b1cdbd2cSJim Jagielski 			else if (pOlView)
537*b1cdbd2cSJim Jagielski 			{
538*b1cdbd2cSJim Jagielski 				pOlView->DoCut();
539*b1cdbd2cSJim Jagielski 			}
540*b1cdbd2cSJim Jagielski 			rReq.Done();
541*b1cdbd2cSJim Jagielski 			bPreviewState = sal_True;
542*b1cdbd2cSJim Jagielski 		}
543*b1cdbd2cSJim Jagielski 		break;
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski 		case SID_COPY:
546*b1cdbd2cSJim Jagielski 		{
547*b1cdbd2cSJim Jagielski 			if(HasCurrentFunction())
548*b1cdbd2cSJim Jagielski 			{
549*b1cdbd2cSJim Jagielski 				GetCurrentFunction()->DoCopy();
550*b1cdbd2cSJim Jagielski 			}
551*b1cdbd2cSJim Jagielski 			else if (pOlView)
552*b1cdbd2cSJim Jagielski 			{
553*b1cdbd2cSJim Jagielski 				pOlView->DoCopy();
554*b1cdbd2cSJim Jagielski 			}
555*b1cdbd2cSJim Jagielski 			rReq.Done();
556*b1cdbd2cSJim Jagielski 			bPreviewState = sal_True;
557*b1cdbd2cSJim Jagielski 		}
558*b1cdbd2cSJim Jagielski 		break;
559*b1cdbd2cSJim Jagielski 
560*b1cdbd2cSJim Jagielski 		case SID_PASTE:
561*b1cdbd2cSJim Jagielski 		{
562*b1cdbd2cSJim Jagielski             OutlineViewPageChangesGuard aGuard2(pOlView);
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski 			if(HasCurrentFunction())
565*b1cdbd2cSJim Jagielski 			{
566*b1cdbd2cSJim Jagielski 				GetCurrentFunction()->DoPaste();
567*b1cdbd2cSJim Jagielski 			}
568*b1cdbd2cSJim Jagielski 			else if (pOlView)
569*b1cdbd2cSJim Jagielski 			{
570*b1cdbd2cSJim Jagielski 				pOlView->DoPaste();
571*b1cdbd2cSJim Jagielski 			}
572*b1cdbd2cSJim Jagielski 			rReq.Done();
573*b1cdbd2cSJim Jagielski 			bPreviewState = sal_True;
574*b1cdbd2cSJim Jagielski 		}
575*b1cdbd2cSJim Jagielski 		break;
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski 		case SID_DELETE:
578*b1cdbd2cSJim Jagielski 		{
579*b1cdbd2cSJim Jagielski 			if( pOlView )
580*b1cdbd2cSJim Jagielski 			{
581*b1cdbd2cSJim Jagielski 				OutlinerView* pOutlView = pOlView->GetViewByWindow(GetActiveWindow());
582*b1cdbd2cSJim Jagielski 				if (pOutlView)
583*b1cdbd2cSJim Jagielski 				{
584*b1cdbd2cSJim Jagielski 					OutlineViewPageChangesGuard aGuard2(pOlView);
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski 					KeyCode  aKCode(KEY_DELETE);
587*b1cdbd2cSJim Jagielski 					KeyEvent aKEvt( 0, aKCode );
588*b1cdbd2cSJim Jagielski 					pOutlView->PostKeyEvent(aKEvt);
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski 					FunctionReference xFunc( GetCurrentFunction() );
591*b1cdbd2cSJim Jagielski 					FuOutlineText* pFuOutlineText = dynamic_cast< FuOutlineText* >( xFunc.get() );
592*b1cdbd2cSJim Jagielski                     if( pFuOutlineText )
593*b1cdbd2cSJim Jagielski                         pFuOutlineText->UpdateForKeyPress (aKEvt);
594*b1cdbd2cSJim Jagielski 				}
595*b1cdbd2cSJim Jagielski 			}
596*b1cdbd2cSJim Jagielski 			rReq.Done();
597*b1cdbd2cSJim Jagielski 			bPreviewState = sal_True;
598*b1cdbd2cSJim Jagielski 		}
599*b1cdbd2cSJim Jagielski 		break;
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski 		case SID_DRAWINGMODE:
602*b1cdbd2cSJim Jagielski 		case SID_NOTESMODE:
603*b1cdbd2cSJim Jagielski 		case SID_HANDOUTMODE:
604*b1cdbd2cSJim Jagielski 		case SID_DIAMODE:
605*b1cdbd2cSJim Jagielski 		case SID_OUTLINEMODE:
606*b1cdbd2cSJim Jagielski             framework::FrameworkHelper::Instance(GetViewShellBase())->HandleModeChangeSlot(
607*b1cdbd2cSJim Jagielski                 nSlot,
608*b1cdbd2cSJim Jagielski                 rReq);
609*b1cdbd2cSJim Jagielski 			rReq.Done();
610*b1cdbd2cSJim Jagielski 			break;
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski 		case SID_RULER:
613*b1cdbd2cSJim Jagielski 			SetRuler( !HasRuler() );
614*b1cdbd2cSJim Jagielski 			Invalidate( SID_RULER );
615*b1cdbd2cSJim Jagielski 			rReq.Done();
616*b1cdbd2cSJim Jagielski 		break;
617*b1cdbd2cSJim Jagielski 
618*b1cdbd2cSJim Jagielski 		case SID_ZOOM_PREV:
619*b1cdbd2cSJim Jagielski 		{
620*b1cdbd2cSJim Jagielski 			if (mpZoomList->IsPreviousPossible())
621*b1cdbd2cSJim Jagielski 			{
622*b1cdbd2cSJim Jagielski 				// Vorheriges ZoomRect einstellen
623*b1cdbd2cSJim Jagielski 				SetZoomRect(mpZoomList->GetPreviousZoomRect());
624*b1cdbd2cSJim Jagielski 			}
625*b1cdbd2cSJim Jagielski 			rReq.Done ();
626*b1cdbd2cSJim Jagielski 		}
627*b1cdbd2cSJim Jagielski 		break;
628*b1cdbd2cSJim Jagielski 
629*b1cdbd2cSJim Jagielski 		case SID_ZOOM_NEXT:
630*b1cdbd2cSJim Jagielski 		{
631*b1cdbd2cSJim Jagielski 			if (mpZoomList->IsNextPossible())
632*b1cdbd2cSJim Jagielski 			{
633*b1cdbd2cSJim Jagielski 				// Naechstes ZoomRect einstellen
634*b1cdbd2cSJim Jagielski 				SetZoomRect(mpZoomList->GetNextZoomRect());
635*b1cdbd2cSJim Jagielski 			}
636*b1cdbd2cSJim Jagielski 			rReq.Done ();
637*b1cdbd2cSJim Jagielski 		}
638*b1cdbd2cSJim Jagielski 		break;
639*b1cdbd2cSJim Jagielski 
640*b1cdbd2cSJim Jagielski 		case SID_AUTOSPELL_CHECK:
641*b1cdbd2cSJim Jagielski 		{
642*b1cdbd2cSJim Jagielski 			GetDoc()->SetOnlineSpell(!GetDoc()->GetOnlineSpell());
643*b1cdbd2cSJim Jagielski 			rReq.Done ();
644*b1cdbd2cSJim Jagielski 		}
645*b1cdbd2cSJim Jagielski 		break;
646*b1cdbd2cSJim Jagielski 
647*b1cdbd2cSJim Jagielski         case SID_TRANSLITERATE_SENTENCE_CASE:
648*b1cdbd2cSJim Jagielski         case SID_TRANSLITERATE_TITLE_CASE:
649*b1cdbd2cSJim Jagielski         case SID_TRANSLITERATE_TOGGLE_CASE:
650*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_UPPER:
651*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_LOWER:
652*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_HALFWIDTH:
653*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_FULLWIDTH:
654*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_HIRAGANA:
655*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_KATAGANA:
656*b1cdbd2cSJim Jagielski 		{
657*b1cdbd2cSJim Jagielski 			OutlinerView* pOLV = pOlView->GetViewByWindow( GetActiveWindow() );
658*b1cdbd2cSJim Jagielski 			if( pOLV )
659*b1cdbd2cSJim Jagielski 			{
660*b1cdbd2cSJim Jagielski 				using namespace ::com::sun::star::i18n;
661*b1cdbd2cSJim Jagielski 				sal_Int32 nType = 0;
662*b1cdbd2cSJim Jagielski 
663*b1cdbd2cSJim Jagielski 				switch( nSlot )
664*b1cdbd2cSJim Jagielski 				{
665*b1cdbd2cSJim Jagielski                     case SID_TRANSLITERATE_SENTENCE_CASE:
666*b1cdbd2cSJim Jagielski                         nType = TransliterationModulesExtra::SENTENCE_CASE;
667*b1cdbd2cSJim Jagielski                         break;
668*b1cdbd2cSJim Jagielski                     case SID_TRANSLITERATE_TITLE_CASE:
669*b1cdbd2cSJim Jagielski                         nType = TransliterationModulesExtra::TITLE_CASE;
670*b1cdbd2cSJim Jagielski                         break;
671*b1cdbd2cSJim Jagielski                     case SID_TRANSLITERATE_TOGGLE_CASE:
672*b1cdbd2cSJim Jagielski                         nType = TransliterationModulesExtra::TOGGLE_CASE;
673*b1cdbd2cSJim Jagielski                         break;
674*b1cdbd2cSJim Jagielski                     case SID_TRANSLITERATE_UPPER:
675*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_LOWERCASE_UPPERCASE;
676*b1cdbd2cSJim Jagielski 						break;
677*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_LOWER:
678*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_UPPERCASE_LOWERCASE;
679*b1cdbd2cSJim Jagielski 						break;
680*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_HALFWIDTH:
681*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_FULLWIDTH_HALFWIDTH;
682*b1cdbd2cSJim Jagielski 						break;
683*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_FULLWIDTH:
684*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_HALFWIDTH_FULLWIDTH;
685*b1cdbd2cSJim Jagielski 						break;
686*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_HIRAGANA:
687*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_KATAKANA_HIRAGANA;
688*b1cdbd2cSJim Jagielski 						break;
689*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_KATAGANA:
690*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_HIRAGANA_KATAKANA;
691*b1cdbd2cSJim Jagielski 						break;
692*b1cdbd2cSJim Jagielski 				}
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski 				pOLV->TransliterateText( nType );
695*b1cdbd2cSJim Jagielski 			}
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski 			rReq.Done();
698*b1cdbd2cSJim Jagielski 			bPreviewState = sal_True;
699*b1cdbd2cSJim Jagielski 		}
700*b1cdbd2cSJim Jagielski 		break;
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski 		// #96090# added Undo/Redo handling
703*b1cdbd2cSJim Jagielski 		case SID_UNDO :
704*b1cdbd2cSJim Jagielski 		{
705*b1cdbd2cSJim Jagielski 			OutlineViewPageChangesGuard aGuard2(pOlView);
706*b1cdbd2cSJim Jagielski 			ImpSidUndo(sal_False, rReq);
707*b1cdbd2cSJim Jagielski 		}
708*b1cdbd2cSJim Jagielski 		break;
709*b1cdbd2cSJim Jagielski 		case SID_REDO :
710*b1cdbd2cSJim Jagielski 		{
711*b1cdbd2cSJim Jagielski 			OutlineViewPageChangesGuard aGuard2(pOlView);
712*b1cdbd2cSJim Jagielski 			ImpSidRedo(sal_False, rReq);
713*b1cdbd2cSJim Jagielski 		}
714*b1cdbd2cSJim Jagielski 		break;
715*b1cdbd2cSJim Jagielski 
716*b1cdbd2cSJim Jagielski 		default:
717*b1cdbd2cSJim Jagielski 		break;
718*b1cdbd2cSJim Jagielski 	}
719*b1cdbd2cSJim Jagielski 
720*b1cdbd2cSJim Jagielski 	if( bPreviewState )
721*b1cdbd2cSJim Jagielski 		Invalidate( SID_PREVIEW_STATE );
722*b1cdbd2cSJim Jagielski 
723*b1cdbd2cSJim Jagielski 	Invalidate(SID_CUT);
724*b1cdbd2cSJim Jagielski 	Invalidate(SID_COPY);
725*b1cdbd2cSJim Jagielski 	Invalidate(SID_PASTE);
726*b1cdbd2cSJim Jagielski }
727*b1cdbd2cSJim Jagielski 
728*b1cdbd2cSJim Jagielski /*************************************************************************
729*b1cdbd2cSJim Jagielski |*
730*b1cdbd2cSJim Jagielski |* SfxRequests fuer permanente Funktionen
731*b1cdbd2cSJim Jagielski |*
732*b1cdbd2cSJim Jagielski \************************************************************************/
733*b1cdbd2cSJim Jagielski 
FuPermanent(SfxRequest & rReq)734*b1cdbd2cSJim Jagielski void OutlineViewShell::FuPermanent(SfxRequest &rReq)
735*b1cdbd2cSJim Jagielski {
736*b1cdbd2cSJim Jagielski 	if(HasCurrentFunction())
737*b1cdbd2cSJim Jagielski 	{
738*b1cdbd2cSJim Jagielski 		DeactivateCurrentFunction(true);
739*b1cdbd2cSJim Jagielski 	}
740*b1cdbd2cSJim Jagielski 
741*b1cdbd2cSJim Jagielski 	switch ( rReq.GetSlot() )
742*b1cdbd2cSJim Jagielski 	{
743*b1cdbd2cSJim Jagielski 		case SID_EDIT_OUTLINER:
744*b1cdbd2cSJim Jagielski 		{
745*b1cdbd2cSJim Jagielski 			::Outliner* pOutl = pOlView->GetOutliner();
746*b1cdbd2cSJim Jagielski 			if( pOutl )
747*b1cdbd2cSJim Jagielski 			{
748*b1cdbd2cSJim Jagielski 				pOutl->GetUndoManager().Clear();
749*b1cdbd2cSJim Jagielski 				pOutl->UpdateFields();
750*b1cdbd2cSJim Jagielski 			}
751*b1cdbd2cSJim Jagielski 
752*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuOutlineText::Create(this,GetActiveWindow(),pOlView,GetDoc(),rReq) );
753*b1cdbd2cSJim Jagielski 
754*b1cdbd2cSJim Jagielski 			rReq.Done();
755*b1cdbd2cSJim Jagielski 		}
756*b1cdbd2cSJim Jagielski 		break;
757*b1cdbd2cSJim Jagielski 
758*b1cdbd2cSJim Jagielski 	  default:
759*b1cdbd2cSJim Jagielski 	  break;
760*b1cdbd2cSJim Jagielski 	}
761*b1cdbd2cSJim Jagielski 
762*b1cdbd2cSJim Jagielski 	if(HasOldFunction())
763*b1cdbd2cSJim Jagielski 	{
764*b1cdbd2cSJim Jagielski 		GetOldFunction()->Deactivate();
765*b1cdbd2cSJim Jagielski 		SetOldFunction(0);
766*b1cdbd2cSJim Jagielski 	}
767*b1cdbd2cSJim Jagielski 
768*b1cdbd2cSJim Jagielski 	if(HasCurrentFunction())
769*b1cdbd2cSJim Jagielski 	{
770*b1cdbd2cSJim Jagielski 		GetCurrentFunction()->Activate();
771*b1cdbd2cSJim Jagielski 		SetOldFunction(GetCurrentFunction());
772*b1cdbd2cSJim Jagielski 	}
773*b1cdbd2cSJim Jagielski }
774*b1cdbd2cSJim Jagielski 
775*b1cdbd2cSJim Jagielski 
IMPL_LINK(OutlineViewShell,ClipboardChanged,TransferableDataHelper *,pDataHelper)776*b1cdbd2cSJim Jagielski IMPL_LINK( OutlineViewShell, ClipboardChanged, TransferableDataHelper*, pDataHelper )
777*b1cdbd2cSJim Jagielski {
778*b1cdbd2cSJim Jagielski 	if ( pDataHelper )
779*b1cdbd2cSJim Jagielski 	{
780*b1cdbd2cSJim Jagielski 		bPastePossible = ( pDataHelper->GetFormatCount() != 0 &&
781*b1cdbd2cSJim Jagielski 							( pDataHelper->HasFormat( FORMAT_STRING ) ||
782*b1cdbd2cSJim Jagielski 							  pDataHelper->HasFormat( FORMAT_RTF ) ||
783*b1cdbd2cSJim Jagielski 							  pDataHelper->HasFormat( SOT_FORMATSTR_ID_HTML ) ) );
784*b1cdbd2cSJim Jagielski 
785*b1cdbd2cSJim Jagielski 		SfxBindings& rBindings = GetViewFrame()->GetBindings();
786*b1cdbd2cSJim Jagielski 		rBindings.Invalidate( SID_PASTE );
787*b1cdbd2cSJim Jagielski         rBindings.Invalidate( SID_PASTE_SPECIAL );
788*b1cdbd2cSJim Jagielski 		rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
789*b1cdbd2cSJim Jagielski 	}
790*b1cdbd2cSJim Jagielski 	return 0;
791*b1cdbd2cSJim Jagielski }
792*b1cdbd2cSJim Jagielski 
793*b1cdbd2cSJim Jagielski /*************************************************************************
794*b1cdbd2cSJim Jagielski |*
795*b1cdbd2cSJim Jagielski |* Status (Enabled/Disabled) von Menue-SfxSlots setzen
796*b1cdbd2cSJim Jagielski |*
797*b1cdbd2cSJim Jagielski \************************************************************************/
798*b1cdbd2cSJim Jagielski 
GetMenuState(SfxItemSet & rSet)799*b1cdbd2cSJim Jagielski void OutlineViewShell::GetMenuState( SfxItemSet &rSet )
800*b1cdbd2cSJim Jagielski {
801*b1cdbd2cSJim Jagielski 	ViewShell::GetMenuState(rSet);
802*b1cdbd2cSJim Jagielski 
803*b1cdbd2cSJim Jagielski 	// Vorlagenkatalog darf nicht aufgerufen werden
804*b1cdbd2cSJim Jagielski 	rSet.DisableItem( SID_STYLE_CATALOG );
805*b1cdbd2cSJim Jagielski 
806*b1cdbd2cSJim Jagielski 	rSet.Put(SfxBoolItem(SID_DIAMODE, sal_False));
807*b1cdbd2cSJim Jagielski 	rSet.Put(SfxBoolItem(SID_DRAWINGMODE, sal_False));
808*b1cdbd2cSJim Jagielski 	rSet.Put(SfxBoolItem(SID_OUTLINEMODE, sal_True));
809*b1cdbd2cSJim Jagielski 	rSet.Put(SfxBoolItem(SID_NOTESMODE, sal_False));
810*b1cdbd2cSJim Jagielski 	rSet.Put(SfxBoolItem(SID_HANDOUTMODE, sal_False));
811*b1cdbd2cSJim Jagielski 
812*b1cdbd2cSJim Jagielski 	if (!mpZoomList->IsNextPossible())
813*b1cdbd2cSJim Jagielski 	{
814*b1cdbd2cSJim Jagielski 	   rSet.DisableItem(SID_ZOOM_NEXT);
815*b1cdbd2cSJim Jagielski 	}
816*b1cdbd2cSJim Jagielski 	if (!mpZoomList->IsPreviousPossible())
817*b1cdbd2cSJim Jagielski 	{
818*b1cdbd2cSJim Jagielski 	   rSet.DisableItem(SID_ZOOM_PREV);
819*b1cdbd2cSJim Jagielski 	}
820*b1cdbd2cSJim Jagielski 
821*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_IN ) ||
822*b1cdbd2cSJim Jagielski 		SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_OUT ) )
823*b1cdbd2cSJim Jagielski 	{
824*b1cdbd2cSJim Jagielski 		if( GetActiveWindow()->GetZoom() <= GetActiveWindow()->GetMinZoom() || GetDocSh()->IsUIActive() )
825*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_ZOOM_IN );
826*b1cdbd2cSJim Jagielski 		if( GetActiveWindow()->GetZoom() >= GetActiveWindow()->GetMaxZoom() || GetDocSh()->IsUIActive() )
827*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_ZOOM_OUT );
828*b1cdbd2cSJim Jagielski 	}
829*b1cdbd2cSJim Jagielski 
830*b1cdbd2cSJim Jagielski 	::Outliner* pOutl = pOlView->GetOutliner();
831*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pOutl, "OutlineViewShell::GetMenuState(), no outliner? Fatality!");
832*b1cdbd2cSJim Jagielski 	if( !pOutl )
833*b1cdbd2cSJim Jagielski 		return;
834*b1cdbd2cSJim Jagielski 
835*b1cdbd2cSJim Jagielski 	// 'Alles auswaehlen' zulassen?
836*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SELECTALL ) )
837*b1cdbd2cSJim Jagielski 	{
838*b1cdbd2cSJim Jagielski 		sal_uLong nParaCount = pOutl->GetParagraphCount();
839*b1cdbd2cSJim Jagielski 		sal_Bool bDisable = nParaCount == 0;
840*b1cdbd2cSJim Jagielski 		if (!bDisable && nParaCount == 1)
841*b1cdbd2cSJim Jagielski 		{
842*b1cdbd2cSJim Jagielski 			String aTest( pOutl->GetText( pOutl->GetParagraph( 0 ) ) );
843*b1cdbd2cSJim Jagielski 			if (aTest.Len() == 0)
844*b1cdbd2cSJim Jagielski 			{
845*b1cdbd2cSJim Jagielski 				bDisable = sal_True;
846*b1cdbd2cSJim Jagielski 			}
847*b1cdbd2cSJim Jagielski 		}
848*b1cdbd2cSJim Jagielski 		if (bDisable)
849*b1cdbd2cSJim Jagielski 			rSet.DisableItem(SID_SELECTALL);
850*b1cdbd2cSJim Jagielski 	}
851*b1cdbd2cSJim Jagielski 
852*b1cdbd2cSJim Jagielski 	// Status des Lineals setzen
853*b1cdbd2cSJim Jagielski 	rSet.Put( SfxBoolItem( SID_RULER, HasRuler() ) );
854*b1cdbd2cSJim Jagielski 
855*b1cdbd2cSJim Jagielski 	// Formatierung ein oder aus?
856*b1cdbd2cSJim Jagielski 	rSet.Put( SfxBoolItem( SID_OUTLINE_FORMAT, !pOutl->IsFlatMode() ) );
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski 	if( pOutl->IsFlatMode() )
859*b1cdbd2cSJim Jagielski 		rSet.DisableItem( SID_COLORVIEW );
860*b1cdbd2cSJim Jagielski 	else
861*b1cdbd2cSJim Jagielski 	{
862*b1cdbd2cSJim Jagielski 		// Farbansicht ein/aus
863*b1cdbd2cSJim Jagielski 		sal_uLong nCntrl = pOutl->GetControlWord();
864*b1cdbd2cSJim Jagielski 		sal_Bool bNoColor = sal_False;
865*b1cdbd2cSJim Jagielski 		if (nCntrl & EE_CNTRL_NOCOLORS)
866*b1cdbd2cSJim Jagielski 			bNoColor = sal_True;
867*b1cdbd2cSJim Jagielski 
868*b1cdbd2cSJim Jagielski 		rSet.Put( SfxBoolItem( SID_COLORVIEW, bNoColor ) );
869*b1cdbd2cSJim Jagielski 	}
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski 	// Buttons der Werkzeugleiste
872*b1cdbd2cSJim Jagielski 	// zunaechst selektionsabhaengige: COLLAPSE, EXPAND
873*b1cdbd2cSJim Jagielski 	sal_Bool bDisableCollapse = sal_True;
874*b1cdbd2cSJim Jagielski 	sal_Bool bDisableExpand   = sal_True;
875*b1cdbd2cSJim Jagielski 	sal_Bool bUnique		  = sal_True;
876*b1cdbd2cSJim Jagielski 	OutlinerView* pOutlinerView = pOlView->GetViewByWindow(GetActiveWindow());
877*b1cdbd2cSJim Jagielski 	List* pList = pOutlinerView->CreateSelectionList();
878*b1cdbd2cSJim Jagielski 	Paragraph* pPara = (Paragraph*)pList->First();
879*b1cdbd2cSJim Jagielski 
880*b1cdbd2cSJim Jagielski 	sal_Int16 nDepth;
881*b1cdbd2cSJim Jagielski 	sal_Int16 nTmpDepth = pOutl->GetDepth( (sal_uInt16) pOutl->GetAbsPos( pPara ) );
882*b1cdbd2cSJim Jagielski 	bool bPage = pOutl->HasParaFlag( pPara, PARAFLAG_ISPAGE );
883*b1cdbd2cSJim Jagielski 	while (pPara)
884*b1cdbd2cSJim Jagielski 	{
885*b1cdbd2cSJim Jagielski 		nDepth = pOutl->GetDepth( (sal_uInt16) pOutl->GetAbsPos( pPara ) );
886*b1cdbd2cSJim Jagielski 
887*b1cdbd2cSJim Jagielski 		if( nDepth != nTmpDepth )
888*b1cdbd2cSJim Jagielski 			bUnique = sal_False;
889*b1cdbd2cSJim Jagielski 		if( bPage != pOutl->HasParaFlag( pPara, PARAFLAG_ISPAGE ) )
890*b1cdbd2cSJim Jagielski 			bUnique = sal_False;
891*b1cdbd2cSJim Jagielski 		if (!pOutl->IsExpanded(pPara) && pOutl->HasChilds(pPara))
892*b1cdbd2cSJim Jagielski 			bDisableExpand = sal_False;
893*b1cdbd2cSJim Jagielski 		if (pOutl->IsExpanded(pPara) && pOutl->HasChilds(pPara))
894*b1cdbd2cSJim Jagielski 			bDisableCollapse = sal_False;
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski 		pPara = (Paragraph*)pList->Next();
897*b1cdbd2cSJim Jagielski 	}
898*b1cdbd2cSJim Jagielski 
899*b1cdbd2cSJim Jagielski 	delete pList;
900*b1cdbd2cSJim Jagielski 
901*b1cdbd2cSJim Jagielski 	if (bDisableExpand)
902*b1cdbd2cSJim Jagielski 		rSet.DisableItem(SID_OUTLINE_EXPAND);
903*b1cdbd2cSJim Jagielski 	if (bDisableCollapse)
904*b1cdbd2cSJim Jagielski 		rSet.DisableItem(SID_OUTLINE_COLLAPSE);
905*b1cdbd2cSJim Jagielski 
906*b1cdbd2cSJim Jagielski 	// ergibt die Selektion ein eindeutiges Praesentationslayout?
907*b1cdbd2cSJim Jagielski 	// wenn nicht, duerfen die Vorlagen nicht bearbeitet werden
908*b1cdbd2cSJim Jagielski 	SfxItemSet aSet(*rSet.GetPool(), SID_STATUS_LAYOUT, SID_STATUS_LAYOUT);
909*b1cdbd2cSJim Jagielski 	GetStatusBarState(aSet);
910*b1cdbd2cSJim Jagielski 	String aTest(((SfxStringItem&)aSet.Get(SID_STATUS_LAYOUT)).GetValue());
911*b1cdbd2cSJim Jagielski 	if (aTest.Len() == 0)
912*b1cdbd2cSJim Jagielski 	{
913*b1cdbd2cSJim Jagielski 		bUnique = sal_False;
914*b1cdbd2cSJim Jagielski 		rSet.DisableItem(SID_PRESENTATION_TEMPLATES);
915*b1cdbd2cSJim Jagielski 	}
916*b1cdbd2cSJim Jagielski 
917*b1cdbd2cSJim Jagielski 	if (!bUnique)
918*b1cdbd2cSJim Jagielski 		rSet.DisableItem( SID_PRESENTATIONOBJECT );
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 	// jetzt die selektionsunabhaengigen: COLLAPSE_ALL, EXPAND_ALL
921*b1cdbd2cSJim Jagielski 	sal_Bool bDisableCollapseAll = sal_True;
922*b1cdbd2cSJim Jagielski 	sal_Bool bDisableExpandAll	 = sal_True;
923*b1cdbd2cSJim Jagielski 
924*b1cdbd2cSJim Jagielski 	// wenn schon die Selektion etwas kollabierbares/expandierbares enthaelt
925*b1cdbd2cSJim Jagielski 	if (!bDisableCollapse)
926*b1cdbd2cSJim Jagielski 		bDisableCollapseAll = sal_False;
927*b1cdbd2cSJim Jagielski 	if (!bDisableExpand)
928*b1cdbd2cSJim Jagielski 		bDisableExpandAll = sal_False;
929*b1cdbd2cSJim Jagielski 
930*b1cdbd2cSJim Jagielski 	// schade, so billig kommen wir nicht davon; alle Absaetze durchsuchen
931*b1cdbd2cSJim Jagielski 	if (bDisableCollapseAll || bDisableExpandAll)
932*b1cdbd2cSJim Jagielski 	{
933*b1cdbd2cSJim Jagielski 		sal_uLong nParaPos = 0;
934*b1cdbd2cSJim Jagielski 		pPara = pOutl->GetParagraph( nParaPos );
935*b1cdbd2cSJim Jagielski 		while (pPara && (bDisableCollapseAll || bDisableExpandAll))
936*b1cdbd2cSJim Jagielski 		{
937*b1cdbd2cSJim Jagielski 			if (!pOutl->IsExpanded(pPara) && pOutl->HasChilds(pPara))
938*b1cdbd2cSJim Jagielski 				bDisableExpandAll = sal_False;
939*b1cdbd2cSJim Jagielski 
940*b1cdbd2cSJim Jagielski 			if (pOutl->IsExpanded(pPara) && pOutl->HasChilds(pPara))
941*b1cdbd2cSJim Jagielski 				bDisableCollapseAll = sal_False;
942*b1cdbd2cSJim Jagielski 
943*b1cdbd2cSJim Jagielski 			pPara = pOutl->GetParagraph( ++nParaPos );
944*b1cdbd2cSJim Jagielski 		}
945*b1cdbd2cSJim Jagielski 	}
946*b1cdbd2cSJim Jagielski 
947*b1cdbd2cSJim Jagielski 	if (bDisableExpandAll)
948*b1cdbd2cSJim Jagielski 		rSet.DisableItem(SID_OUTLINE_EXPAND_ALL);
949*b1cdbd2cSJim Jagielski 	if (bDisableCollapseAll)
950*b1cdbd2cSJim Jagielski 		rSet.DisableItem(SID_OUTLINE_COLLAPSE_ALL);
951*b1cdbd2cSJim Jagielski 
952*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PASTE ) )
953*b1cdbd2cSJim Jagielski 	{
954*b1cdbd2cSJim Jagielski 		if ( !pClipEvtLstnr )
955*b1cdbd2cSJim Jagielski 		{
956*b1cdbd2cSJim Jagielski 			// create listener
957*b1cdbd2cSJim Jagielski 			pClipEvtLstnr = new TransferableClipboardListener( LINK( this, OutlineViewShell, ClipboardChanged ) );
958*b1cdbd2cSJim Jagielski 			pClipEvtLstnr->acquire();
959*b1cdbd2cSJim Jagielski 			pClipEvtLstnr->AddRemoveListener( GetActiveWindow(), sal_True );
960*b1cdbd2cSJim Jagielski 
961*b1cdbd2cSJim Jagielski 			// get initial state
962*b1cdbd2cSJim Jagielski 			TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) );
963*b1cdbd2cSJim Jagielski 			bPastePossible = ( aDataHelper.GetFormatCount() != 0 &&
964*b1cdbd2cSJim Jagielski 								( aDataHelper.HasFormat( FORMAT_STRING ) ||
965*b1cdbd2cSJim Jagielski 								  aDataHelper.HasFormat( FORMAT_RTF ) ||
966*b1cdbd2cSJim Jagielski 								  aDataHelper.HasFormat( SOT_FORMATSTR_ID_HTML ) ) );
967*b1cdbd2cSJim Jagielski 		}
968*b1cdbd2cSJim Jagielski 
969*b1cdbd2cSJim Jagielski 		if( !bPastePossible )
970*b1cdbd2cSJim Jagielski 		{
971*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_PASTE );
972*b1cdbd2cSJim Jagielski 		}
973*b1cdbd2cSJim Jagielski 	}
974*b1cdbd2cSJim Jagielski 
975*b1cdbd2cSJim Jagielski 	if (!pOlView->GetViewByWindow(GetActiveWindow())->HasSelection())
976*b1cdbd2cSJim Jagielski 	{
977*b1cdbd2cSJim Jagielski 		rSet.DisableItem(SID_CUT);
978*b1cdbd2cSJim Jagielski 		rSet.DisableItem(SID_COPY);
979*b1cdbd2cSJim Jagielski 	}
980*b1cdbd2cSJim Jagielski 
981*b1cdbd2cSJim Jagielski 	if (pOlView->GetOutliner()->IsModified())
982*b1cdbd2cSJim Jagielski 	{
983*b1cdbd2cSJim Jagielski 		GetDoc()->SetChanged(sal_True);
984*b1cdbd2cSJim Jagielski 	}
985*b1cdbd2cSJim Jagielski 
986*b1cdbd2cSJim Jagielski 	// Da �berladen, muss hier der Status gesetzt werden
987*b1cdbd2cSJim Jagielski 	if( !GetDocSh()->IsModified() )
988*b1cdbd2cSJim Jagielski 	{
989*b1cdbd2cSJim Jagielski 		rSet.DisableItem( SID_SAVEDOC );
990*b1cdbd2cSJim Jagielski 	}
991*b1cdbd2cSJim Jagielski 
992*b1cdbd2cSJim Jagielski 	if ( GetDocSh()->IsReadOnly() )
993*b1cdbd2cSJim Jagielski 	{
994*b1cdbd2cSJim Jagielski 		rSet.DisableItem( SID_AUTOSPELL_CHECK );
995*b1cdbd2cSJim Jagielski 	}
996*b1cdbd2cSJim Jagielski 	else
997*b1cdbd2cSJim Jagielski 	{
998*b1cdbd2cSJim Jagielski 		if (GetDoc()->GetOnlineSpell())
999*b1cdbd2cSJim Jagielski 		{
1000*b1cdbd2cSJim Jagielski 			rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, sal_True));
1001*b1cdbd2cSJim Jagielski 		}
1002*b1cdbd2cSJim Jagielski 		else
1003*b1cdbd2cSJim Jagielski 		{
1004*b1cdbd2cSJim Jagielski 			rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, sal_False));
1005*b1cdbd2cSJim Jagielski 		}
1006*b1cdbd2cSJim Jagielski 	}
1007*b1cdbd2cSJim Jagielski 
1008*b1cdbd2cSJim Jagielski 	// Feldbefehle
1009*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_MODIFY_FIELD ) )
1010*b1cdbd2cSJim Jagielski 	{
1011*b1cdbd2cSJim Jagielski 		const SvxFieldItem* pFldItem = pOutlinerView->GetFieldAtSelection();
1012*b1cdbd2cSJim Jagielski 
1013*b1cdbd2cSJim Jagielski 		if( !( pFldItem && (pFldItem->GetField()->ISA( SvxDateField ) ||
1014*b1cdbd2cSJim Jagielski 							pFldItem->GetField()->ISA( SvxAuthorField ) ||
1015*b1cdbd2cSJim Jagielski 							pFldItem->GetField()->ISA( SvxExtFileField ) ||
1016*b1cdbd2cSJim Jagielski 							pFldItem->GetField()->ISA( SvxExtTimeField ) ) ) )
1017*b1cdbd2cSJim Jagielski 		{
1018*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_MODIFY_FIELD );
1019*b1cdbd2cSJim Jagielski 		}
1020*b1cdbd2cSJim Jagielski 	}
1021*b1cdbd2cSJim Jagielski 
1022*b1cdbd2cSJim Jagielski 	if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_EXPAND_PAGE))
1023*b1cdbd2cSJim Jagielski 	{
1024*b1cdbd2cSJim Jagielski 		sal_Bool bDisable = sal_True;
1025*b1cdbd2cSJim Jagielski 		sal_uInt16 i = 0;
1026*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
1027*b1cdbd2cSJim Jagielski 		pOlView->SetSelectedPages();
1028*b1cdbd2cSJim Jagielski 
1029*b1cdbd2cSJim Jagielski 		while (i < nCount && bDisable)
1030*b1cdbd2cSJim Jagielski 		{
1031*b1cdbd2cSJim Jagielski 			SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
1032*b1cdbd2cSJim Jagielski 
1033*b1cdbd2cSJim Jagielski 			if (pPage->IsSelected())
1034*b1cdbd2cSJim Jagielski 			{
1035*b1cdbd2cSJim Jagielski 				SdrObject* pObj = pPage->GetPresObj(PRESOBJ_OUTLINE);
1036*b1cdbd2cSJim Jagielski 
1037*b1cdbd2cSJim Jagielski                 if (pObj!=NULL )
1038*b1cdbd2cSJim Jagielski 				{
1039*b1cdbd2cSJim Jagielski 					if( !pObj->IsEmptyPresObj() )
1040*b1cdbd2cSJim Jagielski 					{
1041*b1cdbd2cSJim Jagielski 						bDisable = false;
1042*b1cdbd2cSJim Jagielski 					}
1043*b1cdbd2cSJim Jagielski 					else
1044*b1cdbd2cSJim Jagielski 					{
1045*b1cdbd2cSJim Jagielski 						// check if the object is in edit, than its temporarely not empty
1046*b1cdbd2cSJim Jagielski 						SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj );
1047*b1cdbd2cSJim Jagielski 						if( pTextObj )
1048*b1cdbd2cSJim Jagielski 						{
1049*b1cdbd2cSJim Jagielski 							OutlinerParaObject* pParaObj = pTextObj->GetEditOutlinerParaObject();
1050*b1cdbd2cSJim Jagielski 							if( pParaObj )
1051*b1cdbd2cSJim Jagielski 							{
1052*b1cdbd2cSJim Jagielski 								delete pParaObj;
1053*b1cdbd2cSJim Jagielski 								bDisable = false;
1054*b1cdbd2cSJim Jagielski 							}
1055*b1cdbd2cSJim Jagielski 						}
1056*b1cdbd2cSJim Jagielski 					}
1057*b1cdbd2cSJim Jagielski 				}
1058*b1cdbd2cSJim Jagielski 			}
1059*b1cdbd2cSJim Jagielski 
1060*b1cdbd2cSJim Jagielski 			i++;
1061*b1cdbd2cSJim Jagielski 		}
1062*b1cdbd2cSJim Jagielski 
1063*b1cdbd2cSJim Jagielski 		if (bDisable)
1064*b1cdbd2cSJim Jagielski 		{
1065*b1cdbd2cSJim Jagielski 			rSet.DisableItem(SID_EXPAND_PAGE);
1066*b1cdbd2cSJim Jagielski 		}
1067*b1cdbd2cSJim Jagielski 	}
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski 	if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_SUMMARY_PAGE))
1070*b1cdbd2cSJim Jagielski 	{
1071*b1cdbd2cSJim Jagielski 		sal_Bool bDisable = sal_True;
1072*b1cdbd2cSJim Jagielski 		sal_uInt16 i = 0;
1073*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
1074*b1cdbd2cSJim Jagielski 		pOlView->SetSelectedPages();
1075*b1cdbd2cSJim Jagielski 
1076*b1cdbd2cSJim Jagielski 		while (i < nCount && bDisable)
1077*b1cdbd2cSJim Jagielski 		{
1078*b1cdbd2cSJim Jagielski 			SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
1079*b1cdbd2cSJim Jagielski 
1080*b1cdbd2cSJim Jagielski 			if (pPage->IsSelected())
1081*b1cdbd2cSJim Jagielski 			{
1082*b1cdbd2cSJim Jagielski 				SdrObject* pObj = pPage->GetPresObj(PRESOBJ_TITLE);
1083*b1cdbd2cSJim Jagielski 
1084*b1cdbd2cSJim Jagielski 				if (pObj && !pObj->IsEmptyPresObj())
1085*b1cdbd2cSJim Jagielski 				{
1086*b1cdbd2cSJim Jagielski 					bDisable = sal_False;
1087*b1cdbd2cSJim Jagielski 				}
1088*b1cdbd2cSJim Jagielski 			}
1089*b1cdbd2cSJim Jagielski 
1090*b1cdbd2cSJim Jagielski 			i++;
1091*b1cdbd2cSJim Jagielski 		}
1092*b1cdbd2cSJim Jagielski 
1093*b1cdbd2cSJim Jagielski 		if (bDisable)
1094*b1cdbd2cSJim Jagielski 		{
1095*b1cdbd2cSJim Jagielski 			rSet.DisableItem(SID_SUMMARY_PAGE);
1096*b1cdbd2cSJim Jagielski 		}
1097*b1cdbd2cSJim Jagielski 	}
1098*b1cdbd2cSJim Jagielski 
1099*b1cdbd2cSJim Jagielski     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_THESAURUS ) )
1100*b1cdbd2cSJim Jagielski 	{
1101*b1cdbd2cSJim Jagielski 		if ( !pOlView->IsTextEdit() )
1102*b1cdbd2cSJim Jagielski 		{
1103*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_THESAURUS );
1104*b1cdbd2cSJim Jagielski 		}
1105*b1cdbd2cSJim Jagielski 		else
1106*b1cdbd2cSJim Jagielski 		{
1107*b1cdbd2cSJim Jagielski 			LanguageType            eLang = GetDoc()->GetLanguage( EE_CHAR_LANGUAGE );
1108*b1cdbd2cSJim Jagielski 	        Reference< XThesaurus > xThesaurus( LinguMgr::GetThesaurus() );
1109*b1cdbd2cSJim Jagielski 			Locale                  aLocale;
1110*b1cdbd2cSJim Jagielski 
1111*b1cdbd2cSJim Jagielski 			SvxLanguageToLocale( aLocale, eLang );
1112*b1cdbd2cSJim Jagielski 
1113*b1cdbd2cSJim Jagielski             if (!xThesaurus.is() || eLang == LANGUAGE_NONE || !xThesaurus->hasLocale(aLocale))
1114*b1cdbd2cSJim Jagielski 				rSet.DisableItem( SID_THESAURUS );
1115*b1cdbd2cSJim Jagielski 		}
1116*b1cdbd2cSJim Jagielski 	}
1117*b1cdbd2cSJim Jagielski 
1118*b1cdbd2cSJim Jagielski 	// Starten der Praesentation moeglich?
1119*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PRESENTATION ) )
1120*b1cdbd2cSJim Jagielski 	{
1121*b1cdbd2cSJim Jagielski 		sal_Bool bDisable = sal_True;
1122*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = GetDoc()->GetSdPageCount( PK_STANDARD );
1123*b1cdbd2cSJim Jagielski 
1124*b1cdbd2cSJim Jagielski 		for( sal_uInt16 i = 0; i < nCount && bDisable; i++ )
1125*b1cdbd2cSJim Jagielski 		{
1126*b1cdbd2cSJim Jagielski 			SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
1127*b1cdbd2cSJim Jagielski 
1128*b1cdbd2cSJim Jagielski 			if( !pPage->IsExcluded() )
1129*b1cdbd2cSJim Jagielski 				bDisable = sal_False;
1130*b1cdbd2cSJim Jagielski 		}
1131*b1cdbd2cSJim Jagielski 		if( bDisable || GetDocSh()->IsPreview())
1132*b1cdbd2cSJim Jagielski 		{
1133*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_PRESENTATION );
1134*b1cdbd2cSJim Jagielski 		}
1135*b1cdbd2cSJim Jagielski 	}
1136*b1cdbd2cSJim Jagielski 
1137*b1cdbd2cSJim Jagielski 	FuBullet::GetSlotState( rSet, this, GetViewFrame() );
1138*b1cdbd2cSJim Jagielski 
1139*b1cdbd2cSJim Jagielski 	//rSet.DisableItem( SID_PRINTDOC );
1140*b1cdbd2cSJim Jagielski 	//rSet.DisableItem( SID_PRINTDOCDIRECT );
1141*b1cdbd2cSJim Jagielski 	//rSet.DisableItem( SID_SETUPPRINTER );
1142*b1cdbd2cSJim Jagielski }
1143*b1cdbd2cSJim Jagielski 
1144*b1cdbd2cSJim Jagielski /*************************************************************************
1145*b1cdbd2cSJim Jagielski |*
1146*b1cdbd2cSJim Jagielski |* wird gerufen, wenn ScrollBar benutzt wird
1147*b1cdbd2cSJim Jagielski |*
1148*b1cdbd2cSJim Jagielski \************************************************************************/
1149*b1cdbd2cSJim Jagielski 
VirtHScrollHdl(ScrollBar * pHScroll)1150*b1cdbd2cSJim Jagielski long OutlineViewShell::VirtHScrollHdl(ScrollBar* pHScroll)
1151*b1cdbd2cSJim Jagielski {
1152*b1cdbd2cSJim Jagielski 	long   nThumb = pHScroll->GetThumbPos();
1153*b1cdbd2cSJim Jagielski 	long   nRange = pHScroll->GetRange().Len();
1154*b1cdbd2cSJim Jagielski 	double fX	  = (double) nThumb / nRange;
1155*b1cdbd2cSJim Jagielski 
1156*b1cdbd2cSJim Jagielski     Window* 	  pWin			= mpContentWindow.get();
1157*b1cdbd2cSJim Jagielski     OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWin);
1158*b1cdbd2cSJim Jagielski     long		  nViewWidth	= pWin->PixelToLogic(
1159*b1cdbd2cSJim Jagielski         pWin->GetSizePixel()).Width();
1160*b1cdbd2cSJim Jagielski     long		  nTextWidth	= pOlView->GetPaperWidth();
1161*b1cdbd2cSJim Jagielski     nViewWidth					= Max(nViewWidth, nTextWidth);
1162*b1cdbd2cSJim Jagielski     long		  nCurrentPos	= pOutlinerView->GetVisArea().Left();
1163*b1cdbd2cSJim Jagielski     long		  nTargetPos	= (long)(fX * nViewWidth);
1164*b1cdbd2cSJim Jagielski     long		  nDelta		= nTargetPos - nCurrentPos;
1165*b1cdbd2cSJim Jagielski 
1166*b1cdbd2cSJim Jagielski     pOutlinerView->HideCursor();
1167*b1cdbd2cSJim Jagielski     pOutlinerView->Scroll(-nDelta, 0);
1168*b1cdbd2cSJim Jagielski     pOutlinerView->ShowCursor(sal_False);
1169*b1cdbd2cSJim Jagielski 
1170*b1cdbd2cSJim Jagielski     pOlView->InvalidateSlideNumberArea();
1171*b1cdbd2cSJim Jagielski 	return 0;
1172*b1cdbd2cSJim Jagielski }
1173*b1cdbd2cSJim Jagielski 
1174*b1cdbd2cSJim Jagielski /*************************************************************************
1175*b1cdbd2cSJim Jagielski |*
1176*b1cdbd2cSJim Jagielski |* wird gerufen, wenn ScrollBar benutzt wird
1177*b1cdbd2cSJim Jagielski |*
1178*b1cdbd2cSJim Jagielski \************************************************************************/
1179*b1cdbd2cSJim Jagielski 
VirtVScrollHdl(ScrollBar * pVScroll)1180*b1cdbd2cSJim Jagielski long OutlineViewShell::VirtVScrollHdl(ScrollBar* pVScroll)
1181*b1cdbd2cSJim Jagielski {
1182*b1cdbd2cSJim Jagielski 	long nThumb = pVScroll->GetThumbPos();
1183*b1cdbd2cSJim Jagielski 	long nRange = pVScroll->GetRange().Len();
1184*b1cdbd2cSJim Jagielski 	double fY = (double) nThumb / nRange;
1185*b1cdbd2cSJim Jagielski 
1186*b1cdbd2cSJim Jagielski     Window* 	  pWin			= mpContentWindow.get();
1187*b1cdbd2cSJim Jagielski     OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWin);
1188*b1cdbd2cSJim Jagielski     long		  nViewHeight	= pWin->PixelToLogic(
1189*b1cdbd2cSJim Jagielski         pWin->GetSizePixel()).Height();
1190*b1cdbd2cSJim Jagielski     long		  nTextHeight	= pOlView->GetOutliner()->GetTextHeight();
1191*b1cdbd2cSJim Jagielski     nViewHeight 			   += nTextHeight;
1192*b1cdbd2cSJim Jagielski     long		  nCurrentPos	= pOutlinerView->GetVisArea().Top();
1193*b1cdbd2cSJim Jagielski     long		  nTargetPos	= (long)(fY * nViewHeight);
1194*b1cdbd2cSJim Jagielski     long		  nDelta		= nTargetPos - nCurrentPos;
1195*b1cdbd2cSJim Jagielski 
1196*b1cdbd2cSJim Jagielski     pOutlinerView->HideCursor();
1197*b1cdbd2cSJim Jagielski     pOutlinerView->Scroll(0, -nDelta);
1198*b1cdbd2cSJim Jagielski     pOutlinerView->ShowCursor(sal_False);
1199*b1cdbd2cSJim Jagielski 
1200*b1cdbd2cSJim Jagielski     pOlView->InvalidateSlideNumberArea();
1201*b1cdbd2cSJim Jagielski 
1202*b1cdbd2cSJim Jagielski 	return 0;
1203*b1cdbd2cSJim Jagielski }
1204*b1cdbd2cSJim Jagielski 
1205*b1cdbd2cSJim Jagielski /*************************************************************************
1206*b1cdbd2cSJim Jagielski |*
1207*b1cdbd2cSJim Jagielski |* PrepareClose, wird gerufen, wenn die Shell zestoert werden soll,
1208*b1cdbd2cSJim Jagielski |* leitet den Aufruf an die View weiter
1209*b1cdbd2cSJim Jagielski |*
1210*b1cdbd2cSJim Jagielski \************************************************************************/
1211*b1cdbd2cSJim Jagielski 
PrepareClose(sal_Bool bUI,sal_Bool bForBrowsing)1212*b1cdbd2cSJim Jagielski sal_uInt16 OutlineViewShell::PrepareClose( sal_Bool bUI, sal_Bool bForBrowsing )
1213*b1cdbd2cSJim Jagielski {
1214*b1cdbd2cSJim Jagielski 	if( ViewShell::PrepareClose(bUI, bForBrowsing) != sal_True )
1215*b1cdbd2cSJim Jagielski 		return sal_False;
1216*b1cdbd2cSJim Jagielski 
1217*b1cdbd2cSJim Jagielski 	return pOlView == NULL || pOlView->PrepareClose(bUI);
1218*b1cdbd2cSJim Jagielski }
1219*b1cdbd2cSJim Jagielski 
1220*b1cdbd2cSJim Jagielski 
1221*b1cdbd2cSJim Jagielski /*************************************************************************
1222*b1cdbd2cSJim Jagielski |*
1223*b1cdbd2cSJim Jagielski |* Zoomen mit Zoomfaktor, OutlinerView informieren
1224*b1cdbd2cSJim Jagielski |*
1225*b1cdbd2cSJim Jagielski \************************************************************************/
1226*b1cdbd2cSJim Jagielski 
SetZoom(long nZoom)1227*b1cdbd2cSJim Jagielski void OutlineViewShell::SetZoom(long nZoom)
1228*b1cdbd2cSJim Jagielski {
1229*b1cdbd2cSJim Jagielski 	ViewShell::SetZoom(nZoom);
1230*b1cdbd2cSJim Jagielski 
1231*b1cdbd2cSJim Jagielski     ::sd::Window* pWindow = mpContentWindow.get();
1232*b1cdbd2cSJim Jagielski     if (pWindow)
1233*b1cdbd2cSJim Jagielski     {
1234*b1cdbd2cSJim Jagielski         // OutputArea der OutlinerView aendern
1235*b1cdbd2cSJim Jagielski         OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWindow);
1236*b1cdbd2cSJim Jagielski         Rectangle aWin(Point(0,0), pWindow->GetOutputSizePixel());
1237*b1cdbd2cSJim Jagielski         aWin = pWindow->PixelToLogic(aWin);
1238*b1cdbd2cSJim Jagielski         pOutlinerView->SetOutputArea(aWin);
1239*b1cdbd2cSJim Jagielski     }
1240*b1cdbd2cSJim Jagielski 
1241*b1cdbd2cSJim Jagielski 	// #106268#
1242*b1cdbd2cSJim Jagielski 	GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM );
1243*b1cdbd2cSJim Jagielski 	GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER );
1244*b1cdbd2cSJim Jagielski }
1245*b1cdbd2cSJim Jagielski 
1246*b1cdbd2cSJim Jagielski /*************************************************************************
1247*b1cdbd2cSJim Jagielski |*
1248*b1cdbd2cSJim Jagielski |* Zoomen mit Zoomrechteck, OutlinerView informieren
1249*b1cdbd2cSJim Jagielski |*
1250*b1cdbd2cSJim Jagielski \************************************************************************/
1251*b1cdbd2cSJim Jagielski 
SetZoomRect(const Rectangle & rZoomRect)1252*b1cdbd2cSJim Jagielski void OutlineViewShell::SetZoomRect(const Rectangle& rZoomRect)
1253*b1cdbd2cSJim Jagielski {
1254*b1cdbd2cSJim Jagielski 	ViewShell::SetZoomRect(rZoomRect);
1255*b1cdbd2cSJim Jagielski 
1256*b1cdbd2cSJim Jagielski     ::sd::Window* pWindow = mpContentWindow.get();
1257*b1cdbd2cSJim Jagielski     if (pWindow)
1258*b1cdbd2cSJim Jagielski     {
1259*b1cdbd2cSJim Jagielski         // OutputArea der OutlinerView aendern
1260*b1cdbd2cSJim Jagielski         OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWindow);
1261*b1cdbd2cSJim Jagielski         Rectangle aWin(Point(0,0), pWindow->GetOutputSizePixel());
1262*b1cdbd2cSJim Jagielski         aWin = pWindow->PixelToLogic(aWin);
1263*b1cdbd2cSJim Jagielski         pOutlinerView->SetOutputArea(aWin);
1264*b1cdbd2cSJim Jagielski     }
1265*b1cdbd2cSJim Jagielski 
1266*b1cdbd2cSJim Jagielski 	// #106268#
1267*b1cdbd2cSJim Jagielski 	GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM );
1268*b1cdbd2cSJim Jagielski 	GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER );
1269*b1cdbd2cSJim Jagielski }
1270*b1cdbd2cSJim Jagielski 
1271*b1cdbd2cSJim Jagielski /*************************************************************************
1272*b1cdbd2cSJim Jagielski |*
1273*b1cdbd2cSJim Jagielski |* Vorm Speichern das Model der Drawing Engine aktualisieren, dann den
1274*b1cdbd2cSJim Jagielski |* Call weiterleiten an die ObjectShell.
1275*b1cdbd2cSJim Jagielski |*
1276*b1cdbd2cSJim Jagielski \************************************************************************/
1277*b1cdbd2cSJim Jagielski 
Execute(SfxRequest & rReq)1278*b1cdbd2cSJim Jagielski void OutlineViewShell::Execute(SfxRequest& rReq)
1279*b1cdbd2cSJim Jagielski {
1280*b1cdbd2cSJim Jagielski     bool bForwardCall = true;
1281*b1cdbd2cSJim Jagielski 
1282*b1cdbd2cSJim Jagielski 	switch(rReq.GetSlot())
1283*b1cdbd2cSJim Jagielski 	{
1284*b1cdbd2cSJim Jagielski 		case SID_SAVEDOC:
1285*b1cdbd2cSJim Jagielski 		case SID_SAVEASDOC:
1286*b1cdbd2cSJim Jagielski 			PrepareClose();
1287*b1cdbd2cSJim Jagielski             break;
1288*b1cdbd2cSJim Jagielski 
1289*b1cdbd2cSJim Jagielski 		case SID_SEARCH_ITEM:
1290*b1cdbd2cSJim Jagielski             // Forward this request to the the common (old) code of the
1291*b1cdbd2cSJim Jagielski             // document shell.
1292*b1cdbd2cSJim Jagielski             GetDocSh()->Execute (rReq);
1293*b1cdbd2cSJim Jagielski             bForwardCall = false;
1294*b1cdbd2cSJim Jagielski             break;
1295*b1cdbd2cSJim Jagielski 
1296*b1cdbd2cSJim Jagielski         case SID_SPELL_DIALOG:
1297*b1cdbd2cSJim Jagielski         {
1298*b1cdbd2cSJim Jagielski             SfxViewFrame* pViewFrame = GetViewFrame();
1299*b1cdbd2cSJim Jagielski             if (rReq.GetArgs() != NULL)
1300*b1cdbd2cSJim Jagielski                 pViewFrame->SetChildWindow (SID_SPELL_DIALOG,
1301*b1cdbd2cSJim Jagielski                     ((const SfxBoolItem&) (rReq.GetArgs()->
1302*b1cdbd2cSJim Jagielski                         Get(SID_SPELL_DIALOG))).GetValue());
1303*b1cdbd2cSJim Jagielski             else
1304*b1cdbd2cSJim Jagielski                 pViewFrame->ToggleChildWindow(SID_SPELL_DIALOG);
1305*b1cdbd2cSJim Jagielski 
1306*b1cdbd2cSJim Jagielski             pViewFrame->GetBindings().Invalidate(SID_SPELL_DIALOG);
1307*b1cdbd2cSJim Jagielski             rReq.Done ();
1308*b1cdbd2cSJim Jagielski 
1309*b1cdbd2cSJim Jagielski             bForwardCall = false;
1310*b1cdbd2cSJim Jagielski         }
1311*b1cdbd2cSJim Jagielski         break;
1312*b1cdbd2cSJim Jagielski 
1313*b1cdbd2cSJim Jagielski 		default:
1314*b1cdbd2cSJim Jagielski             OSL_TRACE ("OutlineViewShell::Execute(): can not handle slot %d", rReq.GetSlot());
1315*b1cdbd2cSJim Jagielski             break;
1316*b1cdbd2cSJim Jagielski 
1317*b1cdbd2cSJim Jagielski 	}
1318*b1cdbd2cSJim Jagielski 
1319*b1cdbd2cSJim Jagielski     if (bForwardCall)
1320*b1cdbd2cSJim Jagielski         ((DrawDocShell*)GetViewFrame()->GetObjectShell())->ExecuteSlot( rReq );
1321*b1cdbd2cSJim Jagielski }
1322*b1cdbd2cSJim Jagielski 
1323*b1cdbd2cSJim Jagielski /*************************************************************************
1324*b1cdbd2cSJim Jagielski |*
1325*b1cdbd2cSJim Jagielski |* Read FrameViews data and set actual views data
1326*b1cdbd2cSJim Jagielski |*
1327*b1cdbd2cSJim Jagielski \************************************************************************/
1328*b1cdbd2cSJim Jagielski 
ReadFrameViewData(FrameView * pView)1329*b1cdbd2cSJim Jagielski void OutlineViewShell::ReadFrameViewData(FrameView* pView)
1330*b1cdbd2cSJim Jagielski {
1331*b1cdbd2cSJim Jagielski 	::Outliner* pOutl = pOlView->GetOutliner();
1332*b1cdbd2cSJim Jagielski 
1333*b1cdbd2cSJim Jagielski 	if ( pView->IsNoAttribs() )
1334*b1cdbd2cSJim Jagielski 		pOutl->SetFlatMode( sal_True );   // Attribut-Darstellung ausschalten
1335*b1cdbd2cSJim Jagielski 	else
1336*b1cdbd2cSJim Jagielski 		pOutl->SetFlatMode( sal_False );  // Attribut-Darstellung einschalten
1337*b1cdbd2cSJim Jagielski 
1338*b1cdbd2cSJim Jagielski 	sal_uLong nCntrl = pOutl->GetControlWord();
1339*b1cdbd2cSJim Jagielski 
1340*b1cdbd2cSJim Jagielski 	if ( pView->IsNoColors() )
1341*b1cdbd2cSJim Jagielski 		pOutl->SetControlWord(nCntrl | EE_CNTRL_NOCOLORS);   // Farbansicht ausschalten
1342*b1cdbd2cSJim Jagielski 	else
1343*b1cdbd2cSJim Jagielski 		pOutl->SetControlWord(nCntrl & ~EE_CNTRL_NOCOLORS);  // Farbansicht einschalten
1344*b1cdbd2cSJim Jagielski 
1345*b1cdbd2cSJim Jagielski 	sal_uInt16 nPage = mpFrameView->GetSelectedPage();
1346*b1cdbd2cSJim Jagielski 	pLastPage = GetDoc()->GetSdPage( nPage, PK_STANDARD );
1347*b1cdbd2cSJim Jagielski     pOlView->SetActualPage(pLastPage);
1348*b1cdbd2cSJim Jagielski }
1349*b1cdbd2cSJim Jagielski 
1350*b1cdbd2cSJim Jagielski 
1351*b1cdbd2cSJim Jagielski 
1352*b1cdbd2cSJim Jagielski /*************************************************************************
1353*b1cdbd2cSJim Jagielski |*
1354*b1cdbd2cSJim Jagielski |* Write actual views data to FrameView
1355*b1cdbd2cSJim Jagielski |*
1356*b1cdbd2cSJim Jagielski \************************************************************************/
1357*b1cdbd2cSJim Jagielski 
WriteFrameViewData()1358*b1cdbd2cSJim Jagielski void OutlineViewShell::WriteFrameViewData()
1359*b1cdbd2cSJim Jagielski {
1360*b1cdbd2cSJim Jagielski 	::Outliner* pOutl = pOlView->GetOutliner();
1361*b1cdbd2cSJim Jagielski 
1362*b1cdbd2cSJim Jagielski 	sal_uLong nCntrl = pOutl->GetControlWord();
1363*b1cdbd2cSJim Jagielski 	sal_Bool bNoColor = sal_False;
1364*b1cdbd2cSJim Jagielski 	if (nCntrl & EE_CNTRL_NOCOLORS)
1365*b1cdbd2cSJim Jagielski 		bNoColor = sal_True;
1366*b1cdbd2cSJim Jagielski 	mpFrameView->SetNoColors(bNoColor);
1367*b1cdbd2cSJim Jagielski 	mpFrameView->SetNoAttribs( pOutl->IsFlatMode() );
1368*b1cdbd2cSJim Jagielski 	SdPage* pActualPage = pOlView->GetActualPage();
1369*b1cdbd2cSJim Jagielski     DBG_ASSERT(pActualPage, "No current page");
1370*b1cdbd2cSJim Jagielski 	if( pActualPage )
1371*b1cdbd2cSJim Jagielski         mpFrameView->SetSelectedPage((pActualPage->GetPageNum() - 1) / 2);
1372*b1cdbd2cSJim Jagielski }
1373*b1cdbd2cSJim Jagielski 
1374*b1cdbd2cSJim Jagielski 
1375*b1cdbd2cSJim Jagielski /*************************************************************************
1376*b1cdbd2cSJim Jagielski |*
1377*b1cdbd2cSJim Jagielski |* SfxRequests fuer StatusBar bearbeiten
1378*b1cdbd2cSJim Jagielski |*
1379*b1cdbd2cSJim Jagielski \************************************************************************/
1380*b1cdbd2cSJim Jagielski 
ExecStatusBar(SfxRequest &)1381*b1cdbd2cSJim Jagielski void OutlineViewShell::ExecStatusBar(SfxRequest&)
1382*b1cdbd2cSJim Jagielski {
1383*b1cdbd2cSJim Jagielski }
1384*b1cdbd2cSJim Jagielski 
1385*b1cdbd2cSJim Jagielski /*************************************************************************
1386*b1cdbd2cSJim Jagielski |*
1387*b1cdbd2cSJim Jagielski |* Statuswerte der Statusbar zurueckgeben
1388*b1cdbd2cSJim Jagielski |*
1389*b1cdbd2cSJim Jagielski \************************************************************************/
1390*b1cdbd2cSJim Jagielski 
GetStatusBarState(SfxItemSet & rSet)1391*b1cdbd2cSJim Jagielski void OutlineViewShell::GetStatusBarState(SfxItemSet& rSet)
1392*b1cdbd2cSJim Jagielski {
1393*b1cdbd2cSJim Jagielski 	// Zoom-Item
1394*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOM ) )
1395*b1cdbd2cSJim Jagielski 	{
1396*b1cdbd2cSJim Jagielski 		SvxZoomItem* pZoomItem;
1397*b1cdbd2cSJim Jagielski 		sal_uInt16 nZoom = (sal_uInt16) GetActiveWindow()->GetZoom();
1398*b1cdbd2cSJim Jagielski 
1399*b1cdbd2cSJim Jagielski 		pZoomItem = new SvxZoomItem( SVX_ZOOM_PERCENT, nZoom );
1400*b1cdbd2cSJim Jagielski 
1401*b1cdbd2cSJim Jagielski 		// Bereich einschraenken
1402*b1cdbd2cSJim Jagielski 		sal_uInt16 nZoomValues = SVX_ZOOM_ENABLE_ALL;
1403*b1cdbd2cSJim Jagielski 		nZoomValues &= ~SVX_ZOOM_ENABLE_OPTIMAL;
1404*b1cdbd2cSJim Jagielski 		nZoomValues &= ~SVX_ZOOM_ENABLE_WHOLEPAGE;
1405*b1cdbd2cSJim Jagielski 		nZoomValues &= ~SVX_ZOOM_ENABLE_PAGEWIDTH;
1406*b1cdbd2cSJim Jagielski 
1407*b1cdbd2cSJim Jagielski 		pZoomItem->SetValueSet( nZoomValues );
1408*b1cdbd2cSJim Jagielski 		rSet.Put( *pZoomItem );
1409*b1cdbd2cSJim Jagielski 		delete pZoomItem;
1410*b1cdbd2cSJim Jagielski 	}
1411*b1cdbd2cSJim Jagielski 
1412*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOMSLIDER ) )
1413*b1cdbd2cSJim Jagielski 	{
1414*b1cdbd2cSJim Jagielski 		if (GetDocSh()->IsUIActive() || !GetActiveWindow() )
1415*b1cdbd2cSJim Jagielski 		{
1416*b1cdbd2cSJim Jagielski 			rSet.DisableItem( SID_ATTR_ZOOMSLIDER );
1417*b1cdbd2cSJim Jagielski 		}
1418*b1cdbd2cSJim Jagielski 		else
1419*b1cdbd2cSJim Jagielski 		{
1420*b1cdbd2cSJim Jagielski 			sd::Window * pActiveWindow = GetActiveWindow();
1421*b1cdbd2cSJim Jagielski 			SvxZoomSliderItem aZoomItem( (sal_uInt16) pActiveWindow->GetZoom(), (sal_uInt16)pActiveWindow->GetMinZoom(), (sal_uInt16)pActiveWindow->GetMaxZoom() ) ;
1422*b1cdbd2cSJim Jagielski 			aZoomItem.AddSnappingPoint(100);
1423*b1cdbd2cSJim Jagielski 			rSet.Put( aZoomItem );
1424*b1cdbd2cSJim Jagielski 		}
1425*b1cdbd2cSJim Jagielski 	}
1426*b1cdbd2cSJim Jagielski 
1427*b1cdbd2cSJim Jagielski 
1428*b1cdbd2cSJim Jagielski 	// Seitenanzeige und Layout
1429*b1cdbd2cSJim Jagielski 	/*
1430*b1cdbd2cSJim Jagielski 	if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_STATUS_PAGE ) ||
1431*b1cdbd2cSJim Jagielski 		SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_STATUS_LAYOUT ) )
1432*b1cdbd2cSJim Jagielski 	*/
1433*b1cdbd2cSJim Jagielski 	sal_uInt16	nPageCount = GetDoc()->GetSdPageCount( PK_STANDARD );
1434*b1cdbd2cSJim Jagielski 	String	aPageStr, aLayoutStr;
1435*b1cdbd2cSJim Jagielski 
1436*b1cdbd2cSJim Jagielski 	::sd::Window*		pWin		= GetActiveWindow();
1437*b1cdbd2cSJim Jagielski 	OutlinerView*	pActiveView = pOlView->GetViewByWindow( pWin );
1438*b1cdbd2cSJim Jagielski 	::Outliner*     pOutliner   = pOlView->GetOutliner();
1439*b1cdbd2cSJim Jagielski 	List*			pSelList	= (List*)pActiveView->CreateSelectionList();
1440*b1cdbd2cSJim Jagielski 	Paragraph*		pFirstPara	= (Paragraph*)pSelList->First();
1441*b1cdbd2cSJim Jagielski 	Paragraph*		pLastPara	= (Paragraph*)pSelList->Last();
1442*b1cdbd2cSJim Jagielski 
1443*b1cdbd2cSJim Jagielski 	if( !pOutliner->HasParaFlag(pFirstPara,PARAFLAG_ISPAGE) )
1444*b1cdbd2cSJim Jagielski 		pFirstPara = pOlView->GetPrevTitle( pFirstPara );
1445*b1cdbd2cSJim Jagielski 
1446*b1cdbd2cSJim Jagielski 	if( !pOutliner->HasParaFlag(pLastPara, PARAFLAG_ISPAGE) )
1447*b1cdbd2cSJim Jagielski 		pLastPara = pOlView->GetPrevTitle( pLastPara );
1448*b1cdbd2cSJim Jagielski 
1449*b1cdbd2cSJim Jagielski 	delete pSelList;				// die wurde extra fuer uns erzeugt
1450*b1cdbd2cSJim Jagielski 
1451*b1cdbd2cSJim Jagielski 	// nur eine Seite selektiert?
1452*b1cdbd2cSJim Jagielski 	if( pFirstPara == pLastPara )
1453*b1cdbd2cSJim Jagielski 	{
1454*b1cdbd2cSJim Jagielski 		// wieviele Seiten sind vor der selektierten Seite?
1455*b1cdbd2cSJim Jagielski 		sal_uLong nPos = 0L;
1456*b1cdbd2cSJim Jagielski 		while( pFirstPara )
1457*b1cdbd2cSJim Jagielski 		{
1458*b1cdbd2cSJim Jagielski 			pFirstPara = pOlView->GetPrevTitle( pFirstPara );
1459*b1cdbd2cSJim Jagielski 			if( pFirstPara )
1460*b1cdbd2cSJim Jagielski 				nPos++;
1461*b1cdbd2cSJim Jagielski 		}
1462*b1cdbd2cSJim Jagielski 
1463*b1cdbd2cSJim Jagielski 		if( nPos >= GetDoc()->GetSdPageCount( PK_STANDARD ) )
1464*b1cdbd2cSJim Jagielski 			nPos = 0;
1465*b1cdbd2cSJim Jagielski 
1466*b1cdbd2cSJim Jagielski 		SdrPage* pPage = GetDoc()->GetSdPage( (sal_uInt16) nPos, PK_STANDARD );
1467*b1cdbd2cSJim Jagielski 
1468*b1cdbd2cSJim Jagielski 		aPageStr = String(SdResId( STR_SD_PAGE ));
1469*b1cdbd2cSJim Jagielski 		aPageStr += sal_Unicode(' ');
1470*b1cdbd2cSJim Jagielski 		aPageStr += String::CreateFromInt32( (sal_Int32)(nPos + 1) );	// sal_uLong -> sal_Int32
1471*b1cdbd2cSJim Jagielski 		aPageStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " / " ));
1472*b1cdbd2cSJim Jagielski 		aPageStr += String::CreateFromInt32( nPageCount );
1473*b1cdbd2cSJim Jagielski 
1474*b1cdbd2cSJim Jagielski 		aLayoutStr = pPage->GetLayoutName();
1475*b1cdbd2cSJim Jagielski 		aLayoutStr.Erase( aLayoutStr.SearchAscii( SD_LT_SEPARATOR ) );
1476*b1cdbd2cSJim Jagielski 			//Now, CurrentPage property change is already sent for DrawView and OutlineView, so it is not necessary to send again here
1477*b1cdbd2cSJim Jagielski 			if(m_StrOldPageName!=aPageStr)
1478*b1cdbd2cSJim Jagielski 			{
1479*b1cdbd2cSJim Jagielski 				GetViewShellBase().GetDrawController().fireSwitchCurrentPage(nPos);
1480*b1cdbd2cSJim Jagielski 				m_StrOldPageName = aPageStr;
1481*b1cdbd2cSJim Jagielski 			}
1482*b1cdbd2cSJim Jagielski 	}
1483*b1cdbd2cSJim Jagielski 	rSet.Put( SfxStringItem( SID_STATUS_PAGE, aPageStr ) );
1484*b1cdbd2cSJim Jagielski 	rSet.Put( SfxStringItem( SID_STATUS_LAYOUT, aLayoutStr ) );
1485*b1cdbd2cSJim Jagielski }
1486*b1cdbd2cSJim Jagielski 
1487*b1cdbd2cSJim Jagielski /*************************************************************************
1488*b1cdbd2cSJim Jagielski |*
1489*b1cdbd2cSJim Jagielski |* Command event
1490*b1cdbd2cSJim Jagielski |*
1491*b1cdbd2cSJim Jagielski \************************************************************************/
1492*b1cdbd2cSJim Jagielski 
Command(const CommandEvent & rCEvt,::sd::Window * pWin)1493*b1cdbd2cSJim Jagielski void OutlineViewShell::Command( const CommandEvent& rCEvt, ::sd::Window* pWin )
1494*b1cdbd2cSJim Jagielski {
1495*b1cdbd2cSJim Jagielski 	if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
1496*b1cdbd2cSJim Jagielski 	{
1497*b1cdbd2cSJim Jagielski 		GetActiveWindow()->ReleaseMouse();
1498*b1cdbd2cSJim Jagielski 
1499*b1cdbd2cSJim Jagielski 		OutlinerView* pOLV = pOlView->GetViewByWindow(GetActiveWindow());
1500*b1cdbd2cSJim Jagielski 		Point aPos(rCEvt.GetMousePosPixel());
1501*b1cdbd2cSJim Jagielski 
1502*b1cdbd2cSJim Jagielski 		if (pOLV && pOLV->IsWrongSpelledWordAtPos(aPos))
1503*b1cdbd2cSJim Jagielski 		{
1504*b1cdbd2cSJim Jagielski 			// #91457# Popup for Online-Spelling now handled by DrawDocShell
1505*b1cdbd2cSJim Jagielski 			// Link aLink = LINK(GetDoc(), SdDrawDocument, OnlineSpellCallback);
1506*b1cdbd2cSJim Jagielski 			Link aLink = LINK(GetDocSh(), DrawDocShell, OnlineSpellCallback);
1507*b1cdbd2cSJim Jagielski 
1508*b1cdbd2cSJim Jagielski 			pOLV->ExecuteSpellPopup(aPos, &aLink);
1509*b1cdbd2cSJim Jagielski 		}
1510*b1cdbd2cSJim Jagielski 		else
1511*b1cdbd2cSJim Jagielski 		{
1512*b1cdbd2cSJim Jagielski 		   GetViewFrame()->GetDispatcher()->ExecutePopup(SdResId(RID_OUTLINE_POPUP));
1513*b1cdbd2cSJim Jagielski 		}
1514*b1cdbd2cSJim Jagielski 	}
1515*b1cdbd2cSJim Jagielski 	else
1516*b1cdbd2cSJim Jagielski 	{
1517*b1cdbd2cSJim Jagielski 		ViewShell::Command( rCEvt, pWin );
1518*b1cdbd2cSJim Jagielski 
1519*b1cdbd2cSJim Jagielski 		// ggfs. Preview den neuen Kontext mitteilen
1520*b1cdbd2cSJim Jagielski 		Invalidate( SID_PREVIEW_STATE );
1521*b1cdbd2cSJim Jagielski 
1522*b1cdbd2cSJim Jagielski 	}
1523*b1cdbd2cSJim Jagielski }
1524*b1cdbd2cSJim Jagielski 
1525*b1cdbd2cSJim Jagielski 
1526*b1cdbd2cSJim Jagielski /*************************************************************************
1527*b1cdbd2cSJim Jagielski |*
1528*b1cdbd2cSJim Jagielski |* Keyboard event
1529*b1cdbd2cSJim Jagielski |*
1530*b1cdbd2cSJim Jagielski \************************************************************************/
1531*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKEvt,::sd::Window * pWin)1532*b1cdbd2cSJim Jagielski sal_Bool OutlineViewShell::KeyInput(const KeyEvent& rKEvt, ::sd::Window* pWin)
1533*b1cdbd2cSJim Jagielski {
1534*b1cdbd2cSJim Jagielski 	sal_Bool bReturn = sal_False;
1535*b1cdbd2cSJim Jagielski 	OutlineViewPageChangesGuard aGuard(pOlView);
1536*b1cdbd2cSJim Jagielski 
1537*b1cdbd2cSJim Jagielski 	if (pWin == NULL && HasCurrentFunction())
1538*b1cdbd2cSJim Jagielski 	{
1539*b1cdbd2cSJim Jagielski 		bReturn = GetCurrentFunction()->KeyInput(rKEvt);
1540*b1cdbd2cSJim Jagielski 	}
1541*b1cdbd2cSJim Jagielski 
1542*b1cdbd2cSJim Jagielski 	// nein, weiterleiten an Basisklasse
1543*b1cdbd2cSJim Jagielski 	else
1544*b1cdbd2cSJim Jagielski 	{
1545*b1cdbd2cSJim Jagielski 		bReturn = ViewShell::KeyInput(rKEvt, pWin);
1546*b1cdbd2cSJim Jagielski 	}
1547*b1cdbd2cSJim Jagielski 
1548*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_EDIT);
1549*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_NEW);
1550*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_DELETE);
1551*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_UPDATE_BY_EXAMPLE);
1552*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_NEW_BY_EXAMPLE);
1553*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_WATERCAN);
1554*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_FAMILY5);
1555*b1cdbd2cSJim Jagielski 
1556*b1cdbd2cSJim Jagielski 	// Pruefen und Unterscheiden von CursorBewegungs- oder Eingabe-Keys
1557*b1cdbd2cSJim Jagielski 	KeyCode aKeyGroup( rKEvt.GetKeyCode().GetGroup() );
1558*b1cdbd2cSJim Jagielski 	if( (aKeyGroup != KEYGROUP_CURSOR && aKeyGroup != KEYGROUP_FKEYS) ||
1559*b1cdbd2cSJim Jagielski 		(GetActualPage() != pLastPage) )
1560*b1cdbd2cSJim Jagielski 	{
1561*b1cdbd2cSJim Jagielski 		Invalidate( SID_PREVIEW_STATE );
1562*b1cdbd2cSJim Jagielski 	}
1563*b1cdbd2cSJim Jagielski 
1564*b1cdbd2cSJim Jagielski 	return(bReturn);
1565*b1cdbd2cSJim Jagielski }
1566*b1cdbd2cSJim Jagielski 
1567*b1cdbd2cSJim Jagielski 
1568*b1cdbd2cSJim Jagielski /*************************************************************************
1569*b1cdbd2cSJim Jagielski |*
1570*b1cdbd2cSJim Jagielski |* Optimale Groesse zurueckgeben
1571*b1cdbd2cSJim Jagielski |*
1572*b1cdbd2cSJim Jagielski \************************************************************************/
1573*b1cdbd2cSJim Jagielski 
GetOptimalSizePixel() const1574*b1cdbd2cSJim Jagielski Size OutlineViewShell::GetOptimalSizePixel() const
1575*b1cdbd2cSJim Jagielski {
1576*b1cdbd2cSJim Jagielski 	Size aResult(200, 200);
1577*b1cdbd2cSJim Jagielski 	if (pOlView)
1578*b1cdbd2cSJim Jagielski 	{
1579*b1cdbd2cSJim Jagielski 		::Outliner* pOutliner = pOlView->GetOutliner();
1580*b1cdbd2cSJim Jagielski 		if (pOutliner)
1581*b1cdbd2cSJim Jagielski 		{
1582*b1cdbd2cSJim Jagielski 			Size aTemp = pOutliner->CalcTextSize();
1583*b1cdbd2cSJim Jagielski 			aTemp = GetActiveWindow()->LogicToPixel(aTemp);
1584*b1cdbd2cSJim Jagielski 			aResult.Width() = Max(aResult.Width(), aTemp.Width());
1585*b1cdbd2cSJim Jagielski 			aResult.Height() = Max(aResult.Height(), aTemp.Height());
1586*b1cdbd2cSJim Jagielski 			if (4 * aResult.Height() > 3 * aResult.Width())
1587*b1cdbd2cSJim Jagielski 			{
1588*b1cdbd2cSJim Jagielski 				aResult.Height() = 3 * aResult.Width() / 4;
1589*b1cdbd2cSJim Jagielski 			}
1590*b1cdbd2cSJim Jagielski 		}
1591*b1cdbd2cSJim Jagielski 	}
1592*b1cdbd2cSJim Jagielski 
1593*b1cdbd2cSJim Jagielski 	// und jetzt jetzt das Standardgelumpe draufaddieren
1594*b1cdbd2cSJim Jagielski 	aResult.Width()  += mpVerticalScrollBar->GetSizePixel().Width();
1595*b1cdbd2cSJim Jagielski 	aResult.Height() += mpHorizontalScrollBar->GetSizePixel().Height();
1596*b1cdbd2cSJim Jagielski 		//!!! +	System::GetMenuBarHeightPixel();  // statt Titlebar
1597*b1cdbd2cSJim Jagielski 	return aResult;
1598*b1cdbd2cSJim Jagielski }
1599*b1cdbd2cSJim Jagielski 
1600*b1cdbd2cSJim Jagielski 
1601*b1cdbd2cSJim Jagielski /*************************************************************************
1602*b1cdbd2cSJim Jagielski |*
1603*b1cdbd2cSJim Jagielski |* Text der Selektion zurueckgeben
1604*b1cdbd2cSJim Jagielski |*
1605*b1cdbd2cSJim Jagielski \************************************************************************/
1606*b1cdbd2cSJim Jagielski 
GetSelectionText(sal_Bool bCompleteWords)1607*b1cdbd2cSJim Jagielski String OutlineViewShell::GetSelectionText(sal_Bool bCompleteWords)
1608*b1cdbd2cSJim Jagielski {
1609*b1cdbd2cSJim Jagielski 	String aStrSelection;
1610*b1cdbd2cSJim Jagielski 	::Outliner* pOl = pOlView->GetOutliner();
1611*b1cdbd2cSJim Jagielski 	OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
1612*b1cdbd2cSJim Jagielski 
1613*b1cdbd2cSJim Jagielski 	if (pOl && pOlView)
1614*b1cdbd2cSJim Jagielski 	{
1615*b1cdbd2cSJim Jagielski 		if (bCompleteWords)
1616*b1cdbd2cSJim Jagielski 		{
1617*b1cdbd2cSJim Jagielski 			ESelection aSel = pOutlinerView->GetSelection();
1618*b1cdbd2cSJim Jagielski 			String aStrCurrentDelimiters = pOl->GetWordDelimiters();
1619*b1cdbd2cSJim Jagielski 
1620*b1cdbd2cSJim Jagielski 			pOl->SetWordDelimiters( String( RTL_CONSTASCII_USTRINGPARAM( " .,;\"'" )));
1621*b1cdbd2cSJim Jagielski 			aStrSelection = pOl->GetWord( aSel.nEndPara, aSel.nEndPos );
1622*b1cdbd2cSJim Jagielski 			pOl->SetWordDelimiters( aStrCurrentDelimiters );
1623*b1cdbd2cSJim Jagielski 		}
1624*b1cdbd2cSJim Jagielski 		else
1625*b1cdbd2cSJim Jagielski 		{
1626*b1cdbd2cSJim Jagielski 			aStrSelection = pOutlinerView->GetSelected();
1627*b1cdbd2cSJim Jagielski 		}
1628*b1cdbd2cSJim Jagielski 	}
1629*b1cdbd2cSJim Jagielski 
1630*b1cdbd2cSJim Jagielski 	return (aStrSelection);
1631*b1cdbd2cSJim Jagielski }
1632*b1cdbd2cSJim Jagielski 
1633*b1cdbd2cSJim Jagielski 
1634*b1cdbd2cSJim Jagielski /*************************************************************************
1635*b1cdbd2cSJim Jagielski |*
1636*b1cdbd2cSJim Jagielski |* Ist etwas selektiert?
1637*b1cdbd2cSJim Jagielski |*
1638*b1cdbd2cSJim Jagielski \************************************************************************/
1639*b1cdbd2cSJim Jagielski 
HasSelection(sal_Bool bText) const1640*b1cdbd2cSJim Jagielski sal_Bool OutlineViewShell::HasSelection(sal_Bool bText) const
1641*b1cdbd2cSJim Jagielski {
1642*b1cdbd2cSJim Jagielski 	sal_Bool bReturn = sal_False;
1643*b1cdbd2cSJim Jagielski 
1644*b1cdbd2cSJim Jagielski 	if (bText)
1645*b1cdbd2cSJim Jagielski 	{
1646*b1cdbd2cSJim Jagielski 		OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
1647*b1cdbd2cSJim Jagielski 
1648*b1cdbd2cSJim Jagielski 		if (pOutlinerView && pOutlinerView->GetSelected().Len() != 0)
1649*b1cdbd2cSJim Jagielski 		{
1650*b1cdbd2cSJim Jagielski 			bReturn = sal_True;
1651*b1cdbd2cSJim Jagielski 		}
1652*b1cdbd2cSJim Jagielski 	}
1653*b1cdbd2cSJim Jagielski 
1654*b1cdbd2cSJim Jagielski 	return bReturn;
1655*b1cdbd2cSJim Jagielski }
1656*b1cdbd2cSJim Jagielski 
1657*b1cdbd2cSJim Jagielski 
1658*b1cdbd2cSJim Jagielski /*************************************************************************
1659*b1cdbd2cSJim Jagielski |*
1660*b1cdbd2cSJim Jagielski |* Status der Attribut-Items
1661*b1cdbd2cSJim Jagielski |*
1662*b1cdbd2cSJim Jagielski \************************************************************************/
1663*b1cdbd2cSJim Jagielski 
GetAttrState(SfxItemSet & rSet)1664*b1cdbd2cSJim Jagielski void OutlineViewShell::GetAttrState( SfxItemSet& rSet )
1665*b1cdbd2cSJim Jagielski {
1666*b1cdbd2cSJim Jagielski 	SfxWhichIter  aIter( rSet );
1667*b1cdbd2cSJim Jagielski 	sal_uInt16        nWhich = aIter.FirstWhich();
1668*b1cdbd2cSJim Jagielski 	SfxAllItemSet aAllSet( *rSet.GetPool() );
1669*b1cdbd2cSJim Jagielski 
1670*b1cdbd2cSJim Jagielski 	while ( nWhich )
1671*b1cdbd2cSJim Jagielski 	{
1672*b1cdbd2cSJim Jagielski 		sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
1673*b1cdbd2cSJim Jagielski 			? GetPool().GetSlotId(nWhich)
1674*b1cdbd2cSJim Jagielski 			: nWhich;
1675*b1cdbd2cSJim Jagielski 
1676*b1cdbd2cSJim Jagielski 		switch ( nSlotId )
1677*b1cdbd2cSJim Jagielski 		{
1678*b1cdbd2cSJim Jagielski 			case SID_STYLE_FAMILY2:
1679*b1cdbd2cSJim Jagielski 			case SID_STYLE_FAMILY3:
1680*b1cdbd2cSJim Jagielski 			{
1681*b1cdbd2cSJim Jagielski 				rSet.DisableItem( nWhich );
1682*b1cdbd2cSJim Jagielski 			}
1683*b1cdbd2cSJim Jagielski 			break;
1684*b1cdbd2cSJim Jagielski 
1685*b1cdbd2cSJim Jagielski 			case SID_STYLE_FAMILY5:
1686*b1cdbd2cSJim Jagielski 			{
1687*b1cdbd2cSJim Jagielski 				SfxStyleSheet* pStyleSheet = pOlView->GetViewByWindow(GetActiveWindow())->GetStyleSheet();
1688*b1cdbd2cSJim Jagielski 
1689*b1cdbd2cSJim Jagielski 				if( pStyleSheet )
1690*b1cdbd2cSJim Jagielski 				{
1691*b1cdbd2cSJim Jagielski 					pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet();
1692*b1cdbd2cSJim Jagielski 
1693*b1cdbd2cSJim Jagielski 					if (pStyleSheet)
1694*b1cdbd2cSJim Jagielski 					{
1695*b1cdbd2cSJim Jagielski 						SfxTemplateItem aItem( nWhich, pStyleSheet->GetName() );
1696*b1cdbd2cSJim Jagielski 						aAllSet.Put( aItem, aItem.Which()  );
1697*b1cdbd2cSJim Jagielski 					}
1698*b1cdbd2cSJim Jagielski 				}
1699*b1cdbd2cSJim Jagielski 
1700*b1cdbd2cSJim Jagielski 				if( !pStyleSheet )
1701*b1cdbd2cSJim Jagielski 				{
1702*b1cdbd2cSJim Jagielski 					SfxTemplateItem aItem( nWhich, String() );
1703*b1cdbd2cSJim Jagielski 					aAllSet.Put( aItem, aItem.Which() );
1704*b1cdbd2cSJim Jagielski 					// rSet.DisableItem( nWhich );
1705*b1cdbd2cSJim Jagielski 				}
1706*b1cdbd2cSJim Jagielski 			}
1707*b1cdbd2cSJim Jagielski 			break;
1708*b1cdbd2cSJim Jagielski 
1709*b1cdbd2cSJim Jagielski 			case SID_STYLE_EDIT:
1710*b1cdbd2cSJim Jagielski 			{
1711*b1cdbd2cSJim Jagielski 				ISfxTemplateCommon* pTmplCommon = SFX_APP()->GetCurrentTemplateCommon(GetViewFrame()->GetBindings());
1712*b1cdbd2cSJim Jagielski 
1713*b1cdbd2cSJim Jagielski 				if (pTmplCommon && pTmplCommon->GetActualFamily() == SD_STYLE_FAMILY_PSEUDO)
1714*b1cdbd2cSJim Jagielski 				{
1715*b1cdbd2cSJim Jagielski 					SfxItemSet aSet(*rSet.GetPool(), SID_STATUS_LAYOUT, SID_STATUS_LAYOUT);
1716*b1cdbd2cSJim Jagielski 					GetStatusBarState(aSet);
1717*b1cdbd2cSJim Jagielski 					String aRealStyle(((SfxStringItem&) aSet.Get(SID_STATUS_LAYOUT)).GetValue());
1718*b1cdbd2cSJim Jagielski 
1719*b1cdbd2cSJim Jagielski 					if (!aRealStyle.Len())
1720*b1cdbd2cSJim Jagielski 					{
1721*b1cdbd2cSJim Jagielski 						// Kein eindeutiger Layoutname gefunden
1722*b1cdbd2cSJim Jagielski 						rSet.DisableItem(nWhich);
1723*b1cdbd2cSJim Jagielski 					}
1724*b1cdbd2cSJim Jagielski 				}
1725*b1cdbd2cSJim Jagielski 			}
1726*b1cdbd2cSJim Jagielski 			break;
1727*b1cdbd2cSJim Jagielski 
1728*b1cdbd2cSJim Jagielski 			case SID_STYLE_UPDATE_BY_EXAMPLE:
1729*b1cdbd2cSJim Jagielski 			{
1730*b1cdbd2cSJim Jagielski 				::sd::Window*     pActWin = GetActiveWindow();
1731*b1cdbd2cSJim Jagielski 				OutlinerView* pOV = pOlView->GetViewByWindow(pActWin);
1732*b1cdbd2cSJim Jagielski 				ESelection aESel(pOV->GetSelection());
1733*b1cdbd2cSJim Jagielski 
1734*b1cdbd2cSJim Jagielski 				if (aESel.nStartPara != aESel.nEndPara ||
1735*b1cdbd2cSJim Jagielski 					aESel.nStartPos  != aESel.nEndPos)
1736*b1cdbd2cSJim Jagielski 					// aufgespannte Selektion, also StyleSheet und/oder
1737*b1cdbd2cSJim Jagielski 					// Attributierung nicht zwingend eindeutig
1738*b1cdbd2cSJim Jagielski 					rSet.DisableItem(nWhich);
1739*b1cdbd2cSJim Jagielski 			}
1740*b1cdbd2cSJim Jagielski 			break;
1741*b1cdbd2cSJim Jagielski 
1742*b1cdbd2cSJim Jagielski 			case SID_STYLE_NEW:
1743*b1cdbd2cSJim Jagielski 			case SID_STYLE_DELETE:
1744*b1cdbd2cSJim Jagielski 			case SID_STYLE_NEW_BY_EXAMPLE:
1745*b1cdbd2cSJim Jagielski 			case SID_STYLE_WATERCAN:
1746*b1cdbd2cSJim Jagielski 			{
1747*b1cdbd2cSJim Jagielski 				rSet.DisableItem(nWhich);
1748*b1cdbd2cSJim Jagielski 			}
1749*b1cdbd2cSJim Jagielski 			break;
1750*b1cdbd2cSJim Jagielski 		}
1751*b1cdbd2cSJim Jagielski 
1752*b1cdbd2cSJim Jagielski 		nWhich = aIter.NextWhich();
1753*b1cdbd2cSJim Jagielski 	}
1754*b1cdbd2cSJim Jagielski 
1755*b1cdbd2cSJim Jagielski 	rSet.Put( aAllSet, sal_False );
1756*b1cdbd2cSJim Jagielski }
1757*b1cdbd2cSJim Jagielski 
1758*b1cdbd2cSJim Jagielski 
1759*b1cdbd2cSJim Jagielski 
1760*b1cdbd2cSJim Jagielski /*************************************************************************
1761*b1cdbd2cSJim Jagielski |*
1762*b1cdbd2cSJim Jagielski |* MouseButtonUp event
1763*b1cdbd2cSJim Jagielski |*
1764*b1cdbd2cSJim Jagielski \************************************************************************/
1765*b1cdbd2cSJim Jagielski 
MouseButtonUp(const MouseEvent & rMEvt,::sd::Window * pWin)1766*b1cdbd2cSJim Jagielski void OutlineViewShell::MouseButtonUp(const MouseEvent& rMEvt, ::sd::Window* pWin)
1767*b1cdbd2cSJim Jagielski {
1768*b1cdbd2cSJim Jagielski 	// Zuerst die Basisklasse
1769*b1cdbd2cSJim Jagielski 	ViewShell::MouseButtonUp(rMEvt, pWin);
1770*b1cdbd2cSJim Jagielski 
1771*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_EDIT);
1772*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_NEW);
1773*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_DELETE);
1774*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_UPDATE_BY_EXAMPLE);
1775*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_NEW_BY_EXAMPLE);
1776*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_WATERCAN);
1777*b1cdbd2cSJim Jagielski 	Invalidate(SID_STYLE_FAMILY5);
1778*b1cdbd2cSJim Jagielski 
1779*b1cdbd2cSJim Jagielski 	// ggfs. Preview den neuen Kontext mitteilen
1780*b1cdbd2cSJim Jagielski 	if( GetActualPage() != pLastPage )
1781*b1cdbd2cSJim Jagielski 		Invalidate( SID_PREVIEW_STATE );
1782*b1cdbd2cSJim Jagielski }
1783*b1cdbd2cSJim Jagielski 
1784*b1cdbd2cSJim Jagielski 
1785*b1cdbd2cSJim Jagielski 
getCurrentPage() const1786*b1cdbd2cSJim Jagielski SdPage* OutlineViewShell::getCurrentPage() const
1787*b1cdbd2cSJim Jagielski {
1788*b1cdbd2cSJim Jagielski 	// since there are no master pages in outline view, we can
1789*b1cdbd2cSJim Jagielski 	// for now use the GetActualPage method
1790*b1cdbd2cSJim Jagielski 	return const_cast<OutlineViewShell*>(this)->GetActualPage();
1791*b1cdbd2cSJim Jagielski }
1792*b1cdbd2cSJim Jagielski 
1793*b1cdbd2cSJim Jagielski /*************************************************************************
1794*b1cdbd2cSJim Jagielski |*
1795*b1cdbd2cSJim Jagielski |* Liefert die erste selektierte Seite zurueck.
1796*b1cdbd2cSJim Jagielski |* Wenn nichts selektiert ist, wird die erste Seite zurueckgeliefert.
1797*b1cdbd2cSJim Jagielski |*
1798*b1cdbd2cSJim Jagielski \************************************************************************/
GetActualPage()1799*b1cdbd2cSJim Jagielski SdPage* OutlineViewShell::GetActualPage()
1800*b1cdbd2cSJim Jagielski {
1801*b1cdbd2cSJim Jagielski 	return pOlView->GetActualPage();
1802*b1cdbd2cSJim Jagielski }
1803*b1cdbd2cSJim Jagielski 
1804*b1cdbd2cSJim Jagielski 
UpdatePreview(SdPage * pPage,sal_Bool)1805*b1cdbd2cSJim Jagielski void OutlineViewShell::UpdatePreview( SdPage* pPage, sal_Bool )
1806*b1cdbd2cSJim Jagielski {
1807*b1cdbd2cSJim Jagielski 	const bool bNewPage = pPage != pLastPage;
1808*b1cdbd2cSJim Jagielski 	pLastPage = pPage;
1809*b1cdbd2cSJim Jagielski 	if (bNewPage)
1810*b1cdbd2cSJim Jagielski 	{
1811*b1cdbd2cSJim Jagielski 		OutlineViewPageChangesGuard aGuard(pOlView);
1812*b1cdbd2cSJim Jagielski         SetCurrentPage(pPage);
1813*b1cdbd2cSJim Jagielski     }
1814*b1cdbd2cSJim Jagielski }
1815*b1cdbd2cSJim Jagielski 
1816*b1cdbd2cSJim Jagielski /*************************************************************************
1817*b1cdbd2cSJim Jagielski |*
1818*b1cdbd2cSJim Jagielski |* Update Title
1819*b1cdbd2cSJim Jagielski |*
1820*b1cdbd2cSJim Jagielski \************************************************************************/
1821*b1cdbd2cSJim Jagielski 
UpdateTitleObject(SdPage * pPage,Paragraph * pPara)1822*b1cdbd2cSJim Jagielski bool OutlineViewShell::UpdateTitleObject( SdPage* pPage, Paragraph* pPara )
1823*b1cdbd2cSJim Jagielski {
1824*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pPage, "sd::OutlineViewShell::UpdateTitleObject(), pPage == 0?" );
1825*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pPara, "sd::OutlineViewShell::UpdateTitleObject(), pPara == 0?" );
1826*b1cdbd2cSJim Jagielski 
1827*b1cdbd2cSJim Jagielski 	if( !pPage || !pPara )
1828*b1cdbd2cSJim Jagielski 		return false;
1829*b1cdbd2cSJim Jagielski 
1830*b1cdbd2cSJim Jagielski 	::Outliner* 			pOutliner = pOlView->GetOutliner();
1831*b1cdbd2cSJim Jagielski 	SdrTextObj* 		pTO  = pOlView->GetTitleTextObject( pPage );
1832*b1cdbd2cSJim Jagielski 	OutlinerParaObject* pOPO = NULL;
1833*b1cdbd2cSJim Jagielski 
1834*b1cdbd2cSJim Jagielski 	String	aTest( pOutliner->GetText( pPara ) );
1835*b1cdbd2cSJim Jagielski 	bool 	bText = aTest.Len() > 0;
1836*b1cdbd2cSJim Jagielski 	bool 	bNewObject = false;
1837*b1cdbd2cSJim Jagielski 
1838*b1cdbd2cSJim Jagielski 	if( bText )
1839*b1cdbd2cSJim Jagielski 	{
1840*b1cdbd2cSJim Jagielski 		// create a title object if we don't have one but have text
1841*b1cdbd2cSJim Jagielski 		if( !pTO )
1842*b1cdbd2cSJim Jagielski 		{
1843*b1cdbd2cSJim Jagielski 			DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
1844*b1cdbd2cSJim Jagielski 			pTO = pOlView->CreateTitleTextObject(pPage);
1845*b1cdbd2cSJim Jagielski 			bNewObject = sal_True;
1846*b1cdbd2cSJim Jagielski 		}
1847*b1cdbd2cSJim Jagielski 
1848*b1cdbd2cSJim Jagielski 		// if we have a title object and a text, set the text
1849*b1cdbd2cSJim Jagielski 		if( pTO )
1850*b1cdbd2cSJim Jagielski 		{
1851*b1cdbd2cSJim Jagielski 			pOPO = pOutliner->CreateParaObject( (sal_uInt16) pOutliner->GetAbsPos( pPara ), 1 );
1852*b1cdbd2cSJim Jagielski 			pOPO->SetOutlinerMode( OUTLINERMODE_TITLEOBJECT );
1853*b1cdbd2cSJim Jagielski 			pOPO->SetVertical( pTO->IsVerticalWriting() );
1854*b1cdbd2cSJim Jagielski 			if( pTO->GetOutlinerParaObject() && (pOPO->GetTextObject() == pTO->GetOutlinerParaObject()->GetTextObject()) )
1855*b1cdbd2cSJim Jagielski 			{
1856*b1cdbd2cSJim Jagielski 				// do nothing, same text already set
1857*b1cdbd2cSJim Jagielski 				delete pOPO;
1858*b1cdbd2cSJim Jagielski 			}
1859*b1cdbd2cSJim Jagielski 			else
1860*b1cdbd2cSJim Jagielski 			{
1861*b1cdbd2cSJim Jagielski 				DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
1862*b1cdbd2cSJim Jagielski 				if( !bNewObject && pOlView->isRecordingUndo() )
1863*b1cdbd2cSJim Jagielski 					pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
1864*b1cdbd2cSJim Jagielski 
1865*b1cdbd2cSJim Jagielski 				pTO->SetOutlinerParaObject( pOPO );
1866*b1cdbd2cSJim Jagielski 				pTO->SetEmptyPresObj( sal_False );
1867*b1cdbd2cSJim Jagielski 				pTO->ActionChanged();
1868*b1cdbd2cSJim Jagielski 			}
1869*b1cdbd2cSJim Jagielski 		}
1870*b1cdbd2cSJim Jagielski 	}
1871*b1cdbd2cSJim Jagielski 	else if( pTO )
1872*b1cdbd2cSJim Jagielski 	{
1873*b1cdbd2cSJim Jagielski 		// no text but object available?
1874*b1cdbd2cSJim Jagielski 		// outline object available, but we have no text
1875*b1cdbd2cSJim Jagielski 		if(pPage->IsPresObj(pTO))
1876*b1cdbd2cSJim Jagielski 		{
1877*b1cdbd2cSJim Jagielski 			// if it is not already empty
1878*b1cdbd2cSJim Jagielski 			if( !pTO->IsEmptyPresObj() )
1879*b1cdbd2cSJim Jagielski 			{
1880*b1cdbd2cSJim Jagielski 				DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
1881*b1cdbd2cSJim Jagielski 
1882*b1cdbd2cSJim Jagielski 				// make it empty
1883*b1cdbd2cSJim Jagielski 				if( pOlView->isRecordingUndo() )
1884*b1cdbd2cSJim Jagielski 					pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
1885*b1cdbd2cSJim Jagielski 				pPage->RestoreDefaultText( pTO );
1886*b1cdbd2cSJim Jagielski 				pTO->SetEmptyPresObj(sal_True);
1887*b1cdbd2cSJim Jagielski 				pTO->ActionChanged();
1888*b1cdbd2cSJim Jagielski 			}
1889*b1cdbd2cSJim Jagielski 		}
1890*b1cdbd2cSJim Jagielski 		else
1891*b1cdbd2cSJim Jagielski 		{
1892*b1cdbd2cSJim Jagielski 			DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
1893*b1cdbd2cSJim Jagielski 			// outline object is not part of the layout, delete it
1894*b1cdbd2cSJim Jagielski 			if( pOlView->isRecordingUndo() )
1895*b1cdbd2cSJim Jagielski 				pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoRemoveObject(*pTO));
1896*b1cdbd2cSJim Jagielski 			pPage->RemoveObject(pTO->GetOrdNum());
1897*b1cdbd2cSJim Jagielski 		}
1898*b1cdbd2cSJim Jagielski 	}
1899*b1cdbd2cSJim Jagielski 
1900*b1cdbd2cSJim Jagielski 	return bNewObject;
1901*b1cdbd2cSJim Jagielski }
1902*b1cdbd2cSJim Jagielski 
1903*b1cdbd2cSJim Jagielski /*************************************************************************
1904*b1cdbd2cSJim Jagielski |*
1905*b1cdbd2cSJim Jagielski |* Update LayoutObject
1906*b1cdbd2cSJim Jagielski |*
1907*b1cdbd2cSJim Jagielski \************************************************************************/
1908*b1cdbd2cSJim Jagielski 
UpdateOutlineObject(SdPage * pPage,Paragraph * pPara)1909*b1cdbd2cSJim Jagielski bool OutlineViewShell::UpdateOutlineObject( SdPage* pPage, Paragraph* pPara )
1910*b1cdbd2cSJim Jagielski {
1911*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pPage, "sd::OutlineViewShell::UpdateOutlineObject(), pPage == 0?" );
1912*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pPara, "sd::OutlineViewShell::UpdateOutlineObject(), pPara == 0?" );
1913*b1cdbd2cSJim Jagielski 
1914*b1cdbd2cSJim Jagielski 	if( !pPage || !pPara )
1915*b1cdbd2cSJim Jagielski 		return false;
1916*b1cdbd2cSJim Jagielski 
1917*b1cdbd2cSJim Jagielski 	::Outliner* 		pOutliner = pOlView->GetOutliner();
1918*b1cdbd2cSJim Jagielski 	OutlinerParaObject* pOPO = NULL;
1919*b1cdbd2cSJim Jagielski 	SdrTextObj* 		pTO  = NULL;
1920*b1cdbd2cSJim Jagielski 
1921*b1cdbd2cSJim Jagielski 	sal_Bool bNewObject = sal_False;
1922*b1cdbd2cSJim Jagielski 
1923*b1cdbd2cSJim Jagielski 	sal_uInt16 eOutlinerMode = OUTLINERMODE_TITLEOBJECT;
1924*b1cdbd2cSJim Jagielski 	pTO = (SdrTextObj*)pPage->GetPresObj( PRESOBJ_TEXT );
1925*b1cdbd2cSJim Jagielski 	if( !pTO )
1926*b1cdbd2cSJim Jagielski 	{
1927*b1cdbd2cSJim Jagielski 		eOutlinerMode = OUTLINERMODE_OUTLINEOBJECT;
1928*b1cdbd2cSJim Jagielski 		pTO = pOlView->GetOutlineTextObject( pPage );
1929*b1cdbd2cSJim Jagielski 	}
1930*b1cdbd2cSJim Jagielski 
1931*b1cdbd2cSJim Jagielski 	// wieviele Absaetze in der Gliederung?
1932*b1cdbd2cSJim Jagielski 	sal_uLong nTitlePara	 = pOutliner->GetAbsPos( pPara );
1933*b1cdbd2cSJim Jagielski 	sal_uLong nPara          = nTitlePara + 1;
1934*b1cdbd2cSJim Jagielski 	sal_uLong nParasInLayout = 0L;
1935*b1cdbd2cSJim Jagielski 	pPara = pOutliner->GetParagraph( nPara );
1936*b1cdbd2cSJim Jagielski 	while( pPara && !pOutliner->HasParaFlag(pPara, PARAFLAG_ISPAGE) )
1937*b1cdbd2cSJim Jagielski 	{
1938*b1cdbd2cSJim Jagielski 		nParasInLayout++;
1939*b1cdbd2cSJim Jagielski 		pPara = pOutliner->GetParagraph( ++nPara );
1940*b1cdbd2cSJim Jagielski 	}
1941*b1cdbd2cSJim Jagielski 	if( nParasInLayout )
1942*b1cdbd2cSJim Jagielski 	{
1943*b1cdbd2cSJim Jagielski 		// ein OutlinerParaObject erzeugen
1944*b1cdbd2cSJim Jagielski 		pPara = pOutliner->GetParagraph( nTitlePara + 1 );
1945*b1cdbd2cSJim Jagielski 		pOPO  = pOutliner->CreateParaObject( (sal_uInt16) nTitlePara + 1, (sal_uInt16) nParasInLayout );
1946*b1cdbd2cSJim Jagielski 	}
1947*b1cdbd2cSJim Jagielski 
1948*b1cdbd2cSJim Jagielski 	if( pOPO )
1949*b1cdbd2cSJim Jagielski 	{
1950*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateOutlineObject(), no undo for model change!?" );
1951*b1cdbd2cSJim Jagielski 
1952*b1cdbd2cSJim Jagielski 		// do we need an outline text object?
1953*b1cdbd2cSJim Jagielski 		if( !pTO )
1954*b1cdbd2cSJim Jagielski 		{
1955*b1cdbd2cSJim Jagielski 			pTO = pOlView->CreateOutlineTextObject( pPage );
1956*b1cdbd2cSJim Jagielski 			bNewObject = sal_True;
1957*b1cdbd2cSJim Jagielski 		}
1958*b1cdbd2cSJim Jagielski 
1959*b1cdbd2cSJim Jagielski 		// Seitenobjekt, Gliederungstext im Outliner:
1960*b1cdbd2cSJim Jagielski 		// Text uebernehmen
1961*b1cdbd2cSJim Jagielski 		if( pTO )
1962*b1cdbd2cSJim Jagielski 		{
1963*b1cdbd2cSJim Jagielski 			pOPO->SetVertical( pTO->IsVerticalWriting() );
1964*b1cdbd2cSJim Jagielski 			pOPO->SetOutlinerMode( eOutlinerMode );
1965*b1cdbd2cSJim Jagielski 			if( pTO->GetOutlinerParaObject() && (pOPO->GetTextObject() == pTO->GetOutlinerParaObject()->GetTextObject()) )
1966*b1cdbd2cSJim Jagielski 			{
1967*b1cdbd2cSJim Jagielski 				// do nothing, same text already set
1968*b1cdbd2cSJim Jagielski 				delete pOPO;
1969*b1cdbd2cSJim Jagielski 			}
1970*b1cdbd2cSJim Jagielski 			else
1971*b1cdbd2cSJim Jagielski 			{
1972*b1cdbd2cSJim Jagielski 				if( !bNewObject && pOlView->isRecordingUndo() )
1973*b1cdbd2cSJim Jagielski 					pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
1974*b1cdbd2cSJim Jagielski 
1975*b1cdbd2cSJim Jagielski 				pTO->SetOutlinerParaObject( pOPO );
1976*b1cdbd2cSJim Jagielski 				pTO->SetEmptyPresObj( sal_False );
1977*b1cdbd2cSJim Jagielski 				pTO->ActionChanged();
1978*b1cdbd2cSJim Jagielski 			}
1979*b1cdbd2cSJim Jagielski 		}
1980*b1cdbd2cSJim Jagielski 	}
1981*b1cdbd2cSJim Jagielski 	else if( pTO )
1982*b1cdbd2cSJim Jagielski 	{
1983*b1cdbd2cSJim Jagielski 		// Seitenobjekt, aber kein Gliederungstext:
1984*b1cdbd2cSJim Jagielski 		// wenn Objekt in Praesentationsliste der Seite ist -> Defaulttext,
1985*b1cdbd2cSJim Jagielski 		// sonst Objekt loeschen
1986*b1cdbd2cSJim Jagielski 		if( pPage->IsPresObj(pTO) )
1987*b1cdbd2cSJim Jagielski 		{
1988*b1cdbd2cSJim Jagielski 			if( !pTO->IsEmptyPresObj() )
1989*b1cdbd2cSJim Jagielski 			{
1990*b1cdbd2cSJim Jagielski 				DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateOutlineObject(), no undo for model change!?" );
1991*b1cdbd2cSJim Jagielski 
1992*b1cdbd2cSJim Jagielski 				// loescht auch altes OutlinerParaObject
1993*b1cdbd2cSJim Jagielski 				if( pOlView->isRecordingUndo() )
1994*b1cdbd2cSJim Jagielski 					pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
1995*b1cdbd2cSJim Jagielski 				pPage->RestoreDefaultText( pTO );
1996*b1cdbd2cSJim Jagielski 				pTO->SetEmptyPresObj(sal_True);
1997*b1cdbd2cSJim Jagielski 				pTO->ActionChanged();
1998*b1cdbd2cSJim Jagielski 			}
1999*b1cdbd2cSJim Jagielski 		}
2000*b1cdbd2cSJim Jagielski 		else
2001*b1cdbd2cSJim Jagielski 		{
2002*b1cdbd2cSJim Jagielski 			DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateOutlineObject(), no undo for model change!?" );
2003*b1cdbd2cSJim Jagielski 			if( pOlView->isRecordingUndo() )
2004*b1cdbd2cSJim Jagielski 				pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoRemoveObject(*pTO));
2005*b1cdbd2cSJim Jagielski 			pPage->RemoveObject(pTO->GetOrdNum());
2006*b1cdbd2cSJim Jagielski 		}
2007*b1cdbd2cSJim Jagielski 	}
2008*b1cdbd2cSJim Jagielski 
2009*b1cdbd2cSJim Jagielski 	return bNewObject;
2010*b1cdbd2cSJim Jagielski }
2011*b1cdbd2cSJim Jagielski 
2012*b1cdbd2cSJim Jagielski 
2013*b1cdbd2cSJim Jagielski /*************************************************************************
2014*b1cdbd2cSJim Jagielski |*
2015*b1cdbd2cSJim Jagielski |* Outliner aus Stream fuellen
2016*b1cdbd2cSJim Jagielski |*
2017*b1cdbd2cSJim Jagielski \************************************************************************/
2018*b1cdbd2cSJim Jagielski 
Read(SvStream & rInput,const String & rBaseURL,sal_uInt16 eFormat)2019*b1cdbd2cSJim Jagielski sal_uLong OutlineViewShell::Read(SvStream& rInput, const String& rBaseURL, sal_uInt16 eFormat)
2020*b1cdbd2cSJim Jagielski {
2021*b1cdbd2cSJim Jagielski 	sal_uLong bRet = 0;
2022*b1cdbd2cSJim Jagielski 
2023*b1cdbd2cSJim Jagielski 	::Outliner* pOutl = pOlView->GetOutliner();
2024*b1cdbd2cSJim Jagielski 
2025*b1cdbd2cSJim Jagielski 	{
2026*b1cdbd2cSJim Jagielski 	OutlineViewPageChangesGuard aGuard( pOlView );
2027*b1cdbd2cSJim Jagielski 	OutlineViewModelChangeGuard aGuard2( *pOlView );
2028*b1cdbd2cSJim Jagielski 
2029*b1cdbd2cSJim Jagielski     bRet = pOutl->Read( rInput, rBaseURL, eFormat, GetDocSh()->GetHeaderAttributes() );
2030*b1cdbd2cSJim Jagielski 
2031*b1cdbd2cSJim Jagielski 	SdPage* pPage = GetDoc()->GetSdPage( GetDoc()->GetSdPageCount(PK_STANDARD) - 1, PK_STANDARD );;
2032*b1cdbd2cSJim Jagielski 	SfxStyleSheet* pTitleSheet = pPage->GetStyleSheetForPresObj( PRESOBJ_TITLE );
2033*b1cdbd2cSJim Jagielski 	SfxStyleSheet* pOutlSheet = pPage->GetStyleSheetForPresObj( PRESOBJ_OUTLINE );
2034*b1cdbd2cSJim Jagielski 
2035*b1cdbd2cSJim Jagielski 	sal_uInt16 nParaCount = (sal_uInt16)pOutl->GetParagraphCount();
2036*b1cdbd2cSJim Jagielski 	if ( nParaCount > 0 )
2037*b1cdbd2cSJim Jagielski 	{
2038*b1cdbd2cSJim Jagielski 		for ( sal_uInt16 nPara = 0; nPara < nParaCount; nPara++ )
2039*b1cdbd2cSJim Jagielski 		{
2040*b1cdbd2cSJim Jagielski 			pOlView->UpdateParagraph( nPara );
2041*b1cdbd2cSJim Jagielski 
2042*b1cdbd2cSJim Jagielski 			sal_Int16 nDepth = pOutl->GetDepth( nPara );
2043*b1cdbd2cSJim Jagielski 
2044*b1cdbd2cSJim Jagielski 			if( (nDepth == 0) || !nPara )
2045*b1cdbd2cSJim Jagielski 			{
2046*b1cdbd2cSJim Jagielski 				Paragraph* pPara = pOutl->GetParagraph( nPara );
2047*b1cdbd2cSJim Jagielski 				pOutl->SetDepth(pPara, -1);
2048*b1cdbd2cSJim Jagielski 				pOutl->SetParaFlag(pPara, PARAFLAG_ISPAGE);
2049*b1cdbd2cSJim Jagielski 
2050*b1cdbd2cSJim Jagielski 				pOutl->SetStyleSheet( nPara, pTitleSheet );
2051*b1cdbd2cSJim Jagielski 
2052*b1cdbd2cSJim Jagielski 				if( nPara ) // first slide already exists
2053*b1cdbd2cSJim Jagielski 					pOlView->InsertSlideForParagraph( pPara );
2054*b1cdbd2cSJim Jagielski 			}
2055*b1cdbd2cSJim Jagielski 			else
2056*b1cdbd2cSJim Jagielski 			{
2057*b1cdbd2cSJim Jagielski 				pOutl->SetDepth( pOutl->GetParagraph( nPara ), nDepth - 1 );
2058*b1cdbd2cSJim Jagielski 				String aStyleSheetName( pOutlSheet->GetName() );
2059*b1cdbd2cSJim Jagielski 				aStyleSheetName.Erase( aStyleSheetName.Len() - 1, 1 );
2060*b1cdbd2cSJim Jagielski 				aStyleSheetName += String::CreateFromInt32( nDepth );
2061*b1cdbd2cSJim Jagielski 				SfxStyleSheetBasePool* pStylePool = GetDoc()->GetStyleSheetPool();
2062*b1cdbd2cSJim Jagielski 				SfxStyleSheet* pStyle = (SfxStyleSheet*) pStylePool->Find( aStyleSheetName, pOutlSheet->GetFamily() );
2063*b1cdbd2cSJim Jagielski 				DBG_ASSERT( pStyle, "AutoStyleSheetName - Style not found!" );
2064*b1cdbd2cSJim Jagielski 				if ( pStyle )
2065*b1cdbd2cSJim Jagielski 					pOutl->SetStyleSheet( nPara, pStyle );
2066*b1cdbd2cSJim Jagielski 			}
2067*b1cdbd2cSJim Jagielski 		}
2068*b1cdbd2cSJim Jagielski 	}
2069*b1cdbd2cSJim Jagielski 	}
2070*b1cdbd2cSJim Jagielski 
2071*b1cdbd2cSJim Jagielski 	pOutl->GetUndoManager().Clear();
2072*b1cdbd2cSJim Jagielski 
2073*b1cdbd2cSJim Jagielski 	return( bRet );
2074*b1cdbd2cSJim Jagielski }
2075*b1cdbd2cSJim Jagielski 
WriteUserDataSequence(::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & rSequence,sal_Bool bBrowse)2076*b1cdbd2cSJim Jagielski void OutlineViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
2077*b1cdbd2cSJim Jagielski {
2078*b1cdbd2cSJim Jagielski 	WriteFrameViewData();
2079*b1cdbd2cSJim Jagielski 
2080*b1cdbd2cSJim Jagielski 	ViewShell::WriteUserDataSequence( rSequence, bBrowse );
2081*b1cdbd2cSJim Jagielski }
2082*b1cdbd2cSJim Jagielski 
ReadUserDataSequence(const::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & rSequence,sal_Bool bBrowse)2083*b1cdbd2cSJim Jagielski void OutlineViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
2084*b1cdbd2cSJim Jagielski {
2085*b1cdbd2cSJim Jagielski 	WriteFrameViewData();
2086*b1cdbd2cSJim Jagielski 
2087*b1cdbd2cSJim Jagielski 	ViewShell::ReadUserDataSequence( rSequence, bBrowse );
2088*b1cdbd2cSJim Jagielski 
2089*b1cdbd2cSJim Jagielski 	ReadFrameViewData( mpFrameView );
2090*b1cdbd2cSJim Jagielski }
2091*b1cdbd2cSJim Jagielski 
VisAreaChanged(const Rectangle & rRect)2092*b1cdbd2cSJim Jagielski void OutlineViewShell::VisAreaChanged(const Rectangle& rRect)
2093*b1cdbd2cSJim Jagielski {
2094*b1cdbd2cSJim Jagielski 	ViewShell::VisAreaChanged( rRect );
2095*b1cdbd2cSJim Jagielski 
2096*b1cdbd2cSJim Jagielski 	GetViewShellBase().GetDrawController().FireVisAreaChanged(rRect);
2097*b1cdbd2cSJim Jagielski }
2098*b1cdbd2cSJim Jagielski 
2099*b1cdbd2cSJim Jagielski /** If there is a valid controller then create a new instance of
2100*b1cdbd2cSJim Jagielski     <type>AccessibleDrawDocumentView</type>.  Otherwise delegate this call
2101*b1cdbd2cSJim Jagielski     to the base class to return a default object (probably an empty
2102*b1cdbd2cSJim Jagielski     reference).
2103*b1cdbd2cSJim Jagielski */
2104*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference<
2105*b1cdbd2cSJim Jagielski     ::com::sun::star::accessibility::XAccessible>
CreateAccessibleDocumentView(::sd::Window * pWindow)2106*b1cdbd2cSJim Jagielski     OutlineViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow)
2107*b1cdbd2cSJim Jagielski {
2108*b1cdbd2cSJim Jagielski     OSL_ASSERT (GetViewShell()!=NULL);
2109*b1cdbd2cSJim Jagielski     if (GetViewShell()->GetController() != NULL)
2110*b1cdbd2cSJim Jagielski     {
2111*b1cdbd2cSJim Jagielski         ::accessibility::AccessibleOutlineView* pDocumentView =
2112*b1cdbd2cSJim Jagielski             new ::accessibility::AccessibleOutlineView (
2113*b1cdbd2cSJim Jagielski                 pWindow,
2114*b1cdbd2cSJim Jagielski                 this,
2115*b1cdbd2cSJim Jagielski                 GetViewShell()->GetController(),
2116*b1cdbd2cSJim Jagielski                 pWindow->GetAccessibleParentWindow()->GetAccessible());
2117*b1cdbd2cSJim Jagielski         pDocumentView->Init();
2118*b1cdbd2cSJim Jagielski         return ::com::sun::star::uno::Reference<
2119*b1cdbd2cSJim Jagielski             ::com::sun::star::accessibility::XAccessible>
2120*b1cdbd2cSJim Jagielski             (static_cast< ::com::sun::star::uno::XWeak*>(pDocumentView),
2121*b1cdbd2cSJim Jagielski                 ::com::sun::star::uno::UNO_QUERY);
2122*b1cdbd2cSJim Jagielski     }
2123*b1cdbd2cSJim Jagielski     else
2124*b1cdbd2cSJim Jagielski     {
2125*b1cdbd2cSJim Jagielski         OSL_TRACE ("OutlineViewShell::CreateAccessibleDocumentView: no controller");
2126*b1cdbd2cSJim Jagielski         return ViewShell::CreateAccessibleDocumentView (pWindow);
2127*b1cdbd2cSJim Jagielski     }
2128*b1cdbd2cSJim Jagielski }
2129*b1cdbd2cSJim Jagielski 
2130*b1cdbd2cSJim Jagielski 
2131*b1cdbd2cSJim Jagielski 
2132*b1cdbd2cSJim Jagielski 
GetState(SfxItemSet & rSet)2133*b1cdbd2cSJim Jagielski void OutlineViewShell::GetState (SfxItemSet& rSet)
2134*b1cdbd2cSJim Jagielski {
2135*b1cdbd2cSJim Jagielski     // Iterate over all requested items in the set.
2136*b1cdbd2cSJim Jagielski 	SfxWhichIter aIter( rSet );
2137*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = aIter.FirstWhich();
2138*b1cdbd2cSJim Jagielski 	while (nWhich)
2139*b1cdbd2cSJim Jagielski 	{
2140*b1cdbd2cSJim Jagielski 		switch (nWhich)
2141*b1cdbd2cSJim Jagielski 		{
2142*b1cdbd2cSJim Jagielski 			case SID_SEARCH_ITEM:
2143*b1cdbd2cSJim Jagielski 			case SID_SEARCH_OPTIONS:
2144*b1cdbd2cSJim Jagielski                 // Call common (old) implementation in the document shell.
2145*b1cdbd2cSJim Jagielski                 GetDocSh()->GetState (rSet);
2146*b1cdbd2cSJim Jagielski                 break;
2147*b1cdbd2cSJim Jagielski 			default:
2148*b1cdbd2cSJim Jagielski                 OSL_TRACE ("OutlineViewShell::GetState(): can not handle which id %d", nWhich);
2149*b1cdbd2cSJim Jagielski                 break;
2150*b1cdbd2cSJim Jagielski         }
2151*b1cdbd2cSJim Jagielski 		nWhich = aIter.NextWhich();
2152*b1cdbd2cSJim Jagielski 	}
2153*b1cdbd2cSJim Jagielski }
2154*b1cdbd2cSJim Jagielski 
2155*b1cdbd2cSJim Jagielski 
2156*b1cdbd2cSJim Jagielski 
2157*b1cdbd2cSJim Jagielski 
SetCurrentPage(SdPage * pPage)2158*b1cdbd2cSJim Jagielski void OutlineViewShell::SetCurrentPage (SdPage* pPage)
2159*b1cdbd2cSJim Jagielski {
2160*b1cdbd2cSJim Jagielski     // Adapt the selection of the model.
2161*b1cdbd2cSJim Jagielski     for (sal_uInt16 i=0; i<GetDoc()->GetSdPageCount(PK_STANDARD); i++)
2162*b1cdbd2cSJim Jagielski         GetDoc()->SetSelected(
2163*b1cdbd2cSJim Jagielski             GetDoc()->GetSdPage(i, PK_STANDARD),
2164*b1cdbd2cSJim Jagielski             sal_False);
2165*b1cdbd2cSJim Jagielski     GetDoc()->SetSelected (pPage, sal_True);
2166*b1cdbd2cSJim Jagielski 
2167*b1cdbd2cSJim Jagielski     DrawController& rController(GetViewShellBase().GetDrawController());
2168*b1cdbd2cSJim Jagielski     rController.FireSelectionChangeListener();
2169*b1cdbd2cSJim Jagielski     rController.FireSwitchCurrentPage (pPage);
2170*b1cdbd2cSJim Jagielski 
2171*b1cdbd2cSJim Jagielski     pOlView->SetActualPage(pPage);
2172*b1cdbd2cSJim Jagielski }
2173*b1cdbd2cSJim Jagielski 
2174*b1cdbd2cSJim Jagielski 
2175*b1cdbd2cSJim Jagielski } // end of namespace sd
2176