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