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
00028
00029
00030
00031
00032
00033 #ifndef Fl_Browser__H
00034 #define Fl_Browser__H
00035
00036 #ifndef Fl_Group_H
00037 #include "Fl_Group.H"
00038 #endif
00039 #include "Fl_Scrollbar.H"
00040 #include <FL/Fl.H>
00041
00042 #define FL_NORMAL_BROWSER 0
00043 #define FL_SELECT_BROWSER 1
00044 #define FL_HOLD_BROWSER 2
00045 #define FL_MULTI_BROWSER 3
00047 #define FL_SORT_ASCENDING 0
00048 #define FL_SORT_DESCENDING 1
00067 class FL_EXPORT Fl_Browser_ : public Fl_Group {
00068 int position_;
00069 int real_position_;
00070 int hposition_;
00071 int real_hposition_;
00072 int offset_;
00073 int max_width;
00074 uchar has_scrollbar_;
00075 Fl_Font textfont_;
00076 Fl_Fontsize textsize_;
00077 Fl_Color textcolor_;
00078 void* top_;
00079 void* selection_;
00080 void *redraw1,*redraw2;
00081 void* max_width_item;
00082 int scrollbar_size_;
00083
00084 void update_top();
00085
00086 protected:
00087
00088
00094 virtual void *item_first() const = 0;
00100 virtual void *item_next(void *item) const = 0;
00106 virtual void *item_prev(void *item) const = 0;
00112 virtual void *item_last() const { return 0L; }
00121 virtual int item_height(void *item) const = 0;
00129 virtual int item_width(void *item) const = 0;
00130 virtual int item_quick_height(void *item) const ;
00135 virtual void item_draw(void *item,int X,int Y,int W,int H) const = 0;
00141 virtual const char *item_text(void *item) const { return 0L; }
00147 virtual void item_swap(void *a,void *b) { }
00154 virtual void *item_at(int index) const { return 0L; }
00155
00156 virtual int full_width() const ;
00157 virtual int full_height() const ;
00158 virtual int incr_height() const ;
00159
00160 virtual void item_select(void *item,int val=1);
00161 virtual int item_selected(void *item) const ;
00162
00163
00167 void *top() const { return top_; }
00175 void *selection() const { return selection_; }
00176 void new_list();
00177 void deleting(void *item);
00178 void replacing(void *a,void *b);
00179 void swapping(void *a,void *b);
00180 void inserting(void *a,void *b);
00181 int displayed(void *item) const ;
00182 void redraw_line(void *item);
00187 void redraw_lines() { damage(FL_DAMAGE_SCROLL); }
00188 void bbox(int &X,int &Y,int &W,int &H) const;
00189 int leftedge() const;
00190 void *find_item(int ypos);
00191
00192 void draw();
00193 Fl_Browser_(int X,int Y,int W,int H,const char *L=0);
00194
00195 public:
00196
00200 Fl_Scrollbar scrollbar;
00204 Fl_Scrollbar hscrollbar;
00205
00206 int handle(int event);
00207 void resize(int X,int Y,int W,int H);
00208
00209 int select(void *item,int val=1,int docallbacks=0);
00210 int select_only(void *item,int docallbacks=0);
00211 int deselect(int docallbacks=0);
00219 int position() const { return position_; }
00220 void position(int pos);
00228 int hposition() const { return hposition_; }
00229 void hposition(int);
00230 void display(void *item);
00231
00241 enum {
00242 HORIZONTAL = 1,
00243 VERTICAL = 2,
00244 BOTH = 3,
00245 ALWAYS_ON = 4,
00246 HORIZONTAL_ALWAYS = 5,
00247 VERTICAL_ALWAYS = 6,
00248 BOTH_ALWAYS = 7
00249 };
00253 uchar has_scrollbar() const { return has_scrollbar_; }
00276 void has_scrollbar(uchar mode) { has_scrollbar_ = mode; }
00277
00282 Fl_Font textfont() const { return textfont_; }
00286 void textfont(Fl_Font font) { textfont_ = font; }
00287
00291 Fl_Fontsize textsize() const { return textsize_; }
00295 void textsize(Fl_Fontsize size) { textsize_ = size; }
00296
00300 Fl_Color textcolor() const { return textcolor_; }
00304 void textcolor(Fl_Color col) { textcolor_ = col; }
00305
00315 int scrollbar_size() const {
00316 return(scrollbar_size_);
00317 }
00337 void scrollbar_size(int size) {
00338 scrollbar_size_ = size;
00339 }
00347 int scrollbar_width() const {
00348 return(Fl::scrollbar_size());
00349 }
00357 void scrollbar_width(int width) {
00358 Fl::scrollbar_size(width);
00359 scrollbar_size_ = 0;
00360 }
00365 void scrollbar_right() { scrollbar.align(FL_ALIGN_RIGHT); }
00370 void scrollbar_left() { scrollbar.align(FL_ALIGN_LEFT); }
00371 void sort(int flags=0);
00372 };
00373
00374 #endif
00375
00376
00377
00378