class DummyAddressBook(object):
+ """
+ Minimal example of both an addressbook factory and an addressbook
+ """
def get_addressbooks(self):
"""
def open_addressbook(self, bookId):
return self
- def factory_name(self):
+ @staticmethod
+ def factory_short_name():
return ""
- def get_contacts(self):
+ @staticmethod
+ def factory_name():
+ return ""
+
+ @staticmethod
+ def get_contacts():
"""
@returns Iterable of (contact id, contact name)
"""
return []
- def get_contact_details(self, contactId):
+ @staticmethod
+ def get_contact_details(contactId):
"""
@returns Iterable of (Phone Type, Phone Number)
"""
return []
-class SettingsDialog(object):
-
- def __init__(self, widgetTree, gcDialer):
- self._gcDialer = gcDialer
- self._widgetTree = widgetTree
- self._dialog = self._widgetTree.get_widget("settings_dialog")
-
- self._applyButton = self._widgetTree.get_widget("apply_settings")
- self._applyButton.connect("clicked", self.custom_button_response(gtk.RESPONSE_OK))
-
- self._cancelButton = self._widgetTree.get_widget("cancel_settings")
- self._cancelButton.connect("clicked", self.custom_button_response(gtk.RESPONSE_CANCEL))
-
- self._booksList = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
- for (factoryId, bookId), (factoryName, bookName) in self._gcDialer.get_addressbooks():
- row = (str(factoryId), bookId, factoryName, bookName)
- self._booksList.append(row)
-
- self._booksView = self._widgetTree.get_widget("books_view")
- self._booksView.set_model(self._booksList)
-
- # Add the column to the treeview
- column = gtk.TreeViewColumn("Addressbook")
-
- textrenderer = gtk.CellRendererText()
- column.pack_start(textrenderer, expand=False)
- column.add_attribute(textrenderer, 'text', 2)
-
- textrenderer = gtk.CellRendererText()
- column.pack_start(textrenderer, expand=True)
- column.add_attribute(textrenderer, 'text', 3)
-
- column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
- column.set_sort_column_id(2)
- column.set_visible(True)
- self._booksView.append_column(column)
-
- self._booksViewSelection = self._booksView.get_selection()
- self._booksViewSelection.set_mode(gtk.SELECTION_SINGLE)
- self.reset()
-
- def reset(self):
- pass
-
- def custom_button_response(self, response):
-
- def button_handler(*args, **kwds):
- self._dialog.response(response)
-
- return button_handler
-
- def run(self):
- userResponse = self._dialog.run()
-
- if userResponse == gtk.RESPONSE_OK:
- model, itr = self._booksViewSelection.get_selected()
- if itr:
- factoryId = int(self._booksList.get_value(itr, 0))
- bookId = self._booksList.get_value(itr, 1)
- self._gcDialer.open_addressbook(factoryId, bookId)
- self._booksViewSelection.unselect_all()
- else:
- self.reset()
-
- self._dialog.hide()
-
-
class PhoneTypeSelector(object):
def __init__(self, widgetTree, gcBackend):
self._clipboard = gtk.clipboard_get()
self._deviceIsOnline = True
- self.callbacklist = None
+ self._callbackList = None
self._callbackNeedsSetup = True
self._recenttime = 0.0
self._recentmodel = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
self._recentviewselection = None
- self._gcContactText = "GC"
- try:
- self._gcContactIcon = gtk.gdk.pixbuf_new_from_file_at_size('gc_contact.png', 16, 16)
- except gobject.GError:
- self._gcContactIcon = None
self._contactstime = 0.0
- if self._gcContactIcon is not None:
- self._contactsmodel = gtk.ListStore(
- gtk.gdk.Pixbuf,
- gobject.TYPE_STRING,
- gobject.TYPE_STRING,
- gobject.TYPE_STRING,
- gobject.TYPE_STRING
- )
- else:
- self._contactsmodel = gtk.ListStore(
- gobject.TYPE_STRING,
- gobject.TYPE_STRING,
- gobject.TYPE_STRING,
- gobject.TYPE_STRING,
- gobject.TYPE_STRING
- )
+ self._contactsmodel = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
self._contactsviewselection = None
for path in Dialpad._glade_files:
self._widgetTree.get_widget("usernameentry").set_property('hildon-input-mode', 7)
self._widgetTree.get_widget("passwordentry").set_property('hildon-input-mode', 7|(1 << 29))
- gtkMenu = self._widgetTree.get_widget("menubar1")
+ gtkMenu = self._widgetTree.get_widget("dialpad_menubar")
menu = gtk.Menu()
for child in gtkMenu.get_children():
child.reparent(menu)
self._window.set_title("%s - Keypad" % self.__pretty_app_name__)
self._osso = None
- self._ebook = None
if osso is not None:
self._osso = osso.Context(Dialpad.__app_name__, Dialpad.__version__, False)
device = osso.DeviceState(self._osso)
"on_dialpad_quit": self._on_close,
"on_paste": self._on_paste,
"on_clear_number": self._on_clear_number,
- "on_settings": self._on_settings,
"on_clearcookies_clicked": self._on_clearcookies_clicked,
"on_notebook_switch_page": self._on_notebook_switch_page,
}
self._widgetTree.signal_autoconnect(callbackMapping)
self._widgetTree.get_widget("callbackcombo").get_child().connect("changed", self._on_callbackentry_changed)
+ self._widgetTree.get_widget("addressbook_combo").get_child().connect("changed", self._on_addressbook_entry_changed)
if self._window:
self._window.connect("destroy", gtk.main_quit)
self._addressBook = None
self.open_addressbook(*self.get_addressbooks().next()[0][0:2])
+ self._booksList = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
+ for (factoryId, bookId), (factoryName, bookName) in self.get_addressbooks():
+ if factoryName and bookName:
+ entryName = "%s: %s" % (factoryName, bookName)
+ elif factoryName:
+ entryName = factoryName
+ elif bookName:
+ entryName = bookName
+ else:
+ entryName = "Bad name (%d)" % factoryId
+ row = (str(factoryId), bookId, entryName)
+ self._booksList.append(row)
+
+ combobox = self._widgetTree.get_widget("addressbook_combo")
+ combobox.set_model(self._booksList)
+ combobox.set_text_column(2)
+ combobox.set_active(0)
+
self._phoneTypeSelector = PhoneTypeSelector(self._widgetTree, self._gcBackend)
- self._settingsDialog = SettingsDialog(self._widgetTree, self)
- if not self._gcBackend.is_authed():
- self.attempt_login(2)
- else:
+ self._init_recent_view()
+ self._init_contacts_view()
+ if self._gcBackend.is_authed():
self.set_account_number()
- gobject.idle_add(self._idly_init_recent_view)
- gobject.idle_add(self._idly_init_contacts_view)
-
- def _idly_init_recent_view(self):
- """
- Deferred initalization of the recent view treeview
- """
+ else:
+ self.attempt_login(2)
+ def _init_recent_view(self):
recentview = self._widgetTree.get_widget("recentview")
recentview.set_model(self._recentmodel)
textrenderer = gtk.CellRendererText()
return False
- def _idly_init_contacts_view(self):
- """ deferred initalization of the contacts view treeview """
-
+ def _init_contacts_view(self):
contactsview = self._widgetTree.get_widget("contactsview")
contactsview.set_model(self._contactsmodel)
# Add the column to the treeview
column = gtk.TreeViewColumn("Contact")
- if self._gcContactIcon is not None:
- iconrenderer = gtk.CellRendererPixbuf()
- column.pack_start(iconrenderer, expand=False)
- column.add_attribute(iconrenderer, 'pixbuf', 0)
- else:
- warnings.warn("Contact icon unavailable", UserWarning, 1)
- textrenderer = gtk.CellRendererText()
- column.pack_start(textrenderer, expand=False)
- column.add_attribute(textrenderer, 'text', 0)
-
textrenderer = gtk.CellRendererText()
column.pack_start(textrenderer, expand=True)
column.add_attribute(textrenderer, 'text', 1)
return False
- def _idly_setup_callback_combo(self):
+ def _idly_populate_callback_combo(self):
+ self._callbackList = gtk.ListStore(gobject.TYPE_STRING)
+ for number, description in self._gcBackend.get_callback_numbers().iteritems():
+ self._callbackList.append((make_pretty(number),))
+
combobox = self._widgetTree.get_widget("callbackcombo")
- self.callbacklist = gtk.ListStore(gobject.TYPE_STRING)
- combobox.set_model(self.callbacklist)
+ combobox.set_model(self._callbackList)
combobox.set_text_column(0)
- for number, description in self._gcBackend.get_callback_numbers().iteritems():
- self.callbacklist.append([make_pretty(number)])
combobox.get_child().set_text(make_pretty(self._gcBackend.get_callback_number()))
self._callbackNeedsSetup = False
contactsview.freeze_child_notify()
contactsview.set_model(None)
- # get gc icon
- if self._gcContactIcon is not None:
- contactType = (self._gcContactIcon,)
- else:
- contactType = (self._gcContactText,)
+ contactType = (self._addressBook.factory_short_name(),)
for contactId, contactName in self._addressBook.get_contacts():
self._contactsmodel.append(contactType + (contactName, "", contactId) + ("",))
yield
@note Assumes that you are already logged in
"""
assert 0 < numOfAttempts, "That was pointless having 0 or less login attempts"
- dialog = self._widgetTree.get_widget("login_dialog")
+ if not self._deviceIsOnline:
+ warnings.warn("Attempted to login while device was offline", UserWarning, 2)
+ return False
+
+ dialog = self._widgetTree.get_widget("login_dialog")
for i in range(numOfAttempts):
dialog.run()
Displays current account number
"""
accountnumber = self._gcBackend.get_account_number()
- self._widgetTree.get_widget("gcnumberlabel").set_label("<span size='23000' weight='bold'>%s</span>" % (accountnumber))
+ self._widgetTree.get_widget("gcnumber_display").set_label("<span size='23000' weight='bold'>%s</span>" % (accountnumber))
- def _on_close(self, *args):
+ @staticmethod
+ def _on_close(*args, **kwds):
gtk.main_quit()
def _on_device_state_change(self, shutdown, save_unsaved_data, memory_low, system_inactivity, message, userData):
if status == conic.STATUS_CONNECTED:
self._window.set_sensitive(True)
self._deviceIsOnline = True
+ if not self._gcBackend.is_authed():
+ self.attempt_login(2)
elif status == conic.STATUS_DISCONNECTED:
self._window.set_sensitive(False)
self._deviceIsOnline = False
else:
self._isFullScreen = False
- def _on_settings(self, *args, **kwds):
- self._settingsDialog.run()
-
def _on_key_press(self, widget, event, *args):
"""
@note Hildon specific
# re-run the inital grandcentral setup
self.attempt_login(2)
- gobject.idle_add(self._idly_setup_callback_combo)
+ gobject.idle_add(self._idly_populate_callback_combo)
def _on_callbackentry_changed(self, *args):
"""
text = make_ugly(self._widgetTree.get_widget("callbackcombo").get_child().get_text())
if not self._gcBackend.is_valid_syntax(text):
warnings.warn("%s is not a valid callback number" % text, UserWarning, 2)
- elif text != self._gcBackend.get_callback_number():
- self._gcBackend.set_callback_number(text)
- else:
+ elif text == self._gcBackend.get_callback_number():
warnings.warn("Callback number already is %s" % self._gcBackend.get_callback_number(), UserWarning, 2)
+ else:
+ self._gcBackend.set_callback_number(text)
def _on_recentview_row_activated(self, treeview, path, view_column):
model, itr = self._recentviewselection.get_selected()
self._notebook.set_current_page(0)
self._recentviewselection.unselect_all()
+ def _on_addressbook_entry_changed(self, *args, **kwds):
+ combobox = self._widgetTree.get_widget("addressbook_combo")
+ itr = combobox.get_active_iter()
+
+ factoryId = int(self._booksList.get_value(itr, 0))
+ bookId = self._booksList.get_value(itr, 1)
+ self.open_addressbook(factoryId, bookId)
+
def _on_contactsview_row_activated(self, treeview, path, view_column):
model, itr = self._contactsviewselection.get_selected()
if not itr:
elif page_num == 2 and 300 < (time.time() - self._recenttime):
gobject.idle_add(self._idly_populate_recentview)
elif page_num == 3 and self._callbackNeedsSetup:
- gobject.idle_add(self._idly_setup_callback_combo)
+ gobject.idle_add(self._idly_populate_callback_combo)
tabTitle = self._notebook.get_tab_label(self._notebook.get_nth_page(page_num)).get_text()
if hildon is not None: