summaryrefslogtreecommitdiffstats
path: root/divelist.c
AgeCommit message (Collapse)Author
2012-08-16Merge branch 'tree2' of git://git.hohndel.org/subsurfaceGravatar Linus Torvalds
Pull selection tracking fixes from Dirk Hohndel: "I just gave up on gtk tracking our selection. Way too much pain. The implementation below has seen some testing with the debugging code enabled and seems to work - but it needs more banging onto it, I'm sure. Ideally I'd like to leave the debug code in, ask people on the mailing list to play with it and report any inconsistencies. After that I'll be happy to remove it again." * 'tree2' of git://git.hohndel.org/subsurface: Stop relying on gtk to track which dives are selected
2012-08-16Stop relying on gtk to track which dives are selectedGravatar Dirk Hohndel
We spend way too much effort trying to get gtk to manage the dives that are selected. The straw that broke the camel's back is that gtk forces us to expand any nodes that we want to select - so selecting a summary entry for a dive trip forced us to expand all the dives in the dive trip. Which as Linus pointed out really sucked from a user experience. So instead we now completeley ignore gtk's weird idea of what is selected and what isn't and simply track things ourselves. We still need to play some games with gtk to make sure that the correct rows are SHOWN as selected, but still, the overall code seems much cleaner. This commit contains a bunch of debugging code that is ifdef'ed out - this is extremely useful to make sure I didn't mess anything up, but eventually I'll want to remove that again as it just looks ugly in the code. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-16Fix right click edit in Dive Notes area for multiple divesGravatar Dirk Hohndel
This fixes the bug that triggered the SIGSEGV that Linus worked around earlier. I had forgotten to update this call path to the edit_multi_dive_info function. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-16Merge branch 'tree2' of git://git.hohndel.org/subsurfaceGravatar Linus Torvalds
Pull dive-trip grouping from Dirk Hohndel: "This turned into an updated pull request for the tree2 branch where I implemented the date based grouping - but is actually a very different topic: this adds the ability to edit multiple dives (and fixes some issues with the dive editing overall). The reason for that is that it reuses some of the infrastructure that I implemented in the tree2 branch for tracking the selected dives. More details in the commit messages." * 'tree2' of git://git.hohndel.org/subsurface: Switch from date based to dive trip based grouping Redo dive editing Fix selecting and unselecting summary items Apply sort functions to the correct model, don't select summary entries Maintain selected rows when switching between list model and tree model Create duplicate list model so sorting by columns works again Improve tree model implementation Allow date based grouping
2012-08-16Merge branch 'suit' of git://git.hohndel.org/subsurfaceGravatar Linus Torvalds
Pull exposure suit tracking from Dirk Hohndel. * 'suit' of git://git.hohndel.org/subsurface: Add exposure protection tracking
2012-08-16Switch from date based to dive trip based groupingGravatar Dirk Hohndel
Linus HATED the date based grouping - too much wasted space visually ("three levels of grouping are way too much") and asked for dive trip based grouping instead. This is a quick change to do just that, with an assumption that no dive in 3 days means it's a new trip. This also changes the summary entry to display a location for the trip, for now we pick the location of the (chronologically) first dive of the trip. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-15Redo dive editingGravatar Dirk Hohndel
This commit addresses two issues: We now can add / edit / delete equipment from the edit dive dialog We now can edit multiple dives at once The latter feature has some interesting design constraints: It picks the 'selected_dive' as the one to start the edit from - so if this dive already has some information filled in, that information needs to be overwritten before it is stored in all of the dives. Similarly, only changes to the cylinders or weightsystems are recorded. Also, the notes field is not editable in the multi dive edit mode (as that didn't seem useful). The workflow seems to work best if using the multi-edit right after importing new dives from a dive computer. The user then can select all the new dives and only needs to edit things like location, divemaster, buddy, weights, etc. once. This commit will create some obvious conflicts with the commit that adds exposure protection tracking. It was implemented on top of the tree_view changes as it reuses some of the infrastructure for tracking the selected dives. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-14Add exposure protection trackingGravatar Dirk Hohndel
For simplicity and shortness, throughout subsurface exposure protection is simply referred to as "suit". Add the fields to the data structures, add the column to the dive_list and the preferences dialog (once again with it being turned invisible by default). Support loading and saving of the suit information. Display the suit information in the Dive Info pane (this may be a bit controversial as people could argue this should be in the Equipment pane) and allow editing of the suit info, with our usual support for completion and drop down lists to pick from. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-14Fixed a small memory leak in divelist.cGravatar Lubomir I. Ivanov
In fill_one_dive(), cylinder and location strings are obtained via get_string(), which needs to allocated a litte bit of memory. After passing the two pointers ('cylinder' and 'location') as arguments to gtk_list_store_set() it is safe to release them. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2012-08-14Fix selecting and unselecting summary itemsGravatar Dirk Hohndel
The dive list now seems to behave intuitively. In order to do this we had to intercept the select function in addition to having a selection-changed callback. That way we can simulate the multi-level selection and unselection that was missing. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-14Apply sort functions to the correct model, don't select summary entriesGravatar Dirk Hohndel
We only set up the column specific sort functions for the default (tree) model, which caused us to not sort correctly in the list model. This commit also somewhat cleans up the handling of selecting summary lines in the tree model, which includes the very first selection made at program start (which happens to be the very last dive). But it still doesn't work the way I expect it to work (i.e., the correct row is not highlighted). Fundamentally I would prefer clicks on the summary lines to instead select (or as ctrl-click, possibly deselect) all the dives under that summary entry. Still TODO. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-14Maintain selected rows when switching between list model and tree modelGravatar Dirk Hohndel
We keep track of the DIVE_INDEX of all selected dives and simply re-select those dives after changing model (date based sort or sort by other column). There are a few TODOs left. We lose the sort direction (ascending / descending) when switching models. We also don't correctly deal with the user selecting summary rows in the tree model. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-14Create duplicate list model so sorting by columns works againGravatar Dirk Hohndel
One major downside of the switch to a tree model is that sorting by columns other than date was broken - it would sort the entries within each date which is not all that useful. After playing with some Gtk trickery that would allow us to filter out those rows it quickly became clear that the much easier solution is to simply maintain TWO models (and therefore two storages). This causes some overhead and requires some careful tracking of all changes, but it turned out to be rather straight forward to do. dive_list now has three model related members: model - current model displayed (which is one of the following two) treemodel - the tree model listmodel - the list model One side effect is that the callbacks no longer can pass the model around (as this could have changed since the callback was registered), but that seems only a minor drawback and was easily addressed. The implementation in this commit still has a couple of obvious flaws: when switching back from the list model to the tree model all the expansion state of the rows is lost and we end up with just a list of the different years visible. Also, selections aren't maintained when switching models. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-14Improve tree model implementationGravatar Dirk Hohndel
We now support three hierarchy levels: day, month, and year. Each indicated by a negative DIVE_INDEX for -1 to -3. This allows a nice compact overview when doing date based sorting (the default). As indicated in the previous commit, things still go wrong with sorting by other columns as the entries are only sorted within each day, not globally across the whole dive list. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-13Allow date based groupingGravatar Dirk Hohndel
This is the very first rough cut. It switches things over to a tree model so we can have date based summary nodes. It uses a DIVE_INDEX of -1 for summary nodes to easily tell them apart from actual dives. All the data functions are changed so the summary nodes only show the date they cover. The commit also adds a couple of debug functions to be able to easily peek into the model from the debugger. Lots of things left to do. There is no longer a first dive selected when starting subsurface. Sorting by columns other than date is messed up. We almost certainly want month and year summary entries as well. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-10Don't print a total weight of 0 in the weight columnGravatar Dirk Hohndel
For consistency with the rest of the dive_list we should interpret "no weight systems recorded" as "no information" and therefore print nothing instead of printing a total weight of "0" for these dives. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-07Add total weight column to divelistGravatar Dirk Hohndel
This adds the total weight carried on the dive in different weight systems to the divelist. The column is by default not shown, which can be changed in the preferences. The column is sortable. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-06-27Make it possible to do "Add Dive" from just the main dive menuGravatar Linus Torvalds
No need for right-clicks. It's inconvenient on lots of laptops etc, so allow just using the Dive menu as an alternative. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-06-27Rough "Add new dive" infrastructure in the divelistGravatar Linus Torvalds
Do a right-click to get a menu with the "Add dive" entry. Should do delete too, but that's for later. What's also apparently for later is to make this *useful*. It's the butt-ugliest time entry field ever, and there's no way to set depth for the dive either. So this is more of a RFC than anything truly useful. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-03-16Show statistics of selected divesGravatar Miika Turkia
If at least 2 dives are selected, show statistics of these dives on Overall Stats. Otherwise, show the statistics of all dives. Temperature is also added to the shown statistics. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Minor change to avoid adding statistics.h (moved the global variable and external function declaration to display-gtk.h). Another minor change to the text displayed for the "Stats" notebook page. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-01-05Avoiding some potentially confusing name space clashesGravatar Dirk Hohndel
We have local variables or function arguments with the same names as function static variables (or in one case, function arguments). While all the current code was correct, it could potentially cause confusion when chasing bugs or reviewing patches. This should make things clearer. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-12-31Define O2 permille for air in one spotGravatar Henrik Brautaset Aronsen
Having the O2 permille defined once is more readable. Signed-off-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no>
2011-12-31Display OTU for dives using airGravatar Henrik Brautaset Aronsen
Zero o2 means 20.9% o2, which can be confusing... Signed-off-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no>
2011-12-18Use an ellipsis for Nitrox O2% rangesGravatar Linus Torvalds
The plain dash may look a bit too much like a trimix specification. Is the ellipsis better? Maybe. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-12divelist: show/sort nitrox dive oxygen percentage as a rangeGravatar Linus Torvalds
If you are diving multiple nitrox cylinders, we now show them as a range instead of just the max. We'll still sort by max O2 (and for the same max, by min O2). So now with trimix dives, we'll show the bottom gas (we assume that "highest He percentage" is that bottom gas), for nitrox dives we'll show the range of Oxygen percentage, and for all-air dives we'll show just "air". For simple nitrox dives (only a single mix), we'll obviously show just that single percentage. This should hopefully conclude the whole "show multiple cylinders in dive list" mess. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-11Make the dive gas record the single highest mixGravatar Linus Torvalds
.. using the regular sorting rules: sort by Helium content first, Oxygen content second. Air always sorts last (even behind the theoretical hypoxic Nitrox that nobody sane would use). This is what Don Kinney implies would be the natural thing for a trimix diver. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-11Add capability of custom sorts to divelist columnsGravatar Linus Torvalds
.. and use this for the nitrox column, which can now be more complex than just a single number. The rule for the "nitrox" column is now: - we look up the highest Oxygen and Helium mix for the dive (Note: we look them up independently, so if you have a EAN50 deco bottle, and a 20% Helium low-oxygen bottle for the deep portion, then we'll consider the dive to be a "50% Oxygen, 20% Helium" dive, even though you obviously never used that combination at the same time) - we sort by Helium first, Oxygen second. So a dive with a 10% Helium mix is considered to be "stronger" than a 50% Nitrox mix. - If Helium is non-zero, we show "O2/He", otherwise we show just "O2" (or "air"). So "21/20" means "21% oxygen, 20% Helium", while "40" means "Ean 40". - I got rid of the decimals. We save them, and you can see them in the dive equipment details, but for the dive list we just use rounded percentages. Let's see how many bugs I introduced. I don't actually have any trimix dives, but I edited a few for (very limited) testing. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-11Make sure to update divelist O2 information after editingGravatar Linus Torvalds
The divelist airmix display is kind of broken: it only looks at the first cylinder, and it only looks at Oxygen content, not Helium. But at least we can make sure to update it when somebody edits the cylinder information, instead of leaving it extra broken. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-11Make the cylinder table columns unsortableGravatar Linus Torvalds
They were never intended to be sortable, but using common code with the dive list picked up that "sort by index" thing by mistake. If we really want to be able to sort cylinders by O2 percentage (which really doesn't seem to make much sense, considering that you usually have just one or two cylinders) we will need to also handle the case of editing the (differently sorted) cylinder table. Which we don't do now. Reported-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-09Round the maximum depth on dive listGravatar Miika Turkia
Round maximum depth on dive list to get consistent data between the dive list and dive info. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-07Fix some issues with star rating codeGravatar Dirk Hohndel
To waste less space in the tree view heading we simply put a star in the heading instead of "Rating". We now treat "zero stars" to mean "not rated" and don't store that value in the XML file. Rating is no longer a top level tag in the dive entry but instead a property of the dive tag. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-12-07Add typical 0 to 5 star rating for divesGravatar Dirk Hohndel
This works ok-ish, but doesn't allow us to click on the stars and edit them in the divelist, which a user might expect to be able to do - in most "star rating UIs" you simply click on the n-th star to set that rating. Here you need to edit the dive and pick the rating from a drop down menu. Minor oddity: you can actually (if you force it) write anything you want into the star rating. But anything that isn't one of the predefined strings simply results in a zero star rating. Overall the UI feels a bit... forced. But I think this is quite useful anyway. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-11-21Exclude surface intervals from sac rate calculationGravatar Dirk Hohndel
We assume every sample with a depth of less than 10cm to be on the surface. This does not impact our interpolated pressures (one could assume that the diver is not breathing from the regulator when on the surface - but without air integration that's just an assumption). It also doesn't change our tank pressure coloring by sac rate as that always uses the momentary sac rate. Technically speaking this might impact the actual colors printed (as those are relative to the total sac on the dive which may go up due to this change). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-11-19Make double-clicking on the dive list bring up the dive editorGravatar Linus Torvalds
Now that the dive info window is read-only, we need to edit the dives some other way. We bring up a dive info edit dialog when you double-click on the dive list entry for that dive. I do want to have an "edit" button or keyboard shortcut or something too, though. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-17Merge branch 'sacplot' of git://github.com/dirkhh/subsurfaceGravatar Linus Torvalds
* 'sacplot' of git://github.com/dirkhh/subsurface: Color pressure plot according to current SAC rate Fix minor coding standard issues introduced by my last commit
2011-11-16Show dives "latest-first" by defaultGravatar Linus Torvalds
You can still order them by date by just setting the sort order on the date column, but normally you'd be more interested in the most recent dives. I tried to just scroll down to the last ones automatically instead, but gtk makes that *really* hard to do. If you do it in the natural place for it, the scroll bar wll show up later and then cover up the last entry anyway. So you'd have to do some crazy expose event thing or something. Which may be the right thing to do eventually anyway, but not worth the pain right now. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-16Show more of the dive location in the dive listGravatar Linus Torvalds
Randomly picked up to 60 characters. But maybe we should just get rid of the limit entirely. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-13Fix minor coding standard issues introduced by my last commitGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-11-13Make sure SAC and OTU get recalculated after cylinder info was changedGravatar Dirk Hohndel
Also fixed minor coding style issues (prevent useless code from being executed). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-11-09Fix up air use calculations for new pressure handlingGravatar Linus Torvalds
Make sure that we calculate air use by using the proper start/end pressures, with the manually set ones being used preferentially over any possible sample data. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-01Even more places with pressure and volume conversionsGravatar Dirk Hohndel
Amazing at how many spots we are re-implementing the wheel. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-11-01Use unit functions to get column headers, add unit function for pressureGravatar Dirk Hohndel
Finally getting more consistent overall in how we convert between the different units and how we decide which units to display. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-11-01More consistency improvementsGravatar Dirk Hohndel
Treat SAC and OTU consistently: - SAC is now a member of struct dive - it's calculated / populated at the same time with a helper function with consistent API Create get_volume_units function that returns volumes (e.g. used in SAC rates) based on preferred units - make sure we have these conversions just once in the code. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-10-23Disable sorting by dive numberGravatar Dirk Hohndel
This is based on Linus idea and code - just adding it to my UI branch in case he didn't actually add it to his code... It makes no sense to sort by dive number - every sane person will have dive numbers be chronological; so they can sort by date instead. But removing this option wastes less space and makes the dive list look much better Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-10-23Make columns for temperature, cylinder, and nitrox optionalGravatar Dirk Hohndel
Just like SAC and OTU these can now be turned on and off through the preferences. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-10-23Show dive number in dive listGravatar Dirk Hohndel
Make sure that renumbering the divelist correctly shows up on the display. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-10-20Allow multiple selections in the dive listGravatar Dirk Hohndel
At this point we don't do anything with this - the commit just provides the infrastructure changes so that this becomes possible. Subsurface behaves the same if exactly one dive is selected and simply keeps the last selected dive if zero or more than one dives are selected. The goal is to be able to select multiple dives and then do actions on them. For example pick a tank used for all of them. Or edit the location or (yet to be implemented) other equipment data like weight carried. And also to be able to merge multiple dives. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-10-02Split up generic code to generate a gtk tree view columnGravatar Linus Torvalds
We used to do this just for the dive list, but the new cylinder view will want to do a lot of the same boilerplate gtk stuff, so make it a bit more generic and move it to gtk-gui.c. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-27Add preference option to chose if SAC and/or OTU should be in divelistGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-09-26Make OTU column invisible by defaultGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>