File indexing completed on 2025-02-02 04:11:28

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include <memory>
0010 
0011 #include <QAbstractListModel>
0012 #include <QFontDatabase>
0013 
0014 #include "model/document.hpp"
0015 
0016 namespace glaxnimate::gui::font {
0017 
0018 class FontModel : public QAbstractListModel
0019 {
0020     Q_OBJECT
0021 
0022 public:
0023     enum FontFilter {
0024         AllFonts = 0,
0025         ScalableFonts = 0x1,
0026         NonScalableFonts = 0x2,
0027         MonospacedFonts = 0x4,
0028         ProportionalFonts = 0x8
0029     };
0030     Q_DECLARE_FLAGS(FontFilters, FontFilter)
0031     Q_FLAG(FontFilters)
0032 
0033     explicit FontModel(QObject *parent = nullptr);
0034     ~FontModel();
0035 
0036     void set_document(model::Document* document);
0037 
0038     int columnCount(const QModelIndex & parent) const override;
0039     int rowCount(const QModelIndex & parent) const override;
0040     QVariant data(const QModelIndex & index, int role) const override;
0041 
0042     QStringList favourites() const;
0043     void set_favourites(const QStringList& faves);
0044 
0045 
0046     void set_writing_system(QFontDatabase::WritingSystem);
0047     QFontDatabase::WritingSystem writing_system() const;
0048 
0049 
0050     void set_font_filters(FontFilters filters);
0051     FontFilters font_filters() const;
0052 
0053     QModelIndex index_for_font(const QString& family);
0054 
0055     bool preview_font() const;
0056     void set_preview_font(bool preview);
0057 
0058     void set_favourite(const QString& family, bool favourite);
0059     void toggle_favourite(const QString& family);
0060 
0061 private:
0062     void reset();
0063 
0064     class Private;
0065     std::unique_ptr<Private> d;
0066 };
0067 
0068 } // namespace glaxnimate::gui::font