ifmapper 2.2.3 → 2.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e2f57618e8827e75064b59271aed043f7e75debb7eaac3a26c141ef78b363bcf
4
- data.tar.gz: 3e0f0226e2d80b52eb9db23c7f576e9c3bbad8d6451a246a78a54a712d1c8485
3
+ metadata.gz: 14f669750e8ead77e5ec1695ec7a405802d8b5ceb1963acf6381c9a144c22d15
4
+ data.tar.gz: da6273f224a55b9115d69448ba236074fd119d913b276716685fdad775798234
5
5
  SHA512:
6
- metadata.gz: b9d93d099544d7272af51879188c005a12a2ad88db8c6109a8e718cc9d53334225f8068471c1d25f9faae799d512eb456910173ebc71f98fff67501fb6c7291e
7
- data.tar.gz: a8e4c0daac7bd03cc9bc5607b3d43134a46c4a32e22db988ec2b92cef8a708c56fac5778fea8b1fc1cd0ccb8df7cb443a76c40e3d848afe5a4fcf3ca4f17663f
6
+ metadata.gz: 59af5e2198ec63db012f1575716198e96b79603391375c5bf5f2762a1543bc90b6b9b214358757c53a56fc2c710ba87a60e2963cd58ae1f7c30e81c3448fa21c
7
+ data.tar.gz: fd1fa45b5f32fe3a3fc2bc24424080b5549d6c158e3e8209744eba5986e81746d727fe5ebe31b634f14713ba5a8f7eacf3b1cb5fb14b4bfaf92928b4cefe3f79
data/IFMapper.gemspec CHANGED
@@ -1,7 +1,8 @@
1
+ # coding: utf-8
1
2
  require "rubygems"
2
3
 
3
- VERSION = '2.2.3'
4
- AUTHOR = "Gonzalo Garramuno"
4
+ VERSION = '2.2.4'
5
+ AUTHOR = "Gonzalo Garramuño"
5
6
  HOMEPAGE = 'http://ggarra13.github.io/ifmapper/en/start.html'
6
7
  EMAIL = 'ggarra13@gmail.com'
7
8
 
@@ -29,6 +30,7 @@ EOF
29
30
  s.add_runtime_dependency("rake-compiler", "~> 0.7.1", ">= 0.7.1" )
30
31
  s.add_runtime_dependency("fxruby", "~> 1.6.0", ">= 1.6.0")
31
32
  s.add_runtime_dependency("prawn", "~> 1.0.0", ">= 1.0.0")
33
+ s.add_runtime_dependency("pdf-writer", "~> 1.0.0", ">= 1.0.0")
32
34
  s.extra_rdoc_files = ["HISTORY.txt", "TODO.txt"] +
33
35
  Dir.glob("docs/*/*")
34
36
  # s.rubyforge_project = 'ifmapper'
data/IFMapper.rbw CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby
2
2
 
3
3
 
4
4
  # cd to install path, so modules are found locally
@@ -35,4 +35,3 @@ if __FILE__ == $0
35
35
  raise e
36
36
  end
37
37
  end
38
-
@@ -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'
@@ -185,8 +186,8 @@ class FXMapperWindow < FXMainWindow
185
186
  # First, make sure we don't have it loaded already...
186
187
  @maps.each { |m|
187
188
  if m.filename == file
188
- @mdiclient.setActiveChild(m.window)
189
- return
189
+ @mdiclient.setActiveChild(m.window)
190
+ return
190
191
  end
191
192
  }
192
193
 
@@ -196,10 +197,10 @@ class FXMapperWindow < FXMainWindow
196
197
  make_new_map = false
197
198
  if @maps.size == 1
198
199
  @maps[0].sections.each { |p|
199
- if p.rooms.size != 0
200
- make_new_map = true
201
- break
202
- end
200
+ if p.rooms.size != 0
201
+ make_new_map = true
202
+ break
203
+ end
203
204
  }
204
205
  else
205
206
  make_new_map = true
@@ -229,20 +230,20 @@ class FXMapperWindow < FXMainWindow
229
230
 
230
231
  if not tmp.kind_of?(Map) and not tmp.kind_of?(FXMap)
231
232
  $stderr.puts tmp
232
- w = FXWarningBox.new( self,
233
- "#{tmp}")
233
+ w = FXWarningBox.new( self,
234
+ "#{tmp}")
234
235
  w.execute
235
- status "#{ERR_COULD_NOT_LOAD} '#{file}'."
236
+ status "#{ERR_COULD_NOT_LOAD} '#{file}'."
236
237
  if make_new_map
237
- if map.close_cb
238
- @maps.delete(map)
239
- GC.start
240
- end
238
+ if map.close_cb
239
+ @maps.delete(map)
240
+ GC.start
241
+ end
241
242
  end
242
243
  sleep 2
243
244
  return
244
245
  end
245
-
246
+
246
247
  copy_map(map, tmp, file)
247
248
  end
248
249
 
@@ -308,7 +309,7 @@ class FXMapperWindow < FXMainWindow
308
309
  #
309
310
  def language_cb(sender, msg, opts)
310
311
  @@default_options['Language'] = LANGUAGES[sender.text]
311
-
312
+
312
313
  require "IFMapper/locales/#{language}/Messages.rb"
313
314
  recreate
314
315
  end
@@ -319,19 +320,19 @@ class FXMapperWindow < FXMainWindow
319
320
  def new_map
320
321
  mapname = "#{MSG_EMPTY_MAP} \##{@maps.size+1}"
321
322
  @maps.push( FXMap.new(mapname, @mdiclient, @@default_options.dup,
322
- @mdiicon, @mdimenu, MDI_NORMAL, 0, 0, 790, 500) )
323
+ @mdiicon, @mdimenu, MDI_NORMAL, 0, 0, 790, 500) )
323
324
  map = @maps[-1]
324
325
  map.window.connect(SEL_PAINT) {
325
326
  map.draw
326
327
  }
327
328
  map.window.connect(SEL_CLOSE) {
328
329
  if map.close_cb
329
- @maps.delete(map)
330
+ @maps.delete(map)
330
331
  end
331
332
  if @maps[-1]
332
- @maps[-1].update_roomlist
333
+ @maps[-1].update_roomlist
333
334
  else
334
- FXMap::no_maps
335
+ FXMap::no_maps
335
336
  end
336
337
  }
337
338
 
@@ -381,7 +382,7 @@ class FXMapperWindow < FXMainWindow
381
382
  def printer_dialog(title = MSG_PRINT_MAP)
382
383
  map = current_map
383
384
  dlg = FXPrintDialog.new(self, title + " for #{map.name}")
384
- dlg.printer.flags |= PRINT_DEST_PAPER
385
+ dlg.printer.flags |= PRINT_DEST_PAPER
385
386
  return dlg.printer if dlg.execute != 0
386
387
  return false
387
388
  end
@@ -409,10 +410,10 @@ class FXMapperWindow < FXMainWindow
409
410
  return unless map
410
411
 
411
412
  require 'IFMapper/FXMapFileDialog'
412
- d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_IFM,
413
- [
414
- FMT_IFM
415
- ])
413
+ d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_IFM,
414
+ [
415
+ FMT_IFM
416
+ ])
416
417
  map.export_ifm(d.filename) if d.filename != ''
417
418
  end
418
419
 
@@ -424,10 +425,10 @@ class FXMapperWindow < FXMainWindow
424
425
  return unless map
425
426
 
426
427
  require 'IFMapper/FXMapFileDialog'
427
- d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TRIZBORT,
428
- [
429
- FMT_TRIZBORT
430
- ])
428
+ d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TRIZBORT,
429
+ [
430
+ FMT_TRIZBORT
431
+ ])
431
432
  map.export_trizbort(d.filename) if d.filename != ''
432
433
  end
433
434
 
@@ -439,10 +440,10 @@ class FXMapperWindow < FXMainWindow
439
440
  return unless map
440
441
 
441
442
  require 'IFMapper/FXMapFileDialog'
442
- d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM6,
443
- [
444
- FMT_INFORM6,
445
- ])
443
+ d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM6,
444
+ [
445
+ FMT_INFORM6,
446
+ ])
446
447
  map.export_inform( d.filename ) if d.filename != ''
447
448
  end
448
449
 
@@ -454,10 +455,10 @@ class FXMapperWindow < FXMainWindow
454
455
  return unless map
455
456
 
456
457
  require 'IFMapper/FXMapFileDialog'
457
- d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM7,
458
- [
459
- FMT_INFORM7,
460
- ])
458
+ d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_INFORM7,
459
+ [
460
+ FMT_INFORM7,
461
+ ])
461
462
  map.export_inform7( d.filename ) if d.filename != ''
462
463
  end
463
464
 
@@ -471,10 +472,10 @@ class FXMapperWindow < FXMainWindow
471
472
 
472
473
  require 'IFMapper/TADSWriter'
473
474
  require 'IFMapper/FXMapFileDialog'
474
- d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TADS,
475
- [
476
- FMT_TADS
477
- ])
475
+ d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_TADS,
476
+ [
477
+ FMT_TADS
478
+ ])
478
479
  map.export_tads( d.filename ) if d.filename != ''
479
480
  end
480
481
 
@@ -492,15 +493,15 @@ class FXMapperWindow < FXMainWindow
492
493
  w.execute
493
494
  return
494
495
  end
495
-
496
+
496
497
  require 'IFMapper/FXSVGMapExporterOptionsDialogBox'
497
- cmd = FXSVGMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_SVG,
498
+ cmd = FXSVGMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_SVG,
498
499
  map).execute
499
500
 
500
501
  return if cmd == 0
501
502
 
502
503
  require 'IFMapper/FXMapFileDialog'
503
- d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_SVG,
504
+ d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_SVG,
504
505
  [
505
506
  FMT_SVG
506
507
  ])
@@ -524,22 +525,22 @@ class FXMapperWindow < FXMainWindow
524
525
  w.execute
525
526
  return
526
527
  end
527
-
528
+
528
529
  # PRE: Let's ask for a page size and orientation for the PDF
529
530
  # and whether the user wants to include location numbers
530
531
  map.pdfpapersize = 0
531
532
  map.pdflocationnos = 1
532
533
  require 'IFMapper/FXPDFMapExporterOptionsDialogBox'
533
- cmd = FXPDFMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_PDF,
534
+ cmd = FXPDFMapExporterOptionsDialogBox.new(self, MSG_SAVE_MAP_AS_PDF,
534
535
  map).execute
535
536
 
536
537
  return if cmd == 0
537
538
 
538
539
  require 'IFMapper/FXMapFileDialog'
539
- d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_PDF,
540
- [
541
- FMT_PDF
542
- ])
540
+ d = FXMapFileDialog.new(self, MSG_SAVE_MAP_AS_PDF,
541
+ [
542
+ FMT_PDF
543
+ ])
543
544
  if d.filename != ''
544
545
  map.pdf_export(d.filename)
545
546
  end
@@ -576,7 +577,7 @@ class FXMapperWindow < FXMainWindow
576
577
  @maps = []
577
578
 
578
579
  @mdiclient = FXMDIClient.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y)
579
- @mdiclient.connect(SEL_CHANGED) {
580
+ @mdiclient.connect(SEL_CHANGED) {
580
581
  update_map
581
582
  }
582
583
 
@@ -601,7 +602,7 @@ class FXMapperWindow < FXMainWindow
601
602
  end
602
603
 
603
604
  #
604
- # Return the copied elements
605
+ # Return the copied elements
605
606
  #
606
607
  def self.copy_buffer
607
608
  return @@copy_buffer
@@ -624,9 +625,9 @@ class FXMapperWindow < FXMainWindow
624
625
  # those rooms we selected
625
626
  delete = []
626
627
  links.each { |c|
627
- if not rooms.include?(c.roomA) or
628
- (c.roomB and not rooms.include?(c.roomB))
629
- delete << c
628
+ if not rooms.include?(c.roomA) or
629
+ (c.roomB and not rooms.include?(c.roomB))
630
+ delete << c
630
631
  end
631
632
  }
632
633
  links -= delete
@@ -665,52 +666,52 @@ class FXMapperWindow < FXMainWindow
665
666
  r_to_nr = {} # orig room to new room hash
666
667
  rooms = sel[0]
667
668
  rooms.each { |r|
668
- nr = map.new_room(r.x + pos[0], r.y + pos[1])
669
- nr.selected = true
670
- nr.copy(r) # copy the room data
671
- r_to_nr[r] = nr
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
672
673
  }
673
674
 
674
675
  if rooms.empty?
675
- # Add connections only (no rooms copied)
676
- sel[1].each { |c|
677
- exitA, exitB = c.dirs
678
- roomA = c.roomA
679
- roomB = c.roomB
680
- sect = map.sections[map.section]
681
- if not sect.rooms.include?(roomA) or
682
- (roomB and not sect.rooms.include?(roomB))
683
- next
684
- end
685
- begin
686
- nc = map.new_connection(roomA, exitA, roomB, exitB)
687
- nc.selected = true
688
- nc.dir = c.dir
689
- nc.type = c.type
690
- rescue
691
- end
692
- }
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
+ }
693
694
  else
694
- # Add connections
695
- sel[1].each { |c|
696
- exitA, exitB = c.dirs
697
- roomA = r_to_nr[c.roomA]
698
- if c.roomB
699
- roomB = r_to_nr[c.roomB]
700
- else
701
- roomB = nil
702
- end
703
- next if not roomA
704
- begin
705
- nc = map.new_connection(roomA, exitA, roomB, exitB)
706
- nc.selected = true
707
- nc.dir = c.dir
708
- nc.type = c.type
709
- rescue Section::ConnectionError => e
710
- puts c
711
- puts e
712
- end
713
- }
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
+ }
714
715
  end
715
716
 
716
717
  map.create_pathmap
@@ -756,7 +757,7 @@ class FXMapperWindow < FXMainWindow
756
757
  s.rooms.each { |r| r.selected = false }
757
758
  }
758
759
 
759
- matches.each { |p, r|
760
+ matches.each { |p, r|
760
761
  next if p != map.section
761
762
  r.selected = true
762
763
  }
@@ -781,8 +782,8 @@ class FXMapperWindow < FXMainWindow
781
782
  matches = []
782
783
  (0...map.sections.size).each { |p|
783
784
  map.sections[p].rooms.each { |r|
784
- next unless r.name =~ re
785
- matches.push( [p, r] )
785
+ next unless r.name =~ re
786
+ matches.push( [p, r] )
786
787
  }
787
788
  }
788
789
  idx = @search.index
@@ -850,8 +851,8 @@ class FXMapperWindow < FXMainWindow
850
851
  matches = []
851
852
  (0...map.sections.size).each { |p|
852
853
  map.sections[p].rooms.each { |r|
853
- next unless r.objects =~ re
854
- matches.push( [p, r] )
854
+ next unless r.objects =~ re
855
+ matches.push( [p, r] )
855
856
  }
856
857
  }
857
858
  idx = @search.index
@@ -870,8 +871,8 @@ class FXMapperWindow < FXMainWindow
870
871
  matches = []
871
872
  (0...map.sections.size).each { |p|
872
873
  map.sections[p].rooms.each { |r|
873
- next unless r.tasks =~ re
874
- matches.push( [p, r] )
874
+ next unless r.tasks =~ re
875
+ matches.push( [p, r] )
875
876
  }
876
877
  }
877
878
  idx = @search.index
@@ -926,8 +927,8 @@ class FXMapperWindow < FXMainWindow
926
927
  matches = []
927
928
  (0...map.sections.size).each { |p|
928
929
  map.sections[p].rooms.each { |r|
929
- next unless r.desc =~ re
930
- matches.push( [p, r] )
930
+ next unless r.desc =~ re
931
+ matches.push( [p, r] )
931
932
  }
932
933
  }
933
934
  idx = @search.index
@@ -1003,8 +1004,8 @@ class FXMapperWindow < FXMainWindow
1003
1004
 
1004
1005
  def about_cb(sender, id, event )
1005
1006
  require 'IFMapper/FXAboutDialogBox'
1006
- FXAboutDialogBox.new(self, MSG_ABOUT_SOFTWARE,
1007
- eval("\"#{MSG_ABOUT}\"")).execute
1007
+ FXAboutDialogBox.new(self, MSG_ABOUT_SOFTWARE,
1008
+ eval("\"#{MSG_ABOUT}\"")).execute
1008
1009
  end
1009
1010
 
1010
1011
 
@@ -1026,7 +1027,7 @@ class FXMapperWindow < FXMainWindow
1026
1027
  cmd = FXMenuCommand.new(filemenu, MENU_SAVE, savedoc)
1027
1028
  cmd.connect(SEL_COMMAND, method(:save_cb))
1028
1029
  cmd = FXMenuCommand.new(filemenu, MENU_SAVE_AS,
1029
- saveasdoc)
1030
+ saveasdoc)
1030
1031
  cmd.connect(SEL_COMMAND, method(:save_as_cb))
1031
1032
 
1032
1033
  # Export submenu
@@ -1034,7 +1035,7 @@ class FXMapperWindow < FXMainWindow
1034
1035
 
1035
1036
  cmd = FXMenuCommand.new(submenu, MENU_EXPORT_PDF, nil)
1036
1037
  cmd.connect(SEL_COMMAND, method(:pdf_export_cb))
1037
-
1038
+
1038
1039
  cmd = FXMenuCommand.new(submenu, MENU_EXPORT_SVG, nil)
1039
1040
  cmd.connect(SEL_COMMAND, method(:svg_export_cb))
1040
1041
 
@@ -1074,9 +1075,9 @@ class FXMapperWindow < FXMainWindow
1074
1075
  cmd.connect(SEL_COMMAND, method(:copy_selected_cb))
1075
1076
  cmd = FXMenuCommand.new(editmenu, MENU_CUT, nil)
1076
1077
  cmd.connect(SEL_COMMAND, method(:cut_selected_cb))
1077
- cmd = FXMenuCommand.new(editmenu, MENU_PASTE, nil)
1078
+ cmd = FXMenuCommand.new(editmenu, MENU_PASTE, nil)
1078
1079
  cmd.connect(SEL_COMMAND, method(:paste_selected_cb))
1079
- #cmd = FXMenuCommand.new(editmenu, MENU_UNDO, nil)
1080
+ #cmd = FXMenuCommand.new(editmenu, MENU_UNDO, nil)
1080
1081
  #cmd.connect(SEL_COMMAND, method(:undo_cb))
1081
1082
 
1082
1083
  # Select submenu
@@ -1139,55 +1140,55 @@ class FXMapperWindow < FXMainWindow
1139
1140
  # Sections submenu
1140
1141
  submenu = FXMenuPane.new(self)
1141
1142
  cmd = FXMenuCommand.new(submenu, MENU_NEXT_SECTION)
1142
- cmd.connect(SEL_COMMAND) {
1143
+ cmd.connect(SEL_COMMAND) {
1143
1144
  next_section
1144
1145
  }
1145
1146
  cmd = FXMenuCommand.new(submenu, MENU_PREVIOUS_SECTION)
1146
- cmd.connect(SEL_COMMAND) {
1147
+ cmd.connect(SEL_COMMAND) {
1147
1148
  previous_section
1148
1149
  }
1149
1150
  FXMenuSeparator.new(submenu)
1150
1151
  cmd = FXMenuCommand.new(submenu, MENU_ADD_SECTION)
1151
- cmd.connect(SEL_COMMAND) {
1152
+ cmd.connect(SEL_COMMAND) {
1152
1153
  map = current_map
1153
1154
  if map
1154
- map.new_section
1155
- map.modified = true
1156
- update_section
1155
+ map.new_section
1156
+ map.modified = true
1157
+ update_section
1157
1158
  end
1158
1159
  }
1159
1160
  cmd = FXMenuCommand.new(submenu, MENU_SECTION_INFO)
1160
- cmd.connect(SEL_COMMAND) {
1161
+ cmd.connect(SEL_COMMAND) {
1161
1162
  map = current_map
1162
1163
  if map
1163
- map.rename_section
1164
- map.modified = true
1164
+ map.rename_section
1165
+ map.modified = true
1165
1166
  end
1166
1167
  }
1167
1168
  FXMenuSeparator.new(submenu)
1168
1169
  cmd = FXMenuCommand.new(submenu, MENU_DELETE_SECTION)
1169
- cmd.connect(SEL_COMMAND) {
1170
+ cmd.connect(SEL_COMMAND) {
1170
1171
  map = current_map
1171
1172
  if map
1172
- map.delete_section
1173
- map.modified = true
1174
- update_section
1173
+ map.delete_section
1174
+ map.modified = true
1175
+ update_section
1175
1176
  end
1176
1177
  }
1177
1178
  FXMenuCascade.new(mapmenu, MENU_SECTIONS, nil, submenu)
1178
-
1179
+
1179
1180
  #
1180
1181
  # Zoom submenu
1181
1182
  #
1182
1183
  submenu = FXMenuPane.new(self)
1183
- [25, 50, 75, 100, 125].each { |v|
1184
+ [25, 50, 75, 100, 125].each { |v|
1184
1185
  cmd = FXMenuCommand.new(submenu, eval("\"#{MENU_ZOOM_PERCENT}\""))
1185
- cmd.connect(SEL_COMMAND) {
1186
- map = current_map
1187
- if map
1188
- map.zoom = v / 100.0
1189
- map.draw
1190
- end
1186
+ cmd.connect(SEL_COMMAND) {
1187
+ map = current_map
1188
+ if map
1189
+ map.zoom = v / 100.0
1190
+ map.draw
1191
+ end
1191
1192
  }
1192
1193
  }
1193
1194
  FXMenuCascade.new(mapmenu, MENU_ZOOM, nil, submenu)
@@ -1199,7 +1200,7 @@ class FXMapperWindow < FXMainWindow
1199
1200
  cmd.connect(SEL_COMMAND) { |s, m, e|
1200
1201
  map = current_map
1201
1202
  if map
1202
- map.options['Edit on Creation'] = (s.check == true)
1203
+ map.options['Edit on Creation'] = (s.check == true)
1203
1204
  end
1204
1205
  }
1205
1206
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1212,7 +1213,7 @@ class FXMapperWindow < FXMainWindow
1212
1213
  cmd.connect(SEL_COMMAND) { |s, m, e|
1213
1214
  map = current_map
1214
1215
  if map
1215
- map.options['Automatic Connection'] = (s.check == true)
1216
+ map.options['Automatic Connection'] = (s.check == true)
1216
1217
  end
1217
1218
  }
1218
1219
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1242,8 +1243,8 @@ class FXMapperWindow < FXMainWindow
1242
1243
  cmd.connect(SEL_COMMAND) { |s, m, e|
1243
1244
  map = current_map
1244
1245
  if map
1245
- map.options['Use Room Cursor'] = (s.check == true)
1246
- map.draw
1246
+ map.options['Use Room Cursor'] = (s.check == true)
1247
+ map.draw
1247
1248
  end
1248
1249
  }
1249
1250
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1256,8 +1257,8 @@ class FXMapperWindow < FXMainWindow
1256
1257
  cmd.connect(SEL_COMMAND) { |s, m, e|
1257
1258
  map = current_map
1258
1259
  if map
1259
- map.options['Paths as Curves'] = (s.check == true)
1260
- map.draw
1260
+ map.options['Paths as Curves'] = (s.check == true)
1261
+ map.draw
1261
1262
  end
1262
1263
  }
1263
1264
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1269,8 +1270,8 @@ class FXMapperWindow < FXMainWindow
1269
1270
  cmd.connect(SEL_COMMAND) { |s, m, e|
1270
1271
  map = current_map
1271
1272
  if map
1272
- map.options['Location Numbers'] = (s.check == true)
1273
- map.draw
1273
+ map.options['Location Numbers'] = (s.check == true)
1274
+ map.draw
1274
1275
  end
1275
1276
  }
1276
1277
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1283,8 +1284,8 @@ class FXMapperWindow < FXMainWindow
1283
1284
  cmd.connect(SEL_COMMAND) { |s, m, e|
1284
1285
  map = current_map
1285
1286
  if map
1286
- map.options['Location Tasks'] = (s.check == true)
1287
- map.draw
1287
+ map.options['Location Tasks'] = (s.check == true)
1288
+ map.draw
1288
1289
  end
1289
1290
  }
1290
1291
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1297,8 +1298,8 @@ class FXMapperWindow < FXMainWindow
1297
1298
  cmd.connect(SEL_COMMAND) { |s, m, e|
1298
1299
  map = current_map
1299
1300
  if map
1300
- map.options['Location Description'] = (s.check == true)
1301
- map.draw
1301
+ map.options['Location Description'] = (s.check == true)
1302
+ map.draw
1302
1303
  end
1303
1304
  }
1304
1305
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1311,8 +1312,8 @@ class FXMapperWindow < FXMainWindow
1311
1312
  cmd.connect(SEL_COMMAND) { |s, m, e|
1312
1313
  map = current_map
1313
1314
  if map
1314
- map.options['Grid Boxes'] = (s.check == true)
1315
- map.draw
1315
+ map.options['Grid Boxes'] = (s.check == true)
1316
+ map.draw
1316
1317
  end
1317
1318
  }
1318
1319
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1325,8 +1326,8 @@ class FXMapperWindow < FXMainWindow
1325
1326
  cmd.connect(SEL_COMMAND) { |s, m, e|
1326
1327
  map = current_map
1327
1328
  if map
1328
- map.options['Grid Straight Connections'] = (s.check == true)
1329
- map.draw
1329
+ map.options['Grid Straight Connections'] = (s.check == true)
1330
+ map.draw
1330
1331
  end
1331
1332
  }
1332
1333
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1339,8 +1340,8 @@ class FXMapperWindow < FXMainWindow
1339
1340
  cmd.connect(SEL_COMMAND) { |s, m, e|
1340
1341
  map = current_map
1341
1342
  if map
1342
- map.options['Grid Diagonal Connections'] = s.check
1343
- map.draw
1343
+ map.options['Grid Diagonal Connections'] = s.check
1344
+ map.draw
1344
1345
  end
1345
1346
  }
1346
1347
  cmd.connect(SEL_UPDATE) { |s, m, e|
@@ -1363,11 +1364,11 @@ class FXMapperWindow < FXMainWindow
1363
1364
  # }
1364
1365
 
1365
1366
  # FXMenuCascade.new(mapmenu, MENU_LANGUAGE, nil, langmenu)
1366
-
1367
+
1367
1368
 
1368
1369
  FXMenuSeparator.new(submenu)
1369
1370
  cmd = FXMenuCommand.new(submenu, MENU_SAVE_PREFS)
1370
- cmd.connect(SEL_COMMAND) {
1371
+ cmd.connect(SEL_COMMAND) {
1371
1372
  map = current_map
1372
1373
  map.options.write if map
1373
1374
  }
@@ -1392,8 +1393,8 @@ class FXMapperWindow < FXMainWindow
1392
1393
  FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_2)
1393
1394
  FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_3)
1394
1395
  FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_4)
1395
- FXMenuCommand.new(windowmenu, MENU_OTHERS, nil, @mdiclient,
1396
- FXMDIClient::ID_MDI_OVER_5)
1396
+ FXMenuCommand.new(windowmenu, MENU_OTHERS, nil, @mdiclient,
1397
+ FXMDIClient::ID_MDI_OVER_5)
1397
1398
  FXMenuTitle.new(@menubar, MENU_WINDOW, nil, windowmenu)
1398
1399
 
1399
1400
  # Help menu
@@ -1409,14 +1410,14 @@ class FXMapperWindow < FXMainWindow
1409
1410
  cmd = FXMenuCommand.new(helpmenu, MENU_RESOURCE, nil)
1410
1411
  cmd.connect(SEL_COMMAND) {
1411
1412
  require 'IFMapper/FXMapFileDialog'
1412
- file = FXMapFileDialog.new(self, "Resource a Ruby File",
1413
- ['Ruby File (*.rb)']).filename
1413
+ file = FXMapFileDialog.new(self, "Resource a Ruby File",
1414
+ ['Ruby File (*.rb)']).filename
1414
1415
  if file != ''
1415
- begin
1416
- Kernel.load file
1417
- rescue => e
1418
- p e
1419
- end
1416
+ begin
1417
+ Kernel.load file
1418
+ rescue => e
1419
+ p e
1420
+ end
1420
1421
  end
1421
1422
  }
1422
1423
  FXMenuTitle.new(@menubar, MENU_HELP, nil, helpmenu)
@@ -1456,7 +1457,7 @@ class FXMapperWindow < FXMainWindow
1456
1457
 
1457
1458
  # File manipulation
1458
1459
  cmd = FXButton.new(toolbar, ICON_NEW, newdoc, nil, 0,
1459
- FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1460
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1460
1461
  cmd.connect(SEL_COMMAND, method(:new_map_cb))
1461
1462
 
1462
1463
  cmd = FXButton.new(toolbar, ICON_OPEN, opendoc, nil, 0,
@@ -1484,15 +1485,15 @@ class FXMapperWindow < FXMainWindow
1484
1485
  FXFrame.new(toolbar,
1485
1486
  LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
1486
1487
  cmd = FXButton.new(toolbar, ICON_PRINT,
1487
- load_icon("printicon"), @mdiclient, FXGLViewer::ID_PRINT_IMAGE,
1488
- BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1488
+ load_icon("printicon"), @mdiclient, FXGLViewer::ID_PRINT_IMAGE,
1489
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1489
1490
  cmd.connect(SEL_COMMAND, method(:print_cb))
1490
1491
  cmd.connect(SEL_UPDATE) { |sender, sel, ptr|
1491
1492
  map = current_map
1492
1493
  message = map ? FXWindow::ID_ENABLE : FXWindow::ID_DISABLE
1493
1494
  sender.handle(self, MKUINT(message, SEL_COMMAND), nil)
1494
1495
  }
1495
-
1496
+
1496
1497
  # Editing
1497
1498
  FXFrame.new(toolbar,
1498
1499
  LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
@@ -1528,43 +1529,43 @@ class FXMapperWindow < FXMainWindow
1528
1529
  FXFrame.new(toolbar,
1529
1530
  LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, 0, 0, 4, 20)
1530
1531
  cmd = FXButton.new(toolbar, ICON_ZOOM_IN, load_icon("zoom"), @mdiclient,
1531
- 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1532
+ 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1532
1533
  cmd.connect(SEL_COMMAND) { zoom_in }
1533
1534
 
1534
- cmd = FXButton.new(toolbar, ICON_ZOOM_OUT, load_icon("zoom"), @mdiclient,
1535
- 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1535
+ cmd = FXButton.new(toolbar, ICON_ZOOM_OUT, load_icon("zoom"), @mdiclient,
1536
+ 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1536
1537
  cmd.connect(SEL_COMMAND) { zoom_out }
1537
1538
 
1538
1539
 
1539
1540
  # Section travel
1540
1541
  frame = FXHorizontalFrame.new(toolbar,
1541
- LAYOUT_RIGHT|FRAME_THICK|FRAME_RAISED)
1542
- cmd = FXButton.new(frame, ICON_PREV_SECTION, load_icon("prevpage"),
1543
- @mdiclient,
1544
- 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
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)
1545
1546
  cmd.connect(SEL_COMMAND) { previous_section }
1546
1547
 
1547
- @section = FXTextField.new(frame, 5, nil, 0,
1548
- TEXTFIELD_INTEGER|LAYOUT_FILL_ROW)
1548
+ @section = FXTextField.new(frame, 5, nil, 0,
1549
+ TEXTFIELD_INTEGER|LAYOUT_FILL_ROW)
1549
1550
  @section.text = '1'
1550
- @section.connect(SEL_COMMAND) { |s,m,e|
1551
+ @section.connect(SEL_COMMAND) { |s,m,e|
1551
1552
  v = s.text.to_i
1552
1553
  map = current_map
1553
1554
  if map
1554
- map.section = v - 1
1555
- map.draw
1556
- update_section
1555
+ map.section = v - 1
1556
+ map.draw
1557
+ update_section
1557
1558
  end
1558
1559
  }
1559
- @section.connect(SEL_UPDATE) { |s,m,e|
1560
+ @section.connect(SEL_UPDATE) { |s,m,e|
1560
1561
  map = current_map
1561
1562
  update_section if map
1562
1563
  }
1563
1564
 
1564
- cmd = FXButton.new(frame, ICON_NEXT_SECTION, load_icon("nextpage"),
1565
- @mdiclient,
1566
- 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
1567
- 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 }
1568
1569
  end
1569
1570
 
1570
1571
  #
@@ -1588,7 +1589,7 @@ class FXMapperWindow < FXMainWindow
1588
1589
  #
1589
1590
  # Go to previous section in current map
1590
1591
  #
1591
- def previous_section
1592
+ def previous_section
1592
1593
  map = current_map
1593
1594
  map.previous_section if map
1594
1595
  update_section
@@ -1640,20 +1641,20 @@ class FXMapperWindow < FXMainWindow
1640
1641
  @menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
1641
1642
 
1642
1643
  FXHorizontalSeparator.new(self,
1643
- LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
1644
+ LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X)
1644
1645
  toolbar = FXToolBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X,
1645
1646
  0, 0, 0, 0, 4, 4, 0, 0, 0, 0)
1646
-
1647
+
1647
1648
  # Status bar
1648
1649
  @statusbar = FXStatusBar.new(self,
1649
- LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|
1650
- STATUSBAR_WITH_DRAGCORNER)
1650
+ LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|
1651
+ STATUSBAR_WITH_DRAGCORNER)
1651
1652
 
1652
1653
 
1653
1654
  create_mdiclient
1654
1655
  create_menus
1655
1656
  create_toolbar(toolbar)
1656
-
1657
+
1657
1658
 
1658
1659
  self.connect(SEL_CLOSE, method(:close_cb))
1659
1660
  show
@@ -1663,13 +1664,13 @@ class FXMapperWindow < FXMainWindow
1663
1664
 
1664
1665
  def initialize(app)
1665
1666
  super(app, eval("\"#{TITLE}\""), nil, nil, DECOR_ALL, 0, 0, 800, 600)
1666
-
1667
+
1667
1668
  @colors = nil
1668
1669
  @mdimenu = nil
1669
1670
  @search = nil
1670
1671
 
1671
1672
  create_widgets
1672
-
1673
+
1673
1674
 
1674
1675
  # Trap CTRL-C signals and exit nicely
1675
1676
  trap('SIGINT') {
@@ -1680,13 +1681,13 @@ class FXMapperWindow < FXMainWindow
1680
1681
 
1681
1682
  def close_cb(*args)
1682
1683
  exit = true
1683
- @maps.each { |m|
1684
- if not m.close_cb
1685
- exit = false
1686
- break
1687
- else
1688
- @maps.delete(m)
1689
- end
1684
+ @maps.each { |m|
1685
+ if not m.close_cb
1686
+ exit = false
1687
+ break
1688
+ else
1689
+ @maps.delete(m)
1690
+ end
1690
1691
  }
1691
1692
  self.close if exit
1692
1693
  end
@@ -1,3 +1,7 @@
1
+ # Default constants
2
+ FIG_NONE = false
3
+ FIG_PORTRAIT = :portrait
4
+ FIG_LANDSCAPE = :landscape
1
5
 
2
6
  # Common printing add-ons
3
7
  class FXSection
@@ -14,7 +18,7 @@ class Page
14
18
  end
15
19
  end
16
20
 
17
- class Map
21
+ class Map
18
22
  #
19
23
  # This code section is largely a copy of similar code used in
20
24
  # IFM's C code.
@@ -31,8 +35,8 @@ class Map
31
35
  sect.yoff = 0.0
32
36
 
33
37
  page = Page.new(xlen+2, ylen+2)
34
- pages.push page
35
38
  page.sections << sect
39
+ pages << page
36
40
  }
37
41
 
38
42
  ratio = xmax.to_f / ymax
@@ -42,100 +46,100 @@ class Map
42
46
  newpages = []
43
47
  pos = packed = 0
44
48
  while pos < pages.size
45
- p1 = pages[pos]
46
- x1 = p1.xlen
47
- y1 = p1.ylen
48
-
49
- # Check if it's better off rotated
50
- p1.rotate = ((x1 < y1 and xmax > ymax) or
51
- (x1 > y1 and xmax < ymax))
52
-
53
- # Check if this is the last page
54
- if pos + 1 == pages.size
55
- newpages.push p1
56
- break
57
- end
58
-
59
- # Get following page
60
- p2 = pages[pos+1]
61
- x2 = p2.xlen
62
- y2 = p2.ylen
63
-
64
- # Try combining pages in X direction
65
- xc1 = x1 + x2 + spacing
66
- yc1 = [y1, y2].max
67
- v1 = (xc1 <= xmax and yc1 <= ymax)
68
- r1 = xc1.to_f / yc1
69
-
70
- # Try combining pages in Y direction
71
- xc2 = [x1, x2].max
72
- yc2 = y1 + y2 + spacing
73
- v2 = (xc2 <= xmax and yc2 <= ymax)
74
- r2 = xc2.to_f / yc2
75
-
76
- # See which is best
77
- if v1 and v2
78
- if (ratio - r1).abs < (ratio - r2).abs
79
- v2 = false
80
- else
81
- v1 = false
82
- end
83
- end
84
-
85
- # Just copy page if nothing can be done
86
- if not v1 and not v2
87
- newpages.push(p1)
88
- pos += 1
89
- next
90
- end
91
-
92
- # Create merged page
93
- page = Page.new
94
- xo1 = yo1 = xo2 = yo2 = 0
95
-
96
- if v1
97
- page.xlen = xc1
98
- page.ylen = yc1
99
- xo2 = x1 + spacing
100
-
101
- if y1 < y2
102
- yo1 = (yc1 - y1) / 2
103
- else
104
- yo2 = (yc1 - y2) / 2
105
- end
106
- end
107
-
108
- if v2
109
- page.xlen = xc2
110
- page.ylen = yc2
111
- yo1 = y2 + spacing
112
-
113
- if x1 < x2
114
- xo1 = (xc2 - x1) / 2
115
- else
116
- xo2 = (xc2 - x2) / 2
117
- end
118
- end
119
-
120
- # Copy sections to new page, updating offsets
121
- opsects = p1.sections
122
- opsects.each { |sect|
123
- page.sections.push sect
124
- sect.xoff += xo1
125
- sect.yoff += yo1
126
- }
127
-
128
- opsects = p2.sections
129
- opsects.each { |sect|
130
- page.sections.push sect
131
- sect.xoff += xo2
132
- sect.yoff += yo2
133
- }
134
-
135
- # Add merged page to list and go to next page pair
136
- newpages.push page
137
- pos += 2
138
- packed += 1
49
+ p1 = pages[pos]
50
+ x1 = p1.xlen
51
+ y1 = p1.ylen
52
+
53
+ # Check if it's better off rotated
54
+ p1.rotate = ((x1 < y1 and xmax > ymax) or
55
+ (x1 > y1 and xmax < ymax))
56
+
57
+ # Check if this is the last page
58
+ if pos + 1 == pages.size
59
+ newpages.push p1
60
+ break
61
+ end
62
+
63
+ # Get following page
64
+ p2 = pages[pos+1]
65
+ x2 = p2.xlen
66
+ y2 = p2.ylen
67
+
68
+ # Try combining pages in X direction
69
+ xc1 = x1 + x2 + spacing
70
+ yc1 = [y1, y2].max
71
+ v1 = (xc1 <= xmax and yc1 <= ymax)
72
+ r1 = xc1.to_f / yc1
73
+
74
+ # Try combining pages in Y direction
75
+ xc2 = [x1, x2].max
76
+ yc2 = y1 + y2 + spacing
77
+ v2 = (xc2 <= xmax and yc2 <= ymax)
78
+ r2 = xc2.to_f / yc2
79
+
80
+ # See which is best
81
+ if v1 and v2
82
+ if (ratio - r1).abs < (ratio - r2).abs
83
+ v2 = false
84
+ else
85
+ v1 = false
86
+ end
87
+ end
88
+
89
+ # Just copy page if nothing can be done
90
+ if not v1 and not v2
91
+ newpages.push(p1)
92
+ pos += 1
93
+ next
94
+ end
95
+
96
+ # Create merged page
97
+ page = Page.new
98
+ xo1 = yo1 = xo2 = yo2 = 0
99
+
100
+ if v1
101
+ page.xlen = xc1
102
+ page.ylen = yc1
103
+ xo2 = x1 + spacing
104
+
105
+ if y1 < y2
106
+ yo1 = (yc1 - y1) / 2
107
+ else
108
+ yo2 = (yc1 - y2) / 2
109
+ end
110
+ end
111
+
112
+ if v2
113
+ page.xlen = xc2
114
+ page.ylen = yc2
115
+ yo1 = y2 + spacing
116
+
117
+ if x1 < x2
118
+ xo1 = (xc2 - x1) / 2
119
+ else
120
+ xo2 = (xc2 - x2) / 2
121
+ end
122
+ end
123
+
124
+ # Copy sections to new page, updating offsets
125
+ opsects = p1.sections
126
+ opsects.each { |sect|
127
+ page.sections.push sect
128
+ sect.xoff += xo1
129
+ sect.yoff += yo1
130
+ }
131
+
132
+ opsects = p2.sections
133
+ opsects.each { |sect|
134
+ page.sections.push sect
135
+ sect.xoff += xo2
136
+ sect.yoff += yo2
137
+ }
138
+
139
+ # Add merged page to list and go to next page pair
140
+ newpages.push page
141
+ pos += 2
142
+ packed += 1
139
143
  end
140
144
  pages = newpages
141
145
  end
@@ -150,13 +154,12 @@ class Map
150
154
 
151
155
  num += 1
152
156
  psects.each { |sect|
153
- sect.page = num
154
- sect.pxlen = xlen
155
- sect.pylen = ylen
156
- sect.rotate = rflag
157
+ sect.page = num
158
+ sect.pxlen = xlen
159
+ sect.pylen = ylen
160
+ sect.rotate = rflag
157
161
  }
158
162
  }
159
163
  return num
160
164
  end
161
165
  end
162
-
@@ -1,7 +1,7 @@
1
1
  require 'tmpdir'
2
2
 
3
3
  begin
4
- require 'IFMapper/PDFMapExporter_prawn'
4
+ require 'IFMapper/PDFMapExporter_pdfwriter'
5
5
  rescue LoadError => e
6
6
  raise LoadError, e
7
7
  end
@@ -21,6 +21,8 @@ PDF_ROOM_WS = WS * PDF_ZOOM
21
21
  PDF_ROOM_HS = HS * PDF_ZOOM
22
22
  PDF_MARGIN = 20.0
23
23
 
24
+
25
+
24
26
  #
25
27
  # Open all the map class and add all pdf methods there
26
28
  # Gotta love Ruby's flexibility to just inject in new methods.
@@ -186,14 +188,16 @@ class FXConnection
186
188
  dir = @room[0].exits.index(self)
187
189
  x, y = @room[0].pdf_corner(opts, self, dir)
188
190
  pdf.move_to(x, y)
189
- pdf_draw_text( pdf, x, y+4, dir,
191
+ # WAS: y+4 below
192
+ pdf_draw_text( pdf, x, y, dir,
190
193
  EXIT_TEXT[@exitText[0]], @dir == BtoA)
191
194
  end
192
195
 
193
196
  if @exitText[1] != 0
194
197
  dir = @room[1].exits.rindex(self)
195
198
  x, y = @room[1].pdf_corner(opts, self, dir)
196
- pdf_draw_text( pdf, x, y+4, dir,
199
+ # WAS: y+4 below
200
+ pdf_draw_text( pdf, x, y, dir,
197
201
  EXIT_TEXT[@exitText[1]], @dir == AtoB)
198
202
  end
199
203
  end
@@ -273,18 +277,31 @@ class FXRoom
273
277
  pdf.stroke_color '000000'
274
278
  pdf.fill_color '000000'
275
279
 
280
+ # WAS: y+7
276
281
  pdf.text_box locationno,
277
- :at => [(x+((opts['w']/4)*3)+2), y+7], :size => 8
282
+ :at => [(x+((opts['w']/4)*3)+2), y+2], :size => 8
278
283
  end
279
284
 
280
285
  end
281
286
 
282
287
  def pdf_draw_text( pdf, opts, x, y, text, font_size, pdflocationnos )
283
288
  miny = (opts['height'] - @y) * opts['hh'] + opts['hs_2'] +
284
- opts['margin_2']
285
- pdf.text_box text, :at => [x, y+6], :size => font_size,
286
- :width => opts['w'], :height => opts['h'], :valign => :top,
287
- :align => :left, :overflow => :shrink_to_fit
289
+ opts['margin_2']
290
+ while text != ''
291
+ # PRE: Wrap the text to avoid the location number box
292
+ if (y >= miny) and (y <= (miny+font_size)) and (pdflocationnos == 1)
293
+ wrapwidthmodifier = 15
294
+ else
295
+ wrapwidthmodifier = 2
296
+ end
297
+ text = pdf.text_box text, :at => [x, y+6], :size => font_size,
298
+ :width => opts['w'] - wrapwidthmodifier,
299
+ :height => opts['h'], :valign => :top,
300
+ :align => :left, :overflow => :shrink_to_fit
301
+ y -= font_size
302
+ break if y <= miny
303
+ end
304
+
288
305
  return [x, y]
289
306
  end
290
307
 
@@ -292,7 +309,7 @@ class FXRoom
292
309
  font_size = 6
293
310
  objs = @objects.split("\n")
294
311
  objs = objs.join(', ')
295
- return pdf_draw_text( pdf, opts, x, y-font_size,
312
+ return pdf_draw_text( pdf, opts, x, y,
296
313
  objs, font_size, pdflocationnos )
297
314
  end
298
315
 
@@ -356,7 +373,7 @@ class FXSection
356
373
 
357
374
  pdf.save_graphics_state
358
375
 
359
- if rotate and @rooms.size > 2
376
+ if rotate
360
377
  pdf.rotate 90.0
361
378
  pdf.translate( 0, -pdf.margin_box.height )
362
379
  end
@@ -398,7 +415,7 @@ class FXSection
398
415
 
399
416
  xi = opts['width']
400
417
  yi = opts['height']
401
- if rotate and @rooms.size > 2
418
+ if rotate
402
419
  xi = (pdf.margin_box.height / opts['ww']).to_i - 1
403
420
  yi = (pdf.margin_box.width / opts['hh']).to_i - 1
404
421
  end
@@ -410,7 +427,7 @@ class FXSection
410
427
  break if y >= h
411
428
  end
412
429
 
413
- if rotate and @rooms.size > 2
430
+ if rotate
414
431
  pdf.rotate(-90.0)
415
432
  pdf.translate( 0, pdf.page_height )
416
433
  end
@@ -481,7 +498,6 @@ class FXMap
481
498
  end
482
499
 
483
500
  # Open a new PDF writer with paper selected
484
- # PRE: Let's also set the paper orientation based on user selection
485
501
 
486
502
  pdf = Prawn::Document.new :page_size => paper
487
503
 
@@ -509,10 +525,23 @@ class FXMap
509
525
 
510
526
 
511
527
  begin
528
+ ratio = pdf.margin_box.height / pdf.margin_box.width.to_f;
512
529
  # See if it is possible to pack several map sections (sections) into
513
530
  # a single print page.
514
- num = pack_sections( pdf_options['width'] + 2,
515
- pdf_options['height'] + 2 )
531
+ loop do
532
+
533
+ num = pack_sections( pdf_options['width'],
534
+ pdf_options['height'] )
535
+
536
+ if num > 0
537
+ break
538
+ end
539
+
540
+ width += 1
541
+ height = (width * ratio).to_i + 1;
542
+ end
543
+
544
+
516
545
  pdf_draw_sections(pdf, pdf_options)
517
546
  if pdffile !~ /\.pdf$/
518
547
  pdffile << ".pdf"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ifmapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.2.4
5
5
  platform: ruby
6
6
  authors:
7
- - Gonzalo Garramuno
7
+ - Gonzalo Garramuño
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-07 00:00:00.000000000 Z
11
+ date: 2021-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -70,6 +70,26 @@ dependencies:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
72
  version: 1.0.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: pdf-writer
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 1.0.0
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.0
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.0.0
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.0.0
73
93
  description: " Interactive Fiction Mapping Tool.\n"
74
94
  email: ggarra13@gmail.com
75
95
  executables: