vimamsa 0.1.6 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/custom_example.rb +47 -0
- data/demo.txt +25 -0
- data/lang/hyperplaintext.lang +9 -25
- data/lib/vimamsa/ack.rb +90 -7
- data/lib/vimamsa/actions.rb +27 -8
- data/lib/vimamsa/buffer.rb +130 -76
- data/lib/vimamsa/buffer_list.rb +24 -0
- data/lib/vimamsa/buffer_manager.rb +83 -0
- data/lib/vimamsa/conf.rb +21 -0
- data/lib/vimamsa/debug.rb +3 -2
- data/lib/vimamsa/easy_jump.rb +15 -20
- data/lib/vimamsa/editor.rb +93 -73
- data/lib/vimamsa/encrypt.rb +1 -1
- data/lib/vimamsa/file_finder.rb +6 -9
- data/lib/vimamsa/file_history.rb +3 -3
- data/lib/vimamsa/file_manager.rb +9 -8
- data/lib/vimamsa/gui.rb +89 -87
- data/lib/vimamsa/gui_image.rb +43 -0
- data/lib/vimamsa/gui_menu.rb +11 -2
- data/lib/vimamsa/gui_select_window.rb +16 -13
- data/lib/vimamsa/gui_sourceview.rb +64 -37
- data/lib/vimamsa/hyper_plain_text.rb +38 -19
- data/lib/vimamsa/key_actions.rb +40 -13
- data/lib/vimamsa/key_binding_tree.rb +52 -128
- data/lib/vimamsa/key_bindings_vimlike.rb +28 -25
- data/lib/vimamsa/macro.rb +5 -5
- data/lib/vimamsa/rbvma.rb +22 -18
- data/lib/vimamsa/search.rb +1 -1
- data/lib/vimamsa/search_replace.rb +11 -8
- data/lib/vimamsa/text_transforms.rb +2 -0
- data/lib/vimamsa/util.rb +34 -0
- data/lib/vimamsa/version.rb +1 -1
- data/lib/vimamsa.rb +5 -0
- data/sheep.jpg +0 -0
- data/styles/dark.xml +1 -0
- data/styles/molokai_edit.xml +1 -1
- data/vimamsa.gemspec +1 -1
- metadata +13 -8
- data/lib/vimamsa/gui_gtk_sourceview.rb +0 -294
data/lib/vimamsa/gui.rb
CHANGED
@@ -10,7 +10,7 @@ def gui_open_file_dialog(dirpath)
|
|
10
10
|
dialog.signal_connect("response") do |dialog, response_id|
|
11
11
|
if response_id == Gtk::ResponseType::ACCEPT
|
12
12
|
open_new_file(dialog.filename)
|
13
|
-
#
|
13
|
+
# debug "uri = #{dialog.uri}"
|
14
14
|
end
|
15
15
|
dialog.destroy
|
16
16
|
end
|
@@ -34,7 +34,7 @@ def gui_file_saveas(dirpath)
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def idle_func
|
37
|
-
#
|
37
|
+
# debug "IDLEFUNC"
|
38
38
|
if $idle_scroll_to_mark
|
39
39
|
# Ripl.start :binding => binding
|
40
40
|
# $view.get_visible_rect
|
@@ -45,7 +45,7 @@ def idle_func
|
|
45
45
|
b = $view.buffer
|
46
46
|
iter = b.get_iter_at(:offset => b.cursor_position)
|
47
47
|
iterxy = $view.get_iter_location(iter)
|
48
|
-
#
|
48
|
+
# debug "ITERXY" + iterxy.inspect
|
49
49
|
# Ripl.start :binding => binding
|
50
50
|
|
51
51
|
intr = iterxy.intersect(vr)
|
@@ -103,7 +103,7 @@ def paste_system_clipboard()
|
|
103
103
|
|
104
104
|
# clipboard.request_contents(target_string) do |_clipboard, selection_data|
|
105
105
|
# received_text = selection_data.text
|
106
|
-
#
|
106
|
+
# debug "received_text=#{received_text}"
|
107
107
|
# end
|
108
108
|
if clipboard.wait_is_text_available?
|
109
109
|
received_text = clipboard.wait_for_text
|
@@ -116,7 +116,7 @@ def paste_system_clipboard()
|
|
116
116
|
$paste_lines = false
|
117
117
|
end
|
118
118
|
$clipboard << received_text
|
119
|
-
#
|
119
|
+
# debug $clipboard[-1]
|
120
120
|
$clipboard = $clipboard[-([$clipboard.size, max_clipboard_items].min)..-1]
|
121
121
|
end
|
122
122
|
return received_text
|
@@ -131,29 +131,27 @@ def set_system_clipboard(arg)
|
|
131
131
|
clipboard.text = arg
|
132
132
|
end
|
133
133
|
|
134
|
-
def gui_create_buffer(id)
|
135
|
-
|
134
|
+
def gui_create_buffer(id, bufo)
|
135
|
+
debug "gui_create_buffer(#{id})"
|
136
136
|
buf1 = GtkSource::Buffer.new()
|
137
|
-
view = VSourceView.new()
|
138
|
-
|
139
|
-
view.set_highlight_current_line(true)
|
140
|
-
view.set_show_line_numbers(true)
|
141
|
-
view.set_buffer(buf1)
|
137
|
+
view = VSourceView.new(nil, bufo)
|
142
138
|
|
143
139
|
ssm = GtkSource::StyleSchemeManager.new
|
144
140
|
ssm.set_search_path(ssm.search_path << ppath("styles/"))
|
145
|
-
# sty = ssm.get_scheme("dark")
|
146
141
|
sty = ssm.get_scheme("molokai_edit")
|
147
|
-
# puts ssm.scheme_ids
|
148
142
|
|
149
|
-
|
150
|
-
|
143
|
+
buf1.highlight_matching_brackets = true
|
144
|
+
buf1.style_scheme = sty
|
145
|
+
|
146
|
+
view.set_highlight_current_line(true)
|
147
|
+
view.set_show_line_numbers(true)
|
148
|
+
view.set_buffer(buf1)
|
151
149
|
|
152
150
|
provider = Gtk::CssProvider.new
|
153
151
|
provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
|
154
|
-
# provider.load(data: "textview { font-family: Arial; font-size: 12pt; }")
|
155
152
|
view.style_context.add_provider(provider)
|
156
153
|
view.wrap_mode = :char
|
154
|
+
view.set_tab_width(conf(:tab_width))
|
157
155
|
|
158
156
|
$vmag.buffers[id] = view
|
159
157
|
end
|
@@ -176,25 +174,18 @@ end
|
|
176
174
|
def gui_select_window_close(arg = nil)
|
177
175
|
end
|
178
176
|
|
179
|
-
# def set_window_title(str)
|
180
|
-
# unimplemented
|
181
|
-
# end
|
182
|
-
|
183
177
|
def gui_set_buffer_contents(id, txt)
|
184
|
-
#
|
185
|
-
|
186
|
-
|
187
|
-
$vmag.buffers[id].buffer.set_text(txt)
|
178
|
+
debug "gui_set_buffer_contents(#{id}, txt)"
|
179
|
+
vma.gui.buffers[id].buffer.set_text(txt)
|
188
180
|
end
|
189
181
|
|
190
182
|
def gui_set_cursor_pos(id, pos)
|
191
|
-
|
192
|
-
# Ripl.start :binding => binding
|
183
|
+
vma.buf.view.set_cursor_pos(pos)
|
193
184
|
end
|
194
185
|
|
195
186
|
def gui_set_current_buffer(id)
|
196
187
|
view = $vmag.buffers[id]
|
197
|
-
|
188
|
+
debug "gui_set_current_buffer(#{id}), view=#{view}"
|
198
189
|
buf1 = view.buffer
|
199
190
|
$vmag.view = view
|
200
191
|
$vmag.buf1 = buf1
|
@@ -205,17 +196,9 @@ def gui_set_current_buffer(id)
|
|
205
196
|
$vmag.sw.add(view)
|
206
197
|
|
207
198
|
view.grab_focus
|
208
|
-
#view.set_focus(10)
|
209
199
|
view.set_cursor_visible(true)
|
210
|
-
#view.move_cursor(1, 1, false)
|
211
200
|
view.place_cursor_onscreen
|
212
201
|
|
213
|
-
#TODO:
|
214
|
-
# itr = view.buffer.get_iter_at(:offset => 0)
|
215
|
-
# view.buffer.place_cursor(itr)
|
216
|
-
|
217
|
-
# wtitle = ""
|
218
|
-
# wtitle = buf.fname if !buf.fname.nil?
|
219
202
|
$vmag.sw.show_all
|
220
203
|
end
|
221
204
|
|
@@ -225,7 +208,7 @@ def gui_set_window_title(wtitle, subtitle = "")
|
|
225
208
|
end
|
226
209
|
|
227
210
|
class VMAgui
|
228
|
-
attr_accessor :buffers, :sw, :view, :buf1, :window
|
211
|
+
attr_accessor :buffers, :sw, :view, :buf1, :window, :delex, :statnfo
|
229
212
|
|
230
213
|
VERSION = "1.0"
|
231
214
|
|
@@ -241,6 +224,22 @@ class VMAgui
|
|
241
224
|
@buffers = {}
|
242
225
|
@view = nil
|
243
226
|
@buf1 = nil
|
227
|
+
@img_resizer_active = false
|
228
|
+
imgproc = proc {
|
229
|
+
GLib::Idle.add(proc {
|
230
|
+
if !buf.images.empty?
|
231
|
+
vma.gui.scale_all_images
|
232
|
+
|
233
|
+
w = Gtk::Window.new(:toplevel)
|
234
|
+
w.set_default_size(1, 1)
|
235
|
+
w.show_all
|
236
|
+
Thread.new { sleep 0.1; w.destroy }
|
237
|
+
end
|
238
|
+
|
239
|
+
false
|
240
|
+
})
|
241
|
+
}
|
242
|
+
@delex = DelayExecutioner.new(1, imgproc)
|
244
243
|
end
|
245
244
|
|
246
245
|
def run
|
@@ -249,6 +248,38 @@ class VMAgui
|
|
249
248
|
Gtk.main
|
250
249
|
end
|
251
250
|
|
251
|
+
def delay_scale()
|
252
|
+
if Time.now - @dtime > 2.0
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def scale_all_images
|
257
|
+
# puts "scale all"
|
258
|
+
for img in buf.images
|
259
|
+
if !img[:obj].destroyed?
|
260
|
+
img[:obj].scale_image
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def handle_image_resize
|
266
|
+
return if @img_resizer_active == true
|
267
|
+
@dtime = Time.now
|
268
|
+
|
269
|
+
$gcrw = 0
|
270
|
+
vma.gui.window.signal_connect "configure-event" do |widget, cr|
|
271
|
+
# Ripl.start :binding => binding
|
272
|
+
|
273
|
+
if $gcrw != cr.width
|
274
|
+
@delex.run
|
275
|
+
end
|
276
|
+
$gcrw = cr.width
|
277
|
+
false
|
278
|
+
end
|
279
|
+
|
280
|
+
@img_resizer_active = true
|
281
|
+
end
|
282
|
+
|
252
283
|
def start_overlay_draw()
|
253
284
|
@da = Gtk::Fixed.new
|
254
285
|
@overlay.add_overlay(@da)
|
@@ -262,10 +293,10 @@ class VMAgui
|
|
262
293
|
end
|
263
294
|
|
264
295
|
def overlay_draw_text(text, textpos)
|
265
|
-
#
|
296
|
+
# debug "overlay_draw_text #{[x,y]}"
|
266
297
|
(x, y) = @view.pos_to_coord(textpos)
|
267
|
-
#
|
268
|
-
label = Gtk::Label.new("<span background='#
|
298
|
+
# debug "overlay_draw_text #{[x,y]}"
|
299
|
+
label = Gtk::Label.new("<span background='#000000ff' foreground='#ff0000' weight='ultrabold'>#{text}</span>")
|
269
300
|
label.use_markup = true
|
270
301
|
@da.put(label, x, y)
|
271
302
|
end
|
@@ -300,7 +331,7 @@ class VMAgui
|
|
300
331
|
# istart = @view.get_iter_at_y(vr.y)
|
301
332
|
# startpos = @view.get_iter_at_position_raw(vr.x,vr.y)[1].offset
|
302
333
|
# endpos = @view.get_iter_at_position_raw(vr.x+vr.width,vr.y+vr.height)[1].offset
|
303
|
-
#
|
334
|
+
# debug "startpos,endpos:#{[startpos, endpos]}"
|
304
335
|
|
305
336
|
da = @da
|
306
337
|
if false
|
@@ -334,7 +365,7 @@ class VMAgui
|
|
334
365
|
da.put(label, x, y)
|
335
366
|
end
|
336
367
|
|
337
|
-
#
|
368
|
+
# debug @view.pos_to_coord(300).inspect
|
338
369
|
|
339
370
|
@da.show_all
|
340
371
|
end
|
@@ -369,7 +400,7 @@ class VMAgui
|
|
369
400
|
overlay = Gtk::Overlay.new
|
370
401
|
overlay.add(sw)
|
371
402
|
# @vpaned.pack2(overlay, :resize => false)
|
372
|
-
@vbox.attach(overlay, 0, 2,
|
403
|
+
@vbox.attach(overlay, 0, 2, 2, 1)
|
373
404
|
# overlay.set_size_request(-1, 50)
|
374
405
|
# $ovrl = overlay
|
375
406
|
# $ovrl.set_size_request(-1, 30)
|
@@ -383,7 +414,7 @@ class VMAgui
|
|
383
414
|
ssm = GtkSource::StyleSchemeManager.new
|
384
415
|
ssm.set_search_path(ssm.search_path << ppath("styles/"))
|
385
416
|
sty = ssm.get_scheme("molokai_edit")
|
386
|
-
view.buffer.highlight_matching_brackets = false
|
417
|
+
view.buffer.highlight_matching_brackets = false #TODO
|
387
418
|
view.buffer.style_scheme = sty
|
388
419
|
provider = Gtk::CssProvider.new
|
389
420
|
# provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
|
@@ -404,7 +435,6 @@ class VMAgui
|
|
404
435
|
header.title = ""
|
405
436
|
header.has_subtitle = true
|
406
437
|
header.subtitle = ""
|
407
|
-
# Ripl.start :binding => binding
|
408
438
|
|
409
439
|
# icon = Gio::ThemedIcon.new("mail-send-receive-symbolic")
|
410
440
|
# icon = Gio::ThemedIcon.new("document-open-symbolic")
|
@@ -480,32 +510,7 @@ class VMAgui
|
|
480
510
|
|
481
511
|
header.pack_start(box)
|
482
512
|
@window.titlebar = header
|
483
|
-
@window.add(Gtk::TextView.new)
|
484
|
-
end
|
485
|
-
|
486
|
-
def create_menu_item(label, depth)
|
487
|
-
menuitem = Gtk::MenuItem.new(:label => label)
|
488
|
-
menuitem.submenu = create_menu(depth)
|
489
|
-
@menubar.append(menuitem)
|
490
|
-
end
|
491
|
-
|
492
|
-
def create_menu(depth)
|
493
|
-
return nil if depth < 1
|
494
|
-
|
495
|
-
menu = Gtk::Menu.new
|
496
|
-
last_item = nil
|
497
|
-
(0..5).each do |i|
|
498
|
-
j = i + 1
|
499
|
-
label = "item #{depth} - #{j}"
|
500
|
-
menu_item = Gtk::RadioMenuItem.new(nil, label)
|
501
|
-
menu_item.join_group(last_item) if last_item
|
502
|
-
last_item = menu_item
|
503
|
-
menu.append(menu_item)
|
504
|
-
menu_item.sensitive = false if i == 3
|
505
|
-
menu_item.submenu = create_menu(depth - 1)
|
506
|
-
end
|
507
|
-
|
508
|
-
menu
|
513
|
+
# @window.add(Gtk::TextView.new)
|
509
514
|
end
|
510
515
|
|
511
516
|
def init_window
|
@@ -513,36 +518,34 @@ class VMAgui
|
|
513
518
|
@window.set_default_size(650, 850)
|
514
519
|
@window.title = "Multiple Views"
|
515
520
|
@window.show_all
|
516
|
-
# vpaned = Gtk::Paned.new(:horizontal)
|
517
521
|
@vpaned = Gtk::Paned.new(:vertical)
|
518
|
-
|
519
|
-
# @vbox = Gtk::Box.new(:vertical, 0)
|
522
|
+
|
520
523
|
@vbox = Gtk::Grid.new()
|
521
524
|
@window.add(@vbox)
|
522
525
|
|
523
526
|
@menubar = Gtk::MenuBar.new
|
524
527
|
@menubar.expand = false
|
525
|
-
|
526
528
|
|
527
529
|
@sw = Gtk::ScrolledWindow.new
|
528
530
|
@sw.set_policy(:automatic, :automatic)
|
529
531
|
@overlay = Gtk::Overlay.new
|
530
532
|
@overlay.add(@sw)
|
531
533
|
|
532
|
-
# @vpaned.pack1(@overlay, :resize => true)
|
533
|
-
# @vpaned.pack2(@menubar, :resize => false)
|
534
|
-
# @vbox.add(@menubar, :resize => false)
|
535
|
-
|
536
534
|
init_header_bar
|
537
535
|
|
538
|
-
|
536
|
+
@statnfo = Gtk::Label.new
|
537
|
+
provider = Gtk::CssProvider.new
|
538
|
+
provider.load(data: "textview { background-color:#353535; font-family: Monospace; font-size: 10pt; margin-top:4px;}")
|
539
|
+
@statnfo.style_context.add_provider(provider)
|
540
|
+
|
541
|
+
# Deprecated, but found no other way to do it. css doesn't work.
|
542
|
+
# TODO: should select color automatically from theme
|
543
|
+
@statnfo.override_background_color(Gtk::StateFlags::NORMAL, "#353535")
|
539
544
|
|
540
|
-
#
|
541
|
-
# @vbox.pack_start(@menubar)
|
542
|
-
# @vbox.pack_start(@overlay, :expand => true, :fill => true, :padding => 0 )
|
543
|
-
# @vbox.pack_start(@overlay, :expand => true, :fill => true, :padding => 0 )
|
545
|
+
# column, row, width height
|
544
546
|
@vbox.attach(@menubar, 0, 0, 1, 1)
|
545
|
-
@vbox.attach(@
|
547
|
+
@vbox.attach(@statnfo, 1, 0, 1, 1)
|
548
|
+
@vbox.attach(@overlay, 0, 1, 2, 1)
|
546
549
|
@overlay.vexpand = true
|
547
550
|
@overlay.hexpand = true
|
548
551
|
|
@@ -551,11 +554,10 @@ class VMAgui
|
|
551
554
|
|
552
555
|
init_minibuffer
|
553
556
|
|
554
|
-
|
555
557
|
@window.show_all
|
556
558
|
vma.start
|
557
559
|
Vimamsa::Menu.new(@menubar)
|
560
|
+
|
558
561
|
@window.show_all
|
559
|
-
|
560
562
|
end
|
561
563
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
# Following this example:
|
3
|
+
# https://gabmus.org/posts/create_an_auto-resizing_image_widget_with_gtk3_and_python/
|
4
|
+
class ResizableImage < Gtk::DrawingArea
|
5
|
+
attr_accessor :fpath, :pixbuf, :oldimg, :draw_image, :view
|
6
|
+
|
7
|
+
def initialize(fpath, view)
|
8
|
+
@fpath = fpath
|
9
|
+
@pixbuf = GdkPixbuf::Pixbuf.new(:file => fpath)
|
10
|
+
@oldimg = @pixbuf
|
11
|
+
@draw_image = @pixbuf
|
12
|
+
@view = view
|
13
|
+
|
14
|
+
super()
|
15
|
+
end
|
16
|
+
|
17
|
+
# Scale to fit window width
|
18
|
+
def scale_image()
|
19
|
+
pb = @pixbuf
|
20
|
+
view = @view
|
21
|
+
imglimit = view.visible_rect.width - 10
|
22
|
+
|
23
|
+
if @oldimg.width > imglimit or @oldimg.width < imglimit - 10
|
24
|
+
nwidth = imglimit
|
25
|
+
nwidth = pb.width if pb.width < imglimit
|
26
|
+
nheight = (pb.height * (nwidth.to_f / pb.width)).to_i
|
27
|
+
pb = pb.scale_simple(nwidth, nheight, GdkPixbuf::InterpType::HYPER)
|
28
|
+
else
|
29
|
+
pb = @oldimg
|
30
|
+
end
|
31
|
+
@draw_image = pb
|
32
|
+
@oldimg = pb
|
33
|
+
self.set_size_request(pb.width, pb.height)
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
def do_draw(da, cr)
|
38
|
+
# puts @fpath
|
39
|
+
cr.set_source_pixbuf(@draw_image, 0, 0)
|
40
|
+
cr.paint
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
data/lib/vimamsa/gui_menu.rb
CHANGED
@@ -4,7 +4,7 @@ module Vimamsa
|
|
4
4
|
mpath = _mpath.split(".")
|
5
5
|
curnfo = @nfo
|
6
6
|
for y in mpath
|
7
|
-
|
7
|
+
debug(curnfo.inspect)
|
8
8
|
if y.equal?(mpath.last)
|
9
9
|
curnfo[y] = x
|
10
10
|
elsif curnfo[y].nil?
|
@@ -16,12 +16,15 @@ module Vimamsa
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def add_menu_items()
|
19
|
+
|
20
|
+
add_to_menu "File.Example", { :label => "<span foreground='#888888'>Action, [mode] key binding</span>", :action => nil }
|
19
21
|
add_to_menu "File.Save", { :label => "Save", :action => :buf_save }
|
20
22
|
add_to_menu "File.Save as", { :label => "Save As...", :action => :buf_save_as }
|
21
23
|
add_to_menu "File.Open", { :label => "Open", :action => :open_file_dialog }
|
22
24
|
|
23
25
|
add_to_menu "File.New", { :label => "New file", :action => :buf_new }
|
24
26
|
add_to_menu "File.Revert", { :label => "Reload file from disk", :action => :buf_revert }
|
27
|
+
add_to_menu "File.List", { :label => "List open files", :action => :start_buf_manager }
|
25
28
|
|
26
29
|
add_to_menu "File.Quit", { :label => "Quit", :action => :quit }
|
27
30
|
|
@@ -37,8 +40,14 @@ module Vimamsa
|
|
37
40
|
add_to_menu "Actions.FileHistoryFinder", { :label => "Search files in history", :action => :gui_file_history_finder }
|
38
41
|
|
39
42
|
add_to_menu "Actions.experimental.Diff", { :label => "Show Diff of\nunsaved changes", :action => :diff_buffer }
|
40
|
-
|
43
|
+
|
44
|
+
add_to_menu "Actions.experimental.EnableDebug", { :label => "Enable debug", :action => :enable_debug }
|
45
|
+
add_to_menu "Actions.experimental.DisableDebug", { :label => "Disable debug", :action => :disable_debug }
|
46
|
+
add_to_menu "Actions.experimental.ShowImages", { :label => "Show images ⟦img:path⟧", :action => :show_images }
|
47
|
+
|
41
48
|
add_to_menu "Actions.EncryptFile", { :label => "Encrypt file", :action => :encrypt_file }
|
49
|
+
add_to_menu "Help.KeyBindings", { :label => "Show key bindings", :action => :show_key_bindings }
|
50
|
+
|
42
51
|
|
43
52
|
#TODO: :auto_indent_buffer
|
44
53
|
|
@@ -1,6 +1,9 @@
|
|
1
1
|
def gui_select_update_window(item_list, jump_keys, select_callback, update_callback, opt={})
|
2
2
|
$selup = SelectUpdateWindow.new(nil, item_list, jump_keys, select_callback, update_callback, opt)
|
3
3
|
$selup.run
|
4
|
+
# opt fields:
|
5
|
+
# :title
|
6
|
+
# :desc
|
4
7
|
end
|
5
8
|
|
6
9
|
class SelectUpdateWindow
|
@@ -8,7 +11,7 @@ class SelectUpdateWindow
|
|
8
11
|
COLUMN_DESCRIPTION = 1
|
9
12
|
|
10
13
|
def update_item_list(item_list)
|
11
|
-
#
|
14
|
+
# debug item_list.inspect
|
12
15
|
@model.clear
|
13
16
|
for item in item_list
|
14
17
|
iter = @model.append
|
@@ -17,7 +20,7 @@ class SelectUpdateWindow
|
|
17
20
|
else
|
18
21
|
v = ["", item[0]]
|
19
22
|
end
|
20
|
-
|
23
|
+
debug v.inspect
|
21
24
|
iter.set_values(v)
|
22
25
|
end
|
23
26
|
|
@@ -46,10 +49,10 @@ class SelectUpdateWindow
|
|
46
49
|
@selected_row = 0
|
47
50
|
@opt = opt
|
48
51
|
|
49
|
-
|
52
|
+
debug item_list.inspect
|
50
53
|
@update_callback = method(update_callback)
|
51
54
|
@select_callback = method(select_callback)
|
52
|
-
#
|
55
|
+
# debug @update_callback_m.call("").inspect
|
53
56
|
|
54
57
|
vbox = Gtk::Box.new(:vertical, 8)
|
55
58
|
vbox.margin = 8
|
@@ -72,21 +75,21 @@ class SelectUpdateWindow
|
|
72
75
|
update_item_list(item_list)
|
73
76
|
|
74
77
|
@window.signal_connect("key-press-event") do |_widget, event|
|
75
|
-
#
|
78
|
+
# debug "KEYPRESS 1"
|
76
79
|
@entry.handle_event(event)
|
77
80
|
end
|
78
81
|
|
79
82
|
@entry.signal_connect("key_press_event") do |widget, event|
|
80
|
-
#
|
83
|
+
# debug "KEYPRESS 2"
|
81
84
|
if event.keyval == Gdk::Keyval::KEY_Down
|
82
|
-
|
85
|
+
debug "DOWN"
|
83
86
|
set_selected_row(@selected_row + 1)
|
84
87
|
# fixed = iter[COLUMN_FIXED]
|
85
88
|
|
86
89
|
true
|
87
90
|
elsif event.keyval == Gdk::Keyval::KEY_Up
|
88
91
|
set_selected_row(@selected_row - 1)
|
89
|
-
|
92
|
+
debug "UP"
|
90
93
|
true
|
91
94
|
elsif event.keyval == Gdk::Keyval::KEY_Return
|
92
95
|
path = Gtk::TreePath.new(@selected_row.to_s)
|
@@ -94,7 +97,7 @@ class SelectUpdateWindow
|
|
94
97
|
ret = iter[1]
|
95
98
|
@select_callback.call(ret, @selected_row)
|
96
99
|
@window.destroy
|
97
|
-
#
|
100
|
+
# debug iter[1].inspect
|
98
101
|
true
|
99
102
|
elsif event.keyval == Gdk::Keyval::KEY_Escape
|
100
103
|
@window.destroy
|
@@ -105,14 +108,14 @@ class SelectUpdateWindow
|
|
105
108
|
end
|
106
109
|
|
107
110
|
@entry.signal_connect("search-changed") do |widget|
|
108
|
-
|
111
|
+
debug "search changed: #{widget.text || ""}"
|
109
112
|
item_list = @update_callback.call(widget.text)
|
110
113
|
|
111
114
|
update_item_list(item_list)
|
112
115
|
# label.text = widget.text || ""
|
113
116
|
end
|
114
|
-
@entry.signal_connect("changed") {
|
115
|
-
@entry.signal_connect("next-match") {
|
117
|
+
@entry.signal_connect("changed") { debug "[changed] " }
|
118
|
+
@entry.signal_connect("next-match") { debug "[next-match] " }
|
116
119
|
|
117
120
|
if !opt[:desc].nil?
|
118
121
|
descl = Gtk::Label.new(opt[:desc])
|
@@ -160,7 +163,7 @@ class SelectUpdateWindow
|
|
160
163
|
end
|
161
164
|
|
162
165
|
@window.set_default_size(280, 500)
|
163
|
-
|
166
|
+
debug "SelectUpdateWindow"
|
164
167
|
end
|
165
168
|
|
166
169
|
def run
|