Subversion Repositories Scribus

Rev

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