class VMAgui

Constants

FONT
HEART
N_WORDS
RADIUS
TEXT
VERSION

Attributes

buf1[RW]
buffers[RW]
sw[RW]
view[RW]
window[RW]

Public Class Methods

new() click to toggle source
# File lib/vimamsa/gui.rb, line 238
def initialize()
  @show_overlay = true
  @da = nil
  @buffers = {}
  @view = nil
  @buf1 = nil
end

Public Instance Methods

add_to_minibuf(msg) click to toggle source
# File lib/vimamsa/gui.rb, line 359
def add_to_minibuf(msg)
  startiter = @minibuf.buffer.get_iter_at(:offset => 0)
  @minibuf.buffer.insert(startiter, "#{msg}\n")
  @minibuf.signal_emit("move-cursor", Gtk::MovementStep.new(:PAGES), -1, false)
end
clear_overlay() click to toggle source
# File lib/vimamsa/gui.rb, line 258
def clear_overlay()
  if @da != nil
    @overlay.remove(@da)
  end
end
create_menu(depth) click to toggle source
# File lib/vimamsa/gui.rb, line 492
def create_menu(depth)
  return nil if depth < 1

  menu = Gtk::Menu.new
  last_item = nil
  (0..5).each do |i|
    j = i + 1
    label = "item #{depth} - #{j}"
    menu_item = Gtk::RadioMenuItem.new(nil, label)
    menu_item.join_group(last_item) if last_item
    last_item = menu_item
    menu.append(menu_item)
    menu_item.sensitive = false if i == 3
    menu_item.submenu = create_menu(depth - 1)
  end

  menu
end
create_menu_item(label, depth) click to toggle source
# File lib/vimamsa/gui.rb, line 486
def create_menu_item(label, depth)
  menuitem = Gtk::MenuItem.new(:label => label)
  menuitem.submenu = create_menu(depth)
  @menubar.append(menuitem)
end
end_overlay_draw() click to toggle source
# File lib/vimamsa/gui.rb, line 273
def end_overlay_draw()
  @da.show_all
end
handle_deltas() click to toggle source
# File lib/vimamsa/gui.rb, line 342
def handle_deltas()
  while d = buf.deltas.shift
    pos = d[0]
    op = d[1]
    num = d[2]
    txt = d[3]
    if op == DELETE
      startiter = @buf1.get_iter_at(:offset => pos)
      enditer = @buf1.get_iter_at(:offset => pos + num)
      @buf1.delete(startiter, enditer)
    elsif op == INSERT
      startiter = @buf1.get_iter_at(:offset => pos)
      @buf1.insert(startiter, txt)
    end
  end
end
init_header_bar() click to toggle source
# File lib/vimamsa/gui.rb, line 400
def init_header_bar()
  header = Gtk::HeaderBar.new
  @header = header
  header.show_close_button = true
  header.title = ""
  header.has_subtitle = true
  header.subtitle = ""
  # Ripl.start :binding => binding

  # icon = Gio::ThemedIcon.new("mail-send-receive-symbolic")
  # icon = Gio::ThemedIcon.new("document-open-symbolic")
  # icon = Gio::ThemedIcon.new("dialog-password")

  #edit-redo edit-paste edit-find-replace edit-undo edit-find edit-cut edit-copy
  #document-open document-save document-save-as document-properties document-new
  # document-revert-symbolic
  #

  #TODO:
  # button = Gtk::Button.new
  # icon = Gio::ThemedIcon.new("open-menu-symbolic")
  # image = Gtk::Image.new(:icon => icon, :size => :button)
  # button.add(image)
  # header.pack_end(button)

  button = Gtk::Button.new
  icon = Gio::ThemedIcon.new("document-open-symbolic")
  image = Gtk::Image.new(:icon => icon, :size => :button)
  button.add(image)
  header.pack_end(button)

  button.signal_connect "clicked" do |_widget|
    open_file_dialog
  end

  button = Gtk::Button.new
  icon = Gio::ThemedIcon.new("document-save-symbolic")
  image = Gtk::Image.new(:icon => icon, :size => :button)
  button.add(image)
  header.pack_end(button)
  button.signal_connect "clicked" do |_widget|
    buf.save
  end

  button = Gtk::Button.new
  icon = Gio::ThemedIcon.new("document-new-symbolic")
  image = Gtk::Image.new(:icon => icon, :size => :button)
  button.add(image)
  header.pack_end(button)
  button.signal_connect "clicked" do |_widget|
    create_new_file
  end

  box = Gtk::Box.new(:horizontal, 0)
  box.style_context.add_class("linked")

  button = Gtk::Button.new
  image = Gtk::Image.new(:icon_name => "pan-start-symbolic", :size => :button)
  button.add(image)
  box.add(button)
  button.signal_connect "clicked" do |_widget|
    history_switch_backwards
  end

  button = Gtk::Button.new
  image = Gtk::Image.new(:icon_name => "pan-end-symbolic", :size => :button)
  button.add(image)
  box.add(button)
  button.signal_connect "clicked" do |_widget|
    history_switch_forwards
  end

  button = Gtk::Button.new
  icon = Gio::ThemedIcon.new("window-close-symbolic")
  image = Gtk::Image.new(:icon => icon, :size => :button)
  button.add(image)
  box.add(button)
  button.signal_connect "clicked" do |_widget|
    bufs.close_current_buffer
  end

  header.pack_start(box)
  @window.titlebar = header
  @window.add(Gtk::TextView.new)
end
init_minibuffer() click to toggle source
# File lib/vimamsa/gui.rb, line 365
def init_minibuffer()
  # Init minibuffer
  sw = Gtk::ScrolledWindow.new
  sw.set_policy(:automatic, :automatic)
  overlay = Gtk::Overlay.new
  overlay.add(sw)
  # @vpaned.pack2(overlay, :resize => false)
  @vbox.attach(overlay, 0, 2, 1, 1)
  # overlay.set_size_request(-1, 50)
  # $ovrl = overlay
  # $ovrl.set_size_request(-1, 30)
  $sw2 = sw
  sw.set_size_request(-1, 12)

  view = VSourceView.new()
  view.set_highlight_current_line(false)
  view.set_show_line_numbers(false)
  # view.set_buffer(buf1)
  ssm = GtkSource::StyleSchemeManager.new
  ssm.set_search_path(ssm.search_path << ppath("styles/"))
  sty = ssm.get_scheme("molokai_edit")
  view.buffer.highlight_matching_brackets = false
  view.buffer.style_scheme = sty
  provider = Gtk::CssProvider.new
  # provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
  provider.load(data: "textview { font-family: Arial; font-size: 10pt; color:#ff0000}")
  view.style_context.add_provider(provider)
  view.wrap_mode = :char
  @minibuf = view
  # Ripl.start :binding => binding
  # startiter = view.buffer.get_iter_at(:offset => 0)
  message("STARTUP")
  sw.add(view)
end
init_window() click to toggle source
# File lib/vimamsa/gui.rb, line 511
def init_window
  @window = Gtk::Window.new(:toplevel)
  @window.set_default_size(650, 850)
  @window.title = "Multiple Views"
  @window.show_all
  # vpaned = Gtk::Paned.new(:horizontal)
  @vpaned = Gtk::Paned.new(:vertical)
  #@vpaned = Gtk::Box.new(:vertical, 0)
  # @vbox = Gtk::Box.new(:vertical, 0)
  @vbox = Gtk::Grid.new()
  @window.add(@vbox)

  @menubar = Gtk::MenuBar.new
  @menubar.expand = false
  

  @sw = Gtk::ScrolledWindow.new
  @sw.set_policy(:automatic, :automatic)
  @overlay = Gtk::Overlay.new
  @overlay.add(@sw)

  # @vpaned.pack1(@overlay, :resize => true)
  # @vpaned.pack2(@menubar, :resize => false)
  # @vbox.add(@menubar, :resize => false)

  init_header_bar

  # @window.show_all

  # @vbox.pack_start(@menubar, :expand => false, :fill => false, :padding => 0 )
  # @vbox.pack_start(@menubar)
  # @vbox.pack_start(@overlay, :expand => true, :fill => true, :padding => 0 )
  # @vbox.pack_start(@overlay, :expand => true, :fill => true, :padding => 0 )
  @vbox.attach(@menubar, 0, 0, 1, 1)
  @vbox.attach(@overlay, 0, 1, 1, 1)
  @overlay.vexpand = true
  @overlay.hexpand = true

  @menubar.vexpand = false
  @menubar.hexpand = false

  init_minibuffer


  @window.show_all
  vma.start
  Vimamsa::Menu.new(@menubar)
  @window.show_all
  
end
overlay_draw_text(text, textpos) click to toggle source
# File lib/vimamsa/gui.rb, line 264
def overlay_draw_text(text, textpos)
  # puts "overlay_draw_text #{[x,y]}"
  (x, y) = @view.pos_to_coord(textpos)
  # puts "overlay_draw_text #{[x,y]}"
  label = Gtk::Label.new("<span background='#00000088' foreground='#ff0000' weight='ultrabold'>#{text}</span>")
  label.use_markup = true
  @da.put(label, x, y)
end
run() click to toggle source
# File lib/vimamsa/gui.rb, line 246
def run
  init_window
  # init_rtext
  Gtk.main
end
start_overlay_draw() click to toggle source
# File lib/vimamsa/gui.rb, line 252
def start_overlay_draw()
  @da = Gtk::Fixed.new
  @overlay.add_overlay(@da)
  @overlay.set_overlay_pass_through(@da, true)
end
toggle_overlay() click to toggle source
# File lib/vimamsa/gui.rb, line 277
def toggle_overlay
  @show_overlay = @show_overlay ^ 1
  if !@show_overlay
    if @da != nil
      @overlay.remove(@da)
    end
    return
  else
    @da = Gtk::Fixed.new
    @overlay.add_overlay(@da)
    @overlay.set_overlay_pass_through(@da, true)
  end

  (startpos, endpos) = get_visible_area
  s = @view.buffer.text
  wpos = s.enum_for(:scan, /\W(\w)/).map { Regexp.last_match.begin(0) + 1 }
  wpos = wpos[0..130]

  # vr =  @view.visible_rect
  # # gtk_text_view_get_line_at_y
  # # gtk_text_view_get_iter_at_position
  # gtk_text_view_get_iter_at_position(vr.
  # istart = @view.get_iter_at_position(vr.x,vr.y)
  # istart = @view.get_iter_at_y(vr.y)
  # startpos = @view.get_iter_at_position_raw(vr.x,vr.y)[1].offset
  # endpos = @view.get_iter_at_position_raw(vr.x+vr.width,vr.y+vr.height)[1].offset
  # puts "startpos,endpos:#{[startpos, endpos]}"

  da = @da
  if false
    da.signal_connect "draw" do |widget, cr|
      cr.save
      for pos in wpos
        (x, y) = @view.pos_to_coord(pos)

        layout = da.create_pango_layout("XY")
        desc = Pango::FontDescription.new("sans bold 11")
        layout.font_description = desc

        cr.move_to(x, y)
        # cr.move_to(gutter_width, 300)
        cr.pango_layout_path(layout)

        cr.set_source_rgb(1.0, 0.0, 0.0)
        cr.fill_preserve
      end
      cr.restore
      false # = draw other
      # true # = Don't draw others
    end
  end

  for pos in wpos
    (x, y) = @view.pos_to_coord(pos)
    # da.put(Gtk::Label.new("AB"), x, y)
    label = Gtk::Label.new("<span background='#00000088' foreground='#ff0000' weight='ultrabold'>AB</span>")
    label.use_markup = true
    da.put(label, x, y)
  end

  # puts @view.pos_to_coord(300).inspect

  @da.show_all
end