Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          scribus.cpp  -  description
3
                             -------------------
4
    begin                : Fre Apr  6 21:09:31 CEST 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17
 
18
#include <qaccel.h>
19
#include <qapplication.h>
204 Franz 20
#include <qeventloop.h>
3 paul 21
#include <qcolordialog.h>
22
#include <qcolor.h>
23
#include <qiconset.h>
24
#include <qtextstream.h>
25
#include <qstylefactory.h>
26
#include <qregexp.h>
27
#include <qtextcodec.h>
28
#include <qcursor.h>
29
#include <qvbox.h>
1208 cbradney 30
#include <qpixmap.h>
31
#include <qkeysequence.h>
32
 
3 paul 33
#include <cstdio>
34
#include <cstdlib>
391 Franz 35
#include <cmath>
3 paul 36
#include <dlfcn.h>
135 Franz 37
#include <unistd.h>
3 paul 38
#include <iostream>
119 Franz 39
#include <signal.h>
80 Franz 40
#include <string>
1208 cbradney 41
 
42
 
3 paul 43
#include "scribus.h"
44
#include "scribus.moc"
45
#include "newfile.h"
46
#include "page.h"
47
#include "query.h"
48
#include "mdup.h"
49
#include "docinfo.h"
50
#include "reformdoc.h"
51
#include "serializer.h"
52
#include "align.h"
53
#include "fmitem.h"
54
#include "fontprefs.h"
55
#include "libprefs/prefs.h"
1158 cbradney 56
#include "prefstable.h"
3 paul 57
#include "pdfopts.h"
58
#include "inspage.h"
59
#include "delpages.h"
60
#include "movepage.h"
61
#include "helpbrowser.h"
62
#include "scribusXml.h"
63
#include "libabout/about.h"
910 fschmid 64
#include "libpostscript/pslib.h"
3 paul 65
#include "druck.h"
66
#include "editformats.h"
67
#include "muster.h"
68
#include "applytemplate.h"
69
#include "picstatus.h"
70
#include "customfdialog.h"
71
#include "cmsprefs.h"
72
#include "annot.h"
73
#include "annota.h"
74
#include "javadocs.h"
151 Franz 75
#include "colorm.h"
265 Franz 76
#include "mpalette.h"
284 Franz 77
#include "measurements.h"
364 Franz 78
#include "gtgettext.h"
506 fschmid 79
#include "fileloader.h"
740 fschmid 80
#include "arrowchooser.h"
788 fschmid 81
#include "tabtypography.h"
879 fschmid 82
#include "tabguides.h"
1194 fschmid 83
#include "tabtools.h"
1114 tsoots 84
#include "undogui.h"
1151 fschmid 85
#include "filewatcher.h"
1202 fschmid 86
#include "charselect.h"
617 cbradney 87
#ifdef _MSC_VER
88
 #if (_MSC_VER >= 1200)
89
  #include "win-config.h"
90
 #endif
128 Franz 91
#else
92
 #include "config.h"
93
#endif
94
 
3 paul 95
#include "fpoint.h"
96
#include "fpointarray.h"
97
#include "hysettings.h"
98
#include "guidemanager.h"
284 Franz 99
#include "keymanager.h"
3 paul 100
#include "mergedoc.h"
27 Franz 101
#include "lineformats.h"
102 Franz 102
#include "story.h"
123 Franz 103
#include "autoform.h"
140 Franz 104
#include "tabmanager.h"
164 Franz 105
#include "search.h"
169 Franz 106
#include "fontcombo.h"
415 Franz 107
#include "prefsfile.h"
1114 tsoots 108
#include "undomanager.h"
731 fschmid 109
#include "polygonwidget.h"
766 cbradney 110
#include "werktoolb.h"
806 cbradney 111
#include "units.h"
838 cbradney 112
#include "hruler.h"
113
#include "vruler.h"
1208 cbradney 114
#include "scraction.h"
115
#include "menumanager.h"
134 Franz 116
 
3 paul 117
extern QPixmap loadIcon(QString nam);
90 Franz 118
extern bool overwrite(QWidget *parent, QString filename);
1065 cbradney 119
extern void CopyPageItem(struct CopyPasteBuffer *Buffer, PageItem *b);
203 Franz 120
extern void ReOrderText(ScribusDoc *doc, ScribusView *view);
204 Franz 121
extern int copyFile(QString source, QString target);
122
extern int moveFile(QString source, QString target);
3 paul 123
 
124
using namespace std;
125
 
126
#ifdef HAVE_CMS
127
cmsHPROFILE CMSoutputProf;
128
cmsHPROFILE CMSprinterProf;
129
cmsHTRANSFORM stdTrans;
130
cmsHTRANSFORM stdProof;
131
cmsHTRANSFORM stdTransImg;
272 Franz 132
cmsHTRANSFORM stdProofImg;
3 paul 133
bool SoftProofing;
134
bool Gamut;
135
bool CMSuse;
136
int IntentMonitor;
137
int IntentPrinter;
138
#endif
139
bool CMSavail;
140
ProfilesL InputProfiles;
80 Franz 141
double UmReFaktor;
3 paul 142
QString DocDir;
119 Franz 143
ScribusApp* ScApp;
415 Franz 144
PrefsFile* prefsFile;
3 paul 145
 
188 Franz 146
ScribusApp::ScribusApp()
272 Franz 147
{} // ScribusApp::ScribusApp()
188 Franz 148
 
767 cbradney 149
/*
150
 * retval 0 - ok, 1 - no fonts, ...
151
 */
152
int ScribusApp::initScribus(bool showSplash, const QString newGuiLanguage)
188 Franz 153
{
767 cbradney 154
        int retVal=0;
1155 fschmid 155
        ExternalApp = 0;
770 cbradney 156
        guiLanguage = newGuiLanguage;
767 cbradney 157
        initSplash(showSplash);
1208 cbradney 158
        setUsesBigPixmaps(true);
173 Franz 159
        ScApp = this;
355 Franz 160
        CurrStED = NULL;
272 Franz 161
        setCaption( tr("Scribus " VERSION));
118 Franz 162
        setKeyCompression(false);
272 Franz 163
        setIcon(loadIcon("AppIcon.png"));
1208 cbradney 164
        scrActions.clear();
165
        scrActions.setAutoDelete(true);
166
        scrDLLActions.clear();
167
        scrRecentFileActions.clear();
168
        scrRecentFileActions.setAutoDelete(true);
169
        scrMenuMgr = new MenuManager(this->menuBar());
766 cbradney 170
 
1197 tsoots 171
        PrefsPfad = getPreferencesLocation();
172
        prefsFile = new PrefsFile(QDir::convertSeparators(PrefsPfad + "/prefs13.xml"));
173
        convertToXMLPreferences(PrefsPfad);
174
 
272 Franz 175
        initMenuBar();
176
        initStatusBar();
766 cbradney 177
        initToolBars();
490 cbradney 178
        qApp->processEvents();
675 cbradney 179
 
3 paul 180
        BuFromApp = false;
1158 cbradney 181
 
767 cbradney 182
        initFonts();
183
 
272 Franz 184
        if (NoFonts)
767 cbradney 185
                retVal=1;
272 Franz 186
        else
187
        {
831 cbradney 188
                initDefaultValues();
777 fschmid 189
                buildFontMenu();
190
                initDefaultPrefs();
801 cbradney 191
                initArrowStyles();
192
                initKeyboardShortcuts();
193
 
3 paul 194
                resize(610, 600);
272 Franz 195
                QVBox* vb = new QVBox( this );
196
                vb->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
197
                wsp = new QWorkspace( vb );
198
                setCentralWidget( vb );
3 paul 199
                connect(wsp, SIGNAL(windowActivated(QWidget *)), this, SLOT(newActWin(QWidget *)));
770 cbradney 200
 
801 cbradney 201
                initPalettes();
770 cbradney 202
 
1155 fschmid 203
                fileWatcher = new FileWatcher(this);
669 cbradney 204
                if (splashScreen != NULL)
205
                        splashScreen->setStatus( tr("Reading Preferences"));
490 cbradney 206
                qApp->processEvents();
68 Franz 207
                ReadPrefs();
801 cbradney 208
 
831 cbradney 209
                HaveGS = system(Prefs.gs_exe+" -h > /dev/null 2>&1");
210
                HavePngAlpha = system(Prefs.gs_exe+" -sDEVICE=pngalpha -c quit > /dev/null 2>&1");
211
                DocDir = Prefs.DocDir;
801 cbradney 212
 
669 cbradney 213
                if (splashScreen != NULL)
214
                        splashScreen->setStatus( tr("Getting ICC Profiles"));
831 cbradney 215
                CMSavail = false;
3 paul 216
                GetCMSProfiles();
803 cbradney 217
                initCMS();
831 cbradney 218
 
669 cbradney 219
                if (splashScreen != NULL)
220
                        splashScreen->setStatus( tr("Init Hyphenator"));
490 cbradney 221
                qApp->processEvents();
766 cbradney 222
                initHyphenator();
801 cbradney 223
 
669 cbradney 224
                if (splashScreen != NULL)
225
                        splashScreen->setStatus( tr("Setting up Shortcuts"));
490 cbradney 226
                qApp->processEvents();
801 cbradney 227
 
3 paul 228
                SetShortCut();
272 Franz 229
 
669 cbradney 230
                if (splashScreen != NULL)
231
                        splashScreen->setStatus( tr("Reading Scrapbook"));
801 cbradney 232
                initScrapbook();
233
 
669 cbradney 234
                if (splashScreen != NULL)
235
                        splashScreen->setStatus( tr("Initializing Plugins"));
490 cbradney 236
                qApp->processEvents();
766 cbradney 237
                initPlugs();
1208 cbradney 238
                connect(fileWatcher, SIGNAL(fileDeleted(QString )), this, SLOT(removeRecent(QString)));
3 paul 239
                connect(this, SIGNAL(TextIFont(QString)), this, SLOT(AdjustFontMenu(QString)));
240
                connect(this, SIGNAL(TextISize(int)), this, SLOT(setFSizeMenu(int)));
241
                connect(this, SIGNAL(TextISize(int)), Mpal, SLOT(setSize(int)));
80 Franz 242
                connect(this, SIGNAL(TextUSval(double)), Mpal, SLOT(setExtra(double)));
3 paul 243
                connect(this, SIGNAL(TextStil(int)), Mpal, SLOT(setStil(int)));
68 Franz 244
                connect(this, SIGNAL(TextScale(int)), Mpal, SLOT(setTScale(int)));
245
                connect(this, SIGNAL(TextFarben(QString, QString, int, int)), Mpal, SLOT(setActFarben(QString, QString, int, int)));
766 cbradney 246
 
801 cbradney 247
                initCrashHandler();
3 paul 248
        }
767 cbradney 249
        closeSplash();
250
        return retVal;
3 paul 251
}
252
 
767 cbradney 253
void ScribusApp::initSplash(bool showSplash)
254
{
255
        if (showSplash)
256
        {
257
                splashScreen = new SplashScreen();
258
                splashScreen->setStatus(QObject::tr("Initializing..."));
259
        }
260
        else
261
                splashScreen = NULL;
262
}
263
 
264
void ScribusApp::closeSplash()
265
{
266
        if (splashScreen!=NULL)
267
        {
268
                splashScreen->close();
269
                delete splashScreen;
270
                splashScreen = NULL;
271
        }
272
}
273
 
766 cbradney 274
void ScribusApp::initToolBars()
275
{
276
        WerkTools2 = new QToolBar( tr("File"), this);
1208 cbradney 277
        scrActions["fileNew"]->addTo(WerkTools2);
278
        scrActions["fileOpen"]->addTo(WerkTools2);
1210 cbradney 279
        scrMenuMgr->addMenuToWidgetOfAction("FileOpenRecent", scrActions["fileOpen"]);
1208 cbradney 280
        scrActions["fileSave"]->addTo(WerkTools2);
281
        scrActions["fileClose"]->addTo(WerkTools2);
282
        scrActions["filePrint"]->addTo(WerkTools2);
283
        scrActions["fileExportAsPDF"]->addTo(WerkTools2);
284
 
285
        scrActions["fileClose"]->setEnabled(false);
286
        scrActions["filePrint"]->setEnabled(false);
287
        scrActions["fileSave"]->setEnabled(false);
288
        scrActions["fileExportAsPDF"]->setEnabled(false);
1114 tsoots 289
 
290
        editToolBar = new QToolBar(tr("Edit"), this);
291
        UndoWidget* uWidget = new UndoWidget(editToolBar, "uWidget");
292
        UndoManager::instance()->registerGui(uWidget);
293
 
766 cbradney 294
        WerkTools = new WerkToolB(this);
295
        setDockEnabled(WerkTools, DockLeft, false);
296
        setDockEnabled(WerkTools, DockRight, false);
297
        WerkTools->Sichtbar = true;
298
        WerkTools->setEnabled(false);
299
        WerkToolsP = new WerkToolBP(this);
300
        setDockEnabled(WerkToolsP, DockLeft, false);
301
        setDockEnabled(WerkToolsP, DockRight, false);
302
        WerkToolsP->setEnabled(false);
303
        WerkToolsP->Sichtbar = true;
801 cbradney 304
 
305
        connect(WerkTools, SIGNAL(NewMode(int)), this, SLOT(ModeFromTB(int)));
306
        connect(WerkTools, SIGNAL(Schliessen()), this, SLOT(ToggleTools()));
307
        connect(WerkToolsP, SIGNAL(NewMode(int)), this, SLOT(ModeFromTB(int)));
308
        connect(WerkToolsP, SIGNAL(Schliessen()), this, SLOT(TogglePDFTools()));
766 cbradney 309
}
310
 
767 cbradney 311
void ScribusApp::initFonts()
312
{
313
        if (splashScreen!=NULL) {
314
                splashScreen->setStatus( tr("Searching for Fonts"));
315
                qApp->processEvents();
316
        }
317
        NoFonts=GetAllFonts();
318
        if (NoFonts)
319
        {
320
                if (splashScreen!=NULL)
321
                        splashScreen->close(); // 10/10/2004 pv fix #1200
322
                QString mess = tr("There are no Postscript fonts on your system");
323
                mess += "\n" + tr("Exiting now");
324
                QMessageBox::critical(this, tr("Fatal Error"), mess, 1, 0, 0);
325
        }
829 cbradney 326
        else
327
        if (splashScreen!=NULL)
328
        {
329
                splashScreen->setStatus( tr("Font System Initialized"));
330
                qApp->processEvents();
331
        }
767 cbradney 332
}
766 cbradney 333
 
770 cbradney 334
void ScribusApp::initDefaultPrefs()
335
{
336
        /** Default font and size **/
337
        SCFontsIterator it(Prefs.AvailFonts);
1194 fschmid 338
        Prefs.toolSettings.defFont = it.currentKey();
339
        Prefs.toolSettings.defSize = 120;
770 cbradney 340
        Prefs.AppFontSize = qApp->font().pointSize();
341
 
342
        /** Default colours **/
343
        Prefs.DColors.clear();
872 cbradney 344
        QString pfadC = LIBDIR;
345
        QString pfadC2 = pfadC + "rgbscribus.txt";
770 cbradney 346
        QFile fiC(pfadC2);
347
        if (!fiC.exists())
348
        {
349
                Prefs.DColors.insert("White", CMYKColor(0, 0, 0, 0));
350
                Prefs.DColors.insert("Black", CMYKColor(0, 0, 0, 255));
351
                Prefs.DColors.insert("Blue", CMYKColor(255, 255, 0, 0));
352
                Prefs.DColors.insert("Cyan", CMYKColor(255, 0, 0, 0));
353
                Prefs.DColors.insert("Green", CMYKColor(255, 0, 255, 0));
354
                Prefs.DColors.insert("Red", CMYKColor(0, 255, 255, 0));
355
                Prefs.DColors.insert("Yellow", CMYKColor(0, 0, 255, 0));
356
                Prefs.DColors.insert("Magenta", CMYKColor(0, 255, 0, 0));
357
                Prefs.DColorSet = "Scribus-Small";
358
        }
359
        else
360
        {
361
                if (fiC.open(IO_ReadOnly))
362
                {
363
                        QString ColorEn, Cname;
364
                        int Rval, Gval, Bval;
365
                        QTextStream tsC(&fiC);
366
                        ColorEn = tsC.readLine();
367
                        while (!tsC.atEnd())
368
                        {
369
                                ColorEn = tsC.readLine();
370
                                QTextStream CoE(&ColorEn, IO_ReadOnly);
371
                                CoE >> Rval;
372
                                CoE >> Gval;
373
                                CoE >> Bval;
374
                                CoE >> Cname;
375
                                CMYKColor tmp;
376
                                tmp.setColorRGB(Rval, Gval, Bval);
377
                                Prefs.DColors.insert(Cname, tmp);
378
                        }
379
                        fiC.close();
380
                }
381
                Prefs.DColorSet = "X11 RGB-Set";
382
        }
383
 
384
        Prefs.Wheelval = 40;
879 fschmid 385
        Prefs.guidesSettings.marginsShown = true;
386
        Prefs.guidesSettings.framesShown = true;
387
        Prefs.guidesSettings.gridShown = false;
388
        Prefs.guidesSettings.guidesShown = false;
389
        Prefs.guidesSettings.baseShown = false;
390
        Prefs.guidesSettings.showPic = true;
391
        Prefs.guidesSettings.linkShown = false;
392
        Prefs.guidesSettings.grabRad = 4;
393
        Prefs.guidesSettings.guideRad = 10;
394
        Prefs.guidesSettings.minorGrid = 20;
395
        Prefs.guidesSettings.majorGrid = 100;
396
        Prefs.guidesSettings.minorColor = QColor(green);
397
        Prefs.guidesSettings.majorColor = QColor(green);
398
        Prefs.guidesSettings.margColor = QColor(blue);
399
        Prefs.guidesSettings.guideColor = QColor(darkBlue);
400
        Prefs.guidesSettings.baseColor = QColor(lightGray);
823 fschmid 401
        Prefs.typographicSetttings.valueSuperScript = 33;
402
        Prefs.typographicSetttings.scalingSuperScript = 100;
403
        Prefs.typographicSetttings.valueSubScript = 33;
404
        Prefs.typographicSetttings.scalingSubScript = 100;
405
        Prefs.typographicSetttings.valueSmallCaps = 75;
406
        Prefs.typographicSetttings.autoLineSpacing = 20;
407
        Prefs.typographicSetttings.valueBaseGrid = 14.4;
408
        Prefs.typographicSetttings.offsetBaseGrid = 0.0;
770 cbradney 409
        Prefs.GUI = "Default";
1194 fschmid 410
        Prefs.toolSettings.dPen = "Black";
411
        Prefs.toolSettings.dBrush = "Black";
412
        Prefs.toolSettings.dShade = 100;
413
        Prefs.toolSettings.dShade2 = 100;
414
        Prefs.toolSettings.dLineArt = SolidLine;
415
        Prefs.toolSettings.dWidth = 1;
416
        Prefs.toolSettings.dPenLine = "Black";
417
        Prefs.toolSettings.dPenText = "Black";
418
        Prefs.toolSettings.dStrokeText = "Black";
1120 fschmid 419
        Prefs.DpapColor = QColor(white);
1194 fschmid 420
        Prefs.toolSettings.dCols = 1;
421
        Prefs.toolSettings.dGap = 0.0;
422
        Prefs.toolSettings.dShadeLine = 100;
423
        Prefs.toolSettings.dLstyleLine = SolidLine;
424
        Prefs.toolSettings.dWidthLine = 1;
425
        Prefs.toolSettings.dStartArrow = 0;
426
        Prefs.toolSettings.dEndArrow = 0;
427
        Prefs.toolSettings.magMin = 10;
428
        Prefs.toolSettings.magMax = 3200;
429
        Prefs.toolSettings.magStep = 25;
430
        Prefs.toolSettings.dBrushPict = "White";
431
        Prefs.toolSettings.shadePict = 100;
432
        Prefs.toolSettings.scaleX = 1;
433
        Prefs.toolSettings.scaleY = 1;
1187 fschmid 434
        Prefs.guidesSettings.before = true;
1065 cbradney 435
        Prefs.docUnitIndex = 0;
1194 fschmid 436
        Prefs.toolSettings.polyC = 4;
437
        Prefs.toolSettings.polyF = 0.5;
438
        Prefs.toolSettings.polyS = false;
439
        Prefs.toolSettings.polyFd = 0;
440
        Prefs.toolSettings.polyR = 0;
844 fschmid 441
        Prefs.mainToolBarSettings.visible = true;
442
        Prefs.pdfToolBarSettings.visible = true;
443
        Prefs.mPaletteSettings.visible = false;
444
        Prefs.measurePalSettings.visible = false;
445
        Prefs.treePalSettings.visible = false;
446
        Prefs.scrapPalSettings.visible = false;
447
        Prefs.layerPalSettings.visible = false;
448
        Prefs.bookmPalSettings.visible = false;
449
        Prefs.pagePalSettings.visible = false;
450
        Prefs.measurePalSettings.xPosition = 0;
451
        Prefs.measurePalSettings.yPosition = 0;
452
        Prefs.treePalSettings.xPosition = 0;
453
        Prefs.treePalSettings.yPosition = 0;
454
        Prefs.scrapPalSettings.xPosition = 0;
455
        Prefs.scrapPalSettings.yPosition = 0;
456
        Prefs.scrapPalSettings.width = 100;
457
        Prefs.scrapPalSettings.height = 200;
458
        Prefs.pagePalSettings.xPosition = 0;
459
        Prefs.pagePalSettings.yPosition = 0;
460
        Prefs.bookmPalSettings.xPosition = 0;
461
        Prefs.bookmPalSettings.yPosition = 0;
462
        Prefs.layerPalSettings.xPosition = 0;
463
        Prefs.layerPalSettings.yPosition = 0;
770 cbradney 464
        Prefs.PSize = 40;
465
        Prefs.SaveAtQ = true;
466
        Prefs.ClipMargin = true;
467
        Prefs.GCRMode = true;
468
        Prefs.RecentDocs.clear();
469
        Prefs.RecentDCount = 5;
1065 cbradney 470
        Prefs.marginColored = false;
770 cbradney 471
        Prefs.PageFormat = 4;
472
        Prefs.Ausrichtung = 0;
473
        Prefs.PageBreite = 595;
474
        Prefs.PageHoehe = 842;
475
        Prefs.RandOben = 9;
476
        Prefs.RandUnten = 40;
477
        Prefs.RandLinks = 9;
478
        Prefs.RandRechts = 9;
479
        Prefs.DoppelSeiten = false;
480
        Prefs.ErsteLinks = false;
1194 fschmid 481
        Prefs.toolSettings.scaleType = true;
482
        Prefs.toolSettings.aspectRatio = true;
770 cbradney 483
        Prefs.MinWordLen = 3;
484
        Prefs.HyCount = 2;
485
        Prefs.Language = "";
486
        Prefs.Automatic = true;
487
        Prefs.AutoCheck = false;
488
        Prefs.AutoSave = false;
489
        Prefs.AutoSaveTime = 600000;
490
        Prefs.DisScale = 1.0;
491
        Prefs.DocDir = QDir::homeDirPath();
492
        Prefs.ProfileDir = "";
493
        Prefs.ScriptDir = "";
494
        Prefs.TemplateDir = "";
495
        Prefs.CustomColorSets.clear();
496
        Prefs.PrPr_Mode = false;
497
        Prefs.Gcr_Mode = true;
498
        Prefs.PrPr_AlphaText = false;
499
        Prefs.PrPr_AlphaGraphics = false;
500
        Prefs.PrPr_Transparency = false;
501
        Prefs.PrPr_C = true;
502
        Prefs.PrPr_M = true;
503
        Prefs.PrPr_Y = true;
504
        Prefs.PrPr_K = true;
505
        Prefs.gimp_exe = "gimp";
506
        Prefs.gs_antiGraph = true;
507
        Prefs.gs_antiText = true;
508
        Prefs.gs_exe = "gs";
509
        Prefs.STEcolor = QColor(white);
510
        Prefs.STEfont = font().toString();
511
        Prefs.DCMSset.DefaultMonitorProfile = "";
512
        Prefs.DCMSset.DefaultPrinterProfile = "";
513
        Prefs.DCMSset.DefaultInputProfile = "";
514
        Prefs.DCMSset.DefaultInputProfile2 = "";
515
        Prefs.DCMSset.CMSinUse = false;
516
        Prefs.DCMSset.SoftProofOn = false;
517
        Prefs.DCMSset.GamutCheck = false;
518
        Prefs.DCMSset.BlackPoint = true;
519
        Prefs.DCMSset.DefaultIntentMonitor = 1;
520
        Prefs.DCMSset.DefaultIntentMonitor2 = 1;
521
        Prefs.DCMSset.DefaultIntentPrinter = 0;
522
        Prefs.GFontSub.clear();
801 cbradney 523
        Prefs.ScratchLeft = 100;
524
        Prefs.ScratchRight = 100;
525
        Prefs.ScratchTop = 20;
526
        Prefs.ScratchBottom = 20;
527
}
770 cbradney 528
 
801 cbradney 529
 
530
void ScribusApp::initDefaultValues()
531
{
831 cbradney 532
        dirs = prefsFile->getContext("dirs");
801 cbradney 533
        HaveDoc = 0;
534
        singleClose = false;
535
        ScriptRunning = false;
536
        DLLReturn = "";
537
        DLLinput = "";
538
        view = NULL;
539
        doc = NULL;
540
        Buffer2 = "";
541
        UniCinp = false;
542
        UniCinC = 0;
543
        UniCinS = "";
544
        DispX = 10;
545
        DispY = 10;
546
        DocNr = 1;
547
        UmReFaktor = 1.0;
548
        PrinterUsed = false;
549
        PDef.Pname = "";
550
        PDef.Dname = "";
551
        PDef.Command = "";
552
        keyrep = false;
1204 tsoots 553
        _arrowKeyDown = false;
801 cbradney 554
        ClipB = QApplication::clipboard();
555
        PalettesStat[0] = false;
556
        GuidesStat[0] = false;
557
 
558
        connect(ClipB, SIGNAL(dataChanged()), this, SLOT(ClipChange()));
770 cbradney 559
}
560
 
801 cbradney 561
void ScribusApp::initKeyboardShortcuts()
562
{
563
        SetKeyEntry(56, tr("Smart Hyphen"), 0, CTRL+Key_Minus);
564
        SetKeyEntry(57, tr("Align Left"), 0, CTRL+Key_L);
565
        SetKeyEntry(58, tr("Align Right"), 0, CTRL+Key_R);
566
        SetKeyEntry(59, tr("Align Center"), 0, CTRL+Key_E);
567
        SetKeyEntry(60, tr("Insert Page Number"), 0, CTRL+Key_NumberSign);
1114 tsoots 568
        SetKeyEntry(68, tr("Non Breaking Space"), 0, CTRL+Key_Space);
801 cbradney 569
}
570
 
571
void ScribusApp::initArrowStyles()
572
{
1065 cbradney 573
        struct ArrowDesc arrow;
801 cbradney 574
        FPointArray points;
575
        QWMatrix arrowScaling;
576
        arrowScaling.scale(0.5, 0.5);
577
        arrow.name = "Arrow1L";
578
        arrow.userArrow = false;
579
        points.addQuadPoint(0, 0, 0, 0, 0, 0, 0, 0);
580
        points.addQuadPoint(-5, -5, -5, -5, -5, -5, -5, -5);
581
        points.addQuadPoint(12, 0, 12, 0, 12, 0, 12, 0);
582
        points.addQuadPoint(-5, 5, -5, 5, -5, 5, -5, 5);
583
        points.addQuadPoint(0, 0, 0, 0, 0, 0, 0, 0);
584
        arrow.points = points.copy();
585
        Prefs.arrowStyles.append(arrow);
586
        arrow.name = "Arrow1M";
587
        points.map(arrowScaling);
588
        arrow.points = points.copy();
589
        Prefs.arrowStyles.append(arrow);
590
        arrow.name = "Arrow1S";
591
        points.map(arrowScaling);
592
        arrow.points = points.copy();
593
        Prefs.arrowStyles.append(arrow);
594
        arrow.name = "SquareL";
595
        points.resize(0);
596
        points.addQuadPoint(-5, -5, -5, -5, -5, -5, -5, -5);
597
        points.addQuadPoint(5, -5, 5, -5, 5, -5, 5, -5);
598
        points.addQuadPoint(5, 5, 5, 5, 5, 5, 5, 5);
599
        points.addQuadPoint(-5, 5, -5, 5, -5, 5, -5, 5);
600
        points.addQuadPoint(-5, -5, -5, -5, -5, -5, -5, -5);
601
        arrow.points = points.copy();
602
        Prefs.arrowStyles.append(arrow);
603
        arrow.name = "SquareM";
604
        points.map(arrowScaling);
605
        arrow.points = points.copy();
606
        Prefs.arrowStyles.append(arrow);
607
        arrow.name = "SquareS";
608
        points.map(arrowScaling);
609
        arrow.points = points.copy();
610
        Prefs.arrowStyles.append(arrow);
611
        arrow.name = "TriangleInL";
612
        points.resize(0);
613
        points.addQuadPoint(5.77, 0, 5.77, 0, 5.77, 0, 5.77, 0);
614
        points.addQuadPoint(-2.88, 5, -2.88, 5, -2.88, 5, -2.88, 5);
615
        points.addQuadPoint(-2.88, -5, -2.88, -5, -2.88, -5, -2.88, -5);
616
        points.addQuadPoint(5.77, 0, 5.77, 0, 5.77, 0, 5.77, 0);
617
        arrow.points = points.copy();
618
        Prefs.arrowStyles.append(arrow);
619
        arrow.name = "TriangleInM";
620
        points.map(arrowScaling);
621
        arrow.points = points.copy();
622
        Prefs.arrowStyles.append(arrow);
623
        arrow.name = "TriangleInS";
624
        points.map(arrowScaling);
625
        arrow.points = points.copy();
626
        Prefs.arrowStyles.append(arrow);
627
        arrow.name = "TriangleOutL";
628
        points.resize(0);
629
        points.addQuadPoint(-5.77, 0, -5.77, 0, -5.77, 0, -5.77, 0);
630
        points.addQuadPoint(2.88, 5, 2.88, 5, 2.88, 5, 2.88, 5);
631
        points.addQuadPoint(2.88, -5, 2.88, -5, 2.88, -5, 2.88, -5);
632
        points.addQuadPoint(-5.77, 0, -5.77, 0, -5.77, 0, -5.77, 0);
633
        arrow.points = points.copy();
634
        Prefs.arrowStyles.append(arrow);
635
        arrow.name = "TriangleOutM";
636
        points.map(arrowScaling);
637
        arrow.points = points.copy();
638
        Prefs.arrowStyles.append(arrow);
639
        arrow.name = "TriangleOutS";
640
        points.map(arrowScaling);
641
        arrow.points = points.copy();
642
        Prefs.arrowStyles.append(arrow);
643
}
644
 
645
void ScribusApp::initPalettes()
646
{
647
        Tpal = new Tree(this, 0);
648
        Mpal = new Mpalette(this, &Prefs);
649
        Mpal->Cpal->SetColors(Prefs.DColors);
650
        Mpal->Cpal->UseTrans(true);
651
        Mpal->Fonts->RebuildList(&Prefs, 0);
652
        Npal = new NodePalette(this);
653
        Lpal = new LayerPalette(this);
654
        ScBook = new Biblio(this, &Prefs);
655
        Sepal = new SeitenPal(this);
656
        BookPal = new BookPalette(this);
657
        MaPal = new Measurements(this);
658
        MaPal->hide();
659
 
1114 tsoots 660
        undoPalette = new UndoPalette(this, "undoPalette");
661
        UndoManager::instance()->registerGui(undoPalette);
662
 
801 cbradney 663
        connect(MaPal, SIGNAL(Schliessen(bool)), this, SLOT(setMapal(bool)));
664
        connect(Mpal, SIGNAL(DocChanged()), this, SLOT(slotDocCh()));
665
        connect(Mpal, SIGNAL(NewAbStyle(int)), this, SLOT(setNewAbStyle(int)));
666
        connect(Mpal, SIGNAL(BackHome()), this, SLOT(Aktiv()));
667
        connect(Mpal, SIGNAL(Stellung(int)), this, SLOT(setItemHoch(int)));
668
        connect(Mpal, SIGNAL(Schliessen()), this, SLOT(ToggleMpal()));
669
        connect(Mpal, SIGNAL(EditCL()), this, SLOT(ToggleFrameEdit()));
670
        connect(Mpal, SIGNAL(NewTF(QString)), this, SLOT(SetNewFont(QString)));
671
        connect(Mpal, SIGNAL(UpdtGui(int)), this, SLOT(HaveNewSel(int)));
672
        connect(Mpal->Cpal, SIGNAL(NewPen(QString)), this, SLOT(setPenFarbe(QString)));
673
        connect(Mpal->Cpal, SIGNAL(NewBrush(QString)), this, SLOT(setBrushFarbe(QString)));
674
        connect(Mpal->Cpal, SIGNAL(NewPenShade(int)), this, SLOT(setPenShade(int)));
675
        connect(Mpal->Cpal, SIGNAL(NewBrushShade(int)), this, SLOT(setBrushShade(int)));
676
        connect(Mpal->Cpal, SIGNAL(NewTrans(double)), this, SLOT(SetTranspar(double)));
677
        connect(Mpal->Cpal, SIGNAL(NewTransS(double)), this, SLOT(SetTransparS(double)));
678
        connect(Mpal->Cpal, SIGNAL(NewGradient(int)), this, SLOT(setGradFill(int)));
679
        connect(Mpal->Cpal->gradEdit->Preview, SIGNAL(gradientChanged()), this, SLOT(updtGradFill()));
680
        connect(Mpal->Cpal, SIGNAL(gradientChanged()), this, SLOT(updtGradFill()));
681
        connect(Mpal->Cpal, SIGNAL(QueryItem()), this, SLOT(GetBrushPen()));
682
        connect(Tpal, SIGNAL(Schliessen()), this, SLOT(ToggleTpal()));
683
        connect(Tpal, SIGNAL(CloseMpal()), this, SLOT(ToggleMpal()));
684
        connect(Tpal, SIGNAL(CloseSpal()), this, SLOT(ToggleBpal()));
685
        connect(Tpal, SIGNAL(SelectElement(int, int)), this, SLOT(SelectFromOutl(int, int)));
686
        connect(Tpal, SIGNAL(SelectSeite(int)), this, SLOT(SelectFromOutlS(int)));
687
        connect(Tpal, SIGNAL(ToggleAllPalettes()), this, SLOT(ToggleAllPalettes()));
688
        connect(Mpal->Spal, SIGNAL(newStyle(int)), this, SLOT(setNewAbStyle(int)));
689
        connect(Mpal, SIGNAL(EditLSt()), this, SLOT(slotEditLineStyles()));
690
        connect(Mpal, SIGNAL(ToggleAllPalettes()), this, SLOT(ToggleAllPalettes()));
691
        connect(Mpal, SIGNAL(CloseTpal()), this, SLOT(ToggleTpal()));
692
        connect(Mpal, SIGNAL(CloseBpal()), this, SLOT(ToggleBpal()));
693
        connect(Npal, SIGNAL(Schliessen()), this, SLOT(NoFrameEdit()));
694
        connect(Lpal, SIGNAL(LayerActivated(int)), this, SLOT(changeLayer(int)));
695
        connect(Lpal, SIGNAL(LayerRemoved(int, bool)), this, SLOT(LayerRemove(int, bool)));
696
        connect(Lpal, SIGNAL(LayerChanged()), this, SLOT(showLayer()));
697
        connect(Lpal, SIGNAL(Schliessen()), this, SLOT(ToggleLpal()));
698
        connect(Lpal->Table, SIGNAL(Schliessen()), this, SLOT(ToggleLpal()));
699
        connect(Lpal->Table, SIGNAL(ToggleAllPalettes()), this, SLOT(ToggleAllPalettes()));
700
        connect(Sepal, SIGNAL(Schliessen()), this, SLOT(ToggleSepal()));
701
        connect(Sepal, SIGNAL(EditTemp(QString)), this, SLOT(ManageTemp(QString)));
702
        connect(Sepal->PageView, SIGNAL(UseTemp(QString, int)), this, SLOT(Apply_Temp(QString, int)));
703
        connect(Sepal->PageView, SIGNAL(NewPage(int, QString)), this, SLOT(slotNewPageP(int, QString)));
704
        connect(Sepal->Trash, SIGNAL(DelPage(int)), this, SLOT(DeletePage2(int)));
705
        connect(Sepal, SIGNAL(GotoSeite(int)), this, SLOT(SelectFromOutlS(int)));
706
        connect(Sepal, SIGNAL(ToggleAllPalettes()), this, SLOT(ToggleAllPalettes()));
707
        connect(BookPal->BView, SIGNAL(MarkMoved()), this, SLOT(StoreBookmarks()));
708
        connect(BookPal->BView, SIGNAL(ChangeBMNr(int, int, int)), this, SLOT(ChBookmarks(int, int, int)));
709
        connect(BookPal->BView, SIGNAL(SelectElement(int, int)), this, SLOT(SelectFromOutl(int, int)));
710
        connect(BookPal, SIGNAL(Schliessen()), this, SLOT(ToggleBookpal()));
711
        connect(BookPal, SIGNAL(ToggleAllPalettes()), this, SLOT(ToggleAllPalettes()));
712
}
713
 
714
void ScribusApp::initScrapbook()
715
{
1144 cbradney 716
        QString scrapbookFile = PrefsPfad+"/scrap13.scs";
801 cbradney 717
        QFileInfo scrapbookFileInfo = QFileInfo(scrapbookFile);
718
        if (scrapbookFileInfo.exists())
719
                ScBook->BibWin->ReadContents(scrapbookFile);
720
        ScBook->ScFilename = scrapbookFile;
721
        ScBook->AdjustMenu();
722
        connect(ScBook, SIGNAL(Schliessen()), this, SLOT(ToggleBpal()));
723
        connect(ScBook->BibWin, SIGNAL(ToggleAllPalettes()), this, SLOT(ToggleAllPalettes()));
724
        connect(ScBook->BibWin, SIGNAL(Schliessen()), this, SLOT(ToggleBpal()));
725
        connect(ScBook->BibWin, SIGNAL(CloseTpal()), this, SLOT(ToggleTpal()));
726
        connect(ScBook->BibWin, SIGNAL(CloseMpal()), this, SLOT(ToggleMpal()));
727
}
728
 
729
void ScribusApp::initCrashHandler()
730
{
731
        typedef void (*HandlerType)(int);
732
        HandlerType handler     = 0;
733
        handler = ScribusApp::defaultCrashHandler;
734
        if (!handler)
735
                handler = SIG_DFL;
736
        sigset_t mask;
737
        sigemptyset(&mask);
738
#ifdef SIGSEGV
739
        signal (SIGSEGV, handler);
740
        sigaddset(&mask, SIGSEGV);
741
#endif
742
#ifdef SIGFPE
743
        signal (SIGFPE, handler);
744
        sigaddset(&mask, SIGFPE);
745
#endif
746
#ifdef SIGILL
747
        signal (SIGILL, handler);
748
        sigaddset(&mask, SIGILL);
749
#endif
750
#ifdef SIGABRT
751
        signal (SIGABRT, handler);
752
        sigaddset(&mask, SIGABRT);
753
#endif
754
        sigprocmask(SIG_UNBLOCK, &mask, 0);
755
}
756
 
770 cbradney 757
const QString ScribusApp::getGuiLanguage()
758
{
759
        return guiLanguage;
760
}
761
 
675 cbradney 762
/*!
763
 \fn QString ScribusApp::getPreferencesLocation()
764
 \author Craig Bradney
765
 \date Thu 18 Nov 2004
766
 \brief Get the user's preference file location. Rename any existing old preferences files
767
 \param None
768
 \retval QString Location of the user's preferences
769
 */
770
 
771
QString ScribusApp::getPreferencesLocation()
772
{
773
        QString Pff = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus");
774
        QFileInfo Pffi = QFileInfo(Pff);
775
        QString PrefsPfad;
1144 cbradney 776
        //If we are using ~/.scribus
675 cbradney 777
        if (Pffi.exists())
778
        {
779
                if (Pffi.isDir())
780
                        PrefsPfad = Pff;
781
                else
782
                        PrefsPfad = QDir::homeDirPath();
783
        }
1144 cbradney 784
        else // Move to using ~/.scribus/scribus.* from ~/.scribus.*
675 cbradney 785
        {
1144 cbradney 786
                QDir prefsDirectory = QDir();
787
                prefsDirectory.mkdir(Pff);
675 cbradney 788
                PrefsPfad = Pff;
1144 cbradney 789
                QString oldPR = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus.rc");
790
                QFileInfo oldPi = QFileInfo(oldPR);
791
                if (oldPi.exists())
792
                        moveFile(oldPR, Pff+"/scribus.rc");
793
                QString oldPR2 = QDir::convertSeparators(QDir::homeDirPath()+"/.scribusfont.rc");
794
                QFileInfo oldPi2 = QFileInfo(oldPR2);
795
                if (oldPi2.exists())
796
                        moveFile(oldPR2, Pff+"/scribusfont.rc");
797
                QString oldPR3 = QDir::convertSeparators(QDir::homeDirPath()+"/.scribusscrap.scs");
798
                QFileInfo oldPi3 = QFileInfo(oldPR3);
799
                if (oldPi3.exists())
800
                        moveFile(oldPR3, Pff+"/scrap.scs");
675 cbradney 801
        }
1144 cbradney 802
 
803
        //Now make copies for 1.3 use and leave the old ones alone for <1.3.0 usage
804
        QString oldPR =QDir::convertSeparators(PrefsPfad+"/scribus.rc");
805
        QString oldPR2=QDir::convertSeparators(PrefsPfad+"/scribusfont.rc");
806
        QString oldPR3=QDir::convertSeparators(PrefsPfad+"/scrap.scs");
807
        QString oldPR4=QDir::convertSeparators(PrefsPfad+"/prefs.xml");
808
        QString newPR =QDir::convertSeparators(PrefsPfad+"/scribus13.rc");
809
        QString newPR2=QDir::convertSeparators(PrefsPfad+"/scribusfont13.rc");
810
        QString newPR3=QDir::convertSeparators(PrefsPfad+"/scrap13.scs");
811
        QString newPR4=QDir::convertSeparators(PrefsPfad+"/prefs13.xml");
812
 
813
        bool existsOldPR =QFile::exists(oldPR);
814
        bool existsOldPR2=QFile::exists(oldPR2);
815
        bool existsOldPR3=QFile::exists(oldPR3);
816
        bool existsOldPR4=QFile::exists(oldPR4);
817
        bool existsNewPR =QFile::exists(newPR);
818
        bool existsNewPR2=QFile::exists(newPR2);
819
        bool existsNewPR3=QFile::exists(newPR3);
820
        bool existsNewPR4=QFile::exists(newPR4);       
821
 
822
        //Only check for these two as they will be autocreated if they dont exist.
823
        if( (existsOldPR && !existsNewPR) || (existsOldPR4 && !existsNewPR4) )
824
        {
825
                if (splashScreen)
826
                        splashScreen->hide();
827
                if ( (QMessageBox::question( this, tr("Migrate Old Scribus Settings?"),
828
                                tr("Scribus has detected existing Scribus 1.2 preferences files.\n"
829
                                        "Do you want to migrate them to the new Scribus version?"),
1208 cbradney 830
                                QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::NoButton))==QMessageBox::Yes )
1144 cbradney 831
                {
832
                        if (existsOldPR && !existsNewPR)
833
                                copyFile(oldPR, newPR);
834
                        if (existsOldPR2 && !existsNewPR2)
835
                                copyFile(oldPR2, newPR2);
836
                        if (existsOldPR3 && !existsNewPR3)
837
                                copyFile(oldPR3, newPR3);
838
                        if (existsOldPR4 && !existsNewPR4)
839
                                copyFile(oldPR4, newPR4);
840
                }
841
                if (splashScreen)
842
                        splashScreen->show();
843
        }
675 cbradney 844
        return PrefsPfad;
845
}
846
 
1144 cbradney 847
/*!
848
 \fn QString ScribusApp::convertToXMLPreferences(QString prefsLocation)
849
 \author Craig Bradney
850
 \date Sun 09 Jan 2005
851
 \brief Convert 1.2 prefs to 1.3 prefs
852
 \param prefsLocation Location of user preferences
853
 \retval None
854
 */
1208 cbradney 855
void ScribusApp::convertToXMLPreferences(const QString prefsLocation)
1144 cbradney 856
{
857
 
858
}
859
 
1227 cbradney 860
void ScribusApp::initFileMenuActions()
1208 cbradney 861
{
862
        //File Menu
863
        scrActions.insert("fileNew", new ScrAction(QIconSet(loadIcon("DateiNeu16.png"), loadIcon("DateiNeu.xpm")), tr("&New"), CTRL+Key_N, this, "fileNew"));
864
        scrActions.insert("fileOpen", new ScrAction(QIconSet(loadIcon("DateiOpen16.png"), loadIcon("DateiOpen.xpm")), tr("&Open..."), CTRL+Key_O, this, "fileOpen"));
865
        scrActions.insert("fileClose", new ScrAction(QIconSet(loadIcon("DateiClos16.png"), loadIcon("DateiClose.png")), tr("&Close"), CTRL+Key_W, this, "fileClose"));
866
        scrActions.insert("fileSave", new ScrAction(QIconSet(loadIcon("DateiSave16.png"), loadIcon("DateiSave2.png")), tr("&Save"), CTRL+Key_S, this, "fileSave"));
867
        scrActions.insert("fileSaveAs", new ScrAction(QPixmap(loadIcon("filesaveas.png")), tr("Save &As..."), QKeySequence(), this, "fileSaveAs"));
868
        scrActions.insert("fileRevert", new ScrAction(QPixmap(loadIcon("revert.png")), tr("Re&vert to Saved"), QKeySequence(), this, "fileRevert"));
869
        scrActions.insert("fileCollect", new ScrAction(tr("Collect for O&utput..."), QKeySequence(), this, "fileCollect"));
870
        //File Import Menu
871
        scrActions.insert("fileImportText", new ScrAction(tr("Get Text..."), QKeySequence(), this, "fileImportText"));
872
        scrActions.insert("fileImportAppendText", new ScrAction(tr("Append &Text..."), QKeySequence(), this, "fileImportAppendText"));
873
        scrActions.insert("fileImportImage", new ScrAction(tr("Get Image..."), QKeySequence(), this, "fileImportImage"));
874
 
875
        scrActions.insert("fileImportEPS", new ScrAction(tr("Import EPS..."), QKeySequence(), this, "fileImportEPS"));
876
        scrActions.insert("fileImportPage", new ScrAction(tr("Import Page(s)..."), QKeySequence(), this, "fileImportPage"));
877
        scrActions.insert("fileImportOOorgDraw", new ScrAction(tr("Import OpenOffice.org Draw..."), QKeySequence(), this, "fileImportOOorgDraw"));
878
        scrActions.insert("fileImportSVG", new ScrAction(tr("Import SVG..."), QKeySequence(), this, "fileImportSVG"));
879
 
880
        //File Export Menu
881
        scrActions.insert("fileExportText", new ScrAction(tr("Save &Text..."), QKeySequence(), this, "fileExportText"));
882
        scrActions.insert("fileExportAsEPS", new ScrAction(tr("Save Page as &EPS..."), QKeySequence(), this, "fileExportAsEPS"));
883
        scrActions.insert("fileExportAsPDF", new ScrAction(loadIcon("acrobat.png"), tr("Save as P&DF..."), QKeySequence(), this, "fileExportAsPDF"));
884
        scrActions.insert("fileExportAsImage", new ScrAction(tr("Save as &Image..."), QKeySequence(), this, "fileExportAsImage"));
885
        scrActions.insert("fileExportAsSVG", new ScrAction(tr("Save Page as &SVG..."), QKeySequence(), this, "fileExportAsSVG"));
886
        //Rest of File Menu
887
        scrActions.insert("fileDocInfo", new ScrAction(loadIcon("documentinfo.png"), tr("Document &Information..."), CTRL+Key_I, this, "fileDocSetup"));
888
        scrActions.insert("fileDocSetup", new ScrAction(tr("Document &Setup..."), QKeySequence(), this, "fileDocSetup"));
889
        scrActions.insert("filePrint", new ScrAction(QIconSet(loadIcon("DateiPrint16.png"), loadIcon("DateiPrint.xpm")), tr("&Print..."), CTRL+Key_P, this, "filePrint"));
890
        scrActions.insert("fileQuit", new ScrAction(QPixmap(loadIcon("exit.png")), tr("&Quit"), CTRL+Key_Q, this, "fileQuit"));
891
 
1227 cbradney 892
        //Set some tooltips, unsure yet whether to use these, probably not as they arent flexible like normal actions ones can be
893
        /*
894
        scrActions["fileNew"]->setToolTip(tr("Create a new document"));
895
        scrActions["fileOpen"]->setToolTip(tr("Open a document"));
896
        scrActions["fileSave"]->setToolTip(tr("Save the current document"));
897
        scrActions["fileClose"]->setToolTip(tr("Close the current document"));
898
        scrActions["filePrint"]->setToolTip(tr("Print the current document"));
899
        scrActions["fileExportAsPDF"]->setToolTip(tr("Save the current document as PDF"));
900
        */
1208 cbradney 901
        //Connect our signals and slots
902
        //File Menu
903
        connect( scrActions["fileNew"], SIGNAL(activated()) , this, SLOT(slotFileNew()) );
904
        connect( scrActions["fileOpen"], SIGNAL(activated()) , this, SLOT(slotDocOpen()) );
905
        connect( scrActions["fileClose"], SIGNAL(activated()) , this, SLOT(slotFileClose()) );
906
        connect( scrActions["filePrint"], SIGNAL(activated()) , this, SLOT(slotFilePrint()) );
907
        connect( scrActions["fileSave"], SIGNAL(activated()) , this, SLOT(slotFileSave()) );
908
        connect( scrActions["fileSave"], SIGNAL(activated()) , this, SLOT(slotFileSave()) );
909
        connect( scrActions["fileSaveAs"], SIGNAL(activated()) , this, SLOT(slotFileSaveAs()) );
910
        connect( scrActions["fileDocInfo"], SIGNAL(activated()) , this, SLOT(InfoDoc()) );
911
        connect( scrActions["fileDocSetup"], SIGNAL(activated()) , this, SLOT(SetupDoc()) );
912
        connect( scrActions["fileRevert"], SIGNAL(activated()) , this, SLOT(slotFileRevert()) );
913
        connect( scrActions["fileCollect"], SIGNAL(activated()) , this, SLOT(Collect()) );
914
        connect( scrActions["fileQuit"], SIGNAL(activated()) , this, SLOT(slotFileQuit()) );
915
        //File Import Menu
916
        connect( scrActions["fileImportText"], SIGNAL(activated()) , this, SLOT(slotFileOpen()) );
917
        connect( scrActions["fileImportAppendText"], SIGNAL(activated()) , this, SLOT(slotFileAppend()) );
918
        connect( scrActions["fileImportImage"], SIGNAL(activated()) , this, SLOT(slotFileOpen()) );    
919
        connect( scrActions["fileImportPage"], SIGNAL(activated()) , this, SLOT(slotDocMerge()) );
920
        //File Export Menu
921
        connect( scrActions["fileExportText"], SIGNAL(activated()) , this, SLOT(SaveText()) );
922
        connect( scrActions["fileExportAsEPS"], SIGNAL(activated()) , this, SLOT(SaveAsEps()) );
923
        connect( scrActions["fileExportAsPDF"], SIGNAL(activated()) , this, SLOT(SaveAsPDF()) );
924
        //The rest are plugins
925
}
926
 
1227 cbradney 927
void ScribusApp::initEditMenuActions()
928
{
929
        //Edit Menu
930
        scrActions.insert("editUndoAction", new ScrAction(QIconSet(loadIcon("u_undo16.png"), loadIcon("u_undo.png")), tr("&Undo"), CTRL+Key_Z, this, "editUndo"));
931
        scrActions.insert("editRedoAction", new ScrAction(QIconSet(loadIcon("u_redo16.png"), loadIcon("u_redo.png")), tr("&Redo"), CTRL+SHIFT+Key_Z, this, "editRedo"));
932
        scrActions.insert("editActionMode", new ScrAction(tr("&Item Action Mode"), QKeySequence(), this, "editActionMode"));
933
        scrActions.insert("editCut", new ScrAction(QIconSet(loadIcon("editcut.png"), loadIcon("editcut.png")), tr("Cu&t"), CTRL+Key_X, this, "editCut"));
934
        scrActions.insert("editCopy", new ScrAction(QIconSet(loadIcon("editcopy.png"), loadIcon("editcopy.png")), tr("&Copy"), CTRL+Key_C, this, "editCopy"));
935
        scrActions.insert("editPaste", new ScrAction(QIconSet(loadIcon("editpaste.png"), loadIcon("editpaste.png")), tr("&Paste"), CTRL+Key_V, this, "editPaste"));
936
        scrActions.insert("editClear", new ScrAction(QIconSet(loadIcon("editClear.png"), loadIcon("editClear.png")), tr("C&lear"), QKeySequence(), this, "editClear"));
937
        scrActions.insert("editSelectAll", new ScrAction(tr("Select &All"), CTRL+Key_A, this, "editSelectall"));
938
        scrActions.insert("editSearchReplace", new ScrAction(QIconSet(loadIcon("find16.png"), loadIcon("find16.png")),  tr("&Search/Replace..."), QKeySequence(), this, "editSearchReplace"));
939
 
940
        scrActions.insert("editColors", new ScrAction(tr("C&olors..."), QKeySequence(), this, "editColors"));
941
        scrActions.insert("editParaStyles", new ScrAction(tr("&Paragraph Styles..."), QKeySequence(), this, "editParaStyles"));
942
        scrActions.insert("editLineStyles", new ScrAction(tr("&Line Styles..."), QKeySequence(), this, "editLineStyles"));
943
        scrActions.insert("editTemplates", new ScrAction(tr("&Templates..."), QKeySequence(), this, "editTemplates"));
944
        scrActions.insert("editJavascripts", new ScrAction(tr("&Javascripts..."), QKeySequence(), this, "editJavascripts"));
945
        scrActions.insert("editPreferences", new ScrAction(tr("P&references..."), QKeySequence(), this, "editPreferences"));
946
        scrActions.insert("editFonts", new ScrAction(tr("&Fonts..."), QKeySequence(), this, "editFonts"));
947
 
948
        //TODO Extra tooltips
949
        //
950
 
951
        connect( scrActions["editUndoAction"], SIGNAL(activated()) , this, SLOT(UnDoAction()) );
952
        connect( scrActions["editRedoAction"], SIGNAL(activated()) , this, SLOT(RedoAction()) );
953
        //TODO connect( scrActions["editActionMode"], SIGNAL(activated()) , this, SLOT(RedoAction()) );
954
        connect( scrActions["editCut"], SIGNAL(activated()) , this, SLOT(slotEditCut()) );
955
        connect( scrActions["editCopy"], SIGNAL(activated()) , this, SLOT(slotEditCopy()) );
956
        connect( scrActions["editPaste"], SIGNAL(activated()) , this, SLOT(slotEditPaste()) );
957
        connect( scrActions["editClear"], SIGNAL(activated()) , this, SLOT(DeleteText()) );
958
        connect( scrActions["editSelectAll"], SIGNAL(activated()) , this, SLOT(SelectAll()) );
959
        connect( scrActions["editSearchReplace"], SIGNAL(activated()), this, SLOT(SearchText()) );
960
        connect( scrActions["editColors"], SIGNAL(activated()) , this, SLOT(slotEditColors()) );
961
        connect( scrActions["editParaStyles"], SIGNAL(activated()) , this, SLOT(slotEditStyles()) );
962
        connect( scrActions["editLineStyles"], SIGNAL(activated()) , this, SLOT(slotEditLineStyles()) );
963
        connect( scrActions["editTemplates"], SIGNAL(activated()) , this, SLOT(ManageTemp()) );
964
        connect( scrActions["editJavascripts"], SIGNAL(activated()) , this, SLOT(ManageJava()) );
965
        connect( scrActions["editPreferences"], SIGNAL(activated()) , this, SLOT(slotPrefsOrg()) );
966
        connect( scrActions["editFonts"], SIGNAL(activated()) , this, SLOT(slotFontOrg()) );
967
}
968
 
3 paul 969
void ScribusApp::initMenuBar()
970
{
971
        int MenID;
972
        QFont tmp;
973
        RecentDocs.clear();
1208 cbradney 974
 
1227 cbradney 975
        initFileMenuActions();
976
        initEditMenuActions();
1208 cbradney 977
 
978
        scrMenuMgr->createMenu("File", tr("&File"));
979
        scrMenuMgr->addMenuItem(scrActions["fileNew"], "File");
980
        scrMenuMgr->addMenuItem(scrActions["fileOpen"], "File");
981
        recentFileMenuName="FileOpenRecent";
982
        scrMenuMgr->createMenu(recentFileMenuName, tr("Open &Recent"), "File");
983
        scrMenuMgr->addMenuSeparator("File");
984
        scrMenuMgr->addMenuItem(scrActions["fileClose"], "File");
985
        scrMenuMgr->addMenuItem(scrActions["fileSave"], "File");
986
        scrMenuMgr->addMenuItem(scrActions["fileSaveAs"], "File");
987
        scrMenuMgr->addMenuItem(scrActions["fileRevert"], "File");
988
        scrMenuMgr->addMenuItem(scrActions["fileCollect"], "File");
989
        scrMenuMgr->addMenuSeparator("File");
990
        scrMenuMgr->createMenu("FileImport", tr("&Import"), "File");
991
        scrMenuMgr->addMenuItem(scrActions["fileImportText"], "FileImport");
992
        scrMenuMgr->addMenuItem(scrActions["fileImportAppendText"], "FileImport");
993
        scrMenuMgr->addMenuItem(scrActions["fileImportImage"], "FileImport");
994
        scrMenuMgr->addMenuItem(scrActions["fileImportPage"], "FileImport");
995
        scrMenuMgr->createMenu("FileExport", tr("&Export"), "File");
996
        scrMenuMgr->addMenuItem(scrActions["fileExportText"], "FileExport");
997
        scrMenuMgr->addMenuItem(scrActions["fileExportAsEPS"], "FileExport");
998
        scrMenuMgr->addMenuItem(scrActions["fileExportAsPDF"], "FileExport");
999
        scrMenuMgr->addMenuSeparator("File");
1000
        scrMenuMgr->addMenuItem(scrActions["fileDocInfo"], "File");
1001
        scrMenuMgr->addMenuItem(scrActions["fileDocSetup"], "File");
1002
        scrMenuMgr->addMenuItem(scrActions["filePrint"], "File");
1003
        scrMenuMgr->addMenuSeparator("File");
1004
        scrMenuMgr->addMenuItem(scrActions["fileQuit"], "File");
1005
 
1006
        /*
1007
        SetKeyEntry(0, tr("New"), M_FileNew, CTRL+Key_N);
1008
        SetKeyEntry(1, tr("Open..."), M_FileOpen, CTRL+Key_O);
1009
        SetKeyEntry(2, tr("Close"), M_FileClose, CTRL+Key_W);
1010
        SetKeyEntry(3, tr("Save"), M_FileSave, CTRL+Key_S);
1011
        SetKeyEntry(4, tr("Save as..."), M_FileSaveAs, 0);
1012
        SetKeyEntry(6, tr("Document Setup..."), M_FileDocSetup, 0);
1013
        SetKeyEntry(8, tr("Quit"), M_FileQuit, CTRL+Key_Q);
1014
        */
1015
        scrActions["fileClose"]->setEnabled(false);    
1016
        scrActions["fileSave"]->setEnabled(false);
1017
        scrActions["fileSaveAs"]->setEnabled(false);
1018
        scrActions["fileRevert"]->setEnabled(false);
1019
        scrActions["fileCollect"]->setEnabled(false);
1020
        scrActions["fileImportText"]->setEnabled(false);
1021
        scrActions["fileImportImage"]->setEnabled(false);
1022
        scrActions["fileImportAppendText"]->setEnabled(false);
1023
        scrActions["fileImportPage"]->setEnabled(false);
1024
        scrActions["fileExportText"]->setEnabled(false);
1025
        scrActions["fileExportAsEPS"]->setEnabled(false);
1026
        scrActions["fileExportAsPDF"]->setEnabled(false);
1027
        scrMenuMgr->setMenuEnabled("FileExport", false);
1028
        scrActions["fileDocInfo"]->setEnabled(false);
1029
        scrActions["fileDocSetup"]->setEnabled(false);
1030
        scrActions["filePrint"]->setEnabled(false);
1031
 
1227 cbradney 1032
        scrMenuMgr->createMenu("Edit", tr("&Edit"));
1033
        scrMenuMgr->addMenuItem(scrActions["editUndoAction"], "Edit");
1034
        scrMenuMgr->addMenuItem(scrActions["editRedoAction"], "Edit");
1035
        scrMenuMgr->addMenuItem(scrActions["editActionMode"], "Edit");
1036
        scrMenuMgr->addMenuSeparator("Edit");
1037
        scrMenuMgr->addMenuItem(scrActions["editCut"], "Edit");
1038
        scrMenuMgr->addMenuItem(scrActions["editCopy"], "Edit");
1039
        scrMenuMgr->addMenuItem(scrActions["editPaste"], "Edit");
1040
        scrMenuMgr->addMenuItem(scrActions["editClear"], "Edit");
1041
        scrMenuMgr->addMenuItem(scrActions["editSelectAll"], "Edit");
1042
        scrMenuMgr->addMenuSeparator("Edit");
1043
        scrMenuMgr->addMenuItem(scrActions["editSearchReplace"], "Edit");
1044
        scrMenuMgr->addMenuSeparator("Edit");
1045
        scrMenuMgr->addMenuItem(scrActions["editColors"], "Edit");
1046
        scrMenuMgr->addMenuItem(scrActions["editParaStyles"], "Edit");
1047
        scrMenuMgr->addMenuItem(scrActions["editLineStyles"], "Edit");
1048
        scrMenuMgr->addMenuItem(scrActions["editTemplates"], "Edit");
1049
        scrMenuMgr->addMenuItem(scrActions["editJavascripts"], "Edit");
1050
        scrMenuMgr->addMenuSeparator("Edit");
1051
        scrMenuMgr->addMenuItem(scrActions["editPreferences"], "Edit");
1052
        scrMenuMgr->addMenuItem(scrActions["editFonts"], "Edit");
1053
 
1054
        scrActions["editUndoAction"]->setEnabled(false);
1055
        scrActions["editRedoAction"]->setEnabled(false);
1056
        scrActions["editActionMode"]->setEnabled(false);
1057
        scrActions["editCut"]->setEnabled(false);
1058
        scrActions["editCopy"]->setEnabled(false);
1059
        scrActions["editPaste"]->setEnabled(false);
1060
        scrActions["editClear"]->setEnabled(false);
1061
        scrActions["editSelectAll"]->setEnabled(false);
1062
        scrActions["editSearchReplace"]->setEnabled(false);
1063
        scrActions["editParaStyles"]->setEnabled(false);
1064
        scrActions["editLineStyles"]->setEnabled(false);
1065
        scrActions["editTemplates"]->setEnabled(false);
1066
        scrActions["editJavascripts"]->setEnabled(false);
1067
 
1068
        /* CB TODO
1208 cbradney 1069
        SetKeyEntry(9, tr("Cut"), M_EditCut, CTRL+Key_X);
1070
        SetKeyEntry(10, tr("Copy"), M_EditCopy, CTRL+Key_C);
1071
        SetKeyEntry(11, tr("Paste"), M_EditPaste, CTRL+Key_V);
1227 cbradney 1072
        SetKeyEntry(12, tr("Clear"), M_editClear, 0);
1208 cbradney 1073
        SetKeyEntry(13, tr("Select all"), M_EditSelectAll, CTRL+Key_A);
3 paul 1074
        SetKeyEntry(14, tr("Colors..."), MenID, 0);
1208 cbradney 1075
        SetKeyEntry(15, tr("Styles..."), M_EditParaStyles, 0);
1076
        SetKeyEntry(16, tr("Templates..."), M_EditTemplates, 0);
800 fschmid 1077
        SetKeyEntry(17, tr("Fonts..."), MenID, 0);
1227 cbradney 1078
        */
1079
 
1080
        //Style Menu
3 paul 1081
        StilMenu = new QPopupMenu();
1208 cbradney 1082
        itemMenu = new QPopupMenu();
68 Franz 1083
        SetKeyEntry(19, tr("Select New Font"), 0, 0);
1208 cbradney 1084
        M_ItemDuplicate = itemMenu->insertItem( tr("D&uplicate"), this, SLOT(ObjektDup()), CTRL+Key_D);
1085
        SetKeyEntry(20, tr("Duplicate"), M_ItemDuplicate, CTRL+Key_D);
1086
        M_ItemMultiDuplicate = itemMenu->insertItem( tr("&Multiple Duplicate"), this, SLOT(ObjektDupM()));
1087
        SetKeyEntry(21, tr("Multiple Duplicate"), M_ItemMultiDuplicate, 0);
1088
        M_ItemDelete = itemMenu->insertItem( tr("&Delete"), this, SLOT(DeleteObjekt()), CTRL+Key_K);
1089
        SetKeyEntry(22, tr("Delete"), M_ItemDelete, CTRL+Key_K);
1090
        itemMenu->insertSeparator();
1091
        M_ItemGroup = itemMenu->insertItem( tr("&Group"), this, SLOT(GroupObj()), CTRL+Key_G);
1092
        SetKeyEntry(23, tr("Group"), M_ItemGroup, CTRL+Key_G);
1093
        M_ItemUngroup = itemMenu->insertItem( tr("&Ungroup"), this, SLOT(UnGroupObj()),CTRL+Key_U);
1094
        SetKeyEntry(24, tr("Ungroup"), M_ItemUngroup, CTRL+Key_U);
1095
        M_ItemLock = itemMenu->insertItem( tr("&Lock"), this, SLOT(ToggleObjLock()), CTRL+Key_F);
1096
        itemMenu->insertSeparator();
1097
        M_ItemSendToBack = itemMenu->insertItem( tr("Send to &Back"), this, SLOT(Objekt2Back()));
1098
        SetKeyEntry(25, tr("Send to Back"), M_ItemSendToBack, 0);
1099
        M_ItemBringToFront = itemMenu->insertItem( tr("Bring to &Front"), this, SLOT(Objekt2Front()));
1100
        SetKeyEntry(26, tr("Bring to Front"), M_ItemBringToFront, 0);
1101
        M_ItemLower = itemMenu->insertItem( tr("&Lower"), this, SLOT(ObjektLower()));
1102
        SetKeyEntry(27, tr("Lower"), M_ItemLower, 0);
1103
        M_ItemRaise = itemMenu->insertItem( tr("&Raise"), this, SLOT(ObjektRaise()));
1104
        SetKeyEntry(28, tr("Raise"), M_ItemRaise, 0);
1105
        M_ItemAlignDist = itemMenu->insertItem( tr("Distribute/&Align..."), this, SLOT(ObjektAlign()));
1106
        SetKeyEntry(29, tr("Distribute/Align..."), M_ItemAlignDist, 0);
1107
        itemMenu->insertSeparator();
3 paul 1108
        ShapeMenu = new QPopupMenu();
169 Franz 1109
        SCustom = new Autoforms(0);
1110
        ShapeMenu->insertItem(SCustom);
272 Franz 1111
        connect(SCustom, SIGNAL(FormSel(int, int, double *)), this, SLOT(MakeFrame(int, int, double *)));
377 Franz 1112
        ShapeEdit = ShapeMenu->insertItem( tr("&Edit Shape"), this, SLOT(ToggleFrameEdit()));
1208 cbradney 1113
        ShapeM = itemMenu->insertItem( tr("&Shape"), ShapeMenu);
1114
        PfadT = itemMenu->insertItem( tr("&Attach Text to Path"), this, SLOT(Pfadtext()));
1115
        PfadDT = itemMenu->insertItem( tr("&Detach Text from Path"), this, SLOT(noPfadtext()));
1116
        PfadV = itemMenu->insertItem( tr("&Combine Polygons"), this, SLOT(UniteOb()));
1117
        PfadS = itemMenu->insertItem( tr("Split &Polygons"), this, SLOT(SplitUniteOb()));
1118
        PfadTP = itemMenu->insertItem( tr("C&onvert to Outlines"), this, SLOT(TraceText()));
1119
        itemMenu->setItemEnabled(ShapeM, 0);
1120
        itemMenu->setItemEnabled(M_ItemAlignDist, 0);
1121
        itemMenu->setItemEnabled(M_ItemGroup, 0);
1122
        itemMenu->setItemEnabled(M_ItemUngroup, 0);
1123
        itemMenu->setItemEnabled(PfadT, 0);
1124
        itemMenu->setItemEnabled(PfadDT, 0);
1125
        itemMenu->setItemEnabled(PfadV, 0);
1126
        itemMenu->setItemEnabled(PfadS, 0);
1127
        itemMenu->setItemEnabled(M_ItemLock, 0);
1128
        itemMenu->setItemEnabled(PfadTP, 0);
3 paul 1129
        pageMenu = new QPopupMenu();
308 Franz 1130
        MenID = pageMenu->insertItem( tr("&Insert..."), this, SLOT(slotNewPageM()));
3 paul 1131
        SetKeyEntry(30, tr("Insert..."), MenID, 0);
308 Franz 1132
        pgmd = pageMenu->insertItem( tr("&Delete..."), this, SLOT(DeletePage()));
3 paul 1133
        SetKeyEntry(31, tr("Delete..."), pgmd, 0);
308 Franz 1134
        MenID = pageMenu->insertItem( tr("&Copy")+"...", this, SLOT(CopyPage()));
3 paul 1135
        SetKeyEntry(61, tr("Copy")+"...", MenID, 0);
308 Franz 1136
        pgmv = pageMenu->insertItem( tr("&Move..."), this, SLOT(MovePage()));
3 paul 1137
        SetKeyEntry(32, tr("Move..."), pgmv, 0);
308 Franz 1138
        MenID = pageMenu->insertItem( tr("&Apply Template..."), this, SLOT(ApplyTemp()));
3 paul 1139
        SetKeyEntry(33, tr("Apply Template..."), MenID, 0);
348 Franz 1140
        MenID = pageMenu->insertItem( tr("Manage &Guides..."), this, SLOT(ManageGuides()));
3 paul 1141
        SetKeyEntry(49, tr("Manage Guides..."), MenID, 0);
1142
        pageMenu->setItemEnabled(pgmd, 0);
1143
        pageMenu->setItemEnabled(pgmv, 0);
1144
        viewMenu=new QPopupMenu();
308 Franz 1145
        MenID = viewMenu->insertItem( tr("&Fit in Window"), this, SLOT(slotZoomFit()), CTRL+Key_0);
3 paul 1146
        SetKeyEntry(34, tr("Fit in Window"), MenID, CTRL+Key_0);
308 Franz 1147
        MenID = viewMenu->insertItem("&50%", this, SLOT(slotZoom50()));
3 paul 1148
        SetKeyEntry(35, tr("50%"), MenID, 0);
308 Franz 1149
        MenID = viewMenu->insertItem("&75%", this, SLOT(slotZoom75()));
3 paul 1150
        SetKeyEntry(36, tr("75%"), MenID, 0);
308 Franz 1151
        MenID = viewMenu->insertItem( tr("&100%"), this, SLOT(slotZoom100()), CTRL+Key_1);
340 Franz 1152
        SetKeyEntry(37, tr("100%"), MenID, CTRL+Key_1);
308 Franz 1153
        MenID = viewMenu->insertItem("&200%", this, SLOT(slotZoom200()));
3 paul 1154
        SetKeyEntry(38, tr("200%"), MenID, 0);
308 Franz 1155
        MenID = viewMenu->insertItem( tr("&Thumbnails"), this, SLOT(slotZoom20()));
3 paul 1156
        SetKeyEntry(39, tr("Thumbnails"), MenID, 0);
1157
        viewMenu->insertSeparator();
1208 cbradney 1158
        M_ViewShowMarkers = viewMenu->insertItem( tr("Show &Margins"), this, SLOT(ToggleMarks()));
1159
        SetKeyEntry(40, tr("Hide Margins"), M_ViewShowMarkers, 0);
1160
        viewMenu->setItemChecked(M_ViewShowMarkers, true);
1161
        M_ViewDrawFrames = viewMenu->insertItem( tr("Show &Frames"), this, SLOT(ToggleFrames()));
1162
        SetKeyEntry(41, tr("Hide Frames"), M_ViewDrawFrames, 0);
1163
        viewMenu->setItemChecked(M_ViewDrawFrames, true);
1164
        M_ViewShowImages = viewMenu->insertItem( tr("Show &Images"), this, SLOT(TogglePics()));
1165
        viewMenu->setItemChecked(M_ViewShowImages, true);
1166
        SetKeyEntry(42, tr("Hide Images"), M_ViewShowImages, 0);
1167
        M_ViewShowGrid = viewMenu->insertItem( tr("Show &Grid"), this, SLOT(ToggleRaster()));
1168
        SetKeyEntry(43, tr("Show Grid"), M_ViewShowGrid, 0);
1169
        viewMenu->setItemChecked(M_ViewShowGrid, false);
1170
        M_ViewShowGuides = viewMenu->insertItem( tr("Show G&uides"), this, SLOT(ToggleGuides()));
1171
        viewMenu->setItemChecked(M_ViewShowGuides, true);
1172
        M_ViewShowBaseline = viewMenu->insertItem( tr("Show &Baseline Grid"), this, SLOT(ToggleBase()));
1173
        viewMenu->setItemChecked(M_ViewShowBaseline, false);
1174
        M_ViewShowTextChain = viewMenu->insertItem( tr("Show &Text Chain"), this, SLOT(ToggleTextLinks()));
1175
        viewMenu->setItemChecked(M_ViewShowTextChain, false);
340 Franz 1176
        viewMenu->insertSeparator();
1208 cbradney 1177
        M_ViewSnapToGrid = viewMenu->insertItem( tr("Sn&ap to Grid"), this, SLOT(ToggleURaster()));
1178
        SetKeyEntry(44, tr("Snap to Grid"), M_ViewSnapToGrid, 0);
1179
        M_ViewSnapToGuides = viewMenu->insertItem( tr("Sna&p to Guides"), this, SLOT(ToggleUGuides()));
3 paul 1180
        toolMenu=new QPopupMenu();
308 Franz 1181
        viewMpal = toolMenu->insertItem( tr("&Properties"), this, SLOT(ToggleMpal()));
119 Franz 1182
        SetKeyEntry(46, tr("Properties"), viewMpal, 0);
308 Franz 1183
        viewTpal = toolMenu->insertItem( tr("&Outline"), this, SLOT(ToggleTpal()));
119 Franz 1184
        SetKeyEntry(47, tr("Outline"), viewTpal, 0);
308 Franz 1185
        viewBpal = toolMenu->insertItem( tr("&Scrapbook"), this, SLOT(ToggleBpal()));
119 Franz 1186
        SetKeyEntry(48, tr("Scrapbook"), viewBpal, 0);
308 Franz 1187
        viewLpal = toolMenu->insertItem( tr("&Layers"), this, SLOT(ToggleLpal()));
1188
        viewSepal = toolMenu->insertItem( tr("P&age Palette"), this, SLOT(ToggleSepal()));
1189
        viewBopal = toolMenu->insertItem( tr("&Bookmarks"), this, SLOT(ToggleBookpal()));
1213 tsoots 1190
        viewUndoPalette = toolMenu->insertItem(tr("Action &History"), this, SLOT(ToggleUndoPalette()));
800 fschmid 1191
        toolbarMenuTools = toolMenu->insertItem( tr("&Tools"), this, SLOT(ToggleTools()));
1192
        toolbarMenuPDFTools = toolMenu->insertItem( tr("P&DF Tools"), this, SLOT(TogglePDFTools()));
1193
        SetKeyEntry(45, tr("Tools"), toolbarMenuTools, 0);
1194
        SetKeyEntry(55, tr("Tooltips"), tip, 0);
3 paul 1195
        extraMenu=new QPopupMenu();
308 Franz 1196
        MenID = extraMenu->insertItem( tr("&Manage Pictures"), this, SLOT(StatusPic()));
3 paul 1197
        SetKeyEntry(51, tr("Manage Pictures"), MenID, 0);
308 Franz 1198
        hyph = extraMenu->insertItem( tr("&Hyphenate Text"), this, SLOT(doHyphenate()));
3 paul 1199
        extraMenu->setItemEnabled(hyph, 0);
1200
        SetKeyEntry(50, tr("Hyphenate Text"), hyph, 0);
1208 cbradney 1201
        M_ExtraCharSelect = extraMenu->insertItem( tr("Insert Special"), this, SLOT(slotCharSelect()));
1202
        extraMenu->setItemEnabled(M_ExtraCharSelect, 0);
284 Franz 1203
 
3 paul 1204
        windowsMenu = new QPopupMenu();
1205
        windowsMenu->setCheckable( true );
1206
        connect(windowsMenu, SIGNAL(aboutToShow()), this, SLOT(windowsMenuAboutToShow()));
1207
        helpMenu=new QPopupMenu();
308 Franz 1208
        MenID = helpMenu->insertItem( tr("&About Scribus"), this, SLOT(slotHelpAbout()));
3 paul 1209
        SetKeyEntry(52, tr("About Scribus"), MenID, 0);
308 Franz 1210
        MenID = helpMenu->insertItem( tr("About &Qt"), this, SLOT(slotHelpAboutQt()));
3 paul 1211
        SetKeyEntry(53, tr("About Qt"), MenID, 0);
1212
        helpMenu->insertSeparator();
800 fschmid 1213
        tip = helpMenu->insertItem( tr("Toolti&ps"), this, SLOT(ToggleTips()));
1214
        tipsOn = true;
1215
        helpMenu->setItemChecked(tip, tipsOn);
308 Franz 1216
        MenID = helpMenu->insertItem( tr("Scribus &Manual..."), this, SLOT(slotOnlineHelp()));
3 paul 1217
        SetKeyEntry(54, tr("Online-Help..."), MenID, 0);
456 fschmid 1218
 
1227 cbradney 1219
/*
1220
        editMenu->insertItem( tr("Test"), this, SLOT(slotTest()));
456 fschmid 1221
        editMenu->insertItem( tr("Test2"), this, SLOT(slotTest2()));
1222
*/
1208 cbradney 1223
 
1224
        scrMenuMgr->addMenuToMenuBar("File");
1227 cbradney 1225
        scrMenuMgr->addMenuToMenuBar("Edit");
308 Franz 1226
        Stm = menuBar()->insertItem( tr("St&yle"), StilMenu);
1208 cbradney 1227
        Obm = menuBar()->insertItem( tr("&Item"), itemMenu);
238 Franz 1228
        pgmm = menuBar()->insertItem( tr("&Page"), pageMenu);
175 Franz 1229
        menuBar()->setItemEnabled(Stm, 0);
3 paul 1230
        menuBar()->setItemEnabled(Obm, 0);
1231
        menuBar()->setItemEnabled(pgmm, 0);
272 Franz 1232
        ViMen = menuBar()->insertItem( tr("&View"), viewMenu);
1233
        menuBar()->setItemEnabled(ViMen, 0);
237 Franz 1234
        menuBar()->insertItem( tr("&Tools"), toolMenu);
238 Franz 1235
        exmn = menuBar()->insertItem( tr("E&xtras"), extraMenu);
3 paul 1236
        menuBar()->setItemEnabled(exmn, 0);
272 Franz 1237
        WinMen = menuBar()->insertItem( tr("&Windows"), windowsMenu );
1238
        menuBar()->setItemEnabled(WinMen, 0);
3 paul 1239
        menuBar()->insertSeparator();
237 Franz 1240
        menuBar()->insertItem( tr("&Help"), helpMenu);
1208 cbradney 1241
        alignMenu = new QPopupMenu();
1242
        alignMenu->insertItem( tr("&Left"));
1243
        alignMenu->insertItem( tr("&Center"));
1244
        alignMenu->insertItem( tr("&Right"));
1245
        alignMenu->insertItem( tr("&Block"));
1246
        alignMenu->insertItem( tr("&Forced"));
3 paul 1247
        ColorMenu = new QPopupMenu();
148 Franz 1248
        ColorMenC = new QComboBox(false);
1249
        ColorMenC->setEditable(false);
1250
        ColorMenu->insertItem(ColorMenC);
3 paul 1251
        SizeTMenu = new QPopupMenu();
308 Franz 1252
        SizeTMenu->insertItem( tr("&Other..."));
617 cbradney 1253
        QString ar_sizes[] = {" 7", " 9", "10", "11", "12", "14", "18", "24", "36", "48", "60", "72"};
274 Franz 1254
        size_t f_size = sizeof(ar_sizes) / sizeof(*ar_sizes);
1255
        for (uint s = 0; s < f_size; ++s)
1256
                SizeTMenu->insertItem(ar_sizes[s] + tr(" pt"));
3 paul 1257
        ShadeMenu = new QPopupMenu();
308 Franz 1258
        ShadeMenu->insertItem( tr("&Other..."));
3 paul 1259
        ShadeMenu->insertItem("0 %");
1260
        ShadeMenu->insertItem("10 %");
1261
        ShadeMenu->insertItem("20 %");
1262
        ShadeMenu->insertItem("30 %");
1263
        ShadeMenu->insertItem("40 %");
1264
        ShadeMenu->insertItem("50 %");
1265
        ShadeMenu->insertItem("60 %");
1266
        ShadeMenu->insertItem("70 %");
1267
        ShadeMenu->insertItem("80 %");
1268
        ShadeMenu->insertItem("90 %");
1269
        ShadeMenu->insertItem("100 %");
1270
        FontMenu = new QPopupMenu();
1271
        TypeStyleMenu = new QPopupMenu();
112 Franz 1272
        TypeStyleMenu->insertItem( tr("Normal"));
3 paul 1273
        tmp = qApp->font();
1274
        tmp.setUnderline(true);
112 Franz 1275
        TypeStyleMenu->insertItem(new FmItem( tr("Underline"), tmp));
3 paul 1276
        tmp = qApp->font();
1277
        tmp.setStrikeOut(true);
112 Franz 1278
        TypeStyleMenu->insertItem(new FmItem( tr("Strikethru"), tmp));
1279
        TypeStyleMenu->insertItem( tr("Small Caps"));
1280
        TypeStyleMenu->insertItem( tr("Superscript"));
1281
        TypeStyleMenu->insertItem( tr("Subscript"));
1282
        TypeStyleMenu->insertItem( tr("Outlined"));
801 cbradney 1283
 
1284
        SetKeyEntry(61, tr("Attach Text to Path"), PfadT, 0);
1285
        SetKeyEntry(62, tr("Show Layers"), viewLpal, 0);
1227 cbradney 1286
        /*CB TODO
1208 cbradney 1287
        SetKeyEntry(63, tr("Javascripts..."), M_EditJavascripts, 0);
1227 cbradney 1288
        SetKeyEntry(64, tr("Undo"), M_EditUndo, CTRL+Key_Z);
1289
        SetKeyEntry(65, tr("Redo"), M_EditRedo, CTRL+SHIFT+Key_Z);
1290
        */
1291
 
1114 tsoots 1292
        SetKeyEntry(66, tr("Show Page Palette"), viewSepal, 0);
1208 cbradney 1293
        SetKeyEntry(67, tr("Lock/Unlock"), M_ItemLock, CTRL+Key_F);
801 cbradney 1294
 
1114 tsoots 1295
        connect(UndoManager::instance(), SIGNAL(newAction(UndoObject*, UndoState*)),
1296
                this, SLOT(refreshUndoRedoItems()));
1297
        connect(UndoManager::instance(), SIGNAL(undoRedoDone()), this, SLOT(refreshUndoRedoItems()));
1298
        connect(toolMenu, SIGNAL(aboutToShow()), this, SLOT(refreshUndoRedoItems()));
1208 cbradney 1299
 
801 cbradney 1300
        connect(ColorMenC, SIGNAL(activated(int)), this, SLOT(setItemFarbe(int)));
1301
        connect(ShadeMenu, SIGNAL(activated(int)), this, SLOT(setItemShade(int)));
1302
        connect(FontMenu, SIGNAL(activated(int)), this, SLOT(setItemFont(int)));
1303
        connect(SizeTMenu, SIGNAL(activated(int)), this, SLOT(setItemFSize(int)));
1304
        connect(TypeStyleMenu, SIGNAL(activated(int)), this, SLOT(setItemTypeStyle(int)));
1208 cbradney 1305
        connect(alignMenu, SIGNAL(activated(int)), this, SLOT(setItemTextAli(int)));
3 paul 1306
}
1307
 
1308
void ScribusApp::initStatusBar()
1309
{
809 cbradney 1310
        FMess = new QLabel( "           ", statusBar(), "ft");
3 paul 1311
        FProg = new QProgressBar(statusBar(), "p");
272 Franz 1312
        FProg->setCenterIndicator(true);
3 paul 1313
        FProg->setFixedWidth( 100 );
809 cbradney 1314
        FProg->reset();
1315
        XMess = new QLabel( tr("X-Pos:"), statusBar(), "xt");
1316
        YMess = new QLabel( tr("Y-Pos:"), statusBar(), "yt");
1317
        XDat = new QLabel( "         ", statusBar(), "dt");
1318
        YDat = new QLabel( "         ", statusBar(), "ydt");
1319
 
1320
        statusBar()->addWidget(FMess, 3, true);
3 paul 1321
        statusBar()->addWidget(FProg, 0, true);
1322
        statusBar()->addWidget(XMess, 0, true);
1323
        statusBar()->addWidget(XDat, 1, true);
1324
        statusBar()->addWidget(YMess, 0, true);
1325
        statusBar()->addWidget(YDat, 1, true);
1326
}
1327
 
80 Franz 1328
void ScribusApp::ReportMP(double xp, double yp)
3 paul 1329
{
1065 cbradney 1330
        QString suffix=unitGetSuffixFromIndex(doc->docUnitIndex);
1331
        int multiplier=unitGetDecimalsFromIndex(doc->docUnitIndex);
806 cbradney 1332
        double divisor = static_cast<double>(multiplier);
1065 cbradney 1333
        int precision=precision = unitGetPrecisionFromIndex(doc->docUnitIndex);
809 cbradney 1334
        QString tmp;
806 cbradney 1335
        XDat->setText(tmp.setNum(qRound(xp*UmReFaktor * multiplier) / divisor, 'f', precision) + suffix);
1336
        YDat->setText(tmp.setNum(qRound(yp*UmReFaktor * multiplier) / divisor, 'f', precision) + suffix);
3 paul 1337
}
1338
 
1339
void ScribusApp::SetKeyEntry(int Nr, QString text, int Men, int KeyC)
1340
{
1341
        Keys ke;
1342
        ke.Name = text;
1343
        ke.MenuID = Men;
1344
        ke.KeyID = KeyC;
1345
        Prefs.KeyActions.insert(Nr, ke);
1346
}
1347
 
1348
void ScribusApp::DeleteSel(PageItem *b)
1349
{
238 Franz 1350
        int FirstSel = 0;
1351
        bool first = false;
1065 cbradney 1352
        for (ScText *it = b->itemText.first(); it != 0; it = b->itemText.next())
272 Franz 1353
        {
1354
                if (it->cselect)
1355
                {
238 Franz 1356
                        first = true;
1065 cbradney 1357
                        b->itemText.remove();
1358
                        it = b->itemText.prev();
272 Franz 1359
                        if (it == 0)
1065 cbradney 1360
                                it = b->itemText.first();
272 Franz 1361
                }
238 Franz 1362
                if (!first)
1363
                        FirstSel++;
272 Franz 1364
        }
1065 cbradney 1365
        if (b->itemText.count() != 0)
238 Franz 1366
        {
1065 cbradney 1367
                if (b->itemText.first()->cselect)
3 paul 1368
                {
1065 cbradney 1369
                        b->itemText.remove();
3 paul 1370
                        b->CPos = 0;
238 Franz 1371
                }
3 paul 1372
                else
238 Franz 1373
                        b->CPos = FirstSel;
1374
        }
3 paul 1375
        else
1376
                b->CPos = 0;
272 Franz 1377
        b->HasSel = false;
1378
        DisableTxEdit();
3 paul 1379
}
1380
 
1381
void ScribusApp::setTBvals(PageItem *b)
1382
{
1065 cbradney 1383
        if (b->itemText.count() != 0)
272 Franz 1384
        {
1065 cbradney 1385
                int ChPos = QMIN(b->CPos, static_cast<int>(b->itemText.count()-1));
1386
                doc->CurrentStyle = b->itemText.at(ChPos)->cstyle & 127;
1387
                doc->currentParaStyle = b->itemText.at(ChPos)->cab;
1388
                setAbsValue(doc->currentParaStyle);
1389
                Mpal->setAli(doc->currentParaStyle);
1390
                doc->CurrFont = b->itemText.at(ChPos)->cfont;
1391
                doc->CurrFontSize = b->itemText.at(ChPos)->csize;
1392
                doc->CurrTextFill = b->itemText.at(ChPos)->ccolor;
1393
                doc->CurrTextFillSh = b->itemText.at(ChPos)->cshade;
1394
                doc->CurrTextStroke = b->itemText.at(ChPos)->cstroke;
1395
                doc->CurrTextStrokeSh = b->itemText.at(ChPos)->cshade2;
1396
                doc->CurrTextScale = b->itemText.at(ChPos)->cscale;
68 Franz 1397
                emit TextFarben(doc->CurrTextStroke, doc->CurrTextFill, doc->CurrTextStrokeSh, doc->CurrTextFillSh);
1398
                emit TextIFont(doc->CurrFont);
272 Franz 1399
                emit TextISize(doc->CurrFontSize);
1065 cbradney 1400
                emit TextUSval(b->itemText.at(ChPos)->cextra);
272 Franz 1401
                emit TextStil(doc->CurrentStyle);
68 Franz 1402
                emit TextScale(doc->CurrTextScale);
272 Franz 1403
        }
3 paul 1404
}
1405
 
1406
void ScribusApp::wheelEvent(QWheelEvent *w)
1407
{
1408
        if (HaveDoc)
239 Franz 1409
        {
276 Franz 1410
                if ((w->orientation() != Qt::Vertical) || ( w->state() & ShiftButton ))
3 paul 1411
                {
239 Franz 1412
                        if (w->delta() < 0)
240 Franz 1413
                                view->scrollBy(Prefs.Wheelval, 0);
239 Franz 1414
                        else
240 Franz 1415
                                view->scrollBy(-Prefs.Wheelval, 0);
239 Franz 1416
                }
3 paul 1417
                else
239 Franz 1418
                {
1419
                        if (w->delta() < 0)
240 Franz 1420
                                view->scrollBy(0, Prefs.Wheelval);
239 Franz 1421
                        else
240 Franz 1422
                                view->scrollBy(0, -Prefs.Wheelval);
239 Franz 1423
                }
3 paul 1424
                w->accept();
239 Franz 1425
        }
3 paul 1426
}
1427
 
1428
void ScribusApp::keyPressEvent(QKeyEvent *k)
1429
{
146 Franz 1430
        QWidgetList windows;
237 Franz 1431
        QWidget* w = NULL;
1065 cbradney 1432
        struct ScText *hg;
3 paul 1433
        int kk = k->key();
1434
        int as = k->ascii();
80 Franz 1435
        double altx, alty;
3 paul 1436
        QString uc = k->text();
1437
        QString cr, Tcha, Twort;
1438
        uint Tcoun;
237 Franz 1439
        int len, pos, c;
92 Franz 1440
        if (keyrep)
1441
                return;
1442
        keyrep = true;
3 paul 1443
        switch (k->state())
272 Franz 1444
        {
1445
        case ShiftButton:
1446
                KeyMod = 0x00200000;
1447
                break;
1448
        case AltButton:
1449
                KeyMod = 0x00800000;
1450
                break;
1451
        case ControlButton:
1452
                KeyMod = 0x00400000;
1453
                break;
1454
        default:
1455
                KeyMod = 0;
1456
                break;
1457
        }
276 Franz 1458
        if (kk == Key_F10)
1459
        {
1460
                keyrep = false;
1461
                ToggleAllPalettes();
1462
                return;
1463
        }
1464
        if ((kk == Key_F11) && (HaveDoc))
1465
        {
1466
                keyrep = false;
1467
                ToggleAllGuides();
1468
                return;
1469
        }
292 Franz 1470
        if ((kk == Key_Escape) && (HaveDoc))
1471
        {
1472
                keyrep = false;
855 fschmid 1473
                PageItem *b;
1474
                if ((view->SelItem.count() != 0))
1475
                {
1476
                        b = view->SelItem.at(0);
1065 cbradney 1477
                        switch (doc->appMode)
855 fschmid 1478
                        {
1065 cbradney 1479
                                case NormalMode:
855 fschmid 1480
                                        b->Sizing = false;
1481
                                        if (doc->SubMode != -1)
1482
                                        {
1483
                                                view->Deselect(false);
1484
//                                              if (!doc->TemplateMode)
1065 cbradney 1485
//                                                      Tpal->slotRemoveElement(doc->currentPage->PageNr, b->ItemNr);
855 fschmid 1486
                                                doc->Items.remove(b->ItemNr);
1487
                                        }
1488
                                        break;
1229 fschmid 1489
                                case LinkFrames:
1490
                                case UnlinkFrames:
1065 cbradney 1491
                                case EditMode:
855 fschmid 1492
                                        break;
1065 cbradney 1493
                                case DrawBezierLine:
855 fschmid 1494
                                        b->PoLine.resize(b->PoLine.size()-2);
1495
                                        if (b->PoLine.size() < 4)
1496
                                        {
1497
                                                view->Deselect(false);
1498
//                                              if (!doc->TemplateMode)
1065 cbradney 1499
//                                                      Tpal->slotRemoveElement(doc->currentPage->PageNr, b->ItemNr);
855 fschmid 1500
                                                doc->Items.remove(b->ItemNr);
1501
                                        }
1502
                                        else
1503
                                        {
1504
                                                view->SizeItem(b->PoLine.WidthHeight().x(), b->PoLine.WidthHeight().y(), b->ItemNr, false, false);
1505
                                                view->SetPolyClip(b, qRound(QMAX(b->Pwidth / 2, 1)));
1506
                                                view->AdjustItemSize(b);
1507
                                                b->ContourLine = b->PoLine.copy();
1508
                                                b->ClipEdited = true;
1509
                                                b->FrameType = 3;
1510
                                                slotDocCh();
1511
                                        }
1512
                                        view->FirstPoly = true;
1513
                                        break;
1514
                                default:
1515
                                        view->Deselect(false);
1516
//                                      if (!doc->TemplateMode)
1065 cbradney 1517
//                                              Tpal->slotRemoveElement(doc->currentPage->PageNr, b->ItemNr);
855 fschmid 1518
                                        doc->Items.remove(b->ItemNr);
1519
                                        break;
1520
                        }
1521
                }
1522
                view->Mpressed = false;
1523
                doc->DragP = false;
1524
                doc->leaveDrag = false;
1525
                view->Imoved = false;
1526
                view->mCG = false;
1527
                view->MidButt = false;
1528
                doc->SubMode = -1;
292 Franz 1529
                NoFrameEdit();
1530
                slotSelect();
1531
                return;
1532
        }
232 Franz 1533
        ButtonState buttonState = k->state();
272 Franz 1534
        if ((HaveDoc) && (!view->LE->hasFocus()) && (!view->PGS->PageCombo->hasFocus()))
1535
        {
1065 cbradney 1536
                if ((doc->appMode != EditMode) && (view->SelItem.count() == 0))
272 Franz 1537
                {
1538
                        switch (kk)
146 Franz 1539
                        {
272 Franz 1540
                        case Key_Space:
1541
                                keyrep = false;
1065 cbradney 1542
                                if (doc->appMode == PanningMode)
1543
                                        setAppMode(NormalMode);
272 Franz 1544
                                else
1545
                                {
1065 cbradney 1546
                                        setAppMode(PanningMode);
272 Franz 1547
                                        qApp->setOverrideCursor(QCursor(loadIcon("HandC.xpm")), true);
1548
                                }
1549
                                return;
1550
                                break;
1551
                        case Key_Prior:
1552
                                view->scrollBy(0, -Prefs.Wheelval);
1553
                                keyrep = false;
1554
                                return;
1555
                                break;
1556
                        case Key_Next:
1557
                                view->scrollBy(0, Prefs.Wheelval);
1558
                                keyrep = false;
1559
                                return;
1560
                                break;
1561
                        case Key_Tab:
1562
                                keyrep = false;
1563
                                windows = wsp->windowList();
1564
                                if (windows.count() > 1)
1565
                                {
1566
                                        for (int i = 0; i < static_cast<int>(windows.count()); ++i)
250 Franz 1567
                                        {
272 Franz 1568
                                                if (wsp->activeWindow() == windows.at(i))
1569
                                                {
1570
                                                        if (i == static_cast<int>(windows.count()-1))
1571
                                                                w = windows.at(0);
1572
                                                        else
1573
                                                                w = windows.at(i+1);
1574
                                                        break;
1575
                                                }
250 Franz 1576
                                        }
272 Franz 1577
                                        doc->OpenNodes = Tpal->buildReopenVals();
1578
                                        if ( w )
1579
                                                w->showNormal();
1580
                                        newActWin(w);
1581
                                }
1582
                                return;
1583
                                break;
1584
                        }
1585
                }
456 fschmid 1586
                if (view->SelItem.count() != 0)
272 Franz 1587
                {
456 fschmid 1588
                        PageItem *b = view->SelItem.at(0);
358 Franz 1589
                        if (kk == Key_F9)
1590
                        {
1591
                                keyrep = false;
1065 cbradney 1592
                                if (doc->appMode == EditMode)
1593
                                        setAppMode(NormalMode);
358 Franz 1594
                                else
1065 cbradney 1595
                                        setAppMode(EditMode);
358 Franz 1596
                                return;
1597
                        }
1065 cbradney 1598
                        switch (doc->appMode)
272 Franz 1599
                        {
1065 cbradney 1600
                        case NormalMode:
272 Franz 1601
                                switch (kk)
1602
                                {
360 Franz 1603
                                case Key_Backspace:
272 Franz 1604
                                case Key_Delete:
1605
                                        if (!doc->EditClip)
997 fschmid 1606
                                                view->DeleteItem();
272 Franz 1607
                                        break;
360 Franz 1608
                                case Key_Prior:
1609
                                        if (!b->Locked)
456 fschmid 1610
                                                view->RaiseItem();
360 Franz 1611
                                        break;
1612
                                case Key_Next:
1613
                                        if (!b->Locked)
456 fschmid 1614
                                                view->LowerItem();
360 Franz 1615
                                        break;
272 Franz 1616
                                case Key_Left:
1617
                                        if (!b->Locked)
1618
                                        {
1619
                                                if ( buttonState & ShiftButton )
456 fschmid 1620
                                                        view->moveGroup(-10, 0);
272 Franz 1621
                                                else if ( buttonState & ControlButton )
456 fschmid 1622
                                                        view->moveGroup(-0.1, 0);
272 Franz 1623
                                                else
456 fschmid 1624
                                                        view->moveGroup(-1, 0);
272 Franz 1625
                                        }
1626
                                        break;
1627
                                case Key_Right:
1628
                                        if (!b->Locked)
1629
                                        {
1630
                                                if ( buttonState & ShiftButton )
456 fschmid 1631
                                                        view->moveGroup(10, 0);
272 Franz 1632
                                                else if ( buttonState & ControlButton )
456 fschmid 1633
                                                        view->moveGroup(0.1, 0);
272 Franz 1634
                                                else
456 fschmid 1635
                                                        view->moveGroup(1, 0);
272 Franz 1636
                                        }
1637
                                        break;
1638
                                case Key_Up:
1639
                                        if (!b->Locked)
1640
                                        {
1641
                                                if ( buttonState & ShiftButton )
456 fschmid 1642
                                                        view->moveGroup(0, -10);
272 Franz 1643
                                                else if ( buttonState & ControlButton )
456 fschmid 1644
                                                        view->moveGroup(0, -0.1);
272 Franz 1645
                                                else
456 fschmid 1646
                                                        view->moveGroup(0, -1);
272 Franz 1647
                                        }
1648
                                        break;
1649
                                case Key_Down:
1650
                                        if (!b->Locked)
1651
                                        {
1652
                                                if ( buttonState & ShiftButton )
456 fschmid 1653
                                                        view->moveGroup(0, 10);
272 Franz 1654
                                                else if ( buttonState & ControlButton )
456 fschmid 1655
                                                        view->moveGroup(0, 0.1);
272 Franz 1656
                                                else
456 fschmid 1657
                                                        view->moveGroup(0, 1);
272 Franz 1658
                                        }
1659
                                        break;
1660
                                default:
1661
                                        if (b->PType == 4)
1662
                                        {
1663
                                                if ((kk + KeyMod) == Prefs.KeyActions[59].KeyID)
146 Franz 1664
                                                {
272 Franz 1665
                                                        setNewAbStyle(1);
1666
                                                        b->Tinput = true;
456 fschmid 1667
                                                        view->RefreshItem(b);
272 Franz 1668
                                                }
1669
                                                if ((kk + KeyMod) == Prefs.KeyActions[58].KeyID)
1670
                                                {
1671
                                                        setNewAbStyle(2);
1672
                                                        b->Tinput = true;
456 fschmid 1673
                                                        view->RefreshItem(b);
272 Franz 1674
                                                }
1675
                                                if ((kk + KeyMod) == Prefs.KeyActions[57].KeyID)
1676
                                                {
1677
                                                        setNewAbStyle(0);
1678
                                                        b->Tinput = true;
456 fschmid 1679
                                                        view->RefreshItem(b);
272 Franz 1680
                                                }
1681
                                        }
1682
                                        break;
1683
                                }
1684
                                slotDocCh();
1685
                                break;
1065 cbradney 1686
                        case EditMode:
272 Franz 1687
                                int oldPos = b->CPos; // 15-mar-2004 jjsa for cursor movement with Shift + Arrow key
456 fschmid 1688
                                view->oldCp = b->CPos;
272 Franz 1689
                                if (b->PType == 4)
1690
                                {
456 fschmid 1691
                                        view->slotDoCurs(false);
272 Franz 1692
                                        switch (kk)
1693
                                        {
1694
                                        case Key_Prior:
1695
                                        case Key_Next:
1696
                                        case Key_End:
1697
                                        case Key_Home:
1698
                                        case Key_Right:
1699
                                        case Key_Left:
1700
                                        case Key_Up:
1701
                                        case Key_Down:
1702
                                                if ( (buttonState & ShiftButton) == 0 )
456 fschmid 1703
                                                        view->deselectAll(b);
272 Franz 1704
                                        }
1705
                                        if (UniCinp)
1706
                                        {
1707
                                                int conv = 0;
1708
                                                bool ok = false;
1709
                                                UniCinS += uc;
1710
                                                conv = UniCinS.toInt(&ok, 16);
1711
                                                if (!ok)
1712
                                                {
1713
                                                        UniCinp = false;
1714
                                                        UniCinC = 0;
1715
                                                        UniCinS = "";
1716
                                                        keyrep = false;
1717
                                                        return;
1718
                                                }
1719
                                                UniCinC++;
1720
                                                if (UniCinC == 4)
1721
                                                {
1722
                                                        UniCinp = false;
1723
                                                        UniCinC = 0;
1724
                                                        UniCinS = "";
1725
                                                        if (ok)
146 Franz 1726
                                                        {
282 Franz 1727
                                                                if (b->HasSel)
1728
                                                                        DeleteSel(b);
272 Franz 1729
                                                                if (conv < 31)
1730
                                                                        conv = 32;
1065 cbradney 1731
                                                                hg = new ScText;
272 Franz 1732
                                                                hg->ch = QString(QChar(conv));
1733
                                                                hg->cfont = doc->CurrFont;
1734
                                                                hg->csize = doc->CurrFontSize;
1735
                                                                hg->ccolor = doc->CurrTextFill;
1736
                                                                hg->cshade = doc->CurrTextFillSh;
1737
                                                                hg->cstroke = doc->CurrTextStroke;
1738
                                                                hg->cshade2 = doc->CurrTextStrokeSh;
1739
                                                                hg->cscale = doc->CurrTextScale;
1740
                                                                hg->cselect = false;
1741
                                                                hg->cstyle = doc->CurrentStyle;
1065 cbradney 1742
                                                                hg->cab = doc->currentParaStyle;
1743
                                                                if (doc->docParagraphStyles[doc->currentParaStyle].Font != "")
146 Franz 1744
                                                                {
1065 cbradney 1745
                                                                        hg->cfont = doc->docParagraphStyles[doc->currentParaStyle].Font;
1746
                                                                        hg->csize = doc->docParagraphStyles[doc->currentParaStyle].FontSize;
146 Franz 1747
                                                                }
272 Franz 1748
                                                                hg->cextra = 0;
1749
                                                                hg->xp = 0;
1750
                                                                hg->yp = 0;
1751
                                                                hg->PRot = 0;
1752
                                                                hg->PtransX = 0;
1753
                                                                hg->PtransY = 0;
1065 cbradney 1754
                                                                b->itemText.insert(b->CPos, hg);
272 Franz 1755
                                                                b->CPos += 1;
1756
                                                                b->Tinput = true;
282 Franz 1757
                                                                setTBvals(b);
456 fschmid 1758
                                                                view->RefreshItem(b);
272 Franz 1759
                                                                keyrep = false;
1760
                                                                return;
146 Franz 1761
                                                        }
1762
                                                }
272 Franz 1763
                                                else
1764
                                                {
1765
                                                        keyrep = false;
1766
                                                        return;
1767
                                                }
1768
                                        }
1769
                                        switch (kk)
1770
                                        {
1771
                                        case Key_F12:
1772
                                                UniCinp = true;
1773
                                                UniCinC = 0;
1774
                                                UniCinS = "";
1775
                                                keyrep = false;
1776
                                                return;
1777
                                                break;
291 Franz 1778
                                        case Key_Home:
272 Franz 1779
                                                // go to begin of line
1780
                                                if ( (pos = b->CPos) == 0 )
1781
                                                        break; // at begin of frame
1065 cbradney 1782
                                                len = static_cast<int>(b->itemText.count());
272 Franz 1783
                                                if ( pos == len )
1784
                                                        pos--;
1785
                                                if ( (buttonState & ControlButton) == 0 )
1786
                                                {
1065 cbradney 1787
                                                        alty =  b->itemText.at(pos)->yp;
1788
                                                        c = b->itemText.at(pos)->ch.at(0).latin1();
272 Franz 1789
                                                        if ( c == 13 ) // new line, position is wrong
1790
                                                                if ( --pos > 0 )
1065 cbradney 1791
                                                                        alty =  b->itemText.at(pos)->yp;
272 Franz 1792
                                                        // check for yp at actual position
1793
                                                        if ( pos < len )
1794
                                                        {
1065 cbradney 1795
                                                                altx =  b->itemText.at(pos)->yp;
272 Franz 1796
                                                                if ( altx > alty )
3 paul 1797
                                                                {
272 Franz 1798
                                                                        // we was at begin of line
1799
                                                                        break;
3 paul 1800
                                                                }
272 Franz 1801
                                                        }
1065 cbradney 1802
                                                        while (  pos > 0 && b->itemText.at(pos-1)->yp == alty )
272 Franz 1803
                                                                pos--;
1065 cbradney 1804
                                                        if ( b->itemText.at(pos)->ch.at(0).latin1() == 13 )
272 Franz 1805
                                                                pos++;
1806
                                                }
1807
                                                else
1808
                                                {
1809
                                                        // paragraph begin
1810
                                                        if ( pos < len &&
1065 cbradney 1811
                                                                b->itemText.at(pos)->ch.at(0).latin1() == 13 )
272 Franz 1812
                                                                pos--;
1813
                                                        while(pos > 0 )
1065 cbradney 1814
                                                                if ( b->itemText.at(pos)->ch.at(0).latin1() == 13 )
3 paul 1815
                                                                {
272 Franz 1816
                                                                        pos++;
1817
                                                                        break;
3 paul 1818
                                                                }
272 Franz 1819
                                                                else
1820
                                                                        pos--;
1821
                                                }
1822
                                                b->CPos = pos;
1823
                                                if ( buttonState & ShiftButton )
456 fschmid 1824
                                                        view->ExpandSel(b, -1, oldPos);
272 Franz 1825
                                                break;
291 Franz 1826
                                        case Key_End:
272 Franz 1827
                                                // go to end of line
1065 cbradney 1828
                                                len = static_cast<int>(b->itemText.count());
272 Franz 1829
                                                if ( b->CPos >= len )
1830
                                                        break; // at end of frame
1831
                                                if ( (buttonState & ControlButton) == 0 )
1832
                                                {
1109 fschmid 1833
                                                        if ((b->CPos < len) && ((b->itemText.at(b->CPos)->ch.at(0).latin1() == 13) || (b->itemText.at(b->CPos)->ch.at(0).latin1() == 28)))
239 Franz 1834
                                                        {
272 Franz 1835
                                                                // at end of paragraph and therefore line
1836
                                                                break;
239 Franz 1837
                                                        }
1065 cbradney 1838
                                                        alty =  b->itemText.at(b->CPos)->yp;
1839
                                                        while (  b->CPos < len-1 &&  b->itemText.at(b->CPos+1)->yp == alty )
272 Franz 1840
                                                                b->CPos++;
1841
 
1842
                                                        if ( b->CPos < len -1 )
1065 cbradney 1843
                                                                c = b->itemText.at(b->CPos+1)->ch.at(0).latin1();
272 Franz 1844
                                                        else if ( b->CPos == len - 1 )
1845
                                                                c = 13;
1846
                                                        else
1847
                                                                c = 0;
1109 fschmid 1848
                                                        if (( c == 13 ) || (c = 28))
272 Franz 1849
                                                                b->CPos++;
1850
                                                }
1851
                                                else
1852
                                                {
1853
                                                        // go to end of paragraph
1065 cbradney 1854
                                                        if ( b->itemText.at(b->CPos)->ch.at(0).latin1() == 13 )
239 Franz 1855
                                                        {
272 Franz 1856
                                                                break;
239 Franz 1857
                                                        }
272 Franz 1858
                                                        pos = b->CPos;
1859
                                                        while ( pos < len )
239 Franz 1860
                                                        {
1065 cbradney 1861
                                                                if ( b->itemText.at(pos)->ch.at(0).latin1() == 13 )
272 Franz 1862
                                                                        break;
239 Franz 1863
                                                                else
272 Franz 1864
                                                                        pos++;
239 Franz 1865
                                                        }
272 Franz 1866
                                                        b->CPos = pos;
1867
                                                }
1868
                                                if ( buttonState & ShiftButton )
456 fschmid 1869
                                                        view->ExpandSel(b, 1, oldPos);
272 Franz 1870
                                                break;
1871
                                        case Key_Down:
1065 cbradney 1872
                                                if (b->CPos != static_cast<int>(b->itemText.count()))
272 Franz 1873
                                                {
1065 cbradney 1874
                                                        alty = b->itemText.at(b->CPos)->yp;
1875
                                                        altx = b->itemText.at(b->CPos)->xp;
272 Franz 1876
                                                        do
1877
                                                        {
1878
                                                                b->CPos += 1;
1065 cbradney 1879
                                                                if (b->CPos == static_cast<int>(b->itemText.count()))
272 Franz 1880
                                                                        break;
1065 cbradney 1881
                                                                if (b->itemText.at(b->CPos)->yp > alty)
3 paul 1882
                                                                {
1065 cbradney 1883
                                                                        if (b->itemText.at(b->CPos)->xp >= altx)
272 Franz 1884
                                                                                break;
3 paul 1885
                                                                }
239 Franz 1886
                                                        }
1065 cbradney 1887
                                                        while (b->CPos < static_cast<int>(b->itemText.count()));
272 Franz 1888
                                                        if ( buttonState & ShiftButton )
237 Franz 1889
                                                        {
272 Franz 1890
                                                                if ( buttonState & AltButton )
1065 cbradney 1891
                                                                        b->CPos = b->itemText.count();
456 fschmid 1892
                                                                view->ExpandSel(b, 1, oldPos);
237 Franz 1893
                                                        }
272 Franz 1894
                                                        else
1065 cbradney 1895
                                                                if (b->CPos == static_cast<int>(b->itemText.count()))
272 Franz 1896
                                                                        if (b->NextBox != 0)
253 Franz 1897
                                                                        {
1065 cbradney 1898
                                                                                if (b->NextBox->itemText.count() != 0)
253 Franz 1899
                                                                                {
456 fschmid 1900
                                                                                        view->Deselect(true);
272 Franz 1901
                                                                                        b->NextBox->CPos = 0;
456 fschmid 1902
                                                                                        view->SelectItemNr(b->NextBox->ItemNr);
272 Franz 1903
                                                                                        b = b->NextBox;
253 Franz 1904
                                                                                }
1905
                                                                        }
272 Franz 1906
                                                }
1907
                                                else
1908
                                                {
1909
                                                        if (b->NextBox != 0)
1910
                                                        {
1065 cbradney 1911
                                                                if (b->NextBox->itemText.count() != 0)
253 Franz 1912
                                                                {
456 fschmid 1913