Subversion Repositories Scribus

Rev

Rev 20501 | 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
/***************************************************************************
12939 jghali 8
                          storyeditor.h    -  description
102 Franz 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
 ***************************************************************************/
23
 
12939 jghali 24
#ifndef STORYEDITOR_H
25
#define STORYEDITOR_H
102 Franz 26
 
10628 fschmid 27
#include <QTextEdit>
10220 cbradney 28
#include <QAction>
29
#include <QCheckBox>
30
#include <QCloseEvent>
31
#include <QEvent>
32
#include <QFocusEvent>
33
#include <QHideEvent>
34
#include <QKeyEvent>
35
#include <QLabel>
36
#include <QLayout>
37
#include <QList>
10172 cbradney 38
#include <QMainWindow>
10220 cbradney 39
#include <QMap>
40
#include <QMenu>
41
#include <QMenuBar>
42
#include <QMouseEvent>
43
#include <QPaintEvent>
20941 jghali 44
#include <QPair>
8501 cbradney 45
#include <QPixmap>
10220 cbradney 46
#include <QPointer>
8501 cbradney 47
#include <QShowEvent>
10220 cbradney 48
#include <QSpinBox>
49
#include <QSplitter>
20941 jghali 50
#include <QStack>
10220 cbradney 51
#include <QStatusBar>
52
#include <QStringList>
53
#include <QToolBar>
54
#include <QToolButton>
55
#include <QVariant>
9525 fschmid 56
#include <QWidgetAction>
10220 cbradney 57
 
10859 cbradney 58
class QEvent;
10180 fschmid 59
class QGridLayout;
60
class QHBoxLayout;
61
class QFrame;
2969 craig 62
 
63
#include "scribusapi.h"
7951 cbradney 64
#include "text/storytext.h"
102 Franz 65
 
10601 mrdocs 66
class PageItem;
4550 cbradney 67
class MenuManager;
8602 cbradney 68
class ScrSpinBox;
7990 cbradney 69
class ParaStyleComboBox;
3252 craig 70
class StyleSelect;
71
class AlignSelect;
72
class FontCombo;
4550 cbradney 73
class ScrAction;
3252 craig 74
class ShadeButton;
75
class PrefsManager;
3868 subik 76
class PrefsContext;
4552 cbradney 77
class StoryEditor;
4689 mrdocs 78
class ColorCombo;
8185 subik 79
class CharSelect;
3252 craig 80
 
10628 fschmid 81
class SCRIBUS_API SEditor : public QTextEdit
102 Franz 82
{
83
        Q_OBJECT
84
 
85
public:
4552 cbradney 86
        SEditor (QWidget* parent, ScribusDoc *docc, StoryEditor* parentSE);
102 Franz 87
        ~SEditor() {};
2494 cbradney 88
        void setCurrentDocument(ScribusDoc *docc);
16958 jghali 89
        void setAlign(int align);
1957 cbradney 90
        void saveItemText(PageItem *currItem);
91
        void loadItemText(PageItem *currItem);
92
        void loadText(QString tx, PageItem *currItem);
366 Franz 93
        void updateAll();
351 Franz 94
        void updateFromChars(int p);
6900 avox 95
        void updateSel(const CharStyle& style);
96
        void updateSel(const ParagraphStyle& style);
351 Franz 97
        void deleteSel();
16958 jghali 98
        void setEffects(int effects);
11333 jghali 99
        void setColor(bool marker);
351 Franz 100
 
11501 jghali 101
        void insertChars(const QString& text);
102
        void insertChars(const QString& styledText, const QString& editText);
103
 
6900 avox 104
        StoryText StyledText;
9856 fschmid 105
        QList<PageItem*> FrameItems;
351 Franz 106
        ScribusDoc* doc;
3034 cbradney 107
        bool unicodeTextEditMode;
353 Franz 108
        bool wasMod;
371 Franz 109
        bool ready;
3034 cbradney 110
        int unicodeInputCount;
16806 jghali 111
        StyleFlag CurrentEffects;
6900 avox 112
        QString currentParaStyle;
113
        int CurrAlign;
9920 fschmid 114
        double CurrFontSize;
115
        double CurrTextFillSh;
116
        double CurrTextStrokeSh;
117
        double CurrTextScale;
118
        double CurrTextScaleV;
119
        double CurrTextBase;
120
        double CurrTextShadowX;
121
        double CurrTextShadowY;
122
        double CurrTextOutline;
123
        double CurrTextUnderPos;
124
        double CurrTextUnderWidth;
125
        double CurrTextStrikePos;
126
        double CurrTextStrikeWidth;
127
        double CurrTextKern;
351 Franz 128
        QString CurrTextStroke;
129
        QString CurrTextFill;
4881 cbradney 130
        QString prevFont;
351 Franz 131
        QString CurrFont;
3034 cbradney 132
        QString unicodeInputString;
20941 jghali 133
 
134
        QStack< QPair<int, int> > SelStack;
135
 
385 Franz 136
        int SelCharStart;
137
        int SelCharEnd;
17256 fschmid 138
        int SuspendContentsChange;      // input method
102 Franz 139
 
374 Franz 140
protected:
11501 jghali 141
 
142
        void insertCharsInternal(const QString& t);
143
        void insertCharsInternal(const QString& t, int position);
144
 
145
        void insertStyledText(const StoryText& styledText);
146
        void insertStyledText(const StoryText& styledText, int position);
147
 
12098 jghali 148
        void insertUpdate(int position, int len);
149
 
16958 jghali 150
        void setAlign(QTextCursor& tCursor, int style);
151
        void setEffects(QTextCursor& tCursor, int effects);
152
 
11501 jghali 153
        int  blockContentsChangeHook;
374 Franz 154
        void keyPressEvent(QKeyEvent *k);
8638 cbradney 155
        void inputMethodEvent(QInputMethodEvent *event);
385 Franz 156
        void focusOutEvent(QFocusEvent *e);
7395 fschmid 157
        void focusInEvent(QFocusEvent *e);
10643 fschmid 158
        void scrollContentsBy(int dx, int dy);
11360 jghali 159
        virtual bool canInsertFromMimeData( const QMimeData * source ) const;
160
        virtual QMimeData * createMimeDataFromSelection () const;
161
        virtual void insertFromMimeData ( const QMimeData * source );
10585 fschmid 162
//      Q3PopupMenu* createPopupMenu(const QPoint & pos);
4552 cbradney 163
        StoryEditor* parentStoryEditor;
374 Franz 164
 
11501 jghali 165
protected slots:
17485 craig 166
        void handleContentsChange(int position, int charsRemoved, int charsAdded);
11501 jghali 167
 
17485 craig 168
 
351 Franz 169
public slots:
170
        void cut();
363 Franz 171
        void copy();
351 Franz 172
        void paste();
376 Franz 173
        void ClipChange();
399 Franz 174
        void SelClipChange();
351 Franz 175
 
102 Franz 176
signals:
351 Franz 177
        void setProps(int, int);
10965 fschmid 178
        void SideBarUp(bool);
179
        void SideBarUpdate();
376 Franz 180
        void PasteAvail();
10643 fschmid 181
        void contentsMoving(int, int);
102 Franz 182
};
10965 fschmid 183
 
2969 craig 184
class SCRIBUS_API SideBar : public QLabel
371 Franz 185
{
186
        Q_OBJECT
187
 
1893 subik 188
public:
371 Franz 189
        SideBar(QWidget *pa);
190
        ~SideBar() {};
191
        int offs;
374 Franz 192
        int CurrentPar;
371 Franz 193
        SEditor *editor;
9525 fschmid 194
        QMenu *pmen;
195
        QWidgetAction* paraStyleAct;
372 Franz 196
        bool noUpdt;
373 Franz 197
        bool inRep;
371 Franz 198
 
374 Franz 199
protected:
200
        void paintEvent(QPaintEvent *e);
201
        void mouseReleaseEvent(QMouseEvent *m);
202
 
203
signals:
9067 avox 204
        void ChangeStyle(int, const QString&);
1893 subik 205
        //! signal raised when user ask for style manager
15447 craig 206
        //void sigEditStyles();
374 Franz 207
 
371 Franz 208
public slots:
9067 avox 209
        void setPStyle(const QString&);
371 Franz 210
        void doMove(int x, int y);
211
        void doRepaint();
372 Franz 212
        void setRepaint(bool r);
1893 subik 213
        //! slot raising style manager
15447 craig 214
        //void editStyles();
371 Franz 215
};
10965 fschmid 216
 
10172 cbradney 217
class SCRIBUS_API SToolBColorF : public QToolBar
102 Franz 218
{
219
        Q_OBJECT
220
 
1893 subik 221
public:
10172 cbradney 222
        SToolBColorF(QMainWindow* parent, ScribusDoc *doc);
351 Franz 223
        ~SToolBColorF() {};
10859 cbradney 224
 
225
        virtual void changeEvent(QEvent *e);
226
 
2494 cbradney 227
        void setCurrentDocument(ScribusDoc *doc);
351 Franz 228
        QLabel* FillIcon;
4689 mrdocs 229
        ColorCombo* TxFill;
351 Franz 230
        ShadeButton *PM2;
10172 cbradney 231
        QAction* pm2Action;
232
        QAction* txFillAction;
233
        QAction* fillIconAction;
124 Franz 234
 
351 Franz 235
public slots:
236
        void SetColor(int c);
9920 fschmid 237
        void SetShade(double s);
351 Franz 238
        void newShadeHandler();
2505 cbradney 239
        void languageChange();
351 Franz 240
 
124 Franz 241
signals:
351 Franz 242
        void NewColor(int, int);
102 Franz 243
};
244
 
10172 cbradney 245
class SCRIBUS_API SToolBColorS : public QToolBar
102 Franz 246
{
247
        Q_OBJECT
248
 
1893 subik 249
public:
10172 cbradney 250
        SToolBColorS(QMainWindow* parent, ScribusDoc *doc);
351 Franz 251
        ~SToolBColorS() {};
10859 cbradney 252
 
253
        virtual void changeEvent(QEvent *e);
254
 
2494 cbradney 255
        void setCurrentDocument(ScribusDoc *doc);
351 Franz 256
        QLabel* StrokeIcon;
4689 mrdocs 257
        ColorCombo* TxStroke;
351 Franz 258
        ShadeButton *PM1;
10172 cbradney 259
        QAction* strokeIconAction;
260
        QAction* txStrokeAction;
261
        QAction* pm1Action;
351 Franz 262
 
10172 cbradney 263
 
351 Franz 264
public slots:
265
        void SetColor(int c);
9920 fschmid 266
        void SetShade(double s);
351 Franz 267
        void newShadeHandler();
2505 cbradney 268
        void languageChange();
351 Franz 269
 
270
signals:
271
        void NewColor(int, int);
272
};
273
 
10172 cbradney 274
class SCRIBUS_API SToolBStyle : public QToolBar
351 Franz 275
{
276
        Q_OBJECT
277
 
1893 subik 278
public:
10172 cbradney 279
        SToolBStyle(QMainWindow* parent);
351 Franz 280
        ~SToolBStyle() {};
10859 cbradney 281
 
282
        virtual void changeEvent(QEvent *e);
283
 
351 Franz 284
        StyleSelect* SeStyle;
1845 cbradney 285
        QLabel* trackingLabel;
8602 cbradney 286
        ScrSpinBox* Extra;
10172 cbradney 287
        QAction* seStyleAction;
288
        QAction* trackingLabelAction;
289
        QAction* extraAction;
351 Franz 290
 
291
public slots:
2272 fschmid 292
        void newStrikeHandler();
2262 fschmid 293
        void newUnderlineHandler();
2257 fschmid 294
        void newOutlineHandler();
2254 fschmid 295
        void newShadowHandler();
351 Franz 296
        void newKernHandler();
9920 fschmid 297
        void SetShadow(double x, double y);
298
        void setStrike(double p, double w);
299
        void setUnderline(double p, double w);
300
        void setOutline(double o);
351 Franz 301
        void SetStyle(int s);
9920 fschmid 302
        void SetKern(double k);
2505 cbradney 303
        void languageChange();
351 Franz 304
 
305
signals:
9920 fschmid 306
        void NewKern(double);
307
        void NewShadow(double, double);
308
        void newOutline(double);
309
        void newStrike(double, double);
310
        void newUnderline(double, double);
716 cbradney 311
        void newStyle(int);
351 Franz 312
};
313
 
10172 cbradney 314
class SCRIBUS_API SToolBAlign : public QToolBar
351 Franz 315
{
316
        Q_OBJECT
317
 
1893 subik 318
public:
10172 cbradney 319
        SToolBAlign(QMainWindow* parent);
351 Franz 320
        ~SToolBAlign() {};
10859 cbradney 321
 
322
        virtual void changeEvent(QEvent *e);
323
 
351 Franz 324
        AlignSelect* GroupAlign;
7990 cbradney 325
        ParaStyleComboBox *paraStyleCombo;
10172 cbradney 326
        QAction* groupAlignAction;
327
        QAction* paraStyleComboAction;
351 Franz 328
 
329
public slots:
330
        void SetAlign(int s);
10643 fschmid 331
        void SetParaStyle(QString s);
2505 cbradney 332
        void languageChange();
351 Franz 333
 
334
signals:
6900 avox 335
        void newAlign(int);
9067 avox 336
        void newParaStyle(const QString&);
351 Franz 337
};
338
 
10172 cbradney 339
class SCRIBUS_API SToolBFont : public QToolBar
351 Franz 340
{
341
        Q_OBJECT
342
 
1893 subik 343
public:
10172 cbradney 344
        SToolBFont(QMainWindow* parent);
351 Franz 345
        ~SToolBFont() {};
10859 cbradney 346
 
347
        virtual void changeEvent(QEvent *e);
348
 
351 Franz 349
        FontCombo* Fonts;
8602 cbradney 350
        ScrSpinBox* ChScale;
351
        ScrSpinBox* ChScaleV;
10172 cbradney 352
        QAction* fontsAction;
353
        QAction* chScaleAction;
354
        QAction* chScaleVAction;
351 Franz 355
 
356
public slots:
357
        void SetFont(QString f);
358
        void SetSize(double s);
9920 fschmid 359
        void SetScale(double s);
360
        void SetScaleV(double s);
351 Franz 361
        void newSizeHandler();
362
 
363
signals:
364
        void NewFont(const QString &);
365
        void NewSize(double);
8687 cbradney 366
        void newScale(double);
367
        void newScaleV(double);
8185 subik 368
 
369
private:
8602 cbradney 370
        ScrSpinBox* Size;
8185 subik 371
        QLabel* ScaleTxt;
372
        QLabel* ScaleTxtV;
10172 cbradney 373
        QAction* sizeAction;
374
        QAction* scaleTxtAction;
375
        QAction* scaleTxtVAction;
8185 subik 376
 
377
private slots:
378
        void languageChange();
351 Franz 379
};
380
 
10172 cbradney 381
class SCRIBUS_API StoryEditor : public QMainWindow
351 Franz 382
{
383
        Q_OBJECT
4552 cbradney 384
        friend class SEditor;
351 Franz 385
 
102 Franz 386
public:
2494 cbradney 387
        StoryEditor( QWidget* parent );
7101 subik 388
//      StoryEditor( QWidget* parent, ScribusDoc *docc, PageItem* ite );
3868 subik 389
        ~StoryEditor();
10859 cbradney 390
 
391
        virtual void changeEvent(QEvent *e);
8185 subik 392
 
393
        void setCurrentDocumentAndItem(ScribusDoc *doc=NULL, PageItem *item=NULL);
17485 craig 394
        void setSpellActive(bool ssa);
8185 subik 395
 
396
        ScribusDoc* currentDocument() const;
397
        PageItem* currentItem() const;
398
        SEditor* Editor;
399
        bool activFromApp;
17485 craig 400
        MenuManager* seMenuMgr;
401
        QMap<QString, QPointer<ScrAction> > seActions;
8185 subik 402
 
403
public slots:
16784 jghali 404
        void newStyle(const QString&);
8185 subik 405
        void newAlign(int st);
406
        void newTxFill(int c, int s);
407
        void newTxStroke(int c, int s);
408
        void newTxFont(const QString &f);
409
        void newTxSize(double s);
410
        void newTxStyle(int s);
411
 
412
signals:
413
        void DocChanged();
414
        void EditSt();
415
 
416
private:
2494 cbradney 417
        //int exec();
351 Franz 418
        void changeAlign(int align);
419
        int result;
2494 cbradney 420
        bool textDataChanged() const;
4551 cbradney 421
 
5493 subik 422
        /*! \brief Enables/disables the "smart" selection (#1203) - 10/16/2004 pv */
461 fschmid 423
        bool smartSelection;
424
        int smartSel;
351 Franz 425
 
2494 cbradney 426
        ScribusDoc* currDoc;
427
        PageItem* currItem;
8185 subik 428
 
2494 cbradney 429
        bool textChanged;
353 Franz 430
        bool firstSet;
8185 subik 431
 
2500 fschmid 432
        bool blockUpdate;
20501 jghali 433
        //int CurrPara;
434
        //int CurrChar;
102 Franz 435
 
8185 subik 436
protected slots:
357 Franz 437
        void setBackPref();
438
        void setFontPref();
9525 fschmid 439
        void newTxScale();
440
        void newTxScaleV();
9920 fschmid 441
        void newTxKern(double s);
442
        void newShadowOffs(double x, double y);
443
        void newTxtOutline(double o);
444
        void newTxtUnderline(double p, double w);
445
        void newTxtStrike(double p, double w);
10628 fschmid 446
        void updateProps();
447
        void updateProps(QTextCursor &cur);
351 Franz 448
        void updateProps(int p, int ch);
8185 subik 449
 
9067 avox 450
        void changeStyleSB(int pa, const QString&);
451
        void changeStyle();
124 Franz 452
        void updateStatus();
103 Franz 453
        void Do_leave();
351 Franz 454
        void Do_leave2();
6833 subik 455
        //! \brief Saves the document with editation continued. Signal called from menu.
295 Franz 456
        void Do_saveDocument();
351 Franz 457
        bool Do_new();
458
        void slotFileRevert();
459
 
352 Franz 460
        void Do_selectAll();
103 Franz 461
        void Do_copy();
462
        void Do_paste();
463
        void Do_cut();
464
        void Do_del();
253 Franz 465
        void Do_insSp();
357 Franz 466
        void Do_fontPrev();
113 Franz 467
        void CopyAvail(bool u);
376 Franz 468
        void PasteAvail();
102 Franz 469
        void updateTextFrame();
189 Franz 470
        void SearchText();
15447 craig 471
        //void slotEditStyles();
102 Franz 472
        void modifiedText();
162 Franz 473
        void LoadTextFile();
474
        void SaveTextFile();
4550 cbradney 475
        void setSmart(bool);
2505 cbradney 476
        void languageChange();
102 Franz 477
 
8080 cbradney 478
        void specialActionKeyEvent(const QString& actionName, int unicodevalue);
5493 subik 479
        /*! \brief Slot to insert special characters from charSelect widget. */
480
        void slot_insertSpecialChar();
17279 fschmid 481
        void slot_insertUserSpecialChar(QChar, QString);
8185 subik 482
        // 10/12/2004 - pv - #1203: wrong selection on double click
483
        void doubleClick(int para, int pos);
4552 cbradney 484
 
102 Franz 485
protected:
4557 cbradney 486
        void initActions();
4881 cbradney 487
        void updateUnicodeActions();
4550 cbradney 488
        void buildMenus();
2494 cbradney 489
        void buildGUI();
490
        void connectSignals();
491
        void disconnectSignals();
3868 subik 492
        /*! \brief Loading the preferences (position).
493
        It's in separate method due the 2 constructors. */
494
        void loadPrefs();
495
        /*! \brief Saving the preferences (position). */
496
        void savePrefs();
2494 cbradney 497
 
5493 subik 498
        /*! \brief Special Characters dialog.
499
        It uses a little bit ugly method to operate with.
8185 subik 500
        It's a duplication of the main window's charPalette due
501
        the lack of setParent() in qt3 and a ugly behaviour of
502
        the reparent().
503
        charSelect is created as a copy of the charPalette.
5493 subik 504
        \author Petr Vanek <petr@scribus.info>
505
        */
8185 subik 506
        CharSelect *charSelect;
12622 subik 507
    //! True when there were some glyphs inserted via charSelect
8185 subik 508
        bool charSelectUsed;
509
        void showEvent(QShowEvent *);
510
        void hideEvent(QHideEvent *);
5493 subik 511
 
8185 subik 512
        void closeEvent(QCloseEvent *);
513
        void keyPressEvent (QKeyEvent * e);
514
        bool eventFilter( QObject* ob, QEvent* ev );
515
 
10180 fschmid 516
        QHBoxLayout* StoryEd2Layout;
517
        QGridLayout* ButtonGroup1Layout;
518
        QGridLayout* ButtonGroup2Layout;
3868 subik 519
 
2834 cbradney 520
        PrefsManager* prefsManager;
3868 subik 521
        PrefsContext* prefs;
7087 subik 522
 
17485 craig 523
 
4552 cbradney 524
        QStringList unicodeCharActionNames;
17485 craig 525
 
4550 cbradney 526
        QPixmap noIcon;
7087 subik 527
 
10172 cbradney 528
        QToolBar* FileTools;
4551 cbradney 529
        SToolBFont* FontTools;
530
        SToolBAlign* AlignTools;
531
        SToolBColorF* FillTools;
532
        SToolBColorS* StrokeTools;
533
        SToolBStyle* StyleTools;
10965 fschmid 534
        QSplitter* EdSplit;
535
        SideBar* EditorBar;
10180 fschmid 536
        QFrame* ButtonGroup1;
537
        QFrame* ButtonGroup2;
4551 cbradney 538
        QLabel* WordCT1;
539
        QLabel* WordCT3;
540
        QLabel* ParCT;
541
        QLabel* ParC;
542
        QLabel* WordCT;
543
        QLabel* WordC;
544
        QLabel* CharCT;
545
        QLabel* CharC;
546
        QLabel* WordCT2;
547
        QLabel* WordC2;
548
        QLabel* CharCT2;
549
        QLabel* CharC2;
17485 craig 550
 
551
        bool m_spellActive;
102 Franz 552
};
553
 
554
#endif
555
 
11501 jghali 556