Method: PDFWalker::PDFTree#initialize

Defined in:
lib/pdfwalker/treeview.rb

#initialize(parent) ⇒ PDFTree

Returns a new instance of PDFTree.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/pdfwalker/treeview.rb', line 58

def initialize(parent)
    @parent = parent

    reset_appearance

    @treestore = TreeStore.new(Object::Object, String, Pango::Weight, Pango::Style, String, String, Integer)
    super(@treestore)

    signal_connect('cursor-changed') {
        iter = selection.selected
        if iter
            obj = @treestore.get_value(iter, OBJCOL)

            parent.hexview.load(obj)
            parent.objectview.load(obj)
        end
    }

    signal_connect('row-activated') { |_tree, path,_column|
        if selection.selected
            obj = @treestore.get_value(selection.selected, OBJCOL)

            if row_expanded?(path)
                collapse_row(path)
            else
                expand_row(path, false)
            end

            goto(obj) if obj.is_a?(Origami::Reference)
        end
    }

    signal_connect('row-expanded') { |_tree, iter, _path|
        obj = @treestore.get_value(iter, OBJCOL)

        if obj.is_a?(Origami::Stream) and iter.n_children == 1

            # Processing with an XRef or Object Stream
            if obj.is_a?(Origami::ObjectStream)
                obj.each { |embeddedobj|
                    load_object(iter, embeddedobj)
                }

            elsif obj.is_a?(Origami::XRefStream)
                obj.each { |xref|
                    load_xrefstm(iter, xref)
                }
            end
        end

        for i in 0...iter.n_children
            subiter = iter.nth_child(i)
            subobj = @treestore.get_value(subiter, OBJCOL)

            load_sub_objects(subiter, subobj)
        end
    }

    add_events(Gdk::Event::BUTTON_PRESS_MASK)
    signal_connect('button_press_event') { |_widget, event|
        if event.button == 3 && parent.opened
            path = get_path(event.x,event.y).first
            set_cursor(path, nil, false)

            obj = @treestore.get_value(@treestore.get_iter(path), OBJCOL)
            popup_menu(obj, event, path)
        end
    }
end