From 59c1ebf1d9f3e00538699a43485def8f349b98ed Mon Sep 17 00:00:00 2001 From: Damien Dupuis Date: Fri, 29 Jan 2010 13:07:27 +0000 Subject: [PATCH] Initial import for goodies --- bootstrap/easyChams/CompilationWidget.cpp | 266 ++++++++++++++++++ bootstrap/easyChams/CompilationWidget.h | 69 +++++ bootstrap/easyChams/CompileHighlighter.cpp | 70 +++++ bootstrap/easyChams/CompileHighlighter.h | 38 +++ bootstrap/easyChams/ConfigDialog.cpp | 83 ++++++ bootstrap/easyChams/ConfigDialog.h | 88 ++++++ bootstrap/easyChams/MainWindow.cpp | 22 ++ bootstrap/easyChams/MainWindow.h | 15 + bootstrap/easyChams/README | 5 + bootstrap/easyChams/compile.sh | 8 + .../easyChams/icons/linux/Eye_of_Horus.png | Bin 0 -> 29336 bytes .../easyChams/icons/macosx/Eye of Horus.zip | Bin 0 -> 31787 bytes bootstrap/easyChams/main.cpp | 16 ++ 13 files changed, 680 insertions(+) create mode 100644 bootstrap/easyChams/CompilationWidget.cpp create mode 100644 bootstrap/easyChams/CompilationWidget.h create mode 100644 bootstrap/easyChams/CompileHighlighter.cpp create mode 100644 bootstrap/easyChams/CompileHighlighter.h create mode 100644 bootstrap/easyChams/ConfigDialog.cpp create mode 100644 bootstrap/easyChams/ConfigDialog.h create mode 100644 bootstrap/easyChams/MainWindow.cpp create mode 100644 bootstrap/easyChams/MainWindow.h create mode 100644 bootstrap/easyChams/README create mode 100755 bootstrap/easyChams/compile.sh create mode 100644 bootstrap/easyChams/icons/linux/Eye_of_Horus.png create mode 100644 bootstrap/easyChams/icons/macosx/Eye of Horus.zip create mode 100644 bootstrap/easyChams/main.cpp diff --git a/bootstrap/easyChams/CompilationWidget.cpp b/bootstrap/easyChams/CompilationWidget.cpp new file mode 100644 index 00000000..2e179915 --- /dev/null +++ b/bootstrap/easyChams/CompilationWidget.cpp @@ -0,0 +1,266 @@ +#include +using namespace std; + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CompilationWidget.h" +#include "CompileHighlighter.h" +#include "ConfigDialog.h" + +CompilationWidget::CompilationWidget(QWidget *parent) + : QWidget(parent) + , _cProgram ("") + , _sourceRD ("") + , _hasHurricane (false) + , _hasIo (false) + , _hasTest (false) + , _hasCrlcore (false) + , _hasChams (false) + , _hasHurricaneAMS (false) { + + setStyleSheet("font-weight: normal;"); + + _hurricane = new QCheckBox ( "hurricane" , this ); + _io = new QCheckBox ( "io" , this ); + _test = new QCheckBox ( "test" , this ); + _crlcore = new QCheckBox ( "crlcore" , this ); + _chams = new QCheckBox ( "chams" , this ); + _hurricaneAMS = new QCheckBox ( "hurricaneAMS", this ); + + readSettings(); + + QVBoxLayout* vBoxOutilsGroup = new QVBoxLayout(); + vBoxOutilsGroup->addWidget(_hurricane); + vBoxOutilsGroup->addWidget(_io); + vBoxOutilsGroup->addWidget(_test); + vBoxOutilsGroup->addWidget(_crlcore); + vBoxOutilsGroup->addWidget(_chams); + vBoxOutilsGroup->addWidget(_hurricaneAMS); + if (!_hasHurricane) _hurricane->setVisible(false); + if (!_hasIo) _io->setVisible(false); + if (!_hasTest) _test->setVisible(false); + if (!_hasCrlcore) _crlcore->setVisible(false); + if (!_hasChams) _chams->setVisible(false); + if (!_hasHurricaneAMS) _hurricaneAMS->setVisible(false); + + QGroupBox* outilsGroup = new QGroupBox ( "Outils", this ); + outilsGroup->setLayout(vBoxOutilsGroup); + + _mode = new QComboBox (this); + QStringList modes; + modes << "Release" << "Debug"; + _mode->addItems(modes); + _static = new QCheckBox ("static", this); + _svnUp = new QCheckBox ("svn update", this); + _doc = new QCheckBox ("build doc", this); + _clean = new QCheckBox ("clean build", this); + + QVBoxLayout* vBoxOptionsGroup = new QVBoxLayout(); + vBoxOptionsGroup->addWidget(_mode); + vBoxOptionsGroup->addWidget(_static); + vBoxOptionsGroup->addWidget(_doc); + vBoxOptionsGroup->addWidget(_svnUp); + vBoxOptionsGroup->addWidget(_clean); + + QGroupBox* optionsGroup = new QGroupBox ( "Options", this ); + optionsGroup->setLayout(vBoxOptionsGroup); + + _compile = new QPushButton ( "Compile !", this ); + connect ( _compile, SIGNAL(clicked()), this, SLOT(compile()) ); + + _progressBar = new QProgressBar ( this ); + _progressBar->setRange(0,100); + _progressBar->setTextVisible(true); + connect ( this, SIGNAL(progress(int)), _progressBar, SLOT(setValue(int)) ); + + QVBoxLayout* vBoxLayout = new QVBoxLayout(); + vBoxLayout->addWidget(outilsGroup); + vBoxLayout->addWidget(optionsGroup); + vBoxLayout->addWidget(_compile); + vBoxLayout->addWidget(_progressBar); + + QWidget* menu = new QWidget ( this ); + menu->setLayout(vBoxLayout); + + _console = new QTextEdit(this); + _console->setFixedSize(800,400); + CompileHighlighter* highlight = new CompileHighlighter(_console->document()); + + QHBoxLayout* hBoxLayout = new QHBoxLayout(); + hBoxLayout->addWidget(menu); + hBoxLayout->addWidget(_console); + setLayout(hBoxLayout); + setWindowTitle("Easy compile for chams"); + +} + +void CompilationWidget::compile() { + QStringList arguments; + + _progressBar->reset(); + _console->clear(); + + _myProcess = new QProcess(this); + QStringList env = QProcess::systemEnvironment(); + //QString currentInstallRD = _installRD; + //if (_static->isChecked()) currentInstallRD += "/"+_mode->currentText()+".Static"; + //else currentInstallRD += "/"+_mode->currentText()+".Shared"; + //cerr << _installRD.toStdString() << endl; + //env << "HURRICANE_TOP=" + currentInstallRD; + //env << "CHAMS_TOP=" + currentInstallRD; + //env << "IO_TOP=" + currentInstallRD; + //env << "DYLD_LIBRARY_PATH=" + currentInstallRD + "/lib"; + //_myProcess->setEnvironment(env); + connect(_myProcess, SIGNAL(readyReadStandardError()) , this, SLOT(updateError())); + connect(_myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(updateText())); + connect(_myProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(updateExit(int, QProcess::ExitStatus))); + //arguments << "-s " + _sourceRD; + //arguments << "-i " + currentInstallRD; + //arguments << "-b " + _buildRD; + arguments << "-p" + _sourceRD; + arguments << "-m" + _mode->currentText(); + if (_static->isChecked()) arguments << "-s"; + if (_svnUp->isChecked()) arguments << "-u"; + if (_doc->isChecked()) arguments << "-d"; + if (_clean->isChecked()) arguments << "-c"; + if (_hurricane->isChecked()) arguments << "-t hurricane"; + if (_io->isChecked()) arguments << "-t io"; + if (_test->isChecked()) arguments << "-t test"; + if (_crlcore->isChecked()) arguments << "-t crlcore"; + if (_chams->isChecked()) arguments << "-t chams"; + if (_hurricaneAMS->isChecked()) arguments << "-t hurricaneAMS"; + + for (int i = 0; i < arguments.size(); ++i) + cout << arguments.at(i).toLocal8Bit().constData() << endl; + + _myProcess->start(_cProgram, arguments); +} + +void CompilationWidget::readSettings() { + _settings = new QSettings ( "chams", "easyChams" ); + + if ( !_settings->contains("Compilation program") ) { + QMessageBox::warning(this, tr("easyChams"), tr("It seems you do not have configured the application. Let's configure it now."), QMessageBox::Ok, QMessageBox::Ok); + runConfigDialog(true); + } + else { + _cProgram = _settings->value("Compilation program").toString(); + _sourceRD = _settings->value("Source root").toString(); + _hasHurricane = _settings->value("Hurricane").toBool(); + _hasIo = _settings->value("Io").toBool(); + _hasTest = _settings->value("Test").toBool(); + _hasCrlcore = _settings->value("Crlcore").toBool(); + _hasChams = _settings->value("Chams").toBool(); + _hasHurricaneAMS = _settings->value("HurricaneAMS").toBool(); + } +} + +void CompilationWidget::runConfigDialog(bool first) { + ConfigDialog* cfg = new ConfigDialog; + connect ( cfg, SIGNAL(configDone(QStringList)), this, SLOT(updateConfig(QStringList)) ); + if (!first) { + cfg->setCompileProgram(_cProgram); + cfg->setSourceRootDirectory(_sourceRD); + cfg->setHasHurricane(_hasHurricane); + cfg->setHasIo(_hasIo); + cfg->setHasTest(_hasTest); + cfg->setHasCrlcore(_hasCrlcore); + cfg->setHasChams(_hasChams); + cfg->setHasHurricaneAMS(_hasHurricaneAMS); + } + cfg->exec(); + writeSettings(); +} + +void CompilationWidget::reconfig() { + runConfigDialog(false); +} + +void CompilationWidget::writeSettings() { + _settings->setValue("Compilation program", _cProgram); + _settings->setValue("Source root" , _sourceRD); + _settings->setValue("Hurricane" , _hasHurricane); + _settings->setValue("Io" , _hasIo); + _settings->setValue("Test" , _hasTest); + _settings->setValue("Crlcore" , _hasCrlcore); + _settings->setValue("Chams" , _hasChams); + _settings->setValue("HurricaneAMS" , _hasHurricaneAMS); +} + +void CompilationWidget::updateConfig(QStringList list) { + _cProgram = list.value(0); // First value is compilation program + _sourceRD = list.value(1); // Second value is source root directory + _hasHurricane = (list.value(2) == "ON") ? true : false; // Third value is hasHurricane + _hasIo = (list.value(3) == "ON") ? true : false; // Forth value is hasIo + _hasTest = (list.value(4) == "ON") ? true : false; // Fifth value is hasTest + _hasCrlcore = (list.value(5) == "ON") ? true : false; // Sixth value is hasCrlcore + _hasChams = (list.value(6) == "ON") ? true : false; // Seventh value is hasChams + _hasHurricaneAMS = (list.value(7) == "ON") ? true : false; // Eight value is hasHurricaneAMS + // updates Tools visibility : + if (_hasHurricane) { _hurricane->setVisible(true); } + else { _hurricane->setVisible(false); _hurricane->setCheckState(Qt::Unchecked); } + if (_hasIo) { _io->setVisible(true); } + else { _io->setVisible(false); _io->setCheckState(Qt::Unchecked); } + if (_hasTest) { _test->setVisible(true); } + else { _test->setVisible(false); _test->setCheckState(Qt::Unchecked); } + if (_hasCrlcore) { _crlcore->setVisible(true); } + else { _crlcore->setVisible(false); _crlcore->setCheckState(Qt::Unchecked); } + if (_hasChams) { _chams->setVisible(true); } + else { _chams->setVisible(false); _chams->setCheckState(Qt::Unchecked); } + if (_hasHurricaneAMS) { _hurricaneAMS->setVisible(true); } + else { _hurricaneAMS->setVisible(false); _hurricaneAMS->setCheckState(Qt::Unchecked); } +} + + +void CompilationWidget::updateError() { + QByteArray data = _myProcess->readAllStandardError(); + _console->insertPlainText(QString(data)); + int end = _console->verticalScrollBar()->maximum(); + _console->verticalScrollBar()->setValue(end); +} + +void CompilationWidget::updateText() { + QByteArray data = _myProcess->readAllStandardOutput(); + QString str(data); + QRegExp rx = QRegExp ( "([0-9]+)%" ); + if ( str.contains(rx) ) { + bool ok; + int value = rx.cap(1).toInt ( &ok, 10 ); + emit(progress(value)); + } + _console->insertPlainText(QString(data)); + int end = _console->verticalScrollBar()->maximum(); + _console->verticalScrollBar()->setValue(end); +} + +void CompilationWidget::updateExit(int exitCode, QProcess::ExitStatus exitStatus) +{ + if (exitStatus == QProcess::NormalExit) { + _console->append("Completed Successfully"); + } + else { + _console->append("Error"); + } +} + +void CompilationWidget::about() +{ + QMessageBox::about(this, tr("About easyChams"), tr("

easyChams

" + "

This tool allows every one to easily update and compile chams project's sources.

" + "

Version 0.6
29/01/2010
by D.Dupuis

")); +} diff --git a/bootstrap/easyChams/CompilationWidget.h b/bootstrap/easyChams/CompilationWidget.h new file mode 100644 index 00000000..9c48459d --- /dev/null +++ b/bootstrap/easyChams/CompilationWidget.h @@ -0,0 +1,69 @@ +#ifndef __COMPILATION_WIDGET_H +#define __COMPILATION_WIDGET_H + +#include +#include + +class QCheckBox; +class QComboBox; +class QTextEdit; +class QPushButton; +class QProgressBar; +class QSettings; +class QStringList; +class QAction; + +class CompilationWidget : public QWidget { + Q_OBJECT + + public: + CompilationWidget (QWidget *parent =0); + ~CompilationWidget () {}; + + private: + QCheckBox* _hurricane; + QCheckBox* _io; + QCheckBox* _test; + QCheckBox* _crlcore; + QCheckBox* _chams; + QCheckBox* _hurricaneAMS; + QComboBox* _mode; + QCheckBox* _static; + QCheckBox* _svnUp; + QCheckBox* _doc; + QCheckBox* _clean; + QPushButton* _compile; + QProgressBar* _progressBar; + + QTextEdit* _console; + QProcess* _myProcess; + + QSettings* _settings; + QString _cProgram; + QString _sourceRD; + bool _hasHurricane; + bool _hasIo; + bool _hasTest; + bool _hasCrlcore; + bool _hasChams; + bool _hasHurricaneAMS; + + private: + void readSettings(); + void writeSettings(); + void runConfigDialog(bool first); + + public slots: + void compile(); + void updateError(); + void updateText(); + void updateExit(int exitCode, QProcess::ExitStatus exitStatus); + void updateConfig(QStringList list); + void reconfig(); + void about(); + + signals: + void progress(int value); +}; + +#endif diff --git a/bootstrap/easyChams/CompileHighlighter.cpp b/bootstrap/easyChams/CompileHighlighter.cpp new file mode 100644 index 00000000..b193c4ec --- /dev/null +++ b/bootstrap/easyChams/CompileHighlighter.cpp @@ -0,0 +1,70 @@ +// File : CompileHighlighter.cpp +// Date : 01.10.2009 +// Author : Dupuis Damien +// + +#include "CompileHighlighter.h" + +CompileHighlighter::CompileHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) { + // defines rules + CompileHighlighterRule rule; + + //building/linking/scanning rule : blue Bold + _doingFormat.setForeground(Qt::blue); + _doingFormat.setFontWeight(QFont::Bold); + rule.format = _doingFormat; + rule.pattern = QRegExp("(^Building.*$|^Linking.*$|^Scanning.*$|^Built target.*$)"); + _rules.append(rule); + + //compile rule : darkBlue Normal + _compileFormat.setForeground(Qt::darkBlue); + rule.format = _compileFormat; + rule.pattern = QRegExp("(^\\[.*$)"); + _rules.append(rule); + + //install rule : cyan Bold + _installFormat.setForeground(Qt::cyan); + _installFormat.setFontWeight(QFont::Bold); + rule.format = _installFormat; + rule.pattern = QRegExp("(^Install the project.*$)"); + _rules.append(rule); + + //--install rule : darkCyan + _installingFormat.setForeground(Qt::darkCyan); + rule.format = _installingFormat; + rule.pattern = QRegExp("(^-- Install.*$)"); + _rules.append(rule); + + //--uptodate : darkCyan Italic + _uptodateFormat.setForeground(Qt::darkCyan); + _uptodateFormat.setFontItalic(true); + rule.format = _uptodateFormat; + rule.pattern = QRegExp("(^-- Up-to-date.*$)"); + _rules.append(rule); + + //warning rule + _warningFormat.setForeground(QColor("orange")); + rule.format = _warningFormat; + rule.pattern = QRegExp("(^/.*In function.*$|^/.*warning:.*$)"); + _rules.append(rule); + + //error rule + _errorFormat.setForeground(Qt::red); + rule.format = _errorFormat; + rule.pattern = QRegExp("(^/.*error:.*$|^make\\[.*$)"); + _rules.append(rule); +} + +void CompileHighlighter::highlightBlock(const QString &text) { + foreach (const CompileHighlighterRule &rule, _rules) { + QRegExp expression (rule.pattern); + int index = expression.indexIn(text); + while (index >= 0) { + int length = expression.matchedLength(); + setFormat(index, length, rule.format); + index = expression.indexIn(text, index + length); + } + } + setCurrentBlockState(0); +} + diff --git a/bootstrap/easyChams/CompileHighlighter.h b/bootstrap/easyChams/CompileHighlighter.h new file mode 100644 index 00000000..448a060f --- /dev/null +++ b/bootstrap/easyChams/CompileHighlighter.h @@ -0,0 +1,38 @@ +// File : CompileHighlighter.h +// Date : 01.10.2009 +// Author : Dupuis Damien +// +#ifndef COMPILEHIGHLIGHTER_H +#define COMPILEHIGHLIGHTER_H + +#include +#include +#include + +class CompileHighlighter : public QSyntaxHighlighter { + Q_OBJECT + + public: + CompileHighlighter ( QTextDocument *parent = 0 ); + + protected: + void highlightBlock ( const QString &text ); + + private: + struct CompileHighlighterRule { + QTextCharFormat format; + QRegExp pattern; + }; + QVector _rules; + + QTextCharFormat _compileFormat; + QTextCharFormat _warningFormat; + QTextCharFormat _errorFormat; + QTextCharFormat _installFormat; + QTextCharFormat _installingFormat; + QTextCharFormat _uptodateFormat; + QTextCharFormat _doingFormat; +}; + + +#endif diff --git a/bootstrap/easyChams/ConfigDialog.cpp b/bootstrap/easyChams/ConfigDialog.cpp new file mode 100644 index 00000000..683a2f05 --- /dev/null +++ b/bootstrap/easyChams/ConfigDialog.cpp @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include +#include + +#include "configDialog.h" + +#define LINEEDITWIDTH 300 + +ConfigDialog::ConfigDialog() { + // First GroupBox : Directories + // Create Widgets + QLabel* compileL = new QLabel(tr("Compilation script:"), this); + QLabel* sourceL = new QLabel(tr("Chams source root directory:"), this); + _compileE = new QLineEdit ("", this); + _sourceE = new QLineEdit ("", this); + _compileE->setFixedWidth(LINEEDITWIDTH); + _sourceE->setFixedWidth (LINEEDITWIDTH); + QPushButton* compileB = new QPushButton(tr("&Browse")); + QPushButton* sourceB = new QPushButton(tr("&Browse")); + QDialogButtonBox* bBox = new QDialogButtonBox(QDialogButtonBox::Ok); + // Connect SIGNAL/SLOTS + connect(compileB, SIGNAL(clicked()) , this, SLOT(chooseCProgram())); + connect(sourceB , SIGNAL(clicked()) , this, SLOT(chooseSourceRD())); + connect(bBox , SIGNAL(accepted()), this, SLOT(doConfig())); + // Create GroupBox + QGroupBox* directories = new QGroupBox("Directories", this); + QGridLayout* gLayout = new QGridLayout(this); + gLayout->addWidget( compileL, 0, 0, 1, 1); + gLayout->addWidget(_compileE, 0, 1, 1, 2); + gLayout->addWidget( compileB, 0, 3, 1, 1); + gLayout->addWidget( sourceL , 1, 0, 1, 1); + gLayout->addWidget(_sourceE , 1, 1, 1, 2); + gLayout->addWidget( sourceB , 1, 3, 1, 1); + directories->setLayout(gLayout); + // Second GroupBox : Tools + // Create Widgets + _hurCB = new QCheckBox("Hurricane" , this); + _ioCB = new QCheckBox("Io" , this); + _testCB = new QCheckBox("Test (not in svn)", this); + _crlCB = new QCheckBox("Crlcore" , this); + _chamsCB = new QCheckBox("Chams" , this); + _hurAMSCB = new QCheckBox("HurricaneAMS" , this); + // Create GroupBox + QGroupBox* tools = new QGroupBox("Available Tools", this); + QGridLayout* grLayout = new QGridLayout(this); + grLayout->addWidget(_hurCB , 0, 0, 1, 1); + grLayout->addWidget(_ioCB , 1, 0, 1, 1); + grLayout->addWidget(_testCB , 2, 0, 1, 1); + grLayout->addWidget(_crlCB , 0, 1, 1, 1); + grLayout->addWidget(_chamsCB , 1, 1, 1, 1); + grLayout->addWidget(_hurAMSCB, 2, 1, 1, 1); + tools->setLayout(grLayout); + // ConfigDialog Layout + QVBoxLayout* vLayout = new QVBoxLayout; + vLayout->addWidget(directories); + vLayout->addWidget(tools); + vLayout->addWidget(bBox); + setLayout(vLayout); +} + +void ConfigDialog::chooseCProgram() { + _compileE->setText(QFileDialog::getOpenFileName(this, tr("Select chams.sh"), "", tr("Shell script (*.sh)"))); +} + +void ConfigDialog::chooseSourceRD() { + _sourceE->setText(QFileDialog::getExistingDirectory(this, tr("Select the chams source root directory"))); +} + +void ConfigDialog::doConfig() { + QStringList list; + QString hur = (_hurCB->isChecked()) ? "ON" : "OFF"; + QString io = (_ioCB->isChecked()) ? "ON" : "OFF"; + QString test = (_testCB->isChecked()) ? "ON" : "OFF"; + QString crl = (_crlCB->isChecked()) ? "ON" : "OFF"; + QString chams = (_chamsCB->isChecked()) ? "ON" : "OFF"; + QString hurAMS = (_hurAMSCB->isChecked()) ? "ON" : "OFF"; + list << _compileE->text() << _sourceE->text() << hur << io << test << crl << chams << hurAMS; + emit configDone(list); + accept(); +} diff --git a/bootstrap/easyChams/ConfigDialog.h b/bootstrap/easyChams/ConfigDialog.h new file mode 100644 index 00000000..2df9ab1c --- /dev/null +++ b/bootstrap/easyChams/ConfigDialog.h @@ -0,0 +1,88 @@ +#ifndef CONFIGDIALOG_H +#define CONFIGDIALOG_H + +#include +#include +#include + +class QLabel; +class QStringList; + +class ConfigDialog : public QDialog { + Q_OBJECT + +public: + ConfigDialog(); + inline void setCompileProgram(QString); + inline void setSourceRootDirectory(QString); + inline void setHasHurricane(bool); + inline void setHasIo(bool); + inline void setHasTest(bool); + inline void setHasCrlcore(bool); + inline void setHasChams(bool); + inline void setHasHurricaneAMS(bool); + +public slots: + void chooseCProgram(); + void chooseSourceRD(); + void doConfig(); + +signals: + void configDone (QStringList list); + +private: + QLineEdit* _compileE; + QLineEdit* _sourceE; + QCheckBox* _hurCB; + QCheckBox* _ioCB; + QCheckBox* _testCB; + QCheckBox* _crlCB; + QCheckBox* _chamsCB; + QCheckBox* _hurAMSCB; +}; + +inline void ConfigDialog::setCompileProgram (QString cProgram ) { _compileE->setText(cProgram); }; +inline void ConfigDialog::setSourceRootDirectory (QString rDirectory) { _sourceE->setText(rDirectory); }; + +inline void ConfigDialog::setHasHurricane(bool state) { + if (state) + _hurCB->setCheckState(Qt::Checked); + else + _hurCB->setCheckState(Qt::Unchecked); +}; + +inline void ConfigDialog::setHasIo(bool state) { + if (state) + _ioCB->setCheckState(Qt::Checked); + else + _ioCB->setCheckState(Qt::Unchecked); +}; + +inline void ConfigDialog::setHasTest(bool state) { + if (state) + _testCB->setCheckState(Qt::Checked); + else + _testCB->setCheckState(Qt::Unchecked); +}; + +inline void ConfigDialog::setHasCrlcore(bool state) { + if (state) + _crlCB->setCheckState(Qt::Checked); + else + _crlCB->setCheckState(Qt::Unchecked); +}; + +inline void ConfigDialog::setHasChams(bool state) { + if (state) + _chamsCB->setCheckState(Qt::Checked); + else + _chamsCB->setCheckState(Qt::Unchecked); +}; + +inline void ConfigDialog::setHasHurricaneAMS(bool state) { + if (state) + _hurAMSCB->setCheckState(Qt::Checked); + else + _hurAMSCB->setCheckState(Qt::Unchecked); +}; +#endif diff --git a/bootstrap/easyChams/MainWindow.cpp b/bootstrap/easyChams/MainWindow.cpp new file mode 100644 index 00000000..b9f21d8e --- /dev/null +++ b/bootstrap/easyChams/MainWindow.cpp @@ -0,0 +1,22 @@ +#include +#include +#include + +#include "MainWindow.h" + +MainWindow::MainWindow() +{ + CompilationWidget* cWidget = new CompilationWidget(this); + setCentralWidget(cWidget); + + QAction* configAct = new QAction(tr("&Configure"), this); + configAct->setStatusTip(tr("Configure the application")); + connect(configAct, SIGNAL(triggered()), cWidget, SLOT(reconfig())); + QAction* aboutAct = new QAction(tr("&About"), this); + aboutAct->setStatusTip(tr("Show the about dialog box")); + connect(aboutAct, SIGNAL(triggered()), cWidget, SLOT(about())); + QMenu* editMenu = menuBar()->addMenu(tr("&Edit")); + editMenu->addAction(configAct); + QMenu* helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(aboutAct); +} diff --git a/bootstrap/easyChams/MainWindow.h b/bootstrap/easyChams/MainWindow.h new file mode 100644 index 00000000..80a519f7 --- /dev/null +++ b/bootstrap/easyChams/MainWindow.h @@ -0,0 +1,15 @@ +#ifndef __MAINWINDOW_H +#define __MAINWINDOW_H + +#include + +#include "CompilationWidget.h" + +class MainWindow : public QMainWindow { + Q_OBJECT + + public: + MainWindow (); + ~MainWindow () {}; +}; +#endif diff --git a/bootstrap/easyChams/README b/bootstrap/easyChams/README new file mode 100644 index 00000000..70cc37a6 --- /dev/null +++ b/bootstrap/easyChams/README @@ -0,0 +1,5 @@ +easyChams readme + +This tool allows every one to easily compile & install chams project's sources. + +To compile this tool use ./compile.sh which is platform independant. diff --git a/bootstrap/easyChams/compile.sh b/bootstrap/easyChams/compile.sh new file mode 100755 index 00000000..56e63490 --- /dev/null +++ b/bootstrap/easyChams/compile.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +qmake -project +case "`uname -s`" in + Linux) qmake;; + Darwin) qmake -spec macx-g++;; +esac +make -j2 && make clean diff --git a/bootstrap/easyChams/icons/linux/Eye_of_Horus.png b/bootstrap/easyChams/icons/linux/Eye_of_Horus.png new file mode 100644 index 0000000000000000000000000000000000000000..85b5a497a22bdb0a15cea4fd4d35197a84d4236b GIT binary patch literal 29336 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 AX#fBK literal 0 HcmV?d00001 diff --git a/bootstrap/easyChams/main.cpp b/bootstrap/easyChams/main.cpp new file mode 100644 index 00000000..db30f5a8 --- /dev/null +++ b/bootstrap/easyChams/main.cpp @@ -0,0 +1,16 @@ +#include +using namespace std; + +#include +#include +#include +#include "MainWindow.h" + +int main ( int argc, char **argv ) { + QApplication app ( argc, argv ); + + MainWindow mWindow; + mWindow.show(); + + return app.exec(); +}