1 /*
2 Copyright © 2008-13 Qtrac Ltd. All rights reserved.
3 This program or module is free software: you can redistribute it
4 and/or modify it under the terms of the GNU General Public License
5 as published by the Free Software Foundation, either version 2 of
6 the License, or (at your option) any later version. This program is
7 distributed in the hope that it will be useful, but WITHOUT ANY
8 WARRANTY; without even the implied warranty of MERCHANTABILITY or
9 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
10 for more details.
11 */
12
13 #include "saveform.hpp"
14 #include <QDialogButtonBox>
15 #include <QFileDialog>
16 #include <QFormLayout>
17 #include <QGroupBox>
18 #include <QImageWriter>
19 #include <QLabel>
20 #include <QLineEdit>
21 #include <QPushButton>
22 #include <QRadioButton>
23 #include <QVBoxLayout>
24
25
SaveForm(const QString & path,QString * filename,bool * saveAll,SavePages * savePages,QWidget * parent)26 SaveForm::SaveForm(const QString &path, QString *filename, bool *saveAll,
27 SavePages *savePages, QWidget *parent)
28 : QDialog(parent), m_path(path), m_filename(filename),
29 m_saveAll(saveAll), m_savePages(savePages)
30 {
31 createWidgets();
32 createLayout();
33 createConnections();
34
35 updateUi();
36 setWindowTitle(tr("DiffPDF — Save As"));
37 }
38
39
createWidgets()40 void SaveForm::createWidgets()
41 {
42 saveGroupBox = new QGroupBox(tr("Pairs"));
43 saveCurrentRadioButton = new QRadioButton(tr("Current &Page Pair"));
44 saveAllRadioButton = new QRadioButton(tr("&All Page Pairs"));
45 if (*m_saveAll)
46 saveAllRadioButton->setChecked(true);
47 else
48 saveCurrentRadioButton->setChecked(true);
49 pagesGroupBox = new QGroupBox(tr("Pages"));
50 leftPagesRadioButton = new QRadioButton(tr("File #&1's Pages"));
51 rightPagesRadioButton = new QRadioButton(tr("File #&2's Pages"));
52 bothPagesRadioButton = new QRadioButton(tr("&Both Files' Pages"));
53 if (*m_savePages == SaveLeftPages)
54 leftPagesRadioButton->setChecked(true);
55 else if (*m_savePages == SaveRightPages)
56 rightPagesRadioButton->setChecked(true);
57 else // m_savePages == SaveBothPages
58 bothPagesRadioButton->setChecked(true);
59 filenameLabel = new QLabel(tr("&Filename:"));
60 filenameLineEdit = new QLineEdit;
61 filenameLineEdit->setText(*m_filename);
62 filenameLabel->setBuddy(filenameLineEdit);
63 chooseFileButton = new QPushButton(tr("B&rowse..."));
64 buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|
65 QDialogButtonBox::Cancel);
66 }
67
68
createLayout()69 void SaveForm::createLayout()
70 {
71 QHBoxLayout *saveLayout = new QHBoxLayout;
72 saveLayout->addWidget(saveCurrentRadioButton);
73 saveLayout->addWidget(saveAllRadioButton);
74 saveLayout->addStretch();
75 saveGroupBox->setLayout(saveLayout);
76 QHBoxLayout *pagesLayout = new QHBoxLayout;
77 pagesLayout->addWidget(leftPagesRadioButton);
78 pagesLayout->addWidget(rightPagesRadioButton);
79 pagesLayout->addWidget(bothPagesRadioButton);
80 pagesGroupBox->setLayout(pagesLayout);
81 QHBoxLayout *filenameLayout = new QHBoxLayout;
82 filenameLayout->addWidget(filenameLabel);
83 filenameLayout->addWidget(filenameLineEdit);
84 filenameLayout->addWidget(chooseFileButton);
85 QVBoxLayout *layout = new QVBoxLayout;
86 layout->addWidget(saveGroupBox);
87 layout->addWidget(pagesGroupBox);
88 layout->addLayout(filenameLayout);
89 layout->addStretch();
90 layout->addWidget(buttonBox);
91 setLayout(layout);
92 }
93
94
createConnections()95 void SaveForm::createConnections()
96 {
97 connect(chooseFileButton, SIGNAL(clicked()), this, SLOT(chooseFile()));
98 connect(filenameLineEdit, SIGNAL(textChanged(const QString&)),
99 this, SLOT(updateUi()));
100 connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
101 connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
102 }
103
104
updateUi()105 void SaveForm::updateUi()
106 {
107 buttonBox->button(QDialogButtonBox::Ok)->setEnabled(
108 !filenameLineEdit->text().isEmpty());
109 }
110
111
chooseFile()112 void SaveForm::chooseFile()
113 {
114 QList<QByteArray> formats = QImageWriter::supportedImageFormats();
115 QStringList suffixes;
116 foreach (const QByteArray &format, formats)
117 suffixes << "*." + QString(format.toLower());
118 QString filename = QFileDialog::getSaveFileName(this,
119 tr("DiffPDF — Browse"), m_path,
120 tr("PDF files (*.pdf);;Image files (%1)")
121 .arg(suffixes.join(" ")));
122 if (!filename.isEmpty()) {
123 filenameLineEdit->setText(filename);
124 buttonBox->button(QDialogButtonBox::Ok)->setFocus();
125 }
126 }
127
128
accept()129 void SaveForm::accept()
130 {
131 *m_filename = filenameLineEdit->text();
132 if (!m_filename->contains("."))
133 *m_filename += ".pdf";
134 *m_saveAll = saveAllRadioButton->isChecked();
135 if (leftPagesRadioButton->isChecked())
136 *m_savePages = SaveLeftPages;
137 else if (rightPagesRadioButton->isChecked())
138 *m_savePages = SaveRightPages;
139 else // bothPagesRadioButton->isChecked()
140 *m_savePages = SaveBothPages;
141 QDialog::accept();
142 }
143