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_size_widget.hpp"
0008 #include "ui_font_size_widget.h"
0009 
0010 #include <QEvent>
0011 #include <QStandardItemModel>
0012 #include <QSignalBlocker>
0013 #include <QFontDatabase>
0014 
0015 class glaxnimate::gui::font::FontSizeWidget::Private
0016 {
0017 public:
0018     Ui_FontSizeWidget ui;
0019     QStandardItemModel sizes_model;
0020     QList<int> standard_sizes;
0021 };
0022 
0023 glaxnimate::gui::font::FontSizeWidget::FontSizeWidget(QWidget* parent)
0024     : QWidget(parent), d(std::make_unique<Private>())
0025 {
0026     d->ui.setupUi(this);
0027 
0028     d->standard_sizes = QFontDatabase::standardSizes();
0029     for ( int s : d->standard_sizes )
0030         d->sizes_model.appendRow(new QStandardItem(QString::number(s)));
0031     d->ui.view_size->setModel(&d->sizes_model);
0032 
0033     connect(d->ui.view_size->selectionModel(), &QItemSelectionModel::currentChanged, this, &FontSizeWidget::size_selected);
0034     connect(d->ui.spin_size, qOverload<double>(&QDoubleSpinBox::valueChanged), this, &FontSizeWidget::size_edited);
0035 }
0036 
0037 glaxnimate::gui::font::FontSizeWidget::~FontSizeWidget() = default;
0038 
0039 void glaxnimate::gui::font::FontSizeWidget::changeEvent ( QEvent* e )
0040 {
0041     QWidget::changeEvent(e);
0042 
0043     if ( e->type() == QEvent::LanguageChange)
0044     {
0045         d->ui.retranslateUi(this);
0046     }
0047 }
0048 
0049 void glaxnimate::gui::font::FontSizeWidget::set_font_size(qreal size)
0050 {
0051     d->ui.spin_size->setValue(size);
0052     size_edited(size);
0053 }
0054 
0055 
0056 void glaxnimate::gui::font::FontSizeWidget::size_edited(double size)
0057 {
0058     QSignalBlocker blocker(d->ui.view_size);
0059 
0060     for ( int i = 0; i < d->standard_sizes.size(); i++ )
0061         if ( d->standard_sizes[i] == size )
0062             d->ui.view_size->setCurrentIndex(d->sizes_model.index(i, 0));
0063 
0064     Q_EMIT font_size_changed(size);
0065 }
0066 
0067 
0068 void glaxnimate::gui::font::FontSizeWidget::size_selected(const QModelIndex& index)
0069 {
0070     QSignalBlocker blocker(d->ui.spin_size);
0071 
0072     qreal size = index.data().toInt();
0073     d->ui.spin_size->setValue(size);;
0074 
0075     Q_EMIT font_size_changed(size);
0076 }