mirror of
https://github.com/tumic0/GPXSee.git
synced 2025-06-27 03:29:16 +02:00
Added basic PDF export settings
This commit is contained in:
115
src/exportdialog.cpp
Normal file
115
src/exportdialog.cpp
Normal file
@ -0,0 +1,115 @@
|
||||
#include <QPrinter>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QFormLayout>
|
||||
#include <QGroupBox>
|
||||
#include <QComboBox>
|
||||
#include <QPushButton>
|
||||
#include <QFileInfo>
|
||||
#include <QDir>
|
||||
#include <QMessageBox>
|
||||
#include <QLocale>
|
||||
#include "fileselectwidget.h"
|
||||
#include "exportdialog.h"
|
||||
|
||||
|
||||
ExportDialog::ExportDialog(QPrinter *printer, QWidget *parent)
|
||||
: QDialog(parent), _printer(printer)
|
||||
{
|
||||
int index;
|
||||
|
||||
setWindowTitle(tr("Export to PDF"));
|
||||
|
||||
_fileSelect = new FileSelectWidget();
|
||||
_fileSelect->setFilter(tr("PDF files (*.pdf);;All files (*)"));
|
||||
_fileSelect->setFile(QString("%1/export.pdf").arg(QDir::currentPath()));
|
||||
|
||||
_paperSize = new QComboBox();
|
||||
_paperSize->addItem("A0", QPrinter::A0);
|
||||
_paperSize->addItem("A1", QPrinter::A1);
|
||||
_paperSize->addItem("A2", QPrinter::A2);
|
||||
_paperSize->addItem("A3", QPrinter::A3);
|
||||
_paperSize->addItem("A4", QPrinter::A4);
|
||||
_paperSize->addItem("A5", QPrinter::A5);
|
||||
_paperSize->addItem("A6", QPrinter::A6);
|
||||
_paperSize->addItem("Tabloid", QPrinter::Tabloid);
|
||||
_paperSize->addItem("Legal", QPrinter::Legal);
|
||||
_paperSize->addItem("Letter", QPrinter::Letter);
|
||||
index = (QLocale::system().measurementSystem() == QLocale::ImperialSystem)
|
||||
? 9 /* Letter */ : 4 /* A4 */;
|
||||
_paperSize->setCurrentIndex(index);
|
||||
|
||||
_orientation = new QComboBox();
|
||||
_orientation->addItem(tr("Portrait"), QPrinter::Portrait);
|
||||
_orientation->addItem(tr("Landscape"), QPrinter::Landscape);
|
||||
index = _printer->orientation() == QPrinter::Portrait ? 0 : 1;
|
||||
_orientation->setCurrentIndex(index);
|
||||
|
||||
QGroupBox *contentBox = new QGroupBox(tr("Export settings"));
|
||||
QFormLayout *contentLayout = new QFormLayout;
|
||||
contentLayout->addRow(tr("Page size:"), _paperSize);
|
||||
contentLayout->addRow(tr("Orientation"), _orientation);
|
||||
contentLayout->addRow(tr("Output file:"), _fileSelect);
|
||||
contentBox->setLayout(contentLayout);
|
||||
|
||||
QPushButton *exportButton = new QPushButton(tr("Export"));
|
||||
exportButton->setAutoDefault(true);
|
||||
exportButton->setDefault(true);
|
||||
connect(exportButton, SIGNAL(clicked()), this, SLOT(accept()));
|
||||
QPushButton *cancelButton = new QPushButton(tr("Cancel"));
|
||||
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
|
||||
|
||||
QHBoxLayout *buttonsLayout = new QHBoxLayout;
|
||||
buttonsLayout->addStretch();
|
||||
buttonsLayout->addWidget(exportButton);
|
||||
buttonsLayout->addWidget(cancelButton);
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout;
|
||||
layout->addWidget(contentBox);
|
||||
layout->addLayout(buttonsLayout);
|
||||
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
bool ExportDialog::checkFile()
|
||||
{
|
||||
if (_fileSelect->file().isNull()) {
|
||||
QMessageBox::warning(this, tr("Error"), tr("No output file selected."));
|
||||
return false;
|
||||
}
|
||||
|
||||
QFileInfo fi(_fileSelect->file());
|
||||
|
||||
if (fi.isDir()) {
|
||||
QMessageBox::warning(this, tr("Error"),
|
||||
tr("The output file is a directory."));
|
||||
return false;
|
||||
}
|
||||
|
||||
QFileInfo di(fi.path());
|
||||
if (!di.isWritable()) {
|
||||
QMessageBox::warning(this, tr("Error"),
|
||||
tr("The output file is not writable."));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ExportDialog::accept()
|
||||
{
|
||||
if (!checkFile())
|
||||
return;
|
||||
|
||||
QPrinter::Orientation orientation = static_cast<QPrinter::Orientation>
|
||||
(_orientation->itemData(_orientation->currentIndex()).toInt());
|
||||
QPrinter::PaperSize paperSize = static_cast<QPrinter::PaperSize>
|
||||
(_paperSize->itemData(_paperSize->currentIndex()).toInt());
|
||||
|
||||
_printer->setOutputFormat(QPrinter::PdfFormat);
|
||||
_printer->setOutputFileName(_fileSelect->file());
|
||||
_printer->setPaperSize(paperSize);
|
||||
_printer->setOrientation(orientation);
|
||||
|
||||
QDialog::accept();
|
||||
}
|
30
src/exportdialog.h
Normal file
30
src/exportdialog.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef EXPORTDIALOG_H
|
||||
#define EXPORTDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
class QPrinter;
|
||||
class QComboBox;
|
||||
class FileSelectWidget;
|
||||
|
||||
class ExportDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ExportDialog(QPrinter *printer, QWidget *parent = 0);
|
||||
|
||||
public slots:
|
||||
void accept();
|
||||
|
||||
private:
|
||||
bool checkFile();
|
||||
|
||||
QPrinter *_printer;
|
||||
|
||||
FileSelectWidget *_fileSelect;
|
||||
QComboBox *_paperSize;
|
||||
QComboBox *_orientation;
|
||||
};
|
||||
|
||||
#endif // EXPORTDIALOG_H
|
27
src/fileselectwidget.cpp
Normal file
27
src/fileselectwidget.cpp
Normal file
@ -0,0 +1,27 @@
|
||||
#include <QPushButton>
|
||||
#include <QFileDialog>
|
||||
#include <QHBoxLayout>
|
||||
#include "fileselectwidget.h"
|
||||
|
||||
|
||||
FileSelectWidget::FileSelectWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
_edit = new QLineEdit();
|
||||
_button = new QPushButton(tr("Browse..."));
|
||||
connect(_button, SIGNAL(clicked()), this, SLOT(browse()));
|
||||
|
||||
QHBoxLayout *layout = new QHBoxLayout();
|
||||
layout->setMargin(0);
|
||||
layout->addWidget(_edit);
|
||||
layout->addWidget(_button);
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
void FileSelectWidget::browse()
|
||||
{
|
||||
QString fileName = QFileDialog::getSaveFileName(this, tr("Select file"),
|
||||
QDir::currentPath(), _filter);
|
||||
|
||||
if (!fileName.isEmpty())
|
||||
_edit->setText(fileName);
|
||||
}
|
30
src/fileselectwidget.h
Normal file
30
src/fileselectwidget.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef FILESELECTWIDGET_H
|
||||
#define FILESELECTWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QLineEdit>
|
||||
|
||||
class QPushButton;
|
||||
|
||||
class FileSelectWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FileSelectWidget(QWidget *parent = 0);
|
||||
|
||||
QString file() {return _edit->text().isEmpty() ? QString() : _edit->text();}
|
||||
void setFile(const QString &file) {_edit->setText(file);}
|
||||
void setFilter(const QString &filter) {_filter = filter;}
|
||||
|
||||
private slots:
|
||||
void browse();
|
||||
|
||||
private:
|
||||
QLineEdit *_edit;
|
||||
QPushButton *_button;
|
||||
|
||||
QString _filter;
|
||||
};
|
||||
|
||||
#endif // FILESELECTWIDGET_H
|
79
src/gui.cpp
79
src/gui.cpp
@ -33,6 +33,7 @@
|
||||
#include "trackinfo.h"
|
||||
#include "filebrowser.h"
|
||||
#include "cpuarch.h"
|
||||
#include "exportdialog.h"
|
||||
#include "gui.h"
|
||||
|
||||
|
||||
@ -204,15 +205,11 @@ void GUI::createActions()
|
||||
connect(_printFileAction, SIGNAL(triggered()), this, SLOT(printFile()));
|
||||
addAction(_printFileAction);
|
||||
_exportFileAction = new QAction(QIcon(QPixmap(EXPORT_FILE_ICON)),
|
||||
tr("Export"), this);
|
||||
tr("Export to PDF"), this);
|
||||
_exportFileAction->setShortcut(EXPORT_SHORTCUT);
|
||||
_exportFileAction->setActionGroup(_fileActionGroup);
|
||||
connect(_exportFileAction, SIGNAL(triggered()), this, SLOT(exportFile()));
|
||||
addAction(_exportFileAction);
|
||||
_exportAsAction = new QAction(QIcon(QPixmap(EXPORT_FILE_ICON)),
|
||||
tr("Export as"), this);
|
||||
_exportAsAction->setActionGroup(_fileActionGroup);
|
||||
connect(_exportAsAction, SIGNAL(triggered()), this, SLOT(exportAs()));
|
||||
_closeFileAction = new QAction(QIcon(QPixmap(CLOSE_FILE_ICON)),
|
||||
tr("Close"), this);
|
||||
_closeFileAction->setShortcut(CLOSE_SHORTCUT);
|
||||
@ -322,7 +319,6 @@ void GUI::createMenus()
|
||||
_fileMenu->addSeparator();
|
||||
_fileMenu->addAction(_printFileAction);
|
||||
_fileMenu->addAction(_exportFileAction);
|
||||
_fileMenu->addAction(_exportAsAction);
|
||||
_fileMenu->addSeparator();
|
||||
_fileMenu->addAction(_reloadFileAction);
|
||||
_fileMenu->addSeparator();
|
||||
@ -642,46 +638,28 @@ void GUI::closePOIFiles()
|
||||
void GUI::printFile()
|
||||
{
|
||||
QPrinter printer(QPrinter::HighResolution);
|
||||
QPrintDialog printDialog(&printer, this);
|
||||
QPrintDialog dialog(&printer, this);
|
||||
|
||||
if (printDialog.exec() == QDialog::Accepted)
|
||||
if (dialog.exec() == QDialog::Accepted)
|
||||
plot(&printer);
|
||||
}
|
||||
|
||||
void GUI::exportAs()
|
||||
{
|
||||
QString fileName = QFileDialog::getSaveFileName(this, tr("Export to PDF"),
|
||||
QString(), "*.pdf");
|
||||
|
||||
if (!fileName.isEmpty()) {
|
||||
exportFile(fileName);
|
||||
_exportFileName = fileName;
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::exportFile()
|
||||
{
|
||||
if (_exportFileName.isEmpty())
|
||||
emit exportAs();
|
||||
else
|
||||
exportFile(_exportFileName);
|
||||
}
|
||||
|
||||
void GUI::exportFile(const QString &fileName)
|
||||
{
|
||||
QPrinter printer(QPrinter::HighResolution);
|
||||
printer.setPageSize(QPrinter::A4);
|
||||
printer.setOrientation(_track->orientation());
|
||||
printer.setOutputFormat(QPrinter::PdfFormat);
|
||||
printer.setOutputFileName(fileName);
|
||||
ExportDialog dialog(&printer, this);
|
||||
|
||||
plot(&printer);
|
||||
if (dialog.exec() == QDialog::Accepted)
|
||||
plot(&printer);
|
||||
}
|
||||
|
||||
void GUI::plot(QPrinter *printer)
|
||||
{
|
||||
QPainter p(printer);
|
||||
TrackInfo info;
|
||||
qreal ih, gh, mh;
|
||||
|
||||
|
||||
if (_dateRange.first.isValid()) {
|
||||
if (_dateRange.first == _dateRange.second) {
|
||||
@ -707,37 +685,26 @@ void GUI::plot(QPrinter *printer)
|
||||
info.insert(tr("Time"), timeSpan(_time));
|
||||
|
||||
|
||||
qreal ratio = p.paintEngine()->paintDevice()->logicalDpiX() / SCREEN_DPI;
|
||||
qreal ih = info.contentSize().height() * ratio;
|
||||
qreal mh = ih / 2;
|
||||
|
||||
#define GRR(printer) \
|
||||
(((printer)->width() > (printer)->height()) \
|
||||
? 0.15 * ((qreal)((printer)->width()) / (qreal)((printer)->height())) \
|
||||
: 0.15)
|
||||
#define TRR(printer) \
|
||||
(1.0 - GRR(printer))
|
||||
|
||||
if (info.isEmpty()) {
|
||||
if (_trackGraphs->isVisible())
|
||||
_track->plot(&p, QRectF(0, 0, printer->width(),
|
||||
(TRR(printer) * printer->height())));
|
||||
else
|
||||
_track->plot(&p, QRectF(0, 0, printer->width(), printer->height()));
|
||||
ih = 0;
|
||||
mh = 0;
|
||||
} else {
|
||||
qreal r = p.paintEngine()->paintDevice()->logicalDpiX() / SCREEN_DPI;
|
||||
ih = info.contentSize().height() * r;
|
||||
mh = ih / 2;
|
||||
info.plot(&p, QRectF(0, 0, printer->width(), ih));
|
||||
if (_trackGraphs->isVisible())
|
||||
_track->plot(&p, QRectF(0, ih + mh, printer->width(),
|
||||
(TRR(printer) * printer->height()) - (ih + 2*mh)));
|
||||
else
|
||||
_track->plot(&p, QRectF(0, ih + mh, printer->width(),
|
||||
printer->height() - (ih + mh)));
|
||||
}
|
||||
if (_trackGraphs->isVisible()) {
|
||||
qreal r = (((qreal)(printer)->width()) / (qreal)(printer->height()));
|
||||
gh = (printer->width() > printer->height())
|
||||
? 0.15 * r * (printer->height() - ih - 2*mh)
|
||||
: 0.15 * (printer->height() - ih - 2*mh);
|
||||
GraphView *gv = static_cast<GraphView*>(_trackGraphs->currentWidget());
|
||||
gv->plot(&p, QRectF(0, TRR(printer) * printer->height(),
|
||||
printer->width(), printer->height() * GRR(printer)));
|
||||
}
|
||||
gv->plot(&p, QRectF(0, printer->height() - gh, printer->width(), gh));
|
||||
} else
|
||||
gh = 0;
|
||||
_track->plot(&p, QRectF(0, ih + mh, printer->width(), printer->height()
|
||||
- (ih + 2*mh + gh)));
|
||||
}
|
||||
|
||||
void GUI::reloadFile()
|
||||
|
@ -39,7 +39,6 @@ private slots:
|
||||
void dataSources();
|
||||
void printFile();
|
||||
void exportFile();
|
||||
void exportAs();
|
||||
void openFile();
|
||||
void closeAll();
|
||||
void reloadFile();
|
||||
@ -125,7 +124,6 @@ private:
|
||||
QAction *_aboutQtAction;
|
||||
QAction *_printFileAction;
|
||||
QAction *_exportFileAction;
|
||||
QAction *_exportAsAction;
|
||||
QAction *_openFileAction;
|
||||
QAction *_closeFileAction;
|
||||
QAction *_reloadFileAction;
|
||||
@ -165,7 +163,6 @@ private:
|
||||
|
||||
FileBrowser *_browser;
|
||||
QList<QString> _files;
|
||||
QString _exportFileName;
|
||||
Map *_currentMap;
|
||||
|
||||
int _trackCount;
|
||||
|
Reference in New Issue
Block a user