Class: PDFWalker::XrefsDialog

Inherits:
Dialog
  • Object
show all
Defined in:
lib/pdfwalker/xrefs.rb

Constant Summary collapse

OBJCOL =
0
REFCOL =
1
NAMECOL =
2

Instance Method Summary collapse

Constructor Details

#initialize(parent, target) ⇒ XrefsDialog

Returns a new instance of XrefsDialog.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/pdfwalker/xrefs.rb', line 34

def initialize(parent, target)
    super("Xrefs to #{target.reference}", parent, Dialog::MODAL, [Stock::CLOSE, Dialog::RESPONSE_NONE])
    @parent = parent

    @list = ListStore.new(Object, String, String)
    @view = TreeView.new(@list)

    column = Gtk::TreeViewColumn.new("Origin", Gtk::CellRendererText.new, text: REFCOL)
    @view.append_column(column)

    column = Gtk::TreeViewColumn.new("Objects", Gtk::CellRendererText.new, text: NAMECOL)
    @view.append_column(column)

    target.xrefs.each { |obj|
        str = obj.type.to_s
        iter = @list.append
        @list.set_value(iter, OBJCOL, obj)

        obj = obj.parent until obj.indirect?
        @list.set_value(iter, REFCOL, obj.reference.to_s)

        @list.set_value(iter, NAMECOL, str)
    }

    @view.signal_connect("row_activated") { |_tree, _path, _column|
        if @view.selection.selected
            from = @list.get_value(@view.selection.selected, OBJCOL)
            @parent.treeview.goto(from)
        end
    }

    scroll = ScrolledWindow.new.set_policy(POLICY_NEVER, POLICY_AUTOMATIC)
    scroll.add(@view)
    vbox.add(scroll)

    set_default_size(200, 200)

    signal_connect('response') { destroy }
    show_all
end