summaryrefslogtreecommitdiffstats
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/frontend_gtk.py29
-rw-r--r--frontend/gtk-list.xml55
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>