class SublimeDSL::SublimeText::Mouse

Attributes

buttons[R]
modifiers[R]
name[R]
to_s[R]

Public Class Methods

create_sublime_mouse() click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 12
def self.create_sublime_mouse
  mouse = new('Sublime Text')
  (1..9).each { |i| mouse.add_button "button#{i}" }
  mouse.add_button "scroll_up"
  mouse.add_button "scroll_down"
  %w(shift ctrl alt super).each { |m| mouse.add_modifier m }
  mouse.modifiers.concat mouse.buttons
  mouse
end
new(name) click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 24
def initialize(name)
  @name = name
  @buttons = []
  @modifiers = []
  @clicks = []
end
sublime() click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 8
def self.sublime
  @sublime ||= create_sublime_mouse
end

Public Instance Methods

add_button(st_name, name = nil) click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 49
def add_button(st_name, name = nil)
  @buttons << Button.new(st_name, name)
end
add_modifier(st_name, name = nil) click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 53
def add_modifier(st_name, name = nil)
  @modifiers << Button.new(st_name, name)
end
button(name) click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 41
def button(name)
  buttons.find { |b| b.name == name }
end
clicks_hash() click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 57
def clicks_hash
  @clicks_hash ||= {}
end
clone(name) click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 33
def clone(name)
  clone = Mouse.new(name)
  buttons.each { |b| clone.add_button b.st_name, b.name }
  (modifiers - buttons).each { |m| clone.add_modifier m.st_name, m.name }
  clone.modifiers.concat clone.buttons
  clone
end
ensure_click(spec) click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 69
def ensure_click(spec)
  *modifier_names, button_name = spec.split('+')

  button = button(button_name) or
    raise Error, "invalid button #{button_name.inspect}"

  # check & reorder the modifiers
  unless modifier_names.empty?
    sorted = []
    modifier_names.each do |name|
      i = modifiers_index_hash[name]
      i or raise Error, "invalid modifier #{name.inspect}"
      sorted[i] = name
    end
    modifier_names = sorted.compact
  end

  # if there is a registered click for this spec, return it
  std_spec = [*modifier_names, button_name].join('+')
  click = clicks_hash[std_spec]
  return click if click

  # can't have the button in the modifiers
  modifier_names.include?(button_name) and
    raise Error, "can't have the button in the modifiers: #{spec.inspect}"

  # create and register the click
  modifiers = modifier_names.map { |n| modifier(n) }
  click = Click.new(modifiers, button)
  clicks_hash[click.to_spec] = click

  click
end
modifier(name) click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 45
def modifier(name)
  modifiers.find { |b| b.name == name }
end
modifiers_index_hash() click to toggle source
# File lib/sublime_dsl/sublime_text/mouse.rb, line 61
def modifiers_index_hash
  @modifiers_index_hash ||= begin
    h = {}
    modifiers.each_with_index { |b,i| h[b.name] = i }
    h
  end
end