summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2008-01-17 17:04:12 -0500
committerChris Lumens <clumens@redhat.com>2008-01-22 14:26:12 -0500
commit907ae2ae535727b0b9a25c8cfc605e9d8b76c2af (patch)
treec46fa0d793e902811f5ec3edad36815124579bee
parent18c6a3501d0a3496332a58b0bd51ccd0d9965079 (diff)
downloadanaconda-907ae2ae535727b0b9a25c8cfc605e9d8b76c2af.tar.gz
anaconda-907ae2ae535727b0b9a25c8cfc605e9d8b76c2af.tar.xz
anaconda-907ae2ae535727b0b9a25c8cfc605e9d8b76c2af.zip
Add a repository editor and rework the adding code to make use of it.
-rw-r--r--installclasses/fedora.py2
-rw-r--r--iw/task_gui.py184
-rw-r--r--ui/addrepo.glade326
-rw-r--r--ui/tasksel.glade76
4 files changed, 474 insertions, 114 deletions
diff --git a/installclasses/fedora.py b/installclasses/fedora.py
index 1517d0301..78dcb5377 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 231224382..b481047f3 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 3ab7e6a31..0317700c8 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 6dfaabd87..c5b6cecdd 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>