Guest User

scribus.cpp with a pair of #ifdef _HAIKU_

a guest
Feb 20th, 2013
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 353.43 KB | None | 0 0
  1. /*
  2. For general Scribus (>=1.3.2) copyright and licensing information please refer
  3. to the COPYING file provided with the program. Following this notice may exist
  4. a copyright and/or license notice that predates the release of Scribus 1.3.2
  5. for which a new license (GPL+exception) is in place.
  6. */
  7. /***************************************************************************
  8. scribus.cpp - description
  9. -------------------
  10. begin : Fre Apr 6 21:09:31 CEST 2001
  11. copyright : (C) 2001 by Franz Schmid
  12. email : Franz.Schmid@altmuehlnet.de
  13. ***************************************************************************/
  14.  
  15. /***************************************************************************
  16. * *
  17. * This program is free software; you can redistribute it and/or modify *
  18. * it under the terms of the GNU General Public License as published by *
  19. * the Free Software Foundation; either version 2 of the License, or *
  20. * (at your option) any later version. *
  21. * *
  22. ***************************************************************************/
  23.  
  24. #include <QApplication>
  25. #include <QByteArray>
  26. #include <QCloseEvent>
  27. #include <QColor>
  28. #include <QColorDialog>
  29. #include <QCursor>
  30. #include <QDesktopWidget>
  31. #include <QDragEnterEvent>
  32. #include <QDropEvent>
  33. #include <QEvent>
  34. #include <QEventLoop>
  35. #include <QFrame>
  36. #include <QIcon>
  37. #include <QInputDialog>
  38. #include <QKeyEvent>
  39. #include <QKeySequence>
  40. #include <QLabel>
  41. #include <QList>
  42. #include <QLocale>
  43. #include <QMouseEvent>
  44. #include <QPixmap>
  45. #include <QRegExp>
  46. #include <QStyleFactory>
  47. #include <QTableWidget>
  48. #include <QTextCodec>
  49. #include <QTranslator>
  50. #include <QWheelEvent>
  51.  
  52. #include <cstdio>
  53. #include <cstdlib>
  54. #include <cassert>
  55.  
  56. #include "scconfig.h"
  57.  
  58. #ifdef HAVE_DLFCN_H
  59. #include <dlfcn.h>
  60. #endif
  61.  
  62. #ifdef HAVE_UNISTD_H
  63. #include <unistd.h>
  64. #endif
  65.  
  66. #include <iostream>
  67. #include <sstream>
  68. #include <signal.h>
  69. #include <string>
  70.  
  71. #include "about.h"
  72. #include "aboutplugins.h"
  73. #include "actionmanager.h"
  74. #include "aligndistribute.h"
  75. #include "annot.h"
  76. #include "annota.h"
  77. #include "applytemplatedialog.h"
  78. #include "arrowchooser.h"
  79. #include "autoform.h"
  80. #include "basepointwidget.h"
  81. #include "bookmarkpalette.h"
  82. #include "canvasmode.h"
  83. #include "charselect.h"
  84. #include "checkDocument.h"
  85. #include "cmsprefs.h"
  86. #include "collect4output.h"
  87. #include "colorcombo.h"
  88. #include "colorm.h"
  89. #include "commonstrings.h"
  90. #include "contextmenu.h"
  91. #include "cpalette.h"
  92. #include "customfdialog.h"
  93. #include "delpages.h"
  94. #include "desaxe/digester.h"
  95. #include "desaxe/saxXML.h"
  96. #include "desaxe/simple_actions.h"
  97. #include "docinfo.h"
  98. #include "docitemattrprefs.h"
  99. #include "documentchecker.h"
  100. #include "documentinformation.h"
  101. #include "effectsdialog.h"
  102. #include "fileloader.h"
  103. #include "filewatcher.h"
  104. #include "fontcombo.h"
  105. #include "fontprefs.h"
  106. #include "fpoint.h"
  107. #include "fpointarray.h"
  108. #include "gtgettext.h"
  109. #include "guidemanager.h"
  110. #include "helpbrowser.h"
  111. #include "hruler.h"
  112. #include "hyphenator.h"
  113. #include "hysettings.h"
  114. #include "imageinfodialog.h"
  115. #include "insertaframe.h"
  116. #include "inspage.h"
  117. #include "javadocs.h"
  118. #include "langmgr.h"
  119. #include "layers.h"
  120. #include "loremipsum.h"
  121. #include "marginwidget.h"
  122. #include "margindialog.h"
  123. #include "masterpagepalette.h"
  124. #include "menumanager.h"
  125. #include "mergedoc.h"
  126. #include "movepage.h"
  127. #include "multipleduplicate.h"
  128. #include "newfile.h"
  129. #include "newtemp.h"
  130. #include "nfttemplate.h"
  131. #include "nftdialog.h"
  132. #include "ui_nftdialog.h"
  133. #include "nftwidget.h"
  134. #include "nodeeditpalette.h"
  135. #include "outlinepalette.h"
  136. #include "page.h"
  137. #include "pageitem.h"
  138. #include "pageitem_imageframe.h"
  139. #include "pageitem_latexframe.h"
  140. #include "pageitem_textframe.h"
  141. #include "pageitemattributes.h"
  142. #include "pagelayout.h"
  143. #include "pagepalette.h"
  144. #include "pageselector.h"
  145. #include "pagesize.h"
  146. #include "patterndialog.h"
  147. #include "pdflib.h"
  148. #include "pdfoptions.h"
  149. #include "pdfopts.h"
  150. #include "picstatus.h"
  151. #include "pluginmanager.h"
  152. #include "plugins/formatidlist.h"
  153. #include "polygonwidget.h"
  154. #include "prefs.h"
  155. #include "prefscontext.h"
  156. #include "prefsfile.h"
  157. #include "prefsmanager.h"
  158. #include "prefstable.h"
  159. #include "preview.h"
  160. #include "printdialog.h"
  161. #include "propertiespalette.h"
  162. #include "pslib.h"
  163. #include "query.h"
  164. #include "reformdoc.h"
  165. #include "replacecolors.h"
  166. #include "resourcecollection.h"
  167. #include "sccolorengine.h"
  168. #include "sccombobox.h"
  169. #include "scgtplugin.h"
  170. #include "scmessagebox.h"
  171. #include "scmimedata.h"
  172. #include "scpaths.h"
  173. #include "scprintengine_ps.h"
  174. #include "scraction.h"
  175. #include "scrapbookpalette.h"
  176. #include "scribus.h"
  177. #include "scribusXml.h"
  178. #include "scribusapp.h"
  179. #include "scribuscore.h"
  180. #include "scribuswin.h"
  181. #include "search.h"
  182. #include "selection.h"
  183. #include "selectobjects.h"
  184. #include "serializer.h"
  185. #include "smlinestyle.h"
  186. #include "smtextstyles.h"
  187. #include "splash.h"
  188. #include "stencilreader.h"
  189. #include "storyeditor.h"
  190. #include "stylemanager.h"
  191. #include "tabcheckdoc.h"
  192. #include "tabguides.h"
  193. #include "tabmanager.h"
  194. #include "tabpdfoptions.h"
  195. #include "tabtools.h"
  196. #include "tabtypography.h"
  197. #include "text/nlsconfig.h"
  198. #include "tocgenerator.h"
  199. #include "tocindexprefs.h"
  200. #include "ui/copypagetomasterpagedialog.h"
  201. #include "ui/edittoolbar.h"
  202. #include "ui/filetoolbar.h"
  203. #include "ui/modetoolbar.h"
  204. #include "ui/pdftoolbar.h"
  205. #include "undogui.h"
  206. #include "undomanager.h"
  207. #include "undostate.h"
  208. #include "units.h"
  209. #include "urllauncher.h"
  210. #include "util.h"
  211. #include "util_formats.h"
  212. #include "util_ghostscript.h"
  213. #include "util_icon.h"
  214. #include "util_math.h"
  215. #include "vruler.h"
  216. #include "loadsaveplugin.h"
  217.  
  218.  
  219. #if defined(_WIN32)
  220. #include "scdocoutput_ps2.h"
  221. #include "scprintengine_gdi.h"
  222. #endif
  223.  
  224. using namespace std;
  225.  
  226. bool previewDinUse;
  227. bool printDinUse;
  228.  
  229. QString DocDir;
  230.  
  231.  
  232. extern ScribusQApp* ScQApp;
  233. extern bool emergencyActivated;
  234.  
  235.  
  236. ScribusMainWindow::ScribusMainWindow()
  237. {
  238. actionManager=0;
  239. scrMenuMgr=0;
  240. prefsManager=0;
  241. formatsManager=0;
  242. UrlLauncher::instance();
  243. mainWindowStatusLabel=0;
  244. ExternalApp=0;
  245. #ifdef Q_WS_MAC
  246. noIcon = loadIcon("noicon.xpm");
  247. #endif
  248. }
  249.  
  250. /*
  251. static QCoreApplication::EventFilter origEventFilter = 0;
  252.  
  253. bool reportFocusChanges(void *message, long *result)
  254. {
  255. unsigned* data = static_cast<unsigned*>(message);
  256. if (QApplication::focusWidget())
  257. qDebug() << QApplication::applicationFilePath() << reinterpret_cast<void*>(QApplication::focusWidget()) << typeid(*QApplication::focusWidget()).name() << QApplication::focusWidget()->objectName() << message << data[0] << data[1] << data[2] << data[3] << data[4] << data[5] << data[6] << data[7];
  258. else
  259. qDebug() << QApplication::applicationFilePath() << "no focus" << message << data[0] << data[1] << data[2] << data[3] << data[4] << data[5] << data[6] << data[7];
  260. return origEventFilter && origEventFilter(message, result);
  261. }
  262. */
  263.  
  264. /*
  265. * retval 0 - ok, 1 - no fonts, ...
  266. */
  267. int ScribusMainWindow::initScMW(bool primaryMainWindow)
  268. {
  269. int retVal=0;
  270.  
  271. QByteArray stylesheet;
  272. if (loadRawText(ScPaths::getApplicationDataDir() + "/stylesheet.css", stylesheet))
  273. {
  274. qApp->setStyleSheet(QString(stylesheet));
  275. }
  276.  
  277. // origEventFilter = qApp->setEventFilter(reportFocusChanges);
  278.  
  279. previewDinUse = false;
  280. printDinUse = false;
  281. internalCopy = false;
  282. CurrStED = NULL;
  283. setWindowTitle( tr("Scribus " VERSION));
  284. setAttribute(Qt::WA_KeyCompression, false);
  285. setWindowIcon(loadIcon("AppIcon.png"));
  286. scrActionGroups.clear();
  287. scrActions.clear();
  288. scrRecentFileActions.clear();
  289. scrRecentPasteActions.clear();
  290. scrWindowsActions.clear();
  291. scrLayersActions.clear();
  292. scrScrapActions.clear();
  293. scrMenuMgr = new MenuManager(menuBar());
  294. prefsManager = PrefsManager::instance();
  295. formatsManager = FormatsManager::instance();
  296. objectSpecificUndo = false;
  297.  
  298. undoManager = UndoManager::instance();
  299. PrefsContext *undoPrefs = prefsManager->prefsFile->getContext("undo");
  300. undoManager->setUndoEnabled(undoPrefs->getBool("enabled", true));
  301. tocGenerator = new TOCGenerator();
  302.  
  303.  
  304. initDefaultValues();
  305.  
  306. initStatusBar();
  307.  
  308. qApp->processEvents();
  309.  
  310. actionManager = new ActionManager(this);
  311. actionManager->init(this);
  312. // if (primaryMainWindow)
  313. // ScCore->setSplashStatus( tr("Applying User Shortcuts") );
  314. // prefsManager->applyLoadedShortCuts();
  315. // initKeyboardShortcuts();
  316. initMenuBar();
  317. initToolBars();
  318. ScCore->pluginManager->setupPluginActions(this);
  319. ScCore->pluginManager->languageChange();
  320. if (primaryMainWindow)
  321. ScCore->setSplashStatus( tr("Applying User Shortcuts") );
  322. prefsManager->applyLoadedShortCuts();
  323. initKeyboardShortcuts();
  324.  
  325. resize(610, 600);
  326. wsp = new QWorkspace( this );
  327. setCentralWidget( wsp );
  328. connect(wsp, SIGNAL(windowActivated(QWidget *)), this, SLOT(newActWin(QWidget *)));
  329. //Connect windows cascade and tile actions to the workspace after its created. Only depends on wsp created.
  330. connect( scrActions["windowsCascade"], SIGNAL(triggered()) , wsp, SLOT(cascade()) );
  331. connect( scrActions["windowsTile"], SIGNAL(triggered()) , wsp, SLOT(tile()) );
  332. initPalettes();
  333.  
  334. prefsManager->setupMainWindow(this);
  335.  
  336. if (primaryMainWindow)
  337. ScCore->setSplashStatus( tr("Initializing Story Editor") );
  338. storyEditor = new StoryEditor(this);
  339.  
  340. DocDir = prefsManager->documentDir();
  341.  
  342. if (primaryMainWindow)
  343. ScCore->setSplashStatus( tr("Initializing Hyphenator") );
  344. QString preLang = prefsManager->appPrefs.Language;
  345. initHyphenator();
  346. if (!LanguageManager::instance()->getHyphFilename( preLang, false ).isEmpty() )
  347. prefsManager->appPrefs.Language = preLang;
  348. if (primaryMainWindow)
  349. ScCore->setSplashStatus( tr("Reading Scrapbook") );
  350. initScrapbook();
  351.  
  352. scrActions["helpTooltips"]->setChecked(prefsManager->appPrefs.showToolTips);
  353. scrActions["showMouseCoordinates"]->setChecked(prefsManager->appPrefs.showMouseCoordinates);
  354. scrActions["stickyTools"]->setChecked(prefsManager->appPrefs.stickyTools);
  355. ToggleTips();
  356. ToggleMouseTips();
  357. propertiesPalette->setFontSize();
  358. if (scrActions["SaveAsDocumentTemplate"])
  359. scrActions["SaveAsDocumentTemplate"]->setEnabled(false);
  360.  
  361. connect(ScCore->fileWatcher, SIGNAL(fileDeleted(QString )), this, SLOT(removeRecentFromWatcher(QString)));
  362. connect(this, SIGNAL(TextStyle(const ParagraphStyle&)), propertiesPalette, SLOT(updateStyle(const ParagraphStyle&)));
  363. connect(this, SIGNAL(TextIFont(QString)), propertiesPalette, SLOT(setFontFace(QString)));
  364. connect(this, SIGNAL(TextISize(double)), propertiesPalette, SLOT(setSize(double)));
  365. connect(this, SIGNAL(TextUSval(double)), propertiesPalette, SLOT(setExtra(double)));
  366. connect(this, SIGNAL(TextStil(int)), propertiesPalette, SLOT(setStil(int)));
  367. connect(this, SIGNAL(TextScale(double)), propertiesPalette, SLOT(setTScale(double)));
  368. connect(this, SIGNAL(TextScaleV(double)), propertiesPalette, SLOT(setTScaleV(double)));
  369. connect(this, SIGNAL(TextBase(double)), propertiesPalette, SLOT(setTBase(double)));
  370. connect(this, SIGNAL(TextShadow(double, double )), propertiesPalette, SLOT(setShadowOffs(double, double )));
  371. connect(this, SIGNAL(TextOutline(double)), propertiesPalette, SLOT(setOutlineW(double)));
  372. connect(this, SIGNAL(TextUnderline(double, double)), propertiesPalette, SLOT(setUnderline(double, double)));
  373. connect(this, SIGNAL(TextStrike(double, double)), propertiesPalette, SLOT(setStrike(double, double)));
  374. connect(this, SIGNAL(TextFarben(QString, QString, double, double)), propertiesPalette, SLOT(setActFarben(QString, QString, double, double)));
  375. connect(ClipB, SIGNAL(dataChanged()), this, SLOT(ClipChange()));
  376. // connect(ClipB, SIGNAL(selectionChanged()), this, SLOT(ClipChange()));
  377. setAcceptDrops(true);
  378. QCoreApplication::instance()->installEventFilter(this);
  379. scrActions["toolsSelect"]->setChecked(true);
  380.  
  381. return retVal;
  382. }
  383.  
  384.  
  385. ScribusMainWindow::~ScribusMainWindow()
  386. {
  387. }
  388.  
  389. void ScribusMainWindow::addScToolBar(ScToolBar *tb, QString name)
  390. {
  391. if (!scrToolBars.contains(name))
  392. scrToolBars.insert(name, tb);
  393. addToolBar(tb);
  394. }
  395.  
  396. void ScribusMainWindow::initToolBars()
  397. {
  398. fileToolBar = new FileToolBar(this);
  399. editToolBar = new EditToolBar(this);
  400. UndoWidget* uWidget = new UndoWidget(editToolBar, "uWidget");
  401. undoManager->registerGui(uWidget);
  402. modeToolBar = new ModeToolBar(this);
  403. pdfToolBar = new PDFToolBar(this);
  404.  
  405. addScToolBar(fileToolBar, "ToolBar-File");
  406. addScToolBar(editToolBar, "ToolBar-Edit");
  407. addScToolBar(modeToolBar, "ToolBar-Tools");
  408. addScToolBar(pdfToolBar, "ToolBar-PDF_Tools");
  409.  
  410. connect(modeToolBar, SIGNAL(visibilityChanged(bool)), scrActions["toolsToolbarTools"], SLOT(setChecked(bool)));
  411. connect(scrActions["toolsToolbarPDF"], SIGNAL(toggled(bool)), pdfToolBar, SLOT(setVisible(bool)));
  412. connect(pdfToolBar, SIGNAL(visibilityChanged(bool)), scrActions["toolsToolbarPDF"], SLOT(setChecked(bool)));
  413. connect(scrActions["toolsToolbarTools"], SIGNAL(toggled(bool)), modeToolBar, SLOT(setVisible(bool)) );
  414. }
  415.  
  416.  
  417. void ScribusMainWindow::initDefaultValues()
  418. {
  419. HaveDoc = false;
  420. ScriptRunning = 0;
  421. view = NULL;
  422. doc = NULL;
  423. DocNr = 1;
  424. PrinterUsed = false;
  425. PDef.Pname = "";
  426. PDef.Dname = "";
  427. PDef.Command = "";
  428. keyrep = false;
  429. _arrowKeyDown = false;
  430. ClipB = QApplication::clipboard();
  431. palettesStatus[0] = false;
  432. guidesStatus[0] = false;
  433. }
  434.  
  435.  
  436. void ScribusMainWindow::initKeyboardShortcuts()
  437. {
  438. for( QMap<QString, QPointer<ScrAction> >::Iterator it = scrActions.begin(); it!=scrActions.end(); ++it )
  439. {
  440. if ((ScrAction*)(it.value())!=NULL)
  441. {
  442. QString accelerator=it.value()->shortcut();
  443. prefsManager->setKeyEntry(it.key(), it.value()->cleanMenuText(), accelerator,0);
  444. }
  445. //else
  446. // qDebug() << it.key();
  447. //qDebug() << QString("|-\n|%1||%2||%3").arg(it.key()).arg(it.value()->cleanMenuText()).arg(QString(it.data()->accel()));
  448. }
  449. }
  450.  
  451.  
  452. void ScribusMainWindow::initPalettes()
  453. {
  454. //CB TODO hide the publicly available members of some palettes
  455. // these must be filtered too as they take control of the palettes events
  456. outlinePalette = new OutlinePalette(this);
  457. outlinePalette->setMainWindow(this);
  458. connect( scrActions["toolsOutline"], SIGNAL(toggled(bool)) , outlinePalette, SLOT(setPaletteShown(bool)) );
  459. connect( outlinePalette, SIGNAL(paletteShown(bool)), scrActions["toolsOutline"], SLOT(setChecked(bool)));
  460. propertiesPalette = new PropertiesPalette(this);
  461. propertiesPalette->setMainWindow(this);
  462. connect( scrActions["toolsProperties"], SIGNAL(toggled(bool)) , propertiesPalette, SLOT(setPaletteShown(bool)) );
  463. connect( propertiesPalette, SIGNAL(paletteShown(bool)), scrActions["toolsProperties"], SLOT(setChecked(bool)));
  464.  
  465. //CB dont need this until we have a doc...
  466. //propertiesPalette->Cpal->SetColors(prefsManager->colorSet());
  467. propertiesPalette->Fonts->RebuildList(0);
  468. propertiesPalette->installEventFilter(this);
  469. nodePalette = new NodePalette(this);
  470. nodePalette->installEventFilter(this);
  471. layerPalette = new LayerPalette(this);
  472. guidePalette = new GuideManager(this);
  473. charPalette = new CharSelect(this);
  474. connect( scrActions["toolsLayers"], SIGNAL(toggled(bool)) , layerPalette, SLOT(setPaletteShown(bool)) );
  475. connect( layerPalette, SIGNAL(paletteShown(bool)), scrActions["toolsLayers"], SLOT(setChecked(bool)));
  476. layerPalette->installEventFilter(this);
  477. layerPalette->Table->installEventFilter(this);
  478. scrapbookPalette = new Biblio(this);
  479. connect( scrActions["toolsScrapbook"], SIGNAL(toggled(bool)) , scrapbookPalette, SLOT(setPaletteShown(bool)) );
  480. connect( scrapbookPalette, SIGNAL(paletteShown(bool)), scrActions["toolsScrapbook"], SLOT(setChecked(bool)));
  481. connect( scrapbookPalette, SIGNAL(pasteToActualPage(QString)), this, SLOT(pasteFromScrapbook(QString)));
  482. scrapbookPalette->installEventFilter(this);
  483. pagePalette = new PagePalette(this);
  484. connect( scrActions["toolsPages"], SIGNAL(toggled(bool)) , pagePalette, SLOT(setPaletteShown(bool)) );
  485. connect( scrActions["toolsPages"], SIGNAL(toggled(bool)) , this, SLOT(setPagePalette(bool)) );
  486. connect( pagePalette, SIGNAL(paletteShown(bool)), scrActions["toolsPages"], SLOT(setChecked(bool)));
  487. pagePalette->installEventFilter(this);
  488. bookmarkPalette = new BookPalette(this);
  489. connect( scrActions["toolsBookmarks"], SIGNAL(toggled(bool)) , bookmarkPalette, SLOT(setPaletteShown(bool)) );
  490. connect( bookmarkPalette, SIGNAL(paletteShown(bool)), scrActions["toolsBookmarks"], SLOT(setChecked(bool)));
  491. bookmarkPalette->installEventFilter(this);
  492. // measurementPalette = new Measurements(this);
  493. // connect( scrActions["toolsMeasurements"], SIGNAL(toggled(bool)) , measurementPalette, SLOT(setPaletteShown(bool)) );
  494. connect( scrActions["toolsMeasurements"], SIGNAL(toggledData(bool, int)) , this, SLOT(setAppModeByToggle(bool, int)) );
  495. // connect( measurementPalette, SIGNAL(paletteShown(bool)), scrActions["toolsMeasurements"], SLOT(setChecked(bool)));
  496. // measurementPalette->installEventFilter(this);
  497. // measurementPalette->hide();
  498. docCheckerPalette = new CheckDocument(this, false);
  499. connect( scrActions["toolsPreflightVerifier"], SIGNAL(toggled(bool)) , docCheckerPalette, SLOT(setPaletteShown(bool)) );
  500. connect( scrActions["toolsPreflightVerifier"], SIGNAL(toggled(bool)) , this, SLOT(docCheckToggle(bool)) );
  501. connect( docCheckerPalette, SIGNAL(paletteShown(bool)), scrActions["toolsPreflightVerifier"], SLOT(setChecked(bool)));
  502. connect( docCheckerPalette, SIGNAL(paletteShown(bool)), this, SLOT(docCheckToggle(bool)));
  503. docCheckerPalette->installEventFilter(this);
  504. docCheckerPalette->hide();
  505.  
  506. alignDistributePalette = new AlignDistributePalette(this, "AlignDistributePalette", false);
  507. connect( scrActions["toolsAlignDistribute"], SIGNAL(toggled(bool)) , alignDistributePalette, SLOT(setPaletteShown(bool)) );
  508. connect( alignDistributePalette, SIGNAL(paletteShown(bool)), scrActions["toolsAlignDistribute"], SLOT(setChecked(bool)));
  509. connect( alignDistributePalette, SIGNAL(documentChanged()), this, SLOT(slotDocCh()));
  510. alignDistributePalette->installEventFilter(this);
  511.  
  512. undoPalette = new UndoPalette(this, "undoPalette");
  513. undoPalette->installEventFilter(this);
  514. undoManager->registerGui(undoPalette);
  515. connect(undoPalette, SIGNAL(paletteShown(bool)), this, SLOT(setUndoPalette(bool)));
  516. connect(undoPalette, SIGNAL(objectMode(bool)), this, SLOT(setUndoMode(bool)));
  517.  
  518. // initializing style manager here too even it's not strictly a palette
  519. styleManager = new StyleManager(this, "styleManager");
  520. styleManager->addStyle(new SMLineStyle());
  521. SMCharacterStyle *tmpCS = new SMCharacterStyle();
  522. styleManager->addStyle(new SMParagraphStyle(tmpCS->tmpStyles()));
  523. styleManager->addStyle(tmpCS);
  524. connect( scrActions["editStyles"], SIGNAL(toggled(bool)), styleManager, SLOT(setPaletteShown(bool)) );
  525. connect( styleManager, SIGNAL(paletteShown(bool)), scrActions["editStyles"], SLOT(setChecked(bool)));
  526. styleManager->installEventFilter(this);
  527.  
  528. connect(docCheckerPalette, SIGNAL(selectElement(int, int)), this, SLOT(selectItemsFromOutlines(int, int)));
  529. connect(docCheckerPalette, SIGNAL(selectPage(int)), this, SLOT(selectPagesFromOutlines(int)));
  530. connect(docCheckerPalette, SIGNAL(selectMasterPage(QString)), this, SLOT(manageMasterPages(QString)));
  531. connect(outlinePalette, SIGNAL(selectElement(int, int, bool)), this, SLOT(selectItemsFromOutlines(int, int, bool)));
  532. connect(outlinePalette, SIGNAL(selectPage(int)), this, SLOT(selectPagesFromOutlines(int)));
  533. connect(outlinePalette, SIGNAL(selectMasterPage(QString)), this, SLOT(manageMasterPages(QString)));
  534. connect(propertiesPalette->paraStyleCombo, SIGNAL(newStyle(const QString&)), this, SLOT(setNewParStyle(const QString&)));
  535. connect(propertiesPalette->charStyleCombo, SIGNAL(newStyle(const QString&)), this, SLOT(setNewCharStyle(const QString&)));
  536. // connect(propertiesPalette, SIGNAL(EditLSt()), this, SLOT(slotEditLineStyles()));
  537. connect(nodePalette, SIGNAL(Schliessen()), propertiesPalette, SLOT(endEdit2()));
  538. connect(nodePalette, SIGNAL(Schliessen()), this, SLOT(slotSelect()));
  539. connect(nodePalette, SIGNAL(DocChanged()), this, SLOT(slotDocCh()));
  540. connect(layerPalette, SIGNAL(LayerChanged()), this, SLOT(showLayer()));
  541.  
  542. connect(bookmarkPalette->BView, SIGNAL(MarkMoved()), this, SLOT(StoreBookmarks()));
  543. connect(bookmarkPalette->BView, SIGNAL(changed()), this, SLOT(slotDocCh()));
  544. connect(bookmarkPalette->BView, SIGNAL(SelectElement(PageItem *)), this, SLOT(selectItemsFromOutlines(PageItem *)));
  545. // guides
  546. connect(scrActions["pageManageGuides"], SIGNAL(toggled(bool)), guidePalette, SLOT(setPaletteShown(bool)));
  547. connect(guidePalette, SIGNAL(paletteShown(bool)), scrActions["pageManageGuides"], SLOT(setChecked(bool)));
  548. // char palette
  549. connect(scrActions["insertGlyph"], SIGNAL(toggled(bool)), charPalette, SLOT(setPaletteShown(bool)));
  550. connect(charPalette, SIGNAL(paletteShown(bool)), scrActions["insertGlyph"], SLOT(setChecked(bool)));
  551. }
  552.  
  553.  
  554. void ScribusMainWindow::initScrapbook()
  555. {
  556. QString scrapbookFileO = QDir::toNativeSeparators(prefsManager->preferencesLocation()+"/scrap13.scs");
  557. QFileInfo scrapbookFileInfoO = QFileInfo(scrapbookFileO);
  558. if (scrapbookFileInfoO.exists())
  559. {
  560. scrapbookPalette->readOldContents(scrapbookFileO, QDir::toNativeSeparators(prefsManager->preferencesLocation()+"/scrapbook/main"));
  561. QDir d = QDir();
  562. d.rename(scrapbookFileO, QDir::toNativeSeparators(prefsManager->preferencesLocation()+"/scrap13.backup"));
  563. }
  564. QString scrapbookTemp = QDir::toNativeSeparators(prefsManager->preferencesLocation()+"/scrapbook/tmp");
  565. QFileInfo scrapbookTempInfo = QFileInfo(scrapbookTemp);
  566. if (scrapbookTempInfo.exists())
  567. scrapbookPalette->readTempContents(scrapbookTemp);
  568. QString scrapbookFile = QDir::toNativeSeparators(prefsManager->preferencesLocation()+"/scrapbook/main");
  569. QFileInfo scrapbookFileInfo = QFileInfo(scrapbookFile);
  570. if (scrapbookFileInfo.exists())
  571. scrapbookPalette->readContents(scrapbookFile);
  572. scrapbookPalette->setScrapbookFileName(scrapbookFile);
  573. scrapbookPalette->setOpenScrapbooks(prefsManager->appPrefs.RecentScrapbooks);
  574. rebuildRecentPasteMenu();
  575. connect(scrapbookPalette, SIGNAL(updateRecentMenue()), this, SLOT(rebuildRecentPasteMenu()));
  576. }
  577.  
  578.  
  579. bool ScribusMainWindow::warningVersion(QWidget *parent)
  580. {
  581. bool retval = false;
  582. int t = ScMessageBox::warning(parent, QObject::tr("Scribus Development Version"), "<qt>" +
  583. QObject::tr("You are running a development version of Scribus 1.3.x. The document you are working with was created in Scribus 1.2.x. Saving the current file under 1.3.x renders it unable to be edited in Scribus 1.2.x versions. To preserve the ability to edit in 1.2.x, save this file under a different name and further edit the newly named file and the original will be untouched. Are you sure you wish to proceed with this operation?") + "</qt>",
  584. QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel);
  585. if (t == QMessageBox::Ok)
  586. retval = true;
  587. return retval;
  588. }
  589.  
  590.  
  591. void ScribusMainWindow::initMenuBar()
  592. {
  593. RecentDocs.clear();
  594. scrMenuMgr->createMenu("File", ActionManager::defaultMenuNameEntryTranslated("File"));
  595. scrMenuMgr->addMenuItem(scrActions["fileNew"], "File");
  596. scrMenuMgr->addMenuItem(scrActions["fileNewFromTemplate"], "File");
  597. scrMenuMgr->addMenuItem(scrActions["fileOpen"], "File");
  598. recentFileMenuName="FileOpenRecent";
  599. scrMenuMgr->createMenu(recentFileMenuName, tr("Open &Recent"), "File");
  600. scrMenuMgr->addMenuSeparator("File");
  601. scrMenuMgr->addMenuItem(scrActions["fileClose"], "File");
  602. scrMenuMgr->addMenuItem(scrActions["fileSave"], "File");
  603. scrMenuMgr->addMenuItem(scrActions["fileSaveAs"], "File");
  604. scrMenuMgr->addMenuItem(scrActions["fileRevert"], "File");
  605. scrMenuMgr->addMenuItem(scrActions["fileCollect"], "File");
  606. scrMenuMgr->addMenuSeparator("File");
  607. scrMenuMgr->createMenu("FileImport", tr("&Import"), "File");
  608. scrMenuMgr->addMenuItem(scrActions["fileImportText"], "FileImport");
  609. // scrMenuMgr->addMenuItem(scrActions["fileImportText2"], "FileImport");
  610. scrMenuMgr->addMenuItem(scrActions["fileImportAppendText"], "FileImport");
  611. scrMenuMgr->addMenuItem(scrActions["fileImportImage"], "FileImport");
  612. scrMenuMgr->addMenuItem(scrActions["fileImportVector"], "FileImport");
  613.  
  614. scrMenuMgr->createMenu("FileExport", tr("&Export"), "File");
  615. scrMenuMgr->addMenuItem(scrActions["fileExportText"], "FileExport");
  616. scrMenuMgr->addMenuItem(scrActions["fileExportAsEPS"], "FileExport");
  617. scrMenuMgr->addMenuItem(scrActions["fileExportAsPDF"], "FileExport");
  618. scrMenuMgr->addMenuSeparator("File");
  619. scrMenuMgr->addMenuItem(scrActions["fileDocSetup"], "File");
  620. scrMenuMgr->addMenuItem(scrActions["filePreferences"], "File");
  621. scrMenuMgr->addMenuSeparator("File");
  622. scrMenuMgr->addMenuItem(scrActions["filePrint"], "File");
  623. scrMenuMgr->addMenuItem(scrActions["PrintPreview"], "File");
  624. scrMenuMgr->addMenuSeparator("File");
  625. scrMenuMgr->addMenuItem(scrActions["fileQuit"], "File");
  626.  
  627. scrActions["fileClose"]->setEnabled(false);
  628. scrActions["fileSave"]->setEnabled(false);
  629. scrActions["fileSaveAs"]->setEnabled(false);
  630. scrActions["fileRevert"]->setEnabled(false);
  631. scrActions["fileCollect"]->setEnabled(false);
  632. scrActions["fileImportText"]->setEnabled(false);
  633. scrActions["fileImportText2"]->setEnabled(false);
  634. scrActions["fileImportImage"]->setEnabled(false);
  635. scrActions["fileImportAppendText"]->setEnabled(false);
  636. scrActions["pageImport"]->setEnabled(false);
  637. scrActions["fileExportText"]->setEnabled(false);
  638. scrActions["fileExportAsEPS"]->setEnabled(false);
  639. scrActions["fileExportAsPDF"]->setEnabled(false);
  640. scrMenuMgr->setMenuEnabled("FileImport", false);
  641. scrMenuMgr->setMenuEnabled("FileExport", false);
  642. scrActions["fileDocSetup"]->setEnabled(false);
  643. scrActions["filePrint"]->setEnabled(false);
  644. scrActions["PrintPreview"]->setEnabled(false);
  645.  
  646. scrMenuMgr->createMenu("Edit", ActionManager::defaultMenuNameEntryTranslated("Edit"));
  647. scrMenuMgr->addMenuItem(scrActions["editUndoAction"], "Edit");
  648. scrMenuMgr->addMenuItem(scrActions["editRedoAction"], "Edit");
  649. scrMenuMgr->addMenuItem(scrActions["editActionMode"], "Edit");
  650. scrMenuMgr->addMenuSeparator("Edit");
  651. scrMenuMgr->addMenuItem(scrActions["editCut"], "Edit");
  652. scrMenuMgr->addMenuItem(scrActions["editCopy"], "Edit");
  653. scrMenuMgr->addMenuItem(scrActions["editPaste"], "Edit");
  654. recentPasteMenuName="EditPasteRecent";
  655. scrMenuMgr->createMenu(recentPasteMenuName, tr("Paste Recent"), "Edit");
  656. scrMenuMgr->createMenu("EditContents", tr("Contents"), "Edit");
  657. scrMenuMgr->addMenuItem(scrActions["editCopyContents"], "EditContents");
  658. scrMenuMgr->addMenuItem(scrActions["editPasteContents"], "EditContents");
  659. scrMenuMgr->addMenuItem(scrActions["editPasteContentsAbs"], "EditContents");
  660. scrMenuMgr->addMenuItem(scrActions["editClearContents"], "EditContents");
  661. scrMenuMgr->addMenuSeparator("Edit");
  662. scrMenuMgr->addMenuItem(scrActions["editSelectAll"], "Edit");
  663. scrMenuMgr->addMenuItem(scrActions["editSelectAllOnLayer"], "Edit");
  664. scrMenuMgr->addMenuItem(scrActions["editDeselectAll"], "Edit");
  665. scrMenuMgr->addMenuSeparator("Edit");
  666. scrMenuMgr->addMenuItem(scrActions["editSearchReplace"], "Edit");
  667. scrMenuMgr->addMenuItem(scrActions["toolsEditWithStoryEditor"], "Edit");
  668. scrMenuMgr->addMenuItem(scrActions["editEditWithImageEditor"], "Edit");
  669. scrMenuMgr->addMenuItem(scrActions["editEditRenderSource"], "Edit");
  670. scrMenuMgr->addMenuSeparator("Edit");
  671. scrMenuMgr->addMenuItem(scrActions["editColors"], "Edit");
  672. scrMenuMgr->addMenuItem(scrActions["editReplaceColors"], "Edit");
  673. scrMenuMgr->addMenuItem(scrActions["editPatterns"], "Edit");
  674. scrMenuMgr->addMenuItem(scrActions["editStyles"], "Edit");
  675. scrMenuMgr->addMenuItem(scrActions["editMasterPages"], "Edit");
  676. scrMenuMgr->addMenuItem(scrActions["editJavascripts"], "Edit");
  677. scrActions["editUndoAction"]->setEnabled(false);
  678. scrActions["editRedoAction"]->setEnabled(false);
  679. scrActions["editActionMode"]->setEnabled(true);
  680. scrActions["editCut"]->setEnabled(false);
  681. scrActions["editCopy"]->setEnabled(false);
  682. scrActions["editPaste"]->setEnabled(false);
  683. scrMenuMgr->setMenuEnabled("EditPasteRecent", false);
  684. scrMenuMgr->setMenuEnabled("EditContents", false);
  685. scrActions["editCopyContents"]->setEnabled(false);
  686. scrActions["editPasteContents"]->setEnabled(false);
  687. scrActions["editPasteContentsAbs"]->setEnabled(false);
  688. scrActions["editClearContents"]->setEnabled(false);
  689. scrActions["editSelectAll"]->setEnabled(false);
  690. scrActions["editSelectAllOnLayer"]->setEnabled(false);
  691. scrActions["editDeselectAll"]->setEnabled(false);
  692. scrActions["editSearchReplace"]->setEnabled(false);
  693. scrActions["editReplaceColors"]->setEnabled(false);
  694. scrActions["editPatterns"]->setEnabled(false);
  695. scrActions["editStyles"]->setEnabled(false);
  696. scrActions["editMasterPages"]->setEnabled(false);
  697. scrActions["editJavascripts"]->setEnabled(false);
  698. scrActions["toolsEditWithStoryEditor"]->setEnabled(false);
  699. scrActions["editEditWithImageEditor"]->setEnabled(false);
  700. scrActions["editEditRenderSource"]->setEnabled(false);
  701.  
  702. //Item Menu
  703. scrMenuMgr->createMenu("Item", ActionManager::defaultMenuNameEntryTranslated("Item"));
  704. scrMenuMgr->addMenuItem(scrActions["itemDuplicate"], "Item");
  705. scrMenuMgr->addMenuItem(scrActions["itemMulDuplicate"], "Item");
  706. scrMenuMgr->addMenuItem(scrActions["itemDelete"], "Item");
  707. scrMenuMgr->addMenuSeparator("Item");
  708. scrMenuMgr->addMenuItem(scrActions["itemGroup"], "Item");
  709. scrMenuMgr->addMenuItem(scrActions["itemUngroup"], "Item");
  710. scrMenuMgr->addMenuItem(scrActions["itemLock"], "Item");
  711. scrMenuMgr->addMenuItem(scrActions["itemLockSize"], "Item");
  712. scrMenuMgr->addMenuSeparator("Item");
  713. scrMenuMgr->createMenu("ItemLevel", tr("Level"));
  714. scrMenuMgr->addMenuToMenu("ItemLevel", "Item");
  715. scrMenuMgr->addMenuItem(scrActions["itemRaise"], "ItemLevel");
  716. scrMenuMgr->addMenuItem(scrActions["itemLower"], "ItemLevel");
  717. scrMenuMgr->addMenuItem(scrActions["itemRaiseToTop"], "ItemLevel");
  718. scrMenuMgr->addMenuItem(scrActions["itemLowerToBottom"], "ItemLevel");
  719. scrMenuMgr->createMenu("ItemLayer", tr("Send to La&yer"));
  720. scrMenuMgr->addMenuToMenu("ItemLayer", "Item");
  721. layerMenuName="ItemLayer";
  722. scrMenuMgr->createMenu("itemSendToScrapbook", tr("Send to Scrapbook"));
  723. scrMenuMgr->addMenuToMenu("itemSendToScrapbook", "Item");
  724. scrMenuMgr->addMenuItem(scrActions["itemSendToPattern"], "Item");
  725. scrMenuMgr->addMenuSeparator("Item");
  726. scrMenuMgr->addMenuItem(scrActions["itemAdjustFrameToImage"], "Item");
  727. scrMenuMgr->addMenuItem(scrActions["itemAdjustImageToFrame"], "Item");
  728. scrMenuMgr->addMenuItem(scrActions["itemUpdateImage"], "Item");
  729. scrMenuMgr->addMenuItem(scrActions["styleImageEffects"], "Item");
  730. scrMenuMgr->addMenuItem(scrActions["itemExtendedImageProperties"], "Item");
  731. scrMenuMgr->createMenu("ItemPreviewSettings", tr("Preview Settings"), "Item");
  732. scrMenuMgr->addMenuItem(scrActions["itemImageIsVisible"], "ItemPreviewSettings");
  733. scrMenuMgr->addMenuSeparator("ItemPreviewSettings");
  734. scrMenuMgr->addMenuItem(scrActions["itemPreviewLow"], "ItemPreviewSettings");
  735. scrMenuMgr->addMenuItem(scrActions["itemPreviewNormal"], "ItemPreviewSettings");
  736. scrMenuMgr->addMenuItem(scrActions["itemPreviewFull"], "ItemPreviewSettings");
  737. scrMenuMgr->addMenuSeparator("Item");
  738. scrMenuMgr->addMenuItem(scrActions["itemAttributes"], "Item");
  739. scrMenuMgr->createMenu("ItemPDFOptions", tr("&PDF Options"));
  740. scrMenuMgr->addMenuToMenu("ItemPDFOptions", "Item");
  741. scrMenuMgr->addMenuItem(scrActions["itemPDFIsAnnotation"], "ItemPDFOptions");
  742. scrMenuMgr->addMenuItem(scrActions["itemPDFIsBookmark"], "ItemPDFOptions");
  743. scrMenuMgr->addMenuItem(scrActions["itemPDFAnnotationProps"], "ItemPDFOptions");
  744. scrMenuMgr->addMenuItem(scrActions["itemPDFFieldProps"], "ItemPDFOptions");
  745. //scrMenuMgr->createMenu("ItemShapes", tr("&Shape"), "Item");
  746. scrMenuMgr->createMenu("ItemConvertTo", tr("C&onvert To"), "Item");
  747. scrMenuMgr->addMenuItem(scrActions["itemConvertToBezierCurve"], "ItemConvertTo");
  748. scrMenuMgr->addMenuItem(scrActions["itemConvertToImageFrame"], "ItemConvertTo");
  749. scrMenuMgr->addMenuItem(scrActions["itemConvertToOutlines"], "ItemConvertTo");
  750. scrMenuMgr->addMenuItem(scrActions["itemConvertToPolygon"], "ItemConvertTo");
  751. scrMenuMgr->addMenuItem(scrActions["itemConvertToTextFrame"], "ItemConvertTo");
  752. scrMenuMgr->addMenuSeparator("Item");
  753. scrMenuMgr->addMenuItem(scrActions["toolsLinkTextFrame"], "Item");
  754. scrMenuMgr->addMenuItem(scrActions["toolsUnlinkTextFrame"], "Item");
  755. scrMenuMgr->addMenuSeparator("Item");
  756. scrMenuMgr->addMenuItem(scrActions["itemAttachTextToPath"], "Item");
  757. scrMenuMgr->addMenuItem(scrActions["itemDetachTextFromPath"], "Item");
  758. // scrMenuMgr->createMenu("ItemPathOps", tr("Path Tools"), "Item");
  759. scrMenuMgr->addMenuItem(scrActions["itemCombinePolygons"], "Item");
  760. scrMenuMgr->addMenuItem(scrActions["itemSplitPolygons"], "Item");
  761. //scrMenuMgr->setMenuEnabled("ItemShapes", false);
  762. scrActions["itemGroup"]->setEnabled(false);
  763. scrActions["itemUngroup"]->setEnabled(false);
  764. scrActions["itemAttachTextToPath"]->setEnabled(false);
  765. scrActions["itemDetachTextFromPath"]->setEnabled(false);
  766. scrActions["itemCombinePolygons"]->setEnabled(false);
  767. scrActions["itemSplitPolygons"]->setEnabled(false);
  768. scrActions["itemLock"]->setEnabled(false);
  769. scrActions["itemLockSize"]->setEnabled(false);
  770. scrActions["itemPrintingEnabled"]->setEnabled(false);
  771. scrActions["itemImageIsVisible"]->setEnabled(false);
  772. scrActions["styleImageEffects"]->setEnabled(false);
  773. scrMenuMgr->setMenuEnabled("ItemConvertTo", false);
  774. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  775. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  776. scrActions["itemConvertToOutlines"]->setEnabled(false);
  777. scrActions["itemConvertToPolygon"]->setEnabled(false);
  778. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  779.  
  780. //Insert menu
  781. scrMenuMgr->createMenu("Insert", ActionManager::defaultMenuNameEntryTranslated("Insert"));
  782. scrMenuMgr->addMenuItem(scrActions["insertFrame"], "Insert");
  783. scrMenuMgr->addMenuSeparator("Insert");
  784. scrMenuMgr->addMenuItem(scrActions["toolsInsertTextFrame"], "Insert");
  785. scrMenuMgr->addMenuItem(scrActions["toolsInsertImageFrame"], "Insert");
  786. scrMenuMgr->addMenuItem(scrActions["toolsInsertRenderFrame"], "Insert");
  787. scrMenuMgr->addMenuItem(scrActions["toolsInsertTableFrame"], "Insert");
  788. scrMenuMgr->addMenuItem(scrActions["toolsInsertShape"], "Insert");
  789. scrMenuMgr->addMenuItem(scrActions["toolsInsertPolygon"], "Insert");
  790. scrMenuMgr->addMenuItem(scrActions["toolsInsertLine"], "Insert");
  791. scrMenuMgr->addMenuItem(scrActions["toolsInsertBezier"], "Insert");
  792. scrMenuMgr->addMenuItem(scrActions["toolsInsertFreehandLine"], "Insert");
  793. scrMenuMgr->addMenuSeparator("Insert");
  794. scrMenuMgr->addMenuItem(scrActions["stickyTools"], "Insert");
  795. scrMenuMgr->addMenuSeparator("Insert");
  796. scrMenuMgr->addMenuItem(scrActions["insertGlyph"], "Insert");
  797.  
  798. scrMenuMgr->createMenu("InsertChar", tr("&Character"), "Insert");
  799. scrMenuMgr->addMenuItem(scrActions["unicodePageNumber"], "InsertChar");
  800. scrMenuMgr->addMenuItem(scrActions["unicodePageCount"], "InsertChar");
  801. scrMenuMgr->addMenuItem(scrActions["unicodeSmartHyphen"], "InsertChar");
  802. scrMenuMgr->addMenuItem(scrActions["unicodeNonBreakingHyphen"], "InsertChar");
  803. scrMenuMgr->addMenuSeparator("InsertChar");
  804. scrMenuMgr->addMenuItem(scrActions["unicodeCopyRight"], "InsertChar");
  805. scrMenuMgr->addMenuItem(scrActions["unicodeRegdTM"], "InsertChar");
  806. scrMenuMgr->addMenuItem(scrActions["unicodeTM"], "InsertChar");
  807. scrMenuMgr->addMenuItem(scrActions["unicodeSolidus"], "InsertChar");
  808. scrMenuMgr->addMenuItem(scrActions["unicodeBullet"], "InsertChar");
  809. scrMenuMgr->addMenuItem(scrActions["unicodeMidpoint"], "InsertChar");
  810. scrMenuMgr->addMenuSeparator("InsertChar");
  811. scrMenuMgr->addMenuItem(scrActions["unicodeDashEm"], "InsertChar");
  812. scrMenuMgr->addMenuItem(scrActions["unicodeDashEn"], "InsertChar");
  813. scrMenuMgr->addMenuItem(scrActions["unicodeDashFigure"], "InsertChar");
  814. scrMenuMgr->addMenuItem(scrActions["unicodeDashQuotation"], "InsertChar");
  815.  
  816. scrMenuMgr->createMenu("InsertQuote", tr("&Quote"), "Insert");
  817. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteApostrophe"], "InsertQuote");
  818. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteStraight"], "InsertQuote");
  819. scrMenuMgr->addMenuSeparator("InsertQuote");
  820. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteSingleLeft"], "InsertQuote");
  821. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteSingleRight"], "InsertQuote");
  822. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteDoubleLeft"], "InsertQuote");
  823. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteDoubleRight"], "InsertQuote");
  824. scrMenuMgr->addMenuSeparator("InsertQuote");
  825. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteSingleReversed"], "InsertQuote");
  826. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteDoubleReversed"], "InsertQuote");
  827. scrMenuMgr->addMenuSeparator("InsertQuote");
  828. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteLowSingleComma"], "InsertQuote");
  829. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteLowDoubleComma"], "InsertQuote");
  830. scrMenuMgr->addMenuSeparator("InsertQuote");
  831. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteSingleLeftGuillemet"], "InsertQuote");
  832. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteSingleRightGuillemet"], "InsertQuote");
  833. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteDoubleLeftGuillemet"], "InsertQuote");
  834. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteDoubleRightGuillemet"], "InsertQuote");
  835. scrMenuMgr->addMenuSeparator("InsertQuote");
  836. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteCJKSingleLeft"], "InsertQuote");
  837. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteCJKSingleRight"], "InsertQuote");
  838. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteCJKDoubleLeft"], "InsertQuote");
  839. scrMenuMgr->addMenuItem(scrActions["unicodeQuoteCJKDoubleRight"], "InsertQuote");
  840.  
  841. scrMenuMgr->createMenu("InsertSpace", tr("S&paces && Breaks"), "Insert");
  842. scrMenuMgr->addMenuItem(scrActions["unicodeNonBreakingSpace"], "InsertSpace");
  843. scrMenuMgr->addMenuItem(scrActions["unicodeSpaceEN"], "InsertSpace");
  844. scrMenuMgr->addMenuItem(scrActions["unicodeSpaceEM"], "InsertSpace");
  845. scrMenuMgr->addMenuItem(scrActions["unicodeSpaceThin"], "InsertSpace");
  846. scrMenuMgr->addMenuItem(scrActions["unicodeSpaceThick"], "InsertSpace");
  847. scrMenuMgr->addMenuItem(scrActions["unicodeSpaceMid"], "InsertSpace");
  848. scrMenuMgr->addMenuItem(scrActions["unicodeSpaceHair"], "InsertSpace");
  849. scrMenuMgr->addMenuSeparator("InsertSpace");
  850. scrMenuMgr->addMenuItem(scrActions["unicodeNewLine"], "InsertSpace");
  851. scrMenuMgr->addMenuItem(scrActions["unicodeFrameBreak"], "InsertSpace");
  852. scrMenuMgr->addMenuItem(scrActions["unicodeColumnBreak"], "InsertSpace");
  853. scrMenuMgr->addMenuItem(scrActions["unicodeZerowidthSpace"], "InsertSpace");
  854.  
  855. scrMenuMgr->createMenu("InsertLigature", tr("Liga&ture"), "Insert");
  856. scrMenuMgr->addMenuItem(scrActions["unicodeLigature_ff"], "InsertLigature");
  857. scrMenuMgr->addMenuItem(scrActions["unicodeLigature_fi"], "InsertLigature");
  858. scrMenuMgr->addMenuItem(scrActions["unicodeLigature_fl"], "InsertLigature");
  859. scrMenuMgr->addMenuItem(scrActions["unicodeLigature_ffi"], "InsertLigature");
  860. scrMenuMgr->addMenuItem(scrActions["unicodeLigature_ffl"], "InsertLigature");
  861. scrMenuMgr->addMenuItem(scrActions["unicodeLigature_ft"], "InsertLigature");
  862. scrMenuMgr->addMenuItem(scrActions["unicodeLigature_st"], "InsertLigature");
  863.  
  864. scrMenuMgr->addMenuSeparator("Insert");
  865. scrMenuMgr->addMenuItem(scrActions["insertSampleText"], "Insert");
  866. scrActions["insertFrame"]->setEnabled(false);
  867.  
  868. //Page menu
  869. scrMenuMgr->createMenu("Page", ActionManager::defaultMenuNameEntryTranslated("Page"));
  870. scrMenuMgr->addMenuItem(scrActions["pageInsert"], "Page");
  871. scrMenuMgr->addMenuItem(scrActions["pageImport"], "Page");
  872. scrMenuMgr->addMenuItem(scrActions["pageDelete"], "Page");
  873. scrMenuMgr->addMenuItem(scrActions["pageCopy"], "Page");
  874. scrMenuMgr->addMenuItem(scrActions["pageMove"], "Page");
  875. scrMenuMgr->addMenuItem(scrActions["pageApplyMasterPage"], "Page");
  876. scrMenuMgr->addMenuItem(scrActions["pageCopyToMasterPage"], "Page");
  877. scrMenuMgr->addMenuItem(scrActions["pageManageGuides"], "Page");
  878. scrMenuMgr->addMenuItem(scrActions["pageManageMargins"], "Page");
  879. scrMenuMgr->addMenuSeparator("Page");
  880. scrMenuMgr->addMenuItem(scrActions["viewSnapToGrid"], "Page");
  881. scrMenuMgr->addMenuItem(scrActions["viewSnapToGuides"], "Page");
  882. scrActions["pageDelete"]->setEnabled(false);
  883. scrActions["pageMove"]->setEnabled(false);
  884.  
  885. //View menu
  886. scrMenuMgr->createMenu("View", ActionManager::defaultMenuNameEntryTranslated("View"));
  887. scrMenuMgr->addMenuItem(scrActions["viewFitInWindow"], "View");
  888. scrMenuMgr->addMenuItem(scrActions["viewFitWidth"], "View");
  889. scrMenuMgr->addMenuItem(scrActions["viewFit50"], "View");
  890. scrMenuMgr->addMenuItem(scrActions["viewFit75"], "View");
  891. scrMenuMgr->addMenuItem(scrActions["viewFit100"], "View");
  892. scrMenuMgr->addMenuItem(scrActions["viewFit200"], "View");
  893. scrMenuMgr->addMenuItem(scrActions["viewFit400"], "View");
  894. scrMenuMgr->addMenuSeparator("View");
  895. scrMenuMgr->addMenuItem(scrActions["viewFitPreview"], "View");
  896. scrMenuMgr->addMenuSeparator("View");
  897. scrMenuMgr->addMenuItem(scrActions["viewShowMargins"], "View");
  898. scrMenuMgr->addMenuItem(scrActions["viewShowBleeds"], "View");
  899. scrMenuMgr->addMenuItem(scrActions["viewShowFrames"], "View");
  900. scrMenuMgr->addMenuItem(scrActions["viewShowLayerMarkers"], "View");
  901. scrMenuMgr->addMenuItem(scrActions["viewShowImages"], "View");
  902. scrMenuMgr->addMenuItem(scrActions["viewShowGrid"], "View");
  903. scrMenuMgr->addMenuItem(scrActions["viewShowGuides"], "View");
  904. scrMenuMgr->addMenuItem(scrActions["viewShowColumnBorders"], "View");
  905. scrMenuMgr->addMenuItem(scrActions["viewShowBaseline"], "View");
  906. scrMenuMgr->addMenuItem(scrActions["viewShowTextChain"], "View");
  907. scrMenuMgr->addMenuItem(scrActions["viewShowTextControls"], "View");
  908. scrMenuMgr->addMenuItem(scrActions["viewShowRulers"], "View");
  909. scrMenuMgr->addMenuItem(scrActions["viewRulerMode"], "View");
  910. scrMenuMgr->addMenuItem(scrActions["showMouseCoordinates"], "View");
  911.  
  912. scrActions["viewShowRulers"]->setEnabled(false);
  913.  
  914. //CB If this is viewNewView imeplemented, it should be on the windows menu
  915. // scrMenuMgr->addMenuItem(scrActions["viewNewView"], "View");
  916.  
  917. //Tool menu
  918. /*
  919. scrMenuMgr->createMenu("Tools", tr("&Tools"));
  920. scrMenuMgr->addMenuItem(scrActions["toolsProperties"], "Tools");
  921. scrMenuMgr->addMenuItem(scrActions["toolsOutline"], "Tools");
  922. scrMenuMgr->addMenuItem(scrActions["toolsScrapbook"], "Tools");
  923. scrMenuMgr->addMenuItem(scrActions["toolsLayers"], "Tools");
  924. scrMenuMgr->addMenuItem(scrActions["toolsPages"], "Tools");
  925. scrMenuMgr->addMenuItem(scrActions["toolsBookmarks"], "Tools");
  926. scrMenuMgr->addMenuItem(scrActions["toolsMeasurements"], "Tools");
  927. scrMenuMgr->addMenuItem(scrActions["toolsActionHistory"], "Tools");
  928. scrMenuMgr->addMenuItem(scrActions["toolsPreflightVerifier"], "Tools");
  929. scrMenuMgr->addMenuItem(scrActions["toolsAlignDistribute"], "Tools");
  930. scrMenuMgr->addMenuSeparator("Tools");
  931. scrMenuMgr->addMenuItem(scrActions["toolsToolbarTools"], "Tools");
  932. scrMenuMgr->addMenuItem(scrActions["toolsToolbarPDF"], "Tools");
  933. //scrActions["toolsPreflightVerifier"]->setEnabled(false);*/
  934.  
  935. //Extra menu
  936. scrMenuMgr->createMenu("Extras", ActionManager::defaultMenuNameEntryTranslated("Extras"));
  937. scrMenuMgr->addMenuItem(scrActions["extrasManageImages"], "Extras");
  938. scrMenuMgr->addMenuItem(scrActions["extrasHyphenateText"], "Extras");
  939. scrMenuMgr->addMenuItem(scrActions["extrasDeHyphenateText"], "Extras");
  940. scrMenuMgr->addMenuItem(scrActions["extrasGenerateTableOfContents"], "Extras");
  941.  
  942. scrMenuMgr->setMenuEnabled("Extras", false);
  943. scrActions["extrasHyphenateText"]->setEnabled(false);
  944. scrActions["extrasDeHyphenateText"]->setEnabled(false);
  945. connect(scrMenuMgr->getLocalPopupMenu("Extras"), SIGNAL(aboutToShow()), this, SLOT(extrasMenuAboutToShow()));
  946.  
  947. //Window menu
  948. scrMenuMgr->createMenu("Windows", ActionManager::defaultMenuNameEntryTranslated("Windows"), QString::null, true);
  949. connect(scrMenuMgr->getLocalPopupMenu("Windows"), SIGNAL(aboutToShow()), this, SLOT(windowsMenuAboutToShow()));
  950. addDefaultWindowMenuItems();
  951.  
  952. //Help menu
  953. scrMenuMgr->createMenu("Help", ActionManager::defaultMenuNameEntryTranslated("Help"));
  954. scrMenuMgr->addMenuItem(scrActions["helpManual"], "Help");
  955. scrMenuMgr->addMenuItem(scrActions["helpManual2"], "Help");
  956. scrMenuMgr->addMenuSeparator("Help");
  957. scrMenuMgr->addMenuItem(scrActions["helpTooltips"], "Help");
  958. scrMenuMgr->addMenuSeparator("Help");
  959. scrMenuMgr->addMenuItem(scrActions["helpOnlineWWW"], "Help");
  960. scrMenuMgr->addMenuItem(scrActions["helpOnlineDocs"], "Help");
  961. scrMenuMgr->addMenuItem(scrActions["helpOnlineWiki"], "Help");
  962. scrMenuMgr->createMenu("HelpOnlineTutorials", tr("Online &Tutorials"), "Help");
  963. scrMenuMgr->addMenuItem(scrActions["helpOnlineTutorial1"], "HelpOnlineTutorials");
  964. scrMenuMgr->addMenuSeparator("Help");
  965. scrMenuMgr->addMenuItem(scrActions["helpCheckUpdates"], "Help");
  966. scrMenuMgr->addMenuSeparator("Help");
  967. scrMenuMgr->addMenuItem(scrActions["helpAboutScribus"], "Help");
  968. scrMenuMgr->addMenuItem(scrActions["helpAboutPlugins"], "Help");
  969. scrMenuMgr->addMenuItem(scrActions["helpAboutQt"], "Help");
  970.  
  971. scrMenuMgr->addMenuToMenuBar("File");
  972. scrMenuMgr->addMenuToMenuBar("Edit");
  973. scrMenuMgr->addMenuToMenuBar("Item");
  974. scrMenuMgr->setMenuEnabled("Item", false);
  975. scrMenuMgr->addMenuToMenuBar("Insert");
  976. scrMenuMgr->setMenuEnabled("Insert", false);
  977. scrMenuMgr->addMenuToMenuBar("Page");
  978. scrMenuMgr->setMenuEnabled("Page", false);
  979. scrMenuMgr->addMenuToMenuBar("View");
  980. scrMenuMgr->setMenuEnabled("View", false);
  981. //scrMenuMgr->addMenuToMenuBar("Tools");
  982. scrMenuMgr->addMenuToMenuBar("Extras");
  983. scrMenuMgr->setMenuEnabled("Extras", false);
  984. scrMenuMgr->addMenuToMenuBar("Windows");
  985. //scrMenuMgr->setMenuEnabled("Windows", false);
  986. menuBar()->addSeparator();
  987. scrMenuMgr->addMenuToMenuBar("Help");
  988. }
  989.  
  990.  
  991. void ScribusMainWindow::addDefaultWindowMenuItems()
  992. {
  993. scrMenuMgr->clearMenu("Windows");
  994. scrMenuMgr->addMenuItem(scrActions["windowsCascade"], "Windows");
  995. scrMenuMgr->addMenuItem(scrActions["windowsTile"], "Windows");
  996. scrMenuMgr->addMenuSeparator("Windows");
  997.  
  998. scrMenuMgr->addMenuItem(scrActions["toolsProperties"], "Windows");
  999. scrMenuMgr->addMenuItem(scrActions["toolsOutline"], "Windows");
  1000. scrMenuMgr->addMenuItem(scrActions["toolsScrapbook"], "Windows");
  1001. scrMenuMgr->addMenuItem(scrActions["toolsLayers"], "Windows");
  1002. scrMenuMgr->addMenuItem(scrActions["toolsPages"], "Windows");
  1003. scrMenuMgr->addMenuItem(scrActions["toolsBookmarks"], "Windows");
  1004. scrMenuMgr->addMenuItem(scrActions["toolsMeasurements"], "Windows");
  1005. scrMenuMgr->addMenuItem(scrActions["toolsActionHistory"], "Windows");
  1006. scrMenuMgr->addMenuItem(scrActions["toolsPreflightVerifier"], "Windows");
  1007. scrMenuMgr->addMenuItem(scrActions["toolsAlignDistribute"], "Windows");
  1008. scrMenuMgr->addMenuSeparator("Windows");
  1009. scrMenuMgr->addMenuItem(scrActions["toolsToolbarTools"], "Windows");
  1010. scrMenuMgr->addMenuItem(scrActions["toolsToolbarPDF"], "Windows");
  1011. }
  1012.  
  1013.  
  1014. void ScribusMainWindow::initStatusBar()
  1015. {
  1016. mainWindowStatusLabel = new QLabel( " ", statusBar());
  1017. mainWindowProgressBar = new QProgressBar(statusBar());
  1018. mainWindowProgressBar->setAlignment(Qt::AlignHCenter);
  1019. mainWindowProgressBar->setFixedWidth( 100 );
  1020. mainWindowProgressBar->reset();
  1021. mainWindowXPosLabel = new QLabel( tr("X-Pos:"), statusBar());
  1022. mainWindowYPosLabel = new QLabel( tr("Y-Pos:"), statusBar());
  1023. mainWindowXPosDataLabel = new QLabel( " ", statusBar());
  1024. mainWindowYPosDataLabel = new QLabel( " ", statusBar());
  1025.  
  1026. statusBar()->addPermanentWidget(mainWindowStatusLabel, 6);
  1027. statusBar()->addPermanentWidget(mainWindowProgressBar, 0);
  1028. statusBar()->addPermanentWidget(mainWindowXPosLabel, 0);
  1029. statusBar()->addPermanentWidget(mainWindowXPosDataLabel, 1);
  1030. statusBar()->addPermanentWidget(mainWindowYPosLabel, 0);
  1031. statusBar()->addPermanentWidget(mainWindowYPosDataLabel, 1);
  1032. }
  1033.  
  1034.  
  1035. void ScribusMainWindow::setStatusBarMousePosition(double xp, double yp)
  1036. {
  1037. double xn = xp;
  1038. double yn = yp;
  1039. if (doc->guidesSettings.rulerMode)
  1040. {
  1041. xn -= doc->currentPage()->xOffset();
  1042. yn -= doc->currentPage()->yOffset();
  1043. }
  1044. xn -= doc->rulerXoffset;
  1045. yn -= doc->rulerYoffset;
  1046. mainWindowXPosDataLabel->setText(value2String(xn, doc->unitIndex(), true, true));
  1047. mainWindowYPosDataLabel->setText(value2String(yn, doc->unitIndex(), true, true));
  1048. }
  1049.  
  1050. void ScribusMainWindow::setStatusBarTextPosition(double base, double xp)
  1051. {
  1052. mainWindowXPosDataLabel->setText(base + xp >= 0? value2String(xp, doc->unitIndex(), true, true): QString("-"));
  1053. mainWindowYPosDataLabel->setText("-");
  1054. }
  1055.  
  1056. void ScribusMainWindow::setStatusBarInfoText(QString newText)
  1057. {
  1058. if (mainWindowStatusLabel)
  1059. mainWindowStatusLabel->setText(newText);
  1060. }
  1061.  
  1062.  
  1063. //AV to be replaced with Selection::update and listener in PropertiesPalette
  1064. void ScribusMainWindow::setTBvals(PageItem *currItem)
  1065. {
  1066. if (currItem->itemText.length() != 0)
  1067. {
  1068. // int ChPos = qMin(currItem->CPos, static_cast<int>(currItem->itemText.length()-1));
  1069. const ParagraphStyle& currPStyle( (doc->appMode == modeEdit) ? currItem->currentStyle() : currItem->itemText.defaultStyle());
  1070. setAbsValue(currPStyle.alignment());
  1071. propertiesPalette->setParStyle(currPStyle.parent());
  1072. propertiesPalette->setCharStyle(currItem->currentCharStyle().parent());
  1073. doc->currentStyle = currItem->currentStyle();
  1074. // #8112 : do not use operator= here as it does not update style features
  1075. doc->currentStyle.charStyle().setStyle( currItem->currentCharStyle() );
  1076. emit TextStyle(doc->currentStyle);
  1077. // to go: (av)
  1078. emit TextUnderline(doc->currentStyle.charStyle().underlineOffset(), doc->currentStyle.charStyle().underlineWidth());
  1079. emit TextStrike(doc->currentStyle.charStyle().strikethruOffset(), doc->currentStyle.charStyle().strikethruWidth());
  1080. emit TextShadow(doc->currentStyle.charStyle().shadowXOffset(), doc->currentStyle.charStyle().shadowYOffset());
  1081. emit TextFarben(doc->currentStyle.charStyle().strokeColor(),
  1082. doc->currentStyle.charStyle().fillColor(),
  1083. doc->currentStyle.charStyle().strokeShade(),
  1084. doc->currentStyle.charStyle().fillShade());
  1085. emit TextIFont(doc->currentStyle.charStyle().font().scName());
  1086. emit TextISize(doc->currentStyle.charStyle().fontSize());
  1087. emit TextUSval(doc->currentStyle.charStyle().tracking());
  1088. emit TextStil(doc->currentStyle.charStyle().effects());
  1089. emit TextScale(doc->currentStyle.charStyle().scaleH());
  1090. emit TextScaleV(doc->currentStyle.charStyle().scaleV());
  1091. emit TextBase(doc->currentStyle.charStyle().baselineOffset());
  1092. emit TextOutline(doc->currentStyle.charStyle().outlineWidth());
  1093. }
  1094. }
  1095.  
  1096. //Special keys assigned to actions are stolen by the action and not passed to
  1097. //keyPressEvent so process them here.
  1098. void ScribusMainWindow::specialActionKeyEvent(const QString& actionName, int unicodevalue)
  1099. {
  1100. if (HaveDoc)
  1101. {
  1102. if (doc->appMode==modeEdit)
  1103. {
  1104. if (doc->m_Selection->count() == 1)
  1105. {
  1106. PageItem *currItem = doc->m_Selection->itemAt(0);
  1107. if (currItem!=NULL)
  1108. {
  1109. if (unicodevalue!=-1)
  1110. {
  1111. if (currItem->HasSel && currItem->itemType()==PageItem::TextFrame)
  1112. {
  1113. currItem->oldCPos = currItem->itemText.startOfSelection();
  1114. currItem->itemTextSaxed = currItem->getItemTextSaxed(PageItem::SELECTION);
  1115. currItem->asTextFrame()->deleteSelectedTextFromFrame();
  1116. }
  1117. else
  1118. currItem->oldCPos = currItem->itemText.cursorPosition();
  1119. currItem->itemText.insertChars(QString(QChar(unicodevalue)), true);
  1120. if (currItem->itemTextSaxed.isEmpty())
  1121. currItem->asTextFrame()->updateUndo(PageItem::INS, QString(QChar(unicodevalue)));
  1122. else
  1123. currItem->asTextFrame()->updateUndo(PageItem::REPSAX, currItem->getTextSaxed(QString(QChar(unicodevalue))));
  1124. // currItem->Tinput = true;
  1125. currItem->update();
  1126. }
  1127. else if (actionName=="unicodeSmartHyphen") //ignore the char as we use an attribute if the text item, for now.
  1128. {
  1129. // this code is currently dead since unicodeSmartHyphen
  1130. // doesnt have unicodevalue == -1 any more
  1131. if (currItem->itemText.cursorPosition() - 1 > 0)
  1132. {
  1133. #if 0
  1134. StyleFlag fl = currItem->itemText.item(qMax(currItem->itemText.cursorPosition()-1,0))->effects();
  1135. fl |= ScStyle_HyphenationPossible;
  1136. currItem->itemText.item(qMax(currItem->CPos-1,0))->setEffects(fl);
  1137. #else
  1138. currItem->oldCPos = currItem->itemText.cursorPosition() ;
  1139. currItem->itemText.insertChars(QString(SpecialChars::SHYPHEN), true);
  1140. currItem->asTextFrame()->updateUndo(PageItem::INS, QString(SpecialChars::SHYPHEN));
  1141. #endif
  1142. // currItem->Tinput = true;
  1143. currItem->update();
  1144. }
  1145. }
  1146. }
  1147. }
  1148. }
  1149. }
  1150. }
  1151.  
  1152. bool ScribusMainWindow::eventFilter( QObject* /*o*/, QEvent *e )
  1153. {
  1154. bool retVal;
  1155. if (e->type() == QEvent::ToolTip)
  1156. {
  1157. return (!prefsManager->appPrefs.showToolTips);
  1158. }
  1159. if ( e->type() == QEvent::KeyPress )
  1160. {
  1161. QKeyEvent *k = (QKeyEvent *)e;
  1162. int keyMod=0;
  1163. if (k->modifiers() & Qt::ShiftModifier)
  1164. keyMod |= Qt::SHIFT;
  1165. if (k->modifiers() & Qt::ControlModifier)
  1166. keyMod |= Qt::CTRL;
  1167. if (k->modifiers() & Qt::AltModifier)
  1168. keyMod |= Qt::ALT;
  1169.  
  1170. QKeySequence currKeySeq = QKeySequence(k->key() | keyMod);
  1171. if (QString(currKeySeq).isNull())
  1172. return false;
  1173. retVal=true;
  1174. //Palette actions
  1175. if (currKeySeq == scrActions["specialToggleAllPalettes"]->shortcut())
  1176. scrActions["specialToggleAllPalettes"]->activate(QAction::Trigger);
  1177. else
  1178. if (currKeySeq == scrActions["specialToggleAllGuides"]->shortcut())
  1179. scrActions["specialToggleAllGuides"]->activate(QAction::Trigger);
  1180. else
  1181. // CB These were moved to ActionManager via the setShortcutContext(Qt::ApplicationShortcut) calls, leaving for notes for now
  1182. // if (currKeySeq == scrActions["toolsProperties"]->accel())
  1183. // scrActions["toolsProperties"]->toggle();
  1184. // else
  1185. // if (currKeySeq == scrActions["toolsOutline"]->accel())
  1186. // scrActions["toolsOutline"]->toggle();
  1187. // else
  1188. // if (currKeySeq == scrActions["toolsScrapbook"]->accel())
  1189. // scrActions["toolsScrapbook"]->toggle();
  1190. // else
  1191. // if (currKeySeq == scrActions["toolsLayers"]->accel())
  1192. // scrActions["toolsLayers"]->toggle();
  1193. // else
  1194. // if (currKeySeq == scrActions["toolsPages"]->accel())
  1195. // scrActions["toolsPages"]->toggle();
  1196. // else
  1197. // if (currKeySeq == scrActions["toolsBookmarks"]->accel())
  1198. // scrActions["toolsBookmarks"]->toggle();
  1199. // else
  1200. // if (currKeySeq == scrActions["toolsActionHistory"]->accel())
  1201. // scrActions["toolsActionHistory"]->toggle();
  1202. // else
  1203. // if (currKeySeq == scrActions["toolsPreflightVerifier"]->accel())
  1204. // scrActions["toolsPreflightVerifier"]->toggle();
  1205. // else
  1206. // if (currKeySeq == scrActions["toolsAlignDistribute"]->accel())
  1207. // scrActions["toolsAlignDistribute"]->toggle();
  1208. // else
  1209. //Edit actions
  1210. // commented out to fix Bug #9437
  1211. /* if (currKeySeq == scrActions["editStyles"]->shortcut())
  1212. scrActions["editStyles"]->toggle();
  1213. else
  1214. if (currKeySeq == scrActions["editUndoAction"]->shortcut() && scrActions["editUndoAction"]->isEnabled())
  1215. scrActions["editUndoAction"]->activate(QAction::Trigger);
  1216. else
  1217. if (currKeySeq == scrActions["editRedoAction"]->shortcut() && scrActions["editRedoAction"]->isEnabled())
  1218. scrActions["editRedoAction"]->activate(QAction::Trigger);
  1219. else
  1220. //Other actions
  1221. if (currKeySeq == scrActions["fileQuit"]->shortcut())
  1222. scrActions["fileQuit"]->activate(QAction::Trigger);
  1223. else
  1224. //Zoom actions
  1225. if (currKeySeq == scrActions["toolsZoomIn"]->shortcut())
  1226. scrActions["toolsZoomIn"]->activate(QAction::Trigger);
  1227. else
  1228. if (currKeySeq == scrActions["toolsZoomOut"]->shortcut())
  1229. scrActions["toolsZoomOut"]->activate(QAction::Trigger);
  1230. else */
  1231. retVal=false;
  1232. }
  1233. else
  1234. retVal=false;
  1235. //Return false to pass event to object
  1236. return retVal;
  1237. }
  1238.  
  1239.  
  1240. //AV -> CanvasMode
  1241. void ScribusMainWindow::keyPressEvent(QKeyEvent *k)
  1242. {
  1243. QWidgetList windows;
  1244. QWidget* w = NULL;
  1245. int kk = k->key();
  1246. QString uc = k->text();
  1247. // QString cr, Tcha, Twort;
  1248. if (HaveDoc)
  1249. {
  1250. if ((doc->appMode == modeMagnifier) && (kk == Qt::Key_Shift))
  1251. {
  1252. qApp->changeOverrideCursor(QCursor(loadIcon("LupeZm.xpm")));
  1253. return;
  1254. }
  1255. }
  1256. if (keyrep)
  1257. return;
  1258. keyrep = true;
  1259. int keyMod=0;
  1260. if (k->modifiers() & Qt::ShiftModifier)
  1261. keyMod |= Qt::SHIFT;
  1262. if (k->modifiers() & Qt::ControlModifier)
  1263. keyMod |= Qt::CTRL;
  1264. if (k->modifiers() & Qt::AltModifier)
  1265. keyMod |= Qt::ALT;
  1266. //User presses escape and we have a doc open, and we have an item selected
  1267. if ((kk == Qt::Key_Escape) && (HaveDoc))
  1268. {
  1269. keyrep = false;
  1270. PageItem *currItem;
  1271. if (doc->m_Selection->count() != 0)
  1272. {
  1273. currItem = doc->m_Selection->itemAt(0);
  1274. switch (doc->appMode)
  1275. {
  1276. case modeNormal:
  1277. case modeEditClip:
  1278. currItem->Sizing = false;
  1279. if (doc->SubMode != -1)
  1280. {
  1281. view->Deselect(false);
  1282. doc->Items->removeAt(currItem->ItemNr);
  1283. }
  1284. else
  1285. view->Deselect(false);
  1286. view->cancelGroupTransaction();
  1287. break;
  1288. case modeEdit:
  1289. view->cancelGroupTransaction();
  1290. break;
  1291. case modeLinkFrames:
  1292. case modeUnlinkFrames:
  1293. case modeRotation:
  1294. case modeEditGradientVectors:
  1295. case modeCopyProperties:
  1296. view->Deselect(false);
  1297. case modeEyeDropper:
  1298. case modeImportObject:
  1299. case modePanning:
  1300. view->requestMode(modeNormal);
  1301. break;
  1302. case modeDrawBezierLine:
  1303. currItem->PoLine.resize(qMax(0, static_cast<int>(currItem->PoLine.size())-2));
  1304. if (currItem->PoLine.size() < 4)
  1305. {
  1306. view->Deselect(false);
  1307. doc->Items->removeAt(currItem->ItemNr);
  1308. }
  1309. else
  1310. {
  1311. doc->SizeItem(currItem->PoLine.WidthHeight().x(), currItem->PoLine.WidthHeight().y(), currItem->ItemNr, false, false);
  1312. currItem->setPolyClip(qRound(qMax(currItem->lineWidth() / 2.0, 1.0)));
  1313. doc->AdjustItemSize(currItem);
  1314. currItem->ContourLine = currItem->PoLine.copy();
  1315. currItem->ClipEdited = true;
  1316. currItem->FrameType = 3;
  1317. slotDocCh();
  1318. }
  1319. view->FirstPoly = true;
  1320. break;
  1321. default:
  1322. if (currItem->Sizing)
  1323. {
  1324. view->Deselect(false);
  1325. doc->Items->removeAt(currItem->ItemNr);
  1326. }
  1327. break;
  1328. }
  1329. }
  1330. doc->DragP = false;
  1331. doc->leaveDrag = false;
  1332. view->stopAllDrags();
  1333. doc->SubMode = -1;
  1334. doc->ElemToLink = NULL;
  1335. slotSelect();
  1336. if (doc->m_Selection->count() == 0)
  1337. HaveNewSel(-1);
  1338. prefsManager->appPrefs.stickyTools = false;
  1339. scrActions["stickyTools"]->setChecked(prefsManager->appPrefs.stickyTools);
  1340. return;
  1341. }
  1342. Qt::KeyboardModifiers buttonModifiers = k->modifiers();
  1343. /**If we have a doc and we are not changing the page or zoom level in the status bar */
  1344. if ((HaveDoc) && (!view->zoomSpinBox->hasFocus()) && (!view->pageSelector->hasFocus()))
  1345. {
  1346. //Show our context menu
  1347. QKeySequence currKeySeq = QKeySequence(kk | keyMod);
  1348. if (currKeySeq.matches(scrActions["viewShowContextMenu"]->shortcut()) == QKeySequence::ExactMatch)
  1349. {
  1350. ContextMenu* cmen=NULL;
  1351. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  1352. if (doc->m_Selection->count() == 0)
  1353. {
  1354. //CB We should be able to get this calculated by the canvas.... it is already in m_canvas->globalToCanvas(m->globalPos());
  1355. QPoint p(QCursor::pos() - mapToGlobal(QPoint(0,0)));
  1356. FPoint fp(p.x() / view->scale() + doc->minCanvasCoordinate.x(),
  1357. p.y() / view->scale() + doc->minCanvasCoordinate.y());
  1358. cmen = new ContextMenu(this, doc, fp.x(), fp.y());
  1359. }
  1360. else
  1361. cmen = new ContextMenu(*(doc->m_Selection), this, doc);
  1362. if (cmen)
  1363. {
  1364. setUndoMode(true);
  1365. cmen->exec(QCursor::pos());
  1366. setUndoMode(false);
  1367. }
  1368. delete cmen;
  1369. }
  1370.  
  1371.  
  1372. /**
  1373. * With no item selected we can:
  1374. * - With space, get into panning mode (modePanning)
  1375. * - With PageUp, scroll up
  1376. * - With PageDown, scroll down
  1377. * - With Tab, change active document windowActivated
  1378. */
  1379.  
  1380. if ((doc->appMode != modeEdit) && (doc->m_Selection->count() == 0))
  1381. {
  1382. int pg;
  1383. int wheelVal = prefsManager->mouseWheelValue();
  1384. if ((buttonModifiers & Qt::ShiftModifier) && !(buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1385. wheelVal = qMax(qRound(wheelVal / 10.0), 1);
  1386. switch (kk)
  1387. {
  1388. case Qt::Key_Space:
  1389. keyrep = false;
  1390. if (doc->appMode == modePanning)
  1391. view->requestMode(modeNormal);
  1392. else
  1393. view->requestMode(modePanning);
  1394. return;
  1395. break;
  1396. case Qt::Key_PageUp:
  1397. if (doc->masterPageMode())
  1398. view->scrollBy(0, -prefsManager->mouseWheelValue());
  1399. else
  1400. {
  1401. pg = doc->currentPageNumber();
  1402. if ((buttonModifiers & Qt::ShiftModifier) && !(buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1403. pg--;
  1404. else
  1405. pg -= doc->pageSets[doc->currentPageLayout].Columns;
  1406. if (pg > -1)
  1407. view->GotoPage(pg);
  1408. }
  1409. keyrep = false;
  1410. return;
  1411. break;
  1412. case Qt::Key_PageDown:
  1413. if (doc->masterPageMode())
  1414. view->scrollBy(0, prefsManager->mouseWheelValue());
  1415. else
  1416. {
  1417. pg = doc->currentPageNumber();
  1418. if ((buttonModifiers & Qt::ShiftModifier) && !(buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1419. pg++;
  1420. else
  1421. pg += doc->pageSets[doc->currentPageLayout].Columns;
  1422. if (pg < static_cast<int>(doc->Pages->count()))
  1423. view->GotoPage(pg);
  1424. }
  1425. keyrep = false;
  1426. return;
  1427. break;
  1428. case Qt::Key_Left:
  1429. view->scrollBy(-wheelVal, 0);
  1430. keyrep = false;
  1431. return;
  1432. break;
  1433. case Qt::Key_Right:
  1434. view->scrollBy(wheelVal, 0);
  1435. keyrep = false;
  1436. return;
  1437. break;
  1438. case Qt::Key_Up:
  1439. view->scrollBy(0, -wheelVal);
  1440. keyrep = false;
  1441. return;
  1442. break;
  1443. case Qt::Key_Down:
  1444. view->scrollBy(0, wheelVal);
  1445. keyrep = false;
  1446. return;
  1447. break;
  1448. case Qt::Key_Tab:
  1449. if (buttonModifiers == Qt::ControlModifier)
  1450. {
  1451. keyrep = false;
  1452. windows = wsp->windowList();
  1453. if (windows.count() > 1)
  1454. {
  1455. for (int i = 0; i < static_cast<int>(windows.count()); ++i)
  1456. {
  1457. if (wsp->activeWindow() == windows.at(i))
  1458. {
  1459. if (i == static_cast<int>(windows.count()-1))
  1460. w = windows.at(0);
  1461. else
  1462. w = windows.at(i+1);
  1463. break;
  1464. }
  1465. }
  1466. outlinePalette->buildReopenVals();
  1467. docCheckerPalette->clearErrorList();
  1468. if ( w )
  1469. w->showNormal();
  1470. newActWin(w);
  1471. }
  1472. return;
  1473. }
  1474. break;
  1475. }
  1476. }
  1477. /** Now if we have an item selected
  1478. * - In normal mode we can:
  1479. * -- Use backspace or delete to delete the item
  1480. * -- Use itemRaise action shortcut to raise an item (actionmanager.cpp connect, no code here)
  1481. * -- Use itemLower action shortcut to lower an item (actionmanager.cpp connect, no code here)
  1482. * -- Use the arrow keys to move an item or group around for !inches:
  1483. With no meta, by 1.0 unit
  1484. Ctrl, by 10.0 units
  1485. Shift by 0.1 units
  1486. Ctrl Shift 0.01 units
  1487. - For inches:
  1488. With no meta, by 1.0 pt
  1489. Ctrl, by 1.0 unit
  1490. Shift by 0.1 units
  1491. Ctrl Shift 0.01 units
  1492. * -- Use the arrow keys to resize an item:
  1493. Alt right arrow, move right side outwards (expand)
  1494. Alt left arrow, move left side outwards (expand)
  1495. Alt Shift right arrow, move left side inwards (shrink)
  1496. Alt Shift left arrow, move right side inwards (shrink)
  1497. * -- In edit mode of an image frame, use the arrow keys to resize the image:
  1498. (flows to pageitem_imageframe for control)
  1499. Alt right arrow, move right side of image outwards (expand)
  1500. Alt left arrow, move right side inwards (shrink)
  1501. Alt down arrow, move bottom side downwards (expand)
  1502. Alt up arrow, move top side inwards (shrink)
  1503. */
  1504. if (doc->m_Selection->count() != 0)
  1505. {
  1506. double moveBy=1.0;
  1507. if (doc->unitIndex()!=SC_INCHES)
  1508. {
  1509. if ((buttonModifiers & Qt::ShiftModifier) && !(buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1510. moveBy=0.1;
  1511. else if (!(buttonModifiers & Qt::ShiftModifier) && (buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1512. moveBy=10.0;
  1513. else if ((buttonModifiers & Qt::ShiftModifier) && (buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1514. moveBy=0.01;
  1515.  
  1516. moveBy/=doc->unitRatio();//Lets allow movement by the current doc ratio, not only points
  1517. }
  1518. else
  1519. {
  1520. if ((buttonModifiers & Qt::ShiftModifier) && !(buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1521. moveBy=0.1/doc->unitRatio();
  1522. else if (!(buttonModifiers & Qt::ShiftModifier) && (buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1523. moveBy=1.0/doc->unitRatio();
  1524. else if ((buttonModifiers & Qt::ShiftModifier) && (buttonModifiers & Qt::ControlModifier) && !(buttonModifiers & Qt::AltModifier))
  1525. moveBy=0.01/doc->unitRatio();
  1526. }
  1527. bool resizing=((buttonModifiers & Qt::AltModifier) && !(buttonModifiers & Qt::ControlModifier));
  1528. bool resizingsmaller=(resizing && (buttonModifiers & Qt::ShiftModifier));
  1529. double resizeBy=1.0;
  1530. //CB with control locked out due to the requirement of moveby of 0.01, we cannot support
  1531. //resizeby 10 units unless we move to supporting modifier keys that most people dont have.
  1532. //if (buttonModifiers & Qt::ControlModifier)
  1533. // resizeBy*=10.0;
  1534. resizeBy/=doc->unitRatio();
  1535. if (resizingsmaller)
  1536. resizeBy*=-1.0;
  1537.  
  1538.  
  1539. PageItem *currItem = doc->m_Selection->itemAt(0);
  1540. switch (doc->appMode)
  1541. {
  1542. case modeNormal:
  1543. case modeEditClip:
  1544. switch (kk)
  1545. {
  1546. case Qt::Key_Backspace:
  1547. case Qt::Key_Delete:
  1548. doc->itemSelection_DeleteItem();
  1549. break;
  1550. /* CB: Stop using inflexible hardcoded keys here, actions for lower/raise work without this
  1551. per note above with shortcuts.
  1552. case Qt::Key_PageUp:
  1553. if (!currItem->locked())
  1554. {
  1555. view->RaiseItem();
  1556. }
  1557. break;
  1558. case Qt::Key_PageDown:
  1559. if (!currItem->locked())
  1560. {
  1561. view->LowerItem();
  1562. }
  1563. break;
  1564. */
  1565. case Qt::Key_Left:
  1566. if (!currItem->locked())
  1567. {
  1568. if (!resizing)
  1569. {
  1570. if ((doc->appMode == modeEditClip) && (doc->nodeEdit.hasNodeSelected()))
  1571. {
  1572. int storedClRe = doc->nodeEdit.ClRe;
  1573. if ((doc->nodeEdit.SelNode.count() != 0) && (doc->nodeEdit.EdPoints))
  1574. {
  1575. QPolygonF poly;
  1576. for (int itm = 0; itm < doc->nodeEdit.SelNode.count(); ++itm)
  1577. {
  1578. FPoint np;
  1579. int clRe = doc->nodeEdit.SelNode.at(itm);
  1580. if (doc->nodeEdit.isContourLine)
  1581. np = currItem->ContourLine.point(clRe);
  1582. else
  1583. np = currItem->PoLine.point(clRe);
  1584. doc->nodeEdit.ClRe = clRe;
  1585. np = np - FPoint(moveBy, 0);
  1586. doc->nodeEdit.moveClipPoint(currItem, np);
  1587. poly.append(QPointF(np.x(), np.y()));
  1588. }
  1589. QMatrix m = currItem->getTransform();
  1590. poly = m.map(poly);
  1591. QRectF oldR = poly.boundingRect().adjusted(-5, -5, 10, 10);
  1592. QRectF newR(currItem->getBoundingRect());
  1593. doc->regionsChanged()->update(newR.unite(oldR));
  1594. }
  1595. doc->nodeEdit.ClRe = storedClRe;
  1596. }
  1597. else
  1598. {
  1599. /* Don't use Grid or Guide Snapping when dragging Items or Groups with the keyboard */
  1600. /* as the user might be trying to fine tune a position */
  1601. bool sav1 = doc->SnapGuides;
  1602. bool sav2 = doc->useRaster;
  1603. doc->SnapGuides = false;
  1604. doc->useRaster = false;
  1605. if (doc->m_Selection->count() > 1)
  1606. view->startGroupTransaction(Um::Move, "", Um::IMove);
  1607. doc->moveGroup(-moveBy, 0);
  1608. if (doc->m_Selection->count() > 1)
  1609. view->endGroupTransaction();
  1610. doc->SnapGuides = sav1;
  1611. doc->useRaster = sav2;
  1612. }
  1613. }
  1614. else
  1615. {
  1616. //CB If in EditContour mode, allow contour line to be scaled with arrow keys too
  1617. if(doc->nodeEdit.isContourLine)
  1618. view->TransformPoly(10, 0, resizeBy/unitGetRatioFromIndex(doc->unitIndex()));
  1619. else if (!currItem->sizeLocked())
  1620. {
  1621. if (!resizingsmaller)
  1622. {
  1623. doc->MoveItem(-resizeBy, 0, currItem, false);
  1624. currItem->moveImageXYOffsetBy(resizeBy / currItem->imageXScale(), 0);
  1625. }
  1626. currItem->Sizing = false;
  1627. doc->SizeItem(currItem->width() + resizeBy, currItem->height(), currItem->ItemNr);
  1628. }
  1629. }
  1630. if (doc->m_Selection->count() > 1)
  1631. {
  1632. double x, y, w, h;
  1633. doc->m_Selection->setGroupRect();
  1634. doc->m_Selection->getGroupRect(&x, &y, &w, &h);
  1635. propertiesPalette->setXY(x, y);
  1636. propertiesPalette->setBH(w, h);
  1637. }
  1638. currItem->update();
  1639. slotDocCh();
  1640. }
  1641. break;
  1642. case Qt::Key_Right:
  1643. if (!currItem->locked())
  1644. {
  1645. if (!resizing)
  1646. {
  1647. if ((doc->appMode == modeEditClip) && (doc->nodeEdit.hasNodeSelected()))
  1648. {
  1649. int storedClRe = doc->nodeEdit.ClRe;
  1650. if ((doc->nodeEdit.SelNode.count() != 0) && (doc->nodeEdit.EdPoints))
  1651. {
  1652. QPolygonF poly;
  1653. for (int itm = 0; itm < doc->nodeEdit.SelNode.count(); ++itm)
  1654. {
  1655. FPoint np;
  1656. int clRe = doc->nodeEdit.SelNode.at(itm);
  1657. if (doc->nodeEdit.isContourLine)
  1658. np = currItem->ContourLine.point(clRe);
  1659. else
  1660. np = currItem->PoLine.point(clRe);
  1661. doc->nodeEdit.ClRe = clRe;
  1662. np = np + FPoint(moveBy, 0);
  1663. doc->nodeEdit.moveClipPoint(currItem, np);
  1664. poly.append(QPointF(np.x(), np.y()));
  1665. }
  1666. QMatrix m = currItem->getTransform();
  1667. poly = m.map(poly);
  1668. QRectF oldR = poly.boundingRect().adjusted(-5, -5, 10, 10);
  1669. QRectF newR(currItem->getBoundingRect());
  1670. doc->regionsChanged()->update(newR.unite(oldR));
  1671. }
  1672. doc->nodeEdit.ClRe = storedClRe;
  1673. }
  1674. else
  1675. {
  1676. /* Don't use Grid or Guide Snapping when dragging Items or Groups with the keyboard */
  1677. /* as the user might be trying to fine tune a position */
  1678. bool sav1 = doc->SnapGuides;
  1679. bool sav2 = doc->useRaster;
  1680. doc->SnapGuides = false;
  1681. doc->useRaster = false;
  1682. if (doc->m_Selection->count() > 1)
  1683. view->startGroupTransaction(Um::Move, "", Um::IMove);
  1684. doc->moveGroup(moveBy, 0);
  1685. if (doc->m_Selection->count() > 1)
  1686. view->endGroupTransaction();
  1687. doc->SnapGuides = sav1;
  1688. doc->useRaster = sav2;
  1689. }
  1690. }
  1691. else
  1692. {
  1693. //CB If in EditContour mode, allow contour line to be scaled with arrow keys too
  1694. if(doc->nodeEdit.isContourLine)
  1695. view->TransformPoly(11, 0, resizeBy/unitGetRatioFromIndex(doc->unitIndex()));
  1696. else if (!currItem->sizeLocked())
  1697. {
  1698. if (resizingsmaller)
  1699. {
  1700. doc->MoveItem(-resizeBy, 0, currItem, false);
  1701. currItem->moveImageXYOffsetBy(resizeBy / currItem->imageXScale(), 0);
  1702. }
  1703. currItem->Sizing = false;
  1704. doc->SizeItem(currItem->width() + resizeBy, currItem->height(), currItem->ItemNr);
  1705. }
  1706. }
  1707. if (doc->m_Selection->count() > 1)
  1708. {
  1709. double x, y, w, h;
  1710. doc->m_Selection->setGroupRect();
  1711. doc->m_Selection->getGroupRect(&x, &y, &w, &h);
  1712. propertiesPalette->setXY(x, y);
  1713. propertiesPalette->setBH(w, h);
  1714. }
  1715. currItem->update();
  1716. slotDocCh();
  1717. }
  1718. break;
  1719. case Qt::Key_Up:
  1720. if (!currItem->locked())
  1721. {
  1722. if (!resizing)
  1723. {
  1724. if ((doc->appMode == modeEditClip) && (doc->nodeEdit.hasNodeSelected()))
  1725. {
  1726. int storedClRe = doc->nodeEdit.ClRe;
  1727. if ((doc->nodeEdit.SelNode.count() != 0) && (doc->nodeEdit.EdPoints))
  1728. {
  1729. QPolygonF poly;
  1730. for (int itm = 0; itm < doc->nodeEdit.SelNode.count(); ++itm)
  1731. {
  1732. FPoint np;
  1733. int clRe = doc->nodeEdit.SelNode.at(itm);
  1734. if (doc->nodeEdit.isContourLine)
  1735. np = currItem->ContourLine.point(clRe);
  1736. else
  1737. np = currItem->PoLine.point(clRe);
  1738. doc->nodeEdit.ClRe = clRe;
  1739. np = np - FPoint(0, moveBy);
  1740. doc->nodeEdit.moveClipPoint(currItem, np);
  1741. poly.append(QPointF(np.x(), np.y()));
  1742. }
  1743. QMatrix m = currItem->getTransform();
  1744. poly = m.map(poly);
  1745. QRectF oldR = poly.boundingRect().adjusted(-5, -5, 10, 10);
  1746. QRectF newR(currItem->getBoundingRect());
  1747. doc->regionsChanged()->update(newR.unite(oldR));
  1748. }
  1749. doc->nodeEdit.ClRe = storedClRe;
  1750. }
  1751. else
  1752. {
  1753. /* Don't use Grid or Guide Snapping when dragging Items or Groups with the keyboard */
  1754. /* as the user might be trying to fine tune a position */
  1755. bool sav1 = doc->SnapGuides;
  1756. bool sav2 = doc->useRaster;
  1757. doc->SnapGuides = false;
  1758. doc->useRaster = false;
  1759. if (doc->m_Selection->count() > 1)
  1760. view->startGroupTransaction(Um::Move, "", Um::IMove);
  1761. doc->moveGroup(0, -moveBy);
  1762. if (doc->m_Selection->count() > 1)
  1763. view->endGroupTransaction();
  1764. doc->SnapGuides = sav1;
  1765. doc->useRaster = sav2;
  1766. }
  1767. }
  1768. else
  1769. {
  1770. //CB If in EditContour mode, allow contour line to be scaled with arrow keys too
  1771. if(doc->nodeEdit.isContourLine)
  1772. view->TransformPoly(12, 0, resizeBy/unitGetRatioFromIndex(doc->unitIndex()));
  1773. else if (!currItem->sizeLocked())
  1774. {
  1775. if (!resizingsmaller)
  1776. {
  1777. doc->MoveItem(0, -resizeBy, currItem, false);
  1778. currItem->moveImageXYOffsetBy(0, resizeBy / currItem->imageYScale());
  1779. }
  1780. currItem->Sizing = false;
  1781. doc->SizeItem(currItem->width(), currItem->height() + resizeBy, currItem->ItemNr);
  1782. }
  1783. }
  1784. if (doc->m_Selection->count() > 1)
  1785. {
  1786. double x, y, w, h;
  1787. doc->m_Selection->setGroupRect();
  1788. doc->m_Selection->getGroupRect(&x, &y, &w, &h);
  1789. propertiesPalette->setXY(x, y);
  1790. propertiesPalette->setBH(w, h);
  1791. }
  1792. currItem->update();
  1793. slotDocCh();
  1794. }
  1795. break;
  1796. case Qt::Key_Down:
  1797. if (!currItem->locked())
  1798. {
  1799. if (!resizing)
  1800. {
  1801. if ((doc->appMode == modeEditClip) && (doc->nodeEdit.hasNodeSelected()))
  1802. {
  1803. int storedClRe = doc->nodeEdit.ClRe;
  1804. if ((doc->nodeEdit.SelNode.count() != 0) && (doc->nodeEdit.EdPoints))
  1805. {
  1806. QPolygonF poly;
  1807. for (int itm = 0; itm < doc->nodeEdit.SelNode.count(); ++itm)
  1808. {
  1809. FPoint np;
  1810. int clRe = doc->nodeEdit.SelNode.at(itm);
  1811. if (doc->nodeEdit.isContourLine)
  1812. np = currItem->ContourLine.point(clRe);
  1813. else
  1814. np = currItem->PoLine.point(clRe);
  1815. doc->nodeEdit.ClRe = clRe;
  1816. np = np - FPoint(0, -moveBy);
  1817. doc->nodeEdit.moveClipPoint(currItem, np);
  1818. poly.append(QPointF(np.x(), np.y()));
  1819. }
  1820. QMatrix m = currItem->getTransform();
  1821. poly = m.map(poly);
  1822. QRectF oldR = poly.boundingRect().adjusted(-5, -5, 10, 10);
  1823. QRectF newR(currItem->getBoundingRect());
  1824. doc->regionsChanged()->update(newR.unite(oldR));
  1825. }
  1826. doc->nodeEdit.ClRe = storedClRe;
  1827. }
  1828. else
  1829. {
  1830. /* Don't use Grid or Guide Snapping when dragging Items or Groups with the keyboard */
  1831. /* as the user might be trying to fine tune a position */
  1832. bool sav1 = doc->SnapGuides;
  1833. bool sav2 = doc->useRaster;
  1834. doc->SnapGuides = false;
  1835. doc->useRaster = false;
  1836. if (doc->m_Selection->count() > 1)
  1837. view->startGroupTransaction(Um::Move, "", Um::IMove);
  1838. doc->moveGroup(0, moveBy);
  1839. if (doc->m_Selection->count() > 1)
  1840. view->endGroupTransaction();
  1841. doc->SnapGuides = sav1;
  1842. doc->useRaster = sav2;
  1843. }
  1844. }
  1845. else
  1846. {
  1847. //CB If in EditContour mode, allow contour line to be scaled with arrow keys too
  1848. if(doc->nodeEdit.isContourLine)
  1849. view->TransformPoly(13, 0, resizeBy/unitGetRatioFromIndex(doc->unitIndex()));
  1850. else if (!currItem->sizeLocked())
  1851. {
  1852. if (resizingsmaller)
  1853. {
  1854. doc->MoveItem(0, -resizeBy, currItem, false);
  1855. currItem->moveImageXYOffsetBy(0, resizeBy / currItem->imageYScale());
  1856. }
  1857. currItem->Sizing = false;
  1858. doc->SizeItem(currItem->width(), currItem->height() + resizeBy, currItem->ItemNr);
  1859. }
  1860. }
  1861. if (doc->m_Selection->count() > 1)
  1862. {
  1863. double x, y, w, h;
  1864. doc->m_Selection->setGroupRect();
  1865. doc->m_Selection->getGroupRect(&x, &y, &w, &h);
  1866. propertiesPalette->setXY(x, y);
  1867. propertiesPalette->setBH(w, h);
  1868. }
  1869. currItem->update();
  1870. slotDocCh();
  1871. }
  1872. break;
  1873. default:
  1874. break;
  1875. }
  1876. break;
  1877. case modeEdit:
  1878. if (currItem->asImageFrame() && !currItem->locked())
  1879. {
  1880. currItem->handleModeEditKey(k, keyrep);
  1881. /*
  1882. double dX=0.0,dY=0.0;
  1883. switch (kk)
  1884. {
  1885. case Qt::Key_Left:
  1886. dX=-moveBy;
  1887. break;
  1888. case Qt::Key_Right:
  1889. dX=moveBy;
  1890. break;
  1891. case Qt::Key_Up:
  1892. dY=-moveBy;
  1893. break;
  1894. case Qt::Key_Down:
  1895. dY=moveBy;
  1896. break;
  1897. }
  1898. if (dX!=0.0 || dY!=0.0)
  1899. {
  1900. currItem->moveImageInFrame(dX, dY);
  1901. currItem->update();
  1902. }*/
  1903. }
  1904. //FIXME:av view->oldCp = currItem->CPos;
  1905. if (currItem->itemType() == PageItem::TextFrame)
  1906. {
  1907. bool kr=keyrep;
  1908. view->canvasMode()->keyPressEvent(k); //Hack for 1.4.x for stopping the cursor blinking while moving about.
  1909. currItem->handleModeEditKey(k, keyrep);
  1910. keyrep=kr;
  1911. }
  1912. slotDocCh(false);
  1913. break;
  1914. }
  1915. }
  1916. }
  1917. switch(kk)
  1918. {
  1919. case Qt::Key_Left:
  1920. case Qt::Key_Right:
  1921. case Qt::Key_Up:
  1922. case Qt::Key_Down:
  1923. _arrowKeyDown = true;
  1924. }
  1925. keyrep = false;
  1926. }
  1927.  
  1928. void ScribusMainWindow::keyReleaseEvent(QKeyEvent *k)
  1929. {
  1930. //Exit out of panning mode if Control is release while the right mouse button is pressed
  1931. if (HaveDoc)
  1932. {
  1933. if ((doc->appMode == modePanning) && (k->key() == Qt::Key_Control) && (QApplication::mouseButtons() & Qt::RightButton))
  1934. view->requestMode(modeNormal);
  1935. }
  1936. if (HaveDoc)
  1937. {
  1938. if (doc->appMode == modeMagnifier)
  1939. qApp->changeOverrideCursor(QCursor(loadIcon("LupeZ.xpm")));
  1940. }
  1941. if (k->isAutoRepeat() || !_arrowKeyDown)
  1942. return;
  1943. switch(k->key())
  1944. {
  1945. case Qt::Key_Left:
  1946. case Qt::Key_Right:
  1947. case Qt::Key_Up:
  1948. case Qt::Key_Down:
  1949. _arrowKeyDown = false;
  1950. if ((HaveDoc) && (!view->zoomSpinBox->hasFocus()) && (!view->pageSelector->hasFocus()))
  1951. {
  1952. int docSelectionCount=doc->m_Selection->count();
  1953. if ((docSelectionCount != 0) && (doc->appMode == modeEditClip) && (doc->nodeEdit.hasNodeSelected()))
  1954. {
  1955. PageItem *currItem = doc->m_Selection->itemAt(0);
  1956. double xposOrig = currItem->xPos();
  1957. double yposOrig = currItem->yPos();
  1958. doc->AdjustItemSize(currItem);
  1959. if (!doc->nodeEdit.isContourLine)
  1960. currItem->ContourLine.translate(xposOrig - currItem->xPos(),yposOrig - currItem->yPos());
  1961. currItem->update();
  1962. }
  1963. for (int i = 0; i < docSelectionCount; ++i)
  1964. doc->m_Selection->itemAt(i)->checkChanges(true);
  1965. if (docSelectionCount > 1 && view->groupTransactionStarted())
  1966. view->endGroupTransaction();
  1967. }
  1968. break;
  1969. }
  1970. }
  1971.  
  1972. void ScribusMainWindow::changeEvent(QEvent *e)
  1973. {
  1974. if (e->type() == QEvent::LanguageChange)
  1975. {
  1976. languageChange();
  1977. }
  1978. else
  1979. QWidget::changeEvent(e);
  1980. }
  1981.  
  1982. void ScribusMainWindow::closeEvent(QCloseEvent *ce)
  1983. {
  1984. //Do not quit if Preferences or new doc window is open
  1985. Preferences *prefsWin = findChild<Preferences *>(QString::fromLocal8Bit("PreferencesWindow"));
  1986. NewDoc *newDocWin = findChild<NewDoc *>(QString::fromLocal8Bit("NewDocumentWindow"));
  1987. if (prefsWin!=NULL || newDocWin!=NULL)
  1988. {
  1989. ce->ignore();
  1990. return;
  1991. }
  1992. QWidgetList windows = wsp->windowList();
  1993. ScribusWin* tw;
  1994. disconnect(wsp, SIGNAL(windowActivated(QWidget *)), this, SLOT(newActWin(QWidget *)));
  1995. if (!windows.isEmpty())
  1996. {
  1997. uint windowCount=windows.count();
  1998. for ( uint i = 0; i < windowCount; ++i )
  1999. {
  2000. newActWin(windows.at(i));
  2001. tw = ActWin;
  2002. slotSelect();
  2003. ActWin->close();
  2004. if (tw == ActWin)
  2005. {
  2006. ce->ignore();
  2007. connect(wsp, SIGNAL(windowActivated(QWidget *)), this, SLOT(newActWin(QWidget *)));
  2008. return;
  2009. }
  2010. }
  2011. }
  2012. fileToolBar->connectPrefsSlot(false);
  2013. editToolBar->connectPrefsSlot(false);
  2014. modeToolBar->connectPrefsSlot(false);
  2015. pdfToolBar->connectPrefsSlot(false);
  2016. propertiesPalette->hide();
  2017. outlinePalette->hide();
  2018. scrapbookPalette->hide();
  2019. bookmarkPalette->hide();
  2020. layerPalette->hide();
  2021. pagePalette->hide();
  2022. // measurementPalette->hide();
  2023. docCheckerPalette->hide();
  2024. undoPalette->hide();
  2025. alignDistributePalette->hide();
  2026. guidePalette->hide();
  2027. charPalette->hide();
  2028.  
  2029. // Clean up plugins, THEN save prefs to disk
  2030. ScCore->pluginManager->cleanupPlugins();
  2031. if (!prefsManager->appPrefs.persistentScrapbook)
  2032. scrapbookPalette->CleanUpTemp();
  2033. prefsManager->appPrefs.RecentScrapbooks.clear();
  2034. prefsManager->appPrefs.RecentScrapbooks = scrapbookPalette->getOpenScrapbooks();
  2035. if (!emergencyActivated)
  2036. prefsManager->SavePrefs();
  2037. UndoManager::deleteInstance();
  2038. PrefsManager::deleteInstance();
  2039. FormatsManager::deleteInstance();
  2040. UrlLauncher::deleteInstance();
  2041. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  2042. qApp->exit(0);
  2043. }
  2044.  
  2045. /////////////////////////////////////////////////////////////////////
  2046. // SLOT IMPLEMENTATION
  2047. /////////////////////////////////////////////////////////////////////
  2048.  
  2049.  
  2050. bool ScribusMainWindow::arrowKeyDown()
  2051. {
  2052. return _arrowKeyDown;
  2053. }
  2054.  
  2055. void ScribusMainWindow::startUpDialog()
  2056. {
  2057. bool docSet = false;
  2058. PrefsContext* docContext = prefsManager->prefsFile->getContext("docdirs", false);
  2059. NewDoc* dia = new NewDoc(this, RecentDocs, true, ScCore->getGuiLanguage());
  2060. if (dia->exec())
  2061. {
  2062. if (dia->tabSelected() == NewDoc::NewDocumentTab)
  2063. {
  2064. int facingPages = dia->choosenLayout();
  2065. int firstPage = dia->firstPage->currentIndex();
  2066. docSet = dia->startDocSetup->isChecked();
  2067. double topMargin = dia->marginGroup->top();
  2068. double bottomMargin = dia->marginGroup->bottom();
  2069. double leftMargin = dia->marginGroup->left();
  2070. double rightMargin = dia->marginGroup->right();
  2071. double columnDistance = dia->distance();
  2072. double pageWidth = dia->pageWidth();
  2073. double pageHeight = dia->pageHeight();
  2074. double numberCols = dia->numberOfCols->value();
  2075. bool autoframes = dia->autoTextFrame->isChecked();
  2076. int orientation = dia->orientation();
  2077. int pageCount=dia->pageCountSpinBox->value();
  2078. QString pagesize;
  2079. if (dia->pageSizeComboBox->currentText() == CommonStrings::trCustomPageSize)
  2080. pagesize = CommonStrings::customPageSize;
  2081. else
  2082. {
  2083. PageSize ps2(dia->pageSizeComboBox->currentText());
  2084. pagesize = ps2.name();
  2085. }
  2086. doFileNew(pageWidth, pageHeight, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, numberCols, autoframes, facingPages, dia->unitOfMeasureComboBox->currentIndex(), firstPage, orientation, 1, pagesize, true, pageCount, true, dia->marginGroup->getMarginPreset());
  2087. doc->pageSets[facingPages].FirstPage = firstPage;
  2088. doc->bleeds.Bottom = dia->bleedBottom();
  2089. doc->bleeds.Top = dia->bleedTop();
  2090. doc->bleeds.Left = dia->bleedLeft();
  2091. doc->bleeds.Right = dia->bleedRight();
  2092. HaveNewDoc();
  2093. doc->reformPages(true);
  2094. // Don's disturb user with "save?" dialog just after new doc
  2095. // doc changing should be rewritten maybe... maybe later...
  2096. doc->setModified(false);
  2097. updateActiveWindowCaption(doc->DocName);
  2098. }
  2099. else if (dia->tabSelected() == NewDoc::NewFromTemplateTab)
  2100. {
  2101. QString fileName = QDir::cleanPath(dia->selectedFile());
  2102. if (!fileName.isEmpty() && loadDoc(fileName))
  2103. {
  2104. doc->hasName = false;
  2105. UndoManager::instance()->renameStack(dia->nftGui->currentDocumentTemplate->name);
  2106. doc->DocName = dia->nftGui->currentDocumentTemplate->name;
  2107. updateActiveWindowCaption(QObject::tr("Document Template: ") + dia->nftGui->currentDocumentTemplate->name);
  2108. QDir::setCurrent(PrefsManager::instance()->documentDir());
  2109. removeRecent(fileName);
  2110. }
  2111. }
  2112. else if (dia->tabSelected() == NewDoc::OpenExistingTab)
  2113. {
  2114. QString fileName = dia->selectedFile();
  2115. if (!fileName.isEmpty())
  2116. {
  2117. QFileInfo fi(fileName);
  2118. docContext->set("docsopen", fi.absolutePath());
  2119. loadDoc(fileName);
  2120. }
  2121. }
  2122. else // NewDoc::OpenRecentTab
  2123. {
  2124. QString fileName = dia->selectedFile();
  2125. if (!fileName.isEmpty())
  2126. loadRecent(fileName);
  2127. }
  2128. }
  2129. prefsManager->setShowStartupDialog(!dia->startUpDialog->isChecked());
  2130. delete dia;
  2131. mainWindowStatusLabel->setText( tr("Ready"));
  2132. if (docSet)
  2133. slotDocSetup();
  2134. }
  2135.  
  2136. bool ScribusMainWindow::slotFileNew()
  2137. {
  2138. if (HaveDoc && doc->appMode == modeEditClip)
  2139. view->requestMode(submodeEndNodeEdit);
  2140. bool retVal = false;
  2141. bool docSet = false;
  2142. NewDoc* dia = new NewDoc(this, RecentDocs);
  2143. if (dia->exec())
  2144. {
  2145. int facingPages = dia->choosenLayout();
  2146. int firstPage = dia->firstPage->currentIndex();
  2147. docSet = dia->startDocSetup->isChecked();
  2148. double topMargin = dia->marginGroup->top();
  2149. double bottomMargin = dia->marginGroup->bottom();
  2150. double leftMargin = dia->marginGroup->left();
  2151. double rightMargin = dia->marginGroup->right();
  2152. double columnDistance = dia->distance();
  2153. double pageWidth = dia->pageWidth();
  2154. double pageHeight = dia->pageHeight();
  2155. double numberCols = dia->numberOfCols->value();
  2156. bool autoframes = dia->autoTextFrame->isChecked();
  2157. int orientation = dia->orientation();
  2158. int pageCount=dia->pageCountSpinBox->value();
  2159. QString pagesize;
  2160. if (dia->pageSizeComboBox->currentText() == CommonStrings::trCustomPageSize)
  2161. pagesize = CommonStrings::customPageSize;
  2162. else
  2163. {
  2164. PageSize ps2(dia->pageSizeComboBox->currentText());
  2165. pagesize = ps2.name();
  2166. }
  2167. if (doFileNew(pageWidth, pageHeight, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, numberCols, autoframes, facingPages, dia->unitOfMeasureComboBox->currentIndex(), firstPage, orientation, 1, pagesize, true, pageCount, true, dia->marginGroup->getMarginPreset()))
  2168. {
  2169. doc->pageSets[facingPages].FirstPage = firstPage;
  2170. doc->bleeds.Bottom = dia->bleedBottom();
  2171. doc->bleeds.Top = dia->bleedTop();
  2172. doc->bleeds.Left = dia->bleedLeft();
  2173. doc->bleeds.Right = dia->bleedRight();
  2174. mainWindowStatusLabel->setText( tr("Ready"));
  2175. HaveNewDoc();
  2176. doc->reformPages(true);
  2177. retVal = true;
  2178. // Don's disturb user with "save?" dialog just after new doc
  2179. // doc changing should be rewritten maybe... maybe later...
  2180. doc->setModified(false);
  2181. updateActiveWindowCaption(doc->DocName);
  2182. }
  2183. }
  2184. delete dia;
  2185. if (docSet)
  2186. slotDocSetup();
  2187. return retVal;
  2188. }
  2189.  
  2190. //TODO move to core, assign doc to doc list, optionally create gui for it
  2191. ScribusDoc *ScribusMainWindow::newDoc(double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin, double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement, int unitIndex, int firstPageLocation, int orientation, int firstPageNumber, const QString& defaultPageSize, bool requiresGUI, int pageCount, bool showView, int marginPreset)
  2192. {
  2193. return doFileNew(width, height, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, columnCount, autoTextFrames, pageArrangement, unitIndex, firstPageLocation, orientation, firstPageNumber, defaultPageSize, requiresGUI, pageCount, showView, marginPreset);
  2194. /* TODO CB finish later this week.
  2195. if (HaveDoc)
  2196. doc->OpenNodes = outlinePalette->buildReopenVals();
  2197. MarginStruct margins(topMargin, leftMargin, bottomMargin, rightMargin);
  2198. DocPagesSetup pagesSetup(pageArrangement, firstPageLocation, firstPageNumber, orientation, autoTextFrames, columnDistance, columnCount);
  2199. QString newDocName(tr("Document")+"-"+QString::number(DocNr));
  2200. doc = new ScribusDoc(newDocName, unitindex, pagesize, margins, pagesSetup);
  2201. doc->setLoading(true);
  2202. doc->setup(unitIndex, pageArrangement, firstPageLocation, orientation, firstPageNumber, defaultPageSize, newDocName);
  2203. HaveDoc++;
  2204. DocNr++;
  2205. if (ScCore->haveCMS() && doc->CMSSettings.CMSinUse)
  2206. recalcColors();
  2207. //CB NOTE should be all done now
  2208. doc->setPage(width, height, topMargin, leftMargin, rightMargin, bottomMargin, columnDistance, columnCount, autoTextFrames, pageArrangement);
  2209. doc->setMasterPageMode(false);
  2210. doc->addMasterPage(0, CommonStrings::masterPageNormal);
  2211. int createCount=qMax(pageCount,1);
  2212. for (int i = 0; i < createCount; ++i)
  2213. doc->addPage(i, CommonStrings::masterPageNormal, true);
  2214. doc->addSection();
  2215. doc->setFirstSectionFromFirstPageNumber();
  2216. doc->setModified(false);
  2217. doc->OpenNodes.clear();
  2218. actionManager->disconnectNewDocActions();
  2219. actionManager->connectNewDocActions(doc);
  2220. //<<View and window code
  2221. ScribusWin* w = new ScribusWin(wsp, doc);
  2222. w->setMainWindow(this);
  2223. if (view!=NULL)
  2224. {
  2225. actionManager->disconnectNewViewActions();
  2226. disconnect(view, SIGNAL(signalGuideInformation(int, double)), alignDistributePalette, SLOT(setGuide(int, double)));
  2227. }
  2228. view = new ScribusView(w, this, doc);
  2229. doc->setCurrentPage(doc->Pages->at(0));
  2230. doc->setGUI(this, view);
  2231. doc->setLoading(false);
  2232. //run after setGUI to set up guidepalette ok
  2233.  
  2234. view->setScale(prefsManager->displayScale());
  2235. actionManager->connectNewViewActions(view);
  2236. alignDistributePalette->setDoc(doc);
  2237. docCheckerPalette->clearErrorList();
  2238. w->setView(view);
  2239. ActWin = w;
  2240. doc->WinHan = w;
  2241. w->setCentralWidget(view);
  2242. doc->connectDocSignals(); //Must be before the first reformpages
  2243. view->reformPages(true);
  2244. //>>
  2245.  
  2246. connect(undoManager, SIGNAL(undoRedoDone()), view, SLOT(DrawNew()));
  2247. //connect(w, SIGNAL(Schliessen()), this, SLOT(DoFileClose()));
  2248. connect(view, SIGNAL(signalGuideInformation(int, double)), alignDistributePalette, SLOT(setGuide(int, double)));
  2249. // connect(w, SIGNAL(SaveAndClose()), this, SLOT(DoSaveClose()));
  2250.  
  2251. //Independent finishing tasks after doc setup
  2252. if (showView)
  2253. {
  2254. if ( wsp->windowList().isEmpty() )
  2255. w->showMaximized();
  2256. else
  2257. w->show();
  2258. view->show();
  2259. }
  2260. connect(w, SIGNAL(AutoSaved()), this, SLOT(slotAutoSaved()));
  2261. connect(ScCore->fileWatcher, SIGNAL(fileChanged(QString)), doc, SLOT(updatePict(QString)));
  2262. connect(ScCore->fileWatcher, SIGNAL(fileDeleted(QString)), doc, SLOT(removePict(QString)));
  2263. scrActions["fileSave"]->setEnabled(false);
  2264. undoManager->switchStack(doc->DocName);
  2265. styleManager->currentDoc(doc);
  2266. tocGenerator->setDoc(doc);
  2267.  
  2268. return doc;
  2269. */
  2270. }
  2271.  
  2272. ScribusDoc *ScribusMainWindow::doFileNew(double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin, double columnDistance, double columnCount, bool autoTextFrames, int pageArrangement, int unitIndex, int firstPageLocation, int orientation, int firstPageNumber, const QString& defaultPageSize, bool requiresGUI, int pageCount, bool showView, int marginPreset)
  2273. {
  2274. if (HaveDoc)
  2275. outlinePalette->buildReopenVals();
  2276. undoManager->setUndoEnabled(false);
  2277. MarginStruct margins(topMargin, leftMargin, bottomMargin, rightMargin);
  2278. DocPagesSetup pagesSetup(pageArrangement, firstPageLocation, firstPageNumber, orientation, autoTextFrames, columnDistance, columnCount);
  2279. QString newDocName( tr("Document")+"-"+QString::number(DocNr));
  2280. ScribusDoc *tempDoc = new ScribusDoc();
  2281. if (requiresGUI)
  2282. doc=tempDoc;
  2283. //tempDoc = new ScribusDoc(newDocName, unitindex, pagesize, margins, pagesSetup);
  2284. tempDoc->setLoading(true);
  2285. outlinePalette->setDoc(tempDoc);
  2286. tempDoc->setup(unitIndex, pageArrangement, firstPageLocation, orientation, firstPageNumber, defaultPageSize, newDocName);
  2287. if (requiresGUI)
  2288. {
  2289. HaveDoc++;
  2290. DocNr++;
  2291. }
  2292. if (ScCore->haveCMS() && tempDoc->CMSSettings.CMSinUse)
  2293. recalcColors();
  2294. //CB NOTE should be all done now
  2295. tempDoc->setPage(width, height, topMargin, leftMargin, rightMargin, bottomMargin, columnCount, columnDistance, autoTextFrames, pageArrangement);
  2296. tempDoc->marginPreset = marginPreset;
  2297. tempDoc->setMasterPageMode(false);
  2298. tempDoc->createDefaultMasterPages();
  2299. tempDoc->createNewDocPages(pageCount);
  2300. tempDoc->addSection();
  2301. tempDoc->setFirstSectionFromFirstPageNumber();
  2302. tempDoc->setModified(false);
  2303. tempDoc->OpenNodes.clear();
  2304. if (requiresGUI)
  2305. {
  2306. actionManager->disconnectNewDocActions();
  2307. actionManager->connectNewDocActions(tempDoc);
  2308. }
  2309. //<<View and window code
  2310. QWorkspace* qwsp=0;
  2311. if (requiresGUI)
  2312. qwsp=wsp;
  2313. ScribusWin* w = new ScribusWin(qwsp, tempDoc);
  2314. w->setMainWindow(this);
  2315. if (requiresGUI && view!=NULL)
  2316. {
  2317. actionManager->disconnectNewViewActions();
  2318. disconnect(view, SIGNAL(signalGuideInformation(int, qreal)), alignDistributePalette, SLOT(setGuide(int, qreal)));
  2319. }
  2320. ScribusView* tempView = new ScribusView(w, this, tempDoc);
  2321. if (requiresGUI)
  2322. view = tempView;
  2323. tempDoc->setCurrentPage(tempDoc->Pages->at(0));
  2324. tempDoc->setGUI(requiresGUI, this, tempView);
  2325. if (requiresGUI)
  2326. {
  2327. tempDoc->docHyphenator->ignoredWords = prefsManager->appPrefs.ignoredWords;
  2328. tempDoc->docHyphenator->specialWords = prefsManager->appPrefs.specialWords;
  2329. }
  2330. tempDoc->setLoading(false);
  2331. //run after setGUI to set up guidepalette ok
  2332.  
  2333. tempView->setScale(prefsManager->displayScale());
  2334. if (requiresGUI)
  2335. {
  2336. actionManager->connectNewViewActions(tempView);
  2337. alignDistributePalette->setDoc(tempDoc);
  2338. // docCheckerPalette->clearErrorList();
  2339. }
  2340. w->setView(tempView);
  2341. ActWin = w;
  2342. tempDoc->WinHan = w;
  2343. if (requiresGUI)
  2344. tempDoc->connectDocSignals(); //Must be before the first reformpages
  2345. tempView->reformPages(true);
  2346. //>>
  2347. if (requiresGUI)
  2348. {
  2349. wsp->addWindow(w);
  2350. //#9250 : transfered to newActWin()
  2351. //connect(undoManager, SIGNAL(undoRedoBegin()), tempDoc, SLOT(undoRedoBegin()));
  2352. //connect(undoManager, SIGNAL(undoRedoDone()), tempDoc, SLOT(undoRedoDone()));
  2353. //connect(undoManager, SIGNAL(undoRedoDone()), tempView, SLOT(DrawNew()));
  2354. connect(tempView, SIGNAL(signalGuideInformation(int, qreal)), alignDistributePalette, SLOT(setGuide(int, qreal)));
  2355. }
  2356. //Independent finishing tasks after tempDoc setup
  2357. if (showView)
  2358. {
  2359. if ( wsp->windowList().isEmpty() )
  2360. w->showMaximized();
  2361. else
  2362. w->show();
  2363. tempView->show();
  2364. }
  2365. if (requiresGUI)
  2366. {
  2367. connect(w, SIGNAL(AutoSaved()), this, SLOT(slotAutoSaved()));
  2368. connect(ScCore->fileWatcher, SIGNAL(fileChanged(QString)), tempDoc, SLOT(updatePict(QString)));
  2369. connect(ScCore->fileWatcher, SIGNAL(fileDeleted(QString)), tempDoc, SLOT(removePict(QString)));
  2370. connect(ScCore->fileWatcher, SIGNAL(dirChanged(QString )), tempDoc, SLOT(updatePictDir(QString )));
  2371. //scrActions["fileSave"]->setEnabled(false);
  2372. tempView->cmsToolbarButton->setChecked(tempDoc->HasCMS);
  2373. undoManager->switchStack(tempDoc->DocName);
  2374. styleManager->setDoc(tempDoc);
  2375. tocGenerator->setDoc(tempDoc);
  2376. }
  2377. undoManager->setUndoEnabled(true);
  2378. return tempDoc;
  2379. }
  2380.  
  2381. void ScribusMainWindow::newFileFromTemplate()
  2382. {
  2383. nftdialog* nftdia = new nftdialog(this, ScCore->getGuiLanguage());
  2384. if (nftdia->exec())
  2385. {
  2386. if (nftdia->nftGui->currentDocumentTemplate)
  2387. {
  2388. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  2389. if (loadDoc(QDir::cleanPath(nftdia->nftGui->currentDocumentTemplate->file)))
  2390. {
  2391. doc->hasName = false;
  2392. UndoManager::instance()->renameStack(nftdia->nftGui->currentDocumentTemplate->name);
  2393. doc->DocName = nftdia->nftGui->currentDocumentTemplate->name;
  2394. updateActiveWindowCaption(QObject::tr("Document Template: ") + nftdia->nftGui->currentDocumentTemplate->name);
  2395. QDir::setCurrent(PrefsManager::instance()->documentDir());
  2396. removeRecent(QDir::cleanPath(nftdia->nftGui->currentDocumentTemplate->file));
  2397. }
  2398. qApp->changeOverrideCursor(Qt::ArrowCursor);
  2399. }
  2400. }
  2401. delete nftdia;
  2402. }
  2403.  
  2404. void ScribusMainWindow::newView()
  2405. {
  2406. ScribusWin* w = new ScribusWin(wsp, doc);
  2407. w->setMainWindow(this);
  2408. view = new ScribusView(w, this, doc);
  2409. view->setScale(prefsManager->displayScale());
  2410. w->setView(view);
  2411. ActWin = w;
  2412. w->setCentralWidget(view);
  2413. actionManager->connectNewViewActions(view);
  2414. alignDistributePalette->setDoc(doc);
  2415. connect(undoManager, SIGNAL(undoRedoDone()), view, SLOT(DrawNew()));
  2416. view->show();
  2417. }
  2418.  
  2419. void ScribusMainWindow::windowsMenuAboutToShow()
  2420. {
  2421. for( QMap<QString, QPointer<ScrAction> >::Iterator it = scrWindowsActions.begin(); it!=scrWindowsActions.end(); ++it )
  2422. scrMenuMgr->removeMenuItem((*it), "Windows");
  2423. scrWindowsActions.clear();
  2424. addDefaultWindowMenuItems();
  2425. QWidgetList windows = wsp->windowList();
  2426. bool windowsListNotEmpty=!windows.isEmpty();
  2427. scrActions["windowsCascade"]->setEnabled(windowsListNotEmpty);
  2428. scrActions["windowsTile"]->setEnabled(windowsListNotEmpty);
  2429. if (windowsListNotEmpty)
  2430. {
  2431. int windowCount=static_cast<int>(windows.count());
  2432. if (windowCount>1)
  2433. scrMenuMgr->addMenuSeparator("Windows");
  2434. for ( int i = 0; i < windowCount; ++i )
  2435. {
  2436. QString docInWindow(windows.at(i)->windowTitle());
  2437. scrWindowsActions.insert(docInWindow, new ScrAction( ScrAction::Window, QPixmap(), QPixmap(), docInWindow, QKeySequence(), this, i));
  2438. scrWindowsActions[docInWindow]->setToggleAction(true);
  2439. connect( scrWindowsActions[docInWindow], SIGNAL(triggeredData(int)), this, SLOT(windowsMenuActivated(int)) );
  2440. if (windowCount>1)
  2441. scrMenuMgr->addMenuItem(scrWindowsActions[docInWindow], "Windows");
  2442. scrWindowsActions[docInWindow]->setChecked(wsp->activeWindow() == windows.at(i));
  2443. }
  2444. }
  2445. }
  2446.  
  2447. void ScribusMainWindow::extrasMenuAboutToShow()
  2448. {
  2449. // There is only Picture Manager handled now.
  2450. // As it can be opened all the time of the document life.
  2451. // This is only check for availability of any ImageFrame
  2452. // in the doc.
  2453. bool enablePicManager = false;
  2454. if (HaveDoc)
  2455. {
  2456. for (int i = 0; i < doc->Items->count(); ++i)
  2457. {
  2458. if ((doc->Items->at(i)->itemType() == PageItem::ImageFrame) && (!doc->Items->at(i)->asLatexFrame()))
  2459. {
  2460. enablePicManager = true;
  2461. break;
  2462. }
  2463. }
  2464. }
  2465. scrActions["extrasManageImages"]->setEnabled(enablePicManager);
  2466. }
  2467.  
  2468. void ScribusMainWindow::newActWin(QWidget *w)
  2469. {
  2470. if (w == NULL)
  2471. {
  2472. ActWin = NULL;
  2473. return;
  2474. }
  2475. if (doc!=0 && doc->appMode == modeEditClip)
  2476. view->requestMode(submodeEndNodeEdit);
  2477. ScribusWin* scw = (ScribusWin*)w;
  2478. if (scw && scw->doc())
  2479. if (!scw->doc()->hasGUI())
  2480. return;
  2481. ActWin = scw;
  2482. if (ActWin->doc()==NULL)
  2483. return;
  2484.  
  2485. if (doc != NULL)
  2486. {
  2487. if ((HaveDoc) && (doc != ActWin->doc()))
  2488. outlinePalette->buildReopenVals();
  2489. }
  2490. // docCheckerPalette->clearErrorList();
  2491.  
  2492. if (HaveDoc && (doc != NULL) && doc->hasGUI())
  2493. {
  2494. disconnect(undoManager, SIGNAL(undoRedoBegin()), doc, SLOT(undoRedoBegin()));
  2495. disconnect(undoManager, SIGNAL(undoRedoDone()) , doc, SLOT(undoRedoDone()));
  2496. disconnect(undoManager, SIGNAL(undoRedoDone()) , doc->view(), SLOT(DrawNew()));
  2497. }
  2498.  
  2499. doc = ActWin->doc();
  2500. undoManager->switchStack(doc->DocName);
  2501.  
  2502. if ((doc != NULL) && doc->hasGUI())
  2503. {
  2504. connect(undoManager, SIGNAL(undoRedoBegin()), doc, SLOT(undoRedoBegin()));
  2505. connect(undoManager, SIGNAL(undoRedoDone()) , doc, SLOT(undoRedoDone()));
  2506. connect(undoManager, SIGNAL(undoRedoDone()) , doc->view(), SLOT(DrawNew()));
  2507. }
  2508.  
  2509. if (view!=NULL)
  2510. {
  2511. actionManager->disconnectNewViewActions();
  2512. disconnect(view, SIGNAL(signalGuideInformation(int, qreal)), alignDistributePalette, SLOT(setGuide(int, qreal)));
  2513. if (ScCore->usingGUI())
  2514. {
  2515. disconnect(doc->m_Selection, SIGNAL(selectionIsMultiple(bool)), 0, 0);
  2516. //disconnect(doc->m_Selection, SIGNAL(empty()), 0, 0);
  2517. }
  2518. }
  2519.  
  2520. view = ActWin->view();
  2521. actionManager->connectNewViewActions(view);
  2522. actionManager->disconnectNewDocActions();
  2523. actionManager->connectNewDocActions(doc);
  2524. connect(view, SIGNAL(signalGuideInformation(int, qreal)), alignDistributePalette, SLOT(setGuide(int, qreal)));
  2525. if (ScCore->usingGUI())
  2526. {
  2527. connect(doc->m_Selection, SIGNAL(selectionIsMultiple(bool)), propertiesPalette, SLOT( setMultipleSelection(bool)));
  2528. connect(doc->m_Selection, SIGNAL(selectionIsMultiple(bool)), actionManager, SLOT( handleMultipleSelections(bool)));
  2529. //connect(doc->m_Selection, SIGNAL(empty()), propertiesPalette, SLOT( unsetItem()));
  2530. }
  2531.  
  2532. pagePalette->setView(view);
  2533. alignDistributePalette->setDoc(doc);
  2534. if (!doc->isLoading())
  2535. {
  2536. // scanDocument();
  2537. // docCheckerPalette->buildErrorList(doc);
  2538. SwitchWin();
  2539. QWidgetList windows = wsp->windowList();
  2540. ScribusWin* swin;
  2541. for ( int i = 0; i < static_cast<int>(windows.count()); ++i )
  2542. {
  2543. swin = (ScribusWin*)windows.at(i);
  2544. if (swin==ActWin && doc->masterPageMode())
  2545. swin->setMasterPagesPaletteShown(true);
  2546. else
  2547. swin->setMasterPagesPaletteShown(false);
  2548. }
  2549. //if (doc->masterPageMode())
  2550. // ActWin->setMasterPagesPaletteShown(true);
  2551. view->requestMode(doc->appMode);
  2552. }
  2553. view->setFocus();
  2554. wsp->setScrollBarsEnabled(!(w->isMaximized()));
  2555. scrActions["viewShowMargins"]->setChecked(doc->guidesSettings.marginsShown);
  2556. scrActions["viewShowBleeds"]->setChecked(doc->guidesSettings.showBleed);
  2557. scrActions["viewShowFrames"]->setChecked(doc->guidesSettings.framesShown);
  2558. scrActions["viewShowLayerMarkers"]->setChecked(doc->guidesSettings.layerMarkersShown);
  2559. scrActions["viewShowGrid"]->setChecked(doc->guidesSettings.gridShown);
  2560. scrActions["viewShowGuides"]->setChecked(doc->guidesSettings.guidesShown);
  2561. scrActions["viewShowColumnBorders"]->setChecked(doc->guidesSettings.colBordersShown);
  2562. scrActions["viewShowBaseline"]->setChecked(doc->guidesSettings.baseShown);
  2563. scrActions["viewShowImages"]->setChecked(doc->guidesSettings.showPic);
  2564. scrActions["viewShowTextChain"]->setChecked(doc->guidesSettings.linkShown);
  2565. scrActions["viewShowTextControls"]->setChecked(doc->guidesSettings.showControls);
  2566. scrActions["viewShowRulers"]->setChecked(doc->guidesSettings.rulersShown);
  2567. scrActions["viewRulerMode"]->setChecked(doc->guidesSettings.rulerMode);
  2568. scrActions["extrasGenerateTableOfContents"]->setEnabled(doc->hasTOCSetup());
  2569. if (!doc->masterPageMode())
  2570. pagePalette->Rebuild();
  2571. outlinePalette->setDoc(doc);
  2572. if (outlinePalette->isVisible())
  2573. {
  2574. outlinePalette->BuildTree(false);
  2575. outlinePalette->reopenTree();
  2576. }
  2577. RestoreBookMarks();
  2578. if (!doc->isLoading())
  2579. {
  2580. if (doc->m_Selection->count() != 0)
  2581. {
  2582. HaveNewSel(doc->m_Selection->itemAt(0)->itemType());
  2583. doc->m_Selection->itemAt(0)->emitAllToGUI();
  2584. }
  2585. else
  2586. HaveNewSel(-1);
  2587. }
  2588. tocGenerator->setDoc(doc);
  2589. styleManager->setDoc(doc);
  2590. // Give plugins a chance to react on changing the current document
  2591. PluginManager& pluginManager(PluginManager::instance());
  2592. QStringList pluginNames(pluginManager.pluginNames(false));
  2593. ScPlugin* plugin;
  2594. QString pName;
  2595. for (int i = 0; i < pluginNames.count(); ++i)
  2596. {
  2597. pName = pluginNames.at(i);
  2598. plugin = pluginManager.getPlugin(pName, true);
  2599. Q_ASSERT(plugin); // all the returned names should represent loaded plugins
  2600. plugin->setDoc(doc);
  2601. }
  2602. }
  2603.  
  2604. void ScribusMainWindow::windowsMenuActivated( int id )
  2605. {
  2606. QWidget* windowWidget = wsp->windowList().at( id );
  2607. if ( windowWidget )
  2608. windowWidget->showNormal();
  2609. newActWin(windowWidget);
  2610. }
  2611.  
  2612. void ScribusMainWindow::docSetup(ReformDoc* dia)
  2613. {
  2614. slotChangeUnit(dia->getSelectedUnit(), false);
  2615. dia->updateDocumentSettings();
  2616. if (dia->imageResolutionChanged())
  2617. {
  2618. setStatusBarInfoText( tr("Updating Images"));
  2619. mainWindowProgressBar->reset();
  2620. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  2621. qApp->processEvents();
  2622. doc->recalcPicturesRes(true);
  2623. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  2624. setStatusBarInfoText("");
  2625. mainWindowProgressBar->reset();
  2626. view->previewQualitySwitcher->blockSignals(true);
  2627. view->previewQualitySwitcher->setCurrentIndex(doc->toolSettings.lowResType);
  2628. view->previewQualitySwitcher->blockSignals(false);
  2629. }
  2630. propertiesPalette->Fonts->RebuildList(doc);
  2631. scrActions["viewShowMargins"]->setChecked(doc->guidesSettings.marginsShown);
  2632. scrActions["viewShowBleeds"]->setChecked(doc->guidesSettings.showBleed);
  2633. scrActions["viewShowFrames"]->setChecked(doc->guidesSettings.framesShown);
  2634. scrActions["viewShowLayerMarkers"]->setChecked(doc->guidesSettings.layerMarkersShown);
  2635. scrActions["viewShowGrid"]->setChecked(doc->guidesSettings.gridShown);
  2636. scrActions["viewShowGuides"]->setChecked(doc->guidesSettings.guidesShown);
  2637. scrActions["viewShowColumnBorders"]->setChecked(doc->guidesSettings.colBordersShown);
  2638. scrActions["viewShowBaseline"]->setChecked(doc->guidesSettings.baseShown);
  2639. scrActions["viewShowImages"]->setChecked(doc->guidesSettings.showPic);
  2640. scrActions["viewShowTextChain"]->setChecked(doc->guidesSettings.linkShown);
  2641. scrActions["viewShowTextControls"]->setChecked(doc->guidesSettings.showControls);
  2642. scrActions["viewShowRulers"]->setChecked(doc->guidesSettings.rulersShown);
  2643. scrActions["viewRulerMode"]->setChecked(doc->guidesSettings.rulerMode);
  2644. scrActions["extrasGenerateTableOfContents"]->setEnabled(doc->hasTOCSetup());
  2645. view->cmsToolbarButton->setChecked(doc->HasCMS);
  2646. //doc emits changed() via this
  2647. doc->setMasterPageMode(true);
  2648. view->reformPages();
  2649. doc->setMasterPageMode(false);
  2650. doc->changed();
  2651. view->reformPages();
  2652. view->GotoPage(doc->currentPage()->pageNr());
  2653. view->DrawNew();
  2654. propertiesPalette->ShowCMS();
  2655. pagePalette->rebuildPages();
  2656. }
  2657.  
  2658. bool ScribusMainWindow::slotDocSetup()
  2659. {
  2660. bool ret = false;
  2661. ReformDoc* dia = new ReformDoc(this, doc);
  2662. Q_CHECK_PTR(dia);
  2663. if (dia->exec())
  2664. {
  2665. docSetup(dia);
  2666. ret = true;
  2667. }
  2668. delete dia;
  2669. return ret;
  2670. }
  2671.  
  2672. void ScribusMainWindow::SwitchWin()
  2673. {
  2674. propertiesPalette->Cpal->ChooseGrad(0);
  2675. updateActiveWindowCaption(doc->DocName);
  2676. // scrActions["shade100"]->setChecked(true);
  2677. propertiesPalette->setDoc(doc);
  2678. pagePalette->setView(view);
  2679. propertiesPalette->Fonts->RebuildList(doc);
  2680. layerPalette->setDoc(doc);
  2681. guidePalette->setDoc(doc);
  2682. charPalette->setDoc(doc);
  2683. outlinePalette->setDoc(doc);
  2684. rebuildLayersList();
  2685. view->updateLayerMenu();
  2686. view->setLayerMenuText(doc->activeLayerName());
  2687. //Do not set this!, it doesnt get valid pointers unless its in EditClip mode and its not
  2688. //if we are switching windows #4357
  2689. //nodePalette->setDoc(doc, view);
  2690. slotChangeUnit(doc->unitIndex(), false);
  2691. /* FIXME: check if this is really superflous now
  2692. if (doc->appMode == modeEditClip)
  2693. {
  2694. doc->appMode = modeNormal;
  2695. view->requestMode(submodeEndNodeEdit);
  2696. } */
  2697. scrActions["fileClose"]->setEnabled(true);
  2698. if (doc->masterPageMode())
  2699. {
  2700. scrActions["pageInsert"]->setEnabled(false);
  2701. scrActions["pageDelete"]->setEnabled(false);
  2702. scrActions["pageCopy"]->setEnabled(false);
  2703. scrActions["pageMove"]->setEnabled(false);
  2704. scrActions["pageApplyMasterPage"]->setEnabled(false);
  2705. scrActions["pageCopyToMasterPage"]->setEnabled(false);
  2706. scrActions["editMasterPages"]->setEnabled(false);
  2707. scrActions["fileNew"]->setEnabled(false);
  2708. scrActions["fileNewFromTemplate"]->setEnabled(false);
  2709. scrActions["fileSave"]->setEnabled(true);
  2710. scrActions["fileOpen"]->setEnabled(false);
  2711. scrActions["fileClose"]->setEnabled(false);
  2712. scrActions["fileRevert"]->setEnabled(false);
  2713. scrMenuMgr->setMenuEnabled("FileOpenRecent", false);
  2714. pagePalette->enablePalette(false);
  2715. scrActions["toolsPDFPushButton"]->setEnabled(false);
  2716. scrActions["toolsPDFTextField"]->setEnabled(false);
  2717. scrActions["toolsPDFCheckBox"]->setEnabled(false);
  2718. scrActions["toolsPDFComboBox"]->setEnabled(false);
  2719. scrActions["toolsPDFListBox"]->setEnabled(false);
  2720. scrActions["toolsPDFAnnotText"]->setEnabled(false);
  2721. }
  2722. else
  2723. {
  2724. scrMenuMgr->setMenuEnabled("Page", true);
  2725. scrActions["editMasterPages"]->setEnabled(true);
  2726. scrActions["fileNew"]->setEnabled(true);
  2727. scrActions["fileNewFromTemplate"]->setEnabled(true);
  2728. scrActions["fileOpen"]->setEnabled(true);
  2729. scrActions["fileClose"]->setEnabled(true);
  2730. scrActions["fileSave"]->setEnabled(true);
  2731. scrActions["fileRevert"]->setEnabled(false);
  2732. scrMenuMgr->setMenuEnabled("FileOpenRecent", true);
  2733.  
  2734. if (doc->isModified())
  2735. slotDocCh(false);
  2736. else
  2737. {
  2738. bool setter = doc->Pages->count() > 1 ? true : false;
  2739. scrActions["pageDelete"]->setEnabled(setter);
  2740. scrActions["pageMove"]->setEnabled(setter);
  2741. }
  2742. scrActions["fileSaveAs"]->setEnabled(true);
  2743. scrActions["fileCollect"]->setEnabled(true);
  2744. scrActions["toolsPDFPushButton"]->setEnabled(true);
  2745. scrActions["toolsPDFTextField"]->setEnabled(true);
  2746. scrActions["toolsPDFCheckBox"]->setEnabled(true);
  2747. scrActions["toolsPDFComboBox"]->setEnabled(true);
  2748. scrActions["toolsPDFListBox"]->setEnabled(true);
  2749. scrActions["toolsPDFAnnotText"]->setEnabled(true);
  2750. pagePalette->enablePalette(true);
  2751. }
  2752. scrMenuMgr->setMenuEnabled("ItemLayer", doc->layerCount() > 1);
  2753. }
  2754.  
  2755. void ScribusMainWindow::HaveNewDoc()
  2756. {
  2757. scrActions["filePrint"]->setEnabled(true);
  2758. scrActions["fileSave"]->setEnabled(true);
  2759. scrActions["fileClose"]->setEnabled(true);
  2760. scrActions["fileDocSetup"]->setEnabled(true);
  2761. scrActions["fileRevert"]->setEnabled(false);
  2762. scrActions["fileCollect"]->setEnabled(true);
  2763. scrActions["fileSaveAs"]->setEnabled(true);
  2764. scrMenuMgr->setMenuEnabled("FileImport", true);
  2765. scrMenuMgr->setMenuEnabled("FileExport", true);
  2766. scrActions["fileExportAsEPS"]->setEnabled(true);
  2767. scrActions["fileExportAsPDF"]->setEnabled(true);
  2768. scrActions["pageImport"]->setEnabled(true);
  2769. //scrActions["toolsPreflightVerifier"]->setEnabled(true);
  2770.  
  2771. if ( ScCore->haveGS() || ScCore->isWinGUI() )
  2772. scrActions["PrintPreview"]->setEnabled(true);
  2773.  
  2774. if (scrActions["SaveAsDocumentTemplate"])
  2775. scrActions["SaveAsDocumentTemplate"]->setEnabled(true);
  2776.  
  2777. scrActions["editCut"]->setEnabled(false);
  2778. scrActions["editCopy"]->setEnabled(false);
  2779. scrActions["editPaste"]->setEnabled((ScMimeData::clipboardHasScribusData()) || (scrapbookPalette->tempBView->objectMap.count() > 0));
  2780. scrMenuMgr->setMenuEnabled("EditPasteRecent", scrapbookPalette->tempBView->objectMap.count() > 0);
  2781. scrMenuMgr->setMenuEnabled("EditContents", false);
  2782. scrActions["editCopyContents"]->setEnabled(false);
  2783. scrActions["editPasteContents"]->setEnabled(false);
  2784. scrActions["editPasteContentsAbs"]->setEnabled(false);
  2785. scrActions["editSelectAll"]->setEnabled(true);
  2786. scrActions["editSelectAllOnLayer"]->setEnabled(true);
  2787. scrActions["editDeselectAll"]->setEnabled(false);
  2788. scrActions["editReplaceColors"]->setEnabled(true);
  2789. scrActions["editPatterns"]->setEnabled(true);
  2790. scrActions["editStyles"]->setEnabled(true);
  2791. scrActions["editMasterPages"]->setEnabled(true);
  2792. scrActions["editJavascripts"]->setEnabled(true);
  2793.  
  2794. scrMenuMgr->setMenuEnabled("View", true);
  2795. scrActions["viewSnapToGrid"]->setChecked(doc->useRaster);
  2796. scrActions["viewSnapToGuides"]->setChecked(doc->SnapGuides);
  2797. scrActions["viewShowRulers"]->setEnabled(true);
  2798.  
  2799. scrMenuMgr->setMenuEnabled("Insert", true);
  2800. scrActions["insertFrame"]->setEnabled(true);
  2801. //scrMenuMgr->setMenuEnabled("Windows", true);
  2802. scrMenuMgr->setMenuEnabled("Page", true);
  2803. scrMenuMgr->setMenuEnabled("Extras", true);
  2804.  
  2805. scrActions["toolsSelect"]->setEnabled(true);
  2806. scrActions["toolsZoom"]->setEnabled(true);
  2807. scrActions["toolsInsertTextFrame"]->setEnabled(true);
  2808. scrActions["toolsInsertImageFrame"]->setEnabled(true);
  2809. scrActions["toolsInsertTableFrame"]->setEnabled(true);
  2810. scrActions["toolsInsertShape"]->setEnabled(true);
  2811. scrActions["toolsInsertLine"]->setEnabled(true);
  2812. scrActions["toolsInsertBezier"]->setEnabled(true);
  2813. scrActions["toolsInsertFreehandLine"]->setEnabled(true);
  2814. scrActions["toolsInsertPolygon"]->setEnabled(true);
  2815. scrActions["toolsInsertRenderFrame"]->setEnabled(true);
  2816. scrActions["toolsMeasurements"]->setEnabled(true);
  2817. scrActions["toolsEyeDropper"]->setEnabled(true);
  2818. scrActions["toolsPDFPushButton"]->setEnabled(true);
  2819. scrActions["toolsPDFTextField"]->setEnabled(true);
  2820. scrActions["toolsPDFCheckBox"]->setEnabled(true);
  2821. scrActions["toolsPDFComboBox"]->setEnabled(true);
  2822. scrActions["toolsPDFListBox"]->setEnabled(true);
  2823. scrActions["toolsPDFAnnotText"]->setEnabled(true);
  2824. scrActions["toolsPDFAnnotLink"]->setEnabled(true);
  2825.  
  2826. bool setter = doc->Pages->count() > 1 ? true : false;
  2827. scrActions["pageDelete"]->setEnabled(setter);
  2828. scrActions["pageMove"]->setEnabled(setter);
  2829. scrMenuMgr->setMenuEnabled("ItemLayer", doc->layerCount() > 1);
  2830.  
  2831. //Update palettes
  2832. updateActiveWindowCaption(doc->DocName);
  2833. // scrActions["shade100"]->setChecked(true);
  2834. propertiesPalette->setDoc(doc);
  2835. propertiesPalette->Cpal->ChooseGrad(0);
  2836. // propertiesPalette->updateColorList();
  2837. pagePalette->setView(view);
  2838. layerPalette->setDoc(doc);
  2839. guidePalette->setDoc(doc);
  2840. charPalette->setDoc(doc);
  2841. outlinePalette->setDoc(doc);
  2842. if (outlinePalette->isVisible())
  2843. outlinePalette->BuildTree();
  2844. rebuildLayersList();
  2845. view->updateLayerMenu();
  2846. view->setLayerMenuText(doc->activeLayerName());
  2847. slotChangeUnit(doc->unitIndex());
  2848. windowsMenuAboutToShow();
  2849.  
  2850. // #9275 : scripter must call HaveNewDoc() in case new doc has been created in a script
  2851. // We may consequently have to call HaveNewDoc several times for the same doc.
  2852. // Use Qt::UniqueConnection here to avoid multiple identical signal connections
  2853. connect(view, SIGNAL(changeUN(int)), this, SLOT(slotChangeUnit(int)), Qt::UniqueConnection);
  2854. connect(view, SIGNAL(changeLA(int)), layerPalette, SLOT(markActiveLayer(int)), Qt::UniqueConnection);
  2855. connect(view->horizRuler, SIGNAL(MarkerMoved(double, double)), this, SLOT(setStatusBarTextPosition(double, double)), Qt::UniqueConnection);
  2856. connect(view->horizRuler, SIGNAL(DocChanged(bool)), this, SLOT(slotDocCh(bool)), Qt::UniqueConnection);
  2857. connect(view, SIGNAL(ClipPo(double, double)), nodePalette, SLOT(SetXY(double, double)), Qt::UniqueConnection);
  2858. connect(view, SIGNAL(PolyOpen()), nodePalette, SLOT(IsOpen()), Qt::UniqueConnection);
  2859. connect(view, SIGNAL(PStatus(int, uint)), nodePalette, SLOT(PolyStatus(int, uint)), Qt::UniqueConnection);
  2860. connect(view, SIGNAL(ItemPos(double, double)), propertiesPalette, SLOT(setXY(double, double)), Qt::UniqueConnection);
  2861. connect(view, SIGNAL(ItemGeom(double, double)), propertiesPalette, SLOT(setBH(double, double)), Qt::UniqueConnection);
  2862. connect(view, SIGNAL(ChBMText(PageItem *)), this, SLOT(BookMarkTxT(PageItem *)), Qt::UniqueConnection);
  2863. connect(view, SIGNAL(HaveSel(int)), this, SLOT(HaveNewSel(int)), Qt::UniqueConnection);
  2864. connect(view, SIGNAL(SetAngle(double)), propertiesPalette, SLOT(setR(double)), Qt::UniqueConnection);
  2865. connect(view, SIGNAL(SetSizeValue(double)), propertiesPalette, SLOT(setLineWidth(double)), Qt::UniqueConnection);
  2866. connect(view, SIGNAL(SetLocalValues(double, double, double, double)), propertiesPalette, SLOT(setScaleAndOffset(double, double, double, double)), Qt::UniqueConnection);
  2867. connect(view, SIGNAL(SetLineArt(Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)), propertiesPalette, SLOT( setLIvalue(Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)), Qt::UniqueConnection);
  2868. connect(view, SIGNAL(ItemTextAttr(double)), propertiesPalette, SLOT(setLsp(double)), Qt::UniqueConnection);
  2869. connect(view, SIGNAL(ItemTextUSval(double)), propertiesPalette, SLOT(setExtra(double)), Qt::UniqueConnection);
  2870. // connect(view, SIGNAL(ItemTextCols(int, double)), propertiesPalette, SLOT(setCols(int, double)), Qt::UniqueConnection);
  2871. connect(view, SIGNAL(SetDistValues(double, double, double, double)), propertiesPalette, SLOT(setTextToFrameDistances(double, double, double, double)), Qt::UniqueConnection);
  2872. connect(view, SIGNAL(ItemTextAbs(int)), propertiesPalette, SLOT(setAli(int)), Qt::UniqueConnection);
  2873. connect(view, SIGNAL(ItemTextFont(const QString&)), propertiesPalette, SLOT(setFontFace(const QString&)), Qt::UniqueConnection);
  2874. connect(view, SIGNAL(ItemTextSize(double)), propertiesPalette, SLOT(setSize(double)), Qt::UniqueConnection);
  2875. //connect(view, SIGNAL(ItemRadius(double)), propertiesPalette, SLOT(setRR(double)), Qt::UniqueConnection);
  2876. // connect(view, SIGNAL(Amode(int)), this, SLOT(setAppMode(int)), Qt::UniqueConnection);
  2877. connect(view, SIGNAL(PaintingDone()), this, SLOT(slotSelect()), Qt::UniqueConnection);
  2878. connect(view, SIGNAL(DocChanged()), this, SLOT(slotDocCh()), Qt::UniqueConnection);
  2879. //connect(view, SIGNAL(HavePoint(bool, bool)), nodePalette, SLOT(HaveNode(bool, bool)), Qt::UniqueConnection);
  2880. connect(view, SIGNAL(MousePos(double, double)), this, SLOT(setStatusBarMousePosition(double, double)), Qt::UniqueConnection);
  2881. //connect(view, SIGNAL(ItemRadius(double)), propertiesPalette, SLOT(setRR(double)), Qt::UniqueConnection);
  2882. connect(view, SIGNAL(ItemTextStil(int)), propertiesPalette, SLOT(setStil(int)), Qt::UniqueConnection);
  2883. connect(view, SIGNAL(ItemTextSca(double)), propertiesPalette, SLOT(setTScale(double)), Qt::UniqueConnection);
  2884. connect(view, SIGNAL(ItemTextScaV(double)), propertiesPalette, SLOT(setTScaleV(double)), Qt::UniqueConnection);
  2885. connect(view, SIGNAL(ItemTextBase(double)), propertiesPalette, SLOT(setTBase(double)), Qt::UniqueConnection);
  2886. connect(view, SIGNAL(ItemTextShadow(double, double )), propertiesPalette, SLOT(setShadowOffs(double, double )), Qt::UniqueConnection);
  2887. connect(view, SIGNAL(ItemTextUnderline(double, double)), propertiesPalette, SLOT(setUnderline(double, double)), Qt::UniqueConnection);
  2888. connect(view, SIGNAL(ItemTextStrike(double, double)), propertiesPalette, SLOT(setStrike(double, double)), Qt::UniqueConnection);
  2889. connect(view, SIGNAL(ItemTextOutline(double)), propertiesPalette, SLOT(setOutlineW(double)), Qt::UniqueConnection);
  2890. connect(view, SIGNAL(ItemTextStil(int)), this, SLOT(setStilvalue(int)), Qt::UniqueConnection);
  2891. connect(view, SIGNAL(ItemTextAbs(int)), this, SLOT(setAbsValue(int)), Qt::UniqueConnection);
  2892. connect(view, SIGNAL(ItemTextFarben(QString, QString, double, double)), propertiesPalette, SLOT(setActFarben(QString, QString, double, double)), Qt::UniqueConnection);
  2893. connect(view, SIGNAL(HasTextSel()), this, SLOT(EnableTxEdit()), Qt::UniqueConnection);
  2894. connect(view, SIGNAL(HasNoTextSel()), this, SLOT(DisableTxEdit()), Qt::UniqueConnection);
  2895. connect(view, SIGNAL(CopyItem()), this, SLOT(slotEditCopy()), Qt::UniqueConnection);
  2896. connect(view, SIGNAL(CutItem()), this, SLOT(slotEditCut()), Qt::UniqueConnection);
  2897. connect(view, SIGNAL(LoadPic()), this, SLOT(slotGetContent()), Qt::UniqueConnection);
  2898. connect(view, SIGNAL(StatusPic()), this, SLOT(StatusPic()), Qt::UniqueConnection);
  2899. connect(view, SIGNAL(AppendText()), this, SLOT(slotFileAppend()), Qt::UniqueConnection);
  2900. connect(view, SIGNAL(AnnotProps()), this, SLOT(ModifyAnnot()), Qt::UniqueConnection);
  2901. connect(view, SIGNAL(LoadElem(QString, double ,double, bool, bool, ScribusDoc *, ScribusView*)), this, SLOT(slotElemRead(QString, double, double, bool, bool, ScribusDoc *, ScribusView*)), Qt::UniqueConnection);
  2902. connect(view, SIGNAL(AddBM(PageItem *)), this, SLOT(AddBookMark(PageItem *)), Qt::UniqueConnection);
  2903. connect(view, SIGNAL(DelBM(PageItem *)), this, SLOT(DelBookMark(PageItem *)), Qt::UniqueConnection);
  2904. connect(view, SIGNAL(DoGroup()), this, SLOT(GroupObj()), Qt::UniqueConnection);
  2905. // connect(view, SIGNAL(EndNodeEdit()), this, SLOT(ToggleFrameEdit()), Qt::UniqueConnection);
  2906. connect(view, SIGNAL(LevelChanged(uint )), propertiesPalette, SLOT(setLevel(uint)), Qt::UniqueConnection);
  2907. connect(view, SIGNAL(callGimp()), this, SLOT(callImageEditor()), Qt::UniqueConnection);
  2908. }
  2909.  
  2910. void ScribusMainWindow::HaveNewSel(int SelectedType)
  2911. {
  2912. bool isRaster = false;
  2913. PageItem *currItem = NULL;
  2914. const uint docSelectionCount=doc->m_Selection->count();
  2915. if (SelectedType != -1)
  2916. {
  2917. if (docSelectionCount != 0)
  2918. {
  2919. PageItem *lowestItem = doc->m_Selection->itemAt(0);
  2920. for (uint a=0; a < docSelectionCount; ++a)
  2921. {
  2922. currItem = doc->m_Selection->itemAt(a);
  2923. if (currItem->ItemNr < lowestItem->ItemNr)
  2924. lowestItem = currItem;
  2925. }
  2926. currItem = lowestItem;
  2927. if ((docSelectionCount == 1) && currItem && currItem->asImageFrame())
  2928. isRaster = currItem->isRaster;
  2929. // doc->m_Selection->removeItem(currItem);
  2930. // doc->m_Selection->prependItem(currItem);
  2931. // currItem = doc->m_Selection->itemAt(0);
  2932. assert(currItem);
  2933. // if (!currItem)
  2934. // SelectedType=-1;
  2935. }
  2936. else
  2937. SelectedType = -1;
  2938. }
  2939. else if (docSelectionCount > 0)
  2940. {
  2941. currItem = doc->m_Selection->itemAt(0);
  2942. }
  2943. assert (docSelectionCount == 0 || currItem != NULL); // help coverity analysis
  2944.  
  2945. actionManager->disconnectNewSelectionActions();
  2946. scrActions["editSelectAllOnLayer"]->setEnabled(true);
  2947. scrActions["editDeselectAll"]->setEnabled(SelectedType != -1);
  2948. scrActions["itemDetachTextFromPath"]->setEnabled(false);
  2949. charPalette->setEnabled(false, 0);
  2950. scrActions["itemUpdateImage"]->setEnabled(SelectedType==PageItem::ImageFrame && (currItem->PictureIsAvailable || currItem->asLatexFrame()));
  2951. scrActions["itemAdjustFrameToImage"]->setEnabled(SelectedType==PageItem::ImageFrame && currItem->PictureIsAvailable && !currItem->isTableItem);
  2952. scrActions["itemAdjustImageToFrame"]->setEnabled(SelectedType==PageItem::ImageFrame && currItem->PictureIsAvailable);
  2953. scrActions["itemExtendedImageProperties"]->setEnabled(SelectedType==PageItem::ImageFrame && currItem->PictureIsAvailable && currItem->pixm.imgInfo.valid);
  2954. scrMenuMgr->setMenuEnabled("ItemPreviewSettings", SelectedType==PageItem::ImageFrame);
  2955. scrActions["itemImageIsVisible"]->setEnabled(SelectedType==PageItem::ImageFrame);
  2956. scrActions["itemPreviewLow"]->setEnabled(SelectedType==PageItem::ImageFrame);
  2957. scrActions["itemPreviewNormal"]->setEnabled(SelectedType==PageItem::ImageFrame);
  2958. scrActions["itemPreviewFull"]->setEnabled(SelectedType==PageItem::ImageFrame);
  2959. scrActions["styleImageEffects"]->setEnabled(SelectedType==PageItem::ImageFrame && isRaster);
  2960. scrActions["editCopyContents"]->setEnabled(SelectedType==PageItem::ImageFrame && currItem->PictureIsAvailable);
  2961. scrActions["editPasteContents"]->setEnabled(SelectedType==PageItem::ImageFrame);
  2962. scrActions["editPasteContentsAbs"]->setEnabled(SelectedType==PageItem::ImageFrame);
  2963. scrActions["editEditWithImageEditor"]->setEnabled(SelectedType==PageItem::ImageFrame && currItem->PictureIsAvailable && currItem->isRaster);
  2964. scrActions["editEditRenderSource"]->setEnabled(SelectedType==PageItem::ImageFrame && currItem && currItem->asLatexFrame());
  2965. if (SelectedType!=PageItem::ImageFrame)
  2966. {
  2967. scrActions["itemImageIsVisible"]->setChecked(false);
  2968. scrActions["itemPreviewLow"]->setChecked(false);
  2969. scrActions["itemPreviewNormal"]->setChecked(false);
  2970. scrActions["itemPreviewFull"]->setChecked(false);
  2971. }
  2972. if ((SelectedType==-1) || (SelectedType!=-1 && !currItem->asTextFrame()))
  2973. enableTextActions(&scrActions, false);
  2974. scrActions["insertSampleText"]->setEnabled(false);
  2975.  
  2976. view->horizRuler->textMode(false);
  2977. view->horizRuler->update();
  2978. switch (SelectedType)
  2979. {
  2980. case -1: // None
  2981. scrActions["fileImportText"]->setEnabled(false);
  2982. scrActions["fileImportText2"]->setEnabled(false);
  2983. scrActions["fileImportImage"]->setEnabled(false);
  2984. scrActions["fileImportAppendText"]->setEnabled(false);
  2985. scrActions["fileExportText"]->setEnabled(false);
  2986. scrMenuMgr->setMenuEnabled("Item", false);
  2987. //scrMenuMgr->setMenuEnabled("ItemShapes", false);
  2988. scrMenuMgr->setMenuEnabled("ItemConvertTo", false);
  2989. scrMenuMgr->setMenuEnabled("EditContents", false);
  2990. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  2991. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  2992. scrActions["itemConvertToOutlines"]->setEnabled(false);
  2993. scrActions["itemConvertToPolygon"]->setEnabled(false);
  2994. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  2995. scrActions["itemLock"]->setEnabled(false);
  2996. scrActions["itemLockSize"]->setEnabled(false);
  2997. scrActions["itemPrintingEnabled"]->setEnabled(false);
  2998. scrActions["editCut"]->setEnabled(false);
  2999. scrActions["editCopy"]->setEnabled(false);
  3000. scrActions["editCopyContents"]->setEnabled(false);
  3001. scrActions["editSearchReplace"]->setEnabled(false);
  3002. scrActions["extrasHyphenateText"]->setEnabled(false);
  3003. scrActions["extrasDeHyphenateText"]->setEnabled(false);
  3004.  
  3005. scrActions["toolsUnlinkTextFrame"]->setEnabled(false);
  3006. scrActions["toolsLinkTextFrame"]->setEnabled(false);
  3007. scrActions["toolsEditContents"]->setEnabled(false);
  3008. scrActions["toolsEditWithStoryEditor"]->setEnabled(false);
  3009. scrActions["toolsRotate"]->setEnabled(false);
  3010. scrActions["toolsCopyProperties"]->setEnabled(false);
  3011. //CB 061005 moved to cpalette choosegrad
  3012. //propertiesPalette->Cpal->gradientQCombo->setCurrentItem(0);
  3013. outlinePalette->slotShowSelect(doc->currentPageNumber(), -1);
  3014. propertiesPalette->setGradientEditMode(false);
  3015. break;
  3016. case PageItem::ImageFrame: //Image Frame
  3017. scrActions["fileImportAppendText"]->setEnabled(false);
  3018. scrActions["fileImportText"]->setEnabled(false);
  3019. scrActions["fileImportText2"]->setEnabled(false);
  3020. scrActions["fileImportImage"]->setEnabled(true);
  3021. scrActions["editCut"]->setEnabled(true);
  3022. scrActions["editCopy"]->setEnabled(true);
  3023. scrMenuMgr->setMenuEnabled("EditContents", true);
  3024. scrActions["editClearContents"]->setEnabled(true);
  3025. scrActions["editSearchReplace"]->setEnabled(false);
  3026. scrActions["extrasHyphenateText"]->setEnabled(false);
  3027. scrActions["extrasDeHyphenateText"]->setEnabled(false);
  3028. scrMenuMgr->setMenuEnabled("Item", true);
  3029. //scrMenuMgr->setMenuEnabled("ItemShapes", !(currItem->isTableItem && currItem->isSingleSel));
  3030. scrMenuMgr->setMenuEnabled("ItemConvertTo", true);
  3031. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  3032. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  3033. scrActions["itemConvertToOutlines"]->setEnabled(false);
  3034. scrActions["itemConvertToPolygon"]->setEnabled(!currItem->isTableItem && doc->appMode != modeEdit);
  3035. scrActions["itemConvertToTextFrame"]->setEnabled(doc->appMode != modeEdit);
  3036. scrActions["toolsUnlinkTextFrame"]->setEnabled(false);
  3037. scrActions["toolsLinkTextFrame"]->setEnabled(false);
  3038. scrActions["toolsEditContents"]->setEnabled(currItem->ScaleType);
  3039. scrActions["toolsEditWithStoryEditor"]->setEnabled(false);
  3040. scrActions["toolsRotate"]->setEnabled(true);
  3041. scrActions["toolsCopyProperties"]->setEnabled(true);
  3042. scrActions["itemImageIsVisible"]->setChecked(currItem->imageShown());
  3043. scrActions["itemPreviewLow"]->setChecked(currItem->pixm.imgInfo.lowResType==scrActions["itemPreviewLow"]->actionInt());
  3044. scrActions["itemPreviewNormal"]->setChecked(currItem->pixm.imgInfo.lowResType==scrActions["itemPreviewNormal"]->actionInt());
  3045. scrActions["itemPreviewFull"]->setChecked(currItem->pixm.imgInfo.lowResType==scrActions["itemPreviewFull"]->actionInt());
  3046.  
  3047. break;
  3048. case PageItem::TextFrame: //Text Frame
  3049. propertiesPalette->Fonts->RebuildList(doc, currItem->isAnnotation());
  3050. scrActions["fileImportText"]->setEnabled(true);
  3051. scrActions["fileImportText2"]->setEnabled(true);
  3052. scrActions["fileImportImage"]->setEnabled(false);
  3053. scrActions["fileImportAppendText"]->setEnabled(true);
  3054. scrActions["fileExportText"]->setEnabled(true);
  3055. scrActions["editCut"]->setEnabled(true);
  3056. scrActions["editCopy"]->setEnabled(true);
  3057. scrMenuMgr->setMenuEnabled("EditContents", true);
  3058. scrActions["editClearContents"]->setEnabled(true);
  3059. scrActions["editSearchReplace"]->setEnabled(currItem->itemText.length() != 0);
  3060. scrActions["extrasHyphenateText"]->setEnabled(true);
  3061. scrActions["extrasDeHyphenateText"]->setEnabled(true);
  3062. scrMenuMgr->setMenuEnabled("Item", true);
  3063. //scrMenuMgr->setMenuEnabled("ItemShapes", !(currItem->isTableItem && currItem->isSingleSel));
  3064. scrMenuMgr->setMenuEnabled("ItemConvertTo", true);
  3065. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  3066. scrActions["itemConvertToImageFrame"]->setEnabled(doc->appMode != modeEdit);
  3067. scrActions["itemConvertToOutlines"]->setEnabled(!currItem->isTableItem && doc->appMode != modeEdit);
  3068. scrActions["itemConvertToPolygon"]->setEnabled(!currItem->isTableItem && doc->appMode != modeEdit);
  3069. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  3070.  
  3071. scrActions["toolsRotate"]->setEnabled(true);
  3072. scrActions["toolsCopyProperties"]->setEnabled(true);
  3073. scrActions["toolsEditWithStoryEditor"]->setEnabled(true);
  3074. scrActions["insertSampleText"]->setEnabled(true);
  3075. if ((currItem->nextInChain() != 0) || (currItem->prevInChain() != 0))
  3076. {
  3077. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  3078. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  3079. // scrActions["itemConvertToOutlines"]->setEnabled(false);
  3080. scrActions["itemConvertToPolygon"]->setEnabled(false);
  3081. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  3082. scrActions["toolsUnlinkTextFrame"]->setEnabled(true);
  3083. // FIXME: once there's one itemtext per story, always enable editcontents
  3084. if ((currItem->prevInChain() != 0) && (currItem->itemText.length() == 0))
  3085. scrActions["toolsEditContents"]->setEnabled(false);
  3086. else
  3087. scrActions["toolsEditContents"]->setEnabled(true);
  3088. }
  3089. else
  3090. {
  3091. scrActions["toolsEditContents"]->setEnabled(true);
  3092. scrActions["toolsUnlinkTextFrame"]->setEnabled(false);
  3093. }
  3094. if (currItem->nextInChain() == 0)
  3095. scrActions["toolsLinkTextFrame"]->setEnabled(true);
  3096. // if (doc->masterPageMode())
  3097. // scrActions["toolsLinkTextFrame"]->setEnabled(false);
  3098. if (doc->appMode == modeEdit)
  3099. {
  3100. setTBvals(currItem);
  3101. scrActions["editSelectAll"]->setEnabled(true);
  3102. scrActions["editSelectAllOnLayer"]->setEnabled(false);
  3103. charPalette->setEnabled(true, currItem);
  3104. if (currItem->asTextFrame())
  3105. enableTextActions(&scrActions, true, currItem->currentStyle().charStyle().font().scName());
  3106. view->horizRuler->setItem(currItem);
  3107. view->horizRuler->update();
  3108. }
  3109. else
  3110. {
  3111. doc->currentStyle = currItem->itemText.defaultStyle();
  3112. propertiesPalette->setParStyle(doc->currentStyle.parent());
  3113. propertiesPalette->setCharStyle(doc->currentStyle.charStyle().parent());
  3114. emit TextStyle(doc->currentStyle);
  3115. // to go: (av)
  3116. emit TextStrike(doc->currentStyle.charStyle().strikethruOffset(), doc->currentStyle.charStyle().strikethruWidth());
  3117. emit TextUnderline(doc->currentStyle.charStyle().underlineOffset(), doc->currentStyle.charStyle().underlineWidth());
  3118. emit TextShadow(doc->currentStyle.charStyle().shadowXOffset(), doc->currentStyle.charStyle().shadowYOffset());
  3119. emit TextFarben(doc->currentStyle.charStyle().strokeColor(), doc->currentStyle.charStyle().fillColor(), doc->currentStyle.charStyle().strokeShade(), doc->currentStyle.charStyle().fillShade());
  3120. emit TextScale(doc->currentStyle.charStyle().scaleH());
  3121. emit TextScaleV(doc->currentStyle.charStyle().scaleV());
  3122. emit TextBase(doc->currentStyle.charStyle().baselineOffset());
  3123. emit TextOutline(doc->currentStyle.charStyle().outlineWidth());
  3124. // emit TextStil(doc->currentStyle.charStyle().effects());
  3125. setStilvalue(doc->currentStyle.charStyle().effects());
  3126. }
  3127.  
  3128. // doc->docParagraphStyles[0].setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(currItem->lineSpacingMode()));
  3129. // doc->docParagraphStyles[0].setLineSpacing(currItem->lineSpacing());
  3130. // doc->docParagraphStyles[0].setAlignment(currItem->textAlignment);
  3131.  
  3132. break;
  3133. case PageItem::PathText: //Path Text
  3134. propertiesPalette->Fonts->RebuildList(doc, currItem->isAnnotation());
  3135. scrActions["fileImportText"]->setEnabled(true);
  3136. scrActions["fileImportText2"]->setEnabled(true);
  3137. scrActions["fileImportImage"]->setEnabled(false);
  3138. scrActions["fileImportAppendText"]->setEnabled(true);
  3139. scrActions["fileExportText"]->setEnabled(true);
  3140. scrActions["editCut"]->setEnabled(true);
  3141. scrActions["editCopy"]->setEnabled(true);
  3142. scrActions["editClearContents"]->setEnabled(false);
  3143. scrActions["editSearchReplace"]->setEnabled(false);
  3144. scrActions["extrasHyphenateText"]->setEnabled(false);
  3145. scrActions["extrasDeHyphenateText"]->setEnabled(false);
  3146. scrMenuMgr->setMenuEnabled("Item", true);
  3147. //scrMenuMgr->setMenuEnabled("ItemShapes", false);
  3148. scrActions["itemDetachTextFromPath"]->setEnabled(true);
  3149. scrMenuMgr->setMenuEnabled("ItemConvertTo", true);
  3150. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  3151. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  3152. scrActions["itemConvertToOutlines"]->setEnabled(true);
  3153. scrActions["itemConvertToPolygon"]->setEnabled(false);
  3154. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  3155.  
  3156. scrActions["toolsRotate"]->setEnabled(true);
  3157. scrActions["toolsCopyProperties"]->setEnabled(true);
  3158. scrActions["toolsEditContents"]->setEnabled(false);
  3159. scrActions["toolsEditWithStoryEditor"]->setEnabled(true);
  3160. scrActions["toolsLinkTextFrame"]->setEnabled(false);
  3161. scrActions["toolsUnlinkTextFrame"]->setEnabled(false);
  3162. if (doc->appMode == modeEdit)
  3163. setTBvals(currItem);
  3164. else
  3165. {
  3166. doc->currentStyle = currItem->itemText.defaultStyle();
  3167. propertiesPalette->setParStyle(doc->currentStyle.parent());
  3168. propertiesPalette->setCharStyle(doc->currentStyle.charStyle().parent());
  3169. emit TextStyle(doc->currentStyle);
  3170. // to go: (av)
  3171. emit TextStrike(doc->currentStyle.charStyle().strikethruOffset(), doc->currentStyle.charStyle().strikethruWidth());
  3172. emit TextUnderline(doc->currentStyle.charStyle().underlineOffset(), doc->currentStyle.charStyle().underlineWidth());
  3173. emit TextShadow(doc->currentStyle.charStyle().shadowXOffset(), doc->currentStyle.charStyle().shadowYOffset());
  3174. emit TextFarben(doc->currentStyle.charStyle().strokeColor(), doc->currentStyle.charStyle().fillColor(), doc->currentStyle.charStyle().strokeShade(), doc->currentStyle.charStyle().fillShade());
  3175. emit TextScale(doc->currentStyle.charStyle().scaleH());
  3176. emit TextScaleV(doc->currentStyle.charStyle().scaleV());
  3177. emit TextBase(doc->currentStyle.charStyle().baselineOffset());
  3178. emit TextOutline(doc->currentStyle.charStyle().outlineWidth());
  3179. // emit TextStil(doc->currentStyle.charStyle().effects());
  3180. setStilvalue(doc->currentStyle.charStyle().effects());
  3181. }
  3182. break;
  3183. default:
  3184. scrActions["fileImportText"]->setEnabled(false);
  3185. scrActions["fileImportText2"]->setEnabled(false);
  3186. scrActions["fileImportImage"]->setEnabled(false);
  3187. scrActions["fileImportAppendText"]->setEnabled(false);
  3188. scrActions["fileExportText"]->setEnabled(false);
  3189. scrActions["editCut"]->setEnabled(true);
  3190. scrActions["editCopy"]->setEnabled(true);
  3191. scrMenuMgr->setMenuEnabled("EditContents", false);
  3192. scrActions["editClearContents"]->setEnabled(false);
  3193. scrActions["editSearchReplace"]->setEnabled(false);
  3194.  
  3195. scrActions["extrasHyphenateText"]->setEnabled(false);
  3196. scrActions["extrasDeHyphenateText"]->setEnabled(false);
  3197. scrMenuMgr->setMenuEnabled("Item", true);
  3198. if (SelectedType == 6) //Polygon
  3199. {
  3200. scrMenuMgr->setMenuEnabled("ItemConvertTo", true);
  3201. scrActions["itemConvertToBezierCurve"]->setEnabled(doc->appMode != modeEdit);
  3202. scrActions["itemConvertToImageFrame"]->setEnabled(doc->appMode != modeEdit);
  3203. scrActions["itemConvertToOutlines"]->setEnabled(false);
  3204. scrActions["itemConvertToPolygon"]->setEnabled(false);
  3205. scrActions["itemConvertToTextFrame"]->setEnabled(doc->appMode != modeEdit);
  3206. }
  3207. else if (SelectedType == 7) //Polyline
  3208. {
  3209. scrMenuMgr->setMenuEnabled("ItemConvertTo", true);
  3210. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  3211. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  3212. scrActions["itemConvertToOutlines"]->setEnabled(false);
  3213. scrActions["itemConvertToPolygon"]->setEnabled(doc->appMode != modeEdit);
  3214. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  3215. }
  3216. else if (SelectedType == 5) // Line
  3217. {
  3218. scrMenuMgr->setMenuEnabled("ItemConvertTo", true);
  3219. scrActions["itemConvertToBezierCurve"]->setEnabled(true);
  3220. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  3221. scrActions["itemConvertToOutlines"]->setEnabled(false);
  3222. scrActions["itemConvertToPolygon"]->setEnabled(false);
  3223. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  3224. }
  3225. scrActions["toolsEditContents"]->setEnabled(false);
  3226. scrActions["toolsEditWithStoryEditor"]->setEnabled(false);
  3227. scrActions["toolsUnlinkTextFrame"]->setEnabled(false);
  3228. scrActions["toolsLinkTextFrame"]->setEnabled(false);
  3229. // if (SelectedType != 5)
  3230. scrActions["toolsRotate"]->setEnabled(true);
  3231. // else
  3232. // scrActions["toolsRotate"]->setEnabled(false);
  3233. scrActions["toolsCopyProperties"]->setEnabled(true);
  3234. break;
  3235. }
  3236. doc->CurrentSel = SelectedType;
  3237. propertiesPalette->RotationGroup->setCheckedId(doc->RotMode);
  3238. if (docSelectionCount > 1)
  3239. {
  3240. if (!doc->m_Selection->itemsAreSameType())
  3241. {
  3242. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  3243. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  3244. //scrActions["itemConvertToOutlines"]->setEnabled(false);
  3245. scrActions["itemConvertToPolygon"]->setEnabled(false);
  3246. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  3247. }
  3248. scrActions["editSearchReplace"]->setEnabled(false);
  3249.  
  3250. bool hPoly = false;
  3251. bool isGroup = true;
  3252. int firstElem = -1;
  3253. if (currItem->Groups.count() != 0)
  3254. firstElem = currItem->Groups.top();
  3255. for (uint bx=0; bx < docSelectionCount; ++bx)
  3256. {
  3257. PageItem* bxi=doc->m_Selection->itemAt(bx);
  3258. if ((bxi->asPolygon()) || (bxi->asPolyLine()))
  3259. hPoly = true;
  3260. if (bxi->Groups.count() != 0)
  3261. {
  3262. if (bxi->Groups.top() != firstElem)
  3263. isGroup = false;
  3264. }
  3265. else
  3266. isGroup = false;
  3267. }
  3268. // It is possible to select objects on different layer using
  3269. // document outline palette. We need to check selected objects
  3270. // are on a common layer before allowing user to group them
  3271. bool objectsOnSameLayer = (doc->m_Selection->objectsLayer() != -1);
  3272. scrActions["itemGroup"]->setEnabled(!isGroup && objectsOnSameLayer);
  3273. scrActions["itemCombinePolygons"]->setEnabled(hPoly);
  3274. if (docSelectionCount == 2)
  3275. {
  3276. //CB swap bx around if currItem is not at 0 index from the lastItem loop at start of havenewsel
  3277. PageItem* bx=doc->m_Selection->itemAt(1);
  3278. if (currItem==bx)
  3279. bx=doc->m_Selection->itemAt(0);
  3280.  
  3281. if ((currItem->asTextFrame() && (bx->asPolygon() || bx->asPolyLine())) || (bx->asTextFrame() && (currItem->asPolygon() || currItem->asPolyLine())))
  3282. {
  3283. if ((currItem->nextInChain() == 0) && (currItem->prevInChain() == 0) && (bx->nextInChain() == 0) && (bx->prevInChain() == 0) && (currItem->Groups.count() == 0) && (bx->Groups.count() == 0))
  3284. scrActions["itemAttachTextToPath"]->setEnabled(true);
  3285. }
  3286.  
  3287. }
  3288. }
  3289. else
  3290. {
  3291. scrActions["itemGroup"]->setEnabled(false);
  3292. scrActions["itemAttachTextToPath"]->setEnabled(false);
  3293. scrActions["itemCombinePolygons"]->setEnabled(false);
  3294. }
  3295. if (docSelectionCount != 0)
  3296. {
  3297. actionManager->setPDFActions(view);
  3298. QStringList scrapNames = scrapbookPalette->getOpenScrapbooksNames();
  3299. scrapNames.removeAt(1);
  3300. for( QMap<QString, QPointer<ScrAction> >::Iterator it0s = scrScrapActions.begin(); it0s != scrScrapActions.end(); ++it0s )
  3301. scrMenuMgr->removeMenuItem((*it0s), "itemSendToScrapbook");
  3302. scrScrapActions.clear();
  3303. for (int i = 0; i < scrapNames.count(); i++)
  3304. {
  3305. ScrAction *act = new ScrAction( ScrAction::DataInt, QPixmap(), QPixmap(), scrapNames[i], QKeySequence(), this, i);
  3306. scrScrapActions.insert(scrapNames[i], act);
  3307. scrMenuMgr->addMenuItem(act, "itemSendToScrapbook");
  3308. connect(act, SIGNAL(triggeredData(int)), this, SLOT(PutScrap(int)));
  3309. }
  3310. updateItemLayerList();
  3311. //propertiesPalette->textFlowsAroundFrame->setChecked(currItem->textFlowsAroundFrame());
  3312. propertiesPalette->setTextFlowMode(currItem->textFlowMode());
  3313. scrActions["itemLock"]->setEnabled(true);
  3314. scrActions["itemLockSize"]->setEnabled(true);
  3315. scrActions["itemPrintingEnabled"]->setEnabled(true);
  3316. if (currItem->Groups.count() != 0)
  3317. scrActions["itemUngroup"]->setEnabled(true);
  3318. else
  3319. {
  3320. scrActions["itemUngroup"]->setEnabled(false);
  3321. scrActions["itemSplitPolygons"]->setEnabled( (currItem->asPolygon()) && (currItem->Segments.count() != 0) );
  3322. }
  3323. if (currItem->locked())
  3324. {
  3325. //scrMenuMgr->setMenuEnabled("ItemShapes", false);
  3326. scrMenuMgr->setMenuEnabled("ItemConvertTo", false);
  3327. scrActions["itemConvertToBezierCurve"]->setEnabled(false);
  3328. scrActions["itemConvertToImageFrame"]->setEnabled(false);
  3329. scrActions["itemConvertToOutlines"]->setEnabled(false);
  3330. scrActions["itemConvertToPolygon"]->setEnabled(false);
  3331. scrActions["itemConvertToTextFrame"]->setEnabled(false);
  3332. scrActions["itemSplitPolygons"]->setEnabled(false);
  3333. scrActions["itemAttachTextToPath"]->setEnabled(false);
  3334. scrActions["itemDetachTextFromPath"]->setEnabled(false);
  3335. scrActions["itemCombinePolygons"]->setEnabled(false);
  3336. scrActions["itemDelete"]->setEnabled(false);
  3337. scrActions["itemLowerToBottom"]->setEnabled(false);
  3338. scrActions["itemRaiseToTop"]->setEnabled(false);
  3339. scrActions["itemRaise"]->setEnabled(false);
  3340. scrActions["itemLower"]->setEnabled(false);
  3341. scrMenuMgr->setMenuEnabled("itemSendToScrapbook", !(currItem->isTableItem && currItem->isSingleSel));
  3342. scrActions["itemSendToPattern"]->setEnabled(!(currItem->isTableItem && currItem->isSingleSel));
  3343. scrActions["editCut"]->setEnabled(false);
  3344. scrActions["editClearContents"]->setEnabled(false);
  3345. scrActions["toolsRotate"]->setEnabled(false);
  3346. }
  3347. else
  3348. {
  3349. bool setter=!(currItem->isTableItem && currItem->isSingleSel && currItem->isGroupControl);
  3350. scrActions["itemDuplicate"]->setEnabled(setter);
  3351. scrActions["itemMulDuplicate"]->setEnabled(setter);
  3352. scrActions["itemDelete"]->setEnabled(!currItem->isSingleSel);
  3353. scrActions["itemLowerToBottom"]->setEnabled(setter);
  3354. scrActions["itemRaiseToTop"]->setEnabled(setter);
  3355. scrActions["itemRaise"]->setEnabled(setter);
  3356. scrActions["itemLower"]->setEnabled(setter);
  3357. scrMenuMgr->setMenuEnabled("itemSendToScrapbook", setter);
  3358. scrActions["itemSendToPattern"]->setEnabled(setter);
  3359. }
  3360. scrActions["itemLock"]->setChecked(currItem->locked());
  3361. scrActions["itemLockSize"]->setChecked(currItem->sizeLocked());
  3362. scrActions["itemPrintingEnabled"]->setChecked(currItem->printEnabled());
  3363. }
  3364. //propertiesPalette->NewSel(SelectedType);
  3365. if (SelectedType != -1)
  3366. {
  3367. //propertiesPalette->SetCurItem(currItem);
  3368. outlinePalette->slotShowSelect(currItem->OwnPage, currItem->ItemNr);
  3369. actionManager->connectNewSelectionActions(view, doc);
  3370. // propertiesPalette->NewSel(SelectedType);
  3371. }
  3372. else
  3373. propertiesPalette->NewSel(SelectedType);
  3374.  
  3375. PluginManager& pluginManager(PluginManager::instance());
  3376. QStringList pluginNames(pluginManager.pluginNames(false));
  3377. ScPlugin* plugin;
  3378. ScActionPlugin* ixplug;
  3379. ScrAction* pluginAction = 0;
  3380. QString pName;
  3381. for (int i = 0; i < pluginNames.count(); ++i)
  3382. {
  3383. pName = pluginNames.at(i);
  3384. plugin = pluginManager.getPlugin(pName, true);
  3385. Q_ASSERT(plugin); // all the returned names should represent loaded plugins
  3386. if (plugin->inherits("ScActionPlugin"))
  3387. {
  3388. ixplug = dynamic_cast<ScActionPlugin*>(plugin);
  3389. Q_ASSERT(ixplug);
  3390. ScActionPlugin::ActionInfo ai(ixplug->actionInfo());
  3391. pluginAction = ScCore->primaryMainWindow()->scrActions[ai.name];
  3392. if (pluginAction != 0)
  3393. pluginAction->setEnabled(ixplug->handleSelection(doc, SelectedType));
  3394. }
  3395. }
  3396. }
  3397.  
  3398. void ScribusMainWindow::slotDocCh(bool /*reb*/)
  3399. {
  3400. // if (!doc->isLoading() && docCheckerPalette->isVisible())
  3401. // {
  3402. // scanDocument();
  3403. // docCheckerPalette->buildErrorList(doc);
  3404. // }
  3405. if (!doc->isModified())
  3406. doc->setModified(true);
  3407. updateActiveWindowCaption(doc->DocName + "*");
  3408. // scrActions["fileSave"]->setEnabled(true);
  3409. // scrActions["fileSaveAs"]->setEnabled(true);
  3410. scrActions["fileCollect"]->setEnabled(true);
  3411. if (!doc->masterPageMode())
  3412. {
  3413. scrActions["fileClose"]->setEnabled(true);
  3414. if (doc->hasName)
  3415. scrActions["fileRevert"]->setEnabled(true);
  3416.  
  3417. bool multiPages = doc->Pages->count() > 1;
  3418. scrActions["pageDelete"]->setEnabled(multiPages);
  3419. scrActions["pageMove"]->setEnabled(multiPages);
  3420. }
  3421.  
  3422. if (outlinePalette->isVisible())
  3423. outlinePalette->BuildTree();
  3424. // Give plugins a chance to react on changes in the current document
  3425. PluginManager& pluginManager(PluginManager::instance());
  3426. QStringList pluginNames(pluginManager.pluginNames(false));
  3427. ScPlugin* plugin;
  3428. QString pName;
  3429. for (int i = 0; i < pluginNames.count(); ++i)
  3430. {
  3431. pName = pluginNames.at(i);
  3432. plugin = pluginManager.getPlugin(pName, true);
  3433. Q_ASSERT(plugin); // all the returned names should represent loaded plugins
  3434. plugin->changedDoc(doc);
  3435. }
  3436. }
  3437.  
  3438. void ScribusMainWindow::updateRecent(QString fn)
  3439. {
  3440. if (RecentDocs.indexOf(fn) == -1)
  3441. {
  3442. RecentDocs.prepend(fn);
  3443. //#9845, why are we tracking doc changes, see also removeRecent:
  3444. //ScCore->fileWatcher->addFile(fn);
  3445. }
  3446. else
  3447. {
  3448. RecentDocs.removeAll(fn);
  3449. RecentDocs.prepend(fn);
  3450. }
  3451. rebuildRecentFileMenu();
  3452. }
  3453.  
  3454. void ScribusMainWindow::removeRecent(QString fn, bool fromFileWatcher)
  3455. {
  3456. if (RecentDocs.indexOf(fn) != -1)
  3457. {
  3458. RecentDocs.removeAll(fn);
  3459. //#9845, if (!fromFileWatcher)
  3460. //#9845, ScCore->fileWatcher->removeFile(fn);
  3461. }
  3462. rebuildRecentFileMenu();
  3463. }
  3464.  
  3465. void ScribusMainWindow::removeRecentFromWatcher(QString fn)
  3466. {
  3467. removeRecent(fn, true);
  3468. }
  3469.  
  3470. void ScribusMainWindow::loadRecent(QString fn)
  3471. {
  3472. QFileInfo fd(fn);
  3473. if (!fd.exists())
  3474. {
  3475. removeRecent(fn);
  3476. return;
  3477. }
  3478. loadDoc(fn);
  3479. }
  3480.  
  3481. void ScribusMainWindow::rebuildRecentFileMenu()
  3482. {
  3483. for( QMap<QString, QPointer<ScrAction> >::Iterator it = scrRecentFileActions.begin(); it!=scrRecentFileActions.end(); ++it )
  3484. scrMenuMgr->removeMenuItem((*it), recentFileMenuName);
  3485.  
  3486. scrRecentFileActions.clear();
  3487. uint max = qMin(prefsManager->appPrefs.RecentDCount, RecentDocs.count());
  3488. QString strippedName, localName;
  3489. for (uint m = 0; m < max; ++m)
  3490. {
  3491. strippedName = localName = QDir::toNativeSeparators(RecentDocs[m]);
  3492. strippedName.remove(QDir::separator());
  3493. scrRecentFileActions.insert(strippedName, new ScrAction(ScrAction::RecentFile, QPixmap(), QPixmap(), QString("&%1 %2").arg(m+1).arg(localName.replace("&","&&")), QKeySequence(), this, 0,0.0,RecentDocs[m]));
  3494. connect( scrRecentFileActions[strippedName], SIGNAL(triggeredData(QString)), this, SLOT(loadRecent(QString)) );
  3495. scrMenuMgr->addMenuItem(scrRecentFileActions[strippedName], recentFileMenuName);
  3496. }
  3497. }
  3498.  
  3499. void ScribusMainWindow::rebuildRecentPasteMenu()
  3500. {
  3501. for( QMap<QString, QPointer<ScrAction> >::Iterator it = scrRecentPasteActions.begin(); it!=scrRecentPasteActions.end(); ++it )
  3502. scrMenuMgr->removeMenuItem((*it), recentPasteMenuName);
  3503.  
  3504. scrRecentPasteActions.clear();
  3505. int max = qMin(prefsManager->appPrefs.numScrapbookCopies, scrapbookPalette->tempBView->objectMap.count());
  3506. if (max > 0)
  3507. {
  3508. QMap<QString,BibView::Elem>::Iterator it;
  3509. it = scrapbookPalette->tempBView->objectMap.end();
  3510. it--;
  3511. QString strippedName;
  3512. for (int m = 0; m < max; ++m)
  3513. {
  3514. strippedName = it.key();
  3515. QPixmap pm = it.value().Preview;
  3516. scrRecentPasteActions.insert(strippedName, new ScrAction(ScrAction::RecentPaste, pm, QPixmap(), QString("&%1 %2").arg(m+1).arg(strippedName), QKeySequence(), this, 0,0.0,it.key()));
  3517. connect( scrRecentPasteActions[strippedName], SIGNAL(triggeredData(QString)), this, SLOT(pasteRecent(QString)) );
  3518. scrMenuMgr->addMenuItem(scrRecentPasteActions[strippedName], recentPasteMenuName);
  3519. it--;
  3520. }
  3521. }
  3522. }
  3523.  
  3524. void ScribusMainWindow::pasteFromScrapbook(QString fn)
  3525. {
  3526. doPasteRecent(scrapbookPalette->activeBView->objectMap[fn].Data);
  3527. }
  3528.  
  3529. void ScribusMainWindow::pasteRecent(QString fn)
  3530. {
  3531. doPasteRecent(scrapbookPalette->tempBView->objectMap[fn].Data);
  3532. }
  3533.  
  3534. void ScribusMainWindow::doPasteRecent(QString data)
  3535. {
  3536. if (HaveDoc)
  3537. {
  3538. UndoTransaction pasteAction(undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::Create,"",Um::ICreate));
  3539. QFileInfo fi(data);
  3540. if (fi.suffix().toLower() == "sml")
  3541. {
  3542. QString f = "";
  3543. loadText(data, &f);
  3544. StencilReader *pre = new StencilReader();
  3545. data = pre->createObjects(f);
  3546. delete pre;
  3547. }
  3548. else if (fi.suffix().toLower() == "shape")
  3549. {
  3550. QString f = "";
  3551. loadText(data, &f);
  3552. StencilReader *pre = new StencilReader();
  3553. data = pre->createShape(f);
  3554. delete pre;
  3555. }
  3556. view->Deselect(true);
  3557. uint ac = doc->Items->count();
  3558. bool savedAlignGrid = doc->useRaster;
  3559. bool savedAlignGuides = doc->SnapGuides;
  3560. doc->useRaster = false;
  3561. doc->SnapGuides = false;
  3562. if (fi.suffix().toLower() == "sce")
  3563. slotElemRead(data, doc->currentPage()->xOffset(), doc->currentPage()->yOffset(), true, true, doc, view);
  3564. else
  3565. slotElemRead(data, doc->currentPage()->xOffset(), doc->currentPage()->yOffset(), false, true, doc, view);
  3566. doc->useRaster = savedAlignGrid;
  3567. doc->SnapGuides = savedAlignGuides;
  3568. Selection tmpSelection(this, false);
  3569. tmpSelection.copy(*doc->m_Selection, true);
  3570. for (int as = ac; as < doc->Items->count(); ++as)
  3571. {
  3572. PageItem* currItem = doc->Items->at(as);
  3573. doc->setRedrawBounding(currItem);
  3574. tmpSelection.addItem(currItem, true);
  3575. if (currItem->isBookmark)
  3576. AddBookMark(currItem);
  3577. }
  3578. doc->m_Selection->copy(tmpSelection, false);
  3579. pasteAction.commit();
  3580. slotDocCh(false);
  3581. doc->regionsChanged()->update(QRectF());
  3582. }
  3583. }
  3584.  
  3585. void ScribusMainWindow::importVectorFile()
  3586. {
  3587. QString fileName = "";
  3588. QString formats = "";
  3589. QString allFormats = tr("All Supported Formats")+" (";
  3590. int fmtCode = FORMATID_ODGIMPORT;
  3591. const FileFormat *fmt = LoadSavePlugin::getFormatById(fmtCode);
  3592. while (fmt != 0)
  3593. {
  3594. if (fmt->load)
  3595. {
  3596. formats += fmt->filter + ";;";
  3597. int an = fmt->filter.indexOf("(");
  3598. int en = fmt->filter.indexOf(")");
  3599. while (an != -1)
  3600. {
  3601. allFormats += fmt->filter.mid(an+1, en-an-1)+" ";
  3602. an = fmt->filter.indexOf("(", en);
  3603. en = fmt->filter.indexOf(")", an);
  3604. }
  3605. }
  3606. fmtCode++;
  3607. fmt = LoadSavePlugin::getFormatById(fmtCode);
  3608. }
  3609. allFormats += "*.sce *.SCE ";
  3610. allFormats += "*.shape *.SHAPE ";
  3611. allFormats += "*.sml *.SML);;";
  3612. formats += "Scribus Objects (*.sce *.SCE);;";
  3613. formats += "Dia Shapes (*.shape *.SHAPE);;";
  3614. formats += "Kivio Stencils (*.sml *.SML)";
  3615. allFormats += formats;
  3616. PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
  3617. QString wdir = dirs->get("pastefile", ".");
  3618. CustomFDialog dia(this, wdir, tr("Open"), allFormats, fdHidePreviewCheckBox | fdExistingFiles);
  3619. if (dia.exec() == QDialog::Accepted)
  3620. fileName = dia.selectedFile();
  3621. else
  3622. return;
  3623. if (!fileName.isEmpty())
  3624. {
  3625. PrefsManager::instance()->prefsFile->getContext("dirs")->set("pastefile", fileName.left(fileName.lastIndexOf("/")));
  3626. QFileInfo fi(fileName);
  3627. QString suffix = fi.suffix().toLower();
  3628. if ((suffix == "sce") || (suffix == "sml") || (suffix == "shape"))
  3629. {
  3630. QList<QUrl> urls;
  3631. QMimeData* md = new QMimeData();
  3632. urls.append( QUrl::fromLocalFile(fileName) );
  3633. md->setUrls(urls);
  3634. QDrag* dr = new QDrag(this);
  3635. dr->setMimeData(md);
  3636. const QPixmap& dragCursor = loadIcon("DragPix.xpm");
  3637. dr->setDragCursor(dragCursor, Qt::CopyAction);
  3638. dr->setDragCursor(dragCursor, Qt::MoveAction);
  3639. dr->setDragCursor(dragCursor, Qt::LinkAction);
  3640. dr->exec();
  3641. }
  3642. else
  3643. {
  3644. FileLoader *fileLoader = new FileLoader(fileName);
  3645. int testResult = fileLoader->testFile();
  3646. delete fileLoader;
  3647. if ((testResult != -1) && (testResult >= FORMATID_ODGIMPORT))
  3648. {
  3649. const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult);
  3650. if( fmt )
  3651. fmt->loadFile(fileName, LoadSavePlugin::lfUseCurrentPage|LoadSavePlugin::lfInteractive);
  3652. }
  3653. }
  3654. }
  3655. }
  3656.  
  3657. void ScribusMainWindow::rebuildLayersList()
  3658. {
  3659. if (HaveDoc)
  3660. {
  3661. for( QMap<QString, QPointer<ScrAction> >::Iterator it0 = scrLayersActions.begin(); it0 != scrLayersActions.end(); ++it0 )
  3662. scrMenuMgr->removeMenuItem((*it0), layerMenuName);
  3663. scrLayersActions.clear();
  3664. ScLayers::iterator it;
  3665. if (doc->Layers.count()!= 0)
  3666. {
  3667. for (it = doc->Layers.begin(); it != doc->Layers.end(); ++it)
  3668. {
  3669. scrLayersActions.insert(QString("%1").arg((*it).LNr), new ScrAction( ScrAction::Layer, QPixmap(), QPixmap(), (*it).Name, QKeySequence(), this, (*it).LNr));
  3670. scrLayersActions[QString("%1").arg((*it).LNr)]->setToggleAction(true);
  3671. QPixmap pm(20,15);
  3672. pm.fill((*it).markerColor);
  3673. scrLayersActions[QString("%1").arg((*it).LNr)]->setIcon(pm);
  3674. }
  3675. }
  3676. int currActiveLayer=doc->activeLayer();
  3677. bool found=false;
  3678. for (it = doc->Layers.begin(); it != doc->Layers.end(); ++it)
  3679. {
  3680. if ((*it).LNr == currActiveLayer)
  3681. {
  3682. found=true;
  3683. break;
  3684. }
  3685. }
  3686. Q_ASSERT(found);
  3687. scrLayersActions[QString("%1").arg((*it).LNr)]->setChecked(true);
  3688.  
  3689. for( QMap<QString, QPointer<ScrAction> >::Iterator it = scrLayersActions.begin(); it!=scrLayersActions.end(); ++it )
  3690. {
  3691. scrMenuMgr->addMenuItem((*it), layerMenuName);
  3692. connect( (*it), SIGNAL(triggeredData(int)), doc, SLOT(itemSelection_SendToLayer(int)) );
  3693. }
  3694. }
  3695. }
  3696.  
  3697. void ScribusMainWindow::updateItemLayerList()
  3698. {
  3699. if (HaveDoc)
  3700. {
  3701. QMap<QString, QPointer<ScrAction> >::Iterator itend=scrLayersActions.end();
  3702. for( QMap<QString, QPointer<ScrAction> >::Iterator it = scrLayersActions.begin(); it!=itend; ++it )
  3703. {
  3704. disconnect( (*it), SIGNAL(triggeredData(int)), 0, 0 );
  3705. (*it)->setChecked(false);
  3706. }
  3707. if (doc->m_Selection->count()>0 && doc->m_Selection->itemAt(0))
  3708. scrLayersActions[QString("%1").arg(doc->m_Selection->itemAt(0)->LayerNr)]->setChecked(true);
  3709. for( QMap<QString, QPointer<ScrAction> >::Iterator it = scrLayersActions.begin(); it!=itend; ++it )
  3710. connect( (*it), SIGNAL(triggeredData(int)), doc, SLOT(itemSelection_SendToLayer(int)) );
  3711. }
  3712. }
  3713.  
  3714. void ScribusMainWindow::updateColorLists()
  3715. {
  3716. if (HaveDoc)
  3717. {
  3718. propertiesPalette->updateColorList();
  3719. propertiesPalette->SetLineFormats(doc);
  3720. styleManager->updateColorList();
  3721. }
  3722. }
  3723.  
  3724.  
  3725. bool ScribusMainWindow::slotDocOpen()
  3726. {
  3727. PrefsContext* docContext = prefsManager->prefsFile->getContext("docdirs", false);
  3728. QString docDir = ".";
  3729. QString prefsDocDir=prefsManager->documentDir();
  3730. if (!prefsDocDir.isEmpty())
  3731. docDir = docContext->get("docsopen", prefsDocDir);
  3732. else
  3733. docDir = docContext->get("docsopen", ".");
  3734. QString formats(FileLoader::getLoadFilterString());
  3735. formats.remove("PDF (*.pdf *.PDF);;");
  3736. QString fileName = CFileDialog( docDir, tr("Open"), formats);
  3737. if (fileName.isEmpty())
  3738. // User cancelled
  3739. return false;
  3740. QFileInfo fi(fileName);
  3741. docContext->set("docsopen", fi.absolutePath());
  3742. return loadDoc(fileName);
  3743. }
  3744.  
  3745. bool ScribusMainWindow::slotPageImport()
  3746. {
  3747. Q_ASSERT(!doc->masterPageMode());
  3748. bool ret = false;
  3749. MergeDoc *dia = new MergeDoc(this, false, doc->DocPages.count(), doc->currentPage()->pageNr() + 1);
  3750. if (dia->exec())
  3751. {
  3752. mainWindowStatusLabel->setText( tr("Importing Pages..."));
  3753. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  3754. std::vector<int> pageNs;
  3755. parsePagesString(dia->getPageNumbers(), &pageNs, dia->getPageCounter());
  3756. int startPage=0, nrToImport=pageNs.size();
  3757. bool doIt = true;
  3758. if (doc->masterPageMode())
  3759. {
  3760. if (nrToImport > 1)
  3761. loadPage(dia->getFromDoc(), pageNs[0] - 1, false);
  3762. doIt = false;
  3763. }
  3764. else if (dia->getCreatePageChecked())
  3765. {
  3766. int importWhere=dia->getImportWhere();
  3767. if (importWhere == 0)
  3768. startPage = dia->getImportWherePage();
  3769. else if (importWhere == 1)
  3770. startPage = dia->getImportWherePage() + 1;
  3771. else
  3772. startPage = doc->DocPages.count() + 1;
  3773. addNewPages(dia->getImportWherePage(), importWhere, nrToImport, doc->pageHeight, doc->pageWidth, doc->PageOri, doc->m_pageSize, true);
  3774. }
  3775. else
  3776. {
  3777. startPage = doc->currentPage()->pageNr() + 1;
  3778. if (nrToImport > (doc->DocPages.count() - doc->currentPage()->pageNr()))
  3779. {
  3780. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  3781. int scmReturn=ScMessageBox::information(this, tr("Import Page(s)"), "<qt>" +
  3782. QObject::tr("<p>You are trying to import more pages than there are available in the current document counting from the active page.</p>Choose one of the following:<br>"
  3783. "<ul><li><b>Create</b> missing pages</li>"
  3784. "<li><b>Import</b> pages until the last page</li>"
  3785. "<li><b>Cancel</b></li></ul>") + "</qt>",
  3786. QObject::tr("C&reate"),
  3787. QObject::tr("&Import"),
  3788. CommonStrings::tr_Cancel, 2, 2);
  3789. switch( scmReturn )
  3790. {
  3791. case 0:
  3792. addNewPages(doc->DocPages.count(), 2,
  3793. nrToImport - (doc->DocPages.count() - doc->currentPage()->pageNr()),
  3794. doc->pageHeight, doc->pageWidth, doc->PageOri, doc->m_pageSize, true);
  3795. break;
  3796. case 1:
  3797. nrToImport = doc->DocPages.count() - doc->currentPage()->pageNr();
  3798. break;
  3799. case 2:
  3800. doIt = false;
  3801. mainWindowStatusLabel->setText("");
  3802. break;
  3803. }
  3804. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  3805. }
  3806. }
  3807. if (doIt)
  3808. {
  3809. if (nrToImport > 0)
  3810. {
  3811. mainWindowProgressBar->reset();
  3812. mainWindowProgressBar->setMaximum(nrToImport);
  3813. int counter = startPage;
  3814. for (int i = 0; i < nrToImport; ++i)
  3815. {
  3816. view->GotoPa(counter);
  3817. loadPage(dia->getFromDoc(), pageNs[i] - 1, false);
  3818. counter++;
  3819. mainWindowProgressBar->setValue(i + 1);
  3820. }
  3821. view->GotoPa(startPage);
  3822. mainWindowProgressBar->reset();
  3823. mainWindowStatusLabel->setText( tr("Import done"));
  3824. }
  3825. else
  3826. {
  3827. mainWindowStatusLabel->setText( tr("Found nothing to import"));
  3828. doIt = false;
  3829. }
  3830. }
  3831. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  3832. ret = doIt;
  3833. }
  3834. delete dia;
  3835. return ret;
  3836. }
  3837.  
  3838. bool ScribusMainWindow::loadPage(QString fileName, int Nr, bool Mpa, const QString& renamedPageName)
  3839. {
  3840. bool ret = false;
  3841. if (!fileName.isEmpty())
  3842. {
  3843. FileLoader *fl = new FileLoader(fileName);
  3844. if (fl->testFile() == -1)
  3845. {
  3846. delete fl;
  3847. return false;
  3848. }
  3849. doc->setLoading(true);
  3850. uint oldItemsCount = doc->Items->count();
  3851. if(!fl->loadPage(doc, Nr, Mpa, renamedPageName))
  3852. {
  3853. delete fl;
  3854. doc->setLoading(false);
  3855. return false;
  3856. }
  3857. delete fl;
  3858. if (ScCore->haveCMS() && doc->CMSSettings.CMSinUse)
  3859. {
  3860. recalcColors();
  3861. doc->RecalcPictures(&ScCore->InputProfiles, &ScCore->InputProfilesCMYK);
  3862. }
  3863. uint docItemsCount=doc->Items->count();
  3864. for (uint i = oldItemsCount; i < docItemsCount; ++i)
  3865. {
  3866. PageItem *ite = doc->Items->at(i);
  3867. // if ((docItemsCount - oldItemsCount) > 1)
  3868. // ite->Groups.push(doc->GroupCounter);
  3869. // #5386: allow locked imported items to remain locked
  3870. // if (ite->locked())
  3871. // ite->setLocked(false);
  3872. if ((ite->asTextFrame()) && (ite->isBookmark))
  3873. AddBookMark(ite);
  3874. }
  3875. // if ((docItemsCount - oldItemsCount) > 1)
  3876. // doc->GroupCounter++;
  3877. propertiesPalette->updateColorList();
  3878. propertiesPalette->paraStyleCombo->setDoc(doc);
  3879. propertiesPalette->charStyleCombo->setDoc(doc);
  3880. propertiesPalette->SetLineFormats(doc);
  3881. propertiesPalette->startArrow->rebuildList(&doc->arrowStyles);
  3882. propertiesPalette->endArrow->rebuildList(&doc->arrowStyles);
  3883. // if (!Mpa)
  3884. // {
  3885. // scanDocument();
  3886. // docCheckerPalette->buildErrorList(doc);
  3887. // }
  3888. slotDocCh();
  3889. rebuildLayersList();
  3890. view->updateLayerMenu();
  3891. layerPalette->rebuildList();
  3892. doc->setLoading(false);
  3893. ret = true;
  3894. }
  3895. if (!Mpa)
  3896. pagePalette->Rebuild();
  3897. view->reformPages();
  3898. view->DrawNew();
  3899. return ret;
  3900. }
  3901.  
  3902. bool ScribusMainWindow::loadDoc(QString fileName)
  3903. {
  3904. undoManager->setUndoEnabled(false);
  3905. QFileInfo fi(fileName);
  3906. if (!fi.exists())
  3907. {
  3908. QMessageBox::warning(this, CommonStrings::trWarning, tr("File does not exist on the specified path :\n%1").arg(QDir::toNativeSeparators(fileName)),
  3909. CommonStrings::tr_OK);
  3910. return false;
  3911. }
  3912. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  3913. if (HaveDoc)
  3914. outlinePalette->buildReopenVals();
  3915. bool ret = false;
  3916. QWidgetList windows = wsp->windowList();
  3917. ScribusWin* ActWinOld = NULL;
  3918. if (windows.count() != 0)
  3919. ActWinOld = ActWin;
  3920.  
  3921. // PV - 5780: Scribus doesn't track what documents are already opened
  3922. // The goal of this part of code is to disallow user to open one
  3923. // doc multiple times.
  3924. QString platfName(QDir::toNativeSeparators(fileName));
  3925. uint windowCount = windows.count();
  3926. for ( uint i = 0; i < windowCount; ++i )
  3927. {
  3928. QString docNameUnmodified(windows.at(i)->windowTitle());
  3929. ScribusWin * mx = qobject_cast<ScribusWin*>(windows.at(i));
  3930. if (mx && mx->doc()->isModified() && docNameUnmodified.endsWith("*"))
  3931. docNameUnmodified.resize(docNameUnmodified.length() - 1);
  3932.  
  3933. if (docNameUnmodified == platfName)
  3934. {
  3935. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  3936. QMessageBox::information(this, tr("Document is already opened"),
  3937. tr("This document is already in use."
  3938. "You'll be switched into its window now."));
  3939. windowsMenuActivated(i);
  3940. return true;
  3941. }
  3942. }
  3943.  
  3944. if (!fileName.isEmpty())
  3945. {
  3946. QString FName = fi.absoluteFilePath();
  3947. FileLoader *fileLoader = new FileLoader(FName);
  3948. int testResult = fileLoader->testFile();
  3949. if (testResult == -1)
  3950. {
  3951. delete fileLoader;
  3952. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  3953. QString title = tr("Fatal Error") ;
  3954. QString msg = "<qt>"+ tr("File %1 is not in an acceptable format").arg(FName)+"</qt>";
  3955. QString infoMsg = "<qt>" + tr("The file may be damaged or may have been produced in a later version of Scribus.") + "</qt>";
  3956. QMessageBox msgBox(QMessageBox::Critical, title, msg, QMessageBox::Ok | QMessageBox::Help, this);
  3957. msgBox.setInformativeText(infoMsg);
  3958. int i=msgBox.exec();
  3959. if (i==QMessageBox::Help)
  3960. slotOnlineHelp("", "fileproblems.html");
  3961. return false;
  3962. }
  3963. bool is12doc=false;
  3964. if (testResult == 0)
  3965. {
  3966. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  3967. //Scribus 1.3.x warning, remove at a later stage
  3968. is12doc=true;
  3969. }
  3970.  
  3971. ScCore->getCMSProfilesDir(fi.absolutePath()+"/", false, false);
  3972. prefsManager->appPrefs.AvailFonts.AddScalableFonts(fi.absolutePath()+"/", FName);
  3973. prefsManager->appPrefs.AvailFonts.updateFontMap();
  3974. doc=new ScribusDoc();
  3975. doc->is12doc=is12doc;
  3976. doc->appMode = modeNormal;
  3977. doc->HasCMS = false;
  3978. //doc->setActiveLayer(0); //CB should not need this, the file load process sets it to ALAYER from the doc
  3979. doc->OpenNodes.clear();
  3980. doc->setLoading(true);
  3981. mainWindowStatusLabel->setText( tr("Loading..."));
  3982. mainWindowProgressBar->reset();
  3983. ScribusWin* w = new ScribusWin(wsp, doc);
  3984. w->setMainWindow(this);
  3985. view = new ScribusView(w, this, doc);
  3986. doc->setGUI(true, this, view);
  3987. view->setScale(prefsManager->displayScale());
  3988. w->setView(view);
  3989. alignDistributePalette->setDoc(doc);
  3990. ActWin = w;
  3991. doc->WinHan = w;
  3992. wsp->addWindow(w);
  3993. w->setUpdatesEnabled(false);
  3994. view->updatesOn(false);
  3995. doc->SoftProofing = false;
  3996. doc->Gamut = false;
  3997. setScriptRunning(true);
  3998. bool loadSuccess = fileLoader->loadFile(doc);
  3999. //Do the font replacement check from here, when we have a GUI. TODO do this also somehow without the GUI
  4000. //This also gives the user the opportunity to cancel the load when finding theres a replacement required.
  4001. if (loadSuccess && ScCore->usingGUI())
  4002. loadSuccess = fileLoader->postLoad(doc);
  4003. if(!loadSuccess)
  4004. {
  4005. view->close();
  4006. delete fileLoader;
  4007. // delete view;
  4008. delete doc;
  4009. delete w;
  4010. view=NULL;
  4011. doc=NULL;
  4012. setScriptRunning(false);
  4013. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  4014. mainWindowStatusLabel->setText("");
  4015. mainWindowProgressBar->reset();
  4016. ActWin = NULL;
  4017. undoManager->setUndoEnabled(true);
  4018. if (windows.count() != 0)
  4019. newActWin(ActWinOld);
  4020. return false;
  4021. }
  4022. outlinePalette->setDoc(doc);
  4023. fileLoader->informReplacementFonts();
  4024. setCurrentComboItem(view->unitSwitcher, unitGetStrFromIndex(doc->unitIndex()));
  4025. view->unitChange();
  4026. setScriptRunning(false);
  4027. view->Deselect(true);
  4028. mainWindowStatusLabel->setText("");
  4029. mainWindowProgressBar->reset();
  4030. HaveDoc++;
  4031. if (doc->checkerProfiles.count() == 0)
  4032. {
  4033. prefsManager->initDefaultCheckerPrefs(&doc->checkerProfiles);
  4034. doc->curCheckProfile = CommonStrings::PostScript;
  4035. }
  4036. if (doc->PDF_Options.LPISettings.count() == 0)
  4037. {
  4038. struct LPIData lpo;
  4039. lpo.Frequency = 133;
  4040. lpo.SpotFunc = 3;
  4041. lpo.Angle = 105;
  4042. doc->PDF_Options.LPISettings.insert("Cyan", lpo);
  4043. lpo.Angle = 75;
  4044. doc->PDF_Options.LPISettings.insert("Magenta", lpo);
  4045. lpo.Angle = 90;
  4046. doc->PDF_Options.LPISettings.insert("Yellow", lpo);
  4047. lpo.Angle = 45;
  4048. doc->PDF_Options.LPISettings.insert("Black", lpo);
  4049. }
  4050.  
  4051. if (!doc->CMSSettings.CMSinUse)
  4052. doc->HasCMS = false;
  4053. if ((ScCore->haveCMS()) && (doc->CMSSettings.CMSinUse))
  4054. {
  4055. bool cmsWarning = false;
  4056. QStringList missing;
  4057. QStringList replacement;
  4058. if (!ScCore->InputProfiles.contains(doc->CMSSettings.DefaultImageRGBProfile))
  4059. {
  4060. cmsWarning = true;
  4061. missing.append(doc->CMSSettings.DefaultImageRGBProfile);
  4062. replacement.append(prefsManager->appPrefs.DCMSset.DefaultImageRGBProfile);
  4063. doc->CMSSettings.DefaultImageRGBProfile = prefsManager->appPrefs.DCMSset.DefaultImageRGBProfile;
  4064. }
  4065. if (!ScCore->InputProfilesCMYK.contains(doc->CMSSettings.DefaultImageCMYKProfile))
  4066. {
  4067. cmsWarning = true;
  4068. missing.append(doc->CMSSettings.DefaultImageCMYKProfile);
  4069. replacement.append(prefsManager->appPrefs.DCMSset.DefaultImageCMYKProfile);
  4070. doc->CMSSettings.DefaultImageCMYKProfile = prefsManager->appPrefs.DCMSset.DefaultImageCMYKProfile;
  4071. }
  4072. if (!ScCore->InputProfiles.contains(doc->CMSSettings.DefaultSolidColorRGBProfile))
  4073. {
  4074. cmsWarning = true;
  4075. missing.append(doc->CMSSettings.DefaultSolidColorRGBProfile);
  4076. replacement.append(prefsManager->appPrefs.DCMSset.DefaultSolidColorRGBProfile);
  4077. doc->CMSSettings.DefaultSolidColorRGBProfile = prefsManager->appPrefs.DCMSset.DefaultSolidColorRGBProfile;
  4078. }
  4079. if (!ScCore->InputProfilesCMYK.contains(doc->CMSSettings.DefaultSolidColorCMYKProfile))
  4080. {
  4081. cmsWarning = true;
  4082. missing.append(doc->CMSSettings.DefaultSolidColorCMYKProfile);
  4083. replacement.append(prefsManager->appPrefs.DCMSset.DefaultSolidColorCMYKProfile);
  4084. doc->CMSSettings.DefaultSolidColorCMYKProfile = prefsManager->appPrefs.DCMSset.DefaultSolidColorCMYKProfile;
  4085. }
  4086. if (!ScCore->MonitorProfiles.contains(doc->CMSSettings.DefaultMonitorProfile))
  4087. {
  4088. cmsWarning = true;
  4089. missing.append(doc->CMSSettings.DefaultMonitorProfile);
  4090. replacement.append(prefsManager->appPrefs.DCMSset.DefaultMonitorProfile);
  4091. doc->CMSSettings.DefaultMonitorProfile = prefsManager->appPrefs.DCMSset.DefaultMonitorProfile;
  4092. }
  4093. if (!ScCore->PrinterProfiles.contains(doc->CMSSettings.DefaultPrinterProfile))
  4094. {
  4095. cmsWarning = true;
  4096. missing.append(doc->CMSSettings.DefaultPrinterProfile);
  4097. replacement.append(prefsManager->appPrefs.DCMSset.DefaultPrinterProfile);
  4098. doc->CMSSettings.DefaultPrinterProfile = prefsManager->appPrefs.DCMSset.DefaultPrinterProfile;
  4099. }
  4100. if (!ScCore->PrinterProfiles.contains(doc->PDF_Options.PrintProf))
  4101. {
  4102. cmsWarning = true;
  4103. missing.append(doc->PDF_Options.PrintProf);
  4104. replacement.append(prefsManager->appPrefs.DCMSset.DefaultPrinterProfile);
  4105. doc->PDF_Options.PrintProf = doc->CMSSettings.DefaultPrinterProfile;
  4106. }
  4107. if (!ScCore->InputProfiles.contains(doc->PDF_Options.ImageProf))
  4108. {
  4109. cmsWarning = true;
  4110. missing.append(doc->PDF_Options.ImageProf);
  4111. replacement.append(prefsManager->appPrefs.DCMSset.DefaultImageRGBProfile);
  4112. doc->PDF_Options.ImageProf = doc->CMSSettings.DefaultImageRGBProfile;
  4113. }
  4114. if (!ScCore->InputProfiles.contains(doc->PDF_Options.SolidProf))
  4115. {
  4116. cmsWarning = true;
  4117. missing.append(doc->PDF_Options.SolidProf);
  4118. replacement.append(prefsManager->appPrefs.DCMSset.DefaultSolidColorRGBProfile);
  4119. doc->PDF_Options.SolidProf = doc->CMSSettings.DefaultSolidColorRGBProfile;
  4120. }
  4121. if (cmsWarning)
  4122. {
  4123. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  4124. QString mess = tr("Some color profiles used by this document are not installed:")+"\n\n";
  4125. for (int m = 0; m < missing.count(); ++m)
  4126. {
  4127. mess += missing[m] + tr(" was replaced by: ")+replacement[m]+"\n";
  4128. }
  4129. QMessageBox::warning(this, CommonStrings::trWarning, mess, 1, 0, 0);
  4130. }
  4131. doc->SoftProofing = doc->CMSSettings.SoftProofOn;
  4132. doc->Gamut = doc->CMSSettings.GamutCheck;
  4133. doc->IntentColors = doc->CMSSettings.DefaultIntentColors;
  4134. doc->IntentImages = doc->CMSSettings.DefaultIntentImages;
  4135. if (doc->OpenCMSProfiles(ScCore->InputProfiles, ScCore->InputProfilesCMYK, ScCore->MonitorProfiles, ScCore->PrinterProfiles))
  4136. {
  4137. doc->HasCMS = true;
  4138. doc->PDF_Options.SComp = doc->CMSSettings.ComponentsInput2;
  4139. }
  4140. else
  4141. {
  4142. doc->SetDefaultCMSParams();
  4143. doc->HasCMS = false;
  4144. }
  4145. if (doc->HasCMS)
  4146. {
  4147. recalcColors();
  4148. doc->RecalcPictures(&ScCore->InputProfiles, &ScCore->InputProfilesCMYK);
  4149. }
  4150. }
  4151. else
  4152. {
  4153. doc->CMSSettings.CMSinUse = false;
  4154. }
  4155. // propertiesPalette->updateColorList();
  4156. // propertiesPalette->Cpal->ChooseGrad(0);
  4157. if (fileLoader->fileType() > FORMATID_NATIVEIMPORTEND)
  4158. {
  4159. doc->setName(FName+ tr("(converted)"));
  4160. QFileInfo fi(doc->DocName);
  4161. doc->setName(fi.fileName());
  4162. }
  4163. else
  4164. doc->setName(FName);
  4165. doc->setMasterPageMode(false);
  4166. doc->Language = GetLang(doc->Language);
  4167. HaveNewDoc();
  4168. // propertiesPalette->Cpal->ChooseGrad(0);
  4169. // propertiesPalette->updateCList();
  4170. doc->hasName = true;
  4171. if (doc->MasterPages.count() == 0)
  4172. doc->addMasterPage(0, CommonStrings::masterPageNormal);
  4173. //Add doc sections if we have none
  4174. if (doc->sections.count()==0)
  4175. {
  4176. doc->addSection(-1);
  4177. doc->setFirstSectionFromFirstPageNumber();
  4178. }
  4179. doc->RePos = true;
  4180. doc->setMasterPageMode(true);
  4181. doc->reformPages();
  4182. doc->refreshGuides();
  4183. doc->setLoading(false);
  4184. for (int azz=0; azz<doc->MasterItems.count(); ++azz)
  4185. {
  4186. PageItem *ite = doc->MasterItems.at(azz);
  4187. // TODO fix that for Groups on Masterpages
  4188. // if (ite->Groups.count() != 0)
  4189. // view->GroupOnPage(ite);
  4190. // qDebug() << QString("load M: %1 %2 %3").arg(azz).arg((uint)ite).arg(ite->itemType());
  4191. ite->layout();
  4192. }
  4193. // RestoreBookMarks();
  4194. doc->setMasterPageMode(false);
  4195. /*QTime t;
  4196. t.start();*/
  4197. int docItemsCount=doc->Items->count();
  4198. for (int azz=0; azz<docItemsCount; ++azz)
  4199. {
  4200. PageItem *ite = doc->Items->at(azz);
  4201. // qDebug() << QString("load D: %1 %2 %3").arg(azz).arg((uint)ite).arg(ite->itemType());
  4202. if(ite->nextInChain() == NULL)
  4203. ite->layout();
  4204. }
  4205. for (int azz=0; azz<doc->FrameItems.count(); ++azz)
  4206. {
  4207. PageItem *ite = doc->FrameItems.at(azz);
  4208. // qDebug() << QString("load F: %1 %2 %3").arg(azz).arg((uint)ite).arg(ite->itemType());
  4209. if(ite->nextInChain() == NULL)
  4210. ite->layout();
  4211. }
  4212. /*qDebug("Time elapsed: %d ms", t.elapsed());*/
  4213. doc->RePos = false;
  4214. doc->setModified(false);
  4215. updateRecent(FName);
  4216. mainWindowStatusLabel->setText( tr("Ready"));
  4217. ret = true;
  4218. doc->setLoading(true);
  4219. for (int p = 0; p < doc->DocPages.count(); ++p)
  4220. {
  4221. Apply_MasterPage(doc->DocPages.at(p)->MPageNam, p, false);
  4222. }
  4223. view->reformPages(false);
  4224. doc->setLoading(false);
  4225. /* if (fileLoader->FileType > FORMATID_NATIVEIMPORTEND)
  4226. {
  4227. doc->hasName = false;
  4228. slotFileSaveAs();
  4229. } */
  4230. delete fileLoader;
  4231. view->updatesOn(true);
  4232. w->setUpdatesEnabled(true);
  4233. disconnect(wsp, SIGNAL(windowActivated(QWidget *)), this, SLOT(newActWin(QWidget *)));
  4234. if ((wsp->windowList().isEmpty()) || (wsp->windowList().count() == 1))
  4235. w->showMaximized();
  4236. else
  4237. w->show();
  4238. view->show();
  4239. newActWin(w);
  4240. doc->setCurrentPage(doc->DocPages.at(0));
  4241. view->cmsToolbarButton->setChecked(doc->HasCMS);
  4242. view->zoom();
  4243. view->GotoPage(0);
  4244. connect(wsp, SIGNAL(windowActivated(QWidget *)), this, SLOT(newActWin(QWidget *)));
  4245. connect(w, SIGNAL(AutoSaved()), this, SLOT(slotAutoSaved()));
  4246. connect(ScCore->fileWatcher, SIGNAL(fileChanged(QString )), doc, SLOT(updatePict(QString)));
  4247. connect(ScCore->fileWatcher, SIGNAL(fileDeleted(QString )), doc, SLOT(removePict(QString)));
  4248. connect(ScCore->fileWatcher, SIGNAL(dirChanged(QString )), doc, SLOT(updatePictDir(QString )));
  4249. connect(undoManager, SIGNAL(undoRedoBegin()), doc, SLOT(undoRedoBegin()));
  4250. connect(undoManager, SIGNAL(undoRedoDone()), doc, SLOT(undoRedoDone()));
  4251. connect(undoManager, SIGNAL(undoRedoDone()), view, SLOT(DrawNew()));
  4252. doc->connectDocSignals();
  4253. if (doc->AutoSave)
  4254. doc->autoSaveTimer->start(doc->AutoSaveTime);
  4255. // scrActions["fileSave"]->setEnabled(false);
  4256. doc->NrItems = bookmarkPalette->BView->NrItems;
  4257. doc->First = bookmarkPalette->BView->First;
  4258. doc->Last = bookmarkPalette->BView->Last;
  4259. }
  4260. else
  4261. {
  4262. pagePalette->setView(0);
  4263. }
  4264. undoManager->switchStack(doc->DocName);
  4265. pagePalette->Rebuild();
  4266. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  4267. undoManager->setUndoEnabled(true);
  4268. doc->setModified(false);
  4269. return ret;
  4270. }
  4271.  
  4272. bool ScribusMainWindow::postLoadDoc()
  4273. {
  4274. //FIXME Just return for now, if we arent using the GUI
  4275. if (!ScCore->usingGUI())
  4276. return false;
  4277. return true;
  4278. }
  4279.  
  4280. // This method was once named slotFileOpen(...) but it hasn't had anything to
  4281. // do with file->open for a LONG time. It's used for get text / get picture.
  4282. void ScribusMainWindow::slotGetContent()
  4283. {
  4284. if (doc->m_Selection->count() != 0)
  4285. {
  4286. PageItem *currItem = doc->m_Selection->itemAt(0);
  4287. if (currItem->itemType() == PageItem::ImageFrame)
  4288. {
  4289. QString formatD(FormatsManager::instance()->fileDialogFormatList(FormatsManager::IMAGESIMGFRAME));
  4290.  
  4291. QString docDir = ".";
  4292. QString prefsDocDir=prefsManager->documentDir();
  4293. if (!prefsDocDir.isEmpty())
  4294. docDir = prefsManager->prefsFile->getContext("dirs")->get("images", prefsDocDir);
  4295. else
  4296. docDir = prefsManager->prefsFile->getContext("dirs")->get("images", ".");
  4297. QString fileName = CFileDialog( docDir, tr("Open"), formatD, "", fdShowPreview | fdExistingFiles);
  4298. if (!fileName.isEmpty())
  4299. {
  4300. prefsManager->prefsFile->getContext("dirs")->set("images", fileName.left(fileName.lastIndexOf("/")));
  4301. currItem->EmProfile = "";
  4302. currItem->pixm.imgInfo.isRequest = false;
  4303. currItem->UseEmbedded = true;
  4304. currItem->IProfile = doc->CMSSettings.DefaultImageRGBProfile;
  4305. currItem->IRender = doc->CMSSettings.DefaultIntentImages;
  4306. qApp->changeOverrideCursor( QCursor(Qt::WaitCursor) );
  4307. qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
  4308. doc->LoadPict(fileName, currItem->ItemNr, false, true);
  4309. //view->AdjustPictScale(currItem, false);
  4310. //false was ignored anyway
  4311. currItem->AdjustPictScale();
  4312. propertiesPalette->setScaleAndOffset(currItem->imageXScale(), currItem->imageYScale(), currItem->imageXOffset(), currItem->imageYOffset());
  4313. qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
  4314. view->DrawNew();
  4315. propertiesPalette->updateColorList();
  4316. propertiesPalette->ShowCMS();
  4317. currItem->emitAllToGUI();
  4318. }
  4319. }
  4320. if (currItem->asTextFrame())
  4321. {
  4322. gtGetText* gt = new gtGetText(doc);
  4323. ImportSetup impsetup=gt->run();
  4324. if (impsetup.runDialog)
  4325. {
  4326. currItem->itemTextSaxed = currItem->getItemTextSaxed(PageItem::FRAME);
  4327. if (currItem->itemText.length() != 0)
  4328. {
  4329. int t = QMessageBox::warning(this, CommonStrings::trWarning, tr("Do you really want to clear all your text?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
  4330. if (t == QMessageBox::No)
  4331. return;
  4332. }
  4333. gt->launchImporter(impsetup.importer, impsetup.filename, impsetup.textOnly, impsetup.encoding, false);
  4334. currItem->asTextFrame()->updateUndo();
  4335. }
  4336. delete gt;
  4337. if (doc->docHyphenator->AutoCheck)
  4338. doc->docHyphenator->slotHyphenate(currItem);
  4339. for (int a = 0; a < doc->Items->count(); ++a)
  4340. {
  4341. if (doc->Items->at(a)->isBookmark)
  4342. bookmarkPalette->BView->ChangeText(doc->Items->at(a));
  4343. }
  4344. view->DrawNew();
  4345. slotDocCh();
  4346. styleManager->setDoc(doc);
  4347. }
  4348. }
  4349. }
  4350.  
  4351. void ScribusMainWindow::slotGetContent2() // kk2006
  4352. {
  4353. if (doc->m_Selection->count() == 0)
  4354. return; // nothing to do, no selection
  4355.  
  4356. PageItem *currItem = doc->m_Selection->itemAt(0);
  4357.  
  4358. if (!currItem->asTextFrame())
  4359. return; // not a text frame
  4360. // I dont know what is doing here, but Undo dont hurts
  4361. currItem->itemTextSaxed = currItem->getItemTextSaxed(PageItem::FRAME);
  4362. ScGTPluginManager::instance()->run();
  4363. if (doc->docHyphenator->AutoCheck)
  4364. doc->docHyphenator->slotHyphenate(currItem);
  4365. for (int a = 0; a < doc->Items->count(); ++a)
  4366. {
  4367. if (doc->Items->at(a)->isBookmark)
  4368. bookmarkPalette->BView->ChangeText(doc->Items->at(a));
  4369. }
  4370. currItem->asTextFrame()->updateUndo();
  4371. view->DrawNew();
  4372. slotDocCh();
  4373. }
  4374.  
  4375. void ScribusMainWindow::slotGetClipboardImage()
  4376. {
  4377. if (HaveDoc && (doc->m_Selection->count() != 0) && (QApplication::clipboard()->mimeData()->hasImage()))
  4378. {
  4379. PageItem *currItem = doc->m_Selection->itemAt(0);
  4380. if (currItem->itemType() == PageItem::ImageFrame)
  4381. {
  4382. int t = QMessageBox::Yes;
  4383. if (currItem->PictureIsAvailable)
  4384. t = QMessageBox::warning(this, CommonStrings::trWarning, tr("Do you really want to replace your existing image?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
  4385. if (t == QMessageBox::Yes)
  4386. {
  4387. QImage img = QApplication::clipboard()->image();
  4388. if (!img.isNull())
  4389. {
  4390. currItem->EmProfile = "";
  4391. currItem->pixm.imgInfo.isRequest = false;
  4392. currItem->UseEmbedded = true;
  4393. currItem->IProfile = doc->CMSSettings.DefaultImageRGBProfile;
  4394. currItem->IRender = doc->CMSSettings.DefaultIntentImages;
  4395. qApp->changeOverrideCursor( QCursor(Qt::WaitCursor) );
  4396. qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
  4397. currItem->tempImageFile = new QTemporaryFile(QDir::tempPath() + "/scribus_temp_XXXXXX.png");
  4398. currItem->tempImageFile->open();
  4399. QString fileName = getLongPathName(currItem->tempImageFile->fileName());
  4400. currItem->tempImageFile->close();
  4401. currItem->isInlineImage = true;
  4402. currItem->Pfile = fileName;
  4403. img.save(fileName, "PNG");
  4404. doc->LoadPict(fileName, currItem->ItemNr, false, true);
  4405. currItem->AdjustPictScale();
  4406. propertiesPalette->setScaleAndOffset(currItem->imageXScale(), currItem->imageYScale(), currItem->imageXOffset(), currItem->imageYOffset());
  4407. qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
  4408. view->DrawNew();
  4409. propertiesPalette->updateColorList();
  4410. propertiesPalette->ShowCMS();
  4411. currItem->emitAllToGUI();
  4412. }
  4413. }
  4414. }
  4415. }
  4416. }
  4417.  
  4418. void ScribusMainWindow::slotFileAppend()
  4419. {
  4420. if (doc->m_Selection->count() != 0)
  4421. {
  4422. gtGetText* gt = new gtGetText(doc);
  4423. ImportSetup impsetup=gt->run();
  4424. if (impsetup.runDialog)
  4425. {
  4426. PageItem *currItem = doc->m_Selection->itemAt(0);
  4427. currItem->itemTextSaxed = currItem->getItemTextSaxed(PageItem::FRAME);
  4428. gt->launchImporter(impsetup.importer, impsetup.filename, impsetup.textOnly, impsetup.encoding, true);
  4429. currItem->asTextFrame()->updateUndo();
  4430. }
  4431. delete gt;
  4432. //CB Hyphenating now emits doc changed, plus we change lang as appropriate
  4433. if (doc->docHyphenator->AutoCheck)
  4434. doc->itemSelection_DoHyphenate();
  4435. //doc->docHyphenator->slotHyphenate(doc->m_Selection->itemAt(0));
  4436. view->DrawNew();
  4437. //slotDocCh();
  4438. }
  4439. }
  4440.  
  4441. void ScribusMainWindow::slotFileRevert()
  4442. {
  4443. if ((doc->hasName) && (doc->isModified()) && (!doc->masterPageMode()))
  4444. {
  4445. int t = QMessageBox::warning(this, CommonStrings::trWarning, "<qt>" +
  4446. QObject::tr("The changes to your document have not been saved and you have requested to revert them. Do you wish to continue?") + "</qt>",
  4447. QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
  4448. if (t == QMessageBox::No)
  4449. return;
  4450.  
  4451. QString fn(doc->DocName);
  4452. doc->setModified(false);
  4453. if (doc==storyEditor->currentDocument())
  4454. storyEditor->close();
  4455. slotFileClose();
  4456. qApp->processEvents();
  4457. loadDoc(fn);
  4458. }
  4459. }
  4460.  
  4461. void ScribusMainWindow::slotAutoSaved()
  4462. {
  4463. if (ActWin == sender())
  4464. updateActiveWindowCaption(doc->DocName);
  4465. }
  4466.  
  4467. bool ScribusMainWindow::slotFileSave()
  4468. {
  4469. bool ret = false;
  4470. if (doc->hasName)
  4471. {
  4472. //Scribus 1.3.x warning, remove at a later stage
  4473. if (doc->is12doc && !warningVersion(this))
  4474. return false;
  4475.  
  4476. QString fn(doc->DocName), savedFileName;
  4477. ret = DoFileSave(fn, &savedFileName);
  4478. if (!ret && !savedFileName.isEmpty())
  4479. QMessageBox::warning(this, CommonStrings::trWarning, tr("Your document was saved to a temporary file and could not be moved: \n%1").arg( QDir::toNativeSeparators(savedFileName) ), CommonStrings::tr_OK);
  4480. else if (!ret)
  4481. QMessageBox::warning(this, CommonStrings::trWarning, tr("Cannot write the file: \n%1").arg( QDir::toNativeSeparators(fn) ), CommonStrings::tr_OK);
  4482. }
  4483. else
  4484. ret = slotFileSaveAs();
  4485. return ret;
  4486. }
  4487.  
  4488. bool ScribusMainWindow::slotFileSaveAs()
  4489. {
  4490. //Scribus 1.3.x warning, remove at a later stage
  4491. if (doc->is12doc)
  4492. if (!warningVersion(this))
  4493. return false;
  4494. //Turn off the warnings once the docs is saved.
  4495. doc->is12doc=false;
  4496. //
  4497. bool ret = false;
  4498. QString fna;
  4499. PrefsContext* docContext = prefsManager->prefsFile->getContext("docdirs", false);
  4500. QString wdir = ".";
  4501. if (doc->hasName)
  4502. {
  4503. QFileInfo fi(doc->DocName);
  4504. QString completeBaseName = fi.completeBaseName();
  4505. if (completeBaseName.endsWith(".sla", Qt::CaseInsensitive))
  4506. completeBaseName.chop(4);
  4507. else if (completeBaseName.endsWith(".gz", Qt::CaseInsensitive))
  4508. completeBaseName.chop(3);
  4509. wdir = QDir::fromNativeSeparators( fi.path() );
  4510. fna = QDir::fromNativeSeparators( fi.path()+"/"+completeBaseName+".sla" );
  4511. }
  4512. else
  4513. {
  4514. QString prefsDocDir=prefsManager->documentDir();
  4515. if (!prefsDocDir.isEmpty())
  4516. wdir = docContext->get("save_as", prefsDocDir);
  4517. else
  4518. wdir = docContext->get("save_as", ".");
  4519. wdir = QDir::fromNativeSeparators( wdir );
  4520. if (wdir.right(1) != "/")
  4521. fna = wdir + "/";
  4522. else
  4523. fna = wdir;
  4524. fna += doc->DocName + ".sla";
  4525. }
  4526. QString fileSpec=tr("Documents (*.sla *.sla.gz);;All Files (*)");
  4527. // bool setter=true;
  4528. int optionFlags = fdCompressFile | fdHidePreviewCheckBox;
  4529. QString fn = CFileDialog( wdir, tr("Save As"), fileSpec, fna, optionFlags);
  4530. if (!fn.isEmpty())
  4531. {
  4532. docContext->set("save_as", fn.left(fn.lastIndexOf("/")));
  4533. if ((fn.endsWith(".sla")) || (fn.endsWith(".sla.gz")))
  4534. fna = fn;
  4535. else
  4536. fna = fn+".sla";
  4537. if (overwrite(this, fna))
  4538. {
  4539. QString savedFileName;
  4540. ret = DoFileSave(fna, &savedFileName);
  4541. if (!ret && !savedFileName.isEmpty())
  4542. QMessageBox::warning(this, CommonStrings::trWarning, tr("Your document was saved to a temporary file and could not be moved: \n%1").arg( QDir::toNativeSeparators(savedFileName) ), CommonStrings::tr_OK);
  4543. else if (!ret)
  4544. QMessageBox::warning(this, CommonStrings::trWarning, tr("Cannot write the file: \n%1").arg( QDir::toNativeSeparators(fn) ), CommonStrings::tr_OK);
  4545. else
  4546. doc->PDF_Options.fileName = ""; // #1482 reset the pdf file name
  4547. }
  4548. }
  4549. mainWindowStatusLabel->setText( tr("Ready"));
  4550. return ret;
  4551. }
  4552.  
  4553. bool ScribusMainWindow::DoFileSave(const QString& fileName, QString* savedFileName)
  4554. {
  4555. ScCore->fileWatcher->forceScan();
  4556. ScCore->fileWatcher->stop();
  4557. doc->reorganiseFonts();
  4558. mainWindowStatusLabel->setText( tr("Saving..."));
  4559. mainWindowProgressBar->reset();
  4560. bool ret=doc->save(fileName, savedFileName);
  4561. qApp->processEvents();
  4562. if (ret)
  4563. {
  4564. updateActiveWindowCaption(fileName);
  4565. undoManager->renameStack(fileName);
  4566. // scrActions["fileSave"]->setEnabled(false);
  4567. scrActions["fileRevert"]->setEnabled(false);
  4568. updateRecent(fileName);
  4569. }
  4570. mainWindowStatusLabel->setText("");
  4571. mainWindowProgressBar->reset();
  4572. ScCore->fileWatcher->start();
  4573. return ret;
  4574. }
  4575.  
  4576. bool ScribusMainWindow::slotFileClose()
  4577. {
  4578. ScribusWin* tw = ActWin;
  4579. ActWin->close();
  4580. if (tw == ActWin)
  4581. return false;
  4582. else
  4583. return true;
  4584. windowsMenuAboutToShow();
  4585. }
  4586.  
  4587. bool ScribusMainWindow::DoFileClose()
  4588. {
  4589. view->Deselect(false);
  4590. if (doc==storyEditor->currentDocument())
  4591. storyEditor->close();
  4592. actionManager->disconnectNewDocActions();
  4593. actionManager->disconnectNewViewActions();
  4594. disconnect(view, SIGNAL(signalGuideInformation(int, qreal)), alignDistributePalette, SLOT(setGuide(int, qreal)));
  4595. /*CB currently unused
  4596. if (doc->viewCount > 1)
  4597. {
  4598. --doc->viewCount;
  4599. closeActiveWindowMasterPageEditor();
  4600. slotSelect();
  4601. disconnect(ScCore->fileWatcher, SIGNAL(fileChanged(QString )), doc, SLOT(updatePict(QString)));
  4602. disconnect(ScCore->fileWatcher, SIGNAL(fileDeleted(QString )), doc, SLOT(removePict(QString)));
  4603. view->close();
  4604. delete view;
  4605. view = NULL;
  4606. doc = NULL;
  4607. ActWin = NULL;
  4608. return true;
  4609. }*/
  4610. undoManager->removeStack(doc->DocName);
  4611. closeActiveWindowMasterPageEditor();
  4612. slotSelect();
  4613. doc->autoSaveTimer->stop();
  4614. ScCore->fileWatcher->stop();
  4615. disconnect(doc->autoSaveTimer, SIGNAL(timeout()), doc->WinHan, SLOT(slotAutoSave()));
  4616. disconnect(doc->WinHan, SIGNAL(AutoSaved()), this, SLOT(slotAutoSaved()));
  4617. disconnect(ScCore->fileWatcher, SIGNAL(fileChanged(QString )), doc, SLOT(updatePict(QString)));
  4618. disconnect(ScCore->fileWatcher, SIGNAL(fileDeleted(QString )), doc, SLOT(removePict(QString)));
  4619. disconnect(ScCore->fileWatcher, SIGNAL(dirChanged(QString )), doc, SLOT(updatePictDir(QString )));
  4620. for (int a = 0; a < doc->DocItems.count(); ++a)
  4621. {
  4622. PageItem *currItem = doc->DocItems.at(a);
  4623. if (currItem->PictureIsAvailable)
  4624. ScCore->fileWatcher->removeFile(currItem->Pfile);
  4625. if ((currItem->asImageFrame()) && (!currItem->Pfile.isEmpty()))
  4626. {
  4627. QFileInfo fi(currItem->Pfile);
  4628. ScCore->fileWatcher->removeDir(fi.absolutePath());
  4629. }
  4630. }
  4631. for (int a = 0; a < doc->MasterItems.count(); ++a)
  4632. {
  4633. PageItem *currItem = doc->MasterItems.at(a);
  4634. if (currItem->PictureIsAvailable)
  4635. ScCore->fileWatcher->removeFile(currItem->Pfile);
  4636. if ((currItem->asImageFrame()) && (!currItem->Pfile.isEmpty()))
  4637. {
  4638. QFileInfo fi(currItem->Pfile);
  4639. ScCore->fileWatcher->removeDir(fi.absolutePath());
  4640. }
  4641. }
  4642. for (int a = 0; a < doc->FrameItems.count(); ++a)
  4643. {
  4644. PageItem *currItem = doc->FrameItems.at(a);
  4645. if (currItem->PictureIsAvailable)
  4646. ScCore->fileWatcher->removeFile(currItem->Pfile);
  4647. if ((currItem->asImageFrame()) && (!currItem->Pfile.isEmpty()))
  4648. {
  4649. QFileInfo fi(currItem->Pfile);
  4650. ScCore->fileWatcher->removeDir(fi.absolutePath());
  4651. }
  4652. }
  4653. QStringList patterns = doc->docPatterns.keys();
  4654. for (int c = 0; c < patterns.count(); ++c)
  4655. {
  4656. ScPattern pa = doc->docPatterns[patterns[c]];
  4657. for (int o = 0; o < pa.items.count(); o++)
  4658. {
  4659. PageItem *currItem = pa.items.at(o);
  4660. if (currItem->PictureIsAvailable)
  4661. ScCore->fileWatcher->removeFile(currItem->Pfile);
  4662. if ((currItem->asImageFrame()) && (!currItem->Pfile.isEmpty()))
  4663. {
  4664. QFileInfo fi(currItem->Pfile);
  4665. ScCore->fileWatcher->removeDir(fi.absolutePath());
  4666. }
  4667. }
  4668. }
  4669. if (ScCore->haveCMS())
  4670. doc->CloseCMSProfiles();
  4671. //<<Palettes
  4672. // propertiesPalette->NewSel(-1);
  4673. propertiesPalette->unsetDoc();
  4674. pagePalette->setView(0);
  4675. pagePalette->Rebuild();
  4676. if (doc->appMode == modeEditClip)
  4677. view->requestMode(submodeEndNodeEdit);
  4678. bookmarkPalette->BView->clear();
  4679. bookmarkPalette->BView->NrItems = 0;
  4680. bookmarkPalette->BView->First = 1;
  4681. bookmarkPalette->BView->Last = 0;
  4682. outlinePalette->unsetDoc();
  4683. alignDistributePalette->setDoc(NULL);
  4684. //>>
  4685. if ((wsp->windowList().isEmpty()) || (wsp->windowList().count() == 1))
  4686. {
  4687. PluginManager& pluginManager(PluginManager::instance());
  4688. pluginManager.enableOnlyStartupPluginActions(this);
  4689. scrActions["fileDocSetup"]->setEnabled(false);
  4690. scrActions["filePrint"]->setEnabled(false);
  4691. scrActions["fileSave"]->setEnabled(false);
  4692. scrActions["fileSaveAs"]->setEnabled(false);
  4693. scrActions["fileRevert"]->setEnabled(false);
  4694. scrActions["fileCollect"]->setEnabled(false);
  4695. scrActions["fileClose"]->setEnabled(false);
  4696. scrActions["PrintPreview"]->setEnabled(false);
  4697. if (scrActions["SaveAsDocumentTemplate"])
  4698. scrActions["SaveAsDocumentTemplate"]->setEnabled(false);
  4699. scrMenuMgr->setMenuEnabled("FileImport", false);
  4700. scrMenuMgr->setMenuEnabled("FileExport", false);
  4701. scrActions["fileExportAsPDF"]->setEnabled(false);
  4702. scrActions["fileExportText"]->setEnabled(false);
  4703. scrActions["fileExportAsEPS"]->setEnabled(false);
  4704. scrActions["fileImportText"]->setEnabled(false);
  4705. scrActions["fileImportText2"]->setEnabled(false);
  4706. scrActions["fileImportImage"]->setEnabled(false);
  4707. scrActions["fileImportAppendText"]->setEnabled(false);
  4708. scrActions["pageImport"]->setEnabled(false);
  4709.  
  4710. scrActions["editUndoAction"]->setEnabled(false);
  4711. scrActions["editRedoAction"]->setEnabled(false);
  4712. scrActions["editCut"]->setEnabled(false);
  4713. scrActions["editCopy"]->setEnabled(false);
  4714. scrActions["editPaste"]->setEnabled(false);
  4715. scrMenuMgr->setMenuEnabled("EditPasteRecent", false);
  4716. scrActions["editClearContents"]->setEnabled(false);
  4717. scrActions["editSelectAll"]->setEnabled(false);
  4718. scrActions["editSelectAllOnLayer"]->setEnabled(false);
  4719. scrActions["editDeselectAll"]->setEnabled(false);
  4720. scrActions["editReplaceColors"]->setEnabled(false);
  4721. scrActions["editPatterns"]->setEnabled(false);
  4722. scrActions["editStyles"]->setEnabled(false);
  4723. scrActions["editSearchReplace"]->setEnabled(false);
  4724. scrActions["editMasterPages"]->setEnabled(false);
  4725. scrActions["editJavascripts"]->setEnabled(false);
  4726.  
  4727. //scrActions["toolsPreflightVerifier"]->setEnabled(false);
  4728.  
  4729. scrActions["extrasHyphenateText"]->setEnabled(false);
  4730. scrActions["extrasDeHyphenateText"]->setEnabled(false);
  4731. scrMenuMgr->setMenuEnabled("View", false);
  4732. //scrMenuMgr->setMenuEnabled("Windows", false);
  4733. scrActions["viewSnapToGuides"]->setChecked(false);
  4734. scrActions["viewSnapToGrid"]->setChecked(false);
  4735. scrActions["viewShowRulers"]->setEnabled(false);
  4736.  
  4737. scrMenuMgr->setMenuEnabled("Insert", false);
  4738. scrActions["insertFrame"]->setEnabled(false);
  4739. scrMenuMgr->setMenuEnabled("Page", false);
  4740. scrMenuMgr->setMenuEnabled("Extras", false);
  4741. scrMenuMgr->setMenuEnabled("Item", false);
  4742.  
  4743. scrActions["toolsSelect"]->setEnabled(false);
  4744. scrActions["toolsRotate"]->setEnabled(false);
  4745. scrActions["toolsEditContents"]->setEnabled(false);
  4746. scrActions["toolsEditWithStoryEditor"]->setEnabled(false);
  4747. scrActions["toolsZoom"]->setEnabled(false);
  4748. scrActions["toolsInsertTextFrame"]->setEnabled(false);
  4749. scrActions["toolsInsertImageFrame"]->setEnabled(false);
  4750. scrActions["toolsInsertTableFrame"]->setEnabled(false);
  4751. scrActions["toolsInsertShape"]->setEnabled(false);
  4752. scrActions["toolsInsertLine"]->setEnabled(false);
  4753. scrActions["toolsInsertBezier"]->setEnabled(false);
  4754. scrActions["toolsInsertFreehandLine"]->setEnabled(false);
  4755. scrActions["toolsInsertPolygon"]->setEnabled(false);
  4756. scrActions["toolsInsertRenderFrame"]->setEnabled(false);
  4757. scrActions["toolsLinkTextFrame"]->setEnabled(false);
  4758. scrActions["toolsUnlinkTextFrame"]->setEnabled(false);
  4759. scrActions["toolsMeasurements"]->setEnabled(false);
  4760. scrActions["toolsCopyProperties"]->setEnabled(false);
  4761. scrActions["toolsEyeDropper"]->setEnabled(false);
  4762. scrActions["toolsPDFPushButton"]->setEnabled(false);
  4763. scrActions["toolsPDFTextField"]->setEnabled(false);
  4764. scrActions["toolsPDFCheckBox"]->setEnabled(false);
  4765. scrActions["toolsPDFComboBox"]->setEnabled(false);
  4766. scrActions["toolsPDFListBox"]->setEnabled(false);
  4767. scrActions["toolsPDFAnnotText"]->setEnabled(false);
  4768. scrActions["toolsPDFAnnotLink"]->setEnabled(false);
  4769. //CB dont need this until we have a doc...
  4770. //propertiesPalette->Cpal->SetColors(prefsManager->colorSet());
  4771. propertiesPalette->Cpal->ChooseGrad(0);
  4772. mainWindowStatusLabel->setText( tr("Ready"));
  4773. PrinterUsed = false;
  4774. }
  4775. // Give plugins a chance to react on closing the document
  4776. PluginManager& pluginManager(PluginManager::instance());
  4777. QStringList pluginNames(pluginManager.pluginNames(false));
  4778. ScPlugin* plugin;
  4779. QString pName;
  4780. for (int i = 0; i < pluginNames.count(); ++i)
  4781. {
  4782. pName = pluginNames.at(i);
  4783. plugin = pluginManager.getPlugin(pName, true);
  4784. Q_ASSERT(plugin); // all the returned names should represent loaded plugins
  4785. plugin->unsetDoc();
  4786. }
  4787. QString fName(view->Doc->DocName);
  4788. view->close();
  4789. // delete view;
  4790. //CB Yes, we are setting it to NULL without deleting it. ActWin(ScribusWin) owns the view
  4791. //due to it being the central widget and will delete it at the correct moment from its own pointer.
  4792. view = NULL;
  4793. doc->setLoading(true);
  4794. guidePalette->setDoc(0);
  4795. charPalette->setDoc(0);
  4796. tocGenerator->setDoc(0);
  4797. styleManager->setDoc(0);
  4798. layerPalette->ClearInhalt();
  4799. docCheckerPalette->buildErrorList(0);
  4800. ScCore->fileWatcher->removeFile(fName);
  4801. HaveDoc--;
  4802. delete doc;
  4803. doc = NULL;
  4804. ActWin = NULL;
  4805. if ( HaveDoc == 0 )
  4806. {
  4807. QString prefsDocDir( PrefsManager::instance()->documentDir() );
  4808. if ( QDir().exists(prefsDocDir) )
  4809. QDir::setCurrent( PrefsManager::instance()->documentDir() );
  4810. else
  4811. QDir::setCurrent( QDir::homePath() );
  4812. }
  4813. ScCore->fileWatcher->start();
  4814. return true;
  4815. }
  4816.  
  4817. void ScribusMainWindow::slotFilePrint()
  4818. {
  4819. if (doc->checkerProfiles[doc->curCheckProfile].autoCheck)
  4820. {
  4821. if (scanDocument())
  4822. {
  4823. if (doc->checkerProfiles[doc->curCheckProfile].ignoreErrors)
  4824. {
  4825. int t = QMessageBox::warning(this, CommonStrings::trWarning,
  4826. "<qt>"+ tr("Scribus has detected some errors. Consider using the Preflight Verifier to correct them")+"</qt>",
  4827. QMessageBox::Abort | QMessageBox::Ignore);
  4828. if (t == QMessageBox::Abort)
  4829. return;
  4830. }
  4831. else
  4832. {
  4833. connect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(slotReallyPrint()));
  4834. docCheckerPalette->setIgnoreEnabled(true);
  4835. docCheckerPalette->checkMode = CheckDocument::checkPrint;
  4836. docCheckerPalette->buildErrorList(doc);
  4837. docCheckerPalette->show();
  4838. scrActions["toolsPreflightVerifier"]->setChecked(true);
  4839. return;
  4840. }
  4841. }
  4842. }
  4843. slotReallyPrint();
  4844. }
  4845.  
  4846. void ScribusMainWindow::slotReallyPrint()
  4847. {
  4848. bool done;
  4849. if (docCheckerPalette->isIgnoreEnabled())
  4850. {
  4851. docCheckerPalette->setIgnoreEnabled(false);
  4852. docCheckerPalette->hide();
  4853. docCheckerPalette->checkMode = CheckDocument::checkNULL;
  4854. scrActions["toolsPreflightVerifier"]->setChecked(false);
  4855. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(slotReallyPrint()));
  4856. }
  4857. QString printError;
  4858. PrintOptions options;
  4859. mainWindowStatusLabel->setText( tr("Printing..."));
  4860. if (doc->Print_Options.firstUse)
  4861. {
  4862. doc->Print_Options.printer = QString();
  4863. if (!doc->DocName.startsWith( tr("Document")))
  4864. {
  4865. QFileInfo fi(doc->DocName);
  4866. QString completeBaseName = fi.completeBaseName();
  4867. if (completeBaseName.endsWith(".sla", Qt::CaseInsensitive))
  4868. if (completeBaseName.length() > 4) completeBaseName.chop(4);
  4869. if (completeBaseName.endsWith(".gz", Qt::CaseInsensitive))
  4870. if (completeBaseName.length() > 3) completeBaseName.chop(3);
  4871. doc->Print_Options.filename = fi.path()+"/"+completeBaseName+".ps";
  4872. }
  4873. else
  4874. {
  4875. QDir di = QDir();
  4876. doc->Print_Options.filename = di.currentPath()+"/"+doc->DocName+".ps";
  4877. }
  4878. }
  4879. doc->Print_Options.copies = 1;
  4880. ColorList usedSpots;
  4881. doc->getUsedColors(usedSpots, true);
  4882. QStringList spots = usedSpots.keys();
  4883. PrintDialog *printer = new PrintDialog(this, doc, doc->Print_Options, prefsManager->appPrefs.GCRMode, spots);
  4884. #ifdef _HAIKU_
  4885. printer->setMinMax(1, doc->Pages->count(), doc->currentPage()->pageNr()+1);
  4886. #endif
  4887. printDinUse = true;
  4888. connect(printer, SIGNAL(doPreview()), this, SLOT(doPrintPreview()));
  4889. if (printer->exec())
  4890. {
  4891. ReOrderText(doc, view);
  4892. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  4893. doc->Print_Options.pageNumbers.clear();
  4894. if (printer->doPrintCurrentPage())
  4895. doc->Print_Options.pageNumbers.push_back(doc->currentPage()->pageNr()+1);
  4896. else
  4897. {
  4898. #ifdef _HAIKU_
  4899. if (printer->doPrintAll())
  4900. parsePagesString("*", &doc->Print_Options.pageNumbers, doc->DocPages.count());
  4901. else
  4902. parsePagesString(printer->getPageString(), &doc->Print_Options.pageNumbers, doc->DocPages.count());
  4903. #endif
  4904. }
  4905. PrinterUsed = true;
  4906. done = doPrint(doc->Print_Options, printError);
  4907. if (!done)
  4908. {
  4909. QString message = tr("Printing failed!");
  4910. if (!printError.isEmpty())
  4911. message += QString("\n%1").arg(printError);
  4912. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  4913. QMessageBox::warning(this, CommonStrings::trWarning, message, CommonStrings::tr_OK);
  4914. }
  4915. else
  4916. doc->Print_Options.firstUse = false;
  4917. getDefaultPrinter(PDef.Pname, PDef.Pname, PDef.Command);
  4918. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  4919. }
  4920. printDinUse = false;
  4921. disconnect(printer, SIGNAL(doPreview()), this, SLOT(doPrintPreview()));
  4922. delete printer;
  4923. mainWindowStatusLabel->setText( tr("Ready"));
  4924. }
  4925.  
  4926. bool ScribusMainWindow::doPrint(PrintOptions &options, QString& error)
  4927. {
  4928. bool printDone = false;
  4929. QString filename(options.filename);
  4930. if (options.toFile)
  4931. {
  4932. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  4933. if (!overwrite(this, filename))
  4934. {
  4935. return true;
  4936. }
  4937. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  4938. }
  4939. ScCore->fileWatcher->forceScan();
  4940. ScCore->fileWatcher->stop();
  4941. ScPrintEngine* prnEngine = NULL;
  4942. #if defined(_WIN32)
  4943. SHORT shiftState = GetKeyState( VK_SHIFT );
  4944. bool forceGDI = ( shiftState & 0x8000 ) ? true : false;
  4945. if (doc->Print_Options.toFile)
  4946. prnEngine = dynamic_cast<ScPrintEngine*>(new ScPrintEngine_PS());
  4947. else
  4948. {
  4949. ScPrintEngine_GDI* gdiEngine = new ScPrintEngine_GDI();
  4950. gdiEngine->setForceGDI( forceGDI );
  4951. prnEngine = dynamic_cast<ScPrintEngine*>(gdiEngine);
  4952. }
  4953. #else
  4954. prnEngine = dynamic_cast<ScPrintEngine*>(new ScPrintEngine_PS());
  4955. #endif
  4956. if (prnEngine)
  4957. {
  4958. printDone = prnEngine->print(*doc, options);
  4959. if (!printDone)
  4960. error = prnEngine->errorMessage();
  4961. delete prnEngine;
  4962. }
  4963. else
  4964. error = tr( "Print engine initialization failed");
  4965. ScCore->fileWatcher->start();
  4966. return printDone;
  4967. }
  4968.  
  4969. void ScribusMainWindow::slotFileQuit()
  4970. {
  4971. propertiesPalette->unsetDoc();
  4972. ScCore->pluginManager->savePreferences();
  4973. fileToolBar->connectPrefsSlot(false);
  4974. editToolBar->connectPrefsSlot(false);
  4975. modeToolBar->connectPrefsSlot(false);
  4976. pdfToolBar->connectPrefsSlot(false);
  4977. close();
  4978. }
  4979.  
  4980. /*
  4981. static bool hasXMLRootElem(const QString& buffer, const QString& elemtag)
  4982. {
  4983. return buffer.lastIndexOf(elemtag, 50 + elemtag.length()) >= 0;
  4984. }
  4985. */
  4986.  
  4987. void ScribusMainWindow::slotEditCut()
  4988. {
  4989. // int a;
  4990. if (HaveDoc && doc->appMode == modeEditClip)
  4991. view->requestMode(submodeEndNodeEdit);
  4992. QString BufferI = "";
  4993. uint docSelectionCount=doc->m_Selection->count();
  4994. if ((HaveDoc) && (docSelectionCount != 0))
  4995. {
  4996. UndoTransaction* activeTransaction = NULL;
  4997. PageItem *currItem;
  4998. for (uint i = 0; i < docSelectionCount; ++i)
  4999. {
  5000. currItem=doc->m_Selection->itemAt(i);
  5001. if ((currItem->asTextFrame() || currItem->asPathText()) && currItem==storyEditor->currentItem() && doc==storyEditor->currentDocument())
  5002. {
  5003. QMessageBox::critical(this, tr("Cannot Cut In-Use Item"), tr("The item %1 is currently being edited by Story Editor. The cut operation will be cancelled").arg(currItem->itemName()), QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
  5004. return;
  5005. }
  5006. }
  5007. if (UndoManager::undoEnabled())
  5008. {
  5009. if (docSelectionCount > 1)
  5010. activeTransaction = new UndoTransaction(undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::Cut,"",Um::ICut));
  5011. else
  5012. {
  5013. PageItem* item=doc->m_Selection->itemAt(0);
  5014. activeTransaction = new UndoTransaction(undoManager->beginTransaction(item->getUName(), item->getUPixmap(), Um::Cut, "", Um::ICut));
  5015. }
  5016. }
  5017. currItem = doc->m_Selection->itemAt(0);
  5018. if (doc->appMode == modeEdit)
  5019. {
  5020. if ((currItem->itemText.length() == 0) || (!currItem->HasSel))
  5021. return;
  5022. currItem->oldCPos = currItem->itemText.startOfSelection();
  5023. //for undo
  5024. currItem->itemTextSaxed = currItem->getItemTextSaxed(PageItem::SELECTION);
  5025.  
  5026. StoryText itemText(doc);
  5027. itemText.setDefaultStyle(currItem->itemText.defaultStyle());
  5028. itemText.insert(0, currItem->itemText, true);
  5029.  
  5030. std::ostringstream xmlString;
  5031. SaxXML xmlStream(xmlString);
  5032. xmlStream.beginDoc();
  5033. itemText.saxx(xmlStream, "SCRIBUSTEXT");
  5034. xmlStream.endDoc();
  5035. std::string xml(xmlString.str());
  5036.  
  5037. ScTextMimeData* mimeData = new ScTextMimeData();
  5038. mimeData->setScribusText (QByteArray(xml.c_str(), xml.length()));
  5039. mimeData->setText( itemText.text(0, itemText.length()) ) ;
  5040. QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard);
  5041.  
  5042. dynamic_cast<PageItem_TextFrame*>(currItem)->deleteSelectedTextFromFrame();
  5043. //for undo
  5044. currItem->asTextFrame()->updateUndo(PageItem::DELSAX);
  5045. currItem->update();
  5046. }
  5047. else
  5048. {
  5049. if (((currItem->isSingleSel) && (currItem->isGroupControl)) || ((currItem->isSingleSel) && (currItem->isTableItem)))
  5050. return;
  5051.  
  5052. // new version:
  5053. std::ostringstream xmlString;
  5054. SaxXML xmlStream(xmlString);
  5055. // qDebug() << QString("call serializer: %1").arg((ulong) & (doc->m_Selection));
  5056. Serializer::serializeObjects(*doc->m_Selection, xmlStream);
  5057. std::string xml(xmlString.str());
  5058. BufferI = QString::fromUtf8(xml.c_str(), xml.length());
  5059.  
  5060. if (prefsManager->appPrefs.doCopyToScrapbook)
  5061. {
  5062. ScriXmlDoc ss;
  5063. QString buffer = ss.WriteElem(doc, view, doc->m_Selection);
  5064. scrapbookPalette->ObjFromCopyAction(buffer, currItem->itemName());
  5065. rebuildRecentPasteMenu();
  5066. }
  5067.  
  5068. ScFragmentMimeData* mimeData = new ScFragmentMimeData();
  5069. mimeData->setScribusFragment ( QByteArray(xml.c_str(), xml.length()) );
  5070. mimeData->setText( QString::fromUtf8(xml.c_str(), xml.length()) );
  5071. QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard);
  5072.  
  5073. for (int i=0; i < doc->m_Selection->count(); ++i)
  5074. {
  5075. PageItem* frame = doc->m_Selection->itemAt(i);
  5076. if (frame->asTextFrame() && frame->prevInChain() == NULL)
  5077. frame->clearContents();
  5078. }
  5079. doc->itemSelection_DeleteItem();
  5080. }
  5081. slotDocCh();
  5082. scrActions["editPaste"]->setEnabled(true);
  5083. scrMenuMgr->setMenuEnabled("EditPasteRecent", scrapbookPalette->tempBView->objectMap.count() != 0);
  5084. if (activeTransaction)
  5085. {
  5086. activeTransaction->commit();
  5087. delete activeTransaction;
  5088. activeTransaction = NULL;
  5089. }
  5090. }
  5091. }
  5092.  
  5093. void ScribusMainWindow::slotEditCopy()
  5094. {
  5095. // int a;
  5096. if (HaveDoc && doc->appMode == modeEditClip)
  5097. view->requestMode(submodeEndNodeEdit);
  5098. QString BufferI = "";
  5099. if ((HaveDoc) && (doc->m_Selection->count() != 0))
  5100. {
  5101. PageItem *currItem = doc->m_Selection->itemAt(0);
  5102. if ((doc->appMode == modeEdit) && (currItem->HasSel))
  5103. {
  5104. StoryText itemText(doc);
  5105. itemText.setDefaultStyle(currItem->itemText.defaultStyle());
  5106. itemText.insert(0, currItem->itemText, true);
  5107.  
  5108. BufferI = itemText.text(0, itemText.length());
  5109.  
  5110. std::ostringstream xmlString;
  5111. SaxXML xmlStream(xmlString);
  5112. xmlStream.beginDoc();
  5113. itemText.saxx(xmlStream, "SCRIBUSTEXT");
  5114. xmlStream.endDoc();
  5115. std::string xml(xmlString.str());
  5116.  
  5117. ScTextMimeData* mimeData = new ScTextMimeData();
  5118. mimeData->setScribusText( QByteArray(xml.c_str(), xml.length()) );
  5119. mimeData->setText( itemText.text(0, itemText.length()) );
  5120. QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard);
  5121. }
  5122. else
  5123. {
  5124. if (((currItem->isSingleSel) && (currItem->isGroupControl)) || ((currItem->isSingleSel) && (currItem->isTableItem)))
  5125. return;
  5126.  
  5127. // new version:
  5128. std::ostringstream xmlString;
  5129. SaxXML xmlStream(xmlString);
  5130. Serializer::serializeObjects(*doc->m_Selection, xmlStream);
  5131. std::string xml(xmlString.str());
  5132.  
  5133. #ifdef DESAXE_DEBUG
  5134. // debug:
  5135. SaxXML tmpfile1("tmp-scribus1.xml", true);
  5136. Serializer::serializeObjects(*doc->m_Selection, tmpfile1);
  5137. Serializer digester(*doc);
  5138. QFile file ("tmp-scribus1.xml");
  5139. Selection objects = digester.deserializeObjects(file);
  5140. SaxXML tmpfile2("tmp-scribus2.xml", true);
  5141. Serializer::serializeObjects(objects, tmpfile2);
  5142. doc->itemSelection_DeleteItem(&objects);
  5143. #endif
  5144.  
  5145. if ((prefsManager->appPrefs.doCopyToScrapbook) && (!internalCopy))
  5146. {
  5147. ScriXmlDoc ss;
  5148. QString buffer = ss.WriteElem(doc, view, doc->m_Selection);
  5149. scrapbookPalette->ObjFromCopyAction(buffer, currItem->itemName());
  5150. rebuildRecentPasteMenu();
  5151. }
  5152.  
  5153. ScFragmentMimeData* mimeData = new ScFragmentMimeData();
  5154. mimeData->setScribusFragment( QByteArray(xml.c_str(), xml.length()) );
  5155. mimeData->setText( QString::fromUtf8(xml.c_str(), xml.length()) );
  5156. QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard);
  5157. }
  5158. scrActions["editPaste"]->setEnabled(true);
  5159. scrMenuMgr->setMenuEnabled("EditPasteRecent", scrapbookPalette->tempBView->objectMap.count() != 0);
  5160. }
  5161. }
  5162.  
  5163. void ScribusMainWindow::slotEditPaste()
  5164. {
  5165. if (HaveDoc && doc->appMode == modeEditClip)
  5166. view->requestMode(submodeEndNodeEdit);
  5167. if (HaveDoc)
  5168. {
  5169. UndoTransaction* activeTransaction = NULL;
  5170. if (!ScMimeData::clipboardHasScribusData())
  5171. return;
  5172. if (UndoManager::undoEnabled())
  5173. activeTransaction = new UndoTransaction(undoManager->beginTransaction(doc->currentPage()->getUName(), 0, Um::Paste, "", Um::IPaste));
  5174. PageItem* selItem = doc->m_Selection->itemAt(0);
  5175. bool isTextFrame = (dynamic_cast<PageItem_TextFrame*>(selItem) != NULL);
  5176. if (doc->appMode == modeEdit && isTextFrame)
  5177. {
  5178. PageItem_TextFrame *currItem = dynamic_cast<PageItem_TextFrame*>(doc->m_Selection->itemAt(0));
  5179. assert(currItem != NULL);
  5180. currItem->lastUndoAction = PageItem::NOACTION;
  5181. if (currItem->HasSel)
  5182. {
  5183. //for text undo, storing current selection
  5184. currItem->itemTextSaxed = currItem->getItemTextSaxed(PageItem::SELECTION);
  5185. currItem->deleteSelectedTextFromFrame();
  5186. }
  5187.  
  5188. currItem->itemText.normalizeCursorPosition();
  5189. currItem->oldCPos = currItem->itemText.cursorPosition();
  5190. if (ScMimeData::clipboardHasScribusText())
  5191. {
  5192. Serializer dig(*doc);
  5193. dig.store<ScribusDoc>("<scribusdoc>", doc);
  5194. StoryText::desaxeRules("/", dig, "SCRIBUSTEXT");
  5195. dig.addRule("/SCRIBUSTEXT", desaxe::Result<StoryText>());
  5196.  
  5197. QByteArray xml = ScMimeData::clipboardScribusText();
  5198. dig.parseMemory(xml, xml.length());
  5199.  
  5200. StoryText* story = dig.result<StoryText>();
  5201.  
  5202. currItem->itemText.insert(*story);
  5203.  
  5204. //for text undo, select inserted text for saxing it
  5205. currItem->itemText.select(currItem->oldCPos, story->length());
  5206. currItem->HasSel = true;
  5207. //if itemTextSaxed is not empty there was selection
  5208. currItem->updateUndo(currItem->itemTextSaxed.isEmpty() ? PageItem::INSSAX : PageItem::REPSAX,currItem->getItemTextSaxed(PageItem::SELECTION));
  5209. currItem->itemText.deselectAll();
  5210.  
  5211. delete story;
  5212. }
  5213. else if (ScMimeData::clipboardHasScribusElem() || ScMimeData::clipboardHasScribusFragment())
  5214. {
  5215. bool savedAlignGrid = doc->useRaster;
  5216. bool savedAlignGuides = doc->SnapGuides;
  5217. int ac = doc->Items->count();
  5218. bool isGroup = false;
  5219. double gx, gy, gh, gw;
  5220. FPoint minSize = doc->minCanvasCoordinate;
  5221. FPoint maxSize = doc->maxCanvasCoordinate;
  5222. doc->useRaster = false;
  5223. doc->SnapGuides = false;
  5224. // HACK #6541 : undo does not handle text modification => do not record embedded item creation
  5225. // if embedded item is deleted, undo system will not be aware of its deletion => crash - JG
  5226. undoManager->setUndoEnabled(false);
  5227.  
  5228. if (ScMimeData::clipboardHasScribusElem())
  5229. {
  5230. QString buffer = ScMimeData::clipboardScribusElem();
  5231. slotElemRead(buffer, 0, 0, false, true, doc, view);
  5232. }
  5233. else
  5234. {
  5235. QByteArray fragment = ScMimeData::clipboardScribusFragment();
  5236. Serializer(*doc).deserializeObjects(fragment);
  5237. }
  5238.  
  5239. // update style lists:
  5240. styleManager->setDoc(doc);
  5241. propertiesPalette->unsetDoc();
  5242. propertiesPalette->setDoc(doc);
  5243.  
  5244. doc->useRaster = savedAlignGrid;
  5245. doc->SnapGuides = savedAlignGuides;
  5246. //int tempList=doc->m_Selection->backupToTempList(0);
  5247. Selection tempSelection(*doc->m_Selection);
  5248. doc->m_Selection->clear();
  5249. if (doc->Items->count() - ac > 1)
  5250. isGroup = true;
  5251. doc->m_Selection->delaySignalsOn();
  5252. for (int as = ac; as < doc->Items->count(); ++as)
  5253. {
  5254. doc->m_Selection->addItem(doc->Items->at(as));
  5255. if (isGroup)
  5256. doc->Items->at(as)->Groups.push(doc->GroupCounter);
  5257. }
  5258. doc->m_Selection->delaySignalsOff();
  5259. if (isGroup)
  5260. doc->GroupCounter++;
  5261. doc->m_Selection->setGroupRect();
  5262. doc->m_Selection->getGroupRect(&gx, &gy, &gw, &gh);
  5263. PageItem* currItem3 = doc->Items->at(ac);
  5264. for (int as = ac; as < doc->Items->count(); ++as)
  5265. {
  5266. PageItem* currItem2 = doc->Items->at(as);
  5267. currItem2->isEmbedded = true;
  5268. currItem2->setIsAnnotation(false);
  5269. currItem2->isBookmark = false;
  5270. currItem2->gXpos = currItem2->xPos() - gx;
  5271. currItem2->gYpos = currItem2->yPos() - gy;
  5272. currItem2->gWidth = gw;
  5273. currItem2->gHeight = gh;
  5274. currItem2->ItemNr = doc->FrameItems.count();
  5275. doc->FrameItems.append(currItem2);
  5276. }
  5277. int acc = doc->Items->count();
  5278. for (int as = ac; as < acc; ++as)
  5279. {
  5280. doc->Items->takeAt(ac);
  5281. }
  5282. doc->m_Selection->clear();
  5283. //doc->m_Selection->restoreFromTempList(0, tempList);
  5284. *doc->m_Selection=tempSelection;
  5285. // view->resizeContents(qRound((maxSize.x() - minSize.x()) * view->scale()), qRound((maxSize.y() - minSize.y()) * view->scale()));
  5286. // view->scrollBy(qRound((doc->minCanvasCoordinate.x() - minSize.x()) * view->scale()), qRound((doc->minCanvasCoordinate.y() - minSize.y()) * view->scale()));
  5287. doc->minCanvasCoordinate = minSize;
  5288. doc->maxCanvasCoordinate = maxSize;
  5289. if (outlinePalette->isVisible())
  5290. outlinePalette->BuildTree();
  5291. currItem->itemText.insertObject(currItem3);
  5292. undoManager->setUndoEnabled(true);
  5293. //for text undo, select inserted text for saxing it
  5294. currItem->itemText.select(currItem->oldCPos, currItem->itemText.cursorPosition() - currItem->oldCPos);
  5295. currItem->HasSel = true;
  5296. //if itemTextSaxed is not empty there was selection
  5297. currItem->updateUndo(currItem->itemTextSaxed.isEmpty() ? PageItem::INSSAX : PageItem::REPSAX,currItem->getItemTextSaxed(PageItem::SELECTION));
  5298. }
  5299. else
  5300. {
  5301. // K.I.S.S.:
  5302. QString text = QApplication::clipboard()->text(QClipboard::Clipboard);
  5303. text = text.replace("\r\n", SpecialChars::PARSEP);
  5304. text = text.replace('\n', SpecialChars::PARSEP);
  5305. int cursorPos = currItem->itemText.cursorPosition();
  5306. currItem->itemText.insertChars(cursorPos, text, true);
  5307. //for text undo, select inserted text for saxing it
  5308. currItem->itemText.select(cursorPos, text.length());
  5309. currItem->HasSel = true;
  5310. //if itemTextSaxed is not empty there was selection
  5311. if (currItem->itemTextSaxed.isEmpty())
  5312. currItem->updateUndo(PageItem::INS, text);
  5313. else
  5314. currItem->updateUndo(PageItem::REPSAX, currItem->getTextSaxed(text));
  5315.  
  5316. }
  5317. currItem->update();
  5318. }
  5319. else
  5320. {
  5321. if (ScMimeData::clipboardHasScribusElem() || ScMimeData::clipboardHasScribusFragment())
  5322. {
  5323. view->Deselect(true);
  5324. uint ac = doc->Items->count();
  5325. bool savedAlignGrid = doc->useRaster;
  5326. bool savedAlignGuides = doc->SnapGuides;
  5327. doc->useRaster = false;
  5328. doc->SnapGuides = false;
  5329. if (ScMimeData::clipboardHasScribusElem())
  5330. {
  5331. QString buffer = ScMimeData::clipboardScribusElem();
  5332. slotElemRead(buffer, doc->currentPage()->xOffset(), doc->currentPage()->yOffset(), false, true, doc, view);
  5333. }
  5334. else
  5335. {
  5336. QByteArray fragment = ScMimeData::clipboardScribusFragment();
  5337. Selection pastedObjects = Serializer(*doc).deserializeObjects(fragment);
  5338. for (int i=0; i < pastedObjects.count(); ++i)
  5339. pastedObjects.itemAt(i)->LayerNr = doc->activeLayer();
  5340.  
  5341. /*double x = doc->currentPage()->xOffset();
  5342. double y = doc->currentPage()->yOffset();
  5343. for (uint i=0; i < pastedObjects.count(); ++i)
  5344. if (! pastedObjects.itemAt(i)->isEmbedded)
  5345. {
  5346. // const Page* pg = doc->Pages->at(doc->OnPage(pastedObjects.itemAt(i)));
  5347. // if (!pg)
  5348. // pg = doc->Pages->at(doc->Pages->count() - 1);
  5349. // if (pg)
  5350. // pastedObjects.itemAt(i)->moveBy(x - pg->xOffset(), y - pg->yOffset(), true);
  5351. qDebug() << QString("move pasted: %1 %2,%3 + %4,%5").arg((ulong)pastedObjects.itemAt(i)).arg(x).arg(y).arg(pastedObjects.itemAt(i)->xPos()).arg(pastedObjects.itemAt(i)->yPos());
  5352. pastedObjects.itemAt(i)->moveBy(x, y, true);
  5353. }
  5354. */
  5355. }
  5356.  
  5357. // update style lists:
  5358. styleManager->setDoc(doc);
  5359. propertiesPalette->unsetDoc();
  5360. propertiesPalette->setDoc(doc);
  5361.  
  5362. doc->useRaster = savedAlignGrid;
  5363. doc->SnapGuides = savedAlignGuides;
  5364. doc->m_Selection->delaySignalsOn();
  5365. for (int as = ac; as < doc->Items->count(); ++as)
  5366. {
  5367. PageItem* currItem = doc->Items->at(as);
  5368. if (currItem->isBookmark)
  5369. AddBookMark(currItem);
  5370. doc->m_Selection->addItem(currItem);
  5371. }
  5372. doc->m_Selection->delaySignalsOff();
  5373. int docSelectionCount=doc->m_Selection->count();
  5374. if (docSelectionCount > 1)
  5375. {
  5376. doc->m_Selection->setGroupRect();
  5377. // view->paintGroupRect();
  5378. double x, y, w, h;
  5379. doc->m_Selection->getGroupRect(&x, &y, &w, &h);
  5380. propertiesPalette->setXY(x, y);
  5381. propertiesPalette->setBH(w, h);
  5382. }
  5383. if (docSelectionCount > 0)
  5384. HaveNewSel(doc->m_Selection->itemAt(0)->itemType());
  5385. }
  5386. view->DrawNew();
  5387. }
  5388. if (activeTransaction)
  5389. {
  5390. activeTransaction->commit();
  5391. delete activeTransaction;
  5392. activeTransaction = NULL;
  5393. }
  5394. slotDocCh(false);
  5395. }
  5396. }
  5397.  
  5398. //CB-->Doc ?????
  5399. void ScribusMainWindow::SelectAllOnLayer()
  5400. {
  5401. ColorList UsedC;
  5402. doc->getUsedColors(UsedC);
  5403. selectDialog *dia = new selectDialog(this, UsedC, doc->unitIndex());
  5404. if (dia->exec())
  5405. {
  5406. PageItem *currItem;
  5407. view->Deselect();
  5408. uint docItemsCount = doc->Items->count();
  5409. int docCurrentPage = doc->currentPageNumber();
  5410. doc->m_Selection->delaySignalsOn();
  5411. int range = dia->getSelectionRange();
  5412. for (uint a = 0; a < docItemsCount; ++a)
  5413. {
  5414. currItem = doc->Items->at(a);
  5415. if ((currItem->LayerNr == doc->activeLayer()) && (!doc->layerLocked(currItem->LayerNr)))
  5416. {
  5417. if ((range == 0) && (currItem->OwnPage != docCurrentPage))
  5418. continue;
  5419. if ((range == 2) && (currItem->OwnPage != -1))
  5420. continue;
  5421. if (dia->useAttributes())
  5422. {
  5423. bool useType = false;
  5424. bool useFill = false;
  5425. bool useLine = false;
  5426. bool useLWidth = false;
  5427. bool usePrint = false;
  5428. bool useLocked = false;
  5429. bool useResize = false;
  5430. dia->getUsedAttributes(useType, useFill, useLine, useLWidth, usePrint, useLocked, useResize);
  5431. int Type = 0;
  5432. QString Fill = "";
  5433. QString Line = "";
  5434. double LWidth = 0.0;
  5435. bool Print = false;
  5436. bool Locked = false;
  5437. bool Resize = false;
  5438. dia->getUsedAttributesValues(Type, Fill, Line, LWidth, Print, Locked, Resize);
  5439. LWidth = LWidth / doc->unitRatio();
  5440. if ((useType) && (Type != currItem->realItemType()))
  5441. continue;
  5442. if ((useFill) && ((Fill != currItem->fillColor()) || (currItem->GrType != 0)))
  5443. continue;
  5444. if ((useLine) && (Line != currItem->lineColor()))
  5445. continue;
  5446. if ((useLWidth) && ((LWidth != currItem->lineWidth()) || (currItem->lineColor() == CommonStrings::None)))
  5447. continue;
  5448. if ((usePrint) && (Print != currItem->printEnabled()))
  5449. continue;
  5450. if ((useLocked) && (Locked != currItem->locked()))
  5451. continue;
  5452. if ((useResize) && (Resize != currItem->sizeLocked()))
  5453. continue;
  5454. doc->m_Selection->addItem(currItem);
  5455. }
  5456. else
  5457. doc->m_Selection->addItem(currItem);
  5458. }
  5459. }
  5460. doc->m_Selection->delaySignalsOff();
  5461. int docSelectionCount = doc->m_Selection->count();
  5462. if (docSelectionCount > 1)
  5463. {
  5464. double x, y, w, h;
  5465. doc->m_Selection->setGroupRect();
  5466. doc->m_Selection->getGroupRect(&x, &y, &w, &h);
  5467. propertiesPalette->setXY(x, y);
  5468. propertiesPalette->setBH(w, h);
  5469. }
  5470. if (docSelectionCount > 0)
  5471. {
  5472. currItem = doc->m_Selection->itemAt(0);
  5473. HaveNewSel(currItem->itemType());
  5474. }
  5475. view->DrawNew();
  5476. }
  5477. delete dia;
  5478. }
  5479.  
  5480. void ScribusMainWindow::SelectAll(bool docWideSelect)
  5481. {
  5482. if (doc->appMode == modeEdit)
  5483. {
  5484. PageItem *currItem = doc->m_Selection->itemAt(0);
  5485. PageItem *nextItem = currItem;
  5486. nextItem->itemText.selectAll();
  5487. while (nextItem != 0)
  5488. {
  5489. if (nextItem->prevInChain() != 0)
  5490. nextItem = nextItem->prevInChain();
  5491. else
  5492. break;
  5493. }
  5494. while (nextItem != 0)
  5495. {
  5496. nextItem->HasSel = true;
  5497. nextItem = nextItem->nextInChain();
  5498. }
  5499. EnableTxEdit();
  5500. }
  5501. else
  5502. {
  5503. PageItem *currItem;
  5504. view->Deselect();
  5505. doc->m_Selection->delaySignalsOn();
  5506. uint docItemsCount=doc->Items->count();
  5507. int docCurrentPage=doc->currentPageNumber();
  5508. for (uint a = 0; a < docItemsCount; ++a)
  5509. {
  5510. currItem = doc->Items->at(a);
  5511. if ((currItem->LayerNr == doc->activeLayer()) && (!doc->layerLocked(currItem->LayerNr)))
  5512. {
  5513. if (docWideSelect)
  5514. doc->m_Selection->addItem(currItem);
  5515. else
  5516. {
  5517. if (currItem->OwnPage==docCurrentPage)
  5518. doc->m_Selection->addItem(currItem);
  5519. }
  5520. }
  5521. }
  5522. doc->m_Selection->delaySignalsOff();
  5523. int docSelectionCount=doc->m_Selection->count();
  5524. if (docSelectionCount > 1)
  5525. {
  5526. double x, y, w, h;
  5527. doc->m_Selection->setGroupRect();
  5528. doc->m_Selection->getGroupRect(&x, &y, &w, &h);
  5529. propertiesPalette->setXY(x, y);
  5530. propertiesPalette->setBH(w, h);
  5531. }
  5532. if (docSelectionCount > 0)
  5533. {
  5534. currItem = doc->m_Selection->itemAt(0);
  5535. HaveNewSel(currItem->itemType());
  5536. }
  5537. }
  5538. view->DrawNew();
  5539. }
  5540.  
  5541. void ScribusMainWindow::deselectAll()
  5542. {
  5543. if (doc->appMode == modeEdit)
  5544. {
  5545. if (doc->m_Selection->count() <= 0)
  5546. return;
  5547. PageItem *currItem = doc->m_Selection->itemAt(0);
  5548. if (currItem->asTextFrame())
  5549. {
  5550. currItem->itemText.deselectAll();
  5551. doc->regionsChanged()->update(currItem->getBoundingRect());
  5552. }
  5553. else
  5554. {
  5555. doc->view()->Deselect(true);
  5556. doc->view()->requestMode(modeNormal);
  5557. }
  5558. }
  5559. else if (view != NULL)
  5560. view->Deselect(true);
  5561. }
  5562.  
  5563. void ScribusMainWindow::ClipChange()
  5564. {
  5565. bool textFrameEditMode = false;
  5566. bool hasScribusData = ScMimeData::clipboardHasScribusElem() || ScMimeData::clipboardHasScribusFragment();
  5567. if (HaveDoc && doc->m_Selection->count() != 0)
  5568. {
  5569. PageItem *currItem = NULL;
  5570. currItem = doc->m_Selection->itemAt(0);
  5571. textFrameEditMode = ((doc->appMode == modeEdit) && (currItem->asTextFrame()));
  5572. }
  5573. scrActions["editPaste"]->setEnabled(HaveDoc && (hasScribusData || textFrameEditMode));
  5574. }
  5575.  
  5576. void ScribusMainWindow::EnableTxEdit()
  5577. {
  5578. scrActions["editCut"]->setEnabled(true);
  5579. scrActions["editCopy"]->setEnabled(true);
  5580. //scrActions["editClearContents"]->setEnabled(true);
  5581. }
  5582.  
  5583. void ScribusMainWindow::DisableTxEdit()
  5584. {
  5585. scrActions["editCut"]->setEnabled(false);
  5586. scrActions["editCopy"]->setEnabled(false);
  5587. //scrActions["editClearContents"]->setEnabled(false);
  5588. }
  5589.  
  5590. void ScribusMainWindow::slotHelpAbout()
  5591. {
  5592. About dia(this);
  5593. dia.exec();
  5594. }
  5595.  
  5596. void ScribusMainWindow::slotHelpAboutPlugins()
  5597. {
  5598. AboutPlugins dia(this);
  5599. dia.exec();
  5600. }
  5601.  
  5602. void ScribusMainWindow::slotHelpAboutQt()
  5603. {
  5604. QMessageBox::aboutQt(this, tr("About Qt"));
  5605. }
  5606.  
  5607. void ScribusMainWindow::slotHelpCheckUpdates()
  5608. {
  5609. About dia(this, About::CheckUpdates);
  5610. dia.exec();
  5611. }
  5612.  
  5613. void ScribusMainWindow::slotOnlineHelp(const QString & jumpToSection, const QString & jumpToFile)
  5614. {
  5615. if (!helpBrowser)
  5616. {
  5617. helpBrowser = new HelpBrowser(0, tr("Scribus Manual"), ScCore->getGuiLanguage(), jumpToSection, jumpToFile);
  5618. connect(helpBrowser, SIGNAL(closed()), this, SLOT(slotOnlineHelpClosed()));
  5619. }
  5620. else //just set the requested page
  5621. {
  5622. if (!jumpToSection.isNull() || !jumpToFile.isNull())
  5623. {
  5624. helpBrowser->jumpToHelpSection(jumpToSection, jumpToFile, true);
  5625. }
  5626. }
  5627. slotRaiseOnlineHelp();
  5628. }
  5629.  
  5630. void ScribusMainWindow::slotRaiseOnlineHelp()
  5631. {
  5632. if (helpBrowser)
  5633. helpBrowser->show();
  5634. }
  5635.  
  5636. void ScribusMainWindow::slotOnlineHelpClosed()
  5637. {
  5638. if (helpBrowser)
  5639. helpBrowser->deleteLater();
  5640. }
  5641.  
  5642. void ScribusMainWindow::ToggleTips()
  5643. {
  5644. prefsManager->appPrefs.showToolTips = scrActions["helpTooltips"]->isChecked();
  5645. }
  5646.  
  5647. void ScribusMainWindow::ToggleMouseTips()
  5648. {
  5649. prefsManager->appPrefs.showMouseCoordinates = scrActions["showMouseCoordinates"]->isChecked();
  5650. }
  5651.  
  5652. void ScribusMainWindow::SaveText()
  5653. {
  5654. LoadEnc = "";
  5655. QString wdir = ".";
  5656. QString prefsDocDir=prefsManager->documentDir();
  5657. if (!prefsDocDir.isEmpty())
  5658. wdir = prefsManager->prefsFile->getContext("dirs")->get("save_text", prefsDocDir);
  5659. else
  5660. wdir = prefsManager->prefsFile->getContext("dirs")->get("save_text", ".");
  5661. QString fn = CFileDialog( wdir, tr("Save As"), tr("Text Files (*.txt);;All Files(*)"), "", fdShowCodecs|fdHidePreviewCheckBox);
  5662. if (!fn.isEmpty())
  5663. {
  5664. prefsManager->prefsFile->getContext("dirs")->set("save_text", fn.left(fn.lastIndexOf("/")));
  5665. const StoryText& story (doc->m_Selection->itemAt(0)->itemText);
  5666. Serializer::writeWithEncoding(fn, LoadEnc, story.text(0, story.length()));
  5667. }
  5668. }
  5669.  
  5670. void ScribusMainWindow::applyNewMaster(QString name)
  5671. {
  5672. Apply_MasterPage(name, doc->currentPage()->pageNr(), false);
  5673. view->reformPages();
  5674. view->DrawNew();
  5675. pagePalette->Rebuild();
  5676. }
  5677.  
  5678. void ScribusMainWindow::slotNewPageP(int wo, QString templ)
  5679. {
  5680. if (HaveDoc && doc->appMode == modeEditClip)
  5681. view->requestMode(submodeEndNodeEdit);
  5682. view->Deselect(true);
  5683. int where = 1;
  5684. if (wo == 0)
  5685. where = 0;
  5686. else if (wo == doc->Pages->count())
  5687. where = 2;
  5688. slotNewPage(wo, templ); //master page is applied now
  5689. //applyNewMaster(templ);
  5690. if (where == 2)
  5691. doc->addPageToSection(wo, where, 1);
  5692. else
  5693. doc->addPageToSection(wo+1, where, 1);
  5694. doc->changed();
  5695. updateGUIAfterPagesChanged();
  5696. }
  5697.  
  5698. /** Erzeugt eine neue Seite */
  5699. void ScribusMainWindow::slotNewPageM()
  5700. {
  5701. if (HaveDoc && doc->appMode == modeEditClip)
  5702. view->requestMode(submodeEndNodeEdit);
  5703. view->Deselect(true);
  5704. QStringList base;
  5705. InsPage *dia = new InsPage(this, doc, doc->currentPage()->pageNr(), doc->Pages->count());
  5706. if (dia->exec())
  5707. {
  5708. base = dia->getMasterPages();
  5709. addNewPages(dia->getWherePage(),
  5710. dia->getWhere(),
  5711. dia->getCount(),
  5712. dia->heightSpinBox->value() / doc->unitRatio(),
  5713. dia->widthSpinBox->value() / doc->unitRatio(),
  5714. dia->orientationQComboBox->currentIndex(),
  5715. dia->prefsPageSizeName,
  5716. dia->moveObjects->isChecked(),
  5717. &base
  5718. );
  5719. }
  5720. delete dia;
  5721. }
  5722.  
  5723. void ScribusMainWindow::addNewPages(int wo, int where, int numPages, double height, double width, int orient, QString siz, bool mov, QStringList* basedOn)
  5724. {
  5725. UndoTransaction* activeTransaction = NULL;
  5726. if (UndoManager::undoEnabled())
  5727. {
  5728. activeTransaction = new UndoTransaction(undoManager->beginTransaction(doc->getUName(), Um::IDocument, (numPages == 1) ? Um::AddPage : Um::AddPages, "", Um::ICreate));
  5729. SimpleState *ss = new SimpleState(Um::AddPage, "", Um::ICreate);
  5730. ss->set("ADD_PAGE", "add_page");
  5731. ss->set("PAGE", wo);
  5732. ss->set("WHERE", where);
  5733. ss->set("COUNT", numPages);
  5734. if (basedOn != NULL)
  5735. ss->set("BASED", basedOn->join("|"));
  5736. else
  5737. {
  5738. int setcol = doc->pageSets[doc->currentPageLayout].Columns;
  5739. if (setcol == 1)
  5740. ss->set("BASED", CommonStrings::trMasterPageNormal);
  5741. else if (setcol == 2)
  5742. ss->set("BASED", CommonStrings::trMasterPageNormalLeft+"|"+ CommonStrings::trMasterPageNormalRight);
  5743. else if ((setcol == 3) || (setcol == 4))
  5744. ss->set("BASED", CommonStrings::trMasterPageNormalLeft+"|"+ CommonStrings::trMasterPageNormalMiddle+"|"+ CommonStrings::trMasterPageNormalRight);
  5745. }
  5746. ss->set("HEIGHT", height);
  5747. ss->set("WIDTH", width);
  5748. ss->set("ORIENT", orient);
  5749. ss->set("SIZE", siz);
  5750. ss->set("MOVED", mov);
  5751. undoManager->action(this, ss);
  5752. }
  5753. // disable recording of undo actions related to new page creating
  5754. // and object moving related to that
  5755. undoManager->setUndoEnabled(false);
  5756.  
  5757. QStringList base;
  5758. if (basedOn != NULL)
  5759. {
  5760. base = *basedOn;
  5761. // #10211 case when restoring page deletion, basedOn contains only masterpage name
  5762. if (base.count() == 1)
  5763. {
  5764. int setcol = doc->pageSets[doc->currentPageLayout].Columns;
  5765. while (base.count() < setcol)
  5766. base.append (base.at(0));
  5767. }
  5768. }
  5769. if (base.empty())
  5770. {
  5771. int setcol = doc->pageSets[doc->currentPageLayout].Columns;
  5772. if (setcol == 1)
  5773. base.append( CommonStrings::trMasterPageNormal);
  5774. else if (setcol == 2)
  5775. {
  5776. base.append( CommonStrings::trMasterPageNormalLeft);
  5777. base.append( CommonStrings::trMasterPageNormalRight);
  5778. }
  5779. else if (setcol == 3)
  5780. {
  5781. base.append( CommonStrings::trMasterPageNormalLeft);
  5782. base.append( CommonStrings::trMasterPageNormalMiddle);
  5783. base.append( CommonStrings::trMasterPageNormalRight);
  5784. }
  5785. else if (setcol == 4)
  5786. {
  5787. base.append( CommonStrings::trMasterPageNormalLeft);
  5788. base.append( CommonStrings::trMasterPageNormalMiddle);
  5789. base.append( CommonStrings::trMasterPageNormalMiddle);
  5790. base.append( CommonStrings::trMasterPageNormalRight);
  5791. }
  5792. }
  5793. int cc;
  5794. int wot = wo;
  5795. if (where==0)
  5796. --wot;
  5797. else if (where==2)
  5798. wot=doc->Pages->count();
  5799. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  5800. view->updatesOn(false);
  5801. Page* currentPage = doc->currentPage();
  5802. for (cc = 0; cc < numPages; ++cc)
  5803. {
  5804. slotNewPage(wot, base[(wot+doc->pageSets[doc->currentPageLayout].FirstPage) % doc->pageSets[doc->currentPageLayout].Columns], mov); //Avoid the master page application with QString::null
  5805. // slotNewPage(wot, QString::null, mov); //Avoid the master page application with QString::null
  5806. doc->currentPage()->setInitialHeight(height);
  5807. doc->currentPage()->setInitialWidth(width);
  5808. doc->currentPage()->PageOri = orient;
  5809. doc->currentPage()->m_pageSize = siz;
  5810. //CB If we want to add this master page setting into the slotnewpage call, the pagenumber must be +1 I think
  5811. //Apply_MasterPage(base[(doc->currentPage()->pageNr()+doc->pageSets[doc->currentPageLayout].FirstPage) % doc->pageSets[doc->currentPageLayout].Columns],
  5812. // doc->currentPage()->pageNr(), false); // this Apply_MasterPage avoids DreawNew and PagePalette->ReBuild, which is much faster for 100 pp :-)
  5813. wot ++;
  5814. }
  5815. doc->setCurrentPage(currentPage);
  5816. view->updatesOn(true);
  5817. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  5818. //Use wo, the dialog currently returns a page Index +1 due to old numbering scheme, function now does the -1 as required
  5819. doc->changed();
  5820. doc->addPageToSection(wo, where, numPages);
  5821. doc->reformPages();
  5822. updateGUIAfterPagesChanged();
  5823.  
  5824. undoManager->setUndoEnabled(true);
  5825.  
  5826. if (activeTransaction)
  5827. {
  5828. activeTransaction->commit();
  5829. delete activeTransaction;
  5830. activeTransaction = NULL;
  5831. }
  5832. }
  5833.  
  5834. void ScribusMainWindow::slotNewMasterPage(int w, const QString& name)
  5835. {
  5836. if (doc->masterPageMode())
  5837. {
  5838. doc->addMasterPage(w, name);
  5839. view->addPage(w);
  5840. }
  5841. }
  5842.  
  5843. void ScribusMainWindow::slotNewPage(int w, const QString& masterPageName, bool mov)
  5844. {
  5845. doc->addPage(w, masterPageName, true);
  5846. view->addPage(w, mov);
  5847. }
  5848.  
  5849.  
  5850. void ScribusMainWindow::duplicateToMasterPage()
  5851. {
  5852. if (!HaveDoc)
  5853. return;
  5854. view->Deselect(true);
  5855. int pageLocationIndex=-1;
  5856. int pageLocationCount=0;
  5857. if (doc->currentPageLayout != singlePage)
  5858. {
  5859. QStringList locationEntries;
  5860. for(QStringList::Iterator pNames = doc->pageSets[doc->currentPageLayout].pageNames.begin(); pNames != doc->pageSets[doc->currentPageLayout].pageNames.end(); ++pNames )
  5861. {
  5862. locationEntries << CommonStrings::translatePageSetLocString(*pNames);
  5863. }
  5864. pageLocationIndex=doc->columnOfPage(doc->currentPageNumber());
  5865. pageLocationCount=locationEntries.count();
  5866. }
  5867.  
  5868. CopyPageToMasterPageDialog copyDialog(doc->MasterNames.count(), doc->pageSets[doc->currentPageLayout].pageNames, pageLocationIndex, this);
  5869. if (copyDialog.exec())
  5870. {
  5871. bool copyFromMaster=false;
  5872. QString masterPageName;
  5873. int pageLocation=0;
  5874. copyDialog.values(masterPageName, copyFromMaster, pageLocation);
  5875. bool badMasterPageName = doc->MasterNames.contains(masterPageName);
  5876. badMasterPageName |= (masterPageName == CommonStrings::masterPageNormal);
  5877. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormal);
  5878. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormalLeft);
  5879. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormalMiddle);
  5880. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormalRight);
  5881. badMasterPageName |= masterPageName.isEmpty();
  5882. while (badMasterPageName)
  5883. {
  5884. if (!copyDialog.exec())
  5885. return;
  5886. copyDialog.values(masterPageName, copyFromMaster, pageLocation);
  5887. badMasterPageName = doc->MasterNames.contains(masterPageName);
  5888. badMasterPageName |= (masterPageName == CommonStrings::masterPageNormal);
  5889. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormal);
  5890. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormalLeft);
  5891. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormalMiddle);
  5892. badMasterPageName |= (masterPageName == CommonStrings::trMasterPageNormalRight);
  5893. badMasterPageName |= masterPageName.isEmpty();
  5894. }
  5895. int currentPageNumber=doc->currentPage()->pageNr();
  5896. bool ok=doc->copyPageToMasterPage(currentPageNumber, pageLocation, pageLocationCount, masterPageName, copyFromMaster);
  5897. Q_ASSERT(ok); //TODO get a return value in case the copy was not possible
  5898. pagePalette->Rebuild();
  5899. }
  5900. }
  5901.  
  5902. void ScribusMainWindow::slotZoom(double zoomFactor)
  5903. {
  5904. double finalZoomFactor;
  5905. //Zoom to Fit
  5906. if (zoomFactor == -100.0)
  5907. {
  5908. finalZoomFactor = (view->height()-70) / (doc->currentPage()->height()+30);
  5909. }
  5910. else if (zoomFactor == -200.0)
  5911. {
  5912. finalZoomFactor = (view->width()-50) / (doc->currentPage()->width()+30);
  5913. }
  5914. //Zoom to %
  5915. else
  5916. finalZoomFactor = zoomFactor*prefsManager->displayScale()/100.0;
  5917.  
  5918. if (finalZoomFactor == view->scale())
  5919. return;
  5920.  
  5921. int x = qRound(qMax(view->contentsX() / view->scale(), 0.0));
  5922. int y = qRound(qMax(view->contentsY() / view->scale(), 0.0));
  5923. int w = qRound(qMin(view->visibleWidth() / view->scale(), doc->currentPage()->width()));
  5924. int h = qRound(qMin(view->visibleHeight() / view->scale(), doc->currentPage()->height()));
  5925.  
  5926. if (zoomFactor == -200.0)
  5927. view->rememberOldZoomLocation(qRound(doc->currentPage()->xOffset() + doc->currentPage()->width() / 2.0), h / 2 + y);
  5928. else if(zoomFactor == -100.0)
  5929. view->rememberOldZoomLocation(w / 2 + x, qRound(doc->currentPage()->yOffset() + doc->currentPage()->height() / 2.0));
  5930. else
  5931. view->rememberOldZoomLocation(w / 2 + x, h / 2 + y);
  5932.  
  5933. view->zoom(finalZoomFactor);
  5934. }
  5935.  
  5936. void ScribusMainWindow::ToggleStickyTools()
  5937. {
  5938. prefsManager->appPrefs.stickyTools = !prefsManager->appPrefs.stickyTools;
  5939. scrActions["stickyTools"]->setChecked(prefsManager->appPrefs.stickyTools);
  5940. if (HaveDoc && doc->appMode!=modeNormal && !prefsManager->appPrefs.stickyTools)
  5941. view->requestMode(modeNormal);
  5942. }
  5943.  
  5944. void ScribusMainWindow::ToggleAllPalettes()
  5945. {
  5946. if (palettesStatus[0])
  5947. {
  5948. palettesStatus[0] = false;
  5949. if (palettesStatus[1])
  5950. propertiesPalette->show();
  5951. if (palettesStatus[2])
  5952. outlinePalette->show();
  5953. if (palettesStatus[3])
  5954. scrapbookPalette->show();
  5955. if (palettesStatus[4])
  5956. layerPalette->show();
  5957. if (palettesStatus[5])
  5958. pagePalette->show();
  5959. if (palettesStatus[6])
  5960. bookmarkPalette->show();
  5961. // if (palettesStatus[7])
  5962. // measurementPalette->show();
  5963. if (palettesStatus[9])
  5964. docCheckerPalette->show();
  5965. setPagePalette(palettesStatus[5]);
  5966. setUndoPalette(palettesStatus[8]);
  5967. }
  5968. else
  5969. {
  5970. palettesStatus[1] = propertiesPalette->isVisible();
  5971. palettesStatus[2] = outlinePalette->isVisible();
  5972. palettesStatus[3] = scrapbookPalette->isVisible();
  5973. palettesStatus[4] = layerPalette->isVisible();
  5974. palettesStatus[5] = pagePalette->isVisible();
  5975. palettesStatus[6] = bookmarkPalette->isVisible();
  5976. // palettesStatus[7] = measurementPalette->isVisible();
  5977. palettesStatus[8] = undoPalette->isVisible();
  5978. palettesStatus[9] = docCheckerPalette->isVisible();
  5979. propertiesPalette->hide();
  5980. outlinePalette->hide();
  5981. scrapbookPalette->hide();
  5982. bookmarkPalette->hide();
  5983. pagePalette->hide();
  5984. layerPalette->hide();
  5985. // measurementPalette->hide();
  5986. docCheckerPalette->hide();
  5987. setPagePalette(false);
  5988. setUndoPalette(false);
  5989. palettesStatus[0] = true;
  5990. }
  5991. }
  5992.  
  5993. void ScribusMainWindow::toggleCheckPal()
  5994. {
  5995. palettesStatus[0] = false;
  5996. }
  5997.  
  5998. void ScribusMainWindow::setUndoPalette(bool visible)
  5999. {
  6000. undoPalette->setPaletteShown(visible);
  6001. scrActions["toolsActionHistory"]->setChecked(visible);
  6002. }
  6003. /*
  6004. void ScribusMainWindow::togglePropertiesPalette()
  6005. {
  6006. palettesStatus[0] = false;
  6007. }
  6008.  
  6009. void ScribusMainWindow::toggleOutlinePalette()
  6010. {
  6011. palettesStatus[0] = false;
  6012. }
  6013.  
  6014. void ScribusMainWindow::toggleScrapbookPalette()
  6015. {
  6016. palettesStatus[0] = false;
  6017. }
  6018.  
  6019. void ScribusMainWindow::toggleLayerPalette()
  6020. {
  6021. palettesStatus[0] = false;
  6022. }
  6023. */
  6024. void ScribusMainWindow::setPagePalette(bool visible)
  6025. {
  6026. if (!visible)
  6027. {
  6028. prefsManager->appPrefs.SepalT = pagePalette->getThumb();
  6029. prefsManager->appPrefs.SepalN = pagePalette->getNamen();
  6030. }
  6031. }
  6032.  
  6033. void ScribusMainWindow::togglePagePalette()
  6034. {
  6035. setPagePalette(!pagePalette->isVisible());
  6036. palettesStatus[0] = false;
  6037. }
  6038. /*
  6039. void ScribusMainWindow::toggleBookmarkPalette()
  6040. {
  6041. palettesStatus[0] = false;
  6042. }
  6043. */
  6044.  
  6045. void ScribusMainWindow::toggleUndoPalette()
  6046. {
  6047. setUndoPalette(!undoPalette->isVisible());
  6048. palettesStatus[0] = false;
  6049. }
  6050.  
  6051. void ScribusMainWindow::TogglePics()
  6052. {
  6053. if (doc)
  6054. {
  6055. doc->guidesSettings.showPic = !doc->guidesSettings.showPic;
  6056. for (int b=0; b<doc->Items->count(); ++b)
  6057. {
  6058. if (doc->Items->at(b)->asImageFrame())
  6059. doc->Items->at(b)->setImageShown(doc->guidesSettings.showPic);
  6060. }
  6061. view->DrawNew();
  6062. }
  6063. }
  6064.  
  6065. void ScribusMainWindow::ToggleAllGuides()
  6066. {
  6067. if (!doc)
  6068. return;
  6069. keyrep=false;
  6070. if (guidesStatus[0])
  6071. {
  6072. guidesStatus[0] = false;
  6073. doc->guidesSettings.marginsShown = guidesStatus[1];
  6074. doc->guidesSettings.framesShown = guidesStatus[2];
  6075. doc->guidesSettings.gridShown = guidesStatus[3];
  6076. doc->guidesSettings.guidesShown = guidesStatus[4];
  6077. doc->guidesSettings.baseShown = guidesStatus[5];
  6078. doc->guidesSettings.linkShown = guidesStatus[6];
  6079. doc->guidesSettings.showControls = guidesStatus[7];
  6080. doc->guidesSettings.rulerMode = guidesStatus[8];
  6081. doc->guidesSettings.rulersShown = guidesStatus[9];
  6082. doc->guidesSettings.colBordersShown = guidesStatus[10];
  6083. doc->guidesSettings.layerMarkersShown = guidesStatus[11] ;
  6084. doc->guidesSettings.showBleed = guidesStatus[12] ;
  6085. ToggleMarks();
  6086. ToggleFrames();
  6087. ToggleLayerMarkers();
  6088. ToggleRaster();
  6089. ToggleGuides();
  6090. ToggleColumnBorders();
  6091. ToggleBase();
  6092. ToggleTextLinks();
  6093. ToggleTextControls();
  6094. ToggleRulerMode();
  6095. ToggleRulers();
  6096. ToggleBleeds();
  6097. }
  6098. else
  6099. {
  6100. guidesStatus[0] = true;
  6101. guidesStatus[1] = !doc->guidesSettings.marginsShown;
  6102. guidesStatus[2] = !doc->guidesSettings.framesShown;
  6103. guidesStatus[3] = !doc->guidesSettings.gridShown;
  6104. guidesStatus[4] = !doc->guidesSettings.guidesShown;
  6105. guidesStatus[5] = !doc->guidesSettings.baseShown;
  6106. guidesStatus[6] = !doc->guidesSettings.linkShown;
  6107. guidesStatus[7] = !doc->guidesSettings.showControls;
  6108. guidesStatus[8] = !doc->guidesSettings.rulerMode;
  6109. guidesStatus[9] = !doc->guidesSettings.rulersShown;
  6110. guidesStatus[10] = !doc->guidesSettings.colBordersShown;
  6111. guidesStatus[11] = !doc->guidesSettings.layerMarkersShown;
  6112. guidesStatus[12] = !doc->guidesSettings.showBleed;
  6113. doc->guidesSettings.marginsShown = false;
  6114. doc->guidesSettings.framesShown = false;
  6115. doc->guidesSettings.gridShown = false;
  6116. doc->guidesSettings.guidesShown = false;
  6117. doc->guidesSettings.baseShown = false;
  6118. doc->guidesSettings.linkShown = false;
  6119. doc->guidesSettings.showControls = false;
  6120. doc->guidesSettings.rulerMode = false;
  6121. doc->guidesSettings.rulersShown = false;
  6122. doc->guidesSettings.colBordersShown = false;
  6123. doc->guidesSettings.layerMarkersShown = false;
  6124. doc->guidesSettings.showBleed = false;
  6125. view->setRulersShown(doc->guidesSettings.rulersShown);
  6126. }
  6127. scrActions["viewShowMargins"]->setChecked(doc->guidesSettings.marginsShown);
  6128. scrActions["viewShowBleeds"]->setChecked(doc->guidesSettings.showBleed);
  6129. scrActions["viewShowFrames"]->setChecked(doc->guidesSettings.framesShown);
  6130. scrActions["viewShowLayerMarkers"]->setChecked(doc->guidesSettings.layerMarkersShown);
  6131. scrActions["viewShowGrid"]->setChecked(doc->guidesSettings.gridShown);
  6132. scrActions["viewShowGuides"]->setChecked(doc->guidesSettings.guidesShown);
  6133. scrActions["viewShowColumnBorders"]->setChecked(doc->guidesSettings.colBordersShown);
  6134. scrActions["viewShowBaseline"]->setChecked(doc->guidesSettings.baseShown);
  6135. scrActions["viewShowTextChain"]->setChecked(doc->guidesSettings.linkShown);
  6136. scrActions["viewShowTextControls"]->setChecked(doc->guidesSettings.showControls);
  6137. scrActions["viewShowRulers"]->setChecked(doc->guidesSettings.rulersShown);
  6138. scrActions["viewRulerMode"]->setChecked(doc->guidesSettings.rulerMode);
  6139. view->DrawNew();
  6140. }
  6141.  
  6142. void ScribusMainWindow::ToggleMarks()
  6143. {
  6144. if (doc)
  6145. {
  6146. guidesStatus[0] = false;
  6147. doc->guidesSettings.marginsShown = !doc->guidesSettings.marginsShown;
  6148. view->DrawNew();
  6149. }
  6150. }
  6151.  
  6152. void ScribusMainWindow::ToggleBleeds()
  6153. {
  6154. if (doc)
  6155. {
  6156. guidesStatus[0] = false;
  6157. doc->guidesSettings.showBleed = !doc->guidesSettings.showBleed;
  6158. view->DrawNew();
  6159. }
  6160. }
  6161.  
  6162. void ScribusMainWindow::ToggleFrames()
  6163. {
  6164. if (doc)
  6165. {
  6166. guidesStatus[0] = false;
  6167. doc->guidesSettings.framesShown = !doc->guidesSettings.framesShown;
  6168. view->DrawNew();
  6169. }
  6170. }
  6171.  
  6172. void ScribusMainWindow::ToggleLayerMarkers()
  6173. {
  6174. if (doc)
  6175. {
  6176. guidesStatus[0] = false;
  6177. doc->guidesSettings.layerMarkersShown = !doc->guidesSettings.layerMarkersShown;
  6178. view->DrawNew();
  6179. }
  6180. }
  6181.  
  6182. void ScribusMainWindow::ToggleRaster()
  6183. {
  6184. if (doc)
  6185. {
  6186. guidesStatus[0] = false;
  6187. doc->guidesSettings.gridShown = !doc->guidesSettings.gridShown;
  6188. view->DrawNew();
  6189. }
  6190. }
  6191.  
  6192. void ScribusMainWindow::ToggleGuides()
  6193. {
  6194. if (doc)
  6195. {
  6196. guidesStatus[0] = false;
  6197. doc->guidesSettings.guidesShown = !doc->guidesSettings.guidesShown;
  6198. view->DrawNew();
  6199. }
  6200. }
  6201.  
  6202. void ScribusMainWindow::ToggleColumnBorders()
  6203. {
  6204. if (doc)
  6205. {
  6206. guidesStatus[0] = false;
  6207. doc->guidesSettings.colBordersShown = !doc->guidesSettings.colBordersShown;
  6208. view->DrawNew();
  6209. }
  6210. }
  6211.  
  6212. void ScribusMainWindow::ToggleBase()
  6213. {
  6214. if (doc)
  6215. {
  6216. guidesStatus[0] = false;
  6217. doc->guidesSettings.baseShown = !doc->guidesSettings.baseShown;
  6218. view->DrawNew();
  6219. }
  6220. }
  6221.  
  6222. void ScribusMainWindow::ToggleTextLinks()
  6223. {
  6224. if (doc)
  6225. {
  6226. guidesStatus[0] = false;
  6227. doc->guidesSettings.linkShown = !doc->guidesSettings.linkShown;
  6228. view->DrawNew();
  6229. }
  6230. }
  6231.  
  6232. void ScribusMainWindow::ToggleTextControls()
  6233. {
  6234. if (doc)
  6235. {
  6236. guidesStatus[0] = false;
  6237. doc->guidesSettings.showControls = !doc->guidesSettings.showControls;
  6238. view->DrawNew();
  6239. }
  6240. }
  6241.  
  6242. void ScribusMainWindow::ToggleRulers()
  6243. {
  6244. if (doc)
  6245. {
  6246. guidesStatus[0] = false;
  6247. doc->guidesSettings.rulersShown = !doc->guidesSettings.rulersShown;
  6248. view->setRulersShown(doc->guidesSettings.rulersShown);
  6249. }
  6250. }
  6251.  
  6252. void ScribusMainWindow::ToggleRulerMode()
  6253. {
  6254. if (doc)
  6255. {
  6256. guidesStatus[0] = false;
  6257. doc->guidesSettings.rulerMode = !doc->guidesSettings.rulerMode;
  6258. if (doc->guidesSettings.rulerMode)
  6259. {
  6260. doc->rulerXoffset = 0;
  6261. doc->rulerYoffset = 0;
  6262. }
  6263. else
  6264. {
  6265. doc->rulerXoffset += doc->currentPage()->xOffset();
  6266. doc->rulerYoffset += doc->currentPage()->yOffset();
  6267. }
  6268. if (doc->m_Selection->count()==1)
  6269. {
  6270. PageItem* currItem=doc->m_Selection->itemAt(0);
  6271. if (currItem!=NULL)
  6272. currItem->emitAllToGUI();
  6273. }
  6274. //TODO emit from selection, handle group widths
  6275. view->DrawNew();
  6276. }
  6277. }
  6278.  
  6279. void ScribusMainWindow::ToggleURaster()
  6280. {
  6281. if (doc)
  6282. {
  6283. doc->useRaster = !doc->useRaster;
  6284. slotDocCh();
  6285. }
  6286. }
  6287.  
  6288. void ScribusMainWindow::ToggleUGuides()
  6289. {
  6290. if (doc)
  6291. {
  6292. doc->SnapGuides = !doc->SnapGuides;
  6293. slotDocCh();
  6294. }
  6295. }
  6296.  
  6297.  
  6298. void ScribusMainWindow::toggleNodeEdit()
  6299. {
  6300. if (!doc)
  6301. return;
  6302.  
  6303. if (doc->appMode == modeEditClip)
  6304. {
  6305. view->requestMode(submodeEndNodeEdit);
  6306. }
  6307. else
  6308. {
  6309. view->requestMode(modeEditClip);
  6310. }
  6311. }
  6312.  
  6313. void ScribusMainWindow::ToggleFrameEdit()
  6314. {
  6315. if (!doc)
  6316. return;
  6317. if (doc->appMode == modeEditClip)
  6318. NoFrameEdit();
  6319. else
  6320. {
  6321. //CB Enable/Disable undo in frame edit mode
  6322. // undoManager->setUndoEnabled(false);
  6323. scrActions["editUndoAction"]->setEnabled(false);
  6324. scrActions["editRedoAction"]->setEnabled(false);
  6325. //done elsewhere now slotSelect();
  6326. nodePalette->setDoc(doc, view);
  6327. nodePalette->MoveN();
  6328. nodePalette->HaveNode(false, false);
  6329. nodePalette->MoveNode->setChecked(true);
  6330. nodePalette->show();
  6331. // qDebug() << "nodepalette show:" << nodePalette->geometry();
  6332. connect(view, SIGNAL(HavePoint(bool, bool)), nodePalette, SLOT(HaveNode(bool, bool)));
  6333. doc->nodeEdit.reset();
  6334. //done elsewhere now doc->appMode = modeEditClip;
  6335. scrActions["toolsSelect"]->setEnabled(false);
  6336. scrActions["toolsRotate"]->setEnabled(false);
  6337. scrActions["toolsEditContents"]->setEnabled(false);
  6338. scrActions["toolsEditWithStoryEditor"]->setEnabled(false);
  6339. scrActions["toolsZoom"]->setEnabled(false);
  6340. scrActions["toolsInsertTextFrame"]->setEnabled(false);
  6341. scrActions["toolsInsertImageFrame"]->setEnabled(false);
  6342. scrActions["toolsInsertTableFrame"]->setEnabled(false);
  6343. scrActions["toolsInsertShape"]->setEnabled(false);
  6344. scrActions["toolsInsertLine"]->setEnabled(false);
  6345. scrActions["toolsInsertBezier"]->setEnabled(false);
  6346. scrActions["toolsInsertFreehandLine"]->setEnabled(false);
  6347. scrActions["toolsInsertPolygon"]->setEnabled(false);
  6348. scrActions["toolsInsertRenderFrame"]->setEnabled(false);
  6349. scrActions["toolsLinkTextFrame"]->setEnabled(false);
  6350. scrActions["toolsUnlinkTextFrame"]->setEnabled(false);
  6351. scrActions["toolsMeasurements"]->setEnabled(false);
  6352. scrActions["toolsCopyProperties"]->setEnabled(false);
  6353. scrActions["toolsEyeDropper"]->setEnabled(false);
  6354. scrActions["toolsPDFPushButton"]->setEnabled(false);
  6355. scrActions["toolsPDFTextField"]->setEnabled(false);
  6356. scrActions["toolsPDFCheckBox"]->setEnabled(false);
  6357. scrActions["toolsPDFComboBox"]->setEnabled(false);
  6358. scrActions["toolsPDFListBox"]->setEnabled(false);
  6359. scrActions["toolsPDFAnnotText"]->setEnabled(false);
  6360. scrActions["toolsPDFAnnotLink"]->setEnabled(false);
  6361. scrActions["itemDelete"]->setEnabled(false);
  6362. layerPalette->setEnabled(false);
  6363. outlinePalette->setEnabled(false);
  6364. guidePalette->setEnabled(false);
  6365. scrapbookPalette->setEnabled(false);
  6366. pagePalette->setEnabled(false);
  6367. bookmarkPalette->setEnabled(false);
  6368. docCheckerPalette->setEnabled(false);
  6369. styleManager->setEnabled(false);
  6370. alignDistributePalette->setEnabled(false);
  6371. view->pageSelector->setEnabled(false);
  6372. view->layerMenu->setEnabled(false);
  6373. if (doc->m_Selection->count() != 0)
  6374. {
  6375. PageItem *currItem = doc->m_Selection->itemAt(0);
  6376. // view->MarkClip(currItem, currItem->PoLine, true);
  6377. nodePalette->EditCont->setEnabled(currItem->ContourLine.size() != 0);
  6378. nodePalette->ResetCont->setEnabled(false);
  6379. nodePalette->ResetContClip->setEnabled(false);
  6380. nodePalette->PolyStatus(currItem->itemType(), currItem->PoLine.size());
  6381. if ((currItem->asImageFrame()) && (currItem->imageClip.size() != 0))
  6382. {
  6383. nodePalette->ResetContClip->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3)));
  6384. nodePalette->ResetContClip->show();
  6385. nodePalette->ResetShape2Clip->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(3), static_cast<QSizePolicy::Policy>(3)));
  6386. nodePalette->ResetShape2Clip->show();
  6387. nodePalette->layout()->activate();
  6388. nodePalette->resize(QSize(170, 380).expandedTo(nodePalette->minimumSizeHint()));
  6389. }
  6390. else
  6391. {
  6392. nodePalette->ResetContClip->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(6), static_cast<QSizePolicy::Policy>(6)));
  6393. nodePalette->ResetShape2Clip->setSizePolicy(QSizePolicy(static_cast<QSizePolicy::Policy>(6), static_cast<QSizePolicy::Policy>(6)));
  6394. nodePalette->layout()->activate();
  6395. nodePalette->ResetContClip->hide();
  6396. nodePalette->ResetShape2Clip->hide();
  6397. nodePalette->layout()->activate();
  6398. nodePalette->resize(QSize(170, 380).expandedTo(nodePalette->minimumSizeHint()));
  6399. }
  6400. }
  6401. }
  6402. scrActions["itemShapeEdit"]->setChecked(doc->appMode == modeEditClip);
  6403. }
  6404.  
  6405. void ScribusMainWindow::NoFrameEdit()
  6406. {
  6407. disconnect(view, SIGNAL(HavePoint(bool, bool)), nodePalette, SLOT(HaveNode(bool, bool)));
  6408. actionManager->disconnectModeActions();
  6409. nodePalette->setDoc(0,0);
  6410. nodePalette->hide();
  6411. // qDebug() << "nodepalette hide";
  6412. scrActions["toolsSelect"]->setEnabled(true);
  6413. scrActions["toolsSelect"]->setChecked(true);
  6414. scrActions["toolsRotate"]->setEnabled(true);
  6415. scrActions["toolsZoom"]->setEnabled(true);
  6416. scrActions["toolsInsertTextFrame"]->setEnabled(true);
  6417. scrActions["toolsInsertImageFrame"]->setEnabled(true);
  6418. scrActions["toolsInsertTableFrame"]->setEnabled(true);
  6419. scrActions["toolsInsertShape"]->setEnabled(true);
  6420. scrActions["toolsInsertLine"]->setEnabled(true);
  6421. scrActions["toolsInsertBezier"]->setEnabled(true);
  6422. scrActions["toolsInsertFreehandLine"]->setEnabled(true);
  6423. scrActions["toolsInsertPolygon"]->setEnabled(true);
  6424. scrActions["toolsInsertRenderFrame"]->setEnabled(true);
  6425. scrActions["toolsPDFPushButton"]->setEnabled(true);
  6426. scrActions["toolsPDFTextField"]->setEnabled(true);
  6427. scrActions["toolsPDFCheckBox"]->setEnabled(true);
  6428. scrActions["toolsPDFComboBox"]->setEnabled(true);
  6429. scrActions["toolsPDFListBox"]->setEnabled(true);
  6430. scrActions["toolsPDFAnnotText"]->setEnabled(true);
  6431. scrActions["toolsPDFAnnotLink"]->setEnabled(true);
  6432. scrActions["toolsEditContents"]->setChecked(false);
  6433. scrActions["toolsEditWithStoryEditor"]->setChecked(false);
  6434. scrActions["toolsMeasurements"]->setEnabled(true);
  6435. scrActions["toolsCopyProperties"]->setEnabled(true);
  6436. scrActions["toolsEyeDropper"]->setEnabled(true);
  6437. scrActions["toolsUnlinkTextFrame"]->setEnabled(true);
  6438. scrActions["itemDelete"]->setEnabled(true);
  6439. scrActions["itemShapeEdit"]->setChecked(false);
  6440. layerPalette->setEnabled(true);
  6441. outlinePalette->setEnabled(true);
  6442. guidePalette->setEnabled(true);
  6443. scrapbookPalette->setEnabled(true);
  6444. pagePalette->setEnabled(true);
  6445. bookmarkPalette->setEnabled(true);
  6446. docCheckerPalette->setEnabled(true);
  6447. styleManager->setEnabled(true);
  6448. alignDistributePalette->setEnabled(true);
  6449. view->pageSelector->setEnabled(true);
  6450. view->layerMenu->setEnabled(true);
  6451. // bool tmpClip = doc->EditClip; // for enabling undo if exiting shape edit mode
  6452. if (HaveDoc)
  6453. {
  6454. // done elsewhere now: doc->appMode = modeNormal;
  6455. doc->nodeEdit.reset();
  6456. if (doc->m_Selection->count() != 0)
  6457. {
  6458. HaveNewSel(doc->m_Selection->itemAt(0)->itemType());
  6459. doc->m_Selection->itemAt(0)->emitAllToGUI();
  6460. view->DrawNew();
  6461. }
  6462. else
  6463. HaveNewSel(-1);
  6464. }
  6465. actionManager->connectModeActions();
  6466. // if (tmpClip)
  6467. // undoManager->setUndoEnabled(true);
  6468. }
  6469.  
  6470. /** This is the safest method to return to modeNormal
  6471. */
  6472. void ScribusMainWindow::slotSelect()
  6473. {
  6474. if (doc)
  6475. view->requestMode(modeNormal);
  6476. else
  6477. setAppMode(modeNormal);
  6478. }
  6479.  
  6480. void ScribusMainWindow::setAppModeByToggle(bool isOn, int newMode)
  6481. {
  6482. keyrep=false;
  6483. if (doc && isOn)
  6484. view->requestMode(newMode);
  6485. else
  6486. slotSelect();
  6487. }
  6488.  
  6489. void ScribusMainWindow::setAppMode(int mode)
  6490. {
  6491. assert(mode < submodeFirstSubmode);
  6492.  
  6493. //disconnect the tools actions so we dont fire them off
  6494. actionManager->disconnectModeActions();
  6495. //set the actions state based on incoming mode
  6496. scrActions["toolsSelect"]->setChecked(mode==modeNormal);
  6497. scrActions["toolsInsertTextFrame"]->setChecked(mode==modeDrawText);
  6498. scrActions["toolsInsertImageFrame"]->setChecked(mode==modeDrawImage);
  6499. scrActions["toolsInsertTableFrame"]->setChecked(mode==modeDrawTable);
  6500. scrActions["toolsInsertShape"]->setChecked(mode==modeDrawShapes);
  6501. scrActions["toolsInsertPolygon"]->setChecked(mode==modeDrawRegularPolygon);
  6502. scrActions["toolsInsertLine"]->setChecked(mode==modeDrawLine);
  6503. scrActions["toolsInsertBezier"]->setChecked(mode==modeDrawBezierLine);
  6504. scrActions["toolsInsertFreehandLine"]->setChecked(mode==modeDrawFreehandLine);
  6505. scrActions["toolsInsertRenderFrame"]->setChecked(mode==modeDrawLatex);
  6506. scrActions["toolsRotate"]->setChecked(mode==modeRotation);
  6507. scrActions["toolsZoom"]->setChecked(mode==modeMagnifier);
  6508. scrActions["toolsEditContents"]->setChecked(mode==modeEdit);
  6509. scrActions["toolsEditWithStoryEditor"]->setChecked(mode==modeStoryEditor);
  6510. scrActions["toolsLinkTextFrame"]->setChecked(mode==modeLinkFrames);
  6511. scrActions["toolsUnlinkTextFrame"]->setChecked(mode==modeUnlinkFrames);
  6512. scrActions["toolsEyeDropper"]->setChecked(mode==modeEyeDropper);
  6513. scrActions["toolsMeasurements"]->setChecked(mode==modeMeasurementTool);
  6514. scrActions["toolsCopyProperties"]->setChecked(mode==modeCopyProperties);
  6515. scrActions["toolsPDFPushButton"]->setChecked(mode==modeInsertPDFButton);
  6516. scrActions["toolsPDFTextField"]->setChecked(mode==modeInsertPDFTextfield);
  6517. scrActions["toolsPDFCheckBox"]->setChecked(mode==modeInsertPDFCheckbox);
  6518. scrActions["toolsPDFComboBox"]->setChecked(mode==modeInsertPDFCombobox);
  6519. scrActions["toolsPDFListBox"]->setChecked(mode==modeInsertPDFListbox);
  6520. scrActions["toolsPDFAnnotText"]->setChecked(mode==modeInsertPDFTextAnnotation);
  6521. scrActions["toolsPDFAnnotLink"]->setChecked(mode==modeInsertPDFLinkAnnotation);
  6522.  
  6523. if (HaveDoc)
  6524. {
  6525. PageItem *currItem=0;
  6526. if (doc->m_Selection->count() != 0)
  6527. currItem = doc->m_Selection->itemAt(0);
  6528. int oldMode = doc->appMode;
  6529. if (oldMode == modeEditClip && mode != modeEditClip)
  6530. NoFrameEdit();
  6531. else if (oldMode != modeEditClip && mode == modeEditClip)
  6532. ToggleFrameEdit();
  6533. doc->appMode = mode;
  6534. // if (oldMode == modeMeasurementTool)
  6535. // disconnect(view, SIGNAL(MVals(double, double, double, double, double, double, int )), measurementPalette, SLOT(setValues(double, double, double, double, double, double, int )));
  6536. /* if (mode != modeEdit && doc->CurTimer!=NULL)
  6537. {
  6538. disconnect(doc->CurTimer, SIGNAL(timeout()), view, SLOT(blinkCursor()));
  6539. doc->CurTimer->stop();
  6540. delete doc->CurTimer;
  6541. doc->CurTimer = NULL;
  6542. } */
  6543. if (mode!=modeEdit && oldMode==modeEdit)
  6544. actionManager->restoreActionShortcutsPostEditMode();
  6545. else
  6546. if (mode==modeEdit && oldMode!=modeEdit)
  6547. actionManager->saveActionShortcutsPreEditMode();
  6548. if (oldMode == modeEdit)
  6549. {
  6550. view->zoomSpinBox->setFocusPolicy(Qt::ClickFocus);
  6551. view->pageSelector->setFocusPolicy(Qt::ClickFocus);
  6552. scrActions["editClearContents"]->setEnabled(false);
  6553. charPalette->setEnabled(false, 0);
  6554. // view->slotDoCurs(false);
  6555. if (currItem != 0)
  6556. {
  6557. currItem->update();
  6558. if (currItem->asTextFrame())
  6559. enableTextActions(&scrActions, false);
  6560. scrMenuMgr->setMenuEnabled("Item", true);
  6561. }
  6562. view->horizRuler->textMode(false);
  6563. view->horizRuler->update();
  6564. }
  6565. if (mode == modeEdit)
  6566. {
  6567. // view->zoomSpinBox->setFocusPolicy(QWidget::NoFocus);
  6568. // view->pageSelector->setFocusPolicy(QWidget::NoFocus);
  6569. if (currItem != 0)
  6570. {
  6571. // if ((currItem->itemType() == PageItem::Polygon) || (currItem->itemType() == PageItem::PolyLine) || (currItem->itemType() == PageItem::PathText))
  6572. // {
  6573. // doc->appMode = modeNormal;
  6574. // view->requestMode(modeEditClip);
  6575. // return;
  6576. // }
  6577. setTBvals(currItem);
  6578. currItem->itemText.setCursorPosition(0);
  6579. }
  6580. scrActions["editPaste"]->setEnabled(false);
  6581. charPalette->setEnabled(true, currItem);
  6582. if (currItem!=NULL && currItem->asTextFrame())
  6583. enableTextActions(&scrActions, true, currItem->currentCharStyle().font().scName());
  6584. if (ScMimeData::clipboardHasScribusData())
  6585. {
  6586. bool textFrameEditMode = ((currItem != NULL) && (currItem->asTextFrame()));
  6587. scrActions["editPaste"]->setEnabled( textFrameEditMode || (currItem == NULL) );
  6588. }
  6589. // view->slotDoCurs(true);
  6590. scrMenuMgr->setMenuEnabled("Item", false);
  6591. /* doc->CurTimer = new QTimer(view);
  6592. if (doc->CurTimer!=NULL)
  6593. {
  6594. connect(doc->CurTimer, SIGNAL(timeout()), view, SLOT(blinkCursor()));
  6595. doc->CurTimer->start(500);
  6596. } */
  6597. if (currItem != 0)
  6598. {
  6599. scrActions["editCut"]->setEnabled(currItem->HasSel);
  6600. scrActions["editCopy"]->setEnabled(currItem->HasSel);
  6601. scrActions["editClearContents"]->setEnabled(currItem->HasSel);
  6602. scrActions["editSearchReplace"]->setEnabled(true);
  6603.  
  6604. // Why the hell do you want to update the item here? - pm
  6605. // currItem->update();
  6606. }
  6607. }
  6608. int docSelectionCount=doc->m_Selection->count();
  6609. if (mode == modeDrawBezierLine)
  6610. {
  6611. if ((docSelectionCount != 0) && (!prefsManager->appPrefs.stickyTools))
  6612. view->Deselect(true);
  6613. view->FirstPoly = true;
  6614. }
  6615. if (mode == modeEditGradientVectors)
  6616. propertiesPalette->setGradientEditMode(true);
  6617. // if (mode == modeMeasurementTool)
  6618. // {
  6619. // measurementPalette->show();
  6620. // connect(view, SIGNAL(MVals(double, double, double, double, double, double, int)), measurementPalette, SLOT(setValues(double, double, double, double, double, double, int )));
  6621. // }
  6622. switch (mode)
  6623. {
  6624. case modeDrawShapes:
  6625. if (docSelectionCount!=0)
  6626. view->Deselect(true);
  6627. qApp->changeOverrideCursor(QCursor(loadIcon("DrawFrame.xpm")));
  6628. break;
  6629. case modeDrawImage:
  6630. if (docSelectionCount!=0)
  6631. view->Deselect(true);
  6632. qApp->changeOverrideCursor(QCursor(loadIcon("DrawImageFrame.xpm")));
  6633. break;
  6634. case modeDrawLatex:
  6635. if (docSelectionCount!=0)
  6636. view->Deselect(true);
  6637. qApp->changeOverrideCursor(QCursor(loadIcon("DrawLatexFrame.xpm")));
  6638. break;
  6639. case modeDrawText:
  6640. if (docSelectionCount!=0)
  6641. view->Deselect(true);
  6642. qApp->changeOverrideCursor(QCursor(loadIcon("DrawTextFrame.xpm")));
  6643. break;
  6644. case modeDrawTable:
  6645. if (docSelectionCount!=0)
  6646. view->Deselect(true);
  6647. qApp->changeOverrideCursor(QCursor(loadIcon("DrawTable.xpm")));
  6648. break;
  6649. case modeDrawRegularPolygon:
  6650. if (docSelectionCount!=0)
  6651. view->Deselect(true);
  6652. qApp->changeOverrideCursor(QCursor(loadIcon("DrawPolylineFrame.xpm")));
  6653. break;
  6654. case modeMagnifier:
  6655. if (docSelectionCount!=0)
  6656. view->Deselect(true);
  6657. view->Magnify = true;
  6658. qApp->changeOverrideCursor(QCursor(loadIcon("LupeZ.xpm")));
  6659. break;
  6660. case modePanning:
  6661. qApp->changeOverrideCursor(QCursor(loadIcon("HandC.xpm")));
  6662. break;
  6663. case modeDrawLine:
  6664. case modeDrawBezierLine:
  6665. qApp->changeOverrideCursor(QCursor(Qt::CrossCursor));
  6666. break;
  6667. case modeDrawFreehandLine:
  6668. qApp->changeOverrideCursor(QCursor(loadIcon("DrawFreeLine.png"), 0, 32));
  6669. break;
  6670. case modeEyeDropper:
  6671. qApp->changeOverrideCursor(QCursor(loadIcon("colorpickercursor.png"), 0, 32));
  6672. break;
  6673. case modeInsertPDFButton:
  6674. case modeInsertPDFTextfield:
  6675. case modeInsertPDFCheckbox:
  6676. case modeInsertPDFCombobox:
  6677. case modeInsertPDFListbox:
  6678. case modeInsertPDFTextAnnotation:
  6679. case modeInsertPDFLinkAnnotation:
  6680. if (docSelectionCount!=0)
  6681. view->Deselect(true);
  6682. qApp->changeOverrideCursor(QCursor(Qt::CrossCursor));
  6683. break;
  6684. case modeMeasurementTool:
  6685. case modeEditGradientVectors:
  6686. qApp->changeOverrideCursor(QCursor(Qt::CrossCursor));
  6687. break;
  6688. default:
  6689. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  6690. break;
  6691. }
  6692. if (mode == modeDrawShapes)
  6693. {
  6694. doc->SubMode = modeToolBar->SubMode;
  6695. doc->ShapeValues = modeToolBar->ShapeVals;
  6696. doc->ValCount = modeToolBar->ValCount;
  6697. propertiesPalette->SCustom->setIcon(propertiesPalette->SCustom->getIconPixmap(doc->SubMode));
  6698. }
  6699. else
  6700. doc->SubMode = -1;
  6701. if (mode == modeNormal)
  6702. {
  6703. propertiesPalette->setGradientEditMode(false);
  6704. }
  6705. if (mode == modeLinkFrames)
  6706. doc->ElemToLink = doc->m_Selection->itemAt(0);
  6707. if ((mode == modeLinkFrames) || (mode == modeUnlinkFrames) || (oldMode == modeLinkFrames) || (oldMode == modeUnlinkFrames))
  6708. doc->regionsChanged()->update(QRect());
  6709.  
  6710. if (mode == modeStoryEditor)
  6711. {
  6712. slotStoryEditor();
  6713. slotSelect();
  6714. }
  6715. if (mode == modeCopyProperties)
  6716. {
  6717. if (doc->m_Selection->count() != 0)
  6718. {
  6719. doc->ElemToLink = doc->m_Selection->itemAt(0);
  6720. view->Deselect(true);
  6721. scrActions["toolsCopyProperties"]->setEnabled(true);
  6722. }
  6723. }
  6724. if (mode != modeNormal && mode != modeStoryEditor)
  6725. activateWindow();
  6726. PluginManager& pluginManager(PluginManager::instance());
  6727. pluginManager.enablePluginActionsForSelection(this);
  6728. }
  6729. actionManager->connectModeActions();
  6730. }
  6731.  
  6732. void ScribusMainWindow::setMainWindowActive()
  6733. {
  6734. activateWindow();
  6735. if (!scriptIsRunning())
  6736. raise();
  6737. }
  6738.  
  6739. void ScribusMainWindow::setItemTypeStyle(int id)
  6740. {
  6741. int b = 0;
  6742. if (id == 0)
  6743. {
  6744. scrActions["typeEffectNormal"]->setChecked(true);
  6745. scrActions["typeEffectUnderline"]->setChecked(false);
  6746. scrActions["typeEffectUnderlineWords"]->setChecked(false);
  6747. scrActions["typeEffectStrikeThrough"]->setChecked(false);
  6748. scrActions["typeEffectSmallCaps"]->setChecked(false);
  6749. scrActions["typeEffectAllCaps"]->setChecked(false);
  6750. scrActions["typeEffectSuperscript"]->setChecked(false);
  6751. scrActions["typeEffectSubscript"]->setChecked(false);
  6752. scrActions["typeEffectOutline"]->setChecked(false);
  6753. scrActions["typeEffectShadow"]->setChecked(false);
  6754. }
  6755. else
  6756. {
  6757. scrActions["typeEffectNormal"]->setChecked(false);
  6758. if (id == 4)
  6759. scrActions["typeEffectSubscript"]->setChecked(false);
  6760. if (id == 5)
  6761. scrActions["typeEffectSuperscript"]->setChecked(false);
  6762. if (id == 3)
  6763. scrActions["typeEffectAllCaps"]->setChecked(false);
  6764. if (id == 7)
  6765. scrActions["typeEffectSmallCaps"]->setChecked(false);
  6766. if (id == 8)
  6767. scrActions["typeEffectUnderline"]->setChecked(false);
  6768. if (id == 1)
  6769. scrActions["typeEffectUnderlineWords"]->setChecked(false);
  6770. if (scrActions["typeEffectUnderline"]->isChecked())
  6771. b |= 8;
  6772. if (scrActions["typeEffectUnderlineWords"]->isChecked())
  6773. b |= 512;
  6774. if (scrActions["typeEffectShadow"]->isChecked())
  6775. b |= 256;
  6776. if (scrActions["typeEffectStrikeThrough"]->isChecked())
  6777. b |= 16;
  6778. if (scrActions["typeEffectAllCaps"]->isChecked())
  6779. b |= 32;
  6780. if (scrActions["typeEffectSmallCaps"]->isChecked())
  6781. b |= 64;
  6782. if (scrActions["typeEffectSuperscript"]->isChecked())
  6783. b |= 1;
  6784. if (scrActions["typeEffectSubscript"]->isChecked())
  6785. b |= 2;
  6786. if (scrActions["typeEffectOutline"]->isChecked())
  6787. b |= 4;
  6788. }
  6789. setItemHoch(b);
  6790. }
  6791.  
  6792. void ScribusMainWindow::setStilvalue(int s)
  6793. {
  6794. int c = s & 1919;
  6795. // doc->currentStyle.charStyle().setFeatures(static_cast<StyleFlag>(c).featureList());
  6796. scrActions["typeEffectNormal"]->setChecked(c==0);
  6797. scrActions["typeEffectSuperscript"]->setChecked(c & 1);
  6798. scrActions["typeEffectSubscript"]->setChecked(c & 2);
  6799. scrActions["typeEffectOutline"]->setChecked(c & 4);
  6800. scrActions["typeEffectUnderline"]->setChecked(c & 8);
  6801. scrActions["typeEffectStrikeThrough"]->setChecked(c & 16);
  6802. scrActions["typeEffectAllCaps"]->setChecked(c & 32);
  6803. scrActions["typeEffectSmallCaps"]->setChecked(c & 64);
  6804. scrActions["typeEffectShadow"]->setChecked(c & 256);
  6805. scrActions["typeEffectUnderlineWords"]->setChecked(c & 512);
  6806. emit TextStil(s);
  6807. }
  6808.  
  6809. void ScribusMainWindow::setItemHoch(int h)
  6810. {
  6811. if (doc->m_Selection->count() != 0)
  6812. {
  6813. // doc->currentStyle.charStyle().setFeatures(static_cast<StyleFlag>(h).featureList());
  6814. setStilvalue(h);
  6815. doc->itemSelection_SetEffects(h);
  6816. }
  6817. }
  6818.  
  6819. //CB-->Doc partly
  6820. void ScribusMainWindow::deletePage2(int pg)
  6821. {
  6822. if (HaveDoc && doc->appMode == modeEditClip)
  6823. view->requestMode(submodeEndNodeEdit);
  6824. view->Deselect(true);
  6825. if (doc->Pages->count() == 1)
  6826. return;
  6827. deletePage(pg+1, pg+1);
  6828. }
  6829.  
  6830. void ScribusMainWindow::deletePage()
  6831. {
  6832. if (HaveDoc && doc->appMode == modeEditClip)
  6833. view->requestMode(submodeEndNodeEdit);
  6834. view->Deselect(true);
  6835. DelPages *dia = new DelPages(this, doc->currentPage()->pageNr()+1, doc->Pages->count());
  6836. if (dia->exec())
  6837. deletePage(dia->getFromPage(), dia->getToPage());
  6838. delete dia;
  6839. }
  6840.  
  6841. void ScribusMainWindow::deletePage(int from, int to)
  6842. {
  6843. UndoTransaction* activeTransaction = NULL;
  6844. assert( from > 0 );
  6845. assert( from <= to );
  6846. assert( to <= static_cast<int>(doc->Pages->count()) );
  6847. int oldPg = doc->currentPageNumber();
  6848. guidePalette->setDoc(NULL);
  6849. if (UndoManager::undoEnabled())
  6850. activeTransaction = new UndoTransaction(undoManager->beginTransaction(doc->DocName, Um::IDocument,
  6851. (from - to == 0) ? Um::DeletePage : Um::DeletePages, "",
  6852. Um::IDelete));
  6853. PageItem* ite;
  6854. doc->m_Selection->clear();
  6855. Selection tmpSelection(this, false);
  6856. for (int a = to - 1; a >= from - 1; a--)
  6857. {
  6858. for (int d = 0; d < doc->Items->count(); ++d)
  6859. {
  6860. ite = doc->Items->at(d);
  6861. if (ite->OwnPage == a)
  6862. {
  6863. ite->setLocked(false);
  6864. ite->isSingleSel = false;
  6865. if (ite->isBookmark)
  6866. DelBookMark(ite);
  6867. ite->isBookmark = false;
  6868. tmpSelection.addItem(ite);
  6869. }
  6870. }
  6871. Page *page = doc->Pages->at(a); // need to remove guides too to get their undo/redo actions working
  6872. page->guides.clearHorizontals(GuideManagerCore::Standard);
  6873. page->guides.clearHorizontals(GuideManagerCore::Auto);
  6874. page->guides.clearVerticals(GuideManagerCore::Standard);
  6875. page->guides.clearVerticals(GuideManagerCore::Auto);
  6876. }
  6877. if (tmpSelection.count() != 0)
  6878. doc->itemSelection_DeleteItem(&tmpSelection);
  6879. for (int a = to - 1; a >= from - 1; a--)
  6880. {
  6881. if (UndoManager::undoEnabled())
  6882. {
  6883. SimpleState *ss = new SimpleState(Um::DeletePage, "", Um::ICreate);
  6884. ss->set("DELETE_PAGE", "delete_page");
  6885. ss->set("PAGENR", a + 1);
  6886. ss->set("PAGENAME", doc->Pages->at(a)->pageName());
  6887. ss->set("MASTERPAGE", doc->Pages->at(a)->MPageNam);
  6888. // replace the deleted page in the undostack by a dummy object that will
  6889. // replaced with the "undone" page if user choose to undo the action
  6890. DummyUndoObject *duo = new DummyUndoObject();
  6891. uint id = static_cast<uint>(duo->getUId());
  6892. undoManager->replaceObject(doc->Pages->at(a)->getUId(), duo);
  6893. ss->set("DUMMY_ID", id);
  6894. undoManager->action(this, ss);
  6895. }
  6896. bool isMasterPage = !(doc->Pages->at(a)->pageName().isEmpty());
  6897. if (doc->masterPageMode())
  6898. doc->deleteMasterPage(a);
  6899. else
  6900. doc->deletePage(a);
  6901. disconnect(view->pageSelector, SIGNAL(GotoPage(int)), view, SLOT(GotoPa(int)));
  6902. view->pageSelector->setMaximum(doc->Pages->count());
  6903. view->pageSelector->GotoPg(0);
  6904. connect(view->pageSelector, SIGNAL(GotoPage(int)), view, SLOT(GotoPa(int)));
  6905. if (!isMasterPage) // Master pages are not added to sections when created
  6906. doc->removePageFromSection(a);
  6907. }
  6908. undoManager->setUndoEnabled(false); // ugly hack to disable object moving when undoing page deletion
  6909. view->reformPagesView();
  6910. undoManager->setUndoEnabled(true); // ugly hack continues
  6911. view->GotoPage(qMin(doc->Pages->count()-1, oldPg));
  6912. updateGUIAfterPagesChanged();
  6913. doc->rebuildMasterNames();
  6914. pagePalette->rebuildMasters();
  6915. if (activeTransaction)
  6916. {
  6917. activeTransaction->commit();
  6918. delete activeTransaction;
  6919. activeTransaction = NULL;
  6920. }
  6921. }
  6922.  
  6923. void ScribusMainWindow::movePage()
  6924. {
  6925. if (HaveDoc && doc->appMode == modeEditClip)
  6926. view->requestMode(submodeEndNodeEdit);
  6927. MovePages *dia = new MovePages(this, doc->currentPage()->pageNr()+1, doc->Pages->count(), true);
  6928. if (dia->exec())
  6929. {
  6930. int from = dia->getFromPage();
  6931. int to = dia->getToPage();
  6932. int wie = dia->getWhere();
  6933. int wo = dia->getWherePage();
  6934. if (from != wo || (wie == 2 && to != signed(doc->Pages->count()) ) )
  6935. {
  6936. doc->movePage(from-1, to, wo-1, wie);
  6937. updateGUIAfterPagesChanged();
  6938. }
  6939. }
  6940. delete dia;
  6941. }
  6942.  
  6943. void ScribusMainWindow::copyPage()
  6944. {
  6945. if (HaveDoc && doc->appMode == modeEditClip)
  6946. view->requestMode(submodeEndNodeEdit);
  6947. MovePages *dia = new MovePages(this, doc->currentPage()->pageNr()+1, doc->Pages->count(), false);
  6948. if (dia->exec())
  6949. {
  6950. int pageNumberToCopy=dia->getFromPage()-1;
  6951. int whereToInsert=dia->getWhere();
  6952. int copyCount=dia->getCopyCount();
  6953. int wo = dia->getWherePage();
  6954. doc->copyPage(pageNumberToCopy, wo, whereToInsert, copyCount);
  6955. view->Deselect(true);
  6956. updateGUIAfterPagesChanged();
  6957. }
  6958. delete dia;
  6959. }
  6960.  
  6961. void ScribusMainWindow::changePageMargins()
  6962. {
  6963. if (HaveDoc && doc->appMode == modeEditClip)
  6964. view->requestMode(submodeEndNodeEdit);
  6965. QString Nam = doc->currentPage()->MPageNam;
  6966. MarginDialog *dia = new MarginDialog(this, doc);
  6967. if (dia->exec())
  6968. {
  6969. int orientation = dia->getPageOrientation();
  6970. double ph = dia->getPageHeight();
  6971. double pw = dia->getPageWidth();
  6972. QString sizeName = dia->getpPrefsPageSizeName();
  6973. if (doc->masterPageMode())
  6974. {
  6975. int lp=0;
  6976. if (doc->currentPageLayout != singlePage)
  6977. lp = dia->pageOrder();
  6978. doc->changePageMargins(dia->top(), dia->bottom(),
  6979. dia->left(), dia->right(),
  6980. ph, pw, ph, pw, orientation,
  6981. sizeName, dia->getMarginPreset(), dia->getMoveObjects(), doc->currentPage()->pageNr(), lp);
  6982. }
  6983. else
  6984. {
  6985. doc->changePageMargins(dia->top(), dia->bottom(),
  6986. dia->left(), dia->right(),
  6987. ph, pw, ph, pw, orientation,
  6988. sizeName, dia->getMarginPreset(), dia->getMoveObjects(), doc->currentPage()->pageNr());
  6989. if (dia->masterPage() != Nam)
  6990. Apply_MasterPage(dia->masterPage(), doc->currentPage()->pageNr());
  6991. }
  6992. //CB: Moved to changePageMargins for #2338
  6993. //doc->currentPage()->marginPreset = dia->getMarginPreset();
  6994. //view->reformPages(dia->getMoveObjects());
  6995. //view->DrawNew();
  6996. }
  6997. delete dia;
  6998. }
  6999.  
  7000. void ScribusMainWindow::SetNewFont(const QString& nf)
  7001. {
  7002. setMainWindowActive();
  7003. QString nf2(nf);
  7004. if (!doc->UsedFonts.contains(nf))
  7005. {
  7006. if (doc->AddFont(nf)) //, prefsManager->appPrefs.AvailFonts[nf]->Font))
  7007. {
  7008. }
  7009. else
  7010. {//CB FIXME: to doc?
  7011. if (doc->m_Selection->count() != 0)
  7012. {
  7013. PageItem *currItem = doc->m_Selection->itemAt(0);
  7014. nf2 = currItem->currentCharStyle().font().scName();
  7015. }
  7016. }
  7017. }
  7018. //for undo
  7019. PageItem *currItem = doc->m_Selection->itemAt(0);
  7020. if (currItem->asTextFrame())
  7021. currItem->itemTextSaxed = currItem->getItemTextSaxed(doc->appMode == modeEdit? PageItem::SELECTION : PageItem::FRAME);
  7022. // qDebug() << "setNewFont" << currItem->HasSel;
  7023. doc->itemSelection_SetFont(nf2);
  7024. if (currItem->asTextFrame())
  7025. currItem->asTextFrame()->updateUndo(currItem->HasSel? PageItem::PARAMSEL : PageItem::PARAMFULL);
  7026.  
  7027. // doc->currentStyle.charStyle().setFont((*doc->AllFonts)[nf2]);
  7028. view->DrawNew();
  7029. // slotDocCh();
  7030. }
  7031.  
  7032. void ScribusMainWindow::setItemFSize(int id)
  7033. {
  7034. PageItem *currItem = doc->m_Selection->itemAt(0);
  7035. if (currItem->asTextFrame())
  7036. currItem->itemTextSaxed = currItem->getItemTextSaxed(doc->appMode == modeEdit? PageItem::SELECTION : PageItem::FRAME);
  7037.  
  7038. int c = id;
  7039. if (c != -1)
  7040. doc->itemSelection_SetFontSize(c*10);
  7041. else
  7042. {
  7043. bool ok = false;
  7044. Query dia(this, "New", 1, 0, tr("&Size:"), tr("Size"));
  7045. if (dia.exec())
  7046. {
  7047. c = qRound(dia.getEditText().toDouble(&ok));
  7048. if ((ok) && (c < 1025) && (c > 0))
  7049. doc->itemSelection_SetFontSize(c*10);
  7050. }
  7051. }
  7052. if (currItem->asTextFrame())
  7053. currItem->asTextFrame()->updateUndo(currItem->HasSel? PageItem::PARAMSEL : PageItem::PARAMFULL);
  7054.  
  7055. propertiesPalette->setSize(c*10);
  7056. // slotDocCh();
  7057. }
  7058.  
  7059. //CB-->Doc partly
  7060. void ScribusMainWindow::setItemShade(int id)
  7061. {
  7062. int c = id;
  7063. bool ok = false;
  7064. if (doc->m_Selection->count() != 0)
  7065. {
  7066. PageItem *currItem = doc->m_Selection->itemAt(0);
  7067. if (c != -1)
  7068. {
  7069. if ((currItem->itemType() == PageItem::TextFrame) || (currItem->itemType() == PageItem::PathText))
  7070. doc->itemSelection_SetFillShade(c);
  7071. else
  7072. doc->itemSelection_SetItemBrushShade(c);
  7073. }
  7074. else
  7075. {
  7076. Query* dia = new Query(this, "New", 1, 0, tr("&Shade:"), tr("Shade"));
  7077. if (dia->exec())
  7078. {
  7079. c = dia->getEditText().toInt(&ok);
  7080. if (ok)
  7081. {
  7082. if ((currItem->itemType() == PageItem::TextFrame) || (currItem->itemType() == PageItem::PathText))
  7083. doc->itemSelection_SetFillShade(c);
  7084. else
  7085. doc->itemSelection_SetItemBrushShade(c);
  7086. }
  7087. }
  7088. delete dia;
  7089. }
  7090. }
  7091. // slotDocCh();
  7092. }
  7093.  
  7094. /* CB: unused in 135 without the colours menu
  7095. void ScribusMainWindow::setCSMenu()
  7096. {
  7097. QString la = CommonStrings::tr_NoneColor;
  7098. int lb = 100;
  7099. PageItem *currItem;
  7100. if (doc->m_Selection->count() != 0)
  7101. {
  7102. currItem = doc->m_Selection->itemAt(0);
  7103. if ((currItem->asTextFrame()) || (currItem->asPathText()))
  7104. {
  7105. if ((doc->appMode == modeEdit) && (currItem->itemText.length() != 0))
  7106. {
  7107. la = currItem->itemText.charStyle(qMin(currItem->CPos, static_cast<int>(currItem->itemText.length()-1))).fillColor();
  7108. lb = qRound(currItem->itemText.charStyle(qMin(currItem->CPos, static_cast<int>(currItem->itemText.length()-1))).fillShade());
  7109. }
  7110. else
  7111. {
  7112. la = currItem->itemText.defaultStyle().charStyle().fillColor();
  7113. lb = qRound(currItem->itemText.defaultStyle().charStyle().fillShade());
  7114. }
  7115. }
  7116. else
  7117. {
  7118. la = currItem->fillColor();
  7119. lb = qRound(currItem->fillShade());
  7120. }
  7121. }
  7122. if (la == CommonStrings::None)
  7123. la = CommonStrings::tr_NoneColor;
  7124. if (scrActions[QString("shade%1").arg(lb)])
  7125. scrActions[QString("shade%1").arg(lb)]->setChecked(true);
  7126. }
  7127. */
  7128.  
  7129. #if 0
  7130. //CB still called from SE
  7131. void ScribusMainWindow::saveStyles(StilFormate *dia)
  7132. {
  7133. QList<uint> ers;
  7134. QString nn;
  7135. // PageItem* ite = 0;
  7136. bool ff;
  7137. uint nr;
  7138. ers.clear();
  7139. /*FIXME:NLS
  7140. ers.append(0);
  7141. ers.append(1);
  7142. ers.append(2);
  7143. ers.append(3);
  7144. ers.append(4);
  7145. for (uint a=5; a<doc->docParagraphStyles.count(); ++a)
  7146. */
  7147. for (uint a=0; a<doc->paragraphStyles().count(); ++a)
  7148. {
  7149. ff = false;
  7150. nn = doc->paragraphStyles()[a].name();
  7151. for (uint b=0; b<dia->TempVorl.count(); ++b)
  7152. {
  7153. if (nn == dia->TempVorl[b].name())
  7154. {
  7155. nr = b;
  7156. ff = true;
  7157. break;
  7158. }
  7159. }
  7160. if (ff)
  7161. ers.append(nr);
  7162. else
  7163. {
  7164. for (uint b=0; b<dia->TempVorl.count(); ++b)
  7165. {
  7166. if (doc->paragraphStyles()[a].equiv(dia->TempVorl[b]))
  7167. {
  7168. nr = b;
  7169. ff = true;
  7170. break;
  7171. }
  7172. }
  7173. if (ff)
  7174. ers.append(nr);
  7175. else
  7176. {
  7177. if (dia->ReplaceList.count() != 0)
  7178. {
  7179. QString ne = dia->ReplaceList[nn];
  7180. if (ne == tr("No Style"))
  7181. ers.append(0);
  7182. else
  7183. {
  7184. for (uint b=0; b<dia->TempVorl.count(); ++b)
  7185. {
  7186. if (ne == dia->TempVorl[b].name())
  7187. {
  7188. nr = b;
  7189. ff = true;
  7190. break;
  7191. }
  7192. }
  7193. if (ff)
  7194. ers.append(nr);
  7195. else
  7196. ers.append(0);
  7197. }
  7198. }
  7199. else
  7200. ers.append(0);
  7201. }
  7202. }
  7203. }
  7204. // uint counter = 0;
  7205. /*
  7206. for (uint lc = 0; lc < 3; ++lc)
  7207. {
  7208. switch (lc)
  7209. {
  7210. case 0:
  7211. counter = doc->MasterItems.count();
  7212. break;
  7213. case 1:
  7214. counter = doc->DocItems.count();
  7215. break;
  7216. case 2:
  7217. counter = doc->FrameItems.count();
  7218. break;
  7219. }
  7220. for (uint d=0; d< counter; ++d)
  7221. {
  7222. switch (lc)
  7223. {
  7224. case 0:
  7225. ite = doc->MasterItems.at(d);
  7226. break;
  7227. case 1:
  7228. ite = doc->DocItems.at(d);
  7229. break;
  7230. case 2:
  7231. ite = doc->FrameItems.at(d);
  7232. break;
  7233. }
  7234. if (ite->asTextFrame())
  7235. {
  7236. CharStyle lastStyle;
  7237. int lastStyleStart = 0;
  7238. int lastParaStyle = -1;
  7239. for (int e=0; e<ite->itemText.length(); ++e)
  7240. {
  7241. const ParagraphStyle origStyle(ite->itemText.paragraphStyle(e));
  7242. int cabori = findParagraphStyle(doc, origStyle);
  7243. assert (cabori >= 0 && cabori < doc->docParagraphStyles.count() );
  7244. int cabneu = ers[cabori];
  7245. assert (cabneu >= 0 && cabneu < dia->TempVorl.count() );
  7246. CharStyle newStyle;
  7247. if (cabori > 4)
  7248. {
  7249. if (cabneu > 0)
  7250. {
  7251. if (ite->itemText.charStyle(e).font() == doc->docParagraphStyles[cabori].charStyle().font())
  7252. newStyle.setFont(dia->TempVorl[cabneu].charStyle().font());
  7253. if (ite->itemText.charStyle(e).fontSize() == doc->docParagraphStyles[cabori].charStyle().fontSize())
  7254. newStyle.setFontSize(dia->TempVorl[cabneu].charStyle().fontSize());
  7255. if ((ite->itemText.charStyle(e).effects() & 1919 ) == doc->docParagraphStyles[cabori].charStyle().effects())
  7256. {
  7257. StyleFlag fl = static_cast<StyleFlag>(ite->itemText.charStyle(e).effects() & ~1919);
  7258. fl |= dia->TempVorl[cabneu].charStyle().effects();
  7259. newStyle.setEffects(fl);
  7260. }
  7261. if (ite->itemText.charStyle(e).fillColor() == doc->docParagraphStyles[cabori].charStyle().fillColor())
  7262. newStyle.setFillColor(dia->TempVorl[cabneu].charStyle().fillColor());
  7263. if (ite->itemText.charStyle(e).fillShade() == doc->docParagraphStyles[cabori].charStyle().fillShade())
  7264. newStyle.setFillShade(dia->TempVorl[cabneu].charStyle().fillShade());
  7265. if (ite->itemText.charStyle(e).strokeColor() == doc->docParagraphStyles[cabori].charStyle().strokeColor())
  7266. newStyle.setStrokeColor(dia->TempVorl[cabneu].charStyle().strokeColor());
  7267. if (ite->itemText.charStyle(e).strokeShade() == doc->docParagraphStyles[cabori].charStyle().strokeShade())
  7268. newStyle.setStrokeShade(dia->TempVorl[cabneu].charStyle().strokeShade());
  7269. if (ite->itemText.charStyle(e).shadowXOffset() == doc->docParagraphStyles[cabori].charStyle().shadowXOffset())
  7270. newStyle.setShadowXOffset(dia->TempVorl[cabneu].charStyle().shadowXOffset());
  7271. if (ite->itemText.charStyle(e).shadowYOffset() == doc->docParagraphStyles[cabori].charStyle().shadowYOffset())
  7272. newStyle.setShadowYOffset(dia->TempVorl[cabneu].charStyle().shadowYOffset());
  7273. if (ite->itemText.charStyle(e).outlineWidth() == doc->docParagraphStyles[cabori].charStyle().outlineWidth())
  7274. newStyle.setOutlineWidth(dia->TempVorl[cabneu].charStyle().outlineWidth());
  7275. if (ite->itemText.charStyle(e).underlineOffset() == doc->docParagraphStyles[cabori].charStyle().underlineOffset())
  7276. newStyle.setUnderlineOffset(dia->TempVorl[cabneu].charStyle().underlineOffset());
  7277. if (ite->itemText.charStyle(e).underlineWidth() == doc->docParagraphStyles[cabori].charStyle().underlineWidth())
  7278. newStyle.setUnderlineWidth(dia->TempVorl[cabneu].charStyle().underlineWidth());
  7279. if (ite->itemText.charStyle(e).strikethruOffset() == doc->docParagraphStyles[cabori].charStyle().strikethruOffset())
  7280. newStyle.setStrikethruOffset(dia->TempVorl[cabneu].charStyle().strikethruOffset());
  7281. if (ite->itemText.charStyle(e).strikethruWidth() == doc->docParagraphStyles[cabori].charStyle().strikethruWidth())
  7282. newStyle.setStrikethruWidth(dia->TempVorl[cabneu].charStyle().strikethruWidth());
  7283. if (ite->itemText.charStyle(e).scaleH() == doc->docParagraphStyles[cabori].charStyle().scaleH())
  7284. newStyle.setScaleH(dia->TempVorl[cabneu].charStyle().scaleH());
  7285. if (ite->itemText.charStyle(e).scaleV() == doc->docParagraphStyles[cabori].charStyle().scaleV())
  7286. newStyle.setScaleV(dia->TempVorl[cabneu].charStyle().scaleV());
  7287. if (ite->itemText.charStyle(e).baselineOffset() == doc->docParagraphStyles[cabori].charStyle().baselineOffset())
  7288. newStyle.setBaselineOffset(dia->TempVorl[cabneu].charStyle().baselineOffset());
  7289. if (ite->itemText.charStyle(e).tracking() == doc->docParagraphStyles[cabori].charStyle().tracking())
  7290. newStyle.setTracking(dia->TempVorl[cabneu].charStyle().tracking());
  7291. }
  7292. else
  7293. {
  7294. newStyle = ite->itemText.defaultStyle().charStyle();
  7295. //.cstyle & static_cast<StyleFlag>(~1919);
  7296. //newStyle.cstyle |= static_cast<StyleFlag>(ite->TxTStyle);
  7297. }
  7298. if (newStyle != lastStyle || lastParaStyle != cabneu) {
  7299. ite->itemText.applyCharStyle(lastStyleStart, e-lastStyleStart, lastStyle);
  7300. lastStyle = newStyle;
  7301. lastStyleStart = e;
  7302. lastParaStyle = cabneu;
  7303. }
  7304. if (ite->itemText.text(e) == SpecialChars::PARSEP && cabneu >= 0) {
  7305. ite->itemText.applyStyle(e, dia->TempVorl[cabneu]);
  7306. }
  7307. }
  7308. else if (lastParaStyle >= 0) {
  7309. ite->itemText.applyCharStyle(lastStyleStart, e-lastStyleStart, lastStyle);
  7310. lastStyle = newStyle;
  7311. lastStyleStart = e;
  7312. lastParaStyle = -1;
  7313. }
  7314. }
  7315. if (ite->itemText.length() > 0) {
  7316. ite->itemText.applyCharStyle(lastStyleStart, ite->itemText.length()-lastStyleStart, lastStyle);
  7317. if (lastParaStyle >=0 )
  7318. ite->itemText.applyStyle(ite->itemText.length()-1, dia->TempVorl[lastParaStyle]);
  7319. }
  7320. }
  7321. }
  7322. }
  7323. */
  7324. if (CurrStED != NULL)
  7325. {
  7326. /* if (CurrStED->Editor->StyledText.count() != 0)
  7327. {
  7328. for (uint pa = 0; pa < CurrStED->Editor->StyledText.count(); ++pa)
  7329. {
  7330. SEditor::ChList *chars;
  7331. chars = CurrStED->Editor->StyledText.at(pa);
  7332. (*CurrStED->Editor->ParagStyles.at(pa)) = ers[CurrStED->Editor->ParagStyles[pa]];
  7333.  
  7334. int cabneu = 0;
  7335. for (uint e = 0; e < chars->count(); ++e)
  7336. {
  7337. int cabori = chars->at(e)->cab;
  7338. assert (cabore >= 0 && cabori < doc->docParagraphStyles.count());
  7339. cabneu = ers[cabori];
  7340. assert (cabneu >= 0 && cabneu < dia->TempVorl.count() );
  7341. if (cabori > 4)
  7342. {
  7343. if (cabneu > 0)
  7344. {
  7345. if (chars->at(e)->charStyle.font().scName() == doc->docParagraphStyles[cabori].charStyle().font().scName())
  7346. chars->at(e)->charStyle.setFont(dia->TempVorl[cabneu].charStyle().font());
  7347. if (chars->at(e)->charStyle.fontSize() == doc->docParagraphStyles[cabori].charStyle().fontSize())
  7348. chars->at(e)->charStyle.setFontSize(dia->TempVorl[cabneu].charStyle().fontSize());
  7349. if ((chars->at(e)->charStyle.effects() & static_cast<StyleFlag>(1919) ) == doc->docParagraphStyles[cabori].charStyle().effects())
  7350. {
  7351. StyleFlag fl = chars->at(e)->charStyle.effects();
  7352. fl&= static_cast<StyleFlag>(~1919);
  7353. fl |= dia->TempVorl[cabneu].charStyle().effects();
  7354. chars->at(e)->charStyle.setFeatures(fl.featureList());
  7355. }
  7356. if (chars->at(e)->charStyle.fillColor() == doc->docParagraphStyles[cabori].charStyle().fillColor())
  7357. chars->at(e)->charStyle.setFillColor(dia->TempVorl[cabneu].charStyle().fillColor());
  7358. if (chars->at(e)->charStyle.fillShade() == doc->docParagraphStyles[cabori].charStyle().fillShade())
  7359. chars->at(e)->charStyle.setFillShade(dia->TempVorl[cabneu].charStyle().fillShade());
  7360. if (chars->at(e)->charStyle.strokeColor() == doc->docParagraphStyles[cabori].charStyle().strokeColor())
  7361. chars->at(e)->charStyle.setStrokeColor(dia->TempVorl[cabneu].charStyle().strokeColor());
  7362. if (chars->at(e)->charStyle.strokeShade() == doc->docParagraphStyles[cabori].charStyle().strokeShade())
  7363. chars->at(e)->charStyle.setStrokeShade(dia->TempVorl[cabneu].charStyle().strokeShade());
  7364. if (chars->at(e)->charStyle.shadowXOffset() == doc->docParagraphStyles[cabori].charStyle().shadowXOffset())
  7365. chars->at(e)->charStyle.setShadowXOffset(dia->TempVorl[cabneu].charStyle().shadowXOffset());
  7366. if (chars->at(e)->charStyle.shadowYOffset() == doc->docParagraphStyles[cabori].charStyle().shadowYOffset())
  7367. chars->at(e)->charStyle.setShadowYOffset(dia->TempVorl[cabneu].charStyle().shadowYOffset());
  7368. if (chars->at(e)->charStyle.outlineWidth() == doc->docParagraphStyles[cabori].charStyle().outlineWidth())
  7369. chars->at(e)->charStyle.setOutlineWidth(dia->TempVorl[cabneu].charStyle().outlineWidth());
  7370. if (chars->at(e)->charStyle.underlineOffset() == doc->docParagraphStyles[cabori].charStyle().underlineOffset())
  7371. chars->at(e)->charStyle.setUnderlineOffset(dia->TempVorl[cabneu].charStyle().underlineOffset());
  7372. if (chars->at(e)->charStyle.underlineWidth() == doc->docParagraphStyles[cabori].charStyle().underlineWidth())
  7373. chars->at(e)->charStyle.setUnderlineWidth(dia->TempVorl[cabneu].charStyle().underlineWidth());
  7374. if (chars->at(e)->charStyle.strikethruOffset() == doc->docParagraphStyles[cabori].charStyle().strikethruOffset())
  7375. chars->at(e)->charStyle.setStrikethruOffset(dia->TempVorl[cabneu].charStyle().strikethruOffset());
  7376. if (chars->at(e)->charStyle.strikethruWidth() == doc->docParagraphStyles[cabori].charStyle().strikethruWidth())
  7377. chars->at(e)->charStyle.setStrikethruWidth(dia->TempVorl[cabneu].charStyle().strikethruWidth());
  7378. if (chars->at(e)->charStyle.scaleH() == doc->docParagraphStyles[cabori].charStyle().scaleH())
  7379. chars->at(e)->charStyle.setScaleH(dia->TempVorl[cabneu].charStyle().scaleH());
  7380. if (chars->at(e)->charStyle.scaleV() == doc->docParagraphStyles[cabori].charStyle().scaleV())
  7381. chars->at(e)->charStyle.setScaleV(dia->TempVorl[cabneu].charStyle().scaleV());
  7382. if (chars->at(e)->charStyle.baselineOffset() == doc->docParagraphStyles[cabori].charStyle().baselineOffset())
  7383. chars->at(e)->charStyle.setBaselineOffset(dia->TempVorl[cabneu].charStyle().baselineOffset());
  7384. if (chars->at(e)->charStyle.tracking() == doc->docParagraphStyles[cabori].charStyle().tracking())
  7385. chars->at(e)->charStyle.setTracking(dia->TempVorl[cabneu].charStyle().tracking());
  7386. }
  7387. else
  7388. {
  7389. chars->at(e)->charStyle = ite->itemText.defaultStyle().charStyle();
  7390. }
  7391. chars->at(e)->cab = cabneu;
  7392. }
  7393. }
  7394.  
  7395. }
  7396. CurrStED->Editor->currentParaStyle = ers[CurrStED->Editor->currentParaStyle];
  7397. }
  7398. */
  7399. }
  7400. doc->redefineStyles(dia->TempVorl);
  7401. if (CurrStED != NULL)
  7402. {
  7403. if (CurrStED->Editor->StyledText.length() != 0)
  7404. CurrStED->Editor->updateAll();
  7405. }
  7406. for (uint a=0; a<doc->paragraphStyles().count(); ++a)
  7407. {
  7408. if (!doc->paragraphStyles()[a].charStyle().font().isNone())
  7409. {
  7410. QString nf = doc->paragraphStyles()[a].charStyle().font().scName();
  7411. if (!doc->UsedFonts.contains(nf))
  7412. {
  7413. if (doc->AddFont(nf)) //, prefsManager->appPrefs.AvailFonts[nf]->Font))
  7414. {
  7415. }
  7416. // else
  7417. //FIXME doc->paragraphStyles()[a].charStyle().setFont((prefsManager->appPrefs.AvailFonts[doc->toolSettings.defFont]));
  7418. }
  7419. }
  7420. }
  7421.  
  7422. propertiesPalette->paraStyleCombo->updateFormatList();
  7423. propertiesPalette->charStyleCombo->updateFormatList();
  7424. propertiesPalette->updateColorList();
  7425. view->DrawNew();
  7426. slotDocCh();
  7427. }
  7428. #endif
  7429. //CB-->Doc
  7430. void ScribusMainWindow::setNewAlignment(int a)
  7431. {
  7432. if (HaveDoc)
  7433. {
  7434. // doc->currentStyle.setAlignment(static_cast<ParagraphStyle::AlignmentType>(a));
  7435. PageItem *currItem = doc->m_Selection->itemAt(0);
  7436. doc->itemSelection_SetAlignment(a);
  7437. propertiesPalette->setAli(a);
  7438. setTBvals(currItem);
  7439. }
  7440. }
  7441.  
  7442. void ScribusMainWindow::setNewParStyle(const QString& name)
  7443. {
  7444. if (HaveDoc)
  7445. {
  7446. /* if (name.isEmpty())
  7447. {
  7448. doc->itemSelection_SetNamedParagraphStyle(name);
  7449. doc->itemSelection_EraseParagraphStyle();
  7450. }
  7451. else */
  7452. PageItem *currItem = doc->m_Selection->itemAt(0);
  7453. if (currItem->asTextFrame())
  7454. {
  7455. // currItem->asTextFrame()->ExpandParSel();
  7456. // currItem->asTextFrame()->lastAction4Paragraph = true;
  7457. currItem->itemTextSaxed = currItem->getItemTextSaxed(doc->appMode == modeEdit? PageItem::PARAGRAPH : PageItem::FRAME);
  7458. }
  7459. doc->itemSelection_SetNamedParagraphStyle(name);
  7460. if (currItem->asTextFrame())
  7461. currItem->asTextFrame()->updateUndo();
  7462. setTBvals(currItem);
  7463. }
  7464. }
  7465.  
  7466. void ScribusMainWindow::setNewCharStyle(const QString& name)
  7467. {
  7468. if (HaveDoc)
  7469. {
  7470. /* if (name.isEmpty())
  7471. {
  7472. doc->itemSelection_SetNamedCharStyle(name);
  7473. doc->itemSelection_EraseCharStyle();
  7474. }
  7475. else */
  7476. PageItem *currItem = doc->m_Selection->itemAt(0);
  7477. if (currItem->asTextFrame())
  7478. currItem->itemTextSaxed = currItem->getItemTextSaxed(doc->appMode == modeEdit? PageItem::SELECTION : PageItem::FRAME);
  7479. doc->itemSelection_SetNamedCharStyle(name);
  7480. if (currItem->asTextFrame())
  7481. currItem->asTextFrame()->updateUndo(currItem->HasSel? PageItem::PARAMSEL : PageItem::PARAMFULL);
  7482. setTBvals(currItem);
  7483. }
  7484. }
  7485.  
  7486. void ScribusMainWindow::setAbsValue(int a)
  7487. {
  7488. // doc->currentStyle = doc->docParagraphStyles[a];
  7489. // doc->currentStyle.setAlignment(static_cast<ParagraphStyle::AlignmentType>(a<5 ? a : 0));
  7490. propertiesPalette->setAli(a);
  7491. QString alignment[] = {"Left", "Center", "Right", "Block", "Forced"};
  7492. for (int b=0; b<5; ++b)
  7493. {
  7494. QString actionName="align"+alignment[b];
  7495. if (scrActions[actionName])
  7496. scrActions[actionName]->setChecked(a==b);
  7497. }
  7498. }
  7499.  
  7500. void ScribusMainWindow::slotReplaceColors()
  7501. {
  7502. if (HaveDoc)
  7503. {
  7504. ColorList UsedC;
  7505. doc->getUsedColors(UsedC);
  7506. replaceColorsDialog *dia2 = new replaceColorsDialog(this, doc->PageColors, UsedC);
  7507. if (dia2->exec())
  7508. {
  7509. ResourceCollection colorrsc;
  7510. colorrsc.mapColors(dia2->replaceMap);
  7511. PrefsManager::replaceToolColors(doc->toolSettings, colorrsc.colors());
  7512. doc->replaceNamedResources(colorrsc);
  7513. doc->replaceLineStyleColors(dia2->replaceMap);
  7514. doc->recalculateColors();
  7515. doc->recalcPicturesRes();
  7516. updateColorLists();
  7517. /*
  7518. propertiesPalette->updateColorList();
  7519. propertiesPalette->SetLineFormats(doc);
  7520. styleManager->updateColorList();
  7521. */
  7522. if (doc->m_Selection->count() != 0)
  7523. doc->m_Selection->itemAt(0)->emitAllToGUI();
  7524. view->DrawNew();
  7525. }
  7526. delete dia2;
  7527. }
  7528. }
  7529.  
  7530. void ScribusMainWindow::slotEditColors()
  7531. {
  7532. ColorList edc;
  7533. if (HaveDoc)
  7534. edc = doc->PageColors;
  7535. else
  7536. edc = prefsManager->colorSet();
  7537. ColorManager* dia = new ColorManager(this, edc, doc, prefsManager->colorSetName(), prefsManager->appPrefs.CustomColorSets);
  7538. if (dia->exec())
  7539. {
  7540. if (HaveDoc)
  7541. {
  7542. QColor tmpc;
  7543. slotDocCh();
  7544. doc->PageColors = dia->EditColors;
  7545. if (dia->replaceMap.isEmpty())
  7546. {
  7547. // invalidate all charstyles, as replaceNamedResources() wont do it if all maps are empty
  7548. const StyleSet<CharStyle> dummy;
  7549. doc->redefineCharStyles(dummy, false);
  7550. }
  7551. else
  7552. {
  7553. ResourceCollection colorrsc;
  7554. colorrsc.mapColors(dia->replaceMap);
  7555. // Update tools colors
  7556. PrefsManager::replaceToolColors(doc->toolSettings, colorrsc.colors());
  7557. // Update objects and styles colors
  7558. doc->replaceNamedResources(colorrsc);
  7559. // Temporary code until LineStyle is effectively used
  7560. doc->replaceLineStyleColors(dia->replaceMap);
  7561. }
  7562. doc->recalculateColors();
  7563. doc->recalcPicturesRes();
  7564. propertiesPalette->updateColorList();
  7565. //3102: update the line styles in PP too
  7566. propertiesPalette->SetLineFormats(doc);
  7567. styleManager->updateColorList();
  7568. if (doc->m_Selection->count() != 0)
  7569. doc->m_Selection->itemAt(0)->emitAllToGUI();
  7570. view->DrawNew();
  7571. }
  7572. else
  7573. {
  7574. // Update tools colors if needed
  7575. prefsManager->replaceToolColors(dia->replaceMap);
  7576. prefsManager->setColorSet(dia->EditColors);
  7577. prefsManager->setColorSetName(dia->getColorSetName());
  7578. propertiesPalette->Cpal->SetColors(prefsManager->colorSet());
  7579. }
  7580. }
  7581. if (!HaveDoc)
  7582. prefsManager->appPrefs.CustomColorSets = dia->customColSet;
  7583. delete dia;
  7584. }
  7585.  
  7586. void ScribusMainWindow::updtGradFill()
  7587. {
  7588. if (!HaveDoc)
  7589. return;
  7590. VGradient vg(propertiesPalette->getFillGradient());
  7591. doc->itemSelection_SetFillGradient(vg);
  7592. }
  7593. /*
  7594. //CB-->Doc
  7595. void ScribusMainWindow::GetBrushPen()
  7596. {
  7597. //What? we come back here from mpalette and then go to the view.. someones kidding
  7598. if (!HaveDoc)
  7599. return;
  7600. view->QueryFarben();
  7601. //CB We dont need to set the doc changed just to find the colour values...
  7602. //slotDocCh();
  7603. }
  7604. */
  7605. //CB-->??
  7606. void ScribusMainWindow::MakeFrame(int f, int c, double *vals)
  7607. {
  7608. PageItem *currItem = doc->m_Selection->itemAt(0);
  7609. switch (f)
  7610. {
  7611. case 0:
  7612. currItem->SetRectFrame();
  7613. doc->setRedrawBounding(currItem);
  7614. break;
  7615. case 1:
  7616. currItem->SetOvalFrame();
  7617. doc->setRedrawBounding(currItem);
  7618. break;
  7619. default:
  7620. currItem->SetFrameShape(c, vals);
  7621. doc->setRedrawBounding(currItem);
  7622. currItem->FrameType = f+2;
  7623. break;
  7624. }
  7625. //propertiesPalette->SetCurItem(currItem);
  7626. currItem->update();
  7627. slotDocCh();
  7628. }
  7629.  
  7630. void ScribusMainWindow::duplicateItem()
  7631. {
  7632. slotSelect();
  7633. bool savedAlignGrid = doc->useRaster;
  7634. bool savedAlignGuides = doc->SnapGuides;
  7635. internalCopy = true;
  7636. doc->useRaster = false;
  7637. doc->SnapGuides = false;
  7638. slotEditCopy();
  7639. view->Deselect(true);
  7640. slotEditPaste();
  7641. for (int b=0; b<doc->m_Selection->count(); ++b)
  7642. {
  7643. doc->m_Selection->itemAt(b)->setLocked(false);
  7644. doc->MoveItem(doc->toolSettings.dispX, doc->toolSettings.dispY, doc->m_Selection->itemAt(b));
  7645. }
  7646. doc->useRaster = savedAlignGrid;
  7647. doc->SnapGuides = savedAlignGuides;
  7648. internalCopy = false;
  7649. view->DrawNew();
  7650. }
  7651.  
  7652. void ScribusMainWindow::duplicateItemMulti()
  7653. {
  7654. if (!HaveDoc)
  7655. return;
  7656. slotSelect();
  7657. if (HaveDoc && doc->appMode == modeEditClip)
  7658. view->requestMode(submodeEndNodeEdit);
  7659. internalCopy = true;
  7660. MultipleDuplicate *dia = new MultipleDuplicate(doc->unitIndex(), this);
  7661. if (dia->exec())
  7662. {
  7663. ItemMultipleDuplicateData mdData;
  7664. dia->getMultiplyData(mdData);
  7665. doc->itemSelection_MultipleDuplicate(mdData);
  7666. }
  7667. internalCopy = false;
  7668. delete dia;
  7669. }
  7670.  
  7671. void ScribusMainWindow::selectItemsFromOutlines(PageItem* ite)
  7672. {
  7673. int d = doc->Items->indexOf(ite);
  7674. selectItemsFromOutlines(ite->OwnPage, d, true);
  7675. }
  7676.  
  7677. void ScribusMainWindow::selectItemsFromOutlines(int Page, int Item, bool single)
  7678. {
  7679. if (HaveDoc && doc->appMode == modeEditClip)
  7680. view->requestMode(submodeEndNodeEdit);
  7681. activateWindow();
  7682. view->Deselect(true);
  7683. if ((Page != -1) && (Page != static_cast<int>(doc->currentPage()->pageNr())))
  7684. view->GotoPage(Page);
  7685. doc->m_Selection->delaySignalsOn();
  7686. view->SelectItemNr(Item, true, single);
  7687. doc->m_Selection->delaySignalsOff();
  7688. doc->m_Selection->connectItemToGUI();
  7689. if (doc->m_Selection->count() != 0)
  7690. {
  7691. PageItem *currItem = doc->m_Selection->itemAt(0);
  7692. // jjsa 23-05-2004 added for centering of rotated objects
  7693. double rotation=currItem->rotation();
  7694. if ( rotation != 0.0 )
  7695. {
  7696. double MPI180=1.0/(180.0*M_PI);
  7697. double y1 = sin(rotation*MPI180) * currItem->width();
  7698. double x1 = cos(rotation*MPI180) * currItem->width();
  7699. double y2 = sin((rotation+90.0)*MPI180) * currItem->height();
  7700. double x2 = cos((rotation+90.0)*MPI180) * currItem->height();
  7701. double mx = currItem->xPos() + ((x1 + x2)/2.0);
  7702. double my = currItem->yPos() + ((y1 + y2)/2.0);
  7703. // double viewScale=view->scale();
  7704. // if ((qRound((currItem->xPos() + qMax(x1, x2)) * viewScale) > view->contentsWidth()) ||
  7705. // (qRound((currItem->yPos() + qMax(y1, y2)) * viewScale) > view->contentsHeight()))
  7706. // view->resizeContents(qMax(qRound((currItem->xPos() + qMax(x1, x2)) * viewScale),
  7707. // view->contentsWidth()),
  7708. // qMax(qRound((currItem->yPos() + qMax(y1, y2)) * viewScale), view->contentsHeight()));
  7709. view->SetCCPo(mx, my);
  7710. }
  7711. else
  7712. {
  7713. // double viewScale=view->scale();
  7714. // if ((qRound((currItem->xPos() + currItem->width()) * viewScale) > view->contentsWidth()) ||
  7715. // (qRound((currItem->yPos() + currItem->height()) * viewScale) > view->contentsHeight())
  7716. // )
  7717. // view->resizeContents(qMax(qRound((currItem->xPos() + currItem->width()) * viewScale), view->contentsWidth()),
  7718. // qMax(qRound((currItem->yPos() + currItem->height()) * viewScale), view->contentsHeight()));
  7719. view->SetCCPo(currItem->xPos() + currItem->width() / 2.0, currItem->yPos() + currItem->height() / 2.0);
  7720. }
  7721. }
  7722. }
  7723.  
  7724. void ScribusMainWindow::selectPagesFromOutlines(int Page)
  7725. {
  7726. if (HaveDoc && doc->appMode == modeEditClip)
  7727. view->requestMode(submodeEndNodeEdit);
  7728. activateWindow();
  7729. view->Deselect(true);
  7730. if (Page < 0)
  7731. return;
  7732. view->GotoPage(Page);
  7733. }
  7734.  
  7735. void ScribusMainWindow::prefsOrg(Preferences *dia)
  7736. {
  7737. //reset the appMode so we restore our tools shortcuts
  7738. QString oldGUILanguage = prefsManager->guiLanguage();
  7739. QString oldGUIStyle = prefsManager->guiStyle();
  7740. bool oldShowPageShadow = prefsManager->showPageShadow();
  7741. int oldGUIFontSize = prefsManager->guiFontSize();
  7742. double oldDisplayScale = prefsManager->displayScale();
  7743. int oldImageQuality = prefsManager->applicationPrefs()->toolSettings.lowResType;
  7744.  
  7745. dia->updatePreferences();
  7746. prefsManager->SavePrefs();
  7747. DocDir = prefsManager->documentDir();
  7748. // scrapbookPalette->rebuildView();
  7749. // scrapbookPalette->AdjustMenu();
  7750. QString newGUILanguage = prefsManager->guiLanguage();
  7751. if (oldGUILanguage != newGUILanguage || ScQApp->currGUILanguage()!=newGUILanguage)
  7752. ScQApp->changeGUILanguage(newGUILanguage);
  7753. QString newGUIStyle = prefsManager->guiStyle();
  7754. if (oldGUIStyle != newGUIStyle)
  7755. {
  7756. if (newGUIStyle.isEmpty())
  7757. qApp->setStyle(prefsManager->guiSystemStyle());
  7758. else
  7759. qApp->setStyle(QStyleFactory::create(newGUIStyle));
  7760. // Plain wrong, a style may set a palette different from the standard palette
  7761. // Eg : Windows XP and Windows Vista styles
  7762. // qApp->setPalette(qApp->style()->standardPalette());
  7763. }
  7764. int newGUIFontSize = prefsManager->guiFontSize();
  7765. if (oldGUIFontSize != newGUIFontSize)
  7766. {
  7767. QFont apf = qApp->font();
  7768. apf.setPointSize(prefsManager->appPrefs.AppFontSize);
  7769. qApp->setFont(apf);
  7770. }
  7771. propertiesPalette->Fonts->RebuildList(0);
  7772. ScCore->getCMSProfiles(false);
  7773. ScCore->recheckGS();
  7774. prefsManager->applyLoadedShortCuts();
  7775.  
  7776. int newImageQuality = prefsManager->appPrefs.toolSettings.lowResType;
  7777. if (view && (oldImageQuality != newImageQuality))
  7778. view->previewQualitySwitcher->setCurrentIndex(newImageQuality);
  7779.  
  7780. QWidgetList windows = wsp->windowList();
  7781. bool shadowChanged = oldShowPageShadow != prefsManager->showPageShadow();
  7782. if (!windows.isEmpty())
  7783. {
  7784. int windowCount=static_cast<int>(windows.count());
  7785. for ( int i = 0; i < windowCount; ++i )
  7786. {
  7787. QWidget* w = windows.at(i);
  7788. ScribusWin* scw = (ScribusWin*) w;
  7789. if (oldDisplayScale != prefsManager->displayScale())
  7790. {
  7791. int x = qRound(qMax(scw->view()->contentsX() / scw->view()->scale(), 0.0));
  7792. int y = qRound(qMax(scw->view()->contentsY() / scw->view()->scale(), 0.0));
  7793. int w = qRound(qMin(scw->view()->visibleWidth() / scw->view()->scale(), scw->doc()->currentPage()->width()));
  7794. int h = qRound(qMin(scw->view()->visibleHeight() / scw->view()->scale(), scw->doc()->currentPage()->height()));
  7795. scw->view()->rememberOldZoomLocation(w / 2 + x,h / 2 + y);
  7796. scw->view()->zoom((scw->view()->scale() / oldDisplayScale) * prefsManager->displayScale());
  7797. }
  7798. if (shadowChanged)
  7799. scw->view()->DrawNew();
  7800. }
  7801. }
  7802. }
  7803.  
  7804. void ScribusMainWindow::slotPrefsOrg()
  7805. {
  7806. slotSelect();
  7807.  
  7808. Preferences dia(this);
  7809. if (dia.exec()==QDialog::Accepted)
  7810. prefsOrg(&dia);
  7811. }
  7812.  
  7813. int ScribusMainWindow::ShowSubs()
  7814. {
  7815. bool showGSHelp=false;
  7816. if (!ScCore->haveGS())
  7817. {
  7818. QMessageBox mb(this);
  7819. QString msg = tr("Ghostscript is not installed on your system, or Scribus is not configured with the path to the software.");
  7820. QString msg2("<qt>");
  7821. #ifndef _WIN32
  7822. msg2 += tr("Until this is remedied, you cannot import EPS images or use Print Preview. ")+"\n";
  7823. #else
  7824. msg2 += tr("Until this is remedied, you cannot import EPS images or use PostScript Print Preview. ")+"\n";
  7825. #endif
  7826. //msg2 += tr("Please read our <a href=\"http://wiki.scribus.net/index.php/Ghostscript\">help and installation instructions</a>.") + "</qt>";
  7827. msg2 += tr( "Click the Help button to read Scribus-related Ghostscript help and installation instructions." ) + "</qt>";
  7828. QMessageBox msgBox;
  7829. msgBox.addButton(QMessageBox::Ok);
  7830. msgBox.addButton(QMessageBox::Help);
  7831. msgBox.setIcon(QMessageBox::Warning);
  7832. msgBox.setWindowTitle( tr("Ghostscript is missing") );
  7833. msgBox.setText(msg);
  7834. msgBox.setInformativeText(msg2);
  7835. int i=msgBox.exec();
  7836. if (i==QMessageBox::Help)
  7837. showGSHelp=true;
  7838. }
  7839.  
  7840. propertiesPalette->startup();
  7841. outlinePalette->startup();
  7842. scrapbookPalette->startup();
  7843. bookmarkPalette->startup();
  7844. pagePalette->startup();
  7845. layerPalette->startup();
  7846. // measurementPalette->startup();
  7847. docCheckerPalette->startup();
  7848. alignDistributePalette->startup();
  7849. undoPalette->startup();
  7850. guidePalette->startup();
  7851. charPalette->startup();
  7852. styleManager->startup();
  7853.  
  7854. // init the toolbars
  7855. // fileToolBar->initVisibility();
  7856. // editToolBar->initVisibility();
  7857. // modeToolBar->initVisibility();
  7858. // pdfToolBar->initVisibility();
  7859.  
  7860. activateWindow();
  7861. if (!scriptIsRunning())
  7862. {
  7863. raise();
  7864. if (showGSHelp)
  7865. {
  7866. slotOnlineHelp("", "toolbox5.html");
  7867. return QMessageBox::Help;
  7868. }
  7869. }
  7870. return 0;
  7871. }
  7872.  
  7873. void ScribusMainWindow::doPrintPreview()
  7874. {
  7875. if (docCheckerPalette->isIgnoreEnabled())
  7876. {
  7877. docCheckerPalette->hide();
  7878. docCheckerPalette->checkMode = CheckDocument::checkNULL;
  7879. docCheckerPalette->setIgnoreEnabled(false);
  7880. scrActions["toolsPreflightVerifier"]->setChecked(false);
  7881. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(doPrintPreview()));
  7882. }
  7883. if (HaveDoc)
  7884. {
  7885. PrefsContext* prefs = PrefsManager::instance()->prefsFile->getContext("print_options");
  7886. QString currentPrinter = prefs->get("CurrentPrn");
  7887. PrintEngine currentEngine = (PrintEngine) prefs->get("CurrentPrnEngine", "3").toInt();
  7888. if ( PPreview::usePostscriptPreview(currentPrinter, currentEngine) && ( !ScCore->haveGS() ) )
  7889. {
  7890. QString mess = tr("Ghostscript is missing : PostScript Print Preview is not available")+"\n\n";
  7891. QMessageBox::warning(this, CommonStrings::trWarning, mess, 1, 0, 0);
  7892. return;
  7893. }
  7894. PPreview *dia = new PPreview(this, view, doc, currentPrinter, currentEngine);
  7895. previewDinUse = true;
  7896. connect(dia, SIGNAL(doPrint()), this, SLOT(slotReallyPrint()));
  7897. dia->exec();
  7898. PrefsManager *prefsManager=PrefsManager::instance();
  7899. prefsManager->appPrefs.PrPr_Mode = dia->EnableCMYK->isChecked();
  7900. prefsManager->appPrefs.PrPr_AntiAliasing = dia->AntiAlias->isChecked();
  7901. prefsManager->appPrefs.PrPr_Transparency = dia->AliasTr->isChecked();
  7902. if ( !ScCore->haveTIFFSep() || !dia->postscriptPreview )
  7903. {
  7904. prefsManager->appPrefs.PrPr_C = dia->EnableCMYK_C->isChecked();
  7905. prefsManager->appPrefs.PrPr_M = dia->EnableCMYK_M->isChecked();
  7906. prefsManager->appPrefs.PrPr_Y = dia->EnableCMYK_Y->isChecked();
  7907. prefsManager->appPrefs.PrPr_K = dia->EnableCMYK_K->isChecked();
  7908. }
  7909. else
  7910. {
  7911. prefsManager->appPrefs.PrPr_C = dia->flagsVisible["Cyan"]->isChecked();
  7912. prefsManager->appPrefs.PrPr_M = dia->flagsVisible["Magenta"]->isChecked();
  7913. prefsManager->appPrefs.PrPr_Y = dia->flagsVisible["Yellow"]->isChecked();
  7914. prefsManager->appPrefs.PrPr_K = dia->flagsVisible["Black"]->isChecked();
  7915. prefsManager->appPrefs.PrPr_InkCoverage = dia->EnableInkCover->isChecked();
  7916. prefsManager->appPrefs.PrPr_InkThreshold = dia->CoverThresholdValue->value();
  7917. }
  7918. // prefsManager->appPrefs.Gcr_Mode = dia->EnableGCR->isChecked();
  7919. disconnect(dia, SIGNAL(doPrint()), this, SLOT(slotReallyPrint()));
  7920. previewDinUse = false;
  7921. delete dia;
  7922. QFile::remove(prefsManager->preferencesLocation()+"/tmp.ps");
  7923. QFile::remove(prefsManager->preferencesLocation()+"/sc.png");
  7924. QDir d(prefsManager->preferencesLocation()+"/", "sc.*", QDir::Name, QDir::Files | QDir::NoSymLinks);
  7925. if ((d.exists()) && (d.count() != 0))
  7926. {
  7927. for (uint dc = 0; dc < d.count(); dc++)
  7928. {
  7929. QFile::remove(prefsManager->preferencesLocation() +"/" + d[dc]);
  7930. }
  7931. }
  7932. }
  7933. }
  7934.  
  7935. void ScribusMainWindow::printPreview()
  7936. {
  7937. if (doc->checkerProfiles[doc->curCheckProfile].autoCheck)
  7938. {
  7939. if (scanDocument())
  7940. {
  7941. if (doc->checkerProfiles[doc->curCheckProfile].ignoreErrors)
  7942. {
  7943. int t = QMessageBox::warning(this, CommonStrings::trWarning,
  7944. "<qt>"+ tr("Scribus has detected some errors. Consider using the Preflight Verifier to correct them")+"</qt>",
  7945. QMessageBox::Abort | QMessageBox::Ignore);
  7946. if (t == QMessageBox::Abort)
  7947. return;
  7948. }
  7949. else
  7950. {
  7951. connect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(doPrintPreview()));
  7952. docCheckerPalette->setIgnoreEnabled(true);
  7953. docCheckerPalette->checkMode = CheckDocument::checkPrintPreview;
  7954. docCheckerPalette->buildErrorList(doc);
  7955. docCheckerPalette->show();
  7956. scrActions["toolsPreflightVerifier"]->setChecked(true);
  7957. return;
  7958. }
  7959. }
  7960. }
  7961. doPrintPreview();
  7962. }
  7963.  
  7964. bool ScribusMainWindow::DoSaveAsEps(QString fn, QString& error)
  7965. {
  7966. QStringList spots;
  7967. bool return_value = true;
  7968. ReOrderText(doc, view);
  7969. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  7970. QMap<QString, QMap<uint, FPointArray> > ReallyUsed;
  7971. ReallyUsed.clear();
  7972. doc->getUsedFonts(ReallyUsed);
  7973. ColorList usedColors;
  7974. doc->getUsedColors(usedColors);
  7975. ScCore->fileWatcher->forceScan();
  7976. ScCore->fileWatcher->stop();
  7977. PrintOptions options;
  7978. options.pageNumbers.push_back(doc->currentPage()->pageNr()+1);
  7979. options.outputSeparations = false;
  7980. options.separationName = tr("All");
  7981. options.allSeparations = spots;
  7982. options.useColor = true;
  7983. options.mirrorH = false;
  7984. options.mirrorV = false;
  7985. options.useICC = true;
  7986. options.doGCR = prefsManager->appPrefs.GCRMode;
  7987. options.setDevParam = false;
  7988. options.doClip = true;
  7989. options.cropMarks = false;
  7990. options.bleedMarks = false;
  7991. options.registrationMarks = false;
  7992. options.colorMarks = false;
  7993. options.markOffset = 0.0;
  7994. options.bleeds.Top = 0.0;
  7995. options.bleeds.Left = 0.0;
  7996. options.bleeds.Right = 0.0;
  7997. options.bleeds.Bottom = 0.0;
  7998. PSLib *dd = new PSLib(options, false, prefsManager->appPrefs.AvailFonts, ReallyUsed, usedColors, false, true);
  7999. if (dd != NULL)
  8000. {
  8001. if (dd->PS_set_file(fn))
  8002. {
  8003. int psRet = dd->CreatePS(doc, options);
  8004. if (psRet == 1)
  8005. {
  8006. error = dd->errorMessage();
  8007. return_value = false;
  8008. }
  8009. }
  8010. else
  8011. return_value = false;
  8012. delete dd;
  8013. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  8014. }
  8015. ScCore->fileWatcher->start();
  8016. return return_value;
  8017. }
  8018.  
  8019. void ScribusMainWindow::SaveAsEps()
  8020. {
  8021. if (doc->checkerProfiles[doc->curCheckProfile].autoCheck)
  8022. {
  8023. if (scanDocument())
  8024. {
  8025. if (doc->checkerProfiles[doc->curCheckProfile].ignoreErrors)
  8026. {
  8027. int t = QMessageBox::warning(this, CommonStrings::trWarning,
  8028. tr("Scribus detected some errors.\nConsider using the Preflight Verifier to correct them."),
  8029. QMessageBox::Abort | QMessageBox::Ignore);
  8030. if (t == QMessageBox::Abort)
  8031. return;
  8032. }
  8033. else
  8034. {
  8035. connect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(reallySaveAsEps()));
  8036. docCheckerPalette->setIgnoreEnabled(true);
  8037. docCheckerPalette->checkMode = CheckDocument::checkEPS;
  8038. docCheckerPalette->buildErrorList(doc);
  8039. docCheckerPalette->show();
  8040. scrActions["toolsPreflightVerifier"]->setChecked(true);
  8041. return;
  8042. }
  8043. }
  8044. }
  8045. reallySaveAsEps();
  8046. }
  8047.  
  8048. void ScribusMainWindow::reallySaveAsEps()
  8049. {
  8050. QString fna;
  8051. if (docCheckerPalette->isIgnoreEnabled())
  8052. {
  8053. docCheckerPalette->hide();
  8054. docCheckerPalette->checkMode = CheckDocument::checkNULL;
  8055. docCheckerPalette->setIgnoreEnabled(false);
  8056. scrActions["toolsPreflightVerifier"]->setChecked(false);
  8057. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(reallySaveAsEps()));
  8058. }
  8059. if (!doc->DocName.startsWith( tr("Document")))
  8060. {
  8061. QFileInfo fi(doc->DocName);
  8062. if (doc->m_Selection->count() != 0)
  8063. fna = fi.path() + "/" + fi.completeBaseName() + "_selection.eps";
  8064. else
  8065. fna = fi.path() + "/" + getFileNameByPage(doc, doc->currentPage()->pageNr(), "eps");
  8066. }
  8067. else
  8068. {
  8069. QDir di = QDir();
  8070. if (doc->m_Selection->count() != 0)
  8071. fna = di.currentPath() + "/" + doc->DocName + "_selection.eps";
  8072. else
  8073. fna = di.currentPath() + "/" + getFileNameByPage(doc, doc->currentPage()->pageNr(), "eps");
  8074. }
  8075. fna = QDir::toNativeSeparators(fna);
  8076. QString wdir = ".";
  8077. QString prefsDocDir=prefsManager->documentDir();
  8078. if (!prefsDocDir.isEmpty())
  8079. wdir = prefsManager->prefsFile->getContext("dirs")->get("eps", prefsDocDir);
  8080. else
  8081. wdir = prefsManager->prefsFile->getContext("dirs")->get("eps", ".");
  8082. QString fn = CFileDialog( wdir, tr("Save As"), tr("%1;;All Files (*)").arg(formatsManager->extensionsForFormat(FormatsManager::EPS)), fna, fdHidePreviewCheckBox | fdNone);
  8083. if (!fn.isEmpty())
  8084. {
  8085. prefsManager->prefsFile->getContext("dirs")->set("eps", fn.left(fn.lastIndexOf("/")));
  8086. if (overwrite(this, fn))
  8087. {
  8088. QString epsError;
  8089. if (!DoSaveAsEps(fn, epsError))
  8090. {
  8091. QString message = tr("Cannot write the file: \n%1").arg(fn);
  8092. if (!epsError.isEmpty())
  8093. message += QString("\n%1").arg(epsError);
  8094. QMessageBox::warning(this, CommonStrings::trWarning, message, CommonStrings::tr_OK);
  8095. }
  8096. }
  8097. }
  8098. }
  8099.  
  8100. bool ScribusMainWindow::getPDFDriver(const QString & fn, const QString & nam, int Components,
  8101. const std::vector<int> & pageNs, const QMap<int,QPixmap> & thumbs,
  8102. QString& error, bool* cancelled)
  8103. {
  8104. ScCore->fileWatcher->forceScan();
  8105. ScCore->fileWatcher->stop();
  8106. PDFlib pdflib(*doc);
  8107. bool ret = pdflib.doExport(fn, nam, Components, pageNs, thumbs);
  8108. if (!ret)
  8109. error = pdflib.errorMessage();
  8110. if (cancelled)
  8111. *cancelled = pdflib.exportAborted();
  8112. ScCore->fileWatcher->start();
  8113. return ret;
  8114. }
  8115.  
  8116. void ScribusMainWindow::SaveAsPDF()
  8117. {
  8118. if (doc->checkerProfiles[doc->curCheckProfile].autoCheck)
  8119. {
  8120. if (scanDocument())
  8121. {
  8122. if (doc->checkerProfiles[doc->curCheckProfile].ignoreErrors)
  8123. {
  8124. int t = QMessageBox::warning(this, CommonStrings::trWarning,
  8125. tr("Detected some errors.\nConsider using the Preflight Verifier to correct them"),
  8126. QMessageBox::Abort | QMessageBox::Ignore);
  8127. if (t == QMessageBox::Abort)
  8128. return;
  8129. }
  8130. else
  8131. {
  8132. connect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(doSaveAsPDF()));
  8133. docCheckerPalette->setIgnoreEnabled(true);
  8134. docCheckerPalette->checkMode = CheckDocument::checkPDF;
  8135. docCheckerPalette->buildErrorList(doc);
  8136. docCheckerPalette->show();
  8137. scrActions["toolsPreflightVerifier"]->setChecked(true);
  8138. return;
  8139. }
  8140. }
  8141. }
  8142. doSaveAsPDF();
  8143. }
  8144.  
  8145. void ScribusMainWindow::doSaveAsPDF()
  8146. {
  8147. if (docCheckerPalette->isIgnoreEnabled())
  8148. {
  8149. docCheckerPalette->hide();
  8150. docCheckerPalette->checkMode = CheckDocument::checkNULL;
  8151. docCheckerPalette->setIgnoreEnabled(false);
  8152. scrActions["toolsPreflightVerifier"]->setChecked(false);
  8153. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(doSaveAsPDF()));
  8154. }
  8155. /* if (bookmarkPalette->BView->childCount() == 0)
  8156. doc->PDF_Options.Bookmarks = false; */
  8157. // reenabling the following line fixes Bug #7630, not sure why this line was commented out.
  8158. // doc->reorganiseFonts();
  8159. QMap<QString, int> ReallyUsed = doc->reorganiseFonts(); //doc->UsedFonts;
  8160. if (doc->PDF_Options.EmbedList.count() != 0)
  8161. {
  8162. QList<QString> tmpEm;
  8163. QList<QString>::Iterator itef;
  8164. for (itef = doc->PDF_Options.EmbedList.begin(); itef != doc->PDF_Options.EmbedList.end(); ++itef)
  8165. {
  8166. if (ReallyUsed.contains((*itef)))
  8167. tmpEm.append((*itef));
  8168. }
  8169. doc->PDF_Options.EmbedList = tmpEm;
  8170. }
  8171. if (doc->PDF_Options.SubsetList.count() != 0)
  8172. {
  8173. QList<QString> tmpEm;
  8174. QList<QString>::Iterator itef;
  8175. for (itef = doc->PDF_Options.SubsetList.begin(); itef != doc->PDF_Options.SubsetList.end(); ++itef)
  8176. {
  8177. if (ReallyUsed.contains((*itef)))
  8178. tmpEm.append((*itef));
  8179. }
  8180. doc->PDF_Options.SubsetList = tmpEm;
  8181. }
  8182. MarginStruct optBleeds = doc->PDF_Options.bleeds;
  8183. PDFExportDialog dia(this, doc->DocName, ReallyUsed, view, doc->PDF_Options, doc->PDF_Options.PresentVals, ScCore->PDFXProfiles, prefsManager->appPrefs.AvailFonts, doc->unitRatio(), ScCore->PrinterProfiles);
  8184. if (dia.exec())
  8185. {
  8186. qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
  8187. dia.updateDocOptions();
  8188. doc->PDF_Options.firstUse = false;
  8189. ReOrderText(doc, view);
  8190. QString pageString(dia.getPagesString());
  8191. std::vector<int> pageNs;
  8192. uint pageNumbersSize;
  8193. QMap<int,QPixmap> thumbs;
  8194. int components=dia.colorSpaceComponents();
  8195. QString nam(dia.cmsDescriptor());
  8196. QString fileName = doc->PDF_Options.fileName;
  8197. QString errorMsg;
  8198. parsePagesString(pageString, &pageNs, doc->DocPages.count());
  8199. if (doc->PDF_Options.useDocBleeds)
  8200. doc->PDF_Options.bleeds = doc->bleeds;
  8201.  
  8202. if (doc->PDF_Options.doMultiFile)
  8203. {
  8204. bool cancelled = false;
  8205. QFileInfo fi(fileName);
  8206. QString ext = fi.suffix();
  8207. QString path = fi.path();
  8208. QString name = fi.completeBaseName();
  8209. uint aa = 0;
  8210. while (aa < pageNs.size() && !cancelled)
  8211. {
  8212. thumbs.clear();
  8213. std::vector<int> pageNs2;
  8214. pageNs2.clear();
  8215. pageNs2.push_back(pageNs[aa]);
  8216. pageNumbersSize = pageNs2.size();
  8217. QPixmap pm(10,10);
  8218. if (doc->PDF_Options.Thumbnails)
  8219. pm=QPixmap::fromImage(view->PageToPixmap(pageNs[aa]-1, 100));
  8220. thumbs.insert(1, pm);
  8221. QString realName = QDir::toNativeSeparators(path+"/"+name+ tr("-Page%1").arg(pageNs[aa], 3, 10, QChar('0'))+"."+ext);
  8222. if (!getPDFDriver(realName, nam, components, pageNs2, thumbs, errorMsg, &cancelled))
  8223. {
  8224. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  8225. QString message = tr("Cannot write the file: \n%1").arg(doc->PDF_Options.fileName);
  8226. if (!errorMsg.isEmpty())
  8227. message = QString("%1\n%2").arg(message).arg(errorMsg);
  8228. QMessageBox::warning(this, CommonStrings::trWarning, message, CommonStrings::tr_OK);
  8229. return;
  8230. }
  8231. aa++;
  8232. }
  8233. }
  8234. else
  8235. {
  8236. pageNumbersSize = pageNs.size();
  8237. for (uint ap = 0; ap < pageNumbersSize; ++ap)
  8238. {
  8239. QPixmap pm(10,10);
  8240. if (doc->PDF_Options.Thumbnails)
  8241. pm=QPixmap::fromImage(view->PageToPixmap(pageNs[ap]-1, 100));
  8242. thumbs.insert(pageNs[ap], pm);
  8243. }
  8244. if (!getPDFDriver(fileName, nam, components, pageNs, thumbs, errorMsg))
  8245. {
  8246. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  8247. QString message = tr("Cannot write the file: \n%1").arg(doc->PDF_Options.fileName);
  8248. if (!errorMsg.isEmpty())
  8249. message = QString("%1\n%2").arg(message).arg(errorMsg);
  8250. QMessageBox::warning(this, CommonStrings::trWarning, message, CommonStrings::tr_OK);
  8251. }
  8252. }
  8253. if (doc->PDF_Options.useDocBleeds)
  8254. doc->PDF_Options.bleeds = optBleeds;
  8255. qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
  8256. }
  8257. }
  8258.  
  8259. //CB-->Doc, stop _storing_ bookmarks in the palette
  8260. void ScribusMainWindow::AddBookMark(PageItem *ite)
  8261. {
  8262. bookmarkPalette->BView->AddPageItem(ite);
  8263. }
  8264.  
  8265. //CB-->Doc, stop _storing_ bookmarks in the palette
  8266. void ScribusMainWindow::DelBookMark(PageItem *ite)
  8267. {
  8268. bookmarkPalette->BView->DeleteItem(ite);
  8269. }
  8270.  
  8271. //CB-->Doc, stop _storing_ bookmarks in the palette
  8272. void ScribusMainWindow::BookMarkTxT(PageItem *ite)
  8273. {
  8274. bookmarkPalette->BView->ChangeText(ite);
  8275. }
  8276.  
  8277. //CB-->Doc, stop _storing_ bookmarks in the palette
  8278. void ScribusMainWindow::RestoreBookMarks()
  8279. {
  8280. QList<ScribusDoc::BookMa>::Iterator it2 = doc->BookMarks.begin();
  8281. bookmarkPalette->BView->clear();
  8282. bookmarkPalette->BView->NrItems = 0;
  8283. bookmarkPalette->BView->First = 1;
  8284. bookmarkPalette->BView->Last = 0;
  8285. if (doc->BookMarks.count() == 0)
  8286. return;
  8287. BookMItem* ip;
  8288. BookMItem* ip2 = NULL;
  8289. BookMItem* ip3 = NULL;
  8290. BookMItem *ite = new BookMItem(bookmarkPalette->BView, &(*it2));
  8291. bookmarkPalette->BView->NrItems++;
  8292. ++it2;
  8293. for( ; it2 != doc->BookMarks.end(); ++it2 )
  8294. {
  8295. if ((*it2).Parent == 0)
  8296. {
  8297. ite = new BookMItem(bookmarkPalette->BView, ite, &(*it2));
  8298. bookmarkPalette->BView->NrItems++;
  8299. }
  8300. else
  8301. {
  8302. QTreeWidgetItemIterator it3(bookmarkPalette->BView);
  8303. while (*it3)
  8304. {
  8305. ip = (BookMItem*)(*it3);
  8306. if ((*it2).Parent == ip->ItemNr)
  8307. {
  8308. ip2 = ip;
  8309. break;
  8310. }
  8311. ++it3;
  8312. }
  8313. if ((*it2).Prev == 0)
  8314. {
  8315. (void) new BookMItem(ip2, &(*it2));
  8316. bookmarkPalette->BView->NrItems++;
  8317. }
  8318. else
  8319. {
  8320. QTreeWidgetItemIterator it4(bookmarkPalette->BView);
  8321. while (*it4)
  8322. {
  8323. ip = (BookMItem*)(*it4);
  8324. if ((*it2).Prev == ip->ItemNr)
  8325. {
  8326. ip3 = ip;
  8327. break;
  8328. }
  8329. ++it4;
  8330. }
  8331. (void) new BookMItem(ip2, ip3, &(*it2));
  8332. bookmarkPalette->BView->NrItems++;
  8333. }
  8334. }
  8335. }
  8336. bookmarkPalette->BView->Last = bookmarkPalette->BView->NrItems;
  8337. bookmarkPalette->BView->rebuildTree();
  8338. }
  8339.  
  8340. //CB-->Doc, stop _storing_ bookmarks in the palette
  8341. void ScribusMainWindow::StoreBookmarks()
  8342. {
  8343. doc->BookMarks.clear();
  8344. BookMItem* ip;
  8345. QTreeWidgetItemIterator it(bookmarkPalette->BView);
  8346. struct ScribusDoc::BookMa Boma;
  8347. while (*it)
  8348. {
  8349. ip = (BookMItem*)(*it);
  8350. Boma.Title = ip->Title;
  8351. Boma.Text = ip->text(0);
  8352. Boma.Aktion = ip->Action;
  8353. Boma.ItemNr = ip->ItemNr;
  8354. Boma.PageObject = ip->PageObject;
  8355. // Boma.Seite = ip->Seite;
  8356. // Boma.Element = ip->Element;
  8357. Boma.Parent = ip->Pare;
  8358. Boma.First = ip->First;
  8359. Boma.Prev = ip->Prev;
  8360. Boma.Next = ip->Next;
  8361. Boma.Last = ip->Last;
  8362. doc->BookMarks.append(Boma);
  8363. ++it;
  8364. }
  8365. doc->NrItems = bookmarkPalette->BView->NrItems;
  8366. doc->First = bookmarkPalette->BView->First;
  8367. doc->Last = bookmarkPalette->BView->Last;
  8368. }
  8369.  
  8370. void ScribusMainWindow::slotElemRead(QString xml, double x, double y, bool art, bool loca, ScribusDoc* docc, ScribusView* vie)
  8371. {
  8372. if (doc == docc && docc->appMode == modeEditClip)
  8373. view->requestMode(submodeEndNodeEdit);
  8374.  
  8375. ScriXmlDoc ss;
  8376. if(ss.ReadElem(xml, prefsManager->appPrefs.AvailFonts, docc, x, y, art, loca, prefsManager->appPrefs.GFontSub, vie))
  8377. {
  8378. vie->DrawNew();
  8379. if (doc == docc)
  8380. {
  8381. propertiesPalette->updateColorList();
  8382. propertiesPalette->paraStyleCombo->updateFormatList();
  8383. propertiesPalette->charStyleCombo->updateFormatList();
  8384. propertiesPalette->SetLineFormats(docc);
  8385. slotDocCh();
  8386. }
  8387. }
  8388. }
  8389.  
  8390. void ScribusMainWindow::slotChangeUnit(int unitIndex, bool draw)
  8391. {
  8392. // Hack
  8393. QByteArray stylesheet;
  8394. if (loadRawText(ScPaths::getApplicationDataDir() + "/stylesheet.css", stylesheet))
  8395. {
  8396. qApp->setStyleSheet(QString(stylesheet));
  8397. }
  8398.  
  8399. doc->setUnitIndex(unitIndex);
  8400. setCurrentComboItem(view->unitSwitcher, unitGetStrFromIndex(doc->unitIndex()));
  8401. propertiesPalette->unitChange();
  8402. nodePalette->unitChange();
  8403. alignDistributePalette->unitChange();
  8404. guidePalette->setupPage();
  8405. styleManager->unitChange();
  8406. if (draw)
  8407. view->DrawNew();
  8408. }
  8409.  
  8410. void ScribusMainWindow::ManageJava()
  8411. {
  8412. JavaDocs *dia = new JavaDocs(this, doc, view);
  8413. connect(dia, SIGNAL(docChanged(bool)), this, SLOT(slotDocCh(bool )));
  8414. dia->exec();
  8415. disconnect(dia, SIGNAL(docChanged(bool)), this, SLOT(slotDocCh(bool )));
  8416. delete dia;
  8417. }
  8418.  
  8419. void ScribusMainWindow::manageMasterPages(QString temp)
  8420. {
  8421. if (HaveDoc)
  8422. {
  8423. view->Deselect(true);
  8424. if (doc->masterPageMode())
  8425. {
  8426. ActWin->masterPagesPalette()->updateMasterPageList(temp);
  8427. ActWin->masterPagesPalette()->selectMasterPage(temp);
  8428. }
  8429. else
  8430. {
  8431. storedPageNum = doc->currentPageNumber();
  8432. storedViewXCoor = view->contentsX();
  8433. storedViewYCoor = view->contentsY();
  8434. storedViewScale = view->scale();
  8435. MasterPagesPalette *dia = new MasterPagesPalette(this, doc, view, temp);
  8436. //connect(dia, SIGNAL(createNew(int)), this, SLOT(slotNewMasterPage(int)));
  8437. connect(dia, SIGNAL(removePage(int )), this, SLOT(deletePage2(int )));
  8438. //connect(dia, SIGNAL(loadPage(QString, int, bool)), this, SLOT(loadPage(QString, int, bool)));
  8439. connect(dia, SIGNAL(finished()), this, SLOT(manageMasterPagesEnd()));
  8440. scrActions["pageInsert"]->setEnabled(false);
  8441. scrActions["pageImport"]->setEnabled(false);
  8442. scrActions["pageDelete"]->setEnabled(false);
  8443. scrActions["pageCopy"]->setEnabled(false);
  8444. scrActions["pageMove"]->setEnabled(false);
  8445. scrActions["pageApplyMasterPage"]->setEnabled(false);
  8446. scrActions["pageCopyToMasterPage"]->setEnabled(false);
  8447. scrActions["editMasterPages"]->setEnabled(false);
  8448. scrActions["fileNew"]->setEnabled(false);
  8449. scrActions["fileNewFromTemplate"]->setEnabled(false);
  8450. scrActions["fileOpen"]->setEnabled(false);
  8451. scrActions["fileClose"]->setEnabled(false);
  8452. scrMenuMgr->setMenuEnabled("FileOpenRecent", false);
  8453. scrActions["fileRevert"]->setEnabled(false);
  8454. scrActions["fileDocSetup"]->setEnabled(false);
  8455. scrActions["filePrint"]->setEnabled(false);
  8456. scrActions["PrintPreview"]->setEnabled(false);
  8457. scrActions["toolsPDFPushButton"]->setEnabled(false);
  8458. scrActions["toolsPDFTextField"]->setEnabled(false);
  8459. scrActions["toolsPDFCheckBox"]->setEnabled(false);
  8460. scrActions["toolsPDFComboBox"]->setEnabled(false);
  8461. scrActions["toolsPDFListBox"]->setEnabled(false);
  8462. scrActions["toolsPDFAnnotText"]->setEnabled(false);
  8463. pagePalette->enablePalette(false);
  8464. dia->show();
  8465. ActWin->setMasterPagesPalette(dia);
  8466. }
  8467. }
  8468. }
  8469.  
  8470. void ScribusMainWindow::manageMasterPagesEnd()
  8471. {
  8472. view->setScale(storedViewScale);
  8473. view->hideMasterPage();
  8474. slotSelect();
  8475. scrActions["editMasterPages"]->setEnabled(true);
  8476. scrActions["fileNew"]->setEnabled(true);
  8477. scrActions["fileNewFromTemplate"]->setEnabled(true);
  8478. scrActions["fileOpen"]->setEnabled(true);
  8479. scrActions["fileClose"]->setEnabled(true);
  8480. scrActions["fileSave"]->setEnabled(true);
  8481. scrMenuMgr->setMenuEnabled("FileOpenRecent", true);
  8482. scrActions["fileRevert"]->setEnabled(true);
  8483. scrActions["fileDocSetup"]->setEnabled(true);
  8484. scrActions["filePrint"]->setEnabled(true);
  8485. if ( ScCore->haveGS() || ScCore->isWinGUI() )
  8486. scrActions["PrintPreview"]->setEnabled(true);
  8487. scrActions["pageInsert"]->setEnabled(true);
  8488. scrActions["pageCopy"]->setEnabled(true);
  8489. scrActions["pageImport"]->setEnabled(true);
  8490. scrActions["pageApplyMasterPage"]->setEnabled(true);
  8491. scrActions["pageCopyToMasterPage"]->setEnabled(true);
  8492. bool setter = doc->Pages->count() > 1 ? true : false;
  8493. scrActions["pageDelete"]->setEnabled(setter);
  8494. scrActions["pageMove"]->setEnabled(setter);
  8495. scrActions["toolsPDFPushButton"]->setEnabled(true);
  8496. scrActions["toolsPDFTextField"]->setEnabled(true);
  8497. scrActions["toolsPDFCheckBox"]->setEnabled(true);
  8498. scrActions["toolsPDFComboBox"]->setEnabled(true);
  8499. scrActions["toolsPDFListBox"]->setEnabled(true);
  8500. scrActions["toolsPDFAnnotText"]->setEnabled(true);
  8501. uint pageCount=doc->DocPages.count();
  8502. for (uint c=0; c<pageCount; ++c)
  8503. Apply_MasterPage(doc->DocPages.at(c)->MPageNam, c, false);
  8504. // doc->setMasterPageMode(false);
  8505. pagePalette->enablePalette(true);
  8506. pagePalette->rebuildMasters();
  8507. ActWin->setMasterPagesPalette(NULL);
  8508. doc->setCurrentPage(doc->DocPages.at(storedPageNum));
  8509. view->reformPages(false);
  8510. view->setContentsPos(static_cast<int>(storedViewXCoor * storedViewScale), static_cast<int>(storedViewYCoor * storedViewScale));
  8511. view->DrawNew();
  8512. pagePalette->Rebuild();
  8513. // if (outlinePalette->isVisible())
  8514. // outlinePalette->BuildTree();
  8515. // slotDocCh();
  8516. }
  8517.  
  8518. void ScribusMainWindow::ApplyMasterPage()
  8519. {
  8520. Q_ASSERT(!doc->masterPageMode());
  8521. ApplyMasterPageDialog *dia = new ApplyMasterPageDialog(this);
  8522. dia->setup(doc, doc->currentPage()->MPageNam);
  8523. if (dia->exec())
  8524. {
  8525. QString masterPageName = dia->getMasterPageName();
  8526. int pageSelection = dia->getPageSelection(); //0=current, 1=even, 2=odd, 3=all
  8527. if (pageSelection==0) //current page only
  8528. Apply_MasterPage(masterPageName, doc->currentPage()->pageNr(), false);
  8529. else
  8530. {
  8531. int startPage, endPage;
  8532. if (dia->usingRange())
  8533. {
  8534. startPage=dia->getFromPage()-1; //Pages start from 0, not 1
  8535. endPage=dia->getToPage();
  8536. }
  8537. else
  8538. {
  8539. startPage = pageSelection==1 ? 1 : 0; //if even, startPage is 1 (real page 2)
  8540. endPage=doc->DocPages.count();
  8541. }
  8542. for (int pageNum = startPage; pageNum < endPage; ++pageNum)// +=pageStep)
  8543. {
  8544. //Increment by 1 and not 2 even for even/odd application as user
  8545. //can select to eg apply to even pages with a single odd page selected
  8546. if (pageSelection==1 && pageNum%2!=0) //Even, %2!=0 as 1st page is numbered 0
  8547. Apply_MasterPage(masterPageName, pageNum, false);
  8548. else
  8549. if (pageSelection==2 && pageNum%2==0) //Odd, %2==0 as 1st page is numbered 0
  8550. Apply_MasterPage(masterPageName, pageNum, false);
  8551. else
  8552. if (pageSelection==3) //All
  8553. Apply_MasterPage(masterPageName, pageNum, false);
  8554. }
  8555. }
  8556. }
  8557. view->reformPages();
  8558. view->DrawNew();
  8559. //CB done by doc::reformpages
  8560. //slotDocCh();
  8561. pagePalette->Rebuild();
  8562. // #9476 : call setupPage with false arg to setup only guidePalette GUI
  8563. // Otherwise setupPage() will apply guides to current page, doesn't need that,
  8564. // Apply_MasterPage() has already done it
  8565. guidePalette->setupPage(false);
  8566. delete dia;
  8567. }
  8568.  
  8569. void ScribusMainWindow::Apply_MasterPage(QString pageName, int pageNumber, bool reb)
  8570. {
  8571. if (!HaveDoc)
  8572. return;
  8573. doc->applyMasterPage(pageName, pageNumber);
  8574. if (reb)
  8575. {
  8576. view->DrawNew();
  8577. // pagePalette->Rebuild();
  8578. }
  8579. }
  8580.  
  8581. //CB-->Doc
  8582. void ScribusMainWindow::GroupObj(bool showLockDia)
  8583. {
  8584. if (HaveDoc)
  8585. {
  8586. Selection* itemSelection = doc->m_Selection;
  8587. if (itemSelection->count() < 2)
  8588. return;
  8589. bool lockObject = false;
  8590. bool modifyLock = false;
  8591. uint selectedItemCount=itemSelection->count();
  8592. if (showLockDia)
  8593. {
  8594. uint lockedCount=0;
  8595. for (uint a=0; a<selectedItemCount; ++a)
  8596. {
  8597. if (itemSelection->itemAt(a)->locked())
  8598. ++lockedCount;
  8599. }
  8600. if (lockedCount!=0 && lockedCount!=selectedItemCount)
  8601. {
  8602. QMessageBox msgBox;
  8603. QPushButton *abortButton = msgBox.addButton(QMessageBox::Cancel);
  8604. QPushButton *lockButton = msgBox.addButton(tr("&Lock All"), QMessageBox::AcceptRole);
  8605. QPushButton *unlockButton = msgBox.addButton(tr("&Unlock All"), QMessageBox::AcceptRole);
  8606. msgBox.setIcon(QMessageBox::Warning);
  8607. msgBox.setWindowTitle(CommonStrings::trWarning);
  8608. msgBox.setText( tr("Some objects are locked."));
  8609. msgBox.exec();
  8610. if (msgBox.clickedButton() == abortButton)
  8611. return;
  8612. else if (msgBox.clickedButton() == lockButton)
  8613. lockObject = true;
  8614. modifyLock = true;
  8615. unlockButton = NULL; // just to silence the compiler
  8616. }
  8617. }
  8618. doc->itemSelection_GroupObjects(modifyLock, lockObject);
  8619. }
  8620. }
  8621.  
  8622. //CB-->Doc
  8623. void ScribusMainWindow::UnGroupObj()
  8624. {
  8625. if (HaveDoc)
  8626. doc->itemSelection_UnGroupObjects();
  8627. }
  8628.  
  8629. void ScribusMainWindow::restore(UndoState* state, bool isUndo)
  8630. {
  8631. SimpleState *ss = dynamic_cast<SimpleState*>(state);
  8632. if (ss)
  8633. {
  8634. if (ss->contains("ADD_PAGE"))
  8635. restoreAddPage(ss, isUndo);
  8636. else if (ss->contains("DELETE_PAGE"))
  8637. restoreDeletePage(ss, isUndo);
  8638. }
  8639. }
  8640.  
  8641. void ScribusMainWindow::restoreDeletePage(SimpleState *state, bool isUndo)
  8642. {
  8643. int where, wo;
  8644. int pagenr = state->getUInt("PAGENR");
  8645. QStringList tmpl;
  8646. tmpl << state->get("MASTERPAGE");
  8647. QString pageName = state->get("PAGENAME");
  8648. bool oldPageMode = doc->masterPageMode();
  8649. if (!pageName.isEmpty() && !oldPageMode) // We try do undo a master page deletion in standard mode
  8650. doc->setMasterPageMode(true);
  8651. if (pagenr == 1)
  8652. {
  8653. where = 0;
  8654. wo = 1;
  8655. }
  8656. else if (pagenr > doc->Pages->count())
  8657. {
  8658. where = 2;
  8659. wo = doc->Pages->count();
  8660. }
  8661. else
  8662. {
  8663. where = 1;
  8664. wo = pagenr - 1;
  8665. }
  8666. if (isUndo)
  8667. {
  8668. if (doc->masterPageMode())
  8669. {
  8670. slotNewMasterPage(wo, pageName);
  8671. }
  8672. else
  8673. {
  8674. addNewPages(wo, where, 1, doc->pageHeight, doc->pageWidth, doc->PageOri, doc->m_pageSize, true, &tmpl);
  8675. }
  8676. UndoObject *tmp =
  8677. undoManager->replaceObject(state->getUInt("DUMMY_ID"), doc->Pages->at(pagenr - 1));
  8678. delete tmp;
  8679. }
  8680. else
  8681. {
  8682. DummyUndoObject *duo = new DummyUndoObject();
  8683. uint id = static_cast<uint>(duo->getUId());
  8684. undoManager->replaceObject(doc->Pages->at(pagenr - 1)->getUId(), duo);
  8685. state->set("DUMMY_ID", id);
  8686. deletePage(pagenr, pagenr);
  8687. }
  8688. if (!pageName.isEmpty() && !oldPageMode)
  8689. {
  8690. doc->setMasterPageMode(oldPageMode);
  8691. doc->rebuildMasterNames();
  8692. pagePalette->rebuildMasters();
  8693. }
  8694. if (doc->masterPageMode() && !pageName.isEmpty())
  8695. ActWin->masterPagesPalette()->updateMasterPageList();
  8696. pagePalette->rebuildPages();
  8697. }
  8698.  
  8699. void ScribusMainWindow::restoreAddPage(SimpleState *state, bool isUndo)
  8700. {
  8701. int wo = state->getInt("PAGE");
  8702. int where = state->getInt("WHERE");
  8703. int count = state->getInt("COUNT");
  8704. QStringList based = state->get("BASED").split("|", QString::SkipEmptyParts);
  8705. double height = state->getDouble("HEIGHT");
  8706. double width = state->getDouble("WIDTH");
  8707. int orient = state->getInt("ORIENT");
  8708. QString siz = state->get("SIZE");
  8709. bool mov = static_cast<bool>(state->getInt("MOVED"));
  8710.  
  8711. int delFrom = 0;
  8712. int delTo = 0;
  8713. switch (where)
  8714. {
  8715. case 0:
  8716. delTo = wo + count - 1;
  8717. delFrom = delTo - count + 1;
  8718. break;
  8719. case 1:
  8720. delFrom = wo + 1;
  8721. delTo = wo + count;
  8722. break;
  8723. case 2:
  8724. delTo = doc->Pages->count();
  8725. delFrom = doc->Pages->count() - count + 1;
  8726. if (!isUndo)
  8727. {
  8728. delFrom += count;
  8729. delTo += count;
  8730. }
  8731. break;
  8732. }
  8733. if (isUndo)
  8734. {
  8735. for (int i = delFrom - 1; i < delTo; ++i)
  8736. {
  8737. DummyUndoObject *duo = new DummyUndoObject();
  8738. ulong did = duo->getUId();
  8739. undoManager->replaceObject(doc->Pages->at(i)->getUId(), duo);
  8740. state->set(QString("Page%1").arg(i), static_cast<uint>(did));
  8741. }
  8742. if (HaveDoc && doc->appMode == modeEditClip)
  8743. view->requestMode(submodeEndNodeEdit);
  8744. view->Deselect(true);
  8745. deletePage(delFrom, delTo);
  8746. }
  8747. else
  8748. {
  8749. if (doc->masterPageMode())
  8750. {
  8751. assert (count == 1);
  8752. slotNewMasterPage(wo, based[0]);
  8753. }
  8754. else
  8755. {
  8756. addNewPages(wo, where, count, height, width, orient, siz, mov, &based);
  8757. }
  8758. for (int i = delFrom - 1; i < delTo; ++i)
  8759. {
  8760. UndoObject *tmp = undoManager->replaceObject(
  8761. state->getUInt(QString("Page%1").arg(i)), doc->Pages->at(i));
  8762. delete tmp;
  8763. }
  8764. }
  8765. }
  8766.  
  8767. void ScribusMainWindow::restoreGrouping(SimpleState *state, bool isUndo)
  8768. {
  8769. int itemCount = state->getInt("itemcount");
  8770. view->Deselect();
  8771. for (int i = 0; i < itemCount; ++i)
  8772. {
  8773. int itemNr = doc->getItemNrfromUniqueID(state->getUInt(QString("item%1").arg(i)));
  8774. if (doc->Items->at(itemNr)->uniqueNr == state->getUInt(QString("item%1").arg(i)))
  8775. view->SelectItemNr(itemNr);
  8776. }
  8777. if (isUndo)
  8778. {
  8779. uint docSelectionCount=doc->m_Selection->count();
  8780. PageItem *currItem;
  8781. uint lowestItem = 999999;
  8782. for (uint a=0; a<docSelectionCount; ++a)
  8783. {
  8784. currItem = doc->m_Selection->itemAt(a);
  8785. lowestItem = qMin(lowestItem, currItem->ItemNr);
  8786. }
  8787. if ((lowestItem > 0) && (doc->Items->at(lowestItem-1)->Groups.count() != 0))
  8788. {
  8789. if (doc->Items->at(lowestItem-1)->Groups.top() == doc->m_Selection->itemAt(0)->Groups.top())
  8790. {
  8791. view->SelectItemNr(lowestItem-1);
  8792. }
  8793. }
  8794. UnGroupObj();
  8795. }
  8796. else
  8797. GroupObj(false);
  8798. }
  8799.  
  8800. void ScribusMainWindow::restoreUngrouping(SimpleState *state, bool isUndo)
  8801. {
  8802. int itemCount = state->getInt("itemcount");
  8803. view->Deselect();
  8804. for (int i = 0; i < itemCount; ++i)
  8805. {
  8806. int itemNr = doc->getItemNrfromUniqueID(state->getUInt(QString("item%1").arg(i)));
  8807. if (doc->Items->at(itemNr)->uniqueNr == state->getUInt(QString("item%1").arg(i)))
  8808. {
  8809. if (isUndo)
  8810. doc->Items->at(itemNr)->isTableItem = static_cast<bool>(state->getInt(QString("tableitem%1").arg(i)));
  8811. view->SelectItemNr(itemNr);
  8812. }
  8813. }
  8814. if (isUndo)
  8815. GroupObj(false);
  8816. else
  8817. {
  8818. uint docSelectionCount=doc->m_Selection->count();
  8819. PageItem *currItem;
  8820. uint lowestItem = 999999;
  8821. for (uint a=0; a<docSelectionCount; ++a)
  8822. {
  8823. currItem = doc->m_Selection->itemAt(a);
  8824. lowestItem = qMin(lowestItem, currItem->ItemNr);
  8825. }
  8826. if ((lowestItem > 0) && (doc->Items->at(lowestItem-1)->Groups.count() != 0))
  8827. {
  8828. if (doc->Items->at(lowestItem-1)->Groups.top() == doc->m_Selection->itemAt(0)->Groups.top())
  8829. {
  8830. view->SelectItemNr(lowestItem-1);
  8831. }
  8832. }
  8833. UnGroupObj();
  8834. }
  8835. }
  8836.  
  8837. void ScribusMainWindow::StatusPic()
  8838. {
  8839. if (HaveDoc)
  8840. {
  8841. PicStatus *dia = new PicStatus(this, doc);
  8842. connect(dia, SIGNAL(selectPage(int)), this, SLOT(selectPagesFromOutlines(int)));
  8843. connect(dia, SIGNAL(selectMasterPage(QString)), this, SLOT(manageMasterPages(QString)));
  8844. connect(dia, SIGNAL(selectElement(int, int, bool)), this, SLOT(selectItemsFromOutlines(int, int, bool)));
  8845. // connect(dia, SIGNAL(refreshItem(PageItem*)), view, SLOT(RefreshItem(PageItem*)));
  8846. dia->exec();
  8847. delete dia;
  8848. }
  8849. }
  8850.  
  8851. QString ScribusMainWindow::CFileDialog(QString wDir, QString caption, QString filter, QString defNa,
  8852. int optionFlags, bool *docom, bool *doFont, bool *doProfiles)
  8853. {
  8854. QString retval = "";
  8855. // changed from "this" to qApp->activeWindow() to be sure it will be opened
  8856. // with the current active window as parent. E.g. it won't hide StoryEditor etc. -- PV
  8857. CustomFDialog *dia = new CustomFDialog(qApp->activeWindow(), wDir, caption, filter, optionFlags);
  8858. if (!defNa.isEmpty())
  8859. {
  8860. QFileInfo f(defNa);
  8861. dia->setExtension(f.suffix());
  8862. dia->setZipExtension(f.suffix() + ".gz");
  8863. dia->setSelection(defNa);
  8864. }
  8865. if (optionFlags & fdDirectoriesOnly)
  8866. {
  8867. dia->SaveZip->setChecked(*docom);
  8868. dia->WithFonts->setChecked(*doFont);
  8869. dia->WithProfiles->setChecked(*doProfiles);
  8870. }
  8871. if (dia->exec() == QDialog::Accepted)
  8872. {
  8873. LoadEnc = "";
  8874. if (!(optionFlags & fdDirectoriesOnly))
  8875. {
  8876. LoadEnc = (optionFlags & fdShowCodecs) ? dia->TxCodeM->currentText() : QString("");
  8877. if (optionFlags & fdCompressFile)
  8878. {
  8879. if (dia->SaveZip->isChecked())
  8880. dia->handleCompress();
  8881. }
  8882. }
  8883. else
  8884. {
  8885. *docom = dia->SaveZip->isChecked();
  8886. *doFont = dia->WithFonts->isChecked();
  8887. *doProfiles = dia->WithProfiles->isChecked();
  8888. }
  8889. this->repaint();
  8890. retval = dia->selectedFile();
  8891. qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
  8892. }
  8893. delete dia;
  8894. return retval;
  8895. }
  8896.  
  8897.  
  8898.  
  8899. void ScribusMainWindow::recalcColors(QProgressBar *dia)
  8900. {
  8901. if (HaveDoc)
  8902. {
  8903. doc->recalculateColors();
  8904. propertiesPalette->updateColorList();
  8905. }
  8906. }
  8907.  
  8908. void ScribusMainWindow::ModifyAnnot()
  8909. {
  8910. // Q_ASSERT(!doc->masterPageMode());
  8911. if (doc->m_Selection->count() != 0)
  8912. {
  8913. PageItem *currItem = doc->m_Selection->itemAt(0);
  8914. if ((currItem->annotation().Type() == 0) || (currItem->annotation().Type() == 1) || (currItem->annotation().Type() > 9))
  8915. {
  8916. int AnType = currItem->annotation().Type();
  8917. int AnActType = currItem->annotation().ActionType();
  8918. QString AnAction = currItem->annotation().Action();
  8919. QString An_Extern = currItem->annotation().Extern();
  8920. Annota *dia = new Annota(this, currItem, doc->DocPages.count(), static_cast<int>(doc->pageWidth), static_cast<int>(doc->pageHeight), view);
  8921. if (dia->exec())
  8922. slotDocCh();
  8923. else
  8924. {
  8925. currItem->annotation().setType(AnType);
  8926. currItem->annotation().setActionType(AnActType);
  8927. currItem->annotation().setAction(AnAction);
  8928. currItem->annotation().setExtern(An_Extern);
  8929. }
  8930. delete dia;
  8931. }
  8932. else
  8933. {
  8934. Annot *dia = new Annot(this, currItem, doc->DocPages.count(), static_cast<int>(doc->pageWidth), static_cast<int>(doc->pageHeight), doc->PageColors, view);
  8935. if (dia->exec())
  8936. slotDocCh();
  8937. delete dia;
  8938. }
  8939. currItem->update();
  8940. }
  8941. }
  8942.  
  8943. void ScribusMainWindow::SetShortCut()
  8944. {
  8945. for (QMap<QString,Keys>::Iterator it = prefsManager->appPrefs.KeyActions.begin(); it != prefsManager->appPrefs.KeyActions.end(); ++it )
  8946. {
  8947. if (!it.value().actionName.isEmpty())
  8948. if (scrActions[it.value().actionName])
  8949. scrActions[it.value().actionName]->setShortcut(it.value().keySequence);
  8950. }
  8951. }
  8952.  
  8953. void ScribusMainWindow::PutScrap(int scID)
  8954. {
  8955. ScriXmlDoc ss;
  8956. QString objectString = ss.WriteElem(doc, view, doc->m_Selection);
  8957. QDomDocument docu("scridoc");
  8958. docu.setContent(objectString);
  8959. QDomElement elem = docu.documentElement();
  8960. QDomNode DOC = elem.firstChild();
  8961. bool first = true;
  8962. DOC = elem.firstChild();
  8963. while(!DOC.isNull())
  8964. {
  8965. QDomElement pg = DOC.toElement();
  8966. if(pg.tagName() == "ITEM")
  8967. {
  8968. if (first)
  8969. pg.setAttribute("ANNAME", doc->m_Selection->itemAt(0)->itemName());
  8970. first = false;
  8971. }
  8972. DOC = DOC.nextSibling();
  8973. }
  8974. objectString = docu.toString();
  8975. scrapbookPalette->ObjFromMainMenu(objectString, scID);
  8976. }
  8977.  
  8978. void ScribusMainWindow::changeLayer(int )
  8979. {
  8980. if (doc->appMode == modeEdit)
  8981. slotSelect();
  8982. else if (doc->appMode == modeEditClip)
  8983. NoFrameEdit();
  8984. view->Deselect(true);
  8985. rebuildLayersList();
  8986. view->updateLayerMenu();
  8987. view->setLayerMenuText(doc->activeLayerName());
  8988. view->DrawNew();
  8989. bool setter = !doc->layerLocked( doc->activeLayer() );
  8990. scrActions["editPaste"]->setEnabled((ScMimeData::clipboardHasScribusData() || (scrapbookPalette->tempBView->objectMap.count() > 0)) && (setter));
  8991. scrMenuMgr->setMenuEnabled("EditPasteRecent", ((scrapbookPalette->tempBView->objectMap.count() > 0) && (setter)));
  8992. scrActions["editSelectAll"]->setEnabled(setter);
  8993. scrActions["editSelectAllOnLayer"]->setEnabled(setter);
  8994. scrActions["editDeselectAll"]->setEnabled(false);
  8995. scrMenuMgr->setMenuEnabled("Insert", setter);
  8996. scrActions["insertFrame"]->setEnabled(setter);
  8997. scrActions["toolsSelect"]->setEnabled(setter);
  8998. scrActions["toolsInsertTextFrame"]->setEnabled(setter);
  8999. scrActions["toolsInsertImageFrame"]->setEnabled(setter);
  9000. scrActions["toolsInsertTableFrame"]->setEnabled(setter);
  9001. scrActions["toolsInsertShape"]->setEnabled(setter);
  9002. scrActions["toolsInsertLine"]->setEnabled(setter);
  9003. scrActions["toolsInsertBezier"]->setEnabled(setter);
  9004. scrActions["toolsInsertFreehandLine"]->setEnabled(setter);
  9005. scrActions["toolsInsertPolygon"]->setEnabled(setter);
  9006. scrActions["toolsInsertRenderFrame"]->setEnabled(setter);
  9007. if (doc->masterPageMode())
  9008. {
  9009. scrActions["toolsPDFPushButton"]->setEnabled(false);
  9010. scrActions["toolsPDFTextField"]->setEnabled(false);
  9011. scrActions["toolsPDFCheckBox"]->setEnabled(false);
  9012. scrActions["toolsPDFComboBox"]->setEnabled(false);
  9013. scrActions["toolsPDFListBox"]->setEnabled(false);
  9014. scrActions["toolsPDFAnnotText"]->setEnabled(false);
  9015. }
  9016. else
  9017. {
  9018. scrActions["toolsPDFPushButton"]->setEnabled(setter);
  9019. scrActions["toolsPDFTextField"]->setEnabled(setter);
  9020. scrActions["toolsPDFCheckBox"]->setEnabled(setter);
  9021. scrActions["toolsPDFComboBox"]->setEnabled(setter);
  9022. scrActions["toolsPDFListBox"]->setEnabled(setter);
  9023. scrActions["toolsPDFAnnotText"]->setEnabled(setter);
  9024. }
  9025. scrActions["toolsPDFAnnotLink"]->setEnabled(setter);
  9026. scrMenuMgr->setMenuEnabled("ItemLayer", doc->layerCount() > 1);
  9027. }
  9028.  
  9029. void ScribusMainWindow::showLayer()
  9030. {
  9031. view->DrawNew();
  9032. }
  9033.  
  9034. void ScribusMainWindow::UnDoAction()
  9035. {
  9036. undoManager->undo(1);
  9037. }
  9038.  
  9039. void ScribusMainWindow::RedoAction()
  9040. {
  9041. undoManager->redo(1);
  9042. }
  9043.  
  9044. void ScribusMainWindow::initHyphenator()
  9045. {
  9046. InstLang.clear();
  9047. //Build our list of hyphenation dictionaries we have in the install dir
  9048. //Grab the language abbreviation from it, get the full language text
  9049. //Insert the name as key and a new string list into the map
  9050. QString hyphDirName = QDir::toNativeSeparators(ScPaths::instance().dictDir());
  9051. QDir hyphDir(hyphDirName, "*.dic", QDir::Name, QDir::Files | QDir::NoSymLinks);
  9052. if ((hyphDir.exists()) && (hyphDir.count() != 0))
  9053. {
  9054. // LanguageManager langmgr;
  9055. // langmgr.init(false);
  9056. QString languageOfHyphFile;
  9057. for (uint dc = 0; dc < hyphDir.count(); ++dc)
  9058. {
  9059. QFileInfo fi(hyphDir[dc]);
  9060. QString fileLangAbbrev=fi.baseName().section('_', 1);
  9061. languageOfHyphFile = LanguageManager::instance()->getLangFromAbbrev(fileLangAbbrev, false);
  9062. InstLang.insert(languageOfHyphFile, QStringList());
  9063. }
  9064. }
  9065.  
  9066. //For each qm file existing, load the file and find the translations of the names
  9067. QString pfad = ScPaths::instance().translationDir();
  9068. QDir d2(pfad, "*.*", QDir::Name, QDir::Files | QDir::NoSymLinks);
  9069. if ((d2.exists()) && (d2.count() != 0))
  9070. {
  9071. for (uint dc = 0; dc < d2.count(); dc++)
  9072. {
  9073. QFileInfo fi(pfad + d2[dc]);
  9074. QString ext = fi.suffix().toLower();
  9075. if (ext == "qm")
  9076. {
  9077. QTranslator *trans = new QTranslator(0);
  9078. trans->load(pfad + d2[dc]);
  9079.  
  9080. QString translatedLang;
  9081. for (QMap<QString, QStringList>::Iterator it=InstLang.begin(); it!=InstLang.end(); ++it)
  9082. {
  9083. translatedLang="";
  9084. translatedLang = trans->translate("QObject", it.key().toLocal8Bit().data(), "");
  9085. if (!translatedLang.isEmpty())
  9086. it.value().append(translatedLang);
  9087. }
  9088. delete trans;
  9089. }
  9090. }
  9091. }
  9092. //For each hyphenation file, grab the strings and the hyphenation data.
  9093. QString lang = QString(QLocale::system().name()).left(2);
  9094. LangTransl.clear();
  9095. prefsManager->appPrefs.Language = "English";
  9096. if ((hyphDir.exists()) && (hyphDir.count() != 0))
  9097. {
  9098. LanguageManager *langmgr(LanguageManager::instance());
  9099. // langmgr.init(false);
  9100. QString datein = "";
  9101. for (uint dc = 0; dc < hyphDir.count(); ++dc)
  9102. {
  9103. QFileInfo fi(hyphDir[dc]);
  9104. QString fileLangAbbrev=fi.baseName().section('_', 1);
  9105. datein = langmgr->getLangFromAbbrev(fileLangAbbrev);
  9106. QString tDatein = datein;
  9107. datein = GetLang(datein);
  9108. LangTransl.insert(datein, tDatein);
  9109. langmgr->addHyphLang(fileLangAbbrev, hyphDir[dc]);
  9110. // Sprachen.insert(datein, hyphDir[dc]);
  9111. if (fileLangAbbrev == lang)
  9112. prefsManager->appPrefs.Language = datein;
  9113. }
  9114. if (datein.isEmpty())
  9115. prefsManager->appPrefs.Language = "English";
  9116. }
  9117. // propertiesPalette->fillLangCombo(LangTransl);
  9118. }
  9119.  
  9120. QString ScribusMainWindow::GetLang(QString inLang)
  9121. {
  9122. QMap<QString, QStringList>::Iterator itlend=InstLang.end();
  9123. for (QMap<QString, QStringList>::Iterator itl = InstLang.begin(); itl != itlend; ++itl)
  9124. {
  9125. if (itl.value().contains(inLang))
  9126. return itl.key();
  9127. }
  9128. return inLang;
  9129. }
  9130.  
  9131. void ScribusMainWindow::ImageEffects()
  9132. {
  9133. if (HaveDoc)
  9134. {
  9135. if (doc->m_Selection->count() != 0)
  9136. {
  9137. PageItem *currItem = doc->m_Selection->itemAt(0);
  9138. EffectsDialog* dia = new EffectsDialog(this, currItem, doc);
  9139. if (dia->exec())
  9140. doc->itemSelection_ApplyImageEffects(dia->effectsList);
  9141. delete dia;
  9142. }
  9143. }
  9144. }
  9145.  
  9146. QString ScribusMainWindow::Collect(bool compress, bool withFonts, const bool withProfiles, const QString& )
  9147. {
  9148. CollectForOutput c(doc, withFonts, withProfiles, compress);
  9149. return c.collect();
  9150. }
  9151.  
  9152. void ScribusMainWindow::docCheckToggle(bool visible)
  9153. {
  9154. if (!visible)
  9155. {
  9156. if (docCheckerPalette->checkMode == CheckDocument::checkPDF)
  9157. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(doSaveAsPDF()));
  9158. if (docCheckerPalette->checkMode == CheckDocument::checkEPS)
  9159. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(reallySaveAsEps()));
  9160. if (docCheckerPalette->checkMode == CheckDocument::checkPrint)
  9161. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(slotReallyPrint()));
  9162. if (docCheckerPalette->checkMode == CheckDocument::checkPrintPreview)
  9163. disconnect(docCheckerPalette, SIGNAL(ignoreAllErrors()), this, SLOT(doPrintPreview()));
  9164. docCheckerPalette->setIgnoreEnabled(false);
  9165. docCheckerPalette->checkMode = CheckDocument::checkNULL;
  9166. }
  9167. else
  9168. {
  9169. if (HaveDoc)
  9170. {
  9171. scanDocument();
  9172. docCheckerPalette->buildErrorList(doc);
  9173. }
  9174. }
  9175. }
  9176.  
  9177. bool ScribusMainWindow::scanDocument()
  9178. {
  9179. return DocumentChecker().checkDocument(doc);
  9180. }
  9181.  
  9182. void ScribusMainWindow::slotStoryEditor()
  9183. {
  9184. if (doc->m_Selection->count() != 0)
  9185. {
  9186. PageItem *currItem = doc->m_Selection->itemAt(0);
  9187. PageItem *currItemSE=storyEditor->currentItem();
  9188. ScribusDoc *currDocSE=storyEditor->currentDocument();
  9189. storyEditor->activFromApp = true;
  9190. //CB shouldnt these be after the if?
  9191. //Why are we resetting the doc and item in this case. My original code didnt do this.
  9192. storyEditor->setCurrentDocumentAndItem(doc, currItem);
  9193. if (currItem==currItemSE && doc==currDocSE)
  9194. {
  9195. storyEditor->show();
  9196. storyEditor->raise();
  9197. return;
  9198. }
  9199. CurrStED = storyEditor;
  9200. connect(storyEditor, SIGNAL(DocChanged()), this, SLOT(slotDocCh()));
  9201. // connect(storyEditor, SIGNAL(EditSt()), this, SLOT(slotEditStyles()));
  9202. storyEditor->show();
  9203. storyEditor->raise();
  9204. }
  9205. }
  9206.  
  9207. void ScribusMainWindow::emergencySave()
  9208. {
  9209. emergencyActivated=true;
  9210. std::cout << "Calling Emergency Save" << std::endl;
  9211. QWidgetList windows = wsp->windowList();
  9212. if (!windows.isEmpty())
  9213. {
  9214. uint windowCount=windows.count();
  9215. for (uint i=0; i<windowCount ; ++i)
  9216. {
  9217. ActWin = (ScribusWin*)windows.at(i);
  9218. doc = ActWin->doc();
  9219. view = ActWin->view();
  9220. doc->setModified(false);
  9221. if (doc->hasName)
  9222. {
  9223. std::cout << "Saving: " << doc->DocName.toStdString() << ".emergency" << std::endl;
  9224. doc->autoSaveTimer->stop();
  9225. FileLoader fl(doc->DocName+".emergency");
  9226. fl.saveFile(doc->DocName+".emergency", doc, 0);
  9227. }
  9228. view->close();
  9229. uint numPages=doc->Pages->count();
  9230. for (uint a=0; a<numPages; ++a)
  9231. delete doc->Pages->at(a);
  9232. delete doc;
  9233. ActWin->close();
  9234. }
  9235. }
  9236. }
  9237.  
  9238. void ScribusMainWindow::EditTabs()
  9239. {
  9240. if (HaveDoc)
  9241. {
  9242. if (doc->m_Selection->count() != 0)
  9243. {
  9244. PageItem *currItem = doc->m_Selection->itemAt(0);
  9245. TabManager *dia = new TabManager(this, doc->unitIndex(), currItem->itemText.defaultStyle().tabValues(), currItem->width());
  9246. if (dia->exec())
  9247. {
  9248. ParagraphStyle newTabs(currItem->itemText.defaultStyle());
  9249. newTabs.setTabValues(dia->tmpTab);
  9250. currItem->itemText.setDefaultStyle(newTabs);
  9251. currItem->update();
  9252. slotDocCh();
  9253. }
  9254. delete dia;
  9255. }
  9256. }
  9257. }
  9258.  
  9259. void ScribusMainWindow::SearchText()
  9260. {
  9261. PageItem *currItem = doc->m_Selection->itemAt(0);
  9262. view->requestMode(modeEdit);
  9263. currItem->itemText.setCursorPosition(0);
  9264. SearchReplace* dia = new SearchReplace(this, doc, currItem);
  9265. connect(dia, SIGNAL(NewFont(const QString&)), this, SLOT(SetNewFont(const QString&)));
  9266. connect(dia, SIGNAL(NewAbs(int)), this, SLOT(setAbsValue(int)));
  9267. dia->exec();
  9268. disconnect(dia, SIGNAL(NewFont(const QString&)), this, SLOT(SetNewFont(const QString&)));
  9269. disconnect(dia, SIGNAL(NewAbs(int)), this, SLOT(setAbsValue(int)));
  9270. delete dia;
  9271. slotSelect();
  9272. }
  9273.  
  9274. void ScribusMainWindow::imageEditorExited(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/)
  9275. {
  9276. if ( ExternalApp != 0 )
  9277. {
  9278. delete ExternalApp;
  9279. ExternalApp = 0;
  9280. }
  9281. }
  9282.  
  9283. /* call gimp and wait upon completion */
  9284. void ScribusMainWindow::callImageEditor()
  9285. {
  9286. if (doc->m_Selection->count() != 0)
  9287. {
  9288. //NOTE to reviewers: I added my code to this function,
  9289. // - as it performs a similar function,
  9290. // - when the frame is a latex frame it makes only sense
  9291. // to run a latex editor
  9292. // - IMHO ScribusMainWindow has way to many slots already
  9293. // - my code here is short and without sideeffects
  9294. PageItem *currItem = doc->m_Selection->itemAt(0);
  9295. if (currItem->asLatexFrame()) {
  9296. currItem->asLatexFrame()->runEditor();
  9297. return; //Don't process the functions for imageframes!
  9298. }
  9299.  
  9300. QString imageEditorExecutable=prefsManager->imageEditorExecutable();
  9301. if (ExternalApp != 0)
  9302. {
  9303. QString ieExe = QDir::toNativeSeparators(imageEditorExecutable);
  9304. QMessageBox::information(this, tr("Information"), "<qt>" + tr("The program %1 is already running!").arg(ieExe) + "</qt>", 1, 0, 0);
  9305. return;
  9306. }
  9307. if (currItem->PictureIsAvailable)
  9308. {
  9309. int index;
  9310. QString imEditor;
  9311. ExternalApp = new QProcess(NULL);
  9312. QStringList cmd;
  9313. #if defined(_WIN32)
  9314. index = imageEditorExecutable.indexOf( ".exe" );
  9315. if ( index >= 0 )
  9316. imEditor = imageEditorExecutable.left( index + 4 );
  9317. imEditor.replace( "\\", "/" );
  9318. if ( imEditor.length() < imageEditorExecutable.length() )
  9319. {
  9320. int diffLength = imageEditorExecutable.length() - imEditor.length();
  9321. QString cmdStr = imageEditorExecutable.right( diffLength );
  9322. QStringList cmd1 = cmdStr.split( " ", QString::SkipEmptyParts);
  9323. cmd += cmd1;
  9324. }
  9325. #else
  9326. cmd = imageEditorExecutable.split(" ", QString::SkipEmptyParts);
  9327. if ( cmd.count() > 0 )
  9328. imEditor = cmd[0];
  9329. cmd.clear();
  9330. #endif
  9331. index = imEditor.lastIndexOf( "/" );
  9332. if (index > -1 )
  9333. {
  9334. QString imEditorDir = imEditor.left( index + 1 );
  9335. ExternalApp->setWorkingDirectory( imEditorDir );
  9336. }
  9337. cmd.append(QDir::toNativeSeparators(currItem->Pfile));
  9338. ExternalApp->start(imEditor, cmd);
  9339. if (!ExternalApp->waitForStarted())
  9340. {
  9341. delete ExternalApp;
  9342. ExternalApp = 0;
  9343. QMessageBox::critical(this, CommonStrings::trWarning, "<qt>" + tr("The program %1 is missing!").arg(imageEditorExecutable) + "</qt>", 1, 0, 0);
  9344. return;
  9345. }
  9346. connect(ExternalApp, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(imageEditorExited(int, QProcess::ExitStatus)));
  9347. }
  9348. }
  9349. }
  9350.  
  9351. void ScribusMainWindow::slotCharSelect()
  9352. {
  9353. charPalette->show();
  9354. }
  9355.  
  9356. void ScribusMainWindow::setUndoMode(bool isObjectSpecific)
  9357. {
  9358. objectSpecificUndo = isObjectSpecific;
  9359.  
  9360. if (!objectSpecificUndo && HaveDoc)
  9361. undoManager->showObject(Um::GLOBAL_UNDO_MODE);
  9362. else if (HaveDoc)
  9363. {
  9364. uint docSelectionCount=doc->m_Selection->count();
  9365. if (docSelectionCount == 1)
  9366. undoManager->showObject(doc->m_Selection->itemAt(0)->getUId());
  9367. else if (docSelectionCount == 0)
  9368. undoManager->showObject(doc->currentPage()->getUId());
  9369. else
  9370. undoManager->showObject(Um::NO_UNDO_STACK);
  9371. }
  9372. }
  9373.  
  9374. bool ScribusMainWindow::isObjectSpecificUndo()
  9375. {
  9376. return objectSpecificUndo;
  9377. }
  9378.  
  9379. void ScribusMainWindow::slotTest()
  9380. {
  9381. }
  9382.  
  9383. void ScribusMainWindow::slotTest2()
  9384. {
  9385. }
  9386.  
  9387. void ScribusMainWindow::getImageInfo()
  9388. {
  9389. if ((HaveDoc) && (doc->m_Selection->count() == 1))
  9390. {
  9391. PageItem *pageItem = doc->m_Selection->itemAt(0);
  9392. if (pageItem != NULL)
  9393. {
  9394. if (pageItem->itemType() == PageItem::ImageFrame)
  9395. {
  9396. ImageInfoDialog *dia = new ImageInfoDialog(this, &pageItem->pixm.imgInfo);
  9397. dia->exec();
  9398. delete dia;
  9399. }
  9400. }
  9401. }
  9402. }
  9403.  
  9404. void ScribusMainWindow::objectAttributes()
  9405. {
  9406. if ((HaveDoc) && (doc->m_Selection->count() == 1))
  9407. {
  9408. PageItem *pageItem = doc->m_Selection->itemAt(0);
  9409. if (pageItem!=NULL)
  9410. {
  9411. PageItemAttributes *pageItemAttrs = new PageItemAttributes( this );
  9412. pageItemAttrs->setup(pageItem->getObjectAttributes(), &doc->docItemAttributes);
  9413. //CB TODO Probably want this non modal in the future
  9414. if (pageItemAttrs->exec()==QDialog::Accepted)
  9415. pageItem->setObjectAttributes(pageItemAttrs->getNewAttributes());
  9416. delete pageItemAttrs;
  9417. }
  9418. }
  9419. }
  9420.  
  9421. void ScribusMainWindow::generateTableOfContents()
  9422. {
  9423. if (HaveDoc)
  9424. tocGenerator->generateDefault();
  9425. }
  9426.  
  9427. void ScribusMainWindow::insertSampleText()
  9428. {
  9429. LoremManager *m = new LoremManager(doc, this);
  9430. if (prefsManager->appPrefs.useStandardLI)
  9431. m->insertLoremIpsum("la.xml", prefsManager->appPrefs.paragraphsLI);
  9432. else
  9433. m->exec();
  9434. delete(m);
  9435. m=NULL;
  9436. }
  9437.  
  9438. void ScribusMainWindow::languageChange()
  9439. {
  9440. if (ScCore->initialized())
  9441. {
  9442. //Update colours in case someone has a translated None colour in their preference settings
  9443. //before changing the tr_NoneColor to the new value. See #9267, #5529
  9444. prefsManager->languageChange();
  9445. CommonStrings::languageChange();
  9446. //Update actions
  9447. if (actionManager!=NULL)
  9448. {
  9449. actionManager->languageChange();
  9450. ScCore->pluginManager->languageChange();
  9451. initKeyboardShortcuts();
  9452. }
  9453. //Update menu texts
  9454. if (scrMenuMgr!=NULL && !scrMenuMgr->empty())
  9455. {
  9456. scrMenuMgr->setText("File", ActionManager::defaultMenuNameEntryTranslated("File"));
  9457. scrMenuMgr->setText(recentFileMenuName, tr("Open &Recent"));
  9458. scrMenuMgr->setText(recentPasteMenuName, tr("Paste Recent"));
  9459. scrMenuMgr->setText("FileImport", tr("&Import"));
  9460. scrMenuMgr->setText("FileExport", tr("&Export"));
  9461. scrMenuMgr->setText("Edit", ActionManager::defaultMenuNameEntryTranslated("Edit"));
  9462. scrMenuMgr->setText("EditContents", tr("Contents"));
  9463. scrMenuMgr->setText("Item", ActionManager::defaultMenuNameEntryTranslated("Item"));
  9464. scrMenuMgr->setText("ItemLevel", tr("&Level"));
  9465. scrMenuMgr->setText("ItemLayer", tr("Send to Layer"));
  9466. scrMenuMgr->setText("ItemPreviewSettings", tr("Previe&w Settings"));
  9467. scrMenuMgr->setText("ItemPDFOptions", tr("&PDF Options"));
  9468. //scrMenuMgr->setText("ItemShapes", tr("&Shape"));
  9469. scrMenuMgr->setText("ItemConvertTo", tr("C&onvert To"));
  9470. // scrMenuMgr->setText("ItemPathOps", tr("Path Tools"));
  9471. scrMenuMgr->setText("Insert", ActionManager::defaultMenuNameEntryTranslated("Insert"));
  9472. scrMenuMgr->setText("InsertChar", tr("Character"));
  9473. scrMenuMgr->setText("InsertQuote", tr("Quote"));
  9474. scrMenuMgr->setText("InsertSpace", tr("Space"));
  9475. scrMenuMgr->setText("InsertLigature", tr("Liga&ture"));
  9476. scrMenuMgr->setText("Page", ActionManager::defaultMenuNameEntryTranslated("Page"));
  9477. scrMenuMgr->setText("View", ActionManager::defaultMenuNameEntryTranslated("View"));
  9478. // scrMenuMgr->setText("Tools", tr("&Tools"));
  9479. scrMenuMgr->setText("Extras", ActionManager::defaultMenuNameEntryTranslated("Extras"));
  9480. scrMenuMgr->setText("Windows", ActionManager::defaultMenuNameEntryTranslated("Windows"));
  9481. scrMenuMgr->setText("Help", ActionManager::defaultMenuNameEntryTranslated("Help"));
  9482. scrMenuMgr->setText("Alignment", tr("&Alignment"));
  9483. scrMenuMgr->setText("HelpOnlineTutorials", tr("Online &Tutorials"));
  9484. }
  9485. if (undoManager!=NULL)
  9486. undoManager->languageChange();
  9487.  
  9488. mainWindowXPosLabel->setText( tr("X-Pos:"));
  9489. mainWindowYPosLabel->setText( tr("Y-Pos:"));
  9490. mainWindowXPosDataLabel->setText(" ");
  9491. mainWindowYPosDataLabel->setText(" ");
  9492. mainWindowStatusLabel->setText( tr("Ready"));
  9493. }
  9494. }
  9495.  
  9496. void ScribusMainWindow::setDefaultPrinter(const QString& name, const QString& file, const QString& command)
  9497. {
  9498. PDef.Pname = name;
  9499. PDef.Dname = file;
  9500. PDef.Command = command;
  9501. }
  9502.  
  9503. void ScribusMainWindow::getDefaultPrinter(QString& name, QString& file, QString& command)
  9504. {
  9505. name=PDef.Pname;
  9506. file=PDef.Dname;
  9507. command=PDef.Command;
  9508. }
  9509.  
  9510. void ScribusMainWindow::closeActiveWindowMasterPageEditor()
  9511. {
  9512. if (!HaveDoc)
  9513. return;
  9514. if(doc->masterPageMode())
  9515. {
  9516. ActWin->masterPagesPalette()->close();
  9517. qApp->processEvents();
  9518. }
  9519. }
  9520.  
  9521. void ScribusMainWindow::updateActiveWindowCaption(const QString &newCaption)
  9522. {
  9523. if (!HaveDoc)
  9524. return;
  9525. ActWin->setWindowTitle(QDir::toNativeSeparators(newCaption));
  9526. }
  9527.  
  9528. void ScribusMainWindow::dragEnterEvent ( QDragEnterEvent* e)
  9529. {
  9530. bool accepted = false;
  9531. if ( e->mimeData()->hasFormat("text/uri-list"))
  9532. {
  9533. QString fileUrl;
  9534. QList<QUrl> fileUrls = e->mimeData()->urls();
  9535. for( int i = 0; i < fileUrls.count(); ++i )
  9536. {
  9537. fileUrl = fileUrls[i].toLocalFile().toLower();
  9538. if ( fileUrl.endsWith(".sla") || fileUrl.endsWith(".sla.gz") )
  9539. {
  9540. accepted = true;
  9541. break;
  9542. }
  9543. else
  9544. {
  9545. QUrl url( fileUrls[i] );
  9546. FileLoader *fileLoader = new FileLoader(url.path());
  9547. int testResult = fileLoader->testFile();
  9548. delete fileLoader;
  9549. if ((testResult != -1) && (testResult >= FORMATID_ODGIMPORT))
  9550. {
  9551. accepted = true;
  9552. break;
  9553. }
  9554. }
  9555. }
  9556. }
  9557. if (accepted)
  9558. e->accept();
  9559. }
  9560.  
  9561. void ScribusMainWindow::dropEvent ( QDropEvent * e)
  9562. {
  9563. bool accepted = false;
  9564. if ( e->mimeData()->hasFormat("text/uri-list"))
  9565. {
  9566. QString fileUrl;
  9567. QList<QUrl> fileUrls = e->mimeData()->urls();
  9568. for( int i = 0; i < fileUrls.count(); ++i )
  9569. {
  9570. fileUrl = fileUrls[i].toLocalFile().toLower();
  9571. if ( fileUrl.endsWith(".sla") || fileUrl.endsWith(".sla.gz") )
  9572. {
  9573. QUrl url( fileUrls[i] );
  9574. QFileInfo fi(url.path());
  9575. if ( fi.exists() )
  9576. {
  9577. accepted = true;
  9578. loadDoc( fi.absoluteFilePath() );
  9579. }
  9580. }
  9581. else
  9582. {
  9583. QUrl url( fileUrls[i] );
  9584. FileLoader *fileLoader = new FileLoader(url.path());
  9585. int testResult = fileLoader->testFile();
  9586. delete fileLoader;
  9587. if ((testResult != -1) && (testResult >= FORMATID_ODGIMPORT))
  9588. {
  9589. QFileInfo fi(url.path());
  9590. if ( fi.exists() )
  9591. {
  9592. accepted = true;
  9593. loadDoc( fi.absoluteFilePath() );
  9594. }
  9595. }
  9596. }
  9597. }
  9598. }
  9599. if (accepted)
  9600. e->accept();
  9601. }
  9602.  
  9603. void ScribusMainWindow::slotEditCopyContents()
  9604. {
  9605. PageItem *currItem=NULL;
  9606. contentsBuffer.contentsFileName="";
  9607. if (HaveDoc && (currItem=doc->m_Selection->itemAt(0))!=NULL)
  9608. {
  9609. if (currItem->itemType()==PageItem::ImageFrame)
  9610. {
  9611. PageItem_ImageFrame* imageItem=currItem->asImageFrame();
  9612. if (imageItem->PictureIsAvailable)
  9613. {
  9614. contentsBuffer.sourceType = PageItem::ImageFrame;
  9615. contentsBuffer.contentsFileName = imageItem->Pfile;
  9616. contentsBuffer.LocalScX = imageItem->imageXScale();
  9617. contentsBuffer.LocalScY = imageItem->imageYScale();
  9618. contentsBuffer.LocalX = imageItem->imageXOffset();
  9619. contentsBuffer.LocalY = imageItem->imageYOffset();
  9620. contentsBuffer.ItemX = imageItem->xPos();
  9621. contentsBuffer.ItemY = imageItem->yPos();
  9622. contentsBuffer.effects = imageItem->effectsInUse;
  9623. contentsBuffer.inputProfile = imageItem->IProfile;
  9624. contentsBuffer.useEmbedded = imageItem->UseEmbedded;
  9625. contentsBuffer.renderingIntent = imageItem->IRender;
  9626. }
  9627. }
  9628. }
  9629. }
  9630.  
  9631. void ScribusMainWindow::slotEditPasteContents(int absolute)
  9632. {
  9633. PageItem *currItem=NULL;
  9634. if (HaveDoc && !contentsBuffer.contentsFileName.isEmpty() && (currItem=doc->m_Selection->itemAt(0))!=NULL)
  9635. {
  9636. if (contentsBuffer.sourceType==PageItem::ImageFrame && currItem->itemType()==PageItem::ImageFrame)
  9637. {
  9638. PageItem_ImageFrame* imageItem=currItem->asImageFrame();
  9639. int t=QMessageBox::Yes;
  9640. if (imageItem->PictureIsAvailable)
  9641. t = QMessageBox::warning(this, CommonStrings::trWarning,
  9642. tr("Do you really want to replace your existing image?"),
  9643. QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
  9644. if (t == QMessageBox::Yes)
  9645. {
  9646. imageItem->EmProfile = "";
  9647. imageItem->pixm.imgInfo.isRequest = false;
  9648. imageItem->IProfile = doc->CMSSettings.DefaultImageRGBProfile;
  9649. imageItem->IRender = doc->CMSSettings.DefaultIntentImages;
  9650. imageItem->effectsInUse = contentsBuffer.effects;
  9651. qApp->changeOverrideCursor( QCursor(Qt::WaitCursor) );
  9652. qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
  9653. doc->loadPict(contentsBuffer.contentsFileName, imageItem);
  9654. imageItem->AdjustPictScale();
  9655. imageItem->setImageXYScale(contentsBuffer.LocalScX, contentsBuffer.LocalScY);
  9656. if (absolute==0)
  9657. imageItem->setImageXYOffset(contentsBuffer.LocalX, contentsBuffer.LocalY);
  9658. else
  9659. imageItem->setImageXYOffset(
  9660. ((contentsBuffer.ItemX-imageItem->xPos()) / contentsBuffer.LocalScX)+contentsBuffer.LocalX,
  9661. ((contentsBuffer.ItemY-imageItem->yPos()) / contentsBuffer.LocalScY)+contentsBuffer.LocalY);
  9662. imageItem->IProfile=contentsBuffer.inputProfile;
  9663. imageItem->UseEmbedded=contentsBuffer.useEmbedded;
  9664. imageItem->IRender=contentsBuffer.renderingIntent;
  9665. qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
  9666. view->DrawNew();
  9667. propertiesPalette->updateColorList();
  9668. propertiesPalette->ShowCMS();
  9669. currItem->emitAllToGUI();
  9670. }
  9671. }
  9672. }
  9673. }
  9674.  
  9675. void ScribusMainWindow::slotInsertFrame()
  9676. {
  9677. if (HaveDoc)
  9678. {
  9679. if (doc->m_Selection->count() != 0)
  9680. view->Deselect(false);
  9681. InsertAFrame *dia = new InsertAFrame(this, doc);
  9682. if (dia->exec())
  9683. {
  9684. InsertAFrameData iafData;
  9685. dia->getNewFrameProperties(iafData);
  9686. doc->itemAddUserFrame(iafData);
  9687. }
  9688. delete dia;
  9689. }
  9690. }
  9691.  
  9692. void ScribusMainWindow::PutToPatterns()
  9693. {
  9694. QString patternName = "Pattern_"+doc->m_Selection->itemAt(0)->itemName();
  9695. patternName = patternName.trimmed().simplified().replace(" ", "_");
  9696. Query dia(this, "tt", 1, 0, tr("&Name:"), tr("New Entry"));
  9697. dia.setEditText(patternName, true);
  9698. dia.setTestList(doc->docPatterns.keys());
  9699. dia.setCheckMode(true);
  9700. if (dia.exec())
  9701. patternName = dia.getEditText();
  9702. else
  9703. return;
  9704. bool wasUndo = undoManager->undoEnabled();
  9705. undoManager->setUndoEnabled(false);
  9706. int ac = doc->Items->count();
  9707. uint oldNum = doc->TotalItems;
  9708. bool savedAlignGrid = doc->useRaster;
  9709. bool savedAlignGuides = doc->SnapGuides;
  9710. internalCopy = true;
  9711. doc->useRaster = false;
  9712. doc->SnapGuides = false;
  9713. Selection itemSelection(this, false);
  9714. itemSelection.copy(*doc->m_Selection, false);
  9715. slotEditCopy();
  9716. doc->m_Selection->delaySignalsOn();
  9717. view->Deselect(true);
  9718. slotEditPaste();
  9719. doc->useRaster = savedAlignGrid;
  9720. doc->SnapGuides = savedAlignGuides;
  9721. internalCopy = false;
  9722. int ae = doc->Items->count();
  9723. ScPattern pat = ScPattern();
  9724. pat.setDoc(doc);
  9725. PageItem* currItem = doc->Items->at(ac);
  9726. pat.pattern = currItem->DrawObj_toImage();
  9727. pat.width = currItem->gWidth;
  9728. pat.height = currItem->gHeight;
  9729. for (int as = ac; as < ae; ++as)
  9730. {
  9731. PageItem* paItem = doc->Items->takeAt(ac);
  9732. paItem->setItemName(patternName+QString("_%1").arg(as-ac));
  9733. paItem->OwnPage = -1; // #11274 : OwnPage is not meaningful for pattern items
  9734. pat.items.append(paItem);
  9735. }
  9736. doc->addPattern(patternName, pat);
  9737. propertiesPalette->updateColorList();
  9738. if (outlinePalette->isVisible())
  9739. outlinePalette->BuildTree();
  9740. doc->TotalItems = oldNum;
  9741. view->Deselect(true);
  9742. // doc->m_Selection->delaySignalsOn();
  9743. doc->m_Selection->copy(itemSelection, false);
  9744. doc->m_Selection->delaySignalsOff();
  9745. view->DrawNew();
  9746. undoManager->setUndoEnabled(wasUndo);
  9747. }
  9748.  
  9749. void ScribusMainWindow::managePatterns()
  9750. {
  9751. if (HaveDoc)
  9752. {
  9753. undoManager->setUndoEnabled(false);
  9754. QMap<QString, ScPattern> docPatterns(doc->docPatterns);
  9755. PatternDialog *dia = new PatternDialog(this, &docPatterns, doc, this);
  9756. if (dia->exec())
  9757. {
  9758. doc->setPatterns(dia->dialogPatterns);
  9759. if (!dia->replaceMap.isEmpty())
  9760. {
  9761. ResourceCollection colorrsc;
  9762. colorrsc.mapPatterns(dia->replaceMap);
  9763. doc->replaceNamedResources(colorrsc);
  9764. }
  9765. propertiesPalette->updateColorList();
  9766. view->DrawNew();
  9767. }
  9768. delete dia;
  9769. undoManager->setUndoEnabled(true);
  9770. }
  9771. }
  9772.  
  9773. void ScribusMainWindow::enableTextActions(QMap<QString, QPointer<ScrAction> > *actionMap, bool enabled, const QString& fontName)
  9774. {
  9775. actionManager->enableUnicodeActions(actionMap, enabled, fontName);
  9776. scrMenuMgr->setMenuEnabled("InsertChar", enabled);
  9777. scrMenuMgr->setMenuEnabled("InsertQuote", enabled);
  9778. scrMenuMgr->setMenuEnabled("InsertSpace", enabled);
  9779. scrMenuMgr->setMenuEnabled("InsertLigature", enabled);
  9780. }
  9781.  
  9782. void ScribusMainWindow::updateGUIAfterPagesChanged()
  9783. {
  9784. view->DrawNew();
  9785. pagePalette->rebuildPages();
  9786. if (outlinePalette->isVisible())
  9787. outlinePalette->BuildTree();
  9788. }
Add Comment
Please, Sign In to add comment