Adding the ignore file
[gc-dialer] / src / dc_glade.py
index bac9004..2c1563e 100755 (executable)
@@ -29,6 +29,7 @@ import threading
 import base64
 import ConfigParser
 import itertools
+import shutil
 import logging
 
 import gtk
@@ -97,6 +98,7 @@ class Dialcentral(object):
                self._alarmHandler = None
                self._ledHandler = None
                self._originalCurrentLabels = []
+               self._fsContactsPath = os.path.join(constants._data_path_, "contacts")
 
                for path in self._glade_files:
                        if os.path.isfile(path):
@@ -133,12 +135,6 @@ class Dialcentral(object):
                        scrollingWidget = self._widgetTree.get_widget(scrollingWidgetName)
                        assert scrollingWidget is not None, scrollingWidgetName
                        hildonize.hildonize_scrollwindow_with_viewport(scrollingWidget)
-               for pannableTreeViewName in (
-                       "messages_view",
-               ):
-                       view = self._widgetTree.get_widget(pannableTreeViewName)
-                       assert view is not None, pannableTreeViewName
-                       hildonize.pannable_treeview_theme_workaround(scrollingWidget)
 
                for buttonName in (
                        "back",
@@ -159,12 +155,16 @@ class Dialcentral(object):
                        self._window,
                        self._widgetTree.get_widget("dialpad_menubar"),
                )
-               if hildonize.IS_FREMANTLE_SUPPORTED:
+               if not hildonize.GTK_MENU_USED:
                        button = gtk.Button("New Login")
                        button.connect("clicked", self._on_clearcookies_clicked)
                        menu.append(button)
 
-                       button= gtk.Button("Refresh")
+                       button = gtk.Button("Import Contacts")
+                       button.connect("clicked", self._on_contact_import)
+                       menu.append(button)
+
+                       button = gtk.Button("Refresh")
                        button.connect("clicked", self._on_menu_refresh)
                        menu.append(button)
 
@@ -319,8 +319,7 @@ class Dialcentral(object):
                                        ),
                                })
 
-                       fsContactsPath = os.path.join(constants._data_path_, "contacts")
-                       fileBackend = file_backend.FilesystemAddressBookFactory(fsContactsPath)
+                       fileBackend = file_backend.FilesystemAddressBookFactory(self._fsContactsPath)
 
                        self._dialpads[self.GV_BACKEND].number_selected = self._select_action
                        self._historyViews[self.GV_BACKEND].number_selected = self._select_action
@@ -331,7 +330,7 @@ class Dialcentral(object):
                                self._phoneBackends[self.GV_BACKEND],
                                fileBackend,
                        ]
-                       mergedBook = merge_backend.MergedAddressBook(addressBooks, merge_backend.MergedAddressBook.advanced_lastname_sorter)
+                       mergedBook = merge_backend.MergedAddressBook(addressBooks, merge_backend.MergedAddressBook.basic_firtname_sorter)
                        self._contactsViews[self.GV_BACKEND].append(mergedBook)
                        self._contactsViews[self.GV_BACKEND].extend(addressBooks)
                        self._contactsViews[self.GV_BACKEND].open_addressbook(*self._contactsViews[self.GV_BACKEND].get_addressbooks().next()[0][0:2])
@@ -341,6 +340,7 @@ class Dialcentral(object):
                                "on_refresh": self._on_menu_refresh,
                                "on_clearcookies_clicked": self._on_clearcookies_clicked,
                                "on_about_activate": self._on_about_activate,
+                               "on_import": self._on_contact_import,
                        }
                        if hildonize.GTK_MENU_USED:
                                self._widgetTree.signal_autoconnect(callbackMapping)
@@ -491,12 +491,14 @@ class Dialcentral(object):
 
                return loggedIn, serviceId
 
-       def _select_action(self, action, number, message):
+       def _select_action(self, action, numbers, message):
                self.refresh_session()
                if action == "dial":
+                       assert len(numbers) == 1
+                       number = numbers[0]
                        self._on_dial_clicked(number)
                elif action == "sms":
-                       self._on_sms_clicked(number, message)
+                       self._on_sms_clicked(numbers, message)
                else:
                        assert False, "Unknown action: %s" % action
 
@@ -543,6 +545,10 @@ class Dialcentral(object):
 
                        if self._alarmHandler is not None:
                                self._alarmHandler.load_settings(config, "alarm")
+
+                       isFullscreen = config.getboolean(constants.__pretty_app_name__, "fullscreen")
+                       if isFullscreen:
+                               self._window.fullscreen()
                except ConfigParser.NoOptionError, e:
                        _moduleLogger.exception(
                                "Settings file %s is missing section %s" % (
@@ -618,6 +624,7 @@ class Dialcentral(object):
                config.add_section(constants.__pretty_app_name__)
                config.set(constants.__pretty_app_name__, "active", str(backend))
                config.set(constants.__pretty_app_name__, "orientation", str(int(gtk_toolbox.get_screen_orientation())))
+               config.set(constants.__pretty_app_name__, "fullscreen", str(self._isFullScreen))
                for i, value in enumerate(self._credentials):
                        blob = base64.b64encode(value)
                        config.set(constants.__pretty_app_name__, "bin_blob_%i" % i, blob)
@@ -742,12 +749,17 @@ class Dialcentral(object):
                                        self._window.unfullscreen()
                                else:
                                        self._window.fullscreen()
-                       elif event.keyval == ord("l") and event.get_state() & gtk.gdk.CONTROL_MASK:
+                       elif event.keyval == gtk.keysyms.l and event.get_state() & gtk.gdk.CONTROL_MASK:
                                with open(constants._user_logpath_, "r") as f:
                                        logLines = f.xreadlines()
                                        log = "".join(logLines)
                                        self._clipboard.set_text(str(log))
-                       elif event.keyval == ord("r") and event.get_state() & gtk.gdk.CONTROL_MASK:
+                       elif (
+                               event.keyval in (gtk.keysyms.w, gtk.keysyms.q) and
+                               event.get_state() & gtk.gdk.CONTROL_MASK
+                       ):
+                               self._window.destroy()
+                       elif event.keyval == gtk.keysyms.r and event.get_state() & gtk.gdk.CONTROL_MASK:
                                self._refresh_active_tab()
                except Exception, e:
                        self._errorDisplay.push_exception()
@@ -813,9 +825,9 @@ class Dialcentral(object):
                        self._errorDisplay.push_exception()
                return False
 
-       def _on_sms_clicked(self, number, message):
+       def _on_sms_clicked(self, numbers, message):
                try:
-                       assert number, "No number specified"
+                       assert numbers, "No number specified"
                        assert message, "Empty message"
                        try:
                                loggedIn = self._phoneBackends[self._selectedBackendId].is_authed()
@@ -832,9 +844,9 @@ class Dialcentral(object):
 
                        dialed = False
                        try:
-                               self._phoneBackends[self._selectedBackendId].send_sms(number, message)
-                               hildonize.show_information_banner(self._window, "Sending to %s" % number)
-                               _moduleLogger.info("Sending SMS to %s" % number)
+                               self._phoneBackends[self._selectedBackendId].send_sms(numbers, message)
+                               hildonize.show_information_banner(self._window, "Sending to %s" % ", ".join(numbers))
+                               _moduleLogger.info("Sending SMS to %r" % numbers)
                                dialed = True
                        except Exception, e:
                                self._errorDisplay.push_exception()
@@ -875,6 +887,27 @@ class Dialcentral(object):
                except Exception, e:
                        self._errorDisplay.push_exception()
 
+       def _on_contact_import(self, *args):
+               try:
+                       csvFilter = gtk.FileFilter()
+                       csvFilter.set_name("Contacts")
+                       csvFilter.add_pattern("*.csv")
+                       importFileChooser = gtk.FileChooserDialog(
+                               title="Contacts",
+                               parent=self._window,
+                       )
+                       importFileChooser.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
+                       importFileChooser.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
+
+                       importFileChooser.set_property("filter", csvFilter)
+                       userResponse = importFileChooser.run()
+                       importFileChooser.hide()
+                       if userResponse == gtk.RESPONSE_OK:
+                               filename = importFileChooser.get_filename()
+                               shutil.copy2(filename, self._fsContactsPath)
+               except Exception, e:
+                       self._errorDisplay.push_exception()
+
        def _on_menu_refresh(self, *args):
                try:
                        self._refresh_active_tab()