Adding filtering of history
authorepage <eopage@byu.net>
Sun, 3 Jan 2010 02:47:00 +0000 (02:47 +0000)
committerepage <eopage@byu.net>
Sun, 3 Jan 2010 02:47:00 +0000 (02:47 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@609 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/dialcentral.glade
src/gv_views.py
src/null_views.py
support/builddeb.py

index 7255694..e262c45 100644 (file)
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="2" signal="clicked"/>
-                        <accelerator key="a" signal="clicked"/>
-                        <accelerator key="b" signal="clicked"/>
                         <accelerator key="c" signal="clicked"/>
+                        <accelerator key="b" signal="clicked"/>
+                        <accelerator key="a" signal="clicked"/>
+                        <accelerator key="2" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label10">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="3" signal="clicked"/>
-                        <accelerator key="d" signal="clicked"/>
-                        <accelerator key="e" signal="clicked"/>
                         <accelerator key="f" signal="clicked"/>
+                        <accelerator key="e" signal="clicked"/>
+                        <accelerator key="d" signal="clicked"/>
+                        <accelerator key="3" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label11">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="4" signal="clicked"/>
-                        <accelerator key="g" signal="clicked"/>
-                        <accelerator key="h" signal="clicked"/>
                         <accelerator key="i" signal="clicked"/>
+                        <accelerator key="h" signal="clicked"/>
+                        <accelerator key="g" signal="clicked"/>
+                        <accelerator key="4" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label13">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="5" signal="clicked"/>
-                        <accelerator key="j" signal="clicked"/>
-                        <accelerator key="k" signal="clicked"/>
                         <accelerator key="l" signal="clicked"/>
+                        <accelerator key="k" signal="clicked"/>
+                        <accelerator key="j" signal="clicked"/>
+                        <accelerator key="5" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label14">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="6" signal="clicked"/>
-                        <accelerator key="m" signal="clicked"/>
-                        <accelerator key="n" signal="clicked"/>
                         <accelerator key="o" signal="clicked"/>
+                        <accelerator key="n" signal="clicked"/>
+                        <accelerator key="m" signal="clicked"/>
+                        <accelerator key="6" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label15">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="7" signal="clicked"/>
-                        <accelerator key="p" signal="clicked"/>
-                        <accelerator key="q" signal="clicked"/>
-                        <accelerator key="r" signal="clicked"/>
                         <accelerator key="s" signal="clicked"/>
+                        <accelerator key="r" signal="clicked"/>
+                        <accelerator key="q" signal="clicked"/>
+                        <accelerator key="p" signal="clicked"/>
+                        <accelerator key="7" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label16">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="8" signal="clicked"/>
-                        <accelerator key="t" signal="clicked"/>
-                        <accelerator key="u" signal="clicked"/>
                         <accelerator key="v" signal="clicked"/>
+                        <accelerator key="u" signal="clicked"/>
+                        <accelerator key="t" signal="clicked"/>
+                        <accelerator key="8" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label17">
                             <property name="visible">True</property>
                         <property name="receives_default">False</property>
                         <property name="focus_on_click">False</property>
                         <signal name="clicked" handler="on_digit_clicked"/>
-                        <accelerator key="9" signal="clicked"/>
-                        <accelerator key="w" signal="clicked"/>
-                        <accelerator key="x" signal="clicked"/>
-                        <accelerator key="y" signal="clicked"/>
                         <accelerator key="z" signal="clicked"/>
+                        <accelerator key="y" signal="clicked"/>
+                        <accelerator key="x" signal="clicked"/>
+                        <accelerator key="w" signal="clicked"/>
+                        <accelerator key="9" signal="clicked"/>
                         <child>
                           <widget class="GtkLabel" id="label18">
                             <property name="visible">True</property>
                 <property name="visible">True</property>
                 <property name="orientation">vertical</property>
                 <child>
+                  <widget class="GtkButton" id="historyFilterSelector">
+                    <property name="label" translatable="yes">All</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
                   <widget class="GtkScrolledWindow" id="history_scrolledwindow">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     </child>
                   </widget>
                   <packing>
-                    <property name="position">0</property>
+                    <property name="position">1</property>
                   </packing>
                 </child>
               </widget>
index 7fada58..b4b6262 100644 (file)
@@ -812,6 +812,8 @@ class CallHistoryView(object):
        FROM_IDX = 3
        FROM_ID_IDX = 4
 
+       HISTORY_ITEM_TYPES = ["All", "Received", "Missed", "Placed"]
+
        def __init__(self, widgetTree, backend, errorDisplay):
                self._errorDisplay = errorDisplay
                self._backend = backend
@@ -824,6 +826,8 @@ class CallHistoryView(object):
                        gobject.TYPE_STRING, # from
                        gobject.TYPE_STRING, # from id
                )
+               self._historymodelfiltered = self._historymodel.filter_new()
+               self._historymodelfiltered.set_visible_func(self._is_history_visible)
                self._historyview = widgetTree.get_widget("historyview")
                self._historyviewselection = None
                self._onRecentviewRowActivatedId = 0
@@ -859,6 +863,10 @@ class CallHistoryView(object):
                self._window = gtk_toolbox.find_parent_window(self._historyview)
                self._phoneTypeSelector = SmsEntryDialog(widgetTree)
 
+               self._historyFilterSelector = widgetTree.get_widget("historyFilterSelector")
+               self._historyFilterSelector.connect("clicked", self._on_history_filter_clicked)
+               self._selectedFilter = "All"
+
                self._updateSink = gtk_toolbox.threaded_stage(
                        gtk_toolbox.comap(
                                self._idly_populate_historyview,
@@ -868,7 +876,9 @@ class CallHistoryView(object):
 
        def enable(self):
                assert self._backend.is_authed(), "Attempting to enable backend while not logged in"
-               self._historyview.set_model(self._historymodel)
+               self._historyFilterSelector.set_label(self._selectedFilter)
+
+               self._historyview.set_model(self._historymodelfiltered)
                self._historyview.set_fixed_height_mode(False)
 
                self._historyview.append_column(self._dateColumn)
@@ -911,14 +921,32 @@ class CallHistoryView(object):
        def name():
                return "Recent Calls"
 
-       def load_settings(self, config, section):
-               pass
+       def load_settings(self, config, sectionName):
+               try:
+                       self._selectedFilter = config.get(sectionName, "filter")
+                       if self._selectedFilter not in self.HISTORY_ITEM_TYPES:
+                               self._messageType = self.HISTORY_ITEM_TYPES[0]
+               except ConfigParser.NoOptionError:
+                       pass
 
-       def save_settings(self, config, section):
+       def save_settings(self, config, sectionName):
                """
                @note Thread Agnostic
                """
-               pass
+               config.set(sectionName, "filter", self._selectedFilter)
+
+       def _is_history_visible(self, model, iter):
+               try:
+                       action = model.get_value(iter, self.ACTION_IDX)
+                       if action is None:
+                               return False # this seems weird but oh well
+
+                       if self._selectedFilter in [action, "All"]:
+                               return True
+                       else:
+                               return False
+               except Exception, e:
+                       self._errorDisplay.push_exception()
 
        def _idly_populate_historyview(self):
                with gtk_toolbox.gtk_lock():
@@ -956,9 +984,31 @@ class CallHistoryView(object):
 
                return False
 
+       def _on_history_filter_clicked(self, *args, **kwds):
+               try:
+                       selectedComboIndex = self.HISTORY_ITEM_TYPES.index(self._selectedFilter)
+
+                       try:
+                               newSelectedComboIndex = hildonize.touch_selector(
+                                       self._window,
+                                       "History",
+                                       self.HISTORY_ITEM_TYPES,
+                                       selectedComboIndex,
+                               )
+                       except RuntimeError:
+                               return
+
+                       option = self.HISTORY_ITEM_TYPES[newSelectedComboIndex]
+                       self._selectedFilter = option
+                       self._historyFilterSelector.set_label(self._selectedFilter)
+                       self._historymodelfiltered.refilter()
+               except Exception, e:
+                       self._errorDisplay.push_exception()
+
        def _on_historyview_row_activated(self, treeview, path, view_column):
                try:
-                       itr = self._historymodel.get_iter(path)
+                       childPath = self._historymodelfiltered.convert_path_to_child_path(path)
+                       itr = self._historymodel.get_iter(childPath)
                        if not itr:
                                return
 
index c385c8f..573433a 100644 (file)
@@ -113,13 +113,13 @@ class AccountInfo(object):
 class CallHistoryView(object):
 
        def __init__(self, widgetTree):
-               pass
+               self._historyFilterSelector = widgetTree.get_widget("historyFilterSelector")
 
        def enable(self):
-               pass
+               self._historyFilterSelector.set_sensitive(False)
 
        def disable(self):
-               pass
+               self._historyFilterSelector.set_sensitive(True)
 
        def update(self, force = False):
                return False
index 624b9fb..435f983 100755 (executable)
@@ -35,6 +35,7 @@ __changelog__ = """
 * Sped up GV contacts
 * Remember if fullscreen (Ctrl+enter) in settings
 * Added Ctrl+w and Ctrl+q to quit
+* Added a filter for the Call History
 * Bugfix: Messages tab not showing all of a message in Fremantle
 * Bugfix: When selecting a message, the wrong message is displayed in the Send SMS dialog