Subversion Repositories Scribus

Rev

Rev 239 | Rev 241 | 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>
32
#include <dlfcn.h>
135 Franz 33
#include <unistd.h>
3 paul 34
#include <iostream>
119 Franz 35
#include <signal.h>
80 Franz 36
#include <string>
3 paul 37
#include "scribus.h"
38
#include "scribus.moc"
39
#include "newfile.h"
40
#include "page.h"
41
#include "query.h"
42
#include "mdup.h"
43
#include "docinfo.h"
44
#include "reformdoc.h"
45
#include "serializer.h"
46
#include "align.h"
47
#include "fmitem.h"
48
#include "fontprefs.h"
49
#include "libprefs/prefs.h"
50
#include "pdfopts.h"
51
#include "inspage.h"
52
#include "delpages.h"
53
#include "movepage.h"
54
#include "helpbrowser.h"
55
#include "scribusXml.h"
56
#include "libabout/about.h"
57
#include "druck.h"
58
#include "editformats.h"
59
#include "muster.h"
60
#include "applytemplate.h"
61
#include "picstatus.h"
62
#include "customfdialog.h"
63
#include "cmsprefs.h"
64
#include "annot.h"
65
#include "annota.h"
66
#include "javadocs.h"
151 Franz 67
#include "colorm.h"
128 Franz 68
 
237 Franz 69
#ifndef _MSC_VER   // jjsa 21-03-2004 (lint complains)
70
#define _MSC_VER -1
71
#endif
72
 
128 Franz 73
#if (_MSC_VER >= 1200)
74
 #include "win-config.h"
75
#else
76
 #include "config.h"
77
#endif
78
 
237 Franz 79
#if (_MSC_VER == -1 )   // jjsa 21-03-2004 (lint complains)
80
#undef _MSC_VER
81
#endif
82
 
3 paul 83
#include "fpoint.h"
84
#include "fpointarray.h"
85
#include "hysettings.h"
86
#include "guidemanager.h"
87
#include "mergedoc.h"
27 Franz 88
#include "lineformats.h"
102 Franz 89
#include "story.h"
123 Franz 90
#include "autoform.h"
140 Franz 91
#include "tabmanager.h"
164 Franz 92
#include "search.h"
169 Franz 93
#include "fontcombo.h"
134 Franz 94
 
95
 
3 paul 96
extern QPixmap loadIcon(QString nam);
90 Franz 97
extern bool overwrite(QWidget *parent, QString filename);
124 Franz 98
extern void CopyPageItem(struct CLBuf *Buffer, PageItem *b);
203 Franz 99
extern void ReOrderText(ScribusDoc *doc, ScribusView *view);
204 Franz 100
extern int copyFile(QString source, QString target);
101
extern int moveFile(QString source, QString target);
3 paul 102
 
103
using namespace std;
104
 
105
#ifdef HAVE_CMS
106
cmsHPROFILE CMSoutputProf;
107
cmsHPROFILE CMSprinterProf;
108
cmsHTRANSFORM stdTrans;
109
cmsHTRANSFORM stdProof;
110
cmsHTRANSFORM stdTransImg;
111
cmsHTRANSFORM stdProofImg;    
112
bool SoftProofing;
113
bool Gamut;
114
bool CMSuse;
115
int IntentMonitor;
116
int IntentPrinter;
117
#endif
118
bool CMSavail;
119
ProfilesL InputProfiles;
120
int PolyC;
121
int PolyFd;
80 Franz 122
double PolyF;
3 paul 123
bool PolyS;
80 Franz 124
double PolyR;
125
double UmReFaktor;
3 paul 126
QString DocDir;
119 Franz 127
ScribusApp* ScApp;
3 paul 128
 
188 Franz 129
ScribusApp::ScribusApp()
3 paul 130
{
188 Franz 131
} // ScribusApp::ScribusApp()
132
 
133
void ScribusApp::initGui()
134
{
135
    splash = new SplashScreen();
136
    splash->setStatus(QObject::tr("Initializing..."));
137
    initScribus();
138
    splash->close();
139
    delete splash;
140
}
141
 
142
void ScribusApp::initScribus()
143
{
173 Franz 144
        ScApp = this;
112 Franz 145
  setCaption( tr("Scribus " VERSION));
118 Franz 146
        setKeyCompression(false);
83 Franz 147
  setIcon(loadIcon("AppIcon.png"));
3 paul 148
  initMenuBar();
149
  initStatusBar();
112 Franz 150
  WerkTools2 = new QToolBar( tr("File"), this);
218 Franz 151
  DatNeu = new QToolButton(loadIcon("DateiNeu.xpm"), tr("Create a new Document"), QString::null, this, SLOT(slotFileNew()), WerkTools2);
152
  DatOpe = new QToolButton(loadIcon("DateiOpen.xpm"), tr("Open a Document"), QString::null, this, SLOT(slotDocOpen()), WerkTools2);
153
  DatSav = new QToolButton(loadIcon("DateiSave.xpm"), tr("Save the current Document"), QString::null, this, SLOT(slotFileSave()), WerkTools2);
154
  DatClo = new QToolButton(loadIcon("DateiClos.xpm"), tr("Close the current Document"), QString::null, this, SLOT(slotFileClose()), WerkTools2);
155
  DatPri = new QToolButton(loadIcon("DateiPrint.xpm"), tr("Print the current Document"), QString::null, this, SLOT(slotFilePrint()), WerkTools2);
156
  DatPDF = new QToolButton(loadIcon("acrobat.png"), tr("Save the current Document as PDF"), QString::null, this, SLOT(SaveAsPDF()), WerkTools2);
80 Franz 157
  DatSav->setEnabled(false);
73 Franz 158
  DatClo->setEnabled(false);
77 Franz 159
  DatPri->setEnabled(false);
80 Franz 160
  DatPDF->setEnabled(false);
73 Franz 161
  DatOpe->setPopup(recentMenu);
80 Franz 162
  WerkTools = new WerkToolB(this);
73 Franz 163
  setDockEnabled(WerkTools, DockLeft, false);
77 Franz 164
  setDockEnabled(WerkTools, DockRight, false);
165
  WerkTools->Sichtbar = true;
166
  WerkTools->setEnabled(false);
167
  WerkToolsP = new WerkToolBP(this);
80 Franz 168
  setDockEnabled(WerkToolsP, DockLeft, false);
73 Franz 169
  setDockEnabled(WerkToolsP, DockRight, false);
80 Franz 170
  WerkToolsP->setEnabled(false);
73 Franz 171
  WerkToolsP->Sichtbar = true;
80 Franz 172
  QString Pff = QString(getenv("HOME"))+"/.scribus";
73 Franz 173
  QFileInfo Pffi = QFileInfo(Pff);
174
  if (Pffi.exists())
77 Franz 175
        {
80 Franz 176
    if (Pffi.isDir())
73 Franz 177
      PrefsPfad = Pff;
178
        else
179
      PrefsPfad = QString(getenv("HOME"));
77 Franz 180
        }
73 Franz 181
  else
77 Franz 182
        {
3 paul 183
        QDir di = QDir();
73 Franz 184
    di.mkdir(Pff);
185
    PrefsPfad = Pff;
186
    QString OldPR = QString(getenv("HOME"))+"/.scribus.rc";
187
    QFileInfo OldPi = QFileInfo(OldPR);
188
    if (OldPi.exists())
77 Franz 189
        {
204 Franz 190
                        moveFile(OldPR, Pff+"/scribus.rc");
77 Franz 191
                        }
3 paul 192
                QString OldPR2 = QString(getenv("HOME"))+"/.scribusfont.rc";
193
                QFileInfo OldPi2 = QFileInfo(OldPR2);
194
                if (OldPi2.exists())
195
                        {
204 Franz 196
                        moveFile(OldPR2, Pff+"/scribusfont.rc");
3 paul 197
                        }
198
                QString OldPR3 = QString(getenv("HOME"))+"/.scribusscrap.scs";
199
                QFileInfo OldPi3 = QFileInfo(OldPR3);
200
                if (OldPi3.exists())
201
                        {
204 Franz 202
                        moveFile(OldPR3, Pff+"/scrap.scs");
3 paul 203
                        }
204
                }
205
        /** Erstelle Fontliste */
206
  NoFonts = false;
207
        BuFromApp = false;
112 Franz 208
        splash->setStatus( tr("Searching for Fonts"));
3 paul 209
  GetAllFonts();
210
  if (NoFonts)
211
        {
212
                QString mess = tr("There are no Postscript-Fonts on your System");
213
                mess += "\n" + tr("Exiting now");
214
                QMessageBox::critical(this, tr("Fatal Error"), mess, 1, 0, 0);
215
        }
216
  else
217
        {
218
        HaveDoc = 0;
135 Franz 219
                singleClose = false;
173 Franz 220
                ScriptRunning = false;
95 Franz 221
                view = NULL;
222
                doc = NULL;
3 paul 223
        BuildFontMenu();
224
                SCFontsIterator it(Prefs.AvailFonts);
225
                Prefs.DefFont = it.currentKey();
111 Franz 226
        Prefs.DefSize = 120;
81 Franz 227
        Prefs.AppFontSize = qApp->font().pointSize();
3 paul 228
        /** Default Farbenliste */
229
        Prefs.DColors.clear();
147 Franz 230
        QString pfadC = PREL;
231
        QString pfadC2 = pfadC + "/lib/scribus/rgbscribus.txt";
232
        QFile fiC(pfadC2);
233
        if (!fiC.exists())
234
                        {
235
                Prefs.DColors.insert("White", CMYKColor(0, 0, 0, 0));
236
                Prefs.DColors.insert("Black", CMYKColor(0, 0, 0, 255));
237
                        Prefs.DColors.insert("Blue", CMYKColor(255, 255, 0, 0));
238
                        Prefs.DColors.insert("Cyan", CMYKColor(255, 0, 0, 0));
239
                        Prefs.DColors.insert("Green", CMYKColor(255, 0, 255, 0));
240
                        Prefs.DColors.insert("Red", CMYKColor(0, 255, 255, 0));
241
                        Prefs.DColors.insert("Yellow", CMYKColor(0, 0, 255, 0));
242
                        Prefs.DColors.insert("Magenta", CMYKColor(0, 255, 0, 0));
238 Franz 243
                        Prefs.DColorSet = "Scribus-Small";
147 Franz 244
                        }
245
                else
246
                        {
247
                        if (fiC.open(IO_ReadOnly))
248
                                {
249
                                QString ColorEn, Cname;
250
                                int Rval, Gval, Bval;
251
                                QTextStream tsC(&fiC);
252
                                ColorEn = tsC.readLine();
253
                                while (!tsC.atEnd())
254
                                        {
255
                                        ColorEn = tsC.readLine();
256
                                        QTextStream CoE(&ColorEn, IO_ReadOnly);
257
                                        CoE >> Rval;
258
                                        CoE >> Gval;
259
                                        CoE >> Bval;
260
                                        CoE >> Cname;
261
                                        CMYKColor tmp;
262
                                        tmp.setColorRGB(Rval, Gval, Bval);
263
                                        Prefs.DColors.insert(Cname, tmp);
264
                                        }
265
                                fiC.close();
266
                                }
238 Franz 267
                        Prefs.DColorSet = "X11 RGB-Set";
147 Franz 268
                        }
3 paul 269
                DispX = 10;
270
                DispY = 10;
271
                Prefs.Wheelval = 40;
272
                Prefs.GrabRad = 4;
273
                Prefs.GuideRad = 10;
274
                Prefs.DminGrid = 20;
275
          Prefs.DmajGrid = 100;
276
          DocNr = 1;
277
          Prefs.DminColor = QColor(green);
278
          Prefs.DmajColor = QColor(green);
279
          Prefs.DpapColor = QColor(white);
280
          Prefs.DmargColor = QColor(blue);
281
                Prefs.guideColor = QColor(darkBlue);
282
          Prefs.DVHoch = 33;
283
          Prefs.DVHochSc = 100;
284
          Prefs.DVTief = 33;
285
          Prefs.DVTiefSc = 100;
286
          Prefs.DVKapit = 75;
287
          Prefs.GUI = "Default";
288
          Prefs.Dpen = "Black";
289
          Prefs.Dbrush = "Black";
290
          Prefs.Dshade = 100;
291
          Prefs.Dshade2 = 100;
292
          Prefs.DLineArt = SolidLine;
293
          Prefs.Dwidth = 1;
294
          Prefs.DpenLine = "Black";
295
          Prefs.DpenText = "Black";
139 Franz 296
                Prefs.DCols = 1;
297
                Prefs.DGap = 0.0;
3 paul 298
          Prefs.DshadeLine = 100;
299
          Prefs.DLstyleLine = SolidLine;
300
          Prefs.DwidthLine = 1;
301
          Prefs.MagMin = 10;
302
          Prefs.MagMax = 800;
303
          Prefs.MagStep = 25;
304
          Prefs.DbrushPict = "White";
305
          Prefs.ShadePict = 100;
306
          Prefs.ScaleX = 1;
307
          Prefs.ScaleY = 1;
308
          Prefs.Before = true;
309
          Prefs.Einheit = 0;
310
                UmReFaktor = 1.0;
311
                PolyC = 4;
312
                PolyF = 0.5;
313
                PolyS = false;
314
                PolyFd = 0;
315
                PolyR = 0;
316
                Prefs.PolyC = PolyC;
317
                Prefs.PolyF = PolyF;
318
                Prefs.PolyFd = PolyFd;
319
                Prefs.PolyS = PolyS;
320
                Prefs.PolyR = PolyR;
321
          Prefs.Werkv = true;
14 Franz 322
          Prefs.WerkvP = true;
3 paul 323
          Prefs.Mpalv = false;
324
          Prefs.Tpalv = false;
325
          Prefs.SCpalv = false;
326
          Prefs.Lpalv = false;
327
                Prefs.Bopalv = false;
87 Franz 328
          Prefs.Mpalx = 0;
329
          Prefs.Mpaly = 0;
330
                Prefs.Tpalx = 0;
331
                Prefs.Tpaly = 0;
332
                Prefs.SCpalx = 0;
333
                Prefs.SCpaly = 0;
334
                Prefs.SCpalw = 100;
335
                Prefs.SCpalh = 200;
336
                Prefs.Sepalx = 0;
337
                Prefs.Sepaly = 0;
338
                Prefs.Bopalx = 0;
339
                Prefs.Bopaly = 0;
340
                Prefs.Lpalx = 0;
341
                Prefs.Lpaly = 0;
3 paul 342
          Prefs.PSize = 40;
343
          Prefs.SaveAtQ = true;
222 Franz 344
          Prefs.FramesShown = true;
345
          Prefs.GridShown = false;
346
          Prefs.MarginsShown = true;
347
          Prefs.GuidesShown = true;
348
          Prefs.ClipMargin = true;
3 paul 349
          Prefs.PagesSbS = true;
350
          Prefs.RecentDocs.clear();
351
          Prefs.RecentDCount = 5;
352
          Prefs.RandFarbig = false;
353
          Prefs.AutoLine = 20;
354
                Prefs.PageFormat = 4;
355
                Prefs.Ausrichtung = 0;
356
                Prefs.PageBreite = 595;
357
                Prefs.PageHoehe = 842;
358
                Prefs.RandOben = 9;
359
                Prefs.RandUnten = 40;
360
                Prefs.RandLinks = 9;
361
                Prefs.RandRechts = 9;
362
                Prefs.DoppelSeiten = false;
363
                Prefs.ErsteLinks = false;
364
                Prefs.ScaleType = true;
365
                Prefs.AspectRatio = true;
366
                Prefs.MinWordLen = 3;
367
                Prefs.Language = "";
368
                Prefs.Automatic = true;
369
                Prefs.AutoCheck = false;
370
                Prefs.PDFTransparency = false;
371
                Prefs.AutoSave = false;
372
                Prefs.AutoSaveTime = 600000;
11 Franz 373
                Prefs.DisScale = 1.0;
3 paul 374
                Prefs.DocDir = QString(getenv("HOME"));
68 Franz 375
                Prefs.ProfileDir = "";
91 Franz 376
                Prefs.ScriptDir = "";
151 Franz 377
                Prefs.CustomColorSets.clear();
213 Franz 378
                Prefs.PrPr_Mode = false;
379
                Prefs.PrPr_AlphaText = false;
380
                Prefs.PrPr_AlphaGraphics = false;
381
                Prefs.PrPr_Transparency = false;
382
                Prefs.PrPr_C = true;
383
                Prefs.PrPr_M = true;
384
                Prefs.PrPr_Y = true;
385
                Prefs.PrPr_K = true;
220 Franz 386
                Prefs.gimp_exe = "gimp";
387
                Prefs.gs_antiGraph = true;
388
                Prefs.gs_antiText = true;
389
                Prefs.gs_exe = "gs";
390
                PDef.Pname = "";
391
                PDef.Dname = "";
392
                PDef.Command = "";
3 paul 393
          PrinterUsed = false;
394
                resize(610, 600);
395
    QVBox* vb = new QVBox( this );
396
    vb->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
397
    wsp = new QWorkspace( vb );
398
    setCentralWidget( vb );
399
                connect(wsp, SIGNAL(windowActivated(QWidget *)), this, SLOT(newActWin(QWidget *)));
77 Franz 400
                Tpal = new Tree(this, 0);
32 Franz 401
                Mpal = new Mpalette(this, &Prefs);
3 paul 402
                Mpal->Cpal->SetColors(Prefs.DColors);
403
                Npal = new NodePalette(this);
404
                Lpal = new LayerPalette(this);
30 Franz 405
                ScBook = new Biblio(this, &Prefs);
3 paul 406
                Sepal = new SeitenPal(this);
407
                BookPal = new BookPalette(this);
408
                CMSavail = false;
92 Franz 409
                keyrep = false;
3 paul 410
                Prefs.DCMSset.DefaultMonitorProfile = "";
411
                Prefs.DCMSset.DefaultPrinterProfile = "";
412
                Prefs.DCMSset.DefaultInputProfile = "";
413
                Prefs.DCMSset.DefaultInputProfile2 = "";
414
                Prefs.DCMSset.CMSinUse = false;
415
                Prefs.DCMSset.SoftProofOn = false;
416
                Prefs.DCMSset.GamutCheck = false;
117 Franz 417
                Prefs.DCMSset.BlackPoint = true;
3 paul 418
                Prefs.DCMSset.DefaultIntentMonitor = 1;
419
                Prefs.DCMSset.DefaultIntentMonitor2 = 1;
420
                Prefs.DCMSset.DefaultIntentPrinter = 0;
421
                Prefs.GFontSub.clear();
238 Franz 422
                SetKeyEntry(56, tr("Smart Hyphen"), 0, CTRL+Key_Minus);
3 paul 423
                SetKeyEntry(57, tr("Align Left"), 0, CTRL+Key_L);
424
                SetKeyEntry(58, tr("Align Right"), 0, CTRL+Key_R);
425
                SetKeyEntry(59, tr("Align Center"), 0, CTRL+Key_E);
238 Franz 426
                SetKeyEntry(60, tr("Insert Page Number"), 0, CTRL+Key_NumberSign);
3 paul 427
                SetKeyEntry(61, tr("Attach Text to Path"), PfadT, 0);
428
                SetKeyEntry(62, tr("Show Layers"), viewLpal, 0);
73 Franz 429
                SetKeyEntry(63, tr("Javascripts..."), jman, 0);
3 paul 430
                SetKeyEntry(64, tr("Undo"), edUndo, CTRL+Key_Z);
431
                SetKeyEntry(65, tr("Show Page Palette"), viewSepal, 0);
432
                SetKeyEntry(66, tr("Lock/Unlock"), LockOb, CTRL+Key_H);
73 Franz 433
                SetKeyEntry(67, tr("Non Breaking Space"), 0, CTRL+Key_Space);
112 Franz 434
                splash->setStatus( tr("Reading Preferences"));
68 Franz 435
                ReadPrefs();
120 Franz 436
                if (Prefs.DefFont == "")
437
                        Prefs.DefFont = it.currentKey();
112 Franz 438
                splash->setStatus( tr("Getting ICC-Profiles"));
3 paul 439
                GetCMSProfiles();
112 Franz 440
                splash->setStatus( tr("Init Hyphenator"));
3 paul 441
                InitHyphenator();
442
                Mpal->Cpal->UseTrans(Prefs.PDFTransparency);
68 Franz 443
                Mpal->Fonts->RebuildList(&Prefs);
444
                Mpal->fillLangCombo(Sprachen);
3 paul 445
                DocDir = Prefs.DocDir;
112 Franz 446
                splash->setStatus( tr(""));
447
                splash->setStatus( tr("Setting up Shortcuts"));
3 paul 448
                SetShortCut();
449
                if (CMSavail)
450
                        {
112 Franz 451
                        hymen->insertItem( tr("Color Management..."), this , SLOT(SetCMSPrefs()));
3 paul 452
                        ProfilesL::Iterator ip;
453
                        if ((Prefs.DCMSset.DefaultInputProfile == "") || (!InputProfiles.contains(Prefs.DCMSset.DefaultInputProfile)))
454
                                {
455
                                ip = InputProfiles.begin();
456
                                Prefs.DCMSset.DefaultInputProfile = ip.key();
457
                                }
458
                        if ((Prefs.DCMSset.DefaultInputProfile2 == "") || (!InputProfiles.contains(Prefs.DCMSset.DefaultInputProfile2)))
459
                                {
460
                                ip = InputProfiles.begin();
461
                                Prefs.DCMSset.DefaultInputProfile2 = ip.key();
462
                                }
463
                        if ((Prefs.DCMSset.DefaultMonitorProfile == "") || (!MonitorProfiles.contains(Prefs.DCMSset.DefaultMonitorProfile)))
464
                                {
465
                                ip = MonitorProfiles.begin();
466
                                Prefs.DCMSset.DefaultMonitorProfile = ip.key();
467
                                }
468
                        if ((Prefs.DCMSset.DefaultPrinterProfile == "") || (!PrinterProfiles.contains(Prefs.DCMSset.DefaultPrinterProfile)))
469
                                {
470
                                ip = PrinterProfiles.begin();
471
                                Prefs.DCMSset.DefaultPrinterProfile = ip.key();
80 Franz 472
                                }
3 paul 473
#ifdef HAVE_CMS
474
                        SoftProofing = Prefs.DCMSset.SoftProofOn;
475
                        CMSuse = false;
476
                        IntentPrinter = Prefs.DCMSset.DefaultIntentPrinter;
477
                        IntentMonitor = Prefs.DCMSset.DefaultIntentMonitor;
478
#endif
479
                        }
112 Franz 480
                splash->setStatus( tr("Reading Scrapbook"));
3 paul 481
                QString SCf = PrefsPfad+"/scrap.scs";
482
                QFileInfo SCfi = QFileInfo(SCf);
483
                if (SCfi.exists())
484
                        {
485
                        ScBook->BibWin->ReadContents(SCf);
486
                        ScBook->ScFilename = SCf;
487
                        }
488
                ScBook->AdjustMenu();
220 Franz 489
                HaveGS = system(Prefs.gs_exe+" -h > /dev/null 2>&1");
490
                HavePngAlpha = system(Prefs.gs_exe+" -sDEVICE=pngalpha -c quit > /dev/null 2>&1");
112 Franz 491
                splash->setStatus( tr("Initializing Plugins"));
17 Franz 492
                InitPlugs(splash);
3 paul 493
                ClipB = QApplication::clipboard();
494
                connect(WerkTools, SIGNAL(NewMode(int)), this, SLOT(ModeFromTB(int)));
495
                connect(WerkTools, SIGNAL(Schliessen()), this, SLOT(ToggleTools()));
14 Franz 496
                connect(WerkToolsP, SIGNAL(NewMode(int)), this, SLOT(ModeFromTB(int)));
497
                connect(WerkToolsP, SIGNAL(Schliessen()), this, SLOT(TogglePDFTools()));
3 paul 498
                connect(Mpal, SIGNAL(DocChanged()), this, SLOT(slotDocCh()));
499
                connect(Mpal, SIGNAL(NewAbStyle(int)), this, SLOT(setNewAbStyle(int)));
500
                connect(Mpal, SIGNAL(BackHome()), this, SLOT(Aktiv()));
501
                connect(Mpal, SIGNAL(Stellung(int)), this, SLOT(setItemHoch(int)));
502
                connect(Mpal, SIGNAL(Schliessen()), this, SLOT(ToggleMpal()));
503
                connect(Mpal, SIGNAL(EditCL()), this, SLOT(ToggleFrameEdit()));
32 Franz 504
                connect(Mpal, SIGNAL(NewTF(QString)), this, SLOT(SetNewFont(QString)));
162 Franz 505
                connect(Mpal, SIGNAL(UpdtGui(int)), this, SLOT(HaveNewSel(int)));
3 paul 506
                connect(Mpal->Cpal, SIGNAL(NewPen(QString)), this, SLOT(setPenFarbe(QString)));
507
                connect(Mpal->Cpal, SIGNAL(NewBrush(QString)), this, SLOT(setBrushFarbe(QString)));
508
                connect(Mpal->Cpal, SIGNAL(NewPenShade(int)), this, SLOT(setPenShade(int)));
509
                connect(Mpal->Cpal, SIGNAL(NewBrushShade(int)), this, SLOT(setBrushShade(int)));
80 Franz 510
                connect(Mpal->Cpal, SIGNAL(NewTrans(double)), this, SLOT(SetTranspar(double)));
511
                connect(Mpal->Cpal, SIGNAL(NewTransS(double)), this, SLOT(SetTransparS(double)));
3 paul 512
                connect(Mpal->Cpal, SIGNAL(NewGradient(int, QString, int, QString, int)), this, SLOT(setGradFill(int, QString, int, QString, int)));
513
                connect(Mpal->Cpal, SIGNAL(QueryItem()), this, SLOT(GetBrushPen()));
514
                connect(Tpal, SIGNAL(Schliessen()), this, SLOT(ToggleTpal()));
515
                connect(Tpal, SIGNAL(SelectElement(int, int)), this, SLOT(SelectFromOutl(int, int)));
516
                connect(Tpal, SIGNAL(SelectSeite(int)), this, SLOT(SelectFromOutlS(int)));
517
                connect(Mpal->Spal, SIGNAL(NewStyle(int)), this, SLOT(setNewAbStyle(int)));
27 Franz 518
                connect(Mpal, SIGNAL(EditLSt()), this, SLOT(slotEditLineStyles()));
3 paul 519
                connect(Npal, SIGNAL(Schliessen()), this, SLOT(NoFrameEdit()));
520
                connect(Lpal, SIGNAL(LayerActivated(int)), this, SLOT(changeLayer(int)));
216 Franz 521
                connect(Lpal, SIGNAL(LayerRemoved(int, bool)), this, SLOT(LayerRemove(int, bool)));
3 paul 522
                connect(Lpal, SIGNAL(LayerChanged()), this, SLOT(showLayer()));
523
                connect(Lpal, SIGNAL(Schliessen()), this, SLOT(ToggleLpal()));
524
                connect(Sepal, SIGNAL(Schliessen()), this, SLOT(ToggleSepal()));
525
                connect(ScBook, SIGNAL(Schliessen()), this, SLOT(ToggleBpal()));
526
                connect(Sepal, SIGNAL(EditTemp(QString)), this, SLOT(ManageTemp(QString)));
527
                connect(Sepal->PageView, SIGNAL(UseTemp(QString, int)), this, SLOT(Apply_Temp(QString, int)));
528
                connect(Sepal->PageView, SIGNAL(NewPage(int, QString)), this, SLOT(slotNewPageP(int, QString)));
529
                connect(Sepal->Trash, SIGNAL(DelPage(int)), this, SLOT(DeletePage2(int)));
530
                connect(Sepal, SIGNAL(GotoSeite(int)), this, SLOT(SelectFromOutlS(int)));
531
                connect(BookPal->BView, SIGNAL(MarkMoved()), this, SLOT(StoreBookmarks()));
532
                connect(BookPal->BView, SIGNAL(ChangeBMNr(int, int, int)), this, SLOT(ChBookmarks(int, int, int)));
533
                connect(BookPal, SIGNAL(Schliessen()), this, SLOT(ToggleBookpal()));
534
                connect(recentMenu, SIGNAL(activated(int)), this, SLOT(LoadRecent(int)));
148 Franz 535
                connect(ColorMenC, SIGNAL(activated(int)), this, SLOT(setItemFarbe(int)));
3 paul 536
          connect(ShadeMenu, SIGNAL(activated(int)), this, SLOT(setItemShade(int)));
537
          connect(FontMenu, SIGNAL(activated(int)), this, SLOT(setItemFont(int)));
538
          connect(SizeTMenu, SIGNAL(activated(int)), this, SLOT(setItemFSize(int)));
539
          connect(TypeStyleMenu, SIGNAL(activated(int)), this, SLOT(setItemTypeStyle(int)));
540
          connect(AliMenu, SIGNAL(activated(int)), this, SLOT(setItemTextAli(int)));
541
                connect(this, SIGNAL(TextIFont(QString)), this, SLOT(AdjustFontMenu(QString)));
542
                connect(this, SIGNAL(TextISize(int)), this, SLOT(setFSizeMenu(int)));
543
                connect(this, SIGNAL(TextISize(int)), Mpal, SLOT(setSize(int)));
80 Franz 544
                connect(this, SIGNAL(TextUSval(double)), Mpal, SLOT(setExtra(double)));
3 paul 545
                connect(this, SIGNAL(TextStil(int)), Mpal, SLOT(setStil(int)));
68 Franz 546
                connect(this, SIGNAL(TextScale(int)), Mpal, SLOT(setTScale(int)));
547
                connect(this, SIGNAL(TextFarben(QString, QString, int, int)), Mpal, SLOT(setActFarben(QString, QString, int, int)));
3 paul 548
                connect(ClipB, SIGNAL(dataChanged()), this, SLOT(ClipChange()));
119 Franz 549
          typedef void (*HandlerType)(int);
550
                HandlerType handler     = 0;
551
                handler = ScribusApp::defaultCrashHandler;
552
          if (!handler)
553
            handler = SIG_DFL;
554
          sigset_t mask;
555
          sigemptyset(&mask);
556
#ifdef SIGSEGV
557
          signal (SIGSEGV, handler);
558
          sigaddset(&mask, SIGSEGV);
559
#endif
560
#ifdef SIGFPE
561
          signal (SIGFPE, handler);
562
          sigaddset(&mask, SIGFPE);
563
#endif
564
#ifdef SIGILL
565
          signal (SIGILL, handler);
566
          sigaddset(&mask, SIGILL);
567
#endif
568
#ifdef SIGABRT
569
          signal (SIGABRT, handler);
570
          sigaddset(&mask, SIGABRT);
571
#endif
572
          sigprocmask(SIG_UNBLOCK, &mask, 0);
3 paul 573
        }
574
}
575
 
576
void ScribusApp::initMenuBar()
577
{
578
        int a;
579
        int MenID;
580
        QFont tmp;
581
        recentMenu = new QPopupMenu();
582
        RecentDocs.clear();
583
        fileMenu=new QPopupMenu();
584
        fid12 = fileMenu->insertItem(loadIcon("DateiNeu16.png"), tr("New"), this, SLOT(slotFileNew()), CTRL+Key_N);
585
        fid13 = fileMenu->insertItem(loadIcon("DateiOpen16.png"), tr("Open..."), this, SLOT(slotDocOpen()), CTRL+Key_O);
112 Franz 586
        fid14 = fileMenu->insertItem( tr("Recent Documents"), recentMenu);
3 paul 587
        SetKeyEntry(0, tr("New"), fid12, CTRL+Key_N);
588
        SetKeyEntry(1, tr("Open..."), fid13, CTRL+Key_O);
589
        fileMenu->insertSeparator();
590
        fid1 = fileMenu->insertItem(loadIcon("DateiClos16.png"), tr("Close"), this, SLOT(slotFileClose()), CTRL+Key_W);
591
        SetKeyEntry(2, tr("Close"), fid1, CTRL+Key_W);
592
        fileMenu->setItemEnabled(fid1, 0);
593
        fid4 = fileMenu->insertItem(loadIcon("DateiSave16.png"), tr("Save"), this, SLOT(slotFileSave()), CTRL+Key_S);
594
        SetKeyEntry(3, tr("Save"), fid4, CTRL+Key_S);
595
        fileMenu->setItemEnabled(fid4, 0);
112 Franz 596
        fid5 = fileMenu->insertItem( tr("Save as..."), this, SLOT(slotFileSaveAs()));
3 paul 597
        SetKeyEntry(4, tr("Save as..."), fid5, 0);
598
        fileMenu->setItemEnabled(fid5, 0);
112 Franz 599
        fid52 = fileMenu->insertItem( tr("Revert to Saved"), this, SLOT(slotFileRevert()));
600
        fileMenu->setItemEnabled(fid52, 0);
601
        fid51 = fileMenu->insertItem( tr("Collect for Output..."), this, SLOT(Collect()));
3 paul 602
        fileMenu->setItemEnabled(fid51, 0);
603
        fileMenu->insertSeparator();
604
        importMenu = new QPopupMenu();
112 Franz 605
        fid2 = importMenu->insertItem( tr("Get Text/Picture..."), this, SLOT(slotFileOpen()));
3 paul 606
        importMenu->setItemEnabled(fid2, 0);
218 Franz 607
        fid2aa = importMenu->insertItem( tr("Append Text..."), this, SLOT(slotFileAppend()));
608
        importMenu->setItemEnabled(fid2aa, 0);
112 Franz 609
        fid2a = importMenu->insertItem( tr("Insert Page..."), this, SLOT(slotDocMerge()));
3 paul 610
        importMenu->setItemEnabled(fid2a, 0);
112 Franz 611
        fileMenu->insertItem( tr("Import..."), importMenu);
3 paul 612
        exportMenu = new QPopupMenu();
112 Franz 613
        fid3 = exportMenu->insertItem( tr("Save Text..."), this, SLOT(SaveText()));
3 paul 614
        exportMenu->setItemEnabled(fid3, 0);
112 Franz 615
        fid8 = exportMenu->insertItem( tr("Save Page as EPS..."), this, SLOT(SaveAsEps()));
3 paul 616
        exportMenu->setItemEnabled(fid8, 0);
112 Franz 617
        fid10 = exportMenu->insertItem( tr("Save as PDF..."), this, SLOT(SaveAsPDF()));
3 paul 618
        exportMenu->setItemEnabled(fid10, 0);
112 Franz 619
        fid11 = fileMenu->insertItem( tr("Export..."), exportMenu);
3 paul 620
        fileMenu->setItemEnabled(fid11, 0);
621
        fileMenu->insertSeparator();
112 Franz 622
        fid6 = fileMenu->insertItem( tr("Document Info..."), this, SLOT(InfoDoc()), CTRL+Key_I);
3 paul 623
        fileMenu->setItemEnabled(fid6, 0);
624
        SetKeyEntry(5, tr("Document Info..."), fid6, CTRL+Key_I);
112 Franz 625
        fid7 = fileMenu->insertItem( tr("Document Setup..."), this, SLOT(SetupDoc()));
3 paul 626
        fileMenu->setItemEnabled(fid7, 0);
627
        SetKeyEntry(6, tr("Document Setup..."), fid7, 0);
628
        fid9 = fileMenu->insertItem(loadIcon("DateiPrint16.png"), tr("Print..."), this, SLOT(slotFilePrint()), CTRL+Key_P);
629
        fileMenu->setItemEnabled(fid9, 0);
630
        SetKeyEntry(7, tr("Print..."), fid9, CTRL+Key_P);
631
        fileMenu->insertSeparator();
632
        MenID = fileMenu->insertItem(loadIcon("exit.png"), tr("Quit"), this, SLOT(slotFileQuit()), CTRL+Key_Q);
633
        SetKeyEntry(8, tr("Quit"), MenID, CTRL+Key_Q);
634
        editMenu = new QPopupMenu();
112 Franz 635
        edUndo = editMenu->insertItem( tr("Undo"), this, SLOT(UnDoAction()), CTRL+Key_Z);
3 paul 636
        editMenu->insertSeparator();
637
        edid1 = editMenu->insertItem(loadIcon("editcut.png"), tr("Cut"), this , SLOT(slotEditCut()), CTRL+Key_X);
638
        edid2 = editMenu->insertItem(loadIcon("editcopy.png"), tr("Copy"), this , SLOT(slotEditCopy()), CTRL+Key_C);
639
        edid3 = editMenu->insertItem(loadIcon("editpaste.png"), tr("Paste"), this , SLOT(slotEditPaste()), CTRL+Key_V);
640
        edid4 = editMenu->insertItem(loadIcon("editdelete.png"), tr("Clear"), this, SLOT(DeleteText()));
112 Franz 641
        edid5 = editMenu->insertItem( tr("Select all"), this, SLOT(SelectAll()), CTRL+Key_A);
3 paul 642
        SetKeyEntry(9, tr("Cut"), edid1, CTRL+Key_X);
643
        SetKeyEntry(10, tr("Copy"), edid2, CTRL+Key_C);
644
        SetKeyEntry(11, tr("Paste"), edid3, CTRL+Key_V);
645
        SetKeyEntry(12, tr("Clear"), edid4, 0);
646
        SetKeyEntry(13, tr("Select all"), edid5, CTRL+Key_A);
647
        editMenu->insertSeparator();
164 Franz 648
        Sear = editMenu->insertItem( tr("Search/Replace..."), this, SLOT(SearchText()));
649
        editMenu->insertSeparator();
112 Franz 650
        MenID = editMenu->insertItem( tr("Colors..."), this , SLOT(slotEditColors()));
3 paul 651
        SetKeyEntry(14, tr("Colors..."), MenID, 0);
159 Franz 652
        edid6 = editMenu->insertItem( tr("Paragraph Styles..."), this , SLOT(slotEditStyles()));
112 Franz 653
        edid6a = editMenu->insertItem( tr("Line Styles..."), this , SLOT(slotEditLineStyles()));
3 paul 654
        SetKeyEntry(15, tr("Styles..."), edid6, 0);
112 Franz 655
        tman = editMenu->insertItem( tr("Templates..."), this, SLOT(ManageTemp()));
3 paul 656
        SetKeyEntry(16, tr("Templates..."), tman, 0);
112 Franz 657
        jman = editMenu->insertItem( tr("Javascripts..."), this, SLOT(ManageJava()));
3 paul 658
        hymen = new QPopupMenu();
112 Franz 659
        MenID = hymen->insertItem( tr("General..."), this , SLOT(slotPrefsOrg()));
3 paul 660
        SetKeyEntry(18, tr("Preferences..."), MenID, 0);
112 Franz 661
        MenID = hymen->insertItem( tr("Fonts..."), this , SLOT(slotFontOrg()));
3 paul 662
        SetKeyEntry(17, tr("Fonts..."), MenID, 0);
112 Franz 663
        hymen->insertItem( tr("Hyphenator..."), this, SLOT(configHyphenator()));
664
        editMenu->insertItem( tr("Preferences"), hymen);
3 paul 665
        editMenu->setItemEnabled(edUndo, 0);
666
        editMenu->setItemEnabled(edid1, 0);
667
        editMenu->setItemEnabled(edid2, 0);
668
        editMenu->setItemEnabled(edid3, 0);
669
        editMenu->setItemEnabled(edid4, 0);
670
        editMenu->setItemEnabled(edid5, 0);
671
        editMenu->setItemEnabled(edid6, 0);
27 Franz 672
        editMenu->setItemEnabled(edid6a, 0);
164 Franz 673
        editMenu->setItemEnabled(Sear, 0);
3 paul 674
        editMenu->setItemEnabled(tman, 0);
675
        editMenu->setItemEnabled(jman, 0);
676
        StilMenu = new QPopupMenu();
677
        ObjMenu = new QPopupMenu();
68 Franz 678
        SetKeyEntry(19, tr("Select New Font"), 0, 0);
232 Franz 679
        ODup = ObjMenu->insertItem( tr("Duplicate"), this, SLOT(ObjektDup()), CTRL+Key_D);
680
        SetKeyEntry(20, tr("Duplicate"), ODup, CTRL+Key_D);
681
        OMDup = ObjMenu->insertItem( tr("Multiple Duplicate"), this, SLOT(ObjektDupM()));
682
        SetKeyEntry(21, tr("Multiple Duplicate"), OMDup, 0);
112 Franz 683
        Loesch = ObjMenu->insertItem( tr("Delete"), this, SLOT(DeleteObjekt()), CTRL+Key_K);
3 paul 684
        SetKeyEntry(22, tr("Delete"), Loesch, CTRL+Key_K);
685
        ObjMenu->insertSeparator();
112 Franz 686
        Gr = ObjMenu->insertItem( tr("Group"), this, SLOT(GroupObj()), CTRL+Key_G);
3 paul 687
        SetKeyEntry(23, tr("Group"), Gr, CTRL+Key_G);
112 Franz 688
        UnGr = ObjMenu->insertItem( tr("Un-group"), this, SLOT(UnGroupObj()),CTRL+Key_U);
74 Franz 689
        SetKeyEntry(24, tr("Un-group"), UnGr, CTRL+Key_U);
112 Franz 690
        LockOb = ObjMenu->insertItem( tr("Lock"), this, SLOT(ToggleObjLock()), CTRL+Key_H);
3 paul 691
        ObjMenu->insertSeparator();
112 Franz 692
        OBack = ObjMenu->insertItem( tr("Send to Back"), this, SLOT(Objekt2Back()));
3 paul 693
        SetKeyEntry(25, tr("Send to Back"), OBack, 0);
112 Franz 694
        OFront = ObjMenu->insertItem( tr("Bring to Front"), this, SLOT(Objekt2Front()));
3 paul 695
        SetKeyEntry(26, tr("Bring to Front"), OFront, 0);
112 Franz 696
        OLower = ObjMenu->insertItem( tr("Lower"), this, SLOT(ObjektLower()));
3 paul 697
        SetKeyEntry(27, tr("Lower"), OLower, 0);
112 Franz 698
        ORaise = ObjMenu->insertItem( tr("Raise"), this, SLOT(ObjektRaise()));
3 paul 699
        SetKeyEntry(28, tr("Raise"), ORaise, 0);
112 Franz 700
        DistM = ObjMenu->insertItem( tr("Distribute/Align..."), this, SLOT(ObjektAlign()));
3 paul 701
        SetKeyEntry(29, tr("Distribute/Align..."), DistM, 0);
702
        ObjMenu->insertSeparator();
703
        ShapeMenu = new QPopupMenu();
169 Franz 704
        SCustom = new Autoforms(0);
705
        ShapeMenu->insertItem(SCustom);
706
    connect(SCustom, SIGNAL(FormSel(int, int, double *)), this, SLOT(MakeFrame(int, int, double *)));
112 Franz 707
        ShapeEdit = ShapeMenu->insertItem( tr("Edit Frame"), this, SLOT(ToggleFrameEdit()));
708
        ShapeM = ObjMenu->insertItem( tr("Shape"), ShapeMenu);
709
        PfadT = ObjMenu->insertItem( tr("Attach Text to Path"), this, SLOT(Pfadtext()));
162 Franz 710
        PfadDT = ObjMenu->insertItem( tr("Detach Text from Path"), this, SLOT(noPfadtext()));
112 Franz 711
        PfadV = ObjMenu->insertItem( tr("Combine Polygons"), this, SLOT(UniteOb()));
712
        PfadS = ObjMenu->insertItem( tr("Split Polygons"), this, SLOT(SplitUniteOb()));
713
        PfadTP = ObjMenu->insertItem( tr("Convert to Outlines"), this, SLOT(TraceText()));
3 paul 714
        ObjMenu->setItemEnabled(ShapeM, 0);
715
        ObjMenu->setItemEnabled(DistM, 0);
716
        ObjMenu->setItemEnabled(Gr, 0);
717
        ObjMenu->setItemEnabled(UnGr, 0);
718
        ObjMenu->setItemEnabled(PfadT, 0);
162 Franz 719
        ObjMenu->setItemEnabled(PfadDT, 0);
3 paul 720
        ObjMenu->setItemEnabled(PfadV, 0);
721
        ObjMenu->setItemEnabled(PfadS, 0);
722
        ObjMenu->setItemEnabled(LockOb, 0);
723
        ObjMenu->setItemEnabled(PfadTP, 0);
724
        pageMenu = new QPopupMenu();
112 Franz 725
        MenID = pageMenu->insertItem( tr("Insert..."), this, SLOT(slotNewPageM()));
3 paul 726
        SetKeyEntry(30, tr("Insert..."), MenID, 0);
112 Franz 727
        pgmd = pageMenu->insertItem( tr("Delete..."), this, SLOT(DeletePage()));
3 paul 728
        SetKeyEntry(31, tr("Delete..."), pgmd, 0);
112 Franz 729
        MenID = pageMenu->insertItem( tr("Copy")+"...", this, SLOT(CopyPage()));
3 paul 730
        SetKeyEntry(61, tr("Copy")+"...", MenID, 0);
112 Franz 731
        pgmv = pageMenu->insertItem( tr("Move..."), this, SLOT(MovePage()));
3 paul 732
        SetKeyEntry(32, tr("Move..."), pgmv, 0);
112 Franz 733
        MenID = pageMenu->insertItem( tr("Apply Template..."), this, SLOT(ApplyTemp()));
3 paul 734
        SetKeyEntry(33, tr("Apply Template..."), MenID, 0);
112 Franz 735
        MenID = pageMenu->insertItem( tr("Manage Guides..."), this, SLOT(ManageGuides()));
3 paul 736
        SetKeyEntry(49, tr("Manage Guides..."), MenID, 0);
737
        pageMenu->setItemEnabled(pgmd, 0);
738
        pageMenu->setItemEnabled(pgmv, 0);
739
        viewMenu=new QPopupMenu();
112 Franz 740
        MenID = viewMenu->insertItem( tr("Fit in Window"), this, SLOT(slotZoomFit()), CTRL+Key_0);
3 paul 741
        SetKeyEntry(34, tr("Fit in Window"), MenID, CTRL+Key_0);
742
        MenID = viewMenu->insertItem("50%", this, SLOT(slotZoom50()));
743
        SetKeyEntry(35, tr("50%"), MenID, 0);
744
        MenID = viewMenu->insertItem("75%", this, SLOT(slotZoom75()));
745
        SetKeyEntry(36, tr("75%"), MenID, 0);
112 Franz 746
        MenID = viewMenu->insertItem( tr("Actual Size"), this, SLOT(slotZoom100()), CTRL+Key_1);
3 paul 747
        SetKeyEntry(37, tr("Actual Size"), MenID, CTRL+Key_1);
748
        MenID = viewMenu->insertItem("200%", this, SLOT(slotZoom200()));
749
        SetKeyEntry(38, tr("200%"), MenID, 0);
112 Franz 750
        MenID = viewMenu->insertItem( tr("Thumbnails"), this, SLOT(slotZoom20()));
3 paul 751
        SetKeyEntry(39, tr("Thumbnails"), MenID, 0);
752
        viewMenu->insertSeparator();
112 Franz 753
        Markers = viewMenu->insertItem( tr("Hide Margins"), this, SLOT(ToggleMarks()));
3 paul 754
        SetKeyEntry(40, tr("Hide Margins"), Markers, 0);
112 Franz 755
        FrameDr = viewMenu->insertItem( tr("Hide Frames"), this, SLOT(ToggleFrames()));
3 paul 756
        SetKeyEntry(41, tr("Hide Frames"), FrameDr, 0);
112 Franz 757
        Bilder = viewMenu->insertItem( tr("Hide Images"), this, SLOT(TogglePics()));
3 paul 758
        SetKeyEntry(42, tr("Hide Images"), Bilder, 0);
112 Franz 759
        Ras = viewMenu->insertItem( tr("Show Grid"), this, SLOT(ToggleRaster()));
3 paul 760
        SetKeyEntry(43, tr("Show Grid"), Ras, 0);
112 Franz 761
        uRas = viewMenu->insertItem( tr("Snap to Grid"), this, SLOT(ToggleURaster()));
3 paul 762
        SetKeyEntry(44, tr("Snap to Grid"), uRas, 0);
112 Franz 763
        Guide = viewMenu->insertItem( tr("Hide Guides"), this, SLOT(ToggleGuides()));
764
        uGuide = viewMenu->insertItem( tr("Snap to Guides"), this, SLOT(ToggleUGuides()));
3 paul 765
        for (a=0; a<6; ++a)
766
                {
767
                viewMenu->setItemEnabled(viewMenu->idAt(a), 0);
768
                }
769
        viewMenu->setItemEnabled(Markers, 0);
770
        viewMenu->setItemEnabled(FrameDr, 0);
771
        viewMenu->setItemEnabled(Bilder, 0);
772
        viewMenu->setItemEnabled(Ras, 0);
773
        viewMenu->setItemEnabled(uRas, 0);
774
        viewMenu->setItemEnabled(Guide, 0);
775
        viewMenu->setItemEnabled(uGuide, 0);
776
        toolMenu=new QPopupMenu();
119 Franz 777
        viewTools = toolMenu->insertItem( tr("Tools"), this, SLOT(ToggleTools()));
778
        SetKeyEntry(45, tr("Tools"), viewTools, 0);
779
        viewToolsP = toolMenu->insertItem( tr("PDF-Tools"), this, SLOT(TogglePDFTools()));
780
        viewMpal = toolMenu->insertItem( tr("Properties"), this, SLOT(ToggleMpal()));
781
        SetKeyEntry(46, tr("Properties"), viewMpal, 0);
782
        viewTpal = toolMenu->insertItem( tr("Outline"), this, SLOT(ToggleTpal()));
783
        SetKeyEntry(47, tr("Outline"), viewTpal, 0);
784
        viewBpal = toolMenu->insertItem( tr("Scrapbook"), this, SLOT(ToggleBpal()));
785
        SetKeyEntry(48, tr("Scrapbook"), viewBpal, 0);
786
        viewLpal = toolMenu->insertItem( tr("Layers"), this, SLOT(ToggleLpal()));
787
        viewSepal = toolMenu->insertItem( tr("Page Palette"), this, SLOT(ToggleSepal()));
788
        viewBopal = toolMenu->insertItem( tr("Bookmarks"), this, SLOT(ToggleBookpal()));
3 paul 789
        extraMenu=new QPopupMenu();
112 Franz 790
        MenID = extraMenu->insertItem( tr("Manage Pictures"), this, SLOT(StatusPic()));
3 paul 791
        SetKeyEntry(51, tr("Manage Pictures"), MenID, 0);
112 Franz 792
        hyph = extraMenu->insertItem( tr("Hyphenate Text"), this, SLOT(doHyphenate()));
3 paul 793
        extraMenu->setItemEnabled(hyph, 0);
794
        SetKeyEntry(50, tr("Hyphenate Text"), hyph, 0);
795
        windowsMenu = new QPopupMenu();
796
        windowsMenu->setCheckable( true );
797
        connect(windowsMenu, SIGNAL(aboutToShow()), this, SLOT(windowsMenuAboutToShow()));
798
        helpMenu=new QPopupMenu();
112 Franz 799
        MenID = helpMenu->insertItem( tr("About Scribus"), this, SLOT(slotHelpAbout()));
3 paul 800
        SetKeyEntry(52, tr("About Scribus"), MenID, 0);
112 Franz 801
        MenID = helpMenu->insertItem( tr("About Qt"), this, SLOT(slotHelpAboutQt()));
3 paul 802
        SetKeyEntry(53, tr("About Qt"), MenID, 0);
803
        helpMenu->insertSeparator();
112 Franz 804
        MenID = helpMenu->insertItem( tr("Online-Help..."), this, SLOT(slotOnlineHelp()));
3 paul 805
        SetKeyEntry(54, tr("Online-Help..."), MenID, 0);
112 Franz 806
        tip = helpMenu->insertItem( tr("Tool-Tips"), this, SLOT(ToggleTips()));
3 paul 807
        SetKeyEntry(55, tr("Tool-Tips"), tip, 0);
808
  tipsOn = true;
809
  helpMenu->setItemChecked(tip, tipsOn);
143 Franz 810
//      editMenu->insertItem( tr("Test"), this, SLOT(slotTest()));
112 Franz 811
//      helpMenu->insertItem( tr("Test2"), this, SLOT(slotTest2()));
237 Franz 812
        menuBar()->insertItem( tr("&File"), fileMenu);
813
        menuBar()->insertItem( tr("&Edit"), editMenu);
238 Franz 814
        Stm = menuBar()->insertItem( tr("&Style"), StilMenu);
815
        Obm = menuBar()->insertItem( tr("&Item"), ObjMenu);
816
        pgmm = menuBar()->insertItem( tr("&Page"), pageMenu);
175 Franz 817
        menuBar()->setItemEnabled(Stm, 0);
3 paul 818
        menuBar()->setItemEnabled(Obm, 0);
819
        menuBar()->setItemEnabled(pgmm, 0);
237 Franz 820
        menuBar()->insertItem( tr("&View"), viewMenu);
821
        menuBar()->insertItem( tr("&Tools"), toolMenu);
238 Franz 822
        exmn = menuBar()->insertItem( tr("E&xtras"), extraMenu);
3 paul 823
        menuBar()->setItemEnabled(exmn, 0);
237 Franz 824
        menuBar()->insertItem( tr("&Windows"), windowsMenu );
3 paul 825
        menuBar()->insertSeparator();
237 Franz 826
        menuBar()->insertItem( tr("&Help"), helpMenu);
3 paul 827
        AliMenu = new QPopupMenu();
112 Franz 828
        AliMenu->insertItem( tr("Left"));
829
        AliMenu->insertItem( tr("Center"));
830
        AliMenu->insertItem( tr("Right"));
831
        AliMenu->insertItem( tr("Block"));
832
        AliMenu->insertItem( tr("Forced"));
3 paul 833
        ColorMenu = new QPopupMenu();
148 Franz 834
        ColorMenC = new QComboBox(false);
835
        ColorMenC->setEditable(false);
836
        ColorMenu->insertItem(ColorMenC);
3 paul 837
        SizeTMenu = new QPopupMenu();
112 Franz 838
        SizeTMenu->insertItem( tr("Other..."));
3 paul 839
        SizeTMenu->insertItem(" 7 pt");
840
        SizeTMenu->insertItem(" 9 pt");
841
        SizeTMenu->insertItem("10 pt");
842
        SizeTMenu->insertItem("12 pt");
843
        SizeTMenu->insertItem("14 pt");
844
        SizeTMenu->insertItem("18 pt");
845
        SizeTMenu->insertItem("24 pt");
846
        SizeTMenu->insertItem("36 pt");
847
        SizeTMenu->insertItem("48 pt");
848
        SizeTMenu->insertItem("60 pt");
849
        SizeTMenu->insertItem("72 pt");
850
        ShadeMenu = new QPopupMenu();
112 Franz 851
        ShadeMenu->insertItem( tr("Other..."));
3 paul 852
        ShadeMenu->insertItem("0 %");
853
        ShadeMenu->insertItem("10 %");
854
        ShadeMenu->insertItem("20 %");
855
        ShadeMenu->insertItem("30 %");
856
        ShadeMenu->insertItem("40 %");
857
        ShadeMenu->insertItem("50 %");
858
        ShadeMenu->insertItem("60 %");
859
        ShadeMenu->insertItem("70 %");
860
        ShadeMenu->insertItem("80 %");
861
        ShadeMenu->insertItem("90 %");
862
        ShadeMenu->insertItem("100 %");
863
        FontMenu = new QPopupMenu();
864
        TypeStyleMenu = new QPopupMenu();
112 Franz 865
        TypeStyleMenu->insertItem( tr("Normal"));
3 paul 866
        tmp = qApp->font();
867
        tmp = qApp->font();
868
        tmp.setUnderline(true);
112 Franz 869
        TypeStyleMenu->insertItem(new FmItem( tr("Underline"), tmp));
3 paul 870
        tmp = qApp->font();
871
        tmp.setStrikeOut(true);
112 Franz 872
        TypeStyleMenu->insertItem(new FmItem( tr("Strikethru"), tmp));
873
        TypeStyleMenu->insertItem( tr("Small Caps"));
874
        TypeStyleMenu->insertItem( tr("Superscript"));
875
        TypeStyleMenu->insertItem( tr("Subscript"));
876
        TypeStyleMenu->insertItem( tr("Outlined"));
3 paul 877
}
878
 
879
void ScribusApp::initStatusBar()
880
{
881
        FMess = new QLabel(statusBar(), "ft");
882
        FMess->setText("           ");
883
        statusBar()->addWidget(FMess, 3, true);
884
        FProg = new QProgressBar(statusBar(), "p");
885
  FProg->setCenterIndicator(true);
886
        FProg->setFixedWidth( 100 );
887
        statusBar()->addWidget(FProg, 0, true);
888
        FProg->reset();
889
        XMess = new QLabel(statusBar(), "xt");
112 Franz 890
        XMess->setText( tr("X-Pos:"));
3 paul 891
        statusBar()->addWidget(XMess, 0, true);
892
        XDat = new QLabel(statusBar(), "dt");
893
        statusBar()->addWidget(XDat, 1, true);
894
        XDat->setText("         ");
895
        YMess = new QLabel(statusBar(), "yt");
112 Franz 896
        YMess->setText( tr("Y-Pos:"));
3 paul 897
        statusBar()->addWidget(YMess, 0, true);
898
        YDat = new QLabel(statusBar(), "ydt");
899
        statusBar()->addWidget(YDat, 1, true);
80 Franz 900
        YDat->setText("         ");
3 paul 901
}
902
 
80 Franz 903
void ScribusApp::ReportMP(double xp, double yp)
3 paul 904
{
905
        QString tmp, tmp2;
173 Franz 906
        int multiplier, precision;
907
        double divisor;
3 paul 908
        switch (doc->Einheit)
909
                {
910
                case 0:
911
                        tmp2 = " pt";
173 Franz 912
                        multiplier = 100;
913
                        divisor = 100.0;
914
                        precision = 2;
3 paul 915
                        break;
916
                case 1:
917
                        tmp2 = " mm";
173 Franz 918
                        multiplier = 1000;
919
                        divisor = 1000.0;
920
                        precision = 3;
3 paul 921
                        break;
922
                case 2:
923
                        tmp2 = " in";
173 Franz 924
                        multiplier = 10000;
925
                        divisor = 10000.0;
926
                        precision = 4;
3 paul 927
                        break;
928
                case 3:
929
                        tmp2 = " p";
173 Franz 930
                        multiplier = 100;
931
                        divisor = 100.0;
932
                        precision = 2;
3 paul 933
                        break;
237 Franz 934
                default:  // jjsa 21-03-2004 added default (complains for lint)
935
                        tmp2 = " pt";
936
                        multiplier = 100;
937
                        divisor = 100.0;
938
                        precision = 2;
939
                        break;
3 paul 940
                }
173 Franz 941
        XDat->setText(tmp.setNum(qRound(xp*UmReFaktor * multiplier) / divisor, 'f', precision)+tmp2);
942
        YDat->setText(tmp.setNum(qRound(yp*UmReFaktor * multiplier) / divisor, 'f', precision)+tmp2);
3 paul 943
}
944
 
945
void ScribusApp::SetKeyEntry(int Nr, QString text, int Men, int KeyC)
946
{
947
        Keys ke;
948
        ke.Name = text;
949
        ke.MenuID = Men;
950
        ke.KeyID = KeyC;
951
        Prefs.KeyActions.insert(Nr, ke);
952
}
953
 
954
void ScribusApp::DeleteSel(PageItem *b)
955
{
956
        Pti *it;
238 Franz 957
        int FirstSel = 0;
958
        bool first = false;
3 paul 959
        for (it = b->Ptext.first(); it != 0; it = b->Ptext.next())
960
                {
961
                if (it->cselect)
962
                        {
238 Franz 963
                        first = true;
3 paul 964
                        b->Ptext.remove();
965
                        it = b->Ptext.prev();
966
                        if (it == 0)
967
                                it = b->Ptext.first();
968
                        }
238 Franz 969
                if (!first)
970
                        FirstSel++;
3 paul 971
                }
972
        if (b->Ptext.count() != 0)
238 Franz 973
        {
974
                if (b->Ptext.first()->cselect)
3 paul 975
                {
976
                        b->Ptext.remove();
977
                        b->CPos = 0;
238 Franz 978
                }
3 paul 979
                else
238 Franz 980
                        b->CPos = FirstSel;
981
        }
3 paul 982
        else
983
                b->CPos = 0;
984
        b->HasSel = false;
985
        DisableTxEdit();
986
}
987
 
988
void ScribusApp::setTBvals(PageItem *b)
989
{
990
        if (b->Ptext.count() != 0)
991
                {
992
                doc->CurrentStyle = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cstyle & 127;
993
                doc->CurrentABStil = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cab;
994
                setAbsValue(doc->CurrentABStil);
995
                Mpal->setAli(doc->CurrentABStil);
68 Franz 996
                doc->CurrFont = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cfont;
997
                doc->CurrFontSize = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->csize;
998
                doc->CurrTextFill = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->ccolor;
999
                doc->CurrTextFillSh = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cshade;
1000
                doc->CurrTextStroke = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cstroke;
1001
                doc->CurrTextStrokeSh = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cshade2;
1002
                doc->CurrTextScale = b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cscale;
1003
                emit TextFarben(doc->CurrTextStroke, doc->CurrTextFill, doc->CurrTextStrokeSh, doc->CurrTextFillSh);
1004
                emit TextIFont(doc->CurrFont);
1005
                emit TextISize(doc->CurrFontSize);
1006
                emit TextUSval(b->Ptext.at(QMIN(b->CPos, static_cast<int>(b->Ptext.count()-1)))->cextra);
1007
                emit TextStil(doc->CurrentStyle);
1008
                emit TextScale(doc->CurrTextScale);
3 paul 1009
                }
1010
}
1011
 
1012
void ScribusApp::wheelEvent(QWheelEvent *w)
1013
{
1014
        if (HaveDoc)
239 Franz 1015
        {
240 Franz 1016
                if ((w->orientation() != QWheelEvent::Vertical) || ( w->state() & ShiftButton ))
3 paul 1017
                {
239 Franz 1018
                        if (w->delta() < 0)
240 Franz 1019
                                view->scrollBy(Prefs.Wheelval, 0);
239 Franz 1020
                        else
240 Franz 1021
                                view->scrollBy(-Prefs.Wheelval, 0);
239 Franz 1022
                }
3 paul 1023
                else
239 Franz 1024
                {
1025
                        if (w->delta() < 0)
240 Franz 1026
                                view->scrollBy(0, Prefs.Wheelval);
239 Franz 1027
                        else
240 Franz 1028
                                view->scrollBy(0, -Prefs.Wheelval);
239 Franz 1029
                }
3 paul 1030
                w->accept();
239 Franz 1031
        }
3 paul 1032
}
1033
 
1034
void ScribusApp::keyPressEvent(QKeyEvent *k)
1035
{
146 Franz 1036
        QWidgetList windows;
237 Franz 1037
        QWidget* w = NULL;
3 paul 1038
        struct Pti *hg;
1039
        int kk = k->key();
1040
        int as = k->ascii();
80 Franz 1041
        double altx, alty;
3 paul 1042
        QString uc = k->text();
1043
        QString cr, Tcha, Twort;
1044
        uint Tcoun;
237 Franz 1045
        int len, pos, c;
92 Franz 1046
        if (keyrep)
1047
                return;
1048
        keyrep = true;
3 paul 1049
        switch (k->state())
1050
                {
1051
                case ShiftButton:
1052
                        KeyMod = 0x00200000;
1053
                        break;
1054
                case AltButton:
1055
                        KeyMod = 0x00800000;
1056
                        break;
1057
                case ControlButton:
1058
                        KeyMod = 0x00400000;
1059
                        break;
1060
                default:
1061
                        KeyMod = 0;
146 Franz 1062
                        break;
3 paul 1063
                }
232 Franz 1064
        ButtonState buttonState = k->state();
240 Franz 1065
        if ((HaveDoc) && (!view->LE->hasFocus()) && (!view->PGS->PageCombo->hasFocus()))
3 paul 1066
                {
146 Franz 1067
                if (doc->AppMode != 7)
1068
                        {
1069
                        switch (kk)
1070
                                {
1071
                                case Key_Prior:
1072
                                        view->scrollBy(0, -Prefs.Wheelval);
1073
                                        keyrep = false;
1074
                                        return;
1075
                                        break;
1076
                                case Key_Next:
1077
                                        view->scrollBy(0, Prefs.Wheelval);
1078
                                        keyrep = false;
1079
                                        return;
1080
                                        break;
1081
                                case Key_Tab:
1082
                                        keyrep = false;
1083
                                        windows = wsp->windowList();
1084
                                        if (windows.count() > 1)
1085
                                                {
1086
                                                for (int i = 0; i < static_cast<int>(windows.count()); ++i)
1087
                                                        {
1088
                                                        if (wsp->activeWindow() == windows.at(i))
1089
                                                                {
1090
                                                                if (i == static_cast<int>(windows.count()-1))
1091
                                                                        w = windows.at(0);
1092
                                                                else
1093
                                                                        w = windows.at(i+1);
1094
                                                                break;
1095
                                                                }
1096
                                                        }
1097
                                                doc->OpenNodes = Tpal->buildReopenVals();
1098
                                                if ( w )
1099
                                                        w->showNormal();
1100
                                                newActWin(w);
1101
                                                }
1102
                                        return;
1103
                                        break;
1104
                                }
3 paul 1105
                        }
1106
                if (doc->ActPage->SelItem.count() != 0)
1107
                        {
1108
                        PageItem *b = doc->ActPage->SelItem.at(0);
1109
                        switch (doc->AppMode)
1110
                                {
1111
                                case 1:
1112
                                        switch (kk)
1113
                                                {
1114
                                                case Key_Delete:
1115
                                                        if (!doc->EditClip)
1116
                                                                {
232 Franz 1117
                                                                if ((!b->Locked) && (!((b->isTableItem) && (b->isSingleSel))))
3 paul 1118
                                                                        doc->ActPage->DeleteItem();
1119
                                                                }
1120
                                                        break;
1121
                                                case Key_Left:
1122
                                                        if (!k->isAutoRepeat())
1123
                                                                {
1124
                                                                doc->ActPage->storeUndoInf(b);
1125
                                                                doc->UnData.UnCode = 1;
1126
                                                                doc->UnDoValid = true;
1127
                                                                CanUndo();
1128
                                                                }
1129
                                                        if (!b->Locked)
239 Franz 1130
                                                        {
1131
                                                                if ( buttonState & ShiftButton )
1132
                                                                        doc->ActPage->moveGroup(-10, 0);
240 Franz 1133
                                                                else if ( buttonState & ControlButton )
1134
                                                                        doc->ActPage->moveGroup(-0.1, 0);
239 Franz 1135
                                                                else
1136
                                                                        doc->ActPage->moveGroup(-1, 0);
1137
                                                        }
3 paul 1138
                                                        break;
1139
                                                case Key_Right:
1140
                                                        if (!k->isAutoRepeat())
1141
                                                                {
1142
                                                                doc->ActPage->storeUndoInf(b);
1143
                                                                doc->UnData.UnCode = 1;
1144
                                                                doc->UnDoValid = true;
1145
                                                                CanUndo();
1146
                                                                }
1147
                                                        if (!b->Locked)
239 Franz 1148
                                                        {
1149
                                                                if ( buttonState & ShiftButton )
1150
                                                                        doc->ActPage->moveGroup(10, 0);
240 Franz 1151
                                                                else if ( buttonState & ControlButton )
1152
                                                                        doc->ActPage->moveGroup(0.1, 0);
239 Franz 1153
                                                                else
1154
                                                                        doc->ActPage->moveGroup(1, 0);
1155
                                                        }
3 paul 1156
                                                        break;
1157
                                                case Key_Up:
1158
                                                        if (!k->isAutoRepeat())
1159
                                                                {
1160
                                                                doc->ActPage->storeUndoInf(b);
1161
                                                                doc->UnData.UnCode = 1;
1162
                                                                doc->UnDoValid = true;
1163
                                                                CanUndo();
1164
                                                                }
1165
                                                        if (!b->Locked)
239 Franz 1166
                                                        {
1167
                                                                if ( buttonState & ShiftButton )
1168
                                                                        doc->ActPage->moveGroup(0, -10);
240 Franz 1169
                                                                else if ( buttonState & ControlButton )
1170
                                                                        doc->ActPage->moveGroup(0, -0.1);
239 Franz 1171
                                                                else
1172
                                                                        doc->ActPage->moveGroup(0, -1);
1173
                                                        }
3 paul 1174
                                                        break;
1175
                                                case Key_Down:
1176
                                                        if (!k->isAutoRepeat())
1177
                                                                {
1178
                                                                doc->ActPage->storeUndoInf(b);
1179
                                                                doc->UnData.UnCode = 1;
1180
                                                                doc->UnDoValid = true;
1181
                                                                CanUndo();
1182
                                                                }
1183
                                                        if (!b->Locked)
239 Franz 1184
                                                        {
1185
                                                                if ( buttonState & ShiftButton )
1186
                                                                        doc->ActPage->moveGroup(0, 10);
240 Franz 1187
                                                                else if ( buttonState & ControlButton )
1188
                                                                        doc->ActPage->moveGroup(0, 0.1);
239 Franz 1189
                                                                else
1190
                                                                        doc->ActPage->moveGroup(0, 1);
1191
                                                        }
1192
                                                        break;
3 paul 1193
                                                default:
1194
                                                        if (b->PType == 4)
1195
                                                                {
1196
                                                                if ((kk + KeyMod) == Prefs.KeyActions[59].KeyID)
1197
                                                                        {
1198
                                                                        setNewAbStyle(1);
1199
                                                                        b->Dirty = true;
1200
                                                                        b->Tinput = true;
68 Franz 1201
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1202
                                                                        }
1203
                                                                if ((kk + KeyMod) == Prefs.KeyActions[58].KeyID)
1204
                                                                        {
1205
                                                                        setNewAbStyle(2);
1206
                                                                        b->Dirty = true;
1207
                                                                        b->Tinput = true;
68 Franz 1208
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1209
                                                                        }
1210
                                                                if ((kk + KeyMod) == Prefs.KeyActions[57].KeyID)
1211
                                                                        {
1212
                                                                        setNewAbStyle(0);
1213
                                                                        b->Dirty = true;
1214
                                                                        b->Tinput = true;
68 Franz 1215
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1216
                                                                        }
1217
                                                                }
1218
                                                        break;
1219
                                                }
1220
                                        slotDocCh();
1221
                                        break;
1222
                                case 7:
232 Franz 1223
                                        int oldPos = b->CPos; // 15-mar-2004 jjsa for cursor movement with Shift + Arrow key
237 Franz 1224
                                        doc->ActPage->oldCp = b->CPos;
3 paul 1225
                                        if (b->PType == 4)
1226
                                                {
1227
                                                doc->ActPage->slotDoCurs(false);
237 Franz 1228
                                                switch (kk)
1229
                                                        {
1230
                                                        case Key_Prior:
1231
                                                        case Key_Next:
1232
                                                        case Key_End:
1233
                                                        case Key_Home:
1234
                                                        case Key_Right:
1235
                                                        case Key_Left:
1236
                                                        case Key_Up:
1237
                                                        case Key_Down:
1238
                                                                if ( (buttonState & ShiftButton) == 0 )
1239
                                                                        doc->ActPage->deselectAll(b);
1240
                                                        }
3 paul 1241
                                                switch (kk)
1242
                                                        {
235 Franz 1243
                                                        case Key_Prior:
1244
                                                                // go to begin of line
237 Franz 1245
                                                                if ( (pos = b->CPos) == 0 )
235 Franz 1246
                                                                        break; // at begin of frame
1247
                                                                len = static_cast<int>(b->Ptext.count());
237 Franz 1248
                                                                if ( pos == len )
1249
                                                                        pos--;
1250
                                                                if ( (buttonState & ControlButton) == 0 )
235 Franz 1251
                                                                {
237 Franz 1252
                                                                        alty =  b->Ptext.at(pos)->yp;
1253
                                                                        c = b->Ptext.at(pos)->ch.at(0).latin1();
1254
                                                                        if ( c == 13 ) // new line, position is wrong
1255
                                                                                if ( --pos > 0 )
1256
                                                                                        alty =  b->Ptext.at(pos)->yp;
235 Franz 1257
                                                                        // check for yp at actual position
237 Franz 1258
                                                                        if ( pos < len )
235 Franz 1259
                                                                        {
237 Franz 1260
                                                                                altx =  b->Ptext.at(pos)->yp;
235 Franz 1261
                                                                                if ( altx > alty )
1262
                                                                                {
1263
                                                                                        // we was at begin of line
1264
                                                                                        break;
1265
                                                                                }
1266
                                                                        }
237 Franz 1267
                                                                        while (  pos > 0 && b->Ptext.at(pos-1)->yp == alty )
1268
                                                                                pos--;
1269
                                                                        if ( b->Ptext.at(pos)->ch.at(0).latin1() == 13 )
1270
                                                                                pos++;
235 Franz 1271
                                                                }
237 Franz 1272
                                                                else
1273
                                                                {
1274
                                                                        // paragraph begin
1275
                                                                        if ( pos < len &&
1276
                                                                                b->Ptext.at(pos)->ch.at(0).latin1() == 13 )
1277
                                                                                pos--;
1278
                                                                        while(pos > 0 )
1279
                                                                                if ( b->Ptext.at(pos)->ch.at(0).latin1() == 13 )
1280
                                                                                {
1281
                                                                                        pos++;
1282
                                                                                        break;
1283
                                                                                }
1284
                                                                                else
1285
                                                                                        pos--;
1286
                                                                }
1287
                                                                b->CPos = pos;
235 Franz 1288
                                                                if ( buttonState & ShiftButton )
237 Franz 1289
                                                                        doc->ActPage->ExpandSel(b, -1, oldPos);
235 Franz 1290
                                                                break;
1291
                                                        case Key_Next:
1292
                                                                // go to end of line
1293
                                                                len = static_cast<int>(b->Ptext.count());
1294
                                                                if ( b->CPos >= len )
1295
                                                                        break; // at end of frame
237 Franz 1296
                                                                if ( (buttonState & ControlButton) == 0 )
1297
                                                                {
1298
                                                                        if ( b->CPos < len && b->Ptext.at(b->CPos)->ch.at(0).latin1() == 13 )
1299
                                                                        {
1300
                                                                                // at end of paragraph and therefore line
1301
                                                                                break;
1302
                                                                        }
1303
                                                                        alty =  b->Ptext.at(b->CPos)->yp;
1304
                                                                        while (  b->CPos < len-1 &&  b->Ptext.at(b->CPos+1)->yp == alty )
1305
                                                                                b->CPos++;
1306
 
1307
                                                                        if ( b->CPos < len -1 )
1308
                                                                                c = b->Ptext.at(b->CPos+1)->ch.at(0).latin1();
1309
                                                                        else if ( b->CPos == len - 1 )
1310
                                                                                c = 13;
1311
                                                                        else
1312
                                                                                c = 0;
1313
                                                                        if ( c == 13 )
1314
                                                                                b->CPos++;
1315
                                                                }
1316
                                                                else
1317
                                                                {
1318
                                                                        // go to end of paragraph
1319
                                                                        if ( b->Ptext.at(b->CPos)->ch.at(0).latin1() == 13 )
1320
                                                                        {
1321
                                                                                break;
1322
                                                                        }
1323
                                                                        pos = b->CPos;
1324
                                                                        while ( pos < len )
1325
                                                                        {
1326
                                                                                if ( b->Ptext.at(pos)->ch.at(0).latin1() == 13 )
1327
                                                                                        break;
1328
                                                                                else
1329
                                                                                        pos++;
1330
                                                                        }
1331
                                                                        b->CPos = pos;
1332
                                                                }
235 Franz 1333
                                                                if ( buttonState & ShiftButton )
1334
                                                                                doc->ActPage->ExpandSel(b, 1, oldPos);
1335
                                                                break;
3 paul 1336
                                                        case Key_Down:
1337
                                                                if (b->CPos != static_cast<int>(b->Ptext.count()))
1338
                                                                        {
1339
                                                                        alty = b->Ptext.at(b->CPos)->yp;
1340
                                                                        altx = b->Ptext.at(b->CPos)->xp;
1341
                                                                        do
1342
                                                                                {
1343
                                                                                b->CPos += 1;
1344
                                                                                if (b->CPos == static_cast<int>(b->Ptext.count()))
1345
                                                                                        break;
1346
                                                                                if (b->Ptext.at(b->CPos)->yp > alty)
1347
                                                                                        {
1348
                                                                                        if (b->Ptext.at(b->CPos)->xp >= altx)
1349
                                                                                                break;
1350
                                                                                        }
1351
                                                                                }
1352
                                                                        while (b->CPos < static_cast<int>(b->Ptext.count()));
232 Franz 1353
                                                                        if ( buttonState & ShiftButton )
1354
                                                                                {
1355
                                                                                        if ( buttonState & AltButton )
1356
                                                                                           b->CPos = b->Ptext.count();
1357
                                                                                        doc->ActPage->ExpandSel(b, 1, oldPos);
1358
                                                                                }
1359
                                                                        else
3 paul 1360
                                                                        if (b->CPos == static_cast<int>(b->Ptext.count()))
1361
                                                                                if (b->NextBox != 0)
1362
                                                                                        {
1363
                                                                                        if (b->NextBox->Ptext.count() != 0)
1364
                                                                                                {
1365
                                                                                                b->OwnPage->Deselect(true);
1366
                                                                                                b->NextBox->CPos = 0;
1367
                                                                                                doc->ActPage = b->NextBox->OwnPage;
1368
                                                                                                b->NextBox->OwnPage->SelectItemNr(b->NextBox->ItemNr);
1369
                                                                                                b = b->NextBox;
1370
                                                                                                }
80 Franz 1371
                                                                                        }
3 paul 1372
                                                                        }
1373
                                                                else
1374
                                                                        {
1375
                                                                        if (b->NextBox != 0)
1376
                                                                                {
1377
                                                                                if (b->NextBox->Ptext.count() != 0)
1378
                                                                                        {
1379
                                                                                        b->OwnPage->Deselect(true);
1380
                                                                                        b->NextBox->CPos = 0;
1381
                                                                                        doc->ActPage = b->NextBox->OwnPage;
1382
                                                                                        b->NextBox->OwnPage->SelectItemNr(b->NextBox->ItemNr);
1383
                                                                                        b = b->NextBox;
1384
                                                                                        }
1385
                                                                                }
1386
                                                                        }
232 Franz 1387
                                                                        if ( b->HasSel )
1388
                                                                                doc->ActPage->RefreshItem(b);
3 paul 1389
                                                                setTBvals(b);
1390
                                                                break;
1391
                                                        case Key_Up:
1392
                                                                if (b->CPos > 0)
1393
                                                                        {
1394
                                                                        if (b->CPos == static_cast<int>(b->Ptext.count()))
1395
                                                                                b->CPos -= 1;
1396
                                                                        alty = b->Ptext.at(b->CPos)->yp;
1397
                                                                        altx = b->Ptext.at(b->CPos)->xp;
1398
                                                                        if (b->CPos > 0)
1399
                                                                                {
1400
                                                                                do
1401
                                                                                        {
1402
                                                                                        b->CPos -= 1;
1403
                                                                                        if (b->CPos == 0)
1404
                                                                                                break;
1405
                                                                                        if (b->Ptext.at(b->CPos)->yp < alty)
1406
                                                                                                {
1407
                                                                                                if (b->Ptext.at(b->CPos)->xp <= altx)
1408
                                                                                                        break;
1409
                                                                                                }
1410
                                                                                        }
1411
                                                                                while (b->CPos > 0);
1412
                                                                                }
232 Franz 1413
                                                                        if ( buttonState & ShiftButton )
1414
                                                                                {
1415
                                                                                        if ( buttonState & AltButton )
1416
                                                                                           b->CPos = 0;
1417
                                                                                        doc->ActPage->ExpandSel(b, -1, oldPos);
1418
                                                                                }
1419
                                                                        else
3 paul 1420
                                                                        if (b->CPos == 0)
1421
                                                                                {
1422
                                                                                if (b->BackBox != 0)
1423
                                                                                        {
1424
                                                                                        b->OwnPage->Deselect(true);
1425
                                                                                        b->BackBox->CPos = b->BackBox->Ptext.count();
1426
                                                                                        doc->ActPage = b->BackBox->OwnPage;
1427
                                                                                        b->BackBox->OwnPage->SelectItemNr(b->BackBox->ItemNr);
1428
                                                                                        b = b->BackBox;
1429
                                                                                        }
1430
                                                                                }
1431
                                                                        }
1432
                                                                else
1433
                                                                        {
1434
                                                                        b->CPos = 0;
1435
                                                                        if (b->BackBox != 0)
1436
                                                                                {
1437
                                                                                b->OwnPage->Deselect(true);
1438
                                                                                b->BackBox->CPos = b->BackBox->Ptext.count();
1439
                                                                                doc->ActPage = b->BackBox->OwnPage;
1440
                                                                                b->BackBox->OwnPage->SelectItemNr(b->BackBox->ItemNr);
1441
                                                                                b = b->BackBox;
1442
                                                                                }
1443
                                                                        }
232 Franz 1444
                                                                        if ( b->HasSel )
1445
                                                                                doc->ActPage->RefreshItem(b);
3 paul 1446
                                                                setTBvals(b);
1447
                                                                break;
1448
                                                        case Key_Home:
1449
                                                                b->CPos = 0;
232 Franz 1450
                                                                if ( buttonState & ShiftButton )
1451
                                                                                doc->ActPage->ExpandSel(b, -1, oldPos);
3 paul 1452
                                                                setTBvals(b);
1453
                                                                break;
1454
                                                        case Key_End:
1455
                                                                b->CPos = static_cast<int>(b->Ptext.count());
232 Franz 1456
                                                                if ( buttonState & ShiftButton )
1457
                                                                                doc->ActPage->ExpandSel(b, 1, oldPos);
3 paul 1458
                                                                setTBvals(b);
1459
                                                                break;
1460
                                                        case Key_Left:
232 Franz 1461
                                                                if ( buttonState & ControlButton )
1462
                                                                        {
1463
                                                                                doc->ActPage->setNewPos(b, oldPos, b->Ptext.count(),-1);
1464
                                                                                if ( buttonState & ShiftButton )
1465
                                                                                        doc->ActPage->ExpandSel(b, -1, oldPos);
1466
                                                                        }
1467
                                                                else if ( buttonState & ShiftButton )
1468
                                                                        {
1469
                                                                                b->CPos--;
1470
                                                                                if ( b->CPos < 0 )
1471
                                                                                        b->CPos = 0;
1472
                                                                                else
1473
                                                                                        doc->ActPage->ExpandSel(b, -1, oldPos);
1474
                                                                        }
1475
                                                                else
1476
                                                                        {
3 paul 1477
                                                                        b->CPos -= 1;
232 Franz 1478
                                                                        if (b->CPos < 0)
3 paul 1479
                                                                                {
232 Franz 1480
                                                                                b->CPos = 0;
1481
                                                                                if (b->BackBox != 0)
3 paul 1482
                                                                                        {
1483
                                                                                        b->OwnPage->Deselect(true);
232 Franz 1484
                                                                                        b->BackBox->CPos = b->BackBox->Ptext.count();
1485
                                                                                        doc->ActPage = b->BackBox->OwnPage;
1486
                                                                                        b->BackBox->OwnPage->SelectItemNr(b->BackBox->ItemNr);
1487
                                                                                        b = b->BackBox;
1488
                                                                                        }
3 paul 1489
                                                                                }
232 Franz 1490
                                                                        }
1491
                                                                        if ( b->HasSel )
1492
                                                                                doc->ActPage->RefreshItem(b);
1493
                                                                setTBvals(b);
1494
                                                                break;
1495
                                                        case Key_Right:
1496
                                                                if ( buttonState & ControlButton )
1497
                                                                        {
1498
                                                                                doc->ActPage->setNewPos(b, oldPos, b->Ptext.count(),1);
1499
                                                                                if ( buttonState & ShiftButton )
1500
                                                                                        doc->ActPage->ExpandSel(b, 1, oldPos);
1501
                                                                        }
1502
                                                                else if ( buttonState & ShiftButton )
1503
                                                                        {
1504
                                                                                b->CPos++;
1505
                                                                                if ( b->CPos > static_cast<int>(b->Ptext.count()) )
1506
                                                                                   b->CPos--;
1507
                                                                                else
1508
                                                                                        doc->ActPage->ExpandSel(b, 1, oldPos);
1509
                                                                        }
1510
                                                                else
1511
                                                                        {
1512
                                                                        b->CPos += 1; // new position within text ?
1513
                                                                        if (b->CPos > static_cast<int>(b->Ptext.count()))
231 Franz 1514
                                                                                {
232 Franz 1515
                                                                                b->CPos -= 1;
1516
                                                                                if (b->NextBox != 0)
1517
                                                                                        {
1518
                                                                                        if (b->NextBox->Ptext.count() != 0)
1519
                                                                                                {
1520
                                                                                                b->OwnPage->Deselect(true);
1521
                                                                                                b->NextBox->CPos = 0;
1522
                                                                                                doc->ActPage = b->NextBox->OwnPage;
1523
                                                                                                b->NextBox->OwnPage->SelectItemNr(b->NextBox->ItemNr);
1524
                                                                                                b = b->NextBox;
1525
                                                                                                }
1526
                                                                                        }
231 Franz 1527
                                                                                }
232 Franz 1528
                                                                        }
1529
                                                                                if ( b->HasSel )
1530
                                                                                        doc->ActPage->RefreshItem(b);
1531
                                                                setTBvals(b);
1532
                                                                break;
3 paul 1533
                                                        case Key_Delete:
122 Franz 1534
                                                                if (b->CPos == static_cast<int>(b->Ptext.count()))
1535
                                                                        {
1536
                                                                        keyrep = false;
1537
                                                                        return;
1538
                                                                        }
1539
                                                                if (b->Ptext.count() == 0)
1540
                                                                        {
1541
                                                                        keyrep = false;
1542
                                                                        return;
1543
                                                                        }
3 paul 1544
                                                                cr = b->Ptext.at(b->CPos)->ch;
1545
                                                                if (b->HasSel)
1546
                                                                        DeleteSel(b);
1547
                                                                else
1548
                                                                        b->Ptext.remove(b->CPos);
1549
                                                                b->Tinput = false;
1550
                                                                if ((cr == QChar(13)) && (b->Ptext.count() != 0))
1551
                                                                        {
1552
                                                                        doc->ActPage->chAbStyle(b, b->Ptext.at(QMAX(b->CPos-1,0))->cab);
1553
                                                                        b->Tinput = false;
1554
                                                                        }
1555
                                                                setTBvals(b);
1556
                                                                b->Dirty = true;
68 Franz 1557
                                                                doc->ActPage->RefreshItem(b);
3 paul 1558
                                                                break;
1559
                                                        case Key_Backspace:
1560
                                                                if (b->CPos == 0)
122 Franz 1561
                                                                        {
1562
                                                                        keyrep = false;
3 paul 1563
                                                                        return;
122 Franz 1564
                                                                        }
1565
                                                                if (b->Ptext.count() == 0)
1566
                                                                        {
1567
                                                                        keyrep = false;
1568
                                                                        return;
1569
                                                                        }
3 paul 1570
                                                                cr = b->Ptext.at(QMAX(b->CPos-1,0))->ch;
1571
                                                                if (b->HasSel)
1572
                                                                        DeleteSel(b);
1573
                                                                else
1574
                                                                        b->CPos -= 1;
1575
                                                                        b->Ptext.remove(b->CPos);
1576
                                                                b->Tinput = false;
1577
                                                                if ((cr == QChar(13)) && (b->Ptext.count() != 0))
1578
                                                                        {
1579
                                                                        doc->ActPage->chAbStyle(b, b->Ptext.at(QMAX(b->CPos-1,0))->cab);
1580
                                                                        b->Tinput = false;
1581
                                                                        }
1582
                                                                setTBvals(b);
1583
                                                                b->Dirty = true;
68 Franz 1584
                                                                doc->ActPage->RefreshItem(b);
3 paul 1585
                                                                break;
1586
                                                        default:
1587
                                                                if ((b->HasSel) && (kk < 0x1000))
1588
                                                                        {
1589
                                                                        DeleteSel(b);
1590
                                                                        b->Dirty = true;
68 Franz 1591
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1592
                                                                        }
139 Franz 1593
                                                                if ((kk == Key_Tab) || ((kk + KeyMod) == Prefs.KeyActions[60].KeyID) || ((kk + KeyMod) == Prefs.KeyActions[67].KeyID))
3 paul 1594
                                                                        {
1595
                                                                        hg = new Pti;
55 Franz 1596
                                                                        if ((kk + KeyMod) == Prefs.KeyActions[60].KeyID)
1597
                                                                                hg->ch = QString(QChar(30));
139 Franz 1598
                                                                        else if (kk == Key_Tab)
1599
                                                                                hg->ch = QString(QChar(9));
55 Franz 1600
                                                                        else
1601
                                                                                hg->ch = QString(QChar(29));
68 Franz 1602
                                                                        hg->cfont = doc->CurrFont;
1603
                                                                        hg->csize = doc->CurrFontSize;
1604
                                                                        hg->ccolor = doc->CurrTextFill;
1605
                                                                        hg->cshade = doc->CurrTextFillSh;
1606
                                                                        hg->cstroke = doc->CurrTextStroke;
1607
                                                                        hg->cshade2 = doc->CurrTextStrokeSh;
1608
                                                                        hg->cscale = doc->CurrTextScale;
3 paul 1609
                                                                        hg->cselect = false;
1610
                                                                        hg->cstyle = doc->CurrentStyle;
1611
                                                                        hg->cab = doc->CurrentABStil;
1612
                                                                        if (doc->Vorlagen[doc->CurrentABStil].Font != "")
158 Franz 1613
                                                                                {
3 paul 1614
                                                                                hg->cfont = doc->Vorlagen[doc->CurrentABStil].Font;
158 Franz 1615
                                                                                hg->csize = doc->Vorlagen[doc->CurrentABStil].FontSize;
1616
                                                                                }
68 Franz 1617
                                                                        hg->cextra = 0;
3 paul 1618
                                                                        hg->xp = 0;
1619
                                                                        hg->yp = 0;
1620
                                                                        hg->PRot = 0;
1621
                                                                        hg->PtransX = 0;
1622
                                                                        hg->PtransY = 0;
1623
                                                                        b->Ptext.insert(b->CPos, hg);
1624
                                                                        b->CPos += 1;
1625
                                                                        b->Dirty = true;
1626
                                                                        b->Tinput = true;
68 Franz 1627
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1628
                                                                        break;
1629
                                                                        }
1630
                                                                if ((kk + KeyMod) == Prefs.KeyActions[56].KeyID)
1631
                                                                        {
1632
                                                                        b->Ptext.at(QMAX(b->CPos-1,0))->cstyle ^= 128;
1633
                                                                        b->Dirty = true;
1634
                                                                        b->Tinput = true;
68 Franz 1635
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1636
                                                                        break;
1637
                                                                        }
1638
                                                                if ((kk + KeyMod) == Prefs.KeyActions[59].KeyID)
1639
                                                                        {
1640
                                                                        setNewAbStyle(1);
1641
                                                                        b->Dirty = true;
1642
                                                                        b->Tinput = true;
68 Franz 1643
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1644
                                                                        break;
1645
                                                                        }
1646
                                                                if ((kk + KeyMod) == Prefs.KeyActions[57].KeyID)
1647
                                                                        {
1648
                                                                        setNewAbStyle(0);
1649
                                                                        b->Dirty = true;
1650
                                                                        b->Tinput = true;
68 Franz 1651
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1652
                                                                        break;
1653
                                                                        }
1654
                                                                if ((kk + KeyMod) == Prefs.KeyActions[58].KeyID)
1655
                                                                        {
1656
                                                                        setNewAbStyle(2);
1657
                                                                        b->Dirty = true;
1658
                                                                        b->Tinput = true;
68 Franz 1659
                                                                        doc->ActPage->RefreshItem(b);
3 paul 1660
                                                                        break;
1661
                                                                        }
68 Franz 1662
                                                                if (((uc[0] > QChar(31)) || (as == 13) || (as == 30)) && ((*doc->AllFonts)[doc->CurrFont]->CharWidth.contains(uc[0].unicode())))
3 paul 1663
                                                                        {
1664
                                                                        hg = new Pti;
1665
                                                                        hg->ch = uc;
68 Franz 1666
                                                                        hg->cfont = doc->CurrFont;
1667
                                                                        hg->ccolor = doc->CurrTextFill;
1668
                                                                        hg->cshade = doc->CurrTextFillSh;
1669
                                                                        hg->cstroke = doc->CurrTextStroke;
1670
                                                                        hg->cshade2 = doc->CurrTextStrokeSh;
1671
                                                                        hg->cscale = doc->CurrTextScale;
1672
                                                                        hg->csize = doc->CurrFontSize;
3 paul 1673
                                                                        hg->cextra = 0;
1674
                                                                        hg->cselect = false;
1675
                                                                        hg->cstyle = doc->CurrentStyle;
1676
                                                                        hg->cab = doc->CurrentABStil;
1677
                                                                        if (doc->Vorlagen[doc->CurrentABStil].Font != "")
158 Franz 1678
                                                                                {
3 paul 1679
                                                                                hg->cfont = doc->Vorlagen[doc->CurrentABStil].Font;
158 Franz 1680
                                                                                hg->csize = doc->Vorlagen[doc->CurrentABStil].FontSize;
1681
                                                                                }
3 paul 1682
                                                                        hg->xp = 0;
1683
                                                                        hg->yp = 0;
1684
                                                                        hg->PRot = 0;
1685
                                                                        hg->PtransX = 0;
1686
                                                                        hg->PtransY = 0;
1687
                                                                        b->Ptext.insert(b->CPos, hg);
1688
                                                                        b->CPos += 1;
1689
                                                                        if ((doc->Trenner->AutoCheck) && (b->CPos > 1))
1690
                                                                                {
1691
                                                                                Twort = "";
1692
                                                                                Tcoun = 0;
1693
                                                                                for (int hych = b->CPos-1; hych > -1; hych--)
1694
                                                                                        {
1695
                                                                                        Tcha = b->Ptext.at(hych)->ch;
1696
                                                                                        if (Tcha == " ")
1697
                                                                                                {
1698
                                                                                                Tcoun = hych+1;
1699
                                                                                                break;
1700
                                                                                                }
1701
                                                                                        Twort.prepend(Tcha);
1702
                                                                                        }
1703
                                                                                if (Twort != "")
1704
                                                                                        {
68 Franz 1705
                                                                                        if (doc->Trenner->Language != b->Language)
1706
                                                                                                doc->Trenner->slotNewDict(b->Language);
3 paul 1707
                                                                                        doc->Trenner->slotHyphenateWord(b, Twort, Tcoun);
1708
                                                                                        b->Dirty = true;
1709
                                                                                        }
1710
                                                                                }
1711
                                                                        if ((b->CPos < static_cast<int>(b->Ptext.count())) || (as == 30))
1712
                                                                                b->Dirty = true;
1713
                                                                        b->Tinput = true;
92 Franz 1714
                                                                        doc->ActPage->RefreshItem(b, true);
3 paul 1715
                                                                        }
1716
                                                                break;
1717
                                                        }
1718
                                                if (b->Ptext.count() != 0)
1719
                                                        if (b->Ptext.at(QMAX(b->CPos-1, 0))->yp != 0)
1720
                                                                doc->ActPage->slotDoCurs(true);
1721
                                                if ((kk == Key_Left) || (kk == Key_Right) || (kk == Key_Up) || (kk == Key_Down))
92 Franz 1722
                                                        {
1723
                                                        keyrep = false;
3 paul 1724
                                                        return;
92 Franz 1725
                                                        }
3 paul 1726
                                                }
1727
                                        slotDocCh(false);
1728
                                        break;
1729
                                }
1730
                        }
1731
                }
92 Franz 1732
        keyrep = false;
3 paul 1733
}
1734
 
1735
void ScribusApp::closeEvent(QCloseEvent *ce)
1736
{
1737
        QWidgetList windows = wsp->windowList();
1738
        ScribusWin* tw;
1739
        if (!windows.isEmpty())
1740
                {
135 Franz 1741
                singleClose = true;
3 paul 1742
                for ( int i = 0; i < static_cast<int>(windows.count()); ++i )
1743
                        {
1744
                        newActWin(windows.at(i));
1745
                        tw = ActWin;
1746
                        ActWin->close();
1747
                        if (tw == ActWin)
1748
                                {
1749
                                ce->ignore();
135 Franz 1750
                                singleClose = false;
3 paul 1751
                                return;
1752
                                }
1753
                        }
1754
                SavePrefs();
68 Franz 1755
                if ((Prefs.SaveAtQ) && (ScBook->Changed == true))
3 paul 1756
                        {
1757
                        if (ScBook->ScFilename.isEmpty())
1758
                                ScBook->ScFilename = PrefsPfad+"/scrap.scs";
1759
                        ScBook->Save();
1760
                        }
1761
                if (ScBook->BibWin->Objekte.count() == 0)
204 Franz 1762
                        unlink(PrefsPfad+"/scrap.scs");
3 paul 1763
                Prefs.AvailFonts.~SCFonts();
1764
                FinalizePlugs();
1765
                exit(0);
1766
                }
1767
        else
1768
                {
1769
                SavePrefs();
68 Franz 1770
                if ((Prefs.SaveAtQ) && (ScBook->Changed == true))
3 paul 1771
                        {
1772
                        if (ScBook->ScFilename.isEmpty())
1773
                                ScBook->ScFilename = PrefsPfad+"/scrap.scs";
1774
                        ScBook->Save();
1775
                        }
1776
                if (ScBook->BibWin->Objekte.count() == 0)
204 Franz 1777
                        unlink(PrefsPfad+