Removed RCS-style IDs.
[redact.git] / lib / redact / program.rb
index d6038d9646b82d17c75a499fa3e361d8d87884fa..abcc79e8a9bb7572415ec3fce8ebf83974b17196 100644 (file)
@@ -1,6 +1,4 @@
 #--
-# $Id: program.rb 23 2005-04-02 23:20:32Z tilman $
-#
 # Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
 #
 # Permission is hereby granted, free of charge, to any person obtaining
@@ -35,8 +33,8 @@ module Redact
 
                include Comparable
 
-               attr_reader :collection, :id, :name, :after
-               attr_accessor :signal, :source, :in_from, :in_range
+               attr_reader :collection, :id, :name, :after, :signal, :source,
+                           :in_from, :in_range
 
                def initialize(collection, id, name)
                        @collection = collection
@@ -56,6 +54,35 @@ module Redact
                        @id <=> b.id
                end
 
+               def signal=(v)
+                       @signal = v.to_str.dup
+               end
+
+               def source=(v)
+                       @source = v.to_str.dup
+               end
+
+               def in_from=(v)
+                       unless v.is_a?(Float)
+                               raise(ArgumentError,
+                                     "wrong argument type #{v.class.name} " +
+                                     "(expected Float)")
+                       end
+
+                       @in_from = v
+               end
+
+               def in_range=(v)
+                       unless v.is_a?(Float)
+                               raise(ArgumentError,
+                                     "wrong argument type #{v.class.name} " +
+                                     "(expected Float)")
+                       end
+
+                       @in_range = v
+               end
+
+               protected
                def to_eet_name
                        "Edje_Program"
                end
@@ -73,8 +100,8 @@ module Redact
        end
 
        class SetStateProgram < Program
-               attr_reader :targets
-               attr_accessor :state, :value, :mode, :time
+               attr_reader :targets, :state, :value, :time
+               attr_accessor :mode
 
                def initialize(collection, id, name)
                        super
@@ -87,6 +114,31 @@ module Redact
                        @targets = ProgramArgs.new(collection)
                end
 
+               def state=(v)
+                       @state = v.to_str.dup
+               end
+
+               def value=(v)
+                       unless v.is_a?(Float)
+                               raise(ArgumentError,
+                                     "wrong argument type #{v.class.name} " +
+                                     "(expected Float)")
+                       end
+
+                       @value = v
+               end
+
+               def time=(v)
+                       unless v.is_a?(Float)
+                               raise(ArgumentError,
+                                     "wrong argument type #{v.class.name} " +
+                                     "(expected Float)")
+                       end
+
+                       @time = v
+               end
+
+               protected
                def to_eet_properties
                        mode = case @mode
                        when :linear: 1
@@ -114,22 +166,32 @@ module Redact
                        @targets = ProgramArgs.new(collection)
                end
 
+               protected
                def to_eet_properties
                        super.merge!({"targets" => [@targets]})
                end
        end
 
        class EmitSignalProgram < Program
-               attr_accessor :emission_signal, :emission_source
+               attr_reader :emission_signal, :emission_source
 
                def initialize(collection, id, name)
                        super
 
                        @type = TYPE_EMIT_SIGNAL
-                       @emission_signal = nil
-                       @emission_source = nil
+                       @emission_signal = ""
+                       @emission_source = ""
+               end
+
+               def emission_signal=(v)
+                       @emission_signal = v.to_str.dup
                end
 
+               def emission_source=(v)
+                       @emission_source = v.to_str.dup
+               end
+
+               protected
                def to_eet_properties
                        super.merge!(
                        {"state" => [@emission_signal],
@@ -138,7 +200,7 @@ module Redact
        end
 
        class ExecScriptProgram < Program
-               attr_accessor :script
+               attr_reader :script
 
                def initialize(collection, id, name)
                        super
@@ -146,6 +208,11 @@ module Redact
                        @type = TYPE_EXEC_SCRIPT
                        @script = nil
                end
+
+               def script=(v)
+                       v = v.to_str
+                       @script = (File.exist?(v) ? File.read(v) : v).dup
+               end
        end
 
        class ProgramArgs < Array
@@ -172,18 +239,21 @@ module Redact
                        @id = v.id
                end
 
+               protected
                def to_eet_properties
                        {"id" => [@id]}
                end
        end
 
        class ProgramAfter < ProgramArg
+               protected
                def to_eet_name
                        "Edje_Program_After"
                end
        end
 
        class ProgramTarget < ProgramArg
+               protected
                def to_eet_name
                        "Edje_Program_Target"
                end