00001
00002
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
00031 #ifndef Fl_Widget_H
00032 #define Fl_Widget_H
00033
00034 #include "Enumerations.H"
00035
00039 #ifdef _WIN64
00040 #ifdef __GNUC__
00041 #include <stdint.h>
00042 #else
00043 #include <stddef.h>
00044 #endif
00045 typedef intptr_t fl_intptr_t;
00046 typedef uintptr_t fl_uintptr_t;
00047 #else
00048 typedef long fl_intptr_t;
00049 typedef unsigned long fl_uintptr_t;
00050 #endif
00051
00052 class Fl_Widget;
00053 class Fl_Window;
00054 class Fl_Group;
00055 class Fl_Image;
00056
00058 typedef void (Fl_Callback )(Fl_Widget*, void*);
00060 typedef Fl_Callback* Fl_Callback_p;
00062 typedef void (Fl_Callback0)(Fl_Widget*);
00064 typedef void (Fl_Callback1)(Fl_Widget*, long);
00065
00073 struct FL_EXPORT Fl_Label {
00075 const char* value;
00077 Fl_Image* image;
00079 Fl_Image* deimage;
00081 Fl_Font font;
00083 Fl_Fontsize size;
00085 Fl_Color color;
00087 Fl_Align align_;
00089 uchar type;
00090
00092 void draw(int,int,int,int, Fl_Align) const ;
00093 void measure(int &w, int &h) const ;
00094 };
00095
00096
00109 class FL_EXPORT Fl_Widget {
00110 friend class Fl_Group;
00111
00112 Fl_Group* parent_;
00113 Fl_Callback* callback_;
00114 void* user_data_;
00115 int x_,y_,w_,h_;
00116 Fl_Label label_;
00117 unsigned int flags_;
00118 Fl_Color color_;
00119 Fl_Color color2_;
00120 uchar type_;
00121 uchar damage_;
00122 uchar box_;
00123 uchar when_;
00124
00125 const char *tooltip_;
00126
00128 Fl_Widget(const Fl_Widget &);
00130 Fl_Widget& operator=(const Fl_Widget &);
00131
00132 protected:
00133
00144 Fl_Widget(int x, int y, int w, int h, const char *label=0L);
00145
00147 void x(int v) {x_ = v;}
00149 void y(int v) {y_ = v;}
00151 void w(int v) {w_ = v;}
00153 void h(int v) {h_ = v;}
00155 unsigned int flags() const {return flags_;}
00157 void set_flag(unsigned int c) {flags_ |= c;}
00159 void clear_flag(unsigned int c) {flags_ &= ~c;}
00163 enum {
00164 INACTIVE = 1<<0,
00165 INVISIBLE = 1<<1,
00166 OUTPUT = 1<<2,
00167 NOBORDER = 1<<3,
00168 FORCE_POSITION = 1<<4,
00169 NON_MODAL = 1<<5,
00170 SHORTCUT_LABEL = 1<<6,
00171 CHANGED = 1<<7,
00172 OVERRIDE = 1<<8,
00173 VISIBLE_FOCUS = 1<<9,
00174 COPIED_LABEL = 1<<10,
00175 CLIP_CHILDREN = 1<<11,
00176 MENU_WINDOW = 1<<12,
00177 TOOLTIP_WINDOW = 1<<13,
00178 MODAL = 1<<14,
00179 NO_OVERLAY = 1<<15,
00180 GROUP_RELATIVE = 1<<16,
00181 COPIED_TOOLTIP = 1<<17,
00182
00183 USERFLAG3 = 1<<29,
00184 USERFLAG2 = 1<<30,
00185 USERFLAG1 = 1<<31
00186 };
00187 void draw_box() const;
00188 void draw_box(Fl_Boxtype t, Fl_Color c) const;
00189 void draw_box(Fl_Boxtype t, int x,int y,int w,int h, Fl_Color c) const;
00190 void draw_backdrop() const;
00192 void draw_focus() {draw_focus(box(),x(),y(),w(),h());}
00193 void draw_focus(Fl_Boxtype t, int x,int y,int w,int h) const;
00194 void draw_label() const;
00195 void draw_label(int, int, int, int) const;
00196
00197 public:
00198
00207 virtual ~Fl_Widget();
00208
00225 virtual void draw() = 0;
00226
00243 virtual int handle(int event);
00244
00250 Fl_Group* parent() const {return parent_;}
00251
00260 void parent(Fl_Group* p) {parent_ = p;}
00261
00270 uchar type() const {return type_;}
00271
00275 void type(uchar t) {type_ = t;}
00276
00280 int x() const {return x_;}
00281
00285 int y() const {return y_;}
00286
00290 int w() const {return w_;}
00291
00295 int h() const {return h_;}
00296
00316 virtual void resize(int x, int y, int w, int h);
00317
00319 int damage_resize(int,int,int,int);
00320
00328 void position(int X,int Y) {resize(X,Y,w_,h_);}
00329
00337 void size(int W,int H) {resize(x_,y_,W,H);}
00338
00351 Fl_Align align() const {return label_.align_;}
00352
00360 void align(Fl_Align alignment) {label_.align_ = alignment;}
00361
00366 Fl_Boxtype box() const {return (Fl_Boxtype)box_;}
00367
00375 void box(Fl_Boxtype new_box) {box_ = new_box;}
00376
00381 Fl_Color color() const {return color_;}
00382
00393 void color(Fl_Color bg) {color_ = bg;}
00394
00399 Fl_Color selection_color() const {return color2_;}
00400
00409 void selection_color(Fl_Color a) {color2_ = a;}
00410
00418 void color(Fl_Color bg, Fl_Color sel) {color_=bg; color2_=sel;}
00419
00424 const char* label() const {return label_.value;}
00425
00436 void label(const char* text);
00437
00448 void copy_label(const char *new_label);
00449
00453 void label(Fl_Labeltype a, const char* b) {label_.type = a; label_.value = b;}
00454
00459 Fl_Labeltype labeltype() const {return (Fl_Labeltype)label_.type;}
00460
00469 void labeltype(Fl_Labeltype a) {label_.type = a;}
00470
00475 Fl_Color labelcolor() const {return label_.color;}
00476
00481 void labelcolor(Fl_Color c) {label_.color=c;}
00482
00490 Fl_Font labelfont() const {return label_.font;}
00491
00499 void labelfont(Fl_Font f) {label_.font=f;}
00500
00505 Fl_Fontsize labelsize() const {return label_.size;}
00506
00511 void labelsize(Fl_Fontsize pix) {label_.size=pix;}
00512
00517 Fl_Image* image() {return label_.image;}
00518 const Fl_Image* image() const {return label_.image;}
00519
00524 void image(Fl_Image* img) {label_.image=img;}
00525
00530 void image(Fl_Image& img) {label_.image=&img;}
00531
00536 Fl_Image* deimage() {return label_.deimage;}
00537 const Fl_Image* deimage() const {return label_.deimage;}
00538
00543 void deimage(Fl_Image* img) {label_.deimage=img;}
00544
00549 void deimage(Fl_Image& img) {label_.deimage=&img;}
00550
00555 const char *tooltip() const {return tooltip_;}
00556
00557 void tooltip(const char *text);
00558 void copy_tooltip(const char *text);
00559
00564 Fl_Callback_p callback() const {return callback_;}
00565
00571 void callback(Fl_Callback* cb, void* p) {callback_=cb; user_data_=p;}
00572
00577 void callback(Fl_Callback* cb) {callback_=cb;}
00578
00583 void callback(Fl_Callback0*cb) {callback_=(Fl_Callback*)cb;}
00584
00590 void callback(Fl_Callback1*cb, long p=0) {callback_=(Fl_Callback*)cb; user_data_=(void*)p;}
00591
00596 void* user_data() const {return user_data_;}
00597
00602 void user_data(void* v) {user_data_ = v;}
00603
00606 long argument() const {return (long)(fl_intptr_t)user_data_;}
00607
00612 void argument(long v) {user_data_ = (void*)v;}
00613
00622 Fl_When when() const {return (Fl_When)when_;}
00623
00655 void when(uchar i) {when_ = i;}
00656
00661 unsigned int visible() const {return !(flags_&INVISIBLE);}
00662
00667 int visible_r() const;
00668
00683 virtual void show();
00684
00688 virtual void hide();
00689
00694 void set_visible() {flags_ &= ~INVISIBLE;}
00695
00700 void clear_visible() {flags_ |= INVISIBLE;}
00701
00706 unsigned int active() const {return !(flags_&INACTIVE);}
00707
00712 int active_r() const;
00713
00719 void activate();
00720
00735 void deactivate();
00736
00745 unsigned int output() const {return (flags_&OUTPUT);}
00746
00750 void set_output() {flags_ |= OUTPUT;}
00751
00755 void clear_output() {flags_ &= ~OUTPUT;}
00756
00762 unsigned int takesevents() const {
00763 return !output() && active_r() && visible_r();
00764 }
00765
00781 unsigned int changed() const {return flags_&CHANGED;}
00782
00786 void set_changed() {flags_ |= CHANGED;}
00787
00791 void clear_changed() {flags_ &= ~CHANGED;}
00792
00800 int take_focus();
00801
00808 void set_visible_focus() { flags_ |= VISIBLE_FOCUS; }
00809
00814 void clear_visible_focus() { flags_ &= ~VISIBLE_FOCUS; }
00815
00820 void visible_focus(int v) { if (v) set_visible_focus(); else clear_visible_focus(); }
00821
00826 unsigned int visible_focus() { return flags_ & VISIBLE_FOCUS; }
00827
00835 static void default_callback(Fl_Widget *cb, void *d);
00836
00841 void do_callback() {do_callback(this,user_data_);}
00842
00849 void do_callback(Fl_Widget* o,long arg) {do_callback(o,(void*)arg);}
00850
00851
00852
00853 void do_callback(Fl_Widget* o,void* arg=0);
00854
00855
00856 int test_shortcut();
00857
00858 static unsigned int label_shortcut(const char *t);
00859
00860 static int test_shortcut(const char*, const bool require_alt = false);
00861
00867 int contains(const Fl_Widget *w) const ;
00868
00875 int inside(const Fl_Widget* w) const {return w ? w->contains(this) : 0;}
00876
00880 void redraw();
00881
00886 void redraw_label();
00887
00894 uchar damage() const {return damage_;}
00895
00908 void clear_damage(uchar c = 0) {damage_ = c;}
00909
00915 void damage(uchar c);
00916
00923 void damage(uchar c, int x, int y, int w, int h);
00924
00925 void draw_label(int, int, int, int, Fl_Align) const;
00926
00930 void measure_label(int& ww, int& hh) const {label_.measure(ww, hh);}
00931
00937 Fl_Window* window() const ;
00938
00945 virtual Fl_Group* as_group() {return 0;}
00946
00953 virtual Fl_Window* as_window() {return 0;}
00954
00960 virtual class Fl_Gl_Window* as_gl_window() {return 0;}
00961
00965 Fl_Color color2() const {return (Fl_Color)color2_;}
00966
00970 void color2(unsigned a) {color2_ = a;}
00971 };
00972
00978 #define FL_RESERVED_TYPE 100
00979
00980 #endif
00981
00982
00983
00984