class JenkinsApplet(object):
    """
        Main GUI class that generates the applet widgets.
    """

    def __init__(self, applet):
        # May decide to make these configurable in the future:
        self.refreshIntervalMS = 1000
        self.showServerInfo = True
        self.preferences = JenkinsPreferences(applet)
        self.applet = applet
        self.hbox = None
        self.poller = JenkinsPoller(self.preferences)
        self.serverWidget = None
        self.jobWidgets = []
        self.hbox = None

    def setupWidgets(self):
        """ Create widgets and start the poller """
        self.poller.start()
        self.hbox = gtk.HBox()
        if self.showServerInfo:
            self.server = JenkinsServer(self.applet, self.preferences, self.poller, IMAGE_DIR)
        self.hbox.pack_start(self.server.widget)
        self.applet.add(self.hbox)
        self.refresh()
        gobject.timeout_add(self.refreshIntervalMS, self.refresh)

    def refresh(self):
        """ Refresh the entire applet using the latest polled info """
        # Currently destroying the hbox and recreating all the widgets every time,
        # probably not the most efficient way...
        # _jobs = [JenkinsJob(jobDict, self.preferences, self.applet) for jobDict in self.poller.jobs]
        self.updateJobs()
        if self.server:
            self.server.refresh()
        for job in self.jobWidgets:
            job.refresh()
        # self.applet.show_all()
        return True

    def updateJobs(self):
        names = [job.name for job in self.jobWidgets]
        for jobDict in self.poller.jobs:
            if "name" in jobDict and jobDict["name"] not in names:
                job = JenkinsJob(jobDict["name"], self.poller, self.preferences, self.applet)
                print "adding", job
                self.jobWidgets.append(job)
                self.hbox.pack_start(job.createWidgets())
 def setupWidgets(self):
     """ Create widgets and start the poller """
     self.poller.start()
     self.hbox = gtk.HBox()
     if self.showServerInfo:
         self.server = JenkinsServer(self.applet, self.preferences, self.poller, IMAGE_DIR)
     self.hbox.pack_start(self.server.widget)
     self.applet.add(self.hbox)
     self.refresh()
     gobject.timeout_add(self.refreshIntervalMS, self.refresh)