[ease/plugins] Moved ImportWidget out of ease-core.



commit 0dd6fd8883bcbc220cfbb8ac81cffec537a5bbd3
Author: Nate Stedman <natesm gmail com>
Date:   Sun Aug 22 10:53:42 2010 -0400

    Moved ImportWidget out of ease-core.
    
    Communication is with signals on the service.

 ease-core/Makefile.am                       |    1 -
 ease-core/ease-plugin-import-service.vala   |   58 +++++++++------------------
 ease/Makefile.am                            |    1 +
 ease/ease-import-dialog.vala                |   16 +++++---
 ease/ease-import-flickr-media.vala          |    6 +++
 {ease-core => ease}/ease-import-widget.vala |   47 ++++++++++++++++++++-
 6 files changed, 80 insertions(+), 49 deletions(-)
---
diff --git a/ease-core/Makefile.am b/ease-core/Makefile.am
index d3e5f43..16e9bd2 100644
--- a/ease-core/Makefile.am
+++ b/ease-core/Makefile.am
@@ -20,7 +20,6 @@ libease_core_ EASE_CORE_VERSION@_la_SOURCES = \
 	ease-image-actor.vala \
 	ease-image-element.vala \
 	ease-image.vala \
-	ease-import-widget.vala \
 	ease-iterable-models.vala \
 	ease-media-element.vala \
 	ease-plugin-import-media.vala \
diff --git a/ease-core/ease-plugin-import-service.vala b/ease-core/ease-plugin-import-service.vala
index 0ca8e91..5eb0733 100644
--- a/ease-core/ease-plugin-import-service.vala
+++ b/ease-core/ease-plugin-import-service.vala
@@ -43,15 +43,17 @@ public abstract class Ease.Plugin.ImportService : GLib.Object
 	internal Gtk.ListStore model;
 	
 	/**
-	 * The widget for this service.
-	 */
-	internal ImportWidget widget;
-	
-	/**
 	 * The size of the list to download.
 	 */
 	private float list_size;
 	
+	public signal void started();
+	public signal void proxy_call_complete();
+	public signal void no_results();
+	public signal Gtk.IconView loading_started();
+	public signal void loading_progress(double progress);
+	public signal void loading_complete();
+	
 	/**
 	 * Stores the images to download. As each image is downloaded, it is
 	 * removed from the list.
@@ -91,22 +93,13 @@ public abstract class Ease.Plugin.ImportService : GLib.Object
 		images_list.add(media);
 	}
 	
-	internal void run(Gtk.Widget sender)
+	public void run(string search)
 	{
 		// create the rest proxy call
 		proxy = create_proxy();
-		call = create_call(proxy, widget.search.text);
+		call = create_call(proxy, search);
 		
-		// remove the results
-		widget.icons_container.visible = false;
-		widget.no_results.visible = false;
-		
-		// display the spinner
-		widget.spinner.start();
-		widget.spinner_container.visible = true;
-		
-		// reset the progress bar
-		widget.progress.set_fraction(0);
+		started();
 		
 		// run the call
 		try { call.run_async(on_call_finish, this); }
@@ -120,9 +113,7 @@ public abstract class Ease.Plugin.ImportService : GLib.Object
 	 */
 	private void on_call_finish(Rest.ProxyCall call)
 	{
-		// remove the spinner
-		widget.spinner_container.visible = false;
-		widget.spinner.stop();
+		proxy_call_complete();
 		
 		// create list
 		images_list = new Gee.LinkedList<ImportMedia?>();
@@ -135,19 +126,14 @@ public abstract class Ease.Plugin.ImportService : GLib.Object
 		
 		if (list_size > 0)
 		{
-			// add the icon view
-			widget.icons_container.visible = true;
-		
-			// add the progress
-			widget.progress.visible = true;
-			
 			// create model
 			model = new Gtk.ListStore(2, typeof(Gdk.Pixbuf), typeof(string));
-		
+			
 			// set icons
-			widget.icons.set_model(model);
-			widget.icons.text_column = Column.TEXT;
-			widget.icons.pixbuf_column = Column.PIXBUF;
+			var icons = loading_started();
+			icons.set_model(model);
+			icons.text_column = Column.TEXT;
+			icons.pixbuf_column = Column.PIXBUF;
 		
 			// if threads are supported, get the pixbufs in a thread
 			if (Thread.supported())
@@ -162,7 +148,7 @@ public abstract class Ease.Plugin.ImportService : GLib.Object
 		}
 		else
 		{
-			widget.no_results.visible = true;
+			no_results();
 		}
 	}
 	
@@ -197,10 +183,7 @@ public abstract class Ease.Plugin.ImportService : GLib.Object
 		}
 		
 		// set the widget.progress bar
-		lock (widget)
-		{
-			widget.progress.set_fraction(1 - (images_list.size / list_size));
-		}
+		loading_progress(1 - (images_list.size / list_size));
 			
 		// continue if there are more images
 		lock (images_list)
@@ -209,10 +192,7 @@ public abstract class Ease.Plugin.ImportService : GLib.Object
 		}
 			
 		// otherwise, remove the widget.progress bar and return
-		lock (widget)
-		{
-			widget.progress.visible = false;
-		}
+		loading_complete();
 		return null;
 	}
 	
diff --git a/ease/Makefile.am b/ease/Makefile.am
index 5f6bbf5..db77d73 100644
--- a/ease/Makefile.am
+++ b/ease/Makefile.am
@@ -13,6 +13,7 @@ ease_SOURCES = \
 	ease-import-flickr-service.vala \
 	ease-import-oca-media.vala \
 	ease-import-oca-service.vala \
+	ease-import-widget.vala \
 	ease-inspector-element-pane.vala \
 	ease-inspector-pane.vala \
 	ease-inspector-slide-pane.vala \
diff --git a/ease/ease-import-dialog.vala b/ease/ease-import-dialog.vala
index d8cbbdd..d7dc840 100644
--- a/ease/ease-import-dialog.vala
+++ b/ease/ease-import-dialog.vala
@@ -29,14 +29,10 @@ internal class Ease.ImportDialog : Gtk.Window
 		view.show_all();
 		
 		Plugin.ImportService service = new OCAService();
-		var oca = new Source.Item.from_stock_icon(
-			"OpenClipArt", "gtk-go-down", new ImportWidget(service));
+		var oca = create_item("OpenClipArt", "gtk-go-down", service);
 		group.add_item(oca);
-		
 		service = new FlickrService();
-		var flickr = new Source.Item.from_stock_icon(
-			"Flickr", "gtk-go-down", new ImportWidget(service));
-		group.add_item(flickr);
+		group.add_item(create_item("Flickr", "gtk-go-down", service));
 		
 		add(view);
 		view.show_all();
@@ -47,4 +43,12 @@ internal class Ease.ImportDialog : Gtk.Window
 	{
 		show();
 	}
+	
+	private Source.Item create_item(string title, string stock_id,
+	                                Plugin.ImportService service)
+	{
+		var widget = new ImportWidget(service);
+		
+		return new Source.Item.from_stock_icon(title, stock_id, widget);
+	}
 }
diff --git a/ease/ease-import-flickr-media.vala b/ease/ease-import-flickr-media.vala
new file mode 100644
index 0000000..76d3396
--- /dev/null
+++ b/ease/ease-import-flickr-media.vala
@@ -0,0 +1,6 @@
+internal class Ease.FlickrMedia : Plugin.ImportMedia
+{
+	internal string title;
+	internal string description;
+	internal string author;
+}
diff --git a/ease-core/ease-import-widget.vala b/ease/ease-import-widget.vala
similarity index 77%
rename from ease-core/ease-import-widget.vala
rename to ease/ease-import-widget.vala
index 573d270..933c872 100644
--- a/ease-core/ease-import-widget.vala
+++ b/ease/ease-import-widget.vala
@@ -44,7 +44,7 @@ public class Ease.ImportWidget : Gtk.Alignment
 	internal Gtk.Widget no_results;
 	
 	/**
-	 * The ImportService associated with this widget.
+	 * The ImportService associated with this 
 	 */
 	private Plugin.ImportService service;
 	
@@ -56,7 +56,6 @@ public class Ease.ImportWidget : Gtk.Alignment
 	public ImportWidget(Plugin.ImportService serv)
 	{
 		service = serv;
-		service.widget = this;
 		set_padding(0, 0, 0, 0);
 		
 		// darken the background
@@ -84,7 +83,7 @@ public class Ease.ImportWidget : Gtk.Alignment
 		
 		// search button
 		button = builder.get_object("search-button") as Gtk.Button;
-		button.clicked.connect(service.run);
+		button.clicked.connect(() => service.run(search.text));
 		button.expose_event.connect(set_bg);
 		
 		// progress
@@ -108,6 +107,48 @@ public class Ease.ImportWidget : Gtk.Alignment
 		var root = builder.get_object("root") as Gtk.EventBox;
 		root.expose_event.connect(set_bg);
 		add(root);
+		
+		// service signals
+		service.started.connect(() => {
+			// remove the results
+			icons_container.visible = false;
+			no_results.visible = false;
+		
+			// display the spinner
+			spinner.start();
+			spinner_container.visible = true;
+		
+			// reset the progress bar
+			progress.set_fraction(0);
+		});
+		
+		service.proxy_call_complete.connect(() => {
+			// remove the spinner
+			spinner_container.visible = false;
+			spinner.stop();
+		});
+		
+		service.no_results.connect(() => {
+			no_results.visible = true;
+		});
+		
+		service.loading_started.connect(() => {
+			// add the icon view
+			icons_container.visible = true;
+		
+			// add the progress
+			progress.visible = true;
+			
+			return icons;
+		});
+		
+		service.loading_progress.connect((fraction) => {
+			progress.set_fraction(fraction);
+		});
+		
+		service.loading_complete.connect(() => {
+			progress.visible = false;
+		});
 	}
 	
 	private bool set_bg(Gtk.Widget root, Gdk.EventExpose event)



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