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