~jtaylor/ubuntu/natty/pyfltk/fix-779340

« back to all changes in this revision

Viewing changes to fltk/test/table.py

  • Committer: Bazaar Package Importer
  • Author(s): Aaron M. Ucko
  • Date: 2009-03-13 20:47:00 UTC
  • Revision ID: james.westby@ubuntu.com-20090313204700-ra4hgdlhxzrccas3
Tags: upstream-1.1.3
ImportĀ upstreamĀ versionĀ 1.1.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# "$Id: table.py 310 2007-02-22 11:12:22Z andreasheld $"
 
3
#
 
4
# Fl_Table test program for pyFLTK the Python bindings
 
5
# for the Fast Light Tool Kit (FLTK).
 
6
#
 
7
# FLTK copyright 1998-1999 by Bill Spitzak and others.
 
8
# Fl_Table copyright 2003 by G. Ercolano
 
9
# pyFLTK copyright 2003 by Andreas Held and others.
 
10
#
 
11
# This library is free software you can redistribute it and/or
 
12
# modify it under the terms of the GNU Library General Public
 
13
# License as published by the Free Software Foundation either
 
14
# version 2 of the License, or (at your option) any later version.
 
15
#
 
16
# This library is distributed in the hope that it will be useful,
 
17
# but WITHOUT ANY WARRANTY without even the implied warranty of
 
18
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
19
# Library General Public License for more details.
 
20
#
 
21
# You should have received a copy of the GNU Library General Public
 
22
# License along with this library if not, write to the Free Software
 
23
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 
24
# USA.
 
25
#
 
26
# Please report all bugs and problems to "pyfltk-user@lists.sourceforge.net".
 
27
#
 
28
 
 
29
from fltk import *
 
30
import sys
 
31
 
 
32
 
 
33
def button_cb(w, data):
 
34
    print "BUTTON: %s"%w.label()
 
35
 
 
36
class WidgetTable(Fl_Table_Row):
 
37
    def __init__(self, x, y, w, h, l=""):
 
38
        Fl_Table_Row.__init__(self, x, y, w, h, l)
 
39
        self.col_header(1)
 
40
        self.col_resize(1)
 
41
        self.col_header_height(25)
 
42
        self.row_header(1)
 
43
        self.row_resize(1)
 
44
        self.row_header_width(80)
 
45
        self.end()
 
46
 
 
47
    def draw_cell(self, context, R, C, X, Y, W, H):
 
48
        s="%d/%d"%(R,C) # text for each cell
 
49
 
 
50
        if context==self.CONTEXT_STARTPAGE:
 
51
            fl_font(FL_HELVETICA, 12) # font used by all headers
 
52
            return None
 
53
        elif context==self.CONTEXT_RC_RESIZE:
 
54
            index = 0
 
55
            for r in range(self.rows()):
 
56
                for c in range(self.cols()):
 
57
                    if index >= self.children():
 
58
                        break
 
59
                    (status, X, Y, W, H) = self.find_cell(self.CONTEXT_TABLE, r, c, X, Y, W, H)
 
60
                    #(status, X, Y, W, H) = self.find_cell(self.CONTEXT_TABLE, r, c)
 
61
                    self.child(index).resize(X,Y,W,H)
 
62
                    index += 1
 
63
            self.init_sizes()
 
64
            return None
 
65
        elif context==self.CONTEXT_ROW_HEADER:
 
66
            s1="Row %d"%R
 
67
            fl_push_clip(X,Y,W,H)
 
68
            fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, self.row_header_color())
 
69
            fl_color(FL_BLACK)
 
70
            fl_draw(s1, X, Y, W, H, FL_ALIGN_CENTER)
 
71
            fl_pop_clip()
 
72
            return None
 
73
        elif context==self.CONTEXT_COL_HEADER:
 
74
            s1="Column %d"%C
 
75
            fl_push_clip(X, Y, W, H)
 
76
            fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, self.col_header_color())
 
77
            fl_color(FL_BLACK)
 
78
            fl_draw(s1, X, Y, W, H, FL_ALIGN_CENTER)
 
79
            fl_pop_clip()
 
80
            return None
 
81
        elif context==self.CONTEXT_CELL:
 
82
            return None
 
83
        else:
 
84
            return None
 
85
 
 
86
    def SetSize(self, newrows, newcols):
 
87
        self.rows(newrows)
 
88
        self.cols(newcols)
 
89
        self.begin()
 
90
        self.s_list = []
 
91
        for r in range(newrows):
 
92
            for c in range(newcols):
 
93
                X=0
 
94
                Y=0
 
95
                W=0
 
96
                H=0
 
97
                (status, X, Y, W, H)=self.find_cell(self.CONTEXT_TABLE, r, c, X, Y, W, H)
 
98
                
 
99
                if c&1:
 
100
                    s="%d.%d"%(r,c)
 
101
                    inp = Fl_Input(X,Y,W,H)
 
102
                    inp.value(s)
 
103
                else:
 
104
                    s1="%d/%d"%(r,c)
 
105
                    butt = Fl_Light_Button(X,Y,W,H,s1)
 
106
                    self.s_list.append(s1)
 
107
                    butt.align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE)
 
108
                    butt.callback(button_cb, 0)
 
109
                    if (r+2*c)&4:
 
110
                        butt.value(1)
 
111
                    else:
 
112
                        butt.value(0)
 
113
        self.end()
 
114
                    
 
115
 
 
116
 
 
117
class DemoTable(Fl_Table_Row):
 
118
    def __init__(self, x, y, w, h, l=""):
 
119
        Fl_Table_Row.__init__(self, x, y, w, h, l)
 
120
 
 
121
    def draw_cell(self, context, R, C, X, Y, W, H):
 
122
        s="%d/%d"%(R,C) # text for each cell
 
123
 
 
124
        if context==self.CONTEXT_STARTPAGE:
 
125
            fl_font(FL_HELVETICA, 16)
 
126
            return None
 
127
        elif context==self.CONTEXT_ROW_HEADER or context==self.CONTEXT_COL_HEADER:
 
128
            fl_push_clip(X,Y,W,H)
 
129
            fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, self.color())
 
130
            fl_color(FL_BLACK)
 
131
            fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER)
 
132
            fl_pop_clip()
 
133
            return None
 
134
        elif context==self.CONTEXT_CELL:
 
135
            fl_push_clip(X,Y,W,H)
 
136
            # BG color
 
137
            if self.row_selected(R):
 
138
                fl_color(self.selection_color())
 
139
            else:
 
140
                fl_color(FL_WHITE)
 
141
            fl_rectf(X, Y, W, H)
 
142
            
 
143
            # TEXT
 
144
            fl_color(FL_BLACK)
 
145
            fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER)
 
146
 
 
147
            # BORDER
 
148
            fl_color(FL_LIGHT2); 
 
149
            fl_rect(X, Y, W, H);
 
150
            fl_pop_clip()
 
151
            return None
 
152
        else:
 
153
            return None
 
154
                                   
 
155
 
 
156
 
 
157
def table_cb(o, data):
 
158
    table = data
 
159
    print "%s callback: row=%d col=%d, context=%d, event=%d, clicks=%d"%(table.label(),table.callback_row(),table.callback_col(),table.callback_context(),Fl.event(), Fl.event_clicks())
 
160
    
 
161
if __name__=='__main__':
 
162
    win1 = Fl_Window(940, 500, "widgettable")
 
163
    table = WidgetTable(20, 20, win1.w()-40, win1.h()-40, "widgettable")
 
164
    #table.SetSize(50, 50)
 
165
    table.SetSize(20, 20)
 
166
    win1.end()
 
167
    win1.resizable(table)
 
168
    win1.show()
 
169
 
 
170
    w = 900
 
171
    h = 700
 
172
    t1x = 20
 
173
    t1y = 20
 
174
    t1w = w - 40
 
175
    t1h = ( (h-60) / 2 )
 
176
    t2x = 20
 
177
    t2y = t1y+t1h+20
 
178
    t2w = w - 40
 
179
    t2h = t1h
 
180
 
 
181
    win2 = Fl_Window(w, h, "testtablerow")
 
182
    table1 = DemoTable(t1x, t1y, t1w, t1h, "Table 1")
 
183
    table1.selection_color(FL_YELLOW)
 
184
    table1.when(FL_WHEN_RELEASE)        # handle table events on release
 
185
    #table1.rows(1001)
 
186
    table1.rows(51)
 
187
    table1.cols(31)
 
188
    table1.col_header(1)                # enable col header
 
189
    table1.col_resize(4)                # enable col resizing
 
190
    table1.row_header(1)                # enable row header
 
191
    table1.row_resize(4)                # enable row resizing
 
192
    table1.callback(table_cb, table1)
 
193
    table1.when(FL_WHEN_CHANGED|FL_WHEN_RELEASE)
 
194
    table1.end()
 
195
 
 
196
    table2 = DemoTable(t2x, t2y, t2w, t2h, "Table 2")
 
197
    table2.selection_color(FL_YELLOW)
 
198
    table2.when(FL_WHEN_RELEASE)        # handle table events on release
 
199
    #table2.rows(1001)
 
200
    table2.rows(51)
 
201
    table2.cols(31)
 
202
    table2.col_header(1)                # enable col header
 
203
    table2.col_resize(4)                # enable col resizing
 
204
    table2.row_header(1)                # enable row header
 
205
    table2.row_resize(4)                # enable row resizing
 
206
    table2.end()
 
207
    win2.end()
 
208
    win2.show()
 
209
 
 
210
    Fl.run()