]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/TablePrint.py
fix text scrolling in GTK2 (patch 703988)
[wxWidgets.git] / wxPython / demo / TablePrint.py
1
2 from wxPython.wx import *
3 from wxPython.lib.printout import PrintTable
4
5 import os
6
7 #---------------------------------------------------------------------------
8
9 buttonDefs = {
10 814 : ('PreviewWide', 'Preview print of a wide table'),
11 815 : ('PreviewNarrow', 'Preview print of a narrow table with color highlights'),
12 818 : ('OnPreviewMatrix', 'Preview print of a narrow column grid without a table header'),
13 817 : ('PreviewLine', 'Preview print to demonstrate the use of line breaks'),
14 819 : ('PrintWide', 'Direct print (no preview) of a wide table'),
15 }
16
17
18 class TablePanel(wxPanel):
19 def __init__(self, parent, log, frame):
20 wxPanel.__init__(self, parent, -1)
21 self.log = log
22 self.frame = frame
23
24 box = wxBoxSizer(wxVERTICAL)
25 box.Add(20, 30)
26 keys = buttonDefs.keys()
27 keys.sort()
28 for k in keys:
29 text = buttonDefs[k][1]
30 btn = wxButton(self, k, text)
31 box.Add(btn, 0, wxALIGN_CENTER|wxALL, 15)
32 EVT_BUTTON(self, k, self.OnButton)
33
34 self.SetAutoLayout(True)
35 self.SetSizer(box)
36
37 def OnButton(self, evt):
38 funct = buttonDefs[evt.GetId()][0]
39 code = 'self.' + funct + '()'
40 eval(code)
41
42 def ReadData(self):
43 test_file = "./data/testtable.txt"
44 file = open(test_file,'r',1)
45 i = 0
46
47 data = []
48 while 1:
49 text = file.readline()
50 text = text.strip()
51 if not text:
52 break
53
54 list_val = text.split('\t')
55 data.append(list_val)
56 file.close()
57
58 self.header = data[0]
59 self.data = data[1:]
60
61 def PreviewWide(self):
62 self.ReadData()
63 prt = PrintTable(self.frame)
64 prt.data = self.data
65 prt.left_margin = 0.5
66 prt.set_column = [1.0, 1.0, 1.0, 1.5, 1.0, 3.0]
67 prt.label = self.header
68 prt.SetLandscape()
69
70 prt.SetColumnLineSize(2, 3)
71 prt.SetColumnLineColour(3, wxNamedColour('RED'))
72
73 prt.SetRowLineSize(1, 3)
74 prt.SetRowLineColour(5, wxNamedColour('RED'))
75
76 prt.SetHeader("wxWindows Applications")
77 prt.SetFooter()
78 prt.SetFooter("Date: ", type = "Date", align=wxALIGN_RIGHT, indent = -2, colour = wxNamedColour('RED'))
79 prt.Preview()
80
81 def PreviewNarrow(self):
82 self.ReadData()
83 new_data = []
84 for val in self.data:
85 new_data.append([val[0], val[1], val[2], val[4], val[5]])
86
87 val = self.header
88 new_header = [val[0], val[1], val[2], val[4], val[5]]
89
90 prt = PrintTable(self.frame)
91 prt.data = new_data
92 prt.set_column = [ 1, 1, 1, 1, 2]
93 prt.label = new_header
94 prt.SetColAlignment(1, wxALIGN_CENTRE)
95 prt.SetColBackgroundColour(0, wxNamedColour('RED'))
96 prt.SetColTextColour(0, wxNamedColour('WHITE'))
97 prt.SetCellColour(4, 0, wxNamedColour('LIGHT BLUE'))
98 prt.SetCellColour(4, 1, wxNamedColour('LIGHT BLUE'))
99 prt.SetCellColour(17, 1, wxNamedColour('LIGHT BLUE'))
100
101 prt.SetColBackgroundColour(2, wxNamedColour('LIGHT BLUE'))
102 prt.SetCellText(4, 2, wxNamedColour('RED'))
103
104 prt.SetColTextColour(3, wxNamedColour('RED'))
105 prt.label_font_colour = wxNamedColour('WHITE')
106 prt.SetHeader("wxWindows Applications", colour = wxNamedColour('RED'))
107
108 prt.SetHeader("Printed: ", type = "Date & Time", align=wxALIGN_RIGHT, indent = -2, colour = wxNamedColour('BLUE'))
109 prt.SetFooter("Page No", colour = wxNamedColour('RED'), type ="Num")
110 prt.Preview()
111
112 def OnPreviewMatrix(self):
113 total_col = 45
114 total_row = 10
115 hsize = 0.2
116 vsize = 0.2
117
118 data = []
119 startx = 1.0
120 columns = []
121 for val in range(total_col):
122 columns.append(hsize)
123
124 prt = PrintTable(self.frame)
125
126 for row in range(total_row):
127 value = []
128 for col in range(total_col):
129 value.append(str(col))
130 data.append(value)
131
132 for col in range(total_col):
133 prt.SetColAlignment(col, wxALIGN_CENTRE)
134
135 prt.SetLandscape()
136 prt.text_font_size = 8
137 prt.cell_left_margin = 0
138
139 prt.data = data
140 prt.set_column = columns
141 prt.SetHeader("Test of Small Grid Size")
142 prt.Preview()
143
144 def PreviewLine(self):
145 prt = PrintTable(self.frame)
146 prt.label = ["Header 1", "Header 2", "Header 3"]
147 prt.set_column = []
148 prt.data = [["Row 1", "1", "2"], ["Row 2", "3", "4\nNew Line to see if it also can wrap around the cell region properly\nAnother new line"]]
149 prt.SetFooter()
150 prt.Preview()
151
152 def PrintWide(self):
153 self.ReadData()
154 prt = PrintTable(self.frame)
155 prt.data = self.data
156
157 prt.left_margin = 0.5
158 prt.set_columns = [ 1, 1, 1, 1, 2, 1, 3 ]
159 prt.label = self.header
160 prt.SetLandscape()
161 prt.Print()
162
163
164 #---------------------------------------------------------------------------
165
166 def runTest(frame, nb, log):
167 win = TablePanel(nb, log, frame)
168 return win
169
170 #---------------------------------------------------------------------------
171
172
173
174
175
176 import os
177 import wxPython.lib.printout
178
179
180
181
182 overview = """\
183 <html><body>
184 <h2>Table Printing</h2>
185
186 This demo shows various ways of using the <b><i>new
187 </i></b> PrintOut class. To understand the class you need to examine the demo examples
188 and the library <a href="%s">printout.py</a> module classes.
189 <p>
190 The initial class primarily contains a Table preview/printing class. There is alot of flexibility
191 in manipulating the placement, sizing, colours, alignment of the table text and cell background colors.
192 There are also a number of options for printing Header and Footer information on the page.
193 <p>
194 There is also a class to extract the parameters from a wxGrid and easily recreate a Table printout.
195 <p>
196 The data is printed from a list object containing the column and row values. The label or table header
197 can be defined and will be repeated for all pages.
198 <p>
199 The correct "Total Page" does get calculated and used in the print out Footer.
200 <p>
201 There is still problems with the print framework to properly get the total pages in the preview unless
202 the program knows it before trying to parse through the available pages. This will be fixed
203 when the framework allows for it.
204
205
206 """ % os.path.join(os.path.dirname(wxPython.lib.printout.__file__), "printout.py")
207
208
209
210
211
212 if __name__ == '__main__':
213 import sys,os
214 import run
215 run.main(['', os.path.basename(sys.argv[0])])
216