ifmapper 2.0.9 → 2.2.4
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/HISTORY.txt +89 -76
- data/IFMapper.gemspec +32 -28
- data/IFMapper.rbw +1 -2
- data/bin/IFMapper +4 -3
- data/docs/en/index.html +45 -24
- data/docs/en/start.html +729 -517
- data/docs/es/start.html +808 -1191
- data/docs/images/svg_export.gif +0 -0
- data/lib/IFMapper/FXMapperSettings.rb +1 -1
- data/lib/IFMapper/FXMapperWindow.rb +211 -217
- data/lib/IFMapper/FXSVGMapExporterOptionsDialogBox.rb +335 -107
- data/lib/IFMapper/IFMWriter.rb +1 -2
- data/lib/IFMapper/Inform7Writer.rb +2 -2
- data/lib/IFMapper/InformWriter.rb +2 -2
- data/lib/IFMapper/MapPrinting.rb +104 -101
- data/lib/IFMapper/PDFMapExporter.rb +2 -521
- data/lib/IFMapper/PDFMapExporter_prawn.rb +132 -103
- data/lib/IFMapper/SVGMapAppend.rb +155 -0
- data/lib/IFMapper/SVGMapExporter.rb +1303 -1091
- data/lib/IFMapper/TADSWriter.rb +4 -3
- data/lib/IFMapper/locales/en/Messages.rb +84 -39
- data/lib/IFMapper/locales/es/Messages.rb +94 -29
- data/lib/IFMapper/locales/es/Messages_iso-8859-1.rb +69 -15
- data/maps/CityOfSecrets.map +0 -0
- metadata +32 -10
Binary file
|
@@ -8,6 +8,8 @@ begin
|
|
8
8
|
rescue LoadError
|
9
9
|
end
|
10
10
|
|
11
|
+
load "IFMapper.gemspec"
|
12
|
+
|
11
13
|
def no_fox
|
12
14
|
require "IFMapper/locales/en/Messages.rb"
|
13
15
|
$stderr.puts ERR_NO_FOX
|
@@ -20,7 +22,7 @@ end
|
|
20
22
|
def get_fox
|
21
23
|
##### ARRRGH!!!! Why does Lyle keep changing the fxruby name on each
|
22
24
|
##### release!
|
23
|
-
foxes = [ 'fox16', 'fox14', 'fox12', 'fox' ]
|
25
|
+
foxes = [ 'fox18', 'fox17', 'fox16', 'fox14', 'fox12', 'fox' ]
|
24
26
|
foxes.each { |fox|
|
25
27
|
begin
|
26
28
|
require "#{fox}"
|
@@ -30,7 +32,7 @@ def get_fox
|
|
30
32
|
no_fox if fox == foxes[-1]
|
31
33
|
end
|
32
34
|
}
|
33
|
-
|
35
|
+
|
34
36
|
# verify fxruby version
|
35
37
|
ver, rev, = Fox::fxrubyversion().split('.')
|
36
38
|
no_fox if ver.to_i < 1 or rev.to_i < 2
|
@@ -40,7 +42,6 @@ end
|
|
40
42
|
get_fox
|
41
43
|
include Fox
|
42
44
|
|
43
|
-
load "IFMapper.gemspec"
|
44
45
|
require 'IFMapper/FXMap'
|
45
46
|
require 'IFMapper/FXMapperSettings'
|
46
47
|
require 'IFMapper/FXWarningBox'
|
@@ -58,9 +59,6 @@ end
|
|
58
59
|
|
59
60
|
class FXMapperWindow < FXMainWindow
|
60
61
|
|
61
|
-
PROGRAM_NAME = "Interactive Fiction Mapper"
|
62
|
-
AUTHOR = "Gonzalo Garramuno"
|
63
|
-
|
64
62
|
@@copy_buffer = nil
|
65
63
|
@@default_options = FXMapperSettings.new
|
66
64
|
|
@@ -188,8 +186,8 @@ class FXMapperWindow < FXMainWindow
|
|
188
186
|
# First, make sure we don't have it loaded already...
|
189
187
|
@maps.each { |m|
|
190
188
|
if m.filename == file
|
191
|
-
|
192
|
-
|
189
|
+
@mdiclient.setActiveChild(m.window)
|
190
|
+
return
|
193
191
|
end
|
194
192
|
}
|
195
193
|
|
@@ -199,10 +197,10 @@ class FXMapperWindow < FXMainWindow
|
|
199
197
|
make_new_map = false
|
200
198
|
if @maps.size == 1
|
201
199
|
@maps[0].sections.each { |p|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
200
|
+
if p.rooms.size != 0
|
201
|
+
make_new_map = true
|
202
|
+
break
|
203
|
+
end
|
206
204
|
}
|
207
205
|
else
|
208
206
|
make_new_map = true
|
@@ -232,20 +230,20 @@ class FXMapperWindow < FXMainWindow
|
|
232
230
|
|
233
231
|
if not tmp.kind_of?(Map) and not tmp.kind_of?(FXMap)
|
234
232
|
$stderr.puts tmp
|
235
|
-
w = FXWarningBox.new( self,
|
236
|
-
|
233
|
+
w = FXWarningBox.new( self,
|
234
|
+
"#{tmp}")
|
237
235
|
w.execute
|
238
|
-
status "#{ERR_COULD_NOT_LOAD} '#{file}'."
|
236
|
+
status "#{ERR_COULD_NOT_LOAD} '#{file}'."
|
239
237
|
if make_new_map
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
238
|
+
if map.close_cb
|
239
|
+
@maps.delete(map)
|
240
|
+
GC.start
|
241
|
+
end
|
244
242
|
end
|
245
243
|
sleep 2
|
246
244
|
return
|
247
245
|
end
|
248
|
-
|
246
|
+
|
249
247
|
copy_map(map, tmp, file)
|
250
248
|
end
|
251
249
|
|
@@ -311,7 +309,7 @@ class FXMapperWindow < FXMainWindow
|
|
311
309
|
#
|
312
310
|
def language_cb(sender, msg, opts)
|
313
311
|
@@default_options['Language'] = LANGUAGES[sender.text]
|
314
|
-
|
312
|
+
|
315
313
|
require "IFMapper/locales/#{language}/Messages.rb"
|
316
314
|
recreate
|
317
315
|
end
|
@@ -322,19 +320,19 @@ class FXMapperWindow < FXMainWindow
|
|
322
320
|
def new_map
|
323
321
|
mapname = "#{MSG_EMPTY_MAP} \##{@maps.size+1}"
|
324
322
|
@maps.push( FXMap.new(mapname, @mdiclient, @@default_options.dup,
|
325
|
-
|
323
|
+
@mdiicon, @mdimenu, MDI_NORMAL, 0, 0, 790, 500) )
|
326
324
|
map = @maps[-1]
|
327
325
|
map.window.connect(SEL_PAINT) {
|
328
326
|
map.draw
|
329
327
|
}
|
330
328
|
map.window.connect(SEL_CLOSE) {
|
331
329
|
if map.close_cb
|
332
|
-
|
330
|
+
@maps.delete(map)
|
333
331
|
end
|
334
332
|
if @maps[-1]
|
335
|
-
|
333
|
+
@maps[-1].update_roomlist
|
336
334
|
else
|
337
|
-
|
335
|
+
FXMap::no_maps
|
338
336
|
end
|
339
337
|
}
|
340
338
|
|
@@ -384,7 +382,7 @@ class FXMapperWindow < FXMainWindow
|
|
384
382
|
def printer_dialog(title = MSG_PRINT_MAP)
|
385
383
|
map = current_map
|
386
384
|
dlg = FXPrintDialog.new(self, title + " for #{map.name}")
|
387
|
-
dlg.printer.flags |= PRINT_DEST_PAPER
|
385
|
+
dlg.printer.flags |= PRINT_DEST_PAPER
|
388
386
|
return dlg.printer if dlg.execute != 0
|
389
387
|
return false
|
390
388
|
end
|
@@ -412,10 +410,10 @@ class FXMapperWindow < FXMainWindow
|
|
412
410
|
return unless map
|
413
411
|
|
414
412
|
require 'IFMapper/FXMapFileDialog'
|
415
|
-
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_IFM,
|
416
|
-
|
417
|
-
|
418
|
-
|
413
|
+
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_IFM,
|
414
|
+
[
|
415
|
+
FMT_IFM
|
416
|
+
])
|
419
417
|
map.export_ifm(d.filename) if d.filename != ''
|
420
418
|
end
|
421
419
|
|
@@ -427,10 +425,10 @@ class FXMapperWindow < FXMainWindow
|
|
427
425
|
return unless map
|
428
426
|
|
429
427
|
require 'IFMapper/FXMapFileDialog'
|
430
|
-
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TRIZBORT,
|
431
|
-
|
432
|
-
|
433
|
-
|
428
|
+
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TRIZBORT,
|
429
|
+
[
|
430
|
+
FMT_TRIZBORT
|
431
|
+
])
|
434
432
|
map.export_trizbort(d.filename) if d.filename != ''
|
435
433
|
end
|
436
434
|
|
@@ -442,10 +440,10 @@ class FXMapperWindow < FXMainWindow
|
|
442
440
|
return unless map
|
443
441
|
|
444
442
|
require 'IFMapper/FXMapFileDialog'
|
445
|
-
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM6,
|
446
|
-
|
447
|
-
|
448
|
-
|
443
|
+
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM6,
|
444
|
+
[
|
445
|
+
FMT_INFORM6,
|
446
|
+
])
|
449
447
|
map.export_inform( d.filename ) if d.filename != ''
|
450
448
|
end
|
451
449
|
|
@@ -457,10 +455,10 @@ class FXMapperWindow < FXMainWindow
|
|
457
455
|
return unless map
|
458
456
|
|
459
457
|
require 'IFMapper/FXMapFileDialog'
|
460
|
-
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM7,
|
461
|
-
|
462
|
-
|
463
|
-
|
458
|
+
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM7,
|
459
|
+
[
|
460
|
+
FMT_INFORM7,
|
461
|
+
])
|
464
462
|
map.export_inform7( d.filename ) if d.filename != ''
|
465
463
|
end
|
466
464
|
|
@@ -474,15 +472,15 @@ class FXMapperWindow < FXMainWindow
|
|
474
472
|
|
475
473
|
require 'IFMapper/TADSWriter'
|
476
474
|
require 'IFMapper/FXMapFileDialog'
|
477
|
-
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TADS,
|
478
|
-
|
479
|
-
|
480
|
-
|
475
|
+
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TADS,
|
476
|
+
[
|
477
|
+
FMT_TADS
|
478
|
+
])
|
481
479
|
map.export_tads( d.filename ) if d.filename != ''
|
482
480
|
end
|
483
481
|
|
484
482
|
#
|
485
|
-
# Export current map as
|
483
|
+
# Export current map as Scalable Vector Graphics (SVG)
|
486
484
|
#
|
487
485
|
def svg_export_cb(sender, sel, msg)
|
488
486
|
map = current_map
|
@@ -495,15 +493,15 @@ class FXMapperWindow < FXMainWindow
|
|
495
493
|
w.execute
|
496
494
|
return
|
497
495
|
end
|
498
|
-
|
496
|
+
|
499
497
|
require 'IFMapper/FXSVGMapExporterOptionsDialogBox'
|
500
|
-
cmd = FXSVGMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_SVG,
|
498
|
+
cmd = FXSVGMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_SVG,
|
501
499
|
map).execute
|
502
500
|
|
503
501
|
return if cmd == 0
|
504
502
|
|
505
503
|
require 'IFMapper/FXMapFileDialog'
|
506
|
-
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_SVG,
|
504
|
+
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_SVG,
|
507
505
|
[
|
508
506
|
FMT_SVG
|
509
507
|
])
|
@@ -527,22 +525,22 @@ class FXMapperWindow < FXMainWindow
|
|
527
525
|
w.execute
|
528
526
|
return
|
529
527
|
end
|
530
|
-
|
528
|
+
|
531
529
|
# PRE: Let's ask for a page size and orientation for the PDF
|
532
530
|
# and whether the user wants to include location numbers
|
533
531
|
map.pdfpapersize = 0
|
534
532
|
map.pdflocationnos = 1
|
535
533
|
require 'IFMapper/FXPDFMapExporterOptionsDialogBox'
|
536
|
-
cmd = FXPDFMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_PDF,
|
534
|
+
cmd = FXPDFMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_PDF,
|
537
535
|
map).execute
|
538
536
|
|
539
537
|
return if cmd == 0
|
540
538
|
|
541
539
|
require 'IFMapper/FXMapFileDialog'
|
542
|
-
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_PDF,
|
543
|
-
|
544
|
-
|
545
|
-
|
540
|
+
d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_PDF,
|
541
|
+
[
|
542
|
+
FMT_PDF
|
543
|
+
])
|
546
544
|
if d.filename != ''
|
547
545
|
map.pdf_export(d.filename)
|
548
546
|
end
|
@@ -579,7 +577,7 @@ class FXMapperWindow < FXMainWindow
|
|
579
577
|
@maps = []
|
580
578
|
|
581
579
|
@mdiclient = FXMDIClient.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
582
|
-
@mdiclient.connect(SEL_CHANGED) {
|
580
|
+
@mdiclient.connect(SEL_CHANGED) {
|
583
581
|
update_map
|
584
582
|
}
|
585
583
|
|
@@ -604,7 +602,7 @@ class FXMapperWindow < FXMainWindow
|
|
604
602
|
end
|
605
603
|
|
606
604
|
#
|
607
|
-
# Return the copied elements
|
605
|
+
# Return the copied elements
|
608
606
|
#
|
609
607
|
def self.copy_buffer
|
610
608
|
return @@copy_buffer
|
@@ -627,9 +625,9 @@ class FXMapperWindow < FXMainWindow
|
|
627
625
|
# those rooms we selected
|
628
626
|
delete = []
|
629
627
|
links.each { |c|
|
630
|
-
if not rooms.include?(c.roomA) or
|
631
|
-
|
632
|
-
|
628
|
+
if not rooms.include?(c.roomA) or
|
629
|
+
(c.roomB and not rooms.include?(c.roomB))
|
630
|
+
delete << c
|
633
631
|
end
|
634
632
|
}
|
635
633
|
links -= delete
|
@@ -668,52 +666,52 @@ class FXMapperWindow < FXMainWindow
|
|
668
666
|
r_to_nr = {} # orig room to new room hash
|
669
667
|
rooms = sel[0]
|
670
668
|
rooms.each { |r|
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
669
|
+
nr = map.new_room(r.x + pos[0], r.y + pos[1])
|
670
|
+
nr.selected = true
|
671
|
+
nr.copy(r) # copy the room data
|
672
|
+
r_to_nr[r] = nr
|
675
673
|
}
|
676
674
|
|
677
675
|
if rooms.empty?
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
676
|
+
# Add connections only (no rooms copied)
|
677
|
+
sel[1].each { |c|
|
678
|
+
exitA, exitB = c.dirs
|
679
|
+
roomA = c.roomA
|
680
|
+
roomB = c.roomB
|
681
|
+
sect = map.sections[map.section]
|
682
|
+
if not sect.rooms.include?(roomA) or
|
683
|
+
(roomB and not sect.rooms.include?(roomB))
|
684
|
+
next
|
685
|
+
end
|
686
|
+
begin
|
687
|
+
nc = map.new_connection(roomA, exitA, roomB, exitB)
|
688
|
+
nc.selected = true
|
689
|
+
nc.dir = c.dir
|
690
|
+
nc.type = c.type
|
691
|
+
rescue
|
692
|
+
end
|
693
|
+
}
|
696
694
|
else
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
695
|
+
# Add connections
|
696
|
+
sel[1].each { |c|
|
697
|
+
exitA, exitB = c.dirs
|
698
|
+
roomA = r_to_nr[c.roomA]
|
699
|
+
if c.roomB
|
700
|
+
roomB = r_to_nr[c.roomB]
|
701
|
+
else
|
702
|
+
roomB = nil
|
703
|
+
end
|
704
|
+
next if not roomA
|
705
|
+
begin
|
706
|
+
nc = map.new_connection(roomA, exitA, roomB, exitB)
|
707
|
+
nc.selected = true
|
708
|
+
nc.dir = c.dir
|
709
|
+
nc.type = c.type
|
710
|
+
rescue Section::ConnectionError => e
|
711
|
+
puts c
|
712
|
+
puts e
|
713
|
+
end
|
714
|
+
}
|
717
715
|
end
|
718
716
|
|
719
717
|
map.create_pathmap
|
@@ -759,7 +757,7 @@ class FXMapperWindow < FXMainWindow
|
|
759
757
|
s.rooms.each { |r| r.selected = false }
|
760
758
|
}
|
761
759
|
|
762
|
-
matches.each { |p, r|
|
760
|
+
matches.each { |p, r|
|
763
761
|
next if p != map.section
|
764
762
|
r.selected = true
|
765
763
|
}
|
@@ -784,8 +782,8 @@ class FXMapperWindow < FXMainWindow
|
|
784
782
|
matches = []
|
785
783
|
(0...map.sections.size).each { |p|
|
786
784
|
map.sections[p].rooms.each { |r|
|
787
|
-
|
788
|
-
|
785
|
+
next unless r.name =~ re
|
786
|
+
matches.push( [p, r] )
|
789
787
|
}
|
790
788
|
}
|
791
789
|
idx = @search.index
|
@@ -853,8 +851,8 @@ class FXMapperWindow < FXMainWindow
|
|
853
851
|
matches = []
|
854
852
|
(0...map.sections.size).each { |p|
|
855
853
|
map.sections[p].rooms.each { |r|
|
856
|
-
|
857
|
-
|
854
|
+
next unless r.objects =~ re
|
855
|
+
matches.push( [p, r] )
|
858
856
|
}
|
859
857
|
}
|
860
858
|
idx = @search.index
|
@@ -873,8 +871,8 @@ class FXMapperWindow < FXMainWindow
|
|
873
871
|
matches = []
|
874
872
|
(0...map.sections.size).each { |p|
|
875
873
|
map.sections[p].rooms.each { |r|
|
876
|
-
|
877
|
-
|
874
|
+
next unless r.tasks =~ re
|
875
|
+
matches.push( [p, r] )
|
878
876
|
}
|
879
877
|
}
|
880
878
|
idx = @search.index
|
@@ -929,8 +927,8 @@ class FXMapperWindow < FXMainWindow
|
|
929
927
|
matches = []
|
930
928
|
(0...map.sections.size).each { |p|
|
931
929
|
map.sections[p].rooms.each { |r|
|
932
|
-
|
933
|
-
|
930
|
+
next unless r.desc =~ re
|
931
|
+
matches.push( [p, r] )
|
934
932
|
}
|
935
933
|
}
|
936
934
|
idx = @search.index
|
@@ -1006,8 +1004,8 @@ class FXMapperWindow < FXMainWindow
|
|
1006
1004
|
|
1007
1005
|
def about_cb(sender, id, event )
|
1008
1006
|
require 'IFMapper/FXAboutDialogBox'
|
1009
|
-
FXAboutDialogBox.new(self, MSG_ABOUT_SOFTWARE,
|
1010
|
-
|
1007
|
+
FXAboutDialogBox.new(self, MSG_ABOUT_SOFTWARE,
|
1008
|
+
eval("\"#{MSG_ABOUT}\"")).execute
|
1011
1009
|
end
|
1012
1010
|
|
1013
1011
|
|
@@ -1029,7 +1027,7 @@ class FXMapperWindow < FXMainWindow
|
|
1029
1027
|
cmd = FXMenuCommand.new(filemenu, MENU_SAVE, savedoc)
|
1030
1028
|
cmd.connect(SEL_COMMAND, method(:save_cb))
|
1031
1029
|
cmd = FXMenuCommand.new(filemenu, MENU_SAVE_AS,
|
1032
|
-
|
1030
|
+
saveasdoc)
|
1033
1031
|
cmd.connect(SEL_COMMAND, method(:save_as_cb))
|
1034
1032
|
|
1035
1033
|
# Export submenu
|
@@ -1037,7 +1035,7 @@ class FXMapperWindow < FXMainWindow
|
|
1037
1035
|
|
1038
1036
|
cmd = FXMenuCommand.new(submenu, MENU_EXPORT_PDF, nil)
|
1039
1037
|
cmd.connect(SEL_COMMAND, method(:pdf_export_cb))
|
1040
|
-
|
1038
|
+
|
1041
1039
|
cmd = FXMenuCommand.new(submenu, MENU_EXPORT_SVG, nil)
|
1042
1040
|
cmd.connect(SEL_COMMAND, method(:svg_export_cb))
|
1043
1041
|
|
@@ -1065,7 +1063,7 @@ class FXMapperWindow < FXMainWindow
|
|
1065
1063
|
|
1066
1064
|
cmd = FXMenuCommand.new(submenu, MENU_PRINT_LOCATIONS, nil)
|
1067
1065
|
cmd.connect(SEL_COMMAND, method(:print_locations_cb))
|
1068
|
-
FXMenuCascade.new(filemenu, MENU_PRINT, nil, submenu)
|
1066
|
+
#FXMenuCascade.new(filemenu, MENU_PRINT, nil, submenu)
|
1069
1067
|
|
1070
1068
|
cmd = FXMenuCommand.new(filemenu, MENU_QUIT, nil)
|
1071
1069
|
cmd.connect( SEL_COMMAND, method(:close_cb) )
|
@@ -1077,9 +1075,9 @@ class FXMapperWindow < FXMainWindow
|
|
1077
1075
|
cmd.connect(SEL_COMMAND, method(:copy_selected_cb))
|
1078
1076
|
cmd = FXMenuCommand.new(editmenu, MENU_CUT, nil)
|
1079
1077
|
cmd.connect(SEL_COMMAND, method(:cut_selected_cb))
|
1080
|
-
cmd = FXMenuCommand.new(editmenu, MENU_PASTE, nil)
|
1078
|
+
cmd = FXMenuCommand.new(editmenu, MENU_PASTE, nil)
|
1081
1079
|
cmd.connect(SEL_COMMAND, method(:paste_selected_cb))
|
1082
|
-
#cmd = FXMenuCommand.new(editmenu, MENU_UNDO, nil)
|
1080
|
+
#cmd = FXMenuCommand.new(editmenu, MENU_UNDO, nil)
|
1083
1081
|
#cmd.connect(SEL_COMMAND, method(:undo_cb))
|
1084
1082
|
|
1085
1083
|
# Select submenu
|
@@ -1142,55 +1140,55 @@ class FXMapperWindow < FXMainWindow
|
|
1142
1140
|
# Sections submenu
|
1143
1141
|
submenu = FXMenuPane.new(self)
|
1144
1142
|
cmd = FXMenuCommand.new(submenu, MENU_NEXT_SECTION)
|
1145
|
-
cmd.connect(SEL_COMMAND) {
|
1143
|
+
cmd.connect(SEL_COMMAND) {
|
1146
1144
|
next_section
|
1147
1145
|
}
|
1148
1146
|
cmd = FXMenuCommand.new(submenu, MENU_PREVIOUS_SECTION)
|
1149
|
-
cmd.connect(SEL_COMMAND) {
|
1147
|
+
cmd.connect(SEL_COMMAND) {
|
1150
1148
|
previous_section
|
1151
1149
|
}
|
1152
1150
|
FXMenuSeparator.new(submenu)
|
1153
1151
|
cmd = FXMenuCommand.new(submenu, MENU_ADD_SECTION)
|
1154
|
-
cmd.connect(SEL_COMMAND) {
|
1152
|
+
cmd.connect(SEL_COMMAND) {
|
1155
1153
|
map = current_map
|
1156
1154
|
if map
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1155
|
+
map.new_section
|
1156
|
+
map.modified = true
|
1157
|
+
update_section
|
1160
1158
|
end
|
1161
1159
|
}
|
1162
1160
|
cmd = FXMenuCommand.new(submenu, MENU_SECTION_INFO)
|
1163
|
-
cmd.connect(SEL_COMMAND) {
|
1161
|
+
cmd.connect(SEL_COMMAND) {
|
1164
1162
|
map = current_map
|
1165
1163
|
if map
|
1166
|
-
|
1167
|
-
|
1164
|
+
map.rename_section
|
1165
|
+
map.modified = true
|
1168
1166
|
end
|
1169
1167
|
}
|
1170
1168
|
FXMenuSeparator.new(submenu)
|
1171
1169
|
cmd = FXMenuCommand.new(submenu, MENU_DELETE_SECTION)
|
1172
|
-
cmd.connect(SEL_COMMAND) {
|
1170
|
+
cmd.connect(SEL_COMMAND) {
|
1173
1171
|
map = current_map
|
1174
1172
|
if map
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1173
|
+
map.delete_section
|
1174
|
+
map.modified = true
|
1175
|
+
update_section
|
1178
1176
|
end
|
1179
1177
|
}
|
1180
1178
|
FXMenuCascade.new(mapmenu, MENU_SECTIONS, nil, submenu)
|
1181
|
-
|
1179
|
+
|
1182
1180
|
#
|
1183
1181
|
# Zoom submenu
|
1184
1182
|
#
|
1185
1183
|
submenu = FXMenuPane.new(self)
|
1186
|
-
[25, 50, 75, 100, 125].each { |v|
|
1184
|
+
[25, 50, 75, 100, 125].each { |v|
|
1187
1185
|
cmd = FXMenuCommand.new(submenu, eval("\"#{MENU_ZOOM_PERCENT}\""))
|
1188
|
-
cmd.connect(SEL_COMMAND) {
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1186
|
+
cmd.connect(SEL_COMMAND) {
|
1187
|
+
map = current_map
|
1188
|
+
if map
|
1189
|
+
map.zoom = v / 100.0
|
1190
|
+
map.draw
|
1191
|
+
end
|
1194
1192
|
}
|
1195
1193
|
}
|
1196
1194
|
FXMenuCascade.new(mapmenu, MENU_ZOOM, nil, submenu)
|
@@ -1202,7 +1200,7 @@ class FXMapperWindow < FXMainWindow
|
|
1202
1200
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1203
1201
|
map = current_map
|
1204
1202
|
if map
|
1205
|
-
|
1203
|
+
map.options['Edit on Creation'] = (s.check == true)
|
1206
1204
|
end
|
1207
1205
|
}
|
1208
1206
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1215,7 +1213,7 @@ class FXMapperWindow < FXMainWindow
|
|
1215
1213
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1216
1214
|
map = current_map
|
1217
1215
|
if map
|
1218
|
-
|
1216
|
+
map.options['Automatic Connection'] = (s.check == true)
|
1219
1217
|
end
|
1220
1218
|
}
|
1221
1219
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1245,8 +1243,8 @@ class FXMapperWindow < FXMainWindow
|
|
1245
1243
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1246
1244
|
map = current_map
|
1247
1245
|
if map
|
1248
|
-
|
1249
|
-
|
1246
|
+
map.options['Use Room Cursor'] = (s.check == true)
|
1247
|
+
map.draw
|
1250
1248
|
end
|
1251
1249
|
}
|
1252
1250
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1259,8 +1257,8 @@ class FXMapperWindow < FXMainWindow
|
|
1259
1257
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1260
1258
|
map = current_map
|
1261
1259
|
if map
|
1262
|
-
|
1263
|
-
|
1260
|
+
map.options['Paths as Curves'] = (s.check == true)
|
1261
|
+
map.draw
|
1264
1262
|
end
|
1265
1263
|
}
|
1266
1264
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1272,8 +1270,8 @@ class FXMapperWindow < FXMainWindow
|
|
1272
1270
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1273
1271
|
map = current_map
|
1274
1272
|
if map
|
1275
|
-
|
1276
|
-
|
1273
|
+
map.options['Location Numbers'] = (s.check == true)
|
1274
|
+
map.draw
|
1277
1275
|
end
|
1278
1276
|
}
|
1279
1277
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1286,8 +1284,8 @@ class FXMapperWindow < FXMainWindow
|
|
1286
1284
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1287
1285
|
map = current_map
|
1288
1286
|
if map
|
1289
|
-
|
1290
|
-
|
1287
|
+
map.options['Location Tasks'] = (s.check == true)
|
1288
|
+
map.draw
|
1291
1289
|
end
|
1292
1290
|
}
|
1293
1291
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1300,8 +1298,8 @@ class FXMapperWindow < FXMainWindow
|
|
1300
1298
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1301
1299
|
map = current_map
|
1302
1300
|
if map
|
1303
|
-
|
1304
|
-
|
1301
|
+
map.options['Location Description'] = (s.check == true)
|
1302
|
+
map.draw
|
1305
1303
|
end
|
1306
1304
|
}
|
1307
1305
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1314,8 +1312,8 @@ class FXMapperWindow < FXMainWindow
|
|
1314
1312
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1315
1313
|
map = current_map
|
1316
1314
|
if map
|
1317
|
-
|
1318
|
-
|
1315
|
+
map.options['Grid Boxes'] = (s.check == true)
|
1316
|
+
map.draw
|
1319
1317
|
end
|
1320
1318
|
}
|
1321
1319
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1328,8 +1326,8 @@ class FXMapperWindow < FXMainWindow
|
|
1328
1326
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1329
1327
|
map = current_map
|
1330
1328
|
if map
|
1331
|
-
|
1332
|
-
|
1329
|
+
map.options['Grid Straight Connections'] = (s.check == true)
|
1330
|
+
map.draw
|
1333
1331
|
end
|
1334
1332
|
}
|
1335
1333
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1342,8 +1340,8 @@ class FXMapperWindow < FXMainWindow
|
|
1342
1340
|
cmd.connect(SEL_COMMAND) { |s, m, e|
|
1343
1341
|
map = current_map
|
1344
1342
|
if map
|
1345
|
-
|
1346
|
-
|
1343
|
+
map.options['Grid Diagonal Connections'] = s.check
|
1344
|
+
map.draw
|
1347
1345
|
end
|
1348
1346
|
}
|
1349
1347
|
cmd.connect(SEL_UPDATE) { |s, m, e|
|
@@ -1366,11 +1364,11 @@ class FXMapperWindow < FXMainWindow
|
|
1366
1364
|
# }
|
1367
1365
|
|
1368
1366
|
# FXMenuCascade.new(mapmenu, MENU_LANGUAGE, nil, langmenu)
|
1369
|
-
|
1367
|
+
|
1370
1368
|
|
1371
1369
|
FXMenuSeparator.new(submenu)
|
1372
1370
|
cmd = FXMenuCommand.new(submenu, MENU_SAVE_PREFS)
|
1373
|
-
cmd.connect(SEL_COMMAND) {
|
1371
|
+
cmd.connect(SEL_COMMAND) {
|
1374
1372
|
map = current_map
|
1375
1373
|
map.options.write if map
|
1376
1374
|
}
|
@@ -1395,8 +1393,8 @@ class FXMapperWindow < FXMainWindow
|
|
1395
1393
|
FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_2)
|
1396
1394
|
FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_3)
|
1397
1395
|
FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_4)
|
1398
|
-
FXMenuCommand.new(windowmenu, MENU_OTHERS, nil, @mdiclient,
|
1399
|
-
|
1396
|
+
FXMenuCommand.new(windowmenu, MENU_OTHERS, nil, @mdiclient,
|
1397
|
+
FXMDIClient::ID_MDI_OVER_5)
|
1400
1398
|
FXMenuTitle.new(@menubar, MENU_WINDOW, nil, windowmenu)
|
1401
1399
|
|
1402
1400
|
# Help menu
|
@@ -1412,14 +1410,14 @@ class FXMapperWindow < FXMainWindow
|
|
1412
1410
|
cmd = FXMenuCommand.new(helpmenu, MENU_RESOURCE, nil)
|
1413
1411
|
cmd.connect(SEL_COMMAND) {
|
1414
1412
|
require 'IFMapper/FXMapFileDialog'
|
1415
|
-
file = FXMapFileDialog.new(self, "Resource a Ruby File",
|
1416
|
-
|
1413
|
+
file = FXMapFileDialog.new(self, "Resource a Ruby File",
|
1414
|
+
['Ruby File (*.rb)']).filename
|
1417
1415
|
if file != ''
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1416
|
+
begin
|
1417
|
+
Kernel.load file
|
1418
|
+
rescue => e
|
1419
|
+
p e
|
1420
|
+
end
|
1423
1421
|
end
|
1424
1422
|
}
|
1425
1423
|
FXMenuTitle.new(@menubar, MENU_HELP, nil, helpmenu)
|
@@ -1430,19 +1428,15 @@ class FXMapperWindow < FXMainWindow
|
|
1430
1428
|
end
|
1431
1429
|
|
1432
1430
|
def docs(*opts)
|
1433
|
-
browsers = [ 'chrome', 'chromium', 'firefox', 'opera', 'explorer' ]
|
1434
1431
|
address = 'docs/' + language + '/start.html'
|
1435
1432
|
status "#{MSG_OPENING_WEB_PAGE} #{address}..."
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
break if ok
|
1444
|
-
}
|
1445
|
-
if not ok
|
1433
|
+
if RUBY_PLATFORM =~ /mswin|mingw|cygwin/
|
1434
|
+
system("rundll32 url.dll,FileProtocolHandler \"#{address}\"")
|
1435
|
+
elsif RUBY_PLATFORM =~ /darwin/
|
1436
|
+
system("open \"#{address}\"")
|
1437
|
+
elsif RUBY_PLATFORM =~ /linux|bsd/
|
1438
|
+
system("xdg-open \"#{address}\"")
|
1439
|
+
else
|
1446
1440
|
status ERR_COULD_NOT_OPEN_WEB_BROWSER
|
1447
1441
|
end
|
1448
1442
|
end
|
@@ -1463,7 +1457,7 @@ class FXMapperWindow < FXMainWindow
|
|
1463
1457
|
|
1464
1458
|
# File manipulation
|
1465
1459
|
cmd = FXButton.new(toolbar, ICON_NEW, newdoc, nil, 0,
|
1466
|
-
|
1460
|
+
FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
|
1467
1461
|
cmd.connect(SEL_COMMAND, method(:new_map_cb))
|
1468
1462
|
|
1469
1463
|
cmd = FXButton.new(toolbar, ICON_OPEN, opendoc, nil, 0,
|
@@ -1491,15 +1485,15 @@ class FXMapperWindow < FXMainWindow
|
|
1491
1485
|
FXFrame.new(toolbar,
|
1492
1486
|
LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
|
1493
1487
|
cmd = FXButton.new(toolbar, ICON_PRINT,
|
1494
|
-
|
1495
|
-
|
1488
|
+
load_icon("printicon"), @mdiclient, FXGLViewer::ID_PRINT_IMAGE,
|
1489
|
+
BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
|
1496
1490
|
cmd.connect(SEL_COMMAND, method(:print_cb))
|
1497
1491
|
cmd.connect(SEL_UPDATE) { |sender, sel, ptr|
|
1498
1492
|
map = current_map
|
1499
1493
|
message = map ? FXWindow::ID_ENABLE : FXWindow::ID_DISABLE
|
1500
1494
|
sender.handle(self, MKUINT(message, SEL_COMMAND), nil)
|
1501
1495
|
}
|
1502
|
-
|
1496
|
+
|
1503
1497
|
# Editing
|
1504
1498
|
FXFrame.new(toolbar,
|
1505
1499
|
LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
|
@@ -1535,43 +1529,43 @@ class FXMapperWindow < FXMainWindow
|
|
1535
1529
|
FXFrame.new(toolbar,
|
1536
1530
|
LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
|
1537
1531
|
cmd = FXButton.new(toolbar, ICON_ZOOM_IN, load_icon("zoom"), @mdiclient,
|
1538
|
-
|
1532
|
+
0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
|
1539
1533
|
cmd.connect(SEL_COMMAND) { zoom_in }
|
1540
1534
|
|
1541
|
-
cmd = FXButton.new(toolbar, ICON_ZOOM_OUT, load_icon("zoom"), @mdiclient,
|
1542
|
-
|
1535
|
+
cmd = FXButton.new(toolbar, ICON_ZOOM_OUT, load_icon("zoom"), @mdiclient,
|
1536
|
+
0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
|
1543
1537
|
cmd.connect(SEL_COMMAND) { zoom_out }
|
1544
1538
|
|
1545
1539
|
|
1546
1540
|
# Section travel
|
1547
1541
|
frame = FXHorizontalFrame.new(toolbar,
|
1548
|
-
|
1549
|
-
cmd = FXButton.new(frame, ICON_PREV_SECTION, load_icon("prevpage"),
|
1550
|
-
|
1551
|
-
|
1542
|
+
LAYOUT_RIGHT|FRAME_THICK|FRAME_RAISED)
|
1543
|
+
cmd = FXButton.new(frame, ICON_PREV_SECTION, load_icon("prevpage"),
|
1544
|
+
@mdiclient,
|
1545
|
+
0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
|
1552
1546
|
cmd.connect(SEL_COMMAND) { previous_section }
|
1553
1547
|
|
1554
|
-
@section = FXTextField.new(frame, 5, nil, 0,
|
1555
|
-
|
1548
|
+
@section = FXTextField.new(frame, 5, nil, 0,
|
1549
|
+
TEXTFIELD_INTEGER|LAYOUT_FILL_ROW)
|
1556
1550
|
@section.text = '1'
|
1557
|
-
@section.connect(SEL_COMMAND) { |s,m,e|
|
1551
|
+
@section.connect(SEL_COMMAND) { |s,m,e|
|
1558
1552
|
v = s.text.to_i
|
1559
1553
|
map = current_map
|
1560
1554
|
if map
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1555
|
+
map.section = v - 1
|
1556
|
+
map.draw
|
1557
|
+
update_section
|
1564
1558
|
end
|
1565
1559
|
}
|
1566
|
-
@section.connect(SEL_UPDATE) { |s,m,e|
|
1560
|
+
@section.connect(SEL_UPDATE) { |s,m,e|
|
1567
1561
|
map = current_map
|
1568
1562
|
update_section if map
|
1569
1563
|
}
|
1570
1564
|
|
1571
|
-
cmd = FXButton.new(frame, ICON_NEXT_SECTION, load_icon("nextpage"),
|
1572
|
-
|
1573
|
-
|
1574
|
-
cmd.connect(SEL_COMMAND) { next_section }
|
1565
|
+
cmd = FXButton.new(frame, ICON_NEXT_SECTION, load_icon("nextpage"),
|
1566
|
+
@mdiclient,
|
1567
|
+
0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
|
1568
|
+
cmd.connect(SEL_COMMAND) { next_section }
|
1575
1569
|
end
|
1576
1570
|
|
1577
1571
|
#
|
@@ -1595,7 +1589,7 @@ class FXMapperWindow < FXMainWindow
|
|
1595
1589
|
#
|
1596
1590
|
# Go to previous section in current map
|
1597
1591
|
#
|
1598
|
-
def previous_section
|
1592
|
+
def previous_section
|
1599
1593
|
map = current_map
|
1600
1594
|
map.previous_section if map
|
1601
1595
|
update_section
|
@@ -1647,20 +1641,20 @@ class FXMapperWindow < FXMainWindow
|
|
1647
1641
|
@menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
|
1648
1642
|
|
1649
1643
|
FXHorizontalSeparator.new(self,
|
1650
|
-
|
1644
|
+
LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
|
1651
1645
|
toolbar = FXToolBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X,
|
1652
1646
|
0, 0, 0, 0, 4, 4, 0, 0, 0, 0)
|
1653
|
-
|
1647
|
+
|
1654
1648
|
# Status bar
|
1655
1649
|
@statusbar = FXStatusBar.new(self,
|
1656
|
-
|
1657
|
-
|
1650
|
+
LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|
|
1651
|
+
STATUSBAR_WITH_DRAGCORNER)
|
1658
1652
|
|
1659
1653
|
|
1660
1654
|
create_mdiclient
|
1661
1655
|
create_menus
|
1662
1656
|
create_toolbar(toolbar)
|
1663
|
-
|
1657
|
+
|
1664
1658
|
|
1665
1659
|
self.connect(SEL_CLOSE, method(:close_cb))
|
1666
1660
|
show
|
@@ -1670,13 +1664,13 @@ class FXMapperWindow < FXMainWindow
|
|
1670
1664
|
|
1671
1665
|
def initialize(app)
|
1672
1666
|
super(app, eval("\"#{TITLE}\""), nil, nil, DECOR_ALL, 0, 0, 800, 600)
|
1673
|
-
|
1667
|
+
|
1674
1668
|
@colors = nil
|
1675
1669
|
@mdimenu = nil
|
1676
1670
|
@search = nil
|
1677
1671
|
|
1678
1672
|
create_widgets
|
1679
|
-
|
1673
|
+
|
1680
1674
|
|
1681
1675
|
# Trap CTRL-C signals and exit nicely
|
1682
1676
|
trap('SIGINT') {
|
@@ -1687,13 +1681,13 @@ class FXMapperWindow < FXMainWindow
|
|
1687
1681
|
|
1688
1682
|
def close_cb(*args)
|
1689
1683
|
exit = true
|
1690
|
-
@maps.each { |m|
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1684
|
+
@maps.each { |m|
|
1685
|
+
if not m.close_cb
|
1686
|
+
exit = false
|
1687
|
+
break
|
1688
|
+
else
|
1689
|
+
@maps.delete(m)
|
1690
|
+
end
|
1697
1691
|
}
|
1698
1692
|
self.close if exit
|
1699
1693
|
end
|