Subversion Repositories Scribus

Rev

Rev 12283 | Rev 12423 | 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"));
92
        strokeShade_->setToolTip(    tr("Stroke hade"));
10355 subik 93
 
94
/***********************************/
95
/*        End Tooltips             */
96
/***********************************/
97
 
98
        parentLabel->setText( tr("Based On:"));
99
        languageLabel_->setText( tr("Language:"));
10379 subik 100
//      fontVScale_->setSuffix( tr(" %"));
101
//      fontHScale_->setSuffix( tr(" %"));
102
//      baselineOffset_->setSuffix( tr(" %"));
103
//      tracking_->setSuffix( tr(" %"));
10355 subik 104
        fontSize_->setSuffix(unitGetSuffixFromIndex(0));
105
}
106
 
107
void SMCStyleWidget::fillLangCombo(QMap<QString,QString> langMap)
108
{
109
        QStringList sortList;
110
        QMap<QString,QString>::Iterator it;
111
 
112
        langMap_ = langMap;
113
 
114
        language_->clear();
115
 
116
        for (it = langMap.begin(); it != langMap.end(); ++it)
10516 cbradney 117
                sortList.push_back(it.value());
10355 subik 118
 
10585 fschmid 119
        language_->addItems(sortQStringList(sortList));
10355 subik 120
 
121
        QListView *tmpView = dynamic_cast<QListView*>(language_->view()); Q_ASSERT(tmpView);
122
        int tmpWidth = tmpView->sizeHintForColumn(0);
123
        if (tmpWidth > 0)
124
                tmpView->setMinimumWidth(tmpWidth + 24);
125
}
126
 
127
void SMCStyleWidget::fillColorCombo(ColorList &colors)
128
{
129
        fillColor_->clear();
130
        strokeColor_->clear();
131
 
10585 fschmid 132
        fillColor_->addItem(CommonStrings::tr_NoneColor);
133
        strokeColor_->addItem(CommonStrings::tr_NoneColor);
10355 subik 134
        ColorList::Iterator itend=colors.end();
135
        ScribusDoc* doc = colors.document();
136
        for (ColorList::Iterator it = colors.begin(); it != itend; ++it)
137
        {
10516 cbradney 138
                fillColor_->insertSmallItem(it.value(), doc, it.key());
139
                strokeColor_->insertSmallItem(it.value(), doc, it.key());
10355 subik 140
        }
141
        fillColor_->view()->setMinimumWidth(fillColor_->view()->maximumViewportSize().width()+24);
142
        strokeColor_->view()->setMinimumWidth(strokeColor_->view()->maximumViewportSize().width()+24);
143
}
144
 
145
void SMCStyleWidget::show(CharStyle *cstyle, QList<CharStyle> &cstyles, const QString &defLang, int unitIndex)
146
{
147
        disconnect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
148
        parentCombo->setEnabled(true);
149
        const CharStyle *parent = dynamic_cast<const CharStyle*>(cstyle->parentStyle());
150
        bool hasParent =  cstyle->hasParent() && parent != 0 && parent->hasName() && cstyle->parent() != "";
151
        if (hasParent)
152
        {
153
                fontSize_->setValue(cstyle->fontSize() / 10.0, cstyle->isInhFontSize());
154
                fontSize_->setParentValue(parent->fontSize() / 10.0);
155
 
156
                fontHScale_->setValue(cstyle->scaleH() / 10.0, cstyle->isInhScaleH());
157
                fontHScale_->setParentValue(parent->scaleH() / 10.0);
158
 
159
                fontVScale_->setValue(cstyle->scaleV() / 10.0, cstyle->isInhScaleV());
160
                fontVScale_->setParentValue(parent->scaleV() / 10.0);
161
 
162
                baselineOffset_->setValue(cstyle->baselineOffset() / 10.0, cstyle->isInhBaselineOffset());
163
                baselineOffset_->setParentValue(parent->baselineOffset() / 10.0);
164
 
165
                tracking_->setValue(cstyle->tracking() / 10.0, cstyle->isInhTracking());
166
                tracking_->setParentValue(parent->tracking() / 10.0);
167
 
168
                effects_->setStyle(static_cast<int>(cstyle->effects()), cstyle->isInhFeatures());
169
                effects_->setParentItem(static_cast<int>(parent->effects())); // FIXME
170
 
171
                fillShade_->setValue(qRound(cstyle->fillShade()), cstyle->isInhFillShade());
172
                fillShade_->setParentValue(qRound(parent->fillShade()));
173
 
174
                strokeShade_->setValue(qRound(cstyle->strokeShade()), cstyle->isInhStrokeShade());
175
                strokeShade_->setParentValue(qRound(parent->strokeShade()));
176
 
177
                fillColor_->setCurrentText(cstyle->fillColor(), cstyle->isInhFillColor());
178
                fillColor_->setParentText(parent->fillColor());
179
 
180
                strokeColor_->setCurrentText(cstyle->strokeColor(), cstyle->isInhStrokeColor());
181
                strokeColor_->setParentText(parent->strokeColor());
182
 
183
                fontFace_->setCurrentFont(cstyle->font().scName(), cstyle->isInhFont());
184
                fontFace_->setParentFont(parent->font().scName());
185
        }
186
        else
187
        {
188
                fontSize_->setValue(cstyle->fontSize() / 10.0);
189
                fontHScale_->setValue(cstyle->scaleH() / 10.0);
190
                fontVScale_->setValue(cstyle->scaleV() / 10.0);
191
                baselineOffset_->setValue(cstyle->baselineOffset() / 10.0);
192
                tracking_->setValue(cstyle->tracking() / 10.0);
193
                effects_->setStyle(static_cast<int>(cstyle->effects()));
194
                fillShade_->setValue(qRound(cstyle->fillShade()));
195
                strokeShade_->setValue(qRound(cstyle->strokeShade()));
196
                fillColor_->setCurrentText(cstyle->fillColor());
197
                strokeColor_->setCurrentText(cstyle->strokeColor());
198
                fontFace_->setCurrentFont(cstyle->font().scName());
199
        }
200
 
201
        effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
202
        effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
203
        effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
204
        effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
205
        effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
206
        effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
207
        effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
208
        slotColorChange();
209
 
210
        parentCombo->clear();
10585 fschmid 211
        parentCombo->addItem("");
10355 subik 212
        for (int i = 0; i < cstyles.count(); ++i)
213
        {
214
                if (cstyles[i].name() != cstyle->name())
10585 fschmid 215
                        parentCombo->addItem(cstyles[i].name());
10355 subik 216
        }
217
 
218
        if (hasParent)
219
        {
220
                int index = 0;
221
                for (int i = 0; i < parentCombo->count(); ++i)
222
                {
10585 fschmid 223
                        if (parentCombo->itemText(i) == cstyle->parentStyle()->name())
10355 subik 224
                        {
225
                                index = i;
226
                                break;
227
                        }
228
                }
10585 fschmid 229
                parentCombo->setCurrentIndex(index);
10355 subik 230
        }
231
        else
10585 fschmid 232
                parentCombo->setCurrentIndex(0);
10355 subik 233
 
234
        QString clang = cstyle->language().isNull() || cstyle->language().isEmpty() ?
235
                                              defLang : cstyle->language();
236
        QString plang(QString::null);
237
        if (hasParent)
238
                plang = parent->language().isNull() || parent->language().isEmpty() ?
239
                                              defLang : parent->language();
240
 
241
        int ci = -1, pi = -1, di = -1;
12283 cbradney 242
        LanguageManager langmgr;
243
        langmgr.init(true);
244
        QString tl;
10355 subik 245
        for (int i = 0; i < language_->count(); ++i)
246
        {
10585 fschmid 247
                if (language_->itemText(i) == langMap_[clang])
10355 subik 248
                        ci = i;
249
 
10585 fschmid 250
                if (hasParent && language_->itemText(i) == langMap_[plang])
10355 subik 251
                        pi = i;
12283 cbradney 252
                tl=langmgr.getTransLangFromLang(defLang);
253
//              qDebug() << i << language_->itemText(i) << defLang << langMap_[defLang] << tl;
254
                if (language_->itemText(i) == defLang || language_->itemText(i) == langMap_[defLang] || language_->itemText(i) == tl)
255
//              {
10355 subik 256
                        di = i;
12283 cbradney 257
//                      qDebug() << "match on:" << di;
258
//              }
10355 subik 259
        }
260
 
261
//      qDebug(QString("SMCStyleWidget::show(): deflan='%1'->'%2'").arg(defLang).arg(langMap_[defLang]));
262
        Q_ASSERT(di != -1);
263
 
264
        if (hasParent)
265
        {
266
                if (ci == -1)
267
                        language_->setCurrentItem(di, cstyle->isInhLanguage());
268
                else
269
                        language_->setCurrentItem(ci, cstyle->isInhLanguage());
270
 
271
                language_->setParentItem(pi);
272
        }
273
        else
274
        {
275
                if (ci == -1)
10585 fschmid 276
                        language_->setCurrentIndex(di);
10355 subik 277
                else
10585 fschmid 278
                        language_->setCurrentIndex(ci);
10355 subik 279
        }
280
 
281
        connect(effects_, SIGNAL(State(int)), this, SLOT(slotColorChange()));
282
}
283
 
284
void SMCStyleWidget::show(QList<CharStyle*> &cstyles, QList<CharStyle> &cstylesAll, const QString &defLang, int unitIndex)
285
{
286
//      int decimals = unitGetDecimalsFromIndex(unitIndex);
287
//      QString suffix = unitGetSuffixFromIndex(unitIndex);
288
 
289
        if (cstyles.count() == 1)
290
                show(cstyles[0], cstylesAll, defLang, unitIndex);
291
        else if (cstyles.count() > 1)
292
        {
293
                showSizeAndPosition(cstyles);
294
                showEffects(cstyles);
295
                showColors(cstyles);
296
                showLanguage(cstyles, defLang);
297
                showParent(cstyles);
298
        }
299
}
300
 
301
void SMCStyleWidget::showSizeAndPosition(const QList<CharStyle*> &cstyles)
302
{
303
        double d = -30000;
304
        for (int i = 0; i < cstyles.count(); ++i)
305
        {
306
                if (d != -30000 && cstyles[i]->fontSize() != d)
307
                {
308
                        d = -30000;
309
                        break;
310
                }
311
                else
312
                        d = cstyles[i]->fontSize();
313
        }
314
        if (d == -30000)
315
                fontSize_->clear();
316
        else
317
                fontSize_->setValue(d / 10.0);
318
 
319
        d = -30000;
320
        for (int i = 0; i < cstyles.count(); ++i)
321
        {
322
                if (d != -30000 && cstyles[i]->scaleH() != d)
323
                {
324
                        d = -30000;
325
                        break;
326
                }
327
                else
328
                        d = cstyles[i]->scaleH();
329
        }
330
        if (d == -30000)
331
                fontHScale_->clear();
332
        else
333
                fontHScale_->setValue(d / 10.0);
334
 
335
        d = -30000;
336
        for (int i = 0; i < cstyles.count(); ++i)
337
        {
338
                if (d != -30000 && cstyles[i]->scaleV() != d)
339
                {
340
                        d = -30000;
341
                        break;
342
                }
343
                else
344
                        d = cstyles[i]->scaleV();
345
        }
346
        if (d == -30000)
347
                fontVScale_->clear();
348
        else
349
                fontVScale_->setValue(d / 10.0);
350
 
351
        d = -30000;
352
        for (int i = 0; i < cstyles.count(); ++i)
353
        {
354
                if (d != -30000 && cstyles[i]->baselineOffset() != d)
355
                {
356
                        d = -30000;
357
                        break;
358
                }
359
                else
360
                        d = cstyles[i]->baselineOffset();
361
        }
362
        if (d == -30000)
363
                baselineOffset_->clear();
364
        else
365
                baselineOffset_->setValue(d / 10.0);
366
 
367
        d = -30000;
368
        for (int i = 0; i < cstyles.count(); ++i)
369
        {
370
                if (d != -30000 && cstyles[i]->tracking() != d)
371
                {
372
                        d = -30000;
373
                        break;
374
                }
375
                else
376
                        d = cstyles[i]->tracking();
377
        }
378
        if (d == -30000)
379
                tracking_->clear();
380
        else
381
                tracking_->setValue(d / 10.0);
382
}
383
 
384
void SMCStyleWidget::showEffects(const QList<CharStyle*> &cstyles)
385
{
386
        int d = -30000;
387
        for (int i = 0; i < cstyles.count(); ++i)
388
        {
389
                if (d != -30000 && static_cast<int>(cstyles[i]->effects()) != d)
390
                {
391
                        d = -30000;
392
                        break;
393
                }
394
                else
395
                        d = static_cast<int>(cstyles[i]->effects());
396
        }
397
        if (d == -30000)
398
                effects_->setStyle(0);
399
        else
400
                effects_->setStyle(d);
401
 
402
//      TODO these things still missing:
403
//              effects_->ShadowVal->Xoffset->setValue(cstyle->shadowXOffset() / 10.0);
404
//              effects_->ShadowVal->Yoffset->setValue(cstyle->shadowYOffset() / 10.0);
405
//              effects_->OutlineVal->LWidth->setValue(cstyle->outlineWidth() / 10.0);
406
//              effects_->StrikeVal->LPos->setValue(cstyle->strikethruOffset() / 10.0);
407
//              effects_->StrikeVal->LWidth->setValue(cstyle->strikethruWidth() / 10.0);
408
//              effects_->UnderlineVal->LPos->setValue(cstyle->underlineOffset() / 10.0);
409
//              effects_->UnderlineVal->LWidth->setValue(cstyle->underlineWidth() / 10.0);
410
}
411
 
412
void SMCStyleWidget::showColors(const QList<CharStyle*> &cstyles)
413
{
414
        strokeShade_->setEnabled(true);
415
        strokeColor_->setEnabled(true);
416
 
417
        double d = -30000;
418
        for (int i = 0; i < cstyles.count(); ++i)
419
        {
420
                if (d != -30000 && cstyles[i]->fillShade() != d)
421
                {
422
                        d = -30000;
423
                        break;
424
                }
425
                else
426
                        d = cstyles[i]->fillShade();
427
        }
428
        if (d == -30000)
429
                fillShade_->setText( tr("Shade"));
430
        else
431
                fillShade_->setValue(qRound(d));
432
 
433
        d = -30000;
434
        for (int i = 0; i < cstyles.count(); ++i)
435
        {
436
                if (d != -30000 && cstyles[i]->strokeShade() != d)
437
                {
438
                        d = -30000;
439
                        break;
440
                }
441
                else
442
                        d = cstyles[i]->strokeShade();
443
        }
444
        if (d == -30000)
445
        {
446
                strokeShade_->setValue(21);
447
                strokeShade_->setText( tr("Shade"));
448
        }
449
        else
450
                strokeShade_->setValue(qRound(d));
451
 
452
        QString s;
453
        QString emptyString;
454
        for (int i = 0; i < cstyles.count(); ++i)
455
        {
456
                if (!s.isNull() && s != cstyles[i]->fillColor())
457
                {
458
                        s = emptyString;
459
                        break;
460
                }
461
                else
462
                        s = cstyles[i]->fillColor();
463
        }
464
        if (s.isEmpty())
465
        {
10585 fschmid 466
                if (fillColor_->itemText(fillColor_->count() - 1) != "")
467
                        fillColor_->addItem("");
468
                fillColor_->setCurrentIndex(fillColor_->count() - 1);
10355 subik 469
        }
470
        else
471
                fillColor_->setCurrentText(s);
472
 
473
        s = emptyString;
474
        for (int i = 0; i < cstyles.count(); ++i)
475
        {
476
                if (!s.isNull() && s != cstyles[i]->strokeColor())
477
                {
478
                        s = emptyString;
479
                        break;
480
                }
481
                else
482
                        s = cstyles[i]->strokeColor();
483
        }
484
        if (s.isEmpty())
485
        {
10585 fschmid 486
                if (strokeColor_->itemText(strokeColor_->count() - 1) != "")
487
                        strokeColor_->addItem("");
488
                strokeColor_->setCurrentIndex(fillColor_->count() - 1);
10355 subik 489
        }
490
        else
491
                strokeColor_->setCurrentText(s);
492
}
493
 
494
void SMCStyleWidget::showLanguage(const QList<CharStyle*> &cstyles, const QString &defLang)
495
{
496
        QString emptyString;
497
        QString s(cstyles[0]->language());
498
        for (int i = 0; i < cstyles.count(); ++i)
499
        {
500
                if (s != cstyles[i]->language())
501
                {
502
                        s = emptyString;
503
                        break;
504
                }
505
                else
506
                        s = cstyles[i]->language();
507
        }
508
 
509
        if (s.isEmpty())
510
        {
10585 fschmid 511
                if (language_->itemText(language_->count() - 1) != "")
512
                        language_->addItem("");
513
                language_->setCurrentIndex(language_->count() - 1);
10355 subik 514
        }
515
        else
516
        {
517
                Q_ASSERT(langMap_.contains(s));
10648 fschmid 518
                setCurrentComboItem(language_, langMap_[s]);
10355 subik 519
        }
520
}
521
 
522
void SMCStyleWidget::showParent(const QList<CharStyle*> &cstyles)
523
{
524
        parentCombo->setEnabled(false);
525
}
526
 
527
void SMCStyleWidget::clearAll()
528
{
529
 
530
}
531
 
532
void SMCStyleWidget::slotColorChange()
533
{
534
        int s = effects_->getStyle();
535
        bool enabled;
536
        if ((s & 4) || (s & 256))
537
                enabled = true;
538
        else
539
                enabled = false;
540
        StrokeIcon->setEnabled(enabled);
541
        strokeShade_->setEnabled(enabled);
542
        strokeColor_->setEnabled(enabled);
543
}
544
 
545
 
546
SMCStyleWidget::~SMCStyleWidget()
547
{
548
 
549
}