00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CSSKIN_H__
00021 #define __CSSKIN_H__
00022
00023 #include "csutil/csvector.h"
00024
00025 class csSkin;
00026 class csSkinSlice;
00027 class csApp;
00028 class csComponent;
00029 class csButton;
00030 class csWindow;
00031 class csDialog;
00032 class csListBox;
00033 class csListBoxItem;
00034 class csBackground;
00035
00062 class csSkin : public csVector
00063 {
00065 csApp *app;
00066
00067 public:
00069 const char *Prefix;
00070
00072 csSkin () : csVector (16, 16), Prefix (NULL) {}
00073
00075 virtual ~csSkin ();
00076
00078 virtual bool FreeItem (csSome Item);
00079
00081 virtual int CompareKey (csSome Item, csConstSome Key, int) const;
00082
00084 virtual int Compare (csSome Item1, csSome Item2, int) const;
00085
00087 csSkinSlice *Get (int iIndex)
00088 { return (csSkinSlice *)csVector::Get (iIndex); }
00089
00091 void Apply (csComponent *iComp);
00092
00094 virtual void Initialize (csApp *iApp);
00095
00097 virtual void Deinitialize ();
00098
00100 const char *GetConfigStr (const char *iSection, const char *iKey, const char *iDefault);
00102 bool GetConfigYesNo (const char *iSection, const char *iKey, bool iDefault);
00103
00105 void Load (csBackground &oBack, const char *iSection, const char *iPrefix);
00106
00107 private:
00108 bool ReadGradient (const char *iText, csRGBcolor *color, int iNum);
00109 };
00110
00138 class csSkinSlice
00139 {
00140 public:
00142 virtual ~csSkinSlice ()
00143 { Deinitialize (); }
00144
00153 virtual void Initialize (csApp * , csSkin * ) {}
00154
00163 virtual void Deinitialize () {}
00164
00166 virtual const char *GetName () = 0;
00167
00169 virtual void Apply (csComponent &This);
00170
00181 virtual void Reset (csComponent &This);
00182
00184 virtual void Draw (csComponent &This) = 0;
00185 };
00186
00192 class csButtonSkin : public csSkinSlice
00193 {
00194 public:
00196 virtual const char *GetName ()
00197 { return "Button"; }
00198
00200 virtual void SuggestSize (csButton &This, int &w, int &h) = 0;
00201 };
00202
00208 class csWindowSkin : public csSkinSlice
00209 {
00210 public:
00212 virtual const char *GetName ()
00213 { return "Window"; }
00214
00216 virtual csButton *CreateButton (csWindow &This, int ButtonID) = 0;
00217
00219 virtual void PlaceGadgets (csWindow &This) = 0;
00220
00222 virtual void SetState (csWindow &This, int Which, bool State) = 0;
00223
00225 virtual void SetBorderSize (csWindow &This) = 0;
00226 };
00227
00233 class csDialogSkin : public csSkinSlice
00234 {
00235 public:
00237 virtual const char *GetName ()
00238 { return "Dialog"; }
00239
00241 virtual void SetBorderSize (csDialog &This) = 0;
00242 };
00243
00249 class csTitlebarSkin : public csSkinSlice
00250 {
00251 public:
00253 virtual const char *GetName ()
00254 { return "Titlebar"; }
00255 };
00256
00262 class csListBoxSkin : public csSkinSlice
00263 {
00264 public:
00266 virtual const char *GetName ()
00267 { return "Listbox"; }
00268
00270 virtual void SuggestSize (csListBox &This, int &w, int &h) = 0;
00271 };
00272
00278 class csListBoxItemSkin : public csSkinSlice
00279 {
00280 public:
00282 virtual const char *GetName ()
00283 { return "ListboxItem"; }
00284 };
00285
00286
00292 class csScrollBarSkin : public csSkinSlice
00293 {
00294 public:
00296 virtual const char *GetName ()
00297 { return "ScrollBar"; }
00298 };
00299
00321 #define CSWS_SKIN_DECLARE(name,base) \
00322 class name : public base \
00323 { \
00324 public: \
00325 name () \
00326 {
00327
00332 #define CSWS_SKIN_SLICE(comp) \
00333 InsertSorted (new cs##comp##Skin);
00334
00344 #define CSWS_SKIN_DECLARE_END \
00345 } \
00346 }
00347
00348 #endif // __CSSKIN_H__