5 * th9x - http://code.google.com/p/th9x
6 * er9x - http://code.google.com/p/er9x
7 * gruvin9x - http://code.google.com/p/gruvin9x
9 * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
21 #include "comparedialog.h"
22 #include "ui_comparedialog.h"
25 #include "modelslist.h"
27 #include <QPrintDialog>
29 //class DragDropHeader {
32 // general_settings(false),
36 // bool general_settings;
37 // uint8_t models_count;
38 // uint8_t models[CPN_MAX_MODELS];
41 CompareDialog::CompareDialog(QWidget
* parent
, Firmware
* firmware
):
42 QDialog(parent
, Qt::Window
),
43 multimodelprinter(new MultiModelPrinter(firmware
)),
44 ui(new Ui::CompareDialog
)
47 setWindowIcon(CompanionIcon("compare.png"));
49 if (!g
.compareWinGeo().isEmpty()) {
50 restoreGeometry(g
.compareWinGeo());
54 CompareDialog::~CompareDialog()
56 delete multimodelprinter
;
60 void CompareDialog::dragMoveEvent(QDragMoveEvent
* event
)
62 if (event
->mimeData()->hasFormat("application/x-companion-modeldata")) {
63 event
->acceptProposedAction();
70 void CompareDialog::dragEnterEvent(QDragEnterEvent
* event
)
72 if (event
->mimeData()->hasFormat("application/x-companion-modeldata")) {
73 event
->acceptProposedAction();
80 void CompareDialog::dragLeaveEvent(QDragLeaveEvent
* event
)
85 bool CompareDialog::handleMimeData(const QMimeData
* mimeData
)
87 QVector
<ModelData
> mList
;
89 if (!TreeModel::decodeMimeData(mimeData
, &mList
, &gs
) || mList
.isEmpty())
91 for (int i
=0; i
< mList
.size(); ++i
) {
93 data
.model
= mList
[i
];
95 modelsList
.append(data
);
100 void CompareDialog::closeEvent(QCloseEvent
* event
)
102 g
.compareWinGeo(saveGeometry());
105 void CompareDialog::dropEvent(QDropEvent
*event
)
107 if (handleMimeData(event
->mimeData())) {
113 void CompareDialog::compare()
116 while ((child
= ui
->layout_modelNames
->takeAt(0))) {
118 delete child
->widget();
122 multimodelprinter
->clearModels();
123 ui
->textEdit
->clear();
125 for (int i
=0; i
< modelsList
.size(); ++i
) {
126 multimodelprinter
->setModel(i
, &modelsList
[i
].model
, &modelsList
[i
].gs
);
127 QString
name(modelsList
.at(i
).model
.name
);
129 name
= tr("Unnamed Model %1").arg(i
+1);
131 QWidget
* hdr
= new QWidget(this);
132 hdr
->setLayout(new QHBoxLayout());
133 hdr
->layout()->setContentsMargins(0, 0, 0, 0);
134 hdr
->layout()->setSpacing(2);
135 QToolButton
* btn
= new QToolButton(hdr
);
136 btn
->setIcon(CompanionIcon("clear.png"));
137 btn
->setProperty("index", i
);
138 btn
->setFixedSize(18, 18);
139 btn
->setToolTip(tr("Click to remove this model."));
140 hdr
->layout()->addWidget(btn
);
141 QLabel
* lbl
= new QLabel(name
, this);
142 lbl
->setStyleSheet("font-weight: bold;");
143 hdr
->layout()->addWidget(lbl
);
144 connect(btn
, &QToolButton::clicked
, this, &CompareDialog::removeModelBtnClicked
);
146 ui
->layout_modelNames
->addWidget(hdr
);
148 if (modelsList
.size())
149 ui
->textEdit
->setHtml(multimodelprinter
->print(ui
->textEdit
->document()));
152 void CompareDialog::removeModel(int idx
)
154 if (idx
< modelsList
.size()) {
155 modelsList
.remove(idx
);
160 void CompareDialog::removeModelBtnClicked()
162 if (sender() && sender()->property("index").isValid())
163 removeModel(sender()->property("index").toInt());
166 void CompareDialog::on_printButton_clicked()
169 printer
.setPageMargins(10.0, 10.0, 10.0, 10.0, printer
.Millimeter
);
170 QPrintDialog
* dialog
= new QPrintDialog(&printer
, this);
171 dialog
->setWindowTitle(tr("Print Document"));
172 if (dialog
->exec() != QDialog::Accepted
)
174 ui
->textEdit
->print(&printer
);
177 void CompareDialog::on_printFileButton_clicked()
180 QString filename
= QFileDialog::getSaveFileName(this, tr("Select PDF output file"), QString(), "Pdf File(*.pdf)");
181 printer
.setPageMargins(10.0, 10.0, 10.0, 10.0, printer
.Millimeter
);
182 printer
.setOutputFormat(QPrinter::PdfFormat
);
183 printer
.setOrientation(QPrinter::Landscape
);
184 printer
.setColorMode(QPrinter::Color
);
185 if (!filename
.isEmpty()) {
186 if (QFileInfo(filename
).suffix().isEmpty())
187 filename
.append(".pdf");
188 printer
.setOutputFileName(filename
);
189 ui
->textEdit
->print(&printer
);