[seed] ClutterPad: Implement new/open/save file, redo UI, start examples collection.
- From: Tim Horton <hortont src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] ClutterPad: Implement new/open/save file, redo UI, start examples collection.
- Date: Wed, 13 May 2009 08:30:32 -0400 (EDT)
commit 9b32bbf8ceaa5213bae8c051b633de23beddc320
Author: Tim Horton <hortont svn gnome org>
Date: Wed May 13 08:29:57 2009 -0400
ClutterPad: Implement new/open/save file, redo UI, start examples collection.
---
configure.ac | 1 +
examples/Makefile.am | 1 +
examples/clutter-pad-examples/Makefile.am | 11 ++
examples/clutter-pad-examples/blue-stage.js | 7 +
examples/clutter-pad-examples/pink-stage.js | 7 +
examples/clutter-pad.js | 213 ++++++++++++++++++++++-----
6 files changed, 201 insertions(+), 39 deletions(-)
diff --git a/configure.ac b/configure.ac
index d5422ba..ee5d211 100644
--- a/configure.ac
+++ b/configure.ac
@@ -322,6 +322,7 @@ doc/tutorial-standalone/Makefile
doc/reference/Makefile
doc/mapping/Makefile
examples/Makefile
+examples/clutter-pad-examples/Makefile
examples/clutter-shader/Makefile
examples/clutter-transitions/Makefile
examples/glib/Makefile
diff --git a/examples/Makefile.am b/examples/Makefile.am
index bc4cee5..464f9f9 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,5 +1,6 @@
SUBDIRS = \
browser \
+ clutter-pad-examples \
clutter-shader \
clutter-transitions \
dbus \
diff --git a/examples/clutter-pad-examples/Makefile.am b/examples/clutter-pad-examples/Makefile.am
new file mode 100644
index 0000000..03ee85b
--- /dev/null
+++ b/examples/clutter-pad-examples/Makefile.am
@@ -0,0 +1,11 @@
+if BUILD_SEED_EXAMPLES
+clutterpadexamplesdir=$(datadir)/doc/seed/examples/clutter-pad-examples
+clutterpadexamples_DATA = \
+ blue-stage.js \
+ pink-stage.js
+endif
+
+EXTRA_DIST = \
+ blue-stage.js \
+ pink-stage.js
+
diff --git a/examples/clutter-pad-examples/blue-stage.js b/examples/clutter-pad-examples/blue-stage.js
new file mode 100644
index 0000000..71c478d
--- /dev/null
+++ b/examples/clutter-pad-examples/blue-stage.js
@@ -0,0 +1,7 @@
+Clutter = imports.gi.Clutter;
+stage = Clutter.Stage.get_default();
+
+var blue = new Clutter.Color();
+blue.from_string("blue");
+
+stage.color = blue;
diff --git a/examples/clutter-pad-examples/pink-stage.js b/examples/clutter-pad-examples/pink-stage.js
new file mode 100644
index 0000000..59dd3a9
--- /dev/null
+++ b/examples/clutter-pad-examples/pink-stage.js
@@ -0,0 +1,7 @@
+Clutter = imports.gi.Clutter;
+stage = Clutter.Stage.get_default();
+
+var pink = new Clutter.Color();
+pink.from_string("pink");
+
+stage.color = pink;
diff --git a/examples/clutter-pad.js b/examples/clutter-pad.js
index 2a372b6..0eefd7f 100755
--- a/examples/clutter-pad.js
+++ b/examples/clutter-pad.js
@@ -1,4 +1,5 @@
#!/usr/bin/env seed
+
imports.gi.versions.Clutter = "0.9";
imports.gi.versions.GtkClutter = "0.9";
@@ -9,84 +10,218 @@ GtkClutter = imports.gi.GtkClutter;
GtkSource = imports.gi.GtkSource;
GLib = imports.gi.GLib;
sandbox = imports.sandbox;
+Gio = imports.gi.Gio;
Gtk.init(Seed.argv);
GtkClutter.init(Seed.argv);
-var window = new Gtk.Window();
+var current_filename = "";
+var stage, gtkstage = null;
+var stage_manager = Clutter.StageManager.get_default();
+
+function evaluate(button)
+{
+ 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("clutter-pad-examples");
+ enumerator = file.enumerate_children("standard::name");
+
+ while((child = enumerator.next_file()))
+ example_selector.append_text(child.get_name());
+}
+
+function new_file()
+{
+ current_filename = "";
+
+ // TODO: cleanse the stage (or make a new one!) each time around...
+
+ //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()
+{
+ var file_chooser = new Gtk.FileChooserDialog();
+ var file_filter = new Gtk.FileFilter();
+
+ 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.set_action(Gtk.FileChooserAction.OPEN);
+
+ if(file_chooser.run() == Gtk.ResponseType.ACCEPT)
+ {
+ load_file(file_chooser.get_filename());
+ }
+
+ 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 == "")
+ {
+ var file_chooser = new Gtk.FileChooserDialog();
+ var file_filter = new Gtk.FileFilter();
+
+ 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.set_action(Gtk.FileChooserAction.SAVE);
+
+ if(file_chooser.run() == Gtk.ResponseType.ACCEPT)
+ {
+ current_filename = file_chooser.get_filename();
+ window.title = "ClutterPad - " + current_filename;
+ }
+
+ file_chooser.destroy();
+ }
+
+ if(current_filename != "")
+ {
+ try
+ {
+ Gio.simple_write(current_filename, source_buf.text);
+ }
+ catch(e)
+ {
+ Seed.print(e.message);
+ }
+ }
+}
+
+function select_example(selector, ud)
+{
+ load_file("clutter-pad-examples/" + selector.get_active_text());
+}
+
+var window = new Gtk.Window({title:"ClutterPad"});
window.signal.destroy.connect(function(o) {Gtk.main_quit()});
-var gtkstage = new GtkClutter.Embed();
-var stage = gtkstage.get_stage();
var vbox = new Gtk.VBox();
+var gtkstage = new GtkClutter.Embed();
+var stage = gtkstage.get_stage();
+
+stage_manager.set_default_stage(stage);
+
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();
+
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_buf.text = 'Clutter = imports.gi.Clutter;\nstage = Clutter.Stage.get_default();\nvar pink = new Clutter.Color();\npink.from_string("pink");\nstage.color = pink;';
+
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 run = new Gtk.Button({label: "run"});
+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(scrolled_window, true, true);
-right.pack_start(run);
-right.pack_start(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 evaluate = function(button) {
- 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;
- }
-};
-
-run.signal.clicked.connect(evaluate);
-
-var pane = new Gtk.HPaned();
+var pane = new Gtk.HPaned({position: 400});
pane.add1(gtkstage);
pane.add2(right);
-pane.set_position(400);
-
-gtkstage.set_size_request(800,600);
vbox.pack_start(pane, true, true);
+window.resize(800, 600);
+
window.add(vbox);
-window.show_all();
-stage.show_all();
+new_file();
-stage_manager = Clutter.StageManager.get_default();
-stage_manager.set_default_stage(stage);
+window.show_all();
-evaluate();
Gtk.main();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]