1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef SW_VIEWIMP_HXX
#define SW_VIEWIMP_HXX
#include <vector>
#include <vcl/timer.hxx>
#include <tools/color.hxx>
#include <svx/svdtypes.hxx>
#include <tools/string.hxx>
#include <swtypes.hxx>
#include <swrect.hxx>
class ViewShell;
class SwFlyFrm;
class SwViewOption;
class SwRegionRects;
class SwFrm;
class SwLayAction;
class SwLayIdle;
class SwDrawView;
class SdrPageView;
class SwPageFrm;
class SwRegionRects;
struct SdrPaintProcRec;
class SwAccessibleMap;
class SdrObject;
class Fraction;
class SwPrintData;
class SwPagePreviewLayout;
struct PrevwPage;
class SwTxtFrm;
// --> OD #i76669#
namespace sdr { namespace contact {
class ViewObjectContactRedirector;
} }
// <--
class SwViewImp
{
friend class ViewShell;
friend class SwLayAction; //Lay- und IdleAction tragen sich ein und aus.
friend class SwLayIdle;
// for paint of page preview
friend class SwPagePreviewLayout;
ViewShell *pSh; //Falls jemand einen Imp durchreicht und doch
//mal eine ViewShell braucht hier die
//Rueckwaertsverkettung.
SwDrawView *pDrawView; //Unsere DrawView
SdrPageView *pSdrPageView; //Genau eine Seite fuer unsere DrawView
SwPageFrm *pFirstVisPage;//Zeigt immer auf die erste sichtbare Seite.
SwRegionRects *pRegion; //Sammler fuer Paintrects aus der LayAction.
SwLayAction *pLayAct; //Ist gesetzt wenn ein Action-Objekt existiert
//Wird vom SwLayAction-CTor ein- und vom DTor
//ausgetragen.
SwLayIdle *pIdleAct; //Analog zur SwLayAction fuer SwLayIdle.
SwAccessibleMap *pAccMap; // Accessible Wrappers
mutable const SdrObject * pSdrObjCached;
mutable String sSdrObjCachedComment;
sal_Bool bFirstPageInvalid :1; //Pointer auf erste Seite ungueltig?
sal_Bool bResetHdlHiddenPaint:1;// -- "" --
sal_Bool bSmoothUpdate :1; //Meber fuer SmoothScroll
sal_Bool bStopSmooth :1;
sal_Bool bStopPrt :1; // Stop Printing
sal_uInt16 nRestoreActions ; //Die Anzahl der zu restaurierenden Actions (UNO)
SwRect aSmoothRect;
SwPagePreviewLayout* mpPgPrevwLayout;
/**
Returns if printer shall be stopped.
@retval sal_True The printer shall be stopped.
@retval sal_False else
*/
sal_Bool IsStopPrt() { return bStopPrt; }
/**
Resets signal for stopping printing.
*/
void ResetStopPrt() { bStopPrt = sal_False; }
void SetFirstVisPage(); //Neue Ermittlung der ersten sichtbaren Seite
void StartAction(); //Henkel Anzeigen und verstecken.
void EndAction(); //gerufen von ViewShell::ImplXXXAction
void LockPaint(); //dito, gerufen von ViewShell::ImplLockPaint
void UnlockPaint();
private:
SwAccessibleMap *CreateAccessibleMap();
/** invalidate CONTENT_FLOWS_FROM/_TO relation for paragraphs
#i27138#
implementation for wrapper method
<ViewShell::InvalidateAccessibleParaFlowRelation(..)>
@param _pFromTxtFrm
input parameter - paragraph frame, for which the relation CONTENT_FLOWS_FROM
has to be invalidated.
If NULL, no CONTENT_FLOWS_FROM relation has to be invalidated
@param _pToTxtFrm
input parameter - paragraph frame, for which the relation CONTENT_FLOWS_TO
has to be invalidated.
If NULL, no CONTENT_FLOWS_TO relation has to be invalidated
*/
void _InvalidateAccessibleParaFlowRelation( const SwTxtFrm* _pFromTxtFrm,
const SwTxtFrm* _pToTxtFrm );
/** invalidate text selection for paragraphs
#i27301#
implementation for wrapper method
<ViewShell::InvalidateAccessibleParaTextSelection(..)>
*/
void _InvalidateAccessibleParaTextSelection();
/** invalidate attributes for paragraphs and paragraph's characters
#i88069#
implementation for wrapper method
<ViewShell::InvalidateAccessibleParaAttrs(..)>
*/
void _InvalidateAccessibleParaAttrs( const SwTxtFrm& rTxtFrm );
public:
SwViewImp( ViewShell * );
~SwViewImp();
void Init( const SwViewOption * ); //nur fuer ViewShell::Init()
const ViewShell *GetShell() const { return pSh; }
ViewShell *GetShell() { return pSh; }
Color GetRetoucheColor() const;
//Verwaltung zur ersten sichtbaren Seite
inline const SwPageFrm *GetFirstVisPage() const;
inline SwPageFrm *GetFirstVisPage();
void SetFirstVisPageInvalid() { bFirstPageInvalid = sal_True; }
sal_Bool AddPaintRect( const SwRect &rRect );
SwRegionRects *GetRegion() { return pRegion; }
void DelRegion();
// neues Interface fuer StarView Drawing
inline sal_Bool HasDrawView() const { return 0 != pDrawView; }
SwDrawView* GetDrawView() { return pDrawView; }
const SwDrawView* GetDrawView() const { return pDrawView; }
SdrPageView*GetPageView() { return pSdrPageView; }
const SdrPageView*GetPageView() const { return pSdrPageView; }
void MakeDrawView();
// add 3rd parameter <const Color* pPageBackgrdColor> for setting this
// color as the background color at the outliner of the draw view
// for painting layers <hell> and <heaven>
// add 4th parameter for the horizontal text
// direction of the page in order to set the default horizontal text
// direction at the outliner of the draw view for painting layers <hell>
// and <heaven>.
// #i76669# - added parameter <pRedirector>
void PaintLayer( const SdrLayerID _nLayerID,
SwPrintData const*const pPrintData,
const SwRect& _rRect,
const Color* _pPageBackgrdColor = 0,
const bool _bIsPageRightToLeft = false,
sdr::contact::ViewObjectContactRedirector* pRedirector = 0 ) const;
//wird als Link an die DrawEngine uebergeben, entscheidet was wie
//gepaintet wird oder nicht.
// Interface Drawing
sal_Bool IsDragPossible( const Point &rPoint );
void NotifySizeChg( const Size &rNewSz );
//SS Fuer die Lay- bzw. IdleAction und verwandtes
sal_Bool IsAction() const { return pLayAct != 0; }
sal_Bool IsIdleAction() const { return pIdleAct != 0; }
SwLayAction &GetLayAction() { return *pLayAct; }
const SwLayAction &GetLayAction() const { return *pLayAct; }
SwLayIdle &GetIdleAction() { return *pIdleAct;}
const SwLayIdle &GetIdleAction() const { return *pIdleAct;}
//Wenn eine Aktion laueft wird diese gebeten zu pruefen ob es
//an der zeit ist den WaitCrsr einzuschalten.
void CheckWaitCrsr();
sal_Bool IsCalcLayoutProgress() const; //Fragt die LayAction wenn vorhanden.
//sal_True wenn eine LayAction laeuft, dort wird dann auch das Flag fuer
//ExpressionFields gesetzt.
sal_Bool IsUpdateExpFlds();
void SetRestoreActions(sal_uInt16 nSet){nRestoreActions = nSet;}
sal_uInt16 GetRestoreActions() const{return nRestoreActions;}
void InitPagePreviewLayout();
inline SwPagePreviewLayout* PagePreviewLayout()
{
return mpPgPrevwLayout;
}
// Is this view accessible?
sal_Bool IsAccessible() const { return pAccMap != 0; }
inline SwAccessibleMap& GetAccessibleMap();
// Update (this) accessible view
void UpdateAccessible();
// Remove a frame from the accessible view
void DisposeAccessible( const SwFrm *pFrm, const SdrObject *pObj,
sal_Bool bRecursive );
inline void DisposeAccessibleFrm( const SwFrm *pFrm,
sal_Bool bRecursive=sal_False );
inline void DisposeAccessibleObj( const SdrObject *pObj );
// Move a frame's position in the accessible view
void MoveAccessible( const SwFrm *pFrm, const SdrObject *pObj,
const SwRect& rOldFrm );
inline void MoveAccessibleFrm( const SwFrm *pFrm, const SwRect& rOldFrm );
// Add a frame in the accessible view
inline void AddAccessibleFrm( const SwFrm *pFrm );
inline void AddAccessibleObj( const SdrObject *pObj );
// Invalidate accessible frame's frame's content
void InvalidateAccessibleFrmContent( const SwFrm *pFrm );
// Invalidate accessible frame's cursor position
void InvalidateAccessibleCursorPosition( const SwFrm *pFrm );
// Invalidate editable state for all accessible frames
void InvalidateAccessibleEditableState( sal_Bool bAllShells=sal_True,
const SwFrm *pFrm=0 );
// Invalidate frame's relation set (for chained frames)
void InvalidateAccessibleRelationSet( const SwFlyFrm *pMaster,
const SwFlyFrm *pFollow );
// update data for accessible preview
// change method signature due to new page preview functionality
void UpdateAccessiblePreview( const std::vector<PrevwPage*>& _rPrevwPages,
const Fraction& _rScale,
const SwPageFrm* _pSelectedPageFrm,
const Size& _rPrevwWinSize );
void InvalidateAccessiblePreViewSelection( sal_uInt16 nSelPage );
// Fire all accessible events that have been collected so far
void FireAccessibleEvents();
};
inline SwPageFrm *SwViewImp::GetFirstVisPage()
{
if ( bFirstPageInvalid )
SetFirstVisPage();
return pFirstVisPage;
}
inline const SwPageFrm *SwViewImp::GetFirstVisPage() const
{
if ( bFirstPageInvalid )
((SwViewImp*)this)->SetFirstVisPage();
return pFirstVisPage;
}
inline SwAccessibleMap& SwViewImp::GetAccessibleMap()
{
if( !pAccMap )
CreateAccessibleMap();
return *pAccMap;
}
inline void SwViewImp::DisposeAccessibleFrm( const SwFrm *pFrm,
sal_Bool bRecursive )
{
DisposeAccessible( pFrm, 0, bRecursive );
}
inline void SwViewImp::DisposeAccessibleObj( const SdrObject *pObj )
{
DisposeAccessible( 0, pObj, sal_False );
}
inline void SwViewImp::MoveAccessibleFrm( const SwFrm *pFrm,
const SwRect& rOldFrm )
{
MoveAccessible( pFrm, 0, rOldFrm );
}
inline void SwViewImp::AddAccessibleFrm( const SwFrm *pFrm )
{
SwRect aEmptyRect;
MoveAccessible( pFrm, 0, aEmptyRect );
}
inline void SwViewImp::AddAccessibleObj( const SdrObject *pObj )
{
SwRect aEmptyRect;
MoveAccessible( 0, pObj, aEmptyRect );
}
#endif // SW_VIEWIMP_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|