diff --git a/src/noggit/ui/windows/changelog/Changelog.cpp b/src/noggit/ui/windows/changelog/Changelog.cpp new file mode 100644 index 00000000..c3313040 --- /dev/null +++ b/src/noggit/ui/windows/changelog/Changelog.cpp @@ -0,0 +1,95 @@ +#include "Changelog.hpp" +#include +#include +#include "ui_Changelog.h" + +namespace Noggit +{ + namespace Ui + { + CChangelog::CChangelog(QWidget* parent) : + QDialog(parent) + { + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + ui = new ::Ui::Changelog; + ui->setupUi(this); + + QDir dir; + if (!dir.exists(QDir::currentPath() + ChangelogFolder)) + dir.mkdir(QDir::currentPath() + ChangelogFolder); + + QDir folder(QDir::currentPath() + ChangelogFolder); + QStringList files = folder.entryList(QStringList() << "*.changelog" << "*.CHANGELOG", QDir::Files); + + foreach(QString filename, files) + { + Changelog.push_back(filename); + } + + std::sort(Changelog.begin(), Changelog.end(), [](QString& a, QString& b) + { + return (a.toInt() < b.toInt()); + }); + + for (int i = 0; i < Changelog.size(); ++i) + { + QListWidgetItem* item = new QListWidgetItem(); + item->setText(GetChangelogName(Changelog[Changelog.size() - 1 - i])); + item->setData(1, Changelog[Changelog.size() - 1 - i]); + item->setTextAlignment(Qt::AlignLeft); + + ui->listWidget->addItem(item); + } + + SelectFirst(); + + connect(ui->listWidget, &QListWidget::itemClicked, [&](QListWidgetItem *item) + { + OpenChangelog(item->data(1).toString()); + }); + } + + void CChangelog::SelectFirst() + { + if (ui->listWidget->count() > 0) + { + ui->listWidget->setCurrentRow(0); + OpenChangelog(ui->listWidget->item(0)->data(1).toString()); + } + } + + QString CChangelog::GetChangelogName(QString name) + { + QFile changelog = QDir::currentPath() + ChangelogFolder + "/" + name; + if (!changelog.exists()) + return name; + + if (changelog.open(QIODevice::ReadOnly)) + { + QTextStream stream(&changelog); + QString stored = stream.readLine(); + changelog.close(); + if (stored.contains("")) + { + stored.remove(""); + return stored; + } + } + + return name; + } + void CChangelog::OpenChangelog(QString name) + { + QFile changelog = QDir::currentPath() + ChangelogFolder + "/" + name; + if (!changelog.exists()) + return; + + if (changelog.open(QIODevice::ReadOnly)) + { + QTextStream stream(&changelog); + ui->textEdit->setHtml(stream.readAll()); + changelog.close(); + } + } + } +} diff --git a/src/noggit/ui/windows/changelog/Changelog.hpp b/src/noggit/ui/windows/changelog/Changelog.hpp new file mode 100644 index 00000000..971377de --- /dev/null +++ b/src/noggit/ui/windows/changelog/Changelog.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include +#include "ui_Changelog.h" + +namespace Noggit +{ + namespace Ui + { + class CChangelog : public QDialog + { + Q_OBJECT + ::Ui::Changelog* ui; + + public: + CChangelog(QWidget* parent = nullptr); + void SelectFirst(); + + private: + const QString ChangelogFolder = "/changelog"; + const QString AttachmentFolder = "/changelog/attachment"; + + QString GetChangelogName(QString name); + void OpenChangelog(QString name); + + std::vector Changelog; + }; + } +} + diff --git a/src/noggit/ui/windows/changelog/Changelog.ui b/src/noggit/ui/windows/changelog/Changelog.ui new file mode 100644 index 00000000..b84da7a0 --- /dev/null +++ b/src/noggit/ui/windows/changelog/Changelog.ui @@ -0,0 +1,71 @@ + + + Changelog + + + + 0 + 0 + 804 + 402 + + + + + 0 + 0 + + + + + 0 + 402 + + + + + 804 + 16777215 + + + + ChangeLog Noggit Red + + + + + + + 180 + 0 + + + + + 180 + 16777215 + + + + + + + + + 256 + 0 + + + + + 600 + 16777215 + + + + + + + + + diff --git a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp index 190ebd1c..b273b8bb 100755 --- a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp +++ b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.cpp @@ -30,12 +30,18 @@ NoggitProjectSelectionWindow::NoggitProjectSelectionWindow(Noggit::Application:: _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(); _ui->settings_button->setIcon(Noggit::Ui::FontAwesomeIcon(Noggit::Ui::FontAwesome::Icons::cog)); _ui->settings_button->setIconSize(QSize(20,20)); + _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, [&] @@ -44,6 +50,12 @@ NoggitProjectSelectionWindow::NoggitProjectSelectionWindow(Noggit::Application:: } ); + QObject::connect(_ui->changelog_button, &QToolButton::clicked, [&]() + { + _changelog->SelectFirst(); + _changelog->show(); + }); + QObject::connect(_ui->button_create_new_project, &QPushButton::clicked, [=, this] { ProjectInformation project_reference; @@ -129,8 +141,8 @@ NoggitProjectSelectionWindow::NoggitProjectSelectionWindow(Noggit::Application:: } ); - // disable-update - if (!_noggit_application->GetCommand(0)) + // !disable-update && !force-changelog + if (!_noggit_application->GetCommand(0) && !_noggit_application->GetCommand(1)) { _updater = new Noggit::Ui::CUpdater(this); @@ -141,10 +153,20 @@ NoggitProjectSelectionWindow::NoggitProjectSelectionWindow(Noggit::Application:: }); } - // force-changelog - if (_noggit_application->GetCommand(1)) - { + 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(); + } } } diff --git a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.hpp b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.hpp index 3dd41dd0..8217f098 100755 --- a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.hpp +++ b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.hpp @@ -7,11 +7,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include QT_BEGIN_NAMESPACE @@ -35,7 +37,7 @@ namespace Noggit::Ui::Windows class NoggitProjectSelectionWindow : public QMainWindow { Q_OBJECT - friend Component::RecentProjectsComponent; + friend Component::RecentProjectsComponent; friend Component::CreateProjectComponent; friend Component::LoadProjectComponent; public: @@ -47,6 +49,7 @@ namespace Noggit::Ui::Windows Noggit::Application::NoggitApplication* _noggit_application; Noggit::Ui::settings* _settings; Noggit::Ui::CUpdater* _updater; + Noggit::Ui::CChangelog* _changelog; std::unique_ptr _project_selection_page; std::unique_ptr _load_project_component; diff --git a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.ui b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.ui index bcda6344..46272834 100755 --- a/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.ui +++ b/src/noggit/ui/windows/projectSelection/NoggitProjectSelectionWindow.ui @@ -69,18 +69,18 @@ - - - 0 - 0 - - - - - 380 - 0 - - + + + 0 + 0 + + + + + 380 + 0 + + @@ -241,33 +241,40 @@ - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 40 - 20 - - - - - - - - ... - - - - - + + + + + + ... + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + ... + + + + +