fgmapping 1.2.1 → 1.3.0

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v1.3.0 added elevation layer, restructured threaded tile reading, added compressed resource file handling
2
+
1
3
  v1.2.1 corrected alt display in popup of tracks - restructured reading of flightgear data to make is more responsive - added application icon
2
4
 
3
5
  v1.2.0 Added setting of Radio Manager Waypoints in Flightgear
data/Manifest CHANGED
@@ -16,6 +16,7 @@ lib/main-dlg.rb
16
16
  lib/navaid.rb
17
17
  lib/nodeinfo-impl.rb
18
18
  lib/nodeinfo-widget.rb
19
+ lib/resources.marshal
19
20
  lib/resources.rb
20
21
  lib/tile.rb
21
22
  lib/waypoint.rb
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ Echoe.new('fgmapping', version) do |p|
17
17
  p.url = "http://rubyforge.org/projects/fgmap"
18
18
  p.author = "Michael Meltner"
19
19
  p.email = "mmeltner @nospamplease@ gmail.com"
20
- p.ignore_pattern = ["tmp/*", "script/*", "develop/*", "README.build_gem"]
20
+ p.ignore_pattern = ["tmp/*", "script/*", "develop/*", "README.build_gem", "*.gz"]
21
21
  p.development_dependencies = []
22
22
  end
23
23
 
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{fgmapping}
5
- s.version = "1.2.1"
5
+ s.version = "1.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Michael Meltner"]
9
- s.date = %q{2010-06-21}
9
+ s.date = %q{2010-06-23}
10
10
  s.default_executable = %q{flightgear-mapping}
11
11
  s.description = %q{Flightgear live mapping}
12
12
  s.email = %q{mmeltner @nospamplease@ gmail.com}
13
13
  s.executables = ["flightgear-mapping"]
14
- s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "bin/flightgear-mapping", "lib/LICENSE", "lib/README", "lib/bsearch.rb", "lib/hud-impl.rb", "lib/hud-widget.rb", "lib/init.rb", "lib/main-dlg-impl.rb", "lib/main-dlg.rb", "lib/navaid.rb", "lib/nodeinfo-impl.rb", "lib/nodeinfo-widget.rb", "lib/resources.rb", "lib/tile.rb", "lib/waypoint.rb"]
15
- s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "bin/flightgear-mapping", "fgmapping.gemspec", "lib/LICENSE", "lib/README", "lib/bsearch.rb", "lib/hud-impl.rb", "lib/hud-widget.rb", "lib/init.rb", "lib/main-dlg-impl.rb", "lib/main-dlg.rb", "lib/navaid.rb", "lib/nodeinfo-impl.rb", "lib/nodeinfo-widget.rb", "lib/resources.rb", "lib/tile.rb", "lib/waypoint.rb"]
14
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "bin/flightgear-mapping", "lib/LICENSE", "lib/README", "lib/bsearch.rb", "lib/hud-impl.rb", "lib/hud-widget.rb", "lib/init.rb", "lib/main-dlg-impl.rb", "lib/main-dlg.rb", "lib/navaid.rb", "lib/nodeinfo-impl.rb", "lib/nodeinfo-widget.rb", "lib/resources.marshal", "lib/resources.rb", "lib/tile.rb", "lib/waypoint.rb"]
15
+ s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "bin/flightgear-mapping", "fgmapping.gemspec", "lib/LICENSE", "lib/README", "lib/bsearch.rb", "lib/hud-impl.rb", "lib/hud-widget.rb", "lib/init.rb", "lib/main-dlg-impl.rb", "lib/main-dlg.rb", "lib/navaid.rb", "lib/nodeinfo-impl.rb", "lib/nodeinfo-widget.rb", "lib/resources.marshal", "lib/resources.rb", "lib/tile.rb", "lib/waypoint.rb"]
16
16
  s.homepage = %q{http://rubyforge.org/projects/fgmap}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Fgmapping", "--main", "README.build_gem"]
18
18
  s.require_paths = ["lib"]
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  ** Form generated from reading ui file 'hud-widget.ui'
3
3
  **
4
- ** Created: Mo. Jun 21 22:46:54 2010
4
+ ** Created: Mi. Jun 23 14:44:44 2010
5
5
  ** by: Qt User Interface Compiler version 4.6.2
6
6
  **
7
7
  ** WARNING! All changes made in this file will be lost when recompiling ui file!
@@ -39,17 +39,22 @@ ILSCONEANGLE = 10 # in degree
39
39
  ILSTEXTOFFSET = 10 # in pixel
40
40
 
41
41
  Z_VALUE_TILES = 0
42
- Z_VALUE_TRACK = 1
43
- Z_VALUE_TRACK_COLORED = 2
44
- Z_VALUE_WAYPOINT = 3
45
- Z_VALUE_NAV = 4
46
- Z_VALUE_ORIGIN = 5
47
- Z_VALUE_ROSE = 6
48
- Z_VALUE_POINTERTOORIGIN = 7
49
- Z_VALUE_POINTER = 8
42
+ Z_VALUE_TILES_ELEVATION = 1
43
+ Z_VALUE_TRACK = 2
44
+ Z_VALUE_TRACK_COLORED = 3
45
+ Z_VALUE_WAYPOINT = 4
46
+ Z_VALUE_NAV = 5
47
+ Z_VALUE_ORIGIN = 6
48
+ Z_VALUE_ROSE = 7
49
+ Z_VALUE_POINTERTOORIGIN = 8
50
+ Z_VALUE_POINTER = 9
50
51
  Z_VALUE_HUD = 10
52
+ Z_VALUE_WARNING = 20
51
53
  SCALE_SVG = 0.3
52
54
 
55
+ OPENSTREETMAP_TILE = 0
56
+ ELEVATION_TILE = 1
57
+
53
58
  COLORRANGE_DEG = 120.0
54
59
  COLOROFFSET_DEG = 240.0
55
60
 
@@ -58,6 +63,7 @@ FS_READ_INTERVAL = 100 # enter GUI refresh loop every 100ms
58
63
  LOOPSLEEPINTERVAL = (0.95 * FS_READ_INTERVAL / 1000) # spend 95% of time sleeping to prevent
59
64
  # threads from starving. Time is in seconds!
60
65
  TICKSTOSKIP = 20
66
+
61
67
  AUTOSAVE_INTERVAL = 10 * 60 * 1000 # autosave interval for tracks
62
68
  HOVER_TIMER = 2000 # time until HUD widget disappears
63
69
  MAXVORSTODISPLAY = 500 # maximum number of nav-aids to display on map
@@ -65,14 +71,12 @@ MAXILSTODISPLAY = 200
65
71
 
66
72
  FS_PORT = 2948
67
73
 
68
-
69
- #LATSTARTUP = 49.462126667
70
- #LONSTARTUP = 11.121691667
71
74
  LATSTARTUP = 50.0368400387281
72
75
  LONSTARTUP = 8.55965957641601
73
76
 
74
77
  MAPSDIR = ENV['HOME'] + "/.OpenstreetmapTiles"
75
78
 
79
+ #Thread.abort_on_exception = true
76
80
  #GC.disable
77
81
 
78
82
  # Class MainDlg ############################################
@@ -84,7 +88,7 @@ class MainDlg < Qt::Widget
84
88
 
85
89
  slots "pBexit_clicked()", "pBdo_clicked()", "pBplus_clicked()", "pBminus_clicked()", \
86
90
  "cBpointorigin_clicked()", "pBrecordTrack_toggled(bool)", "wakeupTimer()", "autosaveTimer()", \
87
- 'cBvor_clicked()', 'cBndb_clicked()', 'cBrw_clicked()'
91
+ 'cBvor_clicked()', 'cBndb_clicked()', 'cBrw_clicked()', 'cBshadows_clicked()', 'hSopacity_changed(int)'
88
92
 
89
93
  def initialize(parent, arg)
90
94
  super(parent)
@@ -100,6 +104,7 @@ class MainDlg < Qt::Widget
100
104
  @w.cBrw.setChecked(@cfg.value("rwChecked",Qt::Variant.new(false)).toBool)
101
105
  @w.cBndb.setChecked(@cfg.value("nbdChecked",Qt::Variant.new(false)).toBool)
102
106
  @w.cBvor.setChecked(@cfg.value("vorChecked",Qt::Variant.new(true)).toBool)
107
+ @opacity = @cfg.value("opacity",Qt::Variant.new(1.0)).toFloat
103
108
 
104
109
  @flag=Qt::Pixmap.new(":/icons/flag-blue.png")
105
110
  @pin=Qt::Pixmap.new(":/icons/wpttemp-red.png")
@@ -136,14 +141,21 @@ class MainDlg < Qt::Widget
136
141
  @rot = 0
137
142
  @remainingTiles = 0
138
143
  @httpThreads = Array.new
144
+ @currentlyDownloading = Array.new
145
+ @currentlyDownloadingElevation = Array.new
146
+ @tilesToAdd = Array.new
139
147
 
140
148
  @navs = Navaid.new(arg)
141
149
 
142
150
  @httpMutex = Mutex.new
151
+ @httpElevationMutex = Mutex.new
143
152
  @queryMutex = Mutex.new
144
-
153
+ @tilesToAddMutex = Mutex.new
154
+
145
155
  @scene=Qt::GraphicsScene.new()
146
156
  @w.gVmap.setScene(@scene)
157
+ resetScene()
158
+
147
159
  @w.lBzoom.setText(@zoom.to_s)
148
160
  vorGraphic=Qt::GraphicsSvgItem.new(":/icons/vor.svg")
149
161
  vorGraphic.setElementId("VOR")
@@ -174,6 +186,19 @@ class MainDlg < Qt::Widget
174
186
  readFlightgear()
175
187
  end
176
188
 
189
+ def resetScene
190
+ @scene.clear
191
+ @openstreetmapLayer = TileGraphicsItemGroup.new
192
+ @openstreetmapLayer.setZValue(Z_VALUE_TILES)
193
+ @openstreetmapLayer.setOpacity(@opacity)
194
+ @scene.addItem(@openstreetmapLayer)
195
+ @elevationLayer = Qt::GraphicsItemGroup.new
196
+ @elevationLayer.setZValue(Z_VALUE_TILES_ELEVATION)
197
+ @scene.addItem(@elevationLayer)
198
+
199
+ @w.hSopacity.setValue((@opacity * 100).to_i)
200
+ end
201
+
177
202
  def get_data(path)
178
203
  # check from end to get most recent position
179
204
  r=@fs_ans.reverse.detect do |f|
@@ -357,6 +382,8 @@ class MainDlg < Qt::Widget
357
382
  th.kill
358
383
  end
359
384
  @httpThreads = Array.new
385
+ @currentlyDownloading = Array.new
386
+ @currentlyDownloadingElevation = Array.new
360
387
  @remainingTiles = 0
361
388
  @scene.removeItem(@warningText)
362
389
 
@@ -376,6 +403,8 @@ class MainDlg < Qt::Widget
376
403
  end
377
404
  @remainingTiles = 0
378
405
  @httpThreads = Array.new
406
+ @currentlyDownloading = Array.new
407
+ @currentlyDownloadingElevation = Array.new
379
408
  @scene.removeItem(@warningText)
380
409
 
381
410
  @zoom -= 1
@@ -388,16 +417,71 @@ class MainDlg < Qt::Widget
388
417
  movemap(@node, true)
389
418
  end
390
419
 
391
- def addTileToScene(f, origin_x, origin_y)
392
- pmi=TileGraphicsPixmapItem.new(Qt::Pixmap.new(f))
420
+ def addTileToScene(f, origin_x, origin_y, thread=false)
393
421
  @scene_tiles << f
394
422
  f =~ /\/(\d*)\/(\d*)\/(\d*)/
395
423
  x = $2.to_i
396
424
  y = $3.to_i
397
- # p x - origin_x,y - origin_y
398
- pmi.setOffset((x - origin_x)*256, (y - origin_y)*256)
399
- pmi.setZValue(Z_VALUE_TILES)
400
- @scene.addItem(pmi)
425
+
426
+ if thread then
427
+ # we can not add the tiles to the scene within this thread directly. It crosses thread
428
+ # bounderies which crashes QT badly
429
+ @tilesToAddMutex.synchronize {
430
+ @tilesToAdd << [f, (x - origin_x)*256, (y - origin_y)*256, OPENSTREETMAP_TILE]
431
+ }
432
+ else # add immediately, we are not in a different thread
433
+ pmi=Qt::GraphicsPixmapItem.new(Qt::Pixmap.new(f), @openstreetmapLayer)
434
+ pmi.setOffset((x - origin_x)*256, (y - origin_y)*256)
435
+ end
436
+
437
+ if @w.cBshadows.isChecked then
438
+ if FileTest.exist?(f + "-elevation.png") then
439
+ if thread then
440
+ # we can not add the tiles to the scene within this thread directly. It crosses thread
441
+ # bounderies which crashes QT badly
442
+ @tilesToAddMutex.synchronize {
443
+ @tilesToAdd << [f, (x - origin_x)*256, (y - origin_y)*256, ELEVATION_TILE]
444
+ }
445
+ else
446
+ pmi = Qt::GraphicsPixmapItem.new(Qt::Pixmap.new(f + "-elevation.png"), @elevationLayer)
447
+ pmi.setOffset((x - origin_x)*256, (y - origin_y)*256)
448
+ pmi.setZValue(Z_VALUE_TILES_ELEVATION)
449
+ end
450
+ else
451
+ @httpThreads << Thread.new(f) {|filename|
452
+ if !@currentlyDownloadingElevation.include?(filename) then
453
+ @currentlyDownloadingElevation << filename
454
+ # try to download elevation profile
455
+ @httpElevationMutex.synchronize {
456
+ h = Net::HTTP.new('toolserver.org')
457
+ h.open_timeout = 10
458
+ filename =~ /\/\d+\/\d+\/\d+$/
459
+ fn = $&
460
+ begin
461
+ resp, data = h.get("/~cmarqu/hill" + fn + ".png", nil)
462
+ if resp.kind_of?(Net::HTTPOK) then
463
+ # check here again as in the meantime another thread might already have added the tile
464
+ if !FileTest.exist?($MAPSHOME + fn + "-elevation.png") then
465
+ File.open($MAPSHOME + fn + "-elevation.png", "w") do |file|
466
+ file.write(data)
467
+ end
468
+ @tilesToAddMutex.synchronize {
469
+ @tilesToAdd << [$MAPSHOME + fn + "-elevation.png", (x - origin_x)*256, (y - origin_y)*256, ELEVATION_TILE]
470
+ }
471
+ end
472
+ else
473
+ puts "No elevation profile found for this tile."
474
+ end
475
+ # NoMethodError because of bug, see http://redmine.ruby-lang.org/issues/show/2708
476
+ rescue NoMethodError, Errno::ECONNREFUSED, SocketError, Timeout::Error
477
+ puts "No connection to elevation profile server."
478
+ end
479
+ } # sync
480
+ @currentlyDownloadingElevation.delete(filename)
481
+ end # if downloading
482
+ } # Thread
483
+ end
484
+ end
401
485
  end
402
486
 
403
487
  def addNavToScene(vor, origin_x, origin_y)
@@ -463,8 +547,8 @@ class MainDlg < Qt::Widget
463
547
  @scene_tiles = []
464
548
  @scene_navs = []
465
549
  @scene_rws = []
466
- @scene.clear
467
- # 8 : 256 = 2**8
550
+ resetScene()
551
+ # 8 => 256 = 2**8
468
552
  size = 2**(@zoom + 8)
469
553
  sceneRect = Qt::RectF.new(0,0,size,size)
470
554
  sceneRect.moveCenter(Qt::PointF.new(@node.xtile, @node.ytile))
@@ -487,7 +571,7 @@ class MainDlg < Qt::Widget
487
571
  @scene_tiles = []
488
572
  @scene_navs = []
489
573
  @scene_rws = []
490
- @scene.clear
574
+ resetScene()
491
575
  end
492
576
 
493
577
  if @w.cBrw.isChecked then
@@ -505,63 +589,60 @@ class MainDlg < Qt::Widget
505
589
  @scene_tiles = []
506
590
  @scene_navs = []
507
591
  @scene_rws = []
508
- @scene.clear
592
+ resetScene()
509
593
  end
510
594
 
511
595
  fn = node.getfilenames(@w.gVmap.size, @offset_x, @offset_y)
512
596
 
513
597
  fn.each{|f|
514
- if !@scene_tiles.include?(f)
598
+ if !@scene_tiles.include?(f) then
515
599
  if FileTest.exist?(f+".png") then
516
600
  addTileToScene(f, origin_x, origin_y)
517
601
  elsif downloadTiles and (@timeNoInternet.nil? or (Time.now - @timeNoInternet) > 60) then
518
- # Thread.abort_on_exception = true
519
- @httpThreads << Thread.new {
520
- @remainingTiles += 1
521
- @httpMutex.synchronize {
522
- h = Net::HTTP.new('tile.openstreetmap.org')
523
- h.open_timeout = 10
524
- @warningText = Qt::GraphicsSimpleTextItem.new("#{@remainingTiles} remaining tiles")
525
- @warningText.setBrush(Qt::Brush.new(Qt::Color.new("red")))
526
- @scene.addItem(@warningText)
527
- fontInfo = Qt::FontInfo.new(@warningText.font)
528
- @warningText.setPos(@w.gVmap.mapToScene((@w.gVmap.size.width - @warningText.boundingRect.width)/2,
529
- @w.gVmap.size.height - fontInfo.pixelSize - 10))
530
-
531
- f =~ /\/\d+\/\d+\/\d+$/
532
- f = $&
533
- begin
534
- resp, data = h.get(f + ".png", nil)
535
- if resp.kind_of?(Net::HTTPOK) then
536
- maindir = Dir.pwd
537
- Dir.chdir($MAPSHOME)
538
- f.split("/")[0..-2].each do |dir|
539
- if !dir.empty? then
540
- begin
541
- Dir.mkdir(dir)
542
- rescue Errno::EEXIST
543
- # just swallow error
602
+ @httpThreads << Thread.new(f) {|filename|
603
+ # check if we already download this tile
604
+ if !@currentlyDownloading.include?(filename) then
605
+ @currentlyDownloading << filename
606
+ @remainingTiles += 1
607
+ @httpMutex.synchronize {
608
+ h = Net::HTTP.new('tile.openstreetmap.org')
609
+ h.open_timeout = 10
610
+ filename =~ /\/\d+\/\d+\/\d+$/
611
+ fn = $&
612
+ begin
613
+ resp, data = h.get(fn + ".png", nil)
614
+ if resp.kind_of?(Net::HTTPOK) then
615
+ maindir = Dir.pwd
616
+ Dir.chdir($MAPSHOME)
617
+ fn.split("/")[0..-2].each do |dir|
618
+ if !dir.empty? then
619
+ begin
620
+ Dir.mkdir(dir)
621
+ rescue Errno::EEXIST
622
+ # just swallow error
623
+ end
624
+ Dir.chdir(dir)
544
625
  end
545
- Dir.chdir(dir)
546
626
  end
627
+ Dir.chdir(maindir)
628
+ File.open($MAPSHOME + fn + ".png", "w") do |file|
629
+ file.write(data)
630
+ end
631
+ # we call from within a thread, signal this to the subroutine
632
+ addTileToScene($MAPSHOME + fn, origin_x, origin_y, true)
633
+ else
634
+ puts "Could not download tile. Internet connection alive?"
635
+ @timeNoInternet=Time.now
547
636
  end
548
- Dir.chdir(maindir)
549
- File.open($MAPSHOME + f + ".png", "w") do |file|
550
- file.write(data)
551
- end
552
- addTileToScene($MAPSHOME + f, origin_x, origin_y)
553
- else
637
+ # NoMethodError because of bug, see http://redmine.ruby-lang.org/issues/show/2708
638
+ rescue NoMethodError, Errno::ECONNREFUSED, SocketError, Timeout::Error
554
639
  puts "Could not download tile. Internet connection alive?"
555
640
  @timeNoInternet=Time.now
556
641
  end
557
- # NoMethodError because of bug, see http://redmine.ruby-lang.org/issues/show/2708
558
- rescue NoMethodError, Errno::ECONNREFUSED, SocketError, Timeout::Error
559
- puts "Could not download tile. Internet connection alive?"
560
- @timeNoInternet=Time.now
561
- end
562
- @scene.removeItem(@warningText)
563
- }
564
- @remainingTiles -= 1
642
+ }
643
+ @remainingTiles -= 1
644
+ @currentlyDownloading.delete(filename)
645
+ end # if
565
646
  }
566
647
  else
567
648
  puts "Internet timeout still running"
@@ -717,9 +798,34 @@ class MainDlg < Qt::Widget
717
798
  sleep LOOPSLEEPINTERVAL
718
799
  return
719
800
  end
720
-
721
801
  @wakeupCounter = 0
722
802
 
803
+ # add tiles which are awaiting addition
804
+ @tilesToAddMutex.synchronize {
805
+ @tilesToAdd.each do |tile|
806
+ parent = (tile[3] == OPENSTREETMAP_TILE) ? @openstreetmapLayer : @elevationLayer
807
+ pmi = Qt::GraphicsPixmapItem.new(Qt::Pixmap.new(tile[0]), parent)
808
+ pmi.setOffset(tile[1], tile[2])
809
+ end
810
+ @tilesToAdd.clear
811
+ }
812
+
813
+ if @remainingTiles > 0 then
814
+ if @warningText.nil? then
815
+ @warningText = Qt::GraphicsSimpleTextItem.new()
816
+ @warningText.setBrush(Qt::Brush.new(Qt::Color.new("red")))
817
+ @warningText.setZValue(Z_VALUE_WARNING)
818
+ @scene.addItem(@warningText)
819
+ end
820
+ fontInfo = Qt::FontInfo.new(@warningText.font)
821
+ @warningText.setText("#{@remainingTiles} remaining tiles")
822
+ @warningText.setPos(@w.gVmap.mapToScene((@w.gVmap.size.width - @warningText.boundingRect.width)/2,
823
+ @w.gVmap.size.height - fontInfo.pixelSize - 10))
824
+ elsif !@warningText.nil? then
825
+ @scene.removeItem(@warningText)
826
+ @warningText = nil
827
+ end
828
+
723
829
  if @fs_socket.nil? then
724
830
  begin
725
831
  @fs_socket = TCPSocket.open('localhost', FS_PORT)
@@ -811,6 +917,7 @@ class MainDlg < Qt::Widget
811
917
  end # if @fs_ans.length>0
812
918
  @fs_ans=[]
813
919
  end # socket nil
920
+ # p "wakeupTimer out"
814
921
  end
815
922
 
816
923
 
@@ -866,6 +973,7 @@ class MainDlg < Qt::Widget
866
973
  @cfg.setValue("rwChecked", Qt::Variant.new(@w.cBrw.isChecked))
867
974
  @cfg.setValue("nbdChecked", Qt::Variant.new(@w.cBndb.isChecked))
868
975
  @cfg.setValue("vorChecked", Qt::Variant.new(@w.cBvor.isChecked))
976
+ @cfg.setValue("opacity", Qt::Variant.new(@opacity))
869
977
  @cfg.sync
870
978
  @parent.close
871
979
  end
@@ -881,10 +989,14 @@ class MainDlg < Qt::Widget
881
989
  def cBrw_clicked()
882
990
  movemap(@node, true)
883
991
  end
884
-
885
- def resize(*k)
992
+
993
+ def cBshadows_clicked()
994
+ movemap(@node, true)
995
+ end
996
+
997
+ def resizeEvent(e)
886
998
  super
887
- @hud.setPos(@w.gVmap.mapToScene(0,0)) if !@hud.nil?
999
+ movemap(@node, true)
888
1000
  end
889
1001
 
890
1002
  def keyPressEvent(keyevent)
@@ -899,9 +1011,15 @@ class MainDlg < Qt::Widget
899
1011
  super
900
1012
  end # case
901
1013
  end
1014
+
1015
+ def hSopacity_changed(opacity)
1016
+ @opacity = opacity / 100.0
1017
+ @openstreetmapLayer.setOpacity(@opacity)
1018
+ end
902
1019
  end
903
1020
 
904
1021
 
1022
+
905
1023
  class FlagGraphicsPixmapItem < Qt::GraphicsPixmapItem
906
1024
  def initialize(*k)
907
1025
  super
@@ -944,8 +1062,8 @@ class TrackGraphicsPathItem < Qt::GraphicsPathItem
944
1062
  setAcceptHoverEvents(true)
945
1063
  setHandlesChildEvents(true)
946
1064
 
947
- # store these elements in permanent arry
948
- # otherwise GC will remove them and then causes core-dump in QT
1065
+ # store these elements in permanent array
1066
+ # otherwise GC will remove them and then causes core-dumps in QT
949
1067
  @@nodeinfo_array << [@nodeinfow, @nodeinfo_widget]
950
1068
  end
951
1069
 
@@ -1082,7 +1200,7 @@ class TrackGraphicsPathItem < Qt::GraphicsPathItem
1082
1200
  end
1083
1201
 
1084
1202
 
1085
- class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1203
+ class TileGraphicsItemGroup < Qt::GraphicsItemGroup
1086
1204
  def mousePressEvent(mouseEvent)
1087
1205
  pos = mouseEvent.scenePos
1088
1206
  dlg=mouseEvent.widget.parent.parent
@@ -1091,7 +1209,7 @@ class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1091
1209
  dlg.offset_x = pos.x / 256.0
1092
1210
  dlg.offset_y = pos.y / 256.0
1093
1211
  dlg.movemap(dlg.node)
1094
- when Qt::RightButton
1212
+ # when Qt::RightButton
1095
1213
 
1096
1214
  end # case
1097
1215
  end
@@ -1222,6 +1340,5 @@ class Qt::GraphicsSvgItem
1222
1340
  }
1223
1341
  end
1224
1342
  end
1225
-
1226
1343
  end
1227
1344