Subversion Repositories Scribus

Rev

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

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