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