Skip to content

Commit

Permalink
Merge pull request #36 from eightyeight/packages
Browse files Browse the repository at this point in the history
Packages
  • Loading branch information
crabmusket committed Jan 29, 2015
2 parents 3f7d0a6 + faf312f commit 23a1e05
Show file tree
Hide file tree
Showing 8 changed files with 118 additions and 42 deletions.
13 changes: 7 additions & 6 deletions source/NewProjectPage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,16 @@ void NewProjectPage::setDefaults()

void NewProjectPage::buildTemplateList()
{
QMultiMap<QString, ProjectEntry*> *dirList = mFrontloader->getProjectList()->getTemplateDirectoryList();
QMultiMap<QString, TemplateEntry*> *dirList = mFrontloader->getProjectList()->getTemplateDirectoryList();

QList<ProjectEntry*> entryList = dirList->values("Templates");
QList<TemplateEntry*> entryList = dirList->values("Templates");

mTemplateNameList.clear();
TemplateList->clear();

for(int i=0; i<entryList.size(); i++)
{
ProjectEntry *entry = entryList.at(i);
TemplateEntry *entry = entryList.at(i);

if(mTemplateNameList.values(entry->mName).size() == 0)
{
Expand All @@ -88,7 +88,7 @@ void NewProjectPage::buildTemplateList()

void NewProjectPage::on_TemplateList_textChanged(const QString &text)
{
ProjectEntry *entry = mTemplateNameList.value(text);
TemplateEntry *entry = mTemplateNameList.value(text);

if(entry != NULL)
{
Expand Down Expand Up @@ -141,7 +141,7 @@ void NewProjectPage::on_newProjectCreateButton_clicked()
{
if(mFrontloader != NULL)
{
ProjectEntry *entry = mTemplateNameList.value(TemplateList->currentText());
TemplateEntry *entry = mTemplateNameList.value(TemplateList->currentText());

//If a project with no path is specified, the project will delete the "My Projects"
//Folder and then present the user with an error that the project couldn't be created.
Expand All @@ -156,7 +156,8 @@ void NewProjectPage::on_newProjectCreateButton_clicked()
{
QString templatePath = QDir::toNativeSeparators(entry->mRootPath);
QString newProjectPath = QDir::toNativeSeparators(DirectoryTextEdit->text() + "/" + NameTextEdit->text());
mFrontloader->createNewProject(templatePath, newProjectPath, mCurrentInstance);
QStringList packagePaths = entry->mRecommendedPackages + entry->mRequiredPackages;
mFrontloader->createNewProject(templatePath, packagePaths, newProjectPath, mCurrentInstance);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions source/NewProjectPage.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
using namespace Ui;

class Torque3DFrontloader;
class ProjectEntry;
class TemplateEntry;
class ModuleListInstance;

class NewProjectPage : public QWidget, public NewProjectPageClass
Expand All @@ -16,7 +16,7 @@ class NewProjectPage : public QWidget, public NewProjectPageClass

private:
Torque3DFrontloader *mFrontloader;
QMap<QString, ProjectEntry*> mTemplateNameList;
QMap<QString, TemplateEntry*> mTemplateNameList;
ModuleListInstance* mCurrentInstance;

public:
Expand Down
25 changes: 17 additions & 8 deletions source/copyDir.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,31 @@ void CopyDir::run()
{
mPause = false;
mExitNow = false;
bool success = copyDirAndFiles(mSrcDir, mDstDir, &mNameExcludeFilter, &mNameIncludeFilter);
bool success = true;

mutex.lock();
if(mPause)
QStringList::const_iterator it;
for(it = mSrcDirs.cbegin(); it != mSrcDirs.cend(); ++it)
{
pauseThreads.wait(&mutex);
QString srcDir = *it;
mRootDir = srcDir;
success &= copyDirAndFiles(srcDir, mDstDir, &mNameExcludeFilter, &mNameIncludeFilter);

if(!success) break;

mutex.lock();
if(mPause)
{
pauseThreads.wait(&mutex);
}
mutex.unlock();
}
mutex.unlock();

emit fileCopyDone(success, mExitNow);
}

void CopyDir::setValues(QString srcDir, QString dstDir, QStringList nameExcludeFilter, QStringList nameIncludeFilter)
void CopyDir::setValues(QStringList srcDirs, QString dstDir, QStringList nameExcludeFilter, QStringList nameIncludeFilter)
{
mRootDir = srcDir;
mSrcDir = srcDir;
mSrcDirs = srcDirs;
mDstDir = dstDir;
mNameExcludeFilter = nameExcludeFilter;
mNameIncludeFilter = nameIncludeFilter;
Expand Down
4 changes: 2 additions & 2 deletions source/copyDir.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class CopyDir : public QThread

public:
void run();
void setValues(QString srcDir, QString dstDir, QStringList nameExcludeFilter = QStringList(), QStringList nameIncludeFilter = QStringList());
void setValues(QStringList srcDirs, QString dstDir, QStringList nameExcludeFilter = QStringList(), QStringList nameIncludeFilter = QStringList());
bool copyDirAndFiles(QString srcDir, QString dstDir, QStringList *nameExcludeFilter, QStringList *nameIncludeFilter, QStringList *srcFileList = NULL, QStringList *dstFileList = NULL);

signals:
Expand All @@ -28,7 +28,7 @@ public slots:

private:
QString mRootDir;
QString mSrcDir;
QStringList mSrcDirs;
QString mDstDir;
QStringList mNameExcludeFilter;
QStringList mNameIncludeFilter;
Expand Down
65 changes: 56 additions & 9 deletions source/projectList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#endif


QString ProjectEntry::getAppPath()
QString DirEntry::getAppPath()
{
return ProjectList::getAppPath(QFileInfo(mPath).absolutePath());
}
Expand Down Expand Up @@ -63,7 +63,6 @@ void ProjectList::buildList()
QDomDocument doc("projects");

QString baseAppPath = getAppPath();
//QString projectsPath = baseAppPath + "/Engine/bin/tools/projects.xml";
QString projectsPath = baseAppPath + "projects.xml";
QFile file(projectsPath);

Expand Down Expand Up @@ -191,20 +190,15 @@ void ProjectList::buildList()
if(templateDir.cd("game"))
{
// Add the template path
ProjectEntry *newEntry = new ProjectEntry();
TemplateEntry *newEntry = new TemplateEntry();
newEntry->mPath = templateDir.path();
newEntry->mName = templateInfo.fileName();
newEntry->mRootName = title;
newEntry->mRootPath = templateInfo.absoluteFilePath();

// Check for command line arguments
if(e.hasAttribute("args"))
{
newEntry->mArgs = e.attribute("args", "");
}

mTemplateDirectoryList.insert(title, newEntry);

newEntry->findPackages();
}
}
}
Expand Down Expand Up @@ -246,6 +240,59 @@ void ProjectList::buildList()
}
}

void TemplateEntry::findPackages()
{
static const QString templateFileName = "template.xml";
static const QString packageDirName = "Packages";

// Load in the xml file, parse it, and build out the controls
QDomDocument doc("template");

QString basePath = mRootPath;
QString templatePath = basePath + QDir::separator() + templateFileName;
QFile file(templatePath);

if (!file.open(QIODevice::ReadOnly))
{
return;
}

if (!doc.setContent(&file))
{
file.close();
return;
}

file.close();

QDomElement docElem = doc.documentElement();
QDomNode n = docElem.firstChild();
while(!n.isNull())
{
QDomElement e = n.toElement();
if(!e.isNull() && e.tagName() == "package")
{
if(e.hasAttribute("path") && e.hasAttribute("inclusion"))
{
QString title = e.attribute("path");
QString inclusion = e.attribute("inclusion");
QDir packageDir(packageDirName + QDir::separator() + title);
QString path = packageDir.absolutePath();

if(inclusion == "required")
{
mRequiredPackages.append(path);
}
else if(inclusion == "recommended")
{
mRecommendedPackages.append(path);
}
}
}
n = n.nextSibling();
}
}

void ProjectList::appStandardData()
{
}
Expand Down
29 changes: 21 additions & 8 deletions source/projectList.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,33 @@
#include <comdef.h>
#endif

class ProjectEntry
class DirEntry
{
public:
QString mPath;
QString mName;
QString mRootName;
QString mRootPath;
QString mArgs;
QString mPath;
QString mName;
QString mRootName;
QString mRootPath;

QString getUniqueName() { return QString(mRootName + "-" + mName); };
QString getAppPath();
};

class ProjectEntry : public DirEntry
{
public:
QString mArgs;
QString getLevelPath();
};

class TemplateEntry : public DirEntry
{
public:
QList<QString> mRequiredPackages;
QList<QString> mRecommendedPackages;
void findPackages();
};

/* ProjectList
This will get a list of projects and demos based on the specified .xml file...
Expand Down Expand Up @@ -99,8 +112,8 @@ class ProjectList : public QObject
QMultiMap<QString, ProjectEntry*> *getProjectDirectoryList() { return &mProjectDirectoryList; };
QList<ProjectEntry*> *getProjectFileList() { return &mProjectFileList; };

QMultiMap<QString, ProjectEntry*> mTemplateDirectoryList;
QMultiMap<QString, ProjectEntry*> *getTemplateDirectoryList() { return &mTemplateDirectoryList; };
QMultiMap<QString, TemplateEntry*> mTemplateDirectoryList;
QMultiMap<QString, TemplateEntry*> *getTemplateDirectoryList() { return &mTemplateDirectoryList; };

void toggleEditor(int editorMode);
ProjectEntry *getFirstProjectEntry();
Expand Down
15 changes: 10 additions & 5 deletions source/torque3dfrontloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -668,7 +668,9 @@ void Torque3DFrontloader::packageProjectStaging()
connect(&mCopyDir, SIGNAL(fileCopyDone(bool, bool)), this, SLOT(updateStagingFileDone(bool, bool)));
connect(&mCopyDir, SIGNAL(fileCopyDone(bool, bool)), &mCopyDir, SLOT(quit()));

mCopyDir.setValues(rootProjectPath.path(), outputDir.path(), nameExcludeFilter, nameIncludeFilter);
QStringList dirs;
dirs.push_front(rootProjectPath.path());
mCopyDir.setValues(dirs, outputDir.path(), nameExcludeFilter, nameIncludeFilter);
mCopyDir.start();
}
}
Expand Down Expand Up @@ -715,7 +717,7 @@ void Torque3DFrontloader::createProjectCheck()
setSelectedProjectByUniqueName(uniqueName, false);
}

void Torque3DFrontloader::createNewProject(const QString &templatePath, const QString &newProjectPath, ModuleListInstance* moduleInst)
void Torque3DFrontloader::createNewProject(const QString &templatePath, const QStringList &packagePaths, const QString &newProjectPath, ModuleListInstance* moduleInst)
{
// init values
mCreateTemplateCopyDone = false;
Expand All @@ -730,6 +732,7 @@ void Torque3DFrontloader::createNewProject(const QString &templatePath, const QS

mTemplateDir.setPath(templatePath);
mNewProjectDir.setPath(newProjectPath);
mPackagePaths = packagePaths;

mNewProjectModuleList = moduleInst;

Expand Down Expand Up @@ -881,17 +884,19 @@ void Torque3DFrontloader::createTemplateCopy()
mNewProjectDir.mkdir(mNewProjectDir.path());

// our new project path exists, time to copy everything we want over to it
mTemplateDir.setFilter(QDir::AllDirs | QDir::Files | QDir::Hidden);
QStringList nameExcludeFilter;
nameExcludeFilter << "*.obj" << "*.exp" << "*.ilk" << "*.pch" << "*.sbr" << "*.pdb" << "*.sln" << "*.suo";
nameExcludeFilter << "*/buildFiles/Xcode/*";
nameExcludeFilter << "*/template.xml";
QStringList nameIncludeFilter;

connect(&mCopyDir, SIGNAL(updateFileCount(int)), this, SLOT(updateCreateProjectCount(int)));
connect(&mCopyDir, SIGNAL(updateFileProgress(int, QString)), this, SLOT(updateCreateProjectProgress(int, QString)));
connect(&mCopyDir, SIGNAL(fileCopyDone(bool, bool)), this, SLOT(updateCreateProjectDone(bool, bool)));
connect(&mCopyDir, SIGNAL(fileCopyDone(bool, bool)), &mCopyDir, SLOT(quit()));
mCopyDir.setValues(mTemplateDir.path(), mNewProjectDir.path(), nameExcludeFilter, nameIncludeFilter);
QStringList dirs = mPackagePaths;
dirs.push_front(mTemplateDir.path());
mCopyDir.setValues(dirs, mNewProjectDir.path(), nameExcludeFilter, nameIncludeFilter);
mCopyDir.start();
}

Expand Down Expand Up @@ -1375,7 +1380,7 @@ void Torque3DFrontloader::projectCategoryRemoved(QString title)
}


QPixmap *Torque3DFrontloader::getProjectPixmap(ProjectEntry *entry)
QPixmap *Torque3DFrontloader::getProjectPixmap(DirEntry *entry)
{
QPixmap *pixmap = NULL;
QFile thumb(entry->mRootPath + QDir::separator() + "thumb.png");
Expand Down
5 changes: 3 additions & 2 deletions source/torque3dfrontloader.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,9 @@ class Torque3DFrontloader : public QMainWindow
void createProjectGeneration();

void replaceTextInFile(QString file, QString srcText, QString dstText);
void createNewProject(const QString &templatePath, const QString &newProjectPath, ModuleListInstance* moduleInst);
void createNewProject(const QString &templatePath, const QStringList &packagePaths, const QString &newProjectPath, ModuleListInstance* moduleInst);

QPixmap *getProjectPixmap(ProjectEntry *entry);
QPixmap *getProjectPixmap(DirEntry *entry);

void renameFile(const QString &filePath, const QString &newName);
void renameMacApp(const QString &filePath, const QString &oldName, const QString &bundleName, const QString &newName, const QString &newBundleName, bool processWebPlugin = false);
Expand Down Expand Up @@ -256,6 +256,7 @@ class Torque3DFrontloader : public QMainWindow

QDir mTemplateDir;
QDir mNewProjectDir;
QStringList mPackagePaths;
ModuleListInstance* mNewProjectModuleList;
ModuleListInstance* mChangeProjectModulesList;

Expand Down

0 comments on commit 23a1e05

Please sign in to comment.