work save: project Template

- done: all project option dialogs
This commit is contained in:
royqh1979 2021-09-15 22:19:59 +08:00
parent c242225951
commit ca728a2900
20 changed files with 1029 additions and 6 deletions

View File

@ -34,6 +34,7 @@ SOURCES += \
parser/parserutils.cpp \ parser/parserutils.cpp \
parser/statementmodel.cpp \ parser/statementmodel.cpp \
project.cpp \ project.cpp \
projecttemplate.cpp \
qsynedit/Search.cpp \ qsynedit/Search.cpp \
qsynedit/SearchBase.cpp \ qsynedit/SearchBase.cpp \
qsynedit/SearchRegex.cpp \ qsynedit/SearchRegex.cpp \
@ -48,7 +49,10 @@ SOURCES += \
settingsdialog/projectdirectorieswidget.cpp \ settingsdialog/projectdirectorieswidget.cpp \
settingsdialog/projectfileswidget.cpp \ settingsdialog/projectfileswidget.cpp \
settingsdialog/projectgeneralwidget.cpp \ settingsdialog/projectgeneralwidget.cpp \
settingsdialog/projectmakefilewidget.cpp \
settingsdialog/projectoutputwidget.cpp \
settingsdialog/projectprecompilewidget.cpp \ settingsdialog/projectprecompilewidget.cpp \
settingsdialog/projectversioninfowidget.cpp \
widgets/classbrowser.cpp \ widgets/classbrowser.cpp \
widgets/codecompletionlistview.cpp \ widgets/codecompletionlistview.cpp \
widgets/codecompletionpopup.cpp \ widgets/codecompletionpopup.cpp \
@ -91,6 +95,7 @@ SOURCES += \
utils.cpp \ utils.cpp \
widgets/coloredit.cpp \ widgets/coloredit.cpp \
widgets/consolewidget.cpp \ widgets/consolewidget.cpp \
widgets/custommakefileinfodialog.cpp \
widgets/filepropertiesdialog.cpp \ widgets/filepropertiesdialog.cpp \
widgets/headercompletionpopup.cpp \ widgets/headercompletionpopup.cpp \
widgets/issuestable.cpp \ widgets/issuestable.cpp \
@ -122,6 +127,7 @@ HEADERS += \
parser/statementmodel.h \ parser/statementmodel.h \
platform.h \ platform.h \
project.h \ project.h \
projecttemplate.h \
qsynedit/Search.h \ qsynedit/Search.h \
qsynedit/SearchBase.h \ qsynedit/SearchBase.h \
qsynedit/SearchRegex.h \ qsynedit/SearchRegex.h \
@ -136,7 +142,10 @@ HEADERS += \
settingsdialog/projectdirectorieswidget.h \ settingsdialog/projectdirectorieswidget.h \
settingsdialog/projectfileswidget.h \ settingsdialog/projectfileswidget.h \
settingsdialog/projectgeneralwidget.h \ settingsdialog/projectgeneralwidget.h \
settingsdialog/projectmakefilewidget.h \
settingsdialog/projectoutputwidget.h \
settingsdialog/projectprecompilewidget.h \ settingsdialog/projectprecompilewidget.h \
settingsdialog/projectversioninfowidget.h \
widgets/classbrowser.h \ widgets/classbrowser.h \
widgets/codecompletionlistview.h \ widgets/codecompletionlistview.h \
widgets/codecompletionpopup.h \ widgets/codecompletionpopup.h \
@ -180,6 +189,7 @@ HEADERS += \
common.h \ common.h \
widgets/coloredit.h \ widgets/coloredit.h \
widgets/consolewidget.h \ widgets/consolewidget.h \
widgets/custommakefileinfodialog.h \
widgets/filepropertiesdialog.h \ widgets/filepropertiesdialog.h \
widgets/headercompletionpopup.h \ widgets/headercompletionpopup.h \
widgets/issuestable.h \ widgets/issuestable.h \
@ -200,7 +210,10 @@ FORMS += \
settingsdialog/projectdirectorieswidget.ui \ settingsdialog/projectdirectorieswidget.ui \
settingsdialog/projectfileswidget.ui \ settingsdialog/projectfileswidget.ui \
settingsdialog/projectgeneralwidget.ui \ settingsdialog/projectgeneralwidget.ui \
settingsdialog/projectmakefilewidget.ui \
settingsdialog/projectoutputwidget.ui \
settingsdialog/projectprecompilewidget.ui \ settingsdialog/projectprecompilewidget.ui \
settingsdialog/projectversioninfowidget.ui \
widgets/cpudialog.ui \ widgets/cpudialog.ui \
mainwindow.ui \ mainwindow.ui \
settingsdialog/compilersetdirectorieswidget.ui \ settingsdialog/compilersetdirectorieswidget.ui \
@ -214,6 +227,7 @@ FORMS += \
settingsdialog/environmentappearencewidget.ui \ settingsdialog/environmentappearencewidget.ui \
settingsdialog/executorgeneralwidget.ui \ settingsdialog/executorgeneralwidget.ui \
settingsdialog/settingsdialog.ui \ settingsdialog/settingsdialog.ui \
widgets/custommakefileinfodialog.ui \
widgets/filepropertiesdialog.ui \ widgets/filepropertiesdialog.ui \
widgets/searchdialog.ui widgets/searchdialog.ui

View File

@ -1403,12 +1403,12 @@ void Project::updateFolderNode(PFolderNode node)
} }
} }
QByteArray Project::toByteArray(const QString &s) QByteArray toByteArray(const QString &s)
{ {
return s.toLocal8Bit(); return s.toLocal8Bit();
} }
QString Project::fromByteArray(const QByteArray &s) QString fromByteArray(const QByteArray &s)
{ {
return QString::fromLocal8Bit(s); return QString::fromLocal8Bit(s);
} }
@ -1718,3 +1718,24 @@ QVariant ProjectModel::data(const QModelIndex &index, int role) const
} }
return QVariant(); return QVariant();
} }
ProjectVersionInfo::ProjectVersionInfo()
{
major = 1;
minor = 0;
release = 0;
build = 0;
languageID = 0x0409; // US English
charsetID = 0x04E4; // Windows multilingual
companyName = "";
fileVersion = "";
fileDescription = "Developed using the Red Panda Dev-C++ IDE";
internalName = "";
legalCopyright = "";
legalTrademarks = "";
originalFilename = "";
productName = "";
productVersion = "";
autoIncBuildNr = false;
syncProduct = true;
}

View File

@ -83,6 +83,7 @@ private:
using PProjectUnit = std::shared_ptr<ProjectUnit>; using PProjectUnit = std::shared_ptr<ProjectUnit>;
struct ProjectVersionInfo{ struct ProjectVersionInfo{
explicit ProjectVersionInfo();
int major; int major;
int minor; int minor;
int release; int release;
@ -238,8 +239,6 @@ private:
void open(); void open();
void removeFolderRecurse(PFolderNode node); void removeFolderRecurse(PFolderNode node);
void updateFolderNode(PFolderNode node); void updateFolderNode(PFolderNode node);
QByteArray toByteArray(const QString& s);
QString fromByteArray(const QByteArray& s);
private: private:
QList<PProjectUnit> mUnits; QList<PProjectUnit> mUnits;
@ -254,4 +253,7 @@ private:
ProjectModel mModel; ProjectModel mModel;
}; };
QByteArray toByteArray(const QString& s);
QString fromByteArray(const QByteArray& s);
#endif // PROJECT_H #endif // PROJECT_H

View File

@ -0,0 +1,61 @@
#include "projecttemplate.h"
#include "SimpleIni.h"
#include <QFile>
ProjectTemplate::ProjectTemplate(QObject *parent) : QObject(parent)
{
}
int ProjectTemplate::unitCount()
{
if (mFileName.isEmpty() || !QFile(mFileName).exists())
return -1;
SimpleIni ini;
ini.LoadFile(toByteArray(mFileName));
int ver = ini.GetLongValue("Template","Ver",0);
if (ver<=0)
return 0;
return ini.GetLongValue("Project","UnitCount",0);
}
PTemplateUnit ProjectTemplate::unit(int index)
{
if (mFileName.isEmpty() || !QFile(mFileName).exists())
return PTemplateUnit();
SimpleIni ini;
ini.LoadFile(toByteArray(mFileName));
int ver = ini.GetLongValue("Template","Ver",0);
if (ver<=0)
return PTemplateUnit();
QString section = QString("Unit%1").arg(index);
PTemplateUnit unit = std::make_shared<TemplateUnit>();
unit->CText = fromByteArray(ini.GetValue(toByteArray(section), "C", ""));
unit->CppText = fromByteArray(ini.GetValue(toByteArray(section), "Cpp", ""));
if (unit->CppText.isEmpty())
unit->CppText = unit->CText;
unit->CName = fromByteArray(ini.GetValue(toByteArray(section), "CName", ""));
unit->CppName = fromByteArray(ini.GetValue(toByteArray(section), "CppName", ""));
if (unit->CppName.isEmpty())
unit->CppName = unit->CName;
}
void ProjectTemplate::setUnit(int index, PTemplateUnit newUnit)
{
if (!newUnit)
return;
if (mFileName.isEmpty() || !QFile(mFileName).exists())
return;
SimpleIni ini;
ini.LoadFile(toByteArray(mFileName));
int ver = ini.GetLongValue("Template","Ver",0);
if (ver<=0)
return;
QByteArray section = toByteArray(QString("Unit%1").arg(index));
ini.SetValue(section,"C", toByteArray(newUnit->CText));
ini.SetValue(section,"Cpp", toByteArray(newUnit->CppText));
ini.SetValue(section,"CName", toByteArray(newUnit->CName));
ini.SetValue(section,"CppName", toByteArray(newUnit->CppName));
ini.SaveFile(toByteArray(mFileName));
}

View File

@ -0,0 +1,37 @@
#ifndef PROJECTTEMPLATE_H
#define PROJECTTEMPLATE_H
#include <QObject>
#include "project.h"
struct TemplateUnit {
QString CName;
QString CppName;
QString CText;
QString CppText;
};
using PTemplateUnit = std::shared_ptr<TemplateUnit>;
class ProjectTemplate : public QObject
{
Q_OBJECT
public:
explicit ProjectTemplate(QObject *parent = nullptr);
int unitCount();
PTemplateUnit unit(int index);
void setUnit(int index, PTemplateUnit newUnit);
private:
QString mFileName;
ProjectOptions mOptions;
QString mDesc;
QString mCategory;
QString mName;
QString mIcon; // icon in project form
int mVersion;
signals:
};
#endif // PROJECTTEMPLATE_H

View File

@ -3,7 +3,6 @@
#include <QWidget> #include <QWidget>
#include "settingswidget.h" #include "settingswidget.h"
#include "compilersetdirectorieswidget.h"
namespace Ui { namespace Ui {
class ProjectDirectoriesWidget; class ProjectDirectoriesWidget;

View File

@ -0,0 +1,59 @@
#include "projectmakefilewidget.h"
#include "ui_projectmakefilewidget.h"
#include "compilersetdirectorieswidget.h"
#include "../mainwindow.h"
#include "../project.h"
#include "../widgets/custommakefileinfodialog.h"
#include <QFileDialog>
ProjectMakefileWidget::ProjectMakefileWidget(const QString &name, const QString &group, QWidget *parent) :
SettingsWidget(name,group,parent),
ui(new Ui::ProjectMakefileWidget)
{
ui->setupUi(this);
mIncludesDirWidget = new CompilerSetDirectoriesWidget(this);
ui->verticalLayout->addWidget(mIncludesDirWidget);
}
ProjectMakefileWidget::~ProjectMakefileWidget()
{
delete ui;
}
void ProjectMakefileWidget::doLoad()
{
ui->grpCustomMakefile->setChecked(pMainWindow->project()->options().useCustomMakefile);
ui->txtCustomMakefile->setText(pMainWindow->project()->options().customMakefile);
mIncludesDirWidget->setDirList(pMainWindow->project()->options().makeIncludes);
}
void ProjectMakefileWidget::doSave()
{
pMainWindow->project()->options().useCustomMakefile = ui->grpCustomMakefile->isChecked();
pMainWindow->project()->options().customMakefile = ui->txtCustomMakefile->text();
pMainWindow->project()->options().makeIncludes = mIncludesDirWidget->dirList();
pMainWindow->project()->saveOptions();
}
void ProjectMakefileWidget::on_btnBrowse_triggered(QAction *arg1)
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("Custom makefile"),
pMainWindow->project()->directory(),
tr("All files (*.*)"));
if (!fileName.isEmpty() && QFileInfo(fileName).exists()) {
ui->txtCustomMakefile->setText(fileName);
}
}
void ProjectMakefileWidget::on_pushButton_clicked()
{
CustomMakefileInfoDialog dialog(this);
dialog.exec();
}

View File

@ -0,0 +1,33 @@
#ifndef PROJECTMAKEFILEWIDGET_H
#define PROJECTMAKEFILEWIDGET_H
#include <QWidget>
#include "settingswidget.h"
namespace Ui {
class ProjectMakefileWidget;
}
class CompilerSetDirectoriesWidget;
class ProjectMakefileWidget : public SettingsWidget
{
Q_OBJECT
public:
explicit ProjectMakefileWidget(const QString& name, const QString& group, QWidget *parent = nullptr);
~ProjectMakefileWidget();
private:
Ui::ProjectMakefileWidget *ui;
CompilerSetDirectoriesWidget * mIncludesDirWidget;
// SettingsWidget interface
protected:
void doLoad() override;
void doSave() override;
private slots:
void on_btnBrowse_triggered(QAction *arg1);
void on_pushButton_clicked();
};
#endif // PROJECTMAKEFILEWIDGET_H

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ProjectMakefileWidget</class>
<widget class="QWidget" name="ProjectMakefileWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>610</width>
<height>462</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="grpCustomMakefile">
<property name="title">
<string>Use custom make file</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLineEdit" name="txtCustomMakefile"/>
</item>
<item row="0" column="1">
<widget class="QToolButton" name="btnBrowse">
<property name="text">
<string>Browse</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/images/newlook24/053-open.png</normaloff>:/icons/images/newlook24/053-open.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Information about using a custom make file </string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/images/newlook24/085-tutor.png</normaloff>:/icons/images/newlook24/085-tutor.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../icons.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -0,0 +1,75 @@
#include "projectoutputwidget.h"
#include "ui_projectoutputwidget.h"
#include "../mainwindow.h"
#include "../project.h"
#include <QFileDialog>
ProjectOutputWidget::ProjectOutputWidget(const QString &name, const QString &group, QWidget *parent) :
SettingsWidget(name,group,parent),
ui(new Ui::ProjectOutputWidget)
{
ui->setupUi(this);
}
ProjectOutputWidget::~ProjectOutputWidget()
{
delete ui;
}
void ProjectOutputWidget::doLoad()
{
ui->txtOutputDir->setText(pMainWindow->project()->options().exeOutput);
ui->txtObjOutputDir->setText(pMainWindow->project()->options().objectOutput);
ui->grpAutosaveCompileLog->setChecked(pMainWindow->project()->options().logOutputEnabled);
ui->txtCompileLog->setText(pMainWindow->project()->options().logOutput);
ui->grpOverrideOutput->setChecked(pMainWindow->project()->options().overrideOutput);
ui->txtOutputFilename->setText(pMainWindow->project()->options().overridenOutput);
}
void ProjectOutputWidget::doSave()
{
pMainWindow->project()->options().exeOutput = ui->txtOutputDir->text();
pMainWindow->project()->options().objectOutput = ui->txtObjOutputDir->text();
pMainWindow->project()->options().logOutputEnabled = ui->grpAutosaveCompileLog->isChecked();
pMainWindow->project()->options().logOutput = ui->txtCompileLog->text();
pMainWindow->project()->options().overrideOutput = ui->grpOverrideOutput->isChecked();
pMainWindow->project()->options().overridenOutput = ui->txtOutputFilename->text();
pMainWindow->project()->saveOptions();
}
void ProjectOutputWidget::on_btnOutputDir_triggered(QAction *)
{
QString dirName = QFileDialog::getExistingDirectory(
this,
tr("Executable output directory"),
pMainWindow->project()->directory());
if (!dirName.isEmpty())
ui->txtOutputDir->setText(dirName);
}
void ProjectOutputWidget::on_btnObjOutputDir_triggered(QAction *)
{
QString dirName = QFileDialog::getExistingDirectory(
this,
tr("Object files output directory"),
pMainWindow->project()->directory());
if (!dirName.isEmpty())
ui->txtObjOutputDir->setText(dirName);
}
void ProjectOutputWidget::on_btnCompileLog_triggered(QAction *)
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("Log file"),
pMainWindow->project()->directory(),
tr("All files (*.*)"));
if (!fileName.isEmpty() ) {
ui->txtCompileLog->setText(fileName);
}
}

View File

@ -0,0 +1,32 @@
#ifndef PROJECTOUTPUTWIDGET_H
#define PROJECTOUTPUTWIDGET_H
#include <QWidget>
#include "settingswidget.h"
namespace Ui {
class ProjectOutputWidget;
}
class ProjectOutputWidget : public SettingsWidget
{
Q_OBJECT
public:
explicit ProjectOutputWidget(const QString& name, const QString& group, QWidget *parent = nullptr);
~ProjectOutputWidget();
private:
Ui::ProjectOutputWidget *ui;
// SettingsWidget interface
protected:
void doLoad() override;
void doSave() override;
private slots:
void on_btnOutputDir_triggered(QAction *arg1);
void on_btnObjOutputDir_triggered(QAction *arg1);
void on_btnCompileLog_triggered(QAction *arg1);
};
#endif // PROJECTOUTPUTWIDGET_H

View File

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ProjectOutputWidget</class>
<widget class="QWidget" name="ProjectOutputWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>561</width>
<height>457</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Executable output directory</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="txtOutputDir"/>
</item>
<item>
<widget class="QToolButton" name="btnOutputDir">
<property name="text">
<string>browse</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/images/newlook24/053-open.png</normaloff>:/icons/images/newlook24/053-open.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Object file output directory</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="txtObjOutputDir"/>
</item>
<item>
<widget class="QToolButton" name="btnObjOutputDir">
<property name="text">
<string>browse</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/images/newlook24/053-open.png</normaloff>:/icons/images/newlook24/053-open.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="grpAutosaveCompileLog">
<property name="title">
<string>Auto save compile log</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLineEdit" name="txtCompileLog"/>
</item>
<item>
<widget class="QToolButton" name="btnCompileLog">
<property name="text">
<string>browse</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
<normaloff>:/icons/images/newlook24/053-open.png</normaloff>:/icons/images/newlook24/053-open.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="grpOverrideOutput">
<property name="title">
<string>Override output filename</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLineEdit" name="txtOutputFilename"/>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources>
<include location="../icons.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -34,7 +34,7 @@ void ProjectPreCompileWidget::on_btnBrowse_triggered(QAction *arg1)
{ {
QString fileName = QFileDialog::getOpenFileName( QString fileName = QFileDialog::getOpenFileName(
this, this,
tr("precompiled header"), tr("Precompiled header"),
pMainWindow->project()->directory(), pMainWindow->project()->directory(),
tr("header files (*.h")); tr("header files (*.h"));
if (!fileName.isEmpty() && QFileInfo(fileName).exists()) { if (!fileName.isEmpty() && QFileInfo(fileName).exists()) {

View File

@ -0,0 +1,91 @@
#include "projectversioninfowidget.h"
#include "ui_projectversioninfowidget.h"
#include <winnls.h>
#include "../mainwindow.h"
#include "../project.h"
static QStringList languageNames;
static QList<int> languageIDs;
static BOOL CALLBACK localeEnumProc(
_In_ LPTSTR lpLocaleString
) {
QString s = QString::fromWCharArray(lpLocaleString);
bool ok;
int aid = s.mid(4,4).toInt(&ok,16);
if (ok) {
TCHAR buffer [1024];
GetLocaleInfo(aid, LOCALE_SLANGUAGE,buffer,sizeof(buffer)/2);
languageNames.append(QString::fromWCharArray(buffer));
languageIDs.append(aid);
}
return TRUE;
}
ProjectVersionInfoWidget::ProjectVersionInfoWidget(const QString &name, const QString &group, QWidget *parent) :
SettingsWidget(name,group,parent),
ui(new Ui::ProjectVersionInfoWidget)
{
ui->setupUi(this);
if (languageNames.isEmpty()) {
EnumSystemLocales(localeEnumProc, LCID_SUPPORTED);
}
ui->cbLanguage->addItems(languageNames);
}
ProjectVersionInfoWidget::~ProjectVersionInfoWidget()
{
delete ui;
}
void ProjectVersionInfoWidget::doLoad()
{
std::shared_ptr<Project> project = pMainWindow->project();
ui->grpVersionInfo->setChecked(project->options().includeVersionInfo);
ui->spinMajor->setValue(project->options().versionInfo.major);
ui->spinMinor->setValue(project->options().versionInfo.minor);
ui->spinRelease->setValue(project->options().versionInfo.release);
ui->spinBuild->setValue(project->options().versionInfo.build);
ui->chkAutoIncreaseBuildNumber->setChecked(project->options().versionInfo.autoIncBuildNr);
ui->chkSyncProductWithFile->setChecked(project->options().versionInfo.syncProduct);
for (int i=0;i<languageIDs.count();i++) {
if (languageIDs[i] == project->options().versionInfo.languageID) {
ui->cbLanguage->setCurrentIndex(i);
break;
}
}
ui->txtFileDescription->setText(project->options().versionInfo.fileDescription);
ui->txtFileVersion->setText(project->options().versionInfo.fileVersion);
ui->txtProductName->setText(project->options().versionInfo.productName);
ui->txtProductVersion->setText(project->options().versionInfo.productVersion);
ui->txtOriginalFilename->setText(project->options().versionInfo.originalFilename);
ui->txtInternalFilename->setText(project->options().versionInfo.internalName);
ui->txtCompanyName->setText(project->options().versionInfo.companyName);
ui->txtLegalCopyright->setText(project->options().versionInfo.legalCopyright);
ui->txtLegalTrademarks->setText(project->options().versionInfo.legalTrademarks);
}
void ProjectVersionInfoWidget::doSave()
{
std::shared_ptr<Project> project = pMainWindow->project();
project->options().includeVersionInfo = ui->grpVersionInfo->isChecked();
project->options().versionInfo.major = ui->spinMajor->value();
project->options().versionInfo.minor = ui->spinMinor->value();
project->options().versionInfo.release = ui->spinRelease->value();
project->options().versionInfo.build = ui->spinBuild->value();
project->options().versionInfo.autoIncBuildNr = ui->chkAutoIncreaseBuildNumber->isChecked();
project->options().versionInfo.syncProduct = ui->chkSyncProductWithFile->isChecked();
if (ui->cbLanguage->currentIndex()>=0)
project->options().versionInfo.languageID = languageIDs[ui->cbLanguage->currentIndex()];
project->options().versionInfo.fileDescription = ui->txtFileDescription->text();
project->options().versionInfo.fileVersion = ui->txtFileVersion->text();
project->options().versionInfo.productName = ui->txtProductName->text();
project->options().versionInfo.productVersion = ui->txtProductVersion->text();
project->options().versionInfo.originalFilename = ui->txtOriginalFilename->text();
project->options().versionInfo.internalName = ui->txtInternalFilename->text();
project->options().versionInfo.companyName = ui->txtCompanyName->text();
project->options().versionInfo.legalCopyright = ui->txtLegalCopyright->text();
project->options().versionInfo.legalTrademarks = ui->txtLegalTrademarks->text();
project->saveOptions();
}

View File

@ -0,0 +1,29 @@
#ifndef PROJECTVERSIONINFOWIDGET_H
#define PROJECTVERSIONINFOWIDGET_H
#include <QWidget>
#include "settingswidget.h"
namespace Ui {
class ProjectVersionInfoWidget;
}
class ProjectVersionInfoWidget : public SettingsWidget
{
Q_OBJECT
public:
explicit ProjectVersionInfoWidget(const QString& name, const QString& group, QWidget *parent = nullptr);
~ProjectVersionInfoWidget();
private:
Ui::ProjectVersionInfoWidget *ui;
// SettingsWidget interface
protected:
void doLoad() override;
void doSave() override;
};
#endif // PROJECTVERSIONINFOWIDGET_H

View File

@ -0,0 +1,254 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ProjectVersionInfoWidget</class>
<widget class="QWidget" name="ProjectVersionInfoWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>906</width>
<height>578</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="grpVersionInfo">
<property name="title">
<string>Include version info in project</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="3">
<widget class="QWidget" name="widget" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<item row="2" column="1">
<widget class="QSpinBox" name="spinMinor">
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QSpinBox" name="spinBuild">
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Major</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Minor</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Rlease</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="spinRelease">
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QSpinBox" name="spinMajor">
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Build</string>
</property>
</widget>
</item>
<item row="1" column="4">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="3" column="0" colspan="3">
<widget class="QWidget" name="widget_2" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Language:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cbLanguage"/>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Original filename</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QLineEdit" name="txtCompanyName"/>
</item>
<item row="2" column="0" colspan="3">
<widget class="QCheckBox" name="chkSyncProductWithFile">
<property name="text">
<string>Sync product with file version</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Internal name</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="txtProductName"/>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="txtFileDescription"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>File version</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Legal trademarks</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Product name</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="txtLegalCopyright"/>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Company name</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="txtInternalFilename"/>
</item>
<item row="1" column="0" colspan="3">
<widget class="QCheckBox" name="chkAutoIncreaseBuildNumber">
<property name="text">
<string>Auto-increase build number on compile</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLineEdit" name="txtOriginalFilename"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>File description</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Product version</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="txtProductVersion"/>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Legal copyright</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="txtFileVersion"/>
</item>
<item row="12" column="1">
<widget class="QLineEdit" name="txtLegalTrademarks"/>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -22,6 +22,9 @@
#include "projectcompileparamaterswidget.h" #include "projectcompileparamaterswidget.h"
#include "projectdirectorieswidget.h" #include "projectdirectorieswidget.h"
#include "projectprecompilewidget.h" #include "projectprecompilewidget.h"
#include "projectoutputwidget.h"
#include "projectmakefilewidget.h"
#include "projectversioninfowidget.h"
#include <QDebug> #include <QDebug>
#include <QMessageBox> #include <QMessageBox>
#include <QModelIndex> #include <QModelIndex>
@ -178,6 +181,18 @@ PSettingsDialog SettingsDialog::projectOptionDialog()
widget->init(); widget->init();
dialog->addWidget(widget); dialog->addWidget(widget);
widget = new ProjectMakefileWidget(tr("Makefile"),tr("Project"));
widget->init();
dialog->addWidget(widget);
widget = new ProjectOutputWidget(tr("Output"),tr("Project"));
widget->init();
dialog->addWidget(widget);
widget = new ProjectVersionInfoWidget(tr("Version info"),tr("Project"));
widget->init();
dialog->addWidget(widget);
dialog->selectFirstWidget(); dialog->selectFirstWidget();
return dialog; return dialog;

View File

@ -0,0 +1,20 @@
#include "custommakefileinfodialog.h"
#include "ui_custommakefileinfodialog.h"
CustomMakefileInfoDialog::CustomMakefileInfoDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::CustomMakefileInfoDialog)
{
ui->setupUi(this);
}
CustomMakefileInfoDialog::~CustomMakefileInfoDialog()
{
delete ui;
}
void CustomMakefileInfoDialog::on_pushButton_clicked()
{
hide();
}

View File

@ -0,0 +1,25 @@
#ifndef CUSTOMMAKEFILEINFODIALOG_H
#define CUSTOMMAKEFILEINFODIALOG_H
#include <QDialog>
namespace Ui {
class CustomMakefileInfoDialog;
}
class CustomMakefileInfoDialog : public QDialog
{
Q_OBJECT
public:
explicit CustomMakefileInfoDialog(QWidget *parent = nullptr);
~CustomMakefileInfoDialog();
private slots:
void on_pushButton_clicked();
private:
Ui::CustomMakefileInfoDialog *ui;
};
#endif // CUSTOMMAKEFILEINFODIALOG_H

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CustomMakefileInfoDialog</class>
<widget class="QDialog" name="CustomMakefileInfoDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>849</width>
<height>512</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout">
<item row="1" column="1">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Ok</string>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0" colspan="3">
<widget class="QLabel" name="label">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Dev-C++'s Makefile has two important targets:&lt;/p&gt;&lt;p&gt;- all (which builds the executable)&lt;/p&gt;&lt;p&gt;- clean (which cleans up object files)&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&amp;quot;all&amp;quot; depends on 2 targets: all-before and all-after. All-before&lt;/p&gt;&lt;p&gt;gets called before the compilation process, and all-after gets&lt;/p&gt;&lt;p&gt;called after the compilation process.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&amp;quot;clean&amp;quot; depends on the target clean-custom, which gets called&lt;/p&gt;&lt;p&gt;before the cleaning process.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;You can change the Makefile's behavior by defining the targets&lt;/p&gt;&lt;p&gt;that &amp;quot;all&amp;quot; and &amp;quot;clean&amp;quot; depend on.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>