From 9756f5649fc17b4be9b8f3f9a537ee027faabca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Fri, 20 Feb 2009 00:58:36 +0100 Subject: Add database type to global config -- no user-config for the moment --- portato/db/__init__.py | 23 ++++++++++---------- portato/gui/templates/PreferenceWindow.ui | 35 +++++++++++++++++++++++++++++++ portato/gui/windows/main.py | 2 +- portato/gui/windows/preference.py | 18 +++++++++++++++- 4 files changed, 65 insertions(+), 13 deletions(-) (limited to 'portato') diff --git a/portato/db/__init__.py b/portato/db/__init__.py index d36f900..5537c5e 100644 --- a/portato/db/__init__.py +++ b/portato/db/__init__.py @@ -13,29 +13,26 @@ from __future__ import absolute_import from ..session import Session, SectionDict -from ..helper import debug, warning +from ..helper import debug, warning, error + +class UnknownDatabaseTypeError (Exception): + pass _SESSION = None -_TYPE = None types = { "sql": (_("SQLite"), _("Uses an SQLite-database to store package information.\nMay take longer to generate at the first time, but has advantages if portato is re-started with an unchanged portage tree. Additionally it allows to use fast SQL expressions for fetching the data.")), "dict": (_("Hashmap"), _("Uses an in-memory hashmap to store package information.\nHas been used since at least version 0.3.3, but all information has to be regenerated on each startup.")) } -def _set_type(t): - global _TYPE - _TYPE = t - -def Database(): - global _SESSION, _TYPE +def Database(type): + global _SESSION if _SESSION is None: _SESSION = Session("db.cfg", name = "DB") - _SESSION.add_handler((["type"], _set_type, lambda: _TYPE), default = ["sql"]) _SESSION.load() - if _TYPE == "sql": + if type == "sql": debug("Using SQLDatabase") try: from .sql import SQLDatabase @@ -46,7 +43,11 @@ def Database(): else: return SQLDatabase(SectionDict(_SESSION, "SQL")) - elif _TYPE == "dict": + elif type == "dict": debug("Using DictDatabase") from .dict import DictDatabase return DictDatabase(SectionDict(_SESSION, "dict")) + + else: + error(_("Unknown database type: %s"), type) + raise UnknownDatabaseTypeError, "type" diff --git a/portato/gui/templates/PreferenceWindow.ui b/portato/gui/templates/PreferenceWindow.ui index 3b0edb8..0642e02 100644 --- a/portato/gui/templates/PreferenceWindow.ui +++ b/portato/gui/templates/PreferenceWindow.ui @@ -142,6 +142,7 @@ Used database type + False 0 @@ -149,6 +150,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 1 @@ -159,6 +161,39 @@ 0 + + + True + 0 + in + + + True + 5 + 5 + 12 + + + True + label + True + True + + + + + + + True + <b>Description</b> + True + + + + + 1 + + diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index ee51703..04a9995 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -471,7 +471,7 @@ class MainWindow (Window): # package db splash(_("Creating Database")) - self.db = Database() + self.db = Database(self.cfg.get("type", section = "DATABASE")) # set plugins and plugin-menu splash(_("Loading Plugins")) diff --git a/portato/gui/windows/preference.py b/portato/gui/windows/preference.py index 4d3493f..5b88b22 100644 --- a/portato/gui/windows/preference.py +++ b/portato/gui/windows/preference.py @@ -164,19 +164,28 @@ class PreferenceWindow (AbstractDialog): self.pkgTabCombo.set_active(int(self.cfg.get("packageTabPos", section = "GUI"))-1) # the database combo + dbtype = self.cfg.get("type", section = "DATABASE") self.databaseCombo = self.tree.get_widget("databaseCombo") model = gtk.ListStore(str, str, str) + ctr = 0 + active = 0 for k, (name, desc) in db.types.iteritems(): + if k == dbtype: + active = ctr + model.append([name, desc, k]) + ctr += 1 self.databaseCombo.set_model(model) - self.databaseCombo.set_active(0) # XXX: just set one thing active - no meaning yet + self.databaseCombo.set_active(active) cell = gtk.CellRendererText() self.databaseCombo.pack_start(cell) self.databaseCombo.set_attributes(cell, text = 0) + self.cb_db_combo_changed() + self.window.show_all() def _save(self): @@ -246,6 +255,13 @@ class PreferenceWindow (AbstractDialog): self.setList.set_model(store) + def cb_db_combo_changed (self, *args): + model = self.databaseCombo.get_model() + active = self.databaseCombo.get_active() + + descr = self.tree.get_widget("dbDescriptionLabel") + descr.set_markup("%s" % model[active][1]) + def cb_ok_clicked(self, button): """Saves, writes to config-file and closes the window.""" self._save() -- cgit v1.2.3