aboutsummaryrefslogtreecommitdiffstats
path: root/desktop-widgets/mainwindow.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-11-25 07:31:19 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-12-12 15:52:40 -0800
commitbb76cb56d42e957e03cc705a9f8fd9f637733b5d (patch)
tree3a92f6c4f2e681f2b60702a1fcf0f899fd5aa97d /desktop-widgets/mainwindow.cpp
parent16f86f2f65e73935496e3324bb16f9b8cd4d7953 (diff)
downloadsubsurface-bb76cb56d42e957e03cc705a9f8fd9f637733b5d.tar.gz
desktop: move planner-code to diveplanner.cpp
Around 2015 there was a push to move planner UI code from mainwindow.cpp to diveplanner.cpp. That never was completed, presumably because the planner is actually three widgets. Collect these widgets in one PlannerWidgets class and move the code there. This is not a full dis-entanglement, as the plannerwidgets have to access the profile via the mainwindow. But at least it collects the planner UI code at a single place. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets/mainwindow.cpp')
-rw-r--r--desktop-widgets/mainwindow.cpp104
1 files changed, 8 insertions, 96 deletions
diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp
index c4a234b72..6a9e378a3 100644
--- a/desktop-widgets/mainwindow.cpp
+++ b/desktop-widgets/mainwindow.cpp
@@ -137,9 +137,7 @@ MainWindow::MainWindow() : QMainWindow(),
diveList = new DiveListView(this);
graphics = new ProfileWidget2(this);
MapWidget *mapWidget = MapWidget::instance();
- divePlannerSettingsWidget = new PlannerSettingsWidget(this);
- divePlannerWidget = new DivePlannerWidget(this);
- plannerDetails = new PlannerDetails(this);
+ plannerWidgets.reset(new PlannerWidgets);
// what is a sane order for those icons? we should have the ones the user is
// most likely to want towards the top so they are always visible
@@ -174,9 +172,9 @@ MainWindow::MainWindow() : QMainWindow(),
{ diveList, FLAG_NONE }, { mapWidget, FLAG_NONE } });
registerApplicationState(ApplicationState::EditDive, { { mainTab.get(), FLAG_NONE }, { profileContainer, FLAG_NONE },
{ diveList, FLAG_NONE }, { mapWidget, FLAG_NONE } });
- registerApplicationState(ApplicationState::PlanDive, { { divePlannerWidget, FLAG_NONE }, { profileContainer, FLAG_NONE },
- { divePlannerSettingsWidget, FLAG_NONE }, { plannerDetails, FLAG_NONE } });
- registerApplicationState(ApplicationState::EditPlannedDive, { { divePlannerWidget, FLAG_NONE }, { profileContainer, FLAG_NONE },
+ registerApplicationState(ApplicationState::PlanDive, { { &plannerWidgets->plannerWidget, FLAG_NONE }, { profileContainer, FLAG_NONE },
+ { &plannerWidgets->plannerSettingsWidget, FLAG_NONE }, { &plannerWidgets->plannerDetails, FLAG_NONE } });
+ registerApplicationState(ApplicationState::EditPlannedDive, { { &plannerWidgets->plannerWidget, FLAG_NONE }, { profileContainer, FLAG_NONE },
{ diveList, FLAG_NONE }, { mapWidget, FLAG_NONE } });
registerApplicationState(ApplicationState::EditDiveSite, { { diveSiteEdit, FLAG_NONE }, { profileContainer, FLAG_DISABLED },
{ diveList, FLAG_DISABLED }, { mapWidget, FLAG_NONE } });
@@ -199,7 +197,6 @@ MainWindow::MainWindow() : QMainWindow(),
ui.menuFile->insertSeparator(ui.actionQuit);
connect(DivePlannerPointsModel::instance(), SIGNAL(planCreated()), this, SLOT(planCreated()));
connect(DivePlannerPointsModel::instance(), SIGNAL(planCanceled()), this, SLOT(planCanceled()));
- connect(plannerDetails->printPlan(), SIGNAL(pressed()), divePlannerWidget, SLOT(printDecoPlan()));
connect(this, &MainWindow::showError, ui.mainErrorMessage, &NotificationWidget::showError, Qt::AutoConnection);
connect(&windowTitleUpdate, &WindowTitleUpdate::updateTitle, this, &MainWindow::setAutomaticTitle);
@@ -210,7 +207,6 @@ MainWindow::MainWindow() : QMainWindow(),
connect(&diveListNotifier, &DiveListNotifier::divesChanged, this, &MainWindow::divesChanged);
#ifdef NO_PRINTING
- plannerDetails->printPlan()->hide();
ui.menuFile->removeAction(ui.actionPrint);
#endif
enableDisableCloudActions();
@@ -223,8 +219,6 @@ MainWindow::MainWindow() : QMainWindow(),
MapWidget::instance()->reload();
diveList->expand(diveList->model()->index(0, 0));
diveList->scrollTo(diveList->model()->index(0, 0), QAbstractItemView::PositionAtCenter);
- divePlannerWidget->settingsChanged();
- divePlannerSettingsWidget->settingsChanged();
#ifdef NO_USERMANUAL
ui.menuHelp->removeAction(ui.actionUserManual);
#endif
@@ -761,62 +755,6 @@ void MainWindow::planCreated()
diveList->setFocus();
}
-void MainWindow::setPlanNotes(QString plan)
-{
- plannerDetails->divePlanOutput()->setHtml(plan);
-}
-
-void MainWindow::printPlan()
-{
-#ifndef NO_PRINTING
- char *disclaimer = get_planner_disclaimer_formatted();
- // Prepend a logo and a disclaimer to the plan.
- // Save the old plan so that it can be restored at the end of the function.
- QString origPlan = plannerDetails->divePlanOutput()->toHtml();
- QString diveplan = QStringLiteral("<img height=50 src=\":subsurface-icon\"> ") +
- QString(disclaimer) + origPlan;
- free(disclaimer);
-
- QPrinter printer;
- QPrintDialog *dialog = new QPrintDialog(&printer, this);
- dialog->setWindowTitle(tr("Print runtime table"));
- if (dialog->exec() != QDialog::Accepted)
- return;
-
- /* render the profile as a pixmap that is inserted as base64 data into a HTML <img> tag
- * make it fit a page width defined by 2 cm margins via QTextDocument->print() (cannot be changed?)
- * the height of the profile is 40% of the page height.
- */
- QSizeF renderSize = printer.pageRect(QPrinter::Inch).size();
- const qreal marginsInch = 1.57480315; // = (2 x 2cm) / 2.45cm/inch
- renderSize.setWidth((renderSize.width() - marginsInch) * printer.resolution());
- renderSize.setHeight(((renderSize.height() - marginsInch) * printer.resolution()) / 2.5);
-
- QPixmap pixmap(renderSize.toSize());
- QPainter painter(&pixmap);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.setRenderHint(QPainter::SmoothPixmapTransform);
-
- ProfileWidget2 *profile = graphics;
- QSize origSize = profile->size();
- profile->resize(renderSize.toSize());
- profile->setPrintMode(true);
- profile->render(&painter);
- profile->resize(origSize);
- profile->setPrintMode(false);
-
- QByteArray byteArray;
- QBuffer buffer(&byteArray);
- pixmap.save(&buffer, "PNG");
- QString profileImage = QString("<img src=\"data:image/png;base64,") + byteArray.toBase64() + "\"/><br><br>";
- diveplan = profileImage + diveplan;
-
- plannerDetails->divePlanOutput()->setHtml(diveplan);
- plannerDetails->divePlanOutput()->print(&printer);
- plannerDetails->divePlanOutput()->setHtml(origPlan); // restore original plan
-#endif
-}
-
void MainWindow::on_actionReplanDive_triggered()
{
if (!plannerStateClean() || !current_dive)
@@ -826,22 +764,11 @@ void MainWindow::on_actionReplanDive_triggered()
QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel)
return;
}
- // put us in PLAN mode
- DivePlannerPointsModel::instance()->clear();
- DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
- graphics->setPlanState();
- graphics->clearHandlers();
+ // put us in PLAN mode
setApplicationState(ApplicationState::PlanDive);
- divePlannerWidget->setReplanButton(true);
- divePlannerWidget->setupStartTime(timestampToDateTime(current_dive->when));
- if (current_dive->surface_pressure.mbar)
- divePlannerWidget->setSurfacePressure(current_dive->surface_pressure.mbar);
- if (current_dive->salinity)
- divePlannerWidget->setSalinity(current_dive->salinity);
- DivePlannerPointsModel::instance()->loadFromDive(current_dive);
- reset_cylinders(&displayed_dive, true);
- DivePlannerPointsModel::instance()->cylindersModel()->updateDive(&displayed_dive);
+
+ plannerWidgets->replanDive();
}
void MainWindow::on_actionDivePlanner_triggered()
@@ -850,24 +777,9 @@ void MainWindow::on_actionDivePlanner_triggered()
return;
// put us in PLAN mode
- DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
setApplicationState(ApplicationState::PlanDive);
- graphics->setPlanState();
- dc_number = 0;
-
- // create a simple starting dive, using the first gas from the just copied cylinders
- DivePlannerPointsModel::instance()->createSimpleDive();
- // plan the dive in the same mode as the currently selected one
- if (current_dive) {
- divePlannerSettingsWidget->setDiveMode(current_dive->dc.divemode);
- divePlannerSettingsWidget->setBailoutVisibility(current_dive->dc.divemode);
- if (current_dive->salinity)
- divePlannerWidget->setSalinity(current_dive->salinity);
- else // No salinity means salt water
- divePlannerWidget->setSalinity(SEAWATER_SALINITY);
- }
- divePlannerWidget->setReplanButton(false);
+ plannerWidgets->planDive();
}
void MainWindow::on_actionAddDive_triggered()