mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-24 13:55:51 +08:00
[module] update module creator for tasks and dependencies (#2771)
This commit is contained in:
committed by
GitHub
parent
c992e5bb5a
commit
73249228dc
@@ -91,6 +91,10 @@ class CreateModGUI(Ui_CreateModule_Window):
|
||||
author = self.author_edit.text()
|
||||
email = self.email_edit.text()
|
||||
description = unidecode.unidecode(self.description_edit.toPlainText())
|
||||
task = self.task_combo.currentText()
|
||||
depends = self.depends_edit.text()
|
||||
provides = self.provides_edit.text()
|
||||
conflicts = self.conflicts_edit.text()
|
||||
self.description_edit.setPlainText(description)
|
||||
if name == "" or author == "" or description == "" or email == "":
|
||||
self.statusbar.showMessage("Please fill the name, author, mail and description!")
|
||||
@@ -98,9 +102,13 @@ class CreateModGUI(Ui_CreateModule_Window):
|
||||
return
|
||||
fc.name = name
|
||||
fc.directory = directory
|
||||
fc.task = task
|
||||
fc.description = description
|
||||
fc.author = author
|
||||
fc.email = email
|
||||
fc.depends = depends
|
||||
fc.provides = provides
|
||||
fc.conflicts = conflicts
|
||||
|
||||
for comp in self.components:
|
||||
if comp.comp_type == "Init":
|
||||
|
||||
@@ -21,6 +21,11 @@ class Ui_CreateModule_Window(object):
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.label = QtWidgets.QLabel(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
|
||||
self.label.setSizePolicy(sizePolicy)
|
||||
self.label.setObjectName("label")
|
||||
self.horizontalLayout.addWidget(self.label)
|
||||
self.name_edit = QtWidgets.QLineEdit(self.centralwidget)
|
||||
@@ -30,13 +35,43 @@ class Ui_CreateModule_Window(object):
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
self.label_2 = QtWidgets.QLabel(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
|
||||
self.label_2.setSizePolicy(sizePolicy)
|
||||
self.label_2.setObjectName("label_2")
|
||||
self.horizontalLayout_2.addWidget(self.label_2)
|
||||
self.directory_combo = QtWidgets.QComboBox(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.directory_combo.sizePolicy().hasHeightForWidth())
|
||||
self.directory_combo.setSizePolicy(sizePolicy)
|
||||
self.directory_combo.setEditable(True)
|
||||
self.directory_combo.setObjectName("directory_combo")
|
||||
self.horizontalLayout_2.addWidget(self.directory_combo)
|
||||
self.horizontalLayout_6.addLayout(self.horizontalLayout_2)
|
||||
self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
|
||||
self.label_7 = QtWidgets.QLabel(self.centralwidget)
|
||||
self.label_7.setObjectName("label_7")
|
||||
self.horizontalLayout_8.addWidget(self.label_7)
|
||||
self.task_combo = QtWidgets.QComboBox(self.centralwidget)
|
||||
self.task_combo.setObjectName("task_combo")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.setItemText(0, "")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.task_combo.addItem("")
|
||||
self.horizontalLayout_8.addWidget(self.task_combo)
|
||||
self.horizontalLayout_6.addLayout(self.horizontalLayout_8)
|
||||
self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
|
||||
self.label_12 = QtWidgets.QLabel(self.centralwidget)
|
||||
@@ -73,6 +108,28 @@ class Ui_CreateModule_Window(object):
|
||||
self.horizontalLayout_3.addWidget(self.email_edit)
|
||||
self.horizontalLayout_5.addLayout(self.horizontalLayout_3)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout_5)
|
||||
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
|
||||
self.label_9 = QtWidgets.QLabel(self.centralwidget)
|
||||
self.label_9.setObjectName("label_9")
|
||||
self.horizontalLayout_9.addWidget(self.label_9)
|
||||
self.depends_edit = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.depends_edit.setObjectName("depends_edit")
|
||||
self.horizontalLayout_9.addWidget(self.depends_edit)
|
||||
self.label_10 = QtWidgets.QLabel(self.centralwidget)
|
||||
self.label_10.setObjectName("label_10")
|
||||
self.horizontalLayout_9.addWidget(self.label_10)
|
||||
self.provides_edit = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.provides_edit.setObjectName("provides_edit")
|
||||
self.horizontalLayout_9.addWidget(self.provides_edit)
|
||||
self.label_11 = QtWidgets.QLabel(self.centralwidget)
|
||||
self.label_11.setObjectName("label_11")
|
||||
self.horizontalLayout_9.addWidget(self.label_11)
|
||||
self.conflicts_edit = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.conflicts_edit.setText("")
|
||||
self.conflicts_edit.setObjectName("conflicts_edit")
|
||||
self.horizontalLayout_9.addWidget(self.conflicts_edit)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout_9)
|
||||
self.label_3 = QtWidgets.QLabel(self.centralwidget)
|
||||
self.label_3.setObjectName("label_3")
|
||||
self.verticalLayout.addWidget(self.label_3)
|
||||
@@ -99,7 +156,7 @@ class Ui_CreateModule_Window(object):
|
||||
self.components_area.setWidgetResizable(True)
|
||||
self.components_area.setObjectName("components_area")
|
||||
self.scrollAreaWidgetContents = QtWidgets.QWidget()
|
||||
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 859, 356))
|
||||
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 859, 316))
|
||||
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
|
||||
self.scroll_area_layout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
|
||||
self.scroll_area_layout.setObjectName("scroll_area_layout")
|
||||
@@ -150,11 +207,24 @@ class Ui_CreateModule_Window(object):
|
||||
CreateModule_Window.setWindowTitle(_translate("CreateModule_Window", "Create Module"))
|
||||
self.label.setText(_translate("CreateModule_Window", "Module name"))
|
||||
self.label_2.setText(_translate("CreateModule_Window", "Directory"))
|
||||
self.label_7.setText(_translate("CreateModule_Window", "Task"))
|
||||
self.task_combo.setItemText(1, _translate("CreateModule_Window", "mcu"))
|
||||
self.task_combo.setItemText(2, _translate("CreateModule_Window", "core"))
|
||||
self.task_combo.setItemText(3, _translate("CreateModule_Window", "sensors"))
|
||||
self.task_combo.setItemText(4, _translate("CreateModule_Window", "estimation"))
|
||||
self.task_combo.setItemText(5, _translate("CreateModule_Window", "radio_control"))
|
||||
self.task_combo.setItemText(6, _translate("CreateModule_Window", "control"))
|
||||
self.task_combo.setItemText(7, _translate("CreateModule_Window", "actuators"))
|
||||
self.task_combo.setItemText(8, _translate("CreateModule_Window", "datalink"))
|
||||
self.task_combo.setItemText(9, _translate("CreateModule_Window", "default"))
|
||||
self.label_12.setText(_translate("CreateModule_Window", "Licence"))
|
||||
self.licence_comboBox.setItemText(0, _translate("CreateModule_Window", "GPLv2"))
|
||||
self.licence_comboBox.setItemText(1, _translate("CreateModule_Window", "None"))
|
||||
self.label_4.setText(_translate("CreateModule_Window", "Author"))
|
||||
self.label_5.setText(_translate("CreateModule_Window", "email"))
|
||||
self.label_9.setText(_translate("CreateModule_Window", "Depends"))
|
||||
self.label_10.setText(_translate("CreateModule_Window", "Provides"))
|
||||
self.label_11.setText(_translate("CreateModule_Window", "Conflicts"))
|
||||
self.label_3.setText(_translate("CreateModule_Window", "Description"))
|
||||
self.label_6.setText(_translate("CreateModule_Window", "Add element :"))
|
||||
self.init_button.setText(_translate("CreateModule_Window", "Init"))
|
||||
|
||||
@@ -16,11 +16,17 @@
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,1,0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,1,0,0">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Module name</string>
|
||||
</property>
|
||||
@@ -35,6 +41,12 @@
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Directory</string>
|
||||
</property>
|
||||
@@ -42,6 +54,12 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="directory_combo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
@@ -49,6 +67,71 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Task</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="task_combo">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>mcu</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>core</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>sensors</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>estimation</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>radio_control</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>control</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>actuators</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>datalink</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>default</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
||||
<item>
|
||||
@@ -111,6 +194,44 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Depends</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="depends_edit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string>Provides</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="provides_edit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>Conflicts</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="conflicts_edit">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
@@ -165,7 +286,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>859</width>
|
||||
<height>356</height>
|
||||
<height>316</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="scroll_area_layout">
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import os
|
||||
from lxml import etree
|
||||
from collections import namedtuple
|
||||
import datetime
|
||||
|
||||
|
||||
PPRZ_SRC = os.getenv("PAPARAZZI_SRC")
|
||||
@@ -46,9 +47,14 @@ class FilesCreate:
|
||||
self.src = ""
|
||||
self._name = ""
|
||||
self._directory = ""
|
||||
self._task = ""
|
||||
self._description = ""
|
||||
self._author = ""
|
||||
self._email = ""
|
||||
self._year = datetime.datetime.now().year
|
||||
self._depends = ""
|
||||
self._provides = ""
|
||||
self._conflicts = ""
|
||||
self.inits = []
|
||||
self.periodics = []
|
||||
self.events = []
|
||||
@@ -73,6 +79,16 @@ class FilesCreate:
|
||||
def directory(self, d):
|
||||
self._directory = d.lower()
|
||||
|
||||
@property
|
||||
def task(self):
|
||||
if self._task == "":
|
||||
return None
|
||||
return self._task
|
||||
|
||||
@task.setter
|
||||
def task(self, t):
|
||||
self._task = t
|
||||
|
||||
@property
|
||||
def description(self):
|
||||
return self._description
|
||||
@@ -97,6 +113,44 @@ class FilesCreate:
|
||||
def email(self, email):
|
||||
self._email = "<{}>".format(email)
|
||||
|
||||
@property
|
||||
def year(self):
|
||||
return self._year
|
||||
|
||||
@property
|
||||
def depends(self):
|
||||
if self._depends == "":
|
||||
return None
|
||||
return self._depends
|
||||
|
||||
@depends.setter
|
||||
def depends(self, depends):
|
||||
self._depends = depends
|
||||
|
||||
@property
|
||||
def provides(self):
|
||||
if self._provides == "":
|
||||
return None
|
||||
return self._provides
|
||||
|
||||
@provides.setter
|
||||
def provides(self, provides):
|
||||
self._provides = provides
|
||||
|
||||
@property
|
||||
def conflicts(self):
|
||||
if self._conflicts == "":
|
||||
return None
|
||||
return self._conflicts
|
||||
|
||||
@conflicts.setter
|
||||
def conflicts(self, conflicts):
|
||||
self._conflicts = conflicts
|
||||
|
||||
def has_dep(self):
|
||||
# at least one is not empty
|
||||
return self._depends != "" or self._provides != "" or self._conflicts != ""
|
||||
|
||||
def add_init(self, fun):
|
||||
fun = fun.strip("()")
|
||||
self.inits.append(Init(fun=fun))
|
||||
@@ -135,12 +189,31 @@ class FilesCreate:
|
||||
self.xml.attrib["name"] = self.name
|
||||
# set directory
|
||||
self.xml.attrib["dir"] = self.directory
|
||||
#set description
|
||||
# set task
|
||||
if self.task is not None:
|
||||
self.xml.attrib["task"] = self.task
|
||||
# set description
|
||||
description = etree.Element("description")
|
||||
description.text = self.description
|
||||
doc = etree.Element("doc")
|
||||
doc.append(description)
|
||||
self.xml.append(doc)
|
||||
# set dependencies
|
||||
if self.has_dep():
|
||||
dep = etree.Element("dep")
|
||||
if self.depends is not None:
|
||||
depends = etree.Element("depends")
|
||||
depends.text = self.depends
|
||||
dep.append(depends)
|
||||
if self.provides is not None:
|
||||
provides = etree.Element("provides")
|
||||
provides.text = self.provides
|
||||
dep.append(provides)
|
||||
if self.conflicts is not None:
|
||||
conflicts = etree.Element("conflicts")
|
||||
conflicts.text = self.conflicts
|
||||
dep.append(conflicts)
|
||||
self.xml.append(dep)
|
||||
# set header
|
||||
h_file = etree.Element("file")
|
||||
h_file.attrib["name"] = "{}.h".format(self.name)
|
||||
@@ -188,8 +261,8 @@ class FilesCreate:
|
||||
self.xml.append(makefile)
|
||||
|
||||
def build_src(self, licence="GPLv2"):
|
||||
cop = "/*\n * Copyright (C) {author} {email}\n{licence}\n */".format(
|
||||
author=self.author, email=self.email, licence=LICENCES[licence])
|
||||
cop = "/*\n * Copyright (C) {year} {author} {email}\n{licence}\n */".format(
|
||||
year=self.year, author=self.author, email=self.email, licence=LICENCES[licence])
|
||||
description = "/** @file \"modules/{dir}/{name}.c\"\n * @author {author} {email}\n * {description}\n */".format(
|
||||
dir=self.directory, name=self.name, author=self.author, email=self.email, description=self.description)
|
||||
include = "#include \"modules/{dir}/{name}.h\"".format(dir=self.directory, name=self.name)
|
||||
@@ -221,7 +294,7 @@ class FilesCreate:
|
||||
self.src = "{}\n\n{}\n\n{}\n\n{}\n".format(cop, description, include, declarations)
|
||||
|
||||
def build_header(self, licence="GPLv2"):
|
||||
cop = "/*\n * Copyright (C) {author} {email}\n{licence}\n */".format(author=self.author, email=self.email, licence=LICENCES[licence])
|
||||
cop = "/*\n * Copyright (C) {year} {author} {email}\n{licence}\n */".format(year=self.year, author=self.author, email=self.email, licence=LICENCES[licence])
|
||||
description = "/** @file \"modules/{dir}/{name}.h\"\n * @author {author} {email}\n * {description}\n */".format(
|
||||
dir=self.directory, name=self.name, author=self.author, email=self.email, description=self.description)
|
||||
includes = ""
|
||||
|
||||
Reference in New Issue
Block a user