데이터를 저장할 클래스(CMakeList) 생성
// cmakelist.h
#pragma once
#include <qstring.h>
#include <qmap.h>
#include <qlist.h>
class CMakeLists
{
public:
CMakeLists();
~CMakeLists();
void SetProjectName(const QString&);
void AddCMakeFlags(const QString&, const QString&);
void AddDefine(const QString&);
void AddIncludeDirectory(const QString&);
void AddSource(const QString&, const QString&);
QString GenerateCMakeLists();
private:
QString projectName;
QMap<QString, QString> cmakeflags;
QList<QString> includeDirectories;
QMap<QString, QString> sources;
QList<QString> defines;
};
// cmakelist.cpp
#include "CMakeLists.h"
#include <qtextstream.h>
CMakeLists::CMakeLists()
{
}
CMakeLists::~CMakeLists()
{
}
void CMakeLists::SetProjectName(const QString& name)
{
projectName = name;
}
void CMakeLists::AddCMakeFlags(const QString& key, const QString& value)
{
cmakeflags.insert(key, value);
}
void CMakeLists::AddDefine(const QString& value)
{
defines.append(value);
}
void CMakeLists::AddIncludeDirectory(const QString& dir)
{
includeDirectories.append(dir);
}
void CMakeLists::AddSource(const QString& key, const QString& value)
{
sources.insert(key, value);
}
QString CMakeLists::GenerateCMakeLists()
{
QString outputString;
QTextStream ots(&outputString);
ots << "cmake_minimum_required (VERSION 2.6)" << endl;
ots << QString("project (%1)").arg(projectName) << endl;
for (const auto& e : sources.keys()) {
ots << QString("add_executable(%1 %2)").arg(e, sources.value(e)) << endl;
}
return outputString;
}
void CMakeWidzard2::currentTabChanged(int tab)
{
qDebug() << "current tab index" << tab << endl;
if (tab == 4) {
// Make CMake file
PrepareCMakeListVariables();
}
}
void CMakeWidzard2::PrepareCMakeListVariables()
{
CMakeLists cmakelists;
// project tab
QString projectName = ui.ProjectNamelineEdit->text();
cmakelists.SetProjectName(projectName);
// flags tab
auto flagsCount = ui.flagsTable->rowCount();
for (int rowIndex = 0; rowIndex < flagsCount; rowIndex++) {
auto keyItem = ui.flagsTable->item(rowIndex, 0);
auto valueItem = ui.flagsTable->item(rowIndex, 1);
QString flagsKey = keyItem->text();
QString flasvalye = valueItem->text();
cmakelists.AddCMakeFlags(flagsKey, flasvalye);
}
// preprocessor tab
if (ui.definesEdit->toPlainText().size() > 0) {
QStringList defines = ui.definesEdit->toPlainText().split(QRegExp("\\| \\;|\\n"));
for (int index = 0; index < defines.length(); index++) {
qDebug() << defines.at(index) << endl;
cmakelists.AddDefine(defines.at(index));
}
}
// directory tab
// 1. include dir(QListWidget)
for (int row = 0; row < ui.includeList->count(); row++) {
auto item = ui.includeList->item(row); // QListWidgetItem
QString includeDir = item->text();
cmakelists.AddIncludeDirectory(includeDir);
}
// 2. sources(QtableWidget)
for (int row = 0; row < ui.sourcesTable->rowCount(); row++) {
auto target = ui.sourcesTable->item(row, 0);
auto sources = ui.sourcesTable->item(row, 1);
cmakelists.AddSource(target->text(), sources->text());
}
// preview tab
QString previewCMakeList_txt = cmakelists.GenerateCMakeLists();
}