Subversion Repositories Scribus

Rev

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