Subversion Repositories Scribus

Rev

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