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