00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CSCOMP_H__
00021 #define __CSCOMP_H__
00022
00023 #include "csgeom/csrect.h"
00024 #include "csutil/typedvec.h"
00025 #include "cstool/cspixmap.h"
00026 #include "cswspal.h"
00027 #include "ivideo/graph2d.h"
00028 #include "ivideo/fontserv.h"
00029
00030 class csApp;
00031 class csSkin;
00032 class csSkinSlice;
00033 struct iEvent;
00034
00035
00036 CS_DECLARE_TYPED_VECTOR (cswsRectVector, csRect);
00037
00064
00065 #define CSS_VISIBLE 0x00000001
00066
00067 #define CSS_FOCUSED 0x00000002
00068
00069 #define CSS_DISABLED 0x00000004
00070
00071 #define CSS_SELECTABLE 0x00000008
00072
00073 #define CSS_GROUP 0x00000010
00074
00075 #define CSS_TOPSELECT 0x00000020
00076
00077 #define CSS_TRANSPARENT 0x00000040
00078
00079 #define CSS_MODAL 0x00000080
00080
00081 #define CSS_MAXIMIZED 0x00000100
00082
00083 #define CSS_DIRTY 0x00000200
00084
00085 #define CSS_RESTART_DIRTY_CHECK 0x00000400
00086
00124 enum
00125 {
00135 cscmdAreYouDefault = 0x80,
00145 cscmdActivate,
00149 cscmdHide,
00153 cscmdMaximize,
00157 cscmdClose,
00166 cscmdLimitMaximize,
00176 cscmdLoseFocus,
00186 cscmdReceiveFocus,
00191 cscmdOK,
00193 cscmdCancel,
00195 cscmdAbort,
00197 cscmdRetry,
00199 cscmdIgnore,
00208 cscmdColorSchemeChanged,
00221 cscmdSkinChanged,
00230 cscmdMoveClipChildren,
00234 cscmdStopModal
00235 };
00236
00241
00242 #define CS_DRAG_XMIN 0x01
00243
00244 #define CS_DRAG_XMAX 0x02
00245
00246 #define CS_DRAG_YMIN 0x04
00247
00248 #define CS_DRAG_YMAX 0x08
00249
00250 #define CS_DRAG_MOVEABLE 0x10
00251
00252 #define CS_DRAG_SIZEABLE 0x20
00253
00254 #define CS_DRAG_ALL (CS_DRAG_XMIN | CS_DRAG_XMAX | \
00255 CS_DRAG_YMIN | CS_DRAG_YMAX)
00256
00265
00266 #define CS_LOCK_XMIN 0x01
00267
00268 #define CS_LOCK_XMAX 0x02
00269
00270 #define CS_LOCK_YMIN 0x04
00271
00272 #define CS_LOCK_YMAX 0x08
00273
00274 #define CS_LOCK_ALL (CS_LOCK_XMIN | CS_LOCK_XMAX | \
00275 CS_LOCK_YMIN | CS_LOCK_YMAX)
00276
00289
00290 #define CS_REPOS_HORIZONTAL 0x10
00291
00292 #define CS_REPOS_VERTICAL 0x20
00293
00294 #define CS_REPOS_H_MASK (CS_REPOS_HORIZONTAL | 0x3)
00295
00296 #define CS_REPOS_V_MASK (CS_REPOS_VERTICAL | 0xc)
00297
00298 #define CS_REPOS_LEFT (CS_REPOS_HORIZONTAL | 0x0)
00299
00300 #define CS_REPOS_RIGHT (CS_REPOS_HORIZONTAL | 0x1)
00301
00302 #define CS_REPOS_HCENTER (CS_REPOS_HORIZONTAL | 0x2)
00303
00304 #define CS_REPOS_HCENTERSIZE (CS_REPOS_HORIZONTAL | 0x3)
00305
00306 #define CS_REPOS_TOP (CS_REPOS_VERTICAL | 0x0)
00307
00308 #define CS_REPOS_BOTTOM (CS_REPOS_VERTICAL | 0x4)
00309
00310 #define CS_REPOS_VCENTER (CS_REPOS_VERTICAL | 0x8)
00311
00312 #define CS_REPOS_VCENTERSIZE (CS_REPOS_VERTICAL | 0xc)
00313
00333 class csComponent
00334 {
00335 protected:
00337 int state;
00339 csRect dirty;
00341 csRect clip;
00343 int *palette, palettesize;
00345 int *originalpalette;
00347 csRect OrgBound;
00349 char DragStyle;
00351 char ResizeMode;
00353 static int dragX, dragY, dragMode;
00355 static csRect dragBound;
00357 csComponent *clipparent;
00359 char *text;
00361 iFont *Font;
00363 int FontSize;
00365 csVector clipchildren;
00367 static cswsRectVector visregion;
00368
00369 public:
00371 csComponent *focused;
00373 csComponent *top;
00375 csComponent *next, *prev;
00377 csComponent *parent;
00379 csApp *app;
00381 csSkinSlice *skinslice;
00383 csSome *skindata;
00385 unsigned int id;
00387 csRect bound;
00388
00390 csComponent (csComponent *iParent);
00392 virtual ~csComponent ();
00393
00395 virtual void Insert (csComponent *comp);
00396
00398 virtual void Delete (csComponent *comp);
00399
00401 void DeleteAll ();
00402
00404 void InsertClipChild (csComponent *clipchild);
00405
00407 void DeleteClipChild (csComponent *clipchild);
00408
00410 csComponent *GetClipParent ()
00411 { return clipparent; }
00412
00414 virtual bool SetFocused (csComponent *comp);
00415
00417 csComponent *GetFocused ()
00418 { return focused; }
00419
00421 bool Select ();
00422
00424 virtual csComponent *NextChild (csComponent *start = NULL, bool disabled = false);
00425
00427 virtual csComponent *PrevChild (csComponent *start = NULL, bool disabled = false);
00428
00430 virtual csComponent *NextControl (csComponent *start = NULL);
00431
00433 virtual csComponent *PrevControl (csComponent *start = NULL);
00434
00436 virtual csComponent *NextGroup (csComponent *start = NULL);
00437
00439 virtual csComponent *PrevGroup (csComponent *start = NULL);
00440
00442 bool FixFocused ();
00443
00448 bool SetZorder (csComponent *comp, csComponent *below);
00449
00451 csComponent *GetTop ()
00452 { return top; }
00453
00464 void SetPalette (int *iPalette, int iPaletteSize);
00465
00467 void SetPalette (int iPaletteID)
00468 { SetPalette (cswsPalette [iPaletteID].Palette, cswsPalette [iPaletteID].Size); }
00469
00471 void ResetPalette ();
00472
00474 void SetColor (int Index, int Color);
00475
00477 int GetColor (int Index)
00478 { if (Index & 0x80000000) return Index;
00479 if (Index >= palettesize) return cs_Color_Red_L; else return palette[Index]; }
00480
00487 virtual void SetText (const char *iText);
00489 virtual void GetText (char *oText, int iTextSize) const;
00491 virtual const char *GetText () const { return text; }
00492
00499 csComponent *ForEach (bool (*func) (csComponent *child, void *param),
00500 void *param = NULL, bool Zorder = false);
00501
00503 csComponent *GetChild (int find_id) const;
00504
00506 void SetApp (csApp *newapp);
00507
00509 virtual bool HandleEvent (iEvent &Event);
00510
00517 virtual bool PreHandleEvent (iEvent &Event);
00518
00520 virtual bool PostHandleEvent (iEvent &Event);
00521
00523 void *SendCommand (int CommandCode, void *Info = NULL);
00525 void *SendBroadcast (int CommandCode, void *Info = NULL);
00526
00528 csComponent *GetDefault ();
00529
00531 void Redraw ();
00532
00534 virtual void Draw ();
00535
00537 virtual void Show (bool focused = false);
00538
00540 virtual void Hide ();
00541
00543 virtual bool SetRect (int xmin, int ymin, int xmax, int ymax);
00544
00546 bool SetRect (csRect &rect)
00547 { return SetRect (rect.xmin, rect.ymin, rect.xmax, rect.ymax); }
00548
00550 bool SetDragRect (int xmin, int ymin, int xmax, int ymax);
00551
00553 void SetPos (int x, int y)
00554 { SetRect (x, y, x + bound.xmax - bound.xmin, y + bound.ymax - bound.ymin); }
00555
00557 void SetSize (int w, int h)
00558 { SetRect (bound.xmin, bound.ymin, bound.xmin + w, bound.ymin + h); }
00559
00561 void Center (bool iHoriz = true, bool iVert = true);
00562
00564 virtual bool Maximize ();
00565
00567 virtual bool Restore ();
00568
00577 void Invalidate (csRect &area, bool IncludeChildren = false,
00578 csComponent *below = NULL);
00579
00581 void Invalidate (int xmin, int ymin, int xmax, int ymax,
00582 bool IncludeChildren = false, csComponent *below = NULL)
00583 {
00584 csRect inv (xmin, ymin, xmax, ymax);
00585 Invalidate (inv, IncludeChildren, below);
00586 }
00587
00589 void Invalidate (bool IncludeChildren = false, csComponent *below = NULL)
00590 { Invalidate (-99999, -99999, +99999, +99999, IncludeChildren, below); }
00591
00593 virtual void SetState (int mask, bool enable);
00594
00596 int GetState (int mask)
00597 { return (state & mask); }
00598
00600 void SetDragStyle (int iDragStyle)
00601 { DragStyle = iDragStyle; }
00602
00604 int GetDragStyle ()
00605 { return DragStyle; }
00606
00608 void SetResizeMode (int iResizeMode)
00609 { ResizeMode = iResizeMode; }
00610
00612 int GetResizeMode ()
00613 { return ResizeMode; }
00614
00616 void LocalToGlobal (int &x, int &y);
00617
00619 void GlobalToLocal (int &x, int &y);
00620
00626 void OtherToThis (csComponent *from, int &x, int &y);
00627
00629 void Drag (int x, int y, int DragMode);
00630
00632 void SetMouse (csMouseCursorID Cursor);
00633
00639 virtual void Close ();
00640
00651 csComponent *GetChildAt (int x, int y,
00652 bool (*func) (csComponent *, void *) = NULL, void *data = NULL);
00653
00658 void SetSizingCursor (int dragtype);
00659
00661 bool GetMousePosition (int &x, int &y);
00662
00685 bool HandleDragEvent (iEvent &Event, int BorderW, int BorderH);
00686
00688 virtual void FixPosition (int &newX, int &newY);
00689
00691 virtual void FixSize (int &newW, int &newH);
00692
00694 virtual void SuggestSize (int &w, int &h);
00695
00697 virtual void SetSuggestedSize (int dw, int dh);
00698
00700 void FindMaxFreeRect (csRect &area);
00701
00703 virtual char *GetSkinName ();
00704
00706 virtual csSkin *GetSkin ();
00707
00725 void SetClipRect (int xmin, int ymin, int xmax, int ymax)
00726 { clip.Set (xmin, ymin, xmax, ymax); }
00727
00729 void SetClipRect ()
00730 { clip.MakeEmpty (); }
00731
00733 void SetFont (iFont *iNewFont, int iSize = -1);
00734
00736 virtual void GetFont (iFont *&oFont, int &oFontSize);
00737
00739 void Box (int xmin, int ymin, int xmax, int ymax, int colindx);
00740
00742 void Line (float x1, float y1, float x2, float y2, int colindx);
00743
00745 void Pixel (int x, int y, int colindx);
00746
00748 void Text (int x, int y, int fgindx, int bgindx, const char *s);
00749
00751 void Pixmap (csPixmap *s2d, int x, int y, int w, int h, uint8 Alpha = 0);
00753 void Pixmap (csPixmap *s2d, int x, int y, uint8 Alpha = 0)
00754 { Pixmap (s2d, x, y, s2d->Width (), s2d->Height (), Alpha); }
00756 void Pixmap (csPixmap *s2d, int x, int y, int w, int h, int orgx, int orgy,
00757 uint8 Alpha = 0);
00759 void Texture (iTextureHandle *tex, int x, int y, int w, int h,
00760 int orgx, int orgy, uint8 Alpha = 0);
00761
00763 int GetTextSize (const char *text, int *oHeight = NULL);
00765 int GetTextChars (const char *text, int iWidth);
00766
00768 void Rect3D (int xmin, int ymin, int xmax, int ymax, int darkindx, int lightindx);
00769
00771 void ObliqueRect3D (int xmin, int ymin, int xmax, int ymax, int cornersize,
00772 int darkindx, int lightindx);
00773
00775 void Clear (int colindx)
00776 { Box (0, 0, bound.Width (), bound.Height (), colindx); }
00777
00779 void ClearZbuffer (int xmin, int ymin, int xmax, int ymax);
00780
00782 void ClearZbuffer ()
00783 { ClearZbuffer (0, 0, bound.Width (), bound.Height ()); }
00784
00786 void Polygon3D (G3DPolygonDPFX &poly, UInt mode);
00787
00789
00791 void DrawUnderline (int iX, int iY, const char *iText, int iUnderlinePos,
00792 int iColor);
00793
00794 protected:
00800 void Clip (cswsRectVector &rect, csComponent *last, bool forchild = false);
00801
00803 void ClipChild (cswsRectVector &rect, csComponent *child);
00804
00811 void FastClip (cswsRectVector &rect);
00812
00818 static void PrepareLabel (const char *iLabel, char * &oLabel, int &oUnderlinePos);
00819
00821 bool CheckHotKey (iEvent &iEvent, char iHotKey);
00822
00824 static int WordLeft (const char *iText, int StartPos);
00826 static int WordRight (const char *iText, int StartPos);
00827
00829 bool ApplySkin (csSkin *Skin);
00830
00839 void CheckDirtyTD (csRect &ioR);
00847 void CheckDirtyBU (csRect &ioR);
00848
00849 private:
00850 static bool do_handle_event (csComponent *child, void *param);
00851 };
00852
00853 #endif // __CSCOMP_H__