From: Leslie Viljoen Date: 2008-06-08T02:34:31+09:00 Subject: Glader: quick .glade -> Ruby Here's a tiny script I wrote to go the last mile when generating Ruby programs to make use of Glade forms. The ruby-glade-create-template program that comes in the libglade2-ruby.18 package creates an example program that will be overwritten each time the script is re-run. Glader makes a script that uses the example program, allowing you to repeatedly save your .glade file, convert it and "run" it to see changes. I hope that makes sense to *someone* Example session: ---------------------- lesliev@lesliev-laptop:~/glade_test/calbox$ ./glader.rb layout.glade Making class file (layout_glade.rb)... Making main file (layout.rb)... lesliev@lesliev-laptop:~/glade_test/calbox$ ruby layout.rb (to play with the form) ...now you can edit and re-save your .glade form and quickly regen without overwriting any of your changes to layout.rb by running glader again. Glader: --------- #!/usr/bin/ruby -w # This class is a quick way of creating a runnable Ruby program from # a single Glade form. # class Glader def initialize(glade_filename) raise ArgumentError.new("File missing: #{glade_filename}") if !File.exist?(glade_filename) raise ArgumentError.new("Not a .glade file: #{glade_filename}") if glade_filename !~ /.*\.glade/ @glade_filename = glade_filename @base_filename = File.basename(@glade_filename, ".glade") @class_filename = @base_filename + "_glade.rb" end # Runs the ruby-glade-create-template script to create a file with a # class that corresponds to the form. This can be called repeatedly # to keep creating the class every time the .glade file changes. # def make_class `/usr/bin/ruby-glade-create-template #{@glade_filename} > #{@class_filename}` @class_filename end # Creates a main program that uses the glade class created with # _make_class_ and opens the window with the form. It will do nothing # if the main program file already exists, since the user is likely # to add code to this file. # def make_main main_filename = @base_filename + '.rb' if(File.exist?(main_filename)) raise ArgumentError.new("#{main_filename} already exists, skipping") else File.open(main_filename, "w") {|f| f.write generate_main} end main_filename end private def generate_main() class_name = File.read(@class_filename).scan(/class (.*)/).to_s window_id = File.read(@glade_filename).scan(/class="GtkWindow" id="(\w*)">/).to_s main =<" puts exit end glader = Glader.new(ARGV[0]) print "Making class file (#{glader.make_class})...\n" begin print "Making main file (#{glader.make_main})...\n" rescue => e puts e.message end puts end