vimamsa 0.1.6 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|