Adding settings to app menu
[multilist] / src / multilist_gtk.py
index 38eb710..4933a11 100755 (executable)
@@ -41,7 +41,9 @@ import hildonize
 import gtk_toolbox
 
 import libspeichern
+import search
 import sqldialog
+import settings
 import libselection
 import libview
 import libliststorehandler
@@ -83,6 +85,7 @@ class Multilist(hildonize.get_app_class()):
                self.vbox = gtk.VBox(homogeneous = False, spacing = 0)
 
                self.selection = libselection.Selection(self.db, isHildon)
+               self._search = search.Search()
                self.liststorehandler = libliststorehandler.Liststorehandler(self.db, self.selection)
                self.view = libview.View(self.db, self.liststorehandler, self.window)
                self.bottombar = libbottombar.Bottombar(self.db, self.view, isHildon)
@@ -115,26 +118,40 @@ class Multilist(hildonize.get_app_class()):
                        fileMenuItem.show()
                        fileMenuItem.set_submenu(fileMenu)
 
+                       categorymenu = gtk.Menu()
+
+                       menu_items = gtk.MenuItem(_("Search"))
+                       menu_items.connect("activate", self._on_toggle_search)
+                       categorymenu.append(menu_items)
+
+                       menu_items = gtk.MenuItem(_("Checkout All"))
+                       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()
+                       category_menu.set_submenu(categorymenu)
+
                        viewMenu = gtk.Menu()
 
                        menu_items = gtk.MenuItem(_("Show Active"))
                        menu_items.connect("activate", self._on_toggle_filter, None)
                        viewMenu.append(menu_items)
 
+                       menu_items = gtk.MenuItem(_("Settings"))
+                       menu_items.connect("activate", self._on_settings, 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)
@@ -156,6 +173,7 @@ class Multilist(hildonize.get_app_class()):
                        menu_bar.show()
                        menu_bar.append (fileMenuItem)
                        menu_bar.append (toolsMenuItem)
+                       menu_bar.append (category_menu)
                        menu_bar.append (viewMenuItem)
                        # unten -> damit als letztes menu_bar.append (helpMenuItem)
                        #Als letztes menĂ¼
@@ -168,6 +186,7 @@ class Multilist(hildonize.get_app_class()):
                        self.vbox.pack_start(menuBar, False, False, 0)
 
                #add to vbox below (to get it on top)
+               self.vbox.pack_end(self._search, expand = False, fill = True)
                self.vbox.pack_end(self.bottombar, expand = False, fill = True, padding = 0)
                self.vbox.pack_end(self.view, expand = True, fill = True, padding = 0)
                self.vbox.pack_end(self.selection, expand = False, fill = True, padding = 0)
@@ -182,7 +201,36 @@ class Multilist(hildonize.get_app_class()):
                        menu_bar,
                )
                if hildonize.IS_FREMANTLE_SUPPORTED:
-                       pass
+                       button = hildonize.hildon.GtkRadioButton(gtk.HILDON_SIZE_AUTO, None)
+                       button.set_label("All")
+                       menuBar.add_filter(button)
+                       button.connect("clicked", self._on_click_menu_filter, self.liststorehandler.SHOW_ALL)
+                       button.set_mode(False)
+                       filterGroup = button
+
+                       button = hildonize.hildon.GtkRadioButton(gtk.HILDON_SIZE_AUTO, filterGroup)
+                       button.set_label("Active")
+                       menuBar.add_filter(button)
+                       button.connect("clicked", self._on_click_menu_filter, self.liststorehandler.SHOW_ACTIVE)
+                       button.set_mode(False)
+
+                       renameCategoryButton = gtk.Button(_("Rename Category"))
+                       renameCategoryButton.connect("clicked", self.bottombar.rename_category)
+                       menuBar.append(renameCategoryButton)
+
+                       renameListButton= gtk.Button(_("Rename List"))
+                       renameListButton.connect("clicked", self.bottombar.rename_list)
+                       menuBar.append(renameListButton)
+
+                       searchButton= gtk.Button(_("Search Category"))
+                       searchButton.connect("clicked", self._on_toggle_search)
+                       menuBar.append(searchButton)
+
+                       searchButton= gtk.Button(_("Settings"))
+                       searchButton.connect("clicked", self._on_settings)
+                       menuBar.append(searchButton)
+
+                       menuBar.show_all()
 
                if not hildonize.IS_HILDON_SUPPORTED:
                        _moduleLogger.info("No hildonization support")
@@ -201,12 +249,36 @@ class Multilist(hildonize.get_app_class()):
                self.window.connect("destroy", self.destroy)
                self.window.connect("key-press-event", self.on_key_press)
                self.window.connect("window-state-event", self.on_window_state_change)
+               self._search.connect("search_changed", self._on_search)
 
                self.window.show_all()
+               self._search.hide()
                self.prepare_sync_dialog()
                self.ladeAlles()
 
        @gtk_toolbox.log_exception(_moduleLogger)
+       def _on_checkout_all(self, widget):
+               self.liststorehandler.checkout_rows()
+
+       @gtk_toolbox.log_exception(_moduleLogger)
+       def _on_search(self, widget):
+               self.liststorehandler.get_liststore(self._search.get_search_pattern())
+
+       @gtk_toolbox.log_exception(_moduleLogger)
+       def _on_click_menu_filter(self, button, val):
+               self.liststorehandler.set_filter(val)
+
+       def _toggle_search(self):
+               if self._search.get_property("visible"):
+                       self._search.hide()
+               else:
+                       self._search.show()
+
+       @gtk_toolbox.log_exception(_moduleLogger)
+       def _on_toggle_search(self, *args):
+               self._toggle_search()
+
+       @gtk_toolbox.log_exception(_moduleLogger)
        def _on_toggle_filter(self, *args):
                if self.liststorehandler.get_filter() == self.liststorehandler.SHOW_ALL:
                        self.liststorehandler.set_filter(self.liststorehandler.SHOW_ACTIVE)
@@ -229,9 +301,9 @@ class Multilist(hildonize.get_app_class()):
                        else:
                                self.window.fullscreen ()
                        return True
-               #elif event.keyval == gtk.keysyms.f and isCtrl:
-               #       self._toggle_search()
-               #       return True
+               elif event.keyval == gtk.keysyms.f and isCtrl:
+                       self._toggle_search()
+                       return True
                elif (
                        event.keyval in (gtk.keysyms.w, gtk.keysyms.q) and
                        event.get_state() & gtk.gdk.CONTROL_MASK
@@ -284,31 +356,26 @@ class Multilist(hildonize.get_app_class()):
                self.sync_dialog.hide()
 
        @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)
+       def _on_settings(self, *args):
+               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()
-                       self.view.reload_view()
-                       #children = self.vbox.get_children()
-                       #while len(children)>1:
-                       #       self.vbox.remove(children[1])
-
-                       #self.vbox.pack_end(self.bottombar, expand = True, fill = True, padding = 0)
-                       #self.vbox.pack_end(view, expand = True, fill = True, padding = 0)
-                       #self.vbox.pack_end(self.selection, expand = False, fill = True, padding = 0)
-
-               col_dialog.destroy()
+               try:
+                       col_dialog.hide()
+                       if resp == gtk.RESPONSE_ACCEPT:
+                               logging.info("changing columns")
+                               cols.save(self.db)
+                               self.view.reload_view()
+               finally:
+                       col_dialog.destroy()
 
        @gtk_toolbox.log_exception(_moduleLogger)
        def destroy(self, widget = None, data = None):