00001
00002
00003 #include "Res.h"
00004 #include "GContainers.h"
00005
00006 class LgiResources;
00007 class LgiClass LgiStringRes
00008 {
00009 LgiResources *Res;
00010
00011 public:
00012 static const char *CodePage;
00013 static GLanguage *CurLang;
00014
00015 int Ref;
00016 int Id;
00017 char *Str;
00018 char *Tag;
00019
00020
00021 LgiStringRes(LgiResources *res);
00022 ~LgiStringRes();
00023 bool Read(GXmlTag *Tag, ResFileFormat Format);
00024 };
00025
00026 class LgiClass LgiDialogRes
00027 {
00028 LgiResources *Res;
00029
00030 public:
00031 GXmlTag *Dialog;
00032 LgiStringRes *Str;
00033 GRect Pos;
00034
00035 LgiDialogRes(LgiResources *res);
00036 ~LgiDialogRes();
00037
00038 bool Read(GXmlTag *Tag, ResFileFormat Format);
00039 char *Name() { return (Str) ? Str->Str : 0; }
00040 int Id() { return (Str) ? Str->Id : 0; }
00041 int X() { return Pos.X(); }
00042 int Y() { return Pos.Y(); }
00043 };
00044
00045 class LgiClass LgiMenuRes : public GBase
00046 {
00047 LgiResources *Res;
00048 GHashTbl<int, LgiStringRes*> Strings;
00049
00050 public:
00051 GXmlTag *Tag;
00052
00053 LgiMenuRes(LgiResources *res);
00054 ~LgiMenuRes();
00055
00056 bool Read(GXmlTag *Tag, ResFileFormat Format);
00057 LgiStringRes *GetString(GXmlTag *Tag);
00058 };
00059
00060 class LgiClass LgiResources : public ResFactory
00061 {
00062 friend class GLgiRes;
00063 friend class GMenu;
00064 friend class LgiStringRes;
00065
00066 class LgiResourcesPrivate *d;
00067 List<LgiDialogRes> Dialogs;
00068 List<LgiMenuRes> Menus;
00069 GEventsI *ScriptEngine;
00070
00071
00072
00073 GLanguageId *Languages;
00074 void AddLang(GLanguageId id);
00075
00076 public:
00077 GHashTbl<const char*, char*> LanguageNames;
00078
00079 LgiResources(char *FileName = 0, bool Warn = false);
00080 virtual ~LgiResources();
00081
00082
00083 bool LoadDialog(int Resource,
00084 GViewI *Parent,
00085 GRect *Pos = 0,
00086 GAutoString *Name = 0,
00087 GEventsI *ScriptEngine = 0,
00088 char *Tags = 0);
00089 LgiStringRes *StrFromRef(int Ref);
00090 char *StringFromRef(int Ref);
00091 char *StringFromId(int Ref);
00092 bool IsOk();
00093 ResFileFormat GetFormat();
00094
00095
00096 bool Load(char *FileName);
00097 char *GetFileName();
00098 GLanguageId *GetLanguages() { return Languages; }
00099
00100
00101 ResObject *CreateObject(GXmlTag *Tag, ResObject *Parent);
00102 void Res_SetPos(ResObject *Obj, int x1, int y1, int x2, int y2);
00103 void Res_SetPos(ResObject *Obj, char *s);
00104 GRect Res_GetPos(ResObject *Obj);
00105 int Res_GetStrRef(ResObject *Obj);
00106 bool Res_SetStrRef(ResObject *Obj, int Ref, ResReadCtx *Ctx);
00107 void Res_Attach(ResObject *Obj, ResObject *Parent);
00108 bool Res_GetChildren(ResObject *Obj, List<ResObject> *l, bool Deep);
00109 void Res_Append(ResObject *Obj, ResObject *Parent);
00110 bool Res_GetItems(ResObject *Obj, List<ResObject> *l);
00111 bool Res_GetProperties(ResObject *Obj, GDom *Props);
00112 bool Res_SetProperties(ResObject *Obj, GDom *Props);
00113 GDom* Res_GetDom(ResObject *Obj);
00114 };
00115
00116 class GResourceContainer : public GArray<LgiResources*>
00117 {
00118 public:
00119 ~GResourceContainer()
00120 {
00121 DeleteObjects();
00122 }
00123 };
00124
00125 LgiExtern GResourceContainer _ResourceOwner;
00126 LgiExtern LgiResources *LgiGetResObj(bool Warn = false, char *filename = 0);