battery_dash_widget.py
Go to the documentation of this file.
00001 # Software License Agreement (BSD License)
00002 #
00003 # Copyright (c) 2012, Willow Garage, Inc.
00004 # All rights reserved.
00005 #
00006 # Redistribution and use in source and binary forms, with or without
00007 # modification, are permitted provided that the following conditions
00008 # are met:
00009 #
00010 #  * Redistributions of source code must retain the above copyright
00011 #    notice, this list of conditions and the following disclaimer.
00012 #  * Redistributions in binary form must reproduce the above
00013 #    copyright notice, this list of conditions and the following
00014 #    disclaimer in the documentation and/or other materials provided
00015 #    with the distribution.
00016 #  * Neither the name of Willow Garage, Inc. nor the names of its
00017 #    contributors may be used to endorse or promote products derived
00018 #    from this software without specific prior written permission.
00019 #
00020 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00021 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00022 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00023 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00024 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00025 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00026 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00027 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00028 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00029 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00030 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00031 # POSSIBILITY OF SUCH DAMAGE.
00032 
00033 
00034 import os
00035 import rospkg
00036 from python_qt_binding.QtCore import Signal, QSize
00037 from python_qt_binding.QtGui import QIcon, QLabel
00038 from .util import IconHelper
00039 
00040 class BatteryDashWidget(QLabel):
00041     """
00042     A Widget which displays incremental battery state, including a status tip.
00043     To use this widget simply call :func:`update_perc` and :func:`update_time`
00044     to change the displayed charge percentage and time remaining, respectively.
00045 
00046     :param name: The name of this widget
00047     :type name: str
00048     """
00049     state_changed = Signal(int)
00050 
00051     def __init__(self, name='Battery', icons=None, charge_icons=None, icon_paths=None, suppress_overlays=False):
00052         super(BatteryDashWidget, self).__init__()
00053         if icons == None:
00054             icons = []
00055             charge_icons = []
00056             for x in range(6):
00057                 icons.append(['ic-battery-%s.svg' % (x * 20)])
00058                 charge_icons.append(['ic-battery-charge-%s.svg' % (x * 20)])
00059         icon_paths = (icon_paths if icon_paths else []) + [['rqt_robot_dashboard', 'images']]
00060         paths = []
00061         rp = rospkg.RosPack()
00062         for path in icon_paths:
00063             paths.append(os.path.join(rp.get_path(path[0]), path[1]))
00064         self._icon_helper = IconHelper(paths, name)
00065         converted_icons = self._icon_helper.set_icon_lists(icons, charge_icons, suppress_overlays)
00066         self._icons = converted_icons[0]
00067         self._charge_icons = converted_icons[1]
00068         self._name = name
00069         self._charging = False
00070         self.__state = 0
00071         self.setMargin(5)
00072         self.state_changed.connect(self._update_state)
00073         self.update_perc(0)
00074         self.update_time(0)
00075 
00076     def _update_state(self, state):
00077         if self._charging:
00078             self.setPixmap(self._charge_icons[state].pixmap(QSize(60, 100)))
00079         else:
00080             self.setPixmap(self._icons[state].pixmap(QSize(60, 100)))
00081 
00082     @property
00083     def state(self):
00084         """
00085         Read-only accessor for the widgets current state.
00086         """
00087         return self.__state
00088 
00089     def set_charging(self, value):
00090         self._charging = value
00091 
00092     def update_perc(self, val):
00093         """
00094         Update the displayed battery percentage.
00095         The default implementation of this method displays in 20% increments
00096 
00097         :param val: The new value to be displayed.
00098         :type val: int
00099         """
00100         self.update_state(round(val / 20.0))
00101 
00102     def update_state(self, state):
00103         """
00104         Set the state of this button.
00105         This will also update the icon for the button based on the ``self._icons`` list
00106 
00107         :raises IndexError: If state is not a proper index to ``self._icons``
00108 
00109         :param state: The state to set.
00110         :type state: int
00111         """
00112         if 0 <= state and state < len(self._icons):
00113             self.__state = state
00114             self.state_changed.emit(self.__state)
00115         else:
00116             raise IndexError("%s update_state received invalid state: %s" % (self._name, state))
00117 
00118     def update_time(self, value):
00119         try:
00120             fval = float(value)
00121             self.setToolTip("%s: %.2f%% remaining" % (self._name, fval))
00122         except ValueError:
00123             self.setToolTip("%s: %s%% remaining" % (self._name, value))


rqt_robot_dashboard
Author(s): Ze'ev Klapow
autogenerated on Fri Aug 28 2015 12:50:54