fltk/FL/Fl_Widget.H
Bill Spitzak 80465e4bff Backported the fltk2.0 tooltips. This may be somewhat binary incompatable
as Fl_Widget::tooltip(x) is no longer an inline (though the previous version
will work if there is at least one call to the new one). It may be better
to just enable tooltips all the time. Also Fl_Tooltip::enable() is changed,
but few programs call that.


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2210 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
2002-05-13 05:05:11 +00:00

212 lines
7.2 KiB
C++

//
// "$Id: Fl_Widget.H,v 1.6.2.4.2.14 2002/05/13 05:05:11 spitzak Exp $"
//
// Widget header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2002 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems to "fltk-bugs@fltk.org".
//
#ifndef Fl_Widget_H
#define Fl_Widget_H
#include "Enumerations.H"
class Fl_Widget;
class Fl_Window;
class Fl_Group;
class Fl_Image;
typedef void (Fl_Callback )(Fl_Widget*, void*);
typedef Fl_Callback* Fl_Callback_p; // needed for BORLAND
typedef void (Fl_Callback0)(Fl_Widget*);
typedef void (Fl_Callback1)(Fl_Widget*, long);
struct Fl_Label {
const char* value;
Fl_Image* image;
Fl_Image* deimage;
uchar type;
uchar font;
uchar size;
unsigned color;
FL_EXPORT void draw(int,int,int,int, Fl_Align) const ;
FL_EXPORT void measure(int&, int&) const ;
};
class Fl_Widget {
friend class Fl_Group;
Fl_Group* parent_;
Fl_Callback* callback_;
void* user_data_;
short x_,y_,w_,h_;
Fl_Label label_;
int flags_;
unsigned color_;
unsigned color2_;
uchar type_;
uchar damage_;
uchar box_;
uchar align_;
uchar when_;
const char *tooltip_;
// "de-implement" the copy constructors:
FL_EXPORT Fl_Widget & operator=(const Fl_Widget &);
FL_EXPORT Fl_Widget(const Fl_Widget &);
protected:
FL_EXPORT Fl_Widget(int,int,int,int,const char* =0);
void x(int v) {x_ = v;}
void y(int v) {y_ = v;}
void w(int v) {w_ = v;}
void h(int v) {h_ = v;}
int flags() const {return flags_;}
void set_flag(int c) {flags_ |= c;}
void clear_flag(int c) {flags_ &= ~c;}
enum {INACTIVE=1, INVISIBLE=2, OUTPUT=4, SHORTCUT_LABEL=64, CHANGED=128};
FL_EXPORT void draw_box() const;
FL_EXPORT void draw_box(Fl_Boxtype, Fl_Color) const;
FL_EXPORT void draw_box(Fl_Boxtype, int,int,int,int, Fl_Color) const;
void draw_focus() {draw_focus(box(),x(),y(),w(),h());}
FL_EXPORT void draw_focus(Fl_Boxtype, int,int,int,int) const;
FL_EXPORT void draw_label() const;
FL_EXPORT void draw_label(int, int, int, int) const;
public:
FL_EXPORT virtual ~Fl_Widget();
FL_EXPORT virtual void draw() = 0;
FL_EXPORT virtual int handle(int);
Fl_Group* parent() const {return parent_;}
void parent(Fl_Group* w) {parent_ = w;} // for hacks only, Fl_Group::add()
uchar type() const {return type_;}
void type(uchar t) {type_ = t;}
int x() const {return x_;}
int y() const {return y_;}
int w() const {return w_;}
int h() const {return h_;}
FL_EXPORT virtual void resize(int,int,int,int);
FL_EXPORT int damage_resize(int,int,int,int);
void position(int X,int Y) {resize(X,Y,w_,h_);}
void size(int W,int H) {resize(x_,y_,W,H);}
Fl_Align align() const {return (Fl_Align)align_;}
void align(uchar a) {align_ = a;}
Fl_Boxtype box() const {return (Fl_Boxtype)box_;}
void box(Fl_Boxtype a) {box_ = a;}
Fl_Color color() const {return (Fl_Color)color_;}
void color(unsigned a) {color_ = a;}
Fl_Color selection_color() const {return (Fl_Color)color2_;}
void selection_color(unsigned a) {color2_ = a;}
void color(unsigned a, unsigned b) {color_=a; color2_=b;}
const char* label() const {return label_.value;}
void label(const char* a) {label_.value=a;}
void label(Fl_Labeltype a,const char* b) {label_.type = a; label_.value = b;}
Fl_Labeltype labeltype() const {return (Fl_Labeltype)label_.type;}
void labeltype(Fl_Labeltype a) {label_.type = a;}
Fl_Color labelcolor() const {return (Fl_Color)label_.color;}
void labelcolor(unsigned a) {label_.color=a;}
Fl_Font labelfont() const {return (Fl_Font)label_.font;}
void labelfont(uchar a) {label_.font=a;}
uchar labelsize() const {return label_.size;}
void labelsize(uchar a) {label_.size=a;}
Fl_Image* image() {return label_.image;}
void image(Fl_Image* a) {label_.image=a;}
void image(Fl_Image& a) {label_.image=&a;}
Fl_Image* deimage() {return label_.deimage;}
void deimage(Fl_Image* a) {label_.deimage=a;}
void deimage(Fl_Image& a) {label_.deimage=&a;}
const char *tooltip() const {return tooltip_;}
FL_EXPORT void tooltip(const char *t);
Fl_Callback_p callback() const {return callback_;}
void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}
void callback(Fl_Callback* c) {callback_=c;}
void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;}
void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)p;}
void* user_data() const {return user_data_;}
void user_data(void* v) {user_data_ = v;}
long argument() const {return (long)user_data_;}
void argument(long v) {user_data_ = (void*)v;}
Fl_When when() const {return (Fl_When)when_;}
void when(uchar i) {when_ = i;}
int visible() const {return !(flags_&INVISIBLE);}
FL_EXPORT int visible_r() const;
FL_EXPORT void show();
FL_EXPORT void hide();
void set_visible() {flags_ &= ~INVISIBLE;}
void clear_visible() {flags_ |= INVISIBLE;}
int active() const {return !(flags_&INACTIVE);}
FL_EXPORT int active_r() const;
FL_EXPORT void activate();
FL_EXPORT void deactivate();
int output() const {return (flags_&OUTPUT);}
void set_output() {flags_ |= OUTPUT;}
void clear_output() {flags_ &= ~OUTPUT;}
int takesevents() const {return !(flags_&(INACTIVE|INVISIBLE|OUTPUT));}
int changed() const {return flags_&CHANGED;}
void set_changed() {flags_ |= CHANGED;}
void clear_changed() {flags_ &= ~CHANGED;}
FL_EXPORT int take_focus();
FL_EXPORT static void default_callback(Fl_Widget*, void*);
void do_callback() {callback_(this,user_data_);}
void do_callback(Fl_Widget* o,void* arg=0) {callback_(o,arg);}
void do_callback(Fl_Widget* o,long arg) {callback_(o,(void*)arg);}
FL_EXPORT int test_shortcut();
FL_EXPORT static int test_shortcut(const char*);
FL_EXPORT int contains(const Fl_Widget*) const ;
int inside(const Fl_Widget* o) const {return o ? o->contains(this) : 0;}
FL_EXPORT void redraw();
uchar damage() const {return damage_;}
void clear_damage(uchar c = 0) {damage_ = c;}
FL_EXPORT void damage(uchar c);
FL_EXPORT void damage(uchar c,int,int,int,int);
FL_EXPORT void draw_label(int, int, int, int, Fl_Align) const;
void measure_label(int& x, int& y) {label_.measure(x,y);}
FL_EXPORT Fl_Window* window() const ;
// back compatability only:
Fl_Color color2() const {return (Fl_Color)color2_;}
void color2(unsigned a) {color2_ = a;}
};
// reserved type numbers (necessary for my cheapo RTTI) start here.
// grep the header files for "RESERVED_TYPE" to find the next available
// number.
#define FL_RESERVED_TYPE 100
#endif
//
// End of "$Id: Fl_Widget.H,v 1.6.2.4.2.14 2002/05/13 05:05:11 spitzak Exp $".
//