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 +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
|
|