00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __EDELIB_WINDOW_H__
00022 #define __EDELIB_WINDOW_H__
00023
00024 #include "XSettingsClient.h"
00025 #include <FL/Fl_Double_Window.H>
00026
00027 EDELIB_NS_BEGIN
00028
00034 enum WindowComponents {
00035 WIN_INIT_NONE = (1 << 1),
00036 WIN_INIT_ICON_THEME = (1 << 2),
00037 WIN_INIT_IMAGES = (1 << 3),
00038 WIN_INIT_ALL = (WIN_INIT_ICON_THEME | WIN_INIT_IMAGES)
00039 };
00040
00041 #ifndef SKIP_DOCS
00042 typedef bool (WindowXSettingsCallback)(const char* name, XSettingsAction action,
00043 const XSettingsSetting* setting, void* data);
00044
00045 typedef void (WindowForeignCallback)(void* data);
00046 #endif
00047
00075 class EDELIB_API Window : public Fl_Double_Window {
00076 private:
00077 bool sbuffer;
00078 int loaded_components;
00079
00080 XSettingsClient* xs;
00081
00082 WindowXSettingsCallback* xs_cb;
00083 WindowXSettingsCallback* xs_cb_old;
00084 void* xs_cb_data;
00085
00086 const char* const* icon_pixmap;
00087
00088 unsigned int wid;
00089 WindowForeignCallback* foreign_cb;
00090 void* foreign_cb_data;
00091
00092 void init(int component);
00093 public:
00097 Window(int X, int Y, int W, int H, const char* l = 0, int component = WIN_INIT_ALL);
00098
00102 Window(int W, int H, const char* l = 0, int component = WIN_INIT_ALL);
00103
00107 virtual ~Window();
00108
00112 int component(void) { return loaded_components; }
00113
00120 void xsettings_callback(WindowXSettingsCallback cb, void* data = NULL) { xs_cb = cb; xs_cb_data = data; }
00121
00125 WindowXSettingsCallback* xsettings_callback(void) { return xs_cb; }
00126
00130 void* xsettings_callback_data(void) { return xs_cb_data; }
00131
00137 void pause_xsettings_callback(void) { xs_cb_old = xs_cb; xs_cb = NULL; }
00138
00144 void restore_xsettings_callback(void) { xs_cb = xs_cb_old; }
00145
00151 void window_icon(const char* const * pix) { icon_pixmap = pix; }
00152
00156 const char* const* window_icon(void) { return icon_pixmap; }
00157
00161 virtual void show(void);
00162
00166 virtual void show(int argc, char** argv) { Fl_Window::show(argc, argv); }
00167
00171 void single_buffer(bool s) { sbuffer = s; }
00172
00176 bool single_buffer(void) { return sbuffer; }
00177
00181 bool double_buffer(void) { return !single_buffer(); }
00182
00187 virtual void flush(void) {
00188 if(!sbuffer)
00189 Fl_Double_Window::flush();
00190 else
00191 Fl_Window::flush();
00192 }
00193
00198 virtual void resize(int X, int Y, int W, int H) {
00199 if(!sbuffer)
00200 Fl_Double_Window::resize(X, Y, W, H);
00201 else
00202 Fl_Window::resize(X, Y, W, H);
00203 }
00204
00209 virtual void hide(void) {
00210 if(!sbuffer)
00211 Fl_Double_Window::hide();
00212 else
00213 Fl_Window::hide();
00214 }
00215
00230 void foreign_callback(WindowForeignCallback* cb, void* data = NULL) {
00231 foreign_cb = cb;
00232 foreign_cb_data = data;
00233 }
00234
00238 void foreign_callback_data(void* data) { foreign_cb_data = data; }
00239
00243 WindowForeignCallback* foreign_callback(void) { return foreign_cb; }
00244
00249 void* foreign_callback_data(void) { return foreign_cb_data; }
00250
00254 void window_id(unsigned int id) { wid = id; }
00255
00259 unsigned int window_id(void) { return wid; }
00260
00264 static void do_foreign_callback(unsigned int id);
00265
00271 static void do_foreign_callback_for_all(void) { do_foreign_callback(0); }
00272 };
00273
00274 EDELIB_NS_END
00275 #endif