Subversion Repositories Scribus

Rev

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

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