00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef Fl_Browser__H
00025 #define Fl_Browser__H
00026
00027 #ifndef Fl_Group_H
00028 #include "Fl_Group.H"
00029 #endif
00030 #include "Fl_Scrollbar.H"
00031 #include <FL/Fl.H>
00032
00033 #define FL_NORMAL_BROWSER 0
00034 #define FL_SELECT_BROWSER 1
00035 #define FL_HOLD_BROWSER 2
00036 #define FL_MULTI_BROWSER 3
00038 #define FL_SORT_ASCENDING 0
00039 #define FL_SORT_DESCENDING 1
00077 class FL_EXPORT Fl_Browser_ : public Fl_Group {
00078 int position_;
00079 int real_position_;
00080 int hposition_;
00081 int real_hposition_;
00082 int offset_;
00083 int max_width;
00084 uchar has_scrollbar_;
00085 Fl_Font textfont_;
00086 Fl_Fontsize textsize_;
00087 Fl_Color textcolor_;
00088 void* top_;
00089 void* selection_;
00090 void *redraw1,*redraw2;
00091 void* max_width_item;
00092 int scrollbar_size_;
00093
00094 void update_top();
00095
00096 protected:
00097
00098
00104 virtual void *item_first() const = 0;
00110 virtual void *item_next(void *item) const = 0;
00116 virtual void *item_prev(void *item) const = 0;
00122 virtual void *item_last() const { return 0L; }
00131 virtual int item_height(void *item) const = 0;
00139 virtual int item_width(void *item) const = 0;
00140 virtual int item_quick_height(void *item) const ;
00145 virtual void item_draw(void *item,int X,int Y,int W,int H) const = 0;
00151 virtual const char *item_text(void *item) const { (void)item; return 0L; }
00157 virtual void item_swap(void *a,void *b) { (void)a; (void)b; }
00164 virtual void *item_at(int index) const { (void)index; return 0L; }
00165
00166 virtual int full_width() const ;
00167 virtual int full_height() const ;
00168 virtual int incr_height() const ;
00169
00170 virtual void item_select(void *item,int val=1);
00171 virtual int item_selected(void *item) const ;
00172
00173
00177 void *top() const { return top_; }
00185 void *selection() const { return selection_; }
00186 void new_list();
00187 void deleting(void *item);
00188 void replacing(void *a,void *b);
00189 void swapping(void *a,void *b);
00190 void inserting(void *a,void *b);
00191 int displayed(void *item) const ;
00192 void redraw_line(void *item);
00197 void redraw_lines() { damage(FL_DAMAGE_SCROLL); }
00198 void bbox(int &X,int &Y,int &W,int &H) const;
00199 int leftedge() const;
00200 void *find_item(int ypos);
00201
00202 void draw();
00203 Fl_Browser_(int X,int Y,int W,int H,const char *L=0);
00204
00205 public:
00206
00210 Fl_Scrollbar scrollbar;
00214 Fl_Scrollbar hscrollbar;
00215
00216 int handle(int event);
00217 void resize(int X,int Y,int W,int H);
00218
00219 int select(void *item,int val=1,int docallbacks=0);
00220 int select_only(void *item,int docallbacks=0);
00221 int deselect(int docallbacks=0);
00229 int position() const { return position_; }
00230 void position(int pos);
00238 int hposition() const { return hposition_; }
00239 void hposition(int);
00240 void display(void *item);
00241
00251 enum {
00252 HORIZONTAL = 1,
00253 VERTICAL = 2,
00254 BOTH = 3,
00255 ALWAYS_ON = 4,
00256 HORIZONTAL_ALWAYS = 5,
00257 VERTICAL_ALWAYS = 6,
00258 BOTH_ALWAYS = 7
00259 };
00263 uchar has_scrollbar() const { return has_scrollbar_; }
00286 void has_scrollbar(uchar mode) { has_scrollbar_ = mode; }
00287
00292 Fl_Font textfont() const { return textfont_; }
00296 void textfont(Fl_Font font) { textfont_ = font; }
00297
00301 Fl_Fontsize textsize() const { return textsize_; }
00305 void textsize(Fl_Fontsize newSize) { textsize_ = newSize; }
00306
00310 Fl_Color textcolor() const { return textcolor_; }
00314 void textcolor(Fl_Color col) { textcolor_ = col; }
00315
00325 int scrollbar_size() const {
00326 return(scrollbar_size_);
00327 }
00347 void scrollbar_size(int newSize) {
00348 scrollbar_size_ = newSize;
00349 }
00357 int scrollbar_width() const {
00358 return(Fl::scrollbar_size());
00359 }
00367 void scrollbar_width(int width) {
00368 Fl::scrollbar_size(width);
00369 scrollbar_size_ = 0;
00370 }
00375 void scrollbar_right() { scrollbar.align(FL_ALIGN_RIGHT); }
00380 void scrollbar_left() { scrollbar.align(FL_ALIGN_LEFT); }
00381 void sort(int flags=0);
00382 };
00383
00384 #endif
00385
00386
00387
00388