Subversion Repositories Scribus

Rev

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