First checkin, AXE release 0.2
[AXE.git] / src / table.h
1 /**************************************************************************
2 **  (c) Copyright 1999, Andromeda Technology & Automation
3 ***************************************************************************
4 ** MODULE INFORMATION *
5 ***********************
6 **      FILE NAME      : table.h
7 **      SYSTEM NAME    : AXE - Andromeda X-windows Encapsulation
8 **      VERSION NUMBER : $Revision: 1.1 $
9 **
10 **  DESCRIPTION      : Definition of table_view class 
11 **
12 **  EXPORTED OBJECTS : class table_view
13 **  LOCAL    OBJECTS : 
14 **  MODULES  USED    :
15 ***************************************************************************
16 **  ADMINISTRATIVE INFORMATION *
17 ********************************
18 **      ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
19 **      CREATION DATE   : Aug 26, 1999
20 **      LAST UPDATE     : Aug 26, 1999
21 **      MODIFICATIONS   : 
22 **************************************************************************/
23
24 /*****************************
25    $Log: table.h,v $
26    Revision 1.1  2002-07-25 08:01:27  arjen
27    First checkin, AXE release 0.2
28
29 *****************************/
30
31 /* static const char *RCSID = "$Id: table.h,v 1.1 2002-07-25 08:01:27 arjen Exp $"; */
32
33 #include "String.h"
34 #include "scroll.h"
35
36 /*
37 ///////////////////////////////////////////////////////////////////////////
38 //  NAME           : table_view
39 //  BASECLASS      : window
40 //  MEMBERS        : 
41 //  OPERATORS      :
42 //  METHODS        :
43 //
44 //  DESCRIPTION    :
45 //
46 //  RELATIONS      :
47 //  SEE ALSO       :
48 //  LAST MODIFIED  : Aug 26, 1999
49 ///////////////////////////////////////////////////////////////////////////
50 */
51
52 class table_view : public window
53 {
54
55    struct header
56    {
57       String         title;
58       hor_alignment  alignment;
59       int            width;
60    };
61
62    header   *Head;
63    String   **Cells;
64
65    int nr_rows, nr_columns;
66
67    int selected_row;
68
69    scrollbar  *Vscroll;
70    font       header_font, cell_font;
71    gc         g;
72
73 public:
74
75    table_view(window &parent, int rows, int columns)
76        : window(parent)
77    {
78       int i;
79
80       Vscroll = new scrollbar(*this, 120, 260, 16);
81
82       Head  = new header[columns];
83       Cells = new String * [rows];
84       for (i = 0; i < rows; i++)
85       {
86          Cells[i] = new String[columns];
87       }
88
89       for (i = 0; i < columns; i++)
90       {
91          Head[i].alignment = Left;
92          Head[i].width     = 80;
93       }
94       nr_rows     = rows;
95       nr_columns  = columns;
96       selected_row = -1;
97
98       g.Create();
99       g.SetForeground(Black);
100       g.SetBackground(stddpy.White());
101       header_font.Load("6x13bold");
102       cell_font.Load("6x13");
103       SelectInput(ExposureMask | ButtonPressMask, 1);
104    }
105
106    ~table_view()
107    {
108       delete Vscroll;
109       delete [] Head;
110       for (int i = 0; i < nr_rows; i++)
111       {
112          delete [] Cells[i];
113       }
114       delete [] Cells;
115    }
116
117    void recreate(int rows)
118    {
119       int    i;
120
121       for (i = 0; i < nr_rows; i++)
122       {
123          delete [] Cells[i];
124       }
125       delete [] Cells;
126
127       nr_rows = rows;
128       Cells = new String * [nr_rows];
129       for (i = 0; i < nr_rows; i++)
130       {
131          Cells[i] = new String[nr_columns];
132       }
133       selected_row = -1;
134       Vscroll->move_slider(-*Vscroll);
135       Clear();
136       redraw();
137    }
138
139    //  Provide access to the cells of the table
140
141    String & head(int col)
142    {
143       return Head[col].title;
144    }
145
146    String & cell(int row, int col)
147    {
148       return Cells[row][col];
149    }
150
151    int selected(void)
152    {
153       return selected_row;
154    }
155
156    void top_row(int row_nr)
157    {
158       Vscroll->move_slider(row_nr - *Vscroll);
159    }
160
161    int top_row()
162    {
163       return int(*Vscroll);
164    }
165
166    //  Functions for layout control
167
168    void align(int col, hor_alignment al)
169    {
170       Head[col].alignment = al;
171    }
172
173    int & width(int col)
174    {
175       return Head[col].width;
176    }
177
178    virtual void redraw();
179
180    virtual int EV_Expose(XExposeEvent ev)
181    {
182       redraw();
183       return 1;
184    }
185
186    virtual int EV_ButtonPress(XButtonEvent);
187
188    virtual void ChildMessage(win_message &msg);
189 };
190