class SelectUpdateWindow

Constants

COLUMN_DESCRIPTION
COLUMN_JUMP_KEY

Public Class Methods

new(main_window, item_list, jump_keys, select_callback, update_callback, opt = {}) click to toggle source
# File lib/vimamsa/gui_select_window.rb, line 38
def initialize(main_window, item_list, jump_keys, select_callback, update_callback, opt = {})
  @window = Gtk::Window.new(:toplevel)
  # @window.screen = main_window.screen
  @window.title = ""
  if !opt[:title].nil?
    @window.title = opt[:title]
  end

  @selected_row = 0
  @opt = opt

  puts item_list.inspect
  @update_callback = method(update_callback)
  @select_callback = method(select_callback)
  # puts @update_callback_m.call("").inspect

  vbox = Gtk::Box.new(:vertical, 8)
  vbox.margin = 8
  @window.add(vbox)

  @entry = Gtk::SearchEntry.new
  @entry.width_chars = 45
  container = Gtk::Box.new(:horizontal, 10)
  # container.halign = :start
  container.halign = :center
  container.pack_start(@entry,
                       :expand => false, :fill => false, :padding => 0)

  # create tree view
  @model = Gtk::ListStore.new(String, String)
  treeview = Gtk::TreeView.new(@model)
  treeview.search_column = COLUMN_DESCRIPTION
  @tv = treeview
  # item_list = @update_callback.call("")
  update_item_list(item_list)

  @window.signal_connect("key-press-event") do |_widget, event|
    # puts "KEYPRESS 1"
    @entry.handle_event(event)
  end

  @entry.signal_connect("key_press_event") do |widget, event|
    # puts "KEYPRESS 2"
    if event.keyval == Gdk::Keyval::KEY_Down
      puts "DOWN"
      set_selected_row(@selected_row + 1)
      # fixed = iter[COLUMN_FIXED]

      true
    elsif event.keyval == Gdk::Keyval::KEY_Up
      set_selected_row(@selected_row - 1)
      puts "UP"
      true
    elsif event.keyval == Gdk::Keyval::KEY_Return
      path = Gtk::TreePath.new(@selected_row.to_s)
      iter = @model.get_iter(path)
      ret = iter[1]
      @select_callback.call(ret, @selected_row)
      @window.destroy
      # puts iter[1].inspect
      true
    elsif event.keyval == Gdk::Keyval::KEY_Escape
      @window.destroy
      true
    else
      false
    end
  end

  @entry.signal_connect("search-changed") do |widget|
    puts "search changed: #{widget.text || ""}"
    item_list = @update_callback.call(widget.text)

    update_item_list(item_list)
    # label.text = widget.text || ""
  end
  @entry.signal_connect("changed") { puts "[changed] " }
  @entry.signal_connect("next-match") { puts "[next-match] " }

  if !opt[:desc].nil?
    descl = Gtk::Label.new(opt[:desc])
    vbox.pack_start(descl, :expand => false, :fill => false, :padding => 0)
  end

  # label = Gtk::Label.new(<<-EOF)
  # Search:
  # EOF

  # label = Gtk::Label.new("Input:")
  # vbox.pack_start(label, :expand => false, :fill => false, :padding => 0)

  vbox.pack_start(container, :expand => false, :fill => false, :padding => 0)
  sw = Gtk::ScrolledWindow.new(nil, nil)
  sw.shadow_type = :etched_in
  sw.set_policy(:never, :automatic)
  vbox.pack_start(sw, :expand => true, :fill => true, :padding => 0)

  sw.add(treeview)

  if !opt[:columns].nil?
    for col in opt[:columns]
      renderer = Gtk::CellRendererText.new
      column = Gtk::TreeViewColumn.new(col[:title],
                                       renderer,
                                       "text" => col[:id])
      column.sort_column_id = col[:id]
      treeview.append_column(column)
    end
  else
    renderer = Gtk::CellRendererText.new
    column = Gtk::TreeViewColumn.new("JMP",
                                     renderer,
                                     "text" => COLUMN_JUMP_KEY)
    column.sort_column_id = COLUMN_JUMP_KEY
    treeview.append_column(column)

    renderer = Gtk::CellRendererText.new
    column = Gtk::TreeViewColumn.new("Description",
                                     renderer,
                                     "text" => COLUMN_DESCRIPTION)
    column.sort_column_id = COLUMN_DESCRIPTION
    treeview.append_column(column)
  end

  @window.set_default_size(280, 500)
  puts "SelectUpdateWindow"
end

Public Instance Methods

run() click to toggle source
# File lib/vimamsa/gui_select_window.rb, line 166
def run
  if !@window.visible?
    @window.show_all
    # add_spinner
  else
    @window.destroy
    # GLib::Source.remove(@tiemout) unless @timeout.zero?
    @timeout = 0
  end
  @window
end
set_selected_row(rownum) click to toggle source
# File lib/vimamsa/gui_select_window.rb, line 27
def set_selected_row(rownum)
  rownum = 0 if rownum < 0
  @selected_row = rownum

  if @model.count > 0
    path = Gtk::TreePath.new(@selected_row.to_s)
    iter = @model.get_iter(path)
    @tv.selection.select_iter(iter)
  end
end
update_item_list(item_list) click to toggle source
# File lib/vimamsa/gui_select_window.rb, line 10
def update_item_list(item_list)
  # puts item_list.inspect
  @model.clear
  for item in item_list
    iter = @model.append
    if !@opt[:columns].nil?
      v = item
    else
      v = ["", item[0]]
    end
    puts v.inspect
    iter.set_values(v)
  end

  set_selected_row(0)
end