Merge lp:~kubuntu-packagers/ubuntu-release-upgrader/qt5 into lp:ubuntu-release-upgrader

Proposed by Harald Sitter
Status: Merged
Merged at revision: 2863
Proposed branch: lp:~kubuntu-packagers/ubuntu-release-upgrader/qt5
Merge into: lp:ubuntu-release-upgrader
Diff against target: 2003 lines (+798/-641) (has conflicts)
11 files modified
DistUpgrade/DistUpgradeFetcherKDE.py (+159/-111)
DistUpgrade/DistUpgradeViewKDE.py (+59/-66)
DistUpgrade/QUrlOpener.py (+80/-0)
DistUpgrade/dialog_changes.ui (+107/-133)
DistUpgrade/dialog_error.ui (+70/-88)
DistUpgrade/dialog_release_notes.ui (+24/-20)
DistUpgrade/fetch-progress.ui (+25/-56)
DistUpgrade/window_main.ui (+173/-166)
debian/changelog (+87/-0)
debian/control (+2/-1)
do-release-upgrade (+12/-0)
Text conflict in debian/changelog
To merge this branch: bzr merge lp:~kubuntu-packagers/ubuntu-release-upgrader/qt5
Reviewer Review Type Date Requested Status
Kubuntu Developers Pending
Jonathan Riddell Pending
Review via email: mp+229620@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Rohan Garg (rohangarg) wrote :

Generally looks alright to me.

Revision history for this message
Dmitry Shachnev (mitya57) :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'DistUpgrade/DistUpgradeFetcherKDE.py'
--- DistUpgrade/DistUpgradeFetcherKDE.py 2014-05-02 13:07:42 +0000
+++ DistUpgrade/DistUpgradeFetcherKDE.py 2014-08-05 13:50:46 +0000
@@ -2,6 +2,7 @@
2# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-2# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-
3#3#
4# Copyright (c) 2008 Canonical Ltd4# Copyright (c) 2008 Canonical Ltd
5# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org>
5#6#
6# Author: Jonathan Riddell <jriddell@ubuntu.com>7# Author: Jonathan Riddell <jriddell@ubuntu.com>
7#8#
@@ -18,58 +19,100 @@
18# You should have received a copy of the GNU General Public License19# You should have received a copy of the GNU General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.20# along with this program. If not, see <http://www.gnu.org/licenses/>.
2021
21from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineOptions, KCmdLineArgs22try:
22from PyKDE4.kdeui import KIcon, KMessageBox, KApplication, KStandardGuiItem23 # 14.04 has a broken pyqt5, so don't even try to import it and require
23from PyQt4.QtCore import QDir, QTimer24 # pyqt4.
24from PyQt4.QtGui import QDialog, QDialogButtonBox25 # In 14.04 various signals in pyqt5 can not be connected because it thinks
25from PyQt4 import uic26 # the signal does not exist or has an incompatible signature. Since this
27 # potentially renders the GUI entirely broken and pyqt5 was not actively
28 # used back then it is fair to simply require qt4 on trusty systems.
29 from .utils import get_dist
30 if get_dist() == 'trusty':
31 raise ImportError
32
33 from PyQt5 import uic
34 from PyQt5.QtCore import *
35 from PyQt5.QtGui import *
36 from PyQt5.QtWidgets import *
37except ImportError:
38 from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineOptions, KCmdLineArgs
39 from PyKDE4.kdeui import KIcon, KMessageBox, KApplication, KStandardGuiItem
40 from PyQt4.QtCore import QDir, QTimer
41 from PyQt4.QtGui import QDialog, QDialogButtonBox
42 from PyQt4 import uic
2643
27import apt_pkg44import apt_pkg
28import sys45import sys
2946
30from .utils import inhibit_sleep, allow_sleep47from DistUpgrade.utils import inhibit_sleep, allow_sleep
31from .DistUpgradeFetcherCore import DistUpgradeFetcherCore48from DistUpgrade.DistUpgradeFetcherCore import DistUpgradeFetcherCore
32from gettext import gettext as _49from gettext import gettext as _
33from urllib.request import urlopen50from urllib.request import urlopen
34from urllib.error import HTTPError51from urllib.error import HTTPError
35import os52import os
3653
37from .MetaRelease import MetaReleaseCore
38import apt54import apt
3955
56from .QUrlOpener import QUrlOpener
57
58# TODO: uifile resolution is an utter mess and should be revised globally for
59# both the fetcher and the upgrader GUI.
60
61# TODO: make this a singleton
62# We have no globally constructed QApplication available so we need to
63# make sure that one is created when needed. Since from a module POV
64# this can be happening in any order of the two classes this function takes care
65# of it for the classes, the classes only hold a ref to the qapp returned
66# to prevent it from getting GC'd, so in essence this is a singleton scoped to
67# the longest lifetime of an instance from the Qt GUI. Since the lifetime is
68# pretty much equal to the process' one we might as well singleton up.
69def _ensureQApplication():
70 if not QApplication.instance():
71 app = QApplication(["ubuntu-release-upgrader"])
72 # Try to load default Qt translations so we don't have to worry about
73 # QStandardButton translations.
74 # FIXME: make sure we dep on l10n
75 translator = QTranslator(app)
76 if PYQT_VERSION >= 0x50000:
77 translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt5/translations')
78 else:
79 translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt4/translations')
80 app.installTranslator(translator)
81 return app
82 return QApplication.instance()
83
84# Qt 5 vs. KDELibs4 compat functions
85def _warning(text):
86 if PYQT_VERSION >= 0x50000:
87 QMessageBox.warning(None, "", text)
88 else:
89 KMessageBox.sorry(None, text, "")
90
91def _icon(name):
92 if PYQT_VERSION >= 0x50000:
93 return QIcon.fromTheme(name)
94 else:
95 return KIcon(name)
4096
41class DistUpgradeFetcherKDE(DistUpgradeFetcherCore):97class DistUpgradeFetcherKDE(DistUpgradeFetcherCore):
42 """A small application run by Adept to download, verify98
43 and run the dist-upgrade tool"""99 def __init__(self, new_dist, progress, parent, datadir):
44100 DistUpgradeFetcherCore.__init__(self, new_dist, progress)
45 def __init__(self, useDevelopmentRelease=False, useProposed=False):101
46 self.useDevelopmentRelease = useDevelopmentRelease102 self.app = _ensureQApplication()
47 self.useProposed = useProposed103 self.app.setWindowIcon(_icon("system-software-update"))
48 metaRelease = MetaReleaseCore(useDevelopmentRelease, useProposed)104
49 metaRelease.downloaded.wait()105 self.datadir = datadir
50 if metaRelease.new_dist is None and __name__ == "__main__":106
51 sys.exit()107 QUrlOpener().setupUrlHandles()
52 elif metaRelease.new_dist is None:108
53 return109 QApplication.processEvents()
54
55 self.progressDialogue = QDialog()
56 if os.path.exists("fetch-progress.ui"):
57 self.APPDIR = QDir.currentPath()
58 else:
59 self.APPDIR = "/usr/share/ubuntu-release-upgrader"
60
61 uic.loadUi(self.APPDIR + "/fetch-progress.ui", self.progressDialogue)
62 self.progressDialogue.setWindowIcon(KIcon("system-software-update"))
63 self.progressDialogue.setWindowTitle(_("Upgrade"))
64 self.progress = KDEAcquireProgressAdapter(
65 self.progressDialogue.installationProgress,
66 self.progressDialogue.installingLabel,
67 None)
68 DistUpgradeFetcherCore.__init__(self, metaRelease.new_dist,
69 self.progress)
70110
71 def error(self, summary, message):111 def error(self, summary, message):
72 KMessageBox.sorry(None, message, summary)112 if PYQT_VERSION >= 0x50000:
113 QMessageBox.critical(None, summary, message)
114 else:
115 KMessageBox.sorry(None, message, summary)
73116
74 def runDistUpgrader(self):117 def runDistUpgrader(self):
75 inhibit_sleep()118 inhibit_sleep()
@@ -80,73 +123,103 @@
80 self.script + " --frontend=DistUpgradeViewKDE"])123 self.script + " --frontend=DistUpgradeViewKDE"])
81 else:124 else:
82 os.execv(self.script,125 os.execv(self.script,
83 [self.script] + ["--frontend=DistUpgradeViewKDE"] +126 [self.script, "--frontend=DistUpgradeViewKDE" + self.run_options])
84 self.run_options)
85 # we shouldn't come to this point, but if we do, undo our127 # we shouldn't come to this point, but if we do, undo our
86 # inhibit sleep128 # inhibit sleep
87 allow_sleep()129 allow_sleep()
88130
89 def showReleaseNotes(self):131 def showReleaseNotes(self):
90 # FIXME: care about i18n! (append -$lang or something)132 # FIXME: care about i18n! (append -$lang or something)
91 self.dialogue = QDialog()133 # TODO: ^ what is this supposed to mean?
92 uic.loadUi(self.APPDIR + "/dialog_release_notes.ui", self.dialogue)134 self.dialog = QDialog()
93 upgradeButton = self.dialogue.buttonBox.button(QDialogButtonBox.Ok)135 uic.loadUi(self.datadir + "/dialog_release_notes.ui", self.dialog)
94 upgradeButton.setText(_("Upgrade"))136 upgradeButton = self.dialog.buttonBox.button(QDialogButtonBox.Ok)
95 upgradeButton.setIcon(KIcon("dialog-ok"))137 upgradeButton.setText(_("&Upgrade"))
96 cancelButton = self.dialogue.buttonBox.button(QDialogButtonBox.Cancel)138 upgradeButton.setIcon(_icon("dialog-ok"))
97 cancelButton.setIcon(KIcon("dialog-cancel"))139 cancelButton = self.dialog.buttonBox.button(QDialogButtonBox.Cancel)
98 self.dialogue.setWindowTitle(_("Release Notes"))140 cancelButton.setText(_("&Cancel"))
99 self.dialogue.show()141 cancelButton.setIcon(_icon("dialog-cancel"))
100 if self.new_dist.releaseNotesURI is not None:142 self.dialog.setWindowTitle(_("Release Notes"))
101 uri = self._expandUri(self.new_dist.releaseNotesURI)143 self.dialog.show()
144 if self.new_dist.releaseNotesHtmlUri is not None:
145 uri = self._expandUri(self.new_dist.releaseNotesHtmlUri)
102 # download/display the release notes146 # download/display the release notes
103 # FIXME: add some progress reporting here147 # TODO: add some progress reporting here
104 result = None148 result = None
105 try:149 try:
106 release_notes = urlopen(uri)150 release_notes = urlopen(uri)
107 notes = release_notes.read().decode("UTF-8", "replace")151 notes = release_notes.read().decode("UTF-8", "replace")
108 self.dialogue.scrolled_notes.setText(notes)152 self.dialog.scrolled_notes.setText(notes)
109 result = self.dialogue.exec_()153 result = self.dialog.exec_()
110 except HTTPError:154 except HTTPError:
111 primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \155 primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \
112 _("Could not find the release notes")156 _("Could not find the release notes")
113 secondary = _("The server may be overloaded. ")157 secondary = _("The server may be overloaded. ")
114 KMessageBox.sorry(None, primary + "<br />" + secondary, "")158 self._warning(primary + "<br />" + secondary)
115 except IOError:159 except IOError:
116 primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \160 primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \
117 _("Could not download the release notes")161 _("Could not download the release notes")
118 secondary = _("Please check your internet connection.")162 secondary = _("Please check your internet connection.")
119 KMessageBox.sorry(None, primary + "<br />" + secondary, "")163 self._warning(primary + "<br />" + secondary)
120 # user clicked cancel164 # user clicked cancel
121 if result == QDialog.Accepted:165 if result == QDialog.Accepted:
122 self.progressDialogue.show()
123 return True166 return True
124 if __name__ == "__main__":
125 KApplication.kApplication().exit(1)
126 if self.useDevelopmentRelease or self.useProposed:
127 #FIXME why does KApplication.kApplication().exit() crash but
128 # this doesn't?
129 sys.exit()
130 return False167 return False
131168
169 # FIXME: largely code copy from ReleaseNotesViewer which imports GTK.
170 @pyqtSlot(QUrl)
171 def openUrl(self, url):
172 url = url.toString()
173 import subprocess
174 """Open the specified URL in a browser"""
175 # Find an appropiate browser
176 if os.path.exists("/usr/bin/kde-open"):
177 command = ["kde-open", url]
178 elif os.path.exists("/usr/bin/xdg-open"):
179 command = ["xdg-open", url]
180 elif os.path.exists("/usr/bin/exo-open"):
181 command = ["exo-open", url]
182 elif os.path.exists('/usr/bin/gnome-open'):
183 command = ['gnome-open', url]
184 else:
185 command = ['x-www-browser', url]
186 # Avoid to run the browser as user root
187 if os.getuid() == 0 and 'SUDO_USER' in os.environ:
188 command = ['sudo', '-u', os.environ['SUDO_USER']] + command
189 subprocess.Popen(command)
132190
133class KDEAcquireProgressAdapter(apt.progress.base.AcquireProgress):191class KDEAcquireProgressAdapter(apt.progress.base.AcquireProgress):
134 def __init__(self, progress, label, parent):192 def __init__(self, parent, datadir, label):
135 self.progress = progress193 self.app = _ensureQApplication()
136 self.label = label194 self.dialog = QDialog()
137 self.parent = parent195
196 uiFile = os.path.join(datadir, "fetch-progress.ui")
197 uic.loadUi(uiFile, self.dialog)
198 self.dialog.setWindowTitle(_("Upgrade"))
199 self.dialog.installingLabel.setText(label)
200 self.dialog.buttonBox.rejected.connect(self.abort)
201
202 # This variable is used as return value for AcquireProgress pulses.
203 # Setting it to False will abort the Acquire and consequently the
204 # entire fetcher.
205 self._continue = True
206
207 QApplication.processEvents()
208
209 def abort(self):
210 self._continue = False
138211
139 def start(self):212 def start(self):
140 self.label.setText(_("Downloading additional package files..."))213 self.dialog.installingLabel.setText(_("Downloading additional package files..."))
141 self.progress.setValue(0)214 self.dialog.installationProgress.setValue(0)
215 self.dialog.show()
142216
143 def stop(self):217 def stop(self):
144 pass218 self.dialog.hide()
145219
146 def pulse(self, owner):220 def pulse(self, owner):
147 apt.progress.base.AcquireProgress.pulse(self, owner)221 apt.progress.base.AcquireProgress.pulse(self, owner)
148 self.progress.setValue((self.current_bytes + self.current_items) /222 self.dialog.installationProgress.setValue((self.current_bytes + self.current_items) / float(self.total_bytes + self.total_items) * 100)
149 float(self.total_bytes + self.total_items))
150 current_item = self.current_items + 1223 current_item = self.current_items + 1
151 if current_item > self.total_items:224 if current_item > self.total_items:
152 current_item = self.total_items225 current_item = self.total_items
@@ -158,47 +231,22 @@
158 else:231 else:
159 label_text += _("File %s of %s") % (232 label_text += _("File %s of %s") % (
160 self.current_items, self.total_items)233 self.current_items, self.total_items)
161 self.label.setText(label_text)234 self.dialog.installingLabel.setText(label_text)
162 KApplication.kApplication().processEvents()235 QApplication.processEvents()
163 return True236 return self._continue
164237
165 def mediaChange(self, medium, drive):238 def mediaChange(self, medium, drive):
166 msg = _("Please insert '%s' into the drive '%s'") % (medium, drive)239 msg = _("Please insert '%s' into the drive '%s'") % (medium, drive)
167 #change = QMessageBox.question(None, _("Media Change"), msg,240 if PYQT_VERSION >= 0x50000:
168 # QMessageBox.Ok, QMessageBox.Cancel)241 change = QMessageBox.question(None, _("Media Change"), msg,
169 change = KMessageBox.questionYesNo(None, _("Media Change"),242 QMessageBox.Ok, QMessageBox.Cancel)
170 _("Media Change") + "<br>" + msg,243 if change == QMessageBox.Ok:
171 KStandardGuiItem.ok(),244 return True
172 KStandardGuiItem.cancel())245 else:
173 if change == KMessageBox.Yes:246 change = KMessageBox.questionYesNo(None, _("Media Change"),
174 return True247 _("Media Change") + "<br>" + msg,
248 KStandardGuiItem.ok(),
249 KStandardGuiItem.cancel())
250 if change == KMessageBox.Yes:
251 return True
175 return False252 return False
176
177if __name__ == "__main__":
178
179 appName = "dist-upgrade-fetcher"
180 catalog = ""
181 programName = ki18n("Dist Upgrade Fetcher")
182 version = "0.3.4"
183 description = ki18n("Dist Upgrade Fetcher")
184 license = KAboutData.License_GPL
185 copyright = ki18n("(c) 2008 Canonical Ltd")
186 text = ki18n("none")
187 homePage = "https://launchpad.net/ubuntu-release-upgrader"
188 bugEmail = ""
189
190 aboutData = KAboutData(appName, catalog, programName, version, description,
191 license, copyright, text, homePage, bugEmail)
192
193 aboutData.addAuthor(ki18n("Jonathan Riddell"), ki18n("Author"))
194
195 options = KCmdLineOptions()
196
197 KCmdLineArgs.init(sys.argv, aboutData)
198 KCmdLineArgs.addCmdLineOptions(options)
199
200 app = KApplication()
201 fetcher = DistUpgradeFetcherKDE()
202 QTimer.singleShot(10, fetcher.run)
203
204 app.exec_()
205253
=== modified file 'DistUpgrade/DistUpgradeViewKDE.py'
--- DistUpgrade/DistUpgradeViewKDE.py 2014-05-02 13:07:42 +0000
+++ DistUpgrade/DistUpgradeViewKDE.py 2014-08-05 13:50:46 +0000
@@ -1,9 +1,10 @@
1# DistUpgradeViewKDE.py 1# DistUpgradeViewKDE.py
2# 2#
3# Copyright (c) 2007 Canonical Ltd3# Copyright (c) 2007 Canonical Ltd
4# 4# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org>
5#
5# Author: Jonathan Riddell <jriddell@ubuntu.com>6# Author: Jonathan Riddell <jriddell@ubuntu.com>
6# 7#
7# This program is free software; you can redistribute it and/or 8# This program is free software; you can redistribute it and/or
8# modify it under the terms of the GNU General Public License as 9# modify it under the terms of the GNU General Public License as
9# published by the Free Software Foundation; either version 2 of the10# published by the Free Software Foundation; either version 2 of the
@@ -19,13 +20,26 @@
19# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-130720# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
20# USA21# USA
2122
22from PyQt4.QtCore import QUrl, Qt, SIGNAL, QTimer23try:
23from PyQt4.QtGui import (24 # 14.04 has a broken pyqt5, so don't even try to import it and require
24 QDesktopServices, QDialog, QPixmap, QTreeWidgetItem, QMessageBox, 25 # pyqt4.
25 QApplication, QTextEdit, QTextOption, QTextCursor, QPushButton, 26 # In 14.04 various signals in pyqt5 can not be connected because it thinks
26 QWidget, QIcon, QHBoxLayout, QLabel27 # the signal does not exist or has an incompatible signature. Since this
27 )28 # potentially renders the GUI entirely broken and pyqt5 was not actively
28from PyQt4 import uic29 # used back then it is fair to simply require qt4 on trusty systems.
30 from .utils import get_dist
31 if get_dist() == 'trusty':
32 raise ImportError
33
34 from PyQt5 import uic
35 from PyQt5.QtCore import *
36 from PyQt5.QtGui import *
37 from PyQt5.QtWidgets import *
38except ImportError:
39 from PyQt4 import uic
40 from PyQt4.QtCore import *
41 from PyQt4.QtGui import *
42 # If we still throw an exception, bounce back to Main to try another UI.
2943
30import sys44import sys
31import locale45import locale
@@ -51,14 +65,16 @@
51from .DistUpgradeGettext import gettext as _65from .DistUpgradeGettext import gettext as _
52from .DistUpgradeGettext import unicode_gettext66from .DistUpgradeGettext import unicode_gettext
5367
68from .QUrlOpener import QUrlOpener
5469
70# FIXME: what's the purpose?
55def utf8(s, errors="strict"):71def utf8(s, errors="strict"):
56 if isinstance(s, bytes):72 if isinstance(s, bytes):
57 return s.decode("UTF-8", errors)73 return s.decode("UTF-8", errors)
58 else:74 else:
59 return s75 return s
6076
6177# FIXME: what's the purpose?
62def loadUi(file, parent):78def loadUi(file, parent):
63 if os.path.exists(file):79 if os.path.exists(file):
64 uic.loadUi(file, parent)80 uic.loadUi(file, parent)
@@ -74,6 +90,7 @@
74 QTextEdit.__init__(self, "", parent_frame)90 QTextEdit.__init__(self, "", parent_frame)
75 self.installProgress = installProgress91 self.installProgress = installProgress
76 self.setFontFamily("Monospace")92 self.setFontFamily("Monospace")
93 # FIXME: fixed font size set!!!
77 self.setFontPointSize(8)94 self.setFontPointSize(8)
78 self.setWordWrapMode(QTextOption.NoWrap)95 self.setWordWrapMode(QTextOption.NoWrap)
79 self.setUndoRedoEnabled(False)96 self.setUndoRedoEnabled(False)
@@ -298,7 +315,8 @@
298 dialogue.textview_error.show()315 dialogue.textview_error.show()
299 else:316 else:
300 dialogue.textview_error.hide()317 dialogue.textview_error.hide()
301 dialogue.connect(dialogue.button_bugreport, SIGNAL("clicked()"), self.parent.reportBug)318 # Make sure we have a suitable size depending on whether or not the view is shown
319 dialogue.adjustSize()
302 dialogue.exec_()320 dialogue.exec_()
303321
304 def conffile(self, current, new):322 def conffile(self, current, new):
@@ -316,7 +334,7 @@
316 self.confDialogue.textview_conffile.hide()334 self.confDialogue.textview_conffile.hide()
317 #FIXME, below to be tested335 #FIXME, below to be tested
318 #self.confDialogue.resize(self.confDialogue.minimumSizeHint())336 #self.confDialogue.resize(self.confDialogue.minimumSizeHint())
319 self.confDialogue.connect(self.confDialogue.show_difference_button, SIGNAL("clicked()"), self.showConffile)337 self.confDialogue.show_difference_button.clicked.connect(self.showConffile))
320338
321 # workaround silly dpkg 339 # workaround silly dpkg
322 if not os.path.exists(current):340 if not os.path.exists(current):
@@ -475,18 +493,23 @@
475 except Exception as e:493 except Exception as e:
476 logging.warning("Error setting locales (%s)" % e)494 logging.warning("Error setting locales (%s)" % e)
477495
478 #about = KAboutData("adept_manager","Upgrader","0.1","Dist Upgrade Tool for Kubuntu",KAboutData.License_GPL,"(c) 2007 Canonical Ltd",
479 #"http://wiki.kubuntu.org/KubuntuUpdateManager", "jriddell@ubuntu.com")
480 #about.addAuthor("Jonathan Riddell", None,"jriddell@ubuntu.com")
481 #about.addAuthor("Michael Vogt", None,"michael.vogt@ubuntu.com")
482 #KCmdLineArgs.init(["./dist-upgrade.py"],about)
483
484 # we test for DISPLAY here, QApplication does not throw a 496 # we test for DISPLAY here, QApplication does not throw a
485 # exception when run without DISPLAY but dies instead497 # exception when run without DISPLAY but dies instead
486 if not "DISPLAY" in os.environ:498 if not "DISPLAY" in os.environ:
487 raise Exception("No DISPLAY in os.environ found")499 raise Exception("No DISPLAY in os.environ found")
488 self.app = QApplication(["ubuntu-release-upgrader"])500 self.app = QApplication(["ubuntu-release-upgrader"])
489501
502 # Try to load default Qt translations so we don't have to worry about
503 # QStandardButton translations.
504 translator = QTranslator(self.app)
505 if PYQT_VERSION >= 0x50000:
506 translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt5/translations')
507 else:
508 translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt4/translations')
509 self.app.installTranslator(translator)
510
511 QUrlOpener().setupUrlHandles()
512
490 if os.path.exists("/usr/share/icons/oxygen/48x48/apps/system-software-update.png"):513 if os.path.exists("/usr/share/icons/oxygen/48x48/apps/system-software-update.png"):
491 messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/apps/system-software-update.png")514 messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/apps/system-software-update.png")
492 else:515 else:
@@ -509,30 +532,7 @@
509 sys.excepthook = self._handleException532 sys.excepthook = self._handleException
510533
511 self.window_main.showTerminalButton.setEnabled(False)534 self.window_main.showTerminalButton.setEnabled(False)
512 self.app.connect(self.window_main.showTerminalButton, SIGNAL("clicked()"), self.showTerminal)535 self.window_main.showTerminalButton.clicked.connect(self.showTerminal)
513
514 #kdesu requires us to copy the xauthority file before it removes it when Adept is killed
515 fd, copyXauth = tempfile.mkstemp("", "adept")
516 if 'XAUTHORITY' in os.environ and os.environ['XAUTHORITY'] != copyXauth:
517 shutil.copy(os.environ['XAUTHORITY'], copyXauth)
518 os.environ["XAUTHORITY"] = copyXauth
519
520 # Note that with kdesudo this needs --nonewdcop
521 ## create a new DCOP-Client:
522 #client = DCOPClient()
523 ## connect the client to the local DCOP-server:
524 #client.attach()
525
526 #for qcstring_app in client.registeredApplications():
527 # app = str(qcstring_app)
528 # if app.startswith("adept"):
529 # adept = DCOPApp(qcstring_app, client)
530 # adeptInterface = adept.object("MainApplication-Interface")
531 # adeptInterface.quit()
532
533 # This works just as well
534 subprocess.call(["killall", "adept_manager"])
535 subprocess.call(["killall", "adept_updater"])
536536
537 # init gettext537 # init gettext
538 gettext.bindtextdomain("ubuntu-release-upgrader",localedir)538 gettext.bindtextdomain("ubuntu-release-upgrader",localedir)
@@ -605,24 +605,12 @@
605 dialog = QDialog(self.window_main)605 dialog = QDialog(self.window_main)
606 loadUi("dialog_error.ui", dialog)606 loadUi("dialog_error.ui", dialog)
607 self.translate_widget_children(self.dialog)607 self.translate_widget_children(self.dialog)
608 #FIXME make URL work
609 #dialog.connect(dialog.beastie_url, SIGNAL("leftClickedURL(const QString&)"), self.openURL)
610 dialog.crash_detail.setText(tbtext)608 dialog.crash_detail.setText(tbtext)
609 # Make sure we have a suitable size depending on whether or not the view is shown
610 dialogue.adjustSize()
611 dialog.exec_()611 dialog.exec_()
612 sys.exit(1)612 sys.exit(1)
613613
614 def openURL(self, url):
615 """start konqueror"""
616 #need to run this else kdesu can't run Konqueror
617 #subprocess.call(['su', 'ubuntu', 'xhost', '+localhost'])
618 QDesktopServices.openUrl(QUrl(url))
619
620 def reportBug(self):
621 """start konqueror"""
622 #need to run this else kdesu can't run Konqueror
623 #subprocess.call(['su', 'ubuntu', 'xhost', '+localhost'])
624 QDesktopServices.openUrl(QUrl("https://launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug"))
625
626 def showTerminal(self):614 def showTerminal(self):
627 if self.window_main.konsole_frame.isVisible():615 if self.window_main.konsole_frame.isVisible():
628 self.window_main.konsole_frame.hide()616 self.window_main.konsole_frame.hide()
@@ -708,7 +696,6 @@
708 dialogue.textview_error.show()696 dialogue.textview_error.show()
709 else:697 else:
710 dialogue.textview_error.hide()698 dialogue.textview_error.hide()
711 dialogue.button_bugreport.hide()
712 dialogue.setWindowTitle(_("Information"))699 dialogue.setWindowTitle(_("Information"))
713700
714 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-information.png"):701 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-information.png"):
@@ -718,6 +705,8 @@
718 else:705 else:
719 messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_info.png")706 messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_info.png")
720 dialogue.image.setPixmap(messageIcon)707 dialogue.image.setPixmap(messageIcon)
708 # Make sure we have a suitable size depending on whether or not the view is shown
709 dialogue.adjustSize()
721 dialogue.exec_()710 dialogue.exec_()
722711
723 def error(self, summary, msg, extended_msg=None):712 def error(self, summary, msg, extended_msg=None):
@@ -732,8 +721,6 @@
732 dialogue.textview_error.show()721 dialogue.textview_error.show()
733 else:722 else:
734 dialogue.textview_error.hide()723 dialogue.textview_error.hide()
735 dialogue.button_close.show()
736 self.app.connect(dialogue.button_bugreport, SIGNAL("clicked()"), self.reportBug)
737724
738 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-error.png"):725 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-error.png"):
739 messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/status/dialog-error.png")726 messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/status/dialog-error.png")
@@ -742,6 +729,8 @@
742 else:729 else:
743 messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_critical.png")730 messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_critical.png")
744 dialogue.image.setPixmap(messageIcon)731 dialogue.image.setPixmap(messageIcon)
732 # Make sure we have a suitable size depending on whether or not the view is shown
733 dialogue.adjustSize()
745 dialogue.exec_()734 dialogue.exec_()
746735
747 return False736 return False
@@ -757,9 +746,11 @@
757 loadUi("dialog_changes.ui", self.changesDialogue)746 loadUi("dialog_changes.ui", self.changesDialogue)
758747
759 self.changesDialogue.treeview_details.hide()748 self.changesDialogue.treeview_details.hide()
760 self.changesDialogue.connect(self.changesDialogue.show_details_button, SIGNAL("clicked()"), self.showChangesDialogueDetails)749 self.changesDialogue.buttonBox.helpRequested.connect(self.showChangesDialogueDetails)
761 self.translate_widget_children(self.changesDialogue)750 self.translate_widget_children(self.changesDialogue)
762 self.changesDialogue.show_details_button.setText(_("Details") + " >>>")751 self.changesDialogue.buttonBox.button(QDialogButtonBox.Ok).setText(_("&Start Upgrade"))
752 self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setIcon(QIcon())
753 self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText(_("Details") + " >>>")
763 self.changesDialogue.resize(self.changesDialogue.sizeHint())754 self.changesDialogue.resize(self.changesDialogue.sizeHint())
764755
765 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-warning.png"):756 if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-warning.png"):
@@ -773,9 +764,9 @@
773764
774 if actions != None:765 if actions != None:
775 cancel = actions[0].replace("_", "")766 cancel = actions[0].replace("_", "")
776 self.changesDialogue.button_cancel_changes.setText(cancel)767 self.changesDialogue.buttonBox.button(QDialogButtonBox.Cancel).setText(cancel)
777 confirm = actions[1].replace("_", "")768 confirm = actions[1].replace("_", "")
778 self.changesDialogue.button_confirm_changes.setText(confirm)769 self.changesDialogue.buttonBox.button(QDialogButtonBox.Ok).setText(confirm)
779770
780 summaryText = "<big><b>%s</b></big>" % summary771 summaryText = "<big><b>%s</b></big>" % summary
781 self.changesDialogue.label_summary.setText(summaryText)772 self.changesDialogue.label_summary.setText(summaryText)
@@ -804,10 +795,12 @@
804 def showChangesDialogueDetails(self):795 def showChangesDialogueDetails(self):
805 if self.changesDialogue.treeview_details.isVisible():796 if self.changesDialogue.treeview_details.isVisible():
806 self.changesDialogue.treeview_details.hide()797 self.changesDialogue.treeview_details.hide()
807 self.changesDialogue.show_details_button.setText(_("Details") + " >>>")798 self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText(_("Details") + " >>>")
799 # Make sure we shrink the dialog otherwise it looks silly
800 self.changesDialogue.adjustSize()
808 else:801 else:
809 self.changesDialogue.treeview_details.show()802 self.changesDialogue.treeview_details.show()
810 self.changesDialogue.show_details_button.setText("<<< " + _("Details"))803 self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText("<<< " + _("Details"))
811 self.changesDialogue.resize(self.changesDialogue.sizeHint())804 self.changesDialogue.resize(self.changesDialogue.sizeHint())
812805
813 def askYesNoQuestion(self, summary, msg, default='No'):806 def askYesNoQuestion(self, summary, msg, default='No'):
814807
=== added file 'DistUpgrade/QUrlOpener.py'
--- DistUpgrade/QUrlOpener.py 1970-01-01 00:00:00 +0000
+++ DistUpgrade/QUrlOpener.py 2014-08-05 13:50:46 +0000
@@ -0,0 +1,80 @@
1# QUrlOpener.py
2# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-
3#
4# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org>
5#
6# This program is free software; you can redistribute it and/or
7# modify it under the terms of the GNU General Public License as
8# published by the Free Software Foundation; either version 2 of the
9# License, or (at your option) any later version.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
15#
16# You should have received a copy of the GNU General Public License
17# along with this program. If not, see <http://www.gnu.org/licenses/>.
18
19try:
20 # 14.04 has a broken pyqt5, so don't even try to import it and require
21 # pyqt4.
22 # In 14.04 various signals in pyqt5 can not be connected because it thinks
23 # the signal does not exist or has an incompatible signature. Since this
24 # potentially renders the GUI entirely broken and pyqt5 was not actively
25 # used back then it is fair to simply require qt4 on trusty systems.
26 from .utils import get_dist
27 if get_dist() == 'trusty':
28 raise ImportError
29
30 from PyQt5.QtCore import *
31 from PyQt5.QtGui import *
32except ImportError:
33 from PyQt4.QtCore import *
34 from PyQt4.QtGui import *
35
36import os
37import subprocess
38
39def singleton(class_):
40 instances = {}
41 def instance(*args, **kwargs):
42 if class_ not in instances:
43 instances[class_] = class_(*args, **kwargs)
44 return instances[class_]
45 return instance
46
47@singleton
48class QUrlOpener(QObject):
49 def __init__(self):
50 QObject.__init__(self)
51 self.setParent(QCoreApplication.instance())
52
53 def setupUrlHandles(self):
54 # Make sure we don't run a root browser.
55 # NOTE: Qt native API can set an openUrl handler from a QObject
56 # function, pyqt in theory also allows an arbitrary callable. Latter has
57 # been observed to be non-functional so rely on the native handling.
58 QDesktopServices.setUrlHandler('http', self, 'openUrl')
59 QDesktopServices.setUrlHandler('https', self, 'openUrl')
60
61 # NOTE: largely code copy from ReleaseNotesViewer which imports GTK.
62 @pyqtSlot(QUrl)
63 def openUrl(self, url):
64 url = url.toString()
65 """Open the specified URL in a browser"""
66 # Find an appropiate browser
67 if os.path.exists("/usr/bin/xdg-open"):
68 command = ["xdg-open", url]
69 elif os.path.exists("/usr/bin/kde-open"):
70 command = ["kde-open", url]
71 elif os.path.exists("/usr/bin/exo-open"):
72 command = ["exo-open", url]
73 elif os.path.exists('/usr/bin/gnome-open'):
74 command = ['gnome-open', url]
75 else:
76 command = ['x-www-browser', url]
77 # Avoid to run the browser as user root
78 if os.getuid() == 0 and 'SUDO_USER' in os.environ:
79 command = ['sudo', '-u', os.environ['SUDO_USER']] + command
80 subprocess.Popen(command)
081
=== modified file 'DistUpgrade/dialog_changes.ui'
--- DistUpgrade/dialog_changes.ui 2008-09-12 12:19:10 +0000
+++ DistUpgrade/dialog_changes.ui 2014-08-05 13:50:46 +0000
@@ -1,7 +1,8 @@
1<ui version="4.0" >1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
2 <class>dialog_changes</class>3 <class>dialog_changes</class>
3 <widget class="QDialog" name="dialog_changes" >4 <widget class="QDialog" name="dialog_changes">
4 <property name="geometry" >5 <property name="geometry">
5 <rect>6 <rect>
6 <x>0</x>7 <x>0</x>
7 <y>0</y>8 <y>0</y>
@@ -9,58 +10,51 @@
9 <height>417</height>10 <height>417</height>
10 </rect>11 </rect>
11 </property>12 </property>
12 <property name="sizePolicy" >13 <property name="sizePolicy">
13 <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >14 <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
14 <horstretch>0</horstretch>15 <horstretch>0</horstretch>
15 <verstretch>0</verstretch>16 <verstretch>0</verstretch>
16 </sizepolicy>17 </sizepolicy>
17 </property>18 </property>
18 <property name="windowTitle" >19 <property name="windowTitle">
19 <string>Package Changes</string>20 <string>Package Changes</string>
20 </property>21 </property>
21 <property name="modal" >22 <property name="modal">
22 <bool>true</bool>23 <bool>true</bool>
23 </property>24 </property>
24 <layout class="QGridLayout" >25 <layout class="QVBoxLayout" name="verticalLayout">
25 <item row="3" column="3" >26 <item>
26 <widget class="QPushButton" name="button_cancel_changes" >27 <layout class="QHBoxLayout">
27 <property name="text" >
28 <string>&amp;Cancel</string>
29 </property>
30 </widget>
31 </item>
32 <item row="0" column="0" colspan="4" >
33 <layout class="QHBoxLayout" >
34 <item>28 <item>
35 <layout class="QVBoxLayout" >29 <layout class="QVBoxLayout">
36 <item>30 <item>
37 <widget class="QLabel" name="question_pixmap" >31 <widget class="QLabel" name="question_pixmap">
38 <property name="sizePolicy" >32 <property name="sizePolicy">
39 <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >33 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
40 <horstretch>0</horstretch>34 <horstretch>0</horstretch>
41 <verstretch>0</verstretch>35 <verstretch>0</verstretch>
42 </sizepolicy>36 </sizepolicy>
43 </property>37 </property>
44 <property name="text" >38 <property name="text">
45 <string/>39 <string/>
46 </property>40 </property>
47 <property name="pixmap" >41 <property name="pixmap">
48 <pixmap>image0</pixmap>42 <pixmap>image0</pixmap>
49 </property>43 </property>
50 <property name="wordWrap" >44 <property name="wordWrap">
51 <bool>false</bool>45 <bool>false</bool>
52 </property>46 </property>
53 </widget>47 </widget>
54 </item>48 </item>
55 <item>49 <item>
56 <spacer name="spacer6" >50 <spacer name="spacer6">
57 <property name="orientation" >51 <property name="orientation">
58 <enum>Qt::Vertical</enum>52 <enum>Qt::Vertical</enum>
59 </property>53 </property>
60 <property name="sizeType" >54 <property name="sizeType">
61 <enum>QSizePolicy::Expanding</enum>55 <enum>QSizePolicy::Expanding</enum>
62 </property>56 </property>
63 <property name="sizeHint" stdset="0" >57 <property name="sizeHint" stdset="0">
64 <size>58 <size>
65 <width>20</width>59 <width>20</width>
66 <height>80</height>60 <height>80</height>
@@ -71,141 +65,121 @@
71 </layout>65 </layout>
72 </item>66 </item>
73 <item>67 <item>
74 <layout class="QVBoxLayout" >68 <layout class="QVBoxLayout">
75 <item>69 <item>
76 <widget class="QLabel" name="label_summary" >70 <widget class="QLabel" name="label_summary">
77 <property name="text" >71 <property name="sizePolicy">
78 <string/>72 <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
79 </property>73 <horstretch>0</horstretch>
80 <property name="textFormat" >74 <verstretch>0</verstretch>
81 <enum>Qt::RichText</enum>75 </sizepolicy>
82 </property>76 </property>
83 <property name="alignment" >77 <property name="text">
84 <set>Qt::AlignVCenter</set>78 <string/>
85 </property>79 </property>
86 <property name="wordWrap" >80 <property name="textFormat">
87 <bool>true</bool>81 <enum>Qt::RichText</enum>
88 </property>82 </property>
89 </widget>83 <property name="alignment">
90 </item>84 <set>Qt::AlignVCenter</set>
91 <item>85 </property>
92 <widget class="QLabel" name="label_changes" >86 <property name="wordWrap">
93 <property name="sizePolicy" >87 <bool>true</bool>
94 <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >88 </property>
95 <horstretch>0</horstretch>89 </widget>
96 <verstretch>0</verstretch>90 </item>
97 </sizepolicy>91 <item>
98 </property>92 <widget class="QLabel" name="label_changes">
99 <property name="text" >93 <property name="sizePolicy">
100 <string/>94 <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
101 </property>95 <horstretch>0</horstretch>
102 <property name="textFormat" >96 <verstretch>0</verstretch>
103 <enum>Qt::RichText</enum>97 </sizepolicy>
104 </property>98 </property>
105 <property name="alignment" >99 <property name="text">
106 <set>Qt::AlignVCenter</set>100 <string/>
107 </property>101 </property>
108 <property name="wordWrap" >102 <property name="textFormat">
109 <bool>true</bool>103 <enum>Qt::RichText</enum>
110 </property>104 </property>
111 </widget>105 <property name="alignment">
106 <set>Qt::AlignVCenter</set>
107 </property>
108 <property name="wordWrap">
109 <bool>true</bool>
110 </property>
111 </widget>
112 </item>
113 <item>
114 <spacer name="spacer6_2">
115 <property name="orientation">
116 <enum>Qt::Vertical</enum>
117 </property>
118 <property name="sizeHint" stdset="0">
119 <size>
120 <width>0</width>
121 <height>0</height>
122 </size>
123 </property>
124 </spacer>
112 </item>125 </item>
113 </layout>126 </layout>
114 </item>127 </item>
115 </layout>128 </layout>
116 </item>129 </item>
117 <item row="1" column="0" >130 <item>
118 <widget class="QPushButton" name="show_details_button" >131 <widget class="QTreeWidget" name="treeview_details">
119 <property name="text" >132 <property name="rootIsDecorated">
120 <string>Details >>></string>
121 </property>
122 </widget>
123 </item>
124 <item row="1" column="1" colspan="3" >
125 <spacer name="spacer2" >
126 <property name="orientation" >
127 <enum>Qt::Horizontal</enum>
128 </property>
129 <property name="sizeType" >
130 <enum>QSizePolicy::Expanding</enum>
131 </property>
132 <property name="sizeHint" stdset="0" >
133 <size>
134 <width>341</width>
135 <height>21</height>
136 </size>
137 </property>
138 </spacer>
139 </item>
140 <item row="3" column="2" >
141 <widget class="QPushButton" name="button_confirm_changes" >
142 <property name="text" >
143 <string>_Start Upgrade</string>
144 </property>
145 </widget>
146 </item>
147 <item row="3" column="0" colspan="2" >
148 <spacer name="spacer3" >
149 <property name="orientation" >
150 <enum>Qt::Horizontal</enum>
151 </property>
152 <property name="sizeType" >
153 <enum>QSizePolicy::Expanding</enum>
154 </property>
155 <property name="sizeHint" stdset="0" >
156 <size>
157 <width>161</width>
158 <height>20</height>
159 </size>
160 </property>
161 </spacer>
162 </item>
163 <item row="2" column="0" colspan="4" >
164 <widget class="QTreeWidget" name="treeview_details" >
165 <property name="rootIsDecorated" >
166 <bool>false</bool>133 <bool>false</bool>
167 </property>134 </property>
168 <column>135 <column>
169 <property name="text" >136 <property name="text">
170 <string>1</string>137 <string>1</string>
171 </property>138 </property>
172 </column>139 </column>
173 </widget>140 </widget>
174 </item>141 </item>
142 <item>
143 <widget class="QDialogButtonBox" name="buttonBox">
144 <property name="standardButtons">
145 <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
146 </property>
147 </widget>
148 </item>
175 </layout>149 </layout>
176 </widget>150 </widget>
177 <layoutdefault spacing="6" margin="11" />151 <layoutdefault spacing="6" margin="11"/>
178 <resources/>152 <resources/>
179 <connections>153 <connections>
180 <connection>154 <connection>
181 <sender>button_confirm_changes</sender>155 <sender>buttonBox</sender>
182 <signal>clicked()</signal>156 <signal>accepted()</signal>
183 <receiver>dialog_changes</receiver>157 <receiver>dialog_changes</receiver>
184 <slot>accept()</slot>158 <slot>accept()</slot>
185 <hints>159 <hints>
186 <hint type="sourcelabel" >160 <hint type="sourcelabel">
187 <x>20</x>161 <x>293</x>
188 <y>20</y>162 <y>163</y>
189 </hint>163 </hint>
190 <hint type="destinationlabel" >164 <hint type="destinationlabel">
191 <x>20</x>165 <x>293</x>
192 <y>20</y>166 <y>208</y>
193 </hint>167 </hint>
194 </hints>168 </hints>
195 </connection>169 </connection>
196 <connection>170 <connection>
197 <sender>button_cancel_changes</sender>171 <sender>buttonBox</sender>
198 <signal>clicked()</signal>172 <signal>rejected()</signal>
199 <receiver>dialog_changes</receiver>173 <receiver>dialog_changes</receiver>
200 <slot>reject()</slot>174 <slot>reject()</slot>
201 <hints>175 <hints>
202 <hint type="sourcelabel" >176 <hint type="sourcelabel">
203 <x>20</x>177 <x>293</x>
204 <y>20</y>178 <y>163</y>
205 </hint>179 </hint>
206 <hint type="destinationlabel" >180 <hint type="destinationlabel">
207 <x>20</x>181 <x>293</x>
208 <y>20</y>182 <y>208</y>
209 </hint>183 </hint>
210 </hints>184 </hints>
211 </connection>185 </connection>
212186
=== modified file 'DistUpgrade/dialog_error.ui'
--- DistUpgrade/dialog_error.ui 2008-09-12 12:19:10 +0000
+++ DistUpgrade/dialog_error.ui 2014-08-05 13:50:46 +0000
@@ -1,117 +1,99 @@
1<ui version="4.0" >1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
2 <class>dialog_error</class>3 <class>dialog_error</class>
3 <widget class="QDialog" name="dialog_error" >4 <widget class="QDialog" name="dialog_error">
4 <property name="geometry" >5 <property name="geometry">
5 <rect>6 <rect>
6 <x>0</x>7 <x>0</x>
7 <y>0</y>8 <y>0</y>
8 <width>427</width>9 <width>268</width>
9 <height>343</height>10 <height>263</height>
10 </rect>11 </rect>
11 </property>12 </property>
12 <property name="windowTitle" >13 <property name="sizePolicy">
14 <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
15 <horstretch>0</horstretch>
16 <verstretch>0</verstretch>
17 </sizepolicy>
18 </property>
19 <property name="windowTitle">
13 <string>Error</string>20 <string>Error</string>
14 </property>21 </property>
15 <property name="modal" >22 <property name="modal">
16 <bool>true</bool>23 <bool>true</bool>
17 </property>24 </property>
18 <layout class="QGridLayout" >25 <layout class="QVBoxLayout" name="verticalLayout">
19 <item row="1" column="0" >26 <item>
20 <spacer name="spacer4" >27 <layout class="QHBoxLayout" name="horizontalLayout">
21 <property name="orientation" >28 <item>
22 <enum>Qt::Vertical</enum>29 <widget class="QLabel" name="image">
23 </property>30 <property name="sizePolicy">
24 <property name="sizeType" >31 <sizepolicy hsizetype="Fixed" vsizetype="Minimum">
25 <enum>QSizePolicy::Expanding</enum>32 <horstretch>0</horstretch>
26 </property>33 <verstretch>0</verstretch>
27 <property name="sizeHint" stdset="0" >34 </sizepolicy>
28 <size>35 </property>
29 <width>21</width>36 <property name="text">
30 <height>161</height>37 <string/>
31 </size>38 </property>
32 </property>39 <property name="pixmap">
33 </spacer>40 <pixmap>image0</pixmap>
34 </item>41 </property>
35 <item row="3" column="3" >42 <property name="wordWrap">
36 <widget class="QPushButton" name="button_close" >43 <bool>false</bool>
37 <property name="text" >44 </property>
38 <string>&amp;Close</string>45 </widget>
39 </property>46 </item>
40 </widget>47 <item>
41 </item>48 <widget class="QLabel" name="label_error">
42 <item row="0" column="0" >49 <property name="sizePolicy">
43 <widget class="QLabel" name="image" >50 <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
44 <property name="sizePolicy" >51 <horstretch>0</horstretch>
45 <sizepolicy vsizetype="Preferred" hsizetype="Fixed" >52 <verstretch>0</verstretch>
46 <horstretch>0</horstretch>53 </sizepolicy>
47 <verstretch>0</verstretch>54 </property>
48 </sizepolicy>55 <property name="text">
49 </property>56 <string/>
50 <property name="text" >57 </property>
51 <string/>58 <property name="wordWrap">
52 </property>59 <bool>true</bool>
53 <property name="pixmap" >60 </property>
54 <pixmap>image0</pixmap>61 </widget>
55 </property>62 </item>
56 <property name="wordWrap" >63 </layout>
57 <bool>false</bool>64 </item>
58 </property>65 <item>
59 </widget>66 <widget class="QTextBrowser" name="textview_error">
60 </item>67 <property name="openExternalLinks">
61 <item row="0" column="1" colspan="3" >
62 <widget class="QLabel" name="label_error" >
63 <property name="text" >
64 <string/>
65 </property>
66 <property name="wordWrap" >
67 <bool>true</bool>68 <bool>true</bool>
68 </property>69 </property>
69 </widget>70 </widget>
70 </item>71 </item>
71 <item row="3" column="0" colspan="2" >72 <item>
72 <spacer name="spacer5" >73 <widget class="QDialogButtonBox" name="buttonBox">
73 <property name="orientation" >74 <property name="standardButtons">
74 <enum>Qt::Horizontal</enum>75 <set>QDialogButtonBox::Close</set>
75 </property>
76 <property name="sizeType" >
77 <enum>QSizePolicy::Expanding</enum>
78 </property>
79 <property name="sizeHint" stdset="0" >
80 <size>
81 <width>130</width>
82 <height>21</height>
83 </size>
84 </property>
85 </spacer>
86 </item>
87 <item row="3" column="2" >
88 <widget class="QPushButton" name="button_bugreport" >
89 <property name="text" >
90 <string>_Report Bug</string>
91 </property>76 </property>
92 </widget>77 </widget>
93 </item>78 </item>
94 <item rowspan="2" row="1" column="1" colspan="3" >
95 <widget class="QTextEdit" name="textview_error" />
96 </item>
97 </layout>79 </layout>
98 </widget>80 </widget>
99 <layoutdefault spacing="6" margin="11" />81 <layoutdefault spacing="6" margin="11"/>
100 <resources/>82 <resources/>
101 <connections>83 <connections>
102 <connection>84 <connection>
103 <sender>button_close</sender>85 <sender>buttonBox</sender>
104 <signal>clicked()</signal>86 <signal>rejected()</signal>
105 <receiver>dialog_error</receiver>87 <receiver>dialog_error</receiver>
106 <slot>close()</slot>88 <slot>close()</slot>
107 <hints>89 <hints>
108 <hint type="sourcelabel" >90 <hint type="sourcelabel">
109 <x>20</x>91 <x>182</x>
110 <y>20</y>92 <y>274</y>
111 </hint>93 </hint>
112 <hint type="destinationlabel" >94 <hint type="destinationlabel">
113 <x>20</x>95 <x>182</x>
114 <y>20</y>96 <y>147</y>
115 </hint>97 </hint>
116 </hints>98 </hints>
117 </connection>99 </connection>
118100
=== modified file 'DistUpgrade/dialog_release_notes.ui'
--- DistUpgrade/dialog_release_notes.ui 2012-06-28 16:12:09 +0000
+++ DistUpgrade/dialog_release_notes.ui 2014-08-05 13:50:46 +0000
@@ -1,7 +1,8 @@
1<ui version="4.0" >1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
2 <class>Dialog</class>3 <class>Dialog</class>
3 <widget class="QDialog" name="Dialog" >4 <widget class="QDialog" name="Dialog">
4 <property name="geometry" >5 <property name="geometry">
5 <rect>6 <rect>
6 <x>0</x>7 <x>0</x>
7 <y>0</y>8 <y>0</y>
@@ -9,27 +10,30 @@
9 <height>476</height>10 <height>476</height>
10 </rect>11 </rect>
11 </property>12 </property>
12 <property name="windowTitle" >13 <property name="windowTitle">
13 <string>Dialog</string>14 <string>Dialog</string>
14 </property>15 </property>
15 <layout class="QGridLayout" name="gridLayout" >16 <layout class="QGridLayout" name="gridLayout">
16 <item row="0" column="0" >17 <item row="1" column="0">
17 <widget class="QTextEdit" name="scrolled_notes" >18 <widget class="QDialogButtonBox" name="buttonBox">
18 <property name="readOnly" >19 <property name="orientation">
19 <bool>true</bool>
20 </property>
21 </widget>
22 </item>
23 <item row="1" column="0" >
24 <widget class="QDialogButtonBox" name="buttonBox" >
25 <property name="orientation" >
26 <enum>Qt::Horizontal</enum>20 <enum>Qt::Horizontal</enum>
27 </property>21 </property>
28 <property name="standardButtons" >22 <property name="standardButtons">
29 <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>23 <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
30 </property>24 </property>
31 </widget>25 </widget>
32 </item>26 </item>
27 <item row="0" column="0">
28 <widget class="QTextBrowser" name="scrolled_notes">
29 <property name="readOnly">
30 <bool>true</bool>
31 </property>
32 <property name="openExternalLinks">
33 <bool>true</bool>
34 </property>
35 </widget>
36 </item>
33 </layout>37 </layout>
34 </widget>38 </widget>
35 <resources/>39 <resources/>
@@ -40,11 +44,11 @@
40 <receiver>Dialog</receiver>44 <receiver>Dialog</receiver>
41 <slot>accept()</slot>45 <slot>accept()</slot>
42 <hints>46 <hints>
43 <hint type="sourcelabel" >47 <hint type="sourcelabel">
44 <x>248</x>48 <x>248</x>
45 <y>254</y>49 <y>254</y>
46 </hint>50 </hint>
47 <hint type="destinationlabel" >51 <hint type="destinationlabel">
48 <x>157</x>52 <x>157</x>
49 <y>274</y>53 <y>274</y>
50 </hint>54 </hint>
@@ -56,11 +60,11 @@
56 <receiver>Dialog</receiver>60 <receiver>Dialog</receiver>
57 <slot>reject()</slot>61 <slot>reject()</slot>
58 <hints>62 <hints>
59 <hint type="sourcelabel" >63 <hint type="sourcelabel">
60 <x>316</x>64 <x>316</x>
61 <y>260</y>65 <y>260</y>
62 </hint>66 </hint>
63 <hint type="destinationlabel" >67 <hint type="destinationlabel">
64 <x>286</x>68 <x>286</x>
65 <y>274</y>69 <y>274</y>
66 </hint>70 </hint>
6771
=== modified file 'DistUpgrade/fetch-progress.ui'
--- DistUpgrade/fetch-progress.ui 2012-06-28 16:12:09 +0000
+++ DistUpgrade/fetch-progress.ui 2014-08-05 13:50:46 +0000
@@ -1,67 +1,36 @@
1<ui version="4.0" >1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
2 <class>Dialog</class>3 <class>Dialog</class>
3 <widget class="QDialog" name="Dialog" >4 <widget class="QDialog" name="Dialog">
4 <property name="geometry" >5 <property name="geometry">
5 <rect>6 <rect>
6 <x>0</x>7 <x>0</x>
7 <y>0</y>8 <y>0</y>
8 <width>408</width>9 <width>409</width>
9 <height>129</height>10 <height>93</height>
10 </rect>11 </rect>
11 </property>12 </property>
12 <property name="windowTitle" >13 <property name="windowTitle">
13 <string>Dialog</string>14 <string>Dialog</string>
14 </property>15 </property>
15 <layout class="QGridLayout" name="gridLayout_3" >16 <layout class="QVBoxLayout" name="verticalLayout">
16 <item row="4" column="0" >17 <item>
17 <widget class="QWidget" native="1" name="installFrame" >18 <widget class="QLabel" name="installingLabel">
18 <layout class="QGridLayout" name="gridLayout_2" >19 <property name="text">
19 <property name="margin" >
20 <number>0</number>
21 </property>
22 <item row="1" column="0" colspan="2" >
23 <widget class="QProgressBar" name="installationProgress" >
24 <property name="value" >
25 <number>24</number>
26 </property>
27 </widget>
28 </item>
29 <item row="3" column="0" colspan="2" >
30 <widget class="QWidget" native="1" name="konsoleFrame" />
31 </item>
32 <item row="4" column="0" colspan="2" >
33 <spacer name="verticalSpacer" >
34 <property name="orientation" >
35 <enum>Qt::Vertical</enum>
36 </property>
37 <property name="sizeHint" stdset="0" >
38 <size>
39 <width>397</width>
40 <height>5</height>
41 </size>
42 </property>
43 </spacer>
44 </item>
45 <item row="0" column="0" colspan="2" >
46 <widget class="QLabel" name="installingLabel" >
47 <property name="text" >
48 <string/>
49 </property>
50 </widget>
51 </item>
52 </layout>
53 </widget>
54 </item>
55 <item row="0" column="0" >
56 <widget class="QLabel" name="titleLabel" >
57 <property name="text" >
58 <string/>20 <string/>
59 </property>21 </property>
60 </widget>22 </widget>
61 </item>23 </item>
62 <item row="5" column="0" >24 <item>
63 <widget class="QDialogButtonBox" name="buttonBox" >25 <widget class="QProgressBar" name="installationProgress">
64 <property name="standardButtons" >26 <property name="value">
27 <number>24</number>
28 </property>
29 </widget>
30 </item>
31 <item>
32 <widget class="QDialogButtonBox" name="buttonBox">
33 <property name="standardButtons">
65 <set>QDialogButtonBox::Close</set>34 <set>QDialogButtonBox::Close</set>
66 </property>35 </property>
67 </widget>36 </widget>
@@ -76,11 +45,11 @@
76 <receiver>Dialog</receiver>45 <receiver>Dialog</receiver>
77 <slot>accept()</slot>46 <slot>accept()</slot>
78 <hints>47 <hints>
79 <hint type="sourcelabel" >48 <hint type="sourcelabel">
80 <x>271</x>49 <x>271</x>
81 <y>169</y>50 <y>169</y>
82 </hint>51 </hint>
83 <hint type="destinationlabel" >52 <hint type="destinationlabel">
84 <x>271</x>53 <x>271</x>
85 <y>94</y>54 <y>94</y>
86 </hint>55 </hint>
@@ -92,11 +61,11 @@
92 <receiver>Dialog</receiver>61 <receiver>Dialog</receiver>
93 <slot>reject()</slot>62 <slot>reject()</slot>
94 <hints>63 <hints>
95 <hint type="sourcelabel" >64 <hint type="sourcelabel">
96 <x>271</x>65 <x>271</x>
97 <y>169</y>66 <y>169</y>
98 </hint>67 </hint>
99 <hint type="destinationlabel" >68 <hint type="destinationlabel">
100 <x>271</x>69 <x>271</x>
101 <y>94</y>70 <y>94</y>
102 </hint>71 </hint>
10372
=== modified file 'DistUpgrade/window_main.ui'
--- DistUpgrade/window_main.ui 2014-05-02 11:46:02 +0000
+++ DistUpgrade/window_main.ui 2014-08-05 13:50:46 +0000
@@ -1,7 +1,8 @@
1<ui version="4.0" >1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
2 <class>window_main</class>3 <class>window_main</class>
3 <widget class="QWidget" name="window_main" >4 <widget class="QWidget" name="window_main">
4 <property name="geometry" >5 <property name="geometry">
5 <rect>6 <rect>
6 <x>0</x>7 <x>0</x>
7 <y>0</y>8 <y>0</y>
@@ -9,26 +10,26 @@
9 <height>294</height>10 <height>294</height>
10 </rect>11 </rect>
11 </property>12 </property>
12 <property name="windowTitle" >13 <property name="windowTitle">
13 <string>Distribution Upgrade</string>14 <string>Distribution Upgrade</string>
14 </property>15 </property>
15 <layout class="QGridLayout" >16 <layout class="QGridLayout">
16 <item row="6" column="0" >17 <item row="6" column="0">
17 <widget class="QPushButton" name="showTerminalButton" >18 <widget class="QPushButton" name="showTerminalButton">
18 <property name="text" >19 <property name="text">
19 <string>Show Terminal >>></string>20 <string>Show Terminal &gt;&gt;&gt;</string>
20 </property>21 </property>
21 </widget>22 </widget>
22 </item>23 </item>
23 <item row="6" column="1" >24 <item row="6" column="1">
24 <spacer name="spacer1" >25 <spacer name="spacer1">
25 <property name="orientation" >26 <property name="orientation">
26 <enum>Qt::Horizontal</enum>27 <enum>Qt::Horizontal</enum>
27 </property>28 </property>
28 <property name="sizeType" >29 <property name="sizeType">
29 <enum>QSizePolicy::Expanding</enum>30 <enum>QSizePolicy::Expanding</enum>
30 </property>31 </property>
31 <property name="sizeHint" stdset="0" >32 <property name="sizeHint" stdset="0">
32 <size>33 <size>
33 <width>302</width>34 <width>302</width>
34 <height>21</height>35 <height>21</height>
@@ -36,25 +37,25 @@
36 </property>37 </property>
37 </spacer>38 </spacer>
38 </item>39 </item>
39 <item rowspan="2" row="4" column="0" colspan="4" >40 <item row="4" column="0" rowspan="2" colspan="4">
40 <widget class="QLabel" name="label_status" >41 <widget class="QLabel" name="label_status">
41 <property name="text" >42 <property name="text">
42 <string/>43 <string/>
43 </property>44 </property>
44 <property name="wordWrap" >45 <property name="wordWrap">
45 <bool>false</bool>46 <bool>false</bool>
46 </property>47 </property>
47 </widget>48 </widget>
48 </item>49 </item>
49 <item rowspan="2" row="5" column="2" >50 <item row="5" column="2" rowspan="2">
50 <spacer name="spacer3" >51 <spacer name="spacer3">
51 <property name="orientation" >52 <property name="orientation">
52 <enum>Qt::Vertical</enum>53 <enum>Qt::Vertical</enum>
53 </property>54 </property>
54 <property name="sizeType" >55 <property name="sizeType">
55 <enum>QSizePolicy::Expanding</enum>56 <enum>QSizePolicy::Expanding</enum>
56 </property>57 </property>
57 <property name="sizeHint" stdset="0" >58 <property name="sizeHint" stdset="0">
58 <size>59 <size>
59 <width>20</width>60 <width>20</width>
60 <height>16</height>61 <height>16</height>
@@ -62,206 +63,212 @@
62 </property>63 </property>
63 </spacer>64 </spacer>
64 </item>65 </item>
65 <item row="2" column="0" colspan="4" >66 <item row="2" column="0" colspan="4">
66 <widget class="QLabel" name="progress_text" >67 <widget class="QLabel" name="progress_text">
67 <property name="text" >68 <property name="text">
68 <string/>69 <string/>
69 </property>70 </property>
70 <property name="wordWrap" >71 <property name="wordWrap">
71 <bool>false</bool>72 <bool>false</bool>
72 </property>73 </property>
73 </widget>74 </widget>
74 </item>75 </item>
75 <item row="1" column="0" colspan="4" >76 <item row="1" column="0" colspan="4">
76 <layout class="QGridLayout" >77 <layout class="QGridLayout">
77 <item row="3" column="0" >78 <item row="3" column="0">
78 <widget class="QLabel" name="image_step4" >79 <widget class="QLabel" name="image_step4">
79 <property name="sizePolicy" >80 <property name="sizePolicy">
80 <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >81 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
81 <horstretch>0</horstretch>82 <horstretch>0</horstretch>
82 <verstretch>0</verstretch>83 <verstretch>0</verstretch>
83 </sizepolicy>84 </sizepolicy>
84 </property>85 </property>
85 <property name="text" >86 <property name="text">
86 <string/>87 <string/>
87 </property>88 </property>
88 <property name="wordWrap" >89 <property name="wordWrap">
89 <bool>false</bool>90 <bool>false</bool>
90 </property>91 </property>
91 </widget>92 </widget>
92 </item>93 </item>
93 <item row="1" column="0" >94 <item row="1" column="0">
94 <widget class="QLabel" name="image_step2" >95 <widget class="QLabel" name="image_step2">
95 <property name="sizePolicy" >96 <property name="sizePolicy">
96 <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >97 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
97 <horstretch>0</horstretch>98 <horstretch>0</horstretch>
98 <verstretch>0</verstretch>99 <verstretch>0</verstretch>
99 </sizepolicy>100 </sizepolicy>
100 </property>101 </property>
101 <property name="text" >102 <property name="text">
102 <string/>103 <string/>
103 </property>104 </property>
104 <property name="wordWrap" >105 <property name="wordWrap">
105 <bool>false</bool>106 <bool>false</bool>
106 </property>107 </property>
107 </widget>108 </widget>
108 </item>109 </item>
109 <item row="0" column="1" >110 <item row="0" column="1">
110 <widget class="QLabel" name="label_step1" >111 <widget class="QLabel" name="label_step1">
111 <property name="text" >112 <property name="text">
112 <string>Preparing to upgrade</string>113 <string>Preparing to upgrade</string>
113 </property>114 </property>
114 <property name="wordWrap" >115 <property name="wordWrap">
115 <bool>false</bool>116 <bool>false</bool>
116 </property>117 </property>
117 </widget>118 </widget>
118 </item>119 </item>
119 <item row="0" column="0" >120 <item row="0" column="0">
120 <widget class="QLabel" name="image_step1" >121 <widget class="QLabel" name="image_step1">
121 <property name="sizePolicy" >122 <property name="sizePolicy">
122 <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >123 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
123 <horstretch>0</horstretch>124 <horstretch>0</horstretch>
124 <verstretch>0</verstretch>125 <verstretch>0</verstretch>
125 </sizepolicy>126 </sizepolicy>
126 </property>127 </property>
127 <property name="text" >128 <property name="text">
128 <string/>129 <string/>
129 </property>130 </property>
130 <property name="wordWrap" >131 <property name="wordWrap">
131 <bool>false</bool>132 <bool>false</bool>
132 </property>133 </property>
133 </widget>134 </widget>
134 </item>135 </item>
135 <item row="2" column="0" >136 <item row="2" column="0">
136 <widget class="QLabel" name="image_step3" >137 <widget class="QLabel" name="image_step3">
137 <property name="sizePolicy" >138 <property name="sizePolicy">
138 <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >139 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
139 <horstretch>0</horstretch>140 <horstretch>0</horstretch>
140 <verstretch>0</verstretch>141 <verstretch>0</verstretch>
141 </sizepolicy>142 </sizepolicy>
142 </property>143 </property>
143 <property name="text" >144 <property name="text">
144 <string/>145 <string/>
145 </property>146 </property>
146 <property name="wordWrap" >147 <property name="wordWrap">
147 <bool>false</bool>148 <bool>false</bool>
148 </property>149 </property>
149 </widget>150 </widget>
150 </item>151 </item>
151 <item row="2" column="1" >152 <item row="2" column="1">
152 <widget class="QLabel" name="label_step3" >153 <widget class="QLabel" name="label_step3">
153 <property name="text" >154 <property name="text">
154 <string>Getting new packages</string>155 <string>Getting new packages</string>
155 </property>156 </property>
156 <property name="wordWrap" >157 <property name="wordWrap">
157 <bool>false</bool>158 <bool>false</bool>
158 </property>159 </property>
159 </widget>160 </widget>
160 </item>161 </item>
161 <item row="4" column="1" >162 <item row="4" column="1">
162 <widget class="QLabel" name="label_step5" >163 <widget class="QLabel" name="label_step5">
163 <property name="text" >164 <property name="text">
164 <string>Cleaning up</string>165 <string>Cleaning up</string>
165 </property>166 </property>
166 <property name="wordWrap" >167 <property name="wordWrap">
167 <bool>false</bool>168 <bool>false</bool>
168 </property>169 </property>
169 </widget>170 </widget>
170 </item>171 </item>
171 <item row="3" column="1" >172 <item row="3" column="1">
172 <widget class="QLabel" name="label_step4" >173 <widget class="QLabel" name="label_step4">
173 <property name="text" >174 <property name="text">
174 <string>Installing the upgrades</string>175 <string>Installing the upgrades</string>
175 </property>176 </property>
176 <property name="wordWrap" >177 <property name="wordWrap">
177 <bool>false</bool>178 <bool>false</bool>
178 </property>179 </property>
179 </widget>180 </widget>
180 </item>181 </item>
181 <item row="1" column="1" >182 <item row="1" column="1">
182 <widget class="QLabel" name="label_step2" >183 <widget class="QLabel" name="label_step2">
183 <property name="text" >184 <property name="text">
184 <string>Setting new software channels</string>185 <string>Setting new software channels</string>
185 </property>186 </property>
186 <property name="wordWrap" >187 <property name="wordWrap">
187 <bool>false</bool>188 <bool>false</bool>
188 </property>189 </property>
189 </widget>190 </widget>
190 </item>191 </item>
191 <item row="5" column="1" >192 <item row="5" column="1">
192 <widget class="QLabel" name="label_step6" >193 <widget class="QLabel" name="label_step6">
193 <property name="text" >194 <property name="text">
194 <string>Restarting the computer</string>195 <string>Restarting the computer</string>
195 </property>196 </property>
196 <property name="wordWrap" >197 <property name="wordWrap">
197 <bool>false</bool>198 <bool>false</bool>
198 </property>199 </property>
199 </widget>200 </widget>
200 </item>201 </item>
201 <item row="4" column="0" >202 <item row="4" column="0">
202 <widget class="QLabel" name="image_step5" >203 <widget class="QLabel" name="image_step5">
203 <property name="sizePolicy" >204 <property name="sizePolicy">
204 <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >205 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
205 <horstretch>0</horstretch>206 <horstretch>0</horstretch>
206 <verstretch>0</verstretch>207 <verstretch>0</verstretch>
207 </sizepolicy>208 </sizepolicy>
208 </property>209 </property>
209 <property name="text" >210 <property name="text">
210 <string/>211 <string/>
211 </property>212 </property>
212 <property name="wordWrap" >213 <property name="wordWrap">
213 <bool>false</bool>214 <bool>false</bool>
214 </property>215 </property>
215 </widget>216 </widget>
216 </item>217 </item>
217 <item row="5" column="0" >218 <item row="5" column="0">
218 <widget class="QLabel" name="image_step6" >219 <widget class="QLabel" name="image_step6">
219 <property name="sizePolicy" >220 <property name="sizePolicy">
220 <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >221 <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
221 <horstretch>0</horstretch>222 <horstretch>0</horstretch>
222 <verstretch>0</verstretch>223 <verstretch>0</verstretch>
223 </sizepolicy>224 </sizepolicy>
224 </property>225 </property>
225 <property name="text" >226 <property name="text">
226 <string/>227 <string/>
227 </property>228 </property>
228 <property name="wordWrap" >229 <property name="wordWrap">
229 <bool>false</bool>230 <bool>false</bool>
230 </property>231 </property>
231 </widget>232 </widget>
232 </item>233 </item>
233 </layout>234 </layout>
234 </item>235 </item>
235 <item row="0" column="0" colspan="4" >236 <item row="0" column="0" colspan="4">
236 <widget class="QLabel" name="label_title" >237 <widget class="QLabel" name="label_title">
237 <property name="text" >238 <property name="text">
238 <string>&lt;b>&lt;big>Upgrading Ubuntu to version 14.10&lt;/big>&lt;/b></string>239 <string>&lt;b&gt;&lt;big&gt;Upgrading Ubuntu to version 14.10&lt;/big&gt;&lt;/b&gt;</string>
239 </property>240 </property>
240 <property name="wordWrap" >241 <property name="wordWrap">
241 <bool>false</bool>242 <bool>false</bool>
242 </property>243 </property>
243 </widget>244 </widget>
244 </item>245 </item>
245 <item row="7" column="0" colspan="3" >246 <item row="7" column="0" colspan="3">
246 <widget class="QFrame" name="konsole_frame" >247 <widget class="QFrame" name="konsole_frame">
247 <property name="frameShape" >248 <property name="frameShape">
248 <enum>QFrame::StyledPanel</enum>249 <enum>QFrame::StyledPanel</enum>
249 </property>250 </property>
250 <property name="frameShadow" >251 <property name="frameShadow">
251 <enum>QFrame::Raised</enum>252 <enum>QFrame::Raised</enum>
252 </property>253 </property>
253 </widget>254 </widget>
254 </item>255 </item>
255 <item row="3" column="0" colspan="3" >256 <item row="3" column="0" colspan="3">
256 <widget class="QProgressBar" name="progressbar_cache" >257 <widget class="QProgressBar" name="progressbar_cache">
257 <property name="value" >258 <property name="sizePolicy">
259 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
260 <horstretch>0</horstretch>
261 <verstretch>0</verstretch>
262 </sizepolicy>
263 </property>
264 <property name="value">
258 <number>24</number>265 <number>24</number>
259 </property>266 </property>
260 </widget>267 </widget>
261 </item>268 </item>
262 </layout>269 </layout>
263 </widget>270 </widget>
264 <layoutdefault spacing="6" margin="11" />271 <layoutdefault spacing="6" margin="11"/>
265 <resources/>272 <resources/>
266 <connections/>273 <connections/>
267</ui>274</ui>
268275
=== modified file 'debian/changelog'
--- debian/changelog 2014-08-05 06:33:47 +0000
+++ debian/changelog 2014-08-05 13:50:46 +0000
@@ -1,9 +1,96 @@
1<<<<<<< TREE
1ubuntu-release-upgrader (1:14.10.6) UNRELEASED; urgency=medium2ubuntu-release-upgrader (1:14.10.6) UNRELEASED; urgency=medium
23
3 * check-new-release-gtk: Fix deprecated Gio.Settings constructor invocation.4 * check-new-release-gtk: Fix deprecated Gio.Settings constructor invocation.
45
5 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 05 Aug 2014 08:33:11 +02006 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 05 Aug 2014 08:33:11 +0200
67
8=======
9ubuntu-release-upgrader (1:14.10.6ubuntu1) UNRELEASED; urgency=medium
10
11 * Port KDE GUIs to native Qt5 versions.
12 + pyqt5 is only imported iff the current dist version is not trusty as
13 that one had a nasty bug with signals and slots not connecting properly.
14 + pyqt4/pykde4 compatibility is retained by fallback handling for the
15 pyqt5 import, as well as some version checks switching out kde classes
16 for qt classes when using Qt5. Ultimately systems <=utopic will retain
17 the same behavior as before.
18 + KDE bits replacemed as follows:
19 * KIcon -> QIcon::fromTheme
20 * KMessageBox -> QMessageBox (using most suitable version from the
21 limited feature set of QMB)
22 * KApplication -> QApplication
23 * i18n -> _()
24 * Fix KDE upgrade fetcher GUI
25 + Wire up do-release-upgrade with the KDE GUI to actually provide a UI
26 when run from a KDE Plasma envrionment
27 + Remove all logic that replicated stuff done in do-release-upgrade
28 (this primarily includes using MetaRelease to actually conduct the
29 version check, the automatic version checks are done by a special
30 script that is part of muon, so we do not ever call the fetcher
31 manually, and have not done so in at least 5 years)
32 + Detangle the Acquire class from the Fetcher class, latter is not
33 automatically constructing former any longer but needs to get it
34 supplied from the outside (i.e. do-release-upgrade)
35 + init arguments of both classes are now alinged with their GTK
36 counterparts
37 + The designer ui file now uses a QTextBrowser rather than a QTextEdit as
38 the user doesn't need to edit anything and the former supports html and
39 url opening
40 + The fetcher ui file has had all unused widgets removed which makes the
41 fetcher dialog have correct spacing
42 + The classes now hold a QApp as self.app to reflect the fact that they
43 may be constructed in any order and thus may need a QApplication in any
44 order. The actually instance is created from a new function that creates
45 an instance if there isn't one already. Ultimately this should probably
46 become a singleton.
47 + The Acquire process can now be aborted properly.
48 * Fix translation loading. As all Qt GUIs no prominently feature Qt builtin
49 classes with strings (QMessageBox, QButtonBox) we make sure that the
50 correct translations are loaded through QTranslator right after creating
51 the QApplication instances.
52 + ubuntu-release-upgrader-qt now recommends qttranslations5-l10n to
53 reflect this on a packaging level
54 * Add a new class QUrlOpener to redirect all openUrl calls through sudo -u
55 if the GUI is run as root, so that we can start the browsers as the user
56 rather than root. This class is used in both the Fetcher and the Upgrader.
57 It is a singleton that autoparents to qapp, so a qapp instance needs to be
58 available before using the opener.
59 * Improve Upgrader GUI
60 + Upgrader GUI does not meddle with xauthority anymore and doesn't kill
61 adept anymore (mind you, adept hasn't been used in years...)
62 Also the meddling seems to have been bugged in one form or the other
63 which ultimately prevents us from doing a proper openUrl as the invoking
64 user
65 + dialog_error.ui has been converted to use QTextBrowser as there is no
66 editing need.
67 + error dialog size hinting as been adjusted to make sure the window can
68 not be resized beyond what is suitable to still display stuff.
69 + error dialog window size is adjusted before exec to make sure that
70 the window has a suitable default size depending on whether the textview
71 is displayed or not
72 + dialog_error.ui has had its close button replaced with a standard
73 QButtonBox
74 + reportBug function has been removed as it is not used anymore (core
75 brings up apport regardless and the bug report url is most inconvenient
76 and pointless because people will not attach the relevant logs...)
77 + openUrl function has been removed as it is not used anymore
78 + dialog_changes.ui has had its size hinting adjusted to make sure that
79 the window has a suitable default size
80 + dialog_changes.ui uses QDialogButtonBox for all buttons now, details is
81 derived from Help which is the closest fit as far as standard types are
82 concerned
83 + The changes dialog now adjusts its size when the details widget is
84 hidden, this prevents overly large windows after details was shown once
85 + The changes dialog now correctly spaces the labels as well as the icon
86 label at the window, this resolves text jumping when showing/hiding the
87 details widget which was caused by the labels being pushed towards the
88 top to make space for the details, now a space makes that happen all the
89 time
90
91 -- Harald Sitter <apachelogger@kubuntu.org> Tue, 05 Aug 2014 15:20:10 +0200
92
93>>>>>>> MERGE-SOURCE
7ubuntu-release-upgrader (1:14.10.5) utopic; urgency=medium94ubuntu-release-upgrader (1:14.10.5) utopic; urgency=medium
895
9 [ Brian Murray ]96 [ Brian Murray ]
1097
=== modified file 'debian/control'
--- debian/control 2014-03-13 17:06:03 +0000
+++ debian/control 2014-08-05 13:50:46 +0000
@@ -67,9 +67,10 @@
67Pre-Depends: ${misc:Pre-Depends}67Pre-Depends: ${misc:Pre-Depends}
68Depends: ${misc:Depends},68Depends: ${misc:Depends},
69 ubuntu-release-upgrader-core (= ${source:Version}),69 ubuntu-release-upgrader-core (= ${source:Version}),
70 python3-pykde4, 70 python3-pyqt5,
71 kdesudo,71 kdesudo,
72 psmisc72 psmisc
73Recommends: qttranslations5-l10n
73Replaces: update-manager-kde (<< 1:0.165)74Replaces: update-manager-kde (<< 1:0.165)
74Breaks: update-manager-kde (<< 1:0.165)75Breaks: update-manager-kde (<< 1:0.165)
75Description: manage release upgrades76Description: manage release upgrades
7677
=== modified file 'do-release-upgrade'
--- do-release-upgrade 2014-03-07 17:00:00 +0000
+++ do-release-upgrade 2014-08-05 13:50:46 +0000
@@ -33,6 +33,18 @@
33 progress=progress,33 progress=progress,
34 parent=None,34 parent=None,
35 datadir=datadir)35 datadir=datadir)
36 elif frontend == "DistUpgradeViewKDE":
37 print("kde")
38 from DistUpgrade.DistUpgradeFetcherKDE import DistUpgradeFetcherKDE
39 from DistUpgrade.DistUpgradeFetcherKDE import KDEAcquireProgressAdapter
40 progress = KDEAcquireProgressAdapter(
41 parent=None,
42 datadir=datadir,
43 label=_("Downloading the release upgrade tool"))
44 return DistUpgradeFetcherKDE(new_dist=new_dist,
45 progress=progress,
46 parent=None,
47 datadir=datadir)
36 else:48 else:
37 from DistUpgrade.DistUpgradeFetcherCore import DistUpgradeFetcherCore49 from DistUpgrade.DistUpgradeFetcherCore import DistUpgradeFetcherCore
38 import apt50 import apt

Subscribers

People subscribed via source and target branches