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