origami 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/bin/gui/config.rb +2 -1
- data/bin/gui/file.rb +118 -240
- data/bin/gui/gtkhex.rb +5 -5
- data/bin/gui/hexview.rb +20 -16
- data/bin/gui/imgview.rb +1 -1
- data/bin/gui/menu.rb +138 -158
- data/bin/gui/properties.rb +46 -48
- data/bin/gui/signing.rb +183 -214
- data/bin/gui/textview.rb +1 -1
- data/bin/gui/treeview.rb +13 -7
- data/bin/gui/walker.rb +102 -71
- data/bin/gui/xrefs.rb +1 -1
- data/bin/pdf2ruby +3 -3
- data/bin/pdfcop +18 -11
- data/bin/pdfextract +14 -5
- data/bin/pdfmetadata +3 -3
- data/bin/shell/console.rb +8 -8
- data/bin/shell/hexdump.rb +4 -4
- data/examples/attachments/nested_document.rb +1 -1
- data/examples/javascript/hello_world.rb +3 -3
- data/lib/origami.rb +0 -1
- data/lib/origami/acroform.rb +3 -3
- data/lib/origami/array.rb +1 -3
- data/lib/origami/boolean.rb +1 -3
- data/lib/origami/catalog.rb +3 -9
- data/lib/origami/destinations.rb +2 -2
- data/lib/origami/dictionary.rb +15 -29
- data/lib/origami/encryption.rb +334 -692
- data/lib/origami/extensions/fdf.rb +3 -2
- data/lib/origami/extensions/ppklite.rb +5 -9
- data/lib/origami/filespec.rb +2 -2
- data/lib/origami/filters.rb +54 -36
- data/lib/origami/filters/ascii.rb +67 -49
- data/lib/origami/filters/ccitt.rb +4 -236
- data/lib/origami/filters/ccitt/tables.rb +267 -0
- data/lib/origami/filters/crypt.rb +1 -1
- data/lib/origami/filters/dct.rb +0 -1
- data/lib/origami/filters/flate.rb +3 -43
- data/lib/origami/filters/lzw.rb +62 -99
- data/lib/origami/filters/predictors.rb +135 -105
- data/lib/origami/filters/runlength.rb +34 -22
- data/lib/origami/graphics.rb +2 -2
- data/lib/origami/graphics/colors.rb +89 -63
- data/lib/origami/graphics/path.rb +14 -14
- data/lib/origami/graphics/patterns.rb +31 -33
- data/lib/origami/graphics/render.rb +0 -1
- data/lib/origami/graphics/state.rb +9 -9
- data/lib/origami/graphics/text.rb +17 -17
- data/lib/origami/graphics/xobject.rb +102 -92
- data/lib/origami/javascript.rb +91 -68
- data/lib/origami/linearization.rb +22 -20
- data/lib/origami/metadata.rb +1 -1
- data/lib/origami/name.rb +1 -3
- data/lib/origami/null.rb +1 -3
- data/lib/origami/numeric.rb +3 -13
- data/lib/origami/object.rb +100 -72
- data/lib/origami/page.rb +24 -28
- data/lib/origami/parser.rb +34 -51
- data/lib/origami/parsers/fdf.rb +2 -2
- data/lib/origami/parsers/pdf.rb +41 -18
- data/lib/origami/parsers/pdf/lazy.rb +83 -46
- data/lib/origami/parsers/pdf/linear.rb +19 -10
- data/lib/origami/parsers/ppklite.rb +1 -1
- data/lib/origami/pdf.rb +150 -206
- data/lib/origami/reference.rb +4 -6
- data/lib/origami/signature.rb +76 -48
- data/lib/origami/stream.rb +69 -63
- data/lib/origami/string.rb +2 -19
- data/lib/origami/trailer.rb +25 -22
- data/lib/origami/version.rb +1 -1
- data/lib/origami/xfa.rb +6 -4
- data/lib/origami/xreftable.rb +29 -29
- data/test/test_annotations.rb +16 -38
- data/test/test_pdf_attachment.rb +1 -1
- data/test/test_pdf_parse.rb +1 -1
- data/test/test_xrefs.rb +2 -2
- metadata +4 -4
- data/lib/origami/export.rb +0 -247
data/bin/gui/hexview.rb
CHANGED
@@ -52,29 +52,33 @@ module PDFWalker
|
|
52
52
|
def load(object)
|
53
53
|
return if @current_obj.equal?(object)
|
54
54
|
|
55
|
-
|
56
|
-
self.clear
|
55
|
+
self.clear
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
57
|
+
case object
|
58
|
+
when Origami::Stream
|
59
|
+
load_stream(object)
|
60
|
+
when Origami::String
|
61
|
+
load_string(object)
|
62
|
+
end
|
64
63
|
|
65
|
-
|
66
|
-
|
64
|
+
@current_obj = object
|
65
|
+
end
|
67
66
|
|
68
|
-
|
69
|
-
@view.set_data(object.value)
|
70
|
-
end
|
67
|
+
private
|
71
68
|
|
72
|
-
|
69
|
+
def load_stream(object)
|
70
|
+
begin
|
71
|
+
@view.set_data(object.data)
|
72
|
+
rescue Origami::Filter::Error
|
73
|
+
@view.set_data($!.input_data) if $!.input_data
|
73
74
|
|
74
|
-
|
75
|
-
@parent.error("An error occured while loading this object.\n#{$!} (#{$!.class})")
|
75
|
+
@parent.error("#{$!.class}: #{$!.message}") unless object.filters == [ :DCTDecode ]
|
76
76
|
end
|
77
77
|
end
|
78
|
+
|
79
|
+
def load_string(object)
|
80
|
+
@view.set_data(object.value)
|
81
|
+
end
|
78
82
|
end
|
79
83
|
end
|
80
84
|
end
|
data/bin/gui/imgview.rb
CHANGED
data/bin/gui/menu.rb
CHANGED
@@ -20,32 +20,25 @@
|
|
20
20
|
|
21
21
|
module PDFWalker
|
22
22
|
|
23
|
-
module
|
23
|
+
module PopupMenu
|
24
24
|
|
25
25
|
@@menus = Hash.new([])
|
26
|
-
@@menus[
|
26
|
+
@@menus['PDF'] =
|
27
27
|
[
|
28
28
|
{
|
29
29
|
Name: Stock::SAVE_AS,
|
30
30
|
Sensitive: true,
|
31
|
-
Callback: lambda { |
|
31
|
+
Callback: lambda { |_widget, viewer, _path|
|
32
32
|
viewer.parent.save
|
33
33
|
}
|
34
34
|
},
|
35
|
-
{
|
36
|
-
Name: "Serialize",
|
37
|
-
Sensitive: true,
|
38
|
-
Callback: lambda { |widget, viewer, path|
|
39
|
-
viewer.parent.serialize
|
40
|
-
}
|
41
|
-
},
|
42
35
|
{
|
43
36
|
Name: :"---"
|
44
37
|
},
|
45
38
|
{
|
46
39
|
Name: Stock::PROPERTIES,
|
47
40
|
Sensitive: true,
|
48
|
-
Callback: lambda { |
|
41
|
+
Callback: lambda { |_widget, viewer, _path|
|
49
42
|
viewer.parent.display_file_properties
|
50
43
|
}
|
51
44
|
},
|
@@ -55,29 +48,29 @@ module PDFWalker
|
|
55
48
|
{
|
56
49
|
Name: Stock::CLOSE,
|
57
50
|
Sensitive: true,
|
58
|
-
Callback: lambda { |
|
51
|
+
Callback: lambda { |_widget, viewer, _path|
|
59
52
|
viewer.parent.close
|
60
53
|
}
|
61
54
|
}
|
62
55
|
]
|
63
56
|
|
64
|
-
@@menus[
|
57
|
+
@@menus['Reference'] =
|
65
58
|
[
|
66
59
|
{
|
67
60
|
Name: Stock::JUMP_TO,
|
68
61
|
Sensitive: true,
|
69
|
-
Callback: lambda { |
|
62
|
+
Callback: lambda { |_widget, viewer, path|
|
70
63
|
viewer.row_activated(path, viewer.get_column(viewer.class::TEXTCOL))
|
71
64
|
}
|
72
65
|
}
|
73
66
|
]
|
74
67
|
|
75
|
-
@@menus[
|
68
|
+
@@menus['Revision'] =
|
76
69
|
[
|
77
70
|
{
|
78
71
|
Name: "Save to this revision",
|
79
72
|
Sensitive: true,
|
80
|
-
Callback: lambda { |
|
73
|
+
Callback: lambda { |_widget, viewer, path|
|
81
74
|
revstr = viewer.model.get_value(viewer.model.get_iter(path), viewer.class::TEXTCOL)
|
82
75
|
revstr.slice!(0, "Revision ".size)
|
83
76
|
|
@@ -102,42 +95,42 @@ module PDFWalker
|
|
102
95
|
}
|
103
96
|
]
|
104
97
|
|
105
|
-
@@menus[
|
98
|
+
@@menus['Stream'] =
|
106
99
|
[
|
107
100
|
{
|
108
101
|
Name: "Dump encoded stream",
|
109
102
|
Sensitive: true,
|
110
|
-
Callback: lambda { |
|
111
|
-
stream = viewer.
|
103
|
+
Callback: lambda { |_widget, viewer, path|
|
104
|
+
stream = viewer.object_by_path(path)
|
112
105
|
|
113
|
-
viewer.parent.save_data("Save stream to file", stream.encoded_data)
|
106
|
+
viewer.parent.save_data("Save encoded stream to file", stream.encoded_data)
|
114
107
|
}
|
115
108
|
},
|
116
109
|
{
|
117
110
|
Name: "Dump decoded stream",
|
118
111
|
Sensitive: true,
|
119
|
-
Callback: lambda { |
|
120
|
-
stream = viewer.
|
112
|
+
Callback: lambda { |_widget, viewer, path|
|
113
|
+
stream = viewer.object_by_path(path)
|
121
114
|
|
122
|
-
viewer.parent.save_data("Save stream to file", stream.data)
|
115
|
+
viewer.parent.save_data("Save decoded stream to file", stream.data)
|
123
116
|
}
|
124
117
|
}
|
125
118
|
]
|
126
119
|
|
127
|
-
@@menus[
|
120
|
+
@@menus['String'] =
|
128
121
|
[
|
129
122
|
{
|
130
123
|
Name: "Dump string",
|
131
124
|
Sensitive: true,
|
132
|
-
Callback: lambda { |
|
133
|
-
string = viewer.
|
125
|
+
Callback: lambda { |_widget, viewer, path|
|
126
|
+
string = viewer.object_by_path(path)
|
134
127
|
|
135
128
|
viewer.parent.save_data("Save string to file", string.value)
|
136
129
|
}
|
137
130
|
}
|
138
131
|
]
|
139
132
|
|
140
|
-
@@menus[
|
133
|
+
@@menus['Image'] = @@menus['Stream'] +
|
141
134
|
[
|
142
135
|
{
|
143
136
|
Name: :"---"
|
@@ -145,8 +138,8 @@ module PDFWalker
|
|
145
138
|
{
|
146
139
|
Name: "View image",
|
147
140
|
Sensitive: true,
|
148
|
-
Callback: lambda { |
|
149
|
-
stm = viewer.
|
141
|
+
Callback: lambda { |_widget, viewer, path|
|
142
|
+
stm = viewer.object_by_path(path)
|
150
143
|
w,h = stm.Width, stm.Height
|
151
144
|
|
152
145
|
if stm.ColorSpace.nil?
|
@@ -183,67 +176,50 @@ module PDFWalker
|
|
183
176
|
def popup_menu(obj, event, path)
|
184
177
|
menu = Menu.new
|
185
178
|
|
186
|
-
type =
|
187
|
-
if obj.is_a?(Origami::Object)
|
188
|
-
if obj.is_a?(Origami::Graphics::ImageXObject)
|
189
|
-
:Image
|
190
|
-
else
|
191
|
-
obj.native_type.to_s.split("::").last.to_sym
|
192
|
-
end
|
193
|
-
else
|
194
|
-
case obj
|
195
|
-
when Origami::PDF
|
196
|
-
:"PDF File"
|
197
|
-
when Origami::PDF::Revision, Origami::FDF::Revision, Origami::PPKLite::Revision
|
198
|
-
:Revision
|
199
|
-
when ::Array
|
200
|
-
:Body
|
201
|
-
when Origami::PDF::Header, Origami::FDF::Header, Origami::PPKLite::Header
|
202
|
-
:Header
|
203
|
-
when Origami::Trailer
|
204
|
-
:Trailer
|
205
|
-
when Origami::XRef::Section
|
206
|
-
:XRefSection
|
207
|
-
when Origami::XRef::Subsection
|
208
|
-
:XRefSubsection
|
209
|
-
when Origami::XRef, Origami::XRefToCompressedObj
|
210
|
-
:XRef
|
211
|
-
else
|
212
|
-
:Unknown
|
213
|
-
end
|
214
|
-
end
|
179
|
+
type = popup_menu_key(obj)
|
215
180
|
|
181
|
+
# Create menu title.
|
216
182
|
title = obj.is_a?(Origami::Object) ? "Object : " : ""
|
217
183
|
title << type.to_s
|
218
184
|
menu.append(MenuItem.new(title).set_sensitive(false).modify_text(Gtk::STATE_INSENSITIVE, Gdk::Color.new(255,0,255)))
|
219
185
|
|
220
|
-
|
221
|
-
|
222
|
-
menu.append(MenuItem.new("Number : #{obj.no}; Generation : #{obj.generation}").set_sensitive(false))
|
223
|
-
menu.append(MenuItem.new("File offset : #{obj.file_offset}").set_sensitive(false))
|
186
|
+
# Object information.
|
187
|
+
create_object_menu(menu, obj) if obj.is_a?(Origami::Object)
|
224
188
|
|
225
|
-
|
226
|
-
|
227
|
-
ref = self.model.get_value(self.model.get_iter(path), self.class::OBJCOL)
|
228
|
-
self.parent.show_xrefs(ref)
|
229
|
-
end
|
189
|
+
# Type-specific menu.
|
190
|
+
create_type_menu(menu, type, path)
|
230
191
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
192
|
+
menu.show_all
|
193
|
+
menu.popup(nil, nil, event.button, event.time)
|
194
|
+
end
|
195
|
+
|
196
|
+
private
|
197
|
+
|
198
|
+
def create_object_menu(menu, object)
|
199
|
+
if object.indirect?
|
200
|
+
menu.append(MenuItem.new("Number : #{object.no}; Generation : #{object.generation}").set_sensitive(false))
|
201
|
+
menu.append(MenuItem.new("File offset : #{object.file_offset}").set_sensitive(false))
|
202
|
+
|
203
|
+
getxrefs = MenuItem.new("Search references to this object").set_sensitive(true)
|
204
|
+
getxrefs.signal_connect("activate") do
|
205
|
+
self.parent.show_xrefs(object)
|
206
|
+
end
|
207
|
+
menu.append(getxrefs)
|
238
208
|
|
239
|
-
|
209
|
+
elsif not object.parent.nil?
|
210
|
+
gotoparent = MenuItem.new("Goto Parent Object").set_sensitive(true)
|
211
|
+
gotoparent.signal_connect("activate") do
|
212
|
+
self.goto(object.parent)
|
240
213
|
end
|
214
|
+
menu.append(gotoparent)
|
241
215
|
end
|
216
|
+
end
|
242
217
|
|
218
|
+
def create_type_menu(menu, type, path)
|
243
219
|
items = @@menus[type]
|
244
220
|
menu.append(SeparatorMenuItem.new) if not items.empty?
|
245
221
|
|
246
|
-
items.each
|
222
|
+
items.each do |item|
|
247
223
|
if item[:Name] == :"---"
|
248
224
|
entry = SeparatorMenuItem.new
|
249
225
|
else
|
@@ -258,10 +234,34 @@ module PDFWalker
|
|
258
234
|
end
|
259
235
|
|
260
236
|
menu.append(entry)
|
261
|
-
|
237
|
+
end
|
238
|
+
end
|
262
239
|
|
263
|
-
|
264
|
-
|
240
|
+
def popup_menu_key(object)
|
241
|
+
if object.is_a?(Origami::Object)
|
242
|
+
popup_menu_object_key(object)
|
243
|
+
else
|
244
|
+
popup_menu_struct_key(object)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def popup_menu_object_key(object)
|
249
|
+
if object.is_a?(Origami::Graphics::ImageXObject)
|
250
|
+
'Image'
|
251
|
+
else
|
252
|
+
object.native_type.to_s.split("::").last
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def popup_menu_struct_key(struct)
|
257
|
+
case struct
|
258
|
+
when ::Array
|
259
|
+
'Body'
|
260
|
+
when Origami::XRef, Origami::XRefToCompressedObject
|
261
|
+
'XRef'
|
262
|
+
else
|
263
|
+
struct.class.name.split('::').last
|
264
|
+
end
|
265
265
|
end
|
266
266
|
end
|
267
267
|
|
@@ -279,110 +279,90 @@ module PDFWalker
|
|
279
279
|
|
280
280
|
@menu = MenuBar.new
|
281
281
|
|
282
|
-
|
282
|
+
create_file_menu
|
283
|
+
create_document_menu
|
284
|
+
create_help_menu
|
285
|
+
end
|
286
|
+
|
287
|
+
def create_file_menu
|
283
288
|
file_ag = Gtk::AccelGroup.new
|
284
289
|
@file_menu = Menu.new.set_accel_group(file_ag).set_accel_path("<PDF Walker>/File")
|
285
290
|
add_accel_group(file_ag)
|
286
291
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
@
|
297
|
-
@
|
298
|
-
@
|
299
|
-
@
|
300
|
-
|
301
|
-
@export_pdf_menu.signal_connect('activate') do save end
|
302
|
-
@export_graph_menu.signal_connect('activate') do save_dot end
|
303
|
-
@export_graphml_menu.signal_connect('activate') do save_graphml end
|
304
|
-
|
305
|
-
@export_menu.append(@export_pdf_menu)
|
306
|
-
@export_menu.append(@export_graph_menu)
|
307
|
-
@export_menu.append(@export_graphml_menu)
|
308
|
-
|
309
|
-
@file_menu_saveas.set_submenu(@export_menu)
|
310
|
-
|
311
|
-
@file_menu_open.signal_connect('activate') do open end
|
312
|
-
@file_menu_deserialize.signal_connect('activate') do deserialize end
|
313
|
-
@file_menu_refresh.signal_connect('activate') do open(@filename) end
|
314
|
-
@file_menu_close.signal_connect('activate') do close end
|
315
|
-
@file_menu_serialize.signal_connect('activate') do serialize end
|
316
|
-
@file_menu_exit.signal_connect('activate') do self.destroy end
|
292
|
+
entries = [
|
293
|
+
@file_menu_open = ImageMenuItem.new(Stock::OPEN).set_accel_path("<PDF Walker>/File/Open"),
|
294
|
+
@file_menu_recent = MenuItem.new("Last opened"),
|
295
|
+
@file_menu_refresh = ImageMenuItem.new(Stock::REFRESH).set_sensitive(false).set_accel_path("<PDF Walker>/File/Refresh"),
|
296
|
+
@file_menu_close = ImageMenuItem.new(Stock::CLOSE).set_sensitive(false).set_accel_path("<PDF Walker>/File/Close"),
|
297
|
+
@file_menu_saveas = ImageMenuItem.new(Stock::SAVE_AS).set_sensitive(false).set_accel_path("<PDF Walker>/File/Save"),
|
298
|
+
@file_menu_exit = ImageMenuItem.new(Stock::QUIT).set_accel_path("<PDF Walker>/File/Quit"),
|
299
|
+
]
|
300
|
+
|
301
|
+
@file_menu_open.signal_connect('activate') { open }
|
302
|
+
@file_menu_refresh.signal_connect('activate') { open(@filename) }
|
303
|
+
@file_menu_close.signal_connect('activate') { close }
|
304
|
+
@file_menu_saveas.signal_connect('activate') { save }
|
305
|
+
@file_menu_exit.signal_connect('activate') { self.destroy }
|
317
306
|
|
318
307
|
update_recent_menu
|
319
308
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
@file_menu.append(@file_menu_refresh)
|
324
|
-
@file_menu.append(@file_menu_close)
|
325
|
-
@file_menu.append(@file_menu_saveas)
|
326
|
-
@file_menu.append(@file_menu_serialize)
|
327
|
-
@file_menu.append(@file_menu_exit)
|
309
|
+
entries.each do |entry|
|
310
|
+
@file_menu.append(entry)
|
311
|
+
end
|
328
312
|
|
329
313
|
@menu.append(MenuItem.new('_File').set_submenu(@file_menu))
|
330
|
-
|
314
|
+
end
|
331
315
|
|
316
|
+
def create_document_menu
|
332
317
|
doc_ag = Gtk::AccelGroup.new
|
333
318
|
@document_menu = Menu.new.set_accel_group(doc_ag)
|
334
319
|
add_accel_group(doc_ag)
|
335
320
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
@
|
353
|
-
@
|
354
|
-
@
|
355
|
-
@
|
356
|
-
|
357
|
-
@
|
358
|
-
@
|
359
|
-
@
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
@document_menu.append(@document_menu_gotofield)
|
365
|
-
@document_menu.append(@document_menu_gotoobj)
|
366
|
-
@document_menu.append(MenuItem.new)
|
367
|
-
@document_menu.append(@document_menu_sign)
|
368
|
-
@document_menu.append(@document_menu_ur)
|
369
|
-
@document_menu.append(@document_menu_properties)
|
321
|
+
entries = [
|
322
|
+
@document_menu_search = ImageMenuItem.new(Stock::FIND).set_sensitive(false).set_accel_path("<PDF Walker>/Document/Search"),
|
323
|
+
MenuItem.new,
|
324
|
+
@document_menu_gotocatalog = MenuItem.new("Jump to Catalog").set_sensitive(false),
|
325
|
+
@document_menu_gotodocinfo = MenuItem.new("Jump to Document Info").set_sensitive(false),
|
326
|
+
@document_menu_gotometadata = MenuItem.new("Jump to Metadata").set_sensitive(false),
|
327
|
+
@document_menu_gotorev = MenuItem.new("Jump to Revision...").set_sensitive(false),
|
328
|
+
@document_menu_gotopage = MenuItem.new("Jump to Page...").set_sensitive(false),
|
329
|
+
@document_menu_gotofield = MenuItem.new("Jump to Field...").set_sensitive(false),
|
330
|
+
@document_menu_gotoobj = MenuItem.new("Jump to Object...").set_sensitive(false),
|
331
|
+
MenuItem.new,
|
332
|
+
@document_menu_sign = MenuItem.new("Sign the document").set_sensitive(false),
|
333
|
+
@document_menu_ur = MenuItem.new("Enable Usage Rights").set_sensitive(false),
|
334
|
+
@document_menu_properties = ImageMenuItem.new(Stock::PROPERTIES).set_sensitive(false),
|
335
|
+
]
|
336
|
+
|
337
|
+
@document_menu_search.signal_connect('activate') { search }
|
338
|
+
@document_menu_gotocatalog.signal_connect('activate') { goto_catalog }
|
339
|
+
@document_menu_gotodocinfo.signal_connect('activate') { goto_docinfo }
|
340
|
+
@document_menu_gotometadata.signal_connect('activate') { goto_metadata }
|
341
|
+
@document_menu_gotoobj.signal_connect('activate') { goto_object }
|
342
|
+
@document_menu_properties.signal_connect('activate') { display_file_properties }
|
343
|
+
@document_menu_sign.signal_connect('activate') { display_signing_wizard }
|
344
|
+
@document_menu_ur.signal_connect('activate') { display_usage_rights_wizard }
|
345
|
+
|
346
|
+
entries.each do |entry|
|
347
|
+
@document_menu.append(entry)
|
348
|
+
end
|
370
349
|
|
371
350
|
@menu.append(MenuItem.new('_Document').set_submenu(@document_menu))
|
372
|
-
|
351
|
+
end
|
352
|
+
|
353
|
+
def create_help_menu
|
373
354
|
@help_menu = Menu.new
|
374
|
-
@help_menu_profile = CheckMenuItem.new("Profiling (Debug purposes only)").set_active(@config.profile?)
|
375
|
-
@help_menu_profile.signal_connect('toggled') do @config.set_profiling(@help_menu_profile.active?) end
|
376
355
|
|
356
|
+
@help_menu_profile = CheckMenuItem.new("Profiling (Debug purposes only)").set_active(@config.profile?)
|
377
357
|
@help_menu_about = ImageMenuItem.new(Stock::ABOUT)
|
378
358
|
|
379
|
-
@
|
359
|
+
@help_menu_profile.signal_connect('toggled') do @config.set_profiling(@help_menu_profile.active?) end
|
360
|
+
@help_menu_about.signal_connect('activate') { about }
|
380
361
|
|
381
362
|
@help_menu.append(@help_menu_profile)
|
382
363
|
@help_menu.append(@help_menu_about)
|
383
364
|
|
384
365
|
@menu.append(MenuItem.new('_Help').set_submenu(@help_menu))
|
385
|
-
####################################################
|
386
366
|
end
|
387
367
|
|
388
368
|
def update_recent_menu
|