module Rabbit::Renderer::Display::KeyHandler

Public Class Methods

new(*args, &block) click to toggle source
Calls superclass method
# File lib/rabbit/renderer/display/key-handler.rb, line 9
def initialize(*args, &block)
  super
  init_key_handler
end

Public Instance Methods

connect_key(keyval, modifier, flags, &block) click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 14
def connect_key(keyval, modifier, flags, &block)
  @user_accel_group.connect(keyval, modifier, flags, &block)
end
disconnect_key(keyval, modifier) click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 18
def disconnect_key(keyval, modifier)
  @user_accel_group.disconnect_key(keyval, modifier)
end
post_terminal() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 26
def post_terminal
  @window.add_accel_group(@accel_group)
end
pre_terminal() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 22
def pre_terminal
  @window.remove_accel_group(@accel_group)
end

Private Instance Methods

attach_key(window) click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 41
def attach_key(window)
  window.add_accel_group(@accel_group)
  window.add_accel_group(@toggle_terminal_accel_group)
end
calc_slide_number(val, modifier) click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 93
def calc_slide_number(val, modifier)
  val += 10 if modifier.control_mask?
  val += 20 if modifier.mod1_mask?
  val
end
clear_keys() click to toggle source
Calls superclass method
# File lib/rabbit/renderer/display/key-handler.rb, line 51
def clear_keys
  super
  @window.remove_accel_group(@user_accel_group) if @user_accel_group
  clear_user_accel_group
  @window.add_accel_group(@user_accel_group)
end
clear_user_accel_group() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 37
def clear_user_accel_group
  @user_accel_group = Gtk::AccelGroup.new
end
detach_key(window) click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 46
def detach_key(window)
  window.remove_accel_group(@accel_group)
  window.remove_accel_group(@toggle_terminal_accel_group)
end
init_accel_group() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 58
def init_accel_group
  @accel_group = Gtk::AccelGroup.new
  init_number_keys
  init_no_prefix_keys
  init_shift_keys
  init_control_keys
  init_alt_keys
end
init_alt_keys() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 267
def init_alt_keys
  mod = Gdk::ModifierType::MOD1_MASK

  keys = Keys::Alt::RESET_ADJUSTMENT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ResetAdjustment")
  end

  keys = Keys::Alt::RESET_TIMER_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ResetTimer")
  end
end
init_control_keys() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 216
def init_control_keys
  mod = Gdk::ModifierType::CONTROL_MASK

  keys = Keys::Control::CLEAR_GRAFFITI_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ClearGraffiti")
  end
  keys = Keys::Control::UNDO_GRAFFITI_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("UndoGraffiti")
  end

  keys = Keys::Control::CLEAR_SLIDE_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ClearSlide")
  end
  keys = Keys::Control::PRINT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("Print")
  end
  keys = Keys::Control::SEARCH_SLIDE_FORWARD_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideForward")
  end
  keys = Keys::Control::SEARCH_SLIDE_BACKWARD_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideBackward")
  end
  keys = Keys::Control::SEARCH_SLIDE_FORWARD_NEXT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideForwardNext")
  end
  keys = Keys::Control::SEARCH_SLIDE_BACKWARD_NEXT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideBackwardNext")
  end
  keys = Keys::Control::STOP_SLIDE_SEARCH_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("StopSlideSearch")
  end

  keys = Keys::MOVE_TO_NEXT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("NextSlide")
  end
  keys = Keys::MOVE_TO_PREVIOUS_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("PreviousSlide")
  end
end
init_key_handler() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 31
def init_key_handler
  @user_accel_group = nil
  init_accel_group
  init_toggle_terminal_accel_group
end
init_no_prefix_keys() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 122
def init_no_prefix_keys
  mod = Gdk::ModifierType.new

  keys = Keys::QUIT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("Quit")
  end
  keys = Keys::MOVE_TO_NEXT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("Next")
  end
  keys = Keys::MOVE_TO_PREVIOUS_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("Previous")
  end
  keys = Keys::MOVE_TO_FIRST_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("FirstSlide")
  end
  keys = Keys::MOVE_TO_LAST_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("LastSlide")
  end
  keys = Keys::TOGGLE_FULLSCREEN_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ToggleFullScreen")
  end
  keys = Keys::RELOAD_THEME_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    reload_theme
  end
  keys = Keys::SAVE_AS_IMAGE_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SaveAsImage")
  end
  keys = Keys::ICONIFY_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("Iconify")
  end
  keys = Keys::TOGGLE_INDEX_MODE_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ToggleIndexMode")
  end
  keys = Keys::CACHE_ALL_SLIDES_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("CacheAllSlides")
  end
  keys = Keys::SEARCH_SLIDE_FORWARD_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideForward")
  end
  keys = Keys::SEARCH_SLIDE_BACKWARD_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideBackward")
  end
  keys = Keys::SEARCH_SLIDE_FORWARD_NEXT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideForwardNext")
  end
end
init_number_keys() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 99
def init_number_keys
  no_mod = Gdk::ModifierType.new
  mods = Utils.combination([
                            Gdk::ModifierType::CONTROL_MASK,
                            Gdk::ModifierType::MOD1_MASK,
                           ])
  mods.each do |mod|
    mod = mod.inject(no_mod) do |result, item|
      result | item
    end
    keys = (0..9).collect{|i| Gdk::Keyval.const_get("KEY_#{i}")}
    set_keys(keys, mod) do |group, obj, val, modifier|
      index = calc_slide_number(val - Gdk::Keyval::KEY_0, modifier)
      @canvas.activate("JumpTo") {index}
    end
    keys = (0..9).collect{|i| Gdk::Keyval.const_get("KEY_KP_#{i}")}
    set_keys(keys, mod) do |group, obj, val, modifier|
      index = calc_slide_number(val - Gdk::Keyval::KEY_KP_0, modifier)
      @canvas.activate("JumpTo") {index}
    end
  end
end
init_shift_keys() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 183
def init_shift_keys
  mod = Gdk::ModifierType::SHIFT_MASK

  keys = Keys::Shift::WHITE_OUT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ToggleWhiteout")
  end
  keys = Keys::Shift::BLACK_OUT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ToggleBlackout")
  end
  keys = Keys::Shift::EXPAND_HOLE_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ExpandHole")
  end
  keys = Keys::Shift::NARROW_HOLE_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("NarrowHole")
  end
  keys = Keys::Shift::TOGGLE_GRAFFITI_MODE_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ToggleGraffitiMode")
  end
  keys = Keys::Shift::SEARCH_SLIDE_BACKWARD_NEXT_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("SearchSlideBackwardNext")
  end
  keys = Keys::Shift::TOGGLE_INFO_WINDOW_KEYS
  set_keys(keys, mod) do |group, obj, val, modifier|
    @canvas.activate("ToggleInfoWindow")
  end
end
init_toggle_terminal_accel_group() click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 67
def init_toggle_terminal_accel_group
  @toggle_terminal_accel_group = Gtk::AccelGroup.new
  mod = Gdk::ModifierType::SHIFT_MASK |
        Gdk::ModifierType::CONTROL_MASK |
        Gdk::ModifierType::MOD1_MASK
  keys = Keys::ShiftControlAlt::TOGGLE_TERMINAL_KEYS
  set_keys(keys,
           mod,
           nil,
           @toggle_terminal_accel_group) do |group, obj, val, modifier|
    @canvas.activate("ToggleTerminal")
  end
end
set_key_press_event(widget) click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 281
def set_key_press_event(widget)
  prev_keys = [
    Gdk::Keyval::KEY_Up,
    Gdk::Keyval::KEY_Left,
    Gdk::Keyval::KEY_KP_Up,
    Gdk::Keyval::KEY_KP_Left,
  ]
  next_keys = [
    Gdk::Keyval::KEY_Right,
    Gdk::Keyval::KEY_Down,
    Gdk::Keyval::KEY_KP_Right,
    Gdk::Keyval::KEY_KP_Down,
  ]
  widget.signal_connect("key_press_event") do |_widget, event|
    handled = true
    modifier = event.state
    case event.keyval
    when *prev_keys
      if have_slide_number_related_mask?(modifier)
        index = calc_slide_number(0, modifier)
        @canvas.activate("JumpTo") {@canvas.current_index - index}
      else
        @canvas.activate("PreviousSlide")
      end
    when *next_keys
      if have_slide_number_related_mask?(modifier)
        index = calc_slide_number(0, modifier)
        @canvas.activate("JumpTo") {@canvas.current_index + index}
      else
        @canvas.activate("NextSlide")
      end
    else
      handled = false
    end
    handled
  end
end
set_keys(keys, mod, flags=nil, accel_group=@accel_group, &block) click to toggle source
# File lib/rabbit/renderer/display/key-handler.rb, line 81
def set_keys(keys, mod, flags=nil, accel_group=@accel_group, &block)
  flags ||= Gtk::AccelFlags::VISIBLE
  keys.each do |val|
    accel_group.connect(val, mod, flags, &block)
  end
end