fgmapping 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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