Qt_18 - 8BitsCoding/RobotMentor GitHub Wiki

// cmakelist.h
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_CMakeWidzard2.h"

class CMakeWidzard2 : public QMainWindow
{
	Q_OBJECT

public:
	CMakeWidzard2(QWidget *parent = Q_NULLPTR);

	void InsertFlagItem(const QString&, const QString&);
	void insertNewIncludeDirectory(const QString&);
	void addSource(const QString&, const QString&);

	void PrepareCMakeListVariables();

private slots:
	void on_actionExport_triggered();
	void on_AddBtn_clicked();
	void on_RemoveBtn_clicked();
	void on_addincludeBtn_clicked();
	void on_includeList_itemChanged(QListWidgetItem* item);
	void on_addsourceBtn_clicked();
	void on_removesourceBtn_clicked();
	void currentTabChanged(int tab);

private:
	Ui::CMakeWidzard2Class ui;
};
// 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;
	}

	for (const auto& e : cmakeflags.keys()) {
		ots << QString("set (%1 %2)").arg(e, cmakeflags.value(e)) << endl;
	}

	if (defines.size() > 0) {
		QString def = "";
		for (const auto& e : defines) {
			def += "-D" + e + " ";
		}

		ots << QString("add_definitions(%1)").arg(def) << endl;
	}

	for (const auto& e : includeDirectories) {
		ots << QString("include_directories(%1)").arg(e) << endl;
	}
		
	return outputString;
}
void CMakeWidzard2::on_actionExport_triggered()
{
	QString dir = QFileDialog::getExistingDirectory(this, "Directory to save", QDir::currentPath(), QFileDialog::ShowDirsOnly);
	
	if (dir.length() == 0) {
		QMessageBox::critical(this, "Failed to get dir", "Failed to get directory to save", QMessageBox::Ok);
		return;
	}

	auto filePath = QDir(dir).filePath("CMakeLists.txt");

	QFile file(filePath);

	if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
	{
		return;
	}

	PrepareCMakeListVariables();

	QTextStream stream(&file);

	stream << cmakeListResult << endl;

	file.close();
}