class TrackGraphicsPathItem
Attributes
nodeinfo[R]
nodeinfo_widget[R]
Public Class Methods
new(parent)
click to toggle source
Calls superclass method
# File lib/fgmapping/main-dlg-impl.rb, line 1080 def initialize(parent) super() @parent=parent @addToScene = true # needs to be embedded in other graphics element to circumvent a bug if the position of # the ProxyWidget is above, below 2**15 - 1, bug in QT @nodeinfo = Qt::GraphicsRectItem.new(0,0,100,100) @nodeinfo.setPen(Qt::Pen.new(Qt::NoPen)) @nodeinfow = Qt::GraphicsProxyWidget.new(@nodeinfo) @nodeinfo_widget = NodeinfoWidget.new(@nodeinfo) @nodeinfo_widget.setAttribute(Qt::WA_Hover) @nodeinfow.setWidget(@nodeinfo_widget) @nodeinfo.setZValue(Z_VALUE_HUD) @nodeinfo.setAcceptHoverEvents(true) @nodeinfo.setVisible(false) setAcceptHoverEvents(true) setHandlesChildEvents(true) # store these elements in permanent array # otherwise GC will remove them and then causes core-dumps in QT @@nodeinfo_array << [@nodeinfow, @nodeinfo_widget] end
Public Instance Methods
colorize(data, dlg)
click to toggle source
# File lib/fgmapping/main-dlg-impl.rb, line 1105 def colorize(data, dlg) scene=dlg.scene prev_x = path.elementAt(0).x prev_y = path.elementAt(0).y group = Qt::GraphicsItemGroup.new x = y = 0 pen=Qt::Pen.new pen.setWidth(5) line=nil d=data.dup d.delete_if{|e| e<=0.0 } if d.length==0 then Qt::MessageBox::warning(nil, "Warning", "No elevation/speed data found in track.") return end max=d.max min=d.min delta=max-min color=nil 1.upto(path.elementCount-2){|i| color=Qt::Color.new if data[i]>0.0 then color.setHsv((data[i]-min)/delta * COLORRANGE_DEG + COLOROFFSET_DEG,255,255) else color.setRgb(100,100,100) end pen.setColor(color) x = path.elementAt(i).x y = path.elementAt(i).y line = Qt::GraphicsLineItem.new(prev_x, prev_y, x, y) line.setPen(pen) line.setZValue(Z_VALUE_TRACK_COLORED) group.addToGroup(line) prev_x = x prev_y = y } group.setZValue(Z_VALUE_TRACK_COLORED) scene.addItem(group) end
contextMenuEvent(contextEvent)
click to toggle source
# File lib/fgmapping/main-dlg-impl.rb, line 1146 def contextMenuEvent(contextEvent) dlg=contextEvent.widget.parent.parent entries=["Colorize Altitude", "Colorize Speed"] menu=Qt::Menu.new entries.each{|e| if e=="-" then menu.addSeparator else menu.addAction(e) end } sel=menu.exec(contextEvent.screenPos) sel=sel.text if !sel.nil? data=[] case sel when entries[0] @parent.nodes.each{|n| data << n.elevation } colorize(data, dlg) when entries[1] @parent.nodes.each{|n| data << n.speed } colorize(data, dlg) end # case end
hoverLeaveEvent(hoverEvent)
click to toggle source
# File lib/fgmapping/main-dlg-impl.rb, line 1228 def hoverLeaveEvent(hoverEvent) # ap "hoverleave in" if @nodeinfo_widget.hover_on then @nodeinfo_widget.hovertimer.start(HOVER_TIMER) end # ap "hoverleave out" end
hoverMoveEvent(hoverEvent)
click to toggle source
# File lib/fgmapping/main-dlg-impl.rb, line 1176 def hoverMoveEvent(hoverEvent) # ap "hovermove in" dlg=hoverEvent.widget.parent.parent if @addToScene then dlg.scene.addItem(@nodeinfo) @addToScene = false end if !@nodeinfo_widget.hover_on then @nodeinfo.setVisible(true) @nodeinfo_widget.hover_on = true end x=hoverEvent.pos.x y=hoverEvent.pos.y e=nil hit=nil 1.upto(self.path.elementCount-1){|i| e=self.path.elementAt(i) if ((e.x - x).abs < 3) and ((e.y - y).abs < 3)then hit=i break end } if !hit.nil? and !@parent.nil? then n=@parent.nodes[hit] @nodeinfo_widget.w.lBlon.text="%.3f°" % n.lon @nodeinfo_widget.w.lBlat.text="%.3f°" % n.lat @nodeinfo_widget.w.lBalt.text="%.1fm" % n.elevation @nodeinfo_widget.w.lBspeed.text="%.1fkm/h" % n.speed @nodeinfo_widget.w.lBdist.text="%.2fkm" % (@parent.distance(n) / 1000) @nodeinfo_widget.w.lBtime.text=@parent.duration_str pos = mapToScene(hoverEvent.pos) if !@nodeinfo.isVisible or @nodeinfo_widget.hover_widget_pos.nil? or (!@nodeinfo_widget.hover_widget_pos.nil? \ and Qt::LineF.new(@nodeinfo_widget.hover_widget_pos, pos).length > 30) then dlg.scene.items.each {|item| if item.kind_of? Qt::GraphicsRectItem then if item != @nodeinfo then # item.setVisible(false) end end } @nodeinfo.setVisible(true) @nodeinfo_widget.hover_widget_pos=pos @nodeinfo.setPos(pos) @nodeinfo_widget.hovertimer.stop end end # ap "hovermove out" end