26 from __future__
import division
30 from python_qt_binding
import loadUi
31 from python_qt_binding.QtCore
import Qt, QTimer, Signal, Slot, QRectF, QPointF, QSize, QRect, QPoint
32 from python_qt_binding.QtWidgets
import QWidget, QPushButton, QVBoxLayout, QHBoxLayout, QLabel, QListWidgetItem, QDialog, QGraphicsView, QGraphicsScene, QGraphicsPathItem, QTableWidgetItem, QHeaderView, QStyle, QCommonStyle
33 from python_qt_binding.QtGui
import QColor, QPen, QBrush, QPainterPath, QPolygonF, QTransform, QPainter, QIcon, QPixmap, QPaintEvent, QPalette
34 from python_qt_binding.QtSvg
import QSvgGenerator
38 from rospy.exceptions
import ROSException
50 self.
_mode =
"history" 54 self.
_mode =
"switches" 60 if element == QStyle.CE_HeaderLabel:
66 if header.section < 3:
71 rect = header.rect.bottomLeft()
72 painter.translate(QPoint(rect.x() + 10, rect.y() + 5))
75 painter.drawText(0,0,header.text)
95 baseSize.setHeight( 150 );
99 def __init__(self, subsystem_name, parent=None):
100 super(StateHistoryDialog, self).
__init__(parent)
104 self.setWindowFlags(Qt.Window)
106 rp = rospkg.RosPack()
107 ui_file = os.path.join(rp.get_path(
'rqt_agent'),
'resource',
'StateHistory.ui')
108 loadUi(ui_file, self)
110 self.setWindowTitle(subsystem_name +
" - state history")
112 self.
_mode =
"history" 115 self.pushButton_close.clicked.connect(self.
closeClick)
122 hdr.setMinimumSectionSize(40)
123 hdr.setDefaultSectionSize(40)
124 self.tableWidget.setHorizontalHeader(hdr)
125 item0 = QTableWidgetItem(
"state")
126 item1 = QTableWidgetItem(
"reason")
127 item2 = QTableWidgetItem(
"time")
128 self.tableWidget.setHorizontalHeaderItem (0, item0)
129 self.tableWidget.setHorizontalHeaderItem (1, item1)
130 self.tableWidget.setHorizontalHeaderItem (2, item2)
131 self.tableWidget.setColumnWidth(0, 100)
132 self.tableWidget.setColumnWidth(1, 50)
133 self.tableWidget.setColumnWidth(2, 75)
156 for pv
in mcd.current_predicates:
158 curr_pred_v.append(
"t")
159 elif pv.value ==
False:
160 curr_pred_v.append(
"f")
162 raise ValueError(
"wrong predicate value: '" + str(pv.value) +
"' for predicate: '" + pv.name +
"'")
167 for pv
in mcd.current_predicates:
168 predicates.append( pv.name )
169 self.tableWidget.setColumnCount(len(predicates)+3)
173 item = QTableWidgetItem(p)
174 self.tableWidget.setHorizontalHeaderItem(idx, item)
179 if self.
_mode ==
"history":
181 if self.tableWidget.rowCount() != len(mcd.history):
182 self.tableWidget.setRowCount( len(mcd.history) )
184 for ss
in mcd.history:
185 self.tableWidget.setItem(row, 0, QTableWidgetItem(ss.state_name))
186 self.tableWidget.setItem(row, 1, QTableWidgetItem(ss.reason))
187 self.tableWidget.setItem(row, 2, QTableWidgetItem(str(ss.switch_interval)))
189 for pv
in ss.predicates:
196 elif pv.value ==
False:
199 raise ValueError(
"wrong predicate value: '" + str(pv.value) +
"' for predicate: '" + pv.name +
"'")
202 item = QTableWidgetItem(p_str +
" ("+curr_pred_v[idx]+
")")
204 item = QTableWidgetItem(p_str)
206 item.setBackground(QBrush(QColor(0,255,0)))
208 self.tableWidget.setItem(row, 3+idx, item)
211 elif self.
_mode ==
"switches":
213 if self.tableWidget.rowCount() != len(mcd.state_switch_info):
214 self.tableWidget.setRowCount( len(mcd.state_switch_info) )
216 state_switch_info = sorted(mcd.state_switch_info, key=
lambda ss: ss.switch_interval)
217 for ss
in state_switch_info:
218 self.tableWidget.setItem(row, 0, QTableWidgetItem(ss.prev_state_name +
" -> " + ss.state_name))
219 self.tableWidget.setItem(row, 1, QTableWidgetItem(ss.reason))
220 self.tableWidget.setItem(row, 2, QTableWidgetItem(str(ss.switch_interval)))
223 for pv
in ss.predicates:
230 elif pv.value ==
False:
233 raise ValueError(
"wrong predicate value: '" + str(pv.value) +
"' for predicate: '" + pv.name +
"'")
234 item = QTableWidgetItem(p_str)
236 item.setBackground(QBrush(QColor(0,255,0)))
237 self.tableWidget.setItem(row, 3+idx, item)
def __init__(self, subsystem_name, parent=None)
def radio_switchesClick(self)
def updateState(self, mcd)
def setUsedPredicatesInfo(self, used_predicates_info)
def radio_historyClick(self)
def drawControl(self, element, opt, painter, widget=None)