class CompdaysrecorderWindow(Window):
    __gtype_name__ = "CompdaysrecorderWindow"
    
    def finish_initializing(self, builder): # pylint: disable=E1002
        """Set up the main window"""
        super(CompdaysrecorderWindow, self).finish_initializing(builder)

        self.AboutDialog = AboutCompdaysrecorderDialog
        self.PreferencesDialog = PreferencesCompdaysrecorderDialog
        
        # The status label
#        self.statusLabel = self.builder.get_object("statusLabel")

        # Code for other initialization actions should be added here.
        self.recorder = Recorder()
        
        # Date label
        self.dateLabel = self.builder.get_object("dateLabel")
        
        # Radio buttons
        self.aRadioButton = self.builder.get_object("aRadioButton")
        self.dRadioButton = self.builder.get_object("dRadioButton")
        self.nRadioButton = self.builder.get_object("nRadioButton")
        self.oRadioButton = self.builder.get_object("oRadioButton")
        self.hRadioButton = self.builder.get_object("hRadioButton")
        
        # Spin button
        self.extraSpinButton = self.builder.get_object("extraSpinButton")
        
        # Edit, Save and Delete buttons
        self.editButton = self.builder.get_object("editButton")
        self.saveButton = self.builder.get_object("saveButton")
        self.deleteButton = self.builder.get_object("deleteButton")
        
        # Calendar
        self.calendar = self.builder.get_object("calendar")
        r = self.recorder.findLastEntry()
        _ = r['date']
        self.calendar.select_month(month=_.month - 1, year=_.year)
        self.calendar.select_day(_.day)
        self.dateLabel.set_text("{0:02d}/{1:02d}/{2:04d}".format(_.day, _.month, _.year))
        tmp = r['shift']
        if (tmp=='d') : self.dRadioButton.set_active(True)
        elif (tmp=='a') : self.aRadioButton.set_active(True)
        elif (tmp=='n') : self.nRadioButton.set_active(True)
        elif (tmp=='o') : self.oRadioButton.set_active(True)
        else : self.hRadioButton.set_active(True)
        self.extraSpinButton.set_value(r['extra'])
        self.enableEdition(False)
        
        # Plot area
        self.plotArea = self.builder.get_object("plotArea")
        self.displayPlotArea = self.builder.get_object("displayPlotArea")
        self.upArrow = self.builder.get_object("upArrow")
        self.downArrow = self.builder.get_object("downArrow")
        self.plot = self.recorder.plotOffHours()
        self.plotArea.add(self.plot)
        
        # compDaysLabel
        self.compDaysLabel = self.builder.get_object("compDaysLabel")
        self.updateCompDays()
        
    def on_displayPlotArea_toggled(self, widget):
        if self.displayPlotArea.get_active() :
            self.plot = self.recorder.plotOffHours()
            self.plotArea.set_visible(True)
            self.plotArea.show()
            self.displayPlotArea.set_image(self.upArrow)
        else :
#            self.plotArea.set_visible(False)
            self.plotArea.hide()
            self.displayPlotArea.set_image(self.downArrow)
            
    def whoIsActive(self):
        if (self.dRadioButton.get_active()) : return 'd'
        elif (self.aRadioButton.get_active()) : return 'a'
        elif (self.nRadioButton.get_active()) : return 'n'
        elif (self.oRadioButton.get_active()) : return 'o'
        else : return 'h'
        
    def enableEdition(self, boolean):
        if boolean :
            self.dRadioButton.set_sensitive(True)
            self.aRadioButton.set_sensitive(True)
            self.nRadioButton.set_sensitive(True)
            self.oRadioButton.set_sensitive(True)
            self.hRadioButton.set_sensitive(True)
            self.extraSpinButton.set_sensitive(True)
            self.editButton.set_sensitive(False)
            self.saveButton.set_sensitive(True)
            self.deleteButton.set_sensitive(False)
        else :
            self.dRadioButton.set_sensitive(False)
            self.aRadioButton.set_sensitive(False)
            self.nRadioButton.set_sensitive(False)
            self.oRadioButton.set_sensitive(False)
            self.hRadioButton.set_sensitive(False)
            self.extraSpinButton.set_sensitive(False)
            self.editButton.set_sensitive(True)
            self.saveButton.set_sensitive(False)
            self.deleteButton.set_sensitive(True)
            
    def updateCompDays(self) :
        off = self.recorder.computeOffHours()
        if off< 0 :
            self.compDaysLabel.override_color(0, Gdk.RGBA(1,0,0,1))
        else :
            self.compDaysLabel.override_color(0, Gdk.RGBA(0,1,0,1))
        self.compDaysLabel.set_text(str(off/8))
        

    def on_calendar_day_selected(self, widget):
        # Parse the date selected
        year, month, day = self.calendar.get_date()
        dateObj = date(year, month+1, day)
        
        self.dateLabel.set_text("{0:02d}/{1:02d}/{2:04d}".format(day, month+1, year))
        
        # Do we already have an entry for this date ?
        r = self.recorder.findEntry(dateObj)
        if (r != -1):
            # The entry already exist.
            tmp = r['shift']
            if (tmp=='d') : self.dRadioButton.set_active(True)
            elif (tmp=='a') : self.aRadioButton.set_active(True)
            elif (tmp=='n') : self.nRadioButton.set_active(True)
            elif (tmp=='o') : self.oRadioButton.set_active(True)
            else : self.hRadioButton.set_active(True)
            
            self.extraSpinButton.set_value(r['extra'])
            # Disable editing.
            self.enableEdition(False)
        else :
            # Enable edition
            self.enableEdition(True)
            
    def on_editButton_clicked(self, widget):
        # Toggle edit mode
        self.enableEdition(True)
        
    def on_saveButton_clicked(self, widget):
        year, month, day = self.calendar.get_date()
        dateObj = date(year, month+1, day)
        
        shift = self.whoIsActive()
        
        extra = int(self.extraSpinButton.get_value())
        
        self.recorder.writeEntry(dateObj, shift, extra)
        self.enableEdition(False)
        self.updateCompDays()
        
    def on_deleteButton_clicked(self, widget):
        year, month, day = self.calendar.get_date()
        dateObj = date(year, month+1, day)
        self.recorder.removeEntry(dateObj)
        self.enableEdition(True)
        self.updateCompDays()
Esempio n. 2
0
class CompdaysrecorderWindow(Window):
    __gtype_name__ = "CompdaysrecorderWindow"

    def finish_initializing(self, builder):  # pylint: disable=E1002
        """Set up the main window"""
        super(CompdaysrecorderWindow, self).finish_initializing(builder)

        self.AboutDialog = AboutCompdaysrecorderDialog
        self.PreferencesDialog = PreferencesCompdaysrecorderDialog

        # The status label
        #        self.statusLabel = self.builder.get_object("statusLabel")

        # Code for other initialization actions should be added here.
        self.recorder = Recorder()

        # Date label
        self.dateLabel = self.builder.get_object("dateLabel")

        # Radio buttons
        self.aRadioButton = self.builder.get_object("aRadioButton")
        self.dRadioButton = self.builder.get_object("dRadioButton")
        self.nRadioButton = self.builder.get_object("nRadioButton")
        self.oRadioButton = self.builder.get_object("oRadioButton")
        self.hRadioButton = self.builder.get_object("hRadioButton")

        # Spin button
        self.extraSpinButton = self.builder.get_object("extraSpinButton")

        # Edit, Save and Delete buttons
        self.editButton = self.builder.get_object("editButton")
        self.saveButton = self.builder.get_object("saveButton")
        self.deleteButton = self.builder.get_object("deleteButton")

        # Calendar
        self.calendar = self.builder.get_object("calendar")
        r = self.recorder.findLastEntry()
        _ = r['date']
        self.calendar.select_month(month=_.month - 1, year=_.year)
        self.calendar.select_day(_.day)
        self.dateLabel.set_text("{0:02d}/{1:02d}/{2:04d}".format(
            _.day, _.month, _.year))
        tmp = r['shift']
        if (tmp == 'd'): self.dRadioButton.set_active(True)
        elif (tmp == 'a'): self.aRadioButton.set_active(True)
        elif (tmp == 'n'): self.nRadioButton.set_active(True)
        elif (tmp == 'o'): self.oRadioButton.set_active(True)
        else: self.hRadioButton.set_active(True)
        self.extraSpinButton.set_value(r['extra'])
        self.enableEdition(False)

        # Plot area
        self.plotArea = self.builder.get_object("plotArea")
        self.displayPlotArea = self.builder.get_object("displayPlotArea")
        self.upArrow = self.builder.get_object("upArrow")
        self.downArrow = self.builder.get_object("downArrow")
        self.plot = self.recorder.plotOffHours()
        self.plotArea.add(self.plot)

        # compDaysLabel
        self.compDaysLabel = self.builder.get_object("compDaysLabel")
        self.updateCompDays()

    def on_displayPlotArea_toggled(self, widget):
        if self.displayPlotArea.get_active():
            self.plot = self.recorder.plotOffHours()
            self.plotArea.set_visible(True)
            self.plotArea.show()
            self.displayPlotArea.set_image(self.upArrow)
        else:
            #            self.plotArea.set_visible(False)
            self.plotArea.hide()
            self.displayPlotArea.set_image(self.downArrow)

    def whoIsActive(self):
        if (self.dRadioButton.get_active()): return 'd'
        elif (self.aRadioButton.get_active()): return 'a'
        elif (self.nRadioButton.get_active()): return 'n'
        elif (self.oRadioButton.get_active()): return 'o'
        else: return 'h'

    def enableEdition(self, boolean):
        if boolean:
            self.dRadioButton.set_sensitive(True)
            self.aRadioButton.set_sensitive(True)
            self.nRadioButton.set_sensitive(True)
            self.oRadioButton.set_sensitive(True)
            self.hRadioButton.set_sensitive(True)
            self.extraSpinButton.set_sensitive(True)
            self.editButton.set_sensitive(False)
            self.saveButton.set_sensitive(True)
            self.deleteButton.set_sensitive(False)
        else:
            self.dRadioButton.set_sensitive(False)
            self.aRadioButton.set_sensitive(False)
            self.nRadioButton.set_sensitive(False)
            self.oRadioButton.set_sensitive(False)
            self.hRadioButton.set_sensitive(False)
            self.extraSpinButton.set_sensitive(False)
            self.editButton.set_sensitive(True)
            self.saveButton.set_sensitive(False)
            self.deleteButton.set_sensitive(True)

    def updateCompDays(self):
        off = self.recorder.computeOffHours()
        if off < 0:
            self.compDaysLabel.override_color(0, Gdk.RGBA(1, 0, 0, 1))
        else:
            self.compDaysLabel.override_color(0, Gdk.RGBA(0, 1, 0, 1))
        self.compDaysLabel.set_text(str(off / 8))

    def on_calendar_day_selected(self, widget):
        # Parse the date selected
        year, month, day = self.calendar.get_date()
        dateObj = date(year, month + 1, day)

        self.dateLabel.set_text("{0:02d}/{1:02d}/{2:04d}".format(
            day, month + 1, year))

        # Do we already have an entry for this date ?
        r = self.recorder.findEntry(dateObj)
        if (r != -1):
            # The entry already exist.
            tmp = r['shift']
            if (tmp == 'd'): self.dRadioButton.set_active(True)
            elif (tmp == 'a'): self.aRadioButton.set_active(True)
            elif (tmp == 'n'): self.nRadioButton.set_active(True)
            elif (tmp == 'o'): self.oRadioButton.set_active(True)
            else: self.hRadioButton.set_active(True)

            self.extraSpinButton.set_value(r['extra'])
            # Disable editing.
            self.enableEdition(False)
        else:
            # Enable edition
            self.enableEdition(True)

    def on_editButton_clicked(self, widget):
        # Toggle edit mode
        self.enableEdition(True)

    def on_saveButton_clicked(self, widget):
        year, month, day = self.calendar.get_date()
        dateObj = date(year, month + 1, day)

        shift = self.whoIsActive()

        extra = int(self.extraSpinButton.get_value())

        self.recorder.writeEntry(dateObj, shift, extra)
        self.enableEdition(False)
        self.updateCompDays()

    def on_deleteButton_clicked(self, widget):
        year, month, day = self.calendar.get_date()
        dateObj = date(year, month + 1, day)
        self.recorder.removeEntry(dateObj)
        self.enableEdition(True)
        self.updateCompDays()