diff options
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/frontend_gtk.py | 29 | ||||
-rw-r--r-- | frontend/gtk-list.xml | 55 |
2 files changed, 71 insertions, 13 deletions
diff --git a/frontend/frontend_gtk.py b/frontend/frontend_gtk.py index 0eab401..665f830 100644 --- a/frontend/frontend_gtk.py +++ b/frontend/frontend_gtk.py @@ -25,6 +25,7 @@ import gobject #we need gobject.idle_add import copy import logging from pyfirstaidkit import reporting +from pyfirstaidkit.returns import * import pprint import os.path import thread @@ -317,12 +318,14 @@ class CallbacksFlagList(object): return True class ListDialog(object): - def __init__(self, title, description, items, dir="", mode = 0): + def __init__(self, title, description, items, dir="", options = {}): gtkb = gtk.Builder() gtkb.add_from_file(os.path.join(dir, "gtk-list.xml")) self._dialog = gtkb.get_object("listdialog") self._dialog.set_title(title) + mode = options.get("mode", 0) + # text if mode == 0: self._store = gtk.ListStore(gobject.TYPE_STRING, @@ -339,7 +342,7 @@ class ListDialog(object): # checkboxes - elif mode == 1: + elif mode == 1 or mode == 3: self._store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, @@ -349,6 +352,7 @@ class ListDialog(object): gobject.TYPE_NONE) rend_text_check = gtk.CellRendererToggle() + rend_text_check.set_radio(mode == 3) rend_text_check.connect('toggled', self.toggled_cb, self._store) rend_text_check.set_property('activatable', True) @@ -397,7 +401,7 @@ class ListDialog(object): # value column if mode == 0: col_1 = gtk.TreeViewColumn('Value', rend_text_edit, text = 2) - elif mode == 1: + elif mode == 1 or mode == 3: col_1 = gtk.TreeViewColumn('Value', rend_text_check) col_1.add_attribute(rend_text_check, "active", 2) elif mode == 2: @@ -430,7 +434,14 @@ class ListDialog(object): err.destroy() def toggled_cb(self, cell, path, store): - store[path][2] = not store[path][2] + new = not store[path][2] + if cell.get_radio(): + i = store.get_iter_first() + while i: + store[i][2] = False + i = store.iter_next(i) + + store[path][2] = new def changed_cb(self, combo, path, new, store): store[path][2] = store[path][6][new] @@ -788,7 +799,7 @@ class MainWindow(object): vbox = glade.get_widget("choice_question_vbox") radio_map = {} group = None - for (value, name) in question.options: + for (value, name) in question.choices: r = gtk.RadioButton(group, name, False) radio_map[r] = value r.show() @@ -864,7 +875,7 @@ class MainWindow(object): description = question.description, items = question.items, dir = os.path.dirname(self._glade.relative_file(".")), - mode = question.mode + options = question.options ) res = dlg.run() @@ -873,6 +884,12 @@ class MainWindow(object): question.send_answer(message, dlg.items(), origin = self) elif res==gtk.RESPONSE_CANCEL: question.send_answer(message, [], origin = self) + elif res==gtk.RESPONSE_DELETE_EVENT: + question.send_answer(message, [], origin = self) + elif res==2: + question.send_answer(message, ReturnBack, origin = self) + elif res==1: + question.send_answer(message, ReturnAbort, origin = self) else: raise Exception("Unknown value %s" % (res,)) diff --git a/frontend/gtk-list.xml b/frontend/gtk-list.xml index 0a71aee..22b5674 100644 --- a/frontend/gtk-list.xml +++ b/frontend/gtk-list.xml @@ -65,13 +65,12 @@ <property name="visible">True</property> <property name="layout_style">end</property> <child> - <object class="GtkButton" id="ok_button"> - <property name="label" translatable="yes">Save and continue</property> + <object class="GtkButton" id="button1"> + <property name="label">gtk-go-back</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> - <signal name="clicked" handler="cb_ok"/> - <signal name="activate" handler="cb_ok"/> + <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> @@ -80,8 +79,33 @@ </packing> </child> <child> + <object class="GtkButton" id="button2"> + <property name="label">gtk-stop</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkVSeparator" id="vseparator1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> <object class="GtkButton" id="cancel_button"> - <property name="label" translatable="yes">Use defaults and continue</property> + <property name="label" translatable="yes">Use defaults</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> @@ -91,7 +115,22 @@ <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">1</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="ok_button"> + <property name="label" translatable="yes">OK</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="cb_ok"/> + <signal name="activate" handler="cb_ok"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> </packing> </child> </object> @@ -104,8 +143,10 @@ </object> </child> <action-widgets> - <action-widget response="0">ok_button</action-widget> + <action-widget response="2">button1</action-widget> + <action-widget response="1">button2</action-widget> <action-widget response="0">cancel_button</action-widget> + <action-widget response="0">ok_button</action-widget> </action-widgets> </object> </interface> |