From e2543b39adc71abea99ac9d1e5d43bb943cf7d31 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Mon, 22 Apr 2019 11:19:04 +0000 Subject: [PATCH] - added git-svn-id: http://moon:8086/svn/projects/HendiControl@253 fda53097-d464-4ada-af97-ba876c37ca34 --- Control/brewpi/gui.py | 47 +++++++++++++++++++++ Control/brewpi/timer.py | 92 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 Control/brewpi/gui.py create mode 100644 Control/brewpi/timer.py diff --git a/Control/brewpi/gui.py b/Control/brewpi/gui.py new file mode 100644 index 0000000..1b7dabc --- /dev/null +++ b/Control/brewpi/gui.py @@ -0,0 +1,47 @@ +#!/usr/bin/python3 +#from core import MouseEvent + +import wx +import colorsys as cs + +class myGui(wx.Frame): + def __init__(self, *args, **kwargs): + super(myGui, self).__init__(*args, **kwargs) + + self.InitUI() + + def InitUI(self): + + menubar = wx.MenuBar() + fileMenu = wx.Menu() + fileItem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application') + menubar.Append(fileMenu, '&File') + self.SetMenuBar(menubar) + + self.Bind(wx.EVT_MENU, self.OnQuit, fileItem) + self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouse) + + self.SetSize((300, 200)) + self.SetTitle('Simple menu') + self.Centre() + + def OnQuit(self, e): + self.Close() + + def onMouse(self, e): + wxm = wx.MouseEvent(e) + rgb_f = cs.hsv_to_rgb(float(wxm.Position[0])/300, 1.0, float(wxm.Position[1])/200) + color = wx.Colour(int(rgb_f[0]*255), int(rgb_f[1]*255), int(rgb_f[2]*255)) + self.SetBackgroundColour(color) + +def main(): + + app = wx.App() + ex = myGui(None) + ex.Show() + app.MainLoop() + + +if __name__ == '__main__': + main() + diff --git a/Control/brewpi/timer.py b/Control/brewpi/timer.py new file mode 100644 index 0000000..80c5d46 --- /dev/null +++ b/Control/brewpi/timer.py @@ -0,0 +1,92 @@ +import time +import abc + +class Timer(object): + def __init__(self, name='Timer', listener=None, mode='periodic'): + self.name = name + self.listener = listener + self.isActive = False + self.mode = 'periodic' + self.interval = 0 + self.elapseTime = 0 + + def start(self, interval): + now = time.time() + self.interval = interval + self.elapseTime = now + interval + self.isActive = self.elapseTime > now + pass + + def stop(self): + pass + + def __str__(self): + return self.name + +class TimerListener(abc.ABC): + def __init__(self): + pass + + @abc.abstractmethod + def onTimer(self, timer): + pass + +class TimerManager(object): + def __init__(self): + self.timers = [] + pass + + def registerTimer(self, timer): + self.timers.append(timer) + + def process(self): + for timer in self.timers: + now = time.time() + if timer.isActive: + if timer.elapseTime <= now: + if timer.listener: + if 'periodic' in timer.mode: + timer.start(timer.interval) + timer.listener.onTimer(timer) + + def getMinTimeout(self): + timeouts = [] + for timer in self.timers: + now = time.time() + if timer.isActive: + timeout = max(0, timer.elapseTime-now) + timeouts.append(timeout) + + + minTimeout = min(timeouts) + return minTimeout + +if __name__ == '__main__': + class Test (TimerListener): + def __init__(self): + self.timerMgr = TimerManager() + self.timer200 = Timer('Timer 200', self) + self.timer500 = Timer('Timer 500', self) + self.timer1000 = Timer('Timer 1000', self) + self.timerMgr.registerTimer(self.timer200) + self.timerMgr.registerTimer(self.timer500) + self.timerMgr.registerTimer(self.timer1000) + + self.timer200.start(0.200) + self.timer500.start(0.500) + self.timer1000.start(1.000) + pass + + def onTimer(self, timer): + print (timer) + + def run(self): + while(True): + wait = self.timerMgr.getMinTimeout() + time.sleep(wait) + + self.timerMgr.process() + + test = Test() + test.run() +