00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 #ifndef INC_NODE
00117 #define INC_NODE
00118
00119
00120 #include <assert.h>
00121
00122 #include "release.h"
00123
00124 class CCAPI NodeRenderablePaper;
00125 class NodeRenderableInk;
00126 class CCAPI Chapter;
00127 class CCAPI Layer;
00128 class RenderRegion;
00129 class NodeAttribute;
00130 class Spread;
00131 class List;
00132 class TransformBase;
00133 class UndoableOperation;
00134 class BaseDocument;
00135 class BecomeA;
00136 class ObjChangeParam;
00137 class Filter;
00138 class KernelBitmap;
00139 class NodeHidden;
00140 class InternalClipboardFormat;
00141 class NodePath;
00142 class BaseCamelotFilter;
00143 class ExtendParams;
00144 class NodeCompound;
00145
00146 #if _RELEASE
00147 #define DEBUG_TREE 0
00148 #else
00149 #define DEBUG_TREE 1
00150 #endif
00151
00152 #ifdef RALPH
00153 #undef DEBUG_TREE
00154 #define DEBUG_TREE 0
00155 #endif
00156
00157
00158
00159
00160 enum AttachNodeDirection { PREV, NEXT, FIRSTCHILD, LASTCHILD };
00161
00162
00163
00164 typedef struct
00165 {
00166 unsigned Required : 1;
00167 unsigned Attribute : 1;
00168 unsigned Renderable : 1;
00169 unsigned Intersects : 1;
00170 } ClippedInkFlags;
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 typedef enum ChangeCode
00185 {
00186 CC_OK,
00187 CC_NORECORD,
00188 CC_FAIL
00189 };
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203 typedef enum SubtreeRenderState
00204 {
00205 SUBTREE_NORENDER = 0,
00206 SUBTREE_ROOTONLY,
00207 SUBTREE_ROOTANDCHILDREN,
00208 SUBTREE_JUMPTO,
00209 SUBTREE_RUNTO
00210 };
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231 enum OpPermissionState { PERMISSION_UNDEFINED,
00232 PERMISSION_DENIED,
00233 PERMISSION_ALLOWED
00234 };
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252 typedef enum CopyType
00253 {
00254 SIMPLECOPY,
00255 COMPLEXCOPY
00256 };
00257
00258 typedef enum CopyStage
00259 {
00260 COPYOBJECT,
00261 COPYFINISHED
00262 };
00263
00264 typedef enum CopyControlFlags
00265 {
00266 ccALL,
00267 ccLOCKED,
00268 ccMANGLED,
00269 ccMARKED,
00270 ccSELECTED,
00271 ccRENDERABLE
00272 };
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287 class AttrTypeItem: public ListItem
00288 {
00289 public:
00290 CCRuntimeClass* AttributeType;
00291 };
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304 class AttrTypeSet: public List
00305 {
00306 public:
00307
00308
00309 AttrTypeSet* CopySet();
00310
00311
00312 virtual BOOL AddToSet(CCRuntimeClass* AttrType);
00313
00314 virtual BOOL AddToSet(List& AttributeList);
00315
00316
00317 BOOL InSet(CCRuntimeClass* AttrType);
00318
00319 ~AttrTypeSet() { DeleteAll(); };
00320
00321 };
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344 class CCAPI Node: public CCObject
00345 {
00346 CC_DECLARE_DYNAMIC( Node )
00347
00348 public:
00349
00350
00351 Node();
00352 Node(Node* ContextNode,
00353 AttachNodeDirection Direction,
00354 BOOL Locked=FALSE,
00355 BOOL Mangled=FALSE,
00356 BOOL Marked=FALSE,
00357 BOOL Selected=FALSE,
00358 BOOL Renderable=FALSE);
00359
00360
00361 virtual ~Node();
00362
00363 virtual void Render( RenderRegion* pRender );
00364 void RenderTreeAtomic(RenderRegion* pRender);
00365
00366 virtual BOOL NeedsToRender(RenderRegion* pRender);
00367 virtual void PreExportRender( RenderRegion* pRender );
00368 virtual BOOL ExportRender( RenderRegion* pRender );
00369 virtual BOOL NeedsToExport(RenderRegion* pRender, BOOL VisibleLayersOnly = FALSE,
00370 BOOL CheckSelected = FALSE);
00371 virtual String Describe(BOOL Plural, BOOL Verbose = TRUE);
00372
00373
00374 virtual ChangeCode OnChildChange(ObjChangeParam* pParam);
00375
00376
00377 virtual OpPermissionState GetOpPermission();
00378 virtual void SetOpPermission(OpPermissionState NewState,BOOL AndParents = FALSE);
00379
00380
00381 virtual BOOL AllowOp(ObjChangeParam* pParam,BOOL SetOpPermissionState = TRUE,
00382 BOOL DoPreTriggerEdit = TRUE);
00383 virtual BOOL AllowOp_AccountForCompound(ObjChangeParam* pParam,
00384 BOOL SetOpPermissionState=TRUE,
00385 BOOL DoPreTriggerEdit = TRUE);
00386
00387
00388 void CascadeDelete(void);
00389
00390
00391 virtual SubtreeRenderState RenderSubtree(RenderRegion* pRender, Node** ppNextNode = NULL, BOOL bClip = TRUE);
00392 virtual void RenderAfterSubtree(RenderRegion* pRender) {;}
00393
00394
00395 virtual BOOL WritePreChildrenWeb(BaseCamelotFilter* pFilter);
00396 virtual BOOL WritePreChildrenNative(BaseCamelotFilter* pFilter);
00397 virtual BOOL WritePostChildrenWeb(BaseCamelotFilter* pFilter);
00398 virtual BOOL WritePostChildrenNative(BaseCamelotFilter* pFilter);
00399 virtual BOOL CanWriteChildrenWeb(BaseCamelotFilter* pFilter);
00400 virtual BOOL CanWriteChildrenNative(BaseCamelotFilter* pFilter);
00401
00402 virtual BOOL WriteBeginChildRecordsWeb(BaseCamelotFilter* pFilter);
00403 virtual BOOL WriteBeginChildRecordsNative(BaseCamelotFilter* pFilter);
00404 virtual BOOL WriteEndChildRecordsWeb(BaseCamelotFilter* pFilter);
00405 virtual BOOL WriteEndChildRecordsNative(BaseCamelotFilter* pFilter);
00406
00407 virtual BOOL ReadPostChildrenWeb(BaseCamelotFilter* pFilter);
00408 virtual BOOL ReadPostChildrenNative(BaseCamelotFilter* pFilter);
00409
00410
00411 virtual BOOL AreYouSafeToRender();
00412
00413
00414 BOOL CopyNode(Node* DestinationNode,
00415 AttachNodeDirection Direction);
00416 virtual BOOL NodeCopy(Node** ppNodeCopy);
00417 virtual BOOL CloneNode(Node** ppNoeCopy, BOOL bLightweight);
00418 BOOL CopyComplexRange(Range& RangeToCopy);
00419
00420 BOOL CopyChildrenTo(Node* DestinationNode, CopyControlFlags CopyFlags=ccALL);
00421
00422 void MoveNode(Node* DestinationNode,
00423 AttachNodeDirection Direction);
00424
00425 void AttachNode(Node* ContextNode,
00426 AttachNodeDirection Direction,
00427 BOOL fCheckTransparent = TRUE,
00428 BOOL InvalidateChildren = TRUE);
00429
00430
00431 void InsertChainSimple(Node* ContextNode, AttachNodeDirection Direction);
00432
00433 virtual BOOL PostImport();
00434 virtual BOOL PostDuplicate(UndoableOperation* pOp);
00435
00436 UINT32 GetTag() const;
00437
00438 virtual UINT32 GetNodeSize() const;
00439 virtual CopyType GetCopyType();
00440 UINT32 GetSubtreeSize();
00441 BOOL IsUnder(Node* pTestNode, BOOL bFirstCall = TRUE) const;
00442
00443
00444
00445 BOOL IsLocked() const;
00446 BOOL IsMangled() const;
00447 BOOL IsMarked() const;
00448 BOOL IsRenderable() const;
00449 BOOL IsParentOfSelected() const;
00450 BOOL IsSelected() const;
00451 BOOL IsChildOfSelected();
00452
00453 virtual BOOL ShouldBeRendered() const;
00454 virtual BOOL NeedsTransparency() const;
00455 virtual INT32 EstimateNodeComplexity (OpParam* details) { return (1); }
00456
00457
00458
00459
00460 virtual BOOL IsAnObject() const {return FALSE;}
00461 virtual BOOL IsAnAttribute() const {return FALSE;}
00462 virtual BOOL IsKindOfTextAttribute() const { return FALSE; }
00463 virtual BOOL IsPaper() const {return FALSE;}
00464 virtual BOOL IsLayer() const {return FALSE;}
00465 virtual BOOL IsSpread() const {return FALSE;}
00466 virtual BOOL IsChapter() const {return FALSE;}
00467 virtual BOOL IsNodeDocument() const {return FALSE;}
00468 virtual BOOL IsNodeRenderableClass() const {return FALSE;}
00469 virtual BOOL IsNodeHidden() const {return FALSE;}
00470 virtual BOOL IsNodePath() const {return FALSE;}
00471 virtual BOOL IsARegularShape() const {return FALSE;}
00472 virtual BOOL IsOrHidesAnAttribute() const {return FALSE;}
00473 virtual BOOL IsABitmap() const {return FALSE;}
00474 virtual BOOL IsAFillAttr() const {return FALSE;}
00475 virtual BOOL IsABitmapFill() const {return FALSE;}
00476 virtual BOOL IsABitmapColourFill() const {return FALSE;}
00477 virtual BOOL IsABitmapTranspFill() const {return FALSE;}
00478 virtual BOOL IsAFeatherAttr() const { return FALSE; }
00479 virtual BOOL IsAClipViewAttr() const { return FALSE; }
00480 virtual BOOL IsBounded() const {return FALSE;}
00481 virtual BOOL IsDragged() const {return FALSE; }
00482 virtual BOOL IsController() { return FALSE;}
00483 virtual BOOL IsABlend () { return FALSE; }
00484 virtual BOOL IsCompound() const {return FALSE;}
00485 virtual BOOL IsCompoundClass() const {return FALSE;}
00486 virtual BOOL IsAVisibleTextNode() const {return FALSE;}
00487 virtual BOOL IsAnAbstractTextChar() const {return FALSE;}
00488 virtual BOOL IsATextChar() const {return FALSE;}
00489 virtual BOOL IsABaseTextClass() const {return FALSE;}
00490 virtual BOOL IsATypeface() const {return FALSE;}
00491 virtual BOOL IsAnObjectName() const {return FALSE;}
00492 virtual BOOL IsUserAttribute() const {return FALSE;}
00493 virtual BOOL IsSetCandidate() const {return FALSE;}
00494 virtual BOOL IsCacheCompound() const { return FALSE; }
00495 virtual BOOL IsABevel() const { return FALSE; }
00496 virtual BOOL IsABevelController() const { return FALSE; }
00497 virtual BOOL IsAContour() const { return FALSE; }
00498 virtual BOOL IsAContourController() const { return FALSE; }
00499 virtual BOOL IsAShadow() const { return FALSE; }
00500 virtual BOOL IsAShadowController() const { return FALSE; }
00501 virtual BOOL IsABrush() const {return FALSE;}
00502 virtual BOOL IsEffect() const {return FALSE;}
00503 virtual BOOL IsBitmapEffect() const {return FALSE;}
00504 virtual BOOL IsRenderedAsInk() const {return FALSE;}
00505
00506 BOOL IsBrushed() const;
00507
00508 virtual NodePath* IsAnEditablePath();
00509
00510
00511 virtual BOOL IsANodeClipViewController() const { return FALSE; }
00512 virtual BOOL IsANodeClipView() const { return FALSE; }
00513
00514
00515 virtual BOOL IsAGroup() const { return FALSE; }
00516
00517
00518 virtual BOOL IsAnInsertionNode() const { return FALSE; }
00519
00520
00521 virtual BOOL IsANodeMould() const {return FALSE;}
00522
00523
00524 virtual BOOL SupportsClipboardFormat(InternalClipboardFormat *Format) const;
00525
00526
00527
00528
00529 virtual BOOL DiscardsAttributeChildren() const;
00530
00531
00532 virtual Node* HasEditableChild(CCRuntimeClass* ChildClass, Node* pPrevNode);
00533
00534
00535 virtual KernelBitmap* EnumerateBitmaps(UINT32 Count);
00536
00537
00538 virtual double GetEffectiveBitmapMinDPI(KernelBitmap* pBitmap) { return(1e9); }
00539
00540
00541 virtual BOOL ReplaceBitmap(KernelBitmap* pOrigBitmap, KernelBitmap* pNewBitmap) { return(FALSE); }
00542
00543
00544 virtual TCHAR* GetDefaultOpToken() {return NULL;}
00545
00546
00547 void SetLocked(BOOL Status);
00548 void SetMangled(BOOL Status);
00549 void SetMarker(BOOL Status);
00550 virtual void SetSelected(BOOL Status);
00551 void SetRender(BOOL Status, BOOL bAndChildren=FALSE);
00552 void SetParentOfSelected(BOOL Status);
00553
00554
00555 BOOL HasSelectedChildren() const;
00556
00557
00558
00559 void ClearSelection(BOOL AndChildren=FALSE);
00560
00561
00562
00563 BOOL ChildrenNeedTransparency();
00564
00565
00566
00567 Node* FindNext(void) const;
00568 Node* FindPrevious(void) const;
00569 Node* FindParent(void) const;
00570 Node* FindFirstChild(void) const;
00571 Node* FindLastChild(BOOL ExcludeInsertionNode = FALSE) const;
00572
00573 Node* FindParent(CCRuntimeClass* ParentClass) const;
00574 Node* FindNext(CCRuntimeClass* Class) const;
00575 Node* FindPrevious(CCRuntimeClass* Class) const;
00576 Node* FindFirstChild(CCRuntimeClass* Class) const;
00577 Node* FindLastChild(CCRuntimeClass* Class) const;
00578
00579 NodeRenderableInk* FindNextInk() const;
00580 NodeRenderableInk* FindPreviousInk() const;
00581 NodeRenderableInk* FindFirstChildInk() const;
00582 NodeRenderableInk* FindLastChildInk() const;
00583
00584 BaseDocument *FindOwnerDoc() const;
00585
00586
00587
00588 BOOL IsFamily(CCRuntimeClass* ccrcType, Node* pAncestor) const;
00589
00590
00591
00592 void SetParentDangerous(Node* NewParent);
00593 void SetNextDangerous(Node* NewNext);
00594 void SetPreviousDangerous(Node* NewPrev);
00595 void SetChildDangerous(Node* NewChild);
00596
00597
00598
00599
00600
00601 Node* FindNextNonHidden(void) const;
00602 Node* FindPrevNonHidden(void) const;
00603
00604
00605
00606 Spread* FindParentSpread();
00607
00608
00609 static Node* DocFindFirstDepthFirst(BaseDocument *pDocToSearch);
00610 Node* DocFindNextDepthFirst(void);
00611
00612 Node* FindFirstDepthFirst();
00613 Node* FindNextDepthFirst(Node* Subtree);
00614 Node* FindFirstPreorder();
00615 Node* FindNextPreorder(Node* pRoot = NULL, BOOL bSkipSubtree = FALSE);
00616
00617 static Chapter* FindFirstChapter(BaseDocument* pDocToSearch);
00618 Chapter* FindNextChapter(void);
00619
00620 NodeRenderablePaper* FindNextForClippedPaperRender(void);
00621
00622
00623
00624
00625
00626
00627
00628 Node* FindFirstForClippedInkRender(DocRect* pClipRect,
00629 RenderRegion* pRender,
00630 BOOL ExcludeLockedLayers = FALSE,
00631 Node* pStopNode = NULL);
00632
00633 Node* FindNextForClippedInkRender(DocRect* pClipRect,
00634 RenderRegion *pRender,
00635 BOOL ExcludeLockedLayers = FALSE,
00636 Node* pStopNode = NULL);
00637
00638 Node* FindFirstForUnclippedInkRender(RenderRegion* pRender);
00639 Node* FindNextForUnclippedInkRender(RenderRegion *pRender);
00640
00641
00642
00643 Chapter* FindEnclosingChapter(DocCoord* ChapterPos, XLONG* ChapterDepth);
00644
00645
00646 NodeAttribute* FindFirstGeometryLinkedAttr();
00647 NodeAttribute* FindNextGeometryLinkedAttr();
00648
00649 virtual void UnlinkNodeFromTree(BaseDocument *pOwnerDoc = NULL);
00650
00651
00652 Node* FindParentOfSelected();
00653 virtual NodeCompound* GetParentController() const {return NULL;}
00654
00655
00656 virtual BOOL CanBecomeA(BecomeA* pBecomeA);
00657 virtual BOOL DoBecomeA(BecomeA* pBecomeA);
00658
00659 #ifdef _DEBUG
00660 void DT();
00661 void DST();
00662 void DST1(INT32 FormParent=0);
00663 void DST2(INT32 FormParent=0, INT32 MaxDepth=9999);
00664 #endif
00665
00666
00667 ChangeCode WarnParentOfChange(ObjChangeParam* pParam, BOOL AllParents=TRUE);
00668
00669 virtual BOOL AllowSelectInside() const { return TRUE; }
00670
00671
00672 #if !_RELEASE
00673 #ifdef _DEBUG
00674
00675 void ShowDebugTree() const;
00676 virtual void ShowDebugTreeDetails() const;
00677
00678 #endif
00679
00680 virtual void GetDebugDetails(StringBase* Str);
00681
00682 #endif
00683
00684
00685 void IncHiddenCnt(void);
00686 void DecHiddenCnt(void);
00687
00688 UINT32 GetHiddenCnt(void);
00689
00690 #ifdef _DEBUG
00691 const TCHAR* Name() const;
00692 #endif
00693
00694 BOOL OptimiseAttributes();
00695
00696
00697 virtual BOOL HidingNode();
00698 virtual BOOL ShowingNode();
00699 virtual INT32 ComplexHide(UndoableOperation* pOp, Node* pNextInRange);
00700
00701
00702 void MarkNodeAndChildren();
00703 void MarkChildren();
00704 void ClearMarks();
00705 void ClearChildMarks();
00706
00707 public:
00708 virtual BOOL IsDifferent(Node *pOther);
00709
00710
00711
00712
00713
00714
00715
00716 public:
00717
00718 virtual void CountChildNodes(UINT32* pChildCount, UINT32* pChildAttrCount);
00719 virtual BOOL AreChildAttrsIdentical(Node* pOtherNode);
00720 virtual BOOL HasThisChildAttr(NodeAttribute* pAttr);
00721 virtual BOOL CopyChildAttrs(Node* pDestNode);
00722
00723
00724 virtual BOOL IsNodeInSubtree(Node * pNode);
00725
00726
00727
00728
00729
00730
00731
00732
00733 virtual BOOL RegenerateNode(UndoableOperation * pOp = NULL,
00734 BOOL bCacheRender = FALSE,
00735 BOOL bInformParents = TRUE) { return FALSE; }
00736
00737
00738
00739 virtual BOOL PromoteHitTestOnChildrenToMe() const { return TRUE; }
00740
00741
00742 virtual BOOL ShouldITransformWithChildren() const { return FALSE; }
00743
00744
00745 virtual BOOL NeedsParent(Node * pClassNode) const { return FALSE; }
00746
00747
00748 virtual BOOL MarqueeSelectNode() const { return TRUE; }
00749
00750
00751 virtual Node* PublicCopy();
00752
00753 void RemoveAttrTypeFromSubtree(CCRuntimeClass* AttrType, Node* pExceptThis = NULL);
00754
00755 protected:
00756
00757
00758 struct CCAPI NodeFlags
00759 {
00760 BOOL Locked: 1;
00761 BOOL Mangled: 1;
00762 BOOL Marked: 1;
00763
00764
00765 BOOL Selected: 1;
00766 BOOL Renderable:1;
00767 BOOL SelectedChildren: 1;
00768
00769 BOOL OpPermission1: 1;
00770 BOOL OpPermission2: 1;
00771 };
00772
00773 UINT32 Tag;
00774 NodeFlags Flags;
00775
00776
00777 Node *Previous;
00778 Node *Next;
00779 Node *Child;
00780 Node *Parent;
00781
00782
00783
00784 UINT32 HiddenRefCnt;
00785
00786 virtual Node* SimpleCopy();
00787 virtual INT32 ComplexCopy(CopyStage Stage, Range& RangeToCopy, Node** pOutput);
00788 void CopyNodeContents(Node* nodeCopy);
00789
00790
00791 static MILLIPOINT PixelWidth;
00792 static MILLIPOINT PixelHeight;
00793
00794 Node *FindChildToRender(DocRect *const pClipRect, RenderRegion *const pRender,
00795 BOOL ExcludeLockedLayers,
00796 Node* pStopNode = NULL);
00797
00798 Node *FindChildToRenderUnclipped(RenderRegion *const pRender);
00799
00800 private:
00801
00802 void AttachAsPreviousNode(Node* ContextNode);
00803 void AttachAsNextNode(Node* ContextNode);
00804 void AttachAsFirstChildNode(Node* ContextNode);
00805 void AttachAsLastChildNode(Node* ContextNode);
00806
00807 void SetTags(BaseDocument *pOwnerDoc);
00808
00809 public:
00810 void DeleteChildren(Node* FirstChild);
00811
00812 private:
00813 static BOOL HourglassOn;
00814
00815 public:
00816 static void StartHourglass() { HourglassOn = TRUE; };
00817 static void StopHourglass() { HourglassOn = FALSE; };
00818 static BOOL ShowHourglass() { return HourglassOn;}
00819
00820 protected:
00821 BOOL CopyChildren(Node* FirstChild,
00822 Node* NewParent,
00823 CopyControlFlags = ccALL);
00824
00825 private:
00826
00827 #ifdef _DEBUG
00828 void ShowDebugTreeHelper(const Node* const Root,
00829 INT32 TreeLevel,
00830 BYTE* IndentString) const;
00831 #endif
00832
00833
00834 protected:
00835 BOOL DeSelectSubtree();
00836
00837 public:
00838 friend class NodeHidden;
00839 virtual BOOL SetParentLayerAsEdited();
00840
00841 public:
00842
00843
00844
00845 typedef BOOL (Node::*TypeFunc)() const;
00846 NodeAttribute* FindFirstAttr(TypeFunc pfnTest) const;
00847
00848
00849
00850
00851
00852
00853 public:
00854 virtual BOOL IsTypeExtendible() const { return FALSE; }
00855 virtual DocRect ValidateExtend(const ExtendParams& ExtParams);
00856 virtual void Extend(const ExtendParams& ExtParams);
00857 };
00858
00859
00860
00862
00863
00864
00865
00866
00867
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886 inline UINT32 Node::GetTag() const
00887 {
00888 return Tag;
00889 }
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906 inline BOOL Node::IsLocked(void) const
00907 {
00908 return Flags.Locked;
00909 }
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926 inline BOOL Node::IsMangled(void) const
00927 {
00928 return Flags.Mangled;
00929 }
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946 inline BOOL Node::IsMarked(void) const
00947 {
00948 return Flags.Marked;
00949 }
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966 inline BOOL Node::IsRenderable() const
00967 {
00968 return Flags.Renderable;
00969 }
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986 inline BOOL Node::IsSelected() const
00987 {
00988 return Flags.Selected;
00989 }
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009 inline BOOL Node::IsParentOfSelected() const
01010 {
01011 return Flags.SelectedChildren;
01012 }
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029 inline void Node::SetLocked( BOOL Status )
01030 {
01031 Flags.Locked = Status;
01032 }
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050 inline void Node::SetMangled( BOOL Status )
01051 {
01052 Flags.Mangled = Status;
01053 }
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071 inline void Node::SetMarker( BOOL Status )
01072 {
01073 Flags.Marked = Status;
01074 }
01075
01076
01077
01078
01079
01080
01081
01082
01083
01084
01085
01086
01087
01088
01089 inline Node* Node::FindNext(void) const
01090 {
01091 return(Next);
01092 }
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107 inline Node* Node::FindPrevious(void) const
01108 {
01109 return(Previous);
01110 }
01111
01112
01113
01114
01115
01116
01117
01118
01119
01120
01121
01122
01123
01124 inline Node* Node::FindParent(void) const
01125 {
01126 return(Parent);
01127 }
01128
01129
01130
01131
01132
01133
01134
01135
01136
01137
01138
01139
01140
01141 inline Node* Node::FindFirstChild(void) const
01142 {
01143 return(Child);
01144 }
01145
01146
01147
01148
01149
01150
01151
01152
01153
01154
01155
01156
01157
01158
01159
01160
01161
01162 inline void Node::SetParentOfSelected( BOOL Status )
01163 {
01164 Flags.SelectedChildren = Status;
01165
01166
01167 }
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184
01185 inline void Node::ClearSelection(BOOL AndChildren)
01186 {
01187 Flags.Selected = FALSE;
01188 Flags.SelectedChildren = FALSE;
01189 if (AndChildren)
01190 DeSelectSubtree();
01191 }
01192
01193
01195
01196
01197
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211
01212
01213
01214 class NodeRenderable : public Node
01215 {
01216 CC_DECLARE_DYNAMIC(NodeRenderable)
01217
01218 public:
01219
01220 NodeRenderable();
01221
01222
01223 NodeRenderable(Node* ContextNode,
01224 AttachNodeDirection Direction,
01225 BOOL Locked=FALSE,
01226 BOOL Mangled=FALSE,
01227 BOOL Marked=FALSE,
01228 BOOL Selected=FALSE);
01229
01230
01231 virtual BOOL CanTransform();
01232 virtual void Transform(TransformBase&);
01233 virtual void TransformChildren(TransformBase&);
01234 virtual void PolyCopyNodeContents(NodeRenderable* NodeCopy);
01235
01236
01237 virtual SubtreeRenderState RenderSubtree(RenderRegion* pRender, Node** ppNextNode = NULL, BOOL bClip = TRUE);
01238 virtual BOOL NeedsToExport(RenderRegion* pRender, BOOL VisibleLayersOnly = FALSE, BOOL CheckSelected = FALSE);
01239 virtual INT32 GetSizeOfExport(Filter*);
01240 virtual BOOL IsNodeRenderableClass() const;
01241 virtual BOOL ShouldBeRendered() const;
01242
01243
01244 virtual void GetDebugDetails(StringBase* Str);
01245
01246
01247 virtual void RenderFillBlobs(RenderRegion* pRender) {}
01248 virtual void RenderAppliedFillBlobs(RenderRegion* pRender) {}
01249 virtual void RenderArtisticBlobs(RenderRegion* pRender);
01250 virtual void RenderObjectBlobs(RenderRegion* pRender);
01251 virtual void RenderTinyBlobs(RenderRegion* pRender);
01252 virtual void RenderPenBlobs(RenderRegion* pRender);
01253 virtual void RenderToolObjectBlobs(RenderRegion* pRender);
01254 virtual void RenderEffectBlobs(RenderRegion* pRender);
01255
01256
01257 virtual void Select(BOOL ReDraw);
01258 virtual void DeSelect(BOOL ReDraw, BOOL bDeselectChildren = FALSE);
01259
01260 virtual BOOL CopyComponentData(BaseDocument* SrcDoc, BaseDocument* NodesDoc);
01261
01262
01263 virtual DocRect GetBlobBoundingRect();
01264 virtual DocRect GetUnionBlobBoundingRect(BOOL bIncludeEffects = TRUE);
01265
01266 virtual BOOL IsDragged() const;
01267 virtual void SetDraggedState(BOOL bNewState, BOOL bAndChildren);
01268
01269
01270
01271
01272 virtual void TransformStretchObject(const ExtendParams& ExtParams);
01273 virtual void TransformTranslateObject(const ExtendParams& ExtParams);
01274 virtual void TransformTranslateNoStretchObject(const ExtendParams& ExtParams);
01275
01276
01277
01278 virtual DocCoord FindExtendCentre() { return DocCoord(0, 0); }
01279
01280 virtual Node* SimpleCopy();
01281 void CopyNodeContents(NodeRenderable* NodeCopy);
01282
01283
01284
01285
01286
01287
01288
01289
01290
01291
01292 public:
01293 virtual BOOL IsSeeThrough(BOOL CheckIndirectAttrs) { return FALSE; }
01294
01295 protected:
01296
01297 BOOL Dragged;
01298
01299 };
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317 class NodeRenderableBounded : public NodeRenderable
01318 {
01319 CC_DECLARE_DYNAMIC( NodeRenderableBounded )
01320
01321 public:
01322
01323 NodeRenderableBounded();
01324
01325
01326 NodeRenderableBounded(Node* ContextNode,
01327 AttachNodeDirection Direction,
01328 BOOL Locked=FALSE,
01329 BOOL Mangled=FALSE,
01330 BOOL Marked=FALSE,
01331 BOOL Selected=FALSE);
01332
01333 ~NodeRenderableBounded();
01334
01335
01336 virtual void GetDebugDetails(StringBase* Str);
01337 virtual SubtreeRenderState RenderSubtree(RenderRegion* pRender, Node** ppNextNode = NULL, BOOL bClip = TRUE);
01338 virtual void Transform(TransformBase&);
01339 virtual void TransformChildren(TransformBase&);
01340 virtual void PolyCopyNodeContents(NodeRenderable* pNodeCopy);
01341
01342
01343 virtual BOOL CanTakeAttributeType(CCRuntimeClass*);
01344
01345
01346 void ValidateBoundingRect();
01347 virtual void InvalidateBoundingRect(BOOL InvalidateChildBounds = FALSE);
01348 private:
01349 void InvalidateBoundingRectHelper();
01350 public:
01351 virtual DocRect GetBoundingRect(BOOL DontUseAttrs=FALSE, BOOL HitTest=FALSE);
01352 virtual DocRect GetUnionBlobBoundingRect(BOOL bIncludeEffects = TRUE);
01353
01354
01355 virtual DocRect GetEorDragBoundingRect() { return GetBoundingRect(TRUE, FALSE); }
01356
01357 virtual DocRect GetImagemapClickableRectangle()
01358 {
01359 return GetBoundingRect(FALSE, TRUE);
01360 }
01361 virtual DocRect GetEffectStackBounds(BOOL* pbFoundEffects = NULL);
01362
01363 virtual void IncludeChildrensBoundingRects(DocRect *);
01364 BOOL IsIntersectedWith( DocRect* pClipRect );
01365
01366
01367 virtual BOOL IsBounded() const {return TRUE;}
01368
01369
01370 virtual BOOL Snap(DocCoord* pDocCoord);
01371 virtual BOOL Snap(DocRect* pDocRect,const DocCoord& PrevCoord,const DocCoord& CurCoord);
01372 virtual BOOL SnapToCoords(DocCoord* pDocCoord);
01373
01374
01375
01376 virtual BOOL IsMagnetic();
01377
01378
01379 virtual void SetMagneticState(BOOL state);
01380
01381
01382 static BOOL Init();
01383
01384
01385 virtual double GetRotationAngle();
01386
01387
01388 virtual BOOL RenderCached(RenderRegion* pRender);
01389 virtual BOOL CaptureCached(RenderRegion* pRender);
01390 virtual BOOL ReleaseCached( BOOL bAndParents = TRUE,
01391 BOOL bAndChildren = TRUE,
01392 BOOL bSelf = TRUE,
01393 BOOL bAndDerived = TRUE);
01394 virtual void CopyCached(NodeRenderableBounded* pCopyOfNode, double dRes, INT32 maxOption = 0);
01395 virtual void CopyCached(NodeRenderableBounded* pCopyOfNode);
01396 virtual void TransformCached(TransformBase& Trans, double dTestPixelWidth);
01397 virtual BOOL HasCachedDirectBitmap() {return FALSE;}
01398
01399
01400 BOOL ContainsNonMixTransparency(RenderRegion* pRegion);
01401
01402 virtual void RenderEffectAttributes(RenderRegion* pRegion);
01403
01404 public:
01405 virtual BOOL IsDifferent(Node *pOther);
01406
01407
01408
01409
01410
01411
01412
01413 protected:
01414
01415 BOOL IsMagneticallyClose(DocCoord*, DocCoord*);
01416
01417 protected:
01418
01419 virtual Node* SimpleCopy();
01420 void CopyNodeContents(NodeRenderableBounded* NodeCopy);
01421
01422
01423 public:
01424
01425 virtual DocCoord FindExtendCentre() { return GetBoundingRect().Centre(); }
01426
01427
01428 virtual DocRect GetExtendTargetBounds(const ExtendParams& ExtParams);
01429
01430 protected:
01431
01432 BOOL IsBoundingRectValid;
01433
01434
01435 DocRect BoundingRectangle;
01436
01437
01438 BOOL Magnetic;
01439
01440 BOOL MayBeCached;
01441
01442
01443 public:
01444
01445 static INT32 MagneticPointRadius;
01446 static INT32 MagneticLineRadius;
01447
01448 static BOOL bEnableCacheing;
01449 static BOOL bThrottleCacheing;
01450 static BOOL bShowCacheBlobs;
01451
01452 };
01453
01454
01455
01456
01457
01458
01459
01460
01461
01462
01463
01464
01465
01466
01467
01468
01469
01470
01471
01472
01473
01474
01475 class NodeHidden: public Node
01476 {
01477 public:
01478 CC_DECLARE_DYNAMIC( NodeHidden )
01479 NodeHidden(Node* HiddenNode);
01480 Node* ShowNode();
01481 Node* HiddenNd;
01482
01483
01484
01485 virtual Node* SimpleCopy();
01486 virtual UINT32 GetNodeSize() const;
01487
01488 virtual BOOL IsNodeHidden() const;
01489 virtual BOOL IsOrHidesAnAttribute() const;
01490
01491
01492
01493
01494
01495
01496
01497
01498 public:
01499 virtual BOOL IsTypeExtendible() const { return FALSE; }
01500 virtual DocRect ValidateExtend(const ExtendParams& ExtParams)
01501 {
01502 return DocRect(INT32_MAX, INT32_MAX, INT32_MAX, INT32_MAX);
01503 }
01504 virtual void Extend(const ExtendParams& ExtParams) {}
01505 };
01506
01507
01508 #endif