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 #endif
00045
00073 class EDELIB_API Window : public Fl_Double_Window {
00074 private:
00075 bool sbuffer;
00076 int loaded_components;
00077
00078 XSettingsClient* xs;
00079
00080 WindowXSettingsCallback* xs_cb;
00081 WindowXSettingsCallback* xs_cb_old;
00082 void* xs_cb_data;
00083
00084 const char* const* icon_pixmap;
00085
00086 void init(int component);
00087 public:
00091 Window(int X, int Y, int W, int H, const char* l = 0, int component = WIN_INIT_ALL);
00092
00096 Window(int W, int H, const char* l = 0, int component = WIN_INIT_ALL);
00097
00101 virtual ~Window();
00102
00106 int component(void) { return loaded_components; }
00107
00114 void xsettings_callback(WindowXSettingsCallback cb, void* data = NULL) { xs_cb = cb; xs_cb_data = data; }
00115
00119 WindowXSettingsCallback* xsettings_callback(void) { return xs_cb; }
00120
00124 void* xsettings_callback_data(void) { return xs_cb_data; }
00125
00131 void pause_xsettings_callback(void) { xs_cb_old = xs_cb; xs_cb = NULL; }
00132
00138 void restore_xsettings_callback(void) { xs_cb = xs_cb_old; }
00139
00145 void window_icon(const char* const * pix) { icon_pixmap = pix; }
00146
00150 const char* const* window_icon(void) { return icon_pixmap; }
00151
00155 virtual void show(void);
00156
00160 virtual void show(int argc, char** argv) { Fl_Window::show(argc, argv); }
00161
00165 void single_buffer(bool s) { sbuffer = s; }
00166
00170 bool single_buffer(void) { return sbuffer; }
00171
00175 bool double_buffer(void) { return !single_buffer(); }
00176
00181 virtual void flush(void) {
00182 if(!sbuffer)
00183 Fl_Double_Window::flush();
00184 else
00185 Fl_Window::flush();
00186 }
00187
00192 virtual void resize(int X, int Y, int W, int H) {
00193 if(!sbuffer)
00194 Fl_Double_Window::resize(X, Y, W, H);
00195 else
00196 Fl_Window::resize(X, Y, W, H);
00197 }
00198
00203 virtual void hide(void) {
00204 if(!sbuffer)
00205 Fl_Double_Window::hide();
00206 else
00207 Fl_Window::hide();
00208 }
00209 };
00210
00211 EDELIB_NS_END
00212 #endif