1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-15 07:29:15 +01:00

GCS/Tools DocumentationHelper - Just a small app to help with my laziness

Just choose a folder and the app will fill the license header in .h and .cpp files with the proper filename and user selectable DefGroup.
Also inside the same folder it can create a namespace with user selectable name.
Additionally it can create #if #endif blocks around qDebug's ex #ifdef DEBUG_name_of_file_uppercase.
This was made for my needs, use it at your own risk.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@701 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
zedamota 2010-06-01 22:28:45 +00:00 committed by zedamota
parent 0492641f31
commit 9de32fa040
6 changed files with 806 additions and 0 deletions

View File

@ -0,0 +1,16 @@
#-------------------------------------------------
#
# Project created by QtCreator 2010-05-30T17:21:05
#
#-------------------------------------------------
TARGET = DocumentationHelper
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

View File

@ -0,0 +1,39 @@
/**
******************************************************************************
*
* @file main.cpp
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup DocumentationHelper
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

View File

@ -0,0 +1,246 @@
/**
******************************************************************************
*
* @file mainwindow.cpp
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup DocumentationHelper
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QFileDialog"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
license<<"/**";
license<<"******************************************************************************";
license<<"*";
license<<"* @file %file";
license<<"* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.";
license<<"* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.";
license<<"* @brief ";
license<<"* @see The GNU Public License (GPL) Version 3";
license<<"* @defgroup %defgroup";
license<<"* @{";
license<<"* ";
license<<"*****************************************************************************/";
license<<"/* ";
license<<"* This program is free software; you can redistribute it and/or modify ";
license<<"* it under the terms of the GNU General Public License as published by ";
license<<"* the Free Software Foundation; either version 3 of the License, or ";
license<<"* (at your option) any later version.";
license<<"* ";
license<<"* This program is distributed in the hope that it will be useful, but ";
license<<"* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ";
license<<"* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ";
license<<"* for more details.";
license<<"* ";
license<<"* You should have received a copy of the GNU General Public License along ";
license<<"* with this program; if not, write to the Free Software Foundation, Inc., ";
license<<"* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA";
license<<"*/";
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MainWindow::on_cpathBT_clicked()
{
wpath=QFileDialog::getExistingDirectory(this,"Choose Work Path");
ui->cpathL->setText("Current Path:"+wpath);
}
void MainWindow::on_goBT_clicked()
{
QDir myDir(wpath);
QStringList filter;
filter<<"*.cpp"<<"*.h";
QStringList list = myDir.entryList (filter);
foreach(QString str,list)
{
bool go=true;
if(ui->confirmCB->isChecked())
if(QMessageBox::question(this,"Process File?:",str,QMessageBox::Yes,QMessageBox::No)==QMessageBox::No)go=false;
if(go){
ui->cfileL->setText("Current File:"+str);
QFile file(wpath+QDir::separator()+str);
if (!file.open(QIODevice::ReadWrite)) {
ui->output->append("Cannot open file "+str+" for writing");
}
else
{
ui->output->append("Processing file "+str);
QTextStream out(&file);
QStringList filestr;
out.seek(0);
while(!out.atEnd()) filestr<<out.readLine();
out.seek(0);
if(ui->licenseCB->isChecked())
{
bool haslicense=false;
foreach(QString str,filestr)
{
if(str.contains("The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010"))
{
haslicense=true;
ui->output->append("File Already has License Info");
}
}
if(!haslicense)
{
bool process=true;
if(ui->confirmCB->isChecked())
if(QMessageBox::question(this,"Add license Info?:",str,QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) process=false;
if(process)
{
ui->output->append("Added License info to file");
out.seek(0);
foreach(QString line,license)
{
line.replace("%file",str);
line.replace("%defgroup",ui->defgroup->text());
out<<line<<"\r\n";
}
foreach(QString str,filestr) out<<str+"\r\n";
}
}
out.flush();
}
if(ui->nameCB->isChecked())
{
filestr.clear();
out.seek(0);
while(!out.atEnd()) filestr<<out.readLine();
out.reset();
bool process=true;
foreach(QString s,filestr)
{
if (s.contains("namespace"))
{
process=false;
ui->output->append("File Already has Namespace");
}
}
if(ui->confirmCB->isChecked() && process)
if(QMessageBox::question(this,"Create Namespace?:",str,QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) process=false;
if(process)
{
ui->output->append("Added NameSpace to file");
out.seek(0);
bool initdone=false;
for(int x=0;x<filestr.count();++x)
{
QString line=filestr.at(x);
if(!initdone)
{
if(!(line.trimmed().startsWith("#")||line.trimmed().startsWith("/")||line.trimmed().startsWith("*")||line.trimmed().isEmpty()))
{
filestr.insert(x,"namespace "+ui->namespa->text()+" {");
filestr.insert(x," ");
initdone=true;
}
}
else
{
if((QString)str.split(".").at(1)=="cpp")
{
filestr.append("}");
break;
}
else
{
for(int y=filestr.count()-1;y>1;--y)
{
QString s=filestr.at(y);
if(s.contains("#endif"))
{
filestr.insert(y,"}");
break;
}
}
break;
}
}
}
foreach(QString str,filestr) out<<str+"\r\n";
out.flush();
}
}
if(ui->bockifCB->isChecked())
{
QString genif;
ui->output->append("Creating block ifs");
filestr.clear();
out.seek(0);
while(!out.atEnd()) filestr<<out.readLine();
out.seek(0);
for(int x=1;x<filestr.count()-1;++x)
{
QString before=filestr.at(x-1);
QString actual=filestr.at(x);
QString after=filestr.at(x+1);
if(actual.trimmed().startsWith("qDebug")&&!before.contains("#ifdef")&&!before.contains("qDebug"))
{
filestr.insert(x,"#ifdef DEBUG_"+(QString)str.split(".").at(0).toUpper());
++x;
genif="#define DEBUG_"+(QString)str.split(".").at(0).toUpper();
}
if(actual.trimmed().startsWith("qDebug")&&!after.contains("qDebug")&&!after.contains("#endif"))
{
filestr.insert(x+1,"#endif //DEBUG_"+(QString)str.split(".").at(0).toUpper());
}
}
if(!genif.isEmpty())ui->textEdit->append(genif);
foreach(QString str,filestr) out<<str+"\r\n";
out.flush();
}
file.close();
}
}
}
}

View File

@ -0,0 +1,60 @@
/**
******************************************************************************
*
* @file mainwindow.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup DocumentationHelper
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDir>
#include <QStringList>
#include <QDebug>
#include <QMessageBox>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
private:
Ui::MainWindow *ui;
QString wpath;
QStringList license;
private slots:
void on_goBT_clicked();
void on_cpathBT_clicked();
};
#endif // MAINWINDOW_H

View File

@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>455</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QPushButton" name="goBT">
<property name="geometry">
<rect>
<x>110</x>
<y>10</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Go</string>
</property>
</widget>
<widget class="QLabel" name="cfileL">
<property name="geometry">
<rect>
<x>20</x>
<y>380</y>
<width>561</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Current File:</string>
</property>
</widget>
<widget class="QLabel" name="cpathL">
<property name="geometry">
<rect>
<x>20</x>
<y>360</y>
<width>561</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Current Path:</string>
</property>
</widget>
<widget class="QPushButton" name="cpathBT">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Choose Path</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>25</x>
<y>177</y>
<width>131</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Created #IF statements</string>
</property>
</widget>
<widget class="QCheckBox" name="nameCB">
<property name="geometry">
<rect>
<x>20</x>
<y>80</y>
<width>111</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Create NameSpace</string>
</property>
</widget>
<widget class="QCheckBox" name="bockifCB">
<property name="geometry">
<rect>
<x>20</x>
<y>140</y>
<width>211</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Create Block #if in qDebug Statements</string>
</property>
</widget>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>20</x>
<y>190</y>
<width>201</width>
<height>161</height>
</rect>
</property>
</widget>
<widget class="QCheckBox" name="licenseCB">
<property name="geometry">
<rect>
<x>20</x>
<y>40</y>
<width>111</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Write License Info</string>
</property>
</widget>
<widget class="QCheckBox" name="confirmCB">
<property name="geometry">
<rect>
<x>20</x>
<y>120</y>
<width>141</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Confirm Before Change</string>
</property>
</widget>
<widget class="QTextEdit" name="output">
<property name="geometry">
<rect>
<x>245</x>
<y>30</y>
<width>341</width>
<height>321</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>250</x>
<y>10</y>
<width>46</width>
<height>13</height>
</rect>
</property>
<property name="text">
<string>Output</string>
</property>
</widget>
<widget class="QLineEdit" name="defgroup">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>20</x>
<y>57</y>
<width>113</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>DefGroup</string>
</property>
</widget>
<widget class="QLineEdit" name="namespa">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>20</x>
<y>97</y>
<width>113</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>namespace</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>600</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections>
<connection>
<sender>licenseCB</sender>
<signal>toggled(bool)</signal>
<receiver>defgroup</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>43</x>
<y>80</y>
</hint>
<hint type="destinationlabel">
<x>54</x>
<y>100</y>
</hint>
</hints>
</connection>
<connection>
<sender>nameCB</sender>
<signal>toggled(bool)</signal>
<receiver>namespa</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>95</x>
<y>124</y>
</hint>
<hint type="destinationlabel">
<x>100</x>
<y>144</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -0,0 +1,179 @@
/**
******************************************************************************
*
* @file ui_mainwindow.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
* @brief
* @see The GNU Public License (GPL) Version 3
* @defgroup DocumentationHelper
* @{
*
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created: Sun 30. May 20:43:26 2010
** by: Qt User Interface Compiler version 4.6.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QCheckBox>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QTextEdit>
#include <QtGui/QToolBar>
#include <QtGui/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralWidget;
QPushButton *goBT;
QLabel *cfileL;
QLabel *cpathL;
QPushButton *cpathBT;
QLabel *label_2;
QCheckBox *nameCB;
QCheckBox *bockifCB;
QTextEdit *textEdit;
QCheckBox *licenseCB;
QCheckBox *confirmCB;
QTextEdit *output;
QLabel *label;
QLineEdit *defgroup;
QLineEdit *namespa;
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(600, 455);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
goBT = new QPushButton(centralWidget);
goBT->setObjectName(QString::fromUtf8("goBT"));
goBT->setGeometry(QRect(110, 10, 75, 23));
cfileL = new QLabel(centralWidget);
cfileL->setObjectName(QString::fromUtf8("cfileL"));
cfileL->setGeometry(QRect(20, 380, 561, 16));
QFont font;
font.setPointSize(10);
cfileL->setFont(font);
cpathL = new QLabel(centralWidget);
cpathL->setObjectName(QString::fromUtf8("cpathL"));
cpathL->setGeometry(QRect(20, 360, 561, 16));
cpathL->setFont(font);
cpathBT = new QPushButton(centralWidget);
cpathBT->setObjectName(QString::fromUtf8("cpathBT"));
cpathBT->setGeometry(QRect(20, 10, 75, 23));
label_2 = new QLabel(centralWidget);
label_2->setObjectName(QString::fromUtf8("label_2"));
label_2->setGeometry(QRect(25, 177, 131, 16));
nameCB = new QCheckBox(centralWidget);
nameCB->setObjectName(QString::fromUtf8("nameCB"));
nameCB->setGeometry(QRect(20, 80, 111, 17));
bockifCB = new QCheckBox(centralWidget);
bockifCB->setObjectName(QString::fromUtf8("bockifCB"));
bockifCB->setGeometry(QRect(20, 140, 211, 17));
textEdit = new QTextEdit(centralWidget);
textEdit->setObjectName(QString::fromUtf8("textEdit"));
textEdit->setGeometry(QRect(20, 190, 201, 161));
licenseCB = new QCheckBox(centralWidget);
licenseCB->setObjectName(QString::fromUtf8("licenseCB"));
licenseCB->setGeometry(QRect(20, 40, 111, 17));
confirmCB = new QCheckBox(centralWidget);
confirmCB->setObjectName(QString::fromUtf8("confirmCB"));
confirmCB->setGeometry(QRect(20, 120, 141, 17));
output = new QTextEdit(centralWidget);
output->setObjectName(QString::fromUtf8("output"));
output->setGeometry(QRect(245, 30, 341, 321));
label = new QLabel(centralWidget);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(250, 10, 46, 13));
defgroup = new QLineEdit(centralWidget);
defgroup->setObjectName(QString::fromUtf8("defgroup"));
defgroup->setEnabled(false);
defgroup->setGeometry(QRect(20, 57, 113, 20));
namespa = new QLineEdit(centralWidget);
namespa->setObjectName(QString::fromUtf8("namespa"));
namespa->setEnabled(false);
namespa->setGeometry(QRect(20, 97, 113, 20));
MainWindow->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 600, 21));
MainWindow->setMenuBar(menuBar);
mainToolBar = new QToolBar(MainWindow);
mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(MainWindow);
statusBar->setObjectName(QString::fromUtf8("statusBar"));
MainWindow->setStatusBar(statusBar);
retranslateUi(MainWindow);
QObject::connect(licenseCB, SIGNAL(toggled(bool)), defgroup, SLOT(setEnabled(bool)));
QObject::connect(nameCB, SIGNAL(toggled(bool)), namespa, SLOT(setEnabled(bool)));
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
goBT->setText(QApplication::translate("MainWindow", "Go", 0, QApplication::UnicodeUTF8));
cfileL->setText(QApplication::translate("MainWindow", "Current File:", 0, QApplication::UnicodeUTF8));
cpathL->setText(QApplication::translate("MainWindow", "Current Path:", 0, QApplication::UnicodeUTF8));
cpathBT->setText(QApplication::translate("MainWindow", "Choose Path", 0, QApplication::UnicodeUTF8));
label_2->setText(QApplication::translate("MainWindow", "Created #IF statements", 0, QApplication::UnicodeUTF8));
nameCB->setText(QApplication::translate("MainWindow", "Create NameSpace", 0, QApplication::UnicodeUTF8));
bockifCB->setText(QApplication::translate("MainWindow", "Create Block #if in qDebug Statements", 0, QApplication::UnicodeUTF8));
licenseCB->setText(QApplication::translate("MainWindow", "Write License Info", 0, QApplication::UnicodeUTF8));
confirmCB->setText(QApplication::translate("MainWindow", "Confirm Before Change", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("MainWindow", "Output", 0, QApplication::UnicodeUTF8));
defgroup->setText(QApplication::translate("MainWindow", "DefGroup", 0, QApplication::UnicodeUTF8));
namespa->setText(QApplication::translate("MainWindow", "namespace", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H