Switching to quicknote style search
[multilist] / src / libbottombar.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 """
5 This file is part of Multilist.
6
7 Multilist is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 Multilist is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Multilist.  If not, see <http://www.gnu.org/licenses/>.
19
20 Copyright (C) 2008 Christoph Würstle
21 """
22
23
24 import gobject
25 import logging
26
27 import gtk
28
29 import gtk_toolbox
30
31 try:
32         _
33 except NameError:
34         _ = lambda x: x
35
36
37 _moduleLogger = logging.getLogger(__name__)
38
39
40 class Bottombar(gtk.HBox):
41
42         __gsignals__ = {
43                 'changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, gobject.TYPE_STRING)),
44                 #'changedCategory': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, gobject.TYPE_STRING))
45         }
46
47         def __init__(self, db, view, isHildon):
48                 gtk.HBox.__init__(self, homogeneous = False, spacing = 3)
49
50                 self.db = db
51                 self.isHildon = isHildon
52                 self.view = view
53
54                 _moduleLogger.info("libBottomBar, init")
55
56                 button = gtk.Button(_("New item"))
57                 button.connect("clicked", self.new_item)
58                 self.pack_start(button, expand = False, fill = True, padding = 0)
59
60                 label = gtk.Label("  ")
61                 self.pack_start(label, expand = True, fill = True, padding = 0)
62
63                 button = gtk.Button(_("Checkout all items"))
64                 button.connect("clicked", self.checkout_items)
65                 self.pack_start(button, expand = False, fill = True, padding = 0)
66
67                 button = gtk.Button(_("Del item"))
68                 button.connect("clicked", self.del_item)
69                 self.pack_start(button, expand = False, fill = True, padding = 0)
70
71         @gtk_toolbox.log_exception(_moduleLogger)
72         def new_item(self, widget = None, data1 = None, data2 = None):
73                 dialog = gtk.Dialog(_("New item name:"), None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
74                 dialog.set_position(gtk.WIN_POS_CENTER)
75                 entryKlasse = gtk.Entry()
76                 entryKlasse.set_text("")
77
78                 dialog.vbox.pack_start(entryKlasse, True, True, 0)
79
80                 dialog.vbox.show_all()
81                 #dialog.set_size_request(400, 300)
82
83                 if dialog.run() == gtk.RESPONSE_ACCEPT:
84                         #_moduleLogger.info("new category name "+entryKlasse.get_text())
85                         #self.view.liststorehandler.rename_category(entryKlasse.get_text())
86                         self.view.liststorehandler.add_row(entryKlasse.get_text())
87                 dialog.destroy()
88
89         @gtk_toolbox.log_exception(_moduleLogger)
90         def del_item(self, widget = None, data1 = None, data2 = None):
91                 path, col = self.view.treeview.get_cursor()
92                 if path is not None:
93                         mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, _("Delete current item?"))
94                         response = mbox.run()
95                         mbox.hide()
96                         mbox.destroy()
97                         if response == gtk.RESPONSE_YES:
98                                 self.view.del_active_row()
99                 else:
100                         mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, _("No item selected!"))
101                         response = mbox.run()
102                         mbox.hide()
103                         mbox.destroy()
104
105         @gtk_toolbox.log_exception(_moduleLogger)
106         def checkout_items(self, widget = None, data1 = None, data2 = None):
107                 #self.view.del_active_row()
108                 mbox = gtk.MessageDialog(None, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, (_("Really checkout all items?")))
109                 response = mbox.run()
110                 mbox.hide()
111                 mbox.destroy()
112                 if response == gtk.RESPONSE_YES:
113                         self.view.liststorehandler.checkout_rows()
114                         #n = len(self.view.liststorehandler.get_liststore())
115                         #for i in range(n):
116                         #       self.view.liststorehandler.checkout_rows()
117                         #       #print i
118
119         @gtk_toolbox.log_exception(_moduleLogger)
120         def rename_category(self, widget = None, data1 = None, data2 = None):
121                 dialog = gtk.Dialog(_("New category name:"), None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
122
123                 dialog.set_position(gtk.WIN_POS_CENTER)
124                 entryKlasse = gtk.Entry()
125                 entryKlasse.set_text(self.view.liststorehandler.selection.get_category())
126
127                 dialog.vbox.pack_start(entryKlasse, True, True, 0)
128
129                 dialog.vbox.show_all()
130                 #dialog.set_size_request(400, 300)
131
132                 if dialog.run() == gtk.RESPONSE_ACCEPT:
133                         _moduleLogger.info("new category name "+entryKlasse.get_text())
134                         self.view.liststorehandler.rename_category(entryKlasse.get_text())
135                 else:
136                         #print "Cancel", res
137                         pass
138                 dialog.destroy()
139
140         @gtk_toolbox.log_exception(_moduleLogger)
141         def rename_list(self, widget = None, data1 = None, data2 = None):
142                 dialog = gtk.Dialog(_("New list name:"), None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
143
144                 dialog.set_position(gtk.WIN_POS_CENTER)
145                 entryKlasse = gtk.Entry()
146                 entryKlasse.set_text(self.view.liststorehandler.selection.get_list())
147
148                 dialog.vbox.pack_start(entryKlasse, True, True, 0)
149
150                 dialog.vbox.show_all()
151                 #dialog.set_size_request(400, 300)
152
153                 if dialog.run() == gtk.RESPONSE_ACCEPT:
154                         _moduleLogger.info("new list name "+entryKlasse.get_text())
155                         self.view.liststorehandler.rename_list(entryKlasse.get_text())
156                 else:
157                         #print "Cancel", res
158                         pass
159                 dialog.destroy()