/*************************************************************************** * This file is part of the Lime Report project * * Copyright (C) 2021 by Alexander Arin * * arin_a@bk.ru * * * ** GNU General Public License Usage ** * * * This library is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ** GNU Lesser General Public License ** * * * This library is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation, either version 3 of the * * License, or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public * * License along with this library. * * If not, see . * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * ****************************************************************************/ #include "lrfonteditorwidget.h" namespace LimeReport { FontEditorWidget::FontEditorWidget(const QString& title, QWidget* parent): ItemEditorWidget(title, parent), m_ignoreSlots(false) { initEditor(); } void FontEditorWidget::setItemEvent(BaseDesignIntf* item) { QVariant font = item->property("font"); if (font.isValid()) { updateValues(font.value()); setEnabled(true); } } void FontEditorWidget::initEditor() { setIconSize(QSize(24, 24)); setAllowedAreas(Qt::TopToolBarArea); setFloatable(false); m_fontNameEditor = new QFontComboBox(this); m_fontNameEditor->setFontFilters(QFontComboBox::AllFonts); connect(m_fontNameEditor, SIGNAL(currentFontChanged(QFont)), this, SLOT(slotFontChanged(QFont))); addWidget(m_fontNameEditor); m_fontSizeModel.setStringList(QStringList() << "6" << "7" << "8" << "9" << "10" << "11" << "12" << "14" << "16" << "18" << "20" << "24" << "28" << "30" << "36" << "48" << "64" << "72"); m_fontSizeEditor = new QComboBox(this); m_fontSizeEditor->setModel(&m_fontSizeModel); m_fontSizeEditor->setEditable(true); #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 3) connect(m_fontSizeEditor, SIGNAL(currentTextChanged(QString)), this, SLOT(slotFontSizeChanged(QString))); #else connect(m_fontSizeEditor, SIGNAL(currentIndexChanged(QString)), this, SLOT(slotFontSizeChanged(QString))); #endif addWidget(m_fontSizeEditor); addSeparator(); setEnabled(false); m_fontBold = new QAction(tr("Font bold"), this); m_fontBold->setIcon(QIcon(":/report/images/textBold")); m_fontBold->setCheckable(true); connect(m_fontBold, SIGNAL(toggled(bool)), this, SLOT(slotFontAttribsChanged(bool))); addAction(m_fontBold); m_fontItalic = new QAction(tr("Font Italic"), this); m_fontItalic->setIcon(QIcon(":/report/images/textItalic")); m_fontItalic->setCheckable(true); connect(m_fontItalic, SIGNAL(toggled(bool)), this, SLOT(slotFontAttribsChanged(bool))); addAction(m_fontItalic); m_fontUnderline = new QAction(tr("Font Underline"), this); m_fontUnderline->setIcon(QIcon(":/report/images/textUnderline")); m_fontUnderline->setCheckable(true); connect(m_fontUnderline, SIGNAL(toggled(bool)), this, SLOT(slotFontAttribsChanged(bool))); addAction(m_fontUnderline); } void FontEditorWidget::updateValues(const QFont& font) { m_ignoreSlots = true; m_fontNameEditor->setCurrentFont(font); m_fontSizeEditor->setEditText(QString::number(font.pointSize())); m_fontBold->setChecked(font.bold()); m_fontItalic->setChecked(font.italic()); m_fontUnderline->setChecked(font.underline()); m_ignoreSlots = false; } bool FontEditorWidget::ignoreSlots() const { return m_ignoreSlots; } void FontEditorWidget::slotFontChanged(const QFont& /*font*/) { // if (page()) page()->setFont(font); } void FontEditorWidget::slotFontSizeChanged(const QString& value) { if (m_ignoreSlots) return; m_resFont = fontNameEditor()->currentFont(); m_resFont.setPointSize(value.toInt()); } void FontEditorWidget::slotFontAttribsChanged(bool) { if (m_ignoreSlots) return; m_resFont = m_fontNameEditor->currentFont(); m_resFont.setPointSize(m_fontSizeEditor->currentText().toInt()); m_resFont.setBold(m_fontBold->isChecked()); m_resFont.setItalic(m_fontItalic->isChecked()); m_resFont.setUnderline(m_fontUnderline->isChecked()); } void FontEditorWidget::slotPropertyChanged(const QString& objectName, const QString& property, const QVariant& oldValue, const QVariant& newValue) { Q_UNUSED(oldValue) Q_UNUSED(newValue) if (item() && (item()->objectName() == objectName) && (property == "font")) { updateValues(item()->property("font").value()); } } void FontEditorWidgetForPage::slotFontChanged(const QFont& font) { if (!ignoreSlots()) m_page->setFont(font); } void FontEditorWidgetForPage::slotFontSizeChanged(const QString& value) { if (!ignoreSlots()) { FontEditorWidget::slotFontSizeChanged(value); m_page->setFont(resFont()); } } void FontEditorWidgetForPage::slotFontAttribsChanged(bool value) { if (!ignoreSlots()) { FontEditorWidget::slotFontAttribsChanged(value); m_page->setFont(resFont()); } } #ifdef HAVE_REPORT_DESIGNER void FontEditorWidgetForDesigner::initEditor() { connect(m_reportEditor, SIGNAL(itemPropertyChanged(QString, QString, QVariant, QVariant)), this, SLOT(slotPropertyChanged(QString, QString, QVariant, QVariant))); } void FontEditorWidgetForDesigner::slotFontChanged(const QFont& font) { if (!ignoreSlots()) m_reportEditor->setFont(font); } void FontEditorWidgetForDesigner::slotFontSizeChanged(const QString& value) { if (!ignoreSlots()) { FontEditorWidget::slotFontSizeChanged(value); m_reportEditor->setFont(resFont()); } } void FontEditorWidgetForDesigner::slotFontAttribsChanged(bool value) { if (!ignoreSlots()) { FontEditorWidget::slotFontAttribsChanged(value); m_reportEditor->setFont(resFont()); } } #endif } // namespace LimeReport