+ return decorated_func
+
+
+class DummyAddressBook(object):
+ """
+ Minimal example of both an addressbook factory and an addressbook
+ """
+
+ def get_addressbooks(self):
+ """
+ @returns Iterable of (Address Book Factory, Book Id, Book Name)
+ """
+ yield self, "", "None"
+
+ def open_addressbook(self, bookId):
+ return self
+
+ @staticmethod
+ def factory_name():
+ return ""
+
+ def get_contacts(self):
+ """
+ @returns Iterable of (contact id, contact name)
+ """
+ return []
+
+ def get_contact_details(self, contactId):
+ """
+ @returns Iterable of (Phone Type, Phone Number)
+ """
+ return []
+
+
+class SettingsDialog(object):
+ """
+ @todo Remove this. Currently its only used for addressbooks and I want to make that a combo box on the contacts tab
+ """
+
+ 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()