Browse Source

Parameter List for Opal-RT is now read from an XML file

QGC4.4
Bryan Godbolt 15 years ago
parent
commit
40cff93f65
  1. 4
      qgroundcontrol.pro
  2. 76
      settings/ParameterList.xml
  3. 6
      src/comm/OpalRT.h
  4. 12
      src/comm/Parameter.cc
  5. 9
      src/comm/Parameter.h
  6. 198
      src/comm/ParameterList.cc
  7. 19
      src/comm/ParameterList.h
  8. 25
      src/comm/ParameterList.xml
  9. 44
      src/ui/MainWindow.ui

4
qgroundcontrol.pro

@ -18,8 +18,8 @@ TARGET = qgroundcontrol
BASEDIR = . BASEDIR = .
BUILDDIR = build BUILDDIR = build
LANGUAGE = C++ LANGUAGE = C++
CONFIG += release #debug_and_release \ CONFIG += debug_and_release \
#console console
OBJECTS_DIR = $$BUILDDIR/obj OBJECTS_DIR = $$BUILDDIR/obj
MOC_DIR = $$BUILDDIR/moc MOC_DIR = $$BUILDDIR/moc
UI_HEADERS_DIR = src/ui/generated UI_HEADERS_DIR = src/ui/generated

76
settings/ParameterList.xml

@ -0,0 +1,76 @@
<ParameterList version="0.1">
<!-- Parameters in the top level block -->
<Block name="TopLevel">
<Parameter>
</Parameter>
</Block>
<!--Parameters related to the navigation block -->
<Block name="Navigation">
<Parameter
SimulinkPath="avionics_src/sm_avionics/Navigation_Filter/NAV_FILT_INIT/"
SimulinkParameterName="Value"
QGCParamID="NAV_FILT_INIT"
/>
</Block>
<!--Parameters related to the controller block -->
<Block name="Controller">
</Block>
<!-- Paremters for the Pilot Input/Raw RC block -->
<Block name="ServoInputs">
</Block>
<!-- Parameters for the servo output block -->
<Block name="ServoOutputs">
<!-- Settings for Aileron Servo -->
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/AileronOutput/"
SimulinkParameterName="Low"
QGCParamID="AIL_LOW_OUT"
/>
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/AileronOutput/"
SimulinkParameterName="Center"
QGCParamID="AIL_CENTER_OUT"
/>
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/AileronOutput/"
SimulinkParameterName="High"
QGCParamID="AIL_HIGH_OUT"
/>
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/AileronOutput/"
SimulinkParameterName="Reverse"
QGCParamID="AIL_REV_OUT"
/>
<!-- Settings for Elevator Servo -->
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/ElevatorOutput/"
SimulinkParameterName="Low"
QGCParamID="ELE_LOW_OUT"
/>
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/ElevatorOutput/"
SimulinkParameterName="Center"
QGCParamID="ELE_CENTER_OUT"
/>
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/ElevatorOutput/"
SimulinkParameterName="High"
QGCParamID="ELE_HIGH_OUT"
/>
<Parameter
SimulinkPath="avionics_src/sm_avionics/Servo_Outputs/ElevatorOutput/"
SimulinkParameterName="Reverse"
QGCParamID="ELE_REV_OUT"
/>
</Block>
</ParameterList>

6
src/comm/OpalRT.h

@ -95,8 +95,10 @@ namespace OpalRT
enum SubsystemIds enum SubsystemIds
{ {
NAV_ID = 1, NAV_ID = 1,
LOG_ID = 1, LOG_ID,
CONTROLLER_ID = 1 CONTROLLER_ID,
SERVO_OUTPUTS,
SERVO_INPUTS
}; };
class OpalErrorMsg class OpalErrorMsg

12
src/comm/Parameter.cc

@ -29,7 +29,17 @@ This file is part of the QGROUNDCONTROL project
#include "Parameter.h" #include "Parameter.h"
using namespace OpalRT; using namespace OpalRT;
Parameter::Parameter(char *simulinkPath, char *simulinkName, uint8_t componentID, //Parameter::Parameter(char *simulinkPath, char *simulinkName, uint8_t componentID,
// QGCParamID paramID, unsigned short opalID)
// : simulinkPath(new QString(simulinkPath)),
// simulinkName(new QString(simulinkName)),
// componentID(componentID),
// paramID(new QGCParamID(paramID)),
// opalID(opalID)
//
//{
//}
Parameter::Parameter(QString simulinkPath, QString simulinkName, uint8_t componentID,
QGCParamID paramID, unsigned short opalID) QGCParamID paramID, unsigned short opalID)
: simulinkPath(new QString(simulinkPath)), : simulinkPath(new QString(simulinkPath)),
simulinkName(new QString(simulinkName)), simulinkName(new QString(simulinkName)),

9
src/comm/Parameter.h

@ -46,8 +46,13 @@ namespace OpalRT
class Parameter class Parameter
{ {
public: public:
Parameter(char *simulinkPath = "", // Parameter(char *simulinkPath = "",
char *simulinkName = "", // char *simulinkName = "",
// uint8_t componentID = 0,
// QGCParamID paramID = QGCParamID(),
// unsigned short opalID = 0);
Parameter(QString simulinkPath = QString(),
QString simulinkName = QString(),
uint8_t componentID = 0, uint8_t componentID = 0,
QGCParamID paramID = QGCParamID(), QGCParamID paramID = QGCParamID(),
unsigned short opalID = 0); unsigned short opalID = 0);

198
src/comm/ParameterList.cc

@ -34,9 +34,16 @@ ParameterList::ParameterList()
:params(new QMap<int, QMap<QGCParamID, Parameter> >), :params(new QMap<int, QMap<QGCParamID, Parameter> >),
paramList(new QList<QList<Parameter*> >()) paramList(new QList<QList<Parameter*> >())
{ {
// params = new QMap<int, QMap<QGCParamID, Parameter> >;
/* Populate the map with parameter names. There is no elegant way of doing this so all QDir settingsDir = QDir(qApp->applicationDirPath());
if (settingsDir.dirName() == "bin")
settingsDir.cdUp();
settingsDir.cd("settings");
QString filename(settingsDir.path() + "/ParameterList.xml");
if ((QFile::exists(filename)) && open(filename))
{
/* Populate the map with parameter names. There is no elegant way of doing this so all
parameter paths and names must be known at compile time and defined here. parameter paths and names must be known at compile time and defined here.
Note: This function is written in a way that calls a lot of copy constructors and is Note: This function is written in a way that calls a lot of copy constructors and is
therefore not particularly efficient. However since it is only called once memory therefore not particularly efficient. However since it is only called once memory
@ -44,58 +51,58 @@ ParameterList::ParameterList()
parameters. parameters.
When defining the path, the trailing slash is necessary When defining the path, the trailing slash is necessary
*/ */
Parameter *p; // Parameter *p;
/* Component: Navigation Filter */ // /* Component: Navigation Filter */
p = new Parameter("avionics_src/sm_ampro/NAV_FILT_INIT/", // p = new Parameter("avionics_src/sm_ampro/NAV_FILT_INIT/",
"Value", // "Value",
OpalRT::NAV_ID, // OpalRT::NAV_ID,
QGCParamID("NAV_FILT_INIT")); // QGCParamID("NAV_FILT_INIT"));
(*params)[OpalRT::NAV_ID].insert(p->getParamID(), *p); // (*params)[OpalRT::NAV_ID].insert(p->getParamID(), *p);
delete p; // delete p;
//
p = new Parameter("avionics_src/sm_ampro/Gain/", // p = new Parameter("avionics_src/sm_ampro/Gain/",
"Gain", // "Gain",
OpalRT::NAV_ID, // OpalRT::NAV_ID,
QGCParamID("TEST_OUTP_GAIN")); // QGCParamID("TEST_OUTP_GAIN"));
(*params)[OpalRT::NAV_ID].insert(p->getParamID(), *p); // (*params)[OpalRT::NAV_ID].insert(p->getParamID(), *p);
delete p; // delete p;
//
/* Component: Log Facility */ // /* Component: Log Facility */
p = new Parameter("avionics_src/sm_ampro/LOG_FILE_ON/", // p = new Parameter("avionics_src/sm_ampro/LOG_FILE_ON/",
"Value", // "Value",
OpalRT::LOG_ID, // OpalRT::LOG_ID,
QGCParamID("LOG_FILE_ON")); // QGCParamID("LOG_FILE_ON"));
(*params)[OpalRT::LOG_ID].insert(p->getParamID(), *p); // (*params)[OpalRT::LOG_ID].insert(p->getParamID(), *p);
delete p; // delete p;
/* Get a list of the available parameters from opal-rt */ /* Get a list of the available parameters from opal-rt */
QMap<QString, unsigned short> *opalParams = new QMap<QString, unsigned short>; QMap<QString, unsigned short> *opalParams = new QMap<QString, unsigned short>;
getParameterList(opalParams); getParameterList(opalParams);
/* Iterate over the parameters we want to use in qgc and populate their ids */ /* Iterate over the parameters we want to use in qgc and populate their ids */
QMap<int, QMap<QGCParamID, Parameter> >::iterator componentIter; QMap<int, QMap<QGCParamID, Parameter> >::iterator componentIter;
QMap<QGCParamID, Parameter>::iterator paramIter; QMap<QGCParamID, Parameter>::iterator paramIter;
QString s; QString s;
for (componentIter = params->begin(); componentIter != params->end(); ++componentIter) for (componentIter = params->begin(); componentIter != params->end(); ++componentIter)
{
paramList->append(QList<Parameter*>());
for (paramIter = (*componentIter).begin(); paramIter != (*componentIter).end(); ++paramIter)
{ {
paramList->last().append(paramIter.operator ->()); paramList->append(QList<Parameter*>());
s = (*paramIter).getSimulinkPath() + (*paramIter).getSimulinkName(); for (paramIter = (*componentIter).begin(); paramIter != (*componentIter).end(); ++paramIter)
if (opalParams->contains(s))
{
(*paramIter).setOpalID(opalParams->value(s));
// qDebug() << __FILE__ << " Line:" << __LINE__ << ": Successfully added " << s;
}
else
{ {
qWarning() << __FILE__ << " Line:" << __LINE__ << ": " << s << " was not found in param list"; paramList->last().append(paramIter.operator ->());
s = (*paramIter).getSimulinkPath() + (*paramIter).getSimulinkName();
if (opalParams->contains(s))
{
(*paramIter).setOpalID(opalParams->value(s));
// qDebug() << __FILE__ << " Line:" << __LINE__ << ": Successfully added " << s;
}
else
{
qWarning() << __FILE__ << " Line:" << __LINE__ << ": " << s << " was not found in param list";
}
} }
} }
delete opalParams;
} }
delete opalParams;
} }
ParameterList::~ParameterList() ParameterList::~ParameterList()
@ -245,3 +252,96 @@ int ParameterList::count()
count += (*iter).count(); count += (*iter).count();
return count; return count;
} }
/* Functions related to reading the xml config file */
bool ParameterList::open(QString filename)
{
QFile paramFile(filename);
if (!paramFile.exists())
{
/// \todo open dialog box (maybe: that could also go in comm config window)
return false;
}
if (!paramFile.open(QIODevice::ReadOnly))
{
return false;
}
read(&paramFile);
return true;
}
bool ParameterList::read(QIODevice *device)
{
QDomDocument *paramConfig = new QDomDocument();
QString errorStr;
int errorLine;
int errorColumn;
if (!paramConfig->setContent(device, true, &errorStr, &errorLine,
&errorColumn))
{
qDebug() << "Error reading XML Parameter File on line: " << errorLine << errorStr;
return false;
}
QDomElement root = paramConfig->documentElement();
if (root.tagName() != "ParameterList") {
qDebug() << __FILE__ << __LINE__ << "This is not a parameter list xml file";
return false;
}
QDomElement child = root.firstChildElement("Block");
while (!child.isNull())
{
parseBlock(child);
child = child.nextSiblingElement("Block");
}
delete paramConfig;
return true;
}
void ParameterList::parseBlock(const QDomElement &block)
{
QDomNodeList paramList;
QDomElement e;
Parameter *p;
SubsystemIds id;
if (block.attribute("name") == "Navigation")
id = OpalRT::NAV_ID;
else if (block.attribute("name") == "Controller")
id = OpalRT::CONTROLLER_ID;
else if (block.attribute("name") == "ServoOutputs")
id = OpalRT::SERVO_OUTPUTS;
else if (block.attribute("name") == "ServoInputs")
id = OpalRT::SERVO_INPUTS;
paramList = block.elementsByTagName("Parameter");
for (int i=0; i < paramList.size(); ++i)
{
e = paramList.item(i).toElement();
if (e.hasAttribute("SimulinkPath") &&
e.hasAttribute("SimulinkParameterName") &&
e.hasAttribute("QGCParamID"))
{
p = new Parameter(e.attribute("SimulinkPath"),
e.attribute("SimulinkParameterName"),
static_cast<uint8_t>(id),
QGCParamID(e.attribute("QGCParamID")));
(*params)[id].insert(p->getParamID(), *p);
delete p;
}
else
{
qDebug() << __FILE__ << ":" << __LINE__ << ": error in xml doc";
}
}
}

19
src/comm/ParameterList.h

@ -26,6 +26,11 @@ This file is part of the QGROUNDCONTROL project
#include <QMap> #include <QMap>
#include <QVector> #include <QVector>
#include <QIODevice>
#include <QFile>
#include <QDir>
#include <QApplication>
#include <QtXml>
#include "mavlink_types.h" #include "mavlink_types.h"
#include "QGCParamID.h" #include "QGCParamID.h"
@ -83,7 +88,6 @@ namespace OpalRT
qDebug() << "PID_GAIN is at index " << index; qDebug() << "PID_GAIN is at index " << index;
\endcode \endcode
*/ */
int indexOf(const Parameter& p); int indexOf(const Parameter& p);
bool contains(int compid, QGCParamID paramid) const {return (*params)[compid].contains(paramid);} bool contains(int compid, QGCParamID paramid) const {return (*params)[compid].contains(paramid);}
@ -120,6 +124,19 @@ namespace OpalRT
\param[out] opalParams Map of parameter paths/names to ids which are valid in Opal-RT \param[out] opalParams Map of parameter paths/names to ids which are valid in Opal-RT
*/ */
void getParameterList(QMap<QString, unsigned short>* opalParams); void getParameterList(QMap<QString, unsigned short>* opalParams);
/**
Open a file for reading in the xml config data
*/
bool open(QString filename=QString());
/**
Attempt to read XML configuration data from device
\param[in] the device to read the xml data from
\return true if the configuration was read successfully, false otherwise
*/
bool read(QIODevice *device);
void parseBlock(const QDomElement &block);
}; };
} }
#endif // PARAMETERLIST_H #endif // PARAMETERLIST_H

25
src/comm/ParameterList.xml

@ -1,25 +0,0 @@
<ParameterList version="0.1">
<!--Parameters related to the navigation block -->
<Navigation>
<Parameter>
<SimulinkPath>avionics_src/sm_ampro/NAV_FILT_INIT/</SimulinkPath>
<SimulinkParameterName>Value</SimulinkParameterName>
<QGCParamID>NAV_FILT_INIT</QGCParamID>
</Parameter>
</Navigation>
<!--Parameters related to the controller block -->
<Controller>
</Controller>
<!-- Paremters for the Pilot Input/Raw RC block -->
<ServoInputs>
</ServoInputs>
<!-- Parameters for the servo output block -->
<ServoOutputs>
</ServoOutputs>
</ParameterList>

44
src/ui/MainWindow.ui

@ -38,7 +38,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1000</width> <width>1000</width>
<height>22</height> <height>23</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuMGround"> <widget class="QMenu" name="menuMGround">
@ -113,7 +113,7 @@
<widget class="QStatusBar" name="statusBar"/> <widget class="QStatusBar" name="statusBar"/>
<action name="actionExit"> <action name="actionExit">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/actions/system-log-out.svg</normaloff>:/images/actions/system-log-out.svg</iconset> <normaloff>:/images/actions/system-log-out.svg</normaloff>:/images/actions/system-log-out.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -125,7 +125,7 @@
</action> </action>
<action name="actionSettings"> <action name="actionSettings">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/categories/preferences-system.svg</normaloff> <normaloff>:/images/categories/preferences-system.svg</normaloff>
<normalon>:/images/categories/preferences-system.svg</normalon>:/images/categories/preferences-system.svg</iconset> <normalon>:/images/categories/preferences-system.svg</normalon>:/images/categories/preferences-system.svg</iconset>
</property> </property>
@ -138,7 +138,7 @@
</action> </action>
<action name="actionLiftoff"> <action name="actionLiftoff">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/control/launch.svg</normaloff> <normaloff>:/images/control/launch.svg</normaloff>
<normalon>:/images/control/launch.svg</normalon>:/images/control/launch.svg</iconset> <normalon>:/images/control/launch.svg</normalon>:/images/control/launch.svg</iconset>
</property> </property>
@ -148,7 +148,7 @@
</action> </action>
<action name="actionLand"> <action name="actionLand">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/control/land.svg</normaloff>:/images/control/land.svg</iconset> <normaloff>:/images/control/land.svg</normaloff>:/images/control/land.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -173,7 +173,7 @@
</action> </action>
<action name="actionAdd_Link"> <action name="actionAdd_Link">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/actions/list-add.svg</normaloff>:/images/actions/list-add.svg</iconset> <normaloff>:/images/actions/list-add.svg</normaloff>:/images/actions/list-add.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -182,7 +182,7 @@
</action> </action>
<action name="actionConfiguration"> <action name="actionConfiguration">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/categories/applications-system.svg</normaloff>:/images/categories/applications-system.svg</iconset> <normaloff>:/images/categories/applications-system.svg</normaloff>:/images/categories/applications-system.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -194,7 +194,7 @@
</action> </action>
<action name="actionEngineerView"> <action name="actionEngineerView">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/apps/utilities-system-monitor.svg</normaloff>:/images/apps/utilities-system-monitor.svg</iconset> <normaloff>:/images/apps/utilities-system-monitor.svg</normaloff>:/images/apps/utilities-system-monitor.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -203,7 +203,7 @@
</action> </action>
<action name="actionPilotView"> <action name="actionPilotView">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/status/weather-overcast.svg</normaloff>:/images/status/weather-overcast.svg</iconset> <normaloff>:/images/status/weather-overcast.svg</normaloff>:/images/status/weather-overcast.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -212,7 +212,7 @@
</action> </action>
<action name="actionStyleConfig"> <action name="actionStyleConfig">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/categories/applications-internet.svg</normaloff>:/images/categories/applications-internet.svg</iconset> <normaloff>:/images/categories/applications-internet.svg</normaloff>:/images/categories/applications-internet.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -221,7 +221,7 @@
</action> </action>
<action name="actionJoystickSettings"> <action name="actionJoystickSettings">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/devices/input-gaming.svg</normaloff>:/images/devices/input-gaming.svg</iconset> <normaloff>:/images/devices/input-gaming.svg</normaloff>:/images/devices/input-gaming.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -230,7 +230,7 @@
</action> </action>
<action name="actionOperatorView"> <action name="actionOperatorView">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/status/network-wireless-encrypted.svg</normaloff>:/images/status/network-wireless-encrypted.svg</iconset> <normaloff>:/images/status/network-wireless-encrypted.svg</normaloff>:/images/status/network-wireless-encrypted.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -242,7 +242,7 @@
</action> </action>
<action name="action3DView"> <action name="action3DView">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/categories/preferences-system.svg</normaloff>:/images/categories/preferences-system.svg</iconset> <normaloff>:/images/categories/preferences-system.svg</normaloff>:/images/categories/preferences-system.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -257,7 +257,7 @@
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/control/launch.svg</normaloff>:/images/control/launch.svg</iconset> <normaloff>:/images/control/launch.svg</normaloff>:/images/control/launch.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -269,7 +269,7 @@
</action> </action>
<action name="actionShow_full_view"> <action name="actionShow_full_view">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/status/network-transmit-receive.svg</normaloff>:/images/status/network-transmit-receive.svg</iconset> <normaloff>:/images/status/network-transmit-receive.svg</normaloff>:/images/status/network-transmit-receive.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -278,7 +278,7 @@
</action> </action>
<action name="actionShow_MAVLink_view"> <action name="actionShow_MAVLink_view">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/devices/network-wired.svg</normaloff>:/images/devices/network-wired.svg</iconset> <normaloff>:/images/devices/network-wired.svg</normaloff>:/images/devices/network-wired.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -287,7 +287,7 @@
</action> </action>
<action name="actionOnline_documentation"> <action name="actionOnline_documentation">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/categories/applications-internet.svg</normaloff>:/images/categories/applications-internet.svg</iconset> <normaloff>:/images/categories/applications-internet.svg</normaloff>:/images/categories/applications-internet.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -296,7 +296,7 @@
</action> </action>
<action name="actionShow_data_analysis_view"> <action name="actionShow_data_analysis_view">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/apps/utilities-system-monitor.svg</normaloff>:/images/apps/utilities-system-monitor.svg</iconset> <normaloff>:/images/apps/utilities-system-monitor.svg</normaloff>:/images/apps/utilities-system-monitor.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -305,7 +305,7 @@
</action> </action>
<action name="actionProject_Roadmap"> <action name="actionProject_Roadmap">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/status/software-update-available.svg</normaloff>:/images/status/software-update-available.svg</iconset> <normaloff>:/images/status/software-update-available.svg</normaloff>:/images/status/software-update-available.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -314,7 +314,7 @@
</action> </action>
<action name="actionCredits_Developers"> <action name="actionCredits_Developers">
<property name="icon"> <property name="icon">
<iconset resource="../../mavground.qrc"> <iconset>
<normaloff>:/images/categories/preferences-system.svg</normaloff>:/images/categories/preferences-system.svg</iconset> <normaloff>:/images/categories/preferences-system.svg</normaloff>:/images/categories/preferences-system.svg</iconset>
</property> </property>
<property name="text"> <property name="text">
@ -323,9 +323,7 @@
</action> </action>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<resources> <resources/>
<include location="../../mavground.qrc"/>
</resources>
<connections> <connections>
<connection> <connection>
<sender>actionExit</sender> <sender>actionExit</sender>

Loading…
Cancel
Save