00001
00032 #ifndef INC_RVC_TEXTOBJ_H
00033 #define INC_RVC_TEXTOBJ_H
00034
00035 #ifndef INC_RVC_OBJECT_H
00036 #include <rvc/object.h>
00037 #endif
00038
00039 #ifndef INC_RVC_GETOBJFILTER_H
00040 #include <rvc/getobjfilter.h>
00041 #endif
00042
00043
00044 namespace RVC {
00045
00046 #ifndef GENERATING_DOXYGEN_OUTPUT
00047
00048 struct TEXTINFO;
00049 class TEXTHANDLE;
00050 #endif
00051
00071 class TEXTOBJ : public RVC::OBJECT {
00072 public:
00073
00074 #ifndef GENERATING_DOXYGEN_OUTPUT
00075 class GETOBJFILTER_HASTITLE;
00076 class GETOBJFILTER_ISSELECTABLE;
00077 friend class GETOBJFILTER_ISSELECTABLE;
00078 class MAKEPARMS;
00079 friend class MAKEPARMS;
00080 #endif
00081
00083 TEXTOBJ (
00084 );
00085
00087 TEXTOBJ (
00088 const RVC::TEXTOBJ& obj
00089 );
00090
00092 virtual ~TEXTOBJ (
00093 );
00094
00096 RVC::TEXTOBJ& operator= (
00097 const RVC::TEXTOBJ& rhs
00098 );
00099
00103 INT32 Append (
00104 const MIUNICODE *line
00105 );
00106
00110 INT32 Append (
00111 const MISTRING& string
00112 );
00113
00116 static RVC::OBJTYPESET GetObjTypeSet (
00117 );
00118
00120 static bool IsText (
00121 RVC::OBJTYPE ObjType
00122 );
00123
00125 ERRVALUE Link (
00126 const RVC::OBJECT& parent,
00127 const RVC::DESCRIPTOR& Descriptor,
00128 const FILEPATH& LinkFile,
00129 #ifdef RVC_CREDENTIALS_MANDATORY
00130 CHAR_ENCODING encoding,
00131 const CREDENTIALS* Credentials
00132 #else
00133 CHAR_ENCODING encoding = CHAR_ENCODING_ISO_2022,
00134 const CREDENTIALS* Credentials = 0
00135 #endif
00136 );
00137
00139 ERRVALUE Make (
00140 const RVC::OBJECT& parent,
00141 const RVC::DESCRIPTOR& Descriptor,
00142 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00143 );
00144
00146 ERRVALUE Make (
00147 const RVC::OBJECT& parent,
00148 const MAKEPARMS& MakeParms,
00149 const RVC::DESCRIPTOR& Descriptor,
00150 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00151 );
00152
00154 ERRVALUE Make (
00155 RVC::OBJITEM& ObjItem,
00156 #ifdef RVC_CREDENTIALS_MANDATORY
00157 const char* Source,
00158 const CREDENTIALS* Credentials
00159 #else
00160 const char* Source = 0,
00161 const CREDENTIALS* Credentials = 0
00162 #endif
00163 );
00164
00166 ERRVALUE Make (
00167 RVC::OBJITEM& ObjItem,
00168 const MAKEPARMS& MakeParms,
00169 #ifdef RVC_CREDENTIALS_MANDATORY
00170 const char* Source,
00171 const CREDENTIALS* Credentials
00172 #else
00173 const char* Source = 0,
00174 const CREDENTIALS* Credentials = 0
00175 #endif
00176 );
00177
00179 ERRVALUE Read (
00180 MISTRING& string
00181 );
00182
00188 ERRVALUE ReadLine (
00189 MISTRING& string
00190 );
00191
00193 ERRVALUE Reset (
00194 );
00195
00197 ERRVALUE Write (
00198 const MISTRING& string
00199 );
00200
00201 protected:
00202
00203 void GetMetadataFormat (UINT8& format) const;
00204 void GetExtraValue (UINT32 offset, UINT16& value) const;
00205 void GetExtraValue (UINT32 offset, UINT32& value) const;
00206 ERRVALUE Link (const RVC::OBJECT& parent, OBJMAKEPARMS& ObjMakeParms, const FILEPATH& LinkFile, CHAR_ENCODING encoding = CHAR_ENCODING_ISO_2022);
00207 ERRVALUE Make (const OBJECT& parent, OBJMAKEPARMS& ObjMakeParms);
00208 ERRVALUE OpenObject (OPENMODE OpenFlags, TEXTINFO& newinfo, int HeaderSize, int HeaderType, MDLGPARENT parent, const CREDENTIALS* Credentials);
00209
00210 private:
00211 #ifndef GENERATING_DOXYGEN_OUTPUT
00212
00213 class EXTRADATA {
00214 public:
00215 EXTRADATA () {}
00216 EXTRADATA (const EXTRADATA& rhs);
00217 EXTRADATA& operator=(const EXTRADATA& rhs);
00218
00219 void Clear();
00220
00221 void GetExtraValue (UINT32 offset, UINT8& value) const;
00222 void GetExtraValue (UINT32 offset, UINT16& value) const;
00223 void GetExtraValue (UINT32 offset, UINT32& value) const;
00224
00225 bool IsEmpty () const { return (m_ExtraData.IsEmpty()); }
00226
00227 void SetExtraValue (UINT32 offset, UINT8 value);
00228 void SetExtraValue (UINT32 offset, UINT16 value);
00229 void SetExtraValue (UINT32 offset, UINT32 value);
00230
00231 private:
00232 SIMPLE_ARRAY<UINT8> m_ExtraData;
00233 };
00234
00236 virtual ERRVALUE v_CloseObject ();
00237 virtual OBJTYPE v_GetDftObjectType () const;
00238 virtual bool v_IsMultiObject () const;
00239 virtual bool v_IsObjectOpen () const;
00240 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS* Credentials);
00241 virtual bool v_ValidateObjectType (const OBJTYPE otype) const;
00242
00243 void SetupExtraHeaderData (const CREDENTIALS* Credentials) const;
00244
00245 TEXTHANDLE* m_TextHandle;
00246 mutable EXTRADATA m_ExtraHeaderData;
00247 #endif // GENERATING_DOXYGEN_OUTPUT
00248 };
00249
00250
00252 class TEXTOBJ::GETOBJFILTER_ISSELECTABLE : public GETOBJFILTER, private RVC::OBJECT::FILTER {
00253 public:
00254 GETOBJFILTER_ISSELECTABLE() {}
00255 private:
00256 #ifndef GENERATING_DOXYGEN_OUTPUT
00257 virtual bool Filter (const RVC::OBJECT& Object);
00258 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00259 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00260 #endif // GENERATING_DOXYGEN_OUTPUT
00261 };
00262
00263
00266 class TEXTOBJ::GETOBJFILTER_HASTITLE : public TEXTOBJ::GETOBJFILTER_ISSELECTABLE {
00267 public:
00268 explicit GETOBJFILTER_HASTITLE (
00269 const MISTRING& Title
00270 );
00271
00272 explicit GETOBJFILTER_HASTITLE (
00273 const char* Title,
00274 CHAR_ENCODING encoding = CHAR_ENCODING_ASCII
00275 );
00276
00277 private:
00278 #ifndef GENERATING_DOXYGEN_OUTPUT
00279 MISTRING m_Title;
00280
00281 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00282 #endif // GENERATING_DOXYGEN_OUTPUT
00283 };
00284
00285
00286 class TEXTOBJ::MAKEPARMS {
00287 public:
00288 MAKEPARMS (
00289 RVC::OBJTYPE ObjType = RVC::OBJTYPE_Text
00290 );
00291
00292 MAKEPARMS (
00293 const MAKEPARMS& rhs
00294 );
00295
00296 MAKEPARMS (
00297 TEXTOBJ& TemplateObj
00298 );
00299
00300 MAKEPARMS& operator= (
00301 const MAKEPARMS& rhs
00302 );
00303
00304 RVC::OBJTYPE GetObjType (
00305 ) const { return (m_ObjType); }
00306
00307 void SetObjType (
00308 RVC::OBJTYPE ObjType
00309 ) { m_ObjType = ObjType; }
00310
00311 protected:
00312 #ifndef GENERATING_DOXYGEN_OUTPUT
00313 void GetExtraValue (UINT32 offset, UINT8& value) const;
00314 void GetExtraValue (UINT32 offset, UINT16& value) const;
00315 void GetExtraValue (UINT32 offset, UINT32& value) const;
00316 void SetExtraValue (UINT32 offset, UINT8 value);
00317 void SetExtraValue (UINT32 offset, UINT16 value);
00318 void SetExtraValue (UINT32 offset, UINT32 value);
00319 #endif // GENERATING_DOXYGEN_OUTPUT
00320 private:
00321 #ifndef GENERATING_DOXYGEN_OUTPUT
00322 friend class TEXTOBJ;
00323
00324 OBJTYPE m_ObjType;
00325 TEXTOBJ::EXTRADATA m_ExtraHeaderData;
00326 #endif // GENERATING_DOXYGEN_OUTPUT
00327 };
00328
00329 }
00330
00331 #endif // INC_RVC_TEXT_H