conduit r1388 - in trunk: . conduit/modules/FspotModule



Author: thomasvm
Date: Sat Mar 22 21:02:35 2008
New Revision: 1388
URL: http://svn.gnome.org/viewvc/conduit?rev=1388&view=rev

Log:
2008-03-22  Thomas Van Machelen <thomas vanmachelen gmail com>:

	* conduit/modules/FspotModule/config.glade:
	* conduit/modules/FspotModule/FspotModule.py:  Add possibility to
	configuration dialog to create tags in F-Spot.  Fixes #517536


Modified:
   trunk/ChangeLog
   trunk/conduit/modules/FspotModule/FspotModule.py
   trunk/conduit/modules/FspotModule/config.glade

Modified: trunk/conduit/modules/FspotModule/FspotModule.py
==============================================================================
--- trunk/conduit/modules/FspotModule/FspotModule.py	(original)
+++ trunk/conduit/modules/FspotModule/FspotModule.py	Sat Mar 22 21:02:35 2008
@@ -50,6 +50,8 @@
         self.photo_remote = None
         self.tag_remote = None
 
+        self.list_store = None
+
         self._connect_to_fspot()
         self._hookup_signal_handlers()
 
@@ -139,10 +141,7 @@
 
         # add tags from upload info
         for tag in uploadInfo.tags:
-            try:
-                self.tag_remote.GetTagByName (tag)
-            except:
-                self.tag_remote.CreateTag (tag)
+            self._create_tag (tag)
             tags.append (tag)
 
         # import the photo
@@ -181,12 +180,32 @@
         self.photo_remote.FinishRoll ()
         self.has_roll = False
 
+    def _create_tag (self, tag):
+        # Check if remote is read only
+        if self.tag_remote.IsReadOnly ():
+            return
+
+        # Now see if we can create the tag
+        try:
+            self.tag_remote.GetTagByName (tag)
+        except:
+            self.tag_remote.CreateTag (tag)        
+
     def handle_photoremote_down(self):
         self.photo_remote = None
         self.tag_remote = None
 
     def configure(self, window):
         import gtk
+        def create_tags_clicked_cb(button):
+            text = self.tags_entry.get_text()
+            if not text:
+                return
+            tags = text.split(',')
+            for tag in tags:
+                self._create_tag (tag.strip ())
+            refresh_list_store()                
+
         def col1_toggled_cb(cell, path, model ):
             #not because we get this cb before change state
             checked = not cell.get_active()
@@ -202,6 +221,20 @@
             log.debug("Toggle '%s'(%s) to: %s" % (model[path][NAME_IDX], val, checked))
             return
 
+        def refresh_list_store ():
+            #Build a list of all the tags
+            if not self.list_store:
+                self.list_store = gtk.ListStore(gobject.TYPE_STRING,    #NAME_IDX
+                                                gobject.TYPE_BOOLEAN,   #active
+                                               )
+            else:
+                self.list_store.clear ()                
+            #Fill the list store
+            i = 0
+            for tag in self._get_all_tags():
+                self.list_store.append((tag,tag in self.enabledTags))
+                i += 1
+
         #Fspot must be running
         if not self._connect_to_fspot():
             return
@@ -212,17 +245,9 @@
 						"FspotConfigDialog"
 						)
         tagtreeview = tree.get_widget("tagtreeview")
-        #Build a list of all the tags
-        list_store = gtk.ListStore(gobject.TYPE_STRING,    #NAME_IDX
-                                   gobject.TYPE_BOOLEAN,   #active
-                                  )
-        #Fill the list store
-        i = 0
-        for tag in self._get_all_tags():
-            list_store.append((tag,tag in self.enabledTags))
-            i += 1
-        #Set up the treeview
-        tagtreeview.set_model(list_store)
+        refresh_list_store()
+        tagtreeview.set_model(self.list_store)
+
         #column 1 is the tag name
         tagtreeview.append_column(  gtk.TreeViewColumn(_("Tag Name"), 
                                     gtk.CellRendererText(), 
@@ -231,16 +256,21 @@
         #column 2 is a checkbox for selecting the tag to sync
         renderer1 = gtk.CellRendererToggle()
         renderer1.set_property('activatable', True)
-        renderer1.connect( 'toggled', col1_toggled_cb, list_store )
+        renderer1.connect( 'toggled', col1_toggled_cb, self.list_store )
         tagtreeview.append_column(  gtk.TreeViewColumn(_("Enabled"), 
                                     renderer1, 
                                     active=1)
                                     )
+  
+        # Area for creating additional tags
+        create_button = tree.get_widget ('create_button')
+        self.tags_entry = tree.get_widget ('tags_entry')
+        create_button.connect('clicked', create_tags_clicked_cb)
 
         dlg = tree.get_widget("FspotConfigDialog")
         dlg.set_transient_for(window)
 
-        response = dlg.run()
+        response = Utils.run_dialog (dlg, window)
         dlg.destroy()
 
     def set_configuration(self, config):

Modified: trunk/conduit/modules/FspotModule/config.glade
==============================================================================
--- trunk/conduit/modules/FspotModule/config.glade	(original)
+++ trunk/conduit/modules/FspotModule/config.glade	Sat Mar 22 21:02:35 2008
@@ -129,6 +129,89 @@
 	      <property name="fill">True</property>
 	    </packing>
 	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox1">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="tag_label">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Create Tags: </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="tags_entry">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">â</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="create_button">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+
+		  <child>
+		    <widget class="GtkImage" id="image1">
+		      <property name="visible">True</property>
+		      <property name="stock">gtk-apply</property>
+		      <property name="icon_size">4</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
 	</widget>
 	<packing>
 	  <property name="padding">0</property>



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