[seed] ClutterPad: Mostly fully functional under GtkBuilder UI.



commit e892ca33c18d1a5da431f6c96857031f7c6eb1e8
Author: Tim Horton <hortont svn gnome org>
Date:   Wed May 13 10:18:54 2009 -0400

    ClutterPad: Mostly fully functional under GtkBuilder UI.
---
 examples/clutter-pad/clutter-pad.ui |    9 +-
 examples/clutter-pad/main.js        |  258 +++++++++++------------------------
 2 files changed, 91 insertions(+), 176 deletions(-)

diff --git a/examples/clutter-pad/clutter-pad.ui b/examples/clutter-pad/clutter-pad.ui
index ad19ca5..ffb1312 100644
--- a/examples/clutter-pad/clutter-pad.ui
+++ b/examples/clutter-pad/clutter-pad.ui
@@ -59,7 +59,8 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkComboBox" id="example_chooser">
+                  <object class="GtkComboBox" id="example_selector">
+                    <property name="model">liststore1</property>
                     <property name="visible">True</property>
                   </object>
                   <packing>
@@ -130,4 +131,10 @@
       </object>
     </child>
   </object>
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name str -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
 </interface>
diff --git a/examples/clutter-pad/main.js b/examples/clutter-pad/main.js
index b3961cb..9793f23 100755
--- a/examples/clutter-pad/main.js
+++ b/examples/clutter-pad/main.js
@@ -7,115 +7,32 @@ Clutter = imports.gi.Clutter;
 Gtk = imports.gi.Gtk;
 GtkSource = imports.gi.GtkSource;
 GtkClutter = imports.gi.GtkClutter;
-GtkSource = imports.gi.GtkSource;
 GLib = imports.gi.GLib;
 sandbox = imports.sandbox;
 Gio = imports.gi.Gio;
+GObject = imports.gi.GObject;
 
 Gtk.init(Seed.argv);
 GtkClutter.init(Seed.argv);
 
-var current_filename = "";
-var stage_manager = Clutter.StageManager.get_default();
-
-var gb = new Gtk.Builder();
-gb.add_from_file("clutter-pad.ui");
-
-var window = gb.get_object("window");
-var clutter = gb.get_object("clutter");
-var stage = clutter.get_stage();
-
-function new_file()
-{
-	Seed.print("asdf");
-}
-
-/*(GtkBuilder *builder,
- GObject *object,
- const gchar *signal_name,
- const gchar *handler_name,
- GObject *connect_object,
- GConnectFlags flags,
- gpointer user_data);*/
-
-function connect_signal(builder, object, signal, handler, connect_obj, flags)
-{
-	Seed.print(signal);
-}
-
-window.resize(800, 600);
-window.show_all();
-
-//gb.connect_signals_full(connect_signal);
-
-Gtk.main();
-
-/*
-function evaluate(button)
+function load_file(filename)
 {
-	var children = stage.get_children();
-				
-	for(var id in children)
-		stage.remove_actor(children[id]);
+	new_file();
 	
-    try
-    {
-		error_buf.text = '';
-		var a = new Gtk.TextIter(); var b = new Gtk.TextIter();
-		source_buf.get_selection_bounds(a, b);
-		var slice = source_buf.get_slice(a, b);
-		if (slice == '')
-		{
-			context.destroy();
-			context = new sandbox.Context();
-			context.add_globals();
-			context.eval(source_buf.text)
-		}
-		else
-		{
-			context.eval(slice)
-		}
-    }
-    catch (e)
-    {
-		error_buf.text = e.message;
-    }
-};
-
-function populate_example_selector()
-{
-	file = Gio.file_new_for_path("examples");
-	enumerator = file.enumerate_children("standard::name");
-
-	while((child = enumerator.next_file()))
-	{
-		var fname = child.get_name();
-		if(fname.match(/\.js$/))
-			example_selector.append_text(child.get_name());
-	}
+	current_filename = filename;
+	window.title = "ClutterPad - " + filename;
+	
+	file = Gio.file_new_for_path(filename);
+	source_buf.text = file.read().get_contents();
+	
+	execute_file();
 }
 
 function new_file()
 {
+	window.title = "ClutterPad";
 	current_filename = "";
-	
 	source_buf.text = "GObject = imports.gi.GObject;\nClutter = imports.gi.Clutter;\nstage = Clutter.Stage.get_default();\n";
-	
-	// TODO: cleanse the stage (or make a new one!) each time around...
-	// really should be done in evaluate, though
-	
-	//if(gtkstage)
-		//pane.remove(gtkstage);
-	
-	//gtkstage = new GtkClutter.Embed();
-	//stage = gtkstage.get_stage();
-	
-	pane.add1(gtkstage);
-	
-	//stage_manager.set_default_stage(stage);
-	
-	//gtkstage.show_all();
-	//stage.show_all();
 }
 
 function open_file()
@@ -125,8 +42,8 @@ function open_file()
 	
 	file_filter.add_mime_type("text/javascript");
 	file_chooser.set_filter(file_filter);
-	file_chooser.add_button("Cancel", Gtk.ResponseType.CANCEL);
-	file_chooser.add_button("Open", Gtk.ResponseType.ACCEPT);
+	file_chooser.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL);
+	file_chooser.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT);
 	file_chooser.set_action(Gtk.FileChooserAction.OPEN);
 
 	if(file_chooser.run() == Gtk.ResponseType.ACCEPT)
@@ -137,19 +54,6 @@ function open_file()
 	file_chooser.destroy();
 }
 
-function load_file(filename)
-{
-	new_file();
-	
-	current_filename = filename;
-	window.title = "ClutterPad - " + filename;
-	
-	file = Gio.file_new_for_path(filename);
-	source_buf.text = file.read().get_contents();
-	
-	evaluate();
-}
-
 function save_file(filename)
 {
 	if(current_filename == "")
@@ -159,8 +63,8 @@ function save_file(filename)
 		
 		file_filter.add_mime_type("text/javascript");
 		file_chooser.set_filter(file_filter);
-		file_chooser.add_button("Cancel", Gtk.ResponseType.CANCEL);
-		file_chooser.add_button("Save", Gtk.ResponseType.ACCEPT);
+		file_chooser.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL);
+		file_chooser.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT);
 		file_chooser.set_action(Gtk.FileChooserAction.SAVE);
 
 		if(file_chooser.run() == Gtk.ResponseType.ACCEPT)
@@ -185,87 +89,91 @@ function save_file(filename)
 	}
 }
 
+function populate_example_selector(selector)
+{
+	// Since we're using GtkBuilder, we can't make a Gtk.ComboBox.text. Instead,
+	// we'll construct the cell renderer here, once, and use that.
+	var cell = new Gtk.CellRendererText();
+	selector.pack_start(cell, true);
+	selector.add_attribute(cell, "text", 0);
+
+	file = Gio.file_new_for_path("examples");
+	enumerator = file.enumerate_children("standard::name");
+
+	while((child = enumerator.next_file()))
+	{
+		var fname = child.get_name();
+		if(fname.match(/\.js$/))
+			selector.append_text(child.get_name());
+	}
+}
+
 function select_example(selector, ud)
 {
 	load_file("examples/" + selector.get_active_text());
 }
 
-var window = new Gtk.Window({title:"ClutterPad"});
-window.signal.destroy.connect(function(o) {Gtk.main_quit()});
-var vbox = new Gtk.VBox();
-
-var gtkstage = new GtkClutter.Embed();
-var stage = gtkstage.get_stage();
-	
-stage_manager.set_default_stage(stage);
+function execute_file(button)
+{
+	var children = stage.get_children();
+				
+	for(var id in children)
+		stage.remove_actor(children[id]);
 	
-var right = new Gtk.VBox();
-
-var toolbar = new Gtk.HBox();
-var new_button = new Gtk.ToolButton({stock_id:"gtk-new"});
-var open_button = new Gtk.ToolButton({stock_id:"gtk-open"});
-var save_button = new Gtk.ToolButton({stock_id:"gtk-save"});
-var example_selector = new Gtk.ComboBox.text();
-var run_button = new Gtk.ToolButton({stock_id:"gtk-execute"});
-
-new_button.signal.clicked.connect(new_file);
-open_button.signal.clicked.connect(open_file);
-save_button.signal.clicked.connect(save_file);
-example_selector.signal.changed.connect(select_example);
-run_button.signal.clicked.connect(evaluate);
-
-toolbar.pack_start(new_button);
-toolbar.pack_start(open_button);
-toolbar.pack_start(save_button);
-toolbar.pack_start(example_selector, true, true);
-toolbar.pack_start(run_button);
-
-populate_example_selector();
+    try
+    {
+		error_buf.text = '';
+		var a = new Gtk.TextIter(); var b = new Gtk.TextIter();
+		source_buf.get_selection_bounds(a, b);
+		var slice = source_buf.get_slice(a, b);
+		if (slice == '')
+		{
+			context.destroy();
+			context = new sandbox.Context();
+			context.add_globals();
+			context.eval(source_buf.text)
+		}
+		else
+		{
+			context.eval(slice)
+		}
+    }
+    catch (e)
+    {
+		error_buf.text = e.message;
+    }
+};
 
+var current_filename = "";
+var stage_manager = Clutter.StageManager.get_default();
 var source_lang_mgr = new GtkSource.SourceLanguageManager();
 var js_lang = source_lang_mgr.get_language("js");
-
-var source_buf = new GtkSource.SourceBuffer({language: js_lang});
-var source_view = new GtkSource.SourceView.with_buffer(source_buf);
-
-source_view.set_show_line_numbers(true);
-source_view.set_show_right_margin(true);
-source_view.set_highlight_current_line(true);
-source_view.set_right_margin_position(80);
-
-var scrolled_window_frame = new Gtk.Frame();
-var scrolled_window = new Gtk.ScrolledWindow({vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
-					      hscrollbar_policy: Gtk.PolicyType.AUTOMATIC});
-scrolled_window.add(source_view);
-scrolled_window_frame.add(scrolled_window);
-
-var error_frame = new Gtk.Frame();
-var error_view = new Gtk.TextView();
-var error_buf = error_view.get_buffer();
-error_view.set_editable(false);
-error_view.set_size_request(null, 100);
-error_frame.add(error_view);
-
-right.pack_start(toolbar);
-right.pack_start(scrolled_window_frame, true, true);
-right.pack_start(error_frame);
-
 var context = new sandbox.Context();
 context.add_globals();
 
-var pane = new Gtk.HPaned({position: 400});
+var ui = new Gtk.Builder();
+ui.add_from_file("clutter-pad.ui");
 
-pane.add1(gtkstage);
-pane.add2(right);
+var window = ui.get_object("window");
+var clutter = ui.get_object("clutter");
+var stage = clutter.get_stage();
+stage_manager.set_default_stage(stage);
 
-vbox.pack_start(pane, true, true);
+var error_buf = ui.get_object("error_view").get_buffer();
+var source_buf = new GtkSource.SourceBuffer({language: js_lang});
 
-window.resize(800, 600);
+populate_example_selector(ui.get_object("example_selector"));
 
-window.add(vbox);
+ui.get_object("new_button").signal.clicked.connect(new_file);
+ui.get_object("open_button").signal.clicked.connect(open_file);
+ui.get_object("save_button").signal.clicked.connect(save_file);
+ui.get_object("example_selector").signal.changed.connect(select_example);
+ui.get_object("execute_button").signal.clicked.connect(execute_file);
 
-new_file();
+ui.get_object("source_view").set_buffer(source_buf);
 
+window.resize(800, 600);
 window.show_all();
 
-Gtk.main();*/
+Gtk.main();
+



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