class MetaExample
Constants
- ADDITIONAL_BASIC_EXAMPLES
Attributes
code_text[RW]
Public Class Methods
new()
click to toggle source
# File examples/meta_example.rb, line 12 def initialize @selected_example_index = examples_with_versions.index(basic_examples_with_versions.first) @code_text = File.read(file_path_for(selected_example)) end
Public Instance Methods
advanced_examples()
click to toggle source
# File examples/meta_example.rb, line 31 def advanced_examples (examples - basic_examples).sort end
advanced_examples_with_versions()
click to toggle source
# File examples/meta_example.rb, line 43 def advanced_examples_with_versions append_versions(advanced_examples) end
append_versions(examples)
click to toggle source
# File examples/meta_example.rb, line 47 def append_versions(examples) examples.map { |example| version_count_for(example) > 1 ? "#{example} (#{version_count_for(example)} versions)" : example } end
basic_examples()
click to toggle source
# File examples/meta_example.rb, line 27 def basic_examples examples.select {|example| example.start_with?('Basic') || ADDITIONAL_BASIC_EXAMPLES.include?(example) }.sort end
basic_examples_with_versions()
click to toggle source
# File examples/meta_example.rb, line 39 def basic_examples_with_versions append_versions(basic_examples) end
examples()
click to toggle source
# File examples/meta_example.rb, line 17 def examples if @examples.nil? example_files = Dir.glob(File.join(File.expand_path('.', __dir__), '*.rb')) example_file_names = example_files.map { |f| File.basename(f, '.rb') } example_file_names = example_file_names.reject { |f| f == 'meta_example' || f.match(/\d$/) } @examples = example_file_names.map { |f| f.underscore.titlecase } end @examples end
examples_with_versions()
click to toggle source
# File examples/meta_example.rb, line 35 def examples_with_versions append_versions(examples) end
file_path_for(example)
click to toggle source
# File examples/meta_example.rb, line 51 def file_path_for(example) File.join(File.expand_path('.', __dir__), "#{example.underscore}.rb") end
glimmer_dsl_libui_file()
click to toggle source
# File examples/meta_example.rb, line 59 def glimmer_dsl_libui_file File.expand_path('../lib/glimmer-dsl-libui', __dir__) end
launch()
click to toggle source
# File examples/meta_example.rb, line 84 def launch window('Meta-Example', 1000, 500) { margined true horizontal_box { vertical_box { stretchy false tab { stretchy false tab_item('Basic') { vertical_box { @basic_example_radio_buttons = radio_buttons { stretchy false items basic_examples_with_versions selected basic_examples_with_versions.index(examples_with_versions[@selected_example_index]) on_selected do @selected_example_index = examples_with_versions.index(basic_examples_with_versions[@basic_example_radio_buttons.selected]) example = selected_example self.code_text = File.read(file_path_for(example)) @version_spinbox.value = 1 @advanced_example_radio_buttons.selected = -1 end } label # filler label # filler } } tab_item('Advanced') { vertical_box { @advanced_example_radio_buttons = radio_buttons { stretchy false items advanced_examples_with_versions selected -1 on_selected do @selected_example_index = examples_with_versions.index(advanced_examples_with_versions[@advanced_example_radio_buttons.selected]) example = selected_example self.code_text = File.read(file_path_for(example)) @version_spinbox.value = 1 @basic_example_radio_buttons.selected = -1 end } label # filler label # filler } } } horizontal_box { label('Version') { stretchy false } @version_spinbox = spinbox(1, 100) { value 1 on_changed do example = selected_example if @version_spinbox.value > version_count_for(example) @version_spinbox.value -= 1 else version_number = @version_spinbox.value == 1 ? '' : @version_spinbox.value example = "#{selected_example}#{version_number}" self.code_text = File.read(file_path_for(example)) end end } } horizontal_box { stretchy false button('Launch') { on_clicked do begin parent_dir = File.join(Dir.home, '.glimmer-dsl-libui', 'examples') FileUtils.mkdir_p(parent_dir) example_file = File.join(parent_dir, "#{selected_example.underscore}.rb") File.write(example_file, code_text) example_supporting_directory = File.expand_path(selected_example.underscore, __dir__) FileUtils.cp_r(example_supporting_directory, parent_dir) if Dir.exist?(example_supporting_directory) FileUtils.cp_r(File.expand_path('../icons', __dir__), File.dirname(parent_dir)) FileUtils.cp_r(File.expand_path('../sounds', __dir__), File.dirname(parent_dir)) run_example(example_file) rescue => e puts e.full_message puts 'Unable to write code changes! Running original example...' run_example(file_path_for(selected_example)) end end } button('Reset') { on_clicked do version_number = @version_spinbox.value == 1 ? '' : @version_spinbox.value example = "#{selected_example}#{version_number}" self.code_text = File.read(file_path_for(example)) end } } } @code_entry = non_wrapping_multiline_entry { text <=> [self, :code_text] } } }.show end
run_example(example)
click to toggle source
# File examples/meta_example.rb, line 67 def run_example(example) Thread.new do command = "#{RbConfig.ruby} -r #{glimmer_dsl_libui_file} #{example} 2>&1" result = '' IO.popen(command) do |f| sleep(0.00001) # yield to main thread f.each_line do |line| result << line puts line $stdout.flush # for Windows sleep(0.00001) # yield to main thread end end Glimmer::LibUI.queue_main { msg_box('Error Running Example', result) } if result.downcase.include?('error') end end
selected_example()
click to toggle source
# File examples/meta_example.rb, line 63 def selected_example examples[@selected_example_index] end
version_count_for(example)
click to toggle source
# File examples/meta_example.rb, line 55 def version_count_for(example) Dir.glob(File.join(File.expand_path('.', __dir__), "#{example.underscore}*.rb")).select {|file| file.match(/#{example.underscore}\d\.rb$/)}.count + 1 end