samples/elaborate/meta_sample.rb in glimmer-dsl-swt-4.17.10.8 vs samples/elaborate/meta_sample.rb in glimmer-dsl-swt-4.18.0.0

- old
+ new

@@ -1,6 +1,7 @@ require 'fileutils' +require 'etc' class Sample include Glimmer::DataBinding::ObservableModel attr_accessor :sample_directory, :file, :selected @@ -31,27 +32,33 @@ def reset_code! @code = File.read(file) notify_observers('code') end + def editable + File.basename(file) != 'meta_sample.rb' + end + alias launchable editable + def launch(modified_code) - modified_file = File.join(File.dirname(file), ".#{File.basename(file)}") + parent_directory = File.basename(File.dirname(file)) + modified_file_parent_directory = File.join(Etc.getpwuid.dir, '.glimmer', 'samples', parent_directory) + launch_file = modified_file = File.join(modified_file_parent_directory, File.basename(file)) begin + FileUtils.mkdir_p(modified_file_parent_directory) + FileUtils.cp_r(file, modified_file_parent_directory) + FileUtils.cp_r(file.sub(/\.rb/, ''), modified_file_parent_directory) if File.exist?(file.sub(/\.rb/, '')) File.write(modified_file, modified_code) - begin - load(modified_file) - rescue StandardError, SyntaxError => launch_error - message_box { - text 'Error Launching' - message launch_error.full_message - }.open - end - rescue - load(file) # load original file if failed to write changes - ensure - FileUtils.rm_rf(modified_file) + rescue => e + puts 'Error writing sample modifications. Launching original sample.' + puts e.full_message + launch_file = file # load original file if failed to write changes end + load(launch_file) + ensure + FileUtils.rm_rf(modified_file) + FileUtils.rm_rf(modified_file.sub(/\.rb/, '')) end end class SampleDirectory class << self @@ -147,11 +154,14 @@ minimum_size 1280, 768 text 'Glimmer Meta-Sample (The Sample of Samples)' sash_form { composite { - grid_layout 1, false + grid_layout(1, false) { + margin_width 0 + margin_height 0 + } expand_bar { layout_data(:fill, :fill, true, true) font height: 30 @@ -178,25 +188,37 @@ } button { text 'Launch' font height: 30 + enabled bind(SampleDirectory, 'selected_sample.launchable') + on_widget_selected { - SampleDirectory.selected_sample.launch(@code_text.text) + begin + SampleDirectory.selected_sample.launch(@code_text.text) + rescue StandardError, SyntaxError => launch_error + message_box { + text 'Error Launching' + message launch_error.full_message + }.open + end } } button { text 'Reset' font height: 30 + enabled bind(SampleDirectory, 'selected_sample.editable') + on_widget_selected { SampleDirectory.selected_sample.reset_code! } } } } @code_text = code_text { text bind(SampleDirectory, 'selected_sample.code', read_only: true) + editable bind(SampleDirectory, 'selected_sample.editable') } weights 4, 9 } }.open