KML support for logs (almost finished)

This commit is contained in:
romoloman@github.com
2013-12-24 12:58:45 +01:00
parent 8c6bfb208b
commit 200ad04660
8 changed files with 499 additions and 330 deletions
+1
View File
@@ -64,6 +64,7 @@
<file>images/duplicate.png</file>
<file>images/fuses.png</file>
<file>images/list.png</file>
<file>images/maps.png</file>
<file>images/play.png</file>
<file>images/stop.png</file>
<file>images/read_eeprom_file.png</file>
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

+84 -2
View File
@@ -1,6 +1,11 @@
#include "logsdialog.h"
#include "ui_logsdialog.h"
#include "qcustomplot.h"
#if defined WIN32 || !defined __GNUC__
#include <windows.h>
#else
#include <unistd.h>
#endif
logsDialog::logsDialog(QWidget *parent) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
@@ -33,6 +38,11 @@ logsDialog::logsDialog(QWidget *parent) :
ui->customPlot->legend->setSelectedFont(legendFont);
ui->customPlot->legend->setSelectable(QCPLegend::spItems); // legend box shall not be selectable, only legend items
ui->customPlot->legend->setVisible(false);
QSettings settings("companion9x", "companion9x");
QString Path=settings.value("gePath", "").toString();
if (Path.isEmpty() || !QFile(Path).exists()) {
ui->mapsButton->hide();
}
// connect slot that ties some axis selections together (especially opposite axes):
connect(ui->customPlot, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged()));
@@ -165,6 +175,79 @@ void logsDialog::selectionChanged()
}
}
void logsDialog::on_mapsButton_clicked() {
int n = csvlog.count(); // number of points in graph
if (n==0) return;
int latcol=0, longcol=0, altcol=0, coursecol=0, speedcol=0;
int itemSelected=0.;
bool rangeSelected=false;
QSettings settings("companion9x", "companion9x");
QString gePath=settings.value("gePath", "").toString();
if (gePath.isEmpty() || !QFile(gePath).exists()) {
return;
}
for (int i=1; i<csvlog.at(0).count(); i++) {
//Long,Lat,Course,GPS Speed,GPS Alt
if (csvlog.at(0).at(i).contains("Long")) {
longcol=i;
}
if (csvlog.at(0).at(i).contains("Lat")) {
latcol=i;
}
if (csvlog.at(0).at(i).contains("GPS Alt")) {
altcol=i;
}
if (csvlog.at(0).at(i).contains("GPS Speed")) {
speedcol=i;
}
if (csvlog.at(0).at(i).contains("Course")) {
coursecol=i;
}
}
if (longcol==0 || latcol==0 || altcol==0) {
return;
}
for (int i=1; i<n; i++) {
if (ui->logTable->item(i-1,1)->isSelected()) {
rangeSelected=true;
itemSelected++;
}
}
if (itemSelected==0) {
itemSelected=n-1;
}
QString geFilename = QDir::tempPath() + "/flight.kml";
if (QFile::exists(geFilename)) {
unlink(geFilename.toAscii());
}
QFile geFile(geFilename);
if (!geFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
QMessageBox::warning(this, tr("Error"),
tr("Cannot write file %1:\n%2.")
.arg(geFilename)
.arg(geFile.errorString()));
return;
}
QTextStream outputStream(&geFile);
outputStream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://www.opengis.net/kml/2.2\" xmlns:gx=\"http://www.google.com/kml/ext/2.2\" xmlns:kml=\"http://www.opengis.net/kml/2.2\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n";
outputStream << "<Document>\n\t<name>flight.kml</name>\n\t<Placemark><name>My Flight</name>\n\t\t<LineString>\n";
outputStream << "\t\t\t<tessellate>1</tessellate>\n\t\t\t<gx:altitudeMode>relativeToGround</gx:altitudeMode>\n\t\t\t<coordinates>\n\t\t\t\t";
for (int i=1; i<n; i++) {
if ((ui->logTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
outputStream << csvlog.at(i).at(longcol) << "," << csvlog.at(i).at(latcol) << "," << csvlog.at(i).at(altcol) << " " ;
}
}
outputStream << "\n\t\t\t</coordinates>\n\t\t</LineString>\n\t</Placemark>\n</Document>\n</kml>\n";
geFile.close();
QStringList parameters;
parameters << geFilename;
QProcess *process = new QProcess(this);
process->startDetached(gePath, parameters);
}
void logsDialog::mousePress()
{
// if an axis is selected, only allow the direction of that axis to be dragged
@@ -293,8 +376,7 @@ void logsDialog::plotValue(int index, int plot, int numplots)
}
}
}
for (int i=1; i<n; i++)
{
for (int i=1; i<n; i++) {
if ((ui->logTable->item(i-1,1)->isSelected() &&rangeSelected) || !rangeSelected) {
double tmp;
QString tstamp=csvlog.at(i).at(0)+QString(" ")+csvlog.at(i).at(1);
+1
View File
@@ -34,6 +34,7 @@ private slots:
// void graphClicked(QCPAbstractPlottable *plottable);
void on_fileOpen_BT_clicked();
void on_sessions_CB_currentIndexChanged(int index);
void on_mapsButton_clicked();
private:
QList<QStringList> csvlog;
+74 -39
View File
@@ -20,7 +20,7 @@
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout" rowstretch="0,1,0,0,0">
<layout class="QGridLayout" name="gridLayout" rowstretch="0,1,0,0,0,0,0,0">
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@@ -46,43 +46,6 @@
</item>
</layout>
</item>
<item row="1" column="0" rowspan="4">
<widget class="QTableWidget" name="FieldsTW">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="autoScrollMargin">
<number>0</number>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showGrid">
<bool>false</bool>
</property>
<property name="sortingEnabled">
<bool>false</bool>
</property>
<property name="columnCount">
<number>0</number>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
<item row="1" column="1">
<widget class="QFrame" name="frame_2">
<property name="sizePolicy">
@@ -195,7 +158,7 @@
</item>
</layout>
</item>
<item row="4" column="1">
<item row="4" column="1" rowspan="4">
<widget class="QTableWidget" name="logTable">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
@@ -238,6 +201,78 @@
</attribute>
</widget>
</item>
<item row="1" column="0" rowspan="6">
<widget class="QTableWidget" name="FieldsTW">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="autoScrollMargin">
<number>0</number>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showGrid">
<bool>false</bool>
</property>
<property name="sortingEnabled">
<bool>false</bool>
</property>
<property name="columnCount">
<number>0</number>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
<item row="7" column="0">
<widget class="QPushButton" name="mapsButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>57</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="companion9x.qrc">
<normaloff>:/images/maps.png</normaloff>:/images/maps.png</iconset>
</property>
<property name="iconSize">
<size>
<width>120</width>
<height>57</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
+25 -1
View File
@@ -76,6 +76,9 @@ void preferencesDialog::baseFirmwareChanged()
ui->voice_dnld->setEnabled(true);
ui->sdPathButton->setEnabled(true);
ui->sdPath->setEnabled(true);
ui->ge_label->show();
ui->ge_lineedit->show();
ui->ge_pathButton->show();
} else {
ui->voiceLabel->hide();
ui->voiceCombo->hide();
@@ -83,6 +86,9 @@ void preferencesDialog::baseFirmwareChanged()
ui->sdPathButton->hide();
ui->sdPath->hide();
ui->sdPathLabel->hide();
ui->ge_label->hide();
ui->ge_lineedit->hide();
ui->ge_pathButton->hide();
}
populateFirmwareOptions(firmware);
int width=firmware->eepromInterface->getCapability(LCDWidth);
@@ -268,6 +274,7 @@ void preferencesDialog::writeValues()
settings.setValue("backLight", ui->backLightColor->currentIndex());
settings.setValue("libraryPath", ui->libraryPath->text());
settings.setValue("sdPath", ui->sdPath->text());
settings.setValue("gePath", ui->ge_lineedit->text());
settings.setValue("embedded_splashes", ui->splashincludeCB->currentIndex());
if (!ui->SplashFileName->text().isEmpty()) {
QImage Image = ui->imageLabel->pixmap()->toImage();
@@ -342,6 +349,9 @@ void preferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware)
ui->sdPathButton->show();
ui->sdPath->show();
ui->sdPathLabel->show();
ui->ge_label->show();
ui->ge_lineedit->show();
ui->ge_pathButton->show();
if (current_firmware_variant.id.contains(opt.name) ||firmware->voice) {
ui->voiceLabel->setEnabled(true);
ui->voiceCombo->setEnabled(true);
@@ -408,6 +418,10 @@ void preferencesDialog::initSettings()
if (QDir(Path).exists()) {
ui->sdPath->setText(Path);
}
Path=settings.value("gePath", "").toString();
if (QFile(Path).exists()) {
ui->ge_lineedit->setText(Path);
}
Path=settings.value("backupPath", "").toString();
if (!Path.isEmpty()) {
if (QDir(Path).exists()) {
@@ -519,7 +533,7 @@ void preferencesDialog::on_fw_dnld_clicked()
void preferencesDialog::on_voice_dnld_clicked()
{
ui->ProfSave_PB->setEnabled(true);
QString url="http://93.51.182.154/voices/";
QString url="http://fw.opentx.it/voices/";
FirmwareVariant variant = getFirmwareVariant();
url.append(QString("%1/%2/").arg(variant.firmware->id).arg(ui->voiceCombo->currentText()));
QDesktopServices::openUrl(url);
@@ -574,6 +588,15 @@ void preferencesDialog::on_backupPathButton_clicked()
ui->backupEnable->setEnabled(true);
}
void preferencesDialog::on_ge_pathButton_clicked()
{
QSettings settings("companion9x", "companion9x");
QString fileName = QFileDialog::getOpenFileName(this, tr("Select Google Earth executable"),ui->ge_lineedit->text());
if (!fileName.isEmpty()) {
ui->ge_lineedit->setText(fileName);
}
}
void preferencesDialog::on_splashLibraryButton_clicked()
{
QString fileName;
@@ -655,6 +678,7 @@ void preferencesDialog::on_ProfSave_PB_clicked()
settings.setValue("rename_firmware_files", ui->renameFirmware->isChecked());
settings.setValue("sdPath", ui->sdPath->text());
settings.setValue("SplashFileName", ui->SplashFileName->text());
settings.setValue("gePath", ui->ge_lineedit->text());
if (ui->imageLabel->pixmap()) {
QImage Image = ui->imageLabel->pixmap()->toImage();
settings.setValue("SplashImage", image2qstring(Image));
+1
View File
@@ -48,6 +48,7 @@ private slots:
void on_snapshotPathButton_clicked();
void on_snapshotClipboardCKB_clicked();
void on_backupPathButton_clicked();
void on_ge_pathButton_clicked();
void on_sdPathButton_clicked();
void on_splashLibraryButton_clicked();
void on_checkFWUpdates_clicked();
+313 -288
View File
@@ -39,6 +39,19 @@
<property name="margin">
<number>4</number>
</property>
<item row="7" column="0">
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Show Splash Screen</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="5">
<widget class="Line" name="line">
<property name="orientation">
@@ -261,253 +274,7 @@
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Show Splash Screen</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Custom TX splash screen</string>
</property>
</widget>
</item>
<item row="31" column="1" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="joystickChkB">
<property name="text">
<string>Enable</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="joystickCB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="joystickcalButton">
<property name="text">
<string>Calibrate</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="10" column="1" colspan="3">
<layout class="QGridLayout" name="gridLayout_2">
<property name="verticalSpacing">
<number>1</number>
</property>
<item row="0" column="1">
<widget class="QPushButton" name="libraryPathButton">
<property name="text">
<string>Open Folder</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLineEdit" name="libraryPath">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="20" column="1" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="FwInfo">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>FwInfo</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="checkFWUpdates">
<property name="text">
<string>Check for updates</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_9">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Personal splash library</string>
</property>
</widget>
</item>
<item row="33" column="0" colspan="5">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="22" column="1" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,0">
<item>
<widget class="QLabel" name="label_12">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Ask for flashing after Download</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="burnFirmware">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="28" column="1" colspan="4">
<layout class="QGridLayout" name="gridLayout_6" columnstretch="0,0,1,0,0">
<item row="1" column="4">
<widget class="QPushButton" name="export_PB">
<property name="text">
<string>Export Profile</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="ProfSave_PB">
<property name="text">
<string>Save Profile</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QSpinBox" name="ProfSlot_SB">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10</number>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="import_PB">
<property name="text">
<string>Import Profile</string>
</property>
</widget>
</item>
<item row="0" column="2" colspan="2">
<widget class="QLineEdit" name="ProfName_LE"/>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Profile Name</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Language (requires restart)</string>
</property>
</widget>
</item>
<item row="27" column="4">
<item row="28" column="4">
<widget class="QComboBox" name="channelorderCB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@@ -651,7 +418,271 @@ This is used by the templated to determine which channel goes to what number out
</item>
</widget>
</item>
<item row="27" column="0">
<item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Custom TX splash screen</string>
</property>
</widget>
</item>
<item row="32" column="1" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="joystickChkB">
<property name="text">
<string>Enable</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="joystickCB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="joystickcalButton">
<property name="text">
<string>Calibrate</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="10" column="1" colspan="3">
<layout class="QGridLayout" name="gridLayout_2">
<property name="verticalSpacing">
<number>1</number>
</property>
<item row="0" column="1">
<widget class="QPushButton" name="libraryPathButton">
<property name="text">
<string>Open Folder</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLineEdit" name="libraryPath">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="21" column="1" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="FwInfo">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>FwInfo</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="checkFWUpdates">
<property name="text">
<string>Check for updates</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_9">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Personal splash library</string>
</property>
</widget>
</item>
<item row="34" column="0" colspan="5">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="23" column="1" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,0">
<item>
<widget class="QLabel" name="label_12">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Ask for flashing after Download</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="burnFirmware">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="29" column="1" colspan="4">
<layout class="QGridLayout" name="gridLayout_6" columnstretch="0,0,1,0,0">
<item row="1" column="4">
<widget class="QPushButton" name="export_PB">
<property name="text">
<string>Export Profile</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="ProfSave_PB">
<property name="text">
<string>Save Profile</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QSpinBox" name="ProfSlot_SB">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10</number>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="import_PB">
<property name="text">
<string>Import Profile</string>
</property>
</widget>
</item>
<item row="0" column="2" colspan="2">
<widget class="QLineEdit" name="ProfName_LE"/>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Profile Name</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Language (requires restart)</string>
</property>
</widget>
</item>
<item row="13" column="1" colspan="4">
<layout class="QGridLayout" name="gridLayout_8">
<property name="verticalSpacing">
<number>1</number>
</property>
<item row="0" column="2">
<widget class="QPushButton" name="snapshotPathButton">
<property name="text">
<string>Open Folder</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="snapshotPath">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="snapshotClipboardCKB">
<property name="text">
<string>Use clipboard only</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="28" column="0">
<widget class="QLabel" name="label_14">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
@@ -664,7 +695,7 @@ This is used by the templated to determine which channel goes to what number out
</property>
</widget>
</item>
<item row="27" column="3">
<item row="28" column="3">
<widget class="QLabel" name="label_13">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
@@ -680,7 +711,7 @@ This is used by the templated to determine which channel goes to what number out
</property>
</widget>
</item>
<item row="27" column="1" colspan="2">
<item row="28" column="1" colspan="2">
<widget class="QComboBox" name="stickmodeCB">
<property name="whatsThis">
<string>Mode selection:
@@ -728,7 +759,7 @@ Mode 4:
</item>
</widget>
</item>
<item row="31" column="0">
<item row="32" column="0">
<widget class="QLabel" name="label_11">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
@@ -777,7 +808,7 @@ Mode 4:
</property>
</widget>
</item>
<item row="28" column="0">
<item row="29" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Profile slot</string>
@@ -816,7 +847,7 @@ Mode 4:
</item>
</layout>
</item>
<item row="23" column="1" colspan="4">
<item row="24" column="1" colspan="4">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -832,7 +863,7 @@ Mode 4:
</property>
</spacer>
</item>
<item row="21" column="1" colspan="4">
<item row="22" column="1" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_11" stretch="1,0">
<item>
<widget class="QLabel" name="label_18">
@@ -859,7 +890,7 @@ Mode 4:
</item>
</layout>
</item>
<item row="17" column="1" colspan="4">
<item row="18" column="1" colspan="4">
<layout class="QGridLayout" name="gridLayout_5" columnstretch="1,0,0,0,0">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
@@ -950,7 +981,7 @@ May be different from firmware language</string>
</item>
</layout>
</item>
<item row="17" column="0">
<item row="18" column="0">
<layout class="QGridLayout" name="gridLayout_7">
<item row="0" column="0">
<widget class="QLabel" name="label_6">
@@ -997,37 +1028,6 @@ May be different from firmware language</string>
</property>
</widget>
</item>
<item row="13" column="1" colspan="4">
<layout class="QGridLayout" name="gridLayout_8">
<property name="verticalSpacing">
<number>1</number>
</property>
<item row="0" column="2">
<widget class="QPushButton" name="snapshotPathButton">
<property name="text">
<string>Open Folder</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="snapshotPath">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="snapshotClipboardCKB">
<property name="text">
<string>Use clipboard only</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="sizePolicy">
@@ -1048,7 +1048,7 @@ May be different from firmware language</string>
</property>
</widget>
</item>
<item row="19" column="1" colspan="4">
<item row="20" column="1" colspan="4">
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0,0,0,0,0">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
@@ -1601,6 +1601,31 @@ May be different from firmware language</string>
</item>
</layout>
</item>
<item row="17" column="1" colspan="4">
<layout class="QHBoxLayout" name="ge_layout">
<item>
<widget class="QLineEdit" name="ge_lineedit">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="ge_pathButton">
<property name="text">
<string>Find Executable</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="17" column="0">
<widget class="QLabel" name="ge_label">
<property name="text">
<string>Google Earth Executable</string>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>