- X7S option removed (#5388)
[opentx.git] / companion / src / comparedialog.cpp
blob1fc7a743d2eb0b801ed495afdb2fb3ee598adf96
1 /*
2 * Copyright (C) OpenTX
4 * Based on code named
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"
23 #include "appdata.h"
24 #include "helpers.h"
25 #include "modelslist.h"
26 #include <QPrinter>
27 #include <QPrintDialog>
29 //class DragDropHeader {
30 // public:
31 // DragDropHeader():
32 // general_settings(false),
33 // models_count(0)
34 // {
35 // }
36 // bool general_settings;
37 // uint8_t models_count;
38 // uint8_t models[CPN_MAX_MODELS];
39 //};
41 CompareDialog::CompareDialog(QWidget * parent, Firmware * firmware):
42 QDialog(parent, Qt::Window),
43 multimodelprinter(new MultiModelPrinter(firmware)),
44 ui(new Ui::CompareDialog)
46 ui->setupUi(this);
47 setWindowIcon(CompanionIcon("compare.png"));
48 setAcceptDrops(true);
49 if (!g.compareWinGeo().isEmpty()) {
50 restoreGeometry(g.compareWinGeo());
54 CompareDialog::~CompareDialog()
56 delete multimodelprinter;
57 delete ui;
60 void CompareDialog::dragMoveEvent(QDragMoveEvent * event)
62 if (event->mimeData()->hasFormat("application/x-companion-modeldata")) {
63 event->acceptProposedAction();
65 else {
66 event->ignore();
70 void CompareDialog::dragEnterEvent(QDragEnterEvent * event)
72 if (event->mimeData()->hasFormat("application/x-companion-modeldata")) {
73 event->acceptProposedAction();
75 else {
76 event->ignore();
80 void CompareDialog::dragLeaveEvent(QDragLeaveEvent * event)
82 event->accept();
85 bool CompareDialog::handleMimeData(const QMimeData * mimeData)
87 QVector<ModelData> mList;
88 GeneralSettings gs;
89 if (!TreeModel::decodeMimeData(mimeData, &mList, &gs) || mList.isEmpty())
90 return false;
91 for (int i=0; i < mList.size(); ++i) {
92 GMData data;
93 data.model = mList[i];
94 data.gs = gs;
95 modelsList.append(data);
97 return true;
100 void CompareDialog::closeEvent(QCloseEvent * event)
102 g.compareWinGeo(saveGeometry());
105 void CompareDialog::dropEvent(QDropEvent *event)
107 if (handleMimeData(event->mimeData())) {
108 event->accept();
109 compare();
113 void CompareDialog::compare()
115 QLayoutItem *child;
116 while ((child = ui->layout_modelNames->takeAt(0))) {
117 if (child->widget())
118 delete child->widget();
119 delete child;
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);
128 if (name.isEmpty())
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);
156 compare();
160 void CompareDialog::removeModelBtnClicked()
162 if (sender() && sender()->property("index").isValid())
163 removeModel(sender()->property("index").toInt());
166 void CompareDialog::on_printButton_clicked()
168 QPrinter printer;
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)
173 return;
174 ui->textEdit->print(&printer);
177 void CompareDialog::on_printFileButton_clicked()
179 QPrinter printer;
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);