Subversion Repositories Scribus

Rev

Rev 23204 | Rev 23474 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
23204 jghali 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
 
8
#include <QEvent>
9
 
10
#include "iconmanager.h"
11
#include "langmgr.h"
12
#include "prefsmanager.h"
13
#include "scribus.h"
14
#include "smcstylewidget.h"
15
#include "util.h"
16
#include "units.h"
17
 
18
 
19
SMCStyleWidget::SMCStyleWidget(QWidget *parent) :
20
        m_Doc(nullptr)
21
{
22
        setupUi(this);
23
 
24
        IconManager& im = IconManager::instance();
25
        fontSizeLabel_->setPixmap(im.loadPixmap("zeichen.png"));
26
        trackingLabel_->setPixmap(im.loadPixmap("textkern.png"));
27
        widthSpaceLabel->setPixmap(im.loadPixmap("spacewidth.png"));
28
        baselineOffsetLabel_->setPixmap(im.loadPixmap("textbase.png"));
29
        hscaleLabel_->setPixmap(im.loadPixmap("textscaleh.png"));
30
        vscaleLabel_->setPixmap(im.loadPixmap("textscalev.png"));
31
        FillIcon->setPixmap(im.loadPixmap("16/color-fill.png"));
32
        fillShadeLabel->setPixmap(im.loadPixmap("shade.png"));
33
        StrokeIcon->setPixmap(im.loadPixmap("16/color-stroke.png"));
34
        strokeShadeLabel->setPixmap(im.loadPixmap("shade.png"));
35
        backIcon->setPixmap(im.loadPixmap("16/color-fill.png"));
36
        backShadeLabel->setPixmap(im.loadPixmap("shade.png"));
37
 
38
        fillColor_->setPixmapType(ColorCombo::fancyPixmaps);
39
        fillColor_->clear();
40
        fillColor_->addItem(CommonStrings::tr_NoneColor);
41
 
42
        strokeColor_->setPixmapType(ColorCombo::fancyPixmaps);
43
        strokeColor_->clear();
44
        strokeColor_->addItem(CommonStrings::tr_NoneColor);
45
 
46
        backColor_->setPixmapType(ColorCombo::fancyPixmaps);
47
        backColor_->clear();
48
        backColor_->addItem(CommonStrings::tr_NoneColor);
49
 
50
        StrokeIcon->setEnabled(false);
51
        strokeShade_->setEnabled(false);
52
        strokeColor_->setEnabled(false);
53
        fontfeaturesSetting->resetFontFeatures();
54
 
23205 jghali 55
        hyphenCharLineEdit->setMaxLength(1);
56
 
23204 jghali 57
        connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
58
        connect(fontFace_, SIGNAL(fontSelected(QString)), this, SLOT(slotEnableFontFeatures(QString)));
59
}
60
 
61
void SMCStyleWidget::changeEvent(QEvent *e)
62
{
63
        if (e->type() == QEvent::LanguageChange)
64
        {
65
                languageChange();
66
        }
67
        else
68
                QWidget::changeEvent(e);
69
}
70
 
71
void SMCStyleWidget::languageChange()
72
{
73
        QStringList languageList;
74
        LanguageManager::instance()->fillInstalledStringList(&languageList);
75
        fillLangComboFromList(languageList);
76
 
77
        if (fillColor_->count() > 0)
78
        {
79
                bool sigBlocked = fillColor_->blockSignals(true);
80
                fillColor_->setItemText(0, CommonStrings::tr_NoneColor);
81
                fillColor_->blockSignals(sigBlocked);
82
        }
83
 
84
        if (strokeColor_->count() > 0)
85
        {
86
                bool sigBlocked = strokeColor_->blockSignals(true);
87
                strokeColor_->setItemText(0, CommonStrings::tr_NoneColor);
88
                strokeColor_->blockSignals(sigBlocked);
89
        }
90
 
91
        if (backColor_->count() > 0)
92
        {
93
                bool sigBlocked = backColor_->blockSignals(true);
94
                backColor_->setItemText(0, CommonStrings::tr_NoneColor);
95
                backColor_->blockSignals(sigBlocked);
96
        }
97
 
98
        retranslateUi(this);
99
 
100
        fontSizeLabel_->setToolTip(fontSize_->toolTip());
101
        trackingLabel_->setToolTip(tracking_->toolTip());
102
        widthSpaceLabel->setToolTip(widthSpaceSpin->toolTip());
103
        baselineOffsetLabel_->setToolTip(baselineOffset_->toolTip());
104
        hscaleLabel_->setToolTip(fontHScale_->toolTip());
105
        vscaleLabel_->setToolTip(fontVScale_->toolTip());
106
        FillIcon->setToolTip(fillColor_->toolTip());
107
        fillShadeLabel->setToolTip(fillShade_->toolTip());
108
        StrokeIcon->setToolTip(strokeColor_->toolTip());
109
        strokeShadeLabel->setToolTip(strokeShade_->toolTip());
110
        backIcon->setToolTip(backColor_->toolTip());
111
        backShadeLabel->setToolTip(backShade_->toolTip());
112
 
113
//      fontVScale_->setSuffix( tr(" %"));
114
//      fontHScale_->setSuffix( tr(" %"));
115
//      baselineOffset_->setSuffix( tr(" %"));
116
//      tracking_->setSuffix( tr(" %"));
117
        fontSize_->setSuffix(unitGetSuffixFromIndex(0));
118
}
119
/*
120
void SMCStyleWidget::fillLangCombo(QMap<QString,QString> langMap)
121
{
122
        QStringList sortList;
123
        QMap<QString,QString>::Iterator it;
124
 
125
        m_langMap = langMap;
126
 
127
        language_->clear();
128
 
129
        for (it = langMap.begin(); it != langMap.end(); ++it)
130
                sortList.push_back(it.value());
131
 
132
        language_->addItems(sortQStringList(sortList));
133
 
134
        QListView *tmpView = dynamic_cast<QListView*>(language_->view()); Q_ASSERT(tmpView);
135
        int tmpWidth = tmpView->sizeHintForColumn(0);
136
        if (tmpWidth > 0)
137
                tmpView->setMinimumWidth(tmpWidth + 24);
138
}
139
*/
140
void SMCStyleWidget::fillLangComboFromList(const QStringList& langList)
141
{
142
        language_->clear();
143
        language_->addItems(langList);
144
 
145
        QListView *tmpView = dynamic_cast<QListView*>(language_->view());
146
        Q_ASSERT(tmpView);
147
        int tmpWidth = tmpView->sizeHintForColumn(0);
148
        if (tmpWidth > 0)
149
                tmpView->setMinimumWidth(tmpWidth + 24);
150
}
151
 
152
void SMCStyleWidget::fillColorCombo(ColorList &colors)
153
{
154
        fillColor_->clear();
155
        strokeColor_->clear();
156
        backColor_->clear();
157
 
158
        fillColor_->setColors(colors, true);
159
        strokeColor_->setColors(colors, true);
160
        backColor_->setColors(colors, true);
161
        fillColor_->view()->setMinimumWidth(fillColor_->view()->maximumViewportSize().width()+24);
162
        strokeColor_->view()->setMinimumWidth(strokeColor_->view()->maximumViewportSize().width()+24);
163
        backColor_->view()->setMinimumWidth(backColor_->view()->maximumViewportSize().width()+24);
164
}
165
 
166
void SMCStyleWidget::handleUpdateRequest(int updateFlags)
167
{
168
        if (!m_Doc)
169
                return;
170
        if (updateFlags & reqColorsUpdate)
171
                fillColorCombo(m_Doc->PageColors);
172
}
173
 
174
void SMCStyleWidget::slotEnableFontFeatures(const QString& s)
175
{
176
        const ScFace& font = PrefsManager::instance().appPrefs.fontPrefs.AvailFonts[s];
177
        fontfeaturesSetting->enableFontFeatures(font.fontFeatures());
178
}
179
 
180
void SMCStyleWidget::setDoc(ScribusDoc *doc)
181
{
182
        if (m_Doc)
183
                disconnect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
184
 
185
        m_Doc = doc;
186
        if (!m_Doc)
187
                return;
188
 
189
        QStringList languageList;
190
        LanguageManager::instance()->fillInstalledStringList(&languageList);
191
        fillLangComboFromList(languageList);
192
        fillColorCombo(m_Doc->PageColors);
193
        fontFace_->rebuildList(m_Doc);
194
 
195
        connect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int)));
196
}
197
 
198
void SMCStyleWidget::show(CharStyle *cstyle, QList<CharStyle> &cstyles, const QString &defLang, int unitIndex)
199
{
200
        disconnect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
201
        parentCombo->setEnabled(!cstyle->isDefaultStyle());
202
        const CharStyle *parent = dynamic_cast<const CharStyle*>(cstyle->parentStyle());
203
        bool hasParent =  cstyle->hasParent() && parent != nullptr && parent->hasName() && cstyle->parent() != "";
204
        if (hasParent)
205
        {
206
                fontSize_->setValue(cstyle->fontSize() / 10.0, cstyle->isInhFontSize());
207
                fontSize_->setParentValue(parent->fontSize() / 10.0);
208
 
209
                fontHScale_->setValue(cstyle->scaleH() / 10.0, cstyle->isInhScaleH());
210
                fontHScale_->setParentValue(parent->scaleH() / 10.0);
211
 
212
                fontVScale_->setValue(cstyle->scaleV() / 10.0, cstyle->isInhScaleV());
213
                fontVScale_->setParentValue(parent->scaleV() / 10.0);
214
 
215
                baselineOffset_->setValue(cstyle->baselineOffset() / 10.0, cstyle->isInhBaselineOffset());
216
                baselineOffset_->setParentValue(parent->baselineOffset() / 10.0);
217
 
218
                tracking_->setValue(cstyle->tracking() / 10.0, cstyle->isInhTracking());
219
                tracking_->setParentValue(parent->tracking() / 10.0);
220
 
221
                widthSpaceSpin->setValue(cstyle->wordTracking() * 100.0 ,cstyle->isInhTracking());
222
                widthSpaceSpin->setParentValue(parent->wordTracking() * 100.0);
223
 
224
                effects_->setStyle(static_cast<int>(cstyle->effects()), cstyle->isInhFeatures());
225
                effects_->setParentItem(static_cast<int>(parent->effects())); // FIXME
226
 
227
                fillShade_->setValue(qRound(cstyle->fillShade()), cstyle->isInhFillShade());
228
                fillShade_->setParentValue(qRound(parent->fillShade()));
229
 
230
                strokeShade_->setValue(qRound(cstyle->strokeShade()), cstyle->isInhStrokeShade());
231
                strokeShade_->setParentValue(qRound(parent->strokeShade()));
232
 
233
                fillColor_->setCurrentText(cstyle->fillColor(), cstyle->isInhFillColor());
234
                fillColor_->setParentText(parent->fillColor());
235
 
236
                strokeColor_->setCurrentText(cstyle->strokeColor(), cstyle->isInhStrokeColor());
237
                strokeColor_->setParentText(parent->strokeColor());
238
 
239
                backColor_->setCurrentText(cstyle->backColor(), cstyle->isInhBackColor());
240
                backColor_->setParentText(parent->backColor());
241
 
242
                backShade_->setValue(qRound(cstyle->backShade()), cstyle->isInhBackShade());
243
                backShade_->setParentValue(qRound(parent->backShade()));
244
 
245
                fontFace_->setCurrentFont(cstyle->font().scName(), cstyle->isInhFont());
246
                fontFace_->setParentFont(parent->font().scName());
247
 
248
                fontfeaturesSetting->setFontFeatures(cstyle->fontFeatures(), cstyle->font().fontFeatures());
249
                fontfeaturesSetting->setParentValue(parent->fontFeatures());
250
 
251
                smallestWordSpinBox->setValue(cstyle->hyphenWordMin(), cstyle->isInhHyphenWordMin());
252
                smallestWordSpinBox->setParentValue(parent->hyphenWordMin());
253
 
254
                uint hyphenChar = cstyle->hyphenChar();
255
                QString hyphenText;
256
                if (hyphenChar)
257
                        hyphenText = QString::fromUcs4(&hyphenChar, 1);
258
                hyphenCharLineEdit->setValue(hyphenText, cstyle->isInhHyphenChar());
259
 
260
                uint parentHyphenChar = parent->hyphenChar();
261
                QString parentHyphenText;
262
                if (parentHyphenChar)
263
                        parentHyphenText = QString::fromUcs4(&parentHyphenChar, 1);
264
                hyphenCharLineEdit->setParentValue(parentHyphenText);
265
        }
266
        else
267
        {
268
                fontSize_->setValue(cstyle->fontSize() / 10.0);
269
                fontHScale_->setValue(cstyle->scaleH() / 10.0);
270
                fontVScale_->setValue(cstyle->scaleV() / 10.0);
271
                baselineOffset_->setValue(cstyle->baselineOffset() / 10.0);
272
                tracking_->setValue(cstyle->tracking() / 10.0);
273
                widthSpaceSpin->setValue(cstyle->wordTracking() * 100.0);
274
                effects_->setStyle(static_cast<int>(cstyle->effects()));
275
                fillShade_->setValue(qRound(cstyle->fillShade()));
276
                strokeShade_->setValue(qRound(cstyle->strokeShade()));
277
                fillColor_->setCurrentText(cstyle->fillColor());
278
                strokeColor_->setCurrentText(cstyle->strokeColor());
279
                backColor_->setCurrentText(cstyle->backColor());
280
                backShade_->setValue(qRound(cstyle->backShade()));
281
                fontFace_->setCurrentFont(cstyle->font().scName());
282
                fontfeaturesSetting->setFontFeatures(cstyle->fontFeatures(), cstyle->font().fontFeatures());
283
                smallestWordSpinBox->setValue(cstyle->hyphenWordMin());
284
 
285
                uint hyphenChar = cstyle->hyphenChar();
286
                QString hyphenText;
287
                if (hyphenChar)
288
                        hyphenText = QString::fromUcs4(&hyphenChar, 1);
289
                hyphenCharLineEdit->setValue(hyphenText);
290
        }
291
 
292
        effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
293
        effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
294
        effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
295
        effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
296
        effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
297
        effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
298
        effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
299
        slotColorChange();
300
 
301
        parentCombo->clear();
302
        parentCombo->addItem( cstyle->isDefaultStyle()? tr("A default style cannot be assigned a parent style") : "");
303
        if (!cstyle->isDefaultStyle())
304
        {
305
                for (int i = 0; i < cstyles.count(); ++i)
306
                {
307
                        if (cstyles[i].name() != cstyle->name())
308
                                parentCombo->addItem(cstyles[i].name());
309
                }
310
        }
311
 
312
        if (cstyle->isDefaultStyle() || !hasParent)
313
                parentCombo->setCurrentIndex(0);
314
        else if (hasParent)
315
        {
316
                int index = 0;
317
                for (int i = 0; i < parentCombo->count(); ++i)
318
                {
319
                        if (parentCombo->itemText(i) == cstyle->parentStyle()->name())
320
                        {
321
                                index = i;
322
                                break;
323
                        }
324
                }
325
                parentCombo->setCurrentIndex(index);
326
        }
327
 
328
        QString defaultLang(defLang.isEmpty() ? "en_GB" : defLang);
329
        QString clang(cstyle->language().isEmpty() ? defaultLang : cstyle->language());
330
        QString plang;
331
        if (hasParent)
332
                plang = parent->language().isEmpty() ? defaultLang : parent->language();
333
 
334
        int ci = -1, pi = -1, di = -1;
335
        QString tl = LanguageManager::instance()->getAbbrevFromLang(defaultLang, false);
336
        for (int i = 0; i < language_->count(); ++i)
337
        {
338
                QString ltAbbrev(LanguageManager::instance()->getAbbrevFromLang(language_->itemText(i), false));
339
                if (ltAbbrev == clang)
340
                        ci = i;
341
                if (hasParent && ltAbbrev == plang)
342
                        pi = i;
343
                if (ltAbbrev == defaultLang || ltAbbrev == tl)
344
                        di = i;
345
        }
346
 
347
        //qDebug() << QString("SMCStyleWidget::show(): deflan='%1'->'%2'").arg(defLang).arg(langMap_[defLang]);
348
        Q_ASSERT(di != -1);
349
 
350
        if (hasParent)
351
        {
352
                if (ci == -1)
353
                        language_->setCurrentItem(di, cstyle->isInhLanguage());
354
                else
355
                        language_->setCurrentItem(ci, cstyle->isInhLanguage());
356
 
357
                language_->setParentItem(pi);
358
        }
359
        else
360
        {
361
                if (ci == -1)
362
                        language_->setCurrentIndex(di);
363
                else
364
                        language_->setCurrentIndex(ci);
365
        }
366
 
367
        connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
368
}
369
 
370
void SMCStyleWidget::show(QList<CharStyle*> &cstyles, QList<CharStyle> &cstylesAll, const QString &defLang, int unitIndex)
371
{
372
//      int decimals = unitGetDecimalsFromIndex(unitIndex);
373
//      QString suffix = unitGetSuffixFromIndex(unitIndex);
374
 
375
        if (cstyles.count() == 1)
376
                show(cstyles[0], cstylesAll, defLang, unitIndex);
377
        else if (cstyles.count() > 1)
378
        {
379
                showSizeAndPosition(cstyles);
380
                showEffects(cstyles);
381
                showColors(cstyles);
382
                showLanguage(cstyles, defLang);
383
                showSmallestWord(cstyles);
384
                showHyphenChar(cstyles);
385
                showParent(cstyles);
386
                showFontFeatures(cstyles);
387
        }
388
}
389
 
390
void SMCStyleWidget::showSizeAndPosition(const QList<CharStyle*> &cstyles)
391
{
392
        double d = -30000;
393
        for (int i = 0; i < cstyles.count(); ++i)
394
        {
395
                if (d != -30000 && cstyles[i]->fontSize() != d)
396
                {
397
                        d = -30000;
398
                        break;
399
                }
400
                d = cstyles[i]->fontSize();
401
        }
402
        if (d == -30000)
403
                fontSize_->clear();
404
        else
405
                fontSize_->setValue(d / 10.0);
406
 
407
        d = -30000;
408
        for (int i = 0; i < cstyles.count(); ++i)
409
        {
410
                if (d != -30000 && cstyles[i]->scaleH() != d)
411
                {
412
                        d = -30000;
413
                        break;
414
                }
415
                d = cstyles[i]->scaleH();
416
        }
417
        if (d == -30000)
418
                fontHScale_->clear();
419
        else
420
                fontHScale_->setValue(d / 10.0);
421
 
422
        d = -30000;
423
        for (int i = 0; i < cstyles.count(); ++i)
424
        {
425
                if (d != -30000 && cstyles[i]->scaleV() != d)
426
                {
427
                        d = -30000;
428
                        break;
429
                }
430
                d = cstyles[i]->scaleV();
431
        }
432
        if (d == -30000)
433
                fontVScale_->clear();
434
        else
435
                fontVScale_->setValue(d / 10.0);
436
 
437
        d = -30000;
438
        for (int i = 0; i < cstyles.count(); ++i)
439
        {
440
                if (d != -30000 && cstyles[i]->baselineOffset() != d)
441
                {
442
                        d = -30000;
443
                        break;
444
                }
445
                d = cstyles[i]->baselineOffset();
446
        }
447
        if (d == -30000)
448
                baselineOffset_->clear();
449
        else
450
                baselineOffset_->setValue(d / 10.0);
451
 
452
        d = -30000;
453
        for (int i = 0; i < cstyles.count(); ++i)
454
        {
455
                if (d != -30000 && cstyles[i]->tracking() != d)
456
                {
457
                        d = -30000;
458
                        break;
459
                }
460
                d = cstyles[i]->tracking();
461
        }
462
        if (d == -30000)
463
                tracking_->clear();
464
        else
465
                tracking_->setValue(d / 10.0);
466
 
467
        d = -30000;
468
        for (int i = 0; i < cstyles.count(); ++i)
469
        {
470
                if (d != -30000 && cstyles[i]->wordTracking() != d)
471
                {
472
                        d = -30000;
473
                        break;
474
                }
475
                d = cstyles[i]->wordTracking();
476
        }
477
        if (d == -30000)
478
                widthSpaceSpin->clear();
479
        else
480
                widthSpaceSpin->setValue(d * 100.0);
481
}
482
 
483
void SMCStyleWidget::showEffects(const QList<CharStyle*> &cstyles)
484
{
485
        int d = -30000;
486
        for (int i = 0; i < cstyles.count(); ++i)
487
        {
488
                if (d != -30000 && static_cast<int>(cstyles[i]->effects()) != d)
489
                {
490
                        d = -30000;
491
                        break;
492
                }
493
                d = static_cast<int>(cstyles[i]->effects());
494
        }
495
        if (d == -30000)
496
                effects_->setStyle(0);
497
        else
498
                effects_->setStyle(d);
499
 
500
//      TODO these things still missing:
501
//              effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
502
//              effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
503
//              effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
504
//              effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
505
//              effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
506
//              effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
507
//              effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
508
}
509
 
510
void SMCStyleWidget::showColors(const QList<CharStyle*> &cstyles)
511
{
512
        strokeShade_->setEnabled(true);
513
        strokeColor_->setEnabled(true);
514
 
515
        double d = -30000;
516
        for (int i = 0; i < cstyles.count(); ++i)
517
        {
518
                if (d != -30000 && cstyles[i]->fillShade() != d)
519
                {
520
                        d = -30000;
521
                        break;
522
                }
523
                d = cstyles[i]->fillShade();
524
        }
525
        if (d == -30000)
526
                fillShade_->setText( tr("Shade"));
527
        else
528
                fillShade_->setValue(qRound(d));
529
 
530
        d = -30000;
531
        for (int i = 0; i < cstyles.count(); ++i)
532
        {
533
                if (d != -30000 && cstyles[i]->strokeShade() != d)
534
                {
535
                        d = -30000;
536
                        break;
537
                }
538
                d = cstyles[i]->strokeShade();
539
        }
540
        if (d == -30000)
541
        {
542
                strokeShade_->setValue(21);
543
                strokeShade_->setText( tr("Shade"));
544
        }
545
        else
546
                strokeShade_->setValue(qRound(d));
547
 
548
        d = -30000;
549
        for (int i = 0; i < cstyles.count(); ++i)
550
        {
551
                if (d != -30000 && cstyles[i]->backShade() != d)
552
                {
553
                        d = -30000;
554
                        break;
555
                }
556
                d = cstyles[i]->backShade();
557
        }
558
        if (d == -30000)
559
        {
560
                backShade_->setValue(21);
561
                backShade_->setText( tr("Shade"));
562
        }
563
        else
564
                backShade_->setValue(qRound(d));
565
 
566
        QString s;
567
        QString emptyString;
568
        for (int i = 0; i < cstyles.count(); ++i)
569
        {
570
                if (!s.isNull() && s != cstyles[i]->fillColor())
571
                {
572
                        s = emptyString;
573
                        break;
574
                }
575
                s = cstyles[i]->fillColor();
576
        }
577
        if (s.isEmpty())
578
        {
579
                if (fillColor_->itemText(fillColor_->count() - 1) != "")
580
                        fillColor_->addItem("");
581
                fillColor_->setCurrentIndex(fillColor_->count() - 1);
582
        }
583
        else
584
                fillColor_->setCurrentText(s);
585
 
586
        s = emptyString;
587
        for (int i = 0; i < cstyles.count(); ++i)
588
        {
589
                if (!s.isNull() && s != cstyles[i]->strokeColor())
590
                {
591
                        s = emptyString;
592
                        break;
593
                }
594
                s = cstyles[i]->strokeColor();
595
        }
596
        if (s.isEmpty())
597
        {
598
                if (strokeColor_->itemText(strokeColor_->count() - 1) != "")
599
                        strokeColor_->addItem("");
600
                strokeColor_->setCurrentIndex(strokeColor_->count() - 1);
601
        }
602
        else
603
                strokeColor_->setCurrentText(s);
604
 
605
        s = emptyString;
606
        for (int i = 0; i < cstyles.count(); ++i)
607
        {
608
                if (!s.isNull() && s != cstyles[i]->backColor())
609
                {
610
                        s = emptyString;
611
                        break;
612
                }
613
                s = cstyles[i]->backColor();
614
        }
615
        if (s.isEmpty())
616
        {
617
                if (backColor_->itemText(backColor_->count() - 1) != "")
618
                        backColor_->addItem("");
619
                backColor_->setCurrentIndex(backColor_->count() - 1);
620
        }
621
        else
622
                backColor_->setCurrentText(s);
623
}
624
 
625
void SMCStyleWidget::showLanguage(const QList<CharStyle*> &cstyles, const QString &defLang)
626
{
627
        QString emptyString;
628
        QString s(cstyles[0]->language());
629
        for (int i = 0; i < cstyles.count(); ++i)
630
        {
631
                if (s != cstyles[i]->language())
632
                {
633
                        s = emptyString;
634
                        break;
635
                }
636
                s = cstyles[i]->language();
637
        }
638
        if (s.isEmpty())
639
        {
640
                if (language_->itemText(language_->count() - 1) != "")
641
                        language_->addItem("");
642
                language_->setCurrentIndex(language_->count() - 1);
643
        }
644
        else
645
                setCurrentComboItem(language_, LanguageManager::instance()->getLangFromAbbrev(s));
646
}
647
 
648
void SMCStyleWidget::showSmallestWord(const QList<CharStyle *> &cstyles)
649
{
650
        int tmp = 0;
651
        int s(cstyles[0]->hyphenWordMin());
652
        for (int i = 0; i < cstyles.count(); ++i)
653
        {
654
                if (s != cstyles[i]->hyphenWordMin())
655
                {
656
                        s = tmp;
657
                        break;
658
                }
659
                s = cstyles[i]->hyphenWordMin();
660
        }
661
        smallestWordSpinBox->setValue(s);
662
}
663
 
664
void SMCStyleWidget::showHyphenChar(const QList<CharStyle *> &cstyles)
665
{
666
        uint empty = 0;
667
        uint ch(cstyles[0]->hyphenChar());
668
        for (int i = 0; i < cstyles.count(); ++i)
669
        {
670
                if (ch != cstyles[i]->hyphenChar())
671
                {
672
                        ch = empty;
673
                        break;
674
                }
675
                ch = cstyles[i]->hyphenChar();
676
        }
677
 
678
        QString hyphenText;
679
        if (ch)
680
                hyphenText = QString::fromUcs4(&ch, 1);
681
        hyphenCharLineEdit->setValue(hyphenText);
682
}
683
 
684
void SMCStyleWidget::showParent(const QList<CharStyle*> &cstyles)
685
{
686
        parentCombo->setEnabled(false);
687
}
688
 
689
void SMCStyleWidget::showFontFeatures(const QList<CharStyle *> &cstyles)
690
{
691
        QString tmp;
692
        QStringList tmp2;
693
        QString fontfeatures(cstyles[0]->fontFeatures());
694
        QStringList featuresList(cstyles[0]->font().fontFeatures());
695
        for (int i = 0; i < cstyles.count(); ++i)
696
        {
697
                if (fontfeatures != cstyles[i]->fontFeatures())
698
                {
699
                        fontfeatures = tmp;
700
                        featuresList = tmp2;
701
                        break;
702
                }
703
                fontfeatures = cstyles[i]->fontFeatures();
704
                featuresList = cstyles[i]->font().fontFeatures();
705
        }
706
        fontfeaturesSetting->setFontFeatures(fontfeatures, featuresList);
707
}
708
 
709
void SMCStyleWidget::clearAll()
710
{
711
 
712
}
713
 
714
void SMCStyleWidget::slotColorChange()
715
{
716
        int s = effects_->getStyle();
717
        bool enabled= (s & 4) || (s & 256);
718
        StrokeIcon->setEnabled(enabled);
719
        strokeShade_->setEnabled(enabled);
720
        strokeColor_->setEnabled(enabled);
721
}
722
 
723
 
724
SMCStyleWidget::~SMCStyleWidget()
725
{
726
 
727
}