Subversion Repositories Scribus

Rev

Rev 12787 | Rev 12929 | Go to most recent revision | 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();
10585 fschmid 221
        parentCombo->addItem("");
10355 subik 222
        for (int i = 0; i < cstyles.count(); ++i)
223
        {
224
                if (cstyles[i].name() != cstyle->name())
10585 fschmid 225
                        parentCombo->addItem(cstyles[i].name());
10355 subik 226
        }
227
 
228
        if (hasParent)
229
        {
230
                int index = 0;
231
                for (int i = 0; i < parentCombo->count(); ++i)
232
                {
10585 fschmid 233
                        if (parentCombo->itemText(i) == cstyle->parentStyle()->name())
10355 subik 234
                        {
235
                                index = i;
236
                                break;
237
                        }
238
                }
10585 fschmid 239
                parentCombo->setCurrentIndex(index);
10355 subik 240
        }
241
        else
10585 fschmid 242
                parentCombo->setCurrentIndex(0);
10355 subik 243
 
244
        QString clang = cstyle->language().isNull() || cstyle->language().isEmpty() ?
245
                                              defLang : cstyle->language();
246
        QString plang(QString::null);
247
        if (hasParent)
248
                plang = parent->language().isNull() || parent->language().isEmpty() ?
249
                                              defLang : parent->language();
250
 
251
        int ci = -1, pi = -1, di = -1;
12787 pierre 252
//      LanguageManager langmgr;
253
//      langmgr.init(true);
12283 cbradney 254
        QString tl;
10355 subik 255
        for (int i = 0; i < language_->count(); ++i)
256
        {
10585 fschmid 257
                if (language_->itemText(i) == langMap_[clang])
10355 subik 258
                        ci = i;
259
 
10585 fschmid 260
                if (hasParent && language_->itemText(i) == langMap_[plang])
10355 subik 261
                        pi = i;
12787 pierre 262
                tl=LanguageManager::instance()->getTransLangFromLang(defLang);
12283 cbradney 263
//              qDebug() << i << language_->itemText(i) << defLang << langMap_[defLang] << tl;
264
                if (language_->itemText(i) == defLang || language_->itemText(i) == langMap_[defLang] || language_->itemText(i) == tl)
265
//              {
10355 subik 266
                        di = i;
12283 cbradney 267
//                      qDebug() << "match on:" << di;
268
//              }
10355 subik 269
        }
270
 
271
//      qDebug(QString("SMCStyleWidget::show(): deflan='%1'->'%2'").arg(defLang).arg(langMap_[defLang]));
272
        Q_ASSERT(di != -1);
273
 
274
        if (hasParent)
275
        {
276
                if (ci == -1)
277
                        language_->setCurrentItem(di, cstyle->isInhLanguage());
278
                else
279
                        language_->setCurrentItem(ci, cstyle->isInhLanguage());
280
 
281
                language_->setParentItem(pi);
282
        }
283
        else
284
        {
285
                if (ci == -1)
10585 fschmid 286
                        language_->setCurrentIndex(di);
10355 subik 287
                else
10585 fschmid 288
                        language_->setCurrentIndex(ci);
10355 subik 289
        }
290
 
291
        connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
292
}
293
 
294
void SMCStyleWidget::show(QList<CharStyle*> &cstyles, QList<CharStyle> &cstylesAll, const QString &defLang, int unitIndex)
295
{
296
//      int decimals = unitGetDecimalsFromIndex(unitIndex);
297
//      QString suffix = unitGetSuffixFromIndex(unitIndex);
298
 
299
        if (cstyles.count() == 1)
300
                show(cstyles[0], cstylesAll, defLang, unitIndex);
301
        else if (cstyles.count() > 1)
302
        {
303
                showSizeAndPosition(cstyles);
304
                showEffects(cstyles);
305
                showColors(cstyles);
306
                showLanguage(cstyles, defLang);
307
                showParent(cstyles);
308
        }
309
}
310
 
311
void SMCStyleWidget::showSizeAndPosition(const QList<CharStyle*> &cstyles)
312
{
313
        double d = -30000;
314
        for (int i = 0; i < cstyles.count(); ++i)
315
        {
316
                if (d != -30000 && cstyles[i]->fontSize() != d)
317
                {
318
                        d = -30000;
319
                        break;
320
                }
321
                else
322
                        d = cstyles[i]->fontSize();
323
        }
324
        if (d == -30000)
325
                fontSize_->clear();
326
        else
327
                fontSize_->setValue(d / 10.0);
328
 
329
        d = -30000;
330
        for (int i = 0; i < cstyles.count(); ++i)
331
        {
332
                if (d != -30000 && cstyles[i]->scaleH() != d)
333
                {
334
                        d = -30000;
335
                        break;
336
                }
337
                else
338
                        d = cstyles[i]->scaleH();
339
        }
340
        if (d == -30000)
341
                fontHScale_->clear();
342
        else
343
                fontHScale_->setValue(d / 10.0);
344
 
345
        d = -30000;
346
        for (int i = 0; i < cstyles.count(); ++i)
347
        {
348
                if (d != -30000 && cstyles[i]->scaleV() != d)
349
                {
350
                        d = -30000;
351
                        break;
352
                }
353
                else
354
                        d = cstyles[i]->scaleV();
355
        }
356
        if (d == -30000)
357
                fontVScale_->clear();
358
        else
359
                fontVScale_->setValue(d / 10.0);
360
 
361
        d = -30000;
362
        for (int i = 0; i < cstyles.count(); ++i)
363
        {
364
                if (d != -30000 && cstyles[i]->baselineOffset() != d)
365
                {
366
                        d = -30000;
367
                        break;
368
                }
369
                else
370
                        d = cstyles[i]->baselineOffset();
371
        }
372
        if (d == -30000)
373
                baselineOffset_->clear();
374
        else
375
                baselineOffset_->setValue(d / 10.0);
376
 
377
        d = -30000;
378
        for (int i = 0; i < cstyles.count(); ++i)
379
        {
380
                if (d != -30000 && cstyles[i]->tracking() != d)
381
                {
382
                        d = -30000;
383
                        break;
384
                }
385
                else
386
                        d = cstyles[i]->tracking();
387
        }
388
        if (d == -30000)
389
                tracking_->clear();
390
        else
391
                tracking_->setValue(d / 10.0);
392
}
393
 
394
void SMCStyleWidget::showEffects(const QList<CharStyle*> &cstyles)
395
{
396
        int d = -30000;
397
        for (int i = 0; i < cstyles.count(); ++i)
398
        {
399
                if (d != -30000 && static_cast<int>(cstyles[i]->effects()) != d)
400
                {
401
                        d = -30000;
402
                        break;
403
                }
404
                else
405
                        d = static_cast<int>(cstyles[i]->effects());
406
        }
407
        if (d == -30000)
408
                effects_->setStyle(0);
409
        else
410
                effects_->setStyle(d);
411
 
412
//      TODO these things still missing:
413
//              effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
414
//              effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
415
//              effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
416
//              effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
417
//              effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
418
//              effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
419
//              effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
420
}
421
 
422
void SMCStyleWidget::showColors(const QList<CharStyle*> &cstyles)
423
{
424
        strokeShade_->setEnabled(true);
425
        strokeColor_->setEnabled(true);
426
 
427
        double d = -30000;
428
        for (int i = 0; i < cstyles.count(); ++i)
429
        {
430
                if (d != -30000 && cstyles[i]->fillShade() != d)
431
                {
432
                        d = -30000;
433
                        break;
434
                }
435
                else
436
                        d = cstyles[i]->fillShade();
437
        }
438
        if (d == -30000)
439
                fillShade_->setText( tr("Shade"));
440
        else
441
                fillShade_->setValue(qRound(d));
442
 
443
        d = -30000;
444
        for (int i = 0; i < cstyles.count(); ++i)
445
        {
446
                if (d != -30000 && cstyles[i]->strokeShade() != d)
447
                {
448
                        d = -30000;
449
                        break;
450
                }
451
                else
452
                        d = cstyles[i]->strokeShade();
453
        }
454
        if (d == -30000)
455
        {
456
                strokeShade_->setValue(21);
457
                strokeShade_->setText( tr("Shade"));
458
        }
459
        else
460
                strokeShade_->setValue(qRound(d));
461
 
462
        QString s;
463
        QString emptyString;
464
        for (int i = 0; i < cstyles.count(); ++i)
465
        {
466
                if (!s.isNull() && s != cstyles[i]->fillColor())
467
                {
468
                        s = emptyString;
469
                        break;
470
                }
471
                else
472
                        s = cstyles[i]->fillColor();
473
        }
474
        if (s.isEmpty())
475
        {
10585 fschmid 476
                if (fillColor_->itemText(fillColor_->count() - 1) != "")
477
                        fillColor_->addItem("");
478
                fillColor_->setCurrentIndex(fillColor_->count() - 1);
10355 subik 479
        }
480
        else
481
                fillColor_->setCurrentText(s);
482
 
483
        s = emptyString;
484
        for (int i = 0; i < cstyles.count(); ++i)
485
        {
486
                if (!s.isNull() && s != cstyles[i]->strokeColor())
487
                {
488
                        s = emptyString;
489
                        break;
490
                }
491
                else
492
                        s = cstyles[i]->strokeColor();
493
        }
494
        if (s.isEmpty())
495
        {
10585 fschmid 496
                if (strokeColor_->itemText(strokeColor_->count() - 1) != "")
497
                        strokeColor_->addItem("");
498
                strokeColor_->setCurrentIndex(fillColor_->count() - 1);
10355 subik 499
        }
500
        else
501
                strokeColor_->setCurrentText(s);
502
}
503
 
504
void SMCStyleWidget::showLanguage(const QList<CharStyle*> &cstyles, const QString &defLang)
505
{
506
        QString emptyString;
507
        QString s(cstyles[0]->language());
508
        for (int i = 0; i < cstyles.count(); ++i)
509
        {
510
                if (s != cstyles[i]->language())
511
                {
512
                        s = emptyString;
513
                        break;
514
                }
515
                else
516
                        s = cstyles[i]->language();
517
        }
518
 
519
        if (s.isEmpty())
520
        {
10585 fschmid 521
                if (language_->itemText(language_->count() - 1) != "")
522
                        language_->addItem("");
523
                language_->setCurrentIndex(language_->count() - 1);
10355 subik 524
        }
525
        else
526
        {
527
                Q_ASSERT(langMap_.contains(s));
10648 fschmid 528
                setCurrentComboItem(language_, langMap_[s]);
10355 subik 529
        }
530
}
531
 
532
void SMCStyleWidget::showParent(const QList<CharStyle*> &cstyles)
533
{
534
        parentCombo->setEnabled(false);
535
}
536
 
537
void SMCStyleWidget::clearAll()
538
{
539
 
540
}
541
 
542
void SMCStyleWidget::slotColorChange()
543
{
544
        int s = effects_->getStyle();
545
        bool enabled;
546
        if ((s & 4) || (s & 256))
547
                enabled = true;
548
        else
549
                enabled = false;
550
        StrokeIcon->setEnabled(enabled);
551
        strokeShade_->setEnabled(enabled);
552
        strokeColor_->setEnabled(enabled);
553
}
554
 
555
 
556
SMCStyleWidget::~SMCStyleWidget()
557
{
558
 
559
}