X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;f=scripts%2Fvym-ruby.rb;h=bf91f0be31a536cc8b32776d73b6a374116b565c;hb=d483bd8e6523c23c6f1d8908a2e0611c2bc9ff4f;hp=44d7410dee021486c84eb45ca2b34ce720ba11b0;hpb=7dfa3fe589d1722d49681f42cdb0bf1e6efb5223;p=sven%2Fvym.git diff --git a/scripts/vym-ruby.rb b/scripts/vym-ruby.rb index 44d7410..bf91f0b 100644 --- a/scripts/vym-ruby.rb +++ b/scripts/vym-ruby.rb @@ -1,92 +1,140 @@ require 'dbus' +require 'pp' -$deb = false +$debug = false class Vym def initialize (name) @dbus = DBus::SessionBus.instance @service = @dbus.service(name) @service.introspect - @main = @service.object('vym') + @main = @service.object('/vym') @main.introspect @main.default_iface = "org.insilmaril.vym.main.adaptor" # Use metaprogramming to create methods for commands in vym - if modelCount > 0 - m = model(1) - m.default_iface = "org.insilmaril.vym.model.adaptor" - s=m.listCommands - @model_commands = s[0].split "," - @model_commands.each do |c| - self.class.send(:define_method, c) do |*pars| - if pars.length == 0 - puts " * Calling \"#{c}\":" if $deb - ret = m.execute("#{c} ()") - else - # Build string with parameters - p = ""; - a = [] - pars.each do |p| - if p.kind_of? String - a << "'#{p}'" - else - a << p - end - end - puts " * Calling \"#{c} (#{a.join(',')})\":" if $deb - ret = m.execute("#{c} (#{a.join(',')})") - end - - err = m.errorLevel[0] - if $deb - puts " Returned: #{ret[0]}" if ret[0] != "" - puts " Error: #{err}" if err > 0 - end - ret[0] - end + # Getting commands for mainwindow via DBUS + puts "Vym::initialize Retrieving commands via dbus..." if $debug + s = @main.listCommands + @vym_commands = s[0].split "," + @vym_commands.each do |c| + puts "Creating vym command: #{c}" if $debug + self.class.send(:define_method, c) do |*pars| + if pars.length == 0 + # No parameters + com = "vym.#{c}();" + puts " * Calling vym: \"#{com}\":" if $debug + ret = @main.execute( com ) + else + # with parameters + p = ""; + a = [] + pars.each do |p| + if p.kind_of? String + a << "'#{p}'" + else + a << p + end + end + com = "vym.#{c} (#{a.join(',')});" + puts " ** Calling vym: \"#{com}\":" if $debug + ret = @main.execute( com ) + end + + #FIXME-2 err = m.errorLevel[0] + if $debug + puts " Returned: #{ret[0]}" if ret[0] != "" + # puts " Error: #{err}" if err > 0 + end + ret[0] end - end + end # Creating vym commands + end + + def mapCount + @main.mapCount[0] end - def modelCount - @main.modelCount[0] + def currentMapID + return @main.currentMapID[0] end - def model (n) - if modelCount > 0 && n>=0 - @model = @service.object "vymmodel_#{n}" - @model.default_iface = "org.insilmaril.vym.model.adaptor" - return @model + def map (n) + #puts "def map: @service.object(\"/vymmodel_#{n}\")" + map = @service.object("/vymmodel_#{n}") + map.introspect + map.default_iface = "org.insilmaril.vym.model.adaptor" + + if mapCount() > 0 && n >= 0 + return VymMap.new(map, n ) else - raise "Error: Model #{n} not accessible in #{@instance}!" - end + raise "Error: Map #{n} not accessible in #{@instance}!" + end end def show_methods puts "Main methods:" @main[@main.default_iface].methods.each do |k,v| - puts " #{k}" + puts " - #{k}" end - if modelCount > 0 - @model= @service.object 'vymmodel_1' - @model.default_iface = "org.insilmaril.vym.model.adaptor" - puts "Model methods:" - @model[@model.default_iface].methods.each do |k,v| - puts " #{k}" - end - else - puts "No model!" - end end end + +class VymMap + def initialize(map, n ) + @map = map + + # Getting commands for model via DBUS + #if mapCount() > 0 + # m = model(1) + s = @map.listCommands + puts "VymMap::initialize Retrieving commands via dbus..." if $debug + @model_commands = s[0].split "," + @model_commands.each do |c| + #puts "Creating map command: #{c}" if $debug + self.class.send(:define_method, c) do |*pars| + if pars.length == 0 + # No parameters + com = "vym.currentMap().#{c}();" + puts " * Calling model: \"#{com}\":" if $debug + ret = @map.execute( com ) + else + # Build string with parameters + p = ""; + a = [] + pars.each do |p| + if p.kind_of? String + a << "'#{p}'" + else + a << p + end + end + # com = "vym.clearConsole(); print( vym.currentMap().#{c} (#{a.join(',')}));" + com = " vym.currentMap().#{c} (#{a.join(',')});" + puts " ** Calling model: \"#{com}\":" if $debug + ret = @map.execute( com ) + puts "Done calling" if $debug + end + + #FIXME-2 err = m.errorLevel[0] + if $debug + puts " Returned: #{ret[0]}" if ret[0] != "" + #puts " Error: #{err}" if err > 0 + end + ret[0] + end + end + end # Initialize +end # VymMap + class VymManager def initialize @dbus = DBus::SessionBus.instance end def running - list=@dbus.proxy.ListNames[0].find_all{|item| item =~/org\.insilmaril\.vym/ } + list = @dbus.proxy.ListNames[0].find_all{|item| item =~/org\.insilmaril\.vym/ } end def show_running @@ -95,25 +143,26 @@ class VymManager def find (name) list = running - #puts "Running vyms: #{list.length}" if list.length == 0 return nil end for i in (0...list.length) vym_service = @dbus.service(list.at(i)) - vym_service.introspect - vym_main_obj = vym_service.object("vym"); + + vym_main_obj = vym_service.object("/vym"); + vym_main_obj.introspect vym_main_obj.default_iface = "org.insilmaril.vym.main.adaptor" - if vym_main_obj.getInstanceName[0] == name - #puts "Found instance named '#{name}': #{list.at(i)}" + if vym_main_obj.getInstanceName[0] == name + puts "VymManager: Found instance named '#{name}': #{list.at(i)}" if $debug return Vym.new list.at(i) - end + end end - #raise "Could not find instance named \"test\"" + + raise "Could not find instance named \"test\"" return nil end end