239 lines
8.5 KiB
C++
Executable File
239 lines
8.5 KiB
C++
Executable File
#include <noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.hpp>
|
|
#include <noggit/ui/windows/projectSelection/components/RecentProjectsComponent.hpp>
|
|
#include <noggit/ui/windows/projectSelection/components/CreateProjectComponent.hpp>
|
|
#include <noggit/ui/windows/projectSelection/components/LoadProjectComponent.hpp>
|
|
#include <noggit/project/CurrentProject.hpp>
|
|
|
|
#include <filesystem>
|
|
#include <QString>
|
|
#include <QFile>
|
|
#include <noggit/ui/FontNoggit.hpp>
|
|
|
|
#include "ui_NoggitProjectSelectionWindow.h"
|
|
|
|
|
|
using namespace Noggit::Ui::Windows;
|
|
|
|
NoggitProjectSelectionWindow::NoggitProjectSelectionWindow(Noggit::Application::NoggitApplication* noggit_app,
|
|
QWidget* parent)
|
|
: QMainWindow(parent)
|
|
, _ui(new ::Ui::NoggitProjectSelectionWindow)
|
|
, _noggit_application(noggit_app)
|
|
{
|
|
setWindowFlags(Qt::Window | Qt::MSWindowsFixedSizeDialogHint);
|
|
|
|
_ui->setupUi(this);
|
|
|
|
_ui->label->setObjectName("title");
|
|
_ui->label->setStyleSheet("QLabel#title { font-size: 18px; padding: 0px; }");
|
|
|
|
_ui->label_2->setObjectName("title");
|
|
_ui->label_2->setStyleSheet("QLabel#title { font-size: 18px; padding: 0px; }");
|
|
|
|
_settings = new Noggit::Ui::settings(this);
|
|
//_changelog = new Noggit::Ui::CChangelog(this);
|
|
|
|
_load_project_component = std::make_unique<Component::LoadProjectComponent>();
|
|
|
|
_ui->settings_button->setIcon(Noggit::Ui::FontAwesomeIcon(Noggit::Ui::FontAwesome::Icons::cog));
|
|
_ui->settings_button->setIconSize(QSize(20,20));
|
|
|
|
_ui->changelog_button->hide();
|
|
//_ui->changelog_button->setIcon(Noggit::Ui::FontAwesomeIcon(Noggit::Ui::FontAwesome::Icons::file));
|
|
//_ui->changelog_button->setIconSize(QSize(20, 20));
|
|
//_ui->changelog_button->setText(tr(" Changelog"));
|
|
//_ui->changelog_button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
|
|
|
|
Component::RecentProjectsComponent::buildRecentProjectsList(this);
|
|
|
|
QObject::connect(_ui->settings_button, &QToolButton::clicked, [&]
|
|
{
|
|
_settings->show();
|
|
}
|
|
);
|
|
|
|
/*QObject::connect(_ui->changelog_button, &QToolButton::clicked, [&]()
|
|
{
|
|
_changelog->SelectFirst();
|
|
_changelog->show();
|
|
});*/
|
|
|
|
QObject::connect(_ui->button_create_new_project, &QPushButton::clicked, [=, this]
|
|
{
|
|
ProjectInformation project_reference;
|
|
NoggitProjectCreationDialog project_creation_dialog(project_reference, this);
|
|
|
|
QObject::connect(&project_creation_dialog, &QDialog::finished, [&project_reference, this](int result)
|
|
{
|
|
if (result != QDialog::Accepted)
|
|
return;
|
|
|
|
Component::CreateProjectComponent::createProject(this, project_reference);
|
|
Component::RecentProjectsComponent::buildRecentProjectsList(this);
|
|
});
|
|
|
|
project_creation_dialog.exec();
|
|
project_creation_dialog.setFixedSize(project_creation_dialog.size());
|
|
|
|
}
|
|
);
|
|
|
|
QObject::connect(_ui->button_open_existing_project, &QPushButton::clicked, [=]
|
|
{
|
|
auto project_reader = Noggit::Project::ApplicationProjectReader();
|
|
|
|
QString proj_file = QFileDialog::getOpenFileName(this, "Open File",
|
|
"/",
|
|
"*.noggitproj");
|
|
|
|
if (proj_file.isEmpty())
|
|
return;
|
|
|
|
std::filesystem::path filepath(proj_file.toStdString());
|
|
|
|
auto project = project_reader.readProject(filepath.parent_path());
|
|
|
|
if (!project.has_value())
|
|
{
|
|
QMessageBox::critical(this, "Error", "Failed to read project");
|
|
return;
|
|
}
|
|
|
|
Component::RecentProjectsComponent::registerProjectChange(filepath.parent_path().string());
|
|
|
|
auto application_configuration = _noggit_application->getConfiguration();
|
|
auto application_projects_folder_path = std::filesystem::path(application_configuration->ApplicationProjectPath);
|
|
auto application_project_service = Noggit::Project::ApplicationProject(application_configuration);
|
|
|
|
auto project_to_launch = application_project_service.loadProject(filepath.parent_path());
|
|
|
|
if (!project_to_launch)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Noggit::Application::NoggitApplication::instance()->setClientData(project_to_launch->ClientData);
|
|
|
|
Noggit::Project::CurrentProject::initialize(project_to_launch.get());
|
|
|
|
_project_selection_page = std::make_unique<Noggit::Ui::Windows::NoggitWindow>(
|
|
_noggit_application->getConfiguration(),
|
|
project_to_launch);
|
|
_project_selection_page->showMaximized();
|
|
|
|
close();
|
|
}
|
|
);
|
|
|
|
QObject::connect(_ui->listView, &QListView::doubleClicked, [=]
|
|
{
|
|
auto selected_project = _load_project_component->loadProject(this);
|
|
|
|
if (!selected_project)
|
|
return;
|
|
|
|
Noggit::Project::CurrentProject::initialize(selected_project.get());
|
|
|
|
_project_selection_page = std::make_unique<Noggit::Ui::Windows::NoggitWindow>(
|
|
_noggit_application->getConfiguration(),
|
|
selected_project);
|
|
_project_selection_page->showMaximized();
|
|
|
|
close();
|
|
}
|
|
);
|
|
|
|
// !disable-update && !force-changelog
|
|
/*if (!_noggit_application->GetCommand(0) && !_noggit_application->GetCommand(1))
|
|
{
|
|
_updater = new Noggit::Ui::CUpdater(this);
|
|
|
|
QObject::connect(_updater, &CUpdater::OpenUpdater, [=]()
|
|
{
|
|
_updater->setModal(true);
|
|
_updater->show();
|
|
});
|
|
}*/
|
|
|
|
auto _set = new QSettings(this);
|
|
//auto first_changelog = _set->value("first_changelog", false);
|
|
|
|
// force-changelog
|
|
/*if (_noggit_application->GetCommand(1) || !first_changelog.toBool())
|
|
{
|
|
_changelog->setModal(true);
|
|
_changelog->show();
|
|
|
|
if (!first_changelog.toBool())
|
|
{
|
|
_set->setValue("first_changelog", true);
|
|
_set->sync();
|
|
}
|
|
}*/
|
|
|
|
}
|
|
|
|
void NoggitProjectSelectionWindow::handleContextMenuProjectListItemDelete(std::string const& project_path)
|
|
{
|
|
QMessageBox prompt;
|
|
prompt.setWindowIcon(QIcon(":/icon"));
|
|
prompt.setWindowTitle("Delete Project");
|
|
prompt.setIcon(QMessageBox::Warning);
|
|
prompt.setWindowFlags(Qt::WindowStaysOnTopHint);
|
|
prompt.setText("Deleting a project will remove all saved data. Do you want to continue?");
|
|
prompt.addButton("Accept", QMessageBox::AcceptRole);
|
|
prompt.setDefaultButton(prompt.addButton("Cancel", QMessageBox::RejectRole));
|
|
prompt.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint);
|
|
|
|
prompt.exec();
|
|
|
|
switch (prompt.buttonRole(prompt.clickedButton()))
|
|
{
|
|
case QMessageBox::AcceptRole:
|
|
{
|
|
Component::RecentProjectsComponent::registerProjectRemove(project_path);
|
|
QFile folder(project_path.c_str());
|
|
folder.moveToTrash();
|
|
break;
|
|
}
|
|
case QMessageBox::DestructiveRole:
|
|
default:
|
|
break;
|
|
}
|
|
|
|
Component::RecentProjectsComponent::buildRecentProjectsList(this);
|
|
}
|
|
|
|
void NoggitProjectSelectionWindow::handleContextMenuProjectListItemForget(std::string const& project_path)
|
|
{
|
|
QMessageBox prompt;
|
|
prompt.setWindowIcon(QIcon(":/icon"));
|
|
prompt.setWindowTitle("Forget Project");
|
|
prompt.setIcon(QMessageBox::Warning);
|
|
prompt.setWindowFlags(Qt::WindowStaysOnTopHint);
|
|
prompt.setText("Data on the disk will not be removed. Continue?.");
|
|
prompt.addButton("Accept", QMessageBox::AcceptRole);
|
|
prompt.setDefaultButton(prompt.addButton("Cancel", QMessageBox::RejectRole));
|
|
prompt.setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint);
|
|
|
|
prompt.exec();
|
|
|
|
switch (prompt.buttonRole(prompt.clickedButton()))
|
|
{
|
|
case QMessageBox::AcceptRole:
|
|
Component::RecentProjectsComponent::registerProjectRemove(project_path);
|
|
break;
|
|
case QMessageBox::DestructiveRole:
|
|
default:
|
|
break;
|
|
}
|
|
|
|
Component::RecentProjectsComponent::buildRecentProjectsList(this);
|
|
}
|
|
|
|
NoggitProjectSelectionWindow::~NoggitProjectSelectionWindow()
|
|
{
|
|
delete _ui;
|
|
}
|
|
|