diff options
33 files changed, 1654 insertions, 4418 deletions
@@ -10,7 +10,10 @@ Jean Privat <privat@lirmm.fr> Martin Willemoes Hansen <mwh@sysrq.dk> Zygmunt Krynicki <zyga@www.suxx.pl> -Technical Author: -================= +Technical Author +================ Sean Wheller <sean@inwords.co.za> +Icons +===== +Jakub Steiner <jimmac@novell.com> diff --git a/SoftwareProperties/SoftwareProperties.py b/SoftwareProperties/SoftwareProperties.py index aa3114f0..237ffbdd 100644 --- a/SoftwareProperties/SoftwareProperties.py +++ b/SoftwareProperties/SoftwareProperties.py @@ -57,6 +57,7 @@ CONF_MAP = { class SoftwareProperties(SimpleGladeApp): def __init__(self, datadir=None, options=None, parent=None): + gtk.window_set_default_icon_name("software-properties") # FIXME: some saner way is needed here if datadir == None: diff --git a/SoftwareProperties/aptsources.py b/SoftwareProperties/aptsources.py index 417563d4..133e9b3d 100644 --- a/SoftwareProperties/aptsources.py +++ b/SoftwareProperties/aptsources.py @@ -155,6 +155,8 @@ class SourceEntry: return # URI self.uri = string.strip(pieces[1]) + if len(self.uri) < 1: + self.invalid = True # distro and components (optional) # Directory or distro self.dist = string.strip(pieces[2]) diff --git a/SoftwareProperties/dialog_add.py b/SoftwareProperties/dialog_add.py index fbf741c5..b5fbe07f 100644 --- a/SoftwareProperties/dialog_add.py +++ b/SoftwareProperties/dialog_add.py @@ -172,13 +172,19 @@ class dialog_add: self.selected_comps = [] vbox = self.gladexml.get_widget("vbox_comps") vbox.foreach(self.get_enabled_comps) + # check if we are in 'add' or 'edit' mode if self.source_entry: # 'edit' - ode - if not self.custom: - entry = self._make_source_entry() - if entry: - self.sourceslist.list[self.source_entry_index] = entry + # check if there are no selected components + if len(self.selected_comps) < 1: + # remove the source + self.sourceslist.remove(self.source_entry) + else: + if not self.custom: + entry = self._make_source_entry() + if entry: + self.sourceslist.list[self.source_entry_index] = entry else: # 'add' mode self.sourceslist.add(self.selected.type, diff --git a/SoftwareProperties/dialog_edit.py b/SoftwareProperties/dialog_edit.py index 05cbddba..59788915 100644 --- a/SoftwareProperties/dialog_edit.py +++ b/SoftwareProperties/dialog_edit.py @@ -41,6 +41,7 @@ class dialog_edit: self.gladexml = gtk.glade.XML("%s/glade/SoftwarePropertiesDialogs.glade" % datadir) self.main = self.gladexml.get_widget("dialog_edit") self.main.set_transient_for(parent) + self.button_edit_ok = self.gladexml.get_widget("button_edit_ok") # type combo_type = self.gladexml.get_widget("combobox_type") @@ -70,29 +71,61 @@ class dialog_edit: entry = self.gladexml.get_widget("entry_comment") entry.set_text(source_entry.comment) + # finally set the signal so that the check function is not tiggered + # during initialisation + self.gladexml.signal_connect("on_entry_source_line_changed", + self.check_line) + + def check_line(self, *args): + """Check for a valid apt line and set the sensitiveness of the + button 'add' accordingly""" + line = self.get_line() + if line == False: + self.button_edit_ok.set_sensitive(False) + return + source_entry = aptsources.SourceEntry(line) + if (source_entry.invalid == True or source_entry.disabled == True): + self.button_edit_ok.set_sensitive(False) + else: + self.button_edit_ok.set_sensitive(True) + + def get_line(self): + """Collect all values from the entries and create an apt line""" + combo_type = self.gladexml.get_widget("combobox_type") + if combo_type.get_active() == 0: + line = "deb" + else: + line = "deb-src" + + entry = self.gladexml.get_widget("entry_uri") + text = entry.get_text() + if len(text) < 1 or text.find(" ") != -1 or text.find("#") != -1: + return False + line = line + " " + entry.get_text() + + entry = self.gladexml.get_widget("entry_dist") + text = entry.get_text() + if len(text) < 1 or text.find(" ") != -1 or text.find("#") != -1: + return False + line = line + " " + entry.get_text() + + entry = self.gladexml.get_widget("entry_comps") + text = entry.get_text() + if len(text) < 1 or text.find("#") != -1: + return False + line = line + " " + entry.get_text() + + entry = self.gladexml.get_widget("entry_comment") + if entry.get_text() != "": + line = line + " #" + entry.get_text() + "\n" + else: + line = line + "\n" + return line + def run(self): res = self.main.run() if res == gtk.RESPONSE_OK: - # get values - combo_type = self.gladexml.get_widget("combobox_type") - if combo_type.get_active() == 0: - line = "deb" - else: - line = "deb-src" - entry = self.gladexml.get_widget("entry_uri") - line = line + " " + entry.get_text() - - entry = self.gladexml.get_widget("entry_dist") - line = line + " " + entry.get_text() - - entry = self.gladexml.get_widget("entry_comps") - line = line + " " + entry.get_text() - - entry = self.gladexml.get_widget("entry_comment") - if entry.get_text() != "": - line = line + " #" + entry.get_text() + "\n" - else: - line = line + "\n" + line = self.get_line() # change repository index = self.sourceslist.list.index(self.source_entry) diff --git a/UpdateManager/Common/utils.py b/UpdateManager/Common/utils.py index 17c62212..099cbfed 100644 --- a/UpdateManager/Common/utils.py +++ b/UpdateManager/Common/utils.py @@ -15,6 +15,8 @@ def error(parent, summary, message): type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_CLOSE) d.set_markup("<big><b>%s</b></big>\n\n%s" % (summary, message)) + d.realize() + d.window.set_functions(gtk.gdk.FUNC_MOVE) d.set_title("") res = d.run() d.destroy() diff --git a/UpdateManager/UpdateManager.py b/UpdateManager/UpdateManager.py index 6c06ca3c..6ac83197 100644 --- a/UpdateManager/UpdateManager.py +++ b/UpdateManager/UpdateManager.py @@ -216,17 +216,13 @@ class UpdateList: class UpdateManager(SimpleGladeApp): def __init__(self, datadir): - icons = gtk.icon_theme_get_default() - try: - logo=icons.load_icon("update-manager", 48, 0) - gtk.window_set_default_icon_list(logo) - except: - pass + gtk.window_set_default_icon_name("update-manager") self.datadir = datadir SimpleGladeApp.__init__(self, datadir+"glade/UpdateManager.glade", None, domain="update-manager") + self.image_logo.set_from_icon_name("update-manager", gtk.ICON_SIZE_DIALOG) self.window_main.set_sensitive(False) self.window_main.grab_focus() self.button_close.grab_focus() @@ -413,6 +409,8 @@ class UpdateManager(SimpleGladeApp): if name in self.packages: self.packages.remove(name) self.dl_size -= pkg.packageSize + self.label_downsize.set_markup(_("Download size: %s" % \ + apt_pkg.SizeToStr(self.dl_size))) if len(self.packages) == 0: self.button_install.set_sensitive(False) @@ -421,6 +419,8 @@ class UpdateManager(SimpleGladeApp): if name not in self.packages: self.packages.append(name) self.dl_size += pkg.packageSize + self.label_downsize.set_markup(_("Download size: %s" % \ + apt_pkg.SizeToStr(self.dl_size))) if len(self.packages) > 0: self.button_install.set_sensitive(True) diff --git a/data/SoftwareProperties.glade b/data/SoftwareProperties.glade index 57f7542d..58584826 100644 --- a/data/SoftwareProperties.glade +++ b/data/SoftwareProperties.glade @@ -13,7 +13,6 @@ <property name="modal">False</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> - <property name="icon">update-manager.png</property> <property name="decorated">True</property> <property name="skip_taskbar_hint">False</property> <property name="skip_pager_hint">False</property> diff --git a/data/SoftwarePropertiesDialogs.glade b/data/SoftwarePropertiesDialogs.glade index 581cc565..549a9c7c 100644 --- a/data/SoftwarePropertiesDialogs.glade +++ b/data/SoftwarePropertiesDialogs.glade @@ -187,7 +187,7 @@ <child> <widget class="GtkLabel" id="label32"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Sections</b></property> + <property name="label" translatable="yes"><b>Components</b></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -590,7 +590,7 @@ The APT line contains the type, location and sections of a channel, for example </child> <child> - <widget class="GtkButton" id="button8"> + <widget class="GtkButton" id="button_edit_ok"> <property name="visible">True</property> <property name="can_default">True</property> <property name="has_default">True</property> @@ -745,6 +745,7 @@ The APT line contains the type, location and sections of a channel, for example <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">True</property> + <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:14:17 GMT"/> </widget> <packing> <property name="left_attach">1</property> @@ -756,27 +757,6 @@ The APT line contains the type, location and sections of a channel, for example </child> <child> - <widget class="GtkEntry" id="entry_dist"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="y_options"></property> - </packing> - </child> - - <child> <widget class="GtkEntry" id="entry_comps"> <property name="visible">True</property> <property name="can_focus">True</property> @@ -787,6 +767,7 @@ The APT line contains the type, location and sections of a channel, for example <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">True</property> + <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:15:14 GMT"/> </widget> <packing> <property name="left_attach">1</property> @@ -854,6 +835,7 @@ Source</property> <property name="has_frame">True</property> <property name="invisible_char">*</property> <property name="activates_default">True</property> + <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:15:19 GMT"/> </widget> <packing> <property name="left_attach">1</property> @@ -863,6 +845,28 @@ Source</property> <property name="y_options"></property> </packing> </child> + + <child> + <widget class="GtkEntry" id="entry_dist"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">True</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">*</property> + <property name="activates_default">True</property> + <signal name="changed" handler="on_entry_source_line_changed" last_modification_time="Mon, 17 Apr 2006 14:14:17 GMT"/> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="y_options"></property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> diff --git a/data/UpdateManager.glade b/data/UpdateManager.glade index 525b329c..01660613 100644 --- a/data/UpdateManager.glade +++ b/data/UpdateManager.glade @@ -12,7 +12,6 @@ <property name="default_height">600</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> - <property name="icon">update-manager.png</property> <property name="decorated">True</property> <property name="skip_taskbar_hint">False</property> <property name="skip_pager_hint">False</property> @@ -42,9 +41,8 @@ <property name="spacing">12</property> <child> - <widget class="GtkImage" id="image4"> + <widget class="GtkImage" id="image_logo"> <property name="visible">True</property> - <property name="pixbuf">update-manager-logo.png</property> <property name="xalign">0.5</property> <property name="yalign">0</property> <property name="xpad">0</property> diff --git a/data/gnome-software-properties.glade b/data/gnome-software-properties.glade deleted file mode 100644 index 66b7aa80..00000000 --- a/data/gnome-software-properties.glade +++ /dev/null @@ -1,2161 +0,0 @@ -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - -<glade-interface> - -<widget class="GtkDialog" id="SoftwareConfigurator"> - <property name="border_width">6</property> - <property name="height_request">400</property> - <property name="title" translatable="yes">Software Preferences</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="default_width">400</property> - <property name="default_height">500</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="icon">update-manager.png</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_CENTER</property> - <property name="focus_on_map">True</property> - <property name="has_separator">False</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="vbox_main"> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button_cancel"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button_ok"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-5</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox1"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label24"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Software Sources</b></property> - <property name="use_underline">True</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="mnemonic_widget">sourceslist</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox5"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label25"> - <property name="visible">True</property> - <property name="label"></property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="sourcesscroll"> - <property name="border_width">2</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="sourceslist"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - <property name="rules_hint">True</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - <signal name="row_activated" handler="on_sourceslist_row_activated" last_modification_time="Mon, 29 Nov 2004 10:55:04 GMT"/> - <signal name="cursor_changed" handler="on_sourceslist_cursor_changed" last_modification_time="Thu, 03 Feb 2005 14:42:21 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVButtonBox" id="vbuttonbox1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_START</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkButton" id="button_add"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-add</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_add_clicked" last_modification_time="Thu, 03 Feb 2005 10:40:58 GMT"/> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button_add_cdrom"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_add_cdrom_clicked" last_modification_time="Fri, 11 Mar 2005 16:19:38 GMT"/> - - <child> - <widget class="GtkAlignment" id="alignment3"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox29"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image4"> - <property name="visible">True</property> - <property name="stock">gtk-cdrom</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label64"> - <property name="visible">True</property> - <property name="label" translatable="yes">Add _CD</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button_remove"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-remove</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_remove_clicked" last_modification_time="Thu, 03 Feb 2005 10:41:09 GMT"/> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button_edit"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-edit</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_edit_clicked" last_modification_time="Thu, 03 Feb 2005 10:44:36 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox12"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">18</property> - - <child> - <widget class="GtkHButtonBox" id="hbuttonbox6"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_DEFAULT_STYLE</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkButton" id="button_authentication"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_authentication_clicked" last_modification_time="Wed, 05 Jan 2005 21:20:59 GMT"/> - - <child> - <widget class="GtkAlignment" id="alignment2"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox27"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="stock">gtk-dialog-authentication</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label60"> - <property name="visible">True</property> - <property name="label" translatable="yes">A_uthentication</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button_settings"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Settings</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_settings_clicked" last_modification_time="Tue, 22 Mar 2005 10:11:17 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -<widget class="GtkDialog" id="dialog_add"> - <property name="border_width">6</property> - <property name="title" translatable="yes">Edit Repository...</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">True</property> - <property name="resizable">False</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">True</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="vbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="hbuttonbox2"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button_custom"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Custom</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - <signal name="clicked" handler="on_button_custom_clicked" last_modification_time="Mon, 29 Nov 2004 11:06:40 GMT"/> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button2"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button3"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-5</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox3"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - - <child> - <widget class="GtkLabel" id="label31"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Repository</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="combobox_what"> - <property name="visible">True</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - <signal name="changed" handler="on_combobox_what_changed" last_modification_time="Thu, 25 Nov 2004 13:35:11 GMT"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label32"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Components</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox_comps"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <placeholder/> - </child> - - <child> - <placeholder/> - </child> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <placeholder/> - </child> - </widget> - </child> -</widget> - -<widget class="GtkDialog" id="dialog_add_custom"> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="title" translatable="yes"></property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">True</property> - <property name="resizable">False</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">True</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="dialog-vbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area2"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button5"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button6"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-5</property> - - <child> - <widget class="GtkAlignment" id="alignment1"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - - <child> - <widget class="GtkHBox" id="hbox10"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - - <child> - <widget class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="stock">gtk-add</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label35"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Add Repository</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - </child> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox7"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - - <child> - <widget class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-dialog-question</property> - <property name="icon_size">6</property> - <property name="xalign">0.5</property> - <property name="yalign">0</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox5"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - - <child> - <widget class="GtkLabel" id="label33"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes"><big><b>Enter the complete APT line of the repository that you want to add</b></big> - -The APT line contains the type, location and content of a repository, for example <i>"deb http://ftp.debian.org sarge main"</i>. You can find a detailed description of the syntax in the documentation.</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">True</property> - <property name="selectable">True</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox8"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">10</property> - - <child> - <widget class="GtkLabel" id="label34"> - <property name="visible">True</property> - <property name="label" translatable="yes">APT line:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="entry_source_line"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -<widget class="GtkDialog" id="dialog_edit"> - <property name="border_width">6</property> - <property name="title" translatable="yes">Edit Repository...</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">True</property> - <property name="default_width">400</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">True</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="vbox6"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="hbuttonbox3"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button7"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button8"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="can_focus">True</property> - <property name="has_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-5</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkTable" id="table1"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="n_rows">7</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">6</property> - <property name="column_spacing">12</property> - - <child> - <widget class="GtkLabel" id="label36"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Type:</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">1</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label38"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>URI:</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">1</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label39"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Distribution:</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">1</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label40"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Sections:</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">1</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="entry_uri"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="entry_dist"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">4</property> - <property name="bottom_attach">5</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="entry_comps"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">5</property> - <property name="bottom_attach">6</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="combobox_type"> - <property name="visible">True</property> - <property name="items" translatable="yes">Binary -Source</property> - <property name="add_tearoffs">False</property> - <property name="focus_on_click">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options">fill</property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label61"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Comment:</b></property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">1</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="entry_comment"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">True</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">6</property> - <property name="bottom_attach">7</property> - <property name="y_options"></property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -<widget class="GtkDialog" id="dialog_apt_key"> - <property name="border_width">6</property> - <property name="title" translatable="yes">Authentication</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">True</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="vbox7"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="hbuttonbox4"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button9"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-close</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-7</property> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox8"> - <property name="border_width">6</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label41"> - <property name="visible">True</property> - <property name="label" translatable="yes"><big><b>Authentication keys</b></big> - -You can add and remove authentication keys in this dialog. A key makes it possible to verify the integrity of the software you download.</property> - <property name="use_underline">True</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">True</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox11"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="label42"> - <property name="visible">True</property> - <property name="label"></property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="treeview_apt_key"> - <property name="height_request">300</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - <property name="rules_hint">True</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - <signal name="row_activated" handler="on_sourceslist_row_activated" last_modification_time="Mon, 29 Nov 2004 10:55:04 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHButtonBox" id="hbuttonbox5"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkButton" id="button_apt_key_update"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Restore the default keys shipped with the distribution. This will not change user installed keys.</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Restore default keys</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_apt_key_update_clicked" last_modification_time="Mon, 31 Jan 2005 17:40:33 GMT"/> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button10"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Remove the selected key from the trusted keyring.</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-remove</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_key_remove_clicked" last_modification_time="Wed, 05 Jan 2005 13:40:25 GMT"/> - </widget> - </child> - - <child> - <widget class="GtkButton" id="button11"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Add a new key file to the trusted keyring. Make sure that you received the key over a secure channel and that you trust the owner. </property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-add</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_button_key_add_clicked" last_modification_time="Wed, 05 Jan 2005 13:40:19 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -<widget class="GtkDialog" id="dialog_settings"> - <property name="title" translatable="yes">Settings</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">True</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">True</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <property name="has_separator">True</property> - - <child internal-child="vbox"> - <widget class="GtkVBox" id="dialog-vbox3"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child internal-child="action_area"> - <widget class="GtkHButtonBox" id="dialog-action_area3"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - - <child> - <widget class="GtkButton" id="button_preferences_close"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-close</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-7</property> - <signal name="clicked" handler="on_button_preferences_close_clicked" last_modification_time="Wed, 19 Jan 2005 14:54:37 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox9"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">18</property> - - <child> - <widget class="GtkVBox" id="vbox15"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label62"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>User Interface</b></property> - <property name="use_underline">True</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox28"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="label63"> - <property name="visible">True</property> - <property name="label"> </property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox16"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkCheckButton" id="checkbutton_show_disabled"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Show disabled software sources</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_checkbutton_show_disabled_toggled" last_modification_time="Thu, 03 Feb 2005 14:09:09 GMT"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox13"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label45"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Internet Updates</b></property> - <property name="use_underline">True</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox26"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="label59"> - <property name="visible">True</property> - <property name="label"> </property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox12"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkCheckButton" id="checkbutton_autoupdate"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Automatically check for software _updates.</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox_autoupdate"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkHBox" id="hbox22"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="label55"> - <property name="visible">True</property> - <property name="label" translatable="yes">Update interval in days: </property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkSpinButton" id="spinbutton_autoupdate"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">0</property> - <property name="numeric">False</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">1 1 100 1 10 10</property> - <signal name="changed" handler="on_spinbutton_update_interval_changed" last_modification_time="Wed, 19 Jan 2005 11:45:09 GMT"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="checkbutton_autodownload"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Download upgradable packages</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <signal name="toggled" handler="on_checkbutton_download_upgradable_toggled" last_modification_time="Wed, 19 Jan 2005 11:33:21 GMT"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox14"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label56"> - <property name="visible">True</property> - <property name="label" translatable="yes"><b>Temporary files</b></property> - <property name="use_underline">True</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox23"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkLabel" id="label57"> - <property name="visible">True</property> - <property name="label"> </property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox10"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkCheckButton" id="checkbutton_autoclean"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Automatically clean _temporary packages files</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox_autoclean"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkHBox" id="hbox25"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label58"> - <property name="visible">True</property> - <property name="label" translatable="yes">Clean interval in days: </property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkSpinButton" id="spinbutton_autoclean"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">0</property> - <property name="numeric">False</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">1 1 365 1 10 10</property> - <signal name="changed" handler="on_spinbutton_autoclean_interval_changed" last_modification_time="Wed, 19 Jan 2005 11:45:16 GMT"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="checkbutton_max_size"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Set _maximum size for the package cache</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox_max_size"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox30"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label65"> - <property name="visible">True</property> - <property name="label" translatable="yes">Maximum size in MB:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkSpinButton" id="spinbutton_max_size"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">0</property> - <property name="numeric">True</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">500 1 9999 1 10 10</property> - <signal name="changed" handler="on_spinbutton_max_size_changed" last_modification_time="Mon, 21 Mar 2005 17:33:58 GMT"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkCheckButton" id="checkbutton_max_age"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Delete _old packages in the package cache</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVBox" id="vbox_max_age"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkHBox" id="hbox31"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - - <child> - <widget class="GtkLabel" id="label66"> - <property name="visible">True</property> - <property name="label" translatable="yes">Maximum age in days:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkSpinButton" id="spinbutton_max_age"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="climb_rate">1</property> - <property name="digits">0</property> - <property name="numeric">False</property> - <property name="update_policy">GTK_UPDATE_ALWAYS</property> - <property name="snap_to_ticks">False</property> - <property name="wrap">False</property> - <property name="adjustment">30 2 365 1 10 10</property> - <signal name="changed" handler="on_spinbutton_max_age_changed" last_modification_time="Mon, 21 Mar 2005 17:34:11 GMT"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <placeholder/> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> -</widget> - -</glade-interface> diff --git a/data/icons/16x16/apps/update-manager.png b/data/icons/16x16/apps/update-manager.png Binary files differnew file mode 100644 index 00000000..58f19c68 --- /dev/null +++ b/data/icons/16x16/apps/update-manager.png diff --git a/data/icons/22x22/apps/update-manager.png b/data/icons/22x22/apps/update-manager.png Binary files differnew file mode 100644 index 00000000..5f7a362b --- /dev/null +++ b/data/icons/22x22/apps/update-manager.png diff --git a/data/icons/24x24/apps/update-manager.png b/data/icons/24x24/apps/update-manager.png Binary files differnew file mode 100644 index 00000000..b49ea26f --- /dev/null +++ b/data/icons/24x24/apps/update-manager.png diff --git a/data/update-manager.png b/data/icons/48x48/apps/software-properties.png Binary files differindex 739be699..739be699 100644 --- a/data/update-manager.png +++ b/data/icons/48x48/apps/software-properties.png diff --git a/data/icons/scalable/apps/update-manager.svg b/data/icons/scalable/apps/update-manager.svg new file mode 100644 index 00000000..834464ab --- /dev/null +++ b/data/icons/scalable/apps/update-manager.svg @@ -0,0 +1,1519 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + sodipodi:docname="system-software-update.svg" + sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/apps" + inkscape:version="0.43+devel" + sodipodi:version="0.32" + id="svg3440" + height="48px" + width="48px" + inkscape:export-filename="/home/jimmac/Desktop/big-software-update.png" + inkscape:export-xdpi="360.00000" + inkscape:export-ydpi="360.00000" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs3"> + <linearGradient + id="linearGradient264"> + <stop + id="stop265" + offset="0.0000000" + style="stop-color:#000000;stop-opacity:0.50299400;" /> + <stop + id="stop266" + offset="1.0000000" + style="stop-color:#000000;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + y2="31.490198" + x2="28.783722" + y1="29.943159" + x1="28.632685" + gradientTransform="matrix(0.810817,0.000000,0.000000,1.233324,1.118717,-4.642761)" + gradientUnits="userSpaceOnUse" + id="linearGradient263" + xlink:href="#linearGradient264" + inkscape:collect="always" /> + <linearGradient + id="linearGradient218"> + <stop + id="stop219" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:0.44910181;" /> + <stop + id="stop222" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="22.227985" + x2="38.105118" + y1="22.227985" + x1="36.373066" + gradientTransform="matrix(1.138691,0.000000,0.000000,1.732051,-19.29901,-4.517761)" + id="linearGradient217" + xlink:href="#linearGradient218" + inkscape:collect="always" /> + <linearGradient + id="linearGradient204"> + <stop + id="stop205" + offset="0.0000000" + style="stop-color:#7a7a7a;stop-opacity:1.0000000;" /> + <stop + id="stop207" + offset="0.19801980" + style="stop-color:#c5c5c5;stop-opacity:1.0000000;" /> + <stop + id="stop208" + offset="0.59900987" + style="stop-color:#626262;stop-opacity:1.0000000;" /> + <stop + id="stop206" + offset="1.0000000" + style="stop-color:#888888;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="43.915466" + x2="23.100046" + y1="38.296745" + x1="23.100046" + gradientTransform="matrix(0.983801,0.000000,0.000000,1.016466,1.118717,-3.017762)" + id="linearGradient203" + xlink:href="#linearGradient204" + inkscape:collect="always" /> + <linearGradient + id="linearGradient178"> + <stop + id="stop179" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:0.0000000;" /> + <stop + id="stop180" + offset="0.10827128" + style="stop-color:#ffffff;stop-opacity:0.70658684;" /> + <stop + id="stop181" + offset="0.92053902" + style="stop-color:#ffffff;stop-opacity:0.70658684;" /> + <stop + id="stop182" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + y2="117.82710" + x2="15.343062" + y1="117.82710" + x1="1.6422368" + gradientTransform="matrix(2.740165,0.000000,0.000000,0.147685,1.118717,21.16806)" + gradientUnits="userSpaceOnUse" + id="linearGradient177" + xlink:href="#linearGradient178" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="372.57819" + x2="5.0856376" + y1="372.57819" + x1="0.61210024" + gradientTransform="matrix(8.168597,0.000000,0.000000,0.228621,1.118717,-39.93197)" + id="linearGradient271" + xlink:href="#linearGradient272" + inkscape:collect="always" /> + <linearGradient + id="linearGradient272"> + <stop + id="stop273" + offset="0.0000000" + style="stop-color:#474747;stop-opacity:0.0000000;" /> + <stop + id="stop275" + offset="0.10000000" + style="stop-color:#474747;stop-opacity:1.0000000;" /> + <stop + id="stop276" + offset="0.89999998" + style="stop-color:#474747;stop-opacity:1.0000000;" /> + <stop + id="stop274" + offset="1.0000000" + style="stop-color:#474747;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + y2="372.57819" + x2="5.0856376" + y1="372.57819" + x1="0.61210024" + gradientTransform="matrix(8.168597,0.000000,0.000000,0.221210,1.118717,-41.93917)" + gradientUnits="userSpaceOnUse" + id="linearGradient283" + xlink:href="#linearGradient272" + inkscape:collect="always" /> + <linearGradient + id="linearGradient158"> + <stop + id="stop159" + offset="0.0000000" + style="stop-color:#686868;stop-opacity:0.0000000;" /> + <stop + id="stop162" + offset="0.23762377" + style="stop-color:#686868;stop-opacity:1.0000000;" /> + <stop + id="stop163" + offset="0.78109992" + style="stop-color:#686868;stop-opacity:1.0000000;" /> + <stop + id="stop160" + offset="1.0000000" + style="stop-color:#686868;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + y2="117.82710" + x2="15.343062" + y1="117.82710" + x1="1.6422368" + gradientTransform="matrix(2.740165,0.000000,0.000000,0.364942,1.118717,-4.017762)" + gradientUnits="userSpaceOnUse" + id="linearGradient175" + xlink:href="#linearGradient158" + inkscape:collect="always" /> + <linearGradient + id="linearGradient6377"> + <stop + id="stop6379" + offset="0.0000000" + style="stop-color:#e02b2b;stop-opacity:1.0000000;" /> + <stop + id="stop6381" + offset="1.0000000" + style="stop-color:#e02b2b;stop-opacity:0.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient6361"> + <stop + style="stop-color:#143b68;stop-opacity:1;" + offset="0" + id="stop6363" /> + <stop + style="stop-color:#143b68;stop-opacity:0;" + offset="1" + id="stop6365" /> + </linearGradient> + <linearGradient + id="linearGradient4750"> + <stop + id="stop4752" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4758" + offset="0.37931034" + style="stop-color:#fefefe;stop-opacity:1.0000000;" /> + <stop + id="stop4754" + offset="1.0000000" + style="stop-color:#1d1d1d;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + id="linearGradient4350" + inkscape:collect="always"> + <stop + id="stop4352" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4354" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient4126"> + <stop + id="stop4128" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop4130" + offset="1.0000000" + style="stop-color:#ffffff;stop-opacity:0.16494845;" /> + </linearGradient> + <linearGradient + id="linearGradient4114" + inkscape:collect="always"> + <stop + id="stop4116" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop4118" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3962"> + <stop + id="stop3964" + offset="0.0000000" + style="stop-color:#d3e9ff;stop-opacity:1.0000000;" /> + <stop + id="stop4134" + offset="0.15517241" + style="stop-color:#d3e9ff;stop-opacity:1.0000000;" /> + <stop + id="stop4346" + offset="0.75000000" + style="stop-color:#4074ae;stop-opacity:1.0000000;" /> + <stop + id="stop3966" + offset="1.0000000" + style="stop-color:#36486c;stop-opacity:1.0000000;" /> + </linearGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + r="29.993349" + fy="15.716079" + fx="18.247644" + cy="15.716079" + cx="18.247644" + gradientTransform="matrix(0.674967,0.000000,0.000000,0.674981,7.864706,3.589839)" + id="radialGradient3968" + xlink:href="#linearGradient3962" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + r="12.289036" + fy="63.965388" + fx="15.115514" + cy="63.965388" + cx="15.115514" + gradientTransform="scale(1.643990,0.608276)" + id="radialGradient4120" + xlink:href="#linearGradient4114" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + r="43.526714" + fy="12.142302" + fx="15.601279" + cy="12.142302" + cx="15.601279" + gradientTransform="matrix(0.674967,0.000000,0.000000,0.674981,7.864706,3.589839)" + id="radialGradient4132" + xlink:href="#linearGradient4126" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + r="32.664848" + fy="10.476453" + fx="11.826907" + cy="10.476453" + cx="11.826907" + gradientTransform="scale(1.179536,0.847791)" + id="radialGradient4356" + xlink:href="#linearGradient4350" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + r="40.692665" + fy="17.810213" + fx="18.934305" + cy="17.486208" + cx="18.633780" + gradientTransform="scale(1.036822,0.964486)" + id="radialGradient4756" + xlink:href="#linearGradient4750" + inkscape:collect="always" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6261" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6263" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6265" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6267" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6269" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6271" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6273" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6275" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6277" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6279" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6281" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6283" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6285" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6287" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6289" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6291" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6293" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6295" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6297" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6299" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6301" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6303" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6305" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6307" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6309" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6311" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6313" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6315" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6317" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6319" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6321" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6323" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6325" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6327" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6329" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6331" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6333" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6335" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6337" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6339" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6341" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6343" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6345" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6347" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6349" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6351" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6353" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6355" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6357" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4750" + id="radialGradient6359" + gradientUnits="userSpaceOnUse" + gradientTransform="scale(1.036822,0.964486)" + cx="18.633780" + cy="17.486208" + fx="18.934305" + fy="17.810213" + r="40.692665" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6361" + id="linearGradient6367" + gradientTransform="matrix(0.950176,0.000000,0.000000,1.250550,-2.628603,-7.378111)" + x1="12.190513" + y1="12.062389" + x2="17.850138" + y2="31.674618" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6377" + id="linearGradient6375" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.950176,-5.364674e-17,7.060588e-17,-1.250550,51.70714,46.10410)" + x1="9.7568795" + y1="12.524661" + x2="17.850138" + y2="31.674618" /> + </defs> + <sodipodi:namedview + inkscape:window-y="138" + inkscape:window-x="124" + inkscape:window-height="648" + inkscape:window-width="770" + inkscape:document-units="px" + inkscape:grid-bbox="true" + showgrid="false" + inkscape:current-layer="layer1" + inkscape:cy="21.704468" + inkscape:cx="32.806152" + inkscape:zoom="1" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="0.16470588" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + inkscape:showpageshadow="false" /> + <metadata + id="metadata4"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Software Update</dc:title> + <dc:creator> + <cc:Agent> + <dc:title>Jakub Steiner</dc:title> + </cc:Agent> + </dc:creator> + <dc:contributor> + <cc:Agent> + <dc:title /> + </cc:Agent> + </dc:contributor> + <cc:license + rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" /> + <dc:source>http://jimmac.musichall.cz</dc:source> + <dc:subject> + <rdf:Bag> + <rdf:li>network update</rdf:li> + <rdf:li>software</rdf:li> + <rdf:li>synchronize</rdf:li> + </rdf:Bag> + </dc:subject> + </cc:Work> + <cc:License + rdf:about="http://creativecommons.org/licenses/by-sa/2.0/"> + <cc:permits + rdf:resource="http://web.resource.org/cc/Reproduction" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/Distribution" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Notice" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/Attribution" /> + <cc:permits + rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> + <cc:requires + rdf:resource="http://web.resource.org/cc/ShareAlike" /> + </cc:License> + </rdf:RDF> + </metadata> + <g + inkscape:groupmode="layer" + inkscape:label="Layer 1" + id="layer1"> + <rect + y="36.982246" + x="6.1187172" + height="4.0000000" + width="36.542522" + id="rect69" + style="color:#000000;fill:url(#linearGradient175);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <path + transform="matrix(0.827148,0.000000,0.000000,1.028347,4.083229,-1.249916)" + d="M 45.052803 38.908627 A 20.203051 7.4751287 0 1 1 4.6467018,38.908627 A 20.203051 7.4751287 0 1 1 45.052803 38.908627 z" + sodipodi:ry="7.4751287" + sodipodi:rx="20.203051" + sodipodi:cy="38.908627" + sodipodi:cx="24.849752" + id="path4112" + style="fill:url(#radialGradient4120);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000" + sodipodi:type="arc" /> + <rect + y="39.984222" + x="6.1187172" + height="0.98959237" + width="36.542522" + id="rect255" + style="color:#000000;fill:url(#linearGradient283);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <rect + y="36.636272" + x="6.1187172" + height="1.0227470" + width="36.542522" + id="rect250" + style="color:#000000;fill:url(#linearGradient271);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <rect + y="37.759968" + x="6.1187172" + height="1.6187184" + width="36.542522" + id="rect176" + style="color:#000000;fill:url(#linearGradient177);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <path + id="rect183" + d="M 22.584707,26.450993 C 21.801233,26.450993 21.178457,27.073767 21.178457,27.857243 L 21.178457,35.450993 L 18.115957,35.450993 C 17.332483,35.450993 16.709707,36.073767 16.709707,36.857243 L 16.709707,40.575993 C 16.709707,41.359467 17.332483,41.982246 18.115957,41.982243 L 30.303457,41.982243 C 31.086931,41.982243 31.709707,41.359464 31.709707,40.575993 L 31.709707,36.857243 C 31.709707,36.073769 31.086931,35.450993 30.303457,35.450993 L 27.709707,35.450993 L 27.709707,27.857243 C 27.709707,27.073769 27.086932,26.450993 26.303457,26.450993 L 22.584707,26.450993 z " + style="color:#000000;fill:url(#linearGradient203);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#434343;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <rect + ry="0.29955584" + rx="0.29955584" + y="32.482246" + x="22.118719" + height="3.0000000" + width="1.9722718" + id="rect209" + style="color:#000000;fill:url(#linearGradient217);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <path + id="path3214" + d="M 37.536463,19.441939 C 37.536463,26.670720 31.676269,32.530847 24.448482,32.530847 C 17.220034,32.530847 11.360171,26.670654 11.360171,19.441939 C 11.360171,12.213491 17.220034,6.3539621 24.448482,6.3539621 C 31.676269,6.3539621 37.536463,12.213491 37.536463,19.441939 L 37.536463,19.441939 z " + style="fill:url(#radialGradient3968);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#39396c;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;stroke-width:2.0000000" /> + <path + transform="matrix(0.564236,0.000000,0.000000,0.674974,14.53810,3.589842)" + d="M 30.708637 15.271057 A 12.929953 9.2934036 0 1 1 4.8487320,15.271057 A 12.929953 9.2934036 0 1 1 30.708637 15.271057 z" + sodipodi:ry="9.2934036" + sodipodi:rx="12.929953" + sodipodi:cy="15.271057" + sodipodi:cx="17.778685" + id="path4348" + style="opacity:0.42159382;fill:url(#radialGradient4356);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="cccc" + id="path258" + d="M 27.212467,32.185368 L 21.681217,32.185368 C 21.681217,32.185368 21.681217,33.872868 21.681217,34.357243 C 22.228092,32.575993 27.212467,32.185368 27.212467,32.185368 z " + style="color:#000000;fill:url(#linearGradient263);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <g + transform="matrix(0.663075,0.000000,0.000000,0.663075,7.946434,3.747052)" + style="fill:#000000;fill-opacity:0.71345031;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" + id="g4136"> + <g + id="g4138"> + <image + id="image4140" + transform="translate(23.74020,6.740200)" + href="62169F0D.png" + height="35.000000" + width="23.000000" + style="opacity:0.75000000" /> + <g + id="g4142"> + <path + id="path4144" + d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z " /> + </g> + </g> + <g + id="g4146"> + <image + id="image4148" + transform="translate(24.74020,7.740200)" + href="62169F0E.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000" /> + <g + id="g4150"> + <path + id="path4152" + d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000" /> + </g> + </g> + <g + id="g4154"> + <image + id="image4156" + transform="translate(17.74020,3.740200)" + href="62169F0F.png" + height="10.000000" + width="12.000000" + style="opacity:0.75000000" /> + <g + id="g4158"> + <path + id="path4160" + d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000" /> + </g> + </g> + <g + id="g4162"> + <image + id="image4164" + transform="translate(26.74020,10.74020)" + href="62169F10.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000" /> + <g + id="g4166"> + <path + id="path4168" + d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900" /> + </g> + </g> + <g + id="g4170"> + <image + id="image4172" + transform="translate(27.74020,9.740200)" + href="62169F11.png" + height="7.0000000" + width="5.0000000" + style="opacity:0.75000000" /> + <g + id="g4174"> + <path + id="path4176" + d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000" /> + </g> + </g> + <g + id="g4178"> + <image + id="image4180" + transform="translate(3.740200,6.740200)" + href="62169F12.png" + height="37.000000" + width="21.000000" + style="opacity:0.75000000" /> + <g + id="g4182"> + <path + id="path4184" + d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000" /> + </g> + </g> + <g + id="g4186"> + <image + id="image4188" + transform="translate(15.74020,7.740200)" + href="62169F13.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000" /> + <g + id="g4190"> + <path + id="path4192" + d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000" /> + </g> + </g> + <g + id="g4194"> + <image + id="image4196" + transform="translate(12.74020,5.740200)" + href="62169F14.png" + height="7.0000000" + width="9.0000000" + style="opacity:0.75000000" /> + <g + id="g4198"> + <path + id="path4200" + d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000" /> + </g> + </g> + <g + id="g4202"> + <g + id="g4204" + style="opacity:0.75000000"> + <path + d="" + id="path4206" /> + </g> + <g + id="g4208"> + <path + d="" + id="path4210" /> + </g> + </g> + <g + id="g4212"> + <g + id="g4214" + style="opacity:0.75000000"> + <path + d="" + id="path4216" /> + </g> + <g + id="g4218"> + <path + d="" + id="path4220" /> + </g> + </g> + <g + id="g4222"> + <image + id="image4224" + transform="translate(14.74020,3.740200)" + href="2D44FCEC.png" + height="6.0000000" + width="8.0000000" + style="opacity:0.75000000" /> + <g + id="g4226"> + <path + id="path4228" + d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000" /> + </g> + </g> + <g + id="g4230"> + <image + id="image4232" + transform="translate(16.74020,12.74020)" + href="2D44FCED.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000" /> + <g + id="g4234"> + <path + id="path4236" + d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500" /> + </g> + </g> + </g> + <g + style="fill:#ffffff;fill-opacity:0.95906430" + id="g236" + transform="translate(9.098961e-2,-3.064632)"> + <rect + ry="0.50000000" + rx="0.50000000" + y="40.000000" + x="20.000000" + height="1.0000000" + width="10.000000" + id="rect226" + style="color:#000000;fill-rule:nonzero;stroke:none;stroke-width:1.1400000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" /> + <path + transform="matrix(2.058824,0.000000,0.000000,2.058824,-19.49265,-43.10846)" + d="M 19.000000 40.625000 A 0.53125000 0.53125000 0 1 1 17.937500,40.625000 A 0.53125000 0.53125000 0 1 1 19.000000 40.625000 z" + sodipodi:ry="0.53125000" + sodipodi:rx="0.53125000" + sodipodi:cy="40.625000" + sodipodi:cx="18.468750" + id="path235" + style="color:#000000;fill-rule:nonzero;stroke:none;stroke-width:1.1400000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible" + sodipodi:type="arc" /> + </g> + <g + transform="matrix(0.663075,0.000000,0.000000,0.663075,7.810068,3.610686)" + style="color:#000000;fill:url(#radialGradient6261);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0179454;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3216"> + <g + style="color:#000000;fill:url(#radialGradient6263);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3218"> + <image + id="image3220" + transform="translate(23.74020,6.740200)" + href="62169F0D.png" + height="35.000000" + width="23.000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6265);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6267);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3222"> + <path + style="color:#000000;fill:url(#radialGradient6269);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3224" + d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z " /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6271);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3226"> + <image + id="image3228" + transform="translate(24.74020,7.740200)" + href="62169F0E.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6273);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6275);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3230"> + <path + style="color:#000000;fill:url(#radialGradient6277);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3232" + d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6279);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3234"> + <image + id="image3236" + transform="translate(17.74020,3.740200)" + href="62169F0F.png" + height="10.000000" + width="12.000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6281);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6283);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3238"> + <path + style="color:#000000;fill:url(#radialGradient6285);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3240" + d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6287);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3242"> + <image + id="image3244" + transform="translate(26.74020,10.74020)" + href="62169F10.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6289);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6291);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3246"> + <path + style="color:#000000;fill:url(#radialGradient6293);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3248" + d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6295);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3250"> + <image + id="image3252" + transform="translate(27.74020,9.740200)" + href="62169F11.png" + height="7.0000000" + width="5.0000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6297);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6299);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3254"> + <path + style="color:#000000;fill:url(#radialGradient6301);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3256" + d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6303);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3258"> + <image + id="image3260" + transform="translate(3.740200,6.740200)" + href="62169F12.png" + height="37.000000" + width="21.000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6305);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6307);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3262"> + <path + style="color:#000000;fill:url(#radialGradient6309);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3264" + d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6311);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3266"> + <image + id="image3268" + transform="translate(15.74020,7.740200)" + href="62169F13.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6313);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6315);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3270"> + <path + style="color:#000000;fill:url(#radialGradient6317);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3272" + d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6319);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3274"> + <image + id="image3276" + transform="translate(12.74020,5.740200)" + href="62169F14.png" + height="7.0000000" + width="9.0000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6321);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6323);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3278"> + <path + style="color:#000000;fill:url(#radialGradient6325);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3280" + d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6327);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3282"> + <g + id="g3284" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6329);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"> + <path + id="path3286" + style="color:#000000;fill:url(#radialGradient6331);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + d="" /> + </g> + <g + style="color:#000000;fill:url(#radialGradient6333);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3288"> + <path + style="color:#000000;fill:url(#radialGradient6335);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3290" + d="" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6337);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3292"> + <g + id="g3294" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6339);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"> + <path + id="path3296" + style="color:#000000;fill:url(#radialGradient6341);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + d="" /> + </g> + <g + style="color:#000000;fill:url(#radialGradient6343);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3298"> + <path + style="color:#000000;fill:url(#radialGradient6345);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3300" + d="" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6347);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3302"> + <image + id="image3304" + transform="translate(14.74020,3.740200)" + href="2D44FCEC.png" + height="6.0000000" + width="8.0000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6349);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6351);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3306"> + <path + style="color:#000000;fill:url(#radialGradient6353);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3308" + d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000" /> + </g> + </g> + <g + style="color:#000000;fill:url(#radialGradient6355);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3310"> + <image + id="image3312" + transform="translate(16.74020,12.74020)" + href="2D44FCED.png" + height="5.0000000" + width="5.0000000" + style="opacity:0.75000000;color:#000000;fill:url(#radialGradient6357);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" /> + <g + style="color:#000000;fill:url(#radialGradient6359);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="g3314"> + <path + style="color:#000000;fill:url(#radialGradient4756);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" + id="path3316" + d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500" /> + </g> + </g> + </g> + <path + id="path4122" + d="M 36.871774,19.441963 C 36.871774,26.303627 31.309195,31.866145 24.448475,31.866145 C 17.587125,31.866145 12.024859,26.303564 12.024859,19.441963 C 12.024859,12.580614 17.587125,7.0186651 24.448475,7.0186651 C 31.309195,7.0186651 36.871774,12.580614 36.871774,19.441963 L 36.871774,19.441963 z " + style="fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient4132);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000" /> + <path + id="path5902" + d="M 5.3935749,10.941178 C 0.84819341,23.232818 9.4520542,34.433912 23.052696,34.433912 C 14.482897,34.433912 7.5108693,27.461952 7.5108693,18.892087 C 7.5108693,12.874995 11.030621,7.3515951 16.481428,4.8040746 L 0.53977192,8.6930816 L 5.3935749,10.941178 z " + style="fill:url(#linearGradient6367);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" /> + <path + style="fill:url(#linearGradient6375);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000" + d="M 43.684948,27.784836 C 48.230330,15.493195 39.626469,4.2921045 26.025828,4.2921045 C 34.595627,4.2921045 41.567654,11.264062 41.567654,19.833926 C 41.567654,25.851018 38.047903,31.374420 32.597096,33.921941 L 48.538752,30.032933 L 43.684948,27.784836 z " + id="path6369" /> + </g> +</svg> diff --git a/data/gnome-software-properties.desktop.in b/data/software-properties.desktop.in index 20f9d847..c125b4f7 100644 --- a/data/gnome-software-properties.desktop.in +++ b/data/software-properties.desktop.in @@ -2,8 +2,8 @@ _Name=Software Properties _GenericName=Software Properties _Comment=Configure software channels and internet updates -Exec=gksu /usr/bin/gnome-software-properties -Icon=update-manager +Exec=gksu /usr/bin/software-properties +Icon=software-properties Terminal=false X-MultipleArgs=false Type=Application diff --git a/data/update-manager-logo.png b/data/update-manager-logo.png Binary files differdeleted file mode 100644 index 77c2c51c..00000000 --- a/data/update-manager-logo.png +++ /dev/null diff --git a/data/update-manager.desktop.in b/data/update-manager.desktop.in index 0116c78b..84e1e608 100644 --- a/data/update-manager.desktop.in +++ b/data/update-manager.desktop.in @@ -3,7 +3,7 @@ _Name=Update Manager _GenericName=Update Manager _Comment=Show and install available updates Exec=gksu /usr/bin/update-manager -Icon=update-manager.png +Icon=update-manager Terminal=false Type=Application Encoding=UTF-8 diff --git a/debian/changelog b/debian/changelog index 586c1077..2484a06d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,12 @@ update-manager (0.42.2ubuntu13) dapper; urgency=low * UpdateManager/UpdateManager.py: - fix in the get_changelog logic (ubuntu: #40058) - correct a error in the changelog parser (ubuntu: #40060) + - fix download size reporting (ubuntu: #39579) + * debian/rules: added dh_iconcache + * setup.py: install the icons into the hicolor icon schema + (thanks to Sebastian Heinlein) - -- + -- Michael Vogt <michael.vogt@ubuntu.com> Wed, 19 Apr 2006 14:44:14 +0200 update-manager (0.42.2ubuntu12) dapper; urgency=low diff --git a/debian/rules b/debian/rules index c8991957..44224c6f 100755 --- a/debian/rules +++ b/debian/rules @@ -66,6 +66,7 @@ binary-arch: build install dh_scrollkeeper dh_installmime dh_desktop + dh_iconcache dh_gconf dh_installexamples # dh_install diff --git a/po/POTFILES.in b/po/POTFILES.in index ed7c079a..c74e2d16 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -17,8 +17,8 @@ data/SoftwareProperties.glade data/SoftwarePropertiesDialogs.glade data/update-manager.desktop.in data/update-manager.schemas.in -data/gnome-software-properties.desktop.in +data/software-properties.desktop.in [type: gettext/rfc822deb] channels/Ubuntu.info.in [type: gettext/rfc822deb] channels/Debian.info.in [type: python] update-manager -[type: python] gnome-software-properties +[type: python] software-properties @@ -23,6 +23,19 @@ for filepath in glob.glob("po/mo/*/LC_MESSAGES/*.mo"): targetpath = os.path.dirname(os.path.join("share/locale",lang)) I18NFILES.append((targetpath, [filepath])) +ICONS = [] +for size in glob.glob("data/icons/*"): + for category in glob.glob("%s/*" % size): + icons = [] + for icon in glob.glob("%s/*" % category): + icons.append(icon) + ICONS.append(("share/icons/hicolor/%s/%s" % \ + (os.path.basename(size), \ + os.path.basename(category)), \ + icons)) +print ICONS + + os.system("intltool-merge -d po data/update-manager.schemas.in"\ " build/update-manager.schemas") @@ -42,29 +55,24 @@ setup(name='update-manager', 'UpdateManager.Common' ], scripts=[ - 'gnome-software-properties', + 'software-properties', 'update-manager' ], data_files=[ ('share/update-manager/glade', - glob.glob("data/*.glade")+ - ["data/update-manager-logo.png", - "data/update-manager.png"] + glob.glob("data/*.glade") ), ('share/update-manager/channels', glob.glob("channels/*") ), ('share/applications', ["data/update-manager.desktop", - "data/gnome-software-properties.desktop"] + "data/software-properties.desktop"] ), ('share/gconf/schemas', glob.glob("build/*.schemas") ), - ('share/pixmaps', - ["data/update-manager.png"] - ), - ] + I18NFILES + HELPFILES, + ] + I18NFILES + HELPFILES + ICONS, ) diff --git a/gnome-software-properties b/software-properties index 2e1d5da6..2e1d5da6 100644 --- a/gnome-software-properties +++ b/software-properties diff --git a/src/Makefile.am b/src/Makefile.am deleted file mode 100644 index 62ea2e68..00000000 --- a/src/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -exedir = $(prefix)/bin - -exe_SCRIPTS = update-manager - -properties_modules_DATA = utils.py -properties_modulesdir = $(datadir)/update-manager/python - - -EXTRA_DIST = update-manager.in \ - utils.py diff --git a/src/aptsources.py.in b/src/aptsources.py.in deleted file mode 100644 index 7badd141..00000000 --- a/src/aptsources.py.in +++ /dev/null @@ -1,442 +0,0 @@ -# aptsource.py.in - parse sources.list -# -# Copyright (c) 2004 Canonical -# 2004 Michiel Sikkes -# -# Author: Michiel Sikkes <michiel@eyesopened.nl> -# Michael Vogt <mvo@debian.org> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import string -import gettext -import re - -# actual source.list entries -class SourceEntry: - - # works mostely like split but takes [] into account - def mysplit(self, line): - line = string.strip(line) - pieces = [] - tmp = "" - # we are inside a [..] block - p_found = False - space_found = False - for i in range(len(line)): - if line[i] == "[": - p_found=True - tmp += line[i] - elif line[i] == "]": - p_found=False - tmp += line[i] - elif space_found and not line[i].isspace(): # we skip one or more space - space_found = False - pieces.append(tmp) - tmp = line[i] - elif line[i].isspace() and not p_found: # found a whitespace - space_found = True - else: - tmp += line[i] - # append last piece - if len(tmp) > 0: - pieces.append(tmp) - return pieces - - - # parse a given source line and split it into the fields we need - def parse(self,line): - line = string.strip(self.line) - #print line - # check if the source is enabled/disabled - if line == "" or line == "#": - self.invalid = True - return - if line[0] == "#": - self.disabled = True - pieces = string.split(line[1:]) - # if it looks not like a disabled deb line return - if not (pieces[0] == "deb" or pieces[0] == "deb-src"): - self.invalid = True - return - else: - line = line[1:] - # check for another "#" in the line (this is treated as a comment) - i = line.find("#") - if i > 0: - self.comment = line[i+1:] - line = line[:i] - # source is ok, split it and see what we have - pieces = self.mysplit(line) - # Type, deb or deb-src - self.type = string.strip(pieces[0]) - # URI - self.uri = string.strip(pieces[1]) - # distro and components (optional) - # Directory or distro - self.dist = string.strip(pieces[2]) - if len(pieces) > 3: - # List of components - self.comps = pieces[3:] - else: - self.comps = [] - - #print self.__dict__ - - - # set enabled/disabled - def set_enabled(self, new_value): - self.disabled = not new_value - # enable, remove all "#" from the start of the line - if new_value == True: - i=0 - self.line = string.lstrip(self.line) - while self.line[i] == "#": - i += 1 - self.line = self.line[i:] - else: - # disabled, add a "#" - if string.strip(self.line)[0] != "#": - self.line = "#" + self.line - - - def __init__(self, line): - self.invalid = False - self.disabled = False - self.type = "" - self.uri = "" - self.dist = "" - self.comps = [] - self.comment = "" - self.line = line - self.parse(line) - - - def str(self): - return self.line - - -def uniq(s): - """ simple (and not efficient) way to return uniq list """ - u = [] - for x in s: - if x not in u: - u.append(x) - return u - - -# the SourceList file as a class -class SourcesList: - def __init__(self, file): - self.list = [] # of Type SourceEntries - self.load(file) - - def is_mirror(self, add_uri, orig_uri): - """check if the given add_url is idential or a mirror of orig_uri - e.g. add_uri = archive.ubuntu.com - orig_uri = de.archive.ubuntu.com - -> True - """ - # remove traling spaces and "/" - add_uri = add_uri.rstrip("/ ") - orig_uri = orig_uri.rstrip("/ ") - # uri is identical - if add_uri == orig_uri: - #print "Identical" - return True - # add uri is a master site and orig_uri has the from "XX.mastersite" - # (e.g. de.archive.ubuntu.com) - try: - add_srv = add_uri.split("//")[1] - orig_srv = orig_uri.split("//")[1] - #print "%s == %s " % (add_srv, orig_srv) - except IndexError: # ok, somethings wrong here - #print "IndexError" - return False - if add_srv == orig_srv[3:]: - #print "Mirror" - return True - return False - - def add(self, type, uri, dist, comps, comment="", pos=-1): - # if there is a repo with the same (type, uri, dist) just add the - # components - for i in self.list: - if i.type == type and self.is_mirror(uri,i.uri) and i.dist == dist: - comps = uniq(i.comps + comps) - # preserver mirror - uri = i.uri - # set to the old position and preserve comment - comment = i.comment - pos = self.list.index(i) - self.list.remove(i) - line = "%s %s %s" % (type,uri,dist) - for c in comps: - line = line + " " + c; - if comment != "": - line = "%s #%s\n" %(line,comment) - line = line + "\n" - self.list.insert(pos, SourceEntry(line)) - - def remove(self, source_entry): - self.list.remove(source_entry) - - def load(self,file): - f = open(file, "r") - lines = f.readlines() - for line in lines: - source = SourceEntry(line) - self.list.append(source) - f.close() - - def save(self,file): - f=open(file,"w") - for source in self.list: - f.write(source.str()) - f.close() - - -# templates for the add dialog -class SourceEntryTemplate(SourceEntry): - def __init__(self,a_type,uri,dist,description,comps): - self.comps = [] - self.comps_descriptions = [] - self.type = a_type - self.uri = uri - self.dist = dist - self.description = description - self.comps = comps - -class SourceCompTemplate: - def __init__(self, name, description, on_by_default): - self.name = name - self.description = description - self.on_by_default = on_by_default - -class SourceEntryTemplates: - def __init__(self): - _ = gettext.gettext - self.templates = [] - - # ubuntu components templates - ubuntu_comps = [] - ubuntu_comps.append(SourceCompTemplate("main",_("Officially supported"),True)) - ubuntu_comps.append(SourceCompTemplate("restricted",_("Restricted copyright"),True)) - ubuntu_comps.append(SourceCompTemplate("universe",_("Community maintained (Universe)"),False)) - ubuntu_comps.append(SourceCompTemplate("multiverse",_("Non-free (Multiverse)"),False)) - - # ubuntu distro - self.templates.append(SourceEntryTemplate("deb", - "http://archive.ubuntu.com/ubuntu/", - "breezy", - "Ubuntu 5.10 \"Breezy Badger\"", - ubuntu_comps )) - self.templates.append(SourceEntryTemplate("deb", - "http://security.ubuntu.com/ubuntu/", - "breezy-security", - _("Ubuntu 5.10 Security Updates"), - ubuntu_comps)) - self.templates.append(SourceEntryTemplate("deb", - "http://archive.ubuntu.com/ubuntu/", - "breezy-updates", - _("Ubuntu 5.10 Updates"), - ubuntu_comps)) - - -# matcher class to make a source entry look nice -# lots of predefined matchers to make it i18n/gettext friendly -class SourceEntryMatcher: - class MatchType: - def __init__(self, a_type,a_descr): - self.type = a_type - self.description = a_descr - - class MatchDist: - def __init__(self,a_uri,a_dist, a_descr,l_comps, l_comps_descr): - self.uri = a_uri - self.dist = a_dist - self.description = a_descr - self.comps = l_comps - self.comps_descriptions = l_comps_descr - - def __init__(self): - _ = gettext.gettext - self.type_list = [] - self.type_list.append(self.MatchType("^deb$",_("Binary"))) - self.type_list.append(self.MatchType("^deb-src$",_("Source"))) - - self.dist_list = [] - - ubuntu_comps = ["^main$","^restricted$","^universe$","^multiverse$"] - ubuntu_comps_descr = [_("Officially supported"), - _("Restricted copyright"), - _("Community maintained (Universe)"), - _("Non-free (Multiverse)")] - # CDs - self.dist_list.append(self.MatchDist("cdrom:\[Ubuntu.*4.10", - ".*", - _("CD") + - " Ubuntu 4.10 \"Warty Warthog\"", - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist("cdrom:\[Ubuntu.*5.04", - ".*", - _("CD") + - " Ubuntu 5.04 \"Hoary Hedgehog\"", - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist("cdrom:\[Ubuntu.*5.10", - ".*", - _("CD") + - " Ubuntu 5.10 \"Breezy Badger\"", - ubuntu_comps, ubuntu_comps_descr)) - - # URIs - # normal archive - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^warty$", - "Ubuntu 4.10 \"Warty Warthog\"", - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^hoary$", - "Ubuntu 5.04 \"Hoary Hedgehog\"", - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^breezy$", - "Ubuntu 5.10 \"Breezy Badger\"", - ubuntu_comps, ubuntu_comps_descr)) - # updates - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^hoary-updates$", - _("Ubuntu 5.04 Updates"), - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^breezy-updates$", - _("Ubuntu 5.10 Updates"), - ubuntu_comps, ubuntu_comps_descr)) - - # security - self.dist_list.append(self.MatchDist(".*security.ubuntu.com/ubuntu", - "^warty-security$", - _("Ubuntu 4.10 Security Updates"), - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist(".*security.ubuntu.com/ubuntu", - "^hoary-security$", - _("Ubuntu 5.04 Security Updates"), - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist(".*security.ubuntu.com/ubuntu", - "^breezy-security$", - _("Ubuntu 5.10 Security Updates"), - ubuntu_comps, ubuntu_comps_descr)) - # security (normal archive uri) - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^warty-security$", - _("Ubuntu 4.10 Security Updates"), - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^hoary-security$", - _("Ubuntu 5.04 Security Updates"), - ubuntu_comps, ubuntu_comps_descr)) - self.dist_list.append(self.MatchDist(".*archive.ubuntu.com/ubuntu", - "^breezy-security$", - _("Ubuntu 5.10 Security Updates"), - ubuntu_comps, ubuntu_comps_descr)) - - - # DEBIAN - debian_comps = ["^main$","^contrib$","^non-free$","^non-US$"] - debian_comps_descr = [_("Officially supported"), - _("Contributed software"), - _("Non-free software"), - _("US export restricted software") - ] - - # dists by name - self.dist_list.append(self.MatchDist(".*debian.org/debian", - "^sarge$", - "Debian 3.1 \"Sarge\"", - debian_comps, debian_comps_descr)) - self.dist_list.append(self.MatchDist(".*debian.org/debian", - "^woody$", - "Debian 3.0 \"Woody\"", - debian_comps, debian_comps_descr)) - # securtiy - self.dist_list.append(self.MatchDist(".*security.debian.org", - "^stable.*$", - _("Debian Stable Security Updates"), - debian_comps, debian_comps_descr)) - # dists by status - self.dist_list.append(self.MatchDist(".*debian.org/debian", - "^stable$", - "Debian Stable", - debian_comps, debian_comps_descr)) - self.dist_list.append(self.MatchDist(".*debian.org/debian", - "^testing$", - "Debian Testing", - debian_comps, debian_comps_descr)) - self.dist_list.append(self.MatchDist(".*debian.org/debian", - "^unstable$", - "Debian Unstable \"Sid\"", - debian_comps, debian_comps_descr)) - - # non-us - self.dist_list.append(self.MatchDist(".*debian.org/debian-non-US", - "^stable.*$", - "Debian Non-US (Stable)", - debian_comps, debian_comps_descr)) - self.dist_list.append(self.MatchDist(".*debian.org/debian-non-US", - "^testing.*$", - "Debian Non-US (Testing)", - debian_comps, debian_comps_descr)) - self.dist_list.append(self.MatchDist(".*debian.org/debian-non-US", - "^unstable.*$", - "Debian Non-US (Unstable)", - debian_comps, debian_comps_descr)) - - - - - def match(self,source): - _ = gettext.gettext - # some sane defaults first - type_description = source.type - dist_description = source.uri + " " + source.dist - comp_description = "" - for c in source.comps: - comp_description = comp_description + " " + c - - for t in self.type_list: - if re.match(t.type, source.type): - type_description = _(t.description) - break - - for d in self.dist_list: - #print "'%s'" %source.uri - if re.match(d.uri, source.uri) and re.match(d.dist,source.dist): - dist_description = d.description - comp_description = "" - for c in source.comps: - found = False - for i in range(len(d.comps)): - if re.match(d.comps[i], c): - comp_description = comp_description+"\n"+d.comps_descriptions[i] - found = True - if found == False: - comp_description = comp_description+" "+c - break - - - return (type_description,dist_description,comp_description) - - diff --git a/src/dialog_add.py.in b/src/dialog_add.py.in deleted file mode 100644 index 141fc009..00000000 --- a/src/dialog_add.py.in +++ /dev/null @@ -1,107 +0,0 @@ -# dialog_add.py.in - dialog to add a new repository -# -# Copyright (c) 2004 Canonical -# -# Author: Michael Vogt <mvo@debian.org> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import os -import gobject -import gtk -import gtk.glade - -import aptsources - -class dialog_add: - def __init__(self,parent,sourceslist): - self.sourceslist = sourceslist - - # templates - self.templatelist = aptsources.SourceEntryTemplates() - - # gtk stuff - if os.path.exists("../data/gnome-software-properties.glade"): - self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade") - else: - self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade") - - self.main = widget = self.gladexml.get_widget("dialog_add") - self.main.set_transient_for(parent) - - combo = self.gladexml.get_widget("combobox_what") - self.gladexml.signal_connect("on_combobox_what_changed", self.on_combobox_what_changed, None) - # combox box needs - cell = gtk.CellRendererText() - combo.pack_start(cell, True) - combo.add_attribute(cell, 'text', 0) - self.fill_combo(combo) - self.gladexml.signal_connect("on_button_custom_clicked", - self.on_button_custom_clicked, None) - - - def fill_combo(self,combo): - liststore = gtk.ListStore(gobject.TYPE_STRING,gobject.TYPE_PYOBJECT) - for item in self.templatelist.templates: - liststore.append((item.description, item)) - combo.set_model(liststore) - combo.set_active(0) - - def on_combobox_what_changed(self, combobox, user): - #print "on_combobox_what_changed" - vbox = self.gladexml.get_widget("vbox_comps") - vbox.foreach(lambda widget,vbox: vbox.remove(widget), vbox) - liststore = combobox.get_model() - a_iter = liststore.iter_nth_child(None, combobox.get_active()) - (name, template) = liststore.get(a_iter, 0,1) - self.selected = template - comps = template.comps - for c in comps: - checkbox = gtk.CheckButton(c.description) - checkbox.set_active(c.on_by_default) - checkbox.set_data("name",c.name) - vbox.pack_start(checkbox) - checkbox.show() - - def on_button_custom_clicked(self, widget, data): - #print "on_button_custom_clicked()" - # this hide here is ugly :/ - self.main.hide() - dialog = self.gladexml.get_widget("dialog_add_custom") - res = dialog.run() - dialog.hide() - entry = self.gladexml.get_widget("entry_source_line") - line = entry.get_text() + "\n" - self.sourceslist.list.append(aptsources.SourceEntry(line)) - self.main.response(res) - - def get_enabled_comps(self, checkbutton): - if checkbutton.get_active(): - self.selected_comps.append(checkbutton.get_data("name")) - - def run(self): - res = self.main.run() - if res == gtk.RESPONSE_OK: - # add repository - self.selected_comps = [] - vbox = self.gladexml.get_widget("vbox_comps") - vbox.foreach(self.get_enabled_comps) - self.sourceslist.add(self.selected.type, - self.selected.uri, - self.selected.dist, - self.selected_comps) - self.main.hide() - return res diff --git a/src/dialog_apt_key.py.in b/src/dialog_apt_key.py.in deleted file mode 100644 index d11dfd0a..00000000 --- a/src/dialog_apt_key.py.in +++ /dev/null @@ -1,163 +0,0 @@ -# dialog_apt_key.py.in - edit the apt keys -# -# Copyright (c) 2004 Canonical -# -# Author: Michael Vogt <mvo@debian.org> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import os -import gobject -import gtk -import gtk.glade -import subprocess -import gettext -from utils import error -from subprocess import PIPE - -# gettext convenient -_ = gettext.gettext -def dummy(e): return e -N_ = dummy - -# some known keys -N_("Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>") -N_("Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>") - -class apt_key: - def __init__(self): - self.gpg = ["/usr/bin/gpg"] - self.base_opt = self.gpg + ["--no-options", "--no-default-keyring", - "--secret-keyring", "/etc/apt/secring.gpg", - "--trustdb-name", "/etc/apt/trustdb.gpg", - "--keyring", "/etc/apt/trusted.gpg"] - self.list_opt = self.base_opt + ["--with-colons", "--batch", - "--list-keys"] - self.rm_opt = self.base_opt + ["--quiet", "--batch", - "--delete-key", "--yes"] - self.add_opt = self.base_opt + ["--quiet", "--batch", - "--import"] - - - def list(self): - res = [] - #print self.list_opt - p = subprocess.Popen(self.list_opt,stdout=PIPE).stdout - for line in p.readlines(): - fields = line.split(":") - if fields[0] == "pub": - name = fields[9] - res.append("%s %s\n%s" %((fields[4])[-8:],fields[5], _(name))) - return res - - def add(self, filename): - #print "request to add " + filename - cmd = self.add_opt[:] - cmd.append(filename) - p = subprocess.Popen(cmd) - return (p.wait() == 0) - - def update(self): - cmd = ["/usr/bin/apt-key", "update"] - p = subprocess.Popen(cmd) - return (p.wait() == 0) - - def rm(self, key): - #print "request to remove " + key - cmd = self.rm_opt[:] - cmd.append(key) - p = subprocess.Popen(cmd) - return (p.wait() == 0) - -class dialog_apt_key: - def __init__(self, parent): - # gtk stuff - if os.path.exists("../data/gnome-software-properties.glade"): - self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade") - else: - self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade") - self.main = self.gladexml.get_widget("dialog_apt_key") - self.main.set_transient_for(parent) - - self.gladexml.signal_connect("on_button_key_add_clicked", - self.on_button_key_add_clicked) - self.gladexml.signal_connect("on_button_key_remove_clicked", - self.on_button_key_remove_clicked) - self.gladexml.signal_connect("on_button_apt_key_update_clicked", - self.on_button_apt_key_update_clicked) - - # create apt-key object (abstraction for the apt-key command) - self.apt_key = apt_key() - - # get some widgets - self.treeview_apt_key = self.gladexml.get_widget("treeview_apt_key") - self.liststore_apt_key = gtk.ListStore(str) - self.treeview_apt_key.set_model(self.liststore_apt_key) - # Create columns and append them. - tr = gtk.CellRendererText() - tr.set_property("xpad", 10) - tr.set_property("ypad", 10) - c0 = gtk.TreeViewColumn("Key", tr, text=0) - self.treeview_apt_key.append_column(c0) - self.update_key_list() - - def on_button_apt_key_update_clicked(self, widget): - self.apt_key.update() - self.update_key_list() - - def on_button_key_add_clicked(self, widget): - chooser = gtk.FileChooserDialog(title=_("Choose a key-file"), - parent=self.main, - buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_REJECT, - gtk.STOCK_OK,gtk.RESPONSE_ACCEPT)) - res = chooser.run() - chooser.hide() - if res == gtk.RESPONSE_ACCEPT: - #print chooser.get_filename() - if not self.apt_key.add(chooser.get_filename()): - error(self.main, - _("Error importing selected file"), - _("The selected file may not be a GPG key file " - "or it might be corrupt.")) - self.update_key_list() - - def on_button_key_remove_clicked(self, widget): - selection = self.treeview_apt_key.get_selection() - (model,a_iter) = selection.get_selected() - if a_iter == None: - return - key = model.get_value(a_iter,0) - if not self.apt_key.rm(key[:8]): - error(self.main, - _("Error removing the key"), - _("The key you selected could not be removed. " - "Please report this as a bug.")) - self.update_key_list() - - def update_key_list(self): - self.liststore_apt_key.clear() - for key in self.apt_key.list(): - self.liststore_apt_key.append([key]) - - def run(self): - res = self.main.run() - self.main.hide() - - -if __name__ == "__main__": - ui = dialog_apt_key(None) - ui.run() - diff --git a/src/dialog_edit.py.in b/src/dialog_edit.py.in deleted file mode 100644 index 02eac6c0..00000000 --- a/src/dialog_edit.py.in +++ /dev/null @@ -1,102 +0,0 @@ -# dialog_edit.py.in - edit a existing repository -# -# Copyright (c) 2004 Canonical -# -# Author: Michael Vogt <mvo@debian.org> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import os -import gobject -import gtk -import gtk.glade - -import aptsources - -class dialog_edit: - def __init__(self,parent,sourceslist,source_entry): - self.sourceslist = sourceslist - self.source_entry = source_entry - - # gtk stuff - if os.path.exists("../data/gnome-software-properties.glade"): - self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade") - else: - self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade") - self.main = self.gladexml.get_widget("dialog_edit") - self.main.set_transient_for(parent) - - # type - combo_type = self.gladexml.get_widget("combobox_type") - if source_entry.type == "deb": - combo_type.set_active(0) - elif source_entry.type == "deb-src": - combo_type.set_active(1) - else: - print "Error, unknown source type: '%s'" % source_enrty.type - - # uri - entry = self.gladexml.get_widget("entry_uri") - entry.set_text(source_entry.uri) - - entry = self.gladexml.get_widget("entry_dist") - entry.set_text(source_entry.dist) - - entry = self.gladexml.get_widget("entry_comps") - comps = "" - for c in source_entry.comps: - if len(comps) > 0: - comps = comps + " " + c - else: - comps = c - entry.set_text(comps) - - entry = self.gladexml.get_widget("entry_comment") - entry.set_text(source_entry.comment) - - def run(self): - res = self.main.run() - if res == gtk.RESPONSE_OK: - # get values - combo_type = self.gladexml.get_widget("combobox_type") - if combo_type.get_active() == 0: - line = "deb" - else: - line = "deb-src" - entry = self.gladexml.get_widget("entry_uri") - line = line + " " + entry.get_text() - - entry = self.gladexml.get_widget("entry_dist") - line = line + " " + entry.get_text() - - entry = self.gladexml.get_widget("entry_comps") - line = line + " " + entry.get_text() - - entry = self.gladexml.get_widget("entry_comment") - if entry.get_text() != "": - line = line + " #" + entry.get_text() + "\n" - else: - line = line + "\n" - - # change repository - index = self.sourceslist.list.index(self.source_entry) - self.sourceslist.list[index] = aptsources.SourceEntry(line) - #self.sourceslist.add(self.selected.type, - # self.selected.uri, - # self.selected.dist, - # self.selected_comps) - self.main.hide() - return res diff --git a/src/dialog_settings.py.in b/src/dialog_settings.py.in deleted file mode 100644 index cfa13e38..00000000 --- a/src/dialog_settings.py.in +++ /dev/null @@ -1,144 +0,0 @@ -# dialog_settings.py.in - edit some settings -# -# Copyright (c) 2005 Canonical -# -# Author: Michael Vogt <mvo@debian.org> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import gconf -import apt_pkg -import gtk -import os - -periodicAptConfFile = "/etc/apt/apt.conf.d/10periodic" -archiveAptConfFile = "/etc/apt/apt.conf.d/20archive" - -class dialog_settings: - def save_periodic_config(self): - #print "saving ..." - - # get the new values - for key in self.conf_map: - cb = self.gladexml.get_widget("checkbutton_%s"% key) - sb = self.gladexml.get_widget("spinbutton_%s"% key) - if cb and not cb.get_active(): - #print "%s=%s" % (self.conf_map[key], "0") - apt_pkg.Config.Set(self.conf_map[key], "0") - elif sb: - value = sb.get_value() - apt_pkg.Config.Set(self.conf_map[key], str(value)) - #print "%s=%s" % (self.conf_map[key], value) - - # special case for autodownload, it has the same interval as - # Update-Package-Lists - cb = self.gladexml.get_widget("checkbutton_autodownload") - key = "autodownload" - if cb.get_active(): - autoupdate = str(apt_pkg.Config.FindI("APT::Periodic::Update-Package-Lists")) - apt_pkg.Config.Set(self.conf_map[key], autoupdate) - else: - apt_pkg.Config.Set(self.conf_map[key], "0") - - - # write both config-prefixes to different files - for (file, prefix) in ((periodicAptConfFile, "APT::Periodic"), - (archiveAptConfFile, "APT::Archives")): - - content = [] - if os.path.isfile(file): - content=open(file,"r").readlines() - - cnf = apt_pkg.Config.SubTree(prefix) - - f = open(file,"w+") - for line in content: - # don't write the udpated keys - found = False - for key in cnf.List(): - #print "%s=%s" % (key, cnf[key]) - if line.find("%s::%s" % (prefix,key)) >= 0: - found = True - break - if not found: - f.write(line) - # write new keys - for i in cnf.List(): - f.write("%s::%s \"%s\";\n" % (prefix,i,cnf.FindI((i)))) - f.close() - - def toggle_show_disabled(self, widget, data): - self.show_disabled = widget.get_active() - self.gconfclient.set_bool("/apps/gnome-software-properties/show_disabled",\ - self.show_disabled) - - def toggle_settings_cb(self, widget, data): - mode = widget.get_active() - self.gladexml.get_widget(data).set_sensitive(mode) - - def run(self): - res = self.main_window.run() - self.save_periodic_config() - self.main_window.hide() - return res - - def __init__(self, parent, glade): - - self.gladexml = glade - self.main_window = self.gladexml.get_widget("dialog_settings") - self.main_window.set_transient_for(parent) - self.parent = parent - self.gconfclient = gconf.client_get_default() - - # preferences entries - self.show_disabled = self.gconfclient.get_bool("/apps/gnome-software-properties/show_disabled") - - checkbutton_show_disabled = self.gladexml.get_widget("checkbutton_show_disabled") - checkbutton_show_disabled.set_active(self.show_disabled) - checkbutton_show_disabled.connect("toggled", self.toggle_show_disabled, None) - - - # apt-config - - # set the update stuff - self.conf_map = { - "autoupdate" : "APT::Periodic::Update-Package-Lists", - "autodownload" : "APT::Periodic::Download-Upgradeable-Packages", - "autoclean" : "APT::Periodic::AutocleanInterval", - "max_size" : "APT::Archives::MaxSize", - "max_age" : "APT::Archives::MaxAge" - } - - for key in self.conf_map: - value = apt_pkg.Config.FindI(self.conf_map[key]) - #print "%s=%s" % (key, value) - cb = self.gladexml.get_widget("checkbutton_%s"% key) - #if cb == None: - # print "checkbutton_%s not found" % key - sb = self.gladexml.get_widget("spinbutton_%s"% key) - if sb != None: - #print "setting %s to %s" % (key, value) - sb.set_value(value) - #else: - # print "spinbutton_%s not found" % key - box = self.gladexml.get_widget("vbox_%s"% key) - #if box == None: - # print "vbox_%s not found" % key - if box and cb: - cb.connect("toggled", self.toggle_settings_cb, ("vbox_%s" % key)) - if cb: - cb.set_active(value) - diff --git a/src/gnome-software-properties.in b/src/gnome-software-properties.in deleted file mode 100755 index 6c9b8d3b..00000000 --- a/src/gnome-software-properties.in +++ /dev/null @@ -1,332 +0,0 @@ -#!/usr/bin/python2.4 -# gnome-software-properties.in - edit /etc/apt/sources.list -# -# Copyright (c) 2004 Canonical -# 2004 Michiel Sikkes -# -# Author: Michiel Sikkes <michiel@eyesopened.nl> -# Michael Vogt <mvo@debian.org> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import pygtk -import sys -pygtk.require('2.0') -import gtk -import gtk.glade -import gconf -import gobject -import os -import gettext -import re -import string -import time -import tempfile -import subprocess -from optparse import OptionParser -import apt_pkg - -sys.path.append("@prefix@/share/update-manager/python") - -import aptsources -import dialog_add -import dialog_edit -import dialog_apt_key -from dialog_settings import dialog_settings -import shutil - - -(LIST_MARKUP, LIST_ENABLED, LIST_ENTRY_OBJ) = range(3) - -class SoftwareConfigurator: - - def on_button_ok_clicked(self, widget, data): - #self.save_periodic_config(periodicAptConfFile) - - location = "/etc/apt/sources.list" - #backup first - shutil.copy(location,location+".save") - # write - self.sourceslist.save(location) - - # write the source.list first, even if dirty=False, because - # e.g. CD-ROM add does not set dirty variable even if it adds - # something to the sources.list (but no reload needed) - if self.dirty == False: - gtk.main_quit() - sys.exit(0) - - primary = "<span weight=\"bold\" size=\"larger\">" + _("Repositories " - "changed") + "</span>" - secondary = _("The repository information has changes. A backup copy of " - "your sources.list is stored in %s.save. " - "\n\n" - "You need to reload the package list from the servers " - "for your changes to take effect. Do you want to do this " - "now?") % location - dialog = gtk.MessageDialog(self.main_window,gtk.DIALOG_MODAL, - gtk.MESSAGE_INFO,gtk.BUTTONS_YES_NO,"") - dialog.set_markup(primary); - dialog.format_secondary_text(secondary); - #textview = gtk.TextView() - #textview.set_editable(gtk.FALSE) - #textbuffer = textview.get_buffer() - #f = os.popen("/usr/bin/diff -u %s.save %s" % (location,location)) - #diff = f.read() - #textbuffer.set_text(diff) - #if f.close() != None: - # win = gtk.ScrolledWindow() - # win.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) - # win.add(textview) - # win.set_size_request(400,300) - # win.show() - # dialog.vbox.pack_start(child = win, padding = 6) - # textview.show() - res = dialog.run() - dialog.destroy() - if res == gtk.RESPONSE_YES: - self.main_window.hide() - # we are in "no-update" mode, this is used when the calling application - # wants to deal with this itself - if options.no_update: - gtk.main_quit() - sys.exit(1) - child = subprocess.Popen(["/usr/sbin/synaptic", "--update-at-startup", - "--hide-main-window","--non-interactive"], - close_fds=True) - # wait for the child to finish - while child.poll() == None: - time.sleep(0.05) - while gtk.events_pending(): - gtk.main_iteration() - gtk.main_quit() - sys.exit(1) - gtk.main_quit() - sys.exit(0) - - def on_button_edit_clicked(self, widget, data): - selection = self.sourceslist_view.get_selection() - (model, iter) = selection.get_selected() - source_entry = model.get_value(iter, LIST_ENTRY_OBJ) - edit = dialog_edit.dialog_edit(self.main_window,self.sourceslist, - source_entry) - if edit.run() == gtk.RESPONSE_OK: - self.reloadsources(self.sourceslist,self.matcher) - self.dirty = True - - def on_sourceslist_selection_changed(self, selection, data): - (model, iter) = selection.get_selected() - if iter != None: - self.button_del.set_sensitive(True) - self.button_edit.set_sensitive(True) - else: - self.button_del.set_sensitive(False) - self.button_edit.set_sensitive(False) - - #def on_sourceslist_row_activated(self, treeview, path, column, data): - # #print "on_row_activated()" - # model = treeview.get_model() - # source_entry = model.get_value(model.get_iter(path), LIST_ENTRY_OBJ) - # edit = dialog_edit.dialog_edit(self.main_window,self.sourceslist, - # source_entry) - # edit.run() - # self.reloadsources(self.sourceslist,self.matcher) - - def on_button_remove_clicked(self, widget, data): - selection = self.sourceslist_view.get_selection() - (model,a_iter) = selection.get_selected() - if a_iter == None: - return - source = model.get_value(a_iter, LIST_ENTRY_OBJ) - self.sourceslist.remove(source) - self.reloadsources(self.sourceslist,self.matcher) - self.dirty=True - - def on_button_add_clicked(self, widget, data): - add = dialog_add.dialog_add(self.main_window,self.sourceslist) - if add.run() == gtk.RESPONSE_OK: - self.reloadsources(self.sourceslist,self.matcher) - self.dirty=True - - def on_button_settings_clicked(self, widget, data): - settings = dialog_settings(self.main_window, self.gladexml) - settings.run() - self.show_disabled = self.gconfclient.get_bool("/apps/gnome-software-properties/show_disabled") - self.c_enabled.set_property("visible", self.show_disabled) - self.reloadsources(self.sourceslist, self.matcher) - - def on_button_add_cdrom_clicked(self, widget, data): - tmp = tempfile.NamedTemporaryFile() - cmd = ["/usr/sbin/synaptic", "--hide-main-window", "--non-interactive", - "-o","Dir::Etc::sourcelist=%s" % tmp.name,"--ask-cdrom" ] - self.main_window.set_sensitive(False) - proc = subprocess.Popen(cmd) - # wait for process to finish - while proc.poll() == None: - while gtk.events_pending(): - gtk.main_iteration() - time.sleep(0.05) - self.main_window.set_sensitive(True) - # read tmp file with source name - line = "" - for x in open(tmp.name): - line = x - if line != "": - self.sourceslist.list.append(aptsources.SourceEntry(line)) - self.reloadsources(self.sourceslist,self.matcher) - #self.dirty=True # no need here - - def on_button_authentication_clicked(self, widget, data): - auth = dialog_apt_key.dialog_apt_key(self.main_window) - auth.run() - - def reloadsources(self, sourceslist, matcher): - #self.meta = meta_data() - self.sourcesstore.clear() - for source in sourceslist.list: - if source.invalid or (source.disabled and not self.show_disabled): - continue - (a_type,dist,comps) = matcher.match(source) - contents = "" - if source.comment != "": - contents += "<i>%s</i>\n\n" % (source.comment) - contents +="<big><b>%s </b></big> (%s) <small>\n%s</small>" % (dist,a_type, comps) - iter = self.sourcesstore.append([contents, not source.disabled, source]) - - def show_help(self, widget, data): - print "self.show_help() called" - - # toggled on/off a source in the listview - def toggled_enabled(self, renderer, path_string): - iter = self.sourcesstore.get_iter_from_string(path_string) - source = self.sourcesstore.get_value(iter, LIST_ENTRY_OBJ) - self.dirty=True - if self.sourcesstore.get_value(iter, LIST_ENABLED): - self.sourcesstore.set_value(iter, LIST_ENABLED, False) - source.set_enabled(False) - else: - self.sourcesstore.set_value(iter, LIST_ENABLED, True) - source.set_enabled(True) - - def __init__(self): - self.gconfclient = gconf.client_get_default() - - if os.path.exists("../data/gnome-software-properties.glade"): - self.gladexml = gtk.glade.XML("../data/gnome-software-properties.glade") - else: - self.gladexml = gtk.glade.XML("@prefix@/share/update-manager/gnome-software-properties.glade") - - # do we show disabled sources? - self.show_disabled = self.gconfclient.get_bool("/apps/gnome-software-properties/show_disabled") - self.main_window = self.gladexml.get_widget("SoftwareConfigurator") - # button on the right - self.gladexml.signal_connect("on_button_edit_clicked", - self.on_button_edit_clicked, None) - self.button_edit = self.gladexml.get_widget("button_edit") - self.button_del = self.gladexml.get_widget("button_remove") - - # Gets the treeview and creates a store for it. - self.sourceslist_view = self.gladexml.get_widget("sourceslist") - self.sourcesstore = gtk.ListStore(str, bool,gobject.TYPE_PYOBJECT) - self.sourceslist_view.set_model(self.sourcesstore) - #self.gladexml.signal_connect("on_sourceslist_row_activated", - # self.on_sourceslist_row_activated, None) - self.sourceslist_view.get_selection().connect("changed", self.on_sourceslist_selection_changed, None) - - # was something modified - self.dirty=False - - # Create columns and append them. - cr = gtk.CellRendererToggle() - cr.set_property("activatable", True) - cr.set_property("xpad", 10) - cr.set_property("ypad", 10) - cr.connect("toggled", self.toggled_enabled) - self.c_enabled = gtk.TreeViewColumn("Enabled", cr, active=LIST_ENABLED) - self.sourceslist_view.append_column(self.c_enabled) - self.c_enabled.set_property("visible", self.show_disabled) - - tr = gtk.CellRendererText() - tr.set_property("xpad", 10) - tr.set_property("ypad", 10) - c0 = gtk.TreeViewColumn("Entry", tr, markup=LIST_MARKUP) - self.sourceslist_view.append_column(c0) - - self.sourceslist = aptsources.SourcesList("@sysconfdir@/apt/sources.list") - self.matcher = aptsources.SourceEntryMatcher() - # Empty and fill the sources store. - self.reloadsources(self.sourceslist,self.matcher) - - self.main_window = self.gladexml.get_widget("SoftwareConfigurator") - self.main_window.connect("delete_event", lambda widget,ev: gtk.main_quit()) - - okbutton = self.gladexml.get_widget("button_ok") - okbutton.connect("clicked", self.on_button_ok_clicked, None) - - cancelbutton = self.gladexml.get_widget("button_cancel") - cancelbutton.connect("clicked", lambda w,v: gtk.main_quit(), None) - - self.gladexml.signal_connect("on_button_add_clicked", self.on_button_add_clicked, None) - self.gladexml.signal_connect("on_button_add_cdrom_clicked", self.on_button_add_cdrom_clicked, None) - self.gladexml.signal_connect("on_button_remove_clicked", self.on_button_remove_clicked, None) - self.gladexml.signal_connect("on_button_authentication_clicked", self.on_button_authentication_clicked, None) - - # settings - self.gladexml.signal_connect("on_button_settings_clicked", self.on_button_settings_clicked, None) - - self.main_window.show() - if options.toplevel != None: - # don't show the add-cdrom button for now - # FIXME: on the long run interface with apt-pkg/cdrom.h - b = self.gladexml.get_widget("button_add_cdrom") - b.hide() - toplevel = gtk.gdk.window_foreign_new(int(options.toplevel)) - self.main_window.window.set_transient_for(toplevel) - - - # init the config - apt_pkg.InitConfig() - - def main(self): - gtk.main() - - -if __name__ == "__main__": - APP="update-manager" - DIR="@prefix@/share/locale" - gettext.bindtextdomain(APP, DIR) - gettext.textdomain(APP) - gtk.glade.bindtextdomain(APP, DIR) - gtk.glade.textdomain(APP) - _ = gettext.gettext - #print "Software Configurator started..." - - # add option parser - parser = OptionParser() - parser.add_option("-n", "--no-update", action="store_true", - dest="no_update", default=False, - help="No update on repository change (usefull if called "\ - "from a external program).") - parser.add_option("-t", "--toplevel", - action="store", type="string", dest="toplevel", - help="Set x-window-id of the toplevel parent for the "\ - "dialog (usefull for embedding)") - - - (options, args) = parser.parse_args() - ui = SoftwareConfigurator() - ui.main() - #print "Software Configurator ended..." diff --git a/src/update-manager b/src/update-manager deleted file mode 100644 index 5ab60e43..00000000 --- a/src/update-manager +++ /dev/null @@ -1,871 +0,0 @@ -#!/usr/bin/python2.4 -# update-manager.in - easy updating application -# -# Copyright (c) 2004 Canonical -# 2004 Michiel Sikkes -# -# Author: Michiel Sikkes <michiel@eyesopened.nl> -# Michael Vogt <mvo@debian.org> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA - -import pygtk -pygtk.require('2.0') -import gtk -import gtk.gdk -import gtk.glade -import gobject -import gnome -import apt_pkg -import gettext -import copy -import string -import sys -import os -import os.path -import urllib2 -import re -import thread -import tempfile -import time -import rfc822 -import gconf -import pango -import subprocess -import pwd -import xml.sax.saxutils - - -# FIXME: -# - cary a reference to the update-class around in the ListStore -# - kill "all_changes" and move the changes into the "Update" class - -# list constants -(LIST_INSTALL, LIST_CONTENTS, LIST_NAME, LIST_SHORTDESC, - LIST_VERSION, LIST_LONG_DESCR, LIST_PKG) = range(7) - -# actions for "invoke_manager" -(INSTALL, UPDATE) = range(2) - -SYNAPTIC_PINFILE = "/var/lib/synaptic/preferences" - -METARELEASE_URI = "http://changelogs.ubuntu.com/meta-release" -#METARELEASE_URI = "http://people.ubuntu.com/~mvo/meta-release-test" -METARELEASE_FILE = "/var/lib/update-manager/meta-release" - -CHANGELOGS_URI="http://changelogs.ubuntu.com/changelogs/pool/%s/%s/%s/%s_%s/changelog" - -# fixme: use a utils package for this sort of stuff -def str_to_bool(str): - if str == "0" or str.upper() == "FALSE": - return False - return True - -def utf8(str): - return unicode(str, 'latin1').encode('utf-8') - -class Update: - - def __init__(self, package, cache, records, depcache): - #package = cache[name] - name = package.Name - version = depcache.GetCandidateVer(package) - file, index = version.FileList.pop(0) - records.Lookup((file, index)) - - self.name = name - self.version = version.VerStr - self.shortdesc = records.ShortDesc - self.longdesc = "" - self.size = version.Size - - longdesc = records.LongDesc - lines = longdesc.split("\n") - lines.pop(0) - for line in lines: - line = line[1:] - first_char = string.strip(line)[0] - if line == ".": - self.longdesc = self.longdesc + "\n" - else: - self.longdesc = self.longdesc + line + "\n" - -class UpdateList: - def __init__(self, parent_window): - self.pkgs = [] - self.num_updates = 0 - self.parent_window = parent_window - - def saveDistUpgrade(self, cache, depcache): - """ this functions mimics a upgrade but will never remove anything """ - depcache.Upgrade(True) - if depcache.DelCount > 0: - # nice try, falling back - for pkg in cache.Packages: - depcache.MarkKeep(pkg) - assert depcache.BrokenCount == 0 and depcache.DelCount == 0 - depcache.Upgrade() - - def update(self, cache, records, depcache): - held_back = [] - broken = [] - self.saveDistUpgrade(cache, depcache) - for pkg in cache.Packages: - if depcache.MarkedUpgrade(pkg) or depcache.MarkedInstall(pkg): - self.pkgs.append(Update(pkg, cache, records, depcache)) - self.num_updates = self.num_updates + 1 - elif depcache.IsInstBroken(pkg) or depcache.IsNowBroken(pkg): - broken.append(pkg.Name) - elif pkg.CurrentVer != None and depcache.IsUpgradable(pkg): - #print "MarkedKeep: %s " % pkg.Name - held_back.append(pkg.Name) - self.pkgs.sort(lambda x,y: cmp(x.name,y.name)) - if depcache.BrokenCount > 0: - # FIXME: show what packages are broken - msg=("<big><b>%s</b></big>\n\n%s"%(_("Your system has broken packages!"), - _("This means that some dependencies " - "of the installed packages are not " - "satisfied. Please use \"Synaptic\" " - "or \"apt-get\" to fix the " - "situation." - ))) - dialog = gtk.MessageDialog(self.parent_window, 0, gtk.MESSAGE_ERROR, - gtk.BUTTONS_OK,"") - dialog.set_markup(msg) - dialog.vbox.set_spacing(6) - dialog.run() - dialog.destroy() - sys.exit(1) - if depcache.KeepCount > 0: - #print "WARNING, keeping packages" - msg=("<big><b>%s</b></big>\n\n%s"%(_("It is not possible to upgrade " - "all packages."), - _("This means that " - "besides the actual upgrade of the " - "packages some further action " - "(such as installing or removing " - "packages) " - "is required. Please use Synaptic " - "\"Smart Upgrade\" or " - "\"apt-get dist-upgrade\" to fix " - "the situation." - ))) - dialog = gtk.MessageDialog(self.parent_window, 0, gtk.MESSAGE_INFO, - gtk.BUTTONS_OK,"") - dialog.set_default_response(gtk.RESPONSE_OK) - dialog.set_markup(msg) - dialog.vbox.set_spacing(6) - label = gtk.Label(_("The following packages are not upgraded: ")) - label.set_alignment(0.0,0.5) - dialog.set_border_width(6) - label.show() - dialog.vbox.pack_start(label) - scroll = gtk.ScrolledWindow() - scroll.set_size_request(-1,200) - scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - text = gtk.TextView() - text.set_editable(False) - text.set_cursor_visible(False) - buf = text.get_buffer() - held_back.sort() - buf.set_text("\n".join(held_back)) - scroll.add(text) - dialog.vbox.pack_start(scroll) - scroll.show_all() - dialog.run() - dialog.destroy() - - -class UpdateManager: - - # FIXME: wrong location for this func - # don't touch the gui in this function, it needs to be thread-safe - def get_changelog(self, name, lock): - pkg = self.cache[name] - - # FIXME: not correct, need to get canidateVer - version = self.depcache.GetCandidateVer(pkg) - file, index = version.FileList.pop(0) - self.records.Lookup((file, index)) - if self.records.SourcePkg != "": - srcpkg = self.records.SourcePkg - else: - srcpkg = name - - src_section = "main" - l = string.split(pkg.Section,"/") - if len(l) > 1: - sec_section = l[0] - - prefix = srcpkg[0] - if srcpkg.startswith("lib"): - prefix = "lib" + srcpkg[3] - - verstr = version.VerStr - l = string.split(verstr,":") - if len(l) > 1: - verstr = l[1] - - try: - uri = CHANGELOGS_URI % (src_section,prefix,srcpkg,srcpkg, verstr) - changelog = urllib2.urlopen(uri) - #print changelog.read() - # do only get the lines that are new - alllines = "" - regexp = "^%s \((.*)\)(.*)$" % (srcpkg) - - i=0 - while True: - line = changelog.readline() - #print line - if line == "": - break - match = re.match(regexp,line) - if match: - if apt_pkg.VersionCompare(match.group(1),pkg.CurrentVer.VerStr) <= 0: - break - # EOF (shouldn't really happen) - alllines = alllines + line - - # only write if we where not canceld - if lock.locked(): - self.all_changes[name] = [alllines, srcpkg] - except urllib2.HTTPError: - if lock.locked(): - self.all_changes[name] = [_("Changes not found, the server may not be updated yet."), srcpkg] - except IOError: - if lock.locked(): - self.all_changes[name] = [_("Failed to download changes. Please check if there is an active internet connection."), srcpkg] - if lock.locked(): - lock.release() - - def set_changes_buffer(self, changes_buffer, text, name, srcpkg): - changes_buffer.set_text("") - lines = text.split("\n") - if len(lines) == 1: - changes_buffer.set_text(text) - return - - for line in lines: - - end_iter = changes_buffer.get_end_iter() - - version_match = re.match("^%s \((.*)\)(.*)$" % (srcpkg), line) - #bullet_match = re.match("^.*[\*-]", line) - author_match = re.match("^.*--.*<.*@.*>.*$", line) - if version_match: - version = version_match.group(1) - version_text = _("Version %s: \n") % version - changes_buffer.insert_with_tags_by_name(end_iter, version_text, "versiontag") - # mvo: disabled for now as it does not catch multi line entries - # (see ubuntu #7034 for rational) - #elif bullet_match and not author_match: - # bullet_text = " " + line + "\n" - # changes_buffer.insert(end_iter, bullet_text) - elif (author_match): - pass - #chanages_buffer.insert(end_iter, "\n") - else: - changes_buffer.insert(end_iter, line+"\n") - - - def cursor_changed(self, widget): - tuple = widget.get_cursor() - path = tuple[0] - # check if we have a path at all - if path == None: - return - model = widget.get_model() - iter = model.get_iter(path) - - # set descr - long_desc = model.get_value(iter, 5) - if long_desc == None: - return - desc_buffer = self.DescView.get_buffer() - desc_buffer.set_text(utf8(long_desc)) - - # now do the changelog - name = model.get_value(iter, 2) - if name == None: - return - - changes_buffer = self.ChangesView.get_buffer() - - # check if we have the changes already - if self.all_changes.has_key(name): - changes = self.all_changes[name] - self.set_changes_buffer(changes_buffer, changes[0], name, changes[1]) - else: - if self.expander.get_expanded(): - self.treeview.set_sensitive(False) - self.Glade.get_widget("hbox_footer").set_sensitive(False) - lock = thread.allocate_lock() - lock.acquire() - t=thread.start_new_thread(self.get_changelog,(name,lock)) - changes_buffer.set_text(_("Downloading changes...")) - button = self.Glade.get_widget("button_cancel_dl_changelog") - button.show() - id = button.connect("clicked", - lambda w,lock: lock.release(), lock) - # wait for the dl-thread - while lock.locked(): - time.sleep(0.05) - while gtk.events_pending(): - gtk.main_iteration() - # download finished (or canceld, or time-out) - button.hide() - button.disconnect(id); - self.treeview.set_sensitive(True) - self.Glade.get_widget("hbox_footer").set_sensitive(True) - - if self.all_changes.has_key(name): - changes = self.all_changes[name] - self.set_changes_buffer(changes_buffer, changes[0], name, changes[1]) - - def remove_update(self, pkg): - name = pkg.name - if name in self.packages: - self.packages.remove(name) - self.dl_size -= pkg.size - if len(self.packages) == 0: - self.installbutton.set_sensitive(False) - self.update_count() - - def add_update(self, pkg): - name = pkg.name - if name not in self.packages: - self.packages.append(name) - self.dl_size += pkg.size - if len(self.packages) > 0: - self.installbutton.set_sensitive(True) - self.update_count() - - def update_count(self): - text = "%i (%s)" % (len(self.packages), - apt_pkg.SizeToStr(self.dl_size)) - self.NumUpdates.set_text(text) - - def activate_details(self, expander, data): - expanded = self.expander.get_expanded() - self.gconfclient.set_bool("/apps/update-manager/show_details",expanded) - if expanded: - self.cursor_changed(self.treeview) - - def run_synaptic(self, id, action, lock): - apt_pkg.PkgSystemUnLock() - cmd = ["/usr/sbin/synaptic", "--hide-main-window", "--non-interactive", - "--plug-progress-into", "%s" % (id) ] - if action == INSTALL: - cmd.append("--set-selections") - cmd.append("--progress-str") - cmd.append("%s" % _("The updates are being applied.")) - cmd.append("--finish-str") - cmd.append("%s" % _("Upgrade finished")) - proc = subprocess.Popen(cmd, stdin=subprocess.PIPE) - f = proc.stdin - for s in self.packages: - f.write("%s\tinstall\n" % s) - f.close() - proc.wait() - elif action == UPDATE: - cmd.append("--update-at-startup") - subprocess.call(cmd) - else: - print "run_synaptic() called with unknown action" - sys.exit(1) - - # use this once gksudo does propper reporting - #if os.geteuid() != 0: - # if os.system("gksudo /bin/true") != 0: - # return - # cmd = "sudo " + cmd; - lock.release() - - def plug_removed(self, w, (win,socket)): - #print "plug_removed" - # plug was removed, but we don't want to get it removed, only hiden - # unti we get more - win.hide() - return True - - def plug_added(self, sock, win): - win.show() - while gtk.events_pending(): - gtk.main_iteration() - - def on_button_reload_clicked(self, widget): - #print "on_button_reload_clicked" - self.invoke_manager(UPDATE) - - def on_button_help_clicked(self, widget): - gnome.help_display_desktop(self.gnome_program, "update-manager", "update-manager", "") - - def on_button_install_clicked(self, widget): - #print "on_button_install_clicked" - self.invoke_manager(INSTALL) - - def invoke_manager(self, action): - # check first if no other package manager is runing - import struct, fcntl - lock = os.path.dirname(apt_pkg.Config.Find("Dir::State::status"))+"/lock" - lock_file= open(lock) - flk=struct.pack('hhllhl',fcntl.F_WRLCK,0,0,0,0,0) - try: - rv = fcntl.fcntl(lock_file, fcntl.F_GETLK, flk) - except IOError: - print "Error getting lockstatus" - raise - locked = struct.unpack('hhllhl', rv)[0] - if locked != fcntl.F_UNLCK: - msg=("<big><b>%s</b></big>\n\n%s"%(_("Another package manager is " - "running"), - _("You can run only one " - "package management application " - "at the same time. Please close " - "this other application first."))); - dialog = gtk.MessageDialog(self.main_window, 0, gtk.MESSAGE_ERROR, - gtk.BUTTONS_OK,"") - dialog.set_markup(msg) - dialog.run() - dialog.destroy() - return - - # don't display apt-listchanges, we already showed the changelog - os.environ["APT_LISTCHANGES_FRONTEND"]="none" - - # set window to insensitive - self.main_window.set_sensitive(False) - # create a progress window that will swallow the synaptic progress bars - win = gtk.Window() - if action==UPDATE: - win.set_title(_("Updating package list...")) - else: - win.set_title(_("Installing updates...")) - win.set_border_width(6) - win.set_transient_for(self.main_window) - win.set_position(gtk.WIN_POS_CENTER_ON_PARENT) - win.resize(400,200) - win.set_resizable(False) - # prevent the window from closing with the delete button (there is - # a cancel button in the window) - win.connect("delete_event", lambda e,w: True); - - # create the socket - socket = gtk.Socket() - socket.show() - win.add(socket) - - socket.connect("plug-added", self.plug_added, win) - socket.connect("plug-removed", self.plug_removed, (win,socket)) - lock = thread.allocate_lock() - lock.acquire() - t = thread.start_new_thread(self.run_synaptic,(socket.get_id(),action,lock)) - while lock.locked(): - while gtk.events_pending(): - gtk.main_iteration() - time.sleep(0.05) - win.destroy() - while gtk.events_pending(): - gtk.main_iteration() - self.fillstore() - self.main_window.set_sensitive(True) - - def toggled(self, renderer, path_string): - """ a toggle button in the listview was toggled """ - iter = self.store.get_iter_from_string(path_string) - if self.store.get_value(iter, LIST_INSTALL): - self.store.set_value(iter, LIST_INSTALL, False) - self.remove_update(self.store.get_value(iter, LIST_PKG)) - else: - self.store.set_value(iter, LIST_INSTALL, True) - self.add_update(self.store.get_value(iter, LIST_PKG)) - - - def exit(self): - """ exit the application, save the state """ - self.save_state() - gtk.main_quit() - sys.exit(0) - - def save_state(self): - """ save the state (window-size for now) """ - (x,y) = self.main_window.get_size() - self.gconfclient.set_pair("/apps/update-manager/window_size", - gconf.VALUE_INT, gconf.VALUE_INT, x, y) - - def restore_state(self): - """ restore the state (window-size for now) """ - expanded = self.gconfclient.get_bool("/apps/update-manager/show_details") - self.expander.set_expanded(expanded) - (x,y) = self.gconfclient.get_pair("/apps/update-manager/window_size", - gconf.VALUE_INT, gconf.VALUE_INT) - if x > 0 and y > 0: - self.main_window.resize(x,y) - - def on_button_preferences_clicked(self, widget): - """ start gnome-software preferences """ - # args: "-n" means we take care of the reloading of the - # package list ourself - apt_pkg.PkgSystemUnLock() - args = ['/usr/bin/gnome-software-properties', '-n'] - child = subprocess.Popen(args) - self.main_window.set_sensitive(False) - res = None - while res == None: - res = child.poll() - time.sleep(0.05) - while gtk.events_pending(): - gtk.main_iteration() - # repository information changed, call "reload" - try: - apt_pkg.PkgSystemLock() - except SystemError: - print "Error geting the cache" - apt_pkg.PkgSystemLock() - if res > 0: - self.on_button_reload_clicked(None) - self.main_window.set_sensitive(True) - - def __init__(self, download_changes_at_startup=False): - - self.gnome_program = gnome.init("update-manager", "0.39") - - self.download_changes_at_startup = download_changes_at_startup - self.packages = [] - self.dl_size = 0 - self.all_changes = {} - self.dist = self.get_dist() - self.Glade = gtk.glade.XML("/usr/share/update-manager/glade/update-manager.glade") - - self.NumUpdates = self.Glade.get_widget("num_updates") - self.main_window = self.Glade.get_widget("MainWindow") - self.main_window.connect("delete_event", lambda w, ev: self.exit()) - self.DescView = self.Glade.get_widget("descview") - self.ChangesView = self.Glade.get_widget("textview_changes") - changes_buffer = self.ChangesView.get_buffer() - changes_buffer.create_tag("versiontag", weight=pango.WEIGHT_BOLD) - self.expander = self.Glade.get_widget("expander_details") - self.expander.connect("notify::expanded", self.activate_details) - - self.installbutton = self.Glade.get_widget("button_install") - self.Glade.signal_connect("on_button_install_clicked", - self.on_button_install_clicked) - self.Glade.signal_connect("on_button_close_clicked", - lambda w: self.exit()) - self.Glade.signal_connect("on_button_reload_clicked", - self.on_button_reload_clicked) - self.Glade.signal_connect("on_button_preferences_clicked", - self.on_button_preferences_clicked) - self.Glade.signal_connect("on_button_help_clicked", - self.on_button_help_clicked) - - self.treeview = self.Glade.get_widget("updatelist") - - self.store = gtk.ListStore(gobject.TYPE_BOOLEAN, str, str, str, str, str, - gobject.TYPE_PYOBJECT) - self.treeview.set_model(self.store) - self.treeview.set_headers_clickable(True); - - self.treeview.connect('cursor-changed', self.cursor_changed) - - tr = gtk.CellRendererText() - tr.set_property("xpad", 10) - tr.set_property("ypad", 10) - cr = gtk.CellRendererToggle() - cr.set_property("activatable", True) - cr.set_property("xpad", 10) - cr.connect("toggled", self.toggled) - self.cb = gtk.TreeViewColumn("Install", cr, active=LIST_INSTALL) - c0 = gtk.TreeViewColumn("Name", tr, markup=LIST_CONTENTS) - c0.set_resizable(True) - major,minor,patch = gtk.pygtk_version - if (major >= 2) and (minor >= 5): - self.cb.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) - self.cb.set_fixed_width(30) - c0.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) - c0.set_fixed_width(100) - #self.treeview.set_fixed_height_mode(True) - - self.treeview.append_column(self.cb) - self.cb.set_visible(False); - self.treeview.append_column(c0) - self.treeview.set_search_column(LIST_NAME) - #self.treeview.append_column(c1) - #self.treeview.append_column(c2) - #self.treeview.set_headers_visible(False) - # set expander to last position - - # proxy stuff - SYNAPTIC_CONF_FILE = "%s/.synaptic/synaptic.conf" % pwd.getpwuid(0)[5] - if os.path.exists(SYNAPTIC_CONF_FILE): - cnf = apt_pkg.newConfiguration() - apt_pkg.ReadConfigFile(cnf, SYNAPTIC_CONF_FILE) - use_proxy = cnf.FindB("Synaptic::useProxy", False) - if use_proxy: - proxy_host = cnf.Find("Synaptic::httpProxy") - proxy_port = str(cnf.FindI("Synaptic::httpProxyPort")) - if proxy_host and proxy_port: - proxy_support = urllib2.ProxyHandler({"http":"http://%s:%s" % (proxy_host, proxy_port)}) - opener = urllib2.build_opener(proxy_support) - urllib2.install_opener(opener) - - self.gconfclient = gconf.client_get_default() - # restore state - self.restore_state() - - def fillstore(self): - if self.download_changes_at_startup: - dialog = self.Glade.get_widget("dialog_fetching") - dialog.set_transient_for(self.main_window) - dialog.set_modal(True) - progress = self.Glade.get_widget("progressbar_fetching") - dialog.show() - while gtk.events_pending(): - gtk.main_iteration() - - # clean most objects - self.packages = [] - self.dl_size = 0 - self.all_changes = {} - self.store.clear() - self.initCache() - self.list = UpdateList(self.main_window) - - # fill them again - self.list.update(self.cache, self.records, self.depcache) - if self.list.num_updates < 1: - # set the label and treeview and hide the checkbox column - self.cb.set_visible(False) - self.expander.hide() - label = self.Glade.get_widget("label_header") - text = "<big><b>%s</b></big>\n\n%s" % (_("Your system is up-to-date!"), - _("There are no updates available.")) - label.set_markup(text) - self.store.append([False, _("Your system is up-to-date!"), None, None, None, None, None]) - # make sure no install is possible - self.installbutton.set_sensitive(False) - else: - self.cb.set_visible(True) - self.expander.show() - self.treeview.set_headers_visible(False) - label = self.Glade.get_widget("label_header") - text = _("<big><b>Available Updates</b></big>\n" - "\n" - "The following packages are found to be upgradable. You can upgrade them by " - "using the Install button.") - label.set_markup(text) - i=0 - for pkg in self.list.pkgs: - if self.download_changes_at_startup: - progress.set_fraction(float(i)/len(self.list.pkgs)) - while gtk.events_pending(): - gtk.main_iteration() - lock = thread.allocate_lock() - self.all_changes[pkg.name] = self.get_changelog(pkg.name,lock) - - name = xml.sax.saxutils.escape(pkg.name) - summary = xml.sax.saxutils.escape(pkg.shortdesc) - contents = "<big><b>%s</b></big>\n<small>%s\n\n" % (name, summary) - contents = contents + _("New version: %s") % (pkg.version) + "</small>" - - iter = self.store.append([True, contents, pkg.name, pkg.shortdesc, pkg.version, pkg.longdesc, pkg]) - self.add_update(pkg) - i = i + 1 - - if self.download_changes_at_startup: - dialog.hide() - - self.update_count() - return False - - # FIXME: use lsb-release binary and cache the result - def get_dist(self): - f = open("/etc/lsb-release", "r") - lines = f.readlines() - for line in lines: - key, value = line.split("=") - if (key == "DISTRIB_CODENAME"): - return value[:-1] - f.close() - - def current_dist_not_supported(self, name): - #print name - msg = "<big><b>%s</b></big>\n\n%s" % (_("Your distribution is no longer supported"), _("Please upgrade to a newer version of Ubuntu Linux. The version you are running will no longer get security fixes or other critical updates. Please see http://www.ubuntulinux.org for upgrade information.")) - dialog = gtk.MessageDialog(self.main_window, 0, gtk.MESSAGE_WARNING, - gtk.BUTTONS_OK,"") - dialog.set_markup(msg) - dialog.run() - dialog.destroy() - - - def new_dist_available(self, name): - #print name - # check if the user already knowns about this dist - seen = self.gconfclient.get_string("/apps/update-manager/seen_dist") - if name == seen: - return - - msg = "<big><b>%s</b></big>\n\n%s" % (_("There is a new release of Ubuntu available!"), _("A new release with the codename '%s' is available. Please see http://www.ubuntulinux.org/ for upgrade instructions.") % name) - dialog = gtk.MessageDialog(self.main_window, 0, gtk.MESSAGE_INFO, - gtk.BUTTONS_CLOSE, "") - dialog.set_markup(msg) - check = gtk.CheckButton(_("Never show this message again")) - check.show() - dialog.vbox.pack_start(check) - dialog.run() - if check.get_active(): - self.gconfclient.set_string("/apps/update-manager/seen_dist",name) - dialog.destroy() - - # code that does the meta release file checking - def check_meta_release(self): - #print "check_meta_release" - current_dist = self.dist - dists = {} - if self.metarelease_information != None: - #print "meta_release found (current_dist: %s)" % (current_dist) - # we have a meta-release file - current_dist_date = 0 - current_dist_supported = False - new_dist_available = False - # parse it - index_tag = apt_pkg.ParseTagFile(self.metarelease_information) - step_result = index_tag.Step() - while step_result: - if index_tag.Section.has_key("Dist"): - dist = index_tag.Section["Dist"] - date = time.mktime(rfc822.parsedate(index_tag.Section["Date"])) - dists[dist] = date - if dist == current_dist: - current_dist_supported = str_to_bool(index_tag.Section["Supported"]) - current_dist_date = time.mktime(rfc822.parsedate(index_tag.Section["Date"])) - step_result = index_tag.Step() - # check for newer dists - new_dist = "" - found = False - for dist in dists: - if dist == current_dist: - found = True - if dists[dist] > current_dist_date and not dist == current_dist: - new_dist = dist - current_dist_date = dists[dist] - - # we know nothing about the installed distro, so we just return - # silently - if not found: - return False - - # only warn if unsupported and a new dist is available (because - # the development version is also unsupported) - if new_dist != "" and not current_dist_supported: - self.current_dist_not_supported(new_dist) - elif new_dist != "": - self.new_dist_available(new_dist) - # don't run this event again - return False - # we have no information about the meta-release, so run it again - return True - - # the network thread that tries to fetch the meta-index file - def get_meta_release(self): - lastmodified = 0 - req = urllib2.Request(METARELEASE_URI) - if os.access(METARELEASE_FILE, os.W_OK): - lastmodified = os.stat(METARELEASE_FILE).st_mtime - if lastmodified > 0: - req.add_header("If-Modified-Since", lastmodified) - try: - uri=urllib2.urlopen(req) - f=open(METARELEASE_FILE,"w+") - for line in uri.readlines(): - f.write(line) - f.flush() - f.seek(0,0) - self.metarelease_information=f - uri.close() - except urllib2.URLError: - pass - - # fixme: we should probably abstract away all the stuff from libapt - def initCache(self): - # get the lock - try: - apt_pkg.PkgSystemLock() - except SystemError: - d = gtk.MessageDialog(parent=self.main_window, - flags=gtk.DIALOG_MODAL, - type=gtk.MESSAGE_ERROR, - buttons=gtk.BUTTONS_OK) - d.set_markup("<big><b>%s</b></big>\n\n%s" % ( - _("Unable to get exclusive lock"), - _("This usually means that another package management " - "application (like apt-get or aptitude) already running. " - "Please close that application first"))) - res = d.run() - d.destroy() - sys.exit() - - self.cache = apt_pkg.GetCache() - #apt_pkg.Config.Set("Debug::pkgPolicy","1") - self.depcache = apt_pkg.GetDepCache(self.cache) - self.depcache.ReadPinFile() - if os.path.exists(SYNAPTIC_PINFILE): - self.depcache.ReadPinFile(SYNAPTIC_PINFILE) - self.depcache.Init() - self.records = apt_pkg.GetPkgRecords(self.cache) - - - def main(self): - # FIXME: stat a check update thread - self.metarelease_information = None - t=thread.start_new_thread(self.get_meta_release, ()) - gobject.timeout_add(1000, self.check_meta_release) - #self.get_meta_release() - - self.store.append([True, _("Initializing and getting list of updates..."), - None, None, None, None, None]) - - while gtk.events_pending(): - gtk.main_iteration() - - # global init of apt, FIXME: move all the apt details in it's own class - apt_pkg.init() - self.fillstore() - gtk.main() - - -if __name__ == "__main__": - - APP="update-manager" - DIR="/usr/share/locale" - gettext.bindtextdomain(APP, DIR) - gettext.textdomain(APP) - gtk.glade.bindtextdomain(APP, DIR) - gtk.glade.textdomain(APP) - _ = gettext.gettext - if os.geteuid() != 0: - dialog = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, - _("You need to be root to run this program")) - dialog.run() - dialog.destroy() - sys.exit(1) - - if (len(sys.argv) > 1) and (sys.argv[1].strip() == "--download-changes-at-startup"): - updatemanager = UpdateManager(True) - else: - updatemanager = UpdateManager() - updatemanager.main() diff --git a/src/utils.py b/src/utils.py deleted file mode 100644 index 3231ba98..00000000 --- a/src/utils.py +++ /dev/null @@ -1,12 +0,0 @@ -import gobject -import gtk -import gtk.glade - -def error(parent, primary, secondary): - p = "<span weight=\"bold\" size=\"larger\">%s</span>" % primary - dialog = gtk.MessageDialog(parent,gtk.DIALOG_MODAL, - gtk.MESSAGE_ERROR,gtk.BUTTONS_OK,"") - dialog.set_markup(p); - dialog.format_secondary_text(secondary); - dialog.run() - dialog.hide() |
