diff --git a/doc/changelog.txt b/doc/changelog.txt index 902e209d..e5ad4b65 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -34,7 +34,7 @@ Features: be edited. Closes: SF bug #3102201 - gui: Added dialog to show detailed URL properties on double click. - +- gui: Store GUI options in registry settings. 5.4 "How to train your dragon" (released 26.10.2010) diff --git a/linkcheck/gui/__init__.py b/linkcheck/gui/__init__.py index 6d4ca3d8..2f5141d4 100644 --- a/linkcheck/gui/__init__.py +++ b/linkcheck/gui/__init__.py @@ -72,11 +72,12 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow): self.init_app() def init_app (self): - size, pos = self.settings.read_geometry() - if size is not None: - self.resize(size) - if pos is not None: - self.move(pos) + data = self.settings.read_geometry() + if data["size"] is not None: + self.resize(data["size"]) + if data["pos"] is not None: + self.move(data["pos"]) + self.options.set_options(self.settings.read_options()) self.status = Status.idle self.set_statusbar(_("Ready.")) @@ -156,7 +157,8 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow): def closeEvent (self, e=None): """Save settings and remove registered logging handler""" - self.settings.save_geometry(self.size(), self.pos()) + self.settings.save_geometry(dict(size=self.size(), pos=self.pos())) + self.settings.save_options(self.options.get_options()) self.settings.sync() self.config.remove_loghandler(self.handler) if e is not None: @@ -232,9 +234,10 @@ Version 2 or later.

def set_config (self): """Set configuration.""" - self.config["recursionlevel"] = self.options.recursionlevel.value() - self.config["verbose"] = self.options.verbose.isChecked() - if self.options.debug.isChecked(): + data = self.options.get_options() + self.config["recursionlevel"] = data["recursionlevel"] + self.config["verbose"] = data["verbose"] + if data["debug"]: self.config.set_debug(["all"]) # make sure at least one thread is used self.config["threads"] = 1 diff --git a/linkcheck/gui/options.py b/linkcheck/gui/options.py index f0779518..3694cfc0 100644 --- a/linkcheck/gui/options.py +++ b/linkcheck/gui/options.py @@ -68,6 +68,22 @@ class LinkCheckerOptions (QtGui.QDialog, Ui_Options): return start_editor(self.user_config, self.user_config_writable, self.editor) + def get_options (self): + """Return option data as dictionary.""" + return dict( + debug=self.debug.isChecked(), + verbose=self.verbose.isChecked(), + recursionlevel=self.recursionlevel.value(), + ) + + def set_options (self, data): + if data["debug"] is not None: + self.debug.setChecked(data["debug"]) + if data["verbose"] is not None: + self.verbose.setChecked(data["verbose"]) + if data["recursionlevel"] is not None: + self.recursionlevel.setValue(data["recursionlevel"]) + def start_editor (filename, writable, editor): if not os.path.isfile(filename): diff --git a/linkcheck/gui/settings.py b/linkcheck/gui/settings.py index b67521c6..941f0a9a 100644 --- a/linkcheck/gui/settings.py +++ b/linkcheck/gui/settings.py @@ -39,20 +39,55 @@ class Settings (object): self.settings = QtCore.QSettings(base, appname) def read_geometry (self): + data = dict(size=None, pos=None) self.settings.beginGroup('mainwindow') - size = pos = None if self.settings.contains('size'): - size = save_size(self.settings.value('size').toSize()) + data["size"] = save_size(self.settings.value('size').toSize()) if self.settings.contains('pos'): - pos = save_point(self.settings.value('pos').toPoint()) + data["pos"] = save_point(self.settings.value('pos').toPoint()) self.settings.endGroup() - return size, pos + return data - - def save_geometry (self, size, pos): + def save_geometry (self, data): + size = save_size(data["size"]) + pos = save_point(data["pos"]) self.settings.beginGroup('mainwindow') - self.settings.setValue("size", QtCore.QVariant(save_size(size))) - self.settings.setValue("pos", QtCore.QVariant(save_point(pos))) + self.settings.setValue("size", QtCore.QVariant(size)) + self.settings.setValue("pos", QtCore.QVariant(pos)) + self.settings.endGroup() + + def read_options (self): + data = dict(debug=None, verbose=None, recursionlevel=None) + self.settings.beginGroup('output') + debug = verbose = None + for key in ("debug", "verbose"): + if self.settings.contains(key): + data[key] = self.settings.value(key).toBool() + self.settings.endGroup() + self.settings.beginGroup('checking') + recursionlevel = None + if self.settings.contains('recursionlevel'): + value, ok = self.settings.value('recursionlevel').toInt() + if ok: + if value < -1: + value = -1 + elif value > 100: + # 100 is the maximum GUI option value + value = 100 + else: + value = -1 + data['recursionlevel'] = value + self.settings.endGroup() + return data + + def save_options (self, data): + self.settings.beginGroup('output') + for key in ("debug", "verbose"): + self.settings.setValue(key, QtCore.QVariant(data[key])) + self.settings.endGroup() + self.settings.beginGroup('checking') + key = "recursionlevel" + self.settings.setValue(key, QtCore.QVariant(data[key])) self.settings.endGroup() def sync (self):