fgmapping 1.1.3 → 1.2.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.2.0 Added setting of Radio Manager Waypoints in Flightgear
2
+
1
3
  v1.1.3 better z-order for display-elements, -added error handling for http connection losses
2
4
 
3
5
  v1.1.2 Bug fix: path handling fixed while pressing button repeatedly
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{fgmapping}
5
- s.version = "1.1.3"
5
+ s.version = "1.2.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-14}
9
+ s.date = %q{2010-06-17}
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}
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  ** Form generated from reading ui file 'hud-widget.ui'
3
3
  **
4
- ** Created: Fr. Jun 11 14:41:10 2010
4
+ ** Created: Do. Jun 17 17:42:25 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!
@@ -12,7 +12,12 @@
12
12
  # Author Michael Meltner (mmeltner@gmail.com)
13
13
  ##################################################
14
14
 
15
- Dir.chdir(File.dirname(__FILE__))
15
+ # check if we were launched via symlink, then resolve it
16
+ myself = __FILE__
17
+ if File.lstat(myself).symlink? then
18
+ myself = File.readlink(__FILE__)
19
+ end
20
+ Dir.chdir(File.dirname(myself))
16
21
 
17
22
  load "waypoint.rb"
18
23
 
@@ -137,6 +137,7 @@ class MainDlg < Qt::Widget
137
137
  @navs = Navaid.new(arg)
138
138
 
139
139
  @httpMutex = Mutex.new
140
+ @queryMutex = Mutex.new
140
141
 
141
142
  @scene=Qt::GraphicsScene.new()
142
143
  @w.gVmap.setScene(@scene)
@@ -211,6 +212,7 @@ class MainDlg < Qt::Widget
211
212
  # just swallow error
212
213
  end
213
214
 
215
+ ap "generating xml-doc"
214
216
  doc = XML::Document.new()
215
217
  doc.root = XML::Node.new('gpx')
216
218
  doc.root["xmlns"] = "http://www.topografix.com/GPX/1/1"
@@ -230,12 +232,14 @@ class MainDlg < Qt::Widget
230
232
  trackpoint["lon"] = n.lon.to_s.gsub(",",".")
231
233
  trackpoint << XML::Node.new("ele", n.elevation.to_s.gsub(",","."))
232
234
  trackpoint << XML::Node.new("time", n.toGPStime)
235
+ trackpoint << XML::Node.new("time_us", n.timestamp.usec.to_s)
233
236
  segnode << trackpoint
234
237
  }
235
238
  }
236
239
  File.open($MAPSHOME + "/tracks/" + items.first.nodes.first.toGPStime + ".gpx", "w+"){|f|
237
240
  f.puts doc.inspect
238
241
  }
242
+ ap "xml-file written"
239
243
  end
240
244
  end
241
245
 
@@ -257,10 +261,13 @@ class MainDlg < Qt::Widget
257
261
  track=@mytracks[@mytrack_current]
258
262
  track.nodes.clear
259
263
  xpat_time = XML::XPath::Expression.new("ns:time")
264
+ xpat_time_us = XML::XPath::Expression.new("ns:time_us")
260
265
  xpat_elevation = XML::XPath::Expression.new("ns:ele")
261
266
  seg.find("ns:trkpt", "ns:http://www.topografix.com/GPX/1/1").each{|tpt|
262
- track << Node.new(nil, tpt.find_first(xpat_time).content, tpt["lon"].to_f, \
263
- tpt["lat"].to_f, tpt.find_first(xpat_elevation).content.to_f)
267
+ usec = tpt.find_first(xpat_time_us)
268
+ usec = (usec.nil? ? "0" : usec.content)
269
+ track << Node.new(nil, tpt.find_first(xpat_time).content + usec, \
270
+ tpt["lon"].to_f, tpt["lat"].to_f, tpt.find_first(xpat_elevation).content.to_f)
264
271
  success = true
265
272
  }
266
273
  }
@@ -395,6 +402,7 @@ class MainDlg < Qt::Widget
395
402
  @scene.addItem(vorGraphic)
396
403
  vorNode = Node.new(0, nil, vor.lon.to_f, vor.lat.to_f)
397
404
  vorGraphic.setPos((vorNode.toxtile - origin_x) * 256, (vorNode.toytile - origin_y) * 256)
405
+ vorGraphic.baseElement = vor
398
406
  vor.sceneItem = vorGraphic
399
407
 
400
408
  # create text on Navaid
@@ -676,17 +684,21 @@ class MainDlg < Qt::Widget
676
684
  end
677
685
  else
678
686
  begin
679
- @fs_queries.each do |q|
680
- @fs_socket.print("get " + q + "\r\n")
681
- s=""
682
- while select([@fs_socket], nil, nil, 0.1 ) do
683
- s += @fs_socket.read(1)
684
- end
685
- if s.include?(q) then
686
- @fs_ans << s.split("\n")
687
- @fs_ans.flatten!
687
+ @queryMutex.synchronize {
688
+ @fs_queries.each do |q|
689
+ @fs_socket.print("get " + q + "\r\n")
690
+ s=""
691
+ while select([@fs_socket], nil, nil, 0.3) do
692
+ s += @fs_socket.read(1)
693
+ # check for end of line characterized by this string: "\r\n/>"
694
+ break if s[-4..-1] == "\r\n/>" and s.include?(q)
695
+ end
696
+ if s.include?(q) then
697
+ @fs_ans << s.split("\n")
698
+ @fs_ans.flatten!
699
+ end
688
700
  end
689
- end
701
+ }
690
702
  rescue
691
703
  puts "Warning: Can not communicate with Flightsimulator. Is Telnet interface configured?"
692
704
  @scene.removeItem(@rose)
@@ -694,7 +706,7 @@ class MainDlg < Qt::Widget
694
706
  @fs_socket = nil
695
707
  @hud = nil
696
708
  else # rescue
697
- # p @fs_ans
709
+ #ap @fs_ans
698
710
  if @fs_ans.length>0 then # check if any answer has been received yet.
699
711
  if !@hud.nil? then
700
712
  @posnode.lon = get_data("/position/longitude-deg")
@@ -771,9 +783,22 @@ class MainDlg < Qt::Widget
771
783
  end # rescue
772
784
  @fs_ans=[]
773
785
  end # socket nil
774
- # p "wakeup out"
775
786
  end
776
787
 
788
+
789
+ def writeFlightsim(element)
790
+ @queryMutex.synchronize {
791
+ @fs_socket.print(element + "\r\n")
792
+ s = ""
793
+ while select([@fs_socket], nil, nil, 0.3) do
794
+ s += @fs_socket.read(1)
795
+ # check for end of line characterized by this string: "\r\n/>"
796
+ break if s[-4..-1] == "\r\n/>"
797
+ end
798
+ }
799
+ end
800
+
801
+
777
802
  def autosaveTimer()
778
803
  savetrack(@mytracks, false)
779
804
  end
@@ -998,6 +1023,8 @@ class TrackGraphicsPathItem < Qt::GraphicsPathItem
998
1023
  @nodeinfo_widget.w.lBlat.text="%.3f°" % n.lat
999
1024
  @nodeinfo_widget.w.lBalt.text="%.1fm" % n.elevation
1000
1025
  @nodeinfo_widget.w.lBspeed.text="%.1fkm/h" % n.speed
1026
+ @nodeinfo_widget.w.lBdist.text="%.2fkm" % (@parent.distance(n) / 1000)
1027
+ @nodeinfo_widget.w.lBtime.text=@parent.duration_str
1001
1028
  pos = mapToScene(hoverEvent.pos)
1002
1029
  if !@nodeinfo.isVisible or @nodeinfo_widget.hover_widget_pos.nil? or (!@nodeinfo_widget.hover_widget_pos.nil? \
1003
1030
  and Qt::LineF.new(@nodeinfo_widget.hover_widget_pos, pos).length > 30) then
@@ -1043,7 +1070,7 @@ class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1043
1070
 
1044
1071
  def contextMenuEvent(contextEvent)
1045
1072
  dlg=contextEvent.widget.parent.parent
1046
- entries=["Set Waypoint", "Delete Waypoint", "Set Origin", "-", "Save Waypoints", "Save Track", "Load Waypoints",
1073
+ entries=["Set Waypoint", "Delete Waypoint", "Waypoints to Route-Mgr", "Set Origin", "-", "Save Waypoints", "Save Track", "Load Waypoints",
1047
1074
  "Load Track", ["Metric Units", dlg.metricUnit]]
1048
1075
  menu=Qt::Menu.new
1049
1076
  entries.each{|e|
@@ -1056,7 +1083,11 @@ class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1056
1083
  if e=="-" then
1057
1084
  menu.addSeparator
1058
1085
  else
1059
- menu.addAction(e)
1086
+ action = Qt::Action.new(e, nil)
1087
+ if e =~ /(Delete Waypoint|Waypoints to)/ then
1088
+ action.setEnabled(false) if dlg.waypoints.nodes.empty?
1089
+ end
1090
+ menu.addAction(action)
1060
1091
  end
1061
1092
  end
1062
1093
  }
@@ -1081,18 +1112,26 @@ class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1081
1112
  dlg.movemap(dlg.node, true)
1082
1113
 
1083
1114
  when entries[2]
1115
+ Thread.new {
1116
+ dlg.waypoints.nodes.each do |n|
1117
+ dlg.writeFlightsim("set /autopilot/route-manager/input @INSERT-1:#{n.lon.to_s.gsub(",",".")},#{n.lat.to_s.gsub(",",".")}")
1118
+ end
1119
+ }
1120
+
1121
+
1122
+ when entries[3]
1084
1123
  dlg.node = Node.new(1, Time.now, lon, lat)
1085
1124
  dlg.offset_x = 0
1086
1125
  dlg.offset_y = 0
1087
1126
  dlg.movemap(dlg.node, true)
1088
1127
 
1089
- when entries[4]
1128
+ when entries[5]
1090
1129
  dlg.saveWaypoints([dlg.waypoints])
1091
1130
 
1092
- when entries[5]
1131
+ when entries[6]
1093
1132
  dlg.savetrack(dlg.mytracks)
1094
1133
 
1095
- when entries[6]
1134
+ when entries[7]
1096
1135
  savecurrent = dlg.waypoints.currentwp
1097
1136
  if dlg.loadwaypoint("Load Waypoints") then
1098
1137
  dlg.waypoints.currentwp = nil
@@ -1100,7 +1139,7 @@ class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1100
1139
  dlg.waypoints.currentwp = savecurrent
1101
1140
  end
1102
1141
 
1103
- when entries[7]
1142
+ when entries[8]
1104
1143
  dlg.mytrack_current += (dlg.w.pBrecordTrack.isChecked ? 0 : 1)
1105
1144
  savewp=dlg.mytracks[dlg.mytrack_current]
1106
1145
  if dlg.mytracks[dlg.mytrack_current].nil? then
@@ -1114,7 +1153,7 @@ class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1114
1153
  dlg.mytracks[dlg.mytrack_current]=savewp
1115
1154
  end
1116
1155
 
1117
- when entries[8][0]
1156
+ when entries[9][0]
1118
1157
  dlg.metricUnit = !dlg.metricUnit
1119
1158
 
1120
1159
  end #case
@@ -1122,11 +1161,39 @@ class TileGraphicsPixmapItem < Qt::GraphicsPixmapItem
1122
1161
  end
1123
1162
 
1124
1163
 
1125
- class Qt::GraphicsScene
1126
- def mouseMoveEvent(mouseEvent)
1127
- super
1128
- # a=mouseEvent.scenePos()
1129
- # p a.x
1164
+ class Qt::GraphicsSvgItem
1165
+ attr_accessor :baseElement
1166
+
1167
+ def contextMenuEvent(contextEvent)
1168
+ dlg=contextEvent.widget.parent.parent
1169
+ entries=["Add Waypoint as last", "Add Waypoint at"]
1170
+ menu=Qt::Menu.new
1171
+ entries.each{|e|
1172
+ menu.addAction(e)
1173
+ }
1174
+ sel=menu.exec(contextEvent.screenPos)
1175
+ sel=sel.text if !sel.nil?
1176
+
1177
+ ok = Qt::Boolean.new(true)
1178
+
1179
+ case sel
1180
+ when entries[1]
1181
+ # don't put this into a thread, it will create nasty core-dumps
1182
+ resp = Qt::InputDialog.getInt(dlg, "Enter Waypoint Position.", "After which waypoint shall I insert this one?\nEnter 0 to insert at beginning.", 0, 0, 9999, 1, ok)
1183
+ end #case
1184
+
1185
+ if ok.value then
1186
+ Thread.new {
1187
+ case sel
1188
+ when entries[0]
1189
+ dlg.writeFlightsim("set /autopilot/route-manager/input @INSERT-1:#{baseElement.shortName}")
1190
+
1191
+ when entries[1]
1192
+ dlg.writeFlightsim("set /autopilot/route-manager/input @INSERT+#{resp}:#{baseElement.shortName}")
1193
+ end #case
1194
+ }
1195
+ end
1130
1196
  end
1197
+
1131
1198
  end
1132
1199
 
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  ** Form generated from reading ui file 'main-dlg.ui'
3
3
  **
4
- ** Created: Fr. Jun 11 14:41:10 2010
4
+ ** Created: Do. Jun 17 17:42:25 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!
@@ -35,7 +35,7 @@ class Ui_MainDlg
35
35
  if mainDlg.objectName.nil?
36
36
  mainDlg.objectName = "mainDlg"
37
37
  end
38
- mainDlg.resize(588, 389)
38
+ mainDlg.resize(681, 473)
39
39
  @horizontalLayout_3 = Qt::HBoxLayout.new(mainDlg)
40
40
  @horizontalLayout_3.objectName = "horizontalLayout_3"
41
41
  @verticalLayout = Qt::VBoxLayout.new()
@@ -1,17 +1,20 @@
1
1
  =begin
2
2
  ** Form generated from reading ui file 'nodeinfo-widget.ui'
3
3
  **
4
- ** Created: Fr. Jun 11 14:41:10 2010
4
+ ** Created: Mo. Jun 14 18:03:14 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!
8
8
  =end
9
9
 
10
10
  class Ui_NodeinfoWidget
11
- attr_reader :gridLayout_3
12
- attr_reader :frame
13
11
  attr_reader :gridLayout_2
12
+ attr_reader :frame
14
13
  attr_reader :gridLayout
14
+ attr_reader :label_7
15
+ attr_reader :lBdist
16
+ attr_reader :label_8
17
+ attr_reader :lBtime
15
18
  attr_reader :label_4
16
19
  attr_reader :lBalt
17
20
  attr_reader :label_3
@@ -25,7 +28,7 @@ class Ui_NodeinfoWidget
25
28
  if nodeinfoWidget.objectName.nil?
26
29
  nodeinfoWidget.objectName = "nodeinfoWidget"
27
30
  end
28
- nodeinfoWidget.resize(146, 58)
31
+ nodeinfoWidget.resize(186, 78)
29
32
  @sizePolicy = Qt::SizePolicy.new(Qt::SizePolicy::MinimumExpanding, Qt::SizePolicy::MinimumExpanding)
30
33
  @sizePolicy.setHorizontalStretch(0)
31
34
  @sizePolicy.setVerticalStretch(0)
@@ -35,35 +38,64 @@ class Ui_NodeinfoWidget
35
38
  brush = Qt::Brush.new(Qt::Color.new(255, 255, 255, 0))
36
39
  brush.style = Qt::SolidPattern
37
40
  @palette.setBrush(Qt::Palette::Active, Qt::Palette::Base, brush)
38
- brush1 = Qt::Brush.new(Qt::Color.new(224, 223, 222, 200))
41
+ brush1 = Qt::Brush.new(Qt::Color.new(224, 223, 222, 100))
39
42
  brush1.style = Qt::SolidPattern
40
43
  @palette.setBrush(Qt::Palette::Active, Qt::Palette::Window, brush1)
41
44
  @palette.setBrush(Qt::Palette::Inactive, Qt::Palette::Base, brush)
42
- brush2 = Qt::Brush.new(Qt::Color.new(224, 223, 222, 100))
43
- brush2.style = Qt::SolidPattern
44
- @palette.setBrush(Qt::Palette::Inactive, Qt::Palette::Window, brush2)
45
- @palette.setBrush(Qt::Palette::Disabled, Qt::Palette::Base, brush2)
46
- @palette.setBrush(Qt::Palette::Disabled, Qt::Palette::Window, brush2)
45
+ @palette.setBrush(Qt::Palette::Inactive, Qt::Palette::Window, brush1)
46
+ @palette.setBrush(Qt::Palette::Disabled, Qt::Palette::Base, brush1)
47
+ @palette.setBrush(Qt::Palette::Disabled, Qt::Palette::Window, brush1)
47
48
  nodeinfoWidget.palette = @palette
48
- @gridLayout_3 = Qt::GridLayout.new(nodeinfoWidget)
49
- @gridLayout_3.margin = 1
50
- @gridLayout_3.objectName = "gridLayout_3"
49
+ @gridLayout_2 = Qt::GridLayout.new(nodeinfoWidget)
50
+ @gridLayout_2.objectName = "gridLayout_2"
51
51
  @frame = Qt::Frame.new(nodeinfoWidget)
52
52
  @frame.objectName = "frame"
53
53
  @frame.frameShape = Qt::Frame::StyledPanel
54
54
  @frame.frameShadow = Qt::Frame::Raised
55
- @gridLayout_2 = Qt::GridLayout.new(@frame)
56
- @gridLayout_2.margin = 1
57
- @gridLayout_2.objectName = "gridLayout_2"
58
- @gridLayout = Qt::GridLayout.new()
55
+ @gridLayout = Qt::GridLayout.new(@frame)
59
56
  @gridLayout.objectName = "gridLayout"
60
- @label_4 = Qt::Label.new(@frame)
61
- @label_4.objectName = "label_4"
57
+ @label_7 = Qt::Label.new(@frame)
58
+ @label_7.objectName = "label_7"
62
59
  @font = Qt::Font.new
63
60
  @font.pointSize = 7
61
+ @label_7.font = @font
62
+
63
+ @gridLayout.addWidget(@label_7, 0, 0, 1, 1)
64
+
65
+ @lBdist = Qt::Label.new(@frame)
66
+ @lBdist.objectName = "lBdist"
67
+ @sizePolicy1 = Qt::SizePolicy.new(Qt::SizePolicy::Preferred, Qt::SizePolicy::Preferred)
68
+ @sizePolicy1.setHorizontalStretch(1)
69
+ @sizePolicy1.setVerticalStretch(0)
70
+ @sizePolicy1.heightForWidth = @lBdist.sizePolicy.hasHeightForWidth
71
+ @lBdist.sizePolicy = @sizePolicy1
72
+ @lBdist.font = @font
73
+ @lBdist.frameShape = Qt::Frame::Panel
74
+ @lBdist.frameShadow = Qt::Frame::Sunken
75
+
76
+ @gridLayout.addWidget(@lBdist, 0, 1, 1, 1)
77
+
78
+ @label_8 = Qt::Label.new(@frame)
79
+ @label_8.objectName = "label_8"
80
+ @label_8.font = @font
81
+
82
+ @gridLayout.addWidget(@label_8, 0, 2, 1, 1)
83
+
84
+ @lBtime = Qt::Label.new(@frame)
85
+ @lBtime.objectName = "lBtime"
86
+ @sizePolicy1.heightForWidth = @lBtime.sizePolicy.hasHeightForWidth
87
+ @lBtime.sizePolicy = @sizePolicy1
88
+ @lBtime.font = @font
89
+ @lBtime.frameShape = Qt::Frame::Panel
90
+ @lBtime.frameShadow = Qt::Frame::Sunken
91
+
92
+ @gridLayout.addWidget(@lBtime, 0, 3, 1, 1)
93
+
94
+ @label_4 = Qt::Label.new(@frame)
95
+ @label_4.objectName = "label_4"
64
96
  @label_4.font = @font
65
97
 
66
- @gridLayout.addWidget(@label_4, 0, 0, 1, 1)
98
+ @gridLayout.addWidget(@label_4, 1, 0, 1, 1)
67
99
 
68
100
  @lBalt = Qt::Label.new(@frame)
69
101
  @lBalt.objectName = "lBalt"
@@ -71,13 +103,13 @@ class Ui_NodeinfoWidget
71
103
  @lBalt.frameShape = Qt::Frame::Panel
72
104
  @lBalt.frameShadow = Qt::Frame::Sunken
73
105
 
74
- @gridLayout.addWidget(@lBalt, 0, 1, 1, 1)
106
+ @gridLayout.addWidget(@lBalt, 1, 1, 1, 1)
75
107
 
76
108
  @label_3 = Qt::Label.new(@frame)
77
109
  @label_3.objectName = "label_3"
78
110
  @label_3.font = @font
79
111
 
80
- @gridLayout.addWidget(@label_3, 0, 2, 1, 1)
112
+ @gridLayout.addWidget(@label_3, 1, 2, 1, 1)
81
113
 
82
114
  @lBspeed = Qt::Label.new(@frame)
83
115
  @lBspeed.objectName = "lBspeed"
@@ -85,13 +117,13 @@ class Ui_NodeinfoWidget
85
117
  @lBspeed.frameShape = Qt::Frame::Panel
86
118
  @lBspeed.frameShadow = Qt::Frame::Sunken
87
119
 
88
- @gridLayout.addWidget(@lBspeed, 0, 3, 1, 1)
120
+ @gridLayout.addWidget(@lBspeed, 1, 3, 1, 1)
89
121
 
90
122
  @label_6 = Qt::Label.new(@frame)
91
123
  @label_6.objectName = "label_6"
92
124
  @label_6.font = @font
93
125
 
94
- @gridLayout.addWidget(@label_6, 1, 0, 1, 1)
126
+ @gridLayout.addWidget(@label_6, 2, 0, 1, 1)
95
127
 
96
128
  @lBlat = Qt::Label.new(@frame)
97
129
  @lBlat.objectName = "lBlat"
@@ -99,13 +131,13 @@ class Ui_NodeinfoWidget
99
131
  @lBlat.frameShape = Qt::Frame::Panel
100
132
  @lBlat.frameShadow = Qt::Frame::Sunken
101
133
 
102
- @gridLayout.addWidget(@lBlat, 1, 1, 1, 1)
134
+ @gridLayout.addWidget(@lBlat, 2, 1, 1, 1)
103
135
 
104
136
  @label_5 = Qt::Label.new(@frame)
105
137
  @label_5.objectName = "label_5"
106
138
  @label_5.font = @font
107
139
 
108
- @gridLayout.addWidget(@label_5, 1, 2, 1, 1)
140
+ @gridLayout.addWidget(@label_5, 2, 2, 1, 1)
109
141
 
110
142
  @lBlon = Qt::Label.new(@frame)
111
143
  @lBlon.objectName = "lBlon"
@@ -113,13 +145,10 @@ class Ui_NodeinfoWidget
113
145
  @lBlon.frameShape = Qt::Frame::Panel
114
146
  @lBlon.frameShadow = Qt::Frame::Sunken
115
147
 
116
- @gridLayout.addWidget(@lBlon, 1, 3, 1, 1)
117
-
118
-
119
- @gridLayout_2.addLayout(@gridLayout, 0, 0, 1, 1)
148
+ @gridLayout.addWidget(@lBlon, 2, 3, 1, 1)
120
149
 
121
150
 
122
- @gridLayout_3.addWidget(@frame, 0, 0, 1, 1)
151
+ @gridLayout_2.addWidget(@frame, 0, 0, 1, 1)
123
152
 
124
153
 
125
154
  retranslateUi(nodeinfoWidget)
@@ -133,6 +162,8 @@ class Ui_NodeinfoWidget
133
162
 
134
163
  def retranslateUi(nodeinfoWidget)
135
164
  nodeinfoWidget.windowTitle = Qt::Application.translate("NodeinfoWidget", "Form", nil, Qt::Application::UnicodeUTF8)
165
+ @label_7.text = Qt::Application.translate("NodeinfoWidget", "Dist:", nil, Qt::Application::UnicodeUTF8)
166
+ @label_8.text = Qt::Application.translate("NodeinfoWidget", "Time:", nil, Qt::Application::UnicodeUTF8)
136
167
  @label_4.text = Qt::Application.translate("NodeinfoWidget", "Alt:", nil, Qt::Application::UnicodeUTF8)
137
168
  @label_3.text = Qt::Application.translate("NodeinfoWidget", "Speed", nil, Qt::Application::UnicodeUTF8)
138
169
  @label_6.text = Qt::Application.translate("NodeinfoWidget", "Lat:", nil, Qt::Application::UnicodeUTF8)
@@ -1,7 +1,7 @@
1
1
  #****************************************************************************
2
2
  #** Ruby Resource object code
3
3
  #**
4
- #** Created: Fr. Jun 11 14:41:10 2010
4
+ #** Created: Do. Jun 17 17:42:25 2010
5
5
  #** by: The Ruby Resource Compiler for Qt version 4.6.2
6
6
  #**
7
7
  #** WARNING! All changes made in this file will be lost!
@@ -21,7 +21,7 @@ class QCleanupResources__dest_class__
21
21
  end
22
22
 
23
23
  @@qt_resource_data = [
24
- # /home/chief/dev/fgmap/flag-blue.png
24
+ # /home/chief/develop/ruby/fgmap/flag-blue.png
25
25
  0x0,0x0,0x9,0xfd,
26
26
  0x89,
27
27
  0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
@@ -184,7 +184,7 @@ class QCleanupResources__dest_class__
184
184
  0x72,0x65,0x0,0x0,0x78,0xda,0x2b,0x2f,0x2f,0xd7,0xcb,0xcc,0xcb,0x2e,0x4e,0x4e,
185
185
  0x2c,0x48,0xd5,0xcb,0x2f,0x4a,0x7,0x0,0x36,0xd8,0x6,0x58,0x10,0x53,0xca,0x5c,
186
186
  0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
187
- # /home/chief/dev/fgmap/vor.svg
187
+ # /home/chief/develop/ruby/fgmap/vor.svg
188
188
  0x0,0x1,0x23,0x81,
189
189
  0x3c,
190
190
  0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,
@@ -4852,7 +4852,7 @@ class QCleanupResources__dest_class__
4852
4852
  0x20,0x20,0x20,0x20,0x3c,0x2f,0x67,0x3e,0xa,0x20,0x20,0x20,0x20,0x3c,0x2f,0x67,
4853
4853
  0x3e,0xa,0x20,0x20,0x3c,0x2f,0x67,0x3e,0xa,0x3c,0x2f,0x73,0x76,0x67,0x3e,0xa,
4854
4854
 
4855
- # /home/chief/dev/fgmap/wpttemp-red.png
4855
+ # /home/chief/develop/ruby/fgmap/wpttemp-red.png
4856
4856
  0x0,0x0,0x4,0xe7,
4857
4857
  0x89,
4858
4858
  0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
@@ -4934,7 +4934,7 @@ class QCleanupResources__dest_class__
4934
4934
  0x65,0x59,0x10,0x42,0xe0,0x70,0x38,0x50,0x57,0x57,0x17,0x16,0xd2,0xdd,0xdd,0x8d,
4935
4935
  0xff,0x0,0x69,0xa0,0xd9,0x7,0xbe,0x3e,0xff,0xc9,0x0,0x0,0x0,0x0,0x49,0x45,
4936
4936
  0x4e,0x44,0xae,0x42,0x60,0x82,
4937
- # /home/chief/dev/fgmap/rose.svg
4937
+ # /home/chief/develop/ruby/fgmap/rose.svg
4938
4938
  0x0,0x0,0xd,0x19,
4939
4939
  0x3c,
4940
4940
  0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,
@@ -17,8 +17,8 @@ class Node
17
17
  @id = id
18
18
  if time.kind_of? String then
19
19
  #2009-06-18T20:32:16Z
20
- time =~ /(\d*)-(\d*)-(\d*)T(\d*):(\d*):(\d*)Z/
21
- @timestamp = Time.local($1,$2,$3,$4,$5,$6)
20
+ time =~ /(\d*)-(\d*)-(\d*)T(\d*):(\d*):(\d*)Z(\d*)/
21
+ @timestamp = Time.local($1,$2,$3,$4,$5,$6,$7)
22
22
  else
23
23
  @timestamp = time
24
24
  end
@@ -122,7 +122,7 @@ class Node
122
122
 
123
123
  def distanceto_str(lon, lat)
124
124
  d = distanceto(lon, lat)
125
- if d < 2.0 then
125
+ if d < 2000 then
126
126
  return ("%.1f" % d) + "m"
127
127
  else
128
128
  return ("%.1f" % (d/1000.0)) + "km"
@@ -149,12 +149,14 @@ class Way
149
149
  end
150
150
  @nodes=[]
151
151
  @currentwp=nil
152
+ @distance_result=Hash.new(nil)
152
153
  end
153
154
 
154
155
  def <<(node)
155
156
  i=@nodes.index(nil)
156
157
  if i.nil? then
157
158
  @nodes << node
159
+ # fetch last 10 elements
158
160
  check_nodes = @nodes[-10, 10]
159
161
  if check_nodes.nil? then
160
162
  check_nodes = @nodes
@@ -163,11 +165,11 @@ class Way
163
165
  (node.timestamp - n.timestamp) <= SPEED_AVG_TIME_SEC
164
166
  }
165
167
  speeds=[]
166
- t_diff = 0
168
+ t_diff = 0.0
167
169
  avg_nodes.each_with_index{|n, i|
168
170
  if i>0 then
169
171
  t_diff = n.timestamp - avg_nodes[i-1].timestamp
170
- if t_diff > 0 then
172
+ if t_diff > 0.0 then
171
173
  speeds << n.distanceto(avg_nodes[i-1].lon, avg_nodes[i-1].lat) / t_diff
172
174
  end
173
175
  end
@@ -175,7 +177,7 @@ class Way
175
177
  if speeds.length > 0 then
176
178
  avg_speed = speeds.inject(0){ |result, element| result + element } / speeds.length * 3.6
177
179
  else
178
- avg_speed = 0
180
+ avg_speed = 0.0
179
181
  end
180
182
  node.speed = avg_speed
181
183
  @nodes.length
@@ -213,4 +215,30 @@ class Way
213
215
  return @timestamp.strftime("%Y-%m-%dT%H:%M:%SZ")
214
216
  end
215
217
 
218
+ def duration_str
219
+ if !@sec.nil? then
220
+ return @sec
221
+ end
222
+ sec = (nodes.last.timestamp - nodes.first.timestamp).to_i
223
+ min = sec / 60
224
+ @sec = "#{min/60}:" + ("%02d" % (min % 60)) + (":%02d" % (sec % 60))
225
+ end
226
+
227
+ def distance(n)
228
+ if @distance_result[n].nil? then
229
+ distancenode=nil
230
+ total_distance=0.0
231
+ @nodes.each{|n|
232
+ if distancenode.nil? then distancenode = n; end
233
+ d = n.distanceto(distancenode.lon, distancenode.lat)
234
+ if d >= 1.0 then # ignore if smaller than 1 meter
235
+ total_distance += d
236
+ distancenode = n
237
+ end
238
+ @distance_result[n] = total_distance
239
+ }
240
+ end
241
+ return @distance_result[n]
242
+ end
243
+
216
244
  end
@@ -12,7 +12,13 @@
12
12
  # Author Michael Meltner (mmeltner@gmail.com)
13
13
  ##################################################
14
14
 
15
- Dir.chdir(File.dirname(__FILE__))
15
+ # check if we were launched via symlink, then resolve it
16
+ myself = __FILE__
17
+ if File.lstat(myself).symlink? then
18
+ myself = File.readlink(__FILE__)
19
+ end
20
+ Dir.chdir(File.dirname(myself))
21
+
16
22
  require "rubygems"
17
23
  require "Qt4"
18
24
  require "main-dlg-impl.rb"
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 1
8
- - 3
9
- version: 1.1.3
7
+ - 2
8
+ - 0
9
+ version: 1.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Michael Meltner
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-14 00:00:00 +02:00
17
+ date: 2010-06-17 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies: []
20
20