Author: jghali
Date: Thu Mar  8 15:21:04 2018
New Revision: 22424

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22424
Log:
#15184: Writing in unavailable Font Family then trying to change it silently 
crashes application

Modified:
    trunk/Scribus/scribus/ui/fontcombo.cpp
    trunk/Scribus/scribus/ui/fontcombo.h

Modified: trunk/Scribus/scribus/ui/fontcombo.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22424&path=/trunk/Scribus/scribus/ui/fontcombo.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/fontcombo.cpp      (original)
+++ trunk/Scribus/scribus/ui/fontcombo.cpp      Thu Mar  8 15:21:04 2018
@@ -51,6 +51,8 @@
        psFont = IconManager::instance()->loadPixmap("font_type1_16.png");
        substFont = IconManager::instance()->loadPixmap("font_subst16.png");
        setEditable(true);
+       setValidator(new FontComboValidator(this));
+       setInsertPolicy(QComboBox::NoInsert);
        setItemDelegate(new FontFamilyDelegate(this));
        RebuildList(0);
 }
@@ -126,6 +128,8 @@
        }
        fontFamily = new ScComboBox(this);
        fontFamily->setEditable(true);
+       fontFamily->setValidator(new FontComboValidator(fontFamily));
+       fontFamily->setInsertPolicy(QComboBox::NoInsert);
        fontFamily->setItemDelegate(new FontFamilyDelegate(this));
        fontComboLayout->addWidget(fontFamily,0,col);
        fontStyle = new ScComboBox(this);
@@ -619,3 +623,31 @@
 }
 
 
+FontComboValidator::FontComboValidator(QObject* parent)
+       : QValidator(parent)
+{
+       prefsManager = PrefsManager::instance();
+}
+
+QValidator::State FontComboValidator::validate(QString & input, int & pos) 
const
+{
+       QComboBox* comboBox = dynamic_cast<QComboBox*>(this->parent());
+       if (!comboBox)
+               return QValidator::Invalid;
+
+       int index = comboBox->findText(input, Qt::MatchFixedString);
+       if (index >= 0)
+       {
+               input = comboBox->itemText(index); // Matching is performed 
case insensitively
+               return QValidator::Acceptable;
+       }
+
+       for (int i = 0; i < comboBox->count(); ++i)
+       {
+               QString itemText = comboBox->itemText(i);
+               if (itemText.startsWith(input, Qt::CaseInsensitive))
+                       return QValidator::Intermediate;
+       }
+
+       return QValidator::Invalid;
+}

Modified: trunk/Scribus/scribus/ui/fontcombo.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22424&path=/trunk/Scribus/scribus/ui/fontcombo.h
==============================================================================
--- trunk/Scribus/scribus/ui/fontcombo.h        (original)
+++ trunk/Scribus/scribus/ui/fontcombo.h        Thu Mar  8 15:21:04 2018
@@ -28,6 +28,7 @@
 #include <QComboBox>
 #include <QFontDatabase>
 #include <QPixmapCache>
+#include <QValidator>
 
 #include "scribusapi.h"
 
@@ -51,10 +52,9 @@
 public:
        FontCombo(QWidget* pa);
        ~FontCombo() {}
-       
-       
 
        void RebuildList(ScribusDoc *currentDoc, bool forAnnotation = false, 
bool forSubstitute = false);
+
 private:
        PrefsManager* prefsManager;
        QPixmap ttfFont;
@@ -65,7 +65,6 @@
 
 class SCRIBUS_API FontComboH : public QWidget
 {
-
        Q_OBJECT
 
 public:
@@ -125,4 +124,16 @@
        QFont m_font;
        static QPixmapCache pixmapCache;
 };
+
+class FontComboValidator : public QValidator
+{
+       Q_OBJECT
+
+public:
+       FontComboValidator(QObject* parent = 0);
+       virtual State validate(QString & input, int & pos) const;
+
+protected:
+       PrefsManager* prefsManager;
+};
 #endif


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to