Go to the documentation of this file.00001 __author__ = 'tom'
00002 from PyQt4.QtGui import *
00003 from BAL.Interface.DeviceFrame import LAUNCH, EX_DEV, DeviceFrame
00004 from lxml.etree import Element, SubElement, XML
00005 import rospkg
00006
00007
00008 class RosLaunch(DeviceFrame):
00009 def __init__(self, frame, data):
00010 DeviceFrame.__init__(self, EX_DEV, frame, data)
00011 self._pkg = ''
00012 self._file = ''
00013 self._name = ''
00014
00015 def toDict(self):
00016 data = dict()
00017
00018 data['type'] = LAUNCH
00019 data['name'] = self._name
00020 data['pkg'] = self._pkg
00021 data['file'] = self._file
00022
00023 return data
00024
00025 def fromDict(self, data):
00026 self._name = data['name']
00027 self._pkg = data['pkg']
00028 self._file = data['file']
00029
00030 def showDetails(self, items=None):
00031 self.name = QLineEdit(self._name)
00032 self.pkg = QLineEdit(self._pkg)
00033 self.file = QPushButton('Browse')
00034
00035 self.file.clicked.connect(self.browse)
00036
00037 self._frame.layout().addRow(QLabel('Name:'), self.name)
00038 self._frame.layout().addRow(QLabel('package:'), self.pkg)
00039 self._frame.layout().addRow(QLabel('Launch file:'), self.file)
00040
00041 def browse(self):
00042 if str(self.pkg.text()) == '':
00043 QMessageBox.critical(self._frame, "Error", "You need to fill the package field before you browse for the file.")
00044 return
00045 try:
00046 fullPath = rospkg.RosPack().get_path(str(self.pkg.text()))
00047 except rospkg.ResourceNotFound:
00048 QMessageBox.critical(self._frame, "Error", "Package not found.")
00049 return
00050
00051 launchFile = str(QFileDialog.getOpenFileName(self._frame, 'Load file', fullPath, 'Launch file (*.launch)'))
00052 if launchFile == '': return
00053
00054 index = launchFile.find(str(self.pkg.text()))
00055 if index == -1:
00056 QMessageBox.critical(self._frame, "Error", "launch is not from %s package." % str(self.pkg.text()))
00057 return
00058
00059 self._file = launchFile[index + len(str(self.pkg.text())):]
00060 self._pkg = str(self.pkg.text())
00061
00062 def saveToFile(self, parent):
00063 SubElement(parent, 'include', {
00064 'file': '$(find %s)%s' % (self._pkg, self._file)
00065 })
00066
00067 def printDetails(self):
00068 self._frame.layout().addRow(QLabel('Name:'), QLabel(self._name))
00069 self._frame.layout().addRow(QLabel('package:'), QLabel(self._pkg))
00070 self._frame.layout().addRow(QLabel('launch file:'), QLabel(self._file))
00071
00072 def getName(self):
00073 return self._name
00074
00075 def add(self):
00076 old = self._name
00077 self._name = str(self.name.text())
00078
00079 if not self.nameIsValid():
00080 error = QErrorMessage()
00081 error.setWindowTitle("Same name error")
00082 error.showMessage("Name already taken.")
00083 error.exec_()
00084 self._name = old
00085 self._isValid = False
00086 return
00087
00088 if self._file == '' or self._pkg == '':
00089 QMessageBox.critical(self._frame, "Error", "one or more field are empty please fill theme.")
00090 return
00091
00092 self._isValid = True