88 lines
2.5 KiB
C++
88 lines
2.5 KiB
C++
#include "newprojectdialog.h"
|
|
#include "ui_newprojectdialog.h"
|
|
#include "settings.h"
|
|
#include "systemconsts.h"
|
|
|
|
#include <QDir>
|
|
#include <QFile>
|
|
|
|
NewProjectDialog::NewProjectDialog(QWidget *parent) :
|
|
QDialog(parent),
|
|
ui(new Ui::NewProjectDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
mTemplatesTabBar = new QTabBar(this);
|
|
ui->verticalLayout->insertWidget(0,mTemplatesTabBar);
|
|
}
|
|
|
|
NewProjectDialog::~NewProjectDialog()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void NewProjectDialog::addTemplate(const QString &filename)
|
|
{
|
|
if (!QFile(filename).exists())
|
|
return;
|
|
PProjectTemplate t = std::make_shared<ProjectTemplate>();
|
|
t->readTemplateFile(filename);
|
|
mTemplates.append(t);
|
|
}
|
|
|
|
void NewProjectDialog::readTemplateDir()
|
|
{
|
|
QString templateExt(".");
|
|
templateExt += TEMPLATE_EXT;
|
|
QDir dir(pSettings->dirs().templateDir());
|
|
foreach (const QFileInfo& fileInfo,dir.entryInfoList()) {
|
|
if (fileInfo.isFile()
|
|
&& fileInfo.fileName().endsWith(templateExt)) {
|
|
addTemplate(fileInfo.absoluteFilePath());
|
|
}
|
|
}
|
|
updateView();
|
|
}
|
|
|
|
void NewProjectDialog::updateView()
|
|
{
|
|
while (mTemplatesTabBar->count()>0) {
|
|
mTemplatesTabBar->removeTab(0);
|
|
}
|
|
QMap<QString,int> categories;
|
|
foreach (const PProjectTemplate& t, mTemplates) {
|
|
QString category = t->category();
|
|
if (category.isEmpty())
|
|
category = tr("Default");
|
|
// Add a page for each unique category
|
|
int tabIndex = categories.value(category,-1);
|
|
if (tabIndex<0) {
|
|
tabIndex = mTemplatesTabBar->addTab(category);
|
|
categories.insert(category,tabIndex);
|
|
}
|
|
}
|
|
|
|
|
|
// Only add if we're viewing this category
|
|
if SameText(TemplateItem.Category, TabsMain.Tabs[TabsMain.TabIndex]) then begin
|
|
ListItem := ProjView.Items.Add;
|
|
ListItem.Caption := TemplateItem.Name;
|
|
ListItem.Data := pointer(I);
|
|
IconFileName := ValidateFile(TemplateItem.Icon, '', true);
|
|
if IconFileName <> '' then begin
|
|
|
|
// Add icon to central dump and tell ListItem to use it
|
|
IconItem := TIcon.Create;
|
|
try
|
|
IconItem.LoadFromFile(IconFileName); // ValidateFile prepends path
|
|
ListItem.ImageIndex := ImageList.AddIcon(IconItem);
|
|
if ListItem.ImageIndex = -1 then
|
|
ListItem.ImageIndex := 0;
|
|
finally
|
|
IconItem.Free;
|
|
end;
|
|
end else
|
|
ListItem.ImageIndex := 0; // don't use an icon
|
|
end;
|
|
}
|
|
}
|