void MainWindow::generateOutput() { m_tabWidget->clear(); QString outputType = m_designWidget->outputType(); m_loader->setTheme(outputType); if (outputType == "cpp") return generateCpp(); Grantlee::Template classTemplate = m_engine->loadByName("class." + outputType); if (classTemplate->error()) { createOutputTab("Class", classTemplate->errorString()); return; } Grantlee::Context c = m_designWidget->getContext(); QString output; QTextStream textStream(&output); NoEscapeOutputStream stream(&textStream); classTemplate->render(&stream, &c); createOutputTab("Class", classTemplate->error() ? classTemplate->errorString() : output); }
MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) { QSplitter *splitter = new QSplitter(this); splitter->setStretchFactor(1, 5); m_designWidget = new DesignWidget(splitter); m_tabWidget = new QTabWidget(splitter); m_tabWidget->sizePolicy().setHorizontalPolicy(QSizePolicy::Expanding); createOutputTab("Output", "Click Generate to create output"); setCentralWidget(splitter); connect(m_designWidget, SIGNAL(generateClicked(bool)), SLOT(generateOutput())); m_engine = new Grantlee::Engine(this); m_engine->setPluginPaths(QStringList() << GRANTLEE_PLUGIN_PATH << ":/plugins"); m_engine->addDefaultLibrary("grantlee_scriptabletags"); m_engine->setSmartTrimEnabled(true); m_loader = QSharedPointer<Grantlee::FileSystemTemplateLoader>( new Grantlee::FileSystemTemplateLoader); m_loader->setTemplateDirs(QStringList() << ":/templates"); m_engine->addTemplateLoader(m_loader); m_engine->addDefaultLibrary("custom_tags"); }
void MainWindow::generateCpp() { Grantlee::Template headerTemplate = m_engine->loadByName("header.h"); if (headerTemplate->error()) { createOutputTab("Header", headerTemplate->errorString()); return; } Grantlee::Context c = m_designWidget->getContext(); QString output; QTextStream textStream(&output); NoEscapeOutputStream stream(&textStream); headerTemplate->render(&stream, &c); createOutputTab("Header", headerTemplate->error() ? headerTemplate->errorString() : output); if (headerTemplate->error()) return; output.clear(); Grantlee::Template implementationTemplate = m_engine->loadByName("implementation.cpp"); if (implementationTemplate->error()) { createOutputTab("Implementation", implementationTemplate->errorString()); return; } implementationTemplate->render(&stream, &c); createOutputTab("Implementation", implementationTemplate->error() ? implementationTemplate->errorString() : output); if (implementationTemplate->error()) return; output.clear(); if (c.lookup("pimpl").toBool()) { Grantlee::Template privateHeaderTemplate = m_engine->loadByName("private_header.h"); if (privateHeaderTemplate->error()) { createOutputTab("Private Header", privateHeaderTemplate->errorString()); return; } c.insert("className", Grantlee::getSafeString(c.lookup("className")) + QString("Private")); c.insert("baseClass", QVariant()); privateHeaderTemplate->render(&stream, &c); createOutputTab("Private Header", privateHeaderTemplate->error() ? privateHeaderTemplate->errorString() : output); if (privateHeaderTemplate->error()) return; } }
/*! \brief lance le processus de compilation adéquate en fonction de l'extension du fichier */ void WindowIDE::compile(void) { #ifndef Q_OS_ANDROID mapSRC.clear(); mapPP.clear(); mapASM.clear(); mapLM.clear(); save(); CEditorWidget *locEditorWidget = ((CEditorWidget*)ui->tabWidget->currentWidget()); QString source = "#include <internal.h>\r\n"+locEditorWidget->m_editControl->editor()->text(); QString sourcefname=locEditorWidget->m_editControl->editor()->fileName(); QFileInfo fInfo(sourcefname); if (locEditorWidget->m_editControl->editor()->languageDefinition()->language()=="C++") { mapSRC[sourcefname] = source.toAscii(); Clcpp *lcpp = new Clcpp(&mapSRC,&mapPP,ui->targetComboBox->currentText()); lcpp->pStdLibs->LoadLibs(); lcpp->run(); //createEditorTab(fInfo.baseName()+".pp",mapPP[sourcefname]); //createOutputTab("PP Compiler :"+fInfo.fileName(),mapPP["output"]); #if 1 Clcc *lcc = new Clcc(&mapPP,&mapASM); lcc->run(); createEditorTab(fInfo.baseName()+".log",mapASM["LOG"]); createEditorTab(fInfo.baseName()+".asm",mapASM[fInfo.baseName()+".asm"]); createOutputTab("C Compiler :"+fInfo.fileName(),mapASM["output"]); #endif } if (locEditorWidget->m_editControl->editor()->languageDefinition()->language()=="ASM") { CEditorWidget *currentWidget = locEditorWidget; mapSRC[sourcefname] = source.toAscii(); Cpasm * pasm = new Cpasm(&mapSRC,&mapLM); pasm->run("BAS",mapSRC[sourcefname]); pasm->savefile("BAS"); pasm->savefile("BIN"); pasm->savefile("HEX"); createEditorTab(fInfo.baseName()+".bas",mapLM["BAS"]); createOutputTab("ASM Compiler :"+fInfo.fileName(),mapLM["output"]); currentWidget = ((CEditorWidget*)ui->tabWidget->currentWidget()); QHexPanel *hexpanel = new QHexPanel(); currentWidget->m_editControl ->addPanel(hexpanel, QCodeEdit::South, true); hexpanel->startadr = mapLM["_ORG"].trimmed().toLong(); hexpanel->hexeditor->setData(mapLM["BIN"],hexpanel->startadr); hexpanel->hexeditor->setCursorPosition(0,BINEditor::BinEditor::MoveAnchor); connect(this,SIGNAL(newEmulatedPocket(CPObject*)),hexpanel,SLOT(newPocket(CPObject*))); connect(this,SIGNAL(removeEmulatedPocket(CPObject*)),hexpanel,SLOT(removePocket(CPObject*))); connect(hexpanel,SIGNAL(installTo(CpcXXXX*,qint32,QByteArray)),this,SLOT(installTo(CpcXXXX*,qint32,QByteArray))); // MSG_ERROR("*"+mapLM["_ORG"]+"*"); // MSG_ERROR(QString("%1").arg(hexpanel->startadr)); }