aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2019-11-19Dive list: update selection after clearing modelGravatar Berthold Stoeger
When clearing the model the selection is cleared. Send the according signal. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Cleanup: remove ProfileWidget2::refreshDisplay signalGravatar Berthold Stoeger
It was not used anywhere. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Filter: don't reload filter after reloading dive listGravatar Berthold Stoeger
The hidden_by_filter items are set on reload of the dive list. No point in reloading the filter again. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Filter: move recalculation of filter from FilterModel to TripModelGravatar Berthold Stoeger
The way this was accessed via Qt's model semantics was horrible. This gives arguably more readable code, since we don't have to shoehorn things through QVariants. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Filter: move num_shown logic from model to coreGravatar Berthold Stoeger
Since the number of shown dives is stored in the core, let's also keep it updated there. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Filter: split out filter from modelGravatar Berthold Stoeger
Split out the actual filtering from the MultiFilterSortModel. Create a DiveFilter class that does the actual filtering. Currently, mobile and desktop have their own version of this class, though ultimately we may want to merge them. The idea here is that the trip-model and undo-commands have direct access to the filter-function and thus can take care of keeping track of the number of shown dives, etc. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Filter: move calculation of shown dives to undo commandGravatar Berthold Stoeger
The filter-model was catching dives-added / dives-deleted signals from the models to keep track of the number of shown dives. To simplify the data flow, do this directly in the undo-command. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Filter: move number of shown dives to coreGravatar Berthold Stoeger
We mark hidden/shown dives in the core but store the number of shown dives in the MultiFilterSortModel. Move this datum to the core for improved locality. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Cleanup: remove MultiFilterSortModel::filterChanged()Gravatar Berthold Stoeger
Nobody was calling this function. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19Cleanup: remove MultiFilterSortModel::clearFilterGravatar Berthold Stoeger
Nobody was using that function. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-19CHANGELOG.md updateGravatar Berthold Stoeger
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-18GitHub actions: fix macOS artifact uploadGravatar Dirk Hohndel
Previously this created a bogus Subsurface.app.zip.zip file and then failed to upload it to the release. The upload / download pair of default actions is happier with just the folder. And then the creation of the zip file needs the '-r' switch. Oops. Finally, the pull-request specific uploads as build artifact are completely redundant since we already do this to move the data from the macOS build to the container that runs our own publish action in the first place. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-11-16Check if all required bytes were readGravatar Robert C. Helling
Fixes CID 350077 Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-11-16Initialize modified memberGravatar Robert C. Helling
Fixes CID 350111 Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-11-16Don't acces null dive computerGravatar Robert C. Helling
Fixes CID 350111 Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-11-16Use the actual error numberGravatar Robert C. Helling
According to the man page, fopen and fclose return the error number in the global variable errno. Fixes CID 350115 Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-11-16Initialize cylider field properlyGravatar Robert C. Helling
This fixes another thing Coverty found. I am not 100% sure I understand the semantics of cylinder_t.manually_added but looking at other instance I guess true is the correct value for a cylinder from a csv file for a Poseidon rebreather. Fixes CID 350734 Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-11-16Don't access uninitialized deco_structureGravatar Robert C. Helling
Coverty found that in the export functions, we initialize the planner deco state with NULL and then possibly later access its content. This makes sure, we don't do that. Let's see if this makes Coverty happy or I missed somehting else. Fixes CID 350736 Fixes CID 350735 Signed-off-by: Robert C. Helling <helling@atdotde.de>
2019-11-16Remove setStyleSheet for "Dive mode" boxGravatar Stefan Fuchs
Remove modification of style sheet for "Dive mode" box in info tab. This fixes a broken UI layout under Windows. Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
2019-11-16Fixes in tab widget UI layoutGravatar Stefan Fuchs
Three minor changes in tab widget UI layout and txt: - Remove leading space in string "Gas name" - Remove duplicate <item> entry - Correct "leftMargin" and "rightMargin" to 0 everywhere Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
2019-11-16Cleanup: use DiveTripModelBase::clear() to reset the logGravatar Berthold Stoeger
Introduce a DiveTripModelBase::clear() function that cleanly clears all dive data inside a beginResetModel()/endResetModel() pair. Thus, the UI will be cleanly reset and we can remove explicit calls to - graphics->setEmptyState() - mainTab->clearTabs() - mainTab->clearTabs() - diveList->reload() from MainWindow::closeCurrentFile(). Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-16Profile: clear tooltip's plotInfo in ProfileWidget2::setEmptyStateGravatar Berthold Stoeger
The tooltip's plotInfo was not cleared when clearing the profile. With the new cylinder code, this lead to crashes, because the displayed_dive's cylinder array is now cleared. The old code would happily read stale data from the fixed-size cylinders array. Clear the plotInfo explicitly. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-16Cleanup: move clearing of current_dive into clear_dive_file_data()Gravatar Berthold Stoeger
It makes no sense to have a non-NULL current_dive once all dives have been deleted. Therefore, clear current_dive implicitly in clear_dive_file_data() and don't depend on the caller performing this. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-16Cleanup: fold cleanUpEmpty() into closeCurrentFile()Gravatar Berthold Stoeger
The latter was the only caller of the former and there seems to be no clear separation between the two. By making a single function out of this the code is easier to follow and duplicate code can be more easily detected. Matter of fact, the profile was cleared twice. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-16Partially revert 3025e0630de2b9ced3d0aadd1513cb0e1c93b159Gravatar Berthold Stoeger
This commit did the "right" thing by implementing Qt mode semantics as intended, but for unknown reasons the profile is not properly cleared on close-file anymore. This code is so convoluted that there is not point in fighting it at the moment. Revert to remove-rows instead of reset-model. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-16Core: set gas use to zero if no values are givenGravatar Berthold Stoeger
In get_gas_used() the use was left uninitialized if there are neither user- nor computer-supplied values. This gives random SACs in the UI. Initialize to 0. Fixes #2376. Reported-by: Stefan Fuchs <sfuchs@gmx.de> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-15Dive list: signal correct trip in DiveTripModelTree::topLevelChangedGravatar Berthold Stoeger
DiveTripModelTree::topLevelChanged() has pretty complex code, as it has to handle the fact that when adding/removing a dive from a trip, the trip can change its position. The code did not account for the fact that when moving an object back in the top level list, one has to subtract one from the new index, because the object was removed somewhere in the front of the list. To make matters worse, when an entry stayed where it was, this was realized by moving the entry right behind itself, which of course means that it stays where it is. But this meant that in the by far most common case (no moving) the wrong entry was updated. Fix this by subtracting 1 from the new index when moving an entry to the back. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-14Refactoring: move undo commands to top levelGravatar Berthold Stoeger
In the future we might want to use undo-commands for mobile as well (even if not implementing undo). Therefore, move the undo-command source from desktop-widgets to their own commands top-level folder. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-14/: Corrected wrong Qt dependency from KirigamiGravatar jan Iversen
Kirigami 5.62 uses QtQuick.Controls 2.5, which were introduced in Qt 5.12 (see https://doc.qt.io/qt-5/qtquickcontrols-index.html) update CMakeList.txt to demand min. 5.12 when building SUBSURFACE-MOBILE update INSTALL text Signed-off-by: Jan Iversen <jan@casacondor.com>
2019-11-14Undo: don't delete dive sites when pasting divesGravatar Berthold Stoeger
We used to only keep sites with dives around. This changed when implementing the dive site tab. The paste-dive code was written using the old semantics and thus, when overwriting dive sites, it deleted unused dive sites. To make things consistent, remove that code. It would be very weird when dive sites are deleted by pasting, but not by setting a different dive site manually. Bonus: no more dependencies on desktop-includes in the undo code. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-14Undo: remove unrelated include in command_divelist.cppGravatar Berthold Stoeger
This file included "desktop-widgets/divelistview.h" without needing it. If we want to use the undo commands on mobile we shouldn't include desktop headers. Therefore, remove the include. This has the unintended side-effect that the Qt debug headers are not included indirectly anymore. Thus, change a few "qWarning() << ..." instances to "qWarning(...)". Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-14Undo: remove superfluous dive replot in DiveComputerBase::redoit()Gravatar Berthold Stoeger
Removing / moving a dive computer needs a profile replot. This was done explicitly in DiveComputerBase::redoit(). This is unnecessary, as a profile replot is performed implicitly by the setSelection() call. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-14Undo: remove superfluous refreshDisplay() in AddDive::(un)doit()Gravatar Berthold Stoeger
Dives used to be added from a special dive-edit screen. Thus, the undo command had to close that screen. This is no longer the case. Remove the calls. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-14Cleanup: don't std::move() temporariesGravatar Berthold Stoeger
clang correctly warns about std::move()ing objects returned from functions. This is a pessimization, because the compiler can't copy elide the object. Remove. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-13/: update INSTALL to reflect correct Qt version.Gravatar jan Iversen
commit 5ce4b3d5e set minimum Qt level to 5.11 for Subsurface-mobile commit 3df2be5c1 set minimum Qt level to 5.9.1 for Subsurface update INSTALL to reflect to new Qt versions Signed-off-by: Jan Iversen <jan@casacondor.com>
2019-11-12Profile: fix pressure scaleGravatar Berthold Stoeger
The determination of minimum pressure in calculate_max_limits_new() in profile.c was wrong for a long time. Since the loop went over all cylinders (even unused ones), the minimum pressure was always zero. Since we loop only over used cylinders, the minimum pressure was initialized to the lowest starting pressure of any cylinder. If there were no events with pressure change, the minimum pressure stayed unchanged, resulting in a funky scaling. Instead, let's initialize the minimum pressure to the lowest ending pressure. Reported-by: Willem Ferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-11Show altitude corresponding to surface pressureGravatar willemferguson
In the information tab, presenting atmospheric pressure is a bit unintuitive because the diver cannot easily relate that to altitude. For the Atm. Pressure widget in the Information tab this code does: If the atmospheric pressure for a dive exists and the user selects the 'm' or 'ft' option from the combobox, then the estimated altitude is shown in the text box. Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
2019-11-11Cleanup: introduce DiveTripModelBase::IS_TRIP_ROLEGravatar Berthold Stoeger
To test whether an entry is a trip, we passed a pointer to the trip through a QVariant and tested that for null-ity. Passing pointers through QVariants has given us myriads of problems in QML, therefore introduce a bool IS_TRIP_ROLE Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-11Cleanup: fix typos in commentGravatar Berthold Stoeger
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-11mobile-widget/qml: correct syntax error introduced in e63257f0eGravatar jan Iversen
default parameter values is not supported as this syntax was introduced in ECMA-262 6th edition while QML only implements the fifth edition (as of Qt 5.11). remove default parameter and check for undefined instead. Signed-off-by: Jan Iversen <jan@casacondor.com>
2019-11-11 Notes tab: Use top RH for depth and duretion fieldsGravatar willemferguson
Currently the top righthand part of the notes tab is used for showing and editing air teperature and water temperature. But these fields were moved over to the Information tab and are not required in the Notes tab any more. Rather use this space for the depth and duration data for manually-entered dives. Currently extra vertical space is created in the Notes tab for showing this field, resulting in inefficient use of screen space and inelegant layout. This code moves the Duration and Depth fields into the top righthand of the Notes tab. Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
2019-11-11Information tab: Make air and water tempertatures editableGravatar willemferguson
The undo stack is preserved. This is in preparation of removing temperatures from the Notes tab. Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
2019-11-10Reorganise the Information tab of the Info panelGravatar Willem Ferguson
1) Reorganise the existing widgets in the Information tab 2) Move divemode widget and visibility widget from Notes tab to Information tab 3) Translate water density to a word indicating water type 4) Reorganise the Notes tab to compensate for the moving the divemode and visibility widgets to the Information tab 5) Remove the problems in showing a QGroupBox in Qt Windows. I do this by removing the CSS specifying border characteristics Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-11-10Mobile: Add CHANGELOG and user manual updateGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-11-10Mobile: add ability to directly open support emailGravatar Dirk Hohndel
This is even easier and more obvious than copying the logs on the About page and then manually creating an email and pasting those logs. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2019-11-09Parser: set timestamp to zero if parsing failedGravatar Berthold Stoeger
When parsing of a timestamp failed (shouldn't happen) set the timestamp to zero. This should give less unpredictable results and silence a compiler warning. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-09Cylinders: access cylinders with get_cylinder()Gravatar Berthold Stoeger
Instead of accessing the cylinder table directly, use the get_cylinder() function. This gives less unwieldy expressions. But more importantly, the function does bound checking. This is crucial for now as the code hasn't be properly audited since the change to arbitrarily sized cylinder tables. Accesses of invalid cylinder indexes may lead to silent data-corruption that is sometimes not even noticed by valgrind. Returning NULL instead of an invalid pointer will make debugging much easier. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-09Mobile: optimize cylinderList() functionGravatar Berthold Stoeger
The cylinderList() function collects all cylinder descriptions. Instead of adding all cylinders, then sort, then removed duplicates, keep a sorted list and only add non-existing elements. Find existing elements by a binary search. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-09CHANGELOG.md updateGravatar Berthold Stoeger
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-11-09Desktop: support no-cylinders in dive information tabGravatar Berthold Stoeger
The tab was crashing if there were no cylinders because 1) per_cylinder_mean_depth() would access non-existing cylinders. 2) TabDiveInformation::updateProfile() would access a non-existing mean. Fix both of these crash conditions by checking whether the dive actually has cylinders. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>