| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- #include "CmQtProjectSelection.h"
- #include "CmEditorPrefs.h"
- #include "CmEditorApplication.h"
- #include "CmQtNewProject.h"
- #include <QtWidgets/QApplication>
- #include <QtWidgets/QVBoxLayout>
- #include <QtWidgets/QHBoxLayout>
- #include <QtWidgets/QListWidget>
- #include <QtWidgets/QFileDialog>
- #include <QtWidgets/QMessageBox>
- namespace CamelotEditor
- {
- QtProjectSelection::QtProjectSelection(QWidget *parent)
- :QDialog(parent)
- {
- setupUi();
- }
- QtProjectSelection::~QtProjectSelection()
- {
- }
- void QtProjectSelection::setupUi()
- {
- setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::MSWindowsFixedSizeDialogHint);
- setFixedSize(400, 170);
- mListRecentProjects = new QListWidget(this);
- QWidget* buttonsWidget = new QWidget(this);
- mBtnNew = new QPushButton(buttonsWidget);
- mBtnOpen = new QPushButton(buttonsWidget);
- mBtnOpenOther = new QPushButton(buttonsWidget);
- QHBoxLayout* buttonLayout = new QHBoxLayout(this);
- buttonLayout->setMargin(0);
- buttonLayout->addWidget(mBtnNew);
- buttonLayout->addWidget(mBtnOpenOther);
- buttonLayout->addWidget(mBtnOpen);
- buttonsWidget->setLayout(buttonLayout);
-
- QVBoxLayout* centralLayout = new QVBoxLayout(this);
- centralLayout->setMargin(0);
- centralLayout->addWidget(mListRecentProjects);
- centralLayout->addWidget(buttonsWidget);
- setLayout(centralLayout);
- reloadProjectList();
- setObjectNames();
- retranslateUi();
- setupSignals();
- }
- void QtProjectSelection::retranslateUi()
- {
- setWindowTitle(tr("Project selection"));
- mBtnNew->setText(tr("New"));
- mBtnOpenOther->setText(tr("Open other"));
- mBtnOpen->setText(tr("Open"));
- }
- void QtProjectSelection::setupSignals()
- {
- connect(mBtnNew, &QPushButton::clicked, this, &QtProjectSelection::newProject);
- connect(mBtnOpenOther, &QPushButton::clicked, this, &QtProjectSelection::browseProject);
- connect(mBtnOpen, &QPushButton::clicked, this, &QtProjectSelection::openSelectedProject);
- }
- void QtProjectSelection::setObjectNames()
- {
- mListRecentProjects->setObjectName(QStringLiteral("ListRecentProjects"));
- mBtnOpen->setObjectName(QStringLiteral("BtnOpen"));
- mBtnNew->setObjectName(QStringLiteral("BtnNew"));
- mBtnOpenOther->setObjectName(QStringLiteral("BtnOpenOther"));
- }
- void QtProjectSelection::reloadProjectList()
- {
- mListRecentProjects->clear();
- for(int i = 0; i < gEditorPrefs().getNumRecentlyUsedProjects(); i++)
- mListRecentProjects->insertItem(i, gEditorPrefs().getRecentlyUsedProjectPath(i));
- }
- void QtProjectSelection::newProject()
- {
- QtNewProject newProject;
- if(newProject.exec() == QDialog::Accepted)
- {
- openProject(newProject.getProjectPath());
- }
- }
- void QtProjectSelection::browseProject()
- {
- QFileDialog dialog(this, tr("Select project directory"));
- dialog.setFileMode(QFileDialog::Directory);
- dialog.setOption(QFileDialog::ShowDirsOnly, true);
- QDir lastUsedDir = gEditorPrefs().getLastUsedProjectDirectory();
- if(lastUsedDir.exists())
- dialog.setDirectory(lastUsedDir);
- if(dialog.exec() == QDialog::Accepted)
- {
- QStringList fileNames = dialog.selectedFiles();
- if(fileNames.size() > 0)
- {
- openProject(fileNames[0]);
- }
- }
- }
- void QtProjectSelection::openSelectedProject()
- {
- QListWidgetItem* item = mListRecentProjects->currentItem();
- if(item == nullptr)
- {
- QMessageBox msgBox;
- msgBox.setWindowTitle("Error");
- msgBox.setText("Please select a project before continuing.");
- msgBox.exec();
- return;
- }
- openProject(item->text());
- }
- void QtProjectSelection::openProject(const QString& path)
- {
- if(gEditorApp().isValidProject(path))
- {
- addRecentlyUsedProject(path);
- onProjectSelected(path);
- accept();
- }
- else
- {
- removeRecentlyUsedProject(path);
- reloadProjectList();
- QMessageBox msgBox;
- msgBox.setWindowTitle("Error");
- msgBox.setText("Selected directory doesn't contain a valid Camelot project");
- msgBox.exec();
- return;
- }
- }
- void QtProjectSelection::addRecentlyUsedProject(const QString& path)
- {
- bool found = false;
- for(int i = 0; i < gEditorPrefs().getNumRecentlyUsedProjects(); i++)
- {
- if(path == gEditorPrefs().getRecentlyUsedProjectPath(i))
- {
- found = true;
- break;
- }
- }
- gEditorPrefs().addRecentlyUsedProjectPath(path);
- }
- void QtProjectSelection::removeRecentlyUsedProject(const QString& path)
- {
- for(int i = 0; i < gEditorPrefs().getNumRecentlyUsedProjects(); i++)
- {
- if(path == gEditorPrefs().getRecentlyUsedProjectPath(i))
- {
- gEditorPrefs().removeRecentlyUsedProjectPath(i);
- break;
- }
- }
- }
- }
|