Esempio n. 1
0
  def __init__(self, filename, parent=None):
    self.parent = parent
    QtGui.QTextEdit.__init__(self, parent)
    self.setObjectName(' - '.join(['Editor', filename]))
    font = QtGui.QFont()
    font.setFamily("Fixed".decode("utf-8"))
    font.setPointSize(12)
    self.setFont(font)
    self.setLineWrapMode(QtGui.QTextEdit.NoWrap)
    self.setTabStopWidth(25)
    self.setAcceptRichText(False)
    self.setCursorWidth(2)
    self.setFontFamily("courier new")
    self.setProperty("backgroundVisible", True)
    self.regexp_list = [QtCore.QRegExp("\\binclude\\b"), QtCore.QRegExp("\\btextfile\\b"),
                        QtCore.QRegExp("\\bfile\\b"), QtCore.QRegExp("\\bvalue=.*pkg:\/\/\\b"),
                        QtCore.QRegExp("\\bvalue=.*package:\/\/\\b"),
                        QtCore.QRegExp("\\bvalue=.*\$\(find\\b")]
    self.filename = filename
    self.file_info = None
    if self.filename:
      f = QtCore.QFile(filename);
      if f.open(QtCore.QIODevice.ReadOnly | QtCore.QIODevice.Text):
        self.file_info = QtCore.QFileInfo(filename)
        self.setText(unicode(f.readAll(), "utf-8"))

    self.path = '.'
    # enables drop events
    self.setAcceptDrops(True)
Esempio n. 2
0
 def mouseReleaseEvent(self, event):
   '''
   Opens the new editor, if the user clicked on the included file and sets the 
   default cursor.
   '''
   if event.modifiers() == QtCore.Qt.ControlModifier or event.modifiers() == QtCore.Qt.ShiftModifier:
     cursor = self.cursorForPosition(event.pos())
     index = self.index(cursor.block().text())
     if index > -1:
       startIndex = cursor.block().text().find('"', index)
       if startIndex > -1:
         endIndex = cursor.block().text().find('"', startIndex+1)
         fileName = cursor.block().text()[startIndex+1:endIndex]
         if len(fileName) > 0:
           try:
             f = QtCore.QFile(self.interpretPath(fileName))
             if not f.exists():
               # create a new file, if it does not exists
               result = QtGui.QMessageBox.question(self, "File not found", '\n\n'.join(["Create a new file?", f.fileName()]), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
               if result == QtGui.QMessageBox.Yes:
                 d = os.path.dirname(f.fileName())
                 if not os.path.exists(dir):
                   os.makedirs(d)
                 with open(f.fileName(),'w') as f:
                   if f.fileName().endswith('.launch'):
                     f.write('<launch>\n\n</launch>')
                 self.load_request_signal.emit(f.fileName())
             else:
               self.load_request_signal.emit(f.fileName())
           except Exception, e:
             WarningMessageBox(QtGui.QMessageBox.Warning, "File not found", fileName, str(e)).exec_()
Esempio n. 3
0
 def includedFiles(self):
   '''
   Returns all included files in the document.
   '''
   result = []
   b = self.document().begin()
   while b != self.document().end():
     text = b.text()
     index = self.index(text)
     if index > -1:
       startIndex = text.find('"', index)
       if startIndex > -1:
         endIndex = text.find('"', startIndex+1)
         fileName = text[startIndex+1:endIndex]
         if len(fileName) > 0:
           try:
             path = self.interpretPath(fileName)
             f = QtCore.QFile(path)
             ext = os.path.splitext(path)
             if f.exists() and ext[1] in nm.settings().SEARCH_IN_EXT:
               result.append(path)
           except:
             import traceback
             print traceback.format_exc()
     b = b.next()
   return result
Esempio n. 4
0
 def focusInEvent(self, event):
   # check for file changes
   try:
     if self.filename and self.file_info:
       if self.file_info.lastModified() != QtCore.QFileInfo(self.filename).lastModified():
         self.file_info = QtCore.QFileInfo(self.filename)
         result = QtGui.QMessageBox.question(self, "File changed", "File was changed, reload?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
         if result == QtGui.QMessageBox.Yes:
           f = QtCore.QFile(self.filename);
           if f.open(QtCore.QIODevice.ReadOnly | QtCore.QIODevice.Text):
             self.setText(unicode(f.readAll(), "utf-8"))
             self.document().setModified(False)
             self.textChanged.emit()
           else:
             QtGui.QMessageBox.critical(self, "Error", "Cannot open launch file%s"%self.filename)
   except:
     pass
   QtGui.QTextEdit.focusInEvent(self, event)
Esempio n. 5
0
  def save(self, force=False):
    '''
    Saves changes to the file.
    :return: saved, errors, msg
    :rtype: bool, bool, str
    '''
    if force or self.document().isModified() or not QtCore.QFileInfo(self.filename).exists():
      f = QtCore.QFile(self.filename)
      if f.open(QtCore.QIODevice.WriteOnly | QtCore.QIODevice.Text):
        f.write(self.toPlainText().encode('utf-8'))
        self.document().setModified(False)
        self.file_info = QtCore.QFileInfo(self.filename)

        ext = os.path.splitext(self.filename)
        # validate the xml structure of the launch files
        if ext[1] in self.CONTEXT_FILE_EXT:
          imported = False
          try:
            from lxml import etree
            imported = True
            parser = etree.XMLParser()
            etree.fromstring(self.toPlainText().encode('utf-8'), parser)
          except Exception as e:
            if imported:
              self.markLine(e.position[0])
              return True, True, "%s"%e
        # validate the yaml structure of yaml files
        elif ext[1] in self.YAML_VALIDATION_FILES:
          try:
            import yaml
            yaml.load(self.toPlainText().encode('utf-8'))
          except yaml.MarkedYAMLError as e:
            return True, True, "%s"%e
        return True, False, ''
      else:
        return False, True, "Cannot write XML file"
    return False, False, ''