| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- // ======================================================================
- // File: Flv_Table.h - Flv_Table implementation
- // Program: Flv_Table - FLTK Widget
- // Version: 0.1.0
- // Started: 11/21/99
- //
- // Copyright (C) 1999 Laurence Charlton
- //
- // Description:
- // Flv_Table implements a table/grid. No data is stored
- // in the widget. Supports headers/footers for rows and columns,
- // natively supports a single row height and column width per table.
- // Row and column grids can be turned on and off. Supports no scroll
- // bars as well as horizontal/vertical automatic or always on scroll bars.
- // Also support cell selection and row selection modes. In row selection
- // mode it acts like a pumped-up list widget.
- //
- // row -1 is defined as the row header
- // row -2 is defined as the row footer
- // column -1 is defined as the column header
- // column -2 is defined as the column footer
- //
- // 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.
- // ======================================================================
- #ifndef Flv_Table_H
- #define Flv_Table_H
- #include <FL/Flv_List.H>
- #define FLV_COL_HEADER -1
- #define FLV_COL_FOOTER -2
- #define FLV_MOVE_ON_ENTER_ROW_COL 1
- #define FLV_MOVE_ON_ENTER_COL_ROW 2
- #define FLV_MOVE_ON_ENTER_NEVER 3
- #define FLV_BUTTON1 1
- #define FLV_BUTTON2 2
- #define FLV_BUTTON3 4
- class FL_EXPORT Flv_Table : public Flv_List
- {
- public:
- Flv_Table( int X, int Y, int W, int H, const char *l=0 );
- ~Flv_Table();
- virtual int col_width(int c); // Get column width
- virtual int col_width(int n, int c); // Set column width
- // Add selection info if applicable
- void add_selection_style( Flv_Style &s, int R, int C=0 );
- int buttons(void)
- {
- return vbuttons;
- }
- int buttons(int v)
- {
- return (vbuttons=v);
- }
- void cell_area( int &X, int &Y, int &W, int &H);
- bool cell_selected(int R, int C); // Is cell selected?
- // Convenience functions to tell if a feature is ON.
- bool col_footer(void) // Column footer convenience function
- {
- return (Flv_Feature)(feature() & FLVF_COL_FOOTER)!=0;
- }
- bool col_header(void) // Column header convenience function
- {
- return (Flv_Feature)(feature() & FLVF_COL_HEADER)!=0;
- }
- bool col_divider(void) // Column divider convenience function
- {
- return (Flv_Feature)(feature() & FLVF_COL_DIVIDER)!=0;
- }
- // These are guaranteed style retrieval functions and get
- // the trickle down style information. Any style elements
- // not defined are set to default values.
- virtual void get_style( Flv_Style &s, int R, int C=0 );
- int edit_when(void) // Get when to edit
- {
- return vedit_when;
- }
- int edit_when( int v ); // When to edit
- bool move_row(int amount); // # of rows to move
- bool move_col(int amount); // # of cols to move
- int col(void) // Get current column #
- {
- return vcol;
- }
- int col( int n ); // Set current column #
- int row(void) // Get current row #
- {
- return vrow;
- }
- int row(int n); // Set current row #
- bool col_resizable(int c); // Get/set column locked status
- bool col_resizable( bool n, int c);
- int cols(void) // Get number of columns
- {
- return vcols;
- }
- int cols( int n ); // Set number of columns
- bool col_selected(int n); // Is column selected
- bool get_cell_bounds( int &X, int &Y, int &W, int &H, int R, int C );
- int get_col( int x, int y ); // Get column from x,y
- int move_on_enter(void) const // How do we move when enter pressed?
- {
- return vmove_on_enter;
- }
- int move_on_enter(int v) // Set how we move on enter
- {
- return (vmove_on_enter=v);
- }
- int select_start_col(void) // Get column selection starts in
- {
- return vselect_col;
- }
- int select_start_col(int n); // Set column selection starts in
- void start_edit(void); // Start editing
- void end_edit(void); // End editing (with save)
- void cancel_edit(void); // Cancel editing (no save)
- Flv_Style_List col_style; // Column styles
- int handle(int event);
- DECLARE_CLASS_CHEAP_RTTI_2(Flv_Table, Flv_List)
- protected:
- int edit_col;
- void switch_editor( int nr, int nc );
- void draw(void);
- int internal_handle(int event);
- virtual void draw_row( int Offset, int &X, int &Y, int &W, int &H, int R );
- virtual void draw_cell( int Offset, int &X, int &Y, int &W, int &H, int R, int C );
- private:
- void check_cursor(void); // Check if resizing allowed here
- bool check_resize(void); // true if resizing
- void update_width(); // Update scroll width
- void adjust_for_cell(); // Guarantee cell is as visible as possible
- int vbuttons; // Click buttons
- int vcol; // Current column
- int vcol_width; // Default width
- int vcols; // Total # of columns
- int vmove_on_enter; // How to move when enter pressed.
- int vselect_col; // First column selected
- };
- #endif
|