class TimeChooser(SettingsWidget): bind_dir = None def __init__(self, label, size_group=None, dep_key=None, tooltip=""): super(TimeChooser, self).__init__(dep_key=dep_key) self.label = SettingsLabel(label) self.content_widget = TimeChooserButton() self.pack_start(self.label, False, False, 0) self.pack_end(self.content_widget, False, False, 0) self.set_tooltip_text(tooltip) if size_group: self.add_to_size_group(size_group) def on_time_changed(self, *args): time = self.content_widget.get_time() self.set_value({"h": time.hour, "m": time.minute, "s": time.second}) def on_setting_changed(self, *args): time = self.get_value() self.content_widget.set_time((time["h"], time["m"], time["s"])) def connect_widget_handlers(self, *args): self.content_widget.connect("time-changed", self.on_time_changed)
def __init__(self, label, size_group=None, dep_key=None, tooltip=""): super(TimeChooser, self).__init__(dep_key=dep_key) self.label = SettingsLabel(label) self.content_widget = TimeChooserButton() self.pack_start(self.label, False, False, 0) self.pack_end(self.content_widget, False, False, 0) self.set_tooltip_text(tooltip) if size_group: self.add_to_size_group(size_group)
def on_module_selected(self): if not self.loaded: print("Loading Calendar module") page = SettingsPage() self.sidePage.add_widget(page) settings = page.add_section(_("Date and Time")) widget = SettingsWidget() self.tz_map = TimezoneMap.TimezoneMap.new() self.tz_map.set_size_request(-1, 205) widget.pack_start(self.tz_map, True, True, 0) settings.add_row(widget) self.tz_selector = TimeZoneSelector() settings.add_row(self.tz_selector) self.ntp_switch = Switch(_("Network time")) settings.add_row(self.ntp_switch) self.set_time_row = SettingsWidget() self.revealer = SettingsRevealer() settings.add_reveal_row(self.set_time_row, revealer=self.revealer) self.set_time_row.pack_start( Gtk.Label(_("Manually set date and time")), False, False, 0) self.date_chooser = DateChooserButton(True) self.time_chooser = TimeChooserButton(True) self.set_time_row.pack_end(self.time_chooser, False, False, 0) self.set_time_row.pack_end(self.date_chooser, False, False, 0) self.date_chooser.connect('date-changed', self.set_date_and_time) self.time_chooser.connect('time-changed', self.set_date_and_time) settings = page.add_section(_("Format")) settings.add_row( GSettingsSwitch(_("Use 24h clock"), "org.cinnamon.desktop.interface", "clock-use-24h")) settings.add_row( GSettingsSwitch(_("Display the date"), "org.cinnamon.desktop.interface", "clock-show-date")) settings.add_row( GSettingsSwitch(_("Display seconds"), "org.cinnamon.desktop.interface", "clock-show-seconds")) days = [[7, _("Use locale default")], [0, _("Sunday")], [1, _("Monday")]] settings.add_row( GSettingsComboBox(_("First day of week"), "org.cinnamon.desktop.interface", "first-day-of-week", days, valtype=int)) if os.path.exists('/usr/sbin/ntpd'): print('using csd backend') self.proxy_handler = CsdDBusProxyHandler(self._on_proxy_ready) else: print('using systemd backend') self.proxy_handler = SytemdDBusProxyHandler( self._on_proxy_ready) self.sync_24h_to_gnome()
class Module: name = "calendar" comment = _("Manage date and time settings") category = "prefs" def __init__(self, content_box): keywords = _("time, date, calendar, format, network, sync") self.sidePage = SidePage(_("Date & Time"), "cs-date-time", keywords, content_box, 560, module=self) def on_module_selected(self): if not self.loaded: print("Loading Calendar module") page = SettingsPage() self.sidePage.add_widget(page) settings = page.add_section(_("Date and Time")) widget = SettingsWidget() self.tz_map = TimezoneMap.TimezoneMap.new() self.tz_map.set_size_request(-1, 205) widget.pack_start(self.tz_map, True, True, 0) settings.add_row(widget) self.tz_selector = TimeZoneSelector() settings.add_row(self.tz_selector) self.ntp_switch = Switch(_("Network time")) settings.add_row(self.ntp_switch) self.set_time_row = SettingsWidget() self.revealer = SettingsRevealer() settings.add_reveal_row(self.set_time_row, revealer=self.revealer) self.set_time_row.pack_start( Gtk.Label(_("Manually set date and time")), False, False, 0) self.date_chooser = DateChooserButton(True) self.time_chooser = TimeChooserButton(True) self.set_time_row.pack_end(self.time_chooser, False, False, 0) self.set_time_row.pack_end(self.date_chooser, False, False, 0) self.date_chooser.connect('date-changed', self.set_date_and_time) self.time_chooser.connect('time-changed', self.set_date_and_time) settings = page.add_section(_("Format")) settings.add_row( GSettingsSwitch(_("Use 24h clock"), "org.cinnamon.desktop.interface", "clock-use-24h")) settings.add_row( GSettingsSwitch(_("Display the date"), "org.cinnamon.desktop.interface", "clock-show-date")) settings.add_row( GSettingsSwitch(_("Display seconds"), "org.cinnamon.desktop.interface", "clock-show-seconds")) days = [[7, _("Use locale default")], [0, _("Sunday")], [1, _("Monday")]] settings.add_row( GSettingsComboBox(_("First day of week"), "org.cinnamon.desktop.interface", "first-day-of-week", days, valtype=int)) if os.path.exists('/usr/sbin/ntpd'): print('using csd backend') self.proxy_handler = CsdDBusProxyHandler(self._on_proxy_ready) else: print('using systemd backend') self.proxy_handler = SytemdDBusProxyHandler( self._on_proxy_ready) self.sync_24h_to_gnome() def _on_proxy_ready(self): self.zone = self.proxy_handler.get_timezone() if self.zone is None: self.tz_map.set_sensitive(False) self.tz_selector.set_sensitive(False) else: self.tz_map.set_timezone(self.zone) self.tz_map.connect('location-changed', self.on_map_location_changed) self.tz_selector.set_timezone(self.zone) self.tz_selector.connect('timezone-changed', self.on_selector_location_changed) can_use_ntp, is_using_ntp = self.proxy_handler.get_ntp() self.ntp_switch.set_sensitive(can_use_ntp) self.ntp_switch.content_widget.set_active(is_using_ntp) self.ntp_switch.content_widget.connect('notify::active', self.on_ntp_changed) self.revealer.set_reveal_child(not is_using_ntp) def sync_24h_to_gnome(self): # Firefox (and maybe other apps?) check gnome's 24h setting only. It'd be # messy to change it in firefox since our setting is a boolean and their's # is a string, so just update the gnome preference when the user changes ours. self.our_settings = Gio.Settings( schema_id="org.cinnamon.desktop.interface") self.gnome_settings = Gio.Settings( schema_id="org.gnome.desktop.interface") self.our_settings.connect("changed::clock-use-24h", self.update_gnome_24h) self.update_gnome_24h() def update_gnome_24h(self, settings=None, pspec=None): if self.our_settings.get_boolean("clock-use-24h"): self.gnome_settings.set_string("clock-format", "24h") else: self.gnome_settings.set_string("clock-format", "12h") def on_map_location_changed(self, *args): zone = self.tz_map.get_location().props.zone if zone == self.zone: return self.tz_selector.set_timezone(zone) self.set_timezone(zone) def on_selector_location_changed(self, *args): zone = self.tz_selector.get_timezone() if zone == self.zone: return self.set_timezone(zone) self.tz_map.set_timezone(zone) def set_timezone(self, zone): self.zone = zone self.proxy_handler.set_timezone(zone) def on_ntp_changed(self, *args): active = self.ntp_switch.content_widget.get_active() self.revealer.set_reveal_child(not active) self.proxy_handler.set_ntp(active) def set_date_and_time(self, *args): unaware = datetime.datetime.combine(self.date_chooser.get_date(), self.time_chooser.get_time()) tz = pytz.timezone(self.zone) self.datetime = tz.localize(unaware) seconds = int((self.datetime - datetime.datetime( 1970, 1, 1, tzinfo=datetime.timezone.utc)).total_seconds()) self.proxy_handler.set_time(seconds)