RedPanda-CPP/RedPandaIDE/widgets/newprojectdialog.cpp

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;
}
}