git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			223 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
 | |
| import  os
 | |
| import  wx
 | |
| import  wx.lib.printout as  printout
 | |
| 
 | |
| #---------------------------------------------------------------------------
 | |
| 
 | |
| buttonDefs = {
 | |
|     814 : ('PreviewWide',      'Preview print of a wide table'),
 | |
|     815 : ('PreviewNarrow',   'Preview print of a narrow table with color highlights'),
 | |
|     816 : ('PreviewText',    'Preview print of a text file'),
 | |
|     818 : ('OnPreviewMatrix',   'Preview print of a narrow column grid without a table header'),
 | |
|     817 : ('PreviewLine',   'Preview print to demonstrate the use of line breaks'),
 | |
|     819 : ('PrintWide', 'Direct print (no preview) of a wide table'),
 | |
|     }
 | |
| 
 | |
| 
 | |
| class TablePanel(wx.Panel):
 | |
|     def __init__(self, parent, log, frame):
 | |
|         wx.Panel.__init__(self, parent, -1)
 | |
|         self.log = log
 | |
|         self.frame = frame
 | |
| 
 | |
|         box = wx.BoxSizer(wx.VERTICAL)
 | |
|         box.Add((20, 30))
 | |
|         keys = buttonDefs.keys()
 | |
|         keys.sort()
 | |
| 
 | |
|         for k in keys:
 | |
|             text = buttonDefs[k][1]
 | |
|             btn = wx.Button(self, k, text)
 | |
|             box.Add(btn, 0, wx.ALIGN_CENTER|wx.ALL, 15)
 | |
|             self.Bind(wx.EVT_BUTTON, self.OnButton, btn)
 | |
| 
 | |
|         self.SetAutoLayout(True)
 | |
|         self.SetSizer(box)
 | |
| 
 | |
|     def OnButton(self, evt):
 | |
|         funct = buttonDefs[evt.GetId()][0]
 | |
|         code = 'self.' + funct + '()'
 | |
|         eval(code)
 | |
| 
 | |
|     def ReadData(self):
 | |
|         test_file = "./data/testtable.txt"
 | |
|         file = open(test_file,'r',1)
 | |
|         i = 0
 | |
| 
 | |
|         data = []
 | |
|         while 1:
 | |
|             text = file.readline()
 | |
|             text = text.strip()
 | |
|             if not text:
 | |
|                 break
 | |
| 
 | |
|             list_val = text.split('\t')
 | |
|             data.append(list_val)
 | |
|         file.close()
 | |
| 
 | |
|         self.header = data[0]
 | |
|         self.data = data[1:]
 | |
| 
 | |
|     def PreviewWide(self):
 | |
|         self.ReadData()
 | |
|         prt = printout.PrintTable(self.frame)
 | |
|         prt.data = self.data
 | |
|         prt.left_margin = 0.5
 | |
|         prt.set_column = [1.0, 1.0, 1.0, 1.5, 1.0, 3.0]
 | |
|         prt.label = self.header
 | |
|         prt.SetLandscape()
 | |
| 
 | |
|         prt.SetColumnLineSize(2, 3)
 | |
|         prt.SetColumnLineColour(3, wx.NamedColour('RED'))
 | |
| 
 | |
|         prt.SetRowLineSize(1, 3)
 | |
|         prt.SetRowLineColour(5, wx.NamedColour('RED'))
 | |
| 
 | |
|         prt.SetHeader("wx.Windows Applications")
 | |
|         prt.SetFooter()
 | |
|         prt.SetFooter("Date: ", type = "Date", align=wx.ALIGN_RIGHT, indent = -1, colour = wx.NamedColour('RED'))
 | |
|         prt.Preview()
 | |
| 
 | |
|     def PreviewNarrow(self):
 | |
|         self.ReadData()
 | |
|         new_data = []
 | |
|         for val in self.data:
 | |
|             new_data.append([val[0], val[1], val[2], val[4], val[5]])
 | |
| 
 | |
|         val = self.header
 | |
|         new_header = [val[0], val[1], val[2], val[4], val[5]]
 | |
| 
 | |
|         prt = printout.PrintTable(self.frame)
 | |
|         prt.data = new_data
 | |
|         prt.set_column = [ 1, 1, 1, 1, 2]
 | |
|         prt.label = new_header
 | |
|         prt.SetColAlignment(1, wx.ALIGN_CENTRE)
 | |
|         prt.SetColBackgroundColour(0, wx.NamedColour('RED'))
 | |
|         prt.SetColTextColour(0, wx.NamedColour('WHITE'))
 | |
|         prt.SetCellColour(4, 0, wx.NamedColour('LIGHT BLUE'))
 | |
|         prt.SetCellColour(4, 1, wx.NamedColour('LIGHT BLUE'))
 | |
|         prt.SetCellColour(17, 1, wx.NamedColour('LIGHT BLUE'))
 | |
| 
 | |
|         prt.SetColBackgroundColour(2, wx.NamedColour('LIGHT BLUE'))
 | |
|         prt.SetCellText(4, 2, wx.NamedColour('RED'))
 | |
| 
 | |
|         prt.SetColTextColour(3, wx.NamedColour('RED'))
 | |
|         prt.label_font_colour = wx.NamedColour('WHITE')
 | |
|         prt.SetHeader("wxWindows Applications", colour = wx.NamedColour('RED'))
 | |
| 
 | |
|         prt.SetHeader("Printed: ", type = "Date & Time", align=wx.ALIGN_RIGHT, indent = -1, colour = wx.NamedColour('BLUE'))
 | |
|         prt.SetFooter("Page No", colour = wx.NamedColour('RED'), type ="Num")
 | |
|         prt.Preview()
 | |
| 
 | |
|     def OnPreviewMatrix(self):
 | |
|         total_col = 45
 | |
|         total_row = 10
 | |
|         hsize = 0.2
 | |
|         vsize = 0.2
 | |
| 
 | |
|         data = []
 | |
|         startx = 1.0
 | |
|         columns = []
 | |
|         for val in range(total_col):
 | |
|             columns.append(hsize)
 | |
| 
 | |
|         prt = printout.PrintTable(self.frame)
 | |
| 
 | |
|         for row in range(total_row):
 | |
|             value = []
 | |
|             for col in range(total_col):
 | |
|                 value.append(str(col))
 | |
|             data.append(value)
 | |
| 
 | |
|         for col in range(total_col):
 | |
|             prt.SetColAlignment(col, wx.ALIGN_CENTRE)
 | |
| 
 | |
|         prt.SetLandscape()
 | |
|         prt.text_font_size = 8
 | |
|         prt.cell_left_margin = 0
 | |
| 
 | |
|         prt.data = data
 | |
|         prt.set_column = columns
 | |
|         prt.SetHeader("Test of Small Grid Size")
 | |
|         prt.Preview()
 | |
| 
 | |
|     def PreviewLine(self):
 | |
|         prt = printout.PrintTable(self.frame)
 | |
|         prt.label = ["Header 1", "Header 2", "Header 3"]
 | |
|         prt.set_column = []
 | |
|         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"]]
 | |
|         prt.SetFooter()
 | |
|         prt.Preview()
 | |
| 
 | |
|     def PreviewText(self):
 | |
|         prt = printout.PrintTable(self.frame)
 | |
|         prt.SetHeader("PROCLAMATION")
 | |
|         file = open('data/proclamation.txt')
 | |
|         data = []
 | |
|         for txt in file:
 | |
|             data.append(txt.strip())
 | |
|         file.close()
 | |
|         prt.data = data
 | |
|         prt.Preview()
 | |
| 
 | |
|     def PrintWide(self):
 | |
|         self.ReadData()
 | |
|         prt = printout.PrintTable(self.frame)
 | |
|         prt.data = self.data
 | |
| 
 | |
|         prt.left_margin = 0.5
 | |
|         prt.set_columns = [ 1, 1, 1, 1, 2, 1, 3 ]
 | |
|         prt.label = self.header
 | |
|         prt.SetLandscape()
 | |
|         prt.Print()
 | |
| 
 | |
| 
 | |
| #---------------------------------------------------------------------------
 | |
| 
 | |
| def runTest(frame, nb, log):
 | |
|     win = TablePanel(nb, log, frame)
 | |
|     return win
 | |
| 
 | |
| #---------------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| overview = """\
 | |
| <html><body>
 | |
| <h2>Table Printing</h2>
 | |
| 
 | |
| This demo shows various ways of using the <b><i>new
 | |
| </i></b> PrintOut class.  To understand the class you need to examine the demo examples
 | |
| and the library <a href="%s">printout.py</a> module classes.
 | |
| <p>
 | |
| The initial class primarily contains a Table preview/printing class.  There is a lot of flexibility
 | |
| in manipulating the placement, sizing, colours, alignment of the table text and cell background colors.
 | |
| There are also a number of options for printing Header and Footer information on the page.
 | |
| <p>
 | |
| There is also a class to extract the parameters from a wxGrid and easily recreate a Table printout.
 | |
| <p>
 | |
| The data is printed from a list object containing the column and row values.  The label or table header
 | |
| can be defined and will be repeated for all pages.
 | |
| <p>
 | |
| The correct "Total Page" does get calculated and used in the print out Footer.
 | |
| <p>
 | |
| There is still problems with the print framework to properly get the total pages in the preview unless
 | |
| the program knows it before trying to parse through the available pages.  This will be fixed
 | |
| when the framework allows for it.
 | |
| 
 | |
| 
 | |
| """ % os.path.join(os.path.dirname(printout.__file__), "printout.py")
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     import sys,os
 | |
|     import run
 | |
|     run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
 | |
| 
 |