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 #ifndef INC_GRE_LAYOUT_H
00060 #define INC_GRE_LAYOUT_H
00061
00062 #ifndef INC_GRE_VIEWABLE_H
00063 #include <gre/viewable.h>
00064 #endif
00065
00066 #ifndef INC_GRE_LAYER_H
00067 #include <gre/layer.h>
00068 #endif
00069
00070 #ifndef INC_MI32_MPLAYOUT_H
00071 #include <mi32/mplayout.h>
00072 #endif
00073
00074 #ifndef INC_MI32_MATTE_H
00075 #include <mi32/matte.h>
00076 #endif
00077
00078
00079 #define POSNMODE_Tiled 0
00080 #define POSNMODE_Overlapped 1
00081 #define POSNMODE_MapLayout 2
00082
00083
00084
00085 class GRE_LAYOUT : public GRE_VIEWABLE, public SERIALIZABLE {
00086
00087 public:
00088
00089
00090 enum CREATEFLAGS {
00091 CREATEFLAG_None = 0x00,
00092 CREATEFLAG_Hardcopy = 0x10
00093 };
00094
00095 GRE_GROUP* firstgroup;
00096 GRE_GROUP* lastgroup;
00097 UINT8 PosnMode;
00098 UINT8 ElemSelectMode;
00099 LAYOUTPARMS HardcopyLayout;
00100 double PosnScale;
00101 DRECT2D FullExtents;
00102
00103
00104 static GRE_LAYOUT* GetFirst (
00105 ) { return (s_FirstLayout); }
00106
00107 #ifdef X_NATIVE
00108
00109 static GRE_LAYOUT* GetFromWidget (
00110 Widget w
00111 );
00112 #endif
00113
00114
00115 static void SMLClassInstall (
00116 SMLCONTEXT *context
00117 );
00118
00119
00120 explicit GRE_LAYOUT (
00121 CREATEFLAGS flags = CREATEFLAG_None
00122 );
00123
00124
00125 virtual ~GRE_LAYOUT ();
00126
00127
00128
00129 ERRVALUE AddGroupLayer (
00130 MDLGPARENT dlgparent,
00131 GRE_LAYER::TYPE layertype
00132 );
00133
00134
00135
00136 ERRVALUE AddGroupLayer (
00137 GRE_LAYER::TYPE layertype,
00138 GRE_LAYER **player = 0
00139 );
00140
00141
00142 ERRVALUE AddGroupMulti (
00143 MDLGPARENT dlgparent
00144 );
00145
00146
00147 int AddGroupSaved (
00148 MDLGPARENT dlgparent,
00149 bool fromtext
00150 );
00151
00152
00153 ERRVALUE CreateGroup (
00154 GRE_GROUP **retgroup,
00155 UINT32 flags = 0,
00156 GRE_GROUP *refgroup = 0
00157 );
00158
00159
00160
00161 void DestroyAllGroups (
00162 );
00163
00164
00165 virtual ERRVALUE DrawAllViews (
00166 UINT32 drawflags = 0
00167 );
00168
00169
00170 virtual GRE_LAYER *FindLayerByID (
00171 UINT32 LayerID
00172 ) const;
00173
00174
00175 GRE_GROUP* FindPointGroup (
00176 const DPOINT2D& point,
00177 GRE_FIND_FLAGS findflags,
00178 const SPATREF::COORDREFSYS *pPointCRS = NULL
00179 ) const;
00180
00181
00182 GRE_GROUP* GetActiveGroup (
00183 ) const { return (m_ActiveGroup); }
00184
00185
00186 GRE_GROUP* GetFirstGroup (
00187 ) const { return (firstgroup); }
00188
00189
00190 virtual void GetFullName (
00191 MISTRING& name
00192 ) const;
00193
00194
00195 DRECT2D GetHardcopyMarginRect (
00196 ) const {
00197 DRECT2D MarginRect;
00198 MarginRect.xinit = HardcopyLayout.LeftMargin;
00199 MarginRect.xlast = MarginRect.xinit + HardcopyLayout.FullPrintableWidth;
00200 MarginRect.ylast = HardcopyLayout.FullHeight - HardcopyLayout.TopMargin;
00201 MarginRect.yinit = MarginRect.ylast - HardcopyLayout.FullPrintableHeight;
00202 return (MarginRect);
00203 }
00204
00205
00206 DRECT2D GetHardcopyPageRect (
00207 ) const {
00208 DRECT2D PageRect;
00209 PageRect.xinit = PageRect.yinit = 0.0;
00210 PageRect.xlast = HardcopyLayout.FullWidth;
00211 PageRect.ylast = HardcopyLayout.FullHeight;
00212 return (PageRect);
00213 }
00214
00215
00216 DRECT2D GetHardcopyPrintableRect (
00217 ) const {
00218 DRECT2D PrintableRect;
00219 PrintableRect.xinit = PrintableRect.yinit = 0.0;
00220 PrintableRect.xlast = HardcopyLayout.FullPrintableWidth;
00221 PrintableRect.ylast = HardcopyLayout.FullPrintableHeight;
00222 return (PrintableRect);
00223 }
00224
00225
00226 double GetHardcopyScale (
00227 ) const { return (HardcopyLayout.Scale); }
00228
00229
00230 double GetHardcopyZoom (
00231 ) const { return (HardcopyLayout.Zoom); }
00232
00233
00234 GRE_GROUP* GetLastGroup (
00235 ) const { return (lastgroup); }
00236
00237
00238 MATTE& GetMatte (
00239 ) { return (m_Matte); }
00240
00241
00242 GRE_LAYOUT* GetNext (
00243 ) const { return (m_NextLayout); }
00244
00245
00246 virtual UINT32 GetNextLayerID (
00247 ) const;
00248
00249
00250 UINT8 GetPosnMode (
00251 ) const { return (PosnMode); }
00252
00253
00254 virtual ERRVALUE GetSizeMeters (
00255 DPOINT2D& sizemeters
00256 );
00257
00258
00259 bool GroupControlsGetAutoRedraw (
00260 ) const;
00261
00262
00263 int GroupControlsGetLayoutUnits (
00264 ) const;
00265
00266
00267 bool GroupControlsIsOpen (
00268 ) const;
00269
00270
00271
00272
00273 void GroupControlsOpen (
00274 MDLGPARENT dlgparent = 0,
00275 GRE_GROUP* group = 0,
00276 UINT32 flags = 0
00277 );
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288 void GroupControlsSetPrompts (
00289 double hoffset,
00290 double hsize,
00291 double voffset,
00292 double vsize,
00293 double relscale
00294 );
00295
00296
00297 void GroupControlsSetTabLayout (
00298 );
00299
00300
00301 virtual bool HasLayers (
00302 ) const;
00303
00304
00305 bool HasTempLayers (
00306 ) const;
00307
00308
00309 bool IsBeingLoaded (
00310 ) const { return (m_pSerializer != 0); }
00311
00312
00313 bool IsHardcopy (
00314 ) const { return (PosnMode == POSNMODE_MapLayout); }
00315
00316
00317 bool IsValid (
00318 ) const;
00319
00320
00321 bool KeepInTNTserverCache (
00322 ) const { return (m_KeepInTNTserverCache); }
00323
00324
00325 virtual ERRVALUE SerialRead (
00326 SERIALIZER& serializer
00327 );
00328
00329
00330 virtual ERRVALUE SerialWrite (
00331 SERIALIZER& serializer,
00332 const char *tagname = 0
00333 ) const;
00334
00335
00336 void SetActiveGroup (
00337 GRE_GROUP *group
00338 );
00339
00340
00341 void SetKeepInTNTserverCache (
00342 bool keepInTNTserverCache
00343 ) {
00344 if (m_KeepInTNTserverCache != keepInTNTserverCache) m_IsModified = true;
00345 m_KeepInTNTserverCache = keepInTNTserverCache;
00346 }
00347
00348
00349 void SetModified (
00350 bool notify = true,
00351 bool ViewsNeedRedraw = true
00352 );
00353
00354
00355 int SetName (
00356 const UNICODE *newname
00357 );
00358
00359
00360 void SetNeedUpdatePositions (
00361 ) { m_NeedUpdatePositions = 1; }
00362
00363
00364 void SetPosnMode (
00365 UINT8 posnmode
00366 );
00367
00368
00369 int SetZoomToFitPage (
00370 );
00371
00372
00373 ERRVALUE TemplateRead (
00374 SERIALIZER& serializer
00375 );
00376
00377
00378 ERRVALUE TemplateWrite (
00379 SERIALIZER& serializer
00380 );
00381
00382
00383 int UpdatePositions (
00384 bool ForceUpdate = true
00385 );
00386
00387
00388 void ValidateGroupAttachments (
00389 );
00390
00391 protected:
00392
00393 #ifdef X_NATIVE
00394
00395 virtual void ObjMgrInitItems (
00396 );
00397 #endif
00398
00399 private:
00400 #ifndef GENERATING_DOXYGEN_OUTPUT
00401
00402 static GRE_LAYOUT *s_FirstLayout;
00403 static GRE_LAYOUT *s_LastLayout;
00404
00405 static const SERIALIZER::ITEMDEF* SerialGetItemDef (
00406 SERIALIZER& serializer
00407 );
00408
00409 static const SERIALIZER::ITEMDEF* TemplateGetItemDef (
00410 );
00411
00412 GRE_GROUP* m_ActiveGroup;
00413 GRE_LAYOUT *m_PrevLayout;
00414 GRE_LAYOUT *m_NextLayout;
00415 bool m_NeedUpdatePositions;
00416 bool m_KeepInTNTserverCache;
00417 SERIALIZER *m_pSerializer;
00418 INT32 m_tilecols;
00419 INT32 m_tilerows;
00420 UNICODE m_name[16];
00421 mutable UNICODE m_activegroupname[GRE_GROUP_NAMELEN];
00422 MATTE m_Matte;
00423 #ifdef X_NATIVE
00424 MXDHANDLE m_pDlgObjMgr;
00425 #endif
00426
00427 #ifdef X_NATIVE
00428 virtual void OnNotifyGreObjMgr (const GRE_CALLBACK_MSG& msg);
00429 #endif
00430
00431
00432 #ifdef X_NATIVE
00433 virtual void v_DlgObjMgrClose ();
00434 virtual ERRVALUE v_DlgObjMgrCreate (MDLGPARENT dlgparent, const MISTRING& title);
00435 virtual void v_DlgObjMgrDestroy ();
00436 virtual bool v_DlgObjMgrIsOpen () const;
00437 virtual void v_DlgObjMgrOpen ();
00438 #endif
00439 virtual bool v_Destroy (bool NotifyParent);
00440 virtual MICON v_GetIcon () const;
00441 virtual const char* v_GetTypeName () const;
00442
00443
00444 virtual double v_GetDesignScale () const;
00445 virtual const DRECT2D& v_GetExtents () const;
00446 virtual void v_SetDesignScale (double DesignScale, bool notify);
00447
00448 GRE_LAYOUT (const GRE_LAYOUT&);
00449 GRE_LAYOUT& operator= (const GRE_LAYOUT&);
00450
00451 #endif
00452 };
00453
00454 DEFINE_ENUM_OPERATORS(GRE_LAYOUT::CREATEFLAGS);
00455
00456
00457
00458
00459 #ifdef WIN32_MFC
00460
00461 class GRE_MFC_LAYOUT : public GRE_MFC_VIEWABLE {
00462 protected:
00463 GRE_MFC_LAYOUT();
00464 DECLARE_DYNCREATE(GRE_MFC_LAYOUT)
00465
00466 public:
00467
00468 GRE_LAYOUT* GetLayout (
00469 ) const {
00470 return (m_layout);
00471 }
00472
00473 public:
00474 virtual ~GRE_MFC_LAYOUT();
00475
00476 protected:
00477 GRE_LAYOUT *m_layout;
00478
00479 protected:
00480
00481
00482
00483 DECLARE_MESSAGE_MAP()
00484 };
00485
00486 #endif
00487
00488
00489
00490 #endif // INC_GRE_LAYOUT_H