def __init__(self):
        # Translators: "New" refers to a world clock
        Clock.__init__(self, _("World"), _("New"), True)

        self.liststore = Gtk.ListStore(bool,
                                       GdkPixbuf.Pixbuf,
                                       str,
                                       GObject.TYPE_PYOBJECT)

        self.iconview = SelectableIconView(self.liststore, 0, 1, 2)

        contentview = ContentView(self.iconview,
                "document-open-recent-symbolic",
                 _("Select <b>New</b> to add a world clock"))

        self.timeview = TimeAdjustingView(contentview)
        self.add(self.timeview)

        self._update_source_id = None

        self.timeview.connect("time-changed", self._on_timeview_time_changed)
        self.iconview.connect("item-activated", self._on_item_activated)
        self.iconview.connect("selection-changed", self._on_selection_changed)

        self.storage = WorldClockStorage()
        self.clocks = []
        self.load_clocks()
        self.show_all()

        self.timeout_id = GObject.timeout_add(1000, self._update_clocks)
    def __init__(self):
        # Translators: "New" refers to an alarm
        Clock.__init__(self, _("Alarm"), _("New"), True)

        self.liststore = Gtk.ListStore(bool, GdkPixbuf.Pixbuf, str, GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT)

        self.iconview = SelectableIconView(self.liststore, 0, 1, 2)

        contentview = ContentView(self.iconview, "alarm-symbolic", _("Select <b>New</b> to add an alarm"))
        self.add(contentview)

        self.iconview.connect("item-activated", self._on_item_activated)
        self.iconview.connect("selection-changed", self._on_selection_changed)

        self.storage = AlarmsStorage()

        self.load_alarms()
        self.show_all()

        self.timeout_id = GObject.timeout_add(1000, self._check_alarms)
    def __init__(self):
        Clock.__init__(self, _("Timer"))
        self.state = Timer.State.STOPPED
        self.timeout_id = 0

        self.notebook = Gtk.Notebook()
        self.notebook.set_show_tabs(False)
        self.notebook.set_show_border(False)
        self.add(self.notebook)

        # force the time label and the spinner to the same size
        size_group = Gtk.SizeGroup(Gtk.SizeGroupMode.VERTICAL);

        self.setup_screen = TimerSetupScreen(self, size_group)
        self.notebook.append_page(self.setup_screen, None)

        self.timer_screen = TimerScreen(self, size_group)
        self.notebook.append_page(self.timer_screen, None)

        self.alert = Alert("complete", "Ta Da !",
                           self._on_notification_activated)
    def __init__(self):
        Clock.__init__(self, _("Stopwatch"))

        self.state = Stopwatch.State.RESET

        self.timeout_id = 0

        self.start_time = 0
        self.time_diff = 0

        self.lap = 0
        self.lap_start_time = 0
        self.lap_time_diff = 0

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.add(vbox)

        grid = Gtk.Grid()
        grid.set_margin_top(12)
        grid.set_margin_bottom(48)
        grid.set_halign(Gtk.Align.CENTER)
        grid.set_row_spacing(24)
        grid.set_column_spacing(24)
        grid.set_column_homogeneous(True)
        vbox.pack_start(grid, False, False, 0)

        self.time_label = Gtk.Label()
        self.set_time_label(0, 0, 0)
        grid.attach(self.time_label, 0, 0, 2, 1)

        self.left_button = Gtk.Button()
        self.left_button.set_size_request(200, -1)
        self.left_label = Gtk.Label()
        self.left_label.set_markup(Stopwatch.BUTTON_MARKUP % (_("Start")))
        self.left_button.add(self.left_label)
        self.left_button.get_style_context().add_class("clocks-go")
        grid.attach(self.left_button, 0, 1, 1, 1)

        self.right_button = Gtk.Button()
        self.right_button.set_size_request(200, -1)
        self.right_label = Gtk.Label()
        self.right_label.set_markup(Stopwatch.BUTTON_MARKUP % (_("Reset")))
        self.right_button.add(self.right_label)
        self.right_button.set_sensitive(False)
        grid.attach(self.right_button, 1, 1, 1, 1)

        self.left_button.connect("clicked", self._on_left_button_clicked)
        self.right_button.connect("clicked", self._on_right_button_clicked)

        self.laps_store = Gtk.ListStore(str, str, str)
        cell = Gtk.CellRendererText()
        n_column = Gtk.TreeViewColumn(_("Lap"), cell, markup=0)
        n_column.set_expand(True)
        cell = Gtk.CellRendererText()
        split_column = Gtk.TreeViewColumn(_("Split"), cell, markup=1)
        split_column.set_expand(True)
        cell = Gtk.CellRendererText()
        tot_column = Gtk.TreeViewColumn(_("Total"), cell, markup=2)
        tot_column.set_expand(True)
        self.laps_view = Gtk.TreeView(self.laps_store)
        self.laps_view.get_style_context().add_class("clocks-laps")
        self.laps_view.append_column(n_column)
        self.laps_view.append_column(split_column)
        self.laps_view.append_column(tot_column)
        scroll = Gtk.ScrolledWindow()
        scroll.get_style_context().add_class("clocks-laps-scroll")
        scroll.set_shadow_type(Gtk.ShadowType.IN)
        scroll.set_vexpand(True);
        scroll.add(self.laps_view)
        vbox.pack_start(scroll, True, True, 0)