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