Merge lp:~kubuntu-packagers/ubuntu-release-upgrader/qt5 into lp:ubuntu-release-upgrader
- qt5
- Merge into trunk
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Kubuntu Developers | Pending | ||
Jonathan Riddell | Pending | ||
Review via email: mp+229620@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Rohan Garg (rohangarg) wrote : | # |
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
1 | === modified file 'DistUpgrade/DistUpgradeFetcherKDE.py' |
2 | --- DistUpgrade/DistUpgradeFetcherKDE.py 2014-05-02 13:07:42 +0000 |
3 | +++ DistUpgrade/DistUpgradeFetcherKDE.py 2014-08-05 13:50:46 +0000 |
4 | @@ -2,6 +2,7 @@ |
5 | # -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*- |
6 | # |
7 | # Copyright (c) 2008 Canonical Ltd |
8 | +# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org> |
9 | # |
10 | # Author: Jonathan Riddell <jriddell@ubuntu.com> |
11 | # |
12 | @@ -18,58 +19,100 @@ |
13 | # You should have received a copy of the GNU General Public License |
14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
15 | |
16 | -from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineOptions, KCmdLineArgs |
17 | -from PyKDE4.kdeui import KIcon, KMessageBox, KApplication, KStandardGuiItem |
18 | -from PyQt4.QtCore import QDir, QTimer |
19 | -from PyQt4.QtGui import QDialog, QDialogButtonBox |
20 | -from PyQt4 import uic |
21 | +try: |
22 | + # 14.04 has a broken pyqt5, so don't even try to import it and require |
23 | + # pyqt4. |
24 | + # In 14.04 various signals in pyqt5 can not be connected because it thinks |
25 | + # the signal does not exist or has an incompatible signature. Since this |
26 | + # potentially renders the GUI entirely broken and pyqt5 was not actively |
27 | + # used back then it is fair to simply require qt4 on trusty systems. |
28 | + from .utils import get_dist |
29 | + if get_dist() == 'trusty': |
30 | + raise ImportError |
31 | + |
32 | + from PyQt5 import uic |
33 | + from PyQt5.QtCore import * |
34 | + from PyQt5.QtGui import * |
35 | + from PyQt5.QtWidgets import * |
36 | +except ImportError: |
37 | + from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineOptions, KCmdLineArgs |
38 | + from PyKDE4.kdeui import KIcon, KMessageBox, KApplication, KStandardGuiItem |
39 | + from PyQt4.QtCore import QDir, QTimer |
40 | + from PyQt4.QtGui import QDialog, QDialogButtonBox |
41 | + from PyQt4 import uic |
42 | |
43 | import apt_pkg |
44 | import sys |
45 | |
46 | -from .utils import inhibit_sleep, allow_sleep |
47 | -from .DistUpgradeFetcherCore import DistUpgradeFetcherCore |
48 | +from DistUpgrade.utils import inhibit_sleep, allow_sleep |
49 | +from DistUpgrade.DistUpgradeFetcherCore import DistUpgradeFetcherCore |
50 | from gettext import gettext as _ |
51 | from urllib.request import urlopen |
52 | from urllib.error import HTTPError |
53 | import os |
54 | |
55 | -from .MetaRelease import MetaReleaseCore |
56 | import apt |
57 | |
58 | +from .QUrlOpener import QUrlOpener |
59 | + |
60 | +# TODO: uifile resolution is an utter mess and should be revised globally for |
61 | +# both the fetcher and the upgrader GUI. |
62 | + |
63 | +# TODO: make this a singleton |
64 | +# We have no globally constructed QApplication available so we need to |
65 | +# make sure that one is created when needed. Since from a module POV |
66 | +# this can be happening in any order of the two classes this function takes care |
67 | +# of it for the classes, the classes only hold a ref to the qapp returned |
68 | +# to prevent it from getting GC'd, so in essence this is a singleton scoped to |
69 | +# the longest lifetime of an instance from the Qt GUI. Since the lifetime is |
70 | +# pretty much equal to the process' one we might as well singleton up. |
71 | +def _ensureQApplication(): |
72 | + if not QApplication.instance(): |
73 | + app = QApplication(["ubuntu-release-upgrader"]) |
74 | + # Try to load default Qt translations so we don't have to worry about |
75 | + # QStandardButton translations. |
76 | + # FIXME: make sure we dep on l10n |
77 | + translator = QTranslator(app) |
78 | + if PYQT_VERSION >= 0x50000: |
79 | + translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt5/translations') |
80 | + else: |
81 | + translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt4/translations') |
82 | + app.installTranslator(translator) |
83 | + return app |
84 | + return QApplication.instance() |
85 | + |
86 | +# Qt 5 vs. KDELibs4 compat functions |
87 | +def _warning(text): |
88 | + if PYQT_VERSION >= 0x50000: |
89 | + QMessageBox.warning(None, "", text) |
90 | + else: |
91 | + KMessageBox.sorry(None, text, "") |
92 | + |
93 | +def _icon(name): |
94 | + if PYQT_VERSION >= 0x50000: |
95 | + return QIcon.fromTheme(name) |
96 | + else: |
97 | + return KIcon(name) |
98 | |
99 | class DistUpgradeFetcherKDE(DistUpgradeFetcherCore): |
100 | - """A small application run by Adept to download, verify |
101 | - and run the dist-upgrade tool""" |
102 | - |
103 | - def __init__(self, useDevelopmentRelease=False, useProposed=False): |
104 | - self.useDevelopmentRelease = useDevelopmentRelease |
105 | - self.useProposed = useProposed |
106 | - metaRelease = MetaReleaseCore(useDevelopmentRelease, useProposed) |
107 | - metaRelease.downloaded.wait() |
108 | - if metaRelease.new_dist is None and __name__ == "__main__": |
109 | - sys.exit() |
110 | - elif metaRelease.new_dist is None: |
111 | - return |
112 | - |
113 | - self.progressDialogue = QDialog() |
114 | - if os.path.exists("fetch-progress.ui"): |
115 | - self.APPDIR = QDir.currentPath() |
116 | - else: |
117 | - self.APPDIR = "/usr/share/ubuntu-release-upgrader" |
118 | - |
119 | - uic.loadUi(self.APPDIR + "/fetch-progress.ui", self.progressDialogue) |
120 | - self.progressDialogue.setWindowIcon(KIcon("system-software-update")) |
121 | - self.progressDialogue.setWindowTitle(_("Upgrade")) |
122 | - self.progress = KDEAcquireProgressAdapter( |
123 | - self.progressDialogue.installationProgress, |
124 | - self.progressDialogue.installingLabel, |
125 | - None) |
126 | - DistUpgradeFetcherCore.__init__(self, metaRelease.new_dist, |
127 | - self.progress) |
128 | + |
129 | + def __init__(self, new_dist, progress, parent, datadir): |
130 | + DistUpgradeFetcherCore.__init__(self, new_dist, progress) |
131 | + |
132 | + self.app = _ensureQApplication() |
133 | + self.app.setWindowIcon(_icon("system-software-update")) |
134 | + |
135 | + self.datadir = datadir |
136 | + |
137 | + QUrlOpener().setupUrlHandles() |
138 | + |
139 | + QApplication.processEvents() |
140 | |
141 | def error(self, summary, message): |
142 | - KMessageBox.sorry(None, message, summary) |
143 | + if PYQT_VERSION >= 0x50000: |
144 | + QMessageBox.critical(None, summary, message) |
145 | + else: |
146 | + KMessageBox.sorry(None, message, summary) |
147 | |
148 | def runDistUpgrader(self): |
149 | inhibit_sleep() |
150 | @@ -80,73 +123,103 @@ |
151 | self.script + " --frontend=DistUpgradeViewKDE"]) |
152 | else: |
153 | os.execv(self.script, |
154 | - [self.script] + ["--frontend=DistUpgradeViewKDE"] + |
155 | - self.run_options) |
156 | + [self.script, "--frontend=DistUpgradeViewKDE" + self.run_options]) |
157 | # we shouldn't come to this point, but if we do, undo our |
158 | # inhibit sleep |
159 | allow_sleep() |
160 | |
161 | def showReleaseNotes(self): |
162 | # FIXME: care about i18n! (append -$lang or something) |
163 | - self.dialogue = QDialog() |
164 | - uic.loadUi(self.APPDIR + "/dialog_release_notes.ui", self.dialogue) |
165 | - upgradeButton = self.dialogue.buttonBox.button(QDialogButtonBox.Ok) |
166 | - upgradeButton.setText(_("Upgrade")) |
167 | - upgradeButton.setIcon(KIcon("dialog-ok")) |
168 | - cancelButton = self.dialogue.buttonBox.button(QDialogButtonBox.Cancel) |
169 | - cancelButton.setIcon(KIcon("dialog-cancel")) |
170 | - self.dialogue.setWindowTitle(_("Release Notes")) |
171 | - self.dialogue.show() |
172 | - if self.new_dist.releaseNotesURI is not None: |
173 | - uri = self._expandUri(self.new_dist.releaseNotesURI) |
174 | + # TODO: ^ what is this supposed to mean? |
175 | + self.dialog = QDialog() |
176 | + uic.loadUi(self.datadir + "/dialog_release_notes.ui", self.dialog) |
177 | + upgradeButton = self.dialog.buttonBox.button(QDialogButtonBox.Ok) |
178 | + upgradeButton.setText(_("&Upgrade")) |
179 | + upgradeButton.setIcon(_icon("dialog-ok")) |
180 | + cancelButton = self.dialog.buttonBox.button(QDialogButtonBox.Cancel) |
181 | + cancelButton.setText(_("&Cancel")) |
182 | + cancelButton.setIcon(_icon("dialog-cancel")) |
183 | + self.dialog.setWindowTitle(_("Release Notes")) |
184 | + self.dialog.show() |
185 | + if self.new_dist.releaseNotesHtmlUri is not None: |
186 | + uri = self._expandUri(self.new_dist.releaseNotesHtmlUri) |
187 | # download/display the release notes |
188 | - # FIXME: add some progress reporting here |
189 | + # TODO: add some progress reporting here |
190 | result = None |
191 | try: |
192 | release_notes = urlopen(uri) |
193 | notes = release_notes.read().decode("UTF-8", "replace") |
194 | - self.dialogue.scrolled_notes.setText(notes) |
195 | - result = self.dialogue.exec_() |
196 | + self.dialog.scrolled_notes.setText(notes) |
197 | + result = self.dialog.exec_() |
198 | except HTTPError: |
199 | primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \ |
200 | _("Could not find the release notes") |
201 | secondary = _("The server may be overloaded. ") |
202 | - KMessageBox.sorry(None, primary + "<br />" + secondary, "") |
203 | + self._warning(primary + "<br />" + secondary) |
204 | except IOError: |
205 | primary = "<span weight=\"bold\" size=\"larger\">%s</span>" % \ |
206 | _("Could not download the release notes") |
207 | secondary = _("Please check your internet connection.") |
208 | - KMessageBox.sorry(None, primary + "<br />" + secondary, "") |
209 | + self._warning(primary + "<br />" + secondary) |
210 | # user clicked cancel |
211 | if result == QDialog.Accepted: |
212 | - self.progressDialogue.show() |
213 | return True |
214 | - if __name__ == "__main__": |
215 | - KApplication.kApplication().exit(1) |
216 | - if self.useDevelopmentRelease or self.useProposed: |
217 | - #FIXME why does KApplication.kApplication().exit() crash but |
218 | - # this doesn't? |
219 | - sys.exit() |
220 | return False |
221 | |
222 | + # FIXME: largely code copy from ReleaseNotesViewer which imports GTK. |
223 | + @pyqtSlot(QUrl) |
224 | + def openUrl(self, url): |
225 | + url = url.toString() |
226 | + import subprocess |
227 | + """Open the specified URL in a browser""" |
228 | + # Find an appropiate browser |
229 | + if os.path.exists("/usr/bin/kde-open"): |
230 | + command = ["kde-open", url] |
231 | + elif os.path.exists("/usr/bin/xdg-open"): |
232 | + command = ["xdg-open", url] |
233 | + elif os.path.exists("/usr/bin/exo-open"): |
234 | + command = ["exo-open", url] |
235 | + elif os.path.exists('/usr/bin/gnome-open'): |
236 | + command = ['gnome-open', url] |
237 | + else: |
238 | + command = ['x-www-browser', url] |
239 | + # Avoid to run the browser as user root |
240 | + if os.getuid() == 0 and 'SUDO_USER' in os.environ: |
241 | + command = ['sudo', '-u', os.environ['SUDO_USER']] + command |
242 | + subprocess.Popen(command) |
243 | |
244 | class KDEAcquireProgressAdapter(apt.progress.base.AcquireProgress): |
245 | - def __init__(self, progress, label, parent): |
246 | - self.progress = progress |
247 | - self.label = label |
248 | - self.parent = parent |
249 | + def __init__(self, parent, datadir, label): |
250 | + self.app = _ensureQApplication() |
251 | + self.dialog = QDialog() |
252 | + |
253 | + uiFile = os.path.join(datadir, "fetch-progress.ui") |
254 | + uic.loadUi(uiFile, self.dialog) |
255 | + self.dialog.setWindowTitle(_("Upgrade")) |
256 | + self.dialog.installingLabel.setText(label) |
257 | + self.dialog.buttonBox.rejected.connect(self.abort) |
258 | + |
259 | + # This variable is used as return value for AcquireProgress pulses. |
260 | + # Setting it to False will abort the Acquire and consequently the |
261 | + # entire fetcher. |
262 | + self._continue = True |
263 | + |
264 | + QApplication.processEvents() |
265 | + |
266 | + def abort(self): |
267 | + self._continue = False |
268 | |
269 | def start(self): |
270 | - self.label.setText(_("Downloading additional package files...")) |
271 | - self.progress.setValue(0) |
272 | + self.dialog.installingLabel.setText(_("Downloading additional package files...")) |
273 | + self.dialog.installationProgress.setValue(0) |
274 | + self.dialog.show() |
275 | |
276 | def stop(self): |
277 | - pass |
278 | + self.dialog.hide() |
279 | |
280 | def pulse(self, owner): |
281 | apt.progress.base.AcquireProgress.pulse(self, owner) |
282 | - self.progress.setValue((self.current_bytes + self.current_items) / |
283 | - float(self.total_bytes + self.total_items)) |
284 | + self.dialog.installationProgress.setValue((self.current_bytes + self.current_items) / float(self.total_bytes + self.total_items) * 100) |
285 | current_item = self.current_items + 1 |
286 | if current_item > self.total_items: |
287 | current_item = self.total_items |
288 | @@ -158,47 +231,22 @@ |
289 | else: |
290 | label_text += _("File %s of %s") % ( |
291 | self.current_items, self.total_items) |
292 | - self.label.setText(label_text) |
293 | - KApplication.kApplication().processEvents() |
294 | - return True |
295 | + self.dialog.installingLabel.setText(label_text) |
296 | + QApplication.processEvents() |
297 | + return self._continue |
298 | |
299 | def mediaChange(self, medium, drive): |
300 | msg = _("Please insert '%s' into the drive '%s'") % (medium, drive) |
301 | - #change = QMessageBox.question(None, _("Media Change"), msg, |
302 | - # QMessageBox.Ok, QMessageBox.Cancel) |
303 | - change = KMessageBox.questionYesNo(None, _("Media Change"), |
304 | - _("Media Change") + "<br>" + msg, |
305 | - KStandardGuiItem.ok(), |
306 | - KStandardGuiItem.cancel()) |
307 | - if change == KMessageBox.Yes: |
308 | - return True |
309 | + if PYQT_VERSION >= 0x50000: |
310 | + change = QMessageBox.question(None, _("Media Change"), msg, |
311 | + QMessageBox.Ok, QMessageBox.Cancel) |
312 | + if change == QMessageBox.Ok: |
313 | + return True |
314 | + else: |
315 | + change = KMessageBox.questionYesNo(None, _("Media Change"), |
316 | + _("Media Change") + "<br>" + msg, |
317 | + KStandardGuiItem.ok(), |
318 | + KStandardGuiItem.cancel()) |
319 | + if change == KMessageBox.Yes: |
320 | + return True |
321 | return False |
322 | - |
323 | -if __name__ == "__main__": |
324 | - |
325 | - appName = "dist-upgrade-fetcher" |
326 | - catalog = "" |
327 | - programName = ki18n("Dist Upgrade Fetcher") |
328 | - version = "0.3.4" |
329 | - description = ki18n("Dist Upgrade Fetcher") |
330 | - license = KAboutData.License_GPL |
331 | - copyright = ki18n("(c) 2008 Canonical Ltd") |
332 | - text = ki18n("none") |
333 | - homePage = "https://launchpad.net/ubuntu-release-upgrader" |
334 | - bugEmail = "" |
335 | - |
336 | - aboutData = KAboutData(appName, catalog, programName, version, description, |
337 | - license, copyright, text, homePage, bugEmail) |
338 | - |
339 | - aboutData.addAuthor(ki18n("Jonathan Riddell"), ki18n("Author")) |
340 | - |
341 | - options = KCmdLineOptions() |
342 | - |
343 | - KCmdLineArgs.init(sys.argv, aboutData) |
344 | - KCmdLineArgs.addCmdLineOptions(options) |
345 | - |
346 | - app = KApplication() |
347 | - fetcher = DistUpgradeFetcherKDE() |
348 | - QTimer.singleShot(10, fetcher.run) |
349 | - |
350 | - app.exec_() |
351 | |
352 | === modified file 'DistUpgrade/DistUpgradeViewKDE.py' |
353 | --- DistUpgrade/DistUpgradeViewKDE.py 2014-05-02 13:07:42 +0000 |
354 | +++ DistUpgrade/DistUpgradeViewKDE.py 2014-08-05 13:50:46 +0000 |
355 | @@ -1,9 +1,10 @@ |
356 | # DistUpgradeViewKDE.py |
357 | -# |
358 | +# |
359 | # Copyright (c) 2007 Canonical Ltd |
360 | -# |
361 | +# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org> |
362 | +# |
363 | # Author: Jonathan Riddell <jriddell@ubuntu.com> |
364 | -# |
365 | +# |
366 | # This program is free software; you can redistribute it and/or |
367 | # modify it under the terms of the GNU General Public License as |
368 | # published by the Free Software Foundation; either version 2 of the |
369 | @@ -19,13 +20,26 @@ |
370 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
371 | # USA |
372 | |
373 | -from PyQt4.QtCore import QUrl, Qt, SIGNAL, QTimer |
374 | -from PyQt4.QtGui import ( |
375 | - QDesktopServices, QDialog, QPixmap, QTreeWidgetItem, QMessageBox, |
376 | - QApplication, QTextEdit, QTextOption, QTextCursor, QPushButton, |
377 | - QWidget, QIcon, QHBoxLayout, QLabel |
378 | - ) |
379 | -from PyQt4 import uic |
380 | +try: |
381 | + # 14.04 has a broken pyqt5, so don't even try to import it and require |
382 | + # pyqt4. |
383 | + # In 14.04 various signals in pyqt5 can not be connected because it thinks |
384 | + # the signal does not exist or has an incompatible signature. Since this |
385 | + # potentially renders the GUI entirely broken and pyqt5 was not actively |
386 | + # used back then it is fair to simply require qt4 on trusty systems. |
387 | + from .utils import get_dist |
388 | + if get_dist() == 'trusty': |
389 | + raise ImportError |
390 | + |
391 | + from PyQt5 import uic |
392 | + from PyQt5.QtCore import * |
393 | + from PyQt5.QtGui import * |
394 | + from PyQt5.QtWidgets import * |
395 | +except ImportError: |
396 | + from PyQt4 import uic |
397 | + from PyQt4.QtCore import * |
398 | + from PyQt4.QtGui import * |
399 | + # If we still throw an exception, bounce back to Main to try another UI. |
400 | |
401 | import sys |
402 | import locale |
403 | @@ -51,14 +65,16 @@ |
404 | from .DistUpgradeGettext import gettext as _ |
405 | from .DistUpgradeGettext import unicode_gettext |
406 | |
407 | +from .QUrlOpener import QUrlOpener |
408 | |
409 | +# FIXME: what's the purpose? |
410 | def utf8(s, errors="strict"): |
411 | if isinstance(s, bytes): |
412 | return s.decode("UTF-8", errors) |
413 | else: |
414 | return s |
415 | |
416 | - |
417 | +# FIXME: what's the purpose? |
418 | def loadUi(file, parent): |
419 | if os.path.exists(file): |
420 | uic.loadUi(file, parent) |
421 | @@ -74,6 +90,7 @@ |
422 | QTextEdit.__init__(self, "", parent_frame) |
423 | self.installProgress = installProgress |
424 | self.setFontFamily("Monospace") |
425 | + # FIXME: fixed font size set!!! |
426 | self.setFontPointSize(8) |
427 | self.setWordWrapMode(QTextOption.NoWrap) |
428 | self.setUndoRedoEnabled(False) |
429 | @@ -298,7 +315,8 @@ |
430 | dialogue.textview_error.show() |
431 | else: |
432 | dialogue.textview_error.hide() |
433 | - dialogue.connect(dialogue.button_bugreport, SIGNAL("clicked()"), self.parent.reportBug) |
434 | + # Make sure we have a suitable size depending on whether or not the view is shown |
435 | + dialogue.adjustSize() |
436 | dialogue.exec_() |
437 | |
438 | def conffile(self, current, new): |
439 | @@ -316,7 +334,7 @@ |
440 | self.confDialogue.textview_conffile.hide() |
441 | #FIXME, below to be tested |
442 | #self.confDialogue.resize(self.confDialogue.minimumSizeHint()) |
443 | - self.confDialogue.connect(self.confDialogue.show_difference_button, SIGNAL("clicked()"), self.showConffile) |
444 | + self.confDialogue.show_difference_button.clicked.connect(self.showConffile)) |
445 | |
446 | # workaround silly dpkg |
447 | if not os.path.exists(current): |
448 | @@ -475,18 +493,23 @@ |
449 | except Exception as e: |
450 | logging.warning("Error setting locales (%s)" % e) |
451 | |
452 | - #about = KAboutData("adept_manager","Upgrader","0.1","Dist Upgrade Tool for Kubuntu",KAboutData.License_GPL,"(c) 2007 Canonical Ltd", |
453 | - #"http://wiki.kubuntu.org/KubuntuUpdateManager", "jriddell@ubuntu.com") |
454 | - #about.addAuthor("Jonathan Riddell", None,"jriddell@ubuntu.com") |
455 | - #about.addAuthor("Michael Vogt", None,"michael.vogt@ubuntu.com") |
456 | - #KCmdLineArgs.init(["./dist-upgrade.py"],about) |
457 | - |
458 | # we test for DISPLAY here, QApplication does not throw a |
459 | # exception when run without DISPLAY but dies instead |
460 | if not "DISPLAY" in os.environ: |
461 | raise Exception("No DISPLAY in os.environ found") |
462 | self.app = QApplication(["ubuntu-release-upgrader"]) |
463 | |
464 | + # Try to load default Qt translations so we don't have to worry about |
465 | + # QStandardButton translations. |
466 | + translator = QTranslator(self.app) |
467 | + if PYQT_VERSION >= 0x50000: |
468 | + translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt5/translations') |
469 | + else: |
470 | + translator.load(QLocale.system(), 'qt', '_', '/usr/share/qt4/translations') |
471 | + self.app.installTranslator(translator) |
472 | + |
473 | + QUrlOpener().setupUrlHandles() |
474 | + |
475 | if os.path.exists("/usr/share/icons/oxygen/48x48/apps/system-software-update.png"): |
476 | messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/apps/system-software-update.png") |
477 | else: |
478 | @@ -509,30 +532,7 @@ |
479 | sys.excepthook = self._handleException |
480 | |
481 | self.window_main.showTerminalButton.setEnabled(False) |
482 | - self.app.connect(self.window_main.showTerminalButton, SIGNAL("clicked()"), self.showTerminal) |
483 | - |
484 | - #kdesu requires us to copy the xauthority file before it removes it when Adept is killed |
485 | - fd, copyXauth = tempfile.mkstemp("", "adept") |
486 | - if 'XAUTHORITY' in os.environ and os.environ['XAUTHORITY'] != copyXauth: |
487 | - shutil.copy(os.environ['XAUTHORITY'], copyXauth) |
488 | - os.environ["XAUTHORITY"] = copyXauth |
489 | - |
490 | - # Note that with kdesudo this needs --nonewdcop |
491 | - ## create a new DCOP-Client: |
492 | - #client = DCOPClient() |
493 | - ## connect the client to the local DCOP-server: |
494 | - #client.attach() |
495 | - |
496 | - #for qcstring_app in client.registeredApplications(): |
497 | - # app = str(qcstring_app) |
498 | - # if app.startswith("adept"): |
499 | - # adept = DCOPApp(qcstring_app, client) |
500 | - # adeptInterface = adept.object("MainApplication-Interface") |
501 | - # adeptInterface.quit() |
502 | - |
503 | - # This works just as well |
504 | - subprocess.call(["killall", "adept_manager"]) |
505 | - subprocess.call(["killall", "adept_updater"]) |
506 | + self.window_main.showTerminalButton.clicked.connect(self.showTerminal) |
507 | |
508 | # init gettext |
509 | gettext.bindtextdomain("ubuntu-release-upgrader",localedir) |
510 | @@ -605,24 +605,12 @@ |
511 | dialog = QDialog(self.window_main) |
512 | loadUi("dialog_error.ui", dialog) |
513 | self.translate_widget_children(self.dialog) |
514 | - #FIXME make URL work |
515 | - #dialog.connect(dialog.beastie_url, SIGNAL("leftClickedURL(const QString&)"), self.openURL) |
516 | dialog.crash_detail.setText(tbtext) |
517 | + # Make sure we have a suitable size depending on whether or not the view is shown |
518 | + dialogue.adjustSize() |
519 | dialog.exec_() |
520 | sys.exit(1) |
521 | |
522 | - def openURL(self, url): |
523 | - """start konqueror""" |
524 | - #need to run this else kdesu can't run Konqueror |
525 | - #subprocess.call(['su', 'ubuntu', 'xhost', '+localhost']) |
526 | - QDesktopServices.openUrl(QUrl(url)) |
527 | - |
528 | - def reportBug(self): |
529 | - """start konqueror""" |
530 | - #need to run this else kdesu can't run Konqueror |
531 | - #subprocess.call(['su', 'ubuntu', 'xhost', '+localhost']) |
532 | - QDesktopServices.openUrl(QUrl("https://launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+filebug")) |
533 | - |
534 | def showTerminal(self): |
535 | if self.window_main.konsole_frame.isVisible(): |
536 | self.window_main.konsole_frame.hide() |
537 | @@ -708,7 +696,6 @@ |
538 | dialogue.textview_error.show() |
539 | else: |
540 | dialogue.textview_error.hide() |
541 | - dialogue.button_bugreport.hide() |
542 | dialogue.setWindowTitle(_("Information")) |
543 | |
544 | if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-information.png"): |
545 | @@ -718,6 +705,8 @@ |
546 | else: |
547 | messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_info.png") |
548 | dialogue.image.setPixmap(messageIcon) |
549 | + # Make sure we have a suitable size depending on whether or not the view is shown |
550 | + dialogue.adjustSize() |
551 | dialogue.exec_() |
552 | |
553 | def error(self, summary, msg, extended_msg=None): |
554 | @@ -732,8 +721,6 @@ |
555 | dialogue.textview_error.show() |
556 | else: |
557 | dialogue.textview_error.hide() |
558 | - dialogue.button_close.show() |
559 | - self.app.connect(dialogue.button_bugreport, SIGNAL("clicked()"), self.reportBug) |
560 | |
561 | if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-error.png"): |
562 | messageIcon = QPixmap("/usr/share/icons/oxygen/48x48/status/dialog-error.png") |
563 | @@ -742,6 +729,8 @@ |
564 | else: |
565 | messageIcon = QPixmap("/usr/share/icons/crystalsvg/32x32/actions/messagebox_critical.png") |
566 | dialogue.image.setPixmap(messageIcon) |
567 | + # Make sure we have a suitable size depending on whether or not the view is shown |
568 | + dialogue.adjustSize() |
569 | dialogue.exec_() |
570 | |
571 | return False |
572 | @@ -757,9 +746,11 @@ |
573 | loadUi("dialog_changes.ui", self.changesDialogue) |
574 | |
575 | self.changesDialogue.treeview_details.hide() |
576 | - self.changesDialogue.connect(self.changesDialogue.show_details_button, SIGNAL("clicked()"), self.showChangesDialogueDetails) |
577 | + self.changesDialogue.buttonBox.helpRequested.connect(self.showChangesDialogueDetails) |
578 | self.translate_widget_children(self.changesDialogue) |
579 | - self.changesDialogue.show_details_button.setText(_("Details") + " >>>") |
580 | + self.changesDialogue.buttonBox.button(QDialogButtonBox.Ok).setText(_("&Start Upgrade")) |
581 | + self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setIcon(QIcon()) |
582 | + self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText(_("Details") + " >>>") |
583 | self.changesDialogue.resize(self.changesDialogue.sizeHint()) |
584 | |
585 | if os.path.exists("/usr/share/icons/oxygen/48x48/status/dialog-warning.png"): |
586 | @@ -773,9 +764,9 @@ |
587 | |
588 | if actions != None: |
589 | cancel = actions[0].replace("_", "") |
590 | - self.changesDialogue.button_cancel_changes.setText(cancel) |
591 | + self.changesDialogue.buttonBox.button(QDialogButtonBox.Cancel).setText(cancel) |
592 | confirm = actions[1].replace("_", "") |
593 | - self.changesDialogue.button_confirm_changes.setText(confirm) |
594 | + self.changesDialogue.buttonBox.button(QDialogButtonBox.Ok).setText(confirm) |
595 | |
596 | summaryText = "<big><b>%s</b></big>" % summary |
597 | self.changesDialogue.label_summary.setText(summaryText) |
598 | @@ -804,10 +795,12 @@ |
599 | def showChangesDialogueDetails(self): |
600 | if self.changesDialogue.treeview_details.isVisible(): |
601 | self.changesDialogue.treeview_details.hide() |
602 | - self.changesDialogue.show_details_button.setText(_("Details") + " >>>") |
603 | + self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText(_("Details") + " >>>") |
604 | + # Make sure we shrink the dialog otherwise it looks silly |
605 | + self.changesDialogue.adjustSize() |
606 | else: |
607 | self.changesDialogue.treeview_details.show() |
608 | - self.changesDialogue.show_details_button.setText("<<< " + _("Details")) |
609 | + self.changesDialogue.buttonBox.button(QDialogButtonBox.Help).setText("<<< " + _("Details")) |
610 | self.changesDialogue.resize(self.changesDialogue.sizeHint()) |
611 | |
612 | def askYesNoQuestion(self, summary, msg, default='No'): |
613 | |
614 | === added file 'DistUpgrade/QUrlOpener.py' |
615 | --- DistUpgrade/QUrlOpener.py 1970-01-01 00:00:00 +0000 |
616 | +++ DistUpgrade/QUrlOpener.py 2014-08-05 13:50:46 +0000 |
617 | @@ -0,0 +1,80 @@ |
618 | +# QUrlOpener.py |
619 | +# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*- |
620 | +# |
621 | +# Copyright (c) 2014 Harald Sitter <apachelogger@kubuntu.org> |
622 | +# |
623 | +# This program is free software; you can redistribute it and/or |
624 | +# modify it under the terms of the GNU General Public License as |
625 | +# published by the Free Software Foundation; either version 2 of the |
626 | +# License, or (at your option) any later version. |
627 | +# |
628 | +# This program is distributed in the hope that it will be useful, |
629 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
630 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
631 | +# GNU General Public License for more details. |
632 | +# |
633 | +# You should have received a copy of the GNU General Public License |
634 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
635 | + |
636 | +try: |
637 | + # 14.04 has a broken pyqt5, so don't even try to import it and require |
638 | + # pyqt4. |
639 | + # In 14.04 various signals in pyqt5 can not be connected because it thinks |
640 | + # the signal does not exist or has an incompatible signature. Since this |
641 | + # potentially renders the GUI entirely broken and pyqt5 was not actively |
642 | + # used back then it is fair to simply require qt4 on trusty systems. |
643 | + from .utils import get_dist |
644 | + if get_dist() == 'trusty': |
645 | + raise ImportError |
646 | + |
647 | + from PyQt5.QtCore import * |
648 | + from PyQt5.QtGui import * |
649 | +except ImportError: |
650 | + from PyQt4.QtCore import * |
651 | + from PyQt4.QtGui import * |
652 | + |
653 | +import os |
654 | +import subprocess |
655 | + |
656 | +def singleton(class_): |
657 | + instances = {} |
658 | + def instance(*args, **kwargs): |
659 | + if class_ not in instances: |
660 | + instances[class_] = class_(*args, **kwargs) |
661 | + return instances[class_] |
662 | + return instance |
663 | + |
664 | +@singleton |
665 | +class QUrlOpener(QObject): |
666 | + def __init__(self): |
667 | + QObject.__init__(self) |
668 | + self.setParent(QCoreApplication.instance()) |
669 | + |
670 | + def setupUrlHandles(self): |
671 | + # Make sure we don't run a root browser. |
672 | + # NOTE: Qt native API can set an openUrl handler from a QObject |
673 | + # function, pyqt in theory also allows an arbitrary callable. Latter has |
674 | + # been observed to be non-functional so rely on the native handling. |
675 | + QDesktopServices.setUrlHandler('http', self, 'openUrl') |
676 | + QDesktopServices.setUrlHandler('https', self, 'openUrl') |
677 | + |
678 | + # NOTE: largely code copy from ReleaseNotesViewer which imports GTK. |
679 | + @pyqtSlot(QUrl) |
680 | + def openUrl(self, url): |
681 | + url = url.toString() |
682 | + """Open the specified URL in a browser""" |
683 | + # Find an appropiate browser |
684 | + if os.path.exists("/usr/bin/xdg-open"): |
685 | + command = ["xdg-open", url] |
686 | + elif os.path.exists("/usr/bin/kde-open"): |
687 | + command = ["kde-open", url] |
688 | + elif os.path.exists("/usr/bin/exo-open"): |
689 | + command = ["exo-open", url] |
690 | + elif os.path.exists('/usr/bin/gnome-open'): |
691 | + command = ['gnome-open', url] |
692 | + else: |
693 | + command = ['x-www-browser', url] |
694 | + # Avoid to run the browser as user root |
695 | + if os.getuid() == 0 and 'SUDO_USER' in os.environ: |
696 | + command = ['sudo', '-u', os.environ['SUDO_USER']] + command |
697 | + subprocess.Popen(command) |
698 | |
699 | === modified file 'DistUpgrade/dialog_changes.ui' |
700 | --- DistUpgrade/dialog_changes.ui 2008-09-12 12:19:10 +0000 |
701 | +++ DistUpgrade/dialog_changes.ui 2014-08-05 13:50:46 +0000 |
702 | @@ -1,7 +1,8 @@ |
703 | -<ui version="4.0" > |
704 | +<?xml version="1.0" encoding="UTF-8"?> |
705 | +<ui version="4.0"> |
706 | <class>dialog_changes</class> |
707 | - <widget class="QDialog" name="dialog_changes" > |
708 | - <property name="geometry" > |
709 | + <widget class="QDialog" name="dialog_changes"> |
710 | + <property name="geometry"> |
711 | <rect> |
712 | <x>0</x> |
713 | <y>0</y> |
714 | @@ -9,58 +10,51 @@ |
715 | <height>417</height> |
716 | </rect> |
717 | </property> |
718 | - <property name="sizePolicy" > |
719 | - <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > |
720 | + <property name="sizePolicy"> |
721 | + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> |
722 | <horstretch>0</horstretch> |
723 | <verstretch>0</verstretch> |
724 | </sizepolicy> |
725 | </property> |
726 | - <property name="windowTitle" > |
727 | + <property name="windowTitle"> |
728 | <string>Package Changes</string> |
729 | </property> |
730 | - <property name="modal" > |
731 | + <property name="modal"> |
732 | <bool>true</bool> |
733 | </property> |
734 | - <layout class="QGridLayout" > |
735 | - <item row="3" column="3" > |
736 | - <widget class="QPushButton" name="button_cancel_changes" > |
737 | - <property name="text" > |
738 | - <string>&Cancel</string> |
739 | - </property> |
740 | - </widget> |
741 | - </item> |
742 | - <item row="0" column="0" colspan="4" > |
743 | - <layout class="QHBoxLayout" > |
744 | + <layout class="QVBoxLayout" name="verticalLayout"> |
745 | + <item> |
746 | + <layout class="QHBoxLayout"> |
747 | <item> |
748 | - <layout class="QVBoxLayout" > |
749 | + <layout class="QVBoxLayout"> |
750 | <item> |
751 | - <widget class="QLabel" name="question_pixmap" > |
752 | - <property name="sizePolicy" > |
753 | - <sizepolicy vsizetype="Fixed" hsizetype="Fixed" > |
754 | + <widget class="QLabel" name="question_pixmap"> |
755 | + <property name="sizePolicy"> |
756 | + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> |
757 | <horstretch>0</horstretch> |
758 | <verstretch>0</verstretch> |
759 | </sizepolicy> |
760 | </property> |
761 | - <property name="text" > |
762 | + <property name="text"> |
763 | <string/> |
764 | </property> |
765 | - <property name="pixmap" > |
766 | + <property name="pixmap"> |
767 | <pixmap>image0</pixmap> |
768 | </property> |
769 | - <property name="wordWrap" > |
770 | + <property name="wordWrap"> |
771 | <bool>false</bool> |
772 | </property> |
773 | </widget> |
774 | </item> |
775 | <item> |
776 | - <spacer name="spacer6" > |
777 | - <property name="orientation" > |
778 | + <spacer name="spacer6"> |
779 | + <property name="orientation"> |
780 | <enum>Qt::Vertical</enum> |
781 | </property> |
782 | - <property name="sizeType" > |
783 | + <property name="sizeType"> |
784 | <enum>QSizePolicy::Expanding</enum> |
785 | </property> |
786 | - <property name="sizeHint" stdset="0" > |
787 | + <property name="sizeHint" stdset="0"> |
788 | <size> |
789 | <width>20</width> |
790 | <height>80</height> |
791 | @@ -71,141 +65,121 @@ |
792 | </layout> |
793 | </item> |
794 | <item> |
795 | - <layout class="QVBoxLayout" > |
796 | - <item> |
797 | - <widget class="QLabel" name="label_summary" > |
798 | - <property name="text" > |
799 | - <string/> |
800 | - </property> |
801 | - <property name="textFormat" > |
802 | - <enum>Qt::RichText</enum> |
803 | - </property> |
804 | - <property name="alignment" > |
805 | - <set>Qt::AlignVCenter</set> |
806 | - </property> |
807 | - <property name="wordWrap" > |
808 | - <bool>true</bool> |
809 | - </property> |
810 | - </widget> |
811 | - </item> |
812 | - <item> |
813 | - <widget class="QLabel" name="label_changes" > |
814 | - <property name="sizePolicy" > |
815 | - <sizepolicy vsizetype="Preferred" hsizetype="Preferred" > |
816 | - <horstretch>0</horstretch> |
817 | - <verstretch>0</verstretch> |
818 | - </sizepolicy> |
819 | - </property> |
820 | - <property name="text" > |
821 | - <string/> |
822 | - </property> |
823 | - <property name="textFormat" > |
824 | - <enum>Qt::RichText</enum> |
825 | - </property> |
826 | - <property name="alignment" > |
827 | - <set>Qt::AlignVCenter</set> |
828 | - </property> |
829 | - <property name="wordWrap" > |
830 | - <bool>true</bool> |
831 | - </property> |
832 | - </widget> |
833 | + <layout class="QVBoxLayout"> |
834 | + <item> |
835 | + <widget class="QLabel" name="label_summary"> |
836 | + <property name="sizePolicy"> |
837 | + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> |
838 | + <horstretch>0</horstretch> |
839 | + <verstretch>0</verstretch> |
840 | + </sizepolicy> |
841 | + </property> |
842 | + <property name="text"> |
843 | + <string/> |
844 | + </property> |
845 | + <property name="textFormat"> |
846 | + <enum>Qt::RichText</enum> |
847 | + </property> |
848 | + <property name="alignment"> |
849 | + <set>Qt::AlignVCenter</set> |
850 | + </property> |
851 | + <property name="wordWrap"> |
852 | + <bool>true</bool> |
853 | + </property> |
854 | + </widget> |
855 | + </item> |
856 | + <item> |
857 | + <widget class="QLabel" name="label_changes"> |
858 | + <property name="sizePolicy"> |
859 | + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> |
860 | + <horstretch>0</horstretch> |
861 | + <verstretch>0</verstretch> |
862 | + </sizepolicy> |
863 | + </property> |
864 | + <property name="text"> |
865 | + <string/> |
866 | + </property> |
867 | + <property name="textFormat"> |
868 | + <enum>Qt::RichText</enum> |
869 | + </property> |
870 | + <property name="alignment"> |
871 | + <set>Qt::AlignVCenter</set> |
872 | + </property> |
873 | + <property name="wordWrap"> |
874 | + <bool>true</bool> |
875 | + </property> |
876 | + </widget> |
877 | + </item> |
878 | + <item> |
879 | + <spacer name="spacer6_2"> |
880 | + <property name="orientation"> |
881 | + <enum>Qt::Vertical</enum> |
882 | + </property> |
883 | + <property name="sizeHint" stdset="0"> |
884 | + <size> |
885 | + <width>0</width> |
886 | + <height>0</height> |
887 | + </size> |
888 | + </property> |
889 | + </spacer> |
890 | </item> |
891 | </layout> |
892 | </item> |
893 | </layout> |
894 | </item> |
895 | - <item row="1" column="0" > |
896 | - <widget class="QPushButton" name="show_details_button" > |
897 | - <property name="text" > |
898 | - <string>Details >>></string> |
899 | - </property> |
900 | - </widget> |
901 | - </item> |
902 | - <item row="1" column="1" colspan="3" > |
903 | - <spacer name="spacer2" > |
904 | - <property name="orientation" > |
905 | - <enum>Qt::Horizontal</enum> |
906 | - </property> |
907 | - <property name="sizeType" > |
908 | - <enum>QSizePolicy::Expanding</enum> |
909 | - </property> |
910 | - <property name="sizeHint" stdset="0" > |
911 | - <size> |
912 | - <width>341</width> |
913 | - <height>21</height> |
914 | - </size> |
915 | - </property> |
916 | - </spacer> |
917 | - </item> |
918 | - <item row="3" column="2" > |
919 | - <widget class="QPushButton" name="button_confirm_changes" > |
920 | - <property name="text" > |
921 | - <string>_Start Upgrade</string> |
922 | - </property> |
923 | - </widget> |
924 | - </item> |
925 | - <item row="3" column="0" colspan="2" > |
926 | - <spacer name="spacer3" > |
927 | - <property name="orientation" > |
928 | - <enum>Qt::Horizontal</enum> |
929 | - </property> |
930 | - <property name="sizeType" > |
931 | - <enum>QSizePolicy::Expanding</enum> |
932 | - </property> |
933 | - <property name="sizeHint" stdset="0" > |
934 | - <size> |
935 | - <width>161</width> |
936 | - <height>20</height> |
937 | - </size> |
938 | - </property> |
939 | - </spacer> |
940 | - </item> |
941 | - <item row="2" column="0" colspan="4" > |
942 | - <widget class="QTreeWidget" name="treeview_details" > |
943 | - <property name="rootIsDecorated" > |
944 | + <item> |
945 | + <widget class="QTreeWidget" name="treeview_details"> |
946 | + <property name="rootIsDecorated"> |
947 | <bool>false</bool> |
948 | </property> |
949 | <column> |
950 | - <property name="text" > |
951 | + <property name="text"> |
952 | <string>1</string> |
953 | </property> |
954 | </column> |
955 | </widget> |
956 | </item> |
957 | + <item> |
958 | + <widget class="QDialogButtonBox" name="buttonBox"> |
959 | + <property name="standardButtons"> |
960 | + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set> |
961 | + </property> |
962 | + </widget> |
963 | + </item> |
964 | </layout> |
965 | </widget> |
966 | - <layoutdefault spacing="6" margin="11" /> |
967 | + <layoutdefault spacing="6" margin="11"/> |
968 | <resources/> |
969 | <connections> |
970 | <connection> |
971 | - <sender>button_confirm_changes</sender> |
972 | - <signal>clicked()</signal> |
973 | + <sender>buttonBox</sender> |
974 | + <signal>accepted()</signal> |
975 | <receiver>dialog_changes</receiver> |
976 | <slot>accept()</slot> |
977 | <hints> |
978 | - <hint type="sourcelabel" > |
979 | - <x>20</x> |
980 | - <y>20</y> |
981 | + <hint type="sourcelabel"> |
982 | + <x>293</x> |
983 | + <y>163</y> |
984 | </hint> |
985 | - <hint type="destinationlabel" > |
986 | - <x>20</x> |
987 | - <y>20</y> |
988 | + <hint type="destinationlabel"> |
989 | + <x>293</x> |
990 | + <y>208</y> |
991 | </hint> |
992 | </hints> |
993 | </connection> |
994 | <connection> |
995 | - <sender>button_cancel_changes</sender> |
996 | - <signal>clicked()</signal> |
997 | + <sender>buttonBox</sender> |
998 | + <signal>rejected()</signal> |
999 | <receiver>dialog_changes</receiver> |
1000 | <slot>reject()</slot> |
1001 | <hints> |
1002 | - <hint type="sourcelabel" > |
1003 | - <x>20</x> |
1004 | - <y>20</y> |
1005 | + <hint type="sourcelabel"> |
1006 | + <x>293</x> |
1007 | + <y>163</y> |
1008 | </hint> |
1009 | - <hint type="destinationlabel" > |
1010 | - <x>20</x> |
1011 | - <y>20</y> |
1012 | + <hint type="destinationlabel"> |
1013 | + <x>293</x> |
1014 | + <y>208</y> |
1015 | </hint> |
1016 | </hints> |
1017 | </connection> |
1018 | |
1019 | === modified file 'DistUpgrade/dialog_error.ui' |
1020 | --- DistUpgrade/dialog_error.ui 2008-09-12 12:19:10 +0000 |
1021 | +++ DistUpgrade/dialog_error.ui 2014-08-05 13:50:46 +0000 |
1022 | @@ -1,117 +1,99 @@ |
1023 | -<ui version="4.0" > |
1024 | +<?xml version="1.0" encoding="UTF-8"?> |
1025 | +<ui version="4.0"> |
1026 | <class>dialog_error</class> |
1027 | - <widget class="QDialog" name="dialog_error" > |
1028 | - <property name="geometry" > |
1029 | + <widget class="QDialog" name="dialog_error"> |
1030 | + <property name="geometry"> |
1031 | <rect> |
1032 | <x>0</x> |
1033 | <y>0</y> |
1034 | - <width>427</width> |
1035 | - <height>343</height> |
1036 | + <width>268</width> |
1037 | + <height>263</height> |
1038 | </rect> |
1039 | </property> |
1040 | - <property name="windowTitle" > |
1041 | + <property name="sizePolicy"> |
1042 | + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> |
1043 | + <horstretch>0</horstretch> |
1044 | + <verstretch>0</verstretch> |
1045 | + </sizepolicy> |
1046 | + </property> |
1047 | + <property name="windowTitle"> |
1048 | <string>Error</string> |
1049 | </property> |
1050 | - <property name="modal" > |
1051 | + <property name="modal"> |
1052 | <bool>true</bool> |
1053 | </property> |
1054 | - <layout class="QGridLayout" > |
1055 | - <item row="1" column="0" > |
1056 | - <spacer name="spacer4" > |
1057 | - <property name="orientation" > |
1058 | - <enum>Qt::Vertical</enum> |
1059 | - </property> |
1060 | - <property name="sizeType" > |
1061 | - <enum>QSizePolicy::Expanding</enum> |
1062 | - </property> |
1063 | - <property name="sizeHint" stdset="0" > |
1064 | - <size> |
1065 | - <width>21</width> |
1066 | - <height>161</height> |
1067 | - </size> |
1068 | - </property> |
1069 | - </spacer> |
1070 | - </item> |
1071 | - <item row="3" column="3" > |
1072 | - <widget class="QPushButton" name="button_close" > |
1073 | - <property name="text" > |
1074 | - <string>&Close</string> |
1075 | - </property> |
1076 | - </widget> |
1077 | - </item> |
1078 | - <item row="0" column="0" > |
1079 | - <widget class="QLabel" name="image" > |
1080 | - <property name="sizePolicy" > |
1081 | - <sizepolicy vsizetype="Preferred" hsizetype="Fixed" > |
1082 | - <horstretch>0</horstretch> |
1083 | - <verstretch>0</verstretch> |
1084 | - </sizepolicy> |
1085 | - </property> |
1086 | - <property name="text" > |
1087 | - <string/> |
1088 | - </property> |
1089 | - <property name="pixmap" > |
1090 | - <pixmap>image0</pixmap> |
1091 | - </property> |
1092 | - <property name="wordWrap" > |
1093 | - <bool>false</bool> |
1094 | - </property> |
1095 | - </widget> |
1096 | - </item> |
1097 | - <item row="0" column="1" colspan="3" > |
1098 | - <widget class="QLabel" name="label_error" > |
1099 | - <property name="text" > |
1100 | - <string/> |
1101 | - </property> |
1102 | - <property name="wordWrap" > |
1103 | + <layout class="QVBoxLayout" name="verticalLayout"> |
1104 | + <item> |
1105 | + <layout class="QHBoxLayout" name="horizontalLayout"> |
1106 | + <item> |
1107 | + <widget class="QLabel" name="image"> |
1108 | + <property name="sizePolicy"> |
1109 | + <sizepolicy hsizetype="Fixed" vsizetype="Minimum"> |
1110 | + <horstretch>0</horstretch> |
1111 | + <verstretch>0</verstretch> |
1112 | + </sizepolicy> |
1113 | + </property> |
1114 | + <property name="text"> |
1115 | + <string/> |
1116 | + </property> |
1117 | + <property name="pixmap"> |
1118 | + <pixmap>image0</pixmap> |
1119 | + </property> |
1120 | + <property name="wordWrap"> |
1121 | + <bool>false</bool> |
1122 | + </property> |
1123 | + </widget> |
1124 | + </item> |
1125 | + <item> |
1126 | + <widget class="QLabel" name="label_error"> |
1127 | + <property name="sizePolicy"> |
1128 | + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> |
1129 | + <horstretch>0</horstretch> |
1130 | + <verstretch>0</verstretch> |
1131 | + </sizepolicy> |
1132 | + </property> |
1133 | + <property name="text"> |
1134 | + <string/> |
1135 | + </property> |
1136 | + <property name="wordWrap"> |
1137 | + <bool>true</bool> |
1138 | + </property> |
1139 | + </widget> |
1140 | + </item> |
1141 | + </layout> |
1142 | + </item> |
1143 | + <item> |
1144 | + <widget class="QTextBrowser" name="textview_error"> |
1145 | + <property name="openExternalLinks"> |
1146 | <bool>true</bool> |
1147 | </property> |
1148 | </widget> |
1149 | </item> |
1150 | - <item row="3" column="0" colspan="2" > |
1151 | - <spacer name="spacer5" > |
1152 | - <property name="orientation" > |
1153 | - <enum>Qt::Horizontal</enum> |
1154 | - </property> |
1155 | - <property name="sizeType" > |
1156 | - <enum>QSizePolicy::Expanding</enum> |
1157 | - </property> |
1158 | - <property name="sizeHint" stdset="0" > |
1159 | - <size> |
1160 | - <width>130</width> |
1161 | - <height>21</height> |
1162 | - </size> |
1163 | - </property> |
1164 | - </spacer> |
1165 | - </item> |
1166 | - <item row="3" column="2" > |
1167 | - <widget class="QPushButton" name="button_bugreport" > |
1168 | - <property name="text" > |
1169 | - <string>_Report Bug</string> |
1170 | + <item> |
1171 | + <widget class="QDialogButtonBox" name="buttonBox"> |
1172 | + <property name="standardButtons"> |
1173 | + <set>QDialogButtonBox::Close</set> |
1174 | </property> |
1175 | </widget> |
1176 | </item> |
1177 | - <item rowspan="2" row="1" column="1" colspan="3" > |
1178 | - <widget class="QTextEdit" name="textview_error" /> |
1179 | - </item> |
1180 | </layout> |
1181 | </widget> |
1182 | - <layoutdefault spacing="6" margin="11" /> |
1183 | + <layoutdefault spacing="6" margin="11"/> |
1184 | <resources/> |
1185 | <connections> |
1186 | <connection> |
1187 | - <sender>button_close</sender> |
1188 | - <signal>clicked()</signal> |
1189 | + <sender>buttonBox</sender> |
1190 | + <signal>rejected()</signal> |
1191 | <receiver>dialog_error</receiver> |
1192 | <slot>close()</slot> |
1193 | <hints> |
1194 | - <hint type="sourcelabel" > |
1195 | - <x>20</x> |
1196 | - <y>20</y> |
1197 | + <hint type="sourcelabel"> |
1198 | + <x>182</x> |
1199 | + <y>274</y> |
1200 | </hint> |
1201 | - <hint type="destinationlabel" > |
1202 | - <x>20</x> |
1203 | - <y>20</y> |
1204 | + <hint type="destinationlabel"> |
1205 | + <x>182</x> |
1206 | + <y>147</y> |
1207 | </hint> |
1208 | </hints> |
1209 | </connection> |
1210 | |
1211 | === modified file 'DistUpgrade/dialog_release_notes.ui' |
1212 | --- DistUpgrade/dialog_release_notes.ui 2012-06-28 16:12:09 +0000 |
1213 | +++ DistUpgrade/dialog_release_notes.ui 2014-08-05 13:50:46 +0000 |
1214 | @@ -1,7 +1,8 @@ |
1215 | -<ui version="4.0" > |
1216 | +<?xml version="1.0" encoding="UTF-8"?> |
1217 | +<ui version="4.0"> |
1218 | <class>Dialog</class> |
1219 | - <widget class="QDialog" name="Dialog" > |
1220 | - <property name="geometry" > |
1221 | + <widget class="QDialog" name="Dialog"> |
1222 | + <property name="geometry"> |
1223 | <rect> |
1224 | <x>0</x> |
1225 | <y>0</y> |
1226 | @@ -9,27 +10,30 @@ |
1227 | <height>476</height> |
1228 | </rect> |
1229 | </property> |
1230 | - <property name="windowTitle" > |
1231 | + <property name="windowTitle"> |
1232 | <string>Dialog</string> |
1233 | </property> |
1234 | - <layout class="QGridLayout" name="gridLayout" > |
1235 | - <item row="0" column="0" > |
1236 | - <widget class="QTextEdit" name="scrolled_notes" > |
1237 | - <property name="readOnly" > |
1238 | - <bool>true</bool> |
1239 | - </property> |
1240 | - </widget> |
1241 | - </item> |
1242 | - <item row="1" column="0" > |
1243 | - <widget class="QDialogButtonBox" name="buttonBox" > |
1244 | - <property name="orientation" > |
1245 | + <layout class="QGridLayout" name="gridLayout"> |
1246 | + <item row="1" column="0"> |
1247 | + <widget class="QDialogButtonBox" name="buttonBox"> |
1248 | + <property name="orientation"> |
1249 | <enum>Qt::Horizontal</enum> |
1250 | </property> |
1251 | - <property name="standardButtons" > |
1252 | + <property name="standardButtons"> |
1253 | <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
1254 | </property> |
1255 | </widget> |
1256 | </item> |
1257 | + <item row="0" column="0"> |
1258 | + <widget class="QTextBrowser" name="scrolled_notes"> |
1259 | + <property name="readOnly"> |
1260 | + <bool>true</bool> |
1261 | + </property> |
1262 | + <property name="openExternalLinks"> |
1263 | + <bool>true</bool> |
1264 | + </property> |
1265 | + </widget> |
1266 | + </item> |
1267 | </layout> |
1268 | </widget> |
1269 | <resources/> |
1270 | @@ -40,11 +44,11 @@ |
1271 | <receiver>Dialog</receiver> |
1272 | <slot>accept()</slot> |
1273 | <hints> |
1274 | - <hint type="sourcelabel" > |
1275 | + <hint type="sourcelabel"> |
1276 | <x>248</x> |
1277 | <y>254</y> |
1278 | </hint> |
1279 | - <hint type="destinationlabel" > |
1280 | + <hint type="destinationlabel"> |
1281 | <x>157</x> |
1282 | <y>274</y> |
1283 | </hint> |
1284 | @@ -56,11 +60,11 @@ |
1285 | <receiver>Dialog</receiver> |
1286 | <slot>reject()</slot> |
1287 | <hints> |
1288 | - <hint type="sourcelabel" > |
1289 | + <hint type="sourcelabel"> |
1290 | <x>316</x> |
1291 | <y>260</y> |
1292 | </hint> |
1293 | - <hint type="destinationlabel" > |
1294 | + <hint type="destinationlabel"> |
1295 | <x>286</x> |
1296 | <y>274</y> |
1297 | </hint> |
1298 | |
1299 | === modified file 'DistUpgrade/fetch-progress.ui' |
1300 | --- DistUpgrade/fetch-progress.ui 2012-06-28 16:12:09 +0000 |
1301 | +++ DistUpgrade/fetch-progress.ui 2014-08-05 13:50:46 +0000 |
1302 | @@ -1,67 +1,36 @@ |
1303 | -<ui version="4.0" > |
1304 | +<?xml version="1.0" encoding="UTF-8"?> |
1305 | +<ui version="4.0"> |
1306 | <class>Dialog</class> |
1307 | - <widget class="QDialog" name="Dialog" > |
1308 | - <property name="geometry" > |
1309 | + <widget class="QDialog" name="Dialog"> |
1310 | + <property name="geometry"> |
1311 | <rect> |
1312 | <x>0</x> |
1313 | <y>0</y> |
1314 | - <width>408</width> |
1315 | - <height>129</height> |
1316 | + <width>409</width> |
1317 | + <height>93</height> |
1318 | </rect> |
1319 | </property> |
1320 | - <property name="windowTitle" > |
1321 | + <property name="windowTitle"> |
1322 | <string>Dialog</string> |
1323 | </property> |
1324 | - <layout class="QGridLayout" name="gridLayout_3" > |
1325 | - <item row="4" column="0" > |
1326 | - <widget class="QWidget" native="1" name="installFrame" > |
1327 | - <layout class="QGridLayout" name="gridLayout_2" > |
1328 | - <property name="margin" > |
1329 | - <number>0</number> |
1330 | - </property> |
1331 | - <item row="1" column="0" colspan="2" > |
1332 | - <widget class="QProgressBar" name="installationProgress" > |
1333 | - <property name="value" > |
1334 | - <number>24</number> |
1335 | - </property> |
1336 | - </widget> |
1337 | - </item> |
1338 | - <item row="3" column="0" colspan="2" > |
1339 | - <widget class="QWidget" native="1" name="konsoleFrame" /> |
1340 | - </item> |
1341 | - <item row="4" column="0" colspan="2" > |
1342 | - <spacer name="verticalSpacer" > |
1343 | - <property name="orientation" > |
1344 | - <enum>Qt::Vertical</enum> |
1345 | - </property> |
1346 | - <property name="sizeHint" stdset="0" > |
1347 | - <size> |
1348 | - <width>397</width> |
1349 | - <height>5</height> |
1350 | - </size> |
1351 | - </property> |
1352 | - </spacer> |
1353 | - </item> |
1354 | - <item row="0" column="0" colspan="2" > |
1355 | - <widget class="QLabel" name="installingLabel" > |
1356 | - <property name="text" > |
1357 | - <string/> |
1358 | - </property> |
1359 | - </widget> |
1360 | - </item> |
1361 | - </layout> |
1362 | - </widget> |
1363 | - </item> |
1364 | - <item row="0" column="0" > |
1365 | - <widget class="QLabel" name="titleLabel" > |
1366 | - <property name="text" > |
1367 | + <layout class="QVBoxLayout" name="verticalLayout"> |
1368 | + <item> |
1369 | + <widget class="QLabel" name="installingLabel"> |
1370 | + <property name="text"> |
1371 | <string/> |
1372 | </property> |
1373 | </widget> |
1374 | </item> |
1375 | - <item row="5" column="0" > |
1376 | - <widget class="QDialogButtonBox" name="buttonBox" > |
1377 | - <property name="standardButtons" > |
1378 | + <item> |
1379 | + <widget class="QProgressBar" name="installationProgress"> |
1380 | + <property name="value"> |
1381 | + <number>24</number> |
1382 | + </property> |
1383 | + </widget> |
1384 | + </item> |
1385 | + <item> |
1386 | + <widget class="QDialogButtonBox" name="buttonBox"> |
1387 | + <property name="standardButtons"> |
1388 | <set>QDialogButtonBox::Close</set> |
1389 | </property> |
1390 | </widget> |
1391 | @@ -76,11 +45,11 @@ |
1392 | <receiver>Dialog</receiver> |
1393 | <slot>accept()</slot> |
1394 | <hints> |
1395 | - <hint type="sourcelabel" > |
1396 | + <hint type="sourcelabel"> |
1397 | <x>271</x> |
1398 | <y>169</y> |
1399 | </hint> |
1400 | - <hint type="destinationlabel" > |
1401 | + <hint type="destinationlabel"> |
1402 | <x>271</x> |
1403 | <y>94</y> |
1404 | </hint> |
1405 | @@ -92,11 +61,11 @@ |
1406 | <receiver>Dialog</receiver> |
1407 | <slot>reject()</slot> |
1408 | <hints> |
1409 | - <hint type="sourcelabel" > |
1410 | + <hint type="sourcelabel"> |
1411 | <x>271</x> |
1412 | <y>169</y> |
1413 | </hint> |
1414 | - <hint type="destinationlabel" > |
1415 | + <hint type="destinationlabel"> |
1416 | <x>271</x> |
1417 | <y>94</y> |
1418 | </hint> |
1419 | |
1420 | === modified file 'DistUpgrade/window_main.ui' |
1421 | --- DistUpgrade/window_main.ui 2014-05-02 11:46:02 +0000 |
1422 | +++ DistUpgrade/window_main.ui 2014-08-05 13:50:46 +0000 |
1423 | @@ -1,7 +1,8 @@ |
1424 | -<ui version="4.0" > |
1425 | +<?xml version="1.0" encoding="UTF-8"?> |
1426 | +<ui version="4.0"> |
1427 | <class>window_main</class> |
1428 | - <widget class="QWidget" name="window_main" > |
1429 | - <property name="geometry" > |
1430 | + <widget class="QWidget" name="window_main"> |
1431 | + <property name="geometry"> |
1432 | <rect> |
1433 | <x>0</x> |
1434 | <y>0</y> |
1435 | @@ -9,26 +10,26 @@ |
1436 | <height>294</height> |
1437 | </rect> |
1438 | </property> |
1439 | - <property name="windowTitle" > |
1440 | + <property name="windowTitle"> |
1441 | <string>Distribution Upgrade</string> |
1442 | </property> |
1443 | - <layout class="QGridLayout" > |
1444 | - <item row="6" column="0" > |
1445 | - <widget class="QPushButton" name="showTerminalButton" > |
1446 | - <property name="text" > |
1447 | - <string>Show Terminal >>></string> |
1448 | + <layout class="QGridLayout"> |
1449 | + <item row="6" column="0"> |
1450 | + <widget class="QPushButton" name="showTerminalButton"> |
1451 | + <property name="text"> |
1452 | + <string>Show Terminal >>></string> |
1453 | </property> |
1454 | </widget> |
1455 | </item> |
1456 | - <item row="6" column="1" > |
1457 | - <spacer name="spacer1" > |
1458 | - <property name="orientation" > |
1459 | + <item row="6" column="1"> |
1460 | + <spacer name="spacer1"> |
1461 | + <property name="orientation"> |
1462 | <enum>Qt::Horizontal</enum> |
1463 | </property> |
1464 | - <property name="sizeType" > |
1465 | + <property name="sizeType"> |
1466 | <enum>QSizePolicy::Expanding</enum> |
1467 | </property> |
1468 | - <property name="sizeHint" stdset="0" > |
1469 | + <property name="sizeHint" stdset="0"> |
1470 | <size> |
1471 | <width>302</width> |
1472 | <height>21</height> |
1473 | @@ -36,25 +37,25 @@ |
1474 | </property> |
1475 | </spacer> |
1476 | </item> |
1477 | - <item rowspan="2" row="4" column="0" colspan="4" > |
1478 | - <widget class="QLabel" name="label_status" > |
1479 | - <property name="text" > |
1480 | + <item row="4" column="0" rowspan="2" colspan="4"> |
1481 | + <widget class="QLabel" name="label_status"> |
1482 | + <property name="text"> |
1483 | <string/> |
1484 | </property> |
1485 | - <property name="wordWrap" > |
1486 | + <property name="wordWrap"> |
1487 | <bool>false</bool> |
1488 | </property> |
1489 | </widget> |
1490 | </item> |
1491 | - <item rowspan="2" row="5" column="2" > |
1492 | - <spacer name="spacer3" > |
1493 | - <property name="orientation" > |
1494 | + <item row="5" column="2" rowspan="2"> |
1495 | + <spacer name="spacer3"> |
1496 | + <property name="orientation"> |
1497 | <enum>Qt::Vertical</enum> |
1498 | </property> |
1499 | - <property name="sizeType" > |
1500 | + <property name="sizeType"> |
1501 | <enum>QSizePolicy::Expanding</enum> |
1502 | </property> |
1503 | - <property name="sizeHint" stdset="0" > |
1504 | + <property name="sizeHint" stdset="0"> |
1505 | <size> |
1506 | <width>20</width> |
1507 | <height>16</height> |
1508 | @@ -62,206 +63,212 @@ |
1509 | </property> |
1510 | </spacer> |
1511 | </item> |
1512 | - <item row="2" column="0" colspan="4" > |
1513 | - <widget class="QLabel" name="progress_text" > |
1514 | - <property name="text" > |
1515 | + <item row="2" column="0" colspan="4"> |
1516 | + <widget class="QLabel" name="progress_text"> |
1517 | + <property name="text"> |
1518 | <string/> |
1519 | </property> |
1520 | - <property name="wordWrap" > |
1521 | + <property name="wordWrap"> |
1522 | <bool>false</bool> |
1523 | </property> |
1524 | </widget> |
1525 | </item> |
1526 | - <item row="1" column="0" colspan="4" > |
1527 | - <layout class="QGridLayout" > |
1528 | - <item row="3" column="0" > |
1529 | - <widget class="QLabel" name="image_step4" > |
1530 | - <property name="sizePolicy" > |
1531 | - <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > |
1532 | - <horstretch>0</horstretch> |
1533 | - <verstretch>0</verstretch> |
1534 | - </sizepolicy> |
1535 | - </property> |
1536 | - <property name="text" > |
1537 | - <string/> |
1538 | - </property> |
1539 | - <property name="wordWrap" > |
1540 | - <bool>false</bool> |
1541 | - </property> |
1542 | - </widget> |
1543 | - </item> |
1544 | - <item row="1" column="0" > |
1545 | - <widget class="QLabel" name="image_step2" > |
1546 | - <property name="sizePolicy" > |
1547 | - <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > |
1548 | - <horstretch>0</horstretch> |
1549 | - <verstretch>0</verstretch> |
1550 | - </sizepolicy> |
1551 | - </property> |
1552 | - <property name="text" > |
1553 | - <string/> |
1554 | - </property> |
1555 | - <property name="wordWrap" > |
1556 | - <bool>false</bool> |
1557 | - </property> |
1558 | - </widget> |
1559 | - </item> |
1560 | - <item row="0" column="1" > |
1561 | - <widget class="QLabel" name="label_step1" > |
1562 | - <property name="text" > |
1563 | + <item row="1" column="0" colspan="4"> |
1564 | + <layout class="QGridLayout"> |
1565 | + <item row="3" column="0"> |
1566 | + <widget class="QLabel" name="image_step4"> |
1567 | + <property name="sizePolicy"> |
1568 | + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> |
1569 | + <horstretch>0</horstretch> |
1570 | + <verstretch>0</verstretch> |
1571 | + </sizepolicy> |
1572 | + </property> |
1573 | + <property name="text"> |
1574 | + <string/> |
1575 | + </property> |
1576 | + <property name="wordWrap"> |
1577 | + <bool>false</bool> |
1578 | + </property> |
1579 | + </widget> |
1580 | + </item> |
1581 | + <item row="1" column="0"> |
1582 | + <widget class="QLabel" name="image_step2"> |
1583 | + <property name="sizePolicy"> |
1584 | + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> |
1585 | + <horstretch>0</horstretch> |
1586 | + <verstretch>0</verstretch> |
1587 | + </sizepolicy> |
1588 | + </property> |
1589 | + <property name="text"> |
1590 | + <string/> |
1591 | + </property> |
1592 | + <property name="wordWrap"> |
1593 | + <bool>false</bool> |
1594 | + </property> |
1595 | + </widget> |
1596 | + </item> |
1597 | + <item row="0" column="1"> |
1598 | + <widget class="QLabel" name="label_step1"> |
1599 | + <property name="text"> |
1600 | <string>Preparing to upgrade</string> |
1601 | </property> |
1602 | - <property name="wordWrap" > |
1603 | - <bool>false</bool> |
1604 | - </property> |
1605 | - </widget> |
1606 | - </item> |
1607 | - <item row="0" column="0" > |
1608 | - <widget class="QLabel" name="image_step1" > |
1609 | - <property name="sizePolicy" > |
1610 | - <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > |
1611 | - <horstretch>0</horstretch> |
1612 | - <verstretch>0</verstretch> |
1613 | - </sizepolicy> |
1614 | - </property> |
1615 | - <property name="text" > |
1616 | - <string/> |
1617 | - </property> |
1618 | - <property name="wordWrap" > |
1619 | - <bool>false</bool> |
1620 | - </property> |
1621 | - </widget> |
1622 | - </item> |
1623 | - <item row="2" column="0" > |
1624 | - <widget class="QLabel" name="image_step3" > |
1625 | - <property name="sizePolicy" > |
1626 | - <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > |
1627 | - <horstretch>0</horstretch> |
1628 | - <verstretch>0</verstretch> |
1629 | - </sizepolicy> |
1630 | - </property> |
1631 | - <property name="text" > |
1632 | - <string/> |
1633 | - </property> |
1634 | - <property name="wordWrap" > |
1635 | - <bool>false</bool> |
1636 | - </property> |
1637 | - </widget> |
1638 | - </item> |
1639 | - <item row="2" column="1" > |
1640 | - <widget class="QLabel" name="label_step3" > |
1641 | - <property name="text" > |
1642 | + <property name="wordWrap"> |
1643 | + <bool>false</bool> |
1644 | + </property> |
1645 | + </widget> |
1646 | + </item> |
1647 | + <item row="0" column="0"> |
1648 | + <widget class="QLabel" name="image_step1"> |
1649 | + <property name="sizePolicy"> |
1650 | + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> |
1651 | + <horstretch>0</horstretch> |
1652 | + <verstretch>0</verstretch> |
1653 | + </sizepolicy> |
1654 | + </property> |
1655 | + <property name="text"> |
1656 | + <string/> |
1657 | + </property> |
1658 | + <property name="wordWrap"> |
1659 | + <bool>false</bool> |
1660 | + </property> |
1661 | + </widget> |
1662 | + </item> |
1663 | + <item row="2" column="0"> |
1664 | + <widget class="QLabel" name="image_step3"> |
1665 | + <property name="sizePolicy"> |
1666 | + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> |
1667 | + <horstretch>0</horstretch> |
1668 | + <verstretch>0</verstretch> |
1669 | + </sizepolicy> |
1670 | + </property> |
1671 | + <property name="text"> |
1672 | + <string/> |
1673 | + </property> |
1674 | + <property name="wordWrap"> |
1675 | + <bool>false</bool> |
1676 | + </property> |
1677 | + </widget> |
1678 | + </item> |
1679 | + <item row="2" column="1"> |
1680 | + <widget class="QLabel" name="label_step3"> |
1681 | + <property name="text"> |
1682 | <string>Getting new packages</string> |
1683 | </property> |
1684 | - <property name="wordWrap" > |
1685 | + <property name="wordWrap"> |
1686 | <bool>false</bool> |
1687 | </property> |
1688 | </widget> |
1689 | </item> |
1690 | - <item row="4" column="1" > |
1691 | - <widget class="QLabel" name="label_step5" > |
1692 | - <property name="text" > |
1693 | + <item row="4" column="1"> |
1694 | + <widget class="QLabel" name="label_step5"> |
1695 | + <property name="text"> |
1696 | <string>Cleaning up</string> |
1697 | </property> |
1698 | - <property name="wordWrap" > |
1699 | + <property name="wordWrap"> |
1700 | <bool>false</bool> |
1701 | </property> |
1702 | </widget> |
1703 | </item> |
1704 | - <item row="3" column="1" > |
1705 | - <widget class="QLabel" name="label_step4" > |
1706 | - <property name="text" > |
1707 | + <item row="3" column="1"> |
1708 | + <widget class="QLabel" name="label_step4"> |
1709 | + <property name="text"> |
1710 | <string>Installing the upgrades</string> |
1711 | </property> |
1712 | - <property name="wordWrap" > |
1713 | + <property name="wordWrap"> |
1714 | <bool>false</bool> |
1715 | </property> |
1716 | </widget> |
1717 | </item> |
1718 | - <item row="1" column="1" > |
1719 | - <widget class="QLabel" name="label_step2" > |
1720 | - <property name="text" > |
1721 | + <item row="1" column="1"> |
1722 | + <widget class="QLabel" name="label_step2"> |
1723 | + <property name="text"> |
1724 | <string>Setting new software channels</string> |
1725 | </property> |
1726 | - <property name="wordWrap" > |
1727 | + <property name="wordWrap"> |
1728 | <bool>false</bool> |
1729 | </property> |
1730 | </widget> |
1731 | </item> |
1732 | - <item row="5" column="1" > |
1733 | - <widget class="QLabel" name="label_step6" > |
1734 | - <property name="text" > |
1735 | + <item row="5" column="1"> |
1736 | + <widget class="QLabel" name="label_step6"> |
1737 | + <property name="text"> |
1738 | <string>Restarting the computer</string> |
1739 | </property> |
1740 | - <property name="wordWrap" > |
1741 | - <bool>false</bool> |
1742 | - </property> |
1743 | - </widget> |
1744 | - </item> |
1745 | - <item row="4" column="0" > |
1746 | - <widget class="QLabel" name="image_step5" > |
1747 | - <property name="sizePolicy" > |
1748 | - <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > |
1749 | - <horstretch>0</horstretch> |
1750 | - <verstretch>0</verstretch> |
1751 | - </sizepolicy> |
1752 | - </property> |
1753 | - <property name="text" > |
1754 | - <string/> |
1755 | - </property> |
1756 | - <property name="wordWrap" > |
1757 | - <bool>false</bool> |
1758 | - </property> |
1759 | - </widget> |
1760 | - </item> |
1761 | - <item row="5" column="0" > |
1762 | - <widget class="QLabel" name="image_step6" > |
1763 | - <property name="sizePolicy" > |
1764 | - <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > |
1765 | - <horstretch>0</horstretch> |
1766 | - <verstretch>0</verstretch> |
1767 | - </sizepolicy> |
1768 | - </property> |
1769 | - <property name="text" > |
1770 | - <string/> |
1771 | - </property> |
1772 | - <property name="wordWrap" > |
1773 | + <property name="wordWrap"> |
1774 | + <bool>false</bool> |
1775 | + </property> |
1776 | + </widget> |
1777 | + </item> |
1778 | + <item row="4" column="0"> |
1779 | + <widget class="QLabel" name="image_step5"> |
1780 | + <property name="sizePolicy"> |
1781 | + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> |
1782 | + <horstretch>0</horstretch> |
1783 | + <verstretch>0</verstretch> |
1784 | + </sizepolicy> |
1785 | + </property> |
1786 | + <property name="text"> |
1787 | + <string/> |
1788 | + </property> |
1789 | + <property name="wordWrap"> |
1790 | + <bool>false</bool> |
1791 | + </property> |
1792 | + </widget> |
1793 | + </item> |
1794 | + <item row="5" column="0"> |
1795 | + <widget class="QLabel" name="image_step6"> |
1796 | + <property name="sizePolicy"> |
1797 | + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> |
1798 | + <horstretch>0</horstretch> |
1799 | + <verstretch>0</verstretch> |
1800 | + </sizepolicy> |
1801 | + </property> |
1802 | + <property name="text"> |
1803 | + <string/> |
1804 | + </property> |
1805 | + <property name="wordWrap"> |
1806 | <bool>false</bool> |
1807 | </property> |
1808 | </widget> |
1809 | </item> |
1810 | </layout> |
1811 | </item> |
1812 | - <item row="0" column="0" colspan="4" > |
1813 | - <widget class="QLabel" name="label_title" > |
1814 | - <property name="text" > |
1815 | - <string><b><big>Upgrading Ubuntu to version 14.10</big></b></string> |
1816 | + <item row="0" column="0" colspan="4"> |
1817 | + <widget class="QLabel" name="label_title"> |
1818 | + <property name="text"> |
1819 | + <string><b><big>Upgrading Ubuntu to version 14.10</big></b></string> |
1820 | </property> |
1821 | - <property name="wordWrap" > |
1822 | + <property name="wordWrap"> |
1823 | <bool>false</bool> |
1824 | </property> |
1825 | </widget> |
1826 | </item> |
1827 | - <item row="7" column="0" colspan="3" > |
1828 | - <widget class="QFrame" name="konsole_frame" > |
1829 | - <property name="frameShape" > |
1830 | + <item row="7" column="0" colspan="3"> |
1831 | + <widget class="QFrame" name="konsole_frame"> |
1832 | + <property name="frameShape"> |
1833 | <enum>QFrame::StyledPanel</enum> |
1834 | </property> |
1835 | - <property name="frameShadow" > |
1836 | + <property name="frameShadow"> |
1837 | <enum>QFrame::Raised</enum> |
1838 | </property> |
1839 | </widget> |
1840 | </item> |
1841 | - <item row="3" column="0" colspan="3" > |
1842 | - <widget class="QProgressBar" name="progressbar_cache" > |
1843 | - <property name="value" > |
1844 | + <item row="3" column="0" colspan="3"> |
1845 | + <widget class="QProgressBar" name="progressbar_cache"> |
1846 | + <property name="sizePolicy"> |
1847 | + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> |
1848 | + <horstretch>0</horstretch> |
1849 | + <verstretch>0</verstretch> |
1850 | + </sizepolicy> |
1851 | + </property> |
1852 | + <property name="value"> |
1853 | <number>24</number> |
1854 | </property> |
1855 | </widget> |
1856 | </item> |
1857 | </layout> |
1858 | </widget> |
1859 | - <layoutdefault spacing="6" margin="11" /> |
1860 | + <layoutdefault spacing="6" margin="11"/> |
1861 | <resources/> |
1862 | <connections/> |
1863 | </ui> |
1864 | |
1865 | === modified file 'debian/changelog' |
1866 | --- debian/changelog 2014-08-05 06:33:47 +0000 |
1867 | +++ debian/changelog 2014-08-05 13:50:46 +0000 |
1868 | @@ -1,9 +1,96 @@ |
1869 | +<<<<<<< TREE |
1870 | ubuntu-release-upgrader (1:14.10.6) UNRELEASED; urgency=medium |
1871 | |
1872 | * check-new-release-gtk: Fix deprecated Gio.Settings constructor invocation. |
1873 | |
1874 | -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 05 Aug 2014 08:33:11 +0200 |
1875 | |
1876 | +======= |
1877 | +ubuntu-release-upgrader (1:14.10.6ubuntu1) UNRELEASED; urgency=medium |
1878 | + |
1879 | + * Port KDE GUIs to native Qt5 versions. |
1880 | + + pyqt5 is only imported iff the current dist version is not trusty as |
1881 | + that one had a nasty bug with signals and slots not connecting properly. |
1882 | + + pyqt4/pykde4 compatibility is retained by fallback handling for the |
1883 | + pyqt5 import, as well as some version checks switching out kde classes |
1884 | + for qt classes when using Qt5. Ultimately systems <=utopic will retain |
1885 | + the same behavior as before. |
1886 | + + KDE bits replacemed as follows: |
1887 | + * KIcon -> QIcon::fromTheme |
1888 | + * KMessageBox -> QMessageBox (using most suitable version from the |
1889 | + limited feature set of QMB) |
1890 | + * KApplication -> QApplication |
1891 | + * i18n -> _() |
1892 | + * Fix KDE upgrade fetcher GUI |
1893 | + + Wire up do-release-upgrade with the KDE GUI to actually provide a UI |
1894 | + when run from a KDE Plasma envrionment |
1895 | + + Remove all logic that replicated stuff done in do-release-upgrade |
1896 | + (this primarily includes using MetaRelease to actually conduct the |
1897 | + version check, the automatic version checks are done by a special |
1898 | + script that is part of muon, so we do not ever call the fetcher |
1899 | + manually, and have not done so in at least 5 years) |
1900 | + + Detangle the Acquire class from the Fetcher class, latter is not |
1901 | + automatically constructing former any longer but needs to get it |
1902 | + supplied from the outside (i.e. do-release-upgrade) |
1903 | + + init arguments of both classes are now alinged with their GTK |
1904 | + counterparts |
1905 | + + The designer ui file now uses a QTextBrowser rather than a QTextEdit as |
1906 | + the user doesn't need to edit anything and the former supports html and |
1907 | + url opening |
1908 | + + The fetcher ui file has had all unused widgets removed which makes the |
1909 | + fetcher dialog have correct spacing |
1910 | + + The classes now hold a QApp as self.app to reflect the fact that they |
1911 | + may be constructed in any order and thus may need a QApplication in any |
1912 | + order. The actually instance is created from a new function that creates |
1913 | + an instance if there isn't one already. Ultimately this should probably |
1914 | + become a singleton. |
1915 | + + The Acquire process can now be aborted properly. |
1916 | + * Fix translation loading. As all Qt GUIs no prominently feature Qt builtin |
1917 | + classes with strings (QMessageBox, QButtonBox) we make sure that the |
1918 | + correct translations are loaded through QTranslator right after creating |
1919 | + the QApplication instances. |
1920 | + + ubuntu-release-upgrader-qt now recommends qttranslations5-l10n to |
1921 | + reflect this on a packaging level |
1922 | + * Add a new class QUrlOpener to redirect all openUrl calls through sudo -u |
1923 | + if the GUI is run as root, so that we can start the browsers as the user |
1924 | + rather than root. This class is used in both the Fetcher and the Upgrader. |
1925 | + It is a singleton that autoparents to qapp, so a qapp instance needs to be |
1926 | + available before using the opener. |
1927 | + * Improve Upgrader GUI |
1928 | + + Upgrader GUI does not meddle with xauthority anymore and doesn't kill |
1929 | + adept anymore (mind you, adept hasn't been used in years...) |
1930 | + Also the meddling seems to have been bugged in one form or the other |
1931 | + which ultimately prevents us from doing a proper openUrl as the invoking |
1932 | + user |
1933 | + + dialog_error.ui has been converted to use QTextBrowser as there is no |
1934 | + editing need. |
1935 | + + error dialog size hinting as been adjusted to make sure the window can |
1936 | + not be resized beyond what is suitable to still display stuff. |
1937 | + + error dialog window size is adjusted before exec to make sure that |
1938 | + the window has a suitable default size depending on whether the textview |
1939 | + is displayed or not |
1940 | + + dialog_error.ui has had its close button replaced with a standard |
1941 | + QButtonBox |
1942 | + + reportBug function has been removed as it is not used anymore (core |
1943 | + brings up apport regardless and the bug report url is most inconvenient |
1944 | + and pointless because people will not attach the relevant logs...) |
1945 | + + openUrl function has been removed as it is not used anymore |
1946 | + + dialog_changes.ui has had its size hinting adjusted to make sure that |
1947 | + the window has a suitable default size |
1948 | + + dialog_changes.ui uses QDialogButtonBox for all buttons now, details is |
1949 | + derived from Help which is the closest fit as far as standard types are |
1950 | + concerned |
1951 | + + The changes dialog now adjusts its size when the details widget is |
1952 | + hidden, this prevents overly large windows after details was shown once |
1953 | + + The changes dialog now correctly spaces the labels as well as the icon |
1954 | + label at the window, this resolves text jumping when showing/hiding the |
1955 | + details widget which was caused by the labels being pushed towards the |
1956 | + top to make space for the details, now a space makes that happen all the |
1957 | + time |
1958 | + |
1959 | + -- Harald Sitter <apachelogger@kubuntu.org> Tue, 05 Aug 2014 15:20:10 +0200 |
1960 | + |
1961 | +>>>>>>> MERGE-SOURCE |
1962 | ubuntu-release-upgrader (1:14.10.5) utopic; urgency=medium |
1963 | |
1964 | [ Brian Murray ] |
1965 | |
1966 | === modified file 'debian/control' |
1967 | --- debian/control 2014-03-13 17:06:03 +0000 |
1968 | +++ debian/control 2014-08-05 13:50:46 +0000 |
1969 | @@ -67,9 +67,10 @@ |
1970 | Pre-Depends: ${misc:Pre-Depends} |
1971 | Depends: ${misc:Depends}, |
1972 | ubuntu-release-upgrader-core (= ${source:Version}), |
1973 | - python3-pykde4, |
1974 | + python3-pyqt5, |
1975 | kdesudo, |
1976 | psmisc |
1977 | +Recommends: qttranslations5-l10n |
1978 | Replaces: update-manager-kde (<< 1:0.165) |
1979 | Breaks: update-manager-kde (<< 1:0.165) |
1980 | Description: manage release upgrades |
1981 | |
1982 | === modified file 'do-release-upgrade' |
1983 | --- do-release-upgrade 2014-03-07 17:00:00 +0000 |
1984 | +++ do-release-upgrade 2014-08-05 13:50:46 +0000 |
1985 | @@ -33,6 +33,18 @@ |
1986 | progress=progress, |
1987 | parent=None, |
1988 | datadir=datadir) |
1989 | + elif frontend == "DistUpgradeViewKDE": |
1990 | + print("kde") |
1991 | + from DistUpgrade.DistUpgradeFetcherKDE import DistUpgradeFetcherKDE |
1992 | + from DistUpgrade.DistUpgradeFetcherKDE import KDEAcquireProgressAdapter |
1993 | + progress = KDEAcquireProgressAdapter( |
1994 | + parent=None, |
1995 | + datadir=datadir, |
1996 | + label=_("Downloading the release upgrade tool")) |
1997 | + return DistUpgradeFetcherKDE(new_dist=new_dist, |
1998 | + progress=progress, |
1999 | + parent=None, |
2000 | + datadir=datadir) |
2001 | else: |
2002 | from DistUpgrade.DistUpgradeFetcherCore import DistUpgradeFetcherCore |
2003 | import apt |
Generally looks alright to me.