Removed RCS-style IDs.
[redact.git] / lib / redact / program.rb
index 78f2ca960a3904912650ea32daa252979e99b9ad..abcc79e8a9bb7572415ec3fce8ebf83974b17196 100644 (file)
@@ -1,6 +1,4 @@
 #--
-# $Id: program.rb 1 2005-03-26 01:32:38Z 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,13 +100,8 @@ module Redact
        end
 
        class SetStateProgram < Program
-               MODE_LINEAR = 1
-               MODE_SINUSOIDAL = 2
-               MODE_ACCELERATE = 3
-               MODE_DECELERATE = 4
-
-               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,16 +109,50 @@ module Redact
                        @type = TYPE_SET_STATE
                        @state = "default"
                        @value = 0.0
-                       @mode = MODE_LINEAR
+                       @mode = :linear
                        @time = 0.0
                        @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
+                       when :sinusoidal: 2
+                       when :accelerate: 3
+                       when :decelerate: 4
+                       else
+                               raise(RedactError, "invalid mode - #{@mode}")
+                       end
+
                        super.merge!(
                        {"state" => [@state],
                         "value" => [@value, :double],
-                        "tween.mode" => [@mode],
+                        "tween.mode" => [mode],
                         "tween.time" => [@time, :double],
                         "targets" => [@targets]})
                end
@@ -110,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],
@@ -134,7 +200,7 @@ module Redact
        end
 
        class ExecScriptProgram < Program
-               attr_accessor :script
+               attr_reader :script
 
                def initialize(collection, id, name)
                        super
@@ -142,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
@@ -168,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