Loading...
Searching...
No Matches
ProjectInfo.hpp
1#pragma once
2#include <score/plugins/ProjectSettings/ProjectSettingsFactory.hpp>
3#include <score/plugins/ProjectSettings/ProjectSettingsModel.hpp>
4#include <score/plugins/ProjectSettings/ProjectSettingsPresenter.hpp>
5#include <score/plugins/ProjectSettings/ProjectSettingsView.hpp>
6#include <score/plugins/settingsdelegate/SettingsDelegateModel.hpp>
7#include <score/plugins/settingsdelegate/SettingsDelegatePresenter.hpp>
8#include <score/plugins/settingsdelegate/SettingsDelegateView.hpp>
9
10#include <QByteArray>
11#include <QDateTime>
12#include <QImage>
13#include <QSize>
14#include <QString>
15
16#include <score_lib_base_export.h>
17
18#include <optional>
19#include <vector>
20#include <verdigris>
21
22class QLabel;
23class QLineEdit;
24class QPlainTextEdit;
25class QCheckBox;
26
27namespace score
28{
29class FormWidget;
30}
31
45namespace score::ProjectInfo
46{
47class Model;
48}
49
50UUID_METADATA(
51 , score::DocumentPluginFactory, score::ProjectInfo::Model,
52 "aac1402f-6851-4a1a-ab50-5f213acd1262")
53
54namespace score::ProjectInfo
55{
57inline constexpr const char* uuid_string = "aac1402f-6851-4a1a-ab50-5f213acd1262";
58
59class SCORE_LIB_BASE_EXPORT Model final : public score::ProjectSettingsModel
60{
61 W_OBJECT(Model)
62 SCORE_SERIALIZE_FRIENDS
63 MODEL_METADATA_IMPL(Model)
64
65 QString m_Name;
66 QString m_Author;
67 QString m_Description;
68 QString m_Url; // web page of the project: documentation, tutorial...
69 QString m_Platforms;
70 QDateTime m_Created;
71 QDateTime m_LastSaved;
72 QByteArray m_Thumbnail; // PNG data, empty if none
73 bool m_AutomaticThumbnail{true};
74
75public:
76 Model(const score::DocumentContext&, QObject* parent);
77 ~Model() override;
78
79 template <typename Impl>
80 Model(const score::DocumentContext& ctx, Impl& vis, QObject* parent)
81 : score::ProjectSettingsModel{ctx, vis, parent}
82 {
83 vis.writeTo(*this);
84 }
85
87 static constexpr QSize thumbnailSize{480, 300};
88
90 static QByteArray encodeThumbnail(const QImage& img);
91
92 QImage thumbnailImage() const;
93
94 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QString, Name)
95 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QString, Author)
96 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QString, Description)
97 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QString, Url)
98 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QString, Platforms)
99 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QDateTime, Created)
100 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QDateTime, LastSaved)
101 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, QByteArray, Thumbnail)
102 SCORE_SETTINGS_PARAMETER_HPP(SCORE_LIB_BASE_EXPORT, bool, AutomaticThumbnail)
103};
104
105SCORE_SETTINGS_PARAMETER(Model, Name)
106SCORE_SETTINGS_PARAMETER(Model, Author)
107SCORE_SETTINGS_PARAMETER(Model, Description)
108SCORE_SETTINGS_PARAMETER(Model, Url)
109SCORE_SETTINGS_PARAMETER(Model, Platforms)
110SCORE_SETTINGS_PARAMETER(Model, Thumbnail)
111SCORE_SETTINGS_PARAMETER(Model, AutomaticThumbnail)
112
113class SCORE_LIB_BASE_EXPORT View final : public score::ProjectSettingsView
114{
115 W_OBJECT(View)
116public:
117 View();
118
119 void setName(QString);
120 void NameChanged(QString arg) W_SIGNAL(NameChanged, arg)
121 void setAuthor(QString);
122 void AuthorChanged(QString arg) W_SIGNAL(AuthorChanged, arg)
123 void setDescription(QString);
124 void DescriptionChanged(QString arg) W_SIGNAL(DescriptionChanged, arg)
125 void setUrl(QString);
126 void UrlChanged(QString arg) W_SIGNAL(UrlChanged, arg)
127 void setPlatforms(QString);
128 QString currentPlatformSelection() const;
129 void PlatformsChanged(QString arg) W_SIGNAL(PlatformsChanged, arg)
130 void setThumbnail(QByteArray);
131 void ThumbnailChanged(QByteArray arg) W_SIGNAL(ThumbnailChanged, arg)
132
133 void setCreated(QDateTime);
134 void setLastSaved(QDateTime);
135
136 SETTINGS_UI_TOGGLE_HPP(AutomaticThumbnail)
137
138private:
139 QWidget* getWidget() override;
140 void chooseThumbnail();
141
142 score::FormWidget* m_widg{};
143 QLineEdit* m_name{};
144 QLineEdit* m_author{};
145 QPlainTextEdit* m_description{};
146 QLineEdit* m_url{};
147 std::vector<QCheckBox*> m_platforms;
148 QLabel* m_created{};
149 QLabel* m_lastSaved{};
150 QLabel* m_thumbnailPreview{};
151 QByteArray m_thumbnail;
152};
153
154class SCORE_LIB_BASE_EXPORT Presenter final : public score::ProjectSettingsPresenter
155{
156public:
157 using model_type = Model;
158 using view_type = View;
159 Presenter(Model&, View&, QObject* parent);
160
161private:
162 QString settingsName() override;
163 QIcon settingsIcon() override;
164};
165
166SCORE_DECLARE_PROJECTSETTINGS_FACTORY(
167 Factory, Model, Presenter, View, "aac1402f-6851-4a1a-ab50-5f213acd1262")
168
169
172struct SCORE_LIB_BASE_EXPORT Info
173{
174 QString name;
175 QString author;
176 QString description;
177 QString url;
178 QString platforms;
179 QDateTime created;
180 QDateTime lastSaved;
181 QImage thumbnail;
182};
183
190SCORE_LIB_BASE_EXPORT
191std::optional<Info> peek(const QString& path);
192}
Reimplement to instantiate document plug-ins.
Definition DocumentPluginCreator.hpp:25
Definition FormWidget.hpp:11
Definition ProjectSettingsModel.hpp:9
Definition SettingsDelegatePresenter.hpp:17
Definition SettingsDelegateView.hpp:18
Definition ProjectInfo.cpp:33
Base toolkit upon which the software is built.
Definition Application.cpp:83
Definition DocumentContext.hpp:18