#include "main_grantlee_gui.h" #include "ui_main_grantlee_gui.h" #include "StructBuilder.h" #include "XmlReader.h" #include "CppTopicGeneratorGrantlee.h" #include "DatabaseGeneratorGrantlee.h" #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , m_xmlReader(nullptr) , m_structBuilder(nullptr) , m_generator(new CodeGen::CppTopicGeneratorGrantlee) , m_engine(new Grantlee::Engine) , m_ui(new Ui_MainGrantleeGui) { m_idlServiceInfoFile = QStringLiteral("/home/chehrlic/TDS/TDS-build-product-clang/service_idl_files.txt"); m_ui->setupUi(this); connect(m_ui->actionExit, &QAction::triggered, this, &MainWindow::close); connect(m_ui->actionSelect_Data_Source, &QAction::triggered, this, &MainWindow::onSelectDataSource); connect(m_ui->actionOpen_Template, &QAction::triggered, this, &MainWindow::onOpenTemplate); connect(m_ui->actionSave_Template, &QAction::triggered, this, &MainWindow::onSaveTemplate); connect(m_ui->pbRefresh, &QPushButton::clicked, this, &MainWindow::onRefreshOutput); connect(m_ui->actionDatabaseGenerator, &QAction::triggered, this, &MainWindow::onGeneratorDb); connect(m_ui->actionDDS_Generator, &QAction::triggered, this, &MainWindow::onGeneratorDds); } MainWindow::~MainWindow() { delete m_xmlReader; delete m_structBuilder; delete m_generator; delete m_engine; delete m_ui; } static QLatin1String s_startDir("/home/chehrlic/TDS/TDS-source-product/Lts/"); void MainWindow::onSelectDataSource() { const QString dataSource = QFileDialog::getOpenFileName(this, tr("Select data source"), s_startDir, tr("Service Files (*.xml)")); if (dataSource.isEmpty()) return; delete m_xmlReader; m_xmlReader = new CodeGen::XmlReader; if (!m_xmlReader->readServiceFile(dataSource, m_idlServiceInfoFile)) { QMessageBox::warning(this, tr("Invalid data source"), tr("The selected data source is not valid: %1").arg(m_xmlReader->errorString())); return; } delete m_structBuilder; m_structBuilder = new CodeGen::StructBuilder(m_xmlReader); if (!m_structBuilder->buildStructures()) { QMessageBox::warning(this, tr("Invalid data source"), tr("Error building structures from data")); return; } m_ui->teOuput->clear(); m_generator->init(m_xmlReader, m_structBuilder); QMessageBox::information(this, tr("Data source"), tr("Successfully loaded data source")); } void MainWindow::onOpenTemplate() { const QString templateFile = QFileDialog::getOpenFileName(this, tr("Select data source"), s_startDir, tr("Templates (*.grantlee)")); if (templateFile.isEmpty()) return; QFile f(templateFile); if (!f.open(QIODevice::ReadOnly)) { QMessageBox::warning(this, tr("Error reading template file"), tr("Can not read file: %1").arg(f.errorString())); return; } const QString content = QString::fromUtf8(f.readAll()); m_ui->teInput->setText(content); m_templateFile = templateFile; } void MainWindow::onSaveTemplate() { QFile f(m_templateFile); if (!f.open(QIODevice::WriteOnly)) { QMessageBox::warning(this, tr("Error saving template file"), tr("Can not save file: %1").arg(f.errorString())); return; } f.write(m_ui->teInput->toPlainText().toUtf8()); f.close(); QMessageBox::information(this, tr("Saving template file"), tr("Successfully saved template to %1").arg(m_templateFile)); } void MainWindow::onRefreshOutput() { const QString in = m_ui->teInput->toPlainText(); if (!m_generator->setTemplate(QString(), in)) { m_ui->teOuput->setText(m_generator->errorString()); return; } m_ui->teOuput->setText(m_generator->render()); } void MainWindow::onGeneratorDb() { if (dynamic_cast(m_generator)) return; delete m_generator; m_generator = new CodeGen::DatabaseGeneratorGrantlee(false); if (m_xmlReader && m_structBuilder) m_generator->init(m_xmlReader, m_structBuilder); } void MainWindow::onGeneratorDds() { if (dynamic_cast(m_generator)) return; delete m_generator; m_generator = new CodeGen::CppTopicGeneratorGrantlee; if (m_xmlReader && m_structBuilder) m_generator->init(m_xmlReader, m_structBuilder); } int main(int argc, char **argv) { NGLApplication app(argc, argv); app.createLogger("CodeGen", "codegen_log4cxx.props"); NGL::INGLLogger &m_logger = app.baseLogger(); STARTUP_LOG(m_logger); int iRet = 0; { QScopedPointer mw(new MainWindow); mw->show(); iRet = app.exec(); } SHUTDOWN_LOG(m_logger); return iRet; }