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 #include "font_style_dialog.hpp"
0008 #include "ui_font_style_dialog.h"
0009 
0010 #include <QEvent>
0011 #include "app/widgets/no_close_on_enter.hpp"
0012 
0013 class glaxnimate::gui::font::FontStyleDialog::Private
0014 {
0015 public:
0016     Ui::FontStyleDialog ui;
0017     app::widgets::NoCloseOnEnter ncoe;
0018 
0019     void set_preview_font()
0020     {
0021         QFont font;
0022 
0023         if ( ui.tab_widget->currentWidget() == ui.tab_google )
0024             font = ui.google_fonts_widget->selected_font();
0025         else if ( ui.tab_widget->currentWidget() == ui.tab_custom )
0026             font = ui.custom_font_widget->selected_font();
0027         else
0028             font = ui.widget_system->selected_font();
0029 
0030         ui.preview->set_font(font);
0031     }
0032 };
0033 
0034 
0035 glaxnimate::gui::font::FontStyleDialog::FontStyleDialog(QWidget* parent)
0036     : QDialog(parent), d(std::make_unique<Private>())
0037 {
0038     d->ui.setupUi(this);
0039     installEventFilter(&d->ncoe);
0040     connect(d->ui.tab_widget, &QTabWidget::currentChanged, this, [this]{
0041         d->set_preview_font();
0042     });
0043 }
0044 
0045 glaxnimate::gui::font::FontStyleDialog::~FontStyleDialog() = default;
0046 
0047 void glaxnimate::gui::font::FontStyleDialog::changeEvent ( QEvent* e )
0048 {
0049     QDialog::changeEvent(e);
0050 
0051     if ( e->type() == QEvent::LanguageChange)
0052     {
0053         d->ui.retranslateUi(this);
0054     }
0055 }
0056 
0057 QFont glaxnimate::gui::font::FontStyleDialog::selected_font() const
0058 {
0059     return d->ui.preview->selected_font();
0060 }
0061 
0062 void glaxnimate::gui::font::FontStyleDialog::set_font(const QFont& font)
0063 {
0064     d->ui.widget_system->set_font(font);
0065     d->ui.google_fonts_widget->set_font_size(font.pointSizeF());
0066     d->ui.custom_font_widget->set_font_size(font.pointSizeF());
0067 }
0068 
0069 void glaxnimate::gui::font::FontStyleDialog::set_preview_text(const QString& text)
0070 {
0071     d->ui.preview->set_text(text);
0072 }
0073 
0074 QStringList glaxnimate::gui::font::FontStyleDialog::favourites() const
0075 {
0076     return d->ui.widget_system->model().favourites();
0077 }
0078 
0079 void glaxnimate::gui::font::FontStyleDialog::set_favourites(const QStringList& fav)
0080 {
0081     d->ui.widget_system->model().set_favourites(fav);
0082 }
0083 
0084 void glaxnimate::gui::font::FontStyleDialog::showEvent(QShowEvent* e)
0085 {
0086     QDialog::showEvent(e);
0087     bool google_enabled = d->ui.google_fonts_widget->model().has_token();
0088     d->ui.tab_google->setEnabled(google_enabled);
0089     if ( !google_enabled && d->ui.tab_widget->currentWidget() == d->ui.tab_google )
0090         d->ui.tab_widget->setCurrentIndex(0);
0091     d->set_preview_font();
0092 }
0093 
0094 glaxnimate::model::CustomFont glaxnimate::gui::font::FontStyleDialog::custom_font() const
0095 {
0096     if ( d->ui.tab_widget->currentWidget() == d->ui.tab_google )
0097         return d->ui.google_fonts_widget->custom_font();
0098     else if ( d->ui.tab_widget->currentWidget() == d->ui.tab_custom )
0099         return d->ui.custom_font_widget->custom_font();
0100 
0101     return {};
0102 }