]> git.saurik.com Git - wxWidgets.git/blame - wxPython/wx/lib/analogclock.py
Add wxRTTI info and set bestSize
[wxWidgets.git] / wxPython / wx / lib / analogclock.py
Content-type: text/html ]> git.saurik.com Git - wxWidgets.git/blame - wxPython/wx/lib/analogclock.py


500 - Internal Server Error

Malformed UTF-8 character (fatal) at /usr/lib/x86_64-linux-gnu/perl5/5.40/HTML/Entities.pm line 485, <$fd> line 389.
CommitLineData
f04ad14a 1# -*- coding: iso-8859-1 -*-
d14a1e28 2#----------------------------------------------------------------------
f04ad14a 3# Name: wx.lib.analogclock
d14a1e28
RD
4# Purpose: A simple analog clock window
5#
6# Author: several folks on wxPython-users
7#
8# Created: 16-April-2003
9# RCS-ID: $Id$
10# Copyright: (c) 2003 by Total Control Software
11# Licence: wxWindows license
12#----------------------------------------------------------------------
b881fc78
RD
13# 11/30/2003 - Jeff Grimmett (grimmtooth@softhome.net)
14#
15# o Updated for wx namespace
16# o Tested with updated demo and with builtin test.
17#
f04ad14a
RD
18# 15-February-2004 - E. A. Tacao
19#
20# o Many ehnacements
21#
d14a1e28 22
d14a1e28 23
f04ad14a
RD
24import math
25import sys
26import string
27import time
28
29import wx
30
31from analogclockopts import ACCustomizationFrame
d14a1e28 32
d14a1e28 33
f04ad14a
RD
34# self.clockStyle:
35SHOW_QUARTERS_TICKS = 1
36SHOW_HOURS_TICKS = 2
37SHOW_MINUTES_TICKS = 4
38ROTATE_TICKS = 8
39SHOW_HOURS_HAND = 16
40SHOW_MINUTES_HAND = 32
41SHOW_SECONDS_HAND = 64
42SHOW_SHADOWS = 128
43OVERLAP_TICKS = 256
44
45# self.tickMarkHoursStyle and self.tickMarkMinutesStyle:
46TICKS_NONE = 1
47TICKS_SQUARE = 2
48TICKS_CIRCLE = 4
49TICKS_POLY = 8
50TICKS_DECIMAL = 16
51TICKS_ROMAN = 32
52
53
54class AnalogClockWindow(wx.Window):
55 """An analog clock window"""
d14a1e28 56
b881fc78 57 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, size=wx.DefaultSize,
d14a1e28 58 style=0, name="clock"):
f04ad14a 59
d14a1e28 60 # Initialize the wxWindow...
b881fc78 61 wx.Window.__init__(self, parent, ID, pos, size, style, name)
d14a1e28 62
f04ad14a
RD
63 # Initialize some variables and defaults...
64 self.clockStep = 1
65 self.prefs_open = False
66
67 self.tickShapeHours = self.tickShapeMinutes= [[0,0],
68 [1,-1],
69 [2,0],
70 [1,4]]
71 self.handHoursThickness = 5
72 self.handHoursColour = (0, 0, 0)
73
74 self.handMinutesThickness = 3
75 self.handMinutesColour = (0, 0, 0)
76
77 self.handSecondsThickness = 1
78 self.handSecondsColour = (0, 0, 0)
79
80 self.tickMarkHoursPen = wx.Pen((0, 0, 0), 1, wx.SOLID)
81 self.tickMarkHoursBrush = wx.Brush((0, 0, 0), wx.SOLID)
82 self.markSizeHour = 10
83 self.tickMarkHoursFont = wx.Font(0, wx.SWISS, wx.NORMAL, wx.BOLD)
84 self.tickMarkHoursFont.SetPointSize(self.markSizeHour)
85
86 self.tickMarkMinutesPen = wx.Pen((0, 0, 0), 1, wx.SOLID)
87 self.tickMarkMinutesBrush = wx.Brush((0, 0, 0), wx.SOLID)
88 self.markSizeMin = 6
89 self.tickMarkMinutesFont = wx.Font(self.markSizeMin, wx.SWISS, wx.NORMAL, wx.BOLD)
90
91 self.offM = 0
92
93 self.shadowPenColour = self.shadowBrushColour = (128,128,128)
94
95 self.watchPen = None
96 self.watchBrush = None
97
98 self.clockStyle = SHOW_HOURS_TICKS | SHOW_MINUTES_TICKS | SHOW_SHADOWS | ROTATE_TICKS
99 self.handsStyle = SHOW_SECONDS_HAND
100
101 self.tickMarkHoursStyle = TICKS_POLY
102 self.tickMarkMinutesStyle = TICKS_CIRCLE
103
104 self.currentTime=None
d14a1e28
RD
105
106 # Make an initial bitmap for the face, it will be updated and
107 # painted at the first EVT_SIZE event.
108 W, H = size
b881fc78 109 self.faceBitmap = wx.EmptyBitmap(max(W,1), max(H,1))
d14a1e28 110
d14a1e28 111 # Set event handlers...
b881fc78
RD
112 self.Bind(wx.EVT_PAINT, self.OnPaint)
113 self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
114 self.Bind(wx.EVT_SIZE, self.OnSize)
115 self.Bind(wx.EVT_TIMER, self.OnTimerExpire)
116 self.Bind(wx.EVT_WINDOW_DESTROY, self.OnQuit)
f04ad14a
RD
117 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
118 self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
d14a1e28
RD
119
120
f04ad14a
RD
121 # Initialize the timer that drives the update of the clock
122 # face. Update every half second to ensure that there is at
123 # least one true update during each realtime second.
124 self.timer = wx.Timer(self)
125 self.timer.Start(500)
d14a1e28
RD
126
127
f04ad14a
RD
128 def OnPaint(self, event):
129 self._doDrawHands(wx.BufferedPaintDC(self), True)
130
131
132 def OnTimerExpire(self, event):
133 size = self.GetClientSize()
134 dc = wx.BufferedDC(wx.ClientDC(self), size)
135 self._doDrawHands(dc, True)
136
137
138 def OnQuit(self, event):
139 self.timer.Stop()
140 del self.timer
141
142
143 def OnRightDown(self, event):
144 self.x = event.GetX()
145 self.y = event.GetY()
146 event.Skip()
147
148
149 def OnRightClick(self, event):
150 # only do this part the first time so the events are only bound once
151 if not hasattr(self, "popupID1"):
152 self.popupID1 = wx.NewId()
153 self.popupID2 = wx.NewId()
154 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
155 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
156
157 # make a menu
158 sm = wx.Menu()
159
160 sm.Append(self.popupID1, "Customize...")
161 sm.Append(self.popupID2, "About...")
162
163 # If there already a setup window open, we must not appear...
164 if not self.prefs_open:
165 # Popup the menu. If an item is selected then its handler
166 # will be called before PopupMenu returns.
167 self.PopupMenu(sm, (self.x,self.y))
168 sm.Destroy()
169
d14a1e28 170
f04ad14a
RD
171 def OnPopupOne(self, event):
172 self.prefs_open=True
173 frame = ACCustomizationFrame(self, -1, "AnalogClock Preferences")
174 frame.Show(True)
d14a1e28
RD
175
176
f04ad14a
RD
177 def OnPopupTwo(self, event):
178