Subversion Repositories Scribus

Rev

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