Exemple #1
0
    def currentCityLabel_set (self):
        if self.currentEntry.comments and len (self.currentEntry.comments):
            labelText = _('Selected city: %(city)s (%(comments)s)') % {'city': self.cityname_format (self.currentEntry.translated_tz), 'comments': _(self.currentEntry.comments)}
        else:
            labelText = _('Selected city: %s') % self.cityname_format (self.currentEntry.translated_tz)

        self.currentCityLabel.set_text (labelText)
Exemple #2
0
 def ntpSrvReachable (self, host):
     argv = ["/usr/sbin/ntpdate", "-d", host]
     #debug: argv = ["/bin/sleep", "10"]
     (pid, stdin, stdout, stderr) = gobject.spawn_async (argv, flags = gobject.SPAWN_STDOUT_TO_DEV_NULL | gobject.SPAWN_STDERR_TO_DEV_NULL  | gobject.SPAWN_DO_NOT_REAP_CHILD)
     self.modal_dialog = gtk.MessageDialog (parent = self.mainWindow,
             flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
             type = gtk.MESSAGE_INFO,
             buttons = gtk.BUTTONS_CANCEL,
             message_format = _("Checking whether NTP server '%s' is reachable...") % (host))
     progress_bar = gtk.ProgressBar ()
     self.modal_dialog.get_child ().add (progress_bar)
     progress_bar.show ()
     progress_bar.pulse ()
     pbar_id = gobject.timeout_add (100, self.progress_pulse, progress_bar)
     spawn_id = gobject.child_watch_add (pid, self.ntpSrvReachable_cb)
     result = self.modal_dialog.run ()
     gobject.source_remove (spawn_id)
     gobject.source_remove (pbar_id)
     md = self.modal_dialog
     self.modal_dialog = None
     md.destroy ()
     if result == gtk.RESPONSE_CANCEL or result == gtk.RESPONSE_DELETE_EVENT:
         #print "cancel, delete"
         self.modal_dialog = gtk.MessageDialog (parent = self.mainWindow,
                 flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
                 type = gtk.MESSAGE_QUESTION,
                 buttons = gtk.BUTTONS_YES_NO,
                 message_format = _("You cancelled checking whether NTP server '%s' is reachable. Do you still want your changes to take effect?") % (host))
         result = self.modal_dialog.run ()
         self.modal_dialog.destroy ()
         self.modal_dialog = None
         if result == gtk.RESPONSE_YES:
             return True
         else:
             return False
     elif result == gtk.RESPONSE_REJECT:
         #print "reject"
         self.modal_dialog = gtk.MessageDialog (parent = self.mainWindow,
             flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
             type = gtk.MESSAGE_QUESTION,
             buttons = gtk.BUTTONS_YES_NO,
             message_format = _("Host '%s' is not reachable or doesn't act as an NTP server. Do you still want your changes to take effect?") % (host))
         result = self.modal_dialog.run ()
         self.modal_dialog.destroy ()
         self.modal_dialog = None
         if result == gtk.RESPONSE_YES:
             return True
         else:
             return False
     else:
         #print "ok"
         return True
Exemple #3
0
 def ntpSrvAddButtonClicked (self, args):
     iter = self.ntpListStore.append ()
     self.ntpListStore.set_value (iter, self.NTPSERVER, _('New NTP Server'))
     path = self.ntpListStore.get_path (iter)
     self.ntpServersTreeView.set_cursor (path, self.ntpServersTreeView.get_column (self.NTPSERVER), True)
     self.ntpSrvButtonbox.set_sensitive (False)
     self.added_row_reference = gtk.TreeRowReference (self.ntpListStore, self.ntpListStore.get_path (iter))
def showhelp ():
    sys.stderr.write (_("""Usage: system-config-date [options]
Enduser options:
-h|--help        Display this help message
Reserved options:
--page <page>    Display page <page>
"""))
Exemple #5
0
    def __init__(self, zonetab, default="America/New_York",
            map='../pixmaps/map1440.png', viewportWidth = 480, tzActionLabel = gtk.Label (_("Please select the nearest city in your time zone:"))):
        gtk.VBox.__init__(self, False, 5)

        # set up members
        self.columns = Enum ("TZ", "COMMENTS", "ENTRY", "TZSORT")
        self.currentEntry = None
        self.fallbackEntry = None
        self.highlightedEntry = None
        self.zonetab = zonetab
        self.markers = {}
        self.tzActionLabel = tzActionLabel

        # set up the map canvas
        self.map_canvas_init (map, viewportWidth)

        # marker for currently selected city
        root = self.canvas.root ()
        self.currentMapX = root.add (gnomecanvas.CanvasText, text='x',
                                fill_color='red', anchor=gtk.ANCHOR_CENTER,
                                weight=pango.WEIGHT_BOLD)

        # label for currently selected city
        self.currentCityLabel_init ()

        # set up the arrows
        self.arrow_init ()

        # set up the label for the currently selected city
        self.city_label_init ("current")

        # set up list of time zones
        self.timezone_list_init (default)

        # set up the label for the highlighted city
        self.city_label_init ("highlighted")

        self.setCurrent (zonetab.findEntryByTZ (default))
        (self.lastx, self.lasty) = (0, 0)

        self.canvas.set_tooltip_text (_("Use button 2 or 3 for panning and the scrollwheel to zoom in or out."))
Exemple #6
0
    def __init__(self, dateBackend, xml):
        self.xml = xml
        self.mainWindow = self.xml.get_widget ("window")
        self.dateBackend = dateBackend

        self.modal_dialog = None

        self.flag = False
        times = scdMainWindow.dateBackend.getDate()

        # current date and time
        self.dateTimeLabel = self.xml.get_widget ("dateTimeLabel")
        self.updateDateTime ()
        gobject.timeout_add (1000, self.updateDateTime)

        self.ntpCheckButton = self.xml.get_widget ("ntp_check")
        self.ntpCheckButton.connect("clicked", self.ntpCheckButtonClicked)

        # hidden manual date and time/NTP notebook
        self.manualNtpNotebook = self.xml.get_widget ("manualNtpNotebook")
        self.manualNtpNotebook.set_show_tabs (False)

        # manual page
        self.date_frame = self.xml.get_widget ("date_frame")
        self.time_frame = self.xml.get_widget ("time_frame")

        # calendar to set date
        self.cal = self.xml.get_widget ("calendar")
        self.cal.select_month(times[1]-1, times[0])
        self.cal.select_day(times[2])

        # controls to set time
        self.hourEntry = self.xml.get_widget ("hour_entry")
        self.hourEntry.connect("changed", self.filter, 23)
        hourAdj = gtk.Adjustment(times[3], 0, 24, 1)
        self.hourEntry.set_adjustment(hourAdj)
        self.hourEntry.set_value(times[3])
        self.hourEntry.set_data ('last_value', times[3])

        self.minEntry = self.xml.get_widget ("min_entry")
        self.minEntry.connect("changed", self.filter, 59)
        minAdj = gtk.Adjustment(times[4], 0, 59, 1)
        self.minEntry.set_adjustment(minAdj)
        self.minEntry.set_value(times[4])
        self.minEntry.set_data ('last_value', times[4])

        self.secEntry = self.xml.get_widget ("sec_entry")
        self.secEntry.connect("changed", self.filter, 59)
        secAdj = gtk.Adjustment(times[5], 0, 60, 1)
        self.secEntry.set_adjustment(secAdj)
        self.secEntry.set_value(times[5])
        self.secEntry.set_data ('last_value', times[5])

        # NTP page
        self.ntpFrame = self.xml.get_widget ("ntp_frame")

        self.ntpLabel = self.xml.get_widget ("ntp_label")

        self.ntpAdvOptionsExpander = self.xml.get_widget ("ntp_adv_options_expander")
        self.ntpAdvOptionsExpanderLabel = self.xml.get_widget ("ntp_adv_options_expander_label")
        self.ntpIburstButton = self.xml.get_widget ("ntp_iburst")
        self.ntpLocalTimeSourceButton = self.xml.get_widget ("ntp_local_timesource_check")
        self.ntpBroadcastClientCheckButton = self.xml.get_widget ("ntp_broadcast_check")

        self.srv_frame = self.xml.get_widget ("srv_frame")

        self.ntpSrvButtonbox = self.xml.get_widget ("ntp_srv_buttonbox")
        self.ntpSrvAddButton = self.xml.get_widget ("ntp_srv_add_button")
        self.ntpSrvEditButton = self.xml.get_widget ("ntp_srv_edit_button")
        self.ntpSrvDelButton = self.xml.get_widget ("ntp_srv_del_button")

        self.NTPSERVER = 0

        self.added_row_reference = None

        self.ntpListStore = gtk.ListStore (gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)
        self.ntpListStore.set_sort_func (self.NTPSERVER, self.list_sort)
        self.ntpListStore.set_sort_column_id (self.NTPSERVER, gtk.SORT_ASCENDING)
        self.ntpServersTreeView = self.xml.get_widget ("ntp_servers_view")
        self.ntpServersTreeView.set_model (self.ntpListStore)
        self.ntpServersTreeView.columns_autosize ()
        self.cellrend = gtk.CellRendererText ()
        self.cellrend.set_property ("editable", True)
        self.cellrend.connect ("edited", self.cell_edited)
        self.cellrend.connect ("editing-canceled", self.cell_editing_canceled)
        col = gtk.TreeViewColumn (_("Server"), self.cellrend, text = self.NTPSERVER)
        self.ntpServersTreeView.append_column (col)

        selection = self.ntpServersTreeView.get_selection ()
        selection.set_mode (gtk.SELECTION_MULTIPLE)
        selection.connect ("changed", self.ntpServersTreeViewSelectRow)

        self.ntpSrvAddButton.connect ("clicked", self.ntpSrvAddButtonClicked)
        self.ntpSrvAddButton.set_sensitive (True)
        self.ntpSrvEditButton.connect ("clicked", self.ntpSrvEditButtonClicked)
        self.ntpSrvEditButton.set_sensitive (False)
        self.ntpSrvDelButton.connect ("clicked", self.ntpSrvDelButtonClicked)
        self.ntpSrvDelButton.set_sensitive (False)

        #Find out if ntpd is currently running.  If so, activate checkbox
        ntpStatus = scdMainWindow.dateBackend.isNtpRunning()
        if ntpStatus == 1:
            self.ntpCheckButton.set_active(True)
        elif ntpStatus == None:
            text = (_("The NTP initscript (%s) does not seem to be functioning "
                      "properly.  Try running 'rpm -V ntp' to see if the initscript "
                      "has been modified.  system-config-date will exit now.")
                      % '/etc/rc.d/init.d/ntpd')
            dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, text)

            dlg.set_title(_("Error"))
            dlg.set_default_size(100, 100)
            dlg.set_position (gtk.WIN_POS_CENTER_ON_PARENT)
            dlg.set_border_width(2)
            dlg.set_modal(True)
            rc = dlg.run()
            dlg.destroy()

            import os
            os._exit(1)

        ntpBroadcastClient = scdMainWindow.dateBackend.getNtpBroadcastClient()
        #print "ntpBroadcastClient = " + str (ntpBroadcastClient)
        self.ntpBroadcastClientCheckButton.set_active(ntpBroadcastClient)

        (self.ntpServers, self.ntpLocalTimeSource) = scdMainWindow.dateBackend.getNtpServers ()

        self.ntpLocalTimeSourceButton.set_active (self.ntpLocalTimeSource)

        self.ntpIburst = scdMainWindow.dateBackend.getIburst ()

        self.ntpIburstButton.set_active (self.ntpIburst)

        self.ntpListStore.clear ()
        for ntpServer in self.ntpServers:
            iter = self.ntpListStore.append ()
            self.ntpListStore.set_value (iter, self.NTPSERVER, ntpServer)

        self.ntpCheckButtonClicked ()

        self.hourEntry.connect("changed", self.changed)
        self.minEntry.connect("changed", self.changed)
        self.secEntry.connect("changed", self.changed)
Exemple #7
0
 def cityname_format (self, name):
     componentsReversed = reversed (name.split ('/'))
     return _(', ').join (componentsReversed)
Exemple #8
0
    def timezone_list_init (self, default):
        root = self.canvas.root ()
        self.treeStore = gtk.TreeStore (gobject.TYPE_STRING,
                                        gobject.TYPE_STRING,
                                        gobject.TYPE_PYOBJECT,
                                        gobject.TYPE_STRING)
        self.treeStoreRoots = {}
        nonGeoTzItem = 10

        for entry in self.zonetab.getEntries ():
            if entry.tz[0:4] != 'Etc/':
                try:
                    tz_root_str, tz_node_str = \
                            entry.translated_tz.rsplit ('/', 1)
                except ValueError:
                    print >>sys.stderr, "Couldn't split timezone name fields:\nUntranslated TZ: %s\nTranslated TZ: %s" % (entry.tz, entry.translated_tz)
                    raise
                tzsortprefix = "0/"
            else:
                tz_root_str = _('Non-geographic timezones')
                tz_node_str = entry.translated_tz.split("/", 1)[1]
                tzsortprefix = "%u/" % nonGeoTzItem
                nonGeoTzItem += 1
            tz_root_str_split = tz_root_str.split ('/')
            for depth in xrange (len (tz_root_str_split)):
                root_joined_str = '/'.join (tz_root_str_split[:depth])
                root_joined_str_1 = '/'.join (tz_root_str_split[:depth+1])
                if depth == 0:
                    riter = None
                else:
                    riter = self.treeStoreRoots[root_joined_str]
                if not self.treeStoreRoots.has_key (root_joined_str_1):
                    iter = self.treeStore.append (riter)
                    self.treeStore.set_value (iter, self.columns.TZ, tz_root_str_split [depth])
                    self.treeStore.set_value (iter, self.columns.COMMENTS, None)
                    self.treeStore.set_value (iter, self.columns.ENTRY, None)
                    self.treeStore.set_value (iter, self.columns.TZSORT, tzsortprefix + tz_root_str_split [depth])
                    self.treeStoreRoots[root_joined_str_1] = iter

            iter = self.treeStore.append (self.treeStoreRoots[tz_root_str])
            self.treeStore.set_value (iter, self.columns.TZ, tz_node_str)
            if entry.comments:
                self.treeStore.set_value (iter, self.columns.COMMENTS,
                                         _(entry.comments))
            else:
                self.treeStore.set_value (iter, self.columns.COMMENTS, "")
            self.treeStore.set_value (iter, self.columns.ENTRY, entry)
            self.treeStore.set_value (iter, self.columns.TZSORT, (tzsortprefix + tz_node_str).replace ('+', '+1').replace ('-', '-0'))

            if entry.long != None and entry.lat != None:
                x, y = self.map2canvas (entry.lat, entry.long)
                marker = root.add (gnomecanvas.CanvasText, x=x, y=y,
                                text=u'\u00B7', fill_color='yellow',
                                anchor=gtk.ANCHOR_CENTER,
                                weight=pango.WEIGHT_BOLD)
                self.markers[entry.tz] = marker

            if entry.tz == default:
                self.currentEntry = entry
            if entry.tz == "America/New York":
                #In case the /etc/sysconfig/clock is messed up, use New York as default
                self.fallbackEntry = entry

        self.treeStore.set_sort_column_id (self.columns.TZSORT, gtk.SORT_ASCENDING)

        self.treeView = gtk.TreeView (self.treeStore)
        selection = self.treeView.get_selection ()
        selection.connect ("changed", self.selectionChanged)
        #self.treeView.connect ('button_press_event', self.selectionChanged_wrap)
        self.treeView.set_property ("headers-visible", False)
        col = gtk.TreeViewColumn (None, gtk.CellRendererText (), text=0)
        self.treeView.append_column (col)
        col = gtk.TreeViewColumn (None, gtk.CellRendererText (), text=1)
        self.treeView.append_column (col)

        sw = gtk.ScrolledWindow ()
        sw.add (self.treeView)
        sw.set_shadow_type (gtk.SHADOW_IN)
        self.pack_start (sw, True, True)
Reserved options:
--page <page>    Display page <page>
"""))

def useGuiMode(page):
    import scdMainWindow

    scdMainWindow.scdMainWindow(page).stand_alone()

if __name__ == "__main__":
    signal.signal (signal.SIGINT, signal.SIG_DFL)

    try:
        opts, rest = getopt.gnu_getopt(sys.argv[1:], "h", ["help"])
    except getopt.GetoptError, g:
        sys.stderr.write (_("option(s) '%s' not recognized\n") % g.opt)
        showhelp ()
        sys.exit (1)

    if rest:
        sys.stderr.write (_("option(s) '%s' not recognized\n") % ' '.join (rest))
        showhelp ()
        sys.exit (1)

    page = 0
    for opt, value in opts:
        if opt == '-h' or opt == '--help':
            showhelp ()
            sys.exit (0)
        if opt == "--page":
            page = int(value)