Class EditMenu
In: lib/json/editor.rb
Parent: Object
OptionsMenu EditMenu PopUpMenu FileMenu MainWindow JSONTreeView Enumerable TreeIter JSONError GeneratorError ParserError MissingUnicodeSupport CircularDatastructure NestingError StandardError StringScanner Parser State Gtk::Window Gtk::TreeView MenuExtension Editor lib/json/editor.rb Gtk lib/json/common.rb Ext Editor lib/json/pure/parser.rb lib/json/pure/generator.rb Object Integer FalseClass Array Hash Float NilClass TrueClass Extend String GeneratorMethods Generator Pure JSON dot/f_9.png

This class creates the Edit pulldown menu.

Methods

copy   create   find   find_again   paste   sort  

Included Modules

MenuExtension

Public Instance methods

Copy data from model into primary clipboard.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

[Validate]