Go to the documentation of this file.00001 __author__ = 'tom1231'
00002 from PyQt4.QtGui import *
00003 from BAL.Interface.DeviceFrame import DeviceFrame, DIFF_OPEN
00004
00005
00006 class DiffOpen(DeviceFrame):
00007 def __init__(self, frame, data, motors):
00008 DeviceFrame.__init__(self, DIFF_OPEN, frame, data)
00009 self.motors = motors
00010 self._name = 'diff_driver'
00011 self._rWheel = '0.065'
00012 self._width = '0.255'
00013 self._maxAg = '16.0'
00014 self._maxLn = '16.0'
00015
00016 self._motorL = '1'
00017 self._motorR = '2'
00018
00019 def fromDict(self, data):
00020 self._name = data['name']
00021 self._width = data['width']
00022 self._rWheel = data['rWheel']
00023 self._maxAg = data['maxAg']
00024 self._maxLn = data['maxLn']
00025 self._motorR = data['motorR']
00026 self._motorL = data['motorL']
00027
00028 def toDict(self):
00029 data = dict()
00030
00031 data['type'] = DIFF_OPEN
00032 data['name'] = self._name
00033 data['rWheel'] = self._rWheel
00034 data['width'] = self._width
00035 data['maxAg'] = self._maxAg
00036 data['maxLn'] = self._maxLn
00037 data['motorL'] = self._motorL
00038 data['motorR'] = self._motorR
00039
00040 return data
00041
00042
00043 def printDetails(self):
00044 self._frame.layout().addRow(QLabel('Name: '), QLabel(self._name))
00045 self._frame.layout().addRow(QLabel('Radius of the wheel (in meters): '), QLabel(self._rWheel))
00046 self._frame.layout().addRow(QLabel('Width of the robot (in meters): '), QLabel(self._width))
00047 self._frame.layout().addRow(QLabel('Max angular: '), QLabel(self._maxAg))
00048 self._frame.layout().addRow(QLabel('Max linear: '), QLabel(self._maxLn))
00049 self._frame.layout().addRow(QLabel('MotorL: '), QLabel(self.motors[int(self._motorL) - 1]))
00050 self._frame.layout().addRow(QLabel('MotorR: '), QLabel(self.motors[int(self._motorR) - 1]))
00051
00052 def getName(self):
00053 return self._name
00054
00055 def showDetails(self, items=None):
00056 self.motorsL = QComboBox()
00057 self.motorsR = QComboBox()
00058
00059 for i in xrange(len(self.motors)):
00060 self.motorsL.addItem(self.motors[i], str(i + 1))
00061 self.motorsR.addItem(self.motors[i], str(i + 1))
00062 self.motorsL.setCurrentIndex(int(self._motorL) - 1)
00063 self.motorsR.setCurrentIndex(int(self._motorR) - 1)
00064
00065 self.name = QLineEdit(self._name)
00066 self.rWheel = QLineEdit(self._rWheel)
00067 self.width = QLineEdit(self._width)
00068 self.maxAg = QLineEdit(self._maxAg)
00069 self.maxLn = QLineEdit(self._maxLn)
00070
00071 self._frame.layout().addRow(QLabel('Name: '), self.name)
00072 self._frame.layout().addRow(QLabel('Radius of the wheel (in meters): '), self.rWheel)
00073 self._frame.layout().addRow(QLabel('Width of the robot (in meters): '), self.width)
00074 self._frame.layout().addRow(QLabel('Max angular: '), self.maxAg)
00075 self._frame.layout().addRow(QLabel('Max linear: '), self.maxLn)
00076 self._frame.layout().addRow(self.motorsL, self.motorsR)
00077
00078 def add(self):
00079 old = self._name
00080 self._name = str(self.name.text())
00081 self._motorL = str(self.motorsL.itemData(self.motorsL.currentIndex()).toString())
00082 self._motorR = str(self.motorsR.itemData(self.motorsR.currentIndex()).toString())
00083
00084
00085 if not self.nameIsValid():
00086 error = QErrorMessage()
00087 error.setWindowTitle("Same name error")
00088 error.showMessage("Name already taken.")
00089 error.exec_()
00090 self._name = old
00091 self._isValid = False
00092 return
00093
00094 if self._motorL == self._motorR:
00095 error = QErrorMessage()
00096 error.setWindowTitle(" Error")
00097 error.showMessage("Can not have the same motor in the right and left fields.")
00098 error.exec_()
00099 self._isValid = False
00100 return
00101 self._isValid = True
00102 self._name = str(self.name.text())
00103 self._rWheel = str(self.rWheel.text())
00104 self._width = str(self.width.text())
00105 self._maxAg = str(self.maxAg.text())
00106 self._maxLn = str(self.maxLn.text())
00107
00108 def saveToFile(self, file):
00109 file.write('Diff/name: ' + self._name + '\n')
00110 file.write('Diff/rWheel: ' + self._rWheel + '\n')
00111 file.write('Diff/width: ' + self._width + '\n')
00112 file.write('Diff/maxAng: ' + self._maxAg + '\n')
00113 file.write('Diff/maxLin: ' + self._maxLn + '\n')
00114 file.write('Diff/motorL: ' + self._motorL + '\n')
00115 file.write('Diff/motorR: ' + self._motorR + '\n')