[PATCH] Add a repository editor and rework the adding code to make use of it.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 installclasses/fedora.py |    2 +-
 iw/task_gui.py           |  184 +++++++++++++++++++++-----
 ui/addrepo.glade         |  326 +++++++++++++++++++++++++++++++++++-----------
 ui/tasksel.glade         |   76 +++++++++++-
 4 files changed, 474 insertions(+), 114 deletions(-)

diff --git a/installclasses/fedora.py b/installclasses/fedora.py
index 1517d03..78dcb53 100644
--- a/installclasses/fedora.py
+++ b/installclasses/fedora.py
@@ -20,7 +20,7 @@
 from installclass import BaseInstallClass
 from rhpl.translate import N_,_
 from constants import *
-import os
+import os, types
 import iutil
 
 import installmethod
diff --git a/iw/task_gui.py b/iw/task_gui.py
index 2312243..b481047 100644
--- a/iw/task_gui.py
+++ b/iw/task_gui.py
@@ -1,7 +1,7 @@
 #
 # task_gui.py: Choose tasks for installation
 #
-# Copyright (C) 2006  Red Hat, Inc.  All rights reserved.
+# Copyright (C) 2006, 2007 Red Hat, Inc.  All rights reserved.
 #
 # 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
@@ -81,7 +81,7 @@ class TaskWindow(InstallWindow):
 
     def _setupRepo(self, repo):
         try:
-            self.backend.doRepoSetup(self.anaconda, repo.id, fatalerrors = False)
+            self.backend.doRepoSetup(self.anaconda, thisrepo = repo.id, fatalerrors = False)
             log.info("added repository %s with with source URL %s" % (repo.name, repo.baseurl[0]))
         except yum.Errors.RepoError, e:
             self.intf.messageWindow(_("Error"),
@@ -102,72 +102,182 @@ class TaskWindow(InstallWindow):
 
         return True
 
+    def _validURL(self, url):
+        return len(url) > 0 and (url.startswith("http://";) or
+                                 url.startswith("https://";) or
+                                 url.startswith("ftp://";))
+
     def _addRepo(self, *args):
+        repo = None
+        editing = False
+
         if not network.hasActiveNetDev():
             net = NetworkConfigurator(self.anaconda.id.network)
             ret = net.run()
             net.destroy()
             if ret == gtk.RESPONSE_CANCEL:
                 return gtk.RESPONSE_CANCEL
-        
-        (dxml, dialog) = gui.getGladeWidget("addrepo.glade", "addRepoDialog")
+
+        # If we were passed an extra argument, it's the repo store and we
+        # are editing an existing repo as opposed to adding a new one.
+        if len(args) > 1:
+            (model, iter) = args[1].get_selection().get_selected()
+            if iter:
+                repo = model.get_value(iter, 2)
+                editing = True
+            else:
+                return
+
+        (self.dxml, dialog) = gui.getGladeWidget("addrepo.glade", "addRepoDialog")
+        nameEntry = self.dxml.get_widget("nameEntry")
+        baseurlButton = self.dxml.get_widget("baseurlButton")
+        baseurlEntry = self.dxml.get_widget("baseurlEntry")
+        mirrorlistButton = self.dxml.get_widget("mirrorlistButton")
+        mirrorlistEntry = self.dxml.get_widget("mirrorlistEntry")
+        proxyCheckbox = self.dxml.get_widget("proxyCheckbox")
+        proxyEntry = self.dxml.get_widget("proxyEntry")
+        proxyTable = self.dxml.get_widget("proxyTable")
+        usernameEntry = self.dxml.get_widget("usernameEntry")
+        passwordEntry = self.dxml.get_widget("passwordEntry")
+
+        # If we are editing an existing repo, use the existing values to
+        # populate the UI.
+        # FIXME: this is yum specific
+        if editing:
+            nameEntry.set_text(repo.name)
+
+            if repo.mirrorlist:
+                mirrorlistEntry.set_text(repo.mirrorlist)
+                mirrorlistButton.set_active(True)
+            else:
+                baseurlEntry.set_text(repo.baseurl[0])
+                baseurlButton.set_active(True)
+
+            if repo.proxy:
+                proxyCheckbox.set_active(True)
+                proxyTable.set_sensitive(True)
+                proxyEntry.set_text(repo.proxy)
+                usernameEntry.set_text(repo.proxy_username)
+                passwordEntry.set_text(repo.proxy_password)
+
         gui.addFrame(dialog)
 
-        lbl = dxml.get_widget("descLabel")
+        # Initialize UI elements that should be sensitive or not.
+        self._proxyToggled()
+        self._radioChanged()
+
+        proxyCheckbox.connect("toggled", self._proxyToggled)
+        baseurlButton.connect("toggled", self._radioChanged)
+
+        lbl = self.dxml.get_widget("descLabel")
         txt = lbl.get_text()
         lbl.set_text(txt %(productName,))
-        
+
         dialog.show_all()
 
         while 1:
             rc = dialog.run()
             if rc == gtk.RESPONSE_CANCEL:
                 break
-        
-            reponame = dxml.get_widget("nameEntry").get_text()
+
+            reponame = nameEntry.get_text()
             reponame.strip()
             if len(reponame) == 0:
                 self.intf.messageWindow(_("Invalid Repository Name"),
                                         _("You must provide a repository name."))
                 continue
 
-            repourl = dxml.get_widget("urlEntry").get_text()
+            if baseurlButton.get_active():
+                repourl = baseurlEntry.get_text()
+            else:
+                repourl = mirrorlistEntry.get_text()
+
             repourl.strip()
-            if (len(repourl) == 0 or not
-                (repourl.startswith("http://";) or
-                 repourl.startswith("ftp://";))):
+            if not self._validURL(repourl):
                 self.intf.messageWindow(_("Invalid Repository URL"),
-                                        _("You must provide an HTTP or FTP "
-                                          "URL to a repository."))
+                                        _("You must provide an HTTP, HTTPS, "
+                                          "or FTP URL to a repository."))
                 continue
 
+            proxy = None
+            proxy_username = None
+            proxy_password = None
+
+            if proxyCheckbox.get_active():
+                proxy = proxyEntry.get_text()
+                proxy.strip()
+                if not self._validURL(proxy):
+                    self.intf.messageWindow(_("Invalid Proxy URL"),
+                                            _("You must provide an HTTP, HTTPS, "
+                                              "or FTP URL to a proxy."))
+                    continue
+
+                proxy_username = usernameEntry.get_text()
+                proxy_password = passwordEntry.get_text()
+
+            # Don't create a new repo object if we are editing.
             # FIXME: this is yum specific
-            repo = AnacondaYumRepo(uri=repourl, repoid=reponame)
+            if editing:
+                if baseurlButton.get_active():
+                    repo.baseurl = [repourl]
+                else:
+                    repo.mirrorlist = repourl
+
+                repo.repoid = reponame.replace(" ", "")
+            else:
+                repoid = reponame.replace(" ", "")
+
+                if baseurlButton.get_active():
+                    repo = AnacondaYumRepo(uri=repourl, repoid=repoid)
+                else:
+                    repo = AnacondaYumRepo(mirrorlist=repourl, repoid=repoid)
+
             repo.name = reponame
             repo.basecachedir = self.backend.ayum.conf.cachedir
+
+            if proxy:
+                repo.proxy = proxy
+                repo.proxy_username = proxy_username
+                repo.proxy_password = proxy_password
+
             repo.enable()
 
-            try:
-                self.backend.ayum.repos.add(repo)
-            except yum.Errors.DuplicateRepoError, e:
-                self.intf.messageWindow(_("Error"),
-                      _("The repository %s has already been added.  Please "
-                        "choose a different repository name and "
-                        "URL.") % reponame, type="ok", custom_icon="error")
-                continue
+            if not editing:
+                try:
+                    self.backend.ayum.repos.add(repo)
+                except yum.Errors.DuplicateRepoError, e:
+                    self.intf.messageWindow(_("Error"),
+                          _("The repository %s has already been added.  Please "
+                            "choose a different repository name and "
+                            "URL.") % reponame, type="ok", custom_icon="error")
+                    continue
 
             if not self._setupRepo(repo):
                 continue
 
-            s = self.xml.get_widget("repoList").get_model()
-            s.append([repo.isEnabled(), repo.name, repo])
-            self.repos[repo.name] = (repo.baseurl[0], None)
+            if not editing:
+                s = self.xml.get_widget("repoList").get_model()
+                s.append([repo.isEnabled(), repo.name, repo])
 
             break
 
         dialog.destroy()
         return rc
 
+    def _radioChanged(self, *args):
+        baseurlButton = self.dxml.get_widget("baseurlButton")
+        baseurlEntry = self.dxml.get_widget("baseurlEntry")
+        mirrorlistEntry = self.dxml.get_widget("mirrorlistEntry")
+
+        active = baseurlButton.get_active()
+        baseurlEntry.set_sensitive(active)
+        mirrorlistEntry.set_sensitive(not active)
+
+    def _proxyToggled(self, *args):
+        table = self.dxml.get_widget("proxyTable")
+        checkbox = self.dxml.get_widget("proxyCheckbox")
+        table.set_sensitive(checkbox.get_active())
+
     def _taskToggled(self, data, row, store):
         i = store.get_iter(int(row))
         val = store.get_value(i, 0)
@@ -183,7 +293,7 @@ class TaskWindow(InstallWindow):
             net.destroy()
             if ret == gtk.RESPONSE_CANCEL:
                 return
-        
+
         store.set_value(i, 0, not val)
 
     def _createTaskStore(self):
@@ -207,7 +317,7 @@ class TaskWindow(InstallWindow):
                 continue
             store.append([self.groupsInstalled(grps), _(txt), grps])
 
-        return len(store)
+        return tl
 
     def _createRepoStore(self):
         store = gtk.ListStore(gobject.TYPE_BOOLEAN,
@@ -225,14 +335,11 @@ class TaskWindow(InstallWindow):
         col.set_clickable(False)
         tl.append_column(col)
 
-        for (reponame, uri) in self.repos.items():
-            repoid = reponame.replace(" ", "")
-            if not self.backend.ayum.repos.repos.has_key(repoid):
-                continue
-            repo = self.backend.ayum.repos.repos[repoid]
+        for (reponame, repo) in self.repos.repos.items():
             store.append([repo.isEnabled(), repo.name, repo])
-        
-            
+
+        return tl
+
     def getScreen (self, anaconda):
         self.intf = anaconda.intf
         self.dispatch = anaconda.dispatch
@@ -257,14 +364,17 @@ class TaskWindow(InstallWindow):
         else:
             self.xml.get_widget("customRadio").set_active(False)
 
-        if self._createTaskStore() == 0:
+        self.ts = self._createTaskStore()
+        self.rs = self._createRepoStore()
+
+        if len(self.ts.get_model()) == 0:
             self.xml.get_widget("cbVBox").hide()
             self.xml.get_widget("mainLabel").hide()
 
-        self._createRepoStore()
         if not anaconda.id.instClass.allowExtraRepos:
             vbox.remove(self.xml.get_widget("addRepoBox"))
 
         self.xml.get_widget("addRepoButton").connect("clicked", self._addRepo)
+        self.xml.get_widget("editRepoButton").connect("clicked", self._addRepo, self.rs)
 
         return vbox
diff --git a/ui/addrepo.glade b/ui/addrepo.glade
index 3ab7e6a..0317700 100644
--- a/ui/addrepo.glade
+++ b/ui/addrepo.glade
@@ -4,11 +4,11 @@
 <glade-interface>
 
 <widget class="GtkDialog" id="addRepoDialog">
+  <property name="width_request">440</property>
   <property name="title" translatable="yes" context="yes">Add Repository</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_CENTER</property>
   <property name="modal">False</property>
-  <property name="default_width">320</property>
   <property name="default_height">260</property>
   <property name="resizable">True</property>
   <property name="destroy_with_parent">False</property>
@@ -44,75 +44,13 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkButton" id="addRepoButton">
+	    <widget class="GtkButton" id="okButton">
 	      <property name="visible">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>
-
-	      <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="hbox1">
-		      <property name="visible">True</property>
-		      <property name="homogeneous">False</property>
-		      <property name="spacing">2</property>
-
-		      <child>
-			<widget class="GtkImage" id="image1">
-			  <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="label1">
-			  <property name="visible">True</property>
-			  <property name="label" translatable="yes" context="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>
@@ -157,6 +95,62 @@
 	  </child>
 
 	  <child>
+	    <widget class="GtkHBox" id="hbox1">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">6</property>
+
+	      <child>
+		<widget class="GtkLabel" id="nameLabel">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes" context="yes">&lt;b&gt;Repository _name:&lt;/b&gt;</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="GtkEntry" id="nameEntry">
+		  <property name="visible">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">False</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">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
 	    <widget class="GtkTable" id="table1">
 	      <property name="visible">True</property>
 	      <property name="n_rows">2</property>
@@ -166,9 +160,131 @@
 	      <property name="column_spacing">6</property>
 
 	      <child>
-		<widget class="GtkLabel" id="nameLabel">
+		<widget class="GtkRadioButton" id="baseurlButton">
 		  <property name="visible">True</property>
-		  <property name="label" translatable="yes" context="yes">&lt;b&gt;Repository _name:&lt;/b&gt;</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Repository _URL</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="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkRadioButton" id="mirrorlistButton">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Repository _Mirror</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>
+		  <property name="group">baseurlButton</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="GtkEntry" id="baseurlEntry">
+		  <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">False</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="mirrorlistEntry">
+		  <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">False</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="y_options"></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="proxyCheckbox">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">_Proxy configuration</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="GtkTable" id="proxyTable">
+	      <property name="visible">True</property>
+	      <property name="n_rows">3</property>
+	      <property name="n_columns">2</property>
+	      <property name="homogeneous">False</property>
+	      <property name="row_spacing">12</property>
+	      <property name="column_spacing">6</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label2">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Proxy U_RL:</property>
 		  <property name="use_underline">True</property>
 		  <property name="use_markup">True</property>
 		  <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -178,6 +294,7 @@
 		  <property name="yalign">0.5</property>
 		  <property name="xpad">0</property>
 		  <property name="ypad">0</property>
+		  <property name="mnemonic_widget">proxyEntry</property>
 		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
 		  <property name="width_chars">-1</property>
 		  <property name="single_line_mode">False</property>
@@ -188,22 +305,25 @@
 		  <property name="right_attach">1</property>
 		  <property name="top_attach">0</property>
 		  <property name="bottom_attach">1</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
 		</packing>
 	      </child>
 
 	      <child>
-		<widget class="GtkLabel" id="urlLabel">
+		<widget class="GtkLabel" id="label3">
 		  <property name="visible">True</property>
-		  <property name="label" translatable="yes" context="yes">&lt;b&gt;Repository _URL:&lt;/b&gt;</property>
+		  <property name="label" translatable="yes">Proxy u_sername:</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.5</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">usernameEntry</property>
 		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
 		  <property name="width_chars">-1</property>
 		  <property name="single_line_mode">False</property>
@@ -214,12 +334,44 @@
 		  <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="GtkEntry" id="nameEntry">
+		<widget class="GtkLabel" id="label4">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Proxy pass_word:</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">passwordEntry</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">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="proxyEntry">
 		  <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>
@@ -233,12 +385,14 @@
 		  <property name="right_attach">2</property>
 		  <property name="top_attach">0</property>
 		  <property name="bottom_attach">1</property>
+		  <property name="y_options"></property>
 		</packing>
 	      </child>
 
 	      <child>
-		<widget class="GtkEntry" id="urlEntry">
+		<widget class="GtkEntry" id="usernameEntry">
 		  <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>
@@ -252,13 +406,35 @@
 		  <property name="right_attach">2</property>
 		  <property name="top_attach">1</property>
 		  <property name="bottom_attach">2</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="passwordEntry">
+		  <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">False</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="y_options"></property>
 		</packing>
 	      </child>
 	    </widget>
 	    <packing>
 	      <property name="padding">0</property>
-	      <property name="expand">False</property>
-	      <property name="fill">False</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
 	    </packing>
 	  </child>
 	</widget>
diff --git a/ui/tasksel.glade b/ui/tasksel.glade
index 6dfaabd..c5b6cec 100644
--- a/ui/tasksel.glade
+++ b/ui/tasksel.glade
@@ -253,7 +253,7 @@
 	    <widget class="GtkHButtonBox" id="hbuttonbox1">
 	      <property name="visible">True</property>
 	      <property name="layout_style">GTK_BUTTONBOX_START</property>
-	      <property name="spacing">0</property>
+	      <property name="spacing">5</property>
 
 	      <child>
 		<widget class="GtkButton" id="addRepoButton">
@@ -328,6 +328,80 @@
 		  </child>
 		</widget>
 	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="editRepoButton">
+		  <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>
+
+		  <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="hbox3">
+			  <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-edit</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="label6">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">_Modify 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>
-- 
1.5.3.7

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux