FLTK 1.3.0
Fl_Browser_.H
1 //
2 // "$Id: Fl_Browser_.H 8275 2011-01-13 22:07:31Z manolo $"
3 //
4 // Common browser header file for the Fast Light Tool Kit (FLTK).
5 //
6 // Copyright 1998-2010 by Bill Spitzak and others.
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Library General Public License for more details.
17 //
18 // You should have received a copy of the GNU Library General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 // USA.
22 //
23 // Please report all bugs and problems on the following page:
24 //
25 // http://www.fltk.org/str.php
26 //
27 
28 /* \file
29  Fl_Browser_ widget . */
30 
31 // Yes, I know this should be a template...
32 
33 #ifndef Fl_Browser__H
34 #define Fl_Browser__H
35 
36 #ifndef Fl_Group_H
37 #include "Fl_Group.H"
38 #endif
39 #include "Fl_Scrollbar.H"
40 #include <FL/Fl.H> // Fl::scrollbar_size()
41 
42 #define FL_NORMAL_BROWSER 0
43 #define FL_SELECT_BROWSER 1
44 #define FL_HOLD_BROWSER 2
45 #define FL_MULTI_BROWSER 3
47 #define FL_SORT_ASCENDING 0
48 #define FL_SORT_DESCENDING 1
67 class FL_EXPORT Fl_Browser_ : public Fl_Group {
68  int position_; // where user wants it scrolled to
69  int real_position_; // the current vertical scrolling position
70  int hposition_; // where user wants it panned to
71  int real_hposition_; // the current horizontal scrolling position
72  int offset_; // how far down top_ item the real_position is
73  int max_width; // widest object seen so far
74  uchar has_scrollbar_; // which scrollbars are enabled
75  Fl_Font textfont_;
76  Fl_Fontsize textsize_;
77  Fl_Color textcolor_;
78  void* top_; // which item scrolling position is in
79  void* selection_; // which is selected (except for FL_MULTI_BROWSER)
80  void *redraw1,*redraw2; // minimal update pointers
81  void* max_width_item; // which item has max_width_
82  int scrollbar_size_; // size of scrollbar trough
83 
84  void update_top();
85 
86 protected:
87 
88  // All of the following must be supplied by the subclass:
94  virtual void *item_first() const = 0;
100  virtual void *item_next(void *item) const = 0;
106  virtual void *item_prev(void *item) const = 0;
112  virtual void *item_last() const { return 0L; }
121  virtual int item_height(void *item) const = 0;
129  virtual int item_width(void *item) const = 0;
130  virtual int item_quick_height(void *item) const ;
135  virtual void item_draw(void *item,int X,int Y,int W,int H) const = 0;
141  virtual const char *item_text(void *item) const { (void)item; return 0L; }
147  virtual void item_swap(void *a,void *b) { (void)a; (void)b; }
154  virtual void *item_at(int index) const { (void)index; return 0L; }
155  // you don't have to provide these but it may help speed it up:
156  virtual int full_width() const ; // current width of all items
157  virtual int full_height() const ; // current height of all items
158  virtual int incr_height() const ; // average height of an item
159  // These only need to be done by subclass if you want a multi-browser:
160  virtual void item_select(void *item,int val=1);
161  virtual int item_selected(void *item) const ;
162 
163  // things the subclass may want to call:
167  void *top() const { return top_; }
175  void *selection() const { return selection_; }
176  void new_list(); // completely clobber all data, as though list replaced
177  void deleting(void *item); // get rid of any pointers to item
178  void replacing(void *a,void *b); // change a pointers to b
179  void swapping(void *a,void *b); // exchange pointers a and b
180  void inserting(void *a,void *b); // insert b near a
181  int displayed(void *item) const ; // true if this item is visible
182  void redraw_line(void *item); // minimal update, no change in size
187  void redraw_lines() { damage(FL_DAMAGE_SCROLL); } // redraw all of them
188  void bbox(int &X,int &Y,int &W,int &H) const;
189  int leftedge() const; // x position after scrollbar & border
190  void *find_item(int ypos); // item under mouse
191 
192  void draw();
193  Fl_Browser_(int X,int Y,int W,int H,const char *L=0);
194 
195 public:
196 
205 
206  int handle(int event);
207  void resize(int X,int Y,int W,int H);
208 
209  int select(void *item,int val=1,int docallbacks=0);
210  int select_only(void *item,int docallbacks=0);
211  int deselect(int docallbacks=0);
219  int position() const { return position_; }
220  void position(int pos); // scroll to here
228  int hposition() const { return hposition_; }
229  void hposition(int); // pan to here
230  void display(void *item); // scroll so this item is shown
231 
241  enum { // values for has_scrollbar()
242  HORIZONTAL = 1,
243  VERTICAL = 2,
244  BOTH = 3,
245  ALWAYS_ON = 4,
246  HORIZONTAL_ALWAYS = 5,
247  VERTICAL_ALWAYS = 6,
248  BOTH_ALWAYS = 7
249  };
253  uchar has_scrollbar() const { return has_scrollbar_; }
276  void has_scrollbar(uchar mode) { has_scrollbar_ = mode; }
277 
282  Fl_Font textfont() const { return textfont_; }
286  void textfont(Fl_Font font) { textfont_ = font; }
287 
291  Fl_Fontsize textsize() const { return textsize_; }
295  void textsize(Fl_Fontsize size) { textsize_ = size; }
296 
300  Fl_Color textcolor() const { return textcolor_; }
304  void textcolor(Fl_Color col) { textcolor_ = col; }
305 
315  int scrollbar_size() const {
316  return(scrollbar_size_);
317  }
337  void scrollbar_size(int size) {
338  scrollbar_size_ = size;
339  }
347  int scrollbar_width() const {
348  return(Fl::scrollbar_size());
349  }
357  void scrollbar_width(int width) {
358  Fl::scrollbar_size(width);
359  scrollbar_size_ = 0;
360  }
365  void scrollbar_right() { scrollbar.align(FL_ALIGN_RIGHT); }
370  void scrollbar_left() { scrollbar.align(FL_ALIGN_LEFT); }
371  void sort(int flags=0);
372 };
373 
374 #endif
375 
376 //
377 // End of "$Id: Fl_Browser_.H 8275 2011-01-13 22:07:31Z manolo $".
378 //
Fl_Fontsize textsize() const
Gets the default text size (in pixels) for the lines in the browser.
Definition: Fl_Browser_.H:291
void scrollbar_left()
Moves the vertical scrollbar to the lefthand side of the list.
Definition: Fl_Browser_.H:370
Fl_Align align() const
Gets the label alignment.
Definition: Fl_Widget.H:344
int scrollbar_size() const
Gets the current size of the scrollbars' troughs, in pixels.
Definition: Fl_Browser_.H:315
void * selection() const
Returns the item currently selected, or NULL if there is no selection.
Definition: Fl_Browser_.H:175
Fl static class.
void textcolor(Fl_Color col)
Sets the default text color for the lines in the browser to color col.
Definition: Fl_Browser_.H:304
Fl_Color textcolor() const
Gets the default text color for the lines in the browser.
Definition: Fl_Browser_.H:300
This is the base class for browsers.
Definition: Fl_Browser_.H:67
void scrollbar_right()
Moves the vertical scrollbar to the righthand side of the list.
Definition: Fl_Browser_.H:365
Fl_Scrollbar hscrollbar
Horizontal scrollbar.
Definition: Fl_Browser_.H:204
void * top() const
Returns the item that appears at the top of the list.
Definition: Fl_Browser_.H:167
virtual const char * item_text(void *item) const
This optional method returns a string (label) that may be used for sorting.
Definition: Fl_Browser_.H:141
void textfont(Fl_Font font)
Sets the default text font for the lines in the browser to font.
Definition: Fl_Browser_.H:286
Fl_Scrollbar scrollbar
Vertical scrollbar.
Definition: Fl_Browser_.H:200
virtual void item_swap(void *a, void *b)
This optional method should be provided by the subclass to efficiently swap browser items a and b...
Definition: Fl_Browser_.H:147
The Fl_Scroll widget was scrolled.
Definition: Enumerations.H:940
void scrollbar_size(int size)
Sets the pixel size of the scrollbars' troughs to the size, in pixels.
Definition: Fl_Browser_.H:337
Fl_Font textfont() const
Gets the default text font for the lines in the browser.
Definition: Fl_Browser_.H:282
int Fl_Fontsize
Size of a font in pixels.
Definition: Enumerations.H:741
virtual void * item_last() const
This method must be provided by the subclass to return the last item in the list. ...
Definition: Fl_Browser_.H:112
void has_scrollbar(uchar mode)
Sets whether the widget should have scrollbars or not (default Fl_Browser_::BOTH).
Definition: Fl_Browser_.H:276
virtual void * item_at(int index) const
This method must be provided by the subclass to return the item for the specified index...
Definition: Fl_Browser_.H:154
unsigned int Fl_Color
an FLTK color value
Definition: Enumerations.H:769
static int scrollbar_size()
Gets the default scrollbar size used by Fl_Browser_, Fl_Help_View, Fl_Scroll, and Fl_Text_Display wid...
Definition: Fl.cxx:151
int Fl_Font
A font number is an index into the internal font table.
Definition: Enumerations.H:712
int position() const
Gets the vertical scroll position of the list as a pixel position pos.
Definition: Fl_Browser_.H:219
uchar has_scrollbar() const
Returns the current scrollbar mode, see Fl_Browser_::has_scrollbar(uchar)
Definition: Fl_Browser_.H:253
void redraw_lines()
This method will cause the entire list to be redrawn.
Definition: Fl_Browser_.H:187
const Fl_Align FL_ALIGN_LEFT
Align the label at the left of the widget.
Definition: Enumerations.H:674
int scrollbar_width() const
This method has been deprecated, existing for backwards compatibility only.
Definition: Fl_Browser_.H:347
void scrollbar_width(int width)
This method has been deprecated, existing for backwards compatibility only.
Definition: Fl_Browser_.H:357
The Fl_Scrollbar widget displays a slider with arrow buttons at the ends of the scrollbar.
Definition: Fl_Scrollbar.H:52
void textsize(Fl_Fontsize size)
Sets the default text size (in pixels) for the lines in the browser to size.
Definition: Fl_Browser_.H:295
unsigned char uchar
unsigned char
Definition: fl_types.h:39
const Fl_Align FL_ALIGN_RIGHT
Align the label to the right of the widget.
Definition: Enumerations.H:676
int hposition() const
Gets the horizontal scroll position of the list as a pixel position pos.
Definition: Fl_Browser_.H:228