Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include <string>
22 :
23 : #include "hintids.hxx"
24 : #include <vcl/svapp.hxx>
25 : #include <sfx2/dispatch.hxx>
26 : #include <svx/ruler.hxx>
27 : #include <editeng/lrspitem.hxx>
28 : #include <svl/srchitem.hxx>
29 : #include <sfx2/request.hxx>
30 : #include <swmodule.hxx>
31 : #include <view.hxx>
32 : #include <wrtsh.hxx>
33 : #include <docsh.hxx>
34 : #include <viewopt.hxx>
35 : #include <frmatr.hxx>
36 : #include <wdocsh.hxx>
37 : #include <uitool.hxx>
38 : #include <edtwin.hxx>
39 : #include <pagedesc.hxx>
40 : #include <IMark.hxx>
41 : #include <fldbas.hxx>
42 : #include <workctrl.hxx>
43 : #include <usrpref.hxx>
44 : #include <scroll.hxx>
45 : #include <wview.hxx>
46 :
47 : #include <cmdid.h>
48 : #include <view.hrc>
49 : #include <ribbar.hrc>
50 : #include <helpid.h>
51 : #include <globals.hrc>
52 :
53 : #include <IDocumentSettingAccess.hxx>
54 : #include <PostItMgr.hxx>
55 :
56 : sal_uInt16 SwView::nMoveType = NID_PGE;
57 : sal_Int32 SwView::nActMark = 0;
58 :
59 :
60 : #define VIEW_IMAGECOLOR COL_LIGHTBLUE
61 :
62 : using namespace ::com::sun::star::uno;
63 : using namespace ::com::sun::star::frame;
64 :
65 33 : void SwView::SetZoom( SvxZoomType eZoomType, short nFactor, sal_Bool bViewOnly )
66 : {
67 33 : _SetZoom( GetEditWin().GetOutputSizePixel(), eZoomType, nFactor, bViewOnly );
68 33 : }
69 :
70 34 : void SwView::_SetZoom( const Size &rEditSize, SvxZoomType eZoomType,
71 : short nFactor, sal_Bool bViewOnly )
72 : {
73 34 : sal_Bool bUnLockView = !pWrtShell->IsViewLocked();
74 34 : pWrtShell->LockView( sal_True );
75 34 : pWrtShell->LockPaint();
76 :
77 : {
78 34 : SwActContext aActContext(pWrtShell);
79 :
80 34 : long nFac = nFactor;
81 :
82 34 : sal_Bool bWeb = 0 != PTR_CAST(SwWebView, this);
83 34 : SwMasterUsrPref *pUsrPref = (SwMasterUsrPref*)SW_MOD()->GetUsrPref(bWeb);
84 :
85 34 : const SwPageDesc &rDesc = pWrtShell->GetPageDesc( pWrtShell->GetCurPageDesc() );
86 34 : const SvxLRSpaceItem &rLRSpace = rDesc.GetMaster().GetLRSpace();
87 34 : const SwViewOption *pOpt = pWrtShell->GetViewOptions();
88 34 : long lLeftMargin = 0;
89 :
90 34 : if( eZoomType != SVX_ZOOM_PERCENT )
91 : {
92 2 : const bool bAutomaticViewLayout = 0 == pOpt->GetViewLayoutColumns();
93 :
94 2 : const SwRect aPageRect( pWrtShell->GetAnyCurRect( RECT_PAGE_CALC ) );
95 2 : const SwRect aRootRect( pWrtShell->GetAnyCurRect( RECT_PAGES_AREA ) );
96 2 : Size aPageSize( aPageRect.SSize() );
97 2 : Size aRootSize( aRootRect.SSize() );
98 :
99 : //mod #i6193# added sidebar width
100 2 : SwPostItMgr* pPostItMgr = GetPostItMgr();
101 2 : if (pPostItMgr->HasNotes() && pPostItMgr->ShowNotes())
102 0 : aPageSize.Width() += pPostItMgr->GetSidebarWidth() + pPostItMgr->GetSidebarBorderWidth();
103 :
104 2 : const MapMode aTmpMap( MAP_TWIP );
105 2 : const Size aWindowSize( GetEditWin().PixelToLogic( rEditSize, aTmpMap ) );
106 :
107 2 : if( nsUseOnPage::PD_MIRROR == rDesc.GetUseOn() ) // gespiegelte Seiten
108 : {
109 0 : const SvxLRSpaceItem &rLeftLRSpace = rDesc.GetLeft().GetLRSpace();
110 0 : aPageSize.Width() += Abs( long(rLeftLRSpace.GetLeft()) - long(rLRSpace.GetLeft()) );
111 : }
112 :
113 2 : if( SVX_ZOOM_OPTIMAL == eZoomType )
114 : {
115 0 : if (!pPostItMgr->HasNotes() || !pPostItMgr->ShowNotes())
116 0 : aPageSize.Width() -= ( rLRSpace.GetLeft() + rLRSpace.GetRight() + nLeftOfst * 2 );
117 0 : lLeftMargin = long(rLRSpace.GetLeft()) + DOCUMENTBORDER + nLeftOfst;
118 0 : nFac = aWindowSize.Width() * 100 / aPageSize.Width();
119 : }
120 2 : else if(SVX_ZOOM_WHOLEPAGE == eZoomType || SVX_ZOOM_PAGEWIDTH == eZoomType )
121 : {
122 2 : const long nOf = DOCUMENTBORDER * 2L;
123 2 : long nTmpWidth = bAutomaticViewLayout ? aPageSize.Width() : aRootSize.Width();
124 2 : nTmpWidth += nOf;
125 2 : aPageSize.Height() += nOf;
126 2 : nFac = aWindowSize.Width() * 100 / nTmpWidth;
127 :
128 2 : if ( SVX_ZOOM_WHOLEPAGE == eZoomType )
129 : {
130 0 : long nVisPercent = aWindowSize.Height() * 100 / aPageSize.Height();
131 0 : nFac = Min( nFac, nVisPercent );
132 2 : }
133 : }
134 : else
135 : {
136 0 : const long nTmpWidth = bAutomaticViewLayout ? aPageSize.Width() : aRootSize.Width();
137 0 : nFac = aWindowSize.Width() * 100 / nTmpWidth;
138 2 : }
139 : }
140 :
141 34 : nFac = Max( long( MINZOOM ), nFac );
142 :
143 34 : SwViewOption aOpt( *pOpt );
144 34 : if ( !GetViewFrame()->GetFrame().IsInPlace() )
145 : {
146 : //MasterUsrPrefs updaten UND DANACH die ViewOptions der aktuellen
147 : //View updaten.
148 34 : if ( !bViewOnly &&
149 0 : (sal_uInt16(nFac) != pUsrPref->GetZoom() ||
150 0 : sal_uInt8 (eZoomType) != pUsrPref->GetZoomType()) )
151 : {
152 0 : pUsrPref->SetZoom ( sal_uInt16(nFac) );
153 0 : pUsrPref->SetZoomType( eZoomType );
154 0 : SW_MOD()->ApplyUsrPref( *pUsrPref,
155 : bViewOnly ? this: 0,
156 0 : bViewOnly ? VIEWOPT_DEST_VIEW_ONLY : 0 );
157 0 : pUsrPref->SetModified();
158 : }
159 34 : if ( pOpt->GetZoom() != (sal_uInt16) nFac )
160 : {
161 33 : aOpt.SetZoom ( sal_uInt16(nFac) );
162 33 : aOpt.SetReadonly(pOpt->IsReadonly());
163 33 : pWrtShell->ApplyViewOptions( aOpt );
164 : }
165 34 : if ( eZoomType != SVX_ZOOM_PERCENT )
166 : {
167 2 : Point aPos;
168 :
169 2 : if ( eZoomType == SVX_ZOOM_WHOLEPAGE )
170 0 : aPos.Y() = pWrtShell->GetAnyCurRect(RECT_PAGE).Top() - DOCUMENTBORDER;
171 : else
172 : {
173 : //sicherstellen, dass sich der Cursor im sichtbaren
174 : //Bereich befindet, damit nur 1x gescrollt wird
175 2 : aPos.X() = lLeftMargin;
176 2 : const SwRect &rCharRect = pWrtShell->GetCharRect();
177 4 : if ( rCharRect.Top() > GetVisArea().Bottom() ||
178 2 : rCharRect.Bottom() < aPos.Y() )
179 0 : aPos.Y() = rCharRect.Top() - rCharRect.Height();
180 : else
181 2 : aPos.Y() = GetVisArea().Top();
182 : }
183 2 : SetVisArea( aPos );
184 : }
185 : // OS: Notloesung - in CalcVisArea wird u.U. wieder SetZoom gerufen und
186 : // dann werden falsche Werte eingestellt
187 34 : ((SwViewOption*)pWrtShell->GetViewOptions())->SetZoomType( eZoomType );
188 34 : CalcVisArea( rEditSize ); //fuer das Neuberechnen des sichtbaren Bereiches
189 : }
190 0 : else if ( sal_uInt16(nFac) != pOpt->GetZoom() )
191 : {
192 0 : aOpt.SetZoom ( sal_uInt16(nFac) );
193 0 : pWrtShell->ApplyViewOptions( aOpt );
194 : }
195 :
196 34 : const Fraction aFrac( nFac, 100 );
197 34 : pVRuler->SetZoom( aFrac );
198 34 : pVRuler->ForceUpdate();
199 34 : pHRuler->SetZoom( aFrac );
200 34 : pHRuler->ForceUpdate();
201 34 : ((SwViewOption*)pWrtShell->GetViewOptions())->SetZoomType( eZoomType );
202 : }
203 34 : pWrtShell->UnlockPaint();
204 34 : if( bUnLockView )
205 33 : pWrtShell->LockView( sal_False );
206 34 : }
207 :
208 0 : void SwView::SetViewLayout( sal_uInt16 nColumns, bool bBookMode, sal_Bool bViewOnly )
209 : {
210 0 : const sal_Bool bUnLockView = !pWrtShell->IsViewLocked();
211 0 : pWrtShell->LockView( sal_True );
212 0 : pWrtShell->LockPaint();
213 :
214 : {
215 :
216 0 : SwActContext aActContext(pWrtShell);
217 :
218 0 : if ( !GetViewFrame()->GetFrame().IsInPlace() && !bViewOnly )
219 : {
220 0 : const sal_Bool bWeb = 0 != PTR_CAST(SwWebView, this);
221 0 : SwMasterUsrPref *pUsrPref = (SwMasterUsrPref*)SW_MOD()->GetUsrPref(bWeb);
222 :
223 : //MasterUsrPrefs updaten UND DANACH die ViewOptions der aktuellen
224 : //View updaten.
225 0 : if ( nColumns != pUsrPref->GetViewLayoutColumns() ||
226 0 : bBookMode != pUsrPref->IsViewLayoutBookMode() )
227 : {
228 0 : pUsrPref->SetViewLayoutColumns( nColumns );
229 0 : pUsrPref->SetViewLayoutBookMode( bBookMode );
230 0 : SW_MOD()->ApplyUsrPref( *pUsrPref,
231 : bViewOnly ? this: 0,
232 0 : bViewOnly ? VIEWOPT_DEST_VIEW_ONLY : 0 );
233 0 : pUsrPref->SetModified();
234 : }
235 : }
236 :
237 0 : const SwViewOption *pOpt = pWrtShell->GetViewOptions();
238 :
239 0 : if ( nColumns != pOpt->GetViewLayoutColumns() ||
240 0 : bBookMode != pOpt->IsViewLayoutBookMode() )
241 : {
242 0 : SwViewOption aOpt( *pOpt );
243 0 : aOpt.SetViewLayoutColumns( nColumns );
244 0 : aOpt.SetViewLayoutBookMode( bBookMode );
245 0 : pWrtShell->ApplyViewOptions( aOpt );
246 : }
247 :
248 0 : pVRuler->ForceUpdate();
249 0 : pHRuler->ForceUpdate();
250 :
251 : }
252 :
253 0 : pWrtShell->UnlockPaint();
254 0 : if( bUnLockView )
255 0 : pWrtShell->LockView( sal_False );
256 :
257 0 : SfxBindings& rBnd = GetViewFrame()->GetBindings();
258 0 : rBnd.Invalidate( SID_ATTR_VIEWLAYOUT );
259 0 : rBnd.Invalidate( SID_ATTR_ZOOMSLIDER);
260 0 : }
261 :
262 : /*
263 : * Scrollbar - Handler
264 : */
265 30528 : IMPL_LINK( SwView, WindowChildEventListener, VclSimpleEvent*, pEvent )
266 : {
267 : OSL_ENSURE( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" );
268 15264 : if ( pEvent && pEvent->ISA( VclWindowEvent ) )
269 : {
270 15264 : VclWindowEvent *pVclEvent = static_cast< VclWindowEvent * >( pEvent );
271 : OSL_ENSURE( pVclEvent->GetWindow(), "Window???" );
272 15264 : Window* pChildWin = static_cast< Window* >( pVclEvent->GetData() );
273 :
274 15264 : switch ( pVclEvent->GetId() )
275 : {
276 : case VCLEVENT_WINDOW_HIDE:
277 31 : if( pChildWin == pHScrollbar )
278 7 : ShowHScrollbar( sal_False );
279 24 : else if( pChildWin == pVScrollbar )
280 2 : ShowVScrollbar( sal_False );
281 31 : break;
282 : case VCLEVENT_WINDOW_SHOW:
283 3582 : if( pChildWin == pHScrollbar )
284 185 : ShowHScrollbar( sal_True );
285 3397 : else if( pChildWin == pVScrollbar )
286 186 : ShowVScrollbar( sal_True );
287 3582 : break;
288 : }
289 : }
290 :
291 15264 : return 0;
292 : }
293 :
294 472 : int SwView::_CreateScrollbar( sal_Bool bHori )
295 : {
296 472 : Window *pMDI = &GetViewFrame()->GetWindow();
297 472 : SwScrollbar** ppScrollbar = bHori ? &pHScrollbar : &pVScrollbar;
298 :
299 : OSL_ENSURE( !*ppScrollbar, "vorher abpruefen!" );
300 :
301 472 : if( !bHori )
302 236 : CreatePageButtons( !bShowAtResize );
303 :
304 472 : *ppScrollbar = new SwScrollbar( pMDI, bHori );
305 472 : UpdateScrollbars();
306 472 : if(bHori)
307 236 : (*ppScrollbar)->SetScrollHdl( LINK( this, SwView, EndScrollHdl ));
308 : else
309 236 : (*ppScrollbar)->SetScrollHdl( LINK( this, SwView, ScrollHdl ));
310 472 : (*ppScrollbar)->SetEndScrollHdl( LINK( this, SwView, EndScrollHdl ));
311 :
312 472 : (*ppScrollbar)->EnableDrag( sal_True );
313 :
314 472 : if(GetWindow())
315 0 : InvalidateBorder();
316 :
317 : // Scrollbar muss nochmals getestet werden, da im InvalidateBorder u.U. der
318 : // Scrollbar wieder geloescht wurde
319 472 : if ( !bShowAtResize && (*ppScrollbar))
320 0 : (*ppScrollbar)->ExtendedShow();
321 :
322 472 : return 1;
323 : }
324 :
325 236 : void SwView::CreatePageButtons(sal_Bool bShow)
326 : {
327 236 : Window *pMDI = &GetViewFrame()->GetWindow();
328 236 : pPageUpBtn = new SwHlpImageButton(pMDI, SW_RES( BTN_PAGEUP ), sal_True );
329 236 : pPageUpBtn->SetHelpId(HID_SCRL_PAGEUP);
330 236 : pPageDownBtn = new SwHlpImageButton(pMDI, SW_RES( BTN_PAGEDOWN ), sal_False );
331 236 : pPageDownBtn->SetHelpId(HID_SCRL_PAGEDOWN);
332 236 : Reference< XFrame > xFrame = GetViewFrame()->GetFrame().GetFrameInterface();
333 236 : pNaviBtn = new SwNaviImageButton(pMDI, xFrame );
334 236 : pNaviBtn->SetHelpId(HID_SCRL_NAVI);
335 236 : Link aLk( LINK( this, SwView, BtnPage ) );
336 236 : pPageUpBtn->SetClickHdl( aLk );
337 236 : pPageDownBtn->SetClickHdl( aLk );
338 236 : if(nMoveType != NID_PGE)
339 : {
340 0 : Color aColor(VIEW_IMAGECOLOR);
341 0 : SetImageButtonColor(aColor);
342 : }
343 :
344 236 : if(bShow)
345 : {
346 0 : pPageUpBtn->Show();
347 0 : pPageDownBtn->Show();
348 0 : pNaviBtn->Show();
349 236 : }
350 236 : };
351 :
352 : /*
353 : * Button-Handler
354 : */
355 0 : IMPL_LINK( SwView, BtnPage, Button *, pButton )
356 : {
357 : // #i75416# move the execution of the search to an asynchronously called static link
358 0 : bool* pbNext = new bool( (pButton == pPageDownBtn) );
359 0 : Application::PostUserEvent( STATIC_LINK(this, SwView, MoveNavigationHdl), pbNext );
360 0 : return 0;
361 : }
362 :
363 0 : IMPL_STATIC_LINK( SwView, MoveNavigationHdl, bool *, pbNext )
364 : {
365 0 : if ( !pbNext )
366 0 : return 0;
367 0 : bool bNext = *pbNext;
368 0 : SwWrtShell& rSh = pThis->GetWrtShell();
369 0 : switch( nMoveType )
370 : {
371 : case NID_PGE:
372 0 : bNext ? pThis->PhyPageDown() : pThis->PhyPageUp();
373 0 : break;
374 : case NID_TBL :
375 0 : rSh.EnterStdMode();
376 0 : if(bNext)
377 0 : rSh.MoveTable(fnTableNext, fnTableStart);
378 : else
379 0 : rSh.MoveTable(fnTablePrev, fnTableStart);
380 0 : break;
381 : case NID_FRM :
382 : case NID_GRF:
383 : case NID_OLE:
384 : {
385 0 : sal_uInt16 eType = GOTOOBJ_FLY_FRM;
386 0 : if(nMoveType == NID_GRF)
387 0 : eType = GOTOOBJ_FLY_GRF;
388 0 : else if(nMoveType == NID_OLE)
389 0 : eType = GOTOOBJ_FLY_OLE;
390 : sal_Bool bSuccess = bNext ?
391 0 : rSh.GotoNextFly(eType) :
392 0 : rSh.GotoPrevFly(eType);
393 0 : if(bSuccess)
394 : {
395 0 : rSh.HideCrsr();
396 0 : rSh.EnterSelFrmMode();
397 : }
398 : }
399 0 : break;
400 : case NID_DRW :
401 : case NID_CTRL:
402 : rSh.GotoObj(bNext,
403 : nMoveType == NID_DRW ?
404 : GOTOOBJ_DRAW_SIMPLE :
405 0 : GOTOOBJ_DRAW_CONTROL);
406 0 : break;
407 : case NID_REG :
408 0 : rSh.EnterStdMode();
409 0 : if(bNext)
410 0 : rSh.MoveRegion(fnRegionNext, fnRegionStart);
411 : else
412 0 : rSh.MoveRegion(fnRegionPrev, fnRegionStart);
413 :
414 0 : break;
415 : case NID_BKM :
416 0 : rSh.EnterStdMode();
417 : pThis->GetViewFrame()->GetDispatcher()->Execute(bNext ?
418 : FN_NEXT_BOOKMARK :
419 0 : FN_PREV_BOOKMARK);
420 0 : break;
421 : case NID_OUTL:
422 0 : rSh.EnterStdMode();
423 0 : bNext ? rSh.GotoNextOutline() : rSh.GotoPrevOutline();
424 0 : break;
425 : case NID_SEL :
426 0 : bNext ? rSh.GoNextCrsr() : rSh.GoPrevCrsr();
427 0 : break;
428 : case NID_FTN:
429 0 : rSh.EnterStdMode();
430 : bNext ?
431 0 : rSh.GotoNextFtnAnchor() :
432 0 : rSh.GotoPrevFtnAnchor();
433 0 : break;
434 : case NID_MARK:
435 : {
436 : // unselect
437 0 : rSh.MoveCrsr();
438 0 : rSh.EnterStdMode();
439 :
440 : // collect navigator reminders
441 0 : IDocumentMarkAccess* const pMarkAccess = rSh.getIDocumentMarkAccess();
442 0 : ::std::vector< const ::sw::mark::IMark* > vNavMarks;
443 0 : for( IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getMarksBegin();
444 0 : ppMark != pMarkAccess->getMarksEnd();
445 : ppMark++)
446 : {
447 0 : if( IDocumentMarkAccess::GetType(**ppMark) == IDocumentMarkAccess::NAVIGATOR_REMINDER )
448 0 : vNavMarks.push_back(ppMark->get());
449 : }
450 :
451 : // move
452 0 : if(!vNavMarks.empty())
453 : {
454 0 : if(bNext)
455 : {
456 0 : nActMark++;
457 0 : if (nActMark >= MAX_MARKS || nActMark >= static_cast<sal_Int32>(vNavMarks.size()))
458 0 : nActMark = 0;
459 : }
460 : else
461 : {
462 0 : nActMark--;
463 0 : if (nActMark < 0 || nActMark >= static_cast<sal_Int32>(vNavMarks.size()))
464 0 : nActMark = vNavMarks.size()-1;
465 : }
466 0 : rSh.GotoMark(vNavMarks[nActMark]);
467 0 : }
468 : }
469 0 : break;
470 : case NID_POSTIT:
471 : {
472 0 : sw::sidebarwindows::SwSidebarWin* pPostIt = pThis->GetPostItMgr()->GetActiveSidebarWin();
473 0 : if (pPostIt)
474 0 : pThis->GetPostItMgr()->SetActiveSidebarWin(0);
475 0 : SwFieldType* pFldType = rSh.GetFldType(0, RES_POSTITFLD);
476 0 : if (rSh.MoveFldType(pFldType, bNext))
477 0 : pThis->GetViewFrame()->GetDispatcher()->Execute(FN_POSTIT);
478 : else
479 : //first/last item
480 0 : pThis->GetPostItMgr()->SetActiveSidebarWin(pPostIt);
481 : }
482 0 : break;
483 : case NID_SRCH_REP:
484 0 : if(pSrchItem)
485 : {
486 0 : sal_Bool bBackward = pSrchItem->GetBackward();
487 0 : if(rSh.HasSelection() && !bNext == rSh.IsCrsrPtAtEnd())
488 0 : rSh.SwapPam();
489 0 : pSrchItem->SetBackward(!bNext);
490 0 : SfxRequest aReq(FN_REPEAT_SEARCH, SFX_CALLMODE_SLOT, pThis->GetPool());
491 0 : pThis->ExecSearch(aReq);
492 0 : pSrchItem->SetBackward(bBackward);
493 : }
494 0 : break;
495 : case NID_INDEX_ENTRY:
496 0 : rSh.GotoNxtPrvTOXMark(bNext);
497 0 : break;
498 :
499 : case NID_TABLE_FORMULA:
500 0 : rSh.GotoNxtPrvTblFormula( bNext );
501 0 : break;
502 :
503 : case NID_TABLE_FORMULA_ERROR:
504 0 : rSh.GotoNxtPrvTblFormula( bNext, sal_True );
505 0 : break;
506 : }
507 0 : pThis->pEditWin->GrabFocus();
508 0 : delete pbNext;
509 0 : return 0;
510 : }
511 :
512 236 : int SwView::CreateTab()
513 : {
514 236 : pHRuler->SetActive(GetFrame() && IsActive());
515 :
516 236 : pHRuler->Show();
517 236 : InvalidateBorder();
518 236 : return 1;
519 : }
520 :
521 0 : int SwView::KillTab()
522 : {
523 0 : pHRuler->Hide();
524 0 : InvalidateBorder();
525 0 : return 1;
526 : }
527 :
528 0 : void SwView::ChangeTabMetric( FieldUnit eUnit )
529 : {
530 0 : if(pHRuler->GetUnit() != eUnit )
531 : {
532 0 : pHRuler->SetUnit( eUnit );
533 0 : pHRuler->Invalidate();
534 : }
535 0 : }
536 :
537 0 : void SwView::ChangeVLinealMetric( FieldUnit eUnit )
538 : {
539 0 : if(pVRuler->GetUnit() != eUnit)
540 : {
541 0 : pVRuler->SetUnit( eUnit );
542 0 : pVRuler->Invalidate();
543 : }
544 0 : }
545 :
546 0 : void SwView::GetVLinealMetric(FieldUnit& eToFill) const
547 : {
548 0 : eToFill = pVRuler->GetUnit();
549 0 : }
550 :
551 0 : void SwView::GetHLinealMetric(FieldUnit& eToFill) const
552 : {
553 0 : eToFill = pHRuler->GetUnit();
554 0 : }
555 :
556 236 : int SwView::CreateVLineal()
557 : {
558 236 : pHRuler->SetBorderPos( pVRuler->GetSizePixel().Width()-1 );
559 :
560 236 : pVRuler->SetActive(GetFrame() && IsActive());
561 236 : pVRuler->Show();
562 236 : InvalidateBorder();
563 236 : return 1;
564 : }
565 :
566 0 : int SwView::KillVLineal()
567 : {
568 0 : pVRuler->Hide();
569 0 : pHRuler->SetBorderPos( 0 );
570 0 : InvalidateBorder();
571 0 : return 1;
572 : }
573 :
574 0 : IMPL_LINK( SwView, ExecRulerClick, Ruler *, pRuler )
575 : {
576 0 : sal_uInt16 nDefPage = 0;
577 0 : switch( pRuler->GetClickType() )
578 : {
579 : case RULER_TYPE_DONTKNOW:
580 : case RULER_TYPE_OUTSIDE:
581 : case RULER_TYPE_INDENT:
582 : case RULER_TYPE_MARGIN1:
583 : case RULER_TYPE_MARGIN2:
584 0 : nDefPage = TP_PARA_STD;
585 0 : break;
586 : default:
587 0 : nDefPage = TP_TABULATOR;
588 :
589 : }
590 :
591 0 : SfxUInt16Item aDefPage(SID_PARA_DLG, nDefPage);
592 : GetViewFrame()->GetDispatcher()->Execute( SID_PARA_DLG,
593 : SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD,
594 0 : &aDefPage, 0L );
595 0 : return 0;
596 : }
597 :
598 0 : sal_uInt16 SwView::GetMoveType()
599 : {
600 0 : return nMoveType;
601 : }
602 :
603 0 : void SwView::SetMoveType(sal_uInt16 nSet)
604 : {
605 0 : sal_Bool bLastPage = nMoveType == NID_PGE;
606 0 : nMoveType = nSet;
607 0 : sal_Bool bNewPage = nMoveType == NID_PGE;
608 0 : if(bNewPage != bLastPage)
609 : {
610 0 : Color aColor(bNewPage ? COL_BLACK : VIEW_IMAGECOLOR);
611 0 : const TypeId aTypeId = TYPE(SwView);
612 0 : SwView* pView = (SwView*)SfxViewShell::GetFirst(&aTypeId);
613 0 : while( pView )
614 : {
615 0 : pView->SetImageButtonColor(aColor);
616 0 : pView = (SwView*)SfxViewShell::GetNext(*pView, &aTypeId);
617 : }
618 : }
619 0 : }
620 :
621 0 : void SwView::SetActMark(sal_Int32 nSet)
622 : {
623 0 : nActMark = nSet;
624 0 : }
625 :
626 0 : void SwView::SetImageButtonColor(Color& rColor)
627 : {
628 0 : if(pPageUpBtn)
629 : {
630 0 : pPageUpBtn->SetControlForeground(rColor);
631 0 : pPageDownBtn->SetControlForeground(rColor);
632 : }
633 0 : }
634 :
635 428 : void SwView::ShowHScrollbar(sal_Bool bShow)
636 : {
637 : OSL_ENSURE(pHScrollbar, "Scrollbar invalid");
638 428 : pHScrollbar->ExtendedShow(bShow);
639 428 : }
640 :
641 0 : sal_Bool SwView::IsHScrollbarVisible()const
642 : {
643 : OSL_ENSURE(pHScrollbar, "Scrollbar invalid");
644 0 : return pHScrollbar->IsVisible( sal_False ) || pHScrollbar->IsAuto();
645 : }
646 :
647 424 : void SwView::ShowVScrollbar(sal_Bool bShow)
648 : {
649 : OSL_ENSURE(pVScrollbar, "Scrollbar invalid");
650 424 : pVScrollbar->ExtendedShow(bShow);
651 424 : pPageUpBtn->Show(bShow);
652 424 : pPageDownBtn->Show(bShow);
653 424 : pNaviBtn->Show(bShow);
654 424 : }
655 :
656 0 : sal_Bool SwView::IsVScrollbarVisible()const
657 : {
658 : OSL_ENSURE(pVScrollbar, "Scrollbar invalid");
659 0 : return pVScrollbar->IsVisible( sal_False );
660 : }
661 :
662 0 : void SwView::EnableHScrollbar(bool bEnable)
663 : {
664 0 : if (mbHScrollbarEnabled != bEnable)
665 : {
666 0 : mbHScrollbarEnabled = bEnable;
667 0 : InvalidateBorder();
668 : }
669 0 : }
670 :
671 0 : void SwView::EnableVScrollbar(bool bEnable)
672 : {
673 0 : if (mbVScrollbarEnabled != bEnable)
674 : {
675 0 : mbVScrollbarEnabled = bEnable;
676 0 : InvalidateBorder();
677 : }
678 0 : }
679 :
680 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|