]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/demo/wxCalendar.py
1. added GetStdIcon support to wxRenderer
[wxWidgets.git] / wxPython / demo / wxCalendar.py
... / ...
CommitLineData
1#----------------------------------------------------------------------------
2# Name: wxCalendar.py
3# Purpose: Calendar control display testing on panel for wxPython demo
4#
5# Author: Lorne White (email: lwhite1@planet.eon.net)
6#
7# Version 0.9
8# Date: Feb 26, 2001
9# Licence: wxWindows license
10#----------------------------------------------------------------------------
11
12from wxPython.wx import *
13from wxPython.lib.calendar import wxCalendar, Month, PrtCalDraw, CalenDlg
14
15import images
16import os
17
18
19# highlighted days in month
20
21test_days ={ 0: [],
22 1: [3, 7, 9, 21],
23 2: [2, 10, 4, 9],
24 3: [4, 20, 29],
25 4: [1, 12, 22],
26 5: [2, 10, 15],
27 6: [4, 8, 17],
28 7: [6, 7, 8],
29 8: [5, 10, 20],
30 9: [1, 2, 5, 29],
31 10: [2, 4, 6, 22],
32 11: [6, 9, 12, 28, 29],
33 12: [8, 9, 10, 11, 20] }
34
35# test of full window calendar control functions
36
37def GetMonthList():
38 monthlist = []
39 for i in range(13):
40 name = Month[i]
41 if name != None:
42 monthlist.append(name)
43 return monthlist
44
45class TestPanel(wxPanel):
46 def __init__(self, parent, log, frame):
47 wxPanel.__init__(self, parent, -1)
48
49 self.log = log
50 self.frame = frame
51
52 self.calend = wxCalendar(self, -1, wxPoint(100, 50), wxSize(200, 180))
53
54# start_month = 2 # preselect the date for calendar
55# start_year = 2001
56
57 start_month = self.calend.GetMonth() # get the current month & year
58 start_year = self.calend.GetYear()
59
60# month list from DateTime module
61
62 monthlist = GetMonthList()
63
64 mID = NewId()
65 self.date = wxComboBox(self, mID, Month[start_month], wxPoint(100, 20), wxSize(90, -1), monthlist, wxCB_DROPDOWN)
66 EVT_COMBOBOX(self, mID, self.EvtComboBox)
67
68# set start month and year
69
70 self.calend.SetMonth(start_month)
71 self.calend.SetYear(start_year)
72
73# set attributes of calendar
74
75 self.calend.hide_title = TRUE
76 self.calend.HideGrid()
77 self.calend.SetWeekColor('WHITE', 'BLACK')
78
79# display routine
80
81 self.ResetDisplay()
82
83# mouse click event
84
85 self.Connect(self.calend.GetId(), -1, 2100, self.MouseClick)
86
87# scroll bar for month selection
88
89 mID = NewId()
90 self.scroll = wxScrollBar(self, mID, wxPoint(100, 240), wxSize(200, 20), wxSB_HORIZONTAL)
91 self.scroll.SetScrollbar(start_month-1, 1, 12, 1, TRUE)
92 EVT_COMMAND_SCROLL(self, mID, self.Scroll)
93
94# spin control for year selection
95
96 self.dtext = wxTextCtrl(self, -1, str(start_year), wxPoint(200, 20), wxSize(60, -1))
97 h = self.dtext.GetSize().height
98
99 mID = NewId()
100 self.spin = wxSpinButton(self, mID, wxPoint(270, 20), wxSize(h*2, h))
101 self.spin.SetRange(1980, 2010)
102 self.spin.SetValue(start_year)
103 EVT_SPIN(self, mID, self.OnSpin)
104
105# button for calendar dialog test
106
107 wxStaticText(self, -1, "Test Calendar Dialog", wxPoint(350, 50), wxSize(150, -1))
108
109 mID = NewId()
110 bmp = images.getCalendarBitmap()
111 self.but = wxBitmapButton(self, mID, bmp, wxPoint(380, 80))#, wxSize(30, 30))
112 EVT_BUTTON(self, mID, self.TestDlg)
113
114# button for calendar window test
115
116 wxStaticText(self, -1, "Test Calendar Window", wxPoint(350, 150), wxSize(150, -1))
117
118 mID = NewId()
119 self.but = wxBitmapButton(self, mID, bmp, wxPoint(380, 180))#, wxSize(30, 30))
120 EVT_BUTTON(self, mID, self.TestFrame)
121
122 wxStaticText(self, -1, "Test Calendar Print", wxPoint(350, 250), wxSize(150, -1))
123
124 mID = NewId()
125 self.but = wxBitmapButton(self, mID, bmp, wxPoint(380, 280))#, wxSize(30, 30))
126 EVT_BUTTON(self, mID, self.OnPreview)
127
128# calendar dialog
129
130 def TestDlg(self, event): # test the date dialog
131 dlg = CalenDlg(self)
132 dlg.Centre()
133 if dlg.ShowModal() == wxID_OK:
134 result = dlg.result
135 day = result[1]
136 month = result[2]
137 year = result[3]
138 new_date = str(month) + '/'+ str(day) + '/'+ str(year)
139 self.log.WriteText('Date Selected: %s\n' % new_date)
140 else:
141 self.log.WriteText('No Date Selected')
142
143# calendar window test
144
145 def TestFrame(self, event):
146 frame = CalendFrame(self, -1, "Test Calendar", self.log)
147 frame.Show(true)
148 return true
149
150# calendar print preview
151
152 def OnPreview(self, event):
153 month = self.calend.GetMonth()
154 year = self.calend.GetYear()
155
156 prt = PrintCalend(self.frame, month, year)
157 prt.Preview()
158
159# month and year control events
160
161 def OnSpin(self, event):
162 year = event.GetPosition()
163 self.dtext.SetValue(str(year))
164 self.calend.SetYear(year)
165 self.calend.Refresh()
166
167 def EvtComboBox(self, event):
168 name = event.GetString()
169 self.log.WriteText('EvtComboBox: %s\n' % name)
170 monthval = self.date.FindString(name)
171 self.scroll.SetScrollbar(monthval, 1, 12, 1, TRUE)
172
173 self.calend.SetMonth(monthval+1)
174 self.ResetDisplay()
175
176 def Scroll(self, event):
177 value = self.scroll.GetThumbPosition()
178 monthval = int(value)+1
179 self.calend.SetMonth(monthval)
180 self.ResetDisplay()
181 self.log.WriteText('Month: %s\n' % value)
182
183 name = Month[monthval]
184 self.date.SetValue(name)
185
186# log mouse events
187
188 def MouseClick(self, evt):
189 text = '%s CLICK %02d/%02d/%d' % (evt.click, evt.day, evt.month, evt.year) # format date
190 self.log.WriteText('Date Selected: ' + text + '\n')
191
192
193# set the highlighted days for the calendar
194
195 def ResetDisplay(self):
196 month = self.calend.GetMonth()
197 try:
198 set_days = test_days[month]
199 except:
200 set_days = [1, 5, 12]
201
202 self.calend.AddSelect([4, 11], 'BLUE', 'WHITE')
203 self.calend.SetSelDay(set_days)
204 self.calend.Refresh()
205
206# increment and decrement toolbar controls
207
208 def OnIncYear(self, event):
209 self.calend.IncYear()
210 self.ResetDisplay()
211
212 def OnDecYear(self, event):
213 self.calend.DecYear()
214 self.ResetDisplay()
215
216 def OnIncMonth(self, event):
217 self.calend.IncMonth()
218 self.ResetDisplay()
219
220 def OnDecMonth(self, event):
221 self.calend.DecMonth()
222 self.ResetDisplay()
223
224 def OnCurrent(self, event):
225 self.calend.SetCurrentDay()
226 self.ResetDisplay()
227
228# test of full window calendar control functions
229
230class CalendFrame(wxFrame):
231 def __init__(self, parent, id, title, log):
232 wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition, wxSize(400, 400))
233 EVT_CLOSE(self, self.OnCloseWindow)
234
235 self.log = log
236 self.CreateStatusBar()
237 self.mainmenu = wxMenuBar()
238 menu = wxMenu()
239
240 menu = self.MakeFileMenu()
241 self.mainmenu.Append(menu, '&File')
242
243 self.MakeToolMenu() # toolbar
244
245 self.SetMenuBar(self.mainmenu)
246 self.calend = wxCalendar(self, -1)
247 self.calend.SetCurrentDay()
248 self.calend.grid_color = 'BLUE'
249 self.calend.SetBusType()
250# self.calend.ShowWeekEnd()
251
252 self.ResetDisplay()
253
254 self.Connect(self.calend.GetId(), -1, 2100, self.MouseClick)
255
256 def MouseClick(self, evt):
257 text = '%s CLICK %02d/%02d/%d' % (evt.click, evt.day, evt.month, evt.year) # format date
258 self.log.WriteText('Date Selected: ' + text + '\n')
259
260 def OnCloseWindow(self, event):
261 self.Destroy()
262
263 def ResetDisplay(self):
264 month = self.calend.GetMonth()
265 try:
266 set_days = test_days[month]
267 except:
268 set_days = [1, 5, 12]
269
270 self.calend.AddSelect([2, 16], 'GREEN', 'WHITE')
271
272 self.calend.SetSelDay(set_days)
273 self.calend.Refresh()
274
275 def OnIncYear(self, event):
276 self.calend.IncYear()
277 self.ResetDisplay()
278
279 def OnDecYear(self, event):
280 self.calend.DecYear()
281 self.ResetDisplay()
282
283 def OnIncMonth(self, event):
284 self.calend.IncMonth()
285 self.ResetDisplay()
286
287 def OnDecMonth(self, event):
288 self.calend.DecMonth()
289 self.ResetDisplay()
290
291 def OnCurrent(self, event):
292 self.calend.SetCurrentDay()
293 self.ResetDisplay()
294
295 def MakeFileMenu(self):
296 menu = wxMenu()
297
298 mID = NewId()
299 menu.Append(mID, 'Decrement', 'Next')
300 EVT_MENU(self, mID, self.OnDecMonth)
301
302 mID = NewId()
303 menu.Append(mID, 'Increment', 'Dec')
304 EVT_MENU(self, mID, self.OnIncMonth)
305
306 menu.AppendSeparator()
307
308 mID = NewId()
309 menu.Append(mID, 'E&xit', 'Exit')
310 EVT_MENU(self, mID, self.OnCloseWindow)
311
312 return menu
313
314 def MakeToolMenu(self):
315 tb = self.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER)
316
317 mID = NewId()
318 SetToolPath(self, tb, mID, images.getDbDecBitmap(), 'Dec Year')
319 EVT_TOOL(self, mID, self.OnDecYear)
320
321 mID = NewId()
322 SetToolPath(self, tb, mID, images.getDecBitmap(), 'Dec Month')
323 EVT_TOOL(self, mID, self.OnDecMonth)
324
325 mID = NewId()
326 SetToolPath(self, tb, mID, images.getPtBitmap(), 'Current Month')
327 EVT_TOOL(self, mID, self.OnCurrent)
328
329 mID = NewId()
330 SetToolPath(self, tb, mID, images.getIncBitmap(), 'Inc Month')
331 EVT_TOOL(self, mID, self.OnIncMonth)
332
333 mID = NewId()
334 SetToolPath(self, tb, mID, images.getDbIncBitmap(), 'Inc Year')
335 EVT_TOOL(self, mID, self.OnIncYear)
336
337 tb.Realize()
338
339#---------------------------------------------------------------------------
340
341# example class for printing/previewing calendars
342
343class PrintCalend:
344 def __init__(self, parent, month, year):
345 self.frame = parent
346 self.month = month
347 self.year = year
348
349 self.SetParms()
350 self.SetCal()
351 self.printData = wxPrintData()
352
353 def SetCal(self):
354 self.grid_color = 'BLUE'
355 self.back_color = 'WHITE'
356 self.sel_color = 'RED'
357 self.high_color = 'LIGHT BLUE'
358 self.font = wxSWISS
359 self.bold = wxNORMAL
360
361 self.sel_key = None # last used by
362 self.sel_lst = [] # highlighted selected days
363
364 self.size = None
365 self.hide_title = FALSE
366 self.hide_grid = FALSE
367 self.set_day = None
368
369 def SetParms(self):
370 self.ymax = 1
371 self.xmax = 1
372 self.page = 1
373 self.total_pg = 1
374
375 self.preview = None
376 self.scale = 1.0
377
378 self.pagew = 8.5
379 self.pageh = 11.0
380
381 self.txt_marg = 0.1
382 self.lf_marg = 0
383 self.top_marg = 0
384
385 self.page = 0
386
387 def SetDates(self, month, year):
388 self.month = month
389 self.year = year
390
391 def SetStyleDef(self, desc):
392 self.style = desc
393
394 def SetCopies(self, copies): # number of copies of label
395 self.copies = copies
396
397 def SetStart(self, start): # start position of label
398 self.start = start
399
400 def Preview(self):
401 printout = SetPrintout(self)
402 printout2 = SetPrintout(self)
403 self.preview = wxPrintPreview(printout, printout2, self.printData)
404 if not self.preview.Ok():
405 wxMessageBox("There was a problem printing!", "Printing", wxOK)
406 return
407
408 self.preview.SetZoom(60) # initial zoom value
409
410 frame = wxPreviewFrame(self.preview, self.frame, "Print preview")
411
412 frame.Initialize()
413 frame.SetPosition(self.frame.GetPosition())
414 frame.SetSize(self.frame.GetSize())
415 frame.Show(true)
416
417 def Print(self):
418 pdd = wxPrintDialogData()
419 pdd.SetPrintData(self.printData)
420 printer = wxPrinter(pdd)
421 printout = SetPrintout(self)
422 frame = wxFrame(None, -1, "Test")
423 if not printer.Print(frame, printout):
424 wxMessageBox("There was a problem printing.\nPerhaps your current printer is not set correctly?", "Printing", wxOK)
425 else:
426 self.printData = printer.GetPrintDialogData().GetPrintData()
427 printout.Destroy()
428
429 def DoDrawing(self, DC):
430 size = DC.GetSizeTuple()
431 DC.BeginDrawing()
432
433 cal = PrtCalDraw(self)
434
435 if self.preview is None:
436 cal.SetPSize(size[0]/self.pagew, size[1]/self.pageh)
437 cal.SetPreview(FALSE)
438
439 else:
440 if self.preview == 1:
441 cal.SetPSize(size[0]/self.pagew, size[1]/self.pageh)
442 else:
443 cal.SetPSize(self.pwidth, self.pheight)
444
445 cal.SetPreview(self.preview)
446
447 cal.hide_title = self.hide_title # set the calendar parameters
448 cal.hide_grid = self.hide_grid
449
450 cal.grid_color = self.grid_color
451 cal.high_color = self.high_color
452 cal.back_color = self.back_color
453 cal.outer_border = FALSE
454 cal.font = self.font
455 cal.bold = self.bold
456
457 cal_size = wxSize(3.0, 3.0)
458 cal.SetSize(cal_size)
459
460 year, month = self.year, self.month
461
462 x = 1.0
463 for i in range(2):
464 y = 0.5
465 for j in range(3):
466 cal.SetCal(year, month) # current month
467 cal.SetPos(x, y)
468
469 try:
470 set_days = test_days[month]
471 except:
472 set_days = [1, 5, 12]
473
474 cal.AddSelect([2, 16], 'GREEN', 'WHITE')
475
476 cal.DrawCal(DC, set_days)
477
478 year, month = self.IncMonth(year, month)
479 y = y + 3.5
480 x = x + 4.0 # next colum
481
482 DC.EndDrawing()
483
484 self.ymax = DC.MaxY()
485 self.xmax = DC.MaxX()
486
487 def IncMonth(self, year, month): # next month
488 month = month + 1
489 if month > 12:
490 month = 1
491 year = year + 1
492
493 return year, month
494
495 def GetTotalPages(self):
496 self.pg_cnt = 1
497 return self.pg_cnt
498
499 def SetPage(self, page):
500 self.page = page
501
502 def SetPageSize(self, width, height):
503 self.pwidth, self.pheight = width, height
504
505 def SetTotalSize(self, width, height):
506 self.ptwidth, self.ptheight = width, height
507
508 def SetPreview(self, preview, scale):
509 self.preview = preview
510 self.scale = scale
511
512 def SetTotalSize(self, width, height):
513 self.ptwidth = width
514 self.ptheight = height
515
516def SetToolPath(self, tb, id, bmp, title):
517 tb.AddSimpleTool(id, bmp, title, title)
518
519class SetPrintout(wxPrintout):
520 def __init__(self, canvas):
521 wxPrintout.__init__(self)
522 self.canvas = canvas
523 self.end_pg = 1
524
525 def OnBeginDocument(self, start, end):
526 return self.base_OnBeginDocument(start, end)
527
528 def OnEndDocument(self):
529 self.base_OnEndDocument()
530
531 def HasPage(self, page):
532 if page <= self.end_pg:
533 return true
534 else:
535 return false
536
537 def GetPageInfo(self):
538 self.end_pg = self.canvas.GetTotalPages()
539 str_pg = 1
540 try:
541 end_pg = self.end_pg
542 except:
543 end_pg = 1
544 return (str_pg, end_pg, str_pg, end_pg)
545
546 def OnPreparePrinting(self):
547 self.base_OnPreparePrinting()
548
549 def OnBeginPrinting(self):
550 dc = self.GetDC()
551
552 self.preview = self.IsPreview()
553 if (self.preview):
554 self.pixelsPerInch = self.GetPPIScreen()
555 else:
556 self.pixelsPerInch = self.GetPPIPrinter()
557
558 (w, h) = dc.GetSizeTuple()
559 scaleX = float(w) / 1000
560 scaleY = float(h) / 1000
561 self.printUserScale = min(scaleX, scaleY)
562
563 self.base_OnBeginPrinting()
564
565 def GetSize(self):
566 self.psizew, self.psizeh = self.GetPPIPrinter()
567 return self.psizew, self.psizeh
568
569 def GetTotalSize(self):
570 self.ptsizew, self.ptsizeh = self.GetPageSizePixels()
571 return self.ptsizew, self.ptsizeh
572
573 def OnPrintPage(self, page):
574 dc = self.GetDC()
575 (w, h) = dc.GetSizeTuple()
576 scaleX = float(w) / 1000
577 scaleY = float(h) / 1000
578 self.printUserScale = min(scaleX, scaleY)
579 dc.SetUserScale(self.printUserScale, self.printUserScale)
580
581 self.preview = self.IsPreview()
582
583 self.canvas.SetPreview(self.preview, self.printUserScale)
584 self.canvas.SetPage(page)
585
586 self.ptsizew, self.ptsizeh = self.GetPageSizePixels()
587 self.canvas.SetTotalSize(self.ptsizew, self.ptsizeh)
588
589 self.psizew, self.psizeh = self.GetPPIPrinter()
590 self.canvas.SetPageSize(self.psizew, self.psizeh)
591
592 self.canvas.DoDrawing(dc)
593 return true
594
595class MyApp(wxApp):
596 def OnInit(self):
597 frame = CalendFrame(None, -1, "Test Calendar")
598 frame.Show(true)
599 self.SetTopWindow(frame)
600 return true
601
602#---------------------------------------------------------------------------
603
604def MessageDlg(self, message, type = 'Message'):
605 dlg = wxMessageDialog(self, message, type, wxOK | wxICON_INFORMATION)
606 dlg.ShowModal()
607 dlg.Destroy()
608
609#---------------------------------------------------------------------------
610
611def main():
612 app = MyApp(0)
613 app.MainLoop()
614
615
616if __name__ == '__main__':
617 main()
618
619
620#---------------------------------------------------------------------------
621
622def runTest(frame, nb, log):
623 win = TestPanel(nb, log, frame)
624 return win
625
626#---------------------------------------------------------------------------
627
628
629overview = """\
630This control provides a calendar control class for displaying and selecting dates. In addition, the class is extended and can now be used for printing/previewing.
631
632Additional features include weekend highlighting and business type Monday-Sunday format.
633
634See example for various methods used to set display month, year, and highlighted dates (different font and background colours).
635
636by Lorne White
637
638"""