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)
25 # all stock responses are negative, so we can use any positive value
26 new_button = self.add_button("New", self.RESPONSE_NEW)
27 #TODO: get edit button working
28 #edit_button = self.add_button("Edit", RESPONSE_EDIT)
29 delete_button = self.add_button("Delete", self.RESPONSE_DELETE)
30 ok_button = self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
36 while(result != gtk.RESPONSE_DELETE_EVENT):
37 if result == self.RESPONSE_NEW:
38 self.on_new_account_clicked()
39 elif result == self.RESPONSE_DELETE:
40 # get the selected treeview item, and delete the gconf keys
41 self.on_delete_account_clicked()
42 elif result == gtk.RESPONSE_OK:
43 self.accounts.refresh()
50 def on_new_account_clicked(self):
51 NewAccountDialog(self.win, self.controller)
52 self.accounts.refresh()
55 def on_delete_account_clicked(self):
56 uid = self._get_selected_item(0)
57 self.controller.remove_account(uid)
58 self.accounts.refresh()
60 def _get_selected_item(self, column):
61 selection = self.accounts.get_selection()
62 model, miter = selection.get_selected()
63 value = model.get_value(miter, column)
67 def report_error(self, error):
68 hildon.hildon_banner_show_information(self.get_toplevel(), '', error)
70 class NewAccountDialog(gtk.Dialog):
71 def __init__(self, parent, controller):
72 self.controller = controller
73 gtk.Dialog.__init__(self, parent=parent)
78 valid_credentials = False
80 while not valid_credentials:
81 if result == gtk.RESPONSE_OK:
82 uid = self.uidEntry.get_text()
83 api_key = self.apiEntry.get_text()
86 validation.api_key(api_key)
87 except validation.ValidationError, e:
88 self.report_error(e.message)
91 valid_credentials = True
92 self.controller.add_account(uid, api_key)
100 #get the vbox to pack all the settings into
103 self.set_title("New Account")
105 uidLabel = gtk.Label("User ID:")
106 uidLabel.set_justify(gtk.JUSTIFY_LEFT)
109 self.uidEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
110 self.uidEntry.set_placeholder("User ID")
111 self.uidEntry.set_property('is_focus', False)
113 vbox.add(self.uidEntry)
115 apiLabel = gtk.Label("API key:")
116 apiLabel.set_justify(gtk.JUSTIFY_LEFT)
119 self.apiEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
120 self.apiEntry.set_placeholder("API Key")
121 self.apiEntry.set_property('is_focus', False)
123 vbox.add(self.apiEntry)
125 ok_button = self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
129 def report_error(self, error):
130 hildon.hildon_banner_show_information(self.get_toplevel(), '', error)
132 class AccountsTreeView(hildon.GtkTreeView):
133 def __init__(self, mode, controller):
134 self.controller = controller
135 hildon.GtkTreeView.__init__(self, mode)
137 self.accounts_model = models.AccountsModel(self.controller)
138 self.set_model(self.accounts_model)
139 self.set_headers_visible(True)
142 def add_columns(self):
143 #Column 0 for the treeview
144 renderer = gtk.CellRendererText()
145 column = gtk.TreeViewColumn('User ID', renderer,
146 text=models.AccountsModel.C_UID)
147 column.set_property("expand", True)
148 self.append_column(column)
150 #Column 2 (characters) for the treeview
151 column = gtk.TreeViewColumn('Characters', renderer,
152 markup=models.AccountsModel.C_CHARS)
153 column.set_property("expand", True)
154 self.append_column(column)
157 self.accounts_model.get_accounts()