aboutsummaryrefslogtreecommitdiffstats
path: root/equipment.c
AgeCommit message (Collapse)Author
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-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-06Remove weightsystem entry with no descriptionGravatar Dirk Hohndel
This existed in the initial implementation to deal with an implementation problem that was long since resolved. So now it just created just an ugly empty line in the drop down menu for weightsystems. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-06Remember the last weight used per weightsystemGravatar Dirk Hohndel
With this change, if the user adds a new weightsystem to a dive, on subsequent edits the weight amount for this weightsystem no longer defaults to 0 but to the last weight that was used with this weightsystem. So when the program imports a set of dives from the divecomputer and the user starts editing them, once they enter the weight for the "integrated" weightsystem the first time, for each of the consecutive dives that same weight is the default once "integrated" is selected - which usually will be the correct amount. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-04-23Fix edit callback for weight systemGravatar Dirk Hohndel
Linus found this embarrassing bug: double clicking on a weight system in order to edit it launched the edit function for the first cylinder instead. Oops. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-04-01Fix reference tank information for LP steel tanks.Gravatar Linus Torvalds
Commit f9bb3f79106b ("Clean up reference tank information table") had cleaned up the tank info list so that you could sanely do tanks in liters and with a working pressure in bar. But the LP steel cylinders had somehow missed out on the ".psi =" part of the equation, and as a result, what was supposed to be their working pressure instead ended up being interpreted as their size in milli-liters. Oops. Fix that, and also make the standard tank info filling code actually verify the sanity of the reference tank table, so that if this happens again, it will complain loudly instead of using nonsensical values. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-03-23Merge branch 'weight' of git://subsurface.hohndel.org/subsurfaceGravatar Linus Torvalds
Pull weight management from Dirk Hohndel: "This is the fifth or sixth version of this code, I'm begining to lose track. I still struggle with the balance between code duplication and unnecessary indirectness and complexity. Maybe I'm just not finding the right level of abstraction. Maybe I'm just trying too hard. The code here is reasonably well tested. Works for me :-) It can import DivingLog xml files with weight systems and correctly parses those. It obviously can read and write weight systems in its own file format. It adds a KG/lbs unit default (and correctly stores that). The thing I still worry about is the code in equipment.c. You'll see that I tried to abstract things in a way that weight systems and cylinders share quite a bit of code - but there's more very similar code that isn't shared as my attempts to do so turned into ugly and hard to read code. It always felt like trying to write C++ in C..." * 'weight' of git://subsurface.hohndel.org/subsurface: Add weight system tracking Fix up some trivial conflicts due to various renaming of globals and simplification in function interfaces.
2012-03-24Add weight system trackingGravatar Dirk Hohndel
- supports multiple weight systems per dive - supports multiple weight system types - supports import of weight as tracked by DivingLog Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-01-05More removal of unused argumentsGravatar Dirk Hohndel
Just trying to clean up the code a bit. 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-26Remove unused return valueGravatar Dirk Hohndel
We never use the number of decimals that this function returns. So we might as well not return them to begin with. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-12-11Add the "Common European Cylinders" as per HenrikGravatar Linus Torvalds
This is Henrik's list of common metric sized cylinders, although my experience differs from this one. In Cyprus, I was diving double 12L cylinders, but they were 200 bar, not the 232 bar ones Henrik has on the list. Also, I really think we should just have a checkbox for "double" instead of naming them explicitly like this. Henrik does have the 12L 200 bar ones in his singles list. But as a stop-gap, I'm just taking the values from Henrik's patch, but converted to the new cleaned-up reference tank model setup. Based-on-patch-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-11Clean up reference tank information tableGravatar Linus Torvalds
This makes the reference tanks ("struct tank_info") use a saner format which specifies explicitly whether the size is in ml or cubic feet, and whether the pressure is in psi or bar. So instead of having magic rules ("size is in cuft if < 1000, otherwise mliter"), just set the size explicitly: { "11.1 l", .ml = 11100 }, { "AL80", .cuft = 80, .psi = 3000 }, and then the code can just convert to standard measurements without any odd rules, and the initialization table becomes self-explanatory too. This is in preparation for doing the metric tanks with pressure: Henrik Aronsen sent a really ugly patch using the previous setup, I just couldn't stand the additional hackery. 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-11Allow editing of Helium values in cylinder infoGravatar Linus Torvalds
Henrik Aronsen points out that we've not made it possible to edit the He percentages for trimix diving. It's easy enough to do, I just didn't have any dives that needed it myself. So here goes. Reported-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-12-09Use common helper function for the "no cylinder info" caseGravatar Linus Torvalds
Miika fixed the statistics code that didn't properly check for the "no cylinder info" case - this cleans it up and just uses the helper function in equipment.c. Rename the helper to be slightly better named while at it. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-19Add the cylinder list to the dive info edit dialogGravatar Linus Torvalds
This way, when you have a new dive that you just imported from your dive computer, you can just double-click on the dive and fill out all the relevant information: location, notes, buddies and cylinder info. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.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-18Make all the normal widgets uneditable and non-focusingGravatar Linus Torvalds
We always keep the focus on the dive list, so that the random gtk focus handling doesn't suddenly randomly make us edit the combo boxes when the cursor up/down keys start changing them instead of the dive list. This means that dive location, notes and buddy/divemaster aren't editable at all any more, but I'll fix that by making a separate dive edit popup window. 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-09Add "enable" button for manual pressure settingGravatar Linus Torvalds
This grays out the pressure settings in the cylinder editing widget if the pressure data has been taken from the samples. You can still manually override the data, but you now need to enable that manual override explicitly. This makes the semantics of editing start/end pressures of dives with pressure sample data a bit more intuitive, I think. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-09Keep the start/end spinbuttons as GtkWidgetGravatar Linus Torvalds
For graying things out, we want a widget, not a spinbutton. Although I'm sure we could just cast things back and forth. But let's be consistent with what we do, and only ever cast from GtkWidget to GtkSpinButton, and have the same logic as for the "o2" widget that also needs to be explicitly enabled. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-09equipment: clean up cylinder pressure spinbutton setupGravatar Linus Torvalds
This is just in case I end up doing the graying out of implicit pressure information: I wanted to clean things up a bit first. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-09Show the newly split pressures correctly in the equipment page tooGravatar Linus Torvalds
NOTE! When *editing* the cylinder data, the only thing shown is the non-sample pressure. So the cylinder editing widget will show zero for start/end pressure for a dive that has pressure saples without any manually set pressure data. This is intentional, so that you can clearly see that this is not a set value. But it may be that we should gray out the spinputton and have an "edit value" checkbox or something to make it really obvious. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-11-09If we don't have cylinder working pressure, we sill want to show the volumeGravatar Linus Torvalds
.. although in that case we can only ever show the volume in liters, and cannot do a conversion to cubic feet even if the user has set imperial units. 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-01Further cleanup of pressure and volume conversionsGravatar Dirk Hohndel
I'm amazed at how many spots we were doing conversions - some of them subtly different than others. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-10-23Add 'activate' callback for the cylinder completionGravatar Linus Torvalds
This makes us fill in the size/pressure data for a cylinder even if we just type the name (rather than pick an entry from the list) Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-22Add a completion for the cylinder type entry combo boxGravatar Linus Torvalds
This allows us to start typing the cylinder description and we'll get a matching list that we can select. This is similar to selecting one from the model, and works in addition to the explicit selection. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-22Add cylinder data to cylinder model as we record each diveGravatar Linus Torvalds
This way the cylinder model list will contain all the different cylinders that we have ever seen, rather than only containing the models that we have *edited*. That makes it much more practical to add new dives with the same cylinders that we've used before, because now those cylinders will show up as cylinder models even if we haven't looked and edited the old dives first. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-22Fix the reading of the cylinder start/end pressure from cylinder modelsGravatar Linus Torvalds
The cylinder model doesn't contain the start/end pressures, they just contain the cylinder type information. So trying to read the start and end pressure from the cylinder model change callback is totally bogus. We need to set the start/end pressures from the cylinder info when we create the cylinder widget, and not touch them when the type changes. So split up the "set_cylinder_spinbuttons()" function in two: one that sets the type information, and one that sets the start/end pressure. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-21Repaint dive after equipment change only after updating the cylinder infoGravatar Linus Torvalds
Repainting the dive will end up touching the cylinder list store, so we should finish setting the cylinder info before we repaint it. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-21Repaint the dive after equipment changesGravatar Linus Torvalds
Those changes may have changed cylinder sizes and beginning/end pressures, so the dive profile and SAC rate may be different. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-17Add start/end pressure to cylinder edit dialogGravatar Linus Torvalds
This finally allows you to set the start/end pressures by hand. HOWEVER! Right now, if we have samples with pressures, those samples will always end up overriding anything you set manually. Which can be very annoying if your wireless air integration fails halfway through. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02Remove cylinder index from cylinder list modelGravatar Linus Torvalds
Instead of having to keep the index up-to-date as we edit entries around, just figure out the entry index from the model itself. Gtk seems to make it unnecessarily hard, but what else is new? Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02Make cylinders editable with a double-clickGravatar Linus Torvalds
You can still just select them and click the "Edit" button too, but now you can double-click them (or select them and press "enter") for editing too. It seems to be the natural interface. Also, remove the index column (that was there for debugging), and add grid lines. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02Change calling convention of 'edit_cylinder_info'Gravatar Linus Torvalds
Instead of passing it the model and iterator (which requires that we create the new entry for an 'add' event even if we then cancel the operation), just make the caller do the final cylinder list update. This way we can make 'add' work more sanely: if you cancel the add, we now do not create an empty cylinder entry at the end. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02Make the cylinder 'delete' action actually delete the cylinder infoGravatar Linus Torvalds
It used to just update the cylinder list widget data, not the actual dive information. It still needs an "accept or cancel" dialog, I suspect. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02First cut at working cylinder editing dialogGravatar Linus Torvalds
This currently only does the same old things we used to do (so still no start/end pressure or trimix support), but despite that this is already more flexible than the old model: - we can now add new cylinders, rather than just edit the information of the first two cylinders of the dive - because the cylinder editing is being done in a edit dialog, it is now much more reasonable to use multiple lines and expand all the things we can edit. But to actually make this fully fledged, we'll need to add all the other info to the cylinder edit dialog, and probably add a confirmation dialog for the "delete cylinder" case too. Oh, and right now deleting a cylinder doesn't mark the dive info changed. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02Start hooking up the cylinder editing widgetGravatar Linus Torvalds
We don't actually fill the widget info correctly yet, nor do we take the actual size from the changes, but this starts to hook things up. Soon. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02Add the ability to add new cylindersGravatar Linus Torvalds
This is totally useless since you cannot actually *edit* the resulting new dive yet, but we'll get there. And this already conceptually shows a capability that we didn't use to have with the old interface. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02cylinder list: set edit/delete button sensitivityGravatar Linus Torvalds
They are only sensitive when there is a cylinder selected. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-10-02Start re-organizing the cylinder entry in equipment.cGravatar Linus Torvalds
This leaves the actual editing code unconnected, so now you can only see the cylinder information, not actually edit it. However, with the big re-organization I really do want to have this as a half-way point where I have created the new cylinder tree-view. I now need to connect the "add/edit" buttons to dialogs that then use the editing widgets - so I've left that widget code around, because I'll be able to reuse a lot of it. Not all, but the cylinder type model code in particular will be re-used pretty much as-is. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-29Allow larger tanks (change maximum from 200 to 300 cuft)Gravatar Dirk Hohndel
We don't handle doubles any different than single tanks - so while 200 cuft was a sane maximum size for a tank, once you dive with doubles this logic fails. We may or may not decide to implement special handling for doubles at some point, but for now simply allow for tanks all the way up to double-150. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-09-21Tracking changes to tanks is trivialGravatar Dirk Hohndel
That's the one I should have started with. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-09-20Separate out the UI from the program logicGravatar Dirk Hohndel
The following are UI toolkit specific: gtk-gui.c - overall layout, main window of the UI divelist.c - list of dives subsurface maintains equipment.c - equipment / tank information for each dive info.c - detailed dive info print.c - printing The rest is independent of the UI: main.c i - program frame dive.c i - creates and maintaines the internal dive list structure libdivecomputer.c uemis.c parse-xml.c save-xml.c - interface with dive computers and the XML files profile.c - creates the data for the profile and draws it using cairo This commit should contain NO functional changes, just moving code around and a couple of minor abstractions. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2011-09-20Make 'struct DiveList' entirely internal to divelist.cGravatar Linus Torvalds
Passing it around is just annoying, and we only ever have one. Let's not burden all the users with the silly thing. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-20Add "Apply"/"Cancel" buttons to dive equipment pageGravatar Linus Torvalds
It's too damn easy to make mistakes and not even notice them (odd gtk widget selection and keyboard input), or just start editing a cylinder thing and realize it was wrong. So instead of always saving the equipment information implicitly, add explicit "Apply" and "Cancel" buttons that save the information (or re-load it from the dive data structure) So now you need to press an extra button for your changes to *really* take effect. It can be a bit annoying, but it's better than the silent accidental equipment change that could happen before. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-13Separate the notion of creating the cylinder widgets from showing themGravatar Linus Torvalds
Now we always create the MAX_CYLINDER sets of cylinder widgets. But we don't actually pack them into the frame - that's a separate phase. Right now we still do the stupid "always just pack two cylinders" thing, but the idea is that we can pack just as many as the dive needs on a per-dive basis. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>