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 | } |