Subversion Repositories Scribus

Rev

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