00001
00002 #ifndef __XWidget_h
00003 #define __XWidget_h
00004
00005 #include "xevent.h"
00006 #include "GArray.h"
00007
00008 class XWidget;
00009
00010 typedef void (*XWidgetDestroyNotify)(XWidget*);
00011
00012 class XWidget : public XObject
00013 {
00014 friend class XApplication;
00015 friend class XPainter;
00016 friend class ImagePainter;
00017 friend class XWidgetPrivate;
00018 friend class XPopup;
00019 friend class GApp;
00020 friend class GMemDC;
00021 friend class XlibEvent;
00022 friend class XWidgetList;
00023
00024 static XWidget *MouseGrabber;
00025 static XWidget *OwnsClipboard;
00026
00027 void _paint(XExposeEvent *e, XlibEvent *q);
00028 void _resize(XConfigureEvent *e, XlibEvent *q);
00029 void _map(bool m);
00030 bool _wait_mapped(int timeout = -1);
00031 XlibEvent *_event;
00032 virtual void *_GetWndPtr() { return 0; }
00033
00034 protected:
00035 XIC GetInputContext();
00036 class XWidgetPrivate *d;
00037 void setParentWidget(XWidget *p);
00038 int DebugLog(char *file, int line, char *msg, ...);
00039
00040 public:
00041 enum MouseButton
00042 {
00043 LeftButton = 0x0001,
00044 RightButton = 0x0002,
00045 MidButton = 0x0004
00046 };
00047
00048 enum KeyButton
00049 {
00050 AltButton = 0x0008,
00051 ShiftButton = 0x0010,
00052 ControlButton = 0x0020
00053 };
00054
00055 static XWidgetDestroyNotify DestroyNotifyHandlers[4];
00056
00057 XWidget(char *name = 0, bool top = false);
00058 XWidget(Window Existing, bool AddToList = false);
00059 ~XWidget();
00060
00061 Window handle();
00062 void detachHandle();
00063 class XMainWindow *GetWindow();
00064
00065
00066 void _dump(int i=0);
00067 bool _isdebug();
00068 void _SetClipRgn(GRegion *c);
00069 GRegion *_GetClipRgn();
00070 virtual void _SetDeleteMe();
00071 virtual void _SetWndPtr(void *p) {}
00072 static XWidget *GetMouseGrabber() { return MouseGrabber; }
00073
00074
00075 void setIcon(char *Path);
00076 bool IsMouseOver(XlibEvent *e);
00077 bool IsPopup();
00078 void GetDecorationSize(int &x, int &y);
00079
00080
00081 virtual int height();
00082 virtual int width();
00083 virtual void setGeometry(int x, int y, int w, int h);
00084 virtual GRect &geometry();
00085 virtual void setBackgroundMode(ViewBackground b);
00086 virtual void repaint();
00087 virtual void repaint(int x, int y, int w, int h);
00088 virtual void update();
00089 virtual void update(int x, int y, int w, int h);
00090 virtual bool isEnabled();
00091 virtual void setEnabled(bool i);
00092 virtual bool isVisible();
00093 virtual void show(bool Raise = false);
00094 virtual void hide();
00095 virtual bool hasFocus();
00096 virtual void setFocus();
00097 virtual void clearFocus();
00098 virtual OsPoint &mapFromGlobal(OsPoint &p);
00099 virtual OsPoint &mapToGlobal(OsPoint &p);
00100 virtual XWidget *parentWidget();
00101 virtual XList<XWidget> *childrenWidgets();
00102 virtual bool reparent(XWidget *parent, OsPoint &p, bool show);
00103 virtual void grabMouse();
00104 virtual void ungrabMouse();
00105 bool grabbedMouse() { return MouseGrabber == this; }
00106
00107 virtual char *getText();
00108 virtual void setText(char *text);
00109 virtual int value();
00110 virtual void setValue(int i);
00111 virtual int wantKeys();
00112 virtual void wantKeys(int keys);
00113 virtual bool isTabStop();
00114 virtual void isTabStop(bool i);
00115
00116
00117 static XWidget *Find(Window w);
00118 static XWidget *FirstWidget();
00119
00120
00121 virtual void resizeEvent(XlibEvent *e);
00122 virtual void paintEvent(XlibEvent *e) {}
00123 virtual void customEvent(XlibEvent *e) {}
00124 virtual void mousePressEvent(XlibEvent *e) {}
00125 virtual void mouseDoubleClickEvent(XlibEvent *e) {}
00126 virtual void mouseReleaseEvent(XlibEvent *e) {}
00127 virtual void mouseMoveEvent(XlibEvent *e) {}
00128 virtual void leaveEvent(XlibEvent *e) {}
00129 virtual void enterEvent(XlibEvent *e) {}
00130 virtual void wheelEvent(XlibEvent *e) {}
00131 virtual void focusInEvent(XlibEvent *e) {}
00132 virtual void focusOutEvent(XlibEvent *e) {}
00133 virtual bool keyPressEvent(XlibEvent *e) {}
00134 virtual bool keyReleaseEvent(XlibEvent *e) {}
00135 virtual void closeEvent(XlibEvent *e) {}
00136 virtual void notifyEvent(int i = 0) {}
00137 virtual void propertyEvent(XlibEvent *e) {}
00138
00139
00140 bool GetPopup();
00141 void SetPopup(bool b);
00142 };
00143
00144
00145
00146 #define MapWinUsage(var) \
00147 if (Deleted.HasItem(var)) \
00148 { \
00149 printf("%s:%i - using win = %p\n", __FILE__, __LINE__, var); \
00150 }
00151
00152 extern GArray<Window> Deleted;
00153
00154 #endif