00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 import roslib
00052 roslib.load_manifest('p2os_dashboard')
00053
00054 import wx
00055
00056
00057
00058
00059 from os import path
00060
00061 class PowerStateControl(wx.Window):
00062 def __init__(self, parent, id, icons_path):
00063 wx.Window.__init__(self, parent, id, wx.DefaultPosition, wx.Size(60, 32))
00064
00065 self._pct = 0
00066 self._vlt = 0
00067
00068 self._left_bitmap = wx.Bitmap(path.join(icons_path, "battery-minus.png"), wx.BITMAP_TYPE_PNG)
00069 self._right_bitmap = wx.Bitmap(path.join(icons_path, "battery-plus.png"), wx.BITMAP_TYPE_PNG)
00070 self._plug_bitmap = wx.Bitmap(path.join(icons_path, "battery-charging.png"), wx.BITMAP_TYPE_PNG)
00071 self._background_bitmap = wx.Bitmap(path.join(icons_path, "battery-background.png"), wx.BITMAP_TYPE_PNG)
00072 self._green = wx.Bitmap(path.join(icons_path, "battery-green-bar.png"), wx.BITMAP_TYPE_PNG)
00073 self._yellow = wx.Bitmap(path.join(icons_path, "battery-yellow-bar.png"), wx.BITMAP_TYPE_PNG)
00074 self._red = wx.Bitmap(path.join(icons_path, "battery-red-bar.png"), wx.BITMAP_TYPE_PNG)
00075
00076 self.SetSize(wx.Size(self._left_bitmap.GetWidth() + self._right_bitmap.GetWidth() + self._background_bitmap.GetWidth(), 32))
00077
00078 self._start_x = self._left_bitmap.GetWidth()
00079 self._end_x = self.GetSize().x - self._right_bitmap.GetWidth()
00080 self._width = self._end_x - self._start_x
00081
00082 self._plugged_in = False
00083
00084 self.Bind(wx.EVT_PAINT, self.on_paint)
00085
00086 def on_paint(self, evt):
00087 dc = wx.BufferedPaintDC(self)
00088
00089 dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
00090 dc.Clear()
00091
00092 w = self.GetSize().GetWidth()
00093 h = self._left_bitmap.GetHeight()
00094
00095 color_bitmap = None
00096 if (self._pct > 0.5):
00097 color_bitmap = self._green
00098 elif (self._pct > 0.3):
00099 color_bitmap = self._yellow
00100 else:
00101 color_bitmap = self._red
00102
00103 dc.DrawBitmap(self._background_bitmap, self._start_x, 0, True)
00104
00105 color_image = color_bitmap.ConvertToImage()
00106 scaled_color_image = color_image.Rescale(round(self._width * self._pct), color_bitmap.GetHeight())
00107 color_bitmap = wx.BitmapFromImage(scaled_color_image)
00108 dc.DrawBitmap(color_bitmap, self._start_x, 0, True)
00109 dc.DrawBitmap(self._left_bitmap, 0, 0, True)
00110 dc.DrawBitmap(self._right_bitmap, self._end_x, 0, True)
00111
00112 def set_power_state(self, msg):
00113 last_pct = self._pct
00114 last_vlt = self._vlt
00115 last_plugged_in = self._plugged_in
00116
00117 self._pct = (msg.voltage - 11.3) / 2.2
00118 if self._pct > 1.0:
00119 self._pct = 1.0
00120
00121 if self._pct < 0.0:
00122 self._pct = 0.0
00123 self._vlt = msg.voltage
00124
00125 self.Refresh()
00126
00127 def updateToolTip(self):
00128 self.SetToolTip(wx.ToolTip("Battery: %.2f%% (%.2f v)"%(self._pct * 100.0, self._vlt)))
00129 self.Refresh()
00130
00131
00132 def set_stale(self):
00133 self._plugged_in = 0
00134 self._pct = 0
00135 self._vlt = 0
00136 self.SetToolTip(wx.ToolTip("Battery: Stale"))
00137
00138 self.Refresh()