Cleaning up the column choice dialog as well as some other code
authorEd Page <eopage@byu.net>
Mon, 22 Mar 2010 23:58:22 +0000 (18:58 -0500)
committerEd Page <eopage@byu.net>
Mon, 22 Mar 2010 23:58:22 +0000 (18:58 -0500)
src/libview.py
src/multilist_gtk.py
src/settings.py [new file with mode: 0644]

index df6be0e..9a08869 100644 (file)
@@ -38,58 +38,6 @@ except NameError:
 _moduleLogger = logging.getLogger(__name__)
 
 
-class Columns_dialog(gtk.VBox):
-
-       def __init__(self, db, liststorehandler):
-               gtk.VBox.__init__(self, homogeneous = False, spacing = 0)
-
-               self.db = db
-               self.liststorehandler = liststorehandler
-
-               #serverbutton = gtk.ToggleButton("SyncServer starten")
-               #serverbutton.connect("clicked", self.startServer, (None, ))
-               #self.pack_start(serverbutton, expand = False, fill = True, padding = 1)
-               #print "x1"
-
-               frame = gtk.Frame(_("Columns"))
-               self.framebox = gtk.VBox(homogeneous = False, spacing = 0)
-
-               self.scrolled_window = gtk.ScrolledWindow()
-               self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
-
-               self.scrolled_window.add_with_viewport(self.framebox)
-
-               i = 1 #uid can not be shown
-               while self.liststorehandler.get_colname(i) is not None:
-                       name = str(self.liststorehandler.get_colname(i))
-                       checkbutton = gtk.CheckButton(name)
-                       if self.db.ladeDirekt("showcol_"+name) == "1":
-                               checkbutton.set_active(True)
-
-                       self.framebox.pack_start(checkbutton)
-                       i = i+1
-
-               frame.add(self.scrolled_window)
-               self.pack_start(frame, expand = True, fill = True, padding = 1)
-
-       def is_col_selected(self, icol):
-               children = self.framebox.get_children()
-               if icol < len(children):
-                       return children[icol].get_active()
-               else:
-                       return None
-
-       def save_column_setting(self):
-               i = 1 #uid can not be shown
-               while self.liststorehandler.get_colname(i) is not None:
-                       name = str(self.liststorehandler.get_colname(i))
-                       if self.is_col_selected(i-1) == True:
-                               self.db.speichereDirekt("showcol_"+name, "1")
-                       else:
-                               self.db.speichereDirekt("showcol_"+name, "0")
-                       i += 1
-
-
 class CellRendererTriple(gtk.GenericCellRenderer):
        __gproperties__ = {
                "status": (gobject.TYPE_STRING, "Status",
@@ -439,23 +387,23 @@ class View(gtk.VBox):
                m = self.liststorehandler.get_unitsstore()
 
                for i in range(self.liststorehandler.get_colcount()):
-                       if 5 < i:
-                               default = "0"
-                       else:
+                       if i in [1, 2]:
                                default = "1"
+                       else:
+                               default = "0"
                        if self.db.ladeDirekt("showcol_"+str(self.liststorehandler.get_colname(i)), default) == "1":
-                               if (i == 1):
+                               if i in [1]:
                                        self.cell[i] = CellRendererTriple()
-                                       self.tvcolumn[i] =      gtk.TreeViewColumn("", self.cell[i])
+                                       self.tvcolumn[i] = gtk.TreeViewColumn("", self.cell[i])
                                        self.cell[i].connect( 'status_changed', self.col_toggled)
                                        self.tvcolumn[i].set_attributes( self.cell[i], status = i)
-                               elif (i == 3)or(i == 4)or(i == 6):
+                               elif i in [3, 6]:
                                        self.cell[i] = gtk.CellRendererCombo()
-                                       self.tvcolumn[i] =      gtk.TreeViewColumn(self.liststorehandler.get_colname(i), self.cell[i])
+                                       self.tvcolumn[i] = gtk.TreeViewColumn(self.liststorehandler.get_colname(i), self.cell[i])
                                        self.cell[i].set_property("model", m)
                                        self.cell[i].set_property('text-column', i)
                                        self.cell[i].set_property('editable', True)
-                                       self.cell[i].connect("edited", self.col_edited, i) 
+                                       self.cell[i].connect("edited", self.col_edited, i)
                                        self.tvcolumn[i].set_attributes( self.cell[i], text = i)
                                else:
                                        self.cell[i] = gtk.CellRendererText()
@@ -469,11 +417,9 @@ class View(gtk.VBox):
                                self.cell[i].set_property('cell-background', 'lightgray')
                                self.tvcolumn[i].set_sort_column_id(i)
                                self.tvcolumn[i].set_resizable(True)
+                               self.treeview.append_column(self.tvcolumn[i])
 
-                               if (i>0):
-                                       self.treeview.append_column(self.tvcolumn[i])
-
-               # Allow NOT drag and drop reordering of rows
+               # Disable drag and drop reordering of rows
                self.treeview.set_reorderable(False)
 
                if self.scrolled_window is not None:
index 17d4e24..d51cec8 100755 (executable)
@@ -43,6 +43,7 @@ import gtk_toolbox
 import libspeichern
 import search
 import sqldialog
+import settings
 import libselection
 import libview
 import libliststorehandler
@@ -120,12 +121,16 @@ class Multilist(hildonize.get_app_class()):
                        categorymenu = gtk.Menu()
 
                        menu_items = gtk.MenuItem(_("Search"))
-                       categorymenu.append(menu_items)
                        menu_items.connect("activate", self._on_toggle_search)
+                       categorymenu.append(menu_items)
 
                        menu_items = gtk.MenuItem(_("Checkout All"))
-                       categorymenu.append(menu_items)
                        menu_items.connect("activate", self._on_checkout_all)
+                       categorymenu.append(menu_items)
+
+                       menu_items = gtk.MenuItem(_("Rename Category"))
+                       menu_items.connect("activate", self.bottombar.rename_category, None)
+                       categorymenu.append(menu_items)
 
                        category_menu = gtk.MenuItem(_("Category"))
                        category_menu.show()
@@ -137,20 +142,16 @@ class Multilist(hildonize.get_app_class()):
                        menu_items.connect("activate", self._on_toggle_filter, None)
                        viewMenu.append(menu_items)
 
+                       menu_items = gtk.MenuItem(_("Choose columns"))
+                       menu_items.connect("activate", self.show_columns_dialog, None)
+                       viewMenu.append(menu_items)
+
                        viewMenuItem = gtk.MenuItem(_("View"))
                        viewMenuItem.show()
                        viewMenuItem.set_submenu(viewMenu)
 
                        toolsMenu = gtk.Menu()
 
-                       menu_items = gtk.MenuItem(_("Choose columns"))
-                       menu_items.connect("activate", self.show_columns_dialog, None)
-                       toolsMenu.append(menu_items)
-
-                       menu_items = gtk.MenuItem(_("Rename Category"))
-                       menu_items.connect("activate", self.bottombar.rename_category, None)
-                       toolsMenu.append(menu_items)
-
                        menu_items = gtk.MenuItem(_("Rename List"))
                        menu_items.connect("activate", self.bottombar.rename_list, None)
                        toolsMenu.append(menu_items)
@@ -352,20 +353,21 @@ class Multilist(hildonize.get_app_class()):
 
        @gtk_toolbox.log_exception(_moduleLogger)
        def show_columns_dialog(self, widget = None, data = None):
-               col_dialog = gtk.Dialog(_("Choose columns"), self.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
-
-               col_dialog.set_position(gtk.WIN_POS_CENTER)
-               cols = libview.Columns_dialog(self.db, self.liststorehandler)
+               col_dialog = gtk.Dialog(
+                       _("Settings"),
+                       self.window,
+                       gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+                       (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
+               )
 
-               col_dialog.vbox.pack_start(cols, True, True, 0)
-               col_dialog.set_size_request(500, 350)
-               col_dialog.vbox.show_all()
+               cols = settings.SettingsDialog(col_dialog.vbox, self.db, self.liststorehandler)
+               col_dialog.show_all()
 
                resp = col_dialog.run()
                col_dialog.hide()
                if resp == gtk.RESPONSE_ACCEPT:
                        logging.info("changing columns")
-                       cols.save_column_setting()
+                       cols.save(self.db)
                        self.view.reload_view()
                        #children = self.vbox.get_children()
                        #while len(children)>1:
diff --git a/src/settings.py b/src/settings.py
new file mode 100644 (file)
index 0000000..8fbcbea
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+This file is part of Multilist.
+
+Multilist is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Multilist is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Multilist.  If not, see <http://www.gnu.org/licenses/>.
+
+Copyright (C) 2008 Christoph Würstle
+"""
+
+import logging
+
+import gtk
+
+import hildonize
+
+
+try:
+       _
+except NameError:
+       _ = lambda x: x
+
+
+_moduleLogger = logging.getLogger(__name__)
+
+
+class SettingsDialog(object):
+
+       def __init__(self, parent, db, liststorehandler):
+               self.__listStore = liststorehandler
+
+               self.__columnsSection = gtk.VBox()
+               for i, name in enumerate(self._iter_columns()):
+                       checkbutton = gtk.CheckButton(name)
+
+                       if i in [0, 1]:
+                               default = "1"
+                       else:
+                               default = "0"
+                       if db.ladeDirekt("showcol_"+name, default) == "1":
+                               checkbutton.set_active(True)
+
+                       self.__columnsSection.pack_start(checkbutton)
+
+               columnsFrame = gtk.Frame(_("Choose Columns"))
+               columnsFrame.add(self.__columnsSection)
+
+               settingsBox = gtk.VBox()
+               settingsBox.pack_start(columnsFrame)
+               settingsView = gtk.Viewport()
+               settingsView.add(settingsBox)
+               settingsScrollView = gtk.ScrolledWindow()
+               settingsScrollView.add(settingsView)
+               settingsScrollView.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+               parent.pack_start(settingsScrollView)
+
+               settingsScrollView = hildonize.hildonize_scrollwindow(settingsScrollView)
+
+       def is_col_selected(self, icol):
+               children = self.__columnsSection.get_children()
+               if icol < len(children):
+                       return children[icol].get_active()
+               else:
+                       return None
+
+       def save(self, db):
+               for i, name in enumerate(self._iter_columns()):
+                       if self.is_col_selected(i) == True:
+                               db.speichereDirekt("showcol_"+name, "1")
+                       else:
+                               db.speichereDirekt("showcol_"+name, "0")
+
+       def _iter_columns(self):
+               for i in xrange(self.__listStore.get_colcount()):
+                       name = self.__listStore.get_colname(i)
+                       assert name is not None
+                       if name == "uid":
+                               continue
+
+                       yield name