Class | EditMenu |
In: |
lib/json/editor.rb
|
Parent: | Object |
Copy data from model into primary clipboard.
# File lib/json/editor.rb, line 548 548: def copy(item) 549: data = Editor.model2data(model.iter_first) 550: json = JSON.pretty_generate(data, :max_nesting => false) 551: c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY) 552: c.text = json 553: end
Create the menu.
# File lib/json/editor.rb, line 645 645: def create 646: title = MenuItem.new('Edit') 647: title.submenu = menu 648: add_item('Copy', ?c, &method(:copy)) 649: add_item('Paste', ?v, &method(:paste)) 650: add_separator 651: add_item('Find', ?f, &method(:find)) 652: add_item('Find Again', ?g, &method(:find_again)) 653: add_separator 654: add_item('Sort', ?S, &method(:sort)) 655: title 656: end
Find a string in all nodes’ contents and select the found node in the treeview.
# File lib/json/editor.rb, line 570 570: def find(item) 571: @search = ask_for_find_term(@search) or return 572: iter = model.get_iter('0') or return 573: iter.recursive_each do |i| 574: if @iter 575: if @iter != i 576: next 577: else 578: @iter = nil 579: next 580: end 581: elsif @search.match(i[CONTENT_COL]) 582: set_cursor(i.path, nil, false) 583: @iter = i 584: break 585: end 586: end 587: end
Repeat the last search given by find.
# File lib/json/editor.rb, line 590 590: def find_again(item) 591: @search or return 592: iter = model.get_iter('0') 593: iter.recursive_each do |i| 594: if @iter 595: if @iter != i 596: next 597: else 598: @iter = nil 599: next 600: end 601: elsif @search.match(i[CONTENT_COL]) 602: set_cursor(i.path, nil, false) 603: @iter = i 604: break 605: end 606: end 607: end
Copy json text from primary clipboard into model.
# File lib/json/editor.rb, line 556 556: def paste(item) 557: c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY) 558: if json = c.wait_for_text 559: window.ask_save if @changed 560: begin 561: window.edit json 562: rescue JSON::ParserError 563: window.clear 564: end 565: end 566: 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 611 611: def sort(item) 612: if current = selection.selected 613: if current.type == 'Array' 614: parent = current.parent 615: ary = Editor.model2data(current) 616: order, reverse = ask_for_order 617: order or return 618: begin 619: block = eval "lambda { |x| #{order} }" 620: if reverse 621: ary.sort! { |a,b| block[b] <=> block[a] } 622: else 623: ary.sort! { |a,b| block[a] <=> block[b] } 624: end 625: rescue => e 626: Editor.error_dialog(self, "Failed to sort Array with #{order}: #{e}!") 627: else 628: Editor.data2model(ary, model, parent) do |m| 629: m.insert_before(parent, current) 630: end 631: model.remove(current) 632: expand_collapse(parent) 633: window.change 634: toplevel.display_status("Array has been sorted.") 635: end 636: else 637: toplevel.display_status("Only Array nodes can be sorted!") 638: end 639: else 640: toplevel.display_status("Select an Array to sort first!") 641: end 642: end