1# -*- coding: utf-8 -*-
2#
3# Copyright (C) 2018 Jens Goepfert
4#
5
6import wx
7
8from photofilmstrip.lib.jobimpl.IVisualJobManager import IVisualJobManager
9from photofilmstrip.lib.jobimpl.JobManager import JobManager
10from photofilmstrip.lib.jobimpl.Job import Job
11
12_EVT_REGISTER_JOB_TYPE = wx.NewEventType()
13EVT_REGISTER_JOB = wx.PyEventBinder(_EVT_REGISTER_JOB_TYPE, 1)
14
15_EVT_REMOVE_JOB_TYPE = wx.NewEventType()
16EVT_REMOVE_JOB = wx.PyEventBinder(_EVT_REMOVE_JOB_TYPE, 1)
17
18
19class WxVisualJobManager(IVisualJobManager):
20
21    def __init__(self, win=None):
22        self.__id = wx.NewId()
23        if win is None:
24            win = self
25        assert isinstance(win, wx.EvtHandler)
26        self.__win = win
27        JobManager().AddVisual(self)
28
29    def GetId(self):
30        return self.__id
31
32    def RegisterJob(self, job):
33        evt = JobEvent(self.__win.GetId(), job, _EVT_REGISTER_JOB_TYPE)
34        wx.PostEvent(self.__win, evt)
35
36    def RemoveJob(self, job):
37        evt = JobEvent(self.__win.GetId(), job, _EVT_REMOVE_JOB_TYPE)
38        wx.PostEvent(self.__win, evt)
39
40
41class JobEvent(wx.PyEvent):
42
43    def __init__(self, ident, job, evtType):
44        wx.PyEvent.__init__(self, ident, evtType)
45        assert isinstance(job, Job)
46        self.__job = job
47
48    def GetJob(self):
49        return self.__job
50