123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- module Zori
- # State manages the current state of a widget or Hanao.
- module State
- def initialize(params={}, &block)
- super(params, &block)
- @state = :active
- @mark = false
- @hover = false
- end
-
- # Hides the widget and all it's children
- def hide
- @components.each do |comp|
- comp.hide_component
- end
- @state = :hidden
- unmark
- unhover
- hide_graph
- end
- # Hides a child component. This hides only the graph, and does not
- # touch the @hidden field
- def hide_component
- @components.each do |comp|
- comp.hide_component
- end
- hide_graph
- end
- # Shows the widget and all it's children
- def show
- @components.each do |comp|
- comp.show_component
- end
- @state = :active
- show_graph
- end
- # Shows a child component, but only if it isn't hidden itself.
- def show_component
- if hidden?
- return
- end
- @components.each do |comp|
- comp.show_component
- end
- show_graph
- end
-
- # Moves the component and all it's children to (x, y)
- def move_to(x, y)
- @x = x
- @y = y
- @components.each do |comp|
- comp.move_to(x, y)
- end
- move_graph(x, y)
- end
- # Enables the widget, has no effect on the children
- def enable
- @state = :active
- end
-
- # Disables the widget, has no effect on the children.
- def disable
- @state = :disabled
- end
-
- # Marks the widget. Has no effect on the children.
- # Does nothing on non-active widgets.
- def mark
- return false if disabled?
- @mark = true
- return true
- end
- # Removes the mark from the widget. Has no effect on the children.
- # Does noting on non-marked widgets.
- def unmark
- return false unless mark?
- @mark = false
- return true
- end
- # Hovers the widget. Has no effect on the children.
- # Does nothing on non-active widgets.
- def hover
- return false if disabled?
- @hover = true
- return true
- end
- # Removes the hover flag from the widget. Has no effect on the children.
- # Does noting on non-marked widgets.
- def unhover
- return false unless hover?
- @hover = false
- return true
- end
- # Selects the widget. Has no effect on the children.
- # Does nothing on non-active widgets.
- def select
- return false if disabled?
- @select = true
- @select_mark = Zori.root.create_select_mark
- @select_mark.position = self.left - 20, self.y
- graph_add(@select_mark)
- return true
- end
- # Removes the hover flag from the widget. Has no effect on the children.
- # Does noting on non-marked widgets.
- def unselect
- return false unless selected?
- @select = false
- graph_delete(@select_mark)
- @select_mark.close
- @select_mark = nil
- return true
- end
- # Focuses the widget. Has no effect on the children.
- # Does nothing on non-active or non-marked widgets.
- def focus
- return false if disabled?
- @state = :focus
- return true
- end
- # Removes the focus from the widget. Has no effect on the children.
- # Does noting on non-focused widgets.
- def unfocus
- return false unless focus?
- @state = :active
- return true
- end
- # Sets the dragging state to the widget. Has no effect on the children.
- # Does noting on disabled widgets.
- def drag
- return false if disabled?
- @state = :drag
- return true
- end
- # Removes the dragging state from the widget. Has no effect on the children.
- # Does noting on non-dragging widgets.
- def drop
- return false unless drag?
- @state = :active
- return true
- end
-
- # Checks if the widget is in a certain state.
- def is?(qstate)
- @state == qstate
- end
- def hidden?
- return is?(:hidden)
- end
- # Is the object disabled or hidden (which implies disabled)
- def disabled?
- return is?(:disabled) || is?(:hidden)
- end
-
- # Is the object being dragged?
- def drag?
- return is?(:drag)
- end
-
- # Does the object have focus?
- def focus?
- return is?(:focus)
- end
-
- # Is the object active?
- def active?
- return is?(:active)
- end
-
- # Is the object being triggered?
- def trigger?
- return is?(:trigger)
- end
-
- # Is the object being marked?
- def mark?
- return @mark
- end
- # Is the object being hovered?
- def hover?
- return @hover
- end
- # Is the object selected?
- def selected?
- return @select
- end
- end
- end
|