]> git.saurik.com Git - wxWidgets.git/blame - wxPython/wx/lib/analogclock.py
Applied patch #1441370: lib.plot - allow passing in wx.Colour()
[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 472.
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
4e5d278c
RD
23"""
24`AnalogClockWindow` is a simple analog clock class.
25"""
d14a1e28 26
f04ad14a
RD
27import math
28import sys
29import string
30import time
31
32import wx
33
34from analogclockopts import ACCustomizationFrame
d14a1e28 35
d14a1e28 36
f04ad14a
RD
37# self.clockStyle:
38SHOW_QUARTERS_TICKS = 1
39SHOW_HOURS_TICKS = 2
40SHOW_MINUTES_TICKS = 4
41ROTATE_TICKS = 8
42SHOW_HOURS_HAND = 16
43SHOW_MINUTES_HAND = 32
44SHOW_SECONDS_HAND = 64
45SHOW_SHADOWS = 128
46OVERLAP_TICKS = 256
47
48# self.tickMarkHoursStyle and self.tickMarkMinutesStyle:
49TICKS_NONE = 1
50TICKS_SQUARE = 2
51TICKS_CIRCLE = 4
52TICKS_POLY = 8
53TICKS_DECIMAL = 16
54TICKS_ROMAN = 32
55
56
102e2b26 57class AnalogClockWindow(wx.PyWindow):
f04ad14a 58 """An analog clock window"""
d14a1e28 59
b881fc78 60 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, size=wx.DefaultSize,
d14a1e28 61 style=0, name="clock"):
f04ad14a 62
d14a1e28 63 # Initialize the wxWindow...
102e2b26 64 wx.PyWindow.__init__(self, parent, ID, pos, size, style, name)
d14a1e28 65
f04ad14a
RD
66 # Initialize some variables and defaults...
67 self.clockStep = 1
68 self.prefs_open = False
69
70 self.tickShapeHours = self.tickShapeMinutes= [[0,0],
71 [1,-1],
72 [2,0],
73 [1,4]]
74 self.handHoursThickness = 5
75 self.handHoursColour = (0, 0, 0)
76
77 self.handMinutesThickness = 3
78 self.handMinutesColour = (0, 0, 0)
79
80 self.handSecondsThickness = 1
81 self.handSecondsColour = (0, 0, 0)
82
83 self.tickMarkHoursPen = wx.Pen((0, 0, 0), 1, wx.SOLID)
84 self.tickMarkHoursBrush = wx.Brush((0, 0, 0), wx.SOLID)
85 self.markSizeHour = 10
24054d48 86 self.tickMarkHoursFont = wx.Font(1, wx.SWISS, wx.NORMAL, wx.BOLD)
f04ad14a
RD
87 self.tickMarkHoursFont.SetPointSize(self.markSizeHour)
88
89 self.tickMarkMinutesPen = wx.Pen((0, 0, 0), 1, wx.SOLID)
90 self.tickMarkMinutesBrush = wx.Brush((0, 0, 0), wx.SOLID)
91 self.markSizeMin = 6
92 self.tickMarkMinutesFont = wx.Font(self.markSizeMin, wx.SWISS, wx.NORMAL, wx.BOLD)
93
94 self.offM = 0
95
96 self.shadowPenColour = self.shadowBrushColour = (128,128,128)
97
98 self.watchPen = None
99 self.watchBrush = None
100
101 self.clockStyle = SHOW_HOURS_TICKS | SHOW_MINUTES_TICKS | SHOW_SHADOWS | ROTATE_TICKS
102 self.handsStyle = SHOW_SECONDS_HAND
103
104 self.tickMarkHoursStyle = TICKS_POLY
105 self.tickMarkMinutesStyle = TICKS_CIRCLE
106
107 self.currentTime=None
d14a1e28 108
d7403ad2
RD
109 size = wx.Size(*size)
110 bestSize = self.GetBestSize()
111 size.x = max(size.x, bestSize.x)
112 size.y = max(size.y, bestSize.y)
113 self.SetSize(size)
114
d14a1e28
RD
115 # Make an initial bitmap for the face, it will be updated and
116 # painted at the first EVT_SIZE event.
117 W, H = size
b881fc78 118 self.faceBitmap = wx.EmptyBitmap(max(W,1), max(H,1))
d7403ad2 119
d14a1e28 120 # Set event handlers...
b881fc78
RD
121 self.Bind(wx.EVT_PAINT, self.OnPaint)
122 self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
123 self.Bind(wx.EVT_SIZE, self.OnSize)
124 self.Bind(wx.EVT_TIMER, self.OnTimerExpire)
125 self.Bind(wx.EVT_WINDOW_DESTROY, self.OnQuit)
f04ad14a
RD
126 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
127 self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
d14a1e28 128
f04ad14a
RD
129 # Initialize the timer that drives the update of the clock
130 # face. Update every half second to ensure that there is at
131 # least one true update during each realtime second.
132 self.timer = wx.Timer(self)
133 self.timer.Start(500)
d14a1e28 134
d7403ad2 135
102e2b26
RD
136 def DoGetBestSize(self):
137 return wx.Size(25,25)
d14a1e28 138
d7403ad2 139
f04ad14a 140 def OnPaint(self, event):
d7403ad2 141 dc = wx.BufferedPaintDC(self)
c59e73e8
RD
142 if hasattr(self, 'coords'):
143 self._doDrawHands(dc, True)
f04ad14a
RD
144
145
146 def OnTimerExpire(self, event):
147 size = self.GetClientSize()
148 dc = wx.BufferedDC(wx.ClientDC(self), size)
149 self._doDrawHands(dc, True)
150
151
152 def OnQuit(self, event):
153 self.timer.Stop()
154 del self.timer
155
156
157 def OnRightDown(self, event):
158 self.x = event.GetX()
159 self.y = event.GetY()
160 event.Skip()
161
162
163 def OnRightClick(self, event):
164 # only do this part the first time so the events are only bound once
165 if not hasattr(self, "popupID1"):
166 self.popupID1 = wx.NewId()
167 self.popupID2 = wx.NewId()
168 self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
169 self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
170
171 # make a menu
172 sm = wx.Menu()
173
174 sm.Append(self.popupID1, "Customize...")
175 sm.Append(self.popupID2, "About...")
176
177 # If there already a setup window open, we must not appear...
178 if not self.prefs_open:
179 # Popup the menu. If an item is selected then its handler
180 # will be called before PopupMenu returns.
181 self.PopupMenu(sm, (self.x,self.y))
182 sm.Destroy()
183
d14a1e28 184
f04ad14a
RD
185 def OnPopupOne(self, event):
186 self.prefs_open=True
187 frame = ACCustomizationFrame(self, -1, "AnalogClock Preferences")
188 frame.Show(True)
d14a1e28
RD
189
190
f04ad14a
RD
191 def OnPopupTwo(self, event):
192