Print/Save functions.
--HG-- branch : feature
This commit is contained in:
parent
7a7753e3f1
commit
c954c2654c
|
@ -73,10 +73,10 @@ Q_LOGGING_CATEGORY(vMainWindow, "v.mainwindow")
|
||||||
* @param parent parent widget.
|
* @param parent parent widget.
|
||||||
*/
|
*/
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
:MainWindowsNoGUI(parent), ui(new Ui::MainWindow), doc(nullptr), currentTool(Tool::Arrow),
|
:MainWindowsNoGUI(parent), ui(new Ui::MainWindow), currentTool(Tool::Arrow),
|
||||||
lastUsedTool(Tool::Arrow), sceneDraw(nullptr), sceneDetails(nullptr),
|
lastUsedTool(Tool::Arrow), sceneDraw(nullptr), sceneDetails(nullptr),
|
||||||
mouseCoordinate(nullptr), helpLabel(nullptr), isInitialized(false), dialogTable(nullptr), dialogTool(nullptr),
|
mouseCoordinate(nullptr), helpLabel(nullptr), isInitialized(false), dialogTable(nullptr), dialogTool(nullptr),
|
||||||
dialogHistory(nullptr), comboBoxDraws(nullptr), curFile(QString()), mode(Draw::Calculation), currentDrawIndex(0),
|
dialogHistory(nullptr), comboBoxDraws(nullptr), mode(Draw::Calculation), currentDrawIndex(0),
|
||||||
currentToolBoxIndex(0), drawMode(true), recentFileActs(),
|
currentToolBoxIndex(0), drawMode(true), recentFileActs(),
|
||||||
separatorAct(nullptr), autoSaveTimer(nullptr), guiEnabled(true), gradationHeights(nullptr),
|
separatorAct(nullptr), autoSaveTimer(nullptr), guiEnabled(true), gradationHeights(nullptr),
|
||||||
gradationSizes(nullptr),
|
gradationSizes(nullptr),
|
||||||
|
@ -818,7 +818,7 @@ void MainWindow::ClearLayout()
|
||||||
shadows.clear();
|
shadows.clear();
|
||||||
papers.clear();
|
papers.clear();
|
||||||
ui->listWidget->clear();
|
ui->listWidget->clear();
|
||||||
//EnableActions(false);
|
SetLayoutModeActions(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -833,7 +833,7 @@ void MainWindow::PrepareSceneList()
|
||||||
if (not scenes.isEmpty())
|
if (not scenes.isEmpty())
|
||||||
{
|
{
|
||||||
ui->listWidget->setCurrentRow(0);
|
ui->listWidget->setCurrentRow(0);
|
||||||
//EnableActions(true);
|
SetLayoutModeActions(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1804,6 +1804,7 @@ void MainWindow::Layout()
|
||||||
{
|
{
|
||||||
ui->actionDetails->setEnabled(true);
|
ui->actionDetails->setEnabled(true);
|
||||||
ui->actionLayout->setEnabled(true);
|
ui->actionLayout->setEnabled(true);
|
||||||
|
SetLayoutModeActions(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1811,6 +1812,7 @@ void MainWindow::Layout()
|
||||||
ui->actionDetails->setEnabled(false);
|
ui->actionDetails->setEnabled(false);
|
||||||
ui->actionLayout->setEnabled(false);
|
ui->actionLayout->setEnabled(false);
|
||||||
ui->actionDraw->setChecked(true);
|
ui->actionDraw->setChecked(true);
|
||||||
|
SetLayoutModeActions(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1970,6 +1972,7 @@ void MainWindow::PatternWasModified(bool saved)
|
||||||
{
|
{
|
||||||
setWindowModified(!saved);
|
setWindowModified(!saved);
|
||||||
ui->actionSave->setEnabled(!saved);
|
ui->actionSave->setEnabled(!saved);
|
||||||
|
isLayoutStale = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2123,6 +2126,23 @@ void MainWindow::SetEnableTool(bool enable)
|
||||||
ui->toolButtonLayoutSettings->setEnabled(layoutTools);
|
ui->toolButtonLayoutSettings->setEnabled(layoutTools);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindow::SetLayoutModeActions(bool enable)
|
||||||
|
{
|
||||||
|
bool value = enable;
|
||||||
|
if (scenes.isEmpty())
|
||||||
|
{
|
||||||
|
value = false;
|
||||||
|
}
|
||||||
|
ui->actionExportAs->setEnabled(value);
|
||||||
|
ui->actionPrintPreview->setEnabled(value);
|
||||||
|
ui->actionPrintPreviewTailed->setEnabled(value);
|
||||||
|
ui->actionSaveAsPDF->setEnabled(value);
|
||||||
|
ui->actionSaveAsTiledPDF->setEnabled(value);
|
||||||
|
ui->actionPrint->setEnabled(value);
|
||||||
|
ui->actionPrintTiled->setEnabled(value);
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* @brief MinimumScrollBar set scroll bar to minimum.
|
* @brief MinimumScrollBar set scroll bar to minimum.
|
||||||
|
@ -2524,6 +2544,14 @@ void MainWindow::CreateActions()
|
||||||
connect(ui->actionEdit_pattern_code, &QAction::triggered, this, &MainWindow::EditPatternCode);
|
connect(ui->actionEdit_pattern_code, &QAction::triggered, this, &MainWindow::EditPatternCode);
|
||||||
connect(ui->actionCloseWindow, &QAction::triggered, this, &MainWindow::ResetWindow);
|
connect(ui->actionCloseWindow, &QAction::triggered, this, &MainWindow::ResetWindow);
|
||||||
connect(ui->actionShowCurveDetails, &QAction::triggered, this, &MainWindow::ActionCurveDetailsMode);
|
connect(ui->actionShowCurveDetails, &QAction::triggered, this, &MainWindow::ActionCurveDetailsMode);
|
||||||
|
|
||||||
|
connect(ui->actionExportAs, &QAction::triggered, this, &MainWindow::ExportLayoutAs);
|
||||||
|
connect(ui->actionPrintPreview, &QAction::triggered, this, &MainWindow::PrintPreviewOrigin);
|
||||||
|
connect(ui->actionPrintPreviewTailed, &QAction::triggered, this, &MainWindow::PrintPreviewTiled);
|
||||||
|
connect(ui->actionSaveAsPDF, &QAction::triggered, this, &MainWindow::SaveAsPDF);
|
||||||
|
connect(ui->actionSaveAsTiledPDF, &QAction::triggered, this, &MainWindow::SaveAsTiledPDF);
|
||||||
|
connect(ui->actionPrint, &QAction::triggered, this, &MainWindow::PrintOrigin);
|
||||||
|
connect(ui->actionPrintTiled, &QAction::triggered, this, &MainWindow::PrintTiled);
|
||||||
ui->actionEdit_pattern_code->setEnabled(false);
|
ui->actionEdit_pattern_code->setEnabled(false);
|
||||||
|
|
||||||
//Actions for recent files loaded by a main window application.
|
//Actions for recent files loaded by a main window application.
|
||||||
|
@ -2787,12 +2815,12 @@ void MainWindow::ShowPaper(int index)
|
||||||
if (index < 0 || index >= scenes.size())
|
if (index < 0 || index >= scenes.size())
|
||||||
{
|
{
|
||||||
ui->view->setScene(tempSceneLayout);
|
ui->view->setScene(tempSceneLayout);
|
||||||
//EnableActions(false);
|
SetLayoutModeActions(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ui->view->setScene(scenes.at(index));
|
ui->view->setScene(scenes.at(index));
|
||||||
//EnableActions(true);
|
SetLayoutModeActions(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->view->fitInView(ui->view->scene()->sceneRect(), Qt::KeepAspectRatio);
|
ui->view->fitInView(ui->view->scene()->sceneRect(), Qt::KeepAspectRatio);
|
||||||
|
|
|
@ -35,8 +35,6 @@
|
||||||
#include "tools/vtooldetail.h"
|
#include "tools/vtooldetail.h"
|
||||||
#include "tools/vtooluniondetails.h"
|
#include "tools/vtooluniondetails.h"
|
||||||
#include "tools/drawTools/drawtools.h"
|
#include "tools/drawTools/drawtools.h"
|
||||||
#include "xml/vdomdocument.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
|
@ -156,8 +154,7 @@ private:
|
||||||
/** @brief ui keeps information about user interface */
|
/** @brief ui keeps information about user interface */
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
|
|
||||||
/** @brief doc dom document container */
|
|
||||||
VPattern *doc;
|
|
||||||
|
|
||||||
/** @brief tool current tool */
|
/** @brief tool current tool */
|
||||||
Tool currentTool;
|
Tool currentTool;
|
||||||
|
@ -187,9 +184,6 @@ private:
|
||||||
/** @brief comboBoxDraws comboc who show name of pattern peaces. */
|
/** @brief comboBoxDraws comboc who show name of pattern peaces. */
|
||||||
QComboBox *comboBoxDraws;
|
QComboBox *comboBoxDraws;
|
||||||
|
|
||||||
/** @brief fileName name current pattern file. */
|
|
||||||
QString curFile;
|
|
||||||
|
|
||||||
/** @brief mode keep current draw mode. */
|
/** @brief mode keep current draw mode. */
|
||||||
Draw mode;
|
Draw mode;
|
||||||
|
|
||||||
|
@ -222,6 +216,7 @@ private:
|
||||||
|
|
||||||
void SetEnableWidgets(bool enable);
|
void SetEnableWidgets(bool enable);
|
||||||
void SetEnableTool(bool enable);
|
void SetEnableTool(bool enable);
|
||||||
|
void SetLayoutModeActions(bool enable);
|
||||||
|
|
||||||
void SaveCurrentScene();
|
void SaveCurrentScene();
|
||||||
void RestoreCurrentScene();
|
void RestoreCurrentScene();
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>105</width>
|
||||||
<height>272</height>
|
<height>272</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -337,7 +337,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>105</width>
|
||||||
<height>58</height>
|
<height>58</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -413,7 +413,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>105</width>
|
||||||
<height>156</height>
|
<height>156</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -567,7 +567,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>100</width>
|
<width>105</width>
|
||||||
<height>104</height>
|
<height>104</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -745,8 +745,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>87</width>
|
<width>105</width>
|
||||||
<height>58</height>
|
<height>380</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<attribute name="label">
|
<attribute name="label">
|
||||||
|
@ -815,11 +815,27 @@
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>&File</string>
|
<string>&File</string>
|
||||||
</property>
|
</property>
|
||||||
|
<widget class="QMenu" name="menuLayout">
|
||||||
|
<property name="title">
|
||||||
|
<string>Layout</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionSaveAsPDF"/>
|
||||||
|
<addaction name="actionPrintPreview"/>
|
||||||
|
<addaction name="actionPrint"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionSaveAsTiledPDF"/>
|
||||||
|
<addaction name="actionPrintPreviewTailed"/>
|
||||||
|
<addaction name="actionPrintTiled"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionExportAs"/>
|
||||||
|
</widget>
|
||||||
<addaction name="actionNew"/>
|
<addaction name="actionNew"/>
|
||||||
<addaction name="actionOpen"/>
|
<addaction name="actionOpen"/>
|
||||||
<addaction name="actionSave"/>
|
<addaction name="actionSave"/>
|
||||||
<addaction name="actionSaveAs"/>
|
<addaction name="actionSaveAs"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
|
<addaction name="menuLayout"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
<addaction name="actionPreferences"/>
|
<addaction name="actionPreferences"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionExit"/>
|
<addaction name="actionExit"/>
|
||||||
|
@ -1514,6 +1530,115 @@
|
||||||
<string>F2</string>
|
<string>F2</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionSaveAsPDF">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="share/resources/icon.qrc">
|
||||||
|
<normaloff>:/icon/32x32/pdf.png</normaloff>:/icon/32x32/pdf.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save as PDF</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Save original layout</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionSaveAsTiledPDF">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="share/resources/icon.qrc">
|
||||||
|
<normaloff>:/icon/32x32/pdf.png</normaloff>:/icon/32x32/pdf.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save as tiled PDF</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Split and save a layout into smaller pages</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPrint">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="document-print">
|
||||||
|
<normaloff/>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Print</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Print original a layout</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPrintTiled">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="document-print">
|
||||||
|
<normaloff/>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Print tiled</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Split and print a layout into smaller pages (for regular printers)</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPrintPreview">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="document-print-preview">
|
||||||
|
<normaloff/>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Print preview</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Print preview original layout</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionPrintPreviewTailed">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="document-print-preview">
|
||||||
|
<normaloff/>
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Print preview tailed</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Print preview tailed layout</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionExportAs">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="share/resources/icon.qrc">
|
||||||
|
<normaloff>:/icon/32x32/export_to_picture_document.png</normaloff>:/icon/32x32/export_to_picture_document.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Export As...</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Export original layout</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<layoutdefault spacing="6" margin="11"/>
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
|
|
@ -29,21 +29,36 @@
|
||||||
#include "mainwindowsnogui.h"
|
#include "mainwindowsnogui.h"
|
||||||
#include "../core/vapplication.h"
|
#include "../core/vapplication.h"
|
||||||
#include "../container/vcontainer.h"
|
#include "../container/vcontainer.h"
|
||||||
|
#include "../../libs/vobj/vobjpaintdevice.h"
|
||||||
#include "../dialogs/app/dialoglayoutsettings.h"
|
#include "../dialogs/app/dialoglayoutsettings.h"
|
||||||
#include "../../libs/vlayout/vlayoutgenerator.h"
|
#include "../../libs/vlayout/vlayoutgenerator.h"
|
||||||
#include "../dialogs/app/dialoglayoutprogress.h"
|
#include "../dialogs/app/dialoglayoutprogress.h"
|
||||||
#include "../dialogs/app/dialogsavelayout.h"
|
#include "../dialogs/app/dialogsavelayout.h"
|
||||||
#include "../../libs/vlayout/vposter.h"
|
#include "../../libs/vlayout/vposter.h"
|
||||||
|
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QFileInfo>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QProcess>
|
||||||
#include <QToolButton>
|
#include <QToolButton>
|
||||||
|
#include <QtSvg>
|
||||||
|
#include <QPrinter>
|
||||||
|
#include <QPrintPreviewDialog>
|
||||||
|
#include <QPrintDialog>
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
# define PDFTOPS "pdftops.exe"
|
||||||
|
#else
|
||||||
|
# define PDFTOPS "pdftops"
|
||||||
|
#endif
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
MainWindowsNoGUI::MainWindowsNoGUI(QWidget *parent)
|
MainWindowsNoGUI::MainWindowsNoGUI(QWidget *parent)
|
||||||
: QMainWindow(parent), listDetails(QVector<VLayoutDetail>()), currentScene(nullptr), tempSceneLayout(nullptr),
|
: QMainWindow(parent), listDetails(QVector<VLayoutDetail>()), currentScene(nullptr), tempSceneLayout(nullptr),
|
||||||
pattern(new VContainer()), papers(QList<QGraphicsItem *>()), shadows(QList<QGraphicsItem *>()),
|
pattern(new VContainer()), doc(nullptr), papers(QList<QGraphicsItem *>()), shadows(QList<QGraphicsItem *>()),
|
||||||
scenes(QList<QGraphicsScene *>()), details(QList<QList<QGraphicsItem *> >()), undoAction(nullptr),
|
scenes(QList<QGraphicsScene *>()), details(QList<QList<QGraphicsItem *> >()), undoAction(nullptr),
|
||||||
redoAction(nullptr), actionDockWidgetToolOptions(nullptr)
|
redoAction(nullptr), actionDockWidgetToolOptions(nullptr), curFile(QString()), isLayoutStale(true), isTiled(false)
|
||||||
{
|
{
|
||||||
InitTempLayoutScene();
|
InitTempLayoutScene();
|
||||||
}
|
}
|
||||||
|
@ -92,6 +107,7 @@ void MainWindowsNoGUI::ToolLayoutSettings(bool checked)
|
||||||
CreateShadows();
|
CreateShadows();
|
||||||
CreateScenes();
|
CreateScenes();
|
||||||
PrepareSceneList();
|
PrepareSceneList();
|
||||||
|
isLayoutStale = false;
|
||||||
break;
|
break;
|
||||||
case LayoutErrors::ProcessStoped:
|
case LayoutErrors::ProcessStoped:
|
||||||
break;
|
break;
|
||||||
|
@ -111,6 +127,224 @@ void MainWindowsNoGUI::ToolLayoutSettings(bool checked)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::ExportLayoutAs()
|
||||||
|
{
|
||||||
|
if (isLayoutStale)
|
||||||
|
{
|
||||||
|
if (ContinueIfLayoutStale() == QMessageBox::No)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QMap<QString, QString> extByMessage = InitFormates();
|
||||||
|
DialogSaveLayout dialog(extByMessage, scenes.size(), FileName(), this);
|
||||||
|
|
||||||
|
if (dialog.exec() == QDialog::Rejected)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString suf = dialog.Formate();
|
||||||
|
suf.replace(".", "");
|
||||||
|
|
||||||
|
const QString path = dialog.Path();
|
||||||
|
qApp->getSettings()->SetPathLayout(path);
|
||||||
|
const QString mask = dialog.FileName();
|
||||||
|
|
||||||
|
for (int i=0; i < scenes.size(); ++i)
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
|
||||||
|
if (paper)
|
||||||
|
{
|
||||||
|
const QString name = path + "/" + mask+QString::number(i+1) + dialog.Formate();
|
||||||
|
QBrush *brush = new QBrush();
|
||||||
|
brush->setColor( QColor( Qt::white ) );
|
||||||
|
scenes[i]->setBackgroundBrush( *brush );
|
||||||
|
shadows[i]->setVisible(false);
|
||||||
|
paper->setPen(QPen(Qt::white, 0.1, Qt::NoPen));
|
||||||
|
const QStringList suffix = QStringList() << "svg" << "png" << "pdf" << "eps" << "ps" << "obj";
|
||||||
|
switch (suffix.indexOf(suf))
|
||||||
|
{
|
||||||
|
case 0: //svg
|
||||||
|
paper->setVisible(false);
|
||||||
|
SvgFile(name, i);
|
||||||
|
paper->setVisible(true);
|
||||||
|
break;
|
||||||
|
case 1: //png
|
||||||
|
PngFile(name, i);
|
||||||
|
break;
|
||||||
|
case 2: //pdf
|
||||||
|
PdfFile(name, i);
|
||||||
|
break;
|
||||||
|
case 3: //eps
|
||||||
|
EpsFile(name, i);
|
||||||
|
break;
|
||||||
|
case 4: //ps
|
||||||
|
PsFile(name, i);
|
||||||
|
break;
|
||||||
|
case 5: //obj
|
||||||
|
paper->setVisible(false);
|
||||||
|
ObjFile(name, i);
|
||||||
|
paper->setVisible(true);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
qDebug() << "Can't recognize file suffix." << Q_FUNC_INFO;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
paper->setPen(QPen(Qt::black, qApp->toPixel(qApp->widthMainLine())));
|
||||||
|
brush->setColor( QColor( Qt::gray ) );
|
||||||
|
brush->setStyle( Qt::SolidPattern );
|
||||||
|
scenes[i]->setBackgroundBrush( *brush );
|
||||||
|
shadows[i]->setVisible(true);
|
||||||
|
delete brush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::SaveAsPDF()
|
||||||
|
{
|
||||||
|
if (not isPagesUniform())
|
||||||
|
{
|
||||||
|
qCritical()<<tr("For saving multypage document all sheet should have the same size. Use export "
|
||||||
|
"function instead.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isTiled = false;
|
||||||
|
SaveLayoutAs();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::SaveAsTiledPDF()
|
||||||
|
{
|
||||||
|
isTiled = true;
|
||||||
|
SaveLayoutAs();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::PrintPages(QPrinter *printer)
|
||||||
|
{
|
||||||
|
if (printer == nullptr)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QVector<QImage> images = AllSheets();
|
||||||
|
|
||||||
|
QVector<QImage> poster;
|
||||||
|
if (isTiled)
|
||||||
|
{
|
||||||
|
VPoster posterazor(printer);
|
||||||
|
for (int i=0; i < images.size(); i++)
|
||||||
|
{
|
||||||
|
poster += posterazor.Generate(images.at(i), i+1, images.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
poster = images;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPainter painter;
|
||||||
|
if (not painter.begin(printer))
|
||||||
|
{ // failed to open file
|
||||||
|
qWarning("failed to open file, is it writable?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle the fromPage(), toPage(), supportsMultipleCopies(), and numCopies() values from QPrinter.
|
||||||
|
int firstPage = printer->fromPage() - 1;
|
||||||
|
if (firstPage >= poster.size())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (firstPage == -1)
|
||||||
|
{
|
||||||
|
firstPage = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lastPage = printer->toPage() - 1;
|
||||||
|
if (lastPage == -1 || lastPage >= poster.size())
|
||||||
|
{
|
||||||
|
lastPage = poster.size() - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int numPages = lastPage - firstPage + 1;
|
||||||
|
int copyCount = 1;
|
||||||
|
if (not printer->supportsMultipleCopies())
|
||||||
|
{
|
||||||
|
copyCount = printer->copyCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < copyCount; ++i)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < numPages; ++j)
|
||||||
|
{
|
||||||
|
if (i != 0 || j != 0)
|
||||||
|
{
|
||||||
|
if (not printer->newPage())
|
||||||
|
{
|
||||||
|
qWarning("failed in flushing page to disk, disk full?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int index;
|
||||||
|
if (printer->pageOrder() == QPrinter::FirstPageFirst)
|
||||||
|
{
|
||||||
|
index = firstPage + j;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index = lastPage - j;
|
||||||
|
}
|
||||||
|
painter.drawImage(QPointF(), poster.at(index));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::PrintPreviewOrigin()
|
||||||
|
{
|
||||||
|
if (not isPagesUniform())
|
||||||
|
{
|
||||||
|
qCritical()<<tr("For previewing multypage document all sheet should have the same size.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isTiled = false;
|
||||||
|
PrintPreview();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::PrintPreviewTiled()
|
||||||
|
{
|
||||||
|
isTiled = true;
|
||||||
|
PrintPreview();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::PrintOrigin()
|
||||||
|
{
|
||||||
|
if (not isPagesUniform())
|
||||||
|
{
|
||||||
|
qCritical()<<tr("For printing multypages document all sheet should have the same size.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isTiled = false;
|
||||||
|
LayoutPrint();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::PrintTiled()
|
||||||
|
{
|
||||||
|
isTiled = false;
|
||||||
|
LayoutPrint();
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void MainWindowsNoGUI::PrepareDetailsForLayout(const QHash<quint32, VDetail> *details)
|
void MainWindowsNoGUI::PrepareDetailsForLayout(const QHash<quint32, VDetail> *details)
|
||||||
{
|
{
|
||||||
|
@ -220,3 +454,420 @@ void MainWindowsNoGUI::CreateScenes()
|
||||||
scenes.append(scene);
|
scenes.append(scene);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QMap<QString, QString> MainWindowsNoGUI::InitFormates() const
|
||||||
|
{
|
||||||
|
QMap<QString, QString> extByMessage;
|
||||||
|
extByMessage[ tr("Svg files (*.svg)") ] = ".svg";
|
||||||
|
extByMessage[ tr("PDF files (*.pdf)") ] = ".pdf";
|
||||||
|
extByMessage[ tr("Images (*.png)") ] = ".png";
|
||||||
|
extByMessage[ tr("Wavefront OBJ (*.obj)") ] = ".obj";
|
||||||
|
|
||||||
|
QProcess proc;
|
||||||
|
#if defined(Q_OS_WIN) || defined(Q_OS_OSX)
|
||||||
|
proc.start(qApp->applicationDirPath()+"/"+PDFTOPS); // Seek pdftops in app bundle or near valentin.exe
|
||||||
|
#else
|
||||||
|
proc.start(PDFTOPS); // Seek pdftops in standard path
|
||||||
|
#endif
|
||||||
|
if (proc.waitForFinished(15000))
|
||||||
|
{
|
||||||
|
extByMessage[ tr("PS files (*.ps)") ] = ".ps";
|
||||||
|
extByMessage[ tr("EPS files (*.eps)") ] = ".eps";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug()<<PDFTOPS<<"error"<<proc.error()<<proc.errorString();
|
||||||
|
}
|
||||||
|
return extByMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief SvgFile save layout to svg file.
|
||||||
|
* @param name name layout file.
|
||||||
|
*/
|
||||||
|
void MainWindowsNoGUI::SvgFile(const QString &name, int i) const
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
|
||||||
|
if (paper)
|
||||||
|
{
|
||||||
|
QSvgGenerator generator;
|
||||||
|
generator.setFileName(name);
|
||||||
|
generator.setSize(paper->rect().size().toSize());
|
||||||
|
generator.setViewBox(paper->rect());
|
||||||
|
generator.setTitle("Valentina. Pattern layout");
|
||||||
|
generator.setDescription(doc->GetDescription());
|
||||||
|
generator.setResolution(static_cast<int>(qApp->PrintDPI));
|
||||||
|
QPainter painter;
|
||||||
|
painter.begin(&generator);
|
||||||
|
painter.setFont( QFont( "Arial", 8, QFont::Normal ) );
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
painter.setPen(QPen(Qt::black, qApp->toPixel(qApp->widthHairLine()), Qt::SolidLine, Qt::RoundCap,
|
||||||
|
Qt::RoundJoin));
|
||||||
|
painter.setBrush ( QBrush ( Qt::NoBrush ) );
|
||||||
|
scenes.at(i)->render(&painter);
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PngFile save layout to png file.
|
||||||
|
* @param name name layout file.
|
||||||
|
*/
|
||||||
|
void MainWindowsNoGUI::PngFile(const QString &name, int i) const
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
|
||||||
|
if (paper)
|
||||||
|
{
|
||||||
|
const QRectF r = paper->rect();
|
||||||
|
// Create the image with the exact size of the shrunk scene
|
||||||
|
QImage image(QSize(static_cast<qint32>(r.width()), static_cast<qint32>(r.height())), QImage::Format_ARGB32);
|
||||||
|
image.fill(Qt::transparent); // Start all pixels transparent
|
||||||
|
QPainter painter(&image);
|
||||||
|
painter.setFont( QFont( "Arial", 8, QFont::Normal ) );
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
painter.setPen(QPen(Qt::black, qApp->toPixel(qApp->widthMainLine()), Qt::SolidLine, Qt::RoundCap,
|
||||||
|
Qt::RoundJoin));
|
||||||
|
painter.setBrush ( QBrush ( Qt::NoBrush ) );
|
||||||
|
scenes.at(i)->render(&painter, r, r);
|
||||||
|
image.save(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PdfFile save layout to pdf file.
|
||||||
|
* @param name name layout file.
|
||||||
|
*/
|
||||||
|
void MainWindowsNoGUI::PdfFile(const QString &name, int i) const
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
|
||||||
|
if (paper)
|
||||||
|
{
|
||||||
|
QPrinter printer;
|
||||||
|
printer.setCreator(qApp->applicationDisplayName()+" "+qApp->applicationVersion());
|
||||||
|
printer.setOutputFormat(QPrinter::PdfFormat);
|
||||||
|
printer.setOutputFileName(name);
|
||||||
|
printer.setDocName(FileName());
|
||||||
|
const QRectF r = paper->rect();
|
||||||
|
printer.setResolution(static_cast<int>(qApp->PrintDPI));
|
||||||
|
// Set orientation
|
||||||
|
if (paper->rect().height()>= paper->rect().width())
|
||||||
|
{
|
||||||
|
printer.setOrientation(QPrinter::Portrait);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printer.setOrientation(QPrinter::Landscape);
|
||||||
|
}
|
||||||
|
printer.setPaperSize ( QSizeF(qApp->fromPixel(r.width(), Unit::Mm), qApp->fromPixel(r.height(), Unit::Mm)),
|
||||||
|
QPrinter::Millimeter );
|
||||||
|
QPainter painter;
|
||||||
|
if (painter.begin( &printer ) == false)
|
||||||
|
{ // failed to open file
|
||||||
|
qCritical("Can't open printer %s", qPrintable(name));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
painter.setFont( QFont( "Arial", 8, QFont::Normal ) );
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
painter.setPen(QPen(Qt::black, qApp->toPixel(qApp->widthMainLine()), Qt::SolidLine, Qt::RoundCap,
|
||||||
|
Qt::RoundJoin));
|
||||||
|
painter.setBrush ( QBrush ( Qt::NoBrush ) );
|
||||||
|
scenes.at(i)->render(&painter);
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief EpsFile save layout to eps file.
|
||||||
|
* @param name name layout file.
|
||||||
|
*/
|
||||||
|
void MainWindowsNoGUI::EpsFile(const QString &name, int i) const
|
||||||
|
{
|
||||||
|
QTemporaryFile tmp;
|
||||||
|
if (tmp.open())
|
||||||
|
{
|
||||||
|
PdfFile(tmp.fileName(), i);
|
||||||
|
QStringList params = QStringList() << "-eps" << tmp.fileName() << name;
|
||||||
|
PdfToPs(params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PsFile save layout to ps file.
|
||||||
|
* @param name name layout file.
|
||||||
|
*/
|
||||||
|
void MainWindowsNoGUI::PsFile(const QString &name, int i) const
|
||||||
|
{
|
||||||
|
QTemporaryFile tmp;
|
||||||
|
if (tmp.open())
|
||||||
|
{
|
||||||
|
PdfFile(tmp.fileName(), i);
|
||||||
|
QStringList params = QStringList() << tmp.fileName() << name;
|
||||||
|
PdfToPs(params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PdfToPs use external tool "pdftops" for converting pdf too eps or ps format.
|
||||||
|
* @param params string with parameter for tool. Parameters have format: "-eps input_file out_file". Use -eps when
|
||||||
|
* need create eps file.
|
||||||
|
*/
|
||||||
|
void MainWindowsNoGUI::PdfToPs(const QStringList ¶ms) const
|
||||||
|
{
|
||||||
|
#ifndef QT_NO_CURSOR
|
||||||
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
|
#endif
|
||||||
|
QProcess proc;
|
||||||
|
proc.start(PDFTOPS, params);
|
||||||
|
proc.waitForFinished(15000);
|
||||||
|
#ifndef QT_NO_CURSOR
|
||||||
|
QApplication::restoreOverrideCursor();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QFile f(params.last());
|
||||||
|
if (f.exists() == false)
|
||||||
|
{
|
||||||
|
QString msg = QString(tr("Creating file '%1' failed! %2")).arg(params.last()).arg(proc.errorString());
|
||||||
|
QMessageBox msgBox(QMessageBox::Critical, tr("Critical error!"), msg, QMessageBox::Ok | QMessageBox::Default);
|
||||||
|
msgBox.exec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::ObjFile(const QString &name, int i) const
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
|
||||||
|
if (paper)
|
||||||
|
{
|
||||||
|
VObjPaintDevice generator;
|
||||||
|
generator.setFileName(name);
|
||||||
|
generator.setSize(paper->rect().size().toSize());
|
||||||
|
generator.setResolution(static_cast<int>(qApp->PrintDPI));
|
||||||
|
QPainter painter;
|
||||||
|
painter.begin(&generator);
|
||||||
|
scenes.at(i)->render(&painter);
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QVector<QImage> MainWindowsNoGUI::AllSheets()
|
||||||
|
{
|
||||||
|
QVector<QImage> images;
|
||||||
|
for (int i=0; i < scenes.size(); ++i)
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
|
||||||
|
if (paper)
|
||||||
|
{
|
||||||
|
// Hide shadow and paper border
|
||||||
|
QBrush *brush = new QBrush();
|
||||||
|
brush->setColor( QColor( Qt::white ) );
|
||||||
|
scenes[i]->setBackgroundBrush( *brush );
|
||||||
|
shadows[i]->setVisible(false);
|
||||||
|
paper->setPen(QPen(Qt::white, 0.1, Qt::NoPen));// border
|
||||||
|
|
||||||
|
// Render png
|
||||||
|
const QRectF r = paper->rect();
|
||||||
|
// Create the image with the exact size of the shrunk scene
|
||||||
|
QImage image(QSize(static_cast<qint32>(r.width()), static_cast<qint32>(r.height())), QImage::Format_RGB32);
|
||||||
|
image.fill(Qt::white);
|
||||||
|
QPainter painter(&image);
|
||||||
|
painter.setFont( QFont( "Arial", 8, QFont::Normal ) );
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
painter.setPen(QPen(Qt::black, qApp->toPixel(qApp->widthMainLine()), Qt::SolidLine, Qt::RoundCap,
|
||||||
|
Qt::RoundJoin));
|
||||||
|
painter.setBrush ( QBrush ( Qt::NoBrush ) );
|
||||||
|
scenes.at(i)->render(&painter);
|
||||||
|
painter.end();
|
||||||
|
images.append(image);
|
||||||
|
|
||||||
|
// Resore
|
||||||
|
paper->setPen(QPen(Qt::black, qApp->toPixel(qApp->widthMainLine())));
|
||||||
|
brush->setColor( QColor( Qt::gray ) );
|
||||||
|
brush->setStyle( Qt::SolidPattern );
|
||||||
|
scenes[i]->setBackgroundBrush( *brush );
|
||||||
|
shadows[i]->setVisible(true);
|
||||||
|
delete brush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return images;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::SaveLayoutAs()
|
||||||
|
{
|
||||||
|
if (isLayoutStale)
|
||||||
|
{
|
||||||
|
if (ContinueIfLayoutStale() == QMessageBox::No)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QPrinter printer;
|
||||||
|
SetPrinterSettings(&printer);
|
||||||
|
printer.setOutputFormat(QPrinter::PdfFormat);
|
||||||
|
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(this, tr("Print to pdf"),
|
||||||
|
qApp->getSettings()->GetPathLayout()+"/"+FileName()+".pdf",
|
||||||
|
tr("PDF file (*.pdf)"));
|
||||||
|
if (not fileName.isEmpty())
|
||||||
|
{
|
||||||
|
QFileInfo f( fileName );
|
||||||
|
if(f.suffix().isEmpty())
|
||||||
|
{
|
||||||
|
fileName.append(".pdf");
|
||||||
|
}
|
||||||
|
qApp->getSettings()->SetPathLayout(f.absolutePath());
|
||||||
|
|
||||||
|
printer.setOutputFileName(fileName);
|
||||||
|
printer.setResolution(static_cast<int>(VApplication::PrintDPI));
|
||||||
|
PrintPages( &printer );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::PrintPreview()
|
||||||
|
{
|
||||||
|
if (isLayoutStale)
|
||||||
|
{
|
||||||
|
if (ContinueIfLayoutStale() == QMessageBox::No)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QPrinterInfo def = QPrinterInfo::defaultPrinter();
|
||||||
|
|
||||||
|
//if there is no default printer set the print preview won't show
|
||||||
|
if(def.isNull() || def.printerName().isEmpty())
|
||||||
|
{
|
||||||
|
if(QPrinterInfo::availablePrinters().isEmpty())
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this, tr("Print error"),
|
||||||
|
tr("Cannot proceed because there are no available printers in your system."),
|
||||||
|
QMessageBox::Ok);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
def = QPrinterInfo::availablePrinters().first();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QPrinter printer(def, QPrinter::ScreenResolution);
|
||||||
|
printer.setResolution(static_cast<int>(VApplication::PrintDPI));
|
||||||
|
SetPrinterSettings(&printer);
|
||||||
|
// display print preview dialog
|
||||||
|
QPrintPreviewDialog preview(&printer);
|
||||||
|
connect(&preview, &QPrintPreviewDialog::paintRequested, this, &MainWindowsNoGUI::PrintPages);
|
||||||
|
preview.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::LayoutPrint()
|
||||||
|
{
|
||||||
|
if (isLayoutStale)
|
||||||
|
{
|
||||||
|
if (ContinueIfLayoutStale() == QMessageBox::No)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// display print dialog and if accepted print
|
||||||
|
QPrinter printer(QPrinter::HighResolution);
|
||||||
|
SetPrinterSettings(&printer);
|
||||||
|
QPrintDialog dialog( &printer, this );
|
||||||
|
// If only user couldn't change page margins we could use method setMinMax();
|
||||||
|
dialog.setOption(QPrintDialog::PrintCurrentPage, false);
|
||||||
|
if ( dialog.exec() == QDialog::Accepted )
|
||||||
|
{
|
||||||
|
printer.setResolution(static_cast<int>(VApplication::PrintDPI));
|
||||||
|
PrintPages( &printer );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void MainWindowsNoGUI::SetPrinterSettings(QPrinter *printer)
|
||||||
|
{
|
||||||
|
SCASSERT(printer != nullptr)
|
||||||
|
printer->setCreator(qApp->applicationDisplayName()+" "+qApp->applicationVersion());
|
||||||
|
|
||||||
|
// Set orientation
|
||||||
|
if (papers.size() > 0)
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(0));
|
||||||
|
SCASSERT(paper != nullptr)
|
||||||
|
if (paper->rect().height()>= paper->rect().width())
|
||||||
|
{
|
||||||
|
printer->setOrientation(QPrinter::Portrait);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printer->setOrientation(QPrinter::Landscape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not isTiled && papers.size() > 0)
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(0));
|
||||||
|
SCASSERT(paper != nullptr)
|
||||||
|
printer->setPaperSize ( QSizeF(qApp->fromPixel(paper->rect().width(), Unit::Mm),
|
||||||
|
qApp->fromPixel(paper->rect().height(), Unit::Mm)), QPrinter::Millimeter );
|
||||||
|
}
|
||||||
|
|
||||||
|
printer->setDocName(FileName());
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool MainWindowsNoGUI::isPagesUniform() const
|
||||||
|
{
|
||||||
|
if (papers.size() < 2)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *paper = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(0));
|
||||||
|
SCASSERT(paper != nullptr)
|
||||||
|
for (int i=1; i < papers.size(); ++i)
|
||||||
|
{
|
||||||
|
QGraphicsRectItem *p = qgraphicsitem_cast<QGraphicsRectItem *>(papers.at(i));
|
||||||
|
SCASSERT(p != nullptr)
|
||||||
|
if (paper->rect() != p->rect())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QString MainWindowsNoGUI::FileName() const
|
||||||
|
{
|
||||||
|
QString fileName;
|
||||||
|
curFile.isEmpty() ? fileName = tr("unnamed") : fileName = curFile;
|
||||||
|
return QFileInfo(fileName).baseName();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
int MainWindowsNoGUI::ContinueIfLayoutStale()
|
||||||
|
{
|
||||||
|
QMessageBox msgBox(this);
|
||||||
|
msgBox.setIcon(QMessageBox::Question);
|
||||||
|
msgBox.setWindowTitle(tr("The layout is stale."));
|
||||||
|
msgBox.setText(tr("The layout was not updated since last pattern modification. Do you want to continue?"));
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Yes|QMessageBox::No);
|
||||||
|
msgBox.setDefaultButton(QMessageBox::No);
|
||||||
|
QSpacerItem* horizontalSpacer = new QSpacerItem(500, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||||
|
QGridLayout* layout = static_cast<QGridLayout*>(msgBox.layout());
|
||||||
|
SCASSERT(layout != nullptr);
|
||||||
|
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
|
||||||
|
msgBox.exec();
|
||||||
|
return msgBox.result();
|
||||||
|
}
|
||||||
|
|
|
@ -33,8 +33,10 @@
|
||||||
|
|
||||||
#include "../geometry/vdetail.h"
|
#include "../geometry/vdetail.h"
|
||||||
#include "../libs/vlayout/vlayoutdetail.h"
|
#include "../libs/vlayout/vlayoutdetail.h"
|
||||||
|
#include "xml/vpattern.h"
|
||||||
|
|
||||||
class QGraphicsScene;
|
class QGraphicsScene;
|
||||||
|
class QPrinter;
|
||||||
|
|
||||||
class MainWindowsNoGUI : public QMainWindow
|
class MainWindowsNoGUI : public QMainWindow
|
||||||
{
|
{
|
||||||
|
@ -45,6 +47,14 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void ToolLayoutSettings(bool checked);
|
void ToolLayoutSettings(bool checked);
|
||||||
|
void ExportLayoutAs();
|
||||||
|
void SaveAsPDF();
|
||||||
|
void SaveAsTiledPDF();
|
||||||
|
void PrintPages (QPrinter *printer);
|
||||||
|
void PrintPreviewOrigin();
|
||||||
|
void PrintPreviewTiled();
|
||||||
|
void PrintOrigin();
|
||||||
|
void PrintTiled();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVector<VLayoutDetail> listDetails;
|
QVector<VLayoutDetail> listDetails;
|
||||||
|
@ -57,6 +67,9 @@ protected:
|
||||||
/** @brief pattern container with data (points, arcs, splines, spline paths, variables) */
|
/** @brief pattern container with data (points, arcs, splines, spline paths, variables) */
|
||||||
VContainer *pattern;
|
VContainer *pattern;
|
||||||
|
|
||||||
|
/** @brief doc dom document container */
|
||||||
|
VPattern *doc;
|
||||||
|
|
||||||
QList<QGraphicsItem *> papers;
|
QList<QGraphicsItem *> papers;
|
||||||
QList<QGraphicsItem *> shadows;
|
QList<QGraphicsItem *> shadows;
|
||||||
QList<QGraphicsScene *> scenes;
|
QList<QGraphicsScene *> scenes;
|
||||||
|
@ -66,6 +79,11 @@ protected:
|
||||||
QAction *redoAction;
|
QAction *redoAction;
|
||||||
QAction *actionDockWidgetToolOptions;
|
QAction *actionDockWidgetToolOptions;
|
||||||
|
|
||||||
|
/** @brief fileName name current pattern file. */
|
||||||
|
QString curFile;
|
||||||
|
|
||||||
|
bool isLayoutStale;
|
||||||
|
|
||||||
void PrepareDetailsForLayout(const QHash<quint32, VDetail> *details);
|
void PrepareDetailsForLayout(const QHash<quint32, VDetail> *details);
|
||||||
|
|
||||||
void InitTempLayoutScene();
|
void InitTempLayoutScene();
|
||||||
|
@ -76,9 +94,33 @@ protected:
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY(MainWindowsNoGUI)
|
Q_DISABLE_COPY(MainWindowsNoGUI)
|
||||||
|
|
||||||
|
bool isTiled;
|
||||||
|
|
||||||
void CreateShadows();
|
void CreateShadows();
|
||||||
void CreateScenes();
|
void CreateScenes();
|
||||||
|
|
||||||
|
QMap<QString, QString> InitFormates() const;
|
||||||
|
|
||||||
|
void SvgFile(const QString &name, int i)const;
|
||||||
|
void PngFile(const QString &name, int i)const;
|
||||||
|
void PdfFile(const QString &name, int i)const;
|
||||||
|
void EpsFile(const QString &name, int i)const;
|
||||||
|
void PsFile(const QString &name, int i)const;
|
||||||
|
void PdfToPs(const QStringList ¶ms)const;
|
||||||
|
void ObjFile(const QString &name, int i)const;
|
||||||
|
|
||||||
|
QVector<QImage> AllSheets();
|
||||||
|
|
||||||
|
void SaveLayoutAs();
|
||||||
|
void PrintPreview();
|
||||||
|
void LayoutPrint();
|
||||||
|
|
||||||
|
void SetPrinterSettings(QPrinter *printer);
|
||||||
|
|
||||||
|
bool isPagesUniform() const;
|
||||||
|
QString FileName() const;
|
||||||
|
|
||||||
|
int ContinueIfLayoutStale();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOWSNOGUI_H
|
#endif // MAINWINDOWSNOGUI_H
|
||||||
|
|
|
@ -60,5 +60,6 @@
|
||||||
<file>icon/16x16/fx.png</file>
|
<file>icon/16x16/fx.png</file>
|
||||||
<file>icon/16x16/roll.png</file>
|
<file>icon/16x16/roll.png</file>
|
||||||
<file>icon/16x16/progress.gif</file>
|
<file>icon/16x16/progress.gif</file>
|
||||||
|
<file>icon/32x32/export_to_picture_document.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
Loading…
Reference in New Issue
Block a user