Subversion Repositories Scribus

Rev

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