Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
16546 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
 
9
#include "propertiespalette_text.h"
10
 
17539 jghali 11
#if defined(_MSC_VER) && !defined(_USE_MATH_DEFINES)
16546 jghali 12
#define _USE_MATH_DEFINES
13
#endif
14
#include <cmath>
15
#include "commonstrings.h"
16
#include "colorlistbox.h"
17
#include "pageitem.h"
17353 fschmid 18
#include "pageitem_table.h"
16546 jghali 19
#include "pageitem_textframe.h"
20
#include "propertiespalette_utils.h"
21
#include "propertywidget_advanced.h"
22
#include "propertywidget_distance.h"
18047 craig 23
#include "propertywidget_pareffect.h"
16546 jghali 24
#include "propertywidget_flop.h"
16840 jghali 25
#include "propertywidget_optmargins.h"
26
#include "propertywidget_orphans.h"
16546 jghali 27
#include "propertywidget_pathtext.h"
28
#include "propertywidget_textcolor.h"
29
#include "sccombobox.h"
30
#include "scfonts.h"
31
#include "scribus.h"
32
#include "scribuscore.h"
33
#include "scraction.h"
34
#include "scribusview.h"
35
#include "selection.h"
36
#include "spalette.h"
37
#include "styleselect.h"
38
#include "tabmanager.h"
39
#include "units.h"
40
#include "undomanager.h"
41
#include "util.h"
42
#include "util_icon.h"
43
#include "util_math.h"
44
#include "fontcombo.h"
45
#include "colorcombo.h"
46
 
47
//using namespace std;
48
 
49
PropertiesPalette_Text::PropertiesPalette_Text( QWidget* parent) : QWidget(parent)
50
{
51
        m_ScMW=0;
52
        m_doc=0;
53
        m_haveDoc = false;
54
        m_haveItem = false;
55
        m_unitRatio = 1.0;
56
 
57
 
58
        setupUi(this);
17383 fschmid 59
        setSizePolicy( QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum));
16546 jghali 60
 
61
        fontSize->setPrefix( "" );
62
        fontSizeLabel->setPixmap(loadIcon("Zeichen.xpm"));
63
        lineSpacingLabel->setPixmap(loadIcon("linespacing2.png"));
64
 
65
        paraStyleLabel->setBuddy(paraStyleCombo);
66
        paraStyleClear->setIcon(loadIcon("16/edit-clear.png"));
67
        charStyleLabel->setBuddy(charStyleCombo);
68
        charStyleClear->setIcon(loadIcon("16/edit-clear.png"));
69
 
70
        colorWidgets = new PropertyWidget_TextColor(textTree);
17383 fschmid 71
        colorWidgetsItem = textTree->addWidget( tr("Color && Effects"), colorWidgets);
16546 jghali 72
 
73
        flopBox = new PropertyWidget_Flop(textTree);
74
        flopItem = textTree->addWidget( tr("First Line Offset"), flopBox);
75
 
16840 jghali 76
        orphanBox = new PropertyWidget_Orphans(textTree);
77
        orphanItem = textTree->addWidget( tr("Orphans and Widows"), orphanBox);
78
 
18047 craig 79
        parEffectWidgets = new PropertyWidget_ParEffect(textTree);
80
        parEffectItem = textTree->addWidget( tr("Paragraph Effects"), parEffectWidgets);
16998 fschmid 81
 
16546 jghali 82
        distanceWidgets = new PropertyWidget_Distance(textTree);
17383 fschmid 83
        distanceItem = textTree->addWidget( tr("Columns && Text Distances"), distanceWidgets);
16546 jghali 84
 
85
        //<< Optical Margins
86
        optMargins = new PropertyWidget_OptMargins(textTree);
87
        optMarginsItem = textTree->addWidget( tr("Optical Margins"), optMargins);
88
        //>> Optical Margins
89
 
90
        //<<Advanced Settings
91
        advancedWidgets = new PropertyWidget_Advanced(textTree);
92
        advancedWidgetsItem = textTree->addWidget( tr("Advanced Settings"), advancedWidgets);
93
        //>>Advanced Settings
94
 
95
        pathTextWidgets = new PropertyWidget_PathText(textTree);
96
        pathTextItem = textTree->addWidget( tr("Path Text Properties"), pathTextWidgets);
97
 
98
        languageChange();
99
 
100
        connect(lineSpacing   , SIGNAL(valueChanged(double)), this, SLOT(handleLineSpacing()));
101
        connect(fonts         , SIGNAL(fontSelected(QString )), this, SLOT(handleTextFont(QString)));
102
        connect(fontSize      , SIGNAL(valueChanged(double)), this, SLOT(handleFontSize()));
103
        connect(textAlignment , SIGNAL(State(int))   , this, SLOT(handleAlignement(int)));
104
        connect(charStyleClear, SIGNAL(clicked()), this, SLOT(doClearCStyle()));
105
        connect(paraStyleClear, SIGNAL(clicked()), this, SLOT(doClearPStyle()));
106
 
107
        connect(flopBox->flopGroup, SIGNAL(buttonClicked( int )), this, SLOT(handleFirstLinePolicy(int)));
108
 
109
        connect(lineSpacingModeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(handleLineSpacingMode(int)));
110
 
111
        m_haveItem = false;
112
        setEnabled(false);
113
}
114
 
115
void PropertiesPalette_Text::setMainWindow(ScribusMainWindow* mw)
116
{
17388 jghali 117
        m_ScMW = mw;
16546 jghali 118
 
119
        advancedWidgets->setMainWindow(mw);
120
        colorWidgets->setMainWindow(mw);
17388 jghali 121
        distanceWidgets->setMainWindow(mw);
18047 craig 122
        parEffectWidgets->setMainWindow(mw);
17388 jghali 123
        optMargins->setMainWindow(mw);
124
        pathTextWidgets->setMainWindow(mw);
16546 jghali 125
 
126
        connect(m_ScMW, SIGNAL(UpdateRequest(int))     , this  , SLOT(handleUpdateRequest(int)));
17388 jghali 127
 
128
        connect(paraStyleCombo, SIGNAL(newStyle(const QString&)), m_ScMW, SLOT(setNewParStyle(const QString&)), Qt::UniqueConnection);
129
        connect(charStyleCombo, SIGNAL(newStyle(const QString&)), m_ScMW, SLOT(setNewCharStyle(const QString&)), Qt::UniqueConnection);
16546 jghali 130
}
131
 
132
void PropertiesPalette_Text::setDoc(ScribusDoc *d)
133
{
134
        if((d == (ScribusDoc*) m_doc) || (m_ScMW && m_ScMW->scriptIsRunning()))
135
                return;
136
 
137
        if (m_doc)
138
        {
139
                disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged()));
140
                disconnect(m_doc             , SIGNAL(docChanged())      , this, SLOT(handleSelectionChanged()));
141
        }
142
 
143
        m_doc  = d;
144
        m_item = NULL;
145
 
146
        m_unitRatio   = m_doc->unitRatio();
147
        m_unitIndex   = m_doc->unitIndex();
148
 
149
        m_haveDoc  = true;
150
        m_haveItem = false;
151
 
152
        fontSize->setValues( 0.5, 2048, 2, 1);
153
        lineSpacing->setValues( 1, 2048, 2, 1);
154
 
155
        advancedWidgets->setDoc(m_doc);
156
        colorWidgets->setDoc(m_doc);
157
        distanceWidgets->setDoc(m_doc);
18047 craig 158
        parEffectWidgets->setDoc(m_doc);
16546 jghali 159
        flopBox->setDoc(m_doc);
160
        optMargins->setDoc(m_doc);
16840 jghali 161
        orphanBox->setDoc(m_doc);
16546 jghali 162
        pathTextWidgets->setDoc(m_doc);
163
 
164
        fonts->RebuildList(m_doc);
165
        paraStyleCombo->setDoc(m_doc);
166
        charStyleCombo->setDoc(m_doc);
167
 
168
        connect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged()));
169
        connect(m_doc             , SIGNAL(docChanged())      , this, SLOT(handleSelectionChanged()));
170
}
171
 
172
void PropertiesPalette_Text::unsetDoc()
173
{
174
        if (m_doc)
175
        {
176
                disconnect(m_doc->m_Selection, SIGNAL(selectionChanged()), this, SLOT(handleSelectionChanged()));
177
                disconnect(m_doc             , SIGNAL(docChanged())      , this, SLOT(handleSelectionChanged()));
178
        }
179
 
180
        m_haveDoc  = false;
181
        m_haveItem = false;
182
        m_doc      = NULL;
183
        m_item     = NULL;
184
 
185
        paraStyleCombo->setDoc(0);
186
        charStyleCombo->setDoc(0);
187
 
188
        advancedWidgets->setDoc(0);
189
        colorWidgets->setDoc(0);
190
        distanceWidgets->setDoc(0);
191
        flopBox->setDoc(0);
192
        optMargins->setDoc(0);
16840 jghali 193
        orphanBox->setDoc(0);
18047 craig 194
        parEffectWidgets->setDoc(0);
17388 jghali 195
        pathTextWidgets->setDoc(0);
16546 jghali 196
 
197
        m_haveItem = false;
198
 
199
        setEnabled(false);
200
}
201
 
202
void PropertiesPalette_Text::unsetItem()
203
{
204
        m_haveItem = false;
205
        m_item     = NULL;
206
        handleSelectionChanged();
207
}
208
 
209
PageItem* PropertiesPalette_Text::currentItemFromSelection()
210
{
211
        PageItem *currentItem = NULL;
212
 
213
        if (m_doc)
214
        {
215
                if (m_doc->m_Selection->count() > 1)
216
                {
217
                        currentItem = m_doc->m_Selection->itemAt(0);
218
                }
219
                else if (m_doc->m_Selection->count() == 1)
220
                {
221
                        currentItem = m_doc->m_Selection->itemAt(0);
222
                }
223
        }
224
 
225
        return currentItem;
226
}
227
 
228
void PropertiesPalette_Text::handleSelectionChanged()
229
{
230
        if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning())
231
                return;
232
 
233
        PageItem* currItem = currentItemFromSelection();
234
        if (m_doc->m_Selection->count() > 1 )
235
        {
236
                setEnabled(false);
237
                flopBox->flopRealHeight->setChecked(true);
238
        }
239
        else
240
        {
241
                int itemType = currItem ? (int) currItem->itemType() : -1;
242
                m_haveItem = (itemType != -1);
243
 
244
                switch (itemType)
245
                {
246
                case -1:
247
                        m_haveItem = false;
248
                        setEnabled(false);
249
                        break;
250
                case PageItem::TextFrame:
251
                case PageItem::PathText:
252
                        setEnabled(true);
253
                        break;
17353 fschmid 254
                case PageItem::Table:
255
                        setEnabled(m_doc->appMode == modeEditTable);
256
                        break;
16546 jghali 257
                default:
258
                        setEnabled(false);
259
                        break;
260
                }
261
        }
262
        if (currItem)
263
        {
264
                setCurrentItem(currItem);
265
        }
266
        updateGeometry();
18480 jghali 267
        //repaint();
16546 jghali 268
}
269
 
270
void PropertiesPalette_Text::handleUpdateRequest(int updateFlags)
271
{
272
        // ColorWidget will handle its update itself
273
        /*if (updateFlags & reqColorsUpdate)
274
                updateColorList();*/
275
        if (updateFlags & reqCharStylesUpdate)
16998 fschmid 276
        {
16546 jghali 277
                charStyleCombo->updateFormatList();
18047 craig 278
                parEffectWidgets->updateCharStyles();
16998 fschmid 279
        }
16546 jghali 280
        if (updateFlags & reqParaStylesUpdate)
281
                paraStyleCombo->updateFormatList();
282
        if (updateFlags & reqDefFontListUpdate)
283
                fonts->RebuildList(0);
284
        if (updateFlags & reqDocFontListUpdate)
285
                fonts->RebuildList(m_haveDoc ? m_doc : 0);
286
        if (updateFlags & reqStyleComboDocUpdate)
287
        {
288
                paraStyleCombo->setDoc(m_haveDoc ? m_doc : 0);
289
                charStyleCombo->setDoc(m_haveDoc ? m_doc : 0);
18047 craig 290
                parEffectWidgets->setDoc(m_haveDoc ? m_doc : 0);
16546 jghali 291
        }
292
}
293
 
294
void PropertiesPalette_Text::setCurrentItem(PageItem *i)
295
{
296
        if (!m_ScMW || m_ScMW->scriptIsRunning())
297
                return;
298
        //CB We shouldnt really need to process this if our item is the same one
299
        //maybe we do if the item has been changed by scripter.. but that should probably
300
        //set some status if so.
301
        //FIXME: This wont work until when a canvas deselect happens, m_item must be NULL.
302
        //if (m_item == i)
303
        //      return;
304
 
305
        if (!m_doc)
306
                setDoc(i->doc());
307
 
308
        m_haveItem = false;
309
        m_item = i;
310
 
17388 jghali 311
        displayFirstLinePolicy(m_item->firstLineOffset());
16546 jghali 312
 
313
        if ((m_item->isGroup()) && (!m_item->isSingleSel))
314
        {
315
                setEnabled(false);
316
        }
317
        if (m_item->asPathText())
318
        {
319
                flopItem->setHidden(true);
320
                distanceItem->setHidden(true);
16840 jghali 321
                orphanItem->setHidden(true);
18047 craig 322
                parEffectItem->setHidden(true);
16546 jghali 323
                pathTextItem->setHidden(false);
324
        }
17353 fschmid 325
        else if (m_item->asTextFrame() || m_item->asTable())
16546 jghali 326
        {
327
                flopItem->setHidden(false);
328
                distanceItem->setHidden(false);
16840 jghali 329
                orphanItem->setHidden(false);
18047 craig 330
                parEffectItem->setHidden(false);
16546 jghali 331
                pathTextItem->setHidden(true);
332
        }
333
        else
334
        {
335
                flopItem->setHidden(false);
336
                distanceItem->setHidden(false);
16840 jghali 337
                orphanItem->setHidden(false);
18047 craig 338
                parEffectItem->setHidden(false);
16546 jghali 339
                pathTextItem->setHidden(true);
340
        }
341
 
342
        m_haveItem = true;
343
 
18534 jghali 344
        if (!sender())
345
        {
346
                parEffectWidgets->handleSelectionChanged();
347
        }
348
 
17353 fschmid 349
        if (m_item->asTextFrame() || m_item->asPathText() || m_item->asTable())
16546 jghali 350
        {
16838 jghali 351
                ParagraphStyle parStyle =  m_item->itemText.defaultStyle();
352
                if (m_doc->appMode == modeEdit)
353
                        m_item->currentTextProps(parStyle);
17353 fschmid 354
                else if (m_doc->appMode == modeEditTable)
355
                        m_item->asTable()->activeCell().textFrame()->currentTextProps(parStyle);
16838 jghali 356
                updateStyle(parStyle);
16546 jghali 357
        }
358
        if (m_item->asOSGFrame())
359
        {
360
                setEnabled(false);
361
        }
362
        if (m_item->asSymbolFrame())
363
        {
364
                setEnabled(false);
365
        }
366
}
367
 
368
void PropertiesPalette_Text::unitChange()
369
{
370
        if (!m_haveDoc)
371
                return;
372
        bool tmp = m_haveItem;
373
        m_haveItem = false;
374
 
375
        advancedWidgets->unitChange();
376
        colorWidgets->unitChange();
377
        distanceWidgets->unitChange();
378
        flopBox->unitChange();
379
        optMargins->unitChange();
380
        pathTextWidgets->unitChange();
18047 craig 381
        parEffectWidgets->unitChange();
16546 jghali 382
 
383
        m_haveItem = tmp;
384
}
385
 
386
void PropertiesPalette_Text::handleLineSpacingMode(int id)
387
{
388
        if ((m_haveDoc) && (m_haveItem))
389
        {
17353 fschmid 390
                PageItem *i2 = m_item;
391
                if (m_doc->appMode == modeEditTable)
392
                        i2 = m_item->asTable()->activeCell().textFrame();
393
                if (i2 != NULL)
394
                {
395
                        Selection tempSelection(this, false);
396
                        tempSelection.addItem(i2, true);
397
                        m_doc->itemSelection_SetLineSpacingMode(id, &tempSelection);
398
                        updateStyle(((m_doc->appMode == modeEdit) || (m_doc->appMode == modeEditTable)) ? i2->currentStyle() : i2->itemText.defaultStyle());
399
                        m_doc->regionsChanged()->update(QRect());
400
                }
16546 jghali 401
        }
402
}
403
 
404
void PropertiesPalette_Text::displayLineSpacing(double r)
405
{
406
        if (!m_ScMW || m_ScMW->scriptIsRunning())
407
                return;
408
        bool tmp = m_haveItem;
409
        m_haveItem = false;
410
        lineSpacing->setValue(r);
17353 fschmid 411
        PageItem *i2 = m_item;
412
        if (m_doc->appMode == modeEditTable)
413
                i2 = m_item->asTable()->activeCell().textFrame();
414
        if (i2 != NULL)
16546 jghali 415
        {
17353 fschmid 416
                const ParagraphStyle& curStyle(tmp && m_doc->appMode == modeEdit? i2->currentStyle() : i2->itemText.defaultStyle());
417
                if (tmp)
418
                {
419
                        setupLineSpacingSpinbox(curStyle.lineSpacingMode(), r);
420
                        lineSpacingModeCombo->setCurrentIndex(curStyle.lineSpacingMode());
421
                }
16546 jghali 422
        }
423
        m_haveItem = tmp;
424
}
425
 
426
void PropertiesPalette_Text::displayFontFace(const QString& newFont)
427
{
428
        if (!m_ScMW || m_ScMW->scriptIsRunning())
429
                return;
430
        bool tmp = m_haveItem;
431
        m_haveItem = false;
432
        if (m_item != NULL)
433
                fonts->RebuildList(m_doc, m_item->isAnnotation());
434
        fonts->setCurrentFont(newFont);
435
        m_haveItem = tmp;
436
}
437
 
438
void PropertiesPalette_Text::displayFontSize(double s)
439
{
440
        if (!m_ScMW || m_ScMW->scriptIsRunning())
441
                return;
442
        fontSize->showValue(s / 10.0);
443
}
444
 
445
void PropertiesPalette_Text::displayFirstLinePolicy( FirstLineOffsetPolicy f )
446
{
447
        if(f == FLOPFontAscent)
448
                flopBox->flopFontAscent->setChecked(true);
449
        else if(f == FLOPLineSpacing)
450
                flopBox->flopLineSpacing->setChecked(true);
17760 jghali 451
        else if (f == FLOPRealGlyphHeight)
16546 jghali 452
                flopBox->flopRealHeight->setChecked(true); //It’s historical behaviour.
17760 jghali 453
        else // if (f == FLOPBaseline)
454
                flopBox->flopBaselineGrid->setChecked(true);
16546 jghali 455
}
456
 
457
void PropertiesPalette_Text::setupLineSpacingSpinbox(int mode, double value)
458
{
459
        bool blocked = lineSpacing->blockSignals(true);
460
        if (mode > 0)
461
        {
462
                if (mode==1)
463
                        lineSpacing->setSpecialValueText( tr( "Auto" ) );
464
                if (mode==2)
465
                        lineSpacing->setSpecialValueText( tr( "Baseline" ) );
466
                lineSpacing->setMinimum(0);
467
                lineSpacing->setValue(0);
468
                lineSpacing->setEnabled(false);
469
        }
470
        else
471
        {
472
                lineSpacing->setSpecialValueText("");
473
                lineSpacing->setMinimum(1);
474
                lineSpacing->setValue(value);
475
                lineSpacing->setEnabled(true);
476
        }
477
        lineSpacing->blockSignals(blocked);
478
}
479
 
480
void PropertiesPalette_Text::updateCharStyle(const CharStyle& charStyle)
481
{
482
        if (!m_ScMW || m_ScMW->scriptIsRunning())
483
                return;
484
 
485
        advancedWidgets->updateCharStyle(charStyle);
486
        colorWidgets->updateCharStyle(charStyle);
487
 
488
        displayFontFace(charStyle.font().scName());
489
        displayFontSize(charStyle.fontSize());
490
}
491
 
492
void PropertiesPalette_Text::updateStyle(const ParagraphStyle& newCurrent)
493
{
494
        if (!m_ScMW || m_ScMW->scriptIsRunning())
495
                return;
496
 
497
        const CharStyle& charStyle = newCurrent.charStyle();
498
 
499
        advancedWidgets->updateStyle(newCurrent);
500
        colorWidgets->updateStyle(newCurrent);
17388 jghali 501
        optMargins->updateStyle(newCurrent);
16840 jghali 502
        orphanBox->updateStyle (newCurrent);
18047 craig 503
        parEffectWidgets->updateStyle(newCurrent);
16546 jghali 504
 
505
        displayFontFace(charStyle.font().scName());
506
        displayFontSize(charStyle.fontSize());
507
 
508
        bool tmp = m_haveItem;
509
        m_haveItem = false;
510
 
511
        setupLineSpacingSpinbox(newCurrent.lineSpacingMode(), newCurrent.lineSpacing());
512
        lineSpacingModeCombo->setCurrentIndex(newCurrent.lineSpacingMode());
513
        textAlignment->setStyle(newCurrent.alignment());
514
 
515
        m_haveItem = tmp;
516
}
517
 
518
void PropertiesPalette_Text::updateCharStyles()
519
{
520
        charStyleCombo->updateFormatList();
18047 craig 521
        parEffectWidgets->updateCharStyles();
16546 jghali 522
}
523
 
524
void PropertiesPalette_Text::updateParagraphStyles()
525
{
526
        paraStyleCombo->updateFormatList();
16998 fschmid 527
        charStyleCombo->updateFormatList();
18047 craig 528
        parEffectWidgets->updateCharStyles();
16546 jghali 529
}
530
 
531
void PropertiesPalette_Text::updateTextStyles()
532
{
533
        paraStyleCombo->updateFormatList();
534
        charStyleCombo->updateFormatList();
535
}
536
 
537
void PropertiesPalette_Text::displayAlignment(int e)
538
{
539
        if (!m_ScMW || m_ScMW->scriptIsRunning())
540
                return;
541
        bool tmp = m_haveItem;
542
        m_haveItem = false;
543
        textAlignment->setEnabled(true);
544
        textAlignment->setStyle(e);
545
        m_haveItem = tmp;
546
}
547
 
548
void PropertiesPalette_Text::displayCharStyle(const QString& name)
549
{
550
        if (!m_ScMW || m_ScMW->scriptIsRunning())
551
                return;
552
        bool blocked = charStyleCombo->blockSignals(true);
553
        charStyleCombo->setFormat(name);
554
        charStyleCombo->blockSignals(blocked);
555
}
556
 
557
void PropertiesPalette_Text::displayParStyle(const QString& name)
558
{
559
        if (!m_ScMW || m_ScMW->scriptIsRunning())
560
                return;
561
        bool blocked = paraStyleCombo->blockSignals(true);
562
        paraStyleCombo->setFormat(name);
563
        paraStyleCombo->blockSignals(blocked);
564
}
565
 
566
void PropertiesPalette_Text::handleLineSpacing()
567
{
568
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
569
                return;
17353 fschmid 570
        PageItem *i2 = m_item;
571
        if (m_doc->appMode == modeEditTable)
572
                i2 = m_item->asTable()->activeCell().textFrame();
573
        if (i2 != NULL)
574
        {
575
                Selection tempSelection(this, false);
576
                tempSelection.addItem(i2, true);
577
                m_doc->itemSelection_SetLineSpacing(lineSpacing->value(), &tempSelection);
578
        }
16546 jghali 579
}
580
 
581
void PropertiesPalette_Text::handleFontSize()
582
{
583
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
584
                return;
17353 fschmid 585
        PageItem *i2 = m_item;
586
        if (m_doc->appMode == modeEditTable)
587
                i2 = m_item->asTable()->activeCell().textFrame();
588
        if (i2 != NULL)
589
        {
590
                Selection tempSelection(this, false);
591
                tempSelection.addItem(i2, true);
592
                m_doc->itemSelection_SetFontSize(qRound(fontSize->value()*10.0), &tempSelection);
593
        }
16546 jghali 594
}
595
 
596
void PropertiesPalette_Text::handleAlignement(int a)
597
{
598
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
599
                return;
17353 fschmid 600
        PageItem *i2 = m_item;
601
        if (m_doc->appMode == modeEditTable)
602
                i2 = m_item->asTable()->activeCell().textFrame();
603
        if (i2 != NULL)
604
        {
605
                Selection tempSelection(this, false);
606
                tempSelection.addItem(i2, true);
607
                m_doc->itemSelection_SetAlignment(a, &tempSelection);
608
        }
16546 jghali 609
}
610
 
611
void PropertiesPalette_Text::handleTextFont(QString c)
612
{
613
        if (!m_haveDoc || !m_haveItem || !m_ScMW || m_ScMW->scriptIsRunning())
614
                return;
17388 jghali 615
        m_ScMW->SetNewFont(c);
16546 jghali 616
}
617
 
618
void PropertiesPalette_Text::doClearCStyle()
619
{
620
        if (!m_ScMW || m_ScMW->scriptIsRunning())
621
                return;
622
        if (m_haveDoc)
623
        {
17353 fschmid 624
                PageItem *i2 = m_item;
625
                if (m_doc->appMode == modeEditTable)
626
                        i2 = m_item->asTable()->activeCell().textFrame();
627
                if (i2 != NULL)
628
                {
629
                        Selection tempSelection(this, false);
630
                        tempSelection.addItem(i2, true);
631
                        m_doc->itemSelection_EraseCharStyle(&tempSelection);
632
                }
16546 jghali 633
        }
634
}
635
 
636
 
637
void PropertiesPalette_Text::doClearPStyle()
638
{
639
        if (!m_ScMW || m_ScMW->scriptIsRunning())
640
                return;
641
        if (m_haveDoc)
642
        {
17353 fschmid 643
                PageItem *i2 = m_item;
644
                if (m_doc->appMode == modeEditTable)
645
                        i2 = m_item->asTable()->activeCell().textFrame();
646
                if (i2 != NULL)
647
                {
648
                        Selection tempSelection(this, false);
649
                        tempSelection.addItem(i2, true);
18047 craig 650
                        m_doc->itemSelection_ClearBulNumStrings(&tempSelection);
17353 fschmid 651
                        m_doc->itemSelection_EraseParagraphStyle(&tempSelection);
652
                        CharStyle emptyCStyle;
653
                        m_doc->itemSelection_SetCharStyle(emptyCStyle, &tempSelection);
654
                }
16546 jghali 655
        }
656
}
657
 
658
void PropertiesPalette_Text::updateColorList()
659
{
660
        if (!m_haveDoc || !m_ScMW || m_ScMW->scriptIsRunning())
661
                return;
662
 
663
        colorWidgets->updateColorList();
664
}
665
 
666
void PropertiesPalette_Text::changeEvent(QEvent *e)
667
{
668
        if (e->type() == QEvent::LanguageChange)
669
        {
670
                languageChange();
671
                return;
672
        }
673
        QWidget::changeEvent(e);
674
}
675
 
676
void PropertiesPalette_Text::languageChange()
677
{
678
        paraStyleLabel->setText( tr("Paragraph St&yle:"));
679
        charStyleLabel->setText( tr("Character St&yle:"));
680
 
17383 fschmid 681
        colorWidgetsItem->setText(0, tr("Color && Effects"));
16546 jghali 682
        advancedWidgetsItem->setText(0, tr("Advanced Settings"));
683
        flopItem->setText(0, tr("First Line Offset"));
17383 fschmid 684
        distanceItem->setText(0, tr("Columns && Text Distances"));
16546 jghali 685
        optMarginsItem->setText(0, tr("Optical Margins"));
16840 jghali 686
        orphanItem->setText(0, tr("Orphans and Widows"));
16546 jghali 687
        pathTextItem->setText(0, tr("Path Text Properties"));
688
 
689
        int oldLineSpacingMode = lineSpacingModeCombo->currentIndex();
690
        lineSpacingModeCombo->clear();
691
        lineSpacingModeCombo->addItem( tr("Fixed Linespacing"));
692
        lineSpacingModeCombo->addItem( tr("Automatic Linespacing"));
693
        lineSpacingModeCombo->addItem( tr("Align to Baseline Grid"));
694
        lineSpacingModeCombo->setCurrentIndex(oldLineSpacingMode);
695
 
696
        QString ptSuffix = tr(" pt");
697
        fontSize->setSuffix(ptSuffix);
698
        lineSpacing->setSuffix(ptSuffix);
699
 
700
        advancedWidgets->languageChange();
701
        colorWidgets->languageChange();
702
        distanceWidgets->languageChange();
703
        flopBox->languageChange();
704
        optMargins->languageChange();
16840 jghali 705
        orphanBox->languageChange();
16546 jghali 706
        pathTextWidgets->languageChange();
707
 
708
        textAlignment->languageChange();
709
 
710
        fontSize->setToolTip( tr("Font Size"));
711
 
712
        lineSpacing->setToolTip( tr("Line Spacing"));
713
        lineSpacingModeCombo->setToolTip( tr("Select the line spacing mode.") );
714
        paraStyleCombo->setToolTip( tr("Paragraph style of currently selected text or paragraph"));
715
        charStyleCombo->setToolTip( tr("Character style of currently selected text or paragraph"));
716
        paraStyleClear->setToolTip( tr("Remove Direct Paragraph Formatting"));
717
        charStyleClear->setToolTip( tr("Remove Direct Character Formatting"));
718
}
719
 
720
void PropertiesPalette_Text::handleFirstLinePolicy(int radioFlop)
721
{
722
        if (!m_ScMW || m_ScMW->scriptIsRunning() || !m_haveDoc || !m_haveItem)
723
                return;
17353 fschmid 724
        PageItem *i2 = m_item;
725
        if (m_doc->appMode == modeEditTable)
726
                i2 = m_item->asTable()->activeCell().textFrame();
727
        if (i2 != NULL)
728
        {
729
                if( radioFlop == PropertyWidget_Flop::RealHeightID)
730
                        i2->setFirstLineOffset(FLOPRealGlyphHeight);
731
                else if( radioFlop == PropertyWidget_Flop::FontAscentID)
732
                        i2->setFirstLineOffset(FLOPFontAscent);
733
                else if( radioFlop == PropertyWidget_Flop::LineSpacingID)
734
                        i2->setFirstLineOffset(FLOPLineSpacing);
17760 jghali 735
                else if( radioFlop == PropertyWidget_Flop::BaselineGridID)
736
                        i2->setFirstLineOffset(FLOPBaselineGrid);
17353 fschmid 737
                i2->update();
738
                if (m_doc->appMode == modeEditTable)
739
                        m_item->asTable()->update();
740
                else
741
                        m_item->update();
742
                m_doc->regionsChanged()->update(QRect());
743
        }
16546 jghali 744
}