Class: UIC::Application::StateMachine

Inherits:
StateMachine show all
Extended by:
ElementBacked::ClassMethods
Includes:
ElementBacked
Defined in:
lib/ruic/statemachine.rb

Defined Under Namespace

Classes: VisualState, VisualStates, VisualTransition, VisualTransitions

Instance Attribute Summary collapse

Attributes included from ElementBacked

#el, #owner

Attributes included from FileBacked

#doc, #file

Instance Method Summary collapse

Methods included from ElementBacked::ClassMethods

xmlattribute

Methods inherited from StateMachine

#errors, #errors?

Methods included from FileBacked

#file_found?, #filename, #path_to, #save!, #save_as, #to_xml

Constructor Details

#initialize(application, el) ⇒ StateMachine

Returns a new instance of StateMachine.



29
30
31
32
33
34
35
36
37
38
# File 'lib/ruic/statemachine.rb', line 29

def initialize(application,el)
	self.owner = application
	self.el    = el
	self.file  = application.path_to(src)
	super( File.read( file, encoding:'utf-8' ) )
	@visuals = @doc.at( "/application/statemachine[@ref='##{id}']/visual-states" )
	@visuals ||= @doc.root.add_child("<statemachine ref='##{id}'><visual-states/></statemachine>")
	@visual_states      = VisualStates.new( self, @visuals )
	@visual_transitions = VisualTransitions.new( self, @visuals )
end

Instance Attribute Details

#visual_statesObject (readonly)

Returns the value of attribute visual_states.



27
28
29
# File 'lib/ruic/statemachine.rb', line 27

def visual_states
  @visual_states
end

#visual_transitionsObject (readonly)

Returns the value of attribute visual_transitions.



28
29
30
# File 'lib/ruic/statemachine.rb', line 28

def visual_transitions
  @visual_transitions
end

Instance Method Details

#image_usageObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/ruic/statemachine.rb', line 41

def image_usage
	(
		visual_states.flat_map{ |vs| vs.enter_actions.flat_map{ |a| [a,vs] } } +
		visual_states.flat_map{ |vs| vs.exit_actions.flat_map{ |a| [a,vs] } } +
		visual_transitions.flat_map{ |vt| vt.actions.flat_map{ |a| [a,vt] } }
	).select do |visual_action,owner|
		visual_action.is_a?(UIC::Application::StateMachine::VisualAction::SetAttribute) &&
		visual_action.value[/\A(['"])[^'"]+\1\Z/] && # ensure that it's a simple string value
		visual_action.element.properties[ visual_action.attribute ].is_a?( UIC::Property::Image )
	end.group_by do |visual_action,owner|
		visual_action.value[/\A(['"])([^'"]+)\1\Z/,2]
	end.each do |image_path,array|
		array.map!(&:last)
	end
end