summaryrefslogtreecommitdiff
path: root/portato
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2009-02-20 00:58:36 +0100
committerRené 'Necoro' Neumann <necoro@necoro.net>2009-02-20 00:58:36 +0100
commit9756f5649fc17b4be9b8f3f9a537ee027faabca2 (patch)
treea417fbbc2861be171d7843311a2fa3b435e7db95 /portato
parentd3f2196d3c638222a8e96c3d61626a9ff8efb2e1 (diff)
downloadportato-9756f5649fc17b4be9b8f3f9a537ee027faabca2.tar.gz
portato-9756f5649fc17b4be9b8f3f9a537ee027faabca2.tar.bz2
portato-9756f5649fc17b4be9b8f3f9a537ee027faabca2.zip
Add database type to global config -- no user-config for the moment
Diffstat (limited to 'portato')
-rw-r--r--portato/db/__init__.py23
-rw-r--r--portato/gui/templates/PreferenceWindow.ui35
-rw-r--r--portato/gui/windows/main.py2
-rw-r--r--portato/gui/windows/preference.py18
4 files changed, 65 insertions, 13 deletions
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 @@
<property name="label" translatable="yes">Used database type</property>
</object>
<packing>
+ <property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
@@ -149,6 +150,7 @@
<object class="GtkComboBox" id="databaseCombo">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <signal name="changed" handler="cb_db_combo_changed"/>
</object>
<packing>
<property name="position">1</property>
@@ -159,6 +161,39 @@
<property name="position">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkAlignment" id="alignment13">
+ <property name="visible">True</property>
+ <property name="top_padding">5</property>
+ <property name="bottom_padding">5</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkLabel" id="dbDescriptionLabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label25">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Description&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
</child>
</object>
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("<i>%s</i>" % model[active][1])
+
def cb_ok_clicked(self, button):
"""Saves, writes to config-file and closes the window."""
self._save()