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 +2 -0
- data/fgmapping.gemspec +2 -2
- data/lib/hud-widget.rb +1 -1
- data/lib/init.rb +6 -1
- data/lib/main-dlg-impl.rb +93 -26
- data/lib/main-dlg.rb +2 -2
- data/lib/nodeinfo-widget.rb +62 -31
- data/lib/resources.rb +5 -5
- data/lib/tile.rb +34 -6
- data/lib/waypoint.rb +7 -1
- metadata +4 -4
data/CHANGELOG
CHANGED
data/fgmapping.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{fgmapping}
|
5
|
-
s.version = "1.
|
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-
|
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}
|
data/lib/hud-widget.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
=begin
|
2
2
|
** Form generated from reading ui file 'hud-widget.ui'
|
3
3
|
**
|
4
|
-
** Created:
|
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!
|
data/lib/init.rb
CHANGED
@@ -12,7 +12,12 @@
|
|
12
12
|
# Author Michael Meltner (mmeltner@gmail.com)
|
13
13
|
##################################################
|
14
14
|
|
15
|
-
|
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
|
|
data/lib/main-dlg-impl.rb
CHANGED
@@ -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
|
-
|
263
|
-
|
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
|
-
@
|
680
|
-
@
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
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
|
-
|
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
|
-
#
|
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
|
-
|
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[
|
1128
|
+
when entries[5]
|
1090
1129
|
dlg.saveWaypoints([dlg.waypoints])
|
1091
1130
|
|
1092
|
-
when entries[
|
1131
|
+
when entries[6]
|
1093
1132
|
dlg.savetrack(dlg.mytracks)
|
1094
1133
|
|
1095
|
-
when entries[
|
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[
|
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[
|
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::
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
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
|
|
data/lib/main-dlg.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
=begin
|
2
2
|
** Form generated from reading ui file 'main-dlg.ui'
|
3
3
|
**
|
4
|
-
** Created:
|
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(
|
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()
|
data/lib/nodeinfo-widget.rb
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
=begin
|
2
2
|
** Form generated from reading ui file 'nodeinfo-widget.ui'
|
3
3
|
**
|
4
|
-
** Created:
|
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(
|
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,
|
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
|
-
|
43
|
-
|
44
|
-
@palette.setBrush(Qt::Palette::
|
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
|
-
@
|
49
|
-
@
|
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
|
-
@
|
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
|
-
@
|
61
|
-
@
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
117
|
-
|
118
|
-
|
119
|
-
@gridLayout_2.addLayout(@gridLayout, 0, 0, 1, 1)
|
148
|
+
@gridLayout.addWidget(@lBlon, 2, 3, 1, 1)
|
120
149
|
|
121
150
|
|
122
|
-
@
|
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)
|
data/lib/resources.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#****************************************************************************
|
2
2
|
#** Ruby Resource object code
|
3
3
|
#**
|
4
|
-
#** Created:
|
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/
|
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/
|
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/
|
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/
|
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,
|
data/lib/tile.rb
CHANGED
@@ -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 <
|
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
|
data/lib/waypoint.rb
CHANGED
@@ -12,7 +12,13 @@
|
|
12
12
|
# Author Michael Meltner (mmeltner@gmail.com)
|
13
13
|
##################################################
|
14
14
|
|
15
|
-
|
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
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
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-
|
17
|
+
date: 2010-06-17 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|