Change to Qt toolkit and Qt Creator

This commit is contained in:
Travis Hunter 2023-02-19 19:06:27 -07:00
parent 77bd02cf79
commit 67b5a3effa
51 changed files with 43961 additions and 911 deletions

View File

@ -1,42 +0,0 @@
cmake_minimum_required(VERSION 3.0.0)
project(
wxRocket
VERSION 0.1.0
DESCRIPTION "Model Rocket Simulation Application"
LANGUAGES CXX)
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
include_directories(${PROJECT_SOURCE_DIR}/src)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 20)
# Need to set specific options for specific compilers here.
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# No special flags yet
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# No special flags yet
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# Not sure... Anyone that uses MSVC can help here
endif()
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
include(CTest)
#find_package(Doxygen)
#if(Doxygen_FOUND)
# add_subdirectory(docs)
#else()
# message(STATUS "Doxygen not found, not building docs")
#endif()
endif()
enable_testing()
add_subdirectory(src/gui)
add_subdirectory(src/sim)
add_subdirectory(src/sim/tests)
add_subdirectory(src/utils)
add_subdirectory(src/utils/math)
add_subdirectory(src/model)

15
QtRocket.cpp Normal file
View File

@ -0,0 +1,15 @@
#include "QtRocket.h"
#include "ui_QtRocket.h"
QtRocket::QtRocket(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::QtRocket)
{
ui->setupUi(this);
}
QtRocket::~QtRocket()
{
delete ui;
}

21
QtRocket.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef QTROCKET_H
#define QTROCKET_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class QtRocket; }
QT_END_NAMESPACE
class QtRocket : public QMainWindow
{
Q_OBJECT
public:
QtRocket(QWidget *parent = nullptr);
~QtRocket();
private:
Ui::QtRocket *ui;
};
#endif // QTROCKET_H

110
QtRocket.ui Normal file
View File

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QtRocket</class>
<widget class="QMainWindow" name="QtRocket">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1031</width>
<height>694</height>
</rect>
</property>
<property name="windowTitle">
<string>QtRocket</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout" stretch="2">
<item>
<widget class="QSplitter" name="splitter_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QSplitter" name="splitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>2</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QTreeView" name="treeView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>30</x>
<y>20</y>
<width>80</width>
<height>25</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>30</x>
<y>70</y>
<width>80</width>
<height>25</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
</widget>
<widget class="QCustomPlot" name="widget_2" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1031</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>QCustomPlot</class>
<extends>QWidget</extends>
<header>qcustomplot.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

27
main.cpp Normal file
View File

@ -0,0 +1,27 @@
#include "QtRocket.h"
#include <QApplication>
#include <QLocale>
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// Start translation component.
// TODO: Only support US English at the moment. Anyone want to help translate?
QTranslator translator;
const QStringList uiLanguages = QLocale::system().uiLanguages();
for (const QString &locale : uiLanguages) {
const QString baseName = "qtrocket_" + QLocale(locale).name();
if (translator.load(":/i18n/" + baseName)) {
a.installTranslator(&translator);
break;
}
}
// Go!
QtRocket w;
w.show();
return a.exec();
}

67
model/Motor.h Normal file
View File

@ -0,0 +1,67 @@
#ifndef MODEL_MOTOR_H
#define MODEL_MOTOR_H
// For boost serialization. We're using boost::serialize to save
// and load Motor data to file
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <string>
#include "Thrustcurve.h"
#include "MotorCase.h"
class Motor
{
public:
Motor();
~Motor();
private:
// Needed for boost serialize
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version);
std::string manufacturer;
std::string impulseClass; // 'A', 'B', '1/2A', 'M', etc
std::string propType;
bool sparky;
// Thrust parameters
double totalImpulse;
double avgImpulse;
int delay;
double burnTime;
double isp;
MotorCase motorCase;
Thrustcurve thrust;
// Physical dimensions
int diameter;
int length;
double totalWeight;
double propWeight;
};
template<class Archive>
void Motor::serialize(Archive& ar, const unsigned int version)
{
ar & manufacturer;
ar & impulseClass;
ar & propType;
ar & sparky;
ar & totalImpulse;
ar & avgImpulse;
ar & delay;
ar & burnTime;
ar & isp;
ar & motorCase;
ar & thrust;
ar & diameter;
ar & length;
ar & totalWeight;
ar & propWeight;
}
#endif // MODEL_MOTOR_H

View File

@ -10,7 +10,7 @@ Thrustcurve::Thrustcurve(std::vector<std::pair<double, double>>& tc)
thrustCurve.end(),
[](const auto& a, const auto& b)
{
return a.first < a.second;
return a.first < b.first;
})->first;
}
@ -52,9 +52,10 @@ double Thrustcurve::getThrust(double t)
// the start of the interval.
double tStart = std::prev(i)->first;
double thrustStart = std::prev(i)->second;
double thrustEnd = i->second;
double tEnd = i->first;
double slope = (i->second - std::prev(i)->second) /
(i->first - std::prev(i)->first);
double slope = (thrustEnd - thrustStart) /
(tEnd - tStart);
return thrustStart + (t - tStart) * slope;
}

View File

@ -4,6 +4,9 @@
#include <vector>
#include <tuple>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
// No namespace. Maybe should be, but this is a model rocket program
// so model is sort of implied? Or I'm just making excuses for being lazy
@ -29,10 +32,23 @@ public:
* @param t The time in seconds. For t > burntime or < 0, this will return 0.0
* @return Thrust in Newtons
*/
double getThrust(double t);
double getThrust(double t);
private:
// We're using boost::serialize for data storage and retrieval
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version);
std::vector<std::pair<double, double>> thrustCurve;
double maxTime;
};
template<class Archive>
void Thrustcurve::serialize(Archive& ar, const unsigned int version)
{
ar & maxTime;
ar & thrustCurve;
}
#endif // MODEL_THRUSTCURVE_H

35529
qcustomplot.cpp Normal file

File diff suppressed because it is too large Load Diff

7774
qcustomplot.h Normal file

File diff suppressed because it is too large Load Diff

62
qtrocket.pro Normal file
View File

@ -0,0 +1,62 @@
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
QtRocket.cpp \
model/Motor.cpp \
model/MotorCase.cpp \
model/Thrustcurve.cpp \
qcustomplot.cpp \
sim/AtmosphericModel.cpp \
sim/GravityModel.cpp \
sim/SphericalGeoidModel.cpp \
sim/SphericalGravityModel.cpp \
sim/USStandardAtmosphere.cpp \
sim/WindModel.cpp \
utils/BinMap.cpp \
utils/CurlConnection.cpp \
utils/ThrustCurveAPI.cpp
HEADERS += \
QtRocket.h \
model/Motor.h \
model/MotorCase.h \
model/Thrustcurve.h \
qcustomplot.h \
sim/AtmosphericModel.h \
sim/GeoidModel.h \
sim/GravityModel.h \
sim/SphericalGeoidModel.h \
sim/SphericalGravityModel.h \
sim/USStandardAtmosphere.h \
sim/WindModel.h \
utils/BinMap.h \
utils/CurlConnection.h \
utils/ThrustCurveAPI.h \
utils/math/Constants.h
FORMS += \
QtRocket.ui
TRANSLATIONS += \
qtrocket_en_US.ts
CONFIG += lrelease
CONFIG += embed_translations
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
unix: CONFIG += link_pkgconfig
unix: PKGCONFIG += libcurl
unix: PKGCONFIG += fmt

263
qtrocket.pro.user Normal file
View File

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 9.0.1, 2023-02-19T09:59:41. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{126c64d7-12e8-468a-ad3f-06f0fbdaeca1}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">1</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">6</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{38a78df4-96d3-405c-9118-cde527250e62}</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/travis/Programming/qtrocket/../build-qtrocket-Desktop-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/travis/Programming/build-qtrocket-Desktop-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/travis/Programming/qtrocket/../build-qtrocket-Desktop-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/travis/Programming/build-qtrocket-Desktop-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/travis/Programming/qtrocket/../build-qtrocket-Desktop-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/travis/Programming/build-qtrocket-Desktop-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/travis/Programming/qtrocket/qtrocket.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/travis/Programming/qtrocket/qtrocket.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/travis/Programming/build-qtrocket-Desktop-Debug</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

3
qtrocket_en_US.ts Normal file
View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US"></TS>

View File

@ -1,7 +0,0 @@
find_package(wxWidgets REQUIRED gl core base)
include(${wxWidgets_USE_FILE})
add_executable(wxRocket
main.cpp
MainWindow.cpp)
target_link_libraries(wxRocket PRIVATE sim model utils math ${wxWidgets_LIBRARIES})

View File

@ -1,108 +0,0 @@
#include "MainWindow.h"
#include <wx/artprov.h>
#include <wx/splitter.h>
#include "images/rocket16x16.xpm"
#include "images/rocket32x32.xpm"
namespace gui
{
MainWindowFrame::MainWindowFrame()
: wxFrame(nullptr, wxID_ANY, "wxRocket", wxDefaultPosition, wxDefaultSize)
{
// Set the icon
wxIcon appIcon(rocket32x32);
wxMask* appIconMask = new wxMask(appIcon, wxColor(0, 0, 0));
appIcon.SetMask(appIconMask);
this->SetIcon(appIcon);
// Add a File menu
wxMenu* fileMenu = new wxMenu;
fileMenu->Append(wxID_NEW);
fileMenu->AppendSeparator();
fileMenu->Append(wxID_EXIT);
// Add an Edit menu
wxMenu* editMenu = new wxMenu;
// Add a Tools menu
wxMenu* toolsMenu = new wxMenu;
wxBitmap launchItemIcon = wxBitmap(rocket16x16);
wxMask* liMask = new wxMask(launchItemIcon, wxColor(0, 0, 0));
launchItemIcon.SetMask(liMask);
wxMenuItem* launchItem = toolsMenu->Append(wxID_ANY, _("&Launch"));
// Add a Help menu
wxMenu* helpMenu = new wxMenu;
helpMenu->Append(wxID_ABOUT);
wxMenuBar* menuBar = new wxMenuBar;
menuBar->Append(fileMenu, _("&File"));
menuBar->Append(editMenu, _("&Edit"));
menuBar->Append(toolsMenu, _("&Tools"));
menuBar->Append(helpMenu, _("&Help"));
SetMenuBar(menuBar);
CreateStatusBar();
SetStatusText(_("Welcome to wxRocket!"));
wxToolBar* toolbar = CreateToolBar();
toolbar->AddTool(wxID_NEW, _("New"), wxArtProvider::GetBitmap("wxART_NEW"));
toolbar->AddTool(launchItem->GetId(), _("Launch Rocket"), launchItemIcon);
toolbar->Realize();
// Create the layout
// Create the splitter window, then we can add panels to it
wxSplitterWindow* mainSplitter = new wxSplitterWindow(this,
wxID_ANY,
wxDefaultPosition,
wxDefaultSize,
wxSP_BORDER | wxSP_LIVE_UPDATE);
wxSplitterWindow* designSplitter = new wxSplitterWindow(mainSplitter,
wxID_ANY,
wxDefaultPosition,
wxDefaultSize,
wxSP_BORDER | wxSP_LIVE_UPDATE);
designSplitter->SetMinimumPaneSize(200);
// NOTE, we never call delete manually on the panel since setting the parent pointer (this)
// will put the onus on the parent to manage the resource. It'll get deleted
// when the parent gets deleted. In this case the MainWindowFrame
wxPanel* rocketTreePanel = new wxPanel(designSplitter,
wxID_ANY,
wxDefaultPosition,
wxSize(200, 100));
rocketTreePanel->SetBackgroundColour(wxColor(100, 100, 200));
wxPanel* rocketComponentPanel = new wxPanel(designSplitter,
wxID_ANY,
wxDefaultPosition,
wxSize(200, 100));
rocketComponentPanel->SetBackgroundColour(wxColor(200, 100, 100));
designSplitter->SplitVertically(rocketTreePanel, rocketComponentPanel);
wxPanel* rocketVisPanel = new wxPanel(mainSplitter, wxID_ANY);
rocketVisPanel->SetBackgroundColour(wxColor(100, 200, 100));
mainSplitter->SplitHorizontally(designSplitter, rocketVisPanel);
Bind(wxEVT_MENU, &MainWindowFrame::onAbout, this, wxID_ABOUT);
Bind(wxEVT_MENU, &MainWindowFrame::onExit, this, wxID_EXIT);
}
void MainWindowFrame::onExit(wxCommandEvent& evt)
{
Close(true);
}
void MainWindowFrame::onAbout(wxCommandEvent& evt)
{
wxMessageBox(_("This is wxRocket. (c) 2023 by Travis Hunter"),
_("About wxRocket"), wxOK | wxICON_INFORMATION);
}
}

View File

@ -1,26 +0,0 @@
#ifndef GUI_MAINWINDOW_H
#define GUI_MAINWINDOW_H
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
namespace gui
{
class MainWindowFrame : public wxFrame
{
public:
MainWindowFrame();
private:
void onExit(wxCommandEvent& evt);
void onAbout(wxCommandEvent& evt);
};
}
#endif // GUI_MAINWINDOW_H

View File

@ -1,77 +0,0 @@
/* XPM */
static const char *rocket16x16[] = {
/* columns rows colors chars-per-pixel */
"16 16 55 1 ",
" c #3A1810",
". c #3D261F",
"X c #2F2F2F",
"o c #40251B",
"O c #7F4632",
"+ c #734B3E",
"@ c #636363",
"# c #9D0909",
"$ c #B02020",
"% c #E02222",
"& c #E12525",
"* c #E22828",
"= c #9B441F",
"- c #E2592B",
"; c #A75770",
": c #8B6767",
"> c #D85474",
", c #F7B061",
"< c #5D0A89",
"1 c #592FA7",
"2 c #8F8A8A",
"3 c #988E8A",
"4 c #9A908D",
"5 c #ADADAD",
"6 c #DAAF8B",
"7 c #DCB8A4",
"8 c #DBBCB3",
"9 c #E0B6B6",
"0 c #E7B8BC",
"q c #F5B1B1",
"w c #F6B9B9",
"e c #FEE093",
"r c #E1B6CF",
"t c #C3C3C3",
"y c #DFC0C0",
"u c #D3D3D3",
"i c #DBDBDB",
"p c #DFDCDB",
"a c #DEDEDE",
"s c #ECCECE",
"d c #ECCFCF",
"f c #F7C0C0",
"g c #FEC1C1",
"h c #F7CEC7",
"j c #ECD1CE",
"k c #FCEDD9",
"l c #E6E6E6",
"z c #E7E7E7",
"x c #ECEAE9",
"c c #FDF2E7",
"v c #FAFAFA",
"b c #FCF9F9",
"n c #FCFCFC",
"m c #FEFDFD",
"M c #000000",
/* pixels */
"MMMMMMMMMMMMMMli",
"MMMMMMMMMMMMMt@M",
"MMMMMMMMMMMM5XlM",
"MMMMMMMMMMMq$uMM",
"MMMMMMMMMMw%dMMM",
"MMMMMMMMMf&dMMMM",
"MMMMMMMMh*dMMMMM",
"MMMMMMa9-jMMMMMM",
"MMMMMM:#yMMMMMMM",
"MMMMg>12vMMMMMMM",
"MMMMr<;MMMMMMMMM",
"MMMc80bMMMMMMMMM",
"Mx7ekMMMMMMMMMMM",
"3+,6MMMMMMMMMMMM",
".=OpMMMMMMMMMMMM",
" o4MMMMMMMMMMMMM"
};

View File

@ -1,211 +0,0 @@
/* XPM */
static const char *rocket32x32[] = {
/* columns rows colors chars-per-pixel */
"32 32 173 2 ",
" c #101010",
". c #121212",
"X c #1A1717",
"o c #1C1919",
"O c #1C1C1C",
"+ c #36150E",
"@ c #391A0E",
"# c #2D1812",
"$ c #2F1913",
"% c #341A12",
"& c #341D15",
"* c #342019",
"= c #262626",
"- c #3B3B3B",
"; c #3C3C3C",
": c #440000",
"> c #460C0C",
", c #4E180E",
"< c #4D1F0C",
"1 c #422A1F",
"2 c #542618",
"3 c #79350E",
"4 c #652C15",
"5 c #422820",
"6 c #42322D",
"7 c #433232",
"8 c #503F39",
"9 c #6D3928",
"0 c #51433E",
"q c #4A015E",
"w c #584640",
"e c #575757",
"r c #5C5C5C",
"t c #63534D",
"y c #745347",
"u c #646464",
"i c #796D69",
"p c #727272",
"a c #940118",
"s c #A20B0B",
"d c #BA0D0D",
"f c #A00F13",
"g c #B10D33",
"h c #BB2D2D",
"j c #B42C3C",
"k c #D40D0D",
"l c #DE1B1B",
"z c #EA0C0C",
"x c #EB0C0C",
"c c #EC0C0C",
"v c #EC0D0D",
"b c #ED0D0D",
"n c #EE0D0D",
"m c #EF0D0D",
"M c #F00D0D",
"N c #EE1E1E",
"B c #FF1919",
"V c #ED2222",
"C c #ED2727",
"Z c #EC2C2C",
"A c #EC3232",
"S c #EB3838",
"D c #FF3434",
"F c #9D4426",
"G c #A14A21",
"H c #EB513E",
"J c #D7653B",
"K c #EC6638",
"L c #B04F4F",
"P c #BD4D4D",
"I c #BE4C4C",
"U c #BF4C4C",
"Y c #BC4E4E",
"T c #BD4E4E",
"R c #BF564B",
"E c #9F6148",
"W c #827571",
"Q c #A87E70",
"! c #C04949",
"~ c #C0584B",
"^ c #E54747",
"/ c #EB5B46",
"( c #FB6767",
") c #FF6464",
"_ c #EFA50D",
"` c #E98D56",
"' c #F5A254",
"] c #FEA85A",
"[ c #EEA368",
"{ c #FDCF73",
"} c #FFEB7E",
"| c #3A3994",
" . c #7A0D82",
".. c #700D8A",
"X. c #7B61BB",
"o. c #330DC4",
"O. c #300DC6",
"+. c #0D0DF1",
"@. c #6D67E6",
"#. c #8877DE",
"$. c #8E8E8E",
"%. c #938A88",
"&. c #9F9490",
"*. c #9F9F9F",
"=. c #A09693",
"-. c #A19C9C",
";. c #A3A3A3",
":. c #A7A7A7",
">. c #B9B4B2",
",. c #CB868A",
"<. c #FCBD80",
"1. c #ECB499",
"2. c #FED88A",
"3. c #FFDC8C",
"4. c #F9D89A",
"5. c #FFF494",
"6. c #C5C0BE",
"7. c #F4CBAA",
"8. c #F9D3AC",
"9. c #FFF6AE",
"0. c #C5C2C2",
"q. c #CDC8C7",
"w. c #CACACA",
"e. c #CFCFCF",
"r. c #D1D1D1",
"t. c #D5D5D5",
"y. c #DFD9D7",
"u. c #DFDFDF",
"i. c #E9C7C7",
"p. c #F8C3C4",
"a. c #F0CFCF",
"s. c #EAD2CA",
"d. c #F4D0D0",
"f. c #F5D7D7",
"g. c #FED6D6",
"h. c #F6DCDC",
"j. c #FEE4D4",
"k. c #FEE9DB",
"l. c #E4E2E2",
"z. c #E5E5E5",
"x. c #E6E4E4",
"c. c #ECECEC",
"v. c #EEEDED",
"b. c #EEEEEE",
"n. c #EFEEEE",
"m. c #F7E2E2",
"M. c #F8E7E7",
"N. c #F5E8E8",
"B. c #FAE8E8",
"V. c #F9EBEB",
"C. c #FAEFEF",
"Z. c #F2F2F2",
"A. c #F3F3F3",
"S. c #F5F5F4",
"D. c #F7F7F7",
"F. c #FBF5F5",
"G. c #F9F7F7",
"H. c #FAF7F7",
"J. c #FBFBF2",
"K. c #FAFAF7",
"L. c #FEFAF5",
"P. c #F9F9F9",
"I. c #FAF8F8",
"U. c #FAF8F9",
"Y. c #FBFAFA",
"T. c #FBFBFB",
"R. c #FCFAF9",
"E. c #FCFBFA",
"W. c #FCFCFB",
"Q. c #FDFCFB",
"!. c #FCFCFC",
"~. c #FEFCFC",
"^. c #000000",
/* pixels */
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.x.Y.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.;.$.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.A.u ; S.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.u.- O r.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.e.= *.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.w.O p ^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.d.l > e ^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.f.N x L Y.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.h.V x Y Y.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.m.C m Y Y.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.M.Z m Y Y.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.B.A m Y Y.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.C.S m Y Y.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.J.H m Y Y.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.F./ _ R F.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.t.:.-.^ M ~ K.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.r o s k I F.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.^.^.^.Y.h d : 0.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.g.( p.@.g 7 X n.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.D B ..+.| n.A.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.) .O.q ,.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.^.^.#.O.a f i.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.^.Q.k.X.j a.N.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.^.^.^.L.8.3.7.B.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.^.Q.n.s.<.9.4.R.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"^.^.n.6.Q [ 5.2.j.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"q.>.i y ` } { 1.R.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"W w 5 F ] ' E y.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"0 & 4 K J 9 &.Y.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"* @ 3 G 2 t x.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"$ , < 1 8 =.S.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.",
"% + $ 6 %.l.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^."
};

View File

@ -1,270 +0,0 @@
/* XPM */
static const char *rocket64x64[] = {
/* columns rows colors chars-per-pixel */
"64 63 201 2 ",
" c #010101",
". c #0B0B0B",
"X c #0F0000",
"o c #1A0000",
"O c #1B1B1B",
"+ c #141414",
"@ c #2D0000",
"# c #360000",
"$ c #2D140D",
"% c #37170D",
"& c #2C1710",
"* c #2E1B14",
"= c #321C14",
"- c #391E14",
"; c #23001C",
": c #3A231C",
"> c #35221C",
", c #242424",
"< c #2B2B2B",
"1 c #2C2525",
"2 c #3B2A24",
"3 c #343434",
"4 c #420000",
"5 c #5D0F0F",
"6 c #491B0E",
"7 c #5A1A0D",
"8 c #4A1A16",
"9 c #640E0E",
"0 c #7F0808",
"q c #462317",
"w c #532517",
"e c #52250D",
"r c #67280B",
"t c #75341E",
"y c #753613",
"u c #66002D",
"i c #452C23",
"p c #4D352D",
"a c #4C3B36",
"s c #4A3A34",
"d c #6C3726",
"f c #59443E",
"g c #7C422F",
"h c #41006B",
"j c #454545",
"k c #574743",
"l c #565656",
"z c #675A55",
"x c #63534D",
"c c #6F625D",
"v c #79635C",
"b c #686868",
"n c #776964",
"m c #7B7B7B",
"M c #810808",
"N c #840000",
"B c #9F0000",
"V c #96000B",
"C c #8E001A",
"Z c #A90000",
"A c #A60909",
"S c #B50100",
"D c #B80000",
"F c #B90808",
"G c #A41010",
"H c #843D13",
"J c #923B21",
"K c #DC0808",
"L c #EB0404",
"P c #EA0808",
"I c #E70303",
"U c #F30606",
"Y c #F60808",
"T c #FE1616",
"R c #FF1919",
"E c #FE1A16",
"W c #EC2607",
"Q c #DA2C2C",
"! c #DA3838",
"~ c #FF2323",
"^ c #97401A",
"/ c #A04615",
"( c #914630",
") c #B74C29",
"_ c #AC5A3E",
"` c #CE5D2D",
"' c #E15C35",
"] c #D66138",
"[ c #EE612E",
"{ c #FE6F3E",
"} c #E4653A",
"| c #BC1248",
" . c #AC2E69",
".. c #C4144A",
"X. c #C83561",
"o. c #8F5656",
"O. c #AA5B5B",
"+. c #A85656",
"@. c #BD7158",
"#. c #897D79",
"$. c #957C73",
"%. c #83746F",
"&. c #AE6565",
"*. c #B26C6C",
"=. c #B77878",
"-. c #DB4949",
";. c #DC5959",
":. c #CD4444",
">. c #FA5959",
",. c #E47647",
"<. c #FD7949",
"1. c #C36464",
"2. c #DD6565",
"3. c #CE7974",
"4. c #DF7771",
"5. c #E17E7E",
"6. c #B49A00",
"7. c #EA9F09",
"8. c #EFA704",
"9. c #FEE816",
"0. c #8F837F",
"q. c #BAAE7F",
"w. c #F8864C",
"e. c #FC8C54",
"r. c #F38A5B",
"t. c #FD9757",
"y. c #ED895A",
"u. c #FFAA56",
"i. c #FFB95C",
"p. c #C78E7C",
"a. c #E49377",
"s. c #FDAC69",
"d. c #FFB361",
"f. c #F4B878",
"g. c #FFCB6C",
"h. c #FFD372",
"j. c #FFDC7A",
"k. c #F0D06F",
"l. c #FFEA7A",
"z. c #0100AA",
"x. c #3F1BBF",
"c. c #3909B6",
"v. c #5B0986",
"b. c #0D03DD",
"n. c #1103D9",
"m. c #0A07E6",
"M. c #1414FD",
"N. c #140EE2",
"B. c #6D6DF2",
"V. c #82618F",
"C. c #8C8C8C",
"Z. c #8A8583",
"A. c #9A908C",
"S. c #9B9998",
"D. c #BE8685",
"F. c #A49B98",
"G. c #A38A81",
"H. c #AAA29F",
"J. c #ABA9A9",
"K. c #B8A9A4",
"L. c #BDBBBB",
"P. c #B6B4B4",
"I. c #CC8D85",
"U. c #E38484",
"Y. c #D1A68C",
"T. c #FEBA83",
"R. c #EDAA94",
"E. c #C2BCBA",
"W. c #FBBABA",
"Q. c #E9BDA9",
"!. c #FAC08A",
"~. c #FEDC84",
"^. c #FDDA92",
"/. c #FEE489",
"(. c #FFFB8C",
"). c #FFF38C",
"_. c #FFF79C",
"`. c #F8D1B8",
"'. c #FFF5A8",
"]. c #FFFCB8",
"[. c #FFF3B8",
"{. c #AEAEEA",
"}. c #C5A9D0",
"|. c #C9C6C6",
" X c #DDDCDC",
".X c #EBCDCD",
"XX c #FED6C4",
"oX c #E8DEDA",
"OX c #FEC5C5",
"+X c #E5E5E4",
"@X c #EDECEC",
"#X c #EEE4E4",
"$X c #F5EBEB",
"%X c #F9EEEE",
"&X c #F5E5E5",
"*X c #F9F2EE",
"=X c #F5F5F5",
"-X c #FBF4F4",
";X c #FFFBF6",
":X c #FEFEFE",
">X c #CCCCF1",
/* pixels */
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X=XS.=X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X|.j J.:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XZ., l :X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X+Xj < O +X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XL.O < . P.:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XC.. < . b :X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:Xb . < . 3 =X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X=Xj . < . + X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X@X3 . , . L.:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X+X< . , . S.:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X#X1 . O . m :X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X&XQ K 8 . b :X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X$XQ Y T K o l :X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X%X! Y T L D o.:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X%X! U T L D +.:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X! U T P D O.:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X! U T P D O.;X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X-.U T P D O.;X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X-.U T P S &.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X;X-.U T P S &.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X;X;.U T P S &.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X;X;.U T P S *.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X;.U T P S *.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X2.U T P S *.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X2.L T P S *.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X4.L T P S =.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:Xk.8.E P S =.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X5.W 9.7.S =.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XU.L T W 6.q.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X X|.|.P.J.3.L T P S D.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XJ.O O O O 9 L T P S D.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:Xb O O O 9 L T F S D.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XJ., 5 I T M N o.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XI.I T M 4 # C.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X%X:X:X:X:X}.L T 0 X @ J.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XW.R >.W.:X{.m...A k . +X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XOX~ R R R .m.M.N.; b :XZ.|.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X~ R R R | m.M.m.z.b :X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X>.R R | b.M.c.z.V.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XW.R ..b.M.v.h u G &X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XX.n.M.v.C u B G .X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X>XN.M.v.Z V B G .X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XB.M.v.Z :.1.1..X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X;XXXY.x.Z 2.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X:X:X`.T.j.j.3.2.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X:X:X;X`.f.^./.!.&X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X:X:X:X;XXX!./.'._.^.*X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X:X:X$X@X%XI.e.~.].[.~.Q.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X:X=X|.F.$.p.y.h.'.]._.T.;X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
":X:X:X:X:X XE.J.G.@.r.h.(._./.s.XX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"=X+X+X+XL.0.#.$.@.r.g.(.(.).s.R.*X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"|.J.H.A.n a p g ,.d.l.(.h.t.a.oX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"F.%.n z a > q ) t.g.g.i.w._ K.=X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"Z.x f 2 = i t } t.u.u.,.( v |.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"c a i = - t ) <.e.w.` d k A.@X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"k 2 = $ 6 ^ [ { ' ( w p #.oX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"2 2 = % e / ` ] J w q z L.:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"& & $ 6 r y H t q = a Z. X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"= $ % 7 r e q p > s n F.+X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"= $ 6 7 6 % > i a c A.E.$X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"$ q 8 % $ & > p z A.P.+X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X",
"$ = $ $ * * 2 k #.|.@X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X"
};

View File

@ -1,29 +0,0 @@
#include <iostream>
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include "MainWindow.h"
class wxRocket : public wxApp
{
public:
//wxRocket();
//virtual ~wxRocket();
virtual bool OnInit();
};
bool wxRocket::OnInit()
{
gui::MainWindowFrame* frame = new gui::MainWindowFrame;
frame->Show(true);
return true;
}
// This will build the main function
wxIMPLEMENT_APP(wxRocket);

View File

@ -1,5 +0,0 @@
add_library(model
Motor.cpp
MotorCase.cpp
Thrustcurve.cpp)

View File

@ -1,39 +0,0 @@
#ifndef MODEL_MOTOR_H
#define MODEL_MOTOR_H
#include <string>
#include "Thrustcurve.h"
#include "MotorCase.h"
class Motor
{
public:
Motor();
~Motor();
private:
std::string manufacturer;
char impulseClass;
std::string propType;
bool sparky;
// Thrust parameters
double totalImpulse;
double avgImpulse;
int delay;
double burnTime;
double isp;
MotorCase motorCase;
Thrustcurve thrust;
// Physical dimensions
int diameter;
int length;
double totalWeight;
double propWeight;
};
#endif // MODEL_MOTOR_H

View File

@ -1,9 +0,0 @@
add_library(sim
AtmosphericModel.cpp
GravityModel.cpp
WindModel.cpp
USStandardAtmosphere.cpp
SphericalGravityModel.cpp
SphericalGeoidModel.cpp)
target_link_libraries(sim PRIVATE math utils)

View File

@ -1,19 +0,0 @@
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.11.0
)
FetchContent_MakeAvailable(googletest)
add_library(GTest::GTest INTERFACE IMPORTED)
target_link_libraries(GTest::GTest INTERFACE gtest_main)
add_executable(usstandardatmosphere_test USStandardAtmosphereTests.cpp)
target_link_libraries(usstandardatmosphere_test
PRIVATE
GTest::GTest
sim)
add_test(sim_tests usstandardatmosphere_test)

View File

@ -1,26 +0,0 @@
#include "../USStandardAtmosphere.h"
#include <gtest/gtest.h>
#include <iostream>
TEST(USStandardAtmosphereTests, DensityTests)
{
sim::USStandardAtmosphere atm;
double seaLevelDensity = 1.2250;
double testDensity = atm.getDensity(0.0);
ASSERT_EQ(seaLevelDensity, testDensity);
// Test some other values
for(int i = 1; i <= 10; ++i)
{
double altitude = 1000.0 * i;
std::cout << altitude << ": " << atm.getDensity(altitude) << std::endl;
}
}
int main(int argc, char** argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

View File

@ -1,9 +0,0 @@
find_package(CURL)
find_package(fmt)
add_library(utils
BinMap.cpp
CurlConnection.cpp)
# Also including the header-only fmt library
target_link_libraries(utils PRIVATE curl jsoncpp ssl crypto fmt::fmt-header-only)

View File

@ -1,2 +0,0 @@
add_library(math
Constants.cpp)

View File

@ -1 +0,0 @@
#include "Constants.h"

View File

@ -1,11 +1,10 @@
#ifndef UTILS_MATH_BINMAP_H
#define UTILS_MATH_BINMAP_H
#ifndef UTILS_BINMAP_H
#define UTILS_BINMAP_H
#include <vector>
#include <utility>
namespace utils
{
namespace utils {
/**
* @brief This is a utility class that operates as a map. Instead of a regular map
@ -35,4 +34,4 @@ private:
} // namespace utils
#endif // UTILS_MATH_BINMAP_H
#endif // UTILS_BINMAP_H

View File

@ -1,15 +1,10 @@
#include "CurlConnection.h"
#include <vector>
#include <iostream>
#include <time.h>
#include <curl/curl.h>
namespace
{
size_t curlCallback(void* content, size_t size, size_t nmemb, std::string* buffer)
size_t curlCallback(void* content, size_t size, size_t nmemb, std::string* buffer)
{
buffer->append(static_cast<char*>(content), size*nmemb);
return size*nmemb;
@ -42,7 +37,7 @@ std::string CurlConnection::get(const std::string& url,
if(!extraHttpHeaders.empty())
{
struct curl_slist *chunk = NULL;
for(int i = 0; i < extraHttpHeaders.size(); ++i)
for(size_t i = 0; i < extraHttpHeaders.size(); ++i)
{
chunk = curl_slist_append(chunk, extraHttpHeaders[i].c_str());
}
@ -68,4 +63,4 @@ std::string CurlConnection::get(const std::string& url,
return str_result;
}
} // namespace Utils
} // namespace utils

View File

@ -1,12 +1,11 @@
#ifndef _APPRESETAPI_H_
#define _APPRESETAPI_H_
#ifndef UTILS_CURLCONNECTION_H
#define UTILS_CURLCONNECTION_H
#include <vector>
#include <string>
#include <curl/curl.h>
#include <vector>
namespace utils
{
namespace utils {
class CurlConnection
{
@ -22,8 +21,6 @@ private:
};
void initCurl(const std::string& host);
} // namespace utils
#endif // _APPRESETAPI_H_
#endif // UTILS_CURLCONNECTION_H

18
utils/ThrustCurveAPI.cpp Normal file
View File

@ -0,0 +1,18 @@
#include "ThrustCurveAPI.h"
namespace utils
{
ThrustCurveAPI::ThrustCurveAPI()
: hostname("https://www.thrustcurve.org/api/v1/"),
curlConnection()
{
}
ThrustCurveAPI::~ThrustCurveAPI()
{
}
} // namespace utils

33
utils/ThrustCurveAPI.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef UTILS_THRUSTCURVEAPI_H
#define UTILS_THRUSTCURVEAPI_H
#include <string>
#include "CurlConnection.h"
namespace utils
{
/**
* @brief This is a bit more than just an API for Thrustcurve.org, so the name is unfortunate
* It is also an internal database of motor data that it grabs from Thrustcurve.org
*
*/
class ThrustCurveAPI
{
public:
ThrustCurveAPI();
~ThrustCurveAPI();
private:
const std::string hostname;
CurlConnection curlConnection;
};
} // namespace utils
#endif // UTILS_THRUSTCURVEAPI_H