00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_TK_WIDGET_H_UTC20050628165845_DEFINED
00035 #define GROOVX_TK_WIDGET_H_UTC20050628165845_DEFINED
00036
00037 #include "nub/object.h"
00038 #include "nub/signal.h"
00039
00040 typedef struct Tk_Window_ *Tk_Window;
00041
00042 namespace geom
00043 {
00044 template <class T> class vec2;
00045 }
00046
00047 namespace tcl
00048 {
00049 class interpreter;
00050 class TkWidget;
00051
00052 enum EventStatus { HANDLED, NOT_HANDLED };
00053
00055 struct ButtonPressEvent
00056 {
00057 unsigned int button;
00058 int x;
00059 int y;
00060 };
00061
00063 struct KeyPressEvent
00064 {
00065 const char* keys;
00066 int x;
00067 int y;
00068 bool controlPressed;
00069 };
00070 }
00071
00072 class TkWidgImpl;
00073
00074
00076
00082
00083
00084 class tcl::TkWidget : public virtual nub::object
00085 {
00086 public:
00088 TkWidget(tcl::interpreter& interp,
00089 const char* classname,
00090 const char* pathname,
00091 bool topLevel = false);
00092 virtual ~TkWidget() throw();
00093
00094 void destroyWidget();
00095
00097 void winInfo() throw();
00098
00099 int width() const;
00100 int height() const;
00101 geom::vec2<int> size() const;
00102 void setWidth(int w);
00103 void setHeight(int h);
00104 void setSize(geom::vec2<int> sz);
00105
00106 tcl::interpreter& interp() const;
00107 Tk_Window tkWin() const;
00108 const char* pathname() const;
00109 double pixelsPerInch() const;
00110
00112 void setCursor(const char* cursor_spec);
00113
00115 const char* getCursor() const;
00116
00118 void warpPointer(int x, int y) const;
00119
00121 void pack();
00122
00124
00126 void repack(const char* options);
00127
00129 void unpack();
00130
00131 void iconify();
00132
00134 void grabKeyboard();
00135
00137 void ungrabKeyboard();
00138
00140 void maximize();
00141
00143 void minimize();
00144
00145 virtual void displayCallback() = 0;
00146
00147 virtual void reshapeCallback(int width, int height) = 0;
00148
00150 void bind(const rutz::fstring& event_sequence,
00151 const rutz::fstring& script);
00152
00154 void takeFocus();
00155
00157 void loseFocus();
00158
00159 void requestRedisplay();
00160
00161 void hook();
00162
00163 nub::Signal1<const tcl::ButtonPressEvent&> sigButtonPressed;
00164 nub::Signal1<const tcl::KeyPressEvent&> sigKeyPressed;
00165
00166 private:
00167 TkWidget(const TkWidget&);
00168 TkWidget& operator=(const TkWidget&);
00169
00170 TkWidgImpl* const rep;
00171 };
00172
00173 static const char __attribute__((used)) vcid_groovx_tk_widget_h_utc20050628165845[] = "$Id: widget.h 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00174 #endif // !GROOVX_TK_WIDGET_H_UTC20050628165845_DEFINED