summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
AgeCommit message (Collapse)Author
2020-02-09Cleanup: remove exportFunc classGravatar Berthold Stoeger
exportFunc was a collections of functions for exporting dive data. It had no state, therefore there is no reason for it to ever be instantiated. Simply remove the class. Rename the saveProfile function to exportProfile so that all export functions start with "export". Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-09Cleanup: Remove global QFuture from exportFuncsGravatar Berthold Stoeger
When exporting dives we show a message. The message is closed when the export is finished. This is coordinated by a QFuture. Instead of keeping a global QFuture in the export-code, pass it around as a local variable. This is supported according to Qt's documentation: "QFuture is a lightweight reference counted class that can be passed by value." and the source code indicates the same. Not only does this remove a global, it also makes the code more flexible: Now we could show one notification per export, for example. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-08Dive list: be more careful on when updating the UI after selectionGravatar Berthold Stoeger
Fix two issues: 1) When narrowing the selection, we didn't get setSelection() calls. Only, when the user released the mouse button was the selection updated. Therefore, hook into the mouse-release- event and update the UI if the selection changed. 2) We updated the ui in setSelection(). However, this was called on mouse-move even if the actual selection didn't change. Therefore, compare selection before and after processing of the event and only refresh the UI if there are changes. Clearly, this can only be a quick stopgap solution and we should find out how to properly hook into the selection change machinery. Though see commit 4928c4ae0421193bbd371cb0924091a970489611 for the reason why we do things as we do them. Fixes #2595 Reported-by: Willem Ferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-06Cleanup: don't initialize DivePlannerPointsModel at startupGravatar Berthold Stoeger
The whole point of having X::instance() functions is to solve the infamous "Static Initialization Order Fiasco": When having global objects in different translation units, their order of initialization is undefined. Thus, when these objects access each other one cannot guarantee the correct order of initialization. The X::instance() functions generate the objects on first use. DivePlannerPointsModel has such an instance() function. However, for convenience(?) in diveplanner.cpp we find the global variable static DivePlannerPointsModel* plannerModel = DivePlannerPointsModel::instance(); Thus, the DivePlannerPointsModel constructor is run before main(), negating the whole purpose of the instance() function. Let's remove this line to avoid hard-to-debug startup issues. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-06Dive site: don't save invalid GPS coordinatesGravatar Berthold Stoeger
On the dive site screen, when entering invalid GPS coordinates, we cleared the location of the dive site. Don't do this. To clear the location, the user now has to enter the empty string. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-06Dive site: give visual clue for invalid coordinatesGravatar Berthold Stoeger
On the dive site edit screen, when the user enters invalid coordinates and saves, we treat this as "no location". This is rather unfriendly, therefore warn the user with a visual clue. This is performed by setting the background color of the widget to red. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-04Cleanup: remove capture-all lambda clausesGravatar Berthold Stoeger
These were forgotten the last time. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-04Dive sites: select each dive site only onceGravatar Berthold Stoeger
After selecting dives, the selected dive sites are collected. This was done using the selectionModel()->selection().indexes(), which is wrong, because it gives one index per row *and* column. Accordingly, every dive site was added numerous times to the array of dive sites to be selected. Change this to selectionModel()->selectedRows(), which gives one entry per row. Moreover, if multiple dives with the same site were selected, this site was also added to the array multiple times. Therefore, check the array before adding sites. Note that all this should not change the user experience in any way, it is only a code-hygiene thing. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-04Cleanup: rename plannerShared to PlannerSharedGravatar Berthold Stoeger
Usually, we use PascalCase (i.e. camelCase with a capital letter at the start) for class names. For consistency, let's do it here as well. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-02-04Cleanup: lower-case filenames in core/subsurface-qt/Gravatar Berthold Stoeger
We tend to use lower-case filenames. Let's do it for these files as well. Simple search & replace. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-01-31Remove plannerShared::instance()Gravatar Berthold Stoeger
This class contains only static functions (i.e. it does not contain any state). There does not seem to be a reason to have an instance of that class. Therefore, remove the instance() function. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-01-25diveplanner: add surface_segment to plannersharedGravatar jan Iversen
Add surface_segment to plannerShared and then update desktop-widgets. Signed-off-by: jan Iversen <jan@casacondor.com> desktop-widgets: use plannerShared for surface_segment Change getter/setter for surface_segment to plannerShared, in order to share the conversion with mobile diveplanner Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-25dive planner: correct bottomsac/decosac calc.Gravatar jan Iversen
Move conversion cuft <-> liter from desktop-widget/diveplanner.cpp to plannerShared, to facilitate the same results in mobile diveplanner Use Backend for bottomsac/decosac and update to check for switch LITER <-> CUFT Add bottomsac/decosac to QMLinterface. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-25mobile-widgets: correct error in connectGravatar jan Iversen
connect to set_o2narcotics missed an & but the compiler did not complain (which it usually does). Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-25diveplanner: call planner model directly for simple variables.Gravatar jan Iversen
Variables without conversion, do not need to pass plannerShared (due to the QML interface). Simple variables do not pass plannerShared, but diveplanner in desktop-widgets and qmlinterface in mobile-widgets call the implementation directly. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-24mobile: move dive planner notes access to pure interfaceGravatar jan Iversen
Make notes rates available to QML through the Backend interface. Remove the corresponding variables from plannerShared. Getters are from prefs. while setters are linked to diveplan model. Remark: signals from qPrefDivePlanner is used, because the diveplanner model sets qPrefDivePlanner but do not issue special signals. Signed-off-by: jan Iversen <jan@casacondor.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-24core: move GPX parsing into coreGravatar Dirk Hohndel
This shouldn't be part of the desktop UI code; there's still the issue that we really shouldn't hand code XML parsing, but I'll leave that for later. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-24Desktop: Import dive coordinates directly from GPSGravatar Willem Ferguson
This allows Subsurface to obtain the coordinates of a dive directly from a GPS track. It parses a GPX file (GPX V1.0 or V1.1) from a GPS to locate the trackpoint immediatedly after the start of a dive. There is an additional "Use GPS file" button in the Edit Dive Site panel that is selected from the Notes tab. Image: This allows one to select a GPX file, bringing up the Import GPS dialog. There is extensive provision for cross-checking that the dive track synchronises with the dive start and end. If the Save button in the dialog is pressed the dive coordinates are copied into the Dive Coordinates text box in the Edit Dive Site panel. The map moves to indicate the location of the dive site. The bulk of the work is done in importgps.cpp. The code is pretty intergrated: I tried to break it up in smaller commits but that was not feasible. The code includes responses to the comments by @neolit123 and @bstoeger. The C-based file input was replaced with Qt-based code using QChar, QString and QFile. [Dirk Hohndel: fixed several small issues in the .ui file, removed various headers includes that weren't needed and fixed printing of minutes as zero padded] Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-20qt-models: add suffix Display to unit system aware asc/desc settersGravatar jan Iversen
Change ascent/descent setter function names to set_<name>Display to show the value is prepared for displaying (common for desktop and QML). Signed-off-by: jan Iversen <jan@casacondor.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-20desktop-widgets: use set/get asc/desc rates in diveplannermodelGravatar jan Iversen
The spinboxes are already connected to diveplannermodel set_ functions, remove second connect to plannerShared. Change get functions to use diveplannermodel. Signed-off-by: jan Iversen <jan@casacondor.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-20core/settings:: remove string functions for unitsGravatar jan Iversen
Remove string version of unit_system, duration_units, length, pressure, temperature, vertical_speed_time, and volume, including tests and make signals strongly typed in C++ Signed-off-by: jan Iversen <jan@casacondor.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: add empty table structuresGravatar Dirk Hohndel
It seemed to make sense to combine all three types in one commit. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: use explicit zero_locationGravatar Dirk Hohndel
Again, several different ways to achieve the same thing. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: replace deprecated member function QColor::dark()Gravatar Dirk Hohndel
dark() and darker() appear to have the same semantics. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: remove deprecated QString::nullGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: replace deprecated setAutoCompletion() functionsGravatar Dirk Hohndel
It's not even clear if we need the setCaseSensitivity() call as it appears that a case insensitive completer is the default. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: add missing initializationGravatar Dirk Hohndel
While technically the initial value of this variable makes no difference as it is set when the first dive is displayed, technically Coverity is correct. Fixes CID 353273 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: remove unused QSignalMapperGravatar Dirk Hohndel
Fixes CID #353274 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: replace deprecated setBackgroundColor() methodGravatar Dirk Hohndel
Here the replacement has been around for a very long time. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: mark unused argumentGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: initialize all elements in structureGravatar Dirk Hohndel
This seems silly. I don't like that warning and would rather disable the warning. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: use QElapsedTimer instead of QTimeGravatar Dirk Hohndel
Newer versions of Qt deprecate using QTime as a timer. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-10code cleanup: QFontMetrics::width() is deprecatedGravatar Dirk Hohndel
Qt5.11 introduced the suggested replacement QFontMetrics::horizontalAdvance(). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-01-07desktop-widgets: add comment why last SIGNAL/SLOT is not convertedGravatar jan Iversen
The last SIGNAL/SLOT cannot be converted due to a limitation in the new connect() syntax, it does not "understand" default parameters. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-07desktop-widgets: replace connect() for CylindersModel.Gravatar jan Iversen
Replace SIGNAL/SLOT in favor of new connect() Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-07desktop-widgets: replace connect() with parameter double.Gravatar jan Iversen
Replace SIGNAL() with QOverload<double>::of() to allow new connect syntax. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-07desktop-widgets: convert last simple connect().Gravatar jan Iversen
Convert the last convert() statements, that can be converted just by changing the syntax. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-07desktop-widgets: correct connect for QShortcutGravatar jan Iversen
Replace syntax for connect of QShortcut. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-07desktop-widgets: correct QDateTime connect()Gravatar jan Iversen
Change connect() to new syntax for QDataTime. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-07desktop-widgets: change rebreathermode to use new connect()Gravatar jan Iversen
Replace SIGNAL/SLOT with QOverload. Signed-off-by: jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: change connect() for triggered(bool)Gravatar jan Iversen
Change connect for QAction::triggered(bool) to new syntax. Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: change connect() for valueChange(int)Gravatar jan Iversen
Change connect for QSpinBox::valueChange(int) to new syntax. Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: change connect() for clicked/accepted/rejectedGravatar jan Iversen
Change connect for QAbstractButton::clickedto new syntax. Change connect for QDialogButtonBox::accepted/rejected to new syntax. Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: remove double connect.Gravatar jan Iversen
No need to connect ui.display_variations to the same signal/slot twice. Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: change connect() to new type for toogledGravatar jan Iversen
Change connect for QAbstractButton::toogled to new syntax. Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: correct typeGravatar jan Iversen
correct SLOT was sec_bottomsac(double), which is not reported as an error. correct to set_bottomsac(double) Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: correct set_min_switch_duration connect.Gravatar jan Iversen
correct SLOT was set_min_swich_duration()(int), which is not reported as an error. Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: set_bailout -> set_dobailoutGravatar jan Iversen
correct name mistake in connect() Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: set_verbatim_plan should go through plannerShared.Gravatar jan Iversen
Adjust connect() to use plannerShared, avoiding parameter convert problem. Signed-off-by: Jan Iversen <jan@casacondor.com>
2020-01-06desktop-widgets: remove use of QSignalMapper.Gravatar jan Iversen
QSignalMapper gives a warning that it is depreciated, and the doc. states that using a lambda function is more efficient. Replace use of QSignalMapper. Signed-off-by: Jan Iversen <jan@casacondor.com>