r23204 by jghali - Show hyphenation char text field as empty if hyphenation char is null

scribus-commit scribus-commit at lists.scribus.net
Sun Sep 22 09:25:29 UTC 2019


Author: jghali
Date: Sun Sep 22 09:25:29 2019
New Revision: 23204

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23204
Log:
Show hyphenation char text field as empty if hyphenation char is null

Modified:
    trunk/Scribus/scribus/ui/smcstylewidget.cpp

Modified: trunk/Scribus/scribus/ui/smcstylewidget.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23204&path=/trunk/Scribus/scribus/ui/smcstylewidget.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/smcstylewidget.cpp	(original)
+++ trunk/Scribus/scribus/ui/smcstylewidget.cpp	Sun Sep 22 09:25:29 2019
@@ -1,707 +1,725 @@
-/*
-For general Scribus (>=1.3.2) copyright and licensing information please refer
-to the COPYING file provided with the program. Following this notice may exist
-a copyright and/or license notice that predates the release of Scribus 1.3.2
-for which a new license (GPL+exception) is in place.
-*/
-
-#include <QEvent>
-
-#include "iconmanager.h"
-#include "langmgr.h"
-#include "prefsmanager.h"
-#include "scribus.h"
-#include "smcstylewidget.h"
-#include "util.h"
-#include "units.h"
-
-
-SMCStyleWidget::SMCStyleWidget(QWidget *parent) :
-	m_Doc(nullptr)
-{
-	setupUi(this);
-
-	IconManager& im = IconManager::instance();
-	fontSizeLabel_->setPixmap(im.loadPixmap("zeichen.png"));
-	trackingLabel_->setPixmap(im.loadPixmap("textkern.png"));
-	widthSpaceLabel->setPixmap(im.loadPixmap("spacewidth.png"));
-	baselineOffsetLabel_->setPixmap(im.loadPixmap("textbase.png"));
-	hscaleLabel_->setPixmap(im.loadPixmap("textscaleh.png"));
-	vscaleLabel_->setPixmap(im.loadPixmap("textscalev.png"));
-	FillIcon->setPixmap(im.loadPixmap("16/color-fill.png"));
-	fillShadeLabel->setPixmap(im.loadPixmap("shade.png"));
-	StrokeIcon->setPixmap(im.loadPixmap("16/color-stroke.png"));
-	strokeShadeLabel->setPixmap(im.loadPixmap("shade.png"));
-	backIcon->setPixmap(im.loadPixmap("16/color-fill.png"));
-	backShadeLabel->setPixmap(im.loadPixmap("shade.png"));
-
-	fillColor_->setPixmapType(ColorCombo::fancyPixmaps);
-	fillColor_->clear();
-	fillColor_->addItem(CommonStrings::tr_NoneColor);
-
-	strokeColor_->setPixmapType(ColorCombo::fancyPixmaps);
-	strokeColor_->clear();
-	strokeColor_->addItem(CommonStrings::tr_NoneColor);
-
-	backColor_->setPixmapType(ColorCombo::fancyPixmaps);
-	backColor_->clear();
-	backColor_->addItem(CommonStrings::tr_NoneColor);
-
-	StrokeIcon->setEnabled(false);
-	strokeShade_->setEnabled(false);
-	strokeColor_->setEnabled(false);
-	fontfeaturesSetting->resetFontFeatures();
-
-	connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
-	connect(fontFace_, SIGNAL(fontSelected(QString)), this, SLOT(slotEnableFontFeatures(QString)));
-}
-
-void SMCStyleWidget::changeEvent(QEvent *e)
-{
-	if (e->type() == QEvent::LanguageChange)
-	{
-		languageChange();
-	}
-	else
-		QWidget::changeEvent(e);
-}
-
-void SMCStyleWidget::languageChange()
-{
-	QStringList languageList;
-	LanguageManager::instance()->fillInstalledStringList(&languageList);
-	fillLangComboFromList(languageList);
-
-	if (fillColor_->count() > 0)
-	{
-		bool sigBlocked = fillColor_->blockSignals(true);
-		fillColor_->setItemText(0, CommonStrings::tr_NoneColor);
-		fillColor_->blockSignals(sigBlocked);
-	}
-
-	if (strokeColor_->count() > 0)
-	{
-		bool sigBlocked = strokeColor_->blockSignals(true);
-		strokeColor_->setItemText(0, CommonStrings::tr_NoneColor);
-		strokeColor_->blockSignals(sigBlocked);
-	}
-
-	if (backColor_->count() > 0)
-	{
-		bool sigBlocked = backColor_->blockSignals(true);
-		backColor_->setItemText(0, CommonStrings::tr_NoneColor);
-		backColor_->blockSignals(sigBlocked);
-	}
-
-	retranslateUi(this);
-
-	fontSizeLabel_->setToolTip(fontSize_->toolTip());
-	trackingLabel_->setToolTip(tracking_->toolTip());
-	widthSpaceLabel->setToolTip(widthSpaceSpin->toolTip());
-	baselineOffsetLabel_->setToolTip(baselineOffset_->toolTip());
-	hscaleLabel_->setToolTip(fontHScale_->toolTip());
-	vscaleLabel_->setToolTip(fontVScale_->toolTip());
-	FillIcon->setToolTip(fillColor_->toolTip());
-	fillShadeLabel->setToolTip(fillShade_->toolTip());
-	StrokeIcon->setToolTip(strokeColor_->toolTip());
-	strokeShadeLabel->setToolTip(strokeShade_->toolTip());
-	backIcon->setToolTip(backColor_->toolTip());
-	backShadeLabel->setToolTip(backShade_->toolTip());
-
-// 	fontVScale_->setSuffix( tr(" %"));
-// 	fontHScale_->setSuffix( tr(" %"));
-// 	baselineOffset_->setSuffix( tr(" %"));
-// 	tracking_->setSuffix( tr(" %"));
-	fontSize_->setSuffix(unitGetSuffixFromIndex(0));
-}
-/*
-void SMCStyleWidget::fillLangCombo(QMap<QString,QString> langMap)
-{
-	QStringList sortList;
-	QMap<QString,QString>::Iterator it;
-
-	m_langMap = langMap;
-
-	language_->clear();
-
-	for (it = langMap.begin(); it != langMap.end(); ++it)
-		sortList.push_back(it.value());
-
-	language_->addItems(sortQStringList(sortList));
-
-	QListView *tmpView = dynamic_cast<QListView*>(language_->view()); Q_ASSERT(tmpView);
-	int tmpWidth = tmpView->sizeHintForColumn(0);
-	if (tmpWidth > 0)
-		tmpView->setMinimumWidth(tmpWidth + 24);
-}
-*/
-void SMCStyleWidget::fillLangComboFromList(const QStringList& langList)
-{
-	language_->clear();
-	language_->addItems(langList);
-
-	QListView *tmpView = dynamic_cast<QListView*>(language_->view());
-	Q_ASSERT(tmpView);
-	int tmpWidth = tmpView->sizeHintForColumn(0);
-	if (tmpWidth > 0)
-		tmpView->setMinimumWidth(tmpWidth + 24);
-}
-
-void SMCStyleWidget::fillColorCombo(ColorList &colors)
-{
-	fillColor_->clear();
-	strokeColor_->clear();
-	backColor_->clear();
-
-	fillColor_->setColors(colors, true);
-	strokeColor_->setColors(colors, true);
-	backColor_->setColors(colors, true);
-	fillColor_->view()->setMinimumWidth(fillColor_->view()->maximumViewportSize().width()+24);
-	strokeColor_->view()->setMinimumWidth(strokeColor_->view()->maximumViewportSize().width()+24);
-	backColor_->view()->setMinimumWidth(backColor_->view()->maximumViewportSize().width()+24);
-}
-
-void SMCStyleWidget::handleUpdateRequest(int updateFlags)
-{
-	if (!m_Doc)
-		return;
-	if (updateFlags & reqColorsUpdate)
-		fillColorCombo(m_Doc->PageColors);
-}
-
-void SMCStyleWidget::slotEnableFontFeatures(const QString& s)
-{
-	const ScFace& font = PrefsManager::instance().appPrefs.fontPrefs.AvailFonts[s];
-	fontfeaturesSetting->enableFontFeatures(font.fontFeatures());
-}
-
-void SMCStyleWidget::setDoc(ScribusDoc *doc)
-{
-	if (m_Doc)
-		disconnect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
-
-	m_Doc = doc;
-	if (!m_Doc)
-		return;
-
-	QStringList languageList;
-	LanguageManager::instance()->fillInstalledStringList(&languageList);
-	fillLangComboFromList(languageList);
-	fillColorCombo(m_Doc->PageColors);
-	fontFace_->rebuildList(m_Doc);
-
-	connect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
-}
-
-void SMCStyleWidget::show(CharStyle *cstyle, QList<CharStyle> &cstyles, const QString &defLang, int unitIndex)
-{
-	disconnect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
-	parentCombo->setEnabled(!cstyle->isDefaultStyle());
-	const CharStyle *parent = dynamic_cast<const CharStyle*>(cstyle->parentStyle());
-	bool hasParent =  cstyle->hasParent() && parent != nullptr && parent->hasName() && cstyle->parent() != "";
-	if (hasParent)
-	{
-		fontSize_->setValue(cstyle->fontSize() / 10.0, cstyle->isInhFontSize());
-		fontSize_->setParentValue(parent->fontSize() / 10.0);
-
-		fontHScale_->setValue(cstyle->scaleH() / 10.0, cstyle->isInhScaleH());
-		fontHScale_->setParentValue(parent->scaleH() / 10.0);
-
-		fontVScale_->setValue(cstyle->scaleV() / 10.0, cstyle->isInhScaleV());
-		fontVScale_->setParentValue(parent->scaleV() / 10.0);
-
-		baselineOffset_->setValue(cstyle->baselineOffset() / 10.0, cstyle->isInhBaselineOffset());
-		baselineOffset_->setParentValue(parent->baselineOffset() / 10.0);
-
-		tracking_->setValue(cstyle->tracking() / 10.0, cstyle->isInhTracking());
-		tracking_->setParentValue(parent->tracking() / 10.0);
-		
-		widthSpaceSpin->setValue(cstyle->wordTracking() * 100.0 ,cstyle->isInhTracking());
-		widthSpaceSpin->setParentValue(parent->wordTracking() * 100.0);
-
-		effects_->setStyle(static_cast<int>(cstyle->effects()), cstyle->isInhFeatures());
-		effects_->setParentItem(static_cast<int>(parent->effects())); // FIXME
-
-		fillShade_->setValue(qRound(cstyle->fillShade()), cstyle->isInhFillShade());
-		fillShade_->setParentValue(qRound(parent->fillShade()));
-
-		strokeShade_->setValue(qRound(cstyle->strokeShade()), cstyle->isInhStrokeShade());
-		strokeShade_->setParentValue(qRound(parent->strokeShade()));
-
-		fillColor_->setCurrentText(cstyle->fillColor(), cstyle->isInhFillColor());
-		fillColor_->setParentText(parent->fillColor());
-
-		strokeColor_->setCurrentText(cstyle->strokeColor(), cstyle->isInhStrokeColor());
-		strokeColor_->setParentText(parent->strokeColor());
-
-		backColor_->setCurrentText(cstyle->backColor(), cstyle->isInhBackColor());
-		backColor_->setParentText(parent->backColor());
-
-		backShade_->setValue(qRound(cstyle->backShade()), cstyle->isInhBackShade());
-		backShade_->setParentValue(qRound(parent->backShade()));
-
-		fontFace_->setCurrentFont(cstyle->font().scName(), cstyle->isInhFont());
-		fontFace_->setParentFont(parent->font().scName());
-
-		fontfeaturesSetting->setFontFeatures(cstyle->fontFeatures(), cstyle->font().fontFeatures());
-		fontfeaturesSetting->setParentValue(parent->fontFeatures());
-
-		smallestWordSpinBox->setValue(cstyle->hyphenWordMin(), cstyle->isInhHyphenWordMin());
-		smallestWordSpinBox->setParentValue(parent->hyphenWordMin());
-
-		hyphenCharLineEdit->setValue(QString::fromUcs4(&cstyle->hyphenChar(), 1), cstyle->isInhHyphenChar());
-		hyphenCharLineEdit->setParentValue(QString::fromUcs4(&parent->hyphenChar(), 1));
-	}
-	else
-	{
-		fontSize_->setValue(cstyle->fontSize() / 10.0);
-		fontHScale_->setValue(cstyle->scaleH() / 10.0);
-		fontVScale_->setValue(cstyle->scaleV() / 10.0);
-		baselineOffset_->setValue(cstyle->baselineOffset() / 10.0);
-		tracking_->setValue(cstyle->tracking() / 10.0);
-		widthSpaceSpin->setValue(cstyle->wordTracking() * 100.0);
-		effects_->setStyle(static_cast<int>(cstyle->effects()));
-		fillShade_->setValue(qRound(cstyle->fillShade()));
-		strokeShade_->setValue(qRound(cstyle->strokeShade()));
-		fillColor_->setCurrentText(cstyle->fillColor());
-		strokeColor_->setCurrentText(cstyle->strokeColor());
-		backColor_->setCurrentText(cstyle->backColor());
-		backShade_->setValue(qRound(cstyle->backShade()));
-		fontFace_->setCurrentFont(cstyle->font().scName());
-		fontfeaturesSetting->setFontFeatures(cstyle->fontFeatures(), cstyle->font().fontFeatures());
-		smallestWordSpinBox->setValue(cstyle->hyphenWordMin());
-		hyphenCharLineEdit->setValue(QString::fromUcs4(&cstyle->hyphenChar(), 1));
-	}
-
-	effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
-	effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
-	effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
-	effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
-	effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
-	effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
-	effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
-	slotColorChange();
-
-	parentCombo->clear();
-	parentCombo->addItem( cstyle->isDefaultStyle()? tr("A default style cannot be assigned a parent style") : "");
-	if (!cstyle->isDefaultStyle())
-	{
-		for (int i = 0; i < cstyles.count(); ++i)
-		{
-			if (cstyles[i].name() != cstyle->name())
-				parentCombo->addItem(cstyles[i].name());
-		}
-	}
-
-	if (cstyle->isDefaultStyle() || !hasParent)
-		parentCombo->setCurrentIndex(0);
-	else if (hasParent)
-	{
-		int index = 0;
-		for (int i = 0; i < parentCombo->count(); ++i)
-		{
-			if (parentCombo->itemText(i) == cstyle->parentStyle()->name())
-			{
-				index = i;
-				break;
-			}
-		}
-		parentCombo->setCurrentIndex(index);
-	}
-
-	QString defaultLang(defLang.isEmpty() ? "en_GB" : defLang);
-	QString clang(cstyle->language().isEmpty() ? defaultLang : cstyle->language());
-	QString plang;
-	if (hasParent)
-		plang = parent->language().isEmpty() ? defaultLang : parent->language();
-
-	int ci = -1, pi = -1, di = -1;
-	QString tl = LanguageManager::instance()->getAbbrevFromLang(defaultLang, false);
-	for (int i = 0; i < language_->count(); ++i)
-	{
-		QString ltAbbrev(LanguageManager::instance()->getAbbrevFromLang(language_->itemText(i), false));
-		if (ltAbbrev == clang)
-			ci = i;
-		if (hasParent && ltAbbrev == plang)
-			pi = i;
-		if (ltAbbrev == defaultLang || ltAbbrev == tl)
-			di = i;
-	}
-
-	//qDebug() << QString("SMCStyleWidget::show(): deflan='%1'->'%2'").arg(defLang).arg(langMap_[defLang]);
-	Q_ASSERT(di != -1);
-
-	if (hasParent)
-	{
-		if (ci == -1)
-			language_->setCurrentItem(di, cstyle->isInhLanguage());
-		else
-			language_->setCurrentItem(ci, cstyle->isInhLanguage());
-
-		language_->setParentItem(pi);
-	}
-	else
-	{
-		if (ci == -1)
-			language_->setCurrentIndex(di);
-		else
-			language_->setCurrentIndex(ci);
-	}
-
-	connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
-}
-
-void SMCStyleWidget::show(QList<CharStyle*> &cstyles, QList<CharStyle> &cstylesAll, const QString &defLang, int unitIndex)
-{
-// 	int decimals = unitGetDecimalsFromIndex(unitIndex);
-// 	QString suffix = unitGetSuffixFromIndex(unitIndex);
-
-	if (cstyles.count() == 1)
-		show(cstyles[0], cstylesAll, defLang, unitIndex);
-	else if (cstyles.count() > 1)
-	{
-		showSizeAndPosition(cstyles);
-		showEffects(cstyles);
-		showColors(cstyles);
-		showLanguage(cstyles, defLang);
-		showSmallestWord(cstyles);
-		showHyphenChar(cstyles);
-		showParent(cstyles);
-		showFontFeatures(cstyles);
-	}
-}
-
-void SMCStyleWidget::showSizeAndPosition(const QList<CharStyle*> &cstyles)
-{
-	double d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->fontSize() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->fontSize();
-	}
-	if (d == -30000)
-		fontSize_->clear();
-	else
-		fontSize_->setValue(d / 10.0);
-
-	d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->scaleH() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->scaleH();
-	}
-	if (d == -30000)
-		fontHScale_->clear();
-	else
-		fontHScale_->setValue(d / 10.0);
-
-	d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->scaleV() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->scaleV();
-	}
-	if (d == -30000)
-		fontVScale_->clear();
-	else
-		fontVScale_->setValue(d / 10.0);
-
-	d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->baselineOffset() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->baselineOffset();
-	}
-	if (d == -30000)
-		baselineOffset_->clear();
-	else
-		baselineOffset_->setValue(d / 10.0);
-
-	d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->tracking() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->tracking();
-	}
-	if (d == -30000)
-		tracking_->clear();
-	else
-		tracking_->setValue(d / 10.0);
-	
-	d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->wordTracking() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->wordTracking();
-	}
-	if (d == -30000)
-		widthSpaceSpin->clear();
-	else
-		widthSpaceSpin->setValue(d * 100.0);
-}
-
-void SMCStyleWidget::showEffects(const QList<CharStyle*> &cstyles)
-{
-	int d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && static_cast<int>(cstyles[i]->effects()) != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = static_cast<int>(cstyles[i]->effects());
-	}
-	if (d == -30000)
-		effects_->setStyle(0);
-	else
-		effects_->setStyle(d);
-
-// 	TODO these things still missing:
-// 		effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
-// 		effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
-// 		effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
-// 		effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
-// 		effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
-// 		effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
-// 		effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
-}
-
-void SMCStyleWidget::showColors(const QList<CharStyle*> &cstyles)
-{
-	strokeShade_->setEnabled(true);
-	strokeColor_->setEnabled(true);
-
-	double d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->fillShade() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->fillShade();
-	}
-	if (d == -30000)
-		fillShade_->setText( tr("Shade"));
-	else
-		fillShade_->setValue(qRound(d));
-
-	d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->strokeShade() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->strokeShade();
-	}
-	if (d == -30000)
-	{
-		strokeShade_->setValue(21);
-		strokeShade_->setText( tr("Shade"));
-	}
-	else
-		strokeShade_->setValue(qRound(d));
-
-	d = -30000;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (d != -30000 && cstyles[i]->backShade() != d)
-		{
-			d = -30000;
-			break;
-		}
-		d = cstyles[i]->backShade();
-	}
-	if (d == -30000)
-	{
-		backShade_->setValue(21);
-		backShade_->setText( tr("Shade"));
-	}
-	else
-		backShade_->setValue(qRound(d));
-
-	QString s;
-	QString emptyString;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (!s.isNull() && s != cstyles[i]->fillColor())
-		{
-			s = emptyString;
-			break;
-		}
-		s = cstyles[i]->fillColor();
-	}
-	if (s.isEmpty())
-	{
-		if (fillColor_->itemText(fillColor_->count() - 1) != "")
-			fillColor_->addItem("");
-		fillColor_->setCurrentIndex(fillColor_->count() - 1);
-	}
-	else
-		fillColor_->setCurrentText(s);
-
-	s = emptyString;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (!s.isNull() && s != cstyles[i]->strokeColor())
-		{
-			s = emptyString;
-			break;
-		}
-		s = cstyles[i]->strokeColor();
-	}
-	if (s.isEmpty())
-	{
-		if (strokeColor_->itemText(strokeColor_->count() - 1) != "")
-			strokeColor_->addItem("");
-		strokeColor_->setCurrentIndex(strokeColor_->count() - 1);
-	}
-	else
-		strokeColor_->setCurrentText(s);
-
-	s = emptyString;
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (!s.isNull() && s != cstyles[i]->backColor())
-		{
-			s = emptyString;
-			break;
-		}
-		s = cstyles[i]->backColor();
-	}
-	if (s.isEmpty())
-	{
-		if (backColor_->itemText(backColor_->count() - 1) != "")
-			backColor_->addItem("");
-		backColor_->setCurrentIndex(backColor_->count() - 1);
-	}
-	else
-		backColor_->setCurrentText(s);
-}
-
-void SMCStyleWidget::showLanguage(const QList<CharStyle*> &cstyles, const QString &defLang)
-{
-	QString emptyString;
-	QString s(cstyles[0]->language());
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (s != cstyles[i]->language())
-		{
-			s = emptyString;
-			break;
-		}
-		s = cstyles[i]->language();
-	}
-	if (s.isEmpty())
-	{
-		if (language_->itemText(language_->count() - 1) != "")
-			language_->addItem("");
-		language_->setCurrentIndex(language_->count() - 1);
-	}
-	else
-		setCurrentComboItem(language_, LanguageManager::instance()->getLangFromAbbrev(s));
-}
-
-void SMCStyleWidget::showSmallestWord(const QList<CharStyle *> &cstyles)
-{
-	int tmp = 0;
-	int s(cstyles[0]->hyphenWordMin());
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (s != cstyles[i]->hyphenWordMin())
-		{
-			s = tmp;
-			break;
-		}
-		s = cstyles[i]->hyphenWordMin();
-	}
-	smallestWordSpinBox->setValue(s);
-}
-
-void SMCStyleWidget::showHyphenChar(const QList<CharStyle *> &cstyles)
-{
-	uint empty = 0;
-	uint ch(cstyles[0]->hyphenChar());
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (ch != cstyles[i]->hyphenChar())
-		{
-			ch = empty;
-			break;
-		}
-		ch = cstyles[i]->hyphenChar();
-	}
-	hyphenCharLineEdit->setValue(QString::fromUcs4(&ch, 1));
-}
-
-void SMCStyleWidget::showParent(const QList<CharStyle*> &cstyles)
-{
-	parentCombo->setEnabled(false);
-}
-
-void SMCStyleWidget::showFontFeatures(const QList<CharStyle *> &cstyles)
-{
-	QString tmp;
-	QStringList tmp2;
-	QString fontfeatures(cstyles[0]->fontFeatures());
-	QStringList featuresList(cstyles[0]->font().fontFeatures());
-	for (int i = 0; i < cstyles.count(); ++i)
-	{
-		if (fontfeatures != cstyles[i]->fontFeatures())
-		{
-			fontfeatures = tmp;
-			featuresList = tmp2;
-			break;
-		}
-		fontfeatures = cstyles[i]->fontFeatures();
-		featuresList = cstyles[i]->font().fontFeatures();
-	}
-	fontfeaturesSetting->setFontFeatures(fontfeatures, featuresList);
-}
-
-void SMCStyleWidget::clearAll()
-{
-	
-}
-
-void SMCStyleWidget::slotColorChange()
-{
-	int s = effects_->getStyle();
-	bool enabled= (s & 4) || (s & 256);
-	StrokeIcon->setEnabled(enabled);
-	strokeShade_->setEnabled(enabled);
-	strokeColor_->setEnabled(enabled);
-}
-
-
-SMCStyleWidget::~SMCStyleWidget()
-{
-	
-}
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+
+#include <QEvent>
+
+#include "iconmanager.h"
+#include "langmgr.h"
+#include "prefsmanager.h"
+#include "scribus.h"
+#include "smcstylewidget.h"
+#include "util.h"
+#include "units.h"
+
+
+SMCStyleWidget::SMCStyleWidget(QWidget *parent) :
+	m_Doc(nullptr)
+{
+	setupUi(this);
+
+	IconManager& im = IconManager::instance();
+	fontSizeLabel_->setPixmap(im.loadPixmap("zeichen.png"));
+	trackingLabel_->setPixmap(im.loadPixmap("textkern.png"));
+	widthSpaceLabel->setPixmap(im.loadPixmap("spacewidth.png"));
+	baselineOffsetLabel_->setPixmap(im.loadPixmap("textbase.png"));
+	hscaleLabel_->setPixmap(im.loadPixmap("textscaleh.png"));
+	vscaleLabel_->setPixmap(im.loadPixmap("textscalev.png"));
+	FillIcon->setPixmap(im.loadPixmap("16/color-fill.png"));
+	fillShadeLabel->setPixmap(im.loadPixmap("shade.png"));
+	StrokeIcon->setPixmap(im.loadPixmap("16/color-stroke.png"));
+	strokeShadeLabel->setPixmap(im.loadPixmap("shade.png"));
+	backIcon->setPixmap(im.loadPixmap("16/color-fill.png"));
+	backShadeLabel->setPixmap(im.loadPixmap("shade.png"));
+
+	fillColor_->setPixmapType(ColorCombo::fancyPixmaps);
+	fillColor_->clear();
+	fillColor_->addItem(CommonStrings::tr_NoneColor);
+
+	strokeColor_->setPixmapType(ColorCombo::fancyPixmaps);
+	strokeColor_->clear();
+	strokeColor_->addItem(CommonStrings::tr_NoneColor);
+
+	backColor_->setPixmapType(ColorCombo::fancyPixmaps);
+	backColor_->clear();
+	backColor_->addItem(CommonStrings::tr_NoneColor);
+
+	StrokeIcon->setEnabled(false);
+	strokeShade_->setEnabled(false);
+	strokeColor_->setEnabled(false);
+	fontfeaturesSetting->resetFontFeatures();
+
+	connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
+	connect(fontFace_, SIGNAL(fontSelected(QString)), this, SLOT(slotEnableFontFeatures(QString)));
+}
+
+void SMCStyleWidget::changeEvent(QEvent *e)
+{
+	if (e->type() == QEvent::LanguageChange)
+	{
+		languageChange();
+	}
+	else
+		QWidget::changeEvent(e);
+}
+
+void SMCStyleWidget::languageChange()
+{
+	QStringList languageList;
+	LanguageManager::instance()->fillInstalledStringList(&languageList);
+	fillLangComboFromList(languageList);
+
+	if (fillColor_->count() > 0)
+	{
+		bool sigBlocked = fillColor_->blockSignals(true);
+		fillColor_->setItemText(0, CommonStrings::tr_NoneColor);
+		fillColor_->blockSignals(sigBlocked);
+	}
+
+	if (strokeColor_->count() > 0)
+	{
+		bool sigBlocked = strokeColor_->blockSignals(true);
+		strokeColor_->setItemText(0, CommonStrings::tr_NoneColor);
+		strokeColor_->blockSignals(sigBlocked);
+	}
+
+	if (backColor_->count() > 0)
+	{
+		bool sigBlocked = backColor_->blockSignals(true);
+		backColor_->setItemText(0, CommonStrings::tr_NoneColor);
+		backColor_->blockSignals(sigBlocked);
+	}
+
+	retranslateUi(this);
+
+	fontSizeLabel_->setToolTip(fontSize_->toolTip());
+	trackingLabel_->setToolTip(tracking_->toolTip());
+	widthSpaceLabel->setToolTip(widthSpaceSpin->toolTip());
+	baselineOffsetLabel_->setToolTip(baselineOffset_->toolTip());
+	hscaleLabel_->setToolTip(fontHScale_->toolTip());
+	vscaleLabel_->setToolTip(fontVScale_->toolTip());
+	FillIcon->setToolTip(fillColor_->toolTip());
+	fillShadeLabel->setToolTip(fillShade_->toolTip());
+	StrokeIcon->setToolTip(strokeColor_->toolTip());
+	strokeShadeLabel->setToolTip(strokeShade_->toolTip());
+	backIcon->setToolTip(backColor_->toolTip());
+	backShadeLabel->setToolTip(backShade_->toolTip());
+
+// 	fontVScale_->setSuffix( tr(" %"));
+// 	fontHScale_->setSuffix( tr(" %"));
+// 	baselineOffset_->setSuffix( tr(" %"));
+// 	tracking_->setSuffix( tr(" %"));
+	fontSize_->setSuffix(unitGetSuffixFromIndex(0));
+}
+/*
+void SMCStyleWidget::fillLangCombo(QMap<QString,QString> langMap)
+{
+	QStringList sortList;
+	QMap<QString,QString>::Iterator it;
+
+	m_langMap = langMap;
+
+	language_->clear();
+
+	for (it = langMap.begin(); it != langMap.end(); ++it)
+		sortList.push_back(it.value());
+
+	language_->addItems(sortQStringList(sortList));
+
+	QListView *tmpView = dynamic_cast<QListView*>(language_->view()); Q_ASSERT(tmpView);
+	int tmpWidth = tmpView->sizeHintForColumn(0);
+	if (tmpWidth > 0)
+		tmpView->setMinimumWidth(tmpWidth + 24);
+}
+*/
+void SMCStyleWidget::fillLangComboFromList(const QStringList& langList)
+{
+	language_->clear();
+	language_->addItems(langList);
+
+	QListView *tmpView = dynamic_cast<QListView*>(language_->view());
+	Q_ASSERT(tmpView);
+	int tmpWidth = tmpView->sizeHintForColumn(0);
+	if (tmpWidth > 0)
+		tmpView->setMinimumWidth(tmpWidth + 24);
+}
+
+void SMCStyleWidget::fillColorCombo(ColorList &colors)
+{
+	fillColor_->clear();
+	strokeColor_->clear();
+	backColor_->clear();
+
+	fillColor_->setColors(colors, true);
+	strokeColor_->setColors(colors, true);
+	backColor_->setColors(colors, true);
+	fillColor_->view()->setMinimumWidth(fillColor_->view()->maximumViewportSize().width()+24);
+	strokeColor_->view()->setMinimumWidth(strokeColor_->view()->maximumViewportSize().width()+24);
+	backColor_->view()->setMinimumWidth(backColor_->view()->maximumViewportSize().width()+24);
+}
+
+void SMCStyleWidget::handleUpdateRequest(int updateFlags)
+{
+	if (!m_Doc)
+		return;
+	if (updateFlags & reqColorsUpdate)
+		fillColorCombo(m_Doc->PageColors);
+}
+
+void SMCStyleWidget::slotEnableFontFeatures(const QString& s)
+{
+	const ScFace& font = PrefsManager::instance().appPrefs.fontPrefs.AvailFonts[s];
+	fontfeaturesSetting->enableFontFeatures(font.fontFeatures());
+}
+
+void SMCStyleWidget::setDoc(ScribusDoc *doc)
+{
+	if (m_Doc)
+		disconnect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
+
+	m_Doc = doc;
+	if (!m_Doc)
+		return;
+
+	QStringList languageList;
+	LanguageManager::instance()->fillInstalledStringList(&languageList);
+	fillLangComboFromList(languageList);
+	fillColorCombo(m_Doc->PageColors);
+	fontFace_->rebuildList(m_Doc);
+
+	connect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
+}
+
+void SMCStyleWidget::show(CharStyle *cstyle, QList<CharStyle> &cstyles, const QString &defLang, int unitIndex)
+{
+	disconnect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
+	parentCombo->setEnabled(!cstyle->isDefaultStyle());
+	const CharStyle *parent = dynamic_cast<const CharStyle*>(cstyle->parentStyle());
+	bool hasParent =  cstyle->hasParent() && parent != nullptr && parent->hasName() && cstyle->parent() != "";
+	if (hasParent)
+	{
+		fontSize_->setValue(cstyle->fontSize() / 10.0, cstyle->isInhFontSize());
+		fontSize_->setParentValue(parent->fontSize() / 10.0);
+
+		fontHScale_->setValue(cstyle->scaleH() / 10.0, cstyle->isInhScaleH());
+		fontHScale_->setParentValue(parent->scaleH() / 10.0);
+
+		fontVScale_->setValue(cstyle->scaleV() / 10.0, cstyle->isInhScaleV());
+		fontVScale_->setParentValue(parent->scaleV() / 10.0);
+
+		baselineOffset_->setValue(cstyle->baselineOffset() / 10.0, cstyle->isInhBaselineOffset());
+		baselineOffset_->setParentValue(parent->baselineOffset() / 10.0);
+
+		tracking_->setValue(cstyle->tracking() / 10.0, cstyle->isInhTracking());
+		tracking_->setParentValue(parent->tracking() / 10.0);
+		
+		widthSpaceSpin->setValue(cstyle->wordTracking() * 100.0 ,cstyle->isInhTracking());
+		widthSpaceSpin->setParentValue(parent->wordTracking() * 100.0);
+
+		effects_->setStyle(static_cast<int>(cstyle->effects()), cstyle->isInhFeatures());
+		effects_->setParentItem(static_cast<int>(parent->effects())); // FIXME
+
+		fillShade_->setValue(qRound(cstyle->fillShade()), cstyle->isInhFillShade());
+		fillShade_->setParentValue(qRound(parent->fillShade()));
+
+		strokeShade_->setValue(qRound(cstyle->strokeShade()), cstyle->isInhStrokeShade());
+		strokeShade_->setParentValue(qRound(parent->strokeShade()));
+
+		fillColor_->setCurrentText(cstyle->fillColor(), cstyle->isInhFillColor());
+		fillColor_->setParentText(parent->fillColor());
+
+		strokeColor_->setCurrentText(cstyle->strokeColor(), cstyle->isInhStrokeColor());
+		strokeColor_->setParentText(parent->strokeColor());
+
+		backColor_->setCurrentText(cstyle->backColor(), cstyle->isInhBackColor());
+		backColor_->setParentText(parent->backColor());
+
+		backShade_->setValue(qRound(cstyle->backShade()), cstyle->isInhBackShade());
+		backShade_->setParentValue(qRound(parent->backShade()));
+
+		fontFace_->setCurrentFont(cstyle->font().scName(), cstyle->isInhFont());
+		fontFace_->setParentFont(parent->font().scName());
+
+		fontfeaturesSetting->setFontFeatures(cstyle->fontFeatures(), cstyle->font().fontFeatures());
+		fontfeaturesSetting->setParentValue(parent->fontFeatures());
+
+		smallestWordSpinBox->setValue(cstyle->hyphenWordMin(), cstyle->isInhHyphenWordMin());
+		smallestWordSpinBox->setParentValue(parent->hyphenWordMin());
+
+		uint hyphenChar = cstyle->hyphenChar();
+		QString hyphenText;
+		if (hyphenChar)
+			hyphenText = QString::fromUcs4(&hyphenChar, 1);
+		hyphenCharLineEdit->setValue(hyphenText, cstyle->isInhHyphenChar());
+
+		uint parentHyphenChar = parent->hyphenChar();
+		QString parentHyphenText;
+		if (parentHyphenChar)
+			parentHyphenText = QString::fromUcs4(&parentHyphenChar, 1);
+		hyphenCharLineEdit->setParentValue(parentHyphenText);
+	}
+	else
+	{
+		fontSize_->setValue(cstyle->fontSize() / 10.0);
+		fontHScale_->setValue(cstyle->scaleH() / 10.0);
+		fontVScale_->setValue(cstyle->scaleV() / 10.0);
+		baselineOffset_->setValue(cstyle->baselineOffset() / 10.0);
+		tracking_->setValue(cstyle->tracking() / 10.0);
+		widthSpaceSpin->setValue(cstyle->wordTracking() * 100.0);
+		effects_->setStyle(static_cast<int>(cstyle->effects()));
+		fillShade_->setValue(qRound(cstyle->fillShade()));
+		strokeShade_->setValue(qRound(cstyle->strokeShade()));
+		fillColor_->setCurrentText(cstyle->fillColor());
+		strokeColor_->setCurrentText(cstyle->strokeColor());
+		backColor_->setCurrentText(cstyle->backColor());
+		backShade_->setValue(qRound(cstyle->backShade()));
+		fontFace_->setCurrentFont(cstyle->font().scName());
+		fontfeaturesSetting->setFontFeatures(cstyle->fontFeatures(), cstyle->font().fontFeatures());
+		smallestWordSpinBox->setValue(cstyle->hyphenWordMin());
+
+		uint hyphenChar = cstyle->hyphenChar();
+		QString hyphenText;
+		if (hyphenChar)
+			hyphenText = QString::fromUcs4(&hyphenChar, 1);
+		hyphenCharLineEdit->setValue(hyphenText);
+	}
+
+	effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
+	effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
+	effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
+	effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
+	effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
+	effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
+	effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
+	slotColorChange();
+
+	parentCombo->clear();
+	parentCombo->addItem( cstyle->isDefaultStyle()? tr("A default style cannot be assigned a parent style") : "");
+	if (!cstyle->isDefaultStyle())
+	{
+		for (int i = 0; i < cstyles.count(); ++i)
+		{
+			if (cstyles[i].name() != cstyle->name())
+				parentCombo->addItem(cstyles[i].name());
+		}
+	}
+
+	if (cstyle->isDefaultStyle() || !hasParent)
+		parentCombo->setCurrentIndex(0);
+	else if (hasParent)
+	{
+		int index = 0;
+		for (int i = 0; i < parentCombo->count(); ++i)
+		{
+			if (parentCombo->itemText(i) == cstyle->parentStyle()->name())
+			{
+				index = i;
+				break;
+			}
+		}
+		parentCombo->setCurrentIndex(index);
+	}
+
+	QString defaultLang(defLang.isEmpty() ? "en_GB" : defLang);
+	QString clang(cstyle->language().isEmpty() ? defaultLang : cstyle->language());
+	QString plang;
+	if (hasParent)
+		plang = parent->language().isEmpty() ? defaultLang : parent->language();
+
+	int ci = -1, pi = -1, di = -1;
+	QString tl = LanguageManager::instance()->getAbbrevFromLang(defaultLang, false);
+	for (int i = 0; i < language_->count(); ++i)
+	{
+		QString ltAbbrev(LanguageManager::instance()->getAbbrevFromLang(language_->itemText(i), false));
+		if (ltAbbrev == clang)
+			ci = i;
+		if (hasParent && ltAbbrev == plang)
+			pi = i;
+		if (ltAbbrev == defaultLang || ltAbbrev == tl)
+			di = i;
+	}
+
+	//qDebug() << QString("SMCStyleWidget::show(): deflan='%1'->'%2'").arg(defLang).arg(langMap_[defLang]);
+	Q_ASSERT(di != -1);
+
+	if (hasParent)
+	{
+		if (ci == -1)
+			language_->setCurrentItem(di, cstyle->isInhLanguage());
+		else
+			language_->setCurrentItem(ci, cstyle->isInhLanguage());
+
+		language_->setParentItem(pi);
+	}
+	else
+	{
+		if (ci == -1)
+			language_->setCurrentIndex(di);
+		else
+			language_->setCurrentIndex(ci);
+	}
+
+	connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
+}
+
+void SMCStyleWidget::show(QList<CharStyle*> &cstyles, QList<CharStyle> &cstylesAll, const QString &defLang, int unitIndex)
+{
+// 	int decimals = unitGetDecimalsFromIndex(unitIndex);
+// 	QString suffix = unitGetSuffixFromIndex(unitIndex);
+
+	if (cstyles.count() == 1)
+		show(cstyles[0], cstylesAll, defLang, unitIndex);
+	else if (cstyles.count() > 1)
+	{
+		showSizeAndPosition(cstyles);
+		showEffects(cstyles);
+		showColors(cstyles);
+		showLanguage(cstyles, defLang);
+		showSmallestWord(cstyles);
+		showHyphenChar(cstyles);
+		showParent(cstyles);
+		showFontFeatures(cstyles);
+	}
+}
+
+void SMCStyleWidget::showSizeAndPosition(const QList<CharStyle*> &cstyles)
+{
+	double d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->fontSize() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->fontSize();
+	}
+	if (d == -30000)
+		fontSize_->clear();
+	else
+		fontSize_->setValue(d / 10.0);
+
+	d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->scaleH() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->scaleH();
+	}
+	if (d == -30000)
+		fontHScale_->clear();
+	else
+		fontHScale_->setValue(d / 10.0);
+
+	d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->scaleV() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->scaleV();
+	}
+	if (d == -30000)
+		fontVScale_->clear();
+	else
+		fontVScale_->setValue(d / 10.0);
+
+	d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->baselineOffset() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->baselineOffset();
+	}
+	if (d == -30000)
+		baselineOffset_->clear();
+	else
+		baselineOffset_->setValue(d / 10.0);
+
+	d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->tracking() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->tracking();
+	}
+	if (d == -30000)
+		tracking_->clear();
+	else
+		tracking_->setValue(d / 10.0);
+	
+	d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->wordTracking() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->wordTracking();
+	}
+	if (d == -30000)
+		widthSpaceSpin->clear();
+	else
+		widthSpaceSpin->setValue(d * 100.0);
+}
+
+void SMCStyleWidget::showEffects(const QList<CharStyle*> &cstyles)
+{
+	int d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && static_cast<int>(cstyles[i]->effects()) != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = static_cast<int>(cstyles[i]->effects());
+	}
+	if (d == -30000)
+		effects_->setStyle(0);
+	else
+		effects_->setStyle(d);
+
+// 	TODO these things still missing:
+// 		effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
+// 		effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
+// 		effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
+// 		effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
+// 		effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
+// 		effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
+// 		effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
+}
+
+void SMCStyleWidget::showColors(const QList<CharStyle*> &cstyles)
+{
+	strokeShade_->setEnabled(true);
+	strokeColor_->setEnabled(true);
+
+	double d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->fillShade() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->fillShade();
+	}
+	if (d == -30000)
+		fillShade_->setText( tr("Shade"));
+	else
+		fillShade_->setValue(qRound(d));
+
+	d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->strokeShade() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->strokeShade();
+	}
+	if (d == -30000)
+	{
+		strokeShade_->setValue(21);
+		strokeShade_->setText( tr("Shade"));
+	}
+	else
+		strokeShade_->setValue(qRound(d));
+
+	d = -30000;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (d != -30000 && cstyles[i]->backShade() != d)
+		{
+			d = -30000;
+			break;
+		}
+		d = cstyles[i]->backShade();
+	}
+	if (d == -30000)
+	{
+		backShade_->setValue(21);
+		backShade_->setText( tr("Shade"));
+	}
+	else
+		backShade_->setValue(qRound(d));
+
+	QString s;
+	QString emptyString;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (!s.isNull() && s != cstyles[i]->fillColor())
+		{
+			s = emptyString;
+			break;
+		}
+		s = cstyles[i]->fillColor();
+	}
+	if (s.isEmpty())
+	{
+		if (fillColor_->itemText(fillColor_->count() - 1) != "")
+			fillColor_->addItem("");
+		fillColor_->setCurrentIndex(fillColor_->count() - 1);
+	}
+	else
+		fillColor_->setCurrentText(s);
+
+	s = emptyString;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (!s.isNull() && s != cstyles[i]->strokeColor())
+		{
+			s = emptyString;
+			break;
+		}
+		s = cstyles[i]->strokeColor();
+	}
+	if (s.isEmpty())
+	{
+		if (strokeColor_->itemText(strokeColor_->count() - 1) != "")
+			strokeColor_->addItem("");
+		strokeColor_->setCurrentIndex(strokeColor_->count() - 1);
+	}
+	else
+		strokeColor_->setCurrentText(s);
+
+	s = emptyString;
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (!s.isNull() && s != cstyles[i]->backColor())
+		{
+			s = emptyString;
+			break;
+		}
+		s = cstyles[i]->backColor();
+	}
+	if (s.isEmpty())
+	{
+		if (backColor_->itemText(backColor_->count() - 1) != "")
+			backColor_->addItem("");
+		backColor_->setCurrentIndex(backColor_->count() - 1);
+	}
+	else
+		backColor_->setCurrentText(s);
+}
+
+void SMCStyleWidget::showLanguage(const QList<CharStyle*> &cstyles, const QString &defLang)
+{
+	QString emptyString;
+	QString s(cstyles[0]->language());
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (s != cstyles[i]->language())
+		{
+			s = emptyString;
+			break;
+		}
+		s = cstyles[i]->language();
+	}
+	if (s.isEmpty())
+	{
+		if (language_->itemText(language_->count() - 1) != "")
+			language_->addItem("");
+		language_->setCurrentIndex(language_->count() - 1);
+	}
+	else
+		setCurrentComboItem(language_, LanguageManager::instance()->getLangFromAbbrev(s));
+}
+
+void SMCStyleWidget::showSmallestWord(const QList<CharStyle *> &cstyles)
+{
+	int tmp = 0;
+	int s(cstyles[0]->hyphenWordMin());
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (s != cstyles[i]->hyphenWordMin())
+		{
+			s = tmp;
+			break;
+		}
+		s = cstyles[i]->hyphenWordMin();
+	}
+	smallestWordSpinBox->setValue(s);
+}
+
+void SMCStyleWidget::showHyphenChar(const QList<CharStyle *> &cstyles)
+{
+	uint empty = 0;
+	uint ch(cstyles[0]->hyphenChar());
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (ch != cstyles[i]->hyphenChar())
+		{
+			ch = empty;
+			break;
+		}
+		ch = cstyles[i]->hyphenChar();
+	}
+
+	QString hyphenText;
+	if (ch)
+		hyphenText = QString::fromUcs4(&ch, 1);
+	hyphenCharLineEdit->setValue(hyphenText);
+}
+
+void SMCStyleWidget::showParent(const QList<CharStyle*> &cstyles)
+{
+	parentCombo->setEnabled(false);
+}
+
+void SMCStyleWidget::showFontFeatures(const QList<CharStyle *> &cstyles)
+{
+	QString tmp;
+	QStringList tmp2;
+	QString fontfeatures(cstyles[0]->fontFeatures());
+	QStringList featuresList(cstyles[0]->font().fontFeatures());
+	for (int i = 0; i < cstyles.count(); ++i)
+	{
+		if (fontfeatures != cstyles[i]->fontFeatures())
+		{
+			fontfeatures = tmp;
+			featuresList = tmp2;
+			break;
+		}
+		fontfeatures = cstyles[i]->fontFeatures();
+		featuresList = cstyles[i]->font().fontFeatures();
+	}
+	fontfeaturesSetting->setFontFeatures(fontfeatures, featuresList);
+}
+
+void SMCStyleWidget::clearAll()
+{
+	
+}
+
+void SMCStyleWidget::slotColorChange()
+{
+	int s = effects_->getStyle();
+	bool enabled= (s & 4) || (s & 256);
+	StrokeIcon->setEnabled(enabled);
+	strokeShade_->setEnabled(enabled);
+	strokeColor_->setEnabled(enabled);
+}
+
+
+SMCStyleWidget::~SMCStyleWidget()
+{
+	
+}




More information about the scribus-commit mailing list