[hamster-applet] Quick implementation of the new preferences



commit 8ca601d37fc4932661dcec7a1b1b973a4b0afad0
Author: Patryk Zawadzki <patrys pld-linux org>
Date:   Tue Jan 19 12:42:41 2010 +0100

    Quick implementation of the new preferences
    
    Actual binding of activities to workspaces is stil left to do.

 data/preferences.ui    |  189 ++++++++++++++++++++++++++++++++----------------
 hamster/preferences.py |   62 +++++++++++++++-
 2 files changed, 187 insertions(+), 64 deletions(-)
---
diff --git a/data/preferences.ui b/data/preferences.ui
index 21ec7d9..61c0d05 100644
--- a/data/preferences.ui
+++ b/data/preferences.ui
@@ -207,67 +207,6 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkFrame" id="workspace_frame">
-                        <property name="visible">True</property>
-                        <property name="no_show_all">True</property>
-                        <property name="label_xalign">0</property>
-                        <property name="shadow_type">none</property>
-                        <child>
-                          <object class="GtkAlignment" id="alignment10">
-                            <property name="visible">True</property>
-                            <property name="top_padding">6</property>
-                            <property name="left_padding">12</property>
-                            <child>
-                              <object class="GtkVBox" id="vbox6">
-                                <property name="visible">True</property>
-                                <property name="orientation">vertical</property>
-                                <property name="spacing">8</property>
-                                <child>
-                                  <object class="GtkCheckButton" id="workspace_tracking_name">
-                                    <property name="label" translatable="yes">Switch activities if workspace name matches an earlier activity</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="on_workspace_tracking_toggled"/>
-                                  </object>
-                                  <packing>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="workspace_tracking_memory">
-                                    <property name="label" translatable="yes">Resume the last activity when returning to a workspace</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="draw_indicator">True</property>
-                                    <signal name="toggled" handler="on_workspace_tracking_toggled"/>
-                                  </object>
-                                  <packing>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel" id="label9">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">Workspaces</property>
-                            <property name="use_markup">True</property>
-                            <attributes>
-                              <attribute name="weight" value="bold"/>
-                            </attributes>
-                          </object>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
                       <object class="GtkFrame" id="frame1">
                         <property name="visible">True</property>
                         <property name="label_xalign">0</property>
@@ -301,7 +240,7 @@
                       </object>
                       <packing>
                         <property name="expand">False</property>
-                        <property name="position">2</property>
+                        <property name="position">1</property>
                       </packing>
                     </child>
                   </object>
@@ -757,6 +696,132 @@
                 <property name="tab_fill">False</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkAlignment" id="alignment11">
+                <property name="visible">True</property>
+                <property name="top_padding">12</property>
+                <property name="bottom_padding">8</property>
+                <property name="left_padding">4</property>
+                <property name="right_padding">4</property>
+                <child>
+                  <object class="GtkVBox" id="vbox8">
+                    <property name="visible">True</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkFrame" id="workspace_frame">
+                        <property name="visible">True</property>
+                        <property name="no_show_all">True</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">none</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment10">
+                            <property name="visible">True</property>
+                            <property name="top_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <child>
+                              <object class="GtkVBox" id="vbox6">
+                                <property name="visible">True</property>
+                                <property name="orientation">vertical</property>
+                                <property name="spacing">8</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="workspace_tracking_name">
+                                    <property name="label" translatable="yes">Switch activities if workspace name matches an earlier activity</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="draw_indicator">True</property>
+                                    <signal name="toggled" handler="on_workspace_tracking_toggled"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="workspace_tracking_memory">
+                                    <property name="label" translatable="yes">Resume the last activity when returning to a workspace</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="draw_indicator">True</property>
+                                    <signal name="toggled" handler="on_workspace_tracking_toggled"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label9">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Workspaces</property>
+                            <property name="use_markup">True</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkFrame" id="frame4">
+                        <property name="visible">True</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">none</property>
+                        <child>
+                          <object class="GtkScrolledWindow" id="scrolledwindow5">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hscrollbar_policy">automatic</property>
+                            <property name="vscrollbar_policy">automatic</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkTreeView" id="workspace_list">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label12">
+                            <property name="visible">True</property>
+                            <property name="xalign">0</property>
+                            <property name="xpad">1</property>
+                            <property name="ypad">2</property>
+                            <property name="label" translatable="yes">_Workspace:</property>
+                            <property name="use_underline">True</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="padding">2</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label10">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Workspaces</property>
+              </object>
+              <packing>
+                <property name="position">2</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="position">0</property>
diff --git a/hamster/preferences.py b/hamster/preferences.py
index ad61e53..6bee733 100755
--- a/hamster/preferences.py
+++ b/hamster/preferences.py
@@ -22,6 +22,7 @@ import pygtk
 pygtk.require('2.0')
 
 import os
+import gobject
 import gtk
 
 import datetime as dt
@@ -78,6 +79,11 @@ class ActivityStore(gtk.ListStore):
                          activity['activity_order']])
 
 
+class WorkspaceStore(gtk.ListStore):
+    def __init__(self):
+        #id, name, color_code, order
+        gtk.ListStore.__init__(self, int, gobject.TYPE_PYOBJECT, str)
+
 formats = ["fixed", "symbolic", "minutes"]
 appearances = ["text", "icon", "both"]
 
@@ -108,7 +114,7 @@ class PreferencesEditor:
         self.activityCell = gtk.CellRendererText()
         self.activityCell.connect('edited', self.activity_name_edited_cb, self.activity_store)
         self.activityColumn.pack_start(self.activityCell, True)
-        self.activityColumn.set_attributes(self.activityCell, text = 1)
+        self.activityColumn.set_attributes(self.activityCell, text=1)
         self.activityColumn.set_sort_column_id(1)
         self.activity_tree.append_column(self.activityColumn)
 
@@ -129,7 +135,7 @@ class PreferencesEditor:
         self.categoryCell.connect('edited', self.category_edited_cb, self.category_store)
 
         self.categoryColumn.pack_start(self.categoryCell, True)
-        self.categoryColumn.set_attributes(self.categoryCell, text = 1)
+        self.categoryColumn.set_attributes(self.categoryCell, text=1)
         self.categoryColumn.set_sort_column_id(1)
         self.categoryColumn.set_cell_data_func(self.categoryCell, self.unsorted_painter)
         self.category_tree.append_column(self.categoryColumn)
@@ -173,6 +179,33 @@ class PreferencesEditor:
         self.prev_selected_category = None
 
 
+        # create and fill workspace tree
+        self.workspace_tree = self.get_widget('workspace_list')
+#        self.get_widget("workspaces_label").set_mnemonic_widget(self.workspace_tree)
+        self.workspace_store = WorkspaceStore()
+
+        self.wNameColumn = gtk.TreeViewColumn(_("Name"))
+        self.wNameColumn.set_expand(True)
+        self.wNameCell = gtk.CellRendererText()
+        self.wNameCell.set_property('editable', False)
+        self.wActivityColumn = gtk.TreeViewColumn(_("Activity"))
+        self.wActivityColumn.set_expand(True)
+        self.wActivityCell = gtk.CellRendererText()
+        self.wActivityCell.set_property('editable', True)
+#        self.wActivityCell.connect('edited', self.category_edited_cb, self.category_store)
+
+        self.wNameColumn.pack_start(self.wNameCell, True)
+        self.wNameColumn.set_attributes(self.wNameCell)
+        self.wNameColumn.set_sort_column_id(1)
+        self.wNameColumn.set_cell_data_func(self.wNameCell, self.workspace_name_celldata)
+        self.workspace_tree.append_column(self.wNameColumn)
+        self.wActivityColumn.pack_start(self.wActivityCell, True)
+        self.wActivityColumn.set_attributes(self.wActivityCell, text=2)
+        self.wActivityColumn.set_sort_column_id(1)
+        self.workspace_tree.append_column(self.wActivityColumn)
+
+        self.workspace_tree.set_model(self.workspace_store)
+
         # disable notification thing if pynotify is not available
         try:
             import pynotify
@@ -186,9 +219,34 @@ class PreferencesEditor:
         except:
             self.get_widget("workspace_frame").hide()
 
+        self.screen = wnck.screen_get_default()
+        self.screen.workspace_add_handler = self.screen.connect("workspace-created", self.on_workspace_created)
+        self.screen.workspace_del_handler = self.screen.connect("workspace-destroyed", self.on_workspace_deleted)
+
         self._gui.connect_signals(self)
         self.window.show_all()
 
+    def workspace_name_celldata(self, column, cell, model, iter, user_data=None):
+        name = model.get_value(iter, 1).get_name()
+        cell.set_property('text', str(name))
+
+    def on_workspace_created(self, screen, workspace, user_data=None):
+        self.workspace_store.append([
+            workspace.get_number(),
+            workspace,
+            u'Not implemented'
+        ])
+
+    def on_workspace_deleted(self, screen, workspace, user_data=None):
+        row = self.workspace_store.get_iter_first()
+        while row:
+            if self.workspace_store.get_value(row, 1) == workspace:
+                if not self.workspace_store.remove(row):
+                    # row is now invalid, stop iteration
+                    break
+            else:
+                row = self.workspace_store.iter_next(row)
+
     def load_config(self, *args):
         self.get_widget("shutdown_track").set_active(conf.get("stop_on_shutdown"))
         self.get_widget("idle_track").set_active(conf.get("enable_timeout"))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]