00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _FL_WORKSPACE_H_
00023 #define _FL_WORKSPACE_H_
00024
00025 #include "Fl_Window.h"
00026 #include "Fl_Scrollbar.h"
00027 #include "Fl_Menu_Bar.h"
00028 #include "fl_draw.h"
00029 #include "Fl.h"
00030 #include "x.h"
00031
00032 class FL_API Fl_MDI_Bar;
00033 class FL_API Fl_MDI_Window;
00034 class FL_API Fl_Workspace;
00035
00036 #define FL_MDI_WINDOW 0x01000000
00037
00038 typedef Fl_Group Fl_WorkType;
00039 typedef Fl_Window Fl_ViewportType;
00040
00055 class Fl_MDI_Viewport : public Fl_ViewportType
00056 {
00057 public:
00058 static Fl_Named_Style* default_style;
00059
00063 Fl_MDI_Viewport(int x, int y, int w, int h, const char *label = 0);
00064
00068 virtual ~Fl_MDI_Viewport() { }
00069
00073 void redraw_all();
00077 void relayout_all();
00078
00081 void taskbar(Fl_MDI_Bar *bar);
00082 Fl_MDI_Bar *taskbar();
00083
00090 Fl_MDI_Window *find(const char *caption);
00091
00096 void attach(Fl_MDI_Window *win);
00101 void detach(Fl_MDI_Window *w);
00102
00106 void close_all();
00107
00112 Fl_MDI_Window *aot() { return _aot; }
00118 void aot(Fl_MDI_Window *win) { _aot = win; relayout(); }
00119
00126 Fl_MDI_Window *maximum() { return _max; }
00132 void maximum(Fl_MDI_Window *win);
00133
00139 void top(Fl_MDI_Window *win);
00144 Fl_MDI_Window *top() { return _top; }
00145
00149 int cnt_windows();
00150
00155 void cycle_windows();
00156
00163 void scrolldy(int dy) { _scrolldy+=dy; }
00170 void scrolldx(int dx) { _scrolldx+=dx; }
00171
00178 virtual void layout();
00184 virtual int handle(int ev);
00188 virtual void draw();
00189
00193 void menu(Fl_Menu_Bar *menu) { _menu = menu; }
00194 Fl_Menu_Bar *menu() { return _menu; }
00195
00196 private:
00197 friend class Fl_MDI_Window;
00198
00199 Fl_Menu_Bar *_menu;
00200 Fl_MDI_Bar *_bar;
00201
00202 Fl_MDI_Window *_aot;
00203 Fl_MDI_Window *_max;
00204 Fl_MDI_Window *_top;
00205
00206
00207 static void cb_draw_clip(void*,int,int,int,int);
00208 void draw_clip(int,int,int,int);
00209 int _scrolldx, _scrolldy;
00210 };
00211
00225 class Fl_Workspace : public Fl_WorkType {
00226 public:
00227 static Fl_Named_Style* default_style;
00228
00232 Fl_Workspace(int x, int y, int w, int h, const char *label = 0);
00236 virtual ~Fl_Workspace();
00237
00239
00243 void begin() { viewport()->begin(); }
00244 void end() { viewport()->end(); }
00245
00246 void redraw_all() { viewport()->redraw_all(); }
00247 void relayout_all() { viewport()->relayout_all(); }
00248
00249 Fl_MDI_Window *find(const char *caption) { return viewport()->find(caption); }
00250
00251 void attach(Fl_MDI_Window *win) { viewport()->attach(win); }
00252 void detach(Fl_MDI_Window *win) { viewport()->detach(win); }
00253
00254 void close_all() { _viewport->close_all(); }
00255
00256 Fl_MDI_Window *aot() { return viewport()->aot(); }
00257 void aot(Fl_MDI_Window *win) { viewport()->aot(win); }
00258
00259 Fl_MDI_Window *maximum() { return viewport()->maximum(); }
00260 void maximum(Fl_MDI_Window *win) { viewport()->maximum(win); }
00261
00262 void top(Fl_MDI_Window *win) { viewport()->top(win); }
00263 Fl_MDI_Window *top() { return viewport()->top(); }
00264
00265 void menu(Fl_Menu_Bar *menu) { viewport()->menu(menu); }
00266 Fl_Menu_Bar *menu() { return viewport()->menu(); }
00267
00269
00273 void cascade();
00274
00278 void tileV();
00282 void tileH();
00287 void tile() { tileH();}
00288
00295 void focus_moves_pos(bool val);
00300 bool focus_moves_pos() { return move_pos; }
00301
00302 Fl_MDI_Viewport *viewport() { return _viewport; }
00303
00307 enum {
00308 HORIZONTAL = 1,
00309 VERTICAL = 2,
00310 BOTH = 3,
00311 ALWAYS_ON = 4,
00312 HORIZONTAL_ALWAYS = 5,
00313 VERTICAL_ALWAYS = 6,
00314 BOTH_ALWAYS = 7
00315 };
00316
00321 void show_window() { show_window(viewport()->top()); }
00327 void show_window(Fl_MDI_Window *win);
00328
00333 int xposition() const {return xposition_;}
00338 int yposition() const {return yposition_;}
00343 void position(int x, int y);
00344
00349 virtual void layout();
00353 virtual int handle(int ev);
00357 virtual void draw();
00358
00359 private:
00360 static void cb_hscrollbar(Fl_Widget *o, void *d);
00361 static void cb_vscrollbar(Fl_Widget *o, void *d);
00362
00363 void bbox(int&,int&,int&,int&);
00364
00365 Fl_MDI_Viewport *_viewport;
00366
00367 int xposition_, yposition_;
00368 int layoutdx, layoutdy;
00369
00370 Fl_Scrollbar *vscrollbar;
00371 Fl_Scrollbar *hscrollbar;
00372
00373 bool move_pos;
00374 };
00375
00376 #endif