]> git.saurik.com Git - wxWidgets.git/blame - wxPython/wx/lib/analogclock.py
Fix or add some DoGetBestSize's
[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 404.
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
102e2b26 54class AnalogClockWindow(wx.PyWindow):
f04ad14a 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...
102e2b26 61 wx.PyWindow.__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 126
102e2b26
RD
127 def DoGetBestSize(self):
128 return wx.Size(25,25)
d14a1e28 129
f04ad14a
RD
130 def OnPaint(self, event):
131 self._doDrawHands(wx.BufferedPaintDC(self), True)
132
133
134 def OnTimerExpire(self, event):
135 size = self.GetClientSize()
136 dc = wx.BufferedDC(wx.ClientDC(self), size)
137 self._doDrawHands(dc, True)
138
139
140 def OnQuit(self, event):
141 self.timer.Stop()
142 del self.timer
143
144
145 def OnRightDown(self, event):
146 self.x = event.GetX()
147 self.y = event.GetY()
148 event.Skip()
149
150
151 def OnRightClick(self, event):
152 # only do this part the first time so the events are only bound once
153 if not hasattr(self, "popupID1"):
154 self.popupID1 = wx.NewId()
155 self.popupID2 = wx.NewId()
156 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
157 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
158
159 # make a menu
160 sm = wx.Menu()
161
162 sm.Append(self.popupID1, "Customize...")
163 sm.Append(self.popupID2, "About...")
164
165 # If there already a setup window open, we must not appear...
166 if not self.prefs_open:
167 # Popup the menu. If an item is selected then its handler
168 # will be called before PopupMenu returns.
169 self.PopupMenu(sm, (self.x,self.y))
170 sm.Destroy()
171
d14a1e28 172
f04ad14a
RD
173 def OnPopupOne(self, event):
174 self.prefs_open=True
175 frame = ACCustomizationFrame(self, -1, "AnalogClock Preferences")
176 frame.Show(True)
d14a1e28
RD
177
178
f04ad14a
RD
179 def OnPopupTwo(self, event):
180