| Class | EditMenu |
| In: |
lib/json/editor.rb
|
| Parent: | Object |
This class creates the Edit pulldown menu.
Create the menu.
# File lib/json/editor.rb, line 630
630: def create
631: title = MenuItem.new('Edit')
632: title.submenu = menu
633: add_item('Find', ?f, &method(:find))
634: add_item('Find Again', ?g, &method(:find_again))
635: add_separator
636: add_item('Sort', ?S, &method(:sort))
637: title
638: end
Find a string in all nodes’ contents and select the found node in the treeview.
# File lib/json/editor.rb, line 549
549: def find(item)
550: search = ask_for_find_term or return
551: begin
552: @search = Regexp.new(search)
553: rescue => e
554: Editor.error_dialog(self, "Evaluation of regex /#{search}/ failed: #{e}!")
555: return
556: end
557: iter = model.get_iter('0')
558: iter.recursive_each do |i|
559: if @iter
560: if @iter != i
561: next
562: else
563: @iter = nil
564: next
565: end
566: elsif @search.match(i[CONTENT_COL])
567: set_cursor(i.path, nil, false)
568: @iter = i
569: break
570: end
571: end
572: end
Repeat the last search given by find.
# File lib/json/editor.rb, line 575
575: def find_again(item)
576: @search or return
577: iter = model.get_iter('0')
578: iter.recursive_each do |i|
579: if @iter
580: if @iter != i
581: next
582: else
583: @iter = nil
584: next
585: end
586: elsif @search.match(i[CONTENT_COL])
587: set_cursor(i.path, nil, false)
588: @iter = i
589: break
590: end
591: end
592: end
Sort (Reverse sort) all elements of the selected array by the given expression. x is the element in question.
# File lib/json/editor.rb, line 596
596: def sort(item)
597: if current = selection.selected
598: if current.type == 'Array'
599: parent = current.parent
600: ary = Editor.model2data(current)
601: order, reverse = ask_for_order
602: order or return
603: begin
604: block = eval "lambda { |x| #{order} }"
605: if reverse
606: ary.sort! { |a,b| block[b] <=> block[a] }
607: else
608: ary.sort! { |a,b| block[a] <=> block[b] }
609: end
610: rescue => e
611: Editor.error_dialog(self, "Failed to sort Array with #{order}: #{e}!")
612: else
613: Editor.data2model(ary, model, parent) do |m|
614: m.insert_before(parent, current)
615: end
616: model.remove(current)
617: expand_collapse(parent)
618: window.change
619: toplevel.display_status("Array has been sorted.")
620: end
621: else
622: toplevel.display_status("Only Array nodes can be sorted!")
623: end
624: else
625: toplevel.display_status("Select an Array to sort first!")
626: end
627: end