Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
102 Franz 1
/***************************************************************************
2
                          story.cpp  -  description
3
                             -------------------
4
    begin                : Tue Nov 11 2003
5
    copyright            : (C) 2003 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
3457 avox 17
#include "sccombobox.h"
1789 fschmid 18
#include "scfonts.h"
102 Franz 19
#include "story.h"
20
#include "story.moc"
21
#include <qtooltip.h>
22
#include <qpixmap.h>
23
#include <qcombobox.h>
124 Franz 24
#include <qregexp.h>
351 Franz 25
#include <qhbox.h>
357 Franz 26
#include <qcolordialog.h>
27
#include <qfontdialog.h>
374 Franz 28
#include <qcursor.h>
2233 fschmid 29
#include <qtextcodec.h>
3732 cbradney 30
 
31
#include "alignselect.h"
32
#include "charselect.h"
33
#include "commonstrings.h"
162 Franz 34
#include "customfdialog.h"
3135 cbradney 35
#include "editformats.h"
3732 cbradney 36
#include "fontcombo.h"
37
#include "mspinbox.h"
38
#include "pageitem.h"
39
#include "pluginmanager.h"
415 Franz 40
#include "prefscontext.h"
3252 craig 41
#include "prefsmanager.h"
415 Franz 42
#include "prefsfile.h"
3732 cbradney 43
#include "scmessagebox.h"
44
#include "scraction.h"
45
#include "scribus.h"
46
#include "search.h"
3135 cbradney 47
#include "serializer.h"
3732 cbradney 48
#include "shadebutton.h"
3252 craig 49
#include "spalette.h"
50
#include "styleselect.h"
3809 cbradney 51
#include "util.h"
189 Franz 52
 
102 Franz 53
extern QPixmap loadIcon(QString nam);
54
 
3205 craig 55
 
371 Franz 56
SideBar::SideBar(QWidget *pa) : QLabel(pa)
57
{
58
        setEraseColor(QColor(255,255,255));
59
        offs = 0;
60
        editor = 0;
372 Franz 61
        noUpdt = true;
373 Franz 62
        inRep = false;
63
        setMinimumWidth(fontMetrics().width( tr("No Style") )+30);
371 Franz 64
}
65
 
374 Franz 66
void SideBar::mouseReleaseEvent(QMouseEvent *m)
67
{
68
        CurrentPar = editor->paragraphAt(QPoint(2, m->y()+offs));
69
        pmen = new QPopupMenu();
70
        Spalette* Spal = new Spalette(this);
716 cbradney 71
        Spal->setFormats(editor->doc);
374 Franz 72
        if ((CurrentPar < static_cast<int>(editor->StyledText.count())) && (editor->StyledText.count() != 0))
73
        {
74
                if (editor->StyledText.at(CurrentPar)->count() > 0)
75
                        Spal->setFormat(editor->StyledText.at(CurrentPar)->at(0)->cab);
76
                else
77
                        Spal->setFormat(0);
78
        }
79
        else
80
                Spal->setFormat(0);
716 cbradney 81
        connect(Spal, SIGNAL(newStyle(int)), this, SLOT(setPStyle(int)));
374 Franz 82
        pmen->insertItem(Spal);
2397 cbradney 83
        pmen->insertItem( tr("Edit Styles..."), this, SLOT(editStyles()));
374 Franz 84
        pmen->exec(QCursor::pos());
85
        delete pmen;
86
}
87
 
1893 subik 88
void SideBar::editStyles()
89
{
90
        emit sigEditStyles();
91
}
92
 
374 Franz 93
void SideBar::setPStyle(int s)
94
{
95
        emit ChangeStyle(CurrentPar, s);
96
        pmen->activateItemAt(0);
97
}
98
 
371 Franz 99
void SideBar::paintEvent(QPaintEvent *e)
100
{
373 Franz 101
        inRep = true;
371 Franz 102
        QLabel::paintEvent(e);
103
        QPainter p;
104
        p.begin(this);
372 Franz 105
        if ((editor != 0) && (noUpdt))
371 Franz 106
        {
1065 cbradney 107
                int st = editor->currentParaStyle;
371 Franz 108
                for (int pa = 0; pa < editor->paragraphs(); ++pa)
109
                {
110
                        QRect re = editor->paragraphRect(pa);
373 Franz 111
                        if (!re.isValid())
112
                                break;
371 Franz 113
                        re.setWidth(width()-5);
114
                        re.moveBy(5, 0);
373 Franz 115
                        if (((re.y()+re.height())-offs < height()) && ((re.y()+re.height())-offs > 0))
371 Franz 116
                                p.drawLine(0, (re.y()+re.height())-offs, width()-1, (re.y()+re.height())-offs);
373 Franz 117
                        if ((re.y()-offs < height()) && (re.y()-offs > 0))
371 Franz 118
                        {
372 Franz 119
                                re.setY(re.y()-offs);
371 Franz 120
                                if ((pa < static_cast<int>(editor->StyledText.count())) && (editor->StyledText.count() != 0))
121
                                {
122
                                        if (editor->StyledText.at(pa)->count() > 0)
123
                                                st = editor->StyledText.at(pa)->at(0)->cab;
124
                                        else
373 Franz 125
                                                st = editor->ParagStyles[pa];
3135 cbradney 126
                                        if (st < 5)
127
                                                p.drawText(re, Qt::AlignLeft | Qt::AlignTop, tr("No Style"));
128
                                        else
129
                                                p.drawText(re, Qt::AlignLeft | Qt::AlignTop, editor->doc->docParagraphStyles[st].Vname);
371 Franz 130
                                }
131
                                else
132
                                {
1065 cbradney 133
                                        st = editor->currentParaStyle;
371 Franz 134
                                        if (st < 5)
373 Franz 135
                                                p.drawText(re, Qt::AlignLeft | Qt::AlignTop, tr("No Style"));
371 Franz 136
                                        else
1065 cbradney 137
                                                p.drawText(re, Qt::AlignLeft | Qt::AlignTop, editor->doc->docParagraphStyles[st].Vname);
371 Franz 138
                                }
139
                        }
140
                }
141
        }
142
        p.end();
373 Franz 143
        inRep = false;
371 Franz 144
}
145
 
795 fschmid 146
void SideBar::doMove(int, int y)
371 Franz 147
{
148
        offs = y;
373 Franz 149
        if (!inRep)
150
                update();
371 Franz 151
}
152
 
153
void SideBar::doRepaint()
154
{
373 Franz 155
        if (!inRep)
156
                update();
371 Franz 157
}
158
 
372 Franz 159
void SideBar::setRepaint(bool r)
160
{
161
        noUpdt = r;
162
}
163
 
351 Franz 164
SEditor::SEditor(QWidget* parent, ScribusDoc *docc) : QTextEdit(parent)
102 Franz 165
{
2494 cbradney 166
        setCurrentDocument(docc);
353 Franz 167
        wasMod = false;
385 Franz 168
        StoredSel = false;
351 Franz 169
        StyledText.clear();
170
        StyledText.setAutoDelete(true);
373 Franz 171
        ParagStyles.clear();
362 Franz 172
        cBuffer.setAutoDelete(true);
173
        cBuffer.clear();
113 Franz 174
        setUndoRedoEnabled(true);
351 Franz 175
        setUndoDepth(0);
176
        setTextFormat(Qt::PlainText);
355 Franz 177
        viewport()->setAcceptDrops(false);
376 Franz 178
        ClipData = 0;
3034 cbradney 179
        unicodeTextEditMode = false;
376 Franz 180
        connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(ClipChange()));
399 Franz 181
        connect(QApplication::clipboard(), SIGNAL(selectionChanged()), this, SLOT(SelClipChange()));
102 Franz 182
}
183
 
2494 cbradney 184
void SEditor::setCurrentDocument(ScribusDoc *docc)
185
{
186
        doc = docc;
187
}
188
 
2233 fschmid 189
void SEditor::imEndEvent(QIMEvent *e)
190
{
191
        QString uc = e->text();
2877 cbradney 192
        if ((!uc.isEmpty()) && ((*doc->AllFonts)[CurrFont]->CharWidth.contains(uc[0].unicode())))
2233 fschmid 193
        {
194
                insChars(e->text());
195
                QTextEdit::imEndEvent(e);
196
                emit SideBarUp(true);
197
                emit SideBarUpdate();
198
        }
199
}
200
 
351 Franz 201
void SEditor::keyPressEvent(QKeyEvent *k)
113 Franz 202
{
372 Franz 203
        emit SideBarUp(false);
351 Franz 204
        int p, i;
205
        getCursorPosition(&p, &i);
2369 cbradney 206
        int keyMod=0;
207
        if (k->state() & ShiftButton)
208
                keyMod |= SHIFT;
209
        if (k->state() & ControlButton)
210
                keyMod |= CTRL;
211
        if (k->state() & AltButton)
212
                keyMod |= ALT;
3767 subik 213
 
926 fschmid 214
        QString uc = k->text();
2369 cbradney 215
        QKeySequence currKeySeq = QKeySequence(k->key() | keyMod);
216
        if (currKeySeq == ScApp->scrActions["specialPageNumber"]->accel())
351 Franz 217
        {
2319 cbradney 218
                insChars(QString(QChar(ScApp->scrActions["specialPageNumber"]->actionInt())));
2407 fschmid 219
                setFarbe(true);
351 Franz 220
                insert("#");
2407 fschmid 221
                setFarbe(false);
372 Franz 222
                emit SideBarUp(true);
2677 fschmid 223
                emit SideBarUpdate();
351 Franz 224
                return;
225
        }
2369 cbradney 226
        if (currKeySeq == ScApp->scrActions["specialNonBreakingSpace"]->accel())
2318 fschmid 227
        {
2319 cbradney 228
                insChars(QString(QChar(ScApp->scrActions["specialNonBreakingSpace"]->actionInt())));
2407 fschmid 229
                setFarbe(true);
2318 fschmid 230
                insert("_");
2407 fschmid 231
                setFarbe(false);
2318 fschmid 232
                emit SideBarUp(true);
2677 fschmid 233
                emit SideBarUpdate();
2318 fschmid 234
                return;
235
        }
2369 cbradney 236
        if (currKeySeq == ScApp->scrActions["specialFrameBreak"]->accel())
2352 fschmid 237
        {
238
                insChars(QString(QChar(ScApp->scrActions["specialFrameBreak"]->actionInt())));
2407 fschmid 239
                setFarbe(true);
2352 fschmid 240
                insert("|");
2407 fschmid 241
                setFarbe(false);
2352 fschmid 242
                emit SideBarUp(true);
2677 fschmid 243
                emit SideBarUpdate();
2352 fschmid 244
                return;
245
        }
2369 cbradney 246
        if (currKeySeq == ScApp->scrActions["specialNewLine"]->accel())
2352 fschmid 247
        {
248
                insChars(QString(QChar(ScApp->scrActions["specialNewLine"]->actionInt())));
2407 fschmid 249
                setFarbe(true);
2352 fschmid 250
                insert("*");
2407 fschmid 251
                setFarbe(false);
2352 fschmid 252
                emit SideBarUp(true);
2677 fschmid 253
                emit SideBarUpdate();
2352 fschmid 254
                return;
255
        }
2384 fschmid 256
        if (currKeySeq == ScApp->scrActions["specialColumnBreak"]->accel())
257
        {
258
                insChars(QString(QChar(ScApp->scrActions["specialColumnBreak"]->actionInt())));
2407 fschmid 259
                setFarbe(true);
2389 fschmid 260
                insert("^");
2407 fschmid 261
                setFarbe(false);
2384 fschmid 262
                emit SideBarUp(true);
2677 fschmid 263
                emit SideBarUpdate();
2384 fschmid 264
                return;
265
        }
2407 fschmid 266
        if (currKeySeq == ScApp->scrActions["specialNonBreakingHyphen"]->accel())
267
        {
268
                insChars(QString(QChar(ScApp->scrActions["specialNonBreakingHyphen"]->actionInt())));
269
                setFarbe(true);
270
                insert("=");
271
                setFarbe(false);
272
                emit SideBarUp(true);
2677 fschmid 273
                emit SideBarUpdate();
2407 fschmid 274
                return;
275
        }
3767 subik 276
 
351 Franz 277
        switch (k->state())
278
        {
279
                case ControlButton:
280
                case ControlButton|ShiftButton:
281
                case ControlButton|Keypad:
282
                case ControlButton|ShiftButton|Keypad:
1866 fschmid 283
                        switch (k->key())
284
                        {
285
                                case Key_Delete:
286
                                        moveCursor(QTextEdit::MoveWordForward, true);
287
                                        deleteSel();
288
                                        break;
289
                                case Key_Backspace:
290
                                        moveCursor(QTextEdit::MoveWordBackward, true);
291
                                        deleteSel();
292
                                        break;
293
                                case Key_K:
294
                                        moveCursor(QTextEdit::MoveLineEnd, true);
295
                                        deleteSel();
296
                                        break;
297
                                case Key_D:
298
                                        moveCursor(QTextEdit::MoveForward, true);
299
                                        deleteSel();
300
                                        break;
301
                                case Key_H:
302
                                        moveCursor(QTextEdit::MoveBackward, true);
303
                                        deleteSel();
304
                                        break;
305
                                case Key_X:
2404 cbradney 306
                                        cut();
307
                                        return;
308
                                        break;
309
                                case Key_V:
310
                                        paste();
311
                                        return;
312
                                        break;
1866 fschmid 313
                                case Key_Y:
314
                                case Key_Z:
315
                                        emit SideBarUp(true);
316
                                        return;
317
                                        break;
318
                                case Key_C:
319
                                        copyStyledText();
320
                                        break;
321
                        }
351 Franz 322
                        break;
323
                case NoButton:
324
                case Keypad:
325
                case ShiftButton:
3034 cbradney 326
                        if (unicodeTextEditMode)
351 Franz 327
                        {
328
                                int conv = 0;
329
                                bool ok = false;
3034 cbradney 330
                                unicodeInputString += k->text();
331
                                conv = unicodeInputString.toInt(&ok, 16);
351 Franz 332
                                if (!ok)
333
                                {
3034 cbradney 334
                                        unicodeTextEditMode = false;
335
                                        unicodeInputCount = 0;
336
                                        unicodeInputString = "";
351 Franz 337
                                        return;
338
                                }
3034 cbradney 339
                                unicodeInputCount++;
340
                                if (unicodeInputCount == 4)
351 Franz 341
                                {
3034 cbradney 342
                                        unicodeTextEditMode = false;
343
                                        unicodeInputCount = 0;
344
                                        unicodeInputString = "";
351 Franz 345
                                        if (ok)
346
                                        {
347
                                                if (conv < 31)
348
                                                        conv = 32;
349
                                                insChars(QString(QChar(conv)));
350
                                                insert(QString(QChar(conv)));
372 Franz 351
                                                emit SideBarUp(true);
2677 fschmid 352
                                                emit SideBarUpdate();
351 Franz 353
                                                return;
354
                                        }
355
                                }
356
                                else
372 Franz 357
                                {
358
                                        emit SideBarUp(true);
2677 fschmid 359
                                        emit SideBarUpdate();
351 Franz 360
                                        return;
372 Franz 361
                                }
351 Franz 362
                        }
353 Franz 363
                        wasMod = false;
351 Franz 364
                        switch (k->key())
365
                        {
1945 craig 366
                                case Key_Escape:
367
                                        k->ignore();
368
                                        break;
353 Franz 369
                                case Key_Shift:
370
                                case Key_Control:
371
                                case Key_Alt:
372
                                        wasMod = true;
373
                                        break;
351 Franz 374
                                case Key_F12:
3034 cbradney 375
                                        unicodeTextEditMode = true;
376
                                        unicodeInputCount = 0;
377
                                        unicodeInputString = "";
351 Franz 378
                                        return;
379
                                        break;
380
                                case Key_Delete:
381
                                        if (!hasSelectedText())
382
                                        {
383
                                                ChList *chars = StyledText.at(p);
384
                                                if (i < static_cast<int>(chars->count()))
385
                                                        chars->remove(i);
386
                                                else
387
                                                {
388
                                                        if (p < static_cast<int>(StyledText.count()-1))
389
                                                        {
390
                                                                struct PtiSmall *hg;
391
                                                                ChList *chars2 = StyledText.at(p+1);
392
                                                                int a = static_cast<int>(chars2->count());
393
                                                                if (a > 0)
394
                                                                {
395
                                                                        int ca;
396
                                                                        if (chars->count() > 0)
397
                                                                                ca = chars->at(0)->cab;
398
                                                                        else
1065 cbradney 399
                                                                                ca = currentParaStyle;
351 Franz 400
                                                                        for (int s = 0; s < a; ++s)
401
                                                                        {
402
                                                                                hg = chars2->take(0);
403
                                                                                hg->cab = ca;
404
                                                                                chars->append(hg);
405
                                                                        }
406
                                                                }
407
                                                                StyledText.remove(p+1);
373 Franz 408
                                                                ParagStyles.remove(ParagStyles.at(p+1));
351 Franz 409
                                                        }
410
                                                }
411
                                        }
412
                                        else
413
                                                deleteSel();
414
                                        break;
415
                                case Key_Backspace:
416
                                        if (!hasSelectedText())
417
                                        {
353 Franz 418
                                                if (p >= static_cast<int>(StyledText.count()))
419
                                                        break;
351 Franz 420
                                                ChList *chars = StyledText.at(p);
421
                                                if (i > 0)
422
                                                        chars->remove(i-1);
423
                                                else
424
                                                {
425
                                                        if (p > 0)
426
                                                        {
427
                                                                struct PtiSmall *hg;
428
                                                                ChList *chars2 = StyledText.at(p-1);
429
                                                                int a = static_cast<int>(chars->count());
430
                                                                if (a > 0)
431
                                                                {
432
                                                                        int ca;
433
                                                                        if (chars2->count() > 0)
434
                                                                                ca = chars2->at(0)->cab;
435
                                                                        else
436
                                                                                ca = chars->at(0)->cab;
437
                                                                        for (int s = 0; s < a; ++s)
438
                                                                        {
439
                                                                                hg = chars->take(0);
440
                                                                                hg->cab = ca;
441
                                                                                chars2->append(hg);
442
                                                                        }
443
                                                                }
444
                                                                StyledText.remove(p);
373 Franz 445
                                                                ParagStyles.remove(ParagStyles.at(p));
351 Franz 446
                                                        }
447
                                                }
448
                                        }
449
                                        else
450
                                                deleteSel();
451
                                        break;
452
                                case Key_Return:
453
                                case Key_Enter:
454
                                        {
455
                                                if (hasSelectedText())
456
                                                        deleteSel();
457
                                                ChList *chars;
458
                                                chars = new ChList;
459
                                                chars->setAutoDelete(true);
460
                                                chars->clear();
461
                                                if (StyledText.count() != 0)
462
                                                {
353 Franz 463
                                                        if (p >= static_cast<int>(StyledText.count()))
373 Franz 464
                                                        {
353 Franz 465
                                                                StyledText.append(chars);
1065 cbradney 466
                                                                ParagStyles.append(currentParaStyle);
373 Franz 467
                                                        }
353 Franz 468
                                                        else
469
                                                        {
351 Franz 470
                                                        ChList *chars2 = StyledText.at(p);
471
                                                        int a = static_cast<int>(chars2->count());
472
                                                        for (int s = i; s < a; ++s)
473
                                                        {
474
                                                                chars->append(chars2->take(i));
475
                                                        }
476
                                                        StyledText.insert(p+1, chars);
1065 cbradney 477
                                                        ParagStyles.insert(ParagStyles.at(p+1), currentParaStyle);
353 Franz 478
                                                        }
351 Franz 479
                                                }
480
                                                else
373 Franz 481
                                                {
351 Franz 482
                                                        StyledText.append(chars);
1065 cbradney 483
                                                        ParagStyles.append(currentParaStyle);
373 Franz 484
                                                }
351 Franz 485
                                        }
486
                                        break;
487
                                case Key_Left:
488
                                case Key_Right:
489
                                case Key_Prior:
490
                                case Key_Next:
491
                                case Key_Up:
492
                                case Key_Down:
493
                                case Key_Home:
494
                                case Key_End:
495
                                        break;
496
                                default:
2877 cbradney 497
                                        if ((!k->text().isEmpty()) && ((*doc->AllFonts)[CurrFont]->CharWidth.contains(uc[0].unicode())))
926 fschmid 498
                                        {
351 Franz 499
                                                insChars(k->text());
926 fschmid 500
                                                QTextEdit::keyPressEvent(k);
501
                                                emit SideBarUp(true);
502
                                                emit SideBarUpdate();
503
                                        }
972 fschmid 504
                                        return;
351 Franz 505
                                        break;
506
                        }
507
                        break;
508
                default:
509
                        break;
510
        }
511
        QTextEdit::keyPressEvent(k);
372 Franz 512
        emit SideBarUp(true);
513
        emit SideBarUpdate();
113 Franz 514
}
515
 
385 Franz 516
void SEditor::focusOutEvent(QFocusEvent *e)
517
{
518
        if (hasSelectedText())
519
        {
520
                getSelection(&SelParaStart, &SelCharStart, &SelParaEnd, &SelCharEnd);
521
                StoredSel = true;
522
        }
523
        else
524
                StoredSel = false;
525
        QTextEdit::focusOutEvent(e);
526
}
527
 
351 Franz 528
void SEditor::insChars(QString t)
102 Franz 529
{
376 Franz 530
        int p, i, p2, ccab;
351 Franz 531
        if (hasSelectedText())
532
                deleteSel();
357 Franz 533
        getCursorPosition(&p, &i);
351 Franz 534
        ChList *chars;
376 Franz 535
        p2 = p;
351 Franz 536
        if ((p >= static_cast<int>(StyledText.count())) || (StyledText.count() == 0))
253 Franz 537
        {
351 Franz 538
                chars = new ChList;
539
                chars->setAutoDelete(true);
540
                chars->clear();
376 Franz 541
                p2 = static_cast<int>(StyledText.count());
382 Franz 542
                StyledText.append(chars);
1065 cbradney 543
                ParagStyles.append(currentParaStyle);
351 Franz 544
        }
545
        else
546
                chars = StyledText.at(p);
376 Franz 547
        if (chars->count() != 0)
548
                ccab = chars->at(0)->cab;
549
        else
1065 cbradney 550
                ccab = currentParaStyle;
351 Franz 551
        for (uint a = 0; a < t.length(); ++a)
552
        {
376 Franz 553
                if (t[a] == QChar(13))
554
                {
555
                        ChList *chars2;
556
                        chars2 = new ChList;
557
                        chars2->setAutoDelete(true);
558
                        chars2->clear();
559
                        if (p2 >= static_cast<int>(StyledText.count()))
560
                        {
561
                                StyledText.append(chars2);
562
                                ParagStyles.append(ccab);
563
                        }
564
                        else
565
                        {
566
                                int a = static_cast<int>(chars->count());
567
                                for (int s = i; s < a; ++s)
568
                                {
569
                                        chars2->append(chars->take(i));
570
                                }
571
                                StyledText.insert(p2+1, chars2);
572
                                ParagStyles.insert(ParagStyles.at(p2+1), ccab);
573
                        }
574
                        p2++;
575
                        chars = StyledText.at(p2);
576
                        i = 0;
577
                }
578
                else
579
                {
580
                        struct PtiSmall *hg;
581
                        hg = new PtiSmall;
582
                        hg->ch = t[a];
583
                        hg->ccolor = CurrTextFill;
584
                        hg->cshade = CurrTextFillSh;
585
                        hg->cstroke = CurrTextStroke;
586
                        hg->cshade2 = CurrTextStrokeSh;
587
                        hg->cfont = CurrFont;
588
                        hg->csize = CurrFontSize;
589
                        hg->cstyle = CurrentStyle;
590
                        hg->cab = ccab;
591
                        hg->cextra = CurrTextKern;
592
                        hg->cscale = CurrTextScale;
2230 fschmid 593
                        hg->cscalev = CurrTextScaleV;
2234 fschmid 594
                        hg->cbase = CurrTextBase;
2247 fschmid 595
                        hg->cshadowx = CurrTextShadowX;
596
                        hg->cshadowy = CurrTextShadowY;
2257 fschmid 597
                        hg->coutline = CurrTextOutline;
2262 fschmid 598
                        hg->cunderpos = CurrTextUnderPos;
599
                        hg->cunderwidth =CurrTextUnderWidth;
2272 fschmid 600
                        hg->cstrikepos = CurrTextStrikePos;
601
                        hg->cstrikewidth =CurrTextStrikeWidth;
2499 fschmid 602
                        hg->cembedded = 0;
376 Franz 603
                        chars->insert(i, hg);
604
                        i++;
605
                }
351 Franz 606
        }
607
}
608
 
362 Franz 609
void SEditor::insStyledText()
610
{
611
        if (cBuffer.count() == 0)
612
                return;
613
        int p, i, p2, ccab;
614
        if (hasSelectedText())
615
                deleteSel();
616
        getCursorPosition(&p, &i);
617
        ChList *chars;
618
        p2 = p;
619
        if ((p >= static_cast<int>(StyledText.count())) || (StyledText.count() == 0))
620
        {
621
                chars = new ChList;
622
                chars->setAutoDelete(true);
623
                chars->clear();
624
                p2 = static_cast<int>(StyledText.count());
382 Franz 625
                StyledText.append(chars);
1065 cbradney 626
                ParagStyles.append(currentParaStyle);
362 Franz 627
        }
628
        else
629
                chars = StyledText.at(p);
630
        if (chars->count() != 0)
631
                ccab = chars->at(0)->cab;
632
        else
1065 cbradney 633
                ccab = currentParaStyle;
362 Franz 634
        for (uint a = 0; a < cBuffer.count()-1; ++a)
635
        {
636
                struct PtiSmall *hg;
2499 fschmid 637
                if (cBuffer.at(a)->ch == QChar(25))
638
                        continue;
362 Franz 639
                if (cBuffer.at(a)->ch == QChar(13))
640
                {
641
                        ChList *chars2;
642
                        chars2 = new ChList;
643
                        chars2->setAutoDelete(true);
644
                        chars2->clear();
645
                        if (p2 >= static_cast<int>(StyledText.count()))
373 Franz 646
                        {
362 Franz 647
                                StyledText.append(chars2);
373 Franz 648
                                ParagStyles.append(ccab);
649
                        }
362 Franz 650
                        else
651
                        {
652
                                int a = static_cast<int>(chars->count());
653
                                for (int s = i; s < a; ++s)
654
                                {
655
                                        chars2->append(chars->take(i));
656
                                }
657
                                StyledText.insert(p2+1, chars2);
373 Franz 658
                                ParagStyles.insert(ParagStyles.at(p2+1), ccab);
362 Franz 659
                        }
660
                        p2++;
661
                        chars = StyledText.at(p2);
662
                        i = 0;
663
                }
664
                else
665
                {
666
                        hg = new PtiSmall;
667
                        hg->ch = cBuffer.at(a)->ch;
668
                        hg->ccolor = cBuffer.at(a)->ccolor;
669
                        hg->cshade = cBuffer.at(a)->cshade;
670
                        hg->cstroke = cBuffer.at(a)->cstroke;
671
                        hg->cshade2 = cBuffer.at(a)->cshade2;
672
                        hg->cfont = cBuffer.at(a)->cfont;
673
                        hg->csize = cBuffer.at(a)->csize;
674
                        hg->cstyle = cBuffer.at(a)->cstyle;
675
                        hg->cab = ccab;
676
                        hg->cextra = cBuffer.at(a)->cextra;
677
                        hg->cscale = cBuffer.at(a)->cscale;
2230 fschmid 678
                        hg->cscalev = cBuffer.at(a)->cscalev;
2234 fschmid 679
                        hg->cbase = cBuffer.at(a)->cbase;
2247 fschmid 680
                        hg->cshadowx = cBuffer.at(a)->cshadowx;
681
                        hg->cshadowy = cBuffer.at(a)->cshadowy;
2257 fschmid 682
                        hg->coutline = cBuffer.at(a)->coutline;
2262 fschmid 683
                        hg->cunderpos = cBuffer.at(a)->cunderpos;
684
                        hg->cunderwidth = cBuffer.at(a)->cunderwidth;
2272 fschmid 685
                        hg->cstrikepos = cBuffer.at(a)->cstrikepos;
686
                        hg->cstrikewidth = cBuffer.at(a)->cstrikewidth;
2499 fschmid 687
                        hg->cembedded = 0;
362 Franz 688
                        chars->insert(i, hg);
689
                        i++;
690
                }
691
        }
692
}
693
 
694
void SEditor::copyStyledText()
695
{
696
        int PStart, PEnd, SelStart, SelEnd, start, end;
697
        ChList *chars;
698
        struct PtiSmall *hg;
699
        cBuffer.clear();
3382 fschmid 700
        tBuffer = "";
362 Franz 701
        getSelection(&PStart, &SelStart, &PEnd, &SelEnd);
702
        for (int pa = PStart; pa < PEnd+1; ++pa)
703
        {
704
                chars = StyledText.at(pa);
705
                if (pa == PStart)
706
                        start = SelStart;
707
                else
708
                        start = 0;
709
                if (pa == PEnd)
710
                        end = SelEnd;
711
                else
712
                        end = chars->count();
713
                for (int ca = start; ca < end; ++ca)
714
                {
715
                        hg = new PtiSmall;
716
                        hg->ch = chars->at(ca)->ch;
3382 fschmid 717
                        tBuffer += chars->at(ca)->ch;
362 Franz 718
                        hg->cfont = chars->at(ca)->cfont;
719
                        hg->csize = chars->at(ca)->csize;
720
                        hg->ccolor = chars->at(ca)->ccolor;
721
                        hg->cshade = chars->at(ca)->cshade;
722
                        hg->cstroke = chars->at(ca)->cstroke;
723
                        hg->cshade2 = chars->at(ca)->cshade2;
724
                        hg->cscale = chars->at(ca)->cscale;
2230 fschmid 725
                        hg->cscalev = chars->at(ca)->cscalev;
362 Franz 726
                        hg->cstyle = chars->at(ca)->cstyle;
727
                        hg->cab = chars->at(ca)->cab;
728
                        hg->cextra = chars->at(ca)->cextra;
2234 fschmid 729
                        hg->cbase = chars->at(ca)->cbase;
2247 fschmid 730
                        hg->cshadowx = chars->at(ca)->cshadowx;
731
                        hg->cshadowy = chars->at(ca)->cshadowy;
2257 fschmid 732
                        hg->coutline = chars->at(ca)->coutline;
2262 fschmid 733
                        hg->cunderpos = chars->at(ca)->cunderpos;
734
                        hg->cunderwidth = chars->at(ca)->cunderwidth;
2272 fschmid 735
                        hg->cstrikepos = chars->at(ca)->cstrikepos;
736
                        hg->cstrikewidth = chars->at(ca)->cstrikewidth;
2499 fschmid 737
                        hg->cembedded = 0;
362 Franz 738
                        cBuffer.append(hg);
739
                }
740
                hg = new PtiSmall;
741
                hg->ch = QChar(13);
3393 fschmid 742
                tBuffer += QChar(13);
362 Franz 743
                hg->cfont = "";
744
                hg->csize = 1;
745
                hg->ccolor = "";
746
                hg->cshade = 1;
747
                hg->cstroke = "";
748
                hg->cshade2 = 1;
2242 fschmid 749
                hg->cscale = 10;
750
                hg->cscalev = 10;
362 Franz 751
                hg->cstyle = 0;
752
                hg->cab = 0;
753
                hg->cextra = 0;
2234 fschmid 754
                hg->cbase = 0;
2247 fschmid 755
                hg->cshadowx = 50;
756
                hg->cshadowy = -50;
2257 fschmid 757
                hg->coutline = 10;
2262 fschmid 758
                hg->cunderpos = -1;
759
                hg->cunderwidth = -1;
2272 fschmid 760
                hg->cstrikepos = -1;
761
                hg->cstrikewidth = -1;
2499 fschmid 762
                hg->cembedded = 0;
362 Franz 763
                cBuffer.append(hg);
764
        }
765
}
766
 
1957 cbradney 767
void SEditor::saveItemText(PageItem *currItem)
351 Franz 768
{
769
        ChList *chars;
1957 cbradney 770
        currItem->CPos = 0;
771
        currItem->itemText.clear();
351 Franz 772
        uint c = 0;
773
        for (uint p = 0; p < StyledText.count(); ++p)
774
        {
775
                if (p != 0)
253 Franz 776
                {
351 Franz 777
                        c = StyledText.at(p-1)->count()-1;
1065 cbradney 778
                        struct ScText *hg;
779
                        hg = new ScText;
351 Franz 780
                        hg->ch = QChar(13);
392 Franz 781
                        chars = StyledText.at(p-1);
351 Franz 782
                        if (chars->count() != 0)
253 Franz 783
                        {
1789 fschmid 784
                                hg->cfont = (*doc->AllFonts)[chars->at(c)->cfont];
351 Franz 785
                                hg->csize = chars->at(c)->csize;
786
                                hg->ccolor = chars->at(c)->ccolor;
787
                                hg->cshade = chars->at(c)->cshade;
788
                                hg->cstroke = chars->at(c)->cstroke;
789
                                hg->cshade2 = chars->at(c)->cshade2;
790
                                hg->cscale = chars->at(c)->cscale;
2230 fschmid 791
                                hg->cscalev = chars->at(c)->cscalev;
351 Franz 792
                                hg->cstyle = chars->at(c)->cstyle;
793
                                hg->cextra = chars->at(c)->cextra;
2234 fschmid 794
                                hg->cbase = chars->at(c)->cbase;
2247 fschmid 795
                                hg->cshadowx = chars->at(c)->cshadowx;
796
                                hg->cshadowy = chars->at(c)->cshadowy;
2257 fschmid 797
                                hg->coutline = chars->at(c)->coutline;
2262 fschmid 798
                                hg->cunderpos = chars->at(c)->cunderpos;
799
                                hg->cunderwidth = chars->at(c)->cunderwidth;
2272 fschmid 800
                                hg->cstrikepos = chars->at(c)->cstrikepos;
801
                                hg->cstrikewidth = chars->at(c)->cstrikewidth;
253 Franz 802
                        }
351 Franz 803
                        else
804
                        {
805
                                hg->ccolor = CurrTextFill;
806
                                hg->cshade = CurrTextFillSh;
807
                                hg->cstroke = CurrTextStroke;
808
                                hg->cshade2 = CurrTextStrokeSh;
1789 fschmid 809
                                hg->cfont = (*doc->AllFonts)[CurrFont];
351 Franz 810
                                hg->csize = CurrFontSize;
811
                                hg->cstyle = CurrentStyle;
812
                                hg->cextra = CurrTextKern;
813
                                hg->cscale = CurrTextScale;
2230 fschmid 814
                                hg->cscalev = CurrTextScaleV;
2234 fschmid 815
                                hg->cbase = CurrTextBase;
2247 fschmid 816
                                hg->cshadowx = CurrTextShadowX;
817
                                hg->cshadowy = CurrTextShadowY;
2257 fschmid 818
                                hg->coutline = CurrTextOutline;
2262 fschmid 819
                                hg->cunderpos = CurrTextUnderPos;
820
                                hg->cunderwidth = CurrTextUnderWidth;
2272 fschmid 821
                                hg->cstrikepos = CurrTextStrikePos;
822
                                hg->cstrikewidth = CurrTextStrikeWidth;
2877 cbradney 823
                                if (!doc->docParagraphStyles[ParagStyles[p-1]].Font.isEmpty())
351 Franz 824
                                {
1789 fschmid 825
                                        hg->cfont = (*doc->AllFonts)[doc->docParagraphStyles[ParagStyles[p-1]].Font];
1065 cbradney 826
                                        hg->csize = doc->docParagraphStyles[ParagStyles[p-1]].FontSize;
351 Franz 827
                                }
828
                        }
392 Franz 829
                        hg->cab = ParagStyles[p-1];
351 Franz 830
                        hg->cselect = false;
831
                        hg->xp = 0;
832
                        hg->yp = 0;
833
                        hg->PRot = 0;
834
                        hg->PtransX = 0;
835
                        hg->PtransY = 0;
2434 fschmid 836
                        hg->cembedded = 0;
1957 cbradney 837
                        currItem->itemText.append(hg);
253 Franz 838
                }
351 Franz 839
                chars = StyledText.at(p);
840
                for (uint c = 0; c < chars->count(); ++c)
841
                {
1065 cbradney 842
                        struct ScText *hg;
843
                        hg = new ScText;
351 Franz 844
                        hg->ch = chars->at(c)->ch;
1789 fschmid 845
                        hg->cfont = (*doc->AllFonts)[chars->at(c)->cfont];
351 Franz 846
                        hg->csize = chars->at(c)->csize;
847
                        hg->ccolor = chars->at(c)->ccolor;
848
                        hg->cshade = chars->at(c)->cshade;
849
                        hg->cstroke = chars->at(c)->cstroke;
850
                        hg->cshade2 = chars->at(c)->cshade2;
851
                        hg->cscale = chars->at(c)->cscale;
2230 fschmid 852
                        hg->cscalev = chars->at(c)->cscalev;
351 Franz 853
                        hg->cstyle = chars->at(c)->cstyle;
854
                        hg->cab = chars->at(c)->cab;
855
                        hg->cextra = chars->at(c)->cextra;
2234 fschmid 856
                        hg->cbase = chars->at(c)->cbase;
2247 fschmid 857
                        hg->cshadowx = chars->at(c)->cshadowx;
858
                        hg->cshadowy = chars->at(c)->cshadowy;
2257 fschmid 859
                        hg->coutline = chars->at(c)->coutline;
2262 fschmid 860
                        hg->cunderpos = chars->at(c)->cunderpos;
861
                        hg->cunderwidth = chars->at(c)->cunderwidth;
2272 fschmid 862
                        hg->cstrikepos = chars->at(c)->cstrikepos;
863
                        hg->cstrikewidth = chars->at(c)->cstrikewidth;
351 Franz 864
                        hg->cselect = false;
865
                        hg->xp = 0;
866
                        hg->yp = 0;
867
                        hg->PRot = 0;
868
                        hg->PtransX = 0;
869
                        hg->PtransY = 0;
2499 fschmid 870
                        if (hg->ch == QChar(25))
871
                        {
872
                                hg->cembedded = chars->at(c)->cembedded;
873
                                currItem->Doc->FrameItems.append(hg->cembedded);
2955 fschmid 874
                                if (hg->cembedded->Groups.count() != 0)
875
                                {
876
                                        for (uint ga=0; ga<FrameItems.count(); ++ga)
877
                                        {
878
                                                if (FrameItems.at(ga)->Groups.count() != 0)
879
                                                {
880
                                                        if (FrameItems.at(ga)->Groups.top() == hg->cembedded->Groups.top())
881
                                                        {
882
                                                                if (FrameItems.at(ga)->ItemNr != hg->cembedded->ItemNr)
883
                                                                {
884
                                                                        if (currItem->Doc->FrameItems.find(FrameItems.at(ga)) == -1)
885
                                                                                currItem->Doc->FrameItems.append(FrameItems.at(ga));
886
                                                                }
887
                                                        }
888
                                                }
889
                                        }
890
                                }
2499 fschmid 891
                        }
892
                        else
893
                                hg->cembedded = 0;
1957 cbradney 894
                        currItem->itemText.append(hg);
351 Franz 895
                }
253 Franz 896
        }
351 Franz 897
}
898
 
899
void SEditor::setAlign(int style)
900
{
901
        int align = 0;
902
        if (style > 4)
1065 cbradney 903
                align = doc->docParagraphStyles[style].textAlignment;
351 Franz 904
        else
905
                align = style;
906
        switch (align)
167 Franz 907
        {
351 Franz 908
        case 0:
909
                setAlignment(Qt::AlignLeft);
910
                break;
911
        case 1:
912
                setAlignment(Qt::AlignCenter);
913
                break;
914
        case 2:
915
                setAlignment(Qt::AlignRight);
916
                break;
917
        case 3:
918
        case 4:
919
                setAlignment(Qt::AlignJustify);
920
                break;
921
        default:
922
                break;
167 Franz 923
        }
351 Franz 924
}
925
 
1957 cbradney 926
void SEditor::loadItemText(PageItem *currItem)
351 Franz 927
{
1915 fschmid 928
        setUpdatesEnabled(false);
351 Franz 929
        struct PtiSmall *hg;
930
        QString Text = "";
795 fschmid 931
        int Csty = 0;
351 Franz 932
        int Ali = 0;
2500 fschmid 933
        clear();
1957 cbradney 934
        PageItem *nextItem = currItem;
351 Franz 935
        StyledText.clear();
373 Franz 936
        ParagStyles.clear();
2499 fschmid 937
        FrameItems.clear();
351 Franz 938
        ChList *chars;
939
        chars = new ChList;
940
        chars->setAutoDelete(true);
941
        chars->clear();
1957 cbradney 942
        while (nextItem != 0)
167 Franz 943
        {
1957 cbradney 944
                if (nextItem->BackBox != 0)
945
                        nextItem = nextItem->BackBox;
351 Franz 946
                else
947
                        break;
167 Franz 948
        }
1957 cbradney 949
        if (nextItem != 0)
253 Franz 950
        {
1957 cbradney 951
                if (nextItem->itemText.count() != 0)
351 Franz 952
                {
1957 cbradney 953
                        Csty = nextItem->itemText.at(0)->cstyle;
954
                        Ali = nextItem->itemText.at(0)->cab;
351 Franz 955
                }
956
                else
957
                {
2407 fschmid 958
                        Csty = currItem->TxTStyle;
1957 cbradney 959
                        Ali = currItem->textAlignment;
351 Franz 960
                }
961
                setAlign(Ali);
962
                setStyle(Csty);
253 Franz 963
        }
1957 cbradney 964
        while (nextItem != 0)
351 Franz 965
        {
1957 cbradney 966
                for (uint a = 0; a < nextItem->itemText.count(); ++a)
351 Franz 967
                {
1957 cbradney 968
                        if (nextItem->itemText.at(a)->ch == QChar(13))
351 Franz 969
                        {
970
                                StyledText.append(chars);
1957 cbradney 971
                                ParagStyles.append(nextItem->itemText.at(a)->cab);
972
                                Ali = nextItem->itemText.at(a)->cab;
351 Franz 973
                                chars = new ChList;
974
                                chars->setAutoDelete(true);
975
                                chars->clear();
976
                                Text += "\n";
977
                        }
978
                        else
979
                        {
980
                                hg = new PtiSmall;
1957 cbradney 981
                                hg->ch = nextItem->itemText.at(a)->ch;
3544 avox 982
                                hg->cfont = nextItem->itemText.at(a)->cfont->scName();
1957 cbradney 983
                                hg->csize = nextItem->itemText.at(a)->csize;
984
                                hg->ccolor = nextItem->itemText.at(a)->ccolor;
985
                                hg->cshade = nextItem->itemText.at(a)->cshade;
986
                                hg->cstroke = nextItem->itemText.at(a)->cstroke;
987
                                hg->cshade2 = nextItem->itemText.at(a)->cshade2;
988
                                hg->cscale = nextItem->itemText.at(a)->cscale;
2230 fschmid 989
                                hg->cscalev = nextItem->itemText.at(a)->cscalev;
1957 cbradney 990
                                hg->cstyle = nextItem->itemText.at(a)->cstyle;
991
                                hg->cab = nextItem->itemText.at(a)->cab;
992
                                hg->cextra = nextItem->itemText.at(a)->cextra;
2234 fschmid 993
                                hg->cbase = nextItem->itemText.at(a)->cbase;
2247 fschmid 994
                                hg->cshadowx = nextItem->itemText.at(a)->cshadowx;
995
                                hg->cshadowy = nextItem->itemText.at(a)->cshadowy;
2257 fschmid 996
                                hg->coutline = nextItem->itemText.at(a)->coutline;
2262 fschmid 997
                                hg->cunderpos = nextItem->itemText.at(a)->cunderpos;
998
                                hg->cunderwidth = nextItem->itemText.at(a)->cunderwidth;
2272 fschmid 999
                                hg->cstrikepos = nextItem->itemText.at(a)->cstrikepos;
1000
                                hg->cstrikewidth = nextItem->itemText.at(a)->cstrikewidth;
2499 fschmid 1001
                                if (hg->ch == QChar(25))
1002
                                {
1003
                                        hg->cembedded = nextItem->itemText.at(a)->cembedded;
1004
                                        FrameItems.append(hg->cembedded);
2955 fschmid 1005
                                        if (hg->cembedded->Groups.count() != 0)
1006
                                        {
1007
                                                for (uint ga=0; ga < doc->FrameItems.count(); ++ga)
1008
                                                {
1009
                                                        if (doc->FrameItems.at(ga)->Groups.count() != 0)
1010
                                                        {
1011
                                                                if (doc->FrameItems.at(ga)->Groups.top() == hg->cembedded->Groups.top())
1012
                                                                {
1013
                                                                        if (doc->FrameItems.at(ga)->ItemNr != hg->cembedded->ItemNr)
1014
                                                                        {
1015
                                                                                if (FrameItems.find(doc->FrameItems.at(ga)) == -1)
1016
                                                                                        FrameItems.append(doc->FrameItems.at(ga));
1017
                                                                        }
1018
                                                                }
1019
                                                        }
1020
                                                }
1021
                                        }
2499 fschmid 1022
                                        setAlign(Ali);
1023
                                        setStyle(Csty);
1024
                                        insert(Text);
1025
                                        setFarbe(true);
1026
                                        insert("@");
1027
                                        setFarbe(false);
1028
                                        Text = "";
1029
                                        chars->append(hg);
1030
                                        continue;
1031
                                }
2407 fschmid 1032
                                if ((Ali == hg->cab) && (Csty == hg->cstyle))
351 Franz 1033
                                {
2319 cbradney 1034
                                        if (hg->ch == QChar(ScApp->scrActions["specialPageNumber"]->actionInt()))
351 Franz 1035
                                        {
1036
                                                setAlign(Ali);
1037
                                                setStyle(Csty);
1038
                                                insert(Text);
2407 fschmid 1039
                                                setFarbe(true);
351 Franz 1040
                                                insert("#");
2407 fschmid 1041
                                                setFarbe(false);
351 Franz 1042
                                                Text = "";
1043
                                                chars->append(hg);
1044
                                                continue;
1045
                                        }
2319 cbradney 1046
                                        else if (hg->ch == QChar(ScApp->scrActions["specialNonBreakingSpace"]->actionInt()))
2318 fschmid 1047
                                        {
1048
                                                setAlign(Ali);
1049
                                                setStyle(Csty);
1050
                                                insert(Text);
2407 fschmid 1051
                                                setFarbe(true);
2318 fschmid 1052
                                                insert("_");
2407 fschmid 1053
                                                setFarbe(false);
2318 fschmid 1054
                                                Text = "";
1055
                                                chars->append(hg);
1056
                                                continue;
1057
                                        }
2352 fschmid 1058
                                        else if (hg->ch == QChar(ScApp->scrActions["specialFrameBreak"]->actionInt()))
1059
                                        {
1060
                                                setAlign(Ali);
1061
                                                setStyle(Csty);
1062
                                                insert(Text);
2407 fschmid 1063
                                                setFarbe(true);
2352 fschmid 1064
                                                insert("|");
2407 fschmid 1065
                                                setFarbe(false);
2352 fschmid 1066
                                                Text = "";
1067
                                                chars->append(hg);
1068
                                                continue;
1069
                                        }
2389 fschmid 1070
                                        else if (hg->ch == QChar(ScApp->scrActions["specialColumnBreak"]->actionInt()))
1071
                                        {
1072
                                                setAlign(Ali);
1073
                                                setStyle(Csty);
1074
                                                insert(Text);
2407 fschmid 1075
                                                setFarbe(true);
2389 fschmid 1076
                                                insert("^");
2407 fschmid 1077
                                                setFarbe(false);
2389 fschmid 1078
                                                Text = "";
1079
                                                chars->append(hg);
1080
                                                continue;
1081
                                        }
2407 fschmid 1082
                                        else if (hg->ch == QChar(ScApp->scrActions["specialNonBreakingHyphen"]->actionInt()))
1083
                                        {
1084
                                                setAlign(Ali);
1085
                                                setStyle(Csty);
1086
                                                insert(Text);
1087
                                                setFarbe(true);
1088
                                                insert("=");
1089
                                                setFarbe(false);
1090
                                                Text = "";
1091
                                                chars->append(hg);
1092
                                                continue;
1093
                                        }
2352 fschmid 1094
                                        else if (hg->ch == QChar(ScApp->scrActions["specialNewLine"]->actionInt()))
1095
                                        {
1096
                                                setAlign(Ali);
1097
                                                setStyle(Csty);
1098
                                                insert(Text);
2407 fschmid 1099
                                                setFarbe(true);
2352 fschmid 1100
                                                insert("*");
2407 fschmid 1101
                                                setFarbe(false);
2352 fschmid 1102
                                                Text = "";
1103
                                                chars->append(hg);
1104
                                                continue;
1105
                                        }
351 Franz 1106
                                        else
1107
                                                Text += hg->ch;
1108
                                }
1109
                                else
1110
                                {
1111
                                        setAlign(Ali);
1112
                                        setStyle(Csty);
1113
                                        insert(Text);
1114
                                        Text = hg->ch;
1115
                                        Csty = hg->cstyle;
1116
                                        Ali = hg->cab;
1117
                                }
1118
                                chars->append(hg);
1119
                        }
1120
                }
1957 cbradney 1121
                nextItem = nextItem->NextBox;
351 Franz 1122
        }
1123
        setAlign(Ali);
1124
        setStyle(Csty);
1125
        insert(Text);
876 fschmid 1126
        StyledText.append(chars);
1127
        ParagStyles.append(Ali);
351 Franz 1128
        if (StyledText.count() != 0)
1129
                emit setProps(0, 0);
1915 fschmid 1130
        setUpdatesEnabled(true);
351 Franz 1131
        setCursorPosition(0, 0);
102 Franz 1132
}
1133
 
1957 cbradney 1134
void SEditor::loadText(QString tx, PageItem *currItem)
102 Franz 1135
{
1915 fschmid 1136
        setUpdatesEnabled(false);
351 Franz 1137
        struct PtiSmall *hg;
1138
        QString Text = "";
1139
        StyledText.clear();
373 Franz 1140
        ParagStyles.clear();
351 Franz 1141
        ChList *chars;
1142
        chars = new ChList;
1143
        chars->setAutoDelete(true);
1144
        chars->clear();
1957 cbradney 1145
        setAlign(currItem->textAlignment);
1146
        setStyle(currItem->TxTStyle);
351 Franz 1147
        for (uint a = 0; a < tx.length(); ++a)
1148
        {
1149
                if (tx[a] == QChar(13))
1150
                {
1151
                        StyledText.append(chars);
1957 cbradney 1152
                        ParagStyles.append(currItem->textAlignment);
351 Franz 1153
                        chars = new ChList;
1154
                        chars->setAutoDelete(true);
1155
                        chars->clear();
1156
                        Text += "\n";
1157
                }
1158
                else
1159
                {
1160
                        hg = new PtiSmall;
1161
                        hg->ch = tx[a];
1957 cbradney 1162
                        hg->cfont = currItem->IFont;
1163
                        hg->csize = currItem->ISize;
1164
                        hg->ccolor = currItem->TxtFill;
1165
                        hg->cshade = currItem->ShTxtFill;
1166
                        hg->cstroke = currItem->TxtStroke;
1167
                        hg->cshade2 = currItem->ShTxtStroke;
1168
                        hg->cscale = currItem->TxtScale;
2230 fschmid 1169
                        hg->cscalev = currItem->TxtScaleV;
2234 fschmid 1170
                        hg->cbase = currItem->TxtBase;
2247 fschmid 1171
                        hg->cshadowx = currItem->TxtShadowX;
1172
                        hg->cshadowy = currItem->TxtShadowY;
2257 fschmid 1173
                        hg->coutline = currItem->TxtOutline;
2262 fschmid 1174
                        hg->cunderpos = currItem->TxtUnderPos;
1175
                        hg->cunderwidth = currItem->TxtUnderWidth;
2272 fschmid 1176
                        hg->cstrikepos = currItem->TxtStrikePos;
1177
                        hg->cstrikewidth = currItem->TxtStrikeWidth;
1957 cbradney 1178
                        hg->cstyle = currItem->TxTStyle;
1179
                        hg->cab = currItem->textAlignment;
351 Franz 1180
                        hg->cextra = 0;
2499 fschmid 1181
                        hg->cembedded = 0;
351 Franz 1182
                        Text += hg->ch;
1183
                        chars->append(hg);
1184
                }
1185
        }
1186
        insert(Text);
876 fschmid 1187
        StyledText.append(chars);
1957 cbradney 1188
        ParagStyles.append(currItem->textAlignment);
351 Franz 1189
        if (StyledText.count() != 0)
1190
                emit setProps(0, 0);
1915 fschmid 1191
        setUpdatesEnabled(true);
351 Franz 1192
        setCursorPosition(0, 0);
102 Franz 1193
}
1194
 
366 Franz 1195
void SEditor::updateAll()
1196
{
1197
        if (StyledText.count() == 0)
1198
                return;
1915 fschmid 1199
        setUpdatesEnabled(false);
366 Franz 1200
        int p, i;
1201
        getCursorPosition(&p, &i);
1202
        clear();
1203
        struct PtiSmall *hg;
1204
        QString Text = "";
1205
        int Csty;
1206
        int Ali = 0;
1207
        ChList *chars = StyledText.at(0);
1208
        if (chars->count() != 0)
1209
        {
1210
                Csty = chars->at(0)->cstyle;
1211
                Ali = chars->at(0)->cab;
1212
        }
1213
        else
1214
        {
1215
                Csty = CurrentStyle;
1065 cbradney 1216
                Ali = currentParaStyle;
366 Franz 1217
        }
1218
        setAlign(Ali);
1219
        setStyle(Csty);
1220
        for (uint pa = 0; pa < StyledText.count(); ++pa)
1221
        {
1222
                chars = StyledText.at(pa);
1223
                if ((chars->count() == 0) && (pa < StyledText.count()-1))
1224
                {
1225
                        Text += "\n";
1226
                        continue;
1227
                }
1228
                for (uint a = 0; a < chars->count(); ++a)
1229
                {
1230
                        hg = chars->at(a);
2499 fschmid 1231
                        if (hg->ch == QChar(25))
1232
                        {
1233
                                setAlign(Ali);
1234
                                setStyle(Csty);
1235
                                insert(Text);
1236
                                setFarbe(true);
1237
                                insert("@");
1238
                                setFarbe(false);
1239
                                Text = "";
1240
                                continue;
1241
                        }
2407 fschmid 1242
                        if ((Ali == hg->cab) && (Csty == hg->cstyle))
366 Franz 1243
                        {
2352 fschmid 1244
                                if (hg->ch == QChar(ScApp->scrActions["specialPageNumber"]->actionInt()))
366 Franz 1245
                                {
1246
                                        setAlign(Ali);
1247
                                        setStyle(Csty);
1248
                                        insert(Text);
2407 fschmid 1249
                                        setFarbe(true);
366 Franz 1250
                                        insert("#");
2407 fschmid 1251
                                        setFarbe(false);
366 Franz 1252
                                        Text = "";
1253
                                        continue;
1254
                                }
2352 fschmid 1255
                                else if (hg->ch == QChar(ScApp->scrActions["specialNonBreakingSpace"]->actionInt()))
1256
                                {
1257
                                        setAlign(Ali);
1258
                                        setStyle(Csty);
1259
                                        insert(Text);
2407 fschmid 1260
                                        setFarbe(true);
2352 fschmid 1261
                                        insert("_");
2407 fschmid 1262
                                        setFarbe(false);
2352 fschmid 1263
                                        Text = "";
1264
                                        continue;
1265
                                }
1266
                                else if (hg->ch == QChar(ScApp->scrActions["specialFrameBreak"]->actionInt()))
1267
                                {
1268
                                        setAlign(Ali);
1269
                                        setStyle(Csty);
1270
                                        insert(Text);
2407 fschmid 1271
                                        setFarbe(true);
2352 fschmid 1272
                                        insert("|");
2407 fschmid 1273
                                        setFarbe(false);
2352 fschmid 1274
                                        Text = "";
1275
                                        continue;
1276
                                }
2389 fschmid 1277
                                else if (hg->ch == QChar(ScApp->scrActions["specialColumnBreak"]->actionInt()))
1278
                                {
1279
                                        setAlign(Ali);
1280
                                        setStyle(Csty);
1281
                                        insert(Text);
2407 fschmid 1282
                                        setFarbe(true);
2389 fschmid 1283
                                        insert("^");
2407 fschmid 1284
                                        setFarbe(false);
2389 fschmid 1285
                                        Text = "";
1286
                                        chars->append(hg);
1287
                                        continue;
1288
                                }
2407 fschmid 1289
                                else if (hg->ch == QChar(ScApp->scrActions["specialNonBreakingHyphen"]->actionInt()))
1290
                                {
1291
                                        setAlign(Ali);
1292
                                        setStyle(Csty);
1293
                                        insert(Text);
1294
                                        setFarbe(true);
1295
                                        insert("=");
1296
                                        setFarbe(false);
1297
                                        Text = "";
1298
                                        chars->append(hg);
1299
                                        continue;
1300
                                }
2352 fschmid 1301
                                else if (hg->ch == QChar(ScApp->scrActions["specialNewLine"]->actionInt()))
1302
                                {
1303
                                        setAlign(Ali);
1304
                                        setStyle(Csty);
1305
                                        insert(Text);
2407 fschmid 1306
                                        setFarbe(true);
2352 fschmid 1307
                                        insert("*");
2407 fschmid 1308
                                        setFarbe(false);
2352 fschmid 1309
                                        Text = "";
1310
                                        continue;
1311
                                }
366 Franz 1312
                                else
1313
                                        Text += hg->ch;
1314
                        }
1315
                        else
1316
                        {
1317
                                setAlign(Ali);
1318
                                setStyle(Csty);
1319
                                insert(Text);
1320
                                Text = hg->ch;
1321
                                Csty = hg->cstyle;
1322
                                Ali = hg->cab;
1323
                        }
1324
                }
1325
                if (pa < StyledText.count()-1)
1326
                        Text += "\n";
1327
        }
1328
        setAlign(Ali);
1329
        setStyle(Csty);
1330
        insert(Text);
1915 fschmid 1331
        setUpdatesEnabled(true);
3608 cbradney 1332
        //CB Removed to fix 2083 setCursorPosition(p, i);
366 Franz 1333
}
1334
 
351 Franz 1335
void SEditor::updateFromChars(int pa)
102 Franz 1336
{
351 Franz 1337
        ChList *chars = StyledText.at(pa);
1338
        if (chars->count() == 0)
1339
                return;
1915 fschmid 1340
        setUpdatesEnabled(false);
351 Franz 1341
        int SelStart = 0;
1342
        int SelEnd = 0;
1343
        int p, i;
1344
        getCursorPosition(&p, &i);
1345
        removeSelection();
1346
        int Csty = chars->at(0)->cstyle;
1347
        for (uint a = 0; a < chars->count(); ++a)
167 Franz 1348
        {
2407 fschmid 1349
                if (Csty == chars->at(a)->cstyle)
351 Franz 1350
                        SelEnd++;
1351
                else
167 Franz 1352
                {
351 Franz 1353
                        setSelection(pa, SelStart, pa, SelEnd);
1354
                        setStyle(Csty);
1355
                        removeSelection();
1356
                        Csty = chars->at(a)->cstyle;
362 Franz 1357
                        SelStart = SelEnd;
351 Franz 1358
                        SelEnd++;
167 Franz 1359
                }
351 Franz 1360
        }
1361
        setSelection(pa, SelStart, pa, SelEnd);
1362
        setStyle(Csty);
1363
        removeSelection();
362 Franz 1364
        setAlign(chars->at(0)->cab);
1915 fschmid 1365
        setUpdatesEnabled(true);
351 Franz 1366
        setCursorPosition(p, i);
1367
}
1368
 
1369
/* updates the internal PtiSmall structure, to be useable for all members of the PtiSmall struct
1370
   there is a code as first parameter to indicate which member should be updated.
1371
 
1372
        1 = Stroke Colour and Stroke Shade
1373
        2 = Font
1374
        3 = Font Size
1375
        4 = Character Style
1376
        5 = Character Scaling
1377
        6 = Kerning
2230 fschmid 1378
        7 = Character Scaling Vertical
2257 fschmid 1379
        8 = Character Shadow
1380
        9 = Character Outline
2262 fschmid 1381
        10 = Character Underline
2272 fschmid 1382
        11 = Character Strikethru
351 Franz 1383
 */
1384
void SEditor::updateSel(int code, struct PtiSmall *hg)
1385
{
1386
        int PStart, PEnd, SelStart, SelEnd, start, end;
1387
        ChList *chars;
385 Franz 1388
        if (StoredSel)
1389
        {
1390
                setSelection(SelParaStart, SelCharStart, SelParaEnd, SelCharEnd);
1391
                StoredSel = false;
1392
        }
351 Franz 1393
        getSelection(&PStart, &SelStart, &PEnd, &SelEnd);
1394
        for (int pa = PStart; pa < PEnd+1; ++pa)
1395
        {
1396
                chars = StyledText.at(pa);
1397
                if (pa == PStart)
1398
                        start = SelStart;
1399
                else
1400
                        start = 0;
1401
                if (pa == PEnd)
1402
                        end = SelEnd;
1403
                else
1404
                        end = chars->count();
1405
                for (int ca = start; ca < end; ++ca)
167 Franz 1406
                {
351 Franz 1407
                        switch (code)
167 Franz 1408
                        {
351 Franz 1409
                                case 0:
1410
                                        chars->at(ca)->ccolor = hg->ccolor;
1411
                                        chars->at(ca)->cshade = hg->cshade;
1412
                                        break;
217 Franz 1413
                                case 1:
351 Franz 1414
                                        chars->at(ca)->cstroke = hg->cstroke;
1415
                                        chars->at(ca)->cshade2 = hg->cshade2;
111 Franz 1416
                                        break;
217 Franz 1417
                                case 2:
351 Franz 1418
                                        chars->at(ca)->cfont = hg->cfont;
217 Franz 1419
                                        break;
1420
                                case 3:
351 Franz 1421
                                        chars->at(ca)->csize = hg->csize;
111 Franz 1422
                                        break;
351 Franz 1423
                                case 4:
2188 fschmid 1424
                                        chars->at(ca)->cstyle &= ~1919;
351 Franz 1425
                                        chars->at(ca)->cstyle |= hg->cstyle;
102 Franz 1426
                                        break;
351 Franz 1427
                                case 5:
1428
                                        chars->at(ca)->cscale = hg->cscale;
102 Franz 1429
                                        break;
351 Franz 1430
                                case 6:
1431
                                        chars->at(ca)->cextra = hg->cextra;
102 Franz 1432
                                        break;
2230 fschmid 1433
                                case 7:
1434
                                        chars->at(ca)->cscalev = hg->cscalev;
1435
                                        break;
2254 fschmid 1436
                                case 8:
1437
                                        chars->at(ca)->cshadowx = hg->cshadowx;
1438
                                        chars->at(ca)->cshadowy = hg->cshadowy;
1439
                                        break;
2257 fschmid 1440
                                case 9:
1441
                                        chars->at(ca)->coutline = hg->coutline;
1442
                                        break;
2262 fschmid 1443
                                case 10:
1444
                                        chars->at(ca)->cunderpos = hg->cunderpos;
1445
                                        chars->at(ca)->cunderwidth = hg->cunderwidth;
1446
                                        break;
2272 fschmid 1447
                                case 11:
1448
                                        chars->at(ca)->cstrikepos = hg->cstrikepos;
1449
                                        chars->at(ca)->cstrikewidth = hg->cstrikewidth;
1450
                                        break;
351 Franz 1451
                                default:
1452
                                        break;
167 Franz 1453
                        }
102 Franz 1454
                }
167 Franz 1455
        }
102 Franz 1456
}
1457
 
351 Franz 1458
void SEditor::deleteSel()
102 Franz 1459
{
351 Franz 1460
        int PStart, PEnd, SelStart, SelEnd, start, end;
800 fschmid 1461
        ChList *chars = NULL;
351 Franz 1462
        getSelection(&PStart, &SelStart, &PEnd, &SelEnd);
1463
        if (PStart == PEnd)
1464
        {
1465
                chars = StyledText.at(PStart);
1466
                for (int a = 0; a < SelEnd-SelStart; ++a)
1467
                {
1468
                        chars->remove(SelStart);
1469
                }
1470
        }
1471
        else
1472
        {
1473
                for (int pa = PStart; pa < PEnd+1; ++pa)
1474
                {
367 Franz 1475
                        bool noChar = false;
1476
                        if (pa >= static_cast<int>(StyledText.count()))
1477
                                noChar = true;
1478
                        else
1479
                                chars = StyledText.at(pa);
351 Franz 1480
                        if (pa == PStart)
1481
                                start = SelStart;
1482
                        else
1483
                                start = 0;
1484
                        if (pa == PEnd)
1485
                                end = SelEnd;
1486
                        else
1487
                        {
367 Franz 1488
                                if (noChar)
1489
                                        end = 0;
1490
                                else
1491
                                        end = chars->count();
351 Franz 1492
                        }
367 Franz 1493
                        if (!noChar)
1494
                        {
1495
                                for (int ca = 0; ca < end-start; ++ca)
1496
                                {
1497
                                        chars->remove(start);
1498
                                }
1499
                        }
351 Franz 1500
                }
1501
                if (PEnd-PStart > 1)
1502
                {
1503
                        for (int pa2 = 0; pa2 < PEnd - PStart - 1; ++pa2)
1504
                        {
367 Franz 1505
                                if (PStart+1 < static_cast<int>(StyledText.count()))
373 Franz 1506
                                {
367 Franz 1507
                                        StyledText.remove(PStart+1);
373 Franz 1508
                                        ParagStyles.remove(ParagStyles.at(PStart+1));
1509
                                }
351 Franz 1510
                        }
1511
                }
367 Franz 1512
                if (PStart+1 < static_cast<int>(StyledText.count()))
351 Franz 1513
                {
367 Franz 1514
                        struct PtiSmall *hg;
1515
                        ChList *chars2 = StyledText.at(PStart+1);
1516
                        chars = StyledText.at(PStart);
1517
                        int a = static_cast<int>(chars2->count());
1518
                        if (a > 0)
351 Franz 1519
                        {
367 Franz 1520
                                int ca;
1521
                                if (chars->count() > 0)
1522
                                        ca = chars->at(0)->cab;
1523
                                else
1065 cbradney 1524
                                        ca = currentParaStyle;
367 Franz 1525
                                for (int s = 0; s < a; ++s)
1526
                                {
1527
                                        hg = chars2->take(0);
1528
                                        hg->cab = ca;
1529
                                        chars->append(hg);
1530
                                }
351 Franz 1531
                        }
367 Franz 1532
                        StyledText.remove(PStart+1);
373 Franz 1533
                        ParagStyles.remove(ParagStyles.at(PStart+1));
351 Franz 1534
                }
1535
        }
1536
        setCursorPosition(PStart, SelStart);
102 Franz 1537
}
1538
 
351 Franz 1539
void SEditor::setStyle(int Csty)
102 Franz 1540
{
351 Franz 1541
        if (Csty & 8)
1542
                setUnderline(true);
1543
        else
1544
                setUnderline(false);
374 Franz 1545
        QFont f = currentFont();
1546
        if (Csty & 16)
1547
                f.setStrikeOut(true);
1548
        else
1549
                f.setStrikeOut(false);
1550
        setCurrentFont(f);
351 Franz 1551
        if (Csty & 1)
1552
                setVerticalAlignment(AlignSuperScript);
1553
        else if (Csty & 2)
1554
                setVerticalAlignment(AlignSubScript);
1555
        else
1556
                setVerticalAlignment(AlignNormal);
1557
}
1558
 
2407 fschmid 1559
void SEditor::setFarbe(bool marker)
351 Franz 1560
{
1561
        QColor tmp;
2407 fschmid 1562
        if (marker)
1563
                tmp = QColor(red);
351 Franz 1564
        else
2407 fschmid 1565
                tmp = QColor(black);
351 Franz 1566
        setColor(tmp);
1567
}
103 Franz 1568
 
362 Franz 1569
void SEditor::copy()
1570
{
372 Franz 1571
        emit SideBarUp(false);
2877 cbradney 1572
        if ((hasSelectedText()) && (!selectedText().isEmpty()))
362 Franz 1573
        {
376 Franz 1574
                disconnect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(ClipChange()));
399 Franz 1575
                disconnect(QApplication::clipboard(), SIGNAL(selectionChanged()), this, SLOT(SelClipChange()));
362 Franz 1576
                copyStyledText();
376 Franz 1577
                QApplication::clipboard()->setText(tBuffer, QClipboard::Clipboard);
1578
                ClipData = 1;
1579
                connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(ClipChange()));
399 Franz 1580
                connect(QApplication::clipboard(), SIGNAL(selectionChanged()), this, SLOT(SelClipChange()));
376 Franz 1581
                emit PasteAvail();
362 Franz 1582
        }
372 Franz 1583
        emit SideBarUp(true);
362 Franz 1584
}
1585
 
351 Franz 1586
void SEditor::cut()
1587
{
362 Franz 1588
        copy();
372 Franz 1589
        emit SideBarUp(false);
362 Franz 1590
        if (hasSelectedText())
1591
        {
1592
                deleteSel();
1593
                removeSelectedText();
1594
        }
372 Franz 1595
        emit SideBarUp(true);
1596
        emit SideBarUpdate();
351 Franz 1597
}
1598
 
1599
void SEditor::paste()
1600
{
372 Franz 1601
        emit SideBarUp(false);
3605 cbradney 1602
        int currentPara, currentCharPos;
399 Franz 1603
        QString data = "";
3605 cbradney 1604
        int newParaCount, lengthLastPara;
1605
        bool inserted=false;
1606
        getCursorPosition(&currentPara, &currentCharPos);
399 Franz 1607
        if (ClipData == 1)
1608
                insStyledText();
1609
        else
376 Franz 1610
        {
399 Franz 1611
                QString data = QApplication::clipboard()->text(QClipboard::Selection);
1612
                if (data.isNull())
1613
                        data = QApplication::clipboard()->text(QClipboard::Clipboard);
376 Franz 1614
                if (!data.isNull())
1615
                {
1616
                        data.replace(QRegExp("\r"), "");
3605 cbradney 1617
                        newParaCount=data.contains("\n");
1618
                        lengthLastPara=data.length()-data.findRev("\n");
376 Franz 1619
                        data.replace(QRegExp("\n"), QChar(13));
3605 cbradney 1620
                        inserted=true;
376 Franz 1621
                        insChars(data);
399 Franz 1622
                        ClipData = 2;
1623
                        emit PasteAvail();
376 Franz 1624
                }
399 Franz 1625
                else
1626
                {
1627
                        emit SideBarUp(true);
1628
                        return;
1629
                }
376 Franz 1630
        }
374 Franz 1631
        updateAll();
3605 cbradney 1632
        if (inserted)
1633
                setCursorPosition(currentPara+newParaCount,(newParaCount==0?currentCharPos:0)+lengthLastPara-1);
1915 fschmid 1634
        sync();
1635
        repaintContents();
372 Franz 1636
        emit SideBarUp(true);
1637
        emit SideBarUpdate();
351 Franz 1638
}
1639
 
374 Franz 1640
QPopupMenu* SEditor::createPopupMenu(const QPoint & pos)
1641
{
1642
        QPopupMenu *p = QTextEdit::createPopupMenu(pos);
1643
        p->removeItemAt(0);
1644
        p->removeItemAt(0);
1645
        p->removeItemAt(0);
1646
        p->removeItemAt(3);
1647
        return p;
1648
}
1649
 
399 Franz 1650
void SEditor::SelClipChange()
1651
{
1652
        ClipData = 3;
1653
        emit PasteAvail();
1654
}
1655
 
376 Franz 1656
void SEditor::ClipChange()
1657
{
1658
        ClipData = 2;
1659
        emit PasteAvail();
1660
}
1661
 
351 Franz 1662
/* Toolbar for Fill Colour */
352 Franz 1663
SToolBColorF::SToolBColorF(QMainWindow* parent, ScribusDoc *doc) : QToolBar( tr("Fill Color Settings"), parent)
351 Franz 1664
{
1665
        FillIcon = new QLabel( "", this, "FillIcon" );
1666
        FillIcon->setPixmap(loadIcon("fill.png"));
1667
        FillIcon->setScaledContents( false );
3680 cbradney 1668
        TxFill = new ScComboBox( false, this, "TxFill" );
351 Franz 1669
        PM2 = new ShadeButton(this);
2494 cbradney 1670
        setCurrentDocument(doc);
2504 cbradney 1671
        //TxFill->listBox()->setMinimumWidth(TxFill->listBox()->maxItemWidth()+24);
351 Franz 1672
        connect(TxFill, SIGNAL(activated(int)), this, SLOT(newShadeHandler()));
1673
        connect(PM2, SIGNAL(clicked()), this, SLOT(newShadeHandler()));
3767 subik 1674
 
2505 cbradney 1675
        languageChange();
351 Franz 1676
}
1677
 
2505 cbradney 1678
void SToolBColorF::languageChange()
1679
{
1680
        QToolTip::remove(TxFill);
1681
        QToolTip::remove(PM2);
1682
        QToolTip::add(TxFill, tr( "Color of text fill" ));
1683
        QToolTip::add(PM2, tr( "Saturation of color of text fill" ));
1684
}
1685
 
2494 cbradney 1686
void SToolBColorF::setCurrentDocument(ScribusDoc *doc)
1687
{
1688
        TxFill->clear();
1689
        TxFill->insertItem( tr("None"));
1690
        if (doc!=NULL)
1691
        {
3333 avox 1692
                QPixmap * pm;
2494 cbradney 1693
                for (ColorList::Iterator it = doc->PageColors.begin(); it != doc->PageColors.end(); ++it)
1694
                {
3333 avox 1695
                        pm = getSmallPixmap(doc->PageColors[it.key()].getRawRGBColor());
1696
                        TxFill->insertItem(*pm, it.key());
2494 cbradney 1697
                }
1698
        }
2504 cbradney 1699
        resize(minimumSizeHint());
2494 cbradney 1700
}
1701
 
351 Franz 1702
void SToolBColorF::SetColor(int c)
1703
{
1704
        disconnect(TxFill, SIGNAL(activated(int)), this, SLOT(newShadeHandler()));
1705
        TxFill->setCurrentItem(c);
1706
        connect(TxFill, SIGNAL(activated(int)), this, SLOT(newShadeHandler()));
1707
}
1708
 
1709
void SToolBColorF::SetShade(int s)
1710
{
1711
        disconnect(PM2, SIGNAL(clicked()), this, SLOT(newShadeHandler()));
1712
        PM2->setValue(s);
1713
        connect(PM2, SIGNAL(clicked()), this, SLOT(newShadeHandler()));
1714
}
1715
 
1716
void SToolBColorF::newShadeHandler()
1717
{
1718
        emit NewColor(TxFill->currentItem(), PM2->getValue());
1719
}
1720
 
1721
/* Toolbar for Stroke Colour */
352 Franz 1722
SToolBColorS::SToolBColorS(QMainWindow* parent, ScribusDoc *doc) : QToolBar( tr("Stroke Color Settings"), parent)
351 Franz 1723
{
1724
        StrokeIcon = new QLabel( "", this, "StrokeIcon" );
1725
        StrokeIcon->setPixmap(loadIcon("Stiftalt.xpm"));
1726
        StrokeIcon->setScaledContents( false );
3680 cbradney 1727
        TxStroke = new ScComboBox( false, this, "TxStroke" );
351 Franz 1728
        PM1 = new ShadeButton(this);
2494 cbradney 1729
        setCurrentDocument(doc);
2504 cbradney 1730
        //TxStroke->listBox()->setMinimumWidth(TxStroke->listBox()->maxItemWidth()+24);
351 Franz 1731
        connect(TxStroke, SIGNAL(activated(int)), this, SLOT(newShadeHandler()));
1732
        connect(PM1, SIGNAL(clicked()), this, SLOT(newShadeHandler()));
3767 subik 1733
 
2505 cbradney 1734
        languageChange();
351 Franz 1735
}
1736
 
2505 cbradney 1737
void SToolBColorS::languageChange()
1738
{
1739
        QToolTip::remove(TxStroke);
1740
        QToolTip::remove(PM1);
1741
        QToolTip::add(TxStroke, tr("Color of text stroke"));
1742
        QToolTip::add(PM1, tr("Saturation of color of text stroke"));
1743
}
1744
 
2494 cbradney 1745
void SToolBColorS::setCurrentDocument(ScribusDoc *doc)
1746
{
1747
        TxStroke->clear();
1748
        TxStroke->insertItem( tr("None"));
1749
        if (doc!=NULL)
1750
        {
3333 avox 1751
                QPixmap * pm;
2494 cbradney 1752
                for (ColorList::Iterator it = doc->PageColors.begin(); it != doc->PageColors.end(); ++it)
1753
                {
3333 avox 1754
                        pm = getSmallPixmap(doc->PageColors[it.key()].getRawRGBColor());
1755
                        TxStroke->insertItem(*pm, it.key());
2494 cbradney 1756
                }
1757
        }
2504 cbradney 1758
        resize(minimumSizeHint());
2494 cbradney 1759
}
1760
 
351 Franz 1761
void SToolBColorS::SetColor(int c)
1762
{
1763
        disconnect(TxStroke, SIGNAL(activated(int)), this, SLOT(newShadeHandler()));
1764
        TxStroke->setCurrentItem(c);
1765
        connect(TxStroke, SIGNAL(activated(int)), this, SLOT(newShadeHandler()));
1766
}
1767
 
1768
void SToolBColorS::SetShade(int s)
1769
{
1770
        disconnect(PM1, SIGNAL(clicked()), this, SLOT(newShadeHandler()));
1771
        PM1->setValue(s);
1772
        connect(PM1, SIGNAL(clicked()), this, SLOT(newShadeHandler()));
1773
}
1774
 
1775
void SToolBColorS::newShadeHandler()
1776
{
1777
        emit NewColor(TxStroke->currentItem(), PM1->getValue());
1778
}
1779
 
1780
/* Toolbar for Character Style Settings */
352 Franz 1781
SToolBStyle::SToolBStyle(QMainWindow* parent) : QToolBar( tr("Character Settings"), parent)
351 Franz 1782
{
1783
        SeStyle = new StyleSelect(this);
2500 fschmid 1784
        trackingLabel = new QLabel( this, "trackingLabel" );
1785
        trackingLabel->setText("");
1786
        trackingLabel->setPixmap(loadIcon("textkern.png"));
351 Franz 1787
        Extra = new MSpinBox( this, 1 );
1788
        Extra->setValues( -300, 300, 10, 0);
2382 fschmid 1789
        Extra->setSuffix( tr( " %" ) );
3767 subik 1790
 
716 cbradney 1791
        connect(SeStyle, SIGNAL(State(int)), this, SIGNAL(newStyle(int)));
351 Franz 1792
        connect(Extra, SIGNAL(valueChanged(int)), this, SLOT(newKernHandler()));
2254 fschmid 1793
        connect(SeStyle->ShadowVal->Xoffset, SIGNAL(valueChanged(int)), this, SLOT(newShadowHandler()));
1794
        connect(SeStyle->ShadowVal->Yoffset, SIGNAL(valueChanged(int)), this, SLOT(newShadowHandler()));
2257 fschmid 1795
        connect(SeStyle->OutlineVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newOutlineHandler()));
2262 fschmid 1796
        connect(SeStyle->UnderlineVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newUnderlineHandler()));
1797
        connect(SeStyle->UnderlineVal->LPos, SIGNAL(valueChanged(int)), this, SLOT(newUnderlineHandler()));
2272 fschmid 1798
        connect(SeStyle->StrikeVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newStrikeHandler()));
1799
        connect(SeStyle->StrikeVal->LPos, SIGNAL(valueChanged(int)), this, SLOT(newStrikeHandler()));
3767 subik 1800
 
2505 cbradney 1801
        languageChange();
351 Franz 1802
}
1803
 
2505 cbradney 1804
void SToolBStyle::languageChange()
1805
{
1806
        QToolTip::remove(Extra);
1807
        QToolTip::add(Extra, tr( "Manual Tracking" ));
1808
}
1809
 
2272 fschmid 1810
void SToolBStyle::newStrikeHandler()
1811
{
1812
        int x = qRound(SeStyle->StrikeVal->LPos->value() * 10.0);
1813
        int y = qRound(SeStyle->StrikeVal->LWidth->value() * 10.0);
1814
        emit newUnderline(x, y);
1815
}
1816
 
2262 fschmid 1817
void SToolBStyle::newUnderlineHandler()
1818
{
1819
        int x = qRound(SeStyle->UnderlineVal->LPos->value() * 10.0);
1820
        int y = qRound(SeStyle->UnderlineVal->LWidth->value() * 10.0);
1821
        emit newUnderline(x, y);
1822
}
1823
 
2257 fschmid 1824
void SToolBStyle::newOutlineHandler()
1825
{
1826
        int x = qRound(SeStyle->OutlineVal->LWidth->value() * 10.0);
1827
        emit newOutline(x);
1828
}
1829
 
2254 fschmid 1830
void SToolBStyle::newShadowHandler()
1831
{
1832
        int x = qRound(SeStyle->ShadowVal->Xoffset->value() * 10.0);
1833
        int y = qRound(SeStyle->ShadowVal->Yoffset->value() * 10.0);
1834
        emit NewShadow(x, y);
1835
}
1836
 
351 Franz 1837
void SToolBStyle::newKernHandler()
1838
{
2382 fschmid 1839
        emit NewKern(qRound(Extra->value() * 10.0));
351 Franz 1840
}
1841
 
2257 fschmid 1842
void SToolBStyle::setOutline(int x)
1843
{
1844
        disconnect(SeStyle->OutlineVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newOutlineHandler()));
1845
        SeStyle->OutlineVal->LWidth->setValue(x / 10.0);
1846
        connect(SeStyle->OutlineVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newOutlineHandler()));
1847
}
1848
 
2272 fschmid 1849
void SToolBStyle::setStrike(int p, int w)
1850
{
1851
        disconnect(SeStyle->StrikeVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newStrikeHandler()));
1852
        disconnect(SeStyle->StrikeVal->LPos, SIGNAL(valueChanged(int)), this, SLOT(newStrikeHandler()));
1853
        SeStyle->StrikeVal->LWidth->setValue(w / 10.0);
1854
        SeStyle->StrikeVal->LPos->setValue(p / 10.0);
1855
        connect(SeStyle->StrikeVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newStrikeHandler()));
1856
        connect(SeStyle->StrikeVal->LPos, SIGNAL(valueChanged(int)), this, SLOT(newStrikeHandler()));
1857
}
1858
 
2262 fschmid 1859
void SToolBStyle::setUnderline(int p, int w)
1860
{
1861
        disconnect(SeStyle->UnderlineVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newUnderlineHandler()));
1862
        disconnect(SeStyle->UnderlineVal->LPos, SIGNAL(valueChanged(int)), this, SLOT(newUnderlineHandler()));
1863
        SeStyle->UnderlineVal->LWidth->setValue(w / 10.0);
1864
        SeStyle->UnderlineVal->LPos->setValue(p / 10.0);
1865
        connect(SeStyle->UnderlineVal->LWidth, SIGNAL(valueChanged(int)), this, SLOT(newUnderlineHandler()));
1866
        connect(SeStyle->UnderlineVal->LPos, SIGNAL(valueChanged(int)), this, SLOT(newUnderlineHandler()));
1867
}
1868
 
2254 fschmid 1869
void SToolBStyle::SetShadow(int x, int y)
1870
{
1871
        disconnect(SeStyle->ShadowVal->Xoffset, SIGNAL(valueChanged(int)), this, SLOT(newShadowHandler()));
1872
        disconnect(SeStyle->ShadowVal->Yoffset, SIGNAL(valueChanged(int)), this, SLOT(newShadowHandler()));
1873
        SeStyle->ShadowVal->Xoffset->setValue(x / 10.0);
1874
        SeStyle->ShadowVal->Yoffset->setValue(y / 10.0);
1875
        connect(SeStyle->ShadowVal->Xoffset, SIGNAL(valueChanged(int)), this, SLOT(newShadowHandler()));
1876
        connect(SeStyle->ShadowVal->Yoffset, SIGNAL(valueChanged(int)), this, SLOT(newShadowHandler()));
1877
}
1878
 
351 Franz 1879
void SToolBStyle::SetStyle(int s)
1880
{
716 cbradney 1881
        disconnect(SeStyle, SIGNAL(State(int)), this, SIGNAL(newStyle(int)));
351 Franz 1882
        SeStyle->setStyle(s);
716 cbradney 1883
        connect(SeStyle, SIGNAL(State(int)), this, SIGNAL(newStyle(int)));
351 Franz 1884
}
1885
 
2382 fschmid 1886
void SToolBStyle::SetKern(int k)
351 Franz 1887
{
1888
        disconnect(Extra, SIGNAL(valueChanged(int)), this, SLOT(newKernHandler()));
2382 fschmid 1889
        Extra->setValue(k / 10.0);
351 Franz 1890
        connect(Extra, SIGNAL(valueChanged(int)), this, SLOT(newKernHandler()));
1891
}
1892
 
1893
/* Toolbar for alignment of Paragraphs */
352 Franz 1894
SToolBAlign::SToolBAlign(QMainWindow* parent) : QToolBar( tr("Style Settings"), parent)
351 Franz 1895
{
1896
        GroupAlign = new AlignSelect(this);
1897
        Spal = new Spalette(this);
716 cbradney 1898
        connect(Spal, SIGNAL(newStyle(int)), this, SLOT(newStyleHandler(int )));
351 Franz 1899
        connect(GroupAlign, SIGNAL(State(int)), this, SIGNAL(NewAlign(int )));
3767 subik 1900
 
2505 cbradney 1901
        languageChange();
351 Franz 1902
}
1903
 
2505 cbradney 1904
void SToolBAlign::languageChange()
1905
{
1906
        QToolTip::remove(Spal);
1907
        QToolTip::add(Spal, tr("Style of current paragraph"));
1908
}
1909
 
351 Franz 1910
void SToolBAlign::newStyleHandler(int s)
1911
{
1912
        if (s != 0)
1913
                GroupAlign->setEnabled(false);
1914
        else
1915
                GroupAlign->setEnabled(true);
716 cbradney 1916
        emit newStyle(s);
351 Franz 1917
}
1918
 
1919
void SToolBAlign::SetAlign(int s)
1920
{
716 cbradney 1921
        disconnect(Spal, SIGNAL(newStyle(int)), this, SLOT(newStyleHandler(int )));
351 Franz 1922
        disconnect(GroupAlign, SIGNAL(State(int)), this, SIGNAL(NewAlign(int )));
1923
        if (s < 5)
1924
        {
1925
                GroupAlign->setEnabled(true);
1926
                GroupAlign->setStyle(s);
1927
        }
1928
        else
1929
                GroupAlign->setEnabled(false);
1930
        Spal->setFormat(s);
1931
        connect(GroupAlign, SIGNAL(State(int)), this, SIGNAL(NewAlign(int )));
716 cbradney 1932
        connect(Spal, SIGNAL(newStyle(int)), this, SLOT(newStyleHandler(int )));
351 Franz 1933
}
1934
 
1935
/* Toolbar for Font related Settings */
352 Franz 1936
SToolBFont::SToolBFont(QMainWindow* parent) : QToolBar( tr("Font Settings"), parent)
351 Franz 1937
{
2834 cbradney 1938
        Fonts = new FontCombo(this);
351 Franz 1939
        Fonts->setMaximumSize(190, 30);
2247 fschmid 1940
        Size = new MSpinBox( 0.5, 2048, this, 1 );
351 Franz 1941
        Size->setPrefix( "" );
1942
        Size->setSuffix( tr( " pt" ) );
2230 fschmid 1943
        ScaleTxt = new QLabel("", this, "ScaleTxt" );
1944
        ScaleTxt->setPixmap(loadIcon("textscaleh.png"));
2242 fschmid 1945
        ChScale = new MSpinBox( 10, 400,  this, 1 );
351 Franz 1946
        ChScale->setValue( 100 );
1947
        ChScale->setSuffix( tr( " %" ) );
2230 fschmid 1948
        ScaleTxtV = new QLabel("", this, "ScaleTxtV" );
1949
        ScaleTxtV->setPixmap(loadIcon("textscalev.png"));
2242 fschmid 1950
        ChScaleV = new MSpinBox( 10, 400, this, 1 );
2230 fschmid 1951
        ChScaleV->setValue( 100 );
1952
        ChScaleV->setSuffix( tr( " %" ) );
2505 cbradney 1953
 
351 Franz 1954
        connect(ChScale, SIGNAL(valueChanged(int)), this, SIGNAL(NewScale(int)));
2230 fschmid 1955
        connect(ChScaleV, SIGNAL(valueChanged(int)), this, SIGNAL(NewScaleV(int)));
351 Franz 1956
        connect(Fonts, SIGNAL(activated(const QString &)), this, SIGNAL(NewFont(const QString &)));
1957
        connect(Size, SIGNAL(valueChanged(int)), this, SLOT(newSizeHandler()));
1958
}
1959
 
2505 cbradney 1960
void SToolBFont::languageChange()
1961
{
1962
        QToolTip::remove(Fonts);
1963
        QToolTip::remove(Size);
1964
        QToolTip::remove(ChScale);
1965
        QToolTip::remove(ChScaleV);
1966
        QToolTip::add(Fonts, tr("Font of selected text"));
1967
        QToolTip::add(Size, tr("Font Size"));
1968
        QToolTip::add(ChScale, tr("Scaling width of characters"));
1969
        QToolTip::add(ChScaleV, tr("Scaling height of characters"));
1970
}
1971
 
351 Franz 1972
void SToolBFont::SetFont(QString f)
1973
{
1974
        disconnect(Fonts, SIGNAL(activated(const QString &)), this, SIGNAL(NewFont(const QString &)));
1975
        Fonts->setCurrentText(f);
1976
        connect(Fonts, SIGNAL(activated(const QString &)), this, SIGNAL(NewFont(const QString &)));
1977
}
1978
 
1979
void SToolBFont::SetSize(double s)
1980
{
1981
        disconnect(Size, SIGNAL(valueChanged(int)), this, SLOT(newSizeHandler()));
2242 fschmid 1982
        Size->setValue(s / 10.0);
351 Franz 1983
        connect(Size, SIGNAL(valueChanged(int)), this, SLOT(newSizeHandler()));
1984
}
1985
 
1986
void SToolBFont::SetScale(int s)
1987
{
1988
        disconnect(ChScale, SIGNAL(valueChanged(int)), this, SIGNAL(NewScale(int)));
2242 fschmid 1989
        ChScale->setValue(s / 10.0);
351 Franz 1990
        connect(ChScale, SIGNAL(valueChanged(int)), this, SIGNAL(NewScale(int)));
1991
}
1992
 
2230 fschmid 1993
void SToolBFont::SetScaleV(int s)
1994
{
1995
        disconnect(ChScaleV, SIGNAL(valueChanged(int)), this, SIGNAL(NewScaleV(int)));
2242 fschmid 1996
        ChScaleV->setValue(s / 10.0);
2230 fschmid 1997
        connect(ChScaleV, SIGNAL(valueChanged(int)), this, SIGNAL(NewScaleV(int)));
1998
}
1999
 
351 Franz 2000
void SToolBFont::newSizeHandler()
2001
{
2002
        emit NewSize(Size->value());
2003
}