1 /*
2     SPDX-FileCopyrightText: 2013 Andreas Cord-Landwehr <cordlandwehr@kde.org>
3 
4     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5 */
6 
7 #ifndef UNIT_H
8 #define UNIT_H
9 
10 #include "artikulatecore_export.h"
11 #include "ieditableunit.h"
12 #include <QObject>
13 #include <QStringList>
14 #include <QVector>
15 #include <memory>
16 
17 class QString;
18 class Phrase;
19 class IPhrase;
20 class ICourse;
21 
22 class ARTIKULATECORE_EXPORT Unit : public IEditableUnit
23 {
24     Q_OBJECT
25     Q_PROPERTY(QString id READ id WRITE setId NOTIFY idChanged)
26     Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
27 
28 public:
29     static std::shared_ptr<Unit> create();
30     ~Unit() override;
31 
32     QString id() const override;
33     void setId(const QString &id) override;
34     QString foreignId() const override;
35     void setForeignId(const QString &id) override;
36     std::shared_ptr<ICourse> course() const override;
37     void setCourse(std::shared_ptr<ICourse> course) override;
38     QString title() const override;
39     void setTitle(const QString &title) override;
40     QString i18nTitle() const override;
41     void setI18nTitle(const QString &title) override;
42     QVector<std::shared_ptr<IPhrase>> phrases() const override;
43     void addPhrase(std::shared_ptr<IEditablePhrase> phrase, int index) override;
44     void removePhrase(std::shared_ptr<IPhrase> phrase) override;
45     std::shared_ptr<IUnit> self() const override;
46     void emitPhrasesChanged(std::shared_ptr<IEditableUnit> unit);
47 
48 protected:
49     explicit Unit(QObject *parent = nullptr);
50 
51 private:
52     void setSelf(std::shared_ptr<IUnit> self) override;
53     Q_DISABLE_COPY(Unit)
54     std::weak_ptr<IUnit> m_self;
55     QString m_id;
56     QString m_foreignId;
57     std::weak_ptr<ICourse> m_course;
58     QString m_title;
59     QString m_i18nTitle;
60     QVector<std::shared_ptr<IPhrase>> m_phrases;
61 };
62 
63 #endif // UNIT_H
64