4 import ui.models as models
7 class SettingsDialog(gtk.Dialog):
8 RESPONSE_NEW, RESPONSE_EDIT, RESPONSE_DELETE = range(3)
9 def __init__(self, window, controller):
11 self.controller = controller
12 gtk.Dialog.__init__(self)
13 self.set_transient_for(self.win)
14 self.set_title("Settings")
16 pannable_area = hildon.PannableArea()
17 vbox = gtk.VBox(False, 1)
18 pannable_area.add_with_viewport(vbox)
19 self.vbox.pack_start(pannable_area, True, True, 1)
21 self.accounts = AccountsTreeView(gtk.HILDON_UI_MODE_NORMAL, self.controller)
22 vbox.pack_start(self.accounts, False, False, 1)
24 clear_button = hildon.GtkButton(gtk.HILDON_SIZE_FINGER_HEIGHT | gtk.HILDON_SIZE_HALFSCREEN_WIDTH)
25 clear_button.set_label("Clear Cache")
26 clear_button.connect("clicked", self.on_clear_cache_clicked)
27 vbox.pack_start(clear_button, False, False, 1)
30 # all stock responses are negative, so we can use any positive value
31 new_button = self.add_button("New", self.RESPONSE_NEW)
32 #TODO: get edit button working
33 #edit_button = self.add_button("Edit", RESPONSE_EDIT)
34 delete_button = self.add_button("Delete", self.RESPONSE_DELETE)
35 ok_button = self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
41 while(result != gtk.RESPONSE_DELETE_EVENT):
42 if result == self.RESPONSE_NEW:
43 self.on_new_account_clicked()
44 elif result == self.RESPONSE_DELETE:
45 # get the selected treeview item, and delete the gconf keys
46 self.on_delete_account_clicked()
47 elif result == gtk.RESPONSE_OK:
48 self.accounts.refresh()
55 def on_clear_cache_clicked(self, button):
56 self.controller.clear_cache()
58 def on_new_account_clicked(self):
59 NewAccountDialog(self.win, self.controller)
60 self.accounts.refresh()
63 def on_delete_account_clicked(self):
64 uid = self._get_selected_item(0)
65 self.controller.settings.remove_account(uid)
66 self.accounts.refresh()
68 def _get_selected_item(self, column):
69 selection = self.accounts.get_selection()
70 model, miter = selection.get_selected()
71 value = model.get_value(miter, column)
75 def report_error(self, error):
76 hildon.hildon_banner_show_information(self.get_toplevel(), '', error)
78 class NewAccountDialog(gtk.Dialog):
79 def __init__(self, parent, controller):
80 self.controller = controller
81 gtk.Dialog.__init__(self, parent=parent)
86 valid_credentials = False
88 while not valid_credentials:
89 if result == gtk.RESPONSE_OK:
90 uid = self.uidEntry.get_text()
91 api_key = self.apiEntry.get_text()
93 validation.validate_uid(uid)
94 validation.validate_api_key(api_key)
95 except validation.ValidationError, e:
96 self.report_error(e.message)
99 valid_credentials = True
100 self.controller.settings.add_account(uid, api_key)
108 #get the vbox to pack all the settings into
111 self.set_title("New Account")
113 uidLabel = gtk.Label("User ID:")
114 uidLabel.set_justify(gtk.JUSTIFY_LEFT)
117 self.uidEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
118 self.uidEntry.set_placeholder("User ID")
119 self.uidEntry.set_property('is_focus', False)
121 vbox.add(self.uidEntry)
123 apiLabel = gtk.Label("API key:")
124 apiLabel.set_justify(gtk.JUSTIFY_LEFT)
127 self.apiEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
128 self.apiEntry.set_placeholder("API Key")
129 self.apiEntry.set_property('is_focus', False)
131 vbox.add(self.apiEntry)
133 ok_button = self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
137 def report_error(self, error):
138 hildon.hildon_banner_show_information(self.get_toplevel(), '', error)
140 class AccountsTreeView(hildon.GtkTreeView):
141 def __init__(self, mode, controller):
142 self.controller = controller
143 hildon.GtkTreeView.__init__(self, mode)
145 self.accounts_model = models.AccountsModel(self.controller)
146 self.set_model(self.accounts_model)
147 self.set_headers_visible(True)
150 def add_columns(self):
151 #Column 0 for the treeview
152 renderer = gtk.CellRendererText()
153 column = gtk.TreeViewColumn('User ID', renderer,
154 text=models.AccountsModel.C_UID)
155 column.set_property("expand", True)
156 self.append_column(column)
158 #Column 2 (characters) for the treeview
159 column = gtk.TreeViewColumn('Characters', renderer,
160 markup=models.AccountsModel.C_CHARS)
161 column.set_property("expand", True)
162 self.append_column(column)
165 self.accounts_model.get_accounts()