Sha256: 4136a81c8c3c96a9b0425a96c28df52e47e083aef788cac4051ab0c38bdda8e9

Contents?: true

Size: 1.93 KB

Versions: 38

Compression:

Stored size: 1.93 KB

Contents

module Redcar
  class Treebook
    include Redcar::Observable
    include Redcar::Model

    attr_reader :trees, :focussed_tree

    def initialize
      @trees = []
      @focussed_tree = nil
    end

    # Add a tree to this treebook
    #
    # @param [Redcar::Tree]
    def add_tree(tree)
      @trees << tree
      @focussed_tree = tree
      notify_listeners(:tree_added, tree)
      tree.focus
      Redcar.app.repeat_event(:tree_added) if Redcar.app
    end

    # Bring the tree to the front
    #
    # @param [Redcar::Tree]
    def focus_tree(tree)
      return if @focussed_tree == tree
      @focussed_tree = tree
      notify_listeners(:tree_focussed, tree)
      tree.focus
    end

    # Remove a tree from this treebook
    #
    # @param [Redcar::Tree]
    def remove_tree(tree)
      if @trees.include?(tree)
        @trees.delete(tree)
        notify_listeners(:tree_removed, tree)
        if tree == focussed_tree
          focus_tree(trees.first) if trees.any?
        end
        Redcar.app.repeat_event(:tree_removed) if Redcar.app
      end
    end

    def switch_down
      if @trees.any?
        if @focussed_tree
          index = @trees.index @focussed_tree
        else
          index = -1
        end
        new_tree_index = index + 1
        new_tree_index = 0 if new_tree_index < 0 or new_tree_index >= @trees.size
        tree = @trees[new_tree_index]
        focus_tree(tree) if tree
      end
    end

    def switch_up
      if @trees.any?
        if @focussed_tree
          index = @trees.index @focussed_tree
        else
          index = 1
        end
        new_tree_index = index - 1
        new_tree_index = @trees.size - 1 if new_tree_index < 0 or new_tree_index >= @trees.size
        tree = @trees[new_tree_index]
        focus_tree(tree) if tree
      end
    end

    private

    # Tell the Treebook that this tree has been focussed in the GUI.
    def set_focussed_tree(tree)
      @focussed_tree = tree
    end
  end
end

Version data entries

38 entries across 38 versions & 2 rubygems

Version Path
redcar-0.13 plugins/application/lib/application/treebook.rb
redcar-dev-0.13.5dev plugins/application/lib/application/treebook.rb
redcar-dev-0.13.4dev plugins/application/lib/application/treebook.rb
redcar-dev-0.13.3dev plugins/application/lib/application/treebook.rb
redcar-dev-0.13.2dev plugins/application/lib/application/treebook.rb
redcar-dev-0.13.1dev plugins/application/lib/application/treebook.rb
redcar-0.12.1 plugins/application/lib/application/treebook.rb
redcar-dev-0.13.0dev plugins/application/lib/application/treebook.rb
redcar-0.12 plugins/application/lib/application/treebook.rb
redcar-dev-0.12.27dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.26dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.25dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.24dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.23dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.22dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.21dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.20dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.19dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.18dev plugins/application/lib/application/treebook.rb
redcar-dev-0.12.17dev plugins/application/lib/application/treebook.rb