Subversion Repositories Scribus

Rev

Rev 12916 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
10355 subik 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
*/
10859 cbradney 7
 
8
#include <QEvent>
9
 
12283 cbradney 10
#include "langmgr.h"
10355 subik 11
#include "smcstylewidget.h"
12
#include "util_icon.h"
13
#include "util.h"
14
#include "units.h"
15
 
16
 
17
SMCStyleWidget::SMCStyleWidget(QWidget *parent) : QWidget()
18
{
19
        setupUi(this);
20
 
10379 subik 21
//      fontSize_->setMinimum(1.0);
22
//      fontSize_->setMaximum(2048.0);
10355 subik 23
        fontSizeLabel_->setPixmap(loadIcon("Zeichen.xpm"));
24
 
25
        trackingLabel_->setPixmap( loadIcon("textkern.png") );
10379 subik 26
//      tracking_->setMinimum(-300.0);
27
//      tracking_->setMaximum(300.0);
28
//      tracking_->setSuffix( tr( " %" ) );
10355 subik 29
 
30
        baselineOffsetLabel_->setPixmap( loadIcon("textbase.png") );
10379 subik 31
//      baselineOffset_->setMinimum(-100.0);
32
//      baselineOffset_->setMaximum(100.0);
33
//      baselineOffset_->setSuffix( tr( " %" ) );
10355 subik 34
 
35
        hscaleLabel_->setPixmap( loadIcon("textscaleh.png") );
10379 subik 36
//      fontHScale_->setMinimum(10.0);
37
//      fontHScale_->setMaximum(400.0);
38
//      fontHScale_->setSuffix( tr( " %" ) );
10355 subik 39
 
40
        vscaleLabel_->setPixmap( loadIcon("textscalev.png") );
10379 subik 41
//      fontVScale_->setMinimum(10.0);
42
//      fontVScale_->setMaximum(400.0);
43
//      fontVScale_->setSuffix( tr( " %" ) );
10355 subik 44
 
45
        FillIcon->setPixmap(loadIcon("16/color-fill.png"));
46
        fillShadeLabel->setPixmap( loadIcon("shade.png") );
47
        StrokeIcon->setPixmap(loadIcon("16/color-stroke.png"));
48
        strokeShadeLabel->setPixmap( loadIcon("shade.png") );
49
 
50
        fillColor_->clear();
51
        strokeColor_->clear();
52
        ColorList::Iterator it;
53
        QPixmap pm = QPixmap(15, 15);
10585 fschmid 54
        fillColor_->addItem(CommonStrings::tr_NoneColor);
55
        strokeColor_->addItem(CommonStrings::tr_NoneColor);
10355 subik 56
        StrokeIcon->setEnabled(false);
57
        strokeShade_->setEnabled(false);
58
        strokeColor_->setEnabled(false);
59
 
60
        connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
61
}
62
 
10859 cbradney 63
void SMCStyleWidget::changeEvent(QEvent *e)
64
{
65
        if (e->type() == QEvent::LanguageChange)
66
        {
67
                languageChange();
68
        }
10903 cbradney 69
        else
70
                QWidget::changeEvent(e);
10859 cbradney 71
}
72
 
10355 subik 73
void SMCStyleWidget::languageChange()
74
{
75
/***********************************/
76
/*      Begin Tooltips             */
77
/***********************************/
78
// These are for the character style page
79
// as in character styles and in paragraph style's character style
80
 
12394 cbradney 81
        parentCombo->setToolTip(     tr("Parent Style"));
82
        fontFace_->setToolTip(       tr("Font Face"));
83
        fontSize_->setToolTip(       tr("Font Size"));
10397 cbradney 84
        tracking_->setToolTip(       tr("Tracking"));
12394 cbradney 85
        baselineOffset_->setToolTip( tr("Baseline Offset"));
86
        fontHScale_->setToolTip(     tr("Horizontal Scaling"));
87
        fontVScale_->setToolTip(     tr("Vertical Scaling"));
10397 cbradney 88
        language_->setToolTip(       tr("Language"));
12394 cbradney 89
        fillColor_->setToolTip(      tr("Fill Color"));
90
        fillShade_->setToolTip(      tr("Fill Shade"));
91
        strokeColor_->setToolTip(    tr("Stroke Color"));
12423 cbradney 92
        strokeShade_->setToolTip(    tr("Stroke Shade"));
10355 subik 93
 
12423 cbradney 94
        fontSizeLabel_->setToolTip(fontSize_->toolTip());
95
        trackingLabel_->setToolTip(tracking_->toolTip());
96
        baselineOffsetLabel_->setToolTip(baselineOffset_->toolTip());
97
        hscaleLabel_->setToolTip(fontHScale_->toolTip());
98
        vscaleLabel_->setToolTip(fontVScale_->toolTip());
99
        FillIcon->setToolTip(fillColor_->toolTip());
100
        fillShadeLabel->setToolTip(fillShade_->toolTip());
101
        StrokeIcon->setToolTip(strokeColor_->toolTip());
102
        strokeShadeLabel->setToolTip(strokeShade_->toolTip());
103
 
10355 subik 104
/***********************************/
105
/*        End Tooltips             */
106
/***********************************/
107
 
108
        parentLabel->setText( tr("Based On:"));
109
        languageLabel_->setText( tr("Language:"));
10379 subik 110
//      fontVScale_->setSuffix( tr(" %"));
111
//      fontHScale_->setSuffix( tr(" %"));
112
//      baselineOffset_->setSuffix( tr(" %"));
113
//      tracking_->setSuffix( tr(" %"));
10355 subik 114
        fontSize_->setSuffix(unitGetSuffixFromIndex(0));
115
}
116
 
117
void SMCStyleWidget::fillLangCombo(QMap<QString,QString> langMap)
118
{
119
        QStringList sortList;
120
        QMap<QString,QString>::Iterator it;
121
 
122
        langMap_ = langMap;
123
 
124
        language_->clear();
125
 
126
        for (it = langMap.begin(); it != langMap.end(); ++it)
10516 cbradney 127
                sortList.push_back(it.value());
10355 subik 128
 
10585 fschmid 129
        language_->addItems(sortQStringList(sortList));
10355 subik 130
 
131
        QListView *tmpView = dynamic_cast<QListView*>(language_->view()); Q_ASSERT(tmpView);
132
        int tmpWidth = tmpView->sizeHintForColumn(0);
133
        if (tmpWidth > 0)
134
                tmpView->setMinimumWidth(tmpWidth + 24);
135
}
136
 
137
void SMCStyleWidget::fillColorCombo(ColorList &colors)
138
{
139
        fillColor_->clear();
140
        strokeColor_->clear();
141
 
10585 fschmid 142
        fillColor_->addItem(CommonStrings::tr_NoneColor);
143
        strokeColor_->addItem(CommonStrings::tr_NoneColor);
10355 subik 144
        ColorList::Iterator itend=colors.end();
145
        ScribusDoc* doc = colors.document();
146
        for (ColorList::Iterator it = colors.begin(); it != itend; ++it)
147
        {
10516 cbradney 148
                fillColor_->insertSmallItem(it.value(), doc, it.key());
149
                strokeColor_->insertSmallItem(it.value(), doc, it.key());
10355 subik 150
        }
151
        fillColor_->view()->setMinimumWidth(fillColor_->view()->maximumViewportSize().width()+24);
152
        strokeColor_->view()->setMinimumWidth(strokeColor_->view()->maximumViewportSize().width()+24);
153
}
154
 
155
void SMCStyleWidget::show(CharStyle *cstyle, QList<CharStyle> &cstyles, const QString &defLang, int unitIndex)
156
{
157
        disconnect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
12916 jghali 158
        parentCombo->setEnabled(!cstyle->isDefaultStyle());
10355 subik 159
        const CharStyle *parent = dynamic_cast<const CharStyle*>(cstyle->parentStyle());
160
        bool hasParent =  cstyle->hasParent() && parent != 0 && parent->hasName() && cstyle->parent() != "";
161
        if (hasParent)
162
        {
163
                fontSize_->setValue(cstyle->fontSize() / 10.0, cstyle->isInhFontSize());
164
                fontSize_->setParentValue(parent->fontSize() / 10.0);
165
 
166
                fontHScale_->setValue(cstyle->scaleH() / 10.0, cstyle->isInhScaleH());
167
                fontHScale_->setParentValue(parent->scaleH() / 10.0);
168
 
169
                fontVScale_->setValue(cstyle->scaleV() / 10.0, cstyle->isInhScaleV());
170
                fontVScale_->setParentValue(parent->scaleV() / 10.0);
171
 
172
                baselineOffset_->setValue(cstyle->baselineOffset() / 10.0, cstyle->isInhBaselineOffset());
173
                baselineOffset_->setParentValue(parent->baselineOffset() / 10.0);
174
 
175
                tracking_->setValue(cstyle->tracking() / 10.0, cstyle->isInhTracking());
176
                tracking_->setParentValue(parent->tracking() / 10.0);
177
 
178
                effects_->setStyle(static_cast<int>(cstyle->effects()), cstyle->isInhFeatures());
179
                effects_->setParentItem(static_cast<int>(parent->effects())); // FIXME
180
 
181
                fillShade_->setValue(qRound(cstyle->fillShade()), cstyle->isInhFillShade());
182
                fillShade_->setParentValue(qRound(parent->fillShade()));
183
 
184
                strokeShade_->setValue(qRound(cstyle->strokeShade()), cstyle->isInhStrokeShade());
185
                strokeShade_->setParentValue(qRound(parent->strokeShade()));
186
 
187
                fillColor_->setCurrentText(cstyle->fillColor(), cstyle->isInhFillColor());
188
                fillColor_->setParentText(parent->fillColor());
189
 
190
                strokeColor_->setCurrentText(cstyle->strokeColor(), cstyle->isInhStrokeColor());
191
                strokeColor_->setParentText(parent->strokeColor());
192
 
193
                fontFace_->setCurrentFont(cstyle->font().scName(), cstyle->isInhFont());
194
                fontFace_->setParentFont(parent->font().scName());
195
        }
196
        else
197
        {
198
                fontSize_->setValue(cstyle->fontSize() / 10.0);
199
                fontHScale_->setValue(cstyle->scaleH() / 10.0);
200
                fontVScale_->setValue(cstyle->scaleV() / 10.0);
201
                baselineOffset_->setValue(cstyle->baselineOffset() / 10.0);
202
                tracking_->setValue(cstyle->tracking() / 10.0);
203
                effects_->setStyle(static_cast<int>(cstyle->effects()));
204
                fillShade_->setValue(qRound(cstyle->fillShade()));
205
                strokeShade_->setValue(qRound(cstyle->strokeShade()));
206
                fillColor_->setCurrentText(cstyle->fillColor());
207
                strokeColor_->setCurrentText(cstyle->strokeColor());
208
                fontFace_->setCurrentFont(cstyle->font().scName());
209
        }
210
 
211
        effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
212
        effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
213
        effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
214
        effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
215
        effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
216
        effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
217
        effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
218
        slotColorChange();
219
 
220
        parentCombo->clear();
12929 jghali 221
        parentCombo->addItem( cstyle->isDefaultStyle()? tr("A default style cannot be assigned a parent style") : "");
222
        if (!cstyle->isDefaultStyle())
10355 subik 223
        {
12929 jghali 224
                for (int i = 0; i < cstyles.count(); ++i)
225
                {
226
                        if (cstyles[i].name() != cstyle->name())
227
                                parentCombo->addItem(cstyles[i].name());
228
                }
10355 subik 229
        }
230
 
12929 jghali 231
        if (cstyle->isDefaultStyle() || !hasParent)
232
                parentCombo->setCurrentIndex(0);
233
        else if (hasParent)
10355 subik 234
        {
235
                int index = 0;
236
                for (int i = 0; i < parentCombo->count(); ++i)
237
                {
10585 fschmid 238
                        if (parentCombo->itemText(i) == cstyle->parentStyle()->name())
10355 subik 239
                        {
240
                                index = i;
241
                                break;
242
                        }
243
                }
10585 fschmid 244
                parentCombo->setCurrentIndex(index);
10355 subik 245
        }
246
 
247
        QString clang = cstyle->language().isNull() || cstyle->language().isEmpty() ?
248
                                              defLang : cstyle->language();
249
        QString plang(QString::null);
250
        if (hasParent)
251
                plang = parent->language().isNull() || parent->language().isEmpty() ?
252
                                              defLang : parent->language();
253
 
254
        int ci = -1, pi = -1, di = -1;
12787 pierre 255
//      LanguageManager langmgr;
256
//      langmgr.init(true);
12283 cbradney 257
        QString tl;
10355 subik 258
        for (int i = 0; i < language_->count(); ++i)
259
        {
10585 fschmid 260
                if (language_->itemText(i) == langMap_[clang])
10355 subik 261
                        ci = i;
262
 
10585 fschmid 263
                if (hasParent && language_->itemText(i) == langMap_[plang])
10355 subik 264
                        pi = i;
12787 pierre 265
                tl=LanguageManager::instance()->getTransLangFromLang(defLang);
12283 cbradney 266
//              qDebug() << i << language_->itemText(i) << defLang << langMap_[defLang] << tl;
267
                if (language_->itemText(i) == defLang || language_->itemText(i) == langMap_[defLang] || language_->itemText(i) == tl)
268
//              {
10355 subik 269
                        di = i;
12283 cbradney 270
//                      qDebug() << "match on:" << di;
271
//              }
10355 subik 272
        }
273
 
274
//      qDebug(QString("SMCStyleWidget::show(): deflan='%1'->'%2'").arg(defLang).arg(langMap_[defLang]));
275
        Q_ASSERT(di != -1);
276
 
277
        if (hasParent)
278
        {
279
                if (ci == -1)
280
                        language_->setCurrentItem(di, cstyle->isInhLanguage());
281
                else
282
                        language_->setCurrentItem(ci, cstyle->isInhLanguage());
283
 
284
                language_->setParentItem(pi);
285
        }
286
        else
287
        {
288
                if (ci == -1)
10585 fschmid 289
                        language_->setCurrentIndex(di);
10355 subik 290
                else
10585 fschmid 291
                        language_->setCurrentIndex(ci);
10355 subik 292
        }
293
 
294
        connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
295
}
296
 
297
void SMCStyleWidget::show(QList<CharStyle*> &cstyles, QList<CharStyle> &cstylesAll, const QString &defLang, int unitIndex)
298
{
299
//      int decimals = unitGetDecimalsFromIndex(unitIndex);
300
//      QString suffix = unitGetSuffixFromIndex(unitIndex);
301
 
302
        if (cstyles.count() == 1)
303
                show(cstyles[0], cstylesAll, defLang, unitIndex);
304
        else if (cstyles.count() > 1)
305
        {
306
                showSizeAndPosition(cstyles);
307
                showEffects(cstyles);
308
                showColors(cstyles);
309
                showLanguage(cstyles, defLang);
310
                showParent(cstyles);
311
        }
312
}
313
 
314
void SMCStyleWidget::showSizeAndPosition(const QList<CharStyle*> &cstyles)
315
{
316
        double d = -30000;
317
        for (int i = 0; i < cstyles.count(); ++i)
318
        {
319
                if (d != -30000 && cstyles[i]->fontSize() != d)
320
                {
321
                        d = -30000;
322
                        break;
323
                }
324
                else
325
                        d = cstyles[i]->fontSize();
326
        }
327
        if (d == -30000)
328
                fontSize_->clear();
329
        else
330
                fontSize_->setValue(d / 10.0);
331
 
332
        d = -30000;
333
        for (int i = 0; i < cstyles.count(); ++i)
334
        {
335
                if (d != -30000 && cstyles[i]->scaleH() != d)
336
                {
337
                        d = -30000;
338
                        break;
339
                }
340
                else
341
                        d = cstyles[i]->scaleH();
342
        }
343
        if (d == -30000)
344
                fontHScale_->clear();
345
        else
346
                fontHScale_->setValue(d / 10.0);
347
 
348
        d = -30000;
349
        for (int i = 0; i < cstyles.count(); ++i)
350
        {
351
                if (d != -30000 && cstyles[i]->scaleV() != d)
352
                {
353
                        d = -30000;
354
                        break;
355
                }
356
                else
357
                        d = cstyles[i]->scaleV();
358
        }
359
        if (d == -30000)
360
                fontVScale_->clear();
361
        else
362
                fontVScale_->setValue(d / 10.0);
363
 
364
        d = -30000;
365
        for (int i = 0; i < cstyles.count(); ++i)
366
        {
367
                if (d != -30000 && cstyles[i]->baselineOffset() != d)
368
                {
369
                        d = -30000;
370
                        break;
371
                }
372
                else
373
                        d = cstyles[i]->baselineOffset();
374
        }
375
        if (d == -30000)
376
                baselineOffset_->clear();
377
        else
378
                baselineOffset_->setValue(d / 10.0);
379
 
380
        d = -30000;
381
        for (int i = 0; i < cstyles.count(); ++i)
382
        {
383
                if (d != -30000 && cstyles[i]->tracking() != d)
384
                {
385
                        d = -30000;
386
                        break;
387
                }
388
                else
389
                        d = cstyles[i]->tracking();
390
        }
391
        if (d == -30000)
392
                tracking_->clear();
393
        else
394
                tracking_->setValue(d / 10.0);
395
}
396
 
397
void SMCStyleWidget::showEffects(const QList<CharStyle*> &cstyles)
398
{
399
        int d = -30000;
400
        for (int i = 0; i < cstyles.count(); ++i)
401
        {
402
                if (d != -30000 && static_cast<int>(cstyles[i]->effects()) != d)
403
                {
404
                        d = -30000;
405
                        break;
406
                }
407
                else
408
                        d = static_cast<int>(cstyles[i]->effects());
409
        }
410
        if (d == -30000)
411
                effects_->setStyle(0);
412
        else
413
                effects_->setStyle(d);
414
 
415
//      TODO these things still missing:
416
//              effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
417
//              effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
418
//              effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
419
//              effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
420
//              effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
421
//              effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
422
//              effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
423
}
424
 
425
void SMCStyleWidget::showColors(const QList<CharStyle*> &cstyles)
426
{
427
        strokeShade_->setEnabled(true);
428
        strokeColor_->setEnabled(true);
429
 
430
        double d = -30000;
431
        for (int i = 0; i < cstyles.count(); ++i)
432
        {
433
                if (d != -30000 && cstyles[i]->fillShade() != d)
434
                {
435
                        d = -30000;
436
                        break;
437
                }
438
                else
439
                        d = cstyles[i]->fillShade();
440
        }
441
        if (d == -30000)
442
                fillShade_->setText( tr("Shade"));
443
        else
444
                fillShade_->setValue(qRound(d));
445
 
446
        d = -30000;
447
        for (int i = 0; i < cstyles.count(); ++i)
448
        {
449
                if (d != -30000 && cstyles[i]->strokeShade() != d)
450
                {
451
                        d = -30000;
452
                        break;
453
                }
454
                else
455
                        d = cstyles[i]->strokeShade();
456
        }
457
        if (d == -30000)
458
        {
459
                strokeShade_->setValue(21);
460
                strokeShade_->setText( tr("Shade"));
461
        }
462
        else
463
                strokeShade_->setValue(qRound(d));
464
 
465
        QString s;
466
        QString emptyString;
467
        for (int i = 0; i < cstyles.count(); ++i)
468
        {
469
                if (!s.isNull() && s != cstyles[i]->fillColor())
470
                {
471
                        s = emptyString;
472
                        break;
473
                }
474
                else
475
                        s = cstyles[i]->fillColor();
476
        }
477
        if (s.isEmpty())
478
        {
10585 fschmid 479
                if (fillColor_->itemText(fillColor_->count() - 1) != "")
480
                        fillColor_->addItem("");
481
                fillColor_->setCurrentIndex(fillColor_->count() - 1);
10355 subik 482
        }
483
        else
484
                fillColor_->setCurrentText(s);
485
 
486
        s = emptyString;
487
        for (int i = 0; i < cstyles.count(); ++i)
488
        {
489
                if (!s.isNull() && s != cstyles[i]->strokeColor())
490
                {
491
                        s = emptyString;
492
                        break;
493
                }
494
                else
495
                        s = cstyles[i]->strokeColor();
496
        }
497
        if (s.isEmpty())
498
        {
10585 fschmid 499
                if (strokeColor_->itemText(strokeColor_->count() - 1) != "")
500
                        strokeColor_->addItem("");
501
                strokeColor_->setCurrentIndex(fillColor_->count() - 1);
10355 subik 502
        }
503
        else
504
                strokeColor_->setCurrentText(s);
505
}
506
 
507
void SMCStyleWidget::showLanguage(const QList<CharStyle*> &cstyles, const QString &defLang)
508
{
509
        QString emptyString;
510
        QString s(cstyles[0]->language());
511
        for (int i = 0; i < cstyles.count(); ++i)
512
        {
513
                if (s != cstyles[i]->language())
514
                {
515
                        s = emptyString;
516
                        break;
517
                }
518
                else
519
                        s = cstyles[i]->language();
520
        }
521
 
522
        if (s.isEmpty())
523
        {
10585 fschmid 524
                if (language_->itemText(language_->count() - 1) != "")
525
                        language_->addItem("");
526
                language_->setCurrentIndex(language_->count() - 1);
10355 subik 527
        }
528
        else
529
        {
530
                Q_ASSERT(langMap_.contains(s));
10648 fschmid 531
                setCurrentComboItem(language_, langMap_[s]);
10355 subik 532
        }
533
}
534
 
535
void SMCStyleWidget::showParent(const QList<CharStyle*> &cstyles)
536
{
537
        parentCombo->setEnabled(false);
538
}
539
 
540
void SMCStyleWidget::clearAll()
541
{
542
 
543
}
544
 
545
void SMCStyleWidget::slotColorChange()
546
{
547
        int s = effects_->getStyle();
548
        bool enabled;
549
        if ((s & 4) || (s & 256))
550
                enabled = true;
551
        else
552
                enabled = false;
553
        StrokeIcon->setEnabled(enabled);
554
        strokeShade_->setEnabled(enabled);
555
        strokeColor_->setEnabled(enabled);
556
}
557
 
558
 
559
SMCStyleWidget::~SMCStyleWidget()
560
{
561
 
562
}