コード例 #1
0
    def __init__(self, inidir, inifile):
        """Initiate the application
        
        Arguments
        inidir -- the working directory
        inifile -- the inifile 
        
        """        
        settings = Settings3(inidir, inifile)
        self._settings = settings
        dsdblog = InifileDataSourceDescription(sBlog, inidir, inifile)
        dsdnew = InifileDataSourceDescription(sNew, inidir, inifile)
                
        #Initiate main GUI
        gui = publicdisplay.PublicDisplay(inifile)
        self.gui = gui
        self.gui.root.protocol("WM_DELETE_WINDOW", self._ehQuit)
        self._views = dict()
        self._datamanagers = dict()
        
        self._sched = scheduler.Scheduler()
        
        #Configure blog data manager
        dm = DataManager3Blog(inidir, dsdblog, settings)
        self._datamanagers[_blogid] = dm
        self._sched.addUpdatable(dm)
        gui.setupSoftbutton(self._ehBlog, lang[lng.txtBlog], 0)

        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _blogid)
        blogview = BooklistView(settings.previewx, settings.previewy, frame)
        self._views[_blogid] = blogview
        dm.addSubjectObserver(blogview)

        rect = gui.createMainAreaShape(publicdisplay.shpBottomRect, _bottomblogid)
        ib = Infobar(rect)
        dm.addSubjectObserver(ib)

        #Configure new book data manager
        dm = DataManager3New(inidir, dsdnew, settings)
        self._datamanagers[_newbookid] = dm
        self._sched.addUpdatable(dm)
        gui.setupSoftbutton(self._ehNew, lang[lng.txtRecentlyBought], 1)

        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _newbookid)
        blogview = BooklistView(settings.previewx, settings.previewy, frame)
        self._views[_newbookid] = blogview
        dm.addSubjectObserver(blogview)

        rect = gui.createMainAreaShape(publicdisplay.shpBottomRect, _bottomnewbookid)
        ib = Infobar(rect)
        dm.addSubjectObserver(ib)
        
        self._itemviews = dict()

        #Create blog view
        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _blogviewid)
        viewer = BlogView(frame, gui.bgcolor, settings)
        self._views[_blogviewid] = viewer
        self._itemviews[_blogid] = _blogviewid
        
        #Create book view
        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _bookviewid)
        viewer = BookView(frame, gui.bgcolor, settings)
        self._views[_bookviewid] = viewer
        self._itemviews[_newbookid] = _bookviewid
        
        #Create carousel views
        self._imagecarouselframe = gui.createBottomFrame()
        self._imagecarouselview = ImageCarouselView(self._imagecarouselframe, settings.smallpreviewx, settings.smallpreviewy)
        self._imagecarouselframe.grid_remove()
        
        self._subjectcarouselframe = gui.createBottomFrame()
        self._subjectcarouselview = ImageCarouselView(self._subjectcarouselframe, settings.smallpreviewx, settings.smallpreviewy)
        self._subjectcarouselframe.grid_remove()

        self._setupPublicDisplay(_blogid, _bottomblogid, [_newbookid, _bottomnewbookid, _blogviewid, _bookviewid], 0)
        self._sched.start()
コード例 #2
0
class Controller:
    """Set up the GUI, set up the data model, handle the events"""
    def __init__(self, inidir, inifile):
        """Initiate the application
        
        Arguments
        inidir -- the working directory
        inifile -- the inifile 
        
        """        
        settings = Settings3(inidir, inifile)
        self._settings = settings
        dsdblog = InifileDataSourceDescription(sBlog, inidir, inifile)
        dsdnew = InifileDataSourceDescription(sNew, inidir, inifile)
                
        #Initiate main GUI
        gui = publicdisplay.PublicDisplay(inifile)
        self.gui = gui
        self.gui.root.protocol("WM_DELETE_WINDOW", self._ehQuit)
        self._views = dict()
        self._datamanagers = dict()
        
        self._sched = scheduler.Scheduler()
        
        #Configure blog data manager
        dm = DataManager3Blog(inidir, dsdblog, settings)
        self._datamanagers[_blogid] = dm
        self._sched.addUpdatable(dm)
        gui.setupSoftbutton(self._ehBlog, lang[lng.txtBlog], 0)

        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _blogid)
        blogview = BooklistView(settings.previewx, settings.previewy, frame)
        self._views[_blogid] = blogview
        dm.addSubjectObserver(blogview)

        rect = gui.createMainAreaShape(publicdisplay.shpBottomRect, _bottomblogid)
        ib = Infobar(rect)
        dm.addSubjectObserver(ib)

        #Configure new book data manager
        dm = DataManager3New(inidir, dsdnew, settings)
        self._datamanagers[_newbookid] = dm
        self._sched.addUpdatable(dm)
        gui.setupSoftbutton(self._ehNew, lang[lng.txtRecentlyBought], 1)

        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _newbookid)
        blogview = BooklistView(settings.previewx, settings.previewy, frame)
        self._views[_newbookid] = blogview
        dm.addSubjectObserver(blogview)

        rect = gui.createMainAreaShape(publicdisplay.shpBottomRect, _bottomnewbookid)
        ib = Infobar(rect)
        dm.addSubjectObserver(ib)
        
        self._itemviews = dict()

        #Create blog view
        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _blogviewid)
        viewer = BlogView(frame, gui.bgcolor, settings)
        self._views[_blogviewid] = viewer
        self._itemviews[_blogid] = _blogviewid
        
        #Create book view
        frame = gui.createMainAreaShape(publicdisplay.shpSmallRoundRect, _bookviewid)
        viewer = BookView(frame, gui.bgcolor, settings)
        self._views[_bookviewid] = viewer
        self._itemviews[_newbookid] = _bookviewid
        
        #Create carousel views
        self._imagecarouselframe = gui.createBottomFrame()
        self._imagecarouselview = ImageCarouselView(self._imagecarouselframe, settings.smallpreviewx, settings.smallpreviewy)
        self._imagecarouselframe.grid_remove()
        
        self._subjectcarouselframe = gui.createBottomFrame()
        self._subjectcarouselview = ImageCarouselView(self._subjectcarouselframe, settings.smallpreviewx, settings.smallpreviewy)
        self._subjectcarouselframe.grid_remove()

        self._setupPublicDisplay(_blogid, _bottomblogid, [_newbookid, _bottomnewbookid, _blogviewid, _bookviewid], 0)
        self._sched.start()

    def _setupPublicDisplay(self, shownId, infoid, hiddenIds, index):
        """Configure the state of the GUI.
        
        Arguments
        shownId -- the id of the GUI element to show
        infoid -- id of the Infobar
        hiddenIds -- the ids of the GUI elements to hide
        index -- the index of the button that will be active
        
        """
        self._views[_blogviewid].clear()
        self.gui.maincanvas.itemconfig(shownId, state = tki.NORMAL)
        self.gui.maincanvas.itemconfig(infoid, state = tki.NORMAL)

        for id in hiddenIds:
            self.gui.maincanvas.itemconfig(id, state = tki.HIDDEN)

        self.gui.removeBrowsables()
        dm = self._datamanagers[shownId]
        self.gui.addBrowsable(dm)
        dm.notifySubjectObservers()
        self._subjectcarouselview.setItemList(dm.subjecticons, dm.subjectindex)
        self.gui.addBrowsable(self._subjectcarouselview)
        self._imagecarouselframe.grid_remove()
        self._subjectcarouselframe.grid()

        self._prevshown = shownId
        self._previnfo = infoid
        self._prevhidden = hiddenIds
        self._previndex = index

        for i in range(2):
            self.gui.setSoftButtonState(i == index, i)

        self.gui.setupSoftbutton(self._ehBlog, lang[lng.txtBlog], 0)
        self.gui.setupSoftbutton(self._ehNew, lang[lng.txtRecentlyBought], 1)

        self.gui.root.bind(evItemSelected, 
                      lambda event, arg=shownId: self._ehItemSelected(event, arg))

    def _ehStart(self):
        """Event handler for the start button."""
        self._setupPublicDisplay(self._prevshown, self._previnfo, self._prevhidden, self._previndex)

    def _ehBlog(self):
        """Event handler for the blog button."""
        self._setupPublicDisplay(_blogid, _bottomblogid, [_newbookid, _bottomnewbookid, _blogviewid, _bookviewid], 0)

    def _ehNew(self):
        """Event handler for the button labeled "new"."""
        self._setupPublicDisplay(_newbookid, _bottomnewbookid, [_blogid, _bottomblogid, _blogviewid, _bookviewid], 1)

    def _ehItemSelected(self, event, arg):
        """Handle a click event for an item.
        
        Arguments
        event -- the event object
        arg -- the id of the source of the event
        
        """
        source = self._views[arg]
        itemviewid = self._itemviews[arg]
        viewer = self._views[itemviewid]
        self._activeview = viewer
        
        viewer.setContent(source.itemlist, source.selectedIndex)
        self._imagecarouselview.setItemList(source.itemlist, source.selectedIndex)
        self.gui.removeBrowsables()
        self.gui.addBrowsable(viewer)
        self.gui.addBrowsable(self._imagecarouselview)

        self.gui.maincanvas.itemconfig(_blogid, state = tki.HIDDEN)
        self.gui.maincanvas.itemconfig(_newbookid, state = tki.HIDDEN)
        self.gui.maincanvas.itemconfig(itemviewid, state = tki.NORMAL)
        self._imagecarouselframe.grid()
        self._subjectcarouselframe.grid_remove()
        self.gui.setupSoftbutton(self._ehStart, lang[lng.txtStart], 0)
        
        for i in range(2):
            self.gui.setSoftButtonState(i == 0, i)
            
    def _ehQuit(self):
        """Terminate the application."""
        print('Closing thread...')
        self._sched.stop()
        
        while(self._sched.isAlive()):
            print('Waiting for thread to close...')
            self._sched.join(1)
        
        print('Exit')
        self.gui.root.destroy()