summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2013-01-09Move device_info handling into a new 'device.c' fileGravatar Linus Torvalds
The legacy nickname wrappers (that use the device_info structure) are left in gtk-gui.c. We can slowly start moving away from them, we don't want to start exporting that thing as some kind of generic interface. This isn't a pure code movement - because we leave the legacy interfaces alone, there are a few new interfaces in device.c (like "create a new device_info entry") that were embedded into the legacy "create nickname" code, and needed to be abstracted out. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-09Rename 'dcnicknamelist' struct as 'device_info'Gravatar Linus Torvalds
We'll start recording more than just nicknames in it, like serial numbers and firmware version etc. Start off just renaming it, and re-ordering the members to reflect how the nickname is not the primary issue. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-09Clean up duplicated depth interpolationGravatar Linus Torvalds
We have several places where we interpolate the depth based on two samples and the time between them. Some of them use floating point, some of them don't, some of them meant to do it but didn't. Just use a common helper function for it. I seriously doubt the floating point here really matters, since doing it in integers is not going to overflow unless we're interpolating between two samples that are hours apart at hundreds of meters of depth, but hey, it gives that rounding to the nearest millimeter. Which I'm sure matters. Anyway, we can probably just get rid of the rounding and the floating point math, but it won't really hurt either, so at least do it consistently. The interpolation could be for other things than just depth, but we probably don't have anything else we'd want to interpolate. But make the function naming generic just in case. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-09Add support to planner to use additional gases during the ascentGravatar Dirk Hohndel
This change ended up being quite a bit bigger than expected as it uncovered a number of bugs in the existing code. The planner now handles gas changes correctly by creating (and later parsing) events in the simulated divecomputer. At the end of the dive specified in the input form the algorithm starts with the deepest interesting depth: either the first stop below our ceiling or the deepest depth at which we can change gases. It then traverses all the stop and all the gas change depth and at each stage ensures that we are allowed to ascend further before going on. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Allow special entries in diveplan for available gasesGravatar Dirk Hohndel
An entry with no time is considered special and not considered when constructing the profile. This should allow us to add support for two different ways of adding information about available gas: changedepth 0 gasmix 0 0 gasmix @ po2 The first syntax basically says "during the ascent, switch to this gas at this depth. The second one says "switch to this gas once the pO2 allows for it" Neither of these are implemented, yet, but this commit is necessary in order for the rest of the code to ignore entries with a time field of 0. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Undo unintentional change to deco.cGravatar Dirk Hohndel
In commit d163a68ac69e "Clean up the rewritten deco.c" I apparently made one more change than I intended - I changed the last deco stop back to 3m instead of allowing the smooth mode to go all the way back to 0 without any discrete steps. This fixes that mistake. Reported-by: Robert C. Helling <helling@lmu.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Set a default surface pressure for dive plan and allow simplistic printGravatar Dirk Hohndel
This commit makes sure we have a reasonable default surface pressure (we need an input field for that). It also adjusts the debug level settings so that compiling this with make CLCFLAGS=-DDEBUG_PLAN=3 will print out an almost usable dive plan. This is of course still lacking air consumption calculations and will show deco stops that we just transit through (if the ceiling lifts far enough during the transition to an intended stop that this stop can be skipped; this sometimes happens for the first stop (haven't seen it for a later one). But it's better than nothing, I guess. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Do planned deco stops in multiples of 1 minuteGravatar Dirk Hohndel
We may want to make this configurable, but I haven't seen any software that doesn't do deco stops in full minutes. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Fix the deco calculation in the dive plannerGravatar Dirk Hohndel
The existing code incorrectly started all calculation at the depth at the end of the first segment. So if you went to 50m in 5min in your first segment, you incorrectly got 5 minutes at 50m (instead of a progression from 0 to 50m, over 5 minutes). This commit fixes that and now gives us planned dives that then match what is shown in the profile. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Improve travel logic code for the ascent in the plannerGravatar Dirk Hohndel
This shouldn't change the the actual stops we do or the travel time how we get there, but it makes the code more logical. From the end depth of the planned dive we have ONE transition to the first stop depth (which may be the surface). And then for every stop we (potentially) have a wait and travel to the next stop. Once we are in the while loop, we know that we are at a stop level, so there is no point to keep checking if we first need to transition to the stop. It does create one additional improvement: if we don't need any stops at all, then we don't transition to the first stop and then from there to the surface. We do it in one step. The overall profile / traveltime remains the same, we just drop one intermediate sample on the way. This also improves a few ugly (and in one case, wrong) debug statements. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Minor cleanupsGravatar Dirk Hohndel
Coding style in deco.c. Unneccessary if clause in profile.c (the loop starts with i = 1) Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Really prevent time travel in planner dive editGravatar Dirk Hohndel
Commit c92e4535a6de "Prevent time travel in planner dive edit" almost got it right but had a stupid think-o. This commit should fix it the right way. If the duration that is passed in is before the previous timestamp, then this is most likely intended to be a relative time. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Fix deco display bug for dives with multiple samples at the same timeGravatar Dirk Hohndel
While one might argue that multiple samples with the same time are 'odd' that still shouldn't be an excuse to incorrectly reset the ceiling value for them back to 0. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Fix deco planning for low oxygen mixesGravatar Jan Schubert
Not sure about the future of the current planner.c as we have new approaches now but as this annoyed me for some days now I just decided to come up with this trivial stuff to make my life easier. More a cosmetic fix than a patch, but actually it fixes a bug one might face planing a dive using low oxygen mixes and where stop levels at just 90m, 60m, 30m and nothing in between will not allow subsurface to finish a deco ceiling which ends before the universe collapses. Allows to plan 20min@130m using a 10/70 now (f.i.). Signed-off-by: Jan Schubert / Jan.Schubert@GMX.li Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Clean up the rewritten deco.cGravatar Dirk Hohndel
In commit a7902f279a57 "Rewrite of the deco code" Robert kept the old code that he replaced around; I removed all that as it's in the git history if we ever need to look at it again but doesn't really help us in the file as it is. I also removed constants, variables and config parameters that aren't used in the new implementation and did some coding style / formatting changes to make deco.c more consistent with the rest of Subsurface. I also updated the comments at the top of the file to reflect reality. I did one change that actually affects the code. In the explanation of his changes Robert said that gf_low_pressure_this_dive is initialized to the exquivalent of 20m, yet his code added the surface pressure twice. I decided to change the default config value from 3 (bar) to 2 so that this indeed reflects (about) 20m (as in the code below surface_pressure is added to this value). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Rewrite of the deco codeGravatar Robert C. Helling
o) Instead of using gradient factors as means of comparison, I now use pressure (as in: maximal ambient pressure). o) tissue_tolerance_calc() now computes the maximal ambient pressure now respecting gradient factors. For this, it needs to know about the surface pressure (as refernce for GF_high), thus gets *dive as an argument. It is called from add_segment() which this also needs *dive as an additional argument. o) This implies deco_allowed_depth is now mainly a ambient-pressure to depth conversion with decorations to avoid negative depth (i.e. no deco obliation), implementation of quantization (!smooth => multiples of 3m) and explicit setting of last deco depth (e.g. 6m for O2 deco). o) gf_low_pressure_this_dive (slight change of name), the max depth in pressure units is updated in add_segment. I set the minimal value in buehlmann_config to the equivalent of 20m as otherwise good values of GF_low add a lot of deco to shallow dives which do not need deep stops in the first place. o) The bogus loop is gone as well as actual_gradient_limit() and gradient_factor_calculation() and large parts of deco_allowed_depth() although I did not delete the code but put it in comments. o) The meat is in the formula in lines 147-154 of deco.c. Here is the rationale: Without gradient factors, the M-value (i.e the maximal tissue pressure) at a given depth is given by ambient_pressure / buehlmann_b + a. According to "Clearing Up The Confusion About "Deep Stops" by Erik C. Baker (as found via google) the effect of the gradient factors is no replace this by a reduced affine relation (i.e. another line) such that at the surface the difference between M-value and ambient pressure is reduced by a factor GF_high and at the maximal depth by a factor GF_low. That is, we are looking for parameters alpha and beta such that alpha surface + beta = surface + gf_high * (surface/b + a - surface) and alpha max_p + beta = max_p + gf_low * (max_p/b + a - max_p) This can be solved for alpha and beta and then inverted to obtain the max ambient pressure given tissue loadings. The result is the above mentioned formula. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Fix gas handling in the plannerGravatar Dirk Hohndel
The dive will start with gas 0. If things change during the planned part of the dive, this will be represented by an event. Use the last gas for the ascent. Obviously this still doesn't handle deco gases, but at least we now no longer switch back to the first gas after the planned part of the dive. This also adds quite a bit of debugging code to be able to trace what's happening in the planner. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-08Avoid pointless calls to dive plannerGravatar Dirk Hohndel
Stupid Gtk. Seriously. So in order to get a notification if the user selects the drop down for the gas with the mouse I need to connect to the "changed" signal for the combobox. But that also fires whenever the user types something into the GtkEntry. Which means we once again get called for all kinds of silly partial names. Instead we want to handle the manual entry in the "focus-out" callback (the user has hit tab or something else to move away from the GtkEntry - let's assume that this is the text he wants us to use) and only respond to the changed signal on the combobox if the user selected something from the dropdown. The easiest way to do that (I think) is to check the text with the strings stored in the model. If this indeed matches a string stored in the model then most likely this is something the user selected from the dropdown. But more importantly if it isn't in the model, then we KNOW that this is just a partial string that was typed in. And we can ignore that one. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Prevent time travel in planner dive editGravatar Dirk Hohndel
If the user enters an absolute time that is before the previous waypoint, silently assume that this is a relative time. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Don't walk back in timeGravatar Linus Torvalds
A strange and buggy dive where time goes backwards (right now easy to create with the dive plan editor) can cause us to run out of plot info elements. This prevents that from causing memory corruption by refusing to go back in time. Reported-by: Dirk Hohndel <dirk@hohndel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Improve dive trip sort comparison functionGravatar Linus Torvalds
We do want to compare "loose" dives too, but we need to be a bit careful, and always use the trip date as the primary sort key for any dives that are not in the same trip. Reported-and-tested-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Fix cylinder printout informationGravatar Salvador Cuñat
Good night. Here is the corrected patch. It would need to be tested in other languages because of the size of the units string in imperial. It performs well in spanish and (I supose) in english, but if a language make grow the string it could easily be wrapped and make a mess. On Mon, Jan 07, 2013 at 10:50:31AM -0800, Dirk Hohndel wrote: > > Thanks. I appreciate your patience with this. I'm very happy for every > contibutor we have and I am especially happy to have someone working on > the print layout code. > Thaks to all of you, Dirk, for all your efforts in the gui, the deco, the planner ... That's the real hard work. Regards. Salva. From 51dace93a1dae68960fee2229d4f274e8e4543fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salvador=20Cu=C3=B1at?= <salvador.cunat@gmail.com> Date: Mon, 7 Jan 2013 22:58:09 +0100 Subject: [PATCH] Add SAC to the printout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add the SAC to the printout, displacing the less utils OTUs. - Substitute repetitive math operations with variables. - Correct bad translations (correct with *0.90 scaling). Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Make Cancel work in dive planner dialogGravatar Dirk Hohndel
With this a partially planned dive is indeed thrown away when hitting Cancel. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Simplify dive planning codeGravatar Linus Torvalds
This simplifies the dive planning code by: - allowing empty gas mixes (which means "pick previous gas") - avoiding unnecessary strdup/free calls (this requires us to handle "const char *" in the parsers, but that was already true from a code standpoint, just not a type one) - re-use the "plan()" function for a successful dive plan, rather than open-coding the dive plan segment handling. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Add bailout code to prevent infinite loop in deco calculationGravatar Dirk Hohndel
This appears to happen if we have impossible dive sequences in the dive_list (i.e., merging XML files from two different divers with overlapping trips). We need to fix the underlying cause for this issue (i.e., only pick the 'right' dives to calculate the residual tissue saturation), but at least this code prevents the hang in an infinite loop. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Fix two bugs with the gas entry code in the dive plannerGravatar Dirk Hohndel
First, I forgot to pass in the idx into the gas callback function - this way for the dynamically created dives we always used air for anything but the first segment. Second, when selecting a gas from the drop down (with the mouse or by typing), the GtkEntry doesn't receive that text and therfore we never picked up those gases. We now also track the 'changed' event for the GtkComboBox, but never add the text we get their to the completions (as by definition they are already there). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Add simple debug function to plannerGravatar Dirk Hohndel
This allows you to dump the diveplan structure Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Move planner UI into planner.cGravatar Dirk Hohndel
There should be NO other changes in this commit - just moving the code and adjusting the includes (and adding the entry point to display-gtk.h). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Remove the now obsolete hard coded test_planGravatar Dirk Hohndel
This was just a crutch to get something out there for people to play with. With the ability to input a plan in place this is now obsolete. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Dive planner: add gas change events & start dive with the correct gasGravatar Dirk Hohndel
When incrementally building dives with gas changes there are still some serious issues and inconsistencies. But at least now the gases in the dive we create appear to be correct. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Support relative times in diveplanner input "on the fly" modeGravatar Dirk Hohndel
This had gotten lost when updating the profile on the fly. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Do pressure-time integral using integer valuesGravatar Linus Torvalds
Now that the pressure_time calculations are done in our "native" integer units (millibar and seconds), we might as well keep using integer variables. We still do floating point calculations at various stages for the conversions (including turning a depth in mm into a pressure in mbar), so it's not like this avoids floating point per se. And the final approximation is still done as a fraction of the pressure-time values, using floating point. So floating point is very much involved, but it's used for conversions, not (for example) to sum up lots of small values. With floating point, I had to think about the dynamic range in order to convince myself that summing up small values will not subtly lose precision. With integers, those kinds of issues do not exist. The "lost precision" case is not subtle, it would be a very obvious overflow, and it's easy to think about. It turns out that for the pressure-time integral to overflow in "just" 31 bits, we'd have to have pressures and times that aren't even close to the range of scuba cylinder air use (eg "spend more than a day at a depth of 200+ m"). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-07Don't bother with "correct" units for the pressure_time calculationGravatar Linus Torvalds
I fixed the pressure-time calculations to use "proper" units, but thinking about it some more, it turns out that units don't really matter. As long as we use the *same* unit for calculating the integral, and then re-calculating the step-wise entries, the units will cancel out. So we can simplify the "pressure_time()" function a bit, and use whatever units are most natural for our internal representation. So instead of using atm, use "mbar". Now, since the units don't matter, this patch doesn't really make much of a difference conceptually. Sure, it's a slightly simpler function, but maybe using more "natural" units for it would be worth it. But it turns out that using milli-bar and seconds has an advantage: we could do all the pressure_time integral using 32-bit integers, and we'd still be able to represent values that would be equivalent to staying at 24 bar for a whole day. This patch doesn't actually change the code to use integers, but with this unit choice, we at least have that possibility. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Split up helper functions for interpolating gas pressureGravatar Linus Torvalds
This splits up the function to create the estimated pressures for missing tank pressure information. The code now has a separate pass to create the beginning and ending pressures for segments that lack them, and fill them in to match the overall SAC-rate for that cylinder. In the process, it also fixes the calculation of the interpolated gas pressure: you can see this in test-dive 13, where we switch back to the first tank at the end of the dive. It used to be that the latter segment of that cylinder showed in a different color from the first segment, showing that we had a different SAC-rate. But that makes no sense, since our interpolation is supposed to use a constant SAC-rate for each cylinder. The bug was that the "magic" calculation (which is just the pressure change rate over pressure-time) was incorrect, and used the current cylinder pressure for start-pressure calculation. But that's wrong, since we update the current cylinder pressure as we go along, but we didn't update the total pressure_time. With the separate phase to calculate the segment beginning/ending pressures, the code got simplified and the bug stood out more. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Fix pressure_time calculation for SAC-rateGravatar Linus Torvalds
The code was using bar, not atm to calculate the pressure_time multiplier. But SAC-rate is relative to atm. We could do the correction at the end (and keep the pressure_time in "bar-seconds"), but let's just use the expected units during the integration. Especially since this also makes a helper function to do the calculations (with variables to keep the units obvious) instead of having multi-line expressions that have the wrong units. This fixes what I thought were rounding errors for the pressure graphs. They were just unit confusion. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Split up and re-organize the plot entry calculationsGravatar Linus Torvalds
This splits up the (very complex) function that calculates all the plot info data, so that the gas pressure logic is in several helper functions, and the deco and partial pressure calculations are in a function of their own. That makes the code almost readable. This also changes the cylinder pressure calculations so that if you have manually set the beginning and end pressures, those are the ones we will show (by making them fake "sensor pressures"). We used to shopw some random pressure that was related to the manually entered ones only distantly (through various rounding phases and the SAC-rate calculations). That does make the rounding errors more obvious in the graph, but we can fix that separately. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Display dive profile of the dive we plan, as we plan itGravatar Dirk Hohndel
As the user enters data into the entry fields, that data is validated and as soon as there is enough data we start constructing a dive profile, including the final ascent to the surface, including required deco stops, etc. This commit still has some serious issues. - when data is input that doesn't validate, we just print a warning to stdout - instead we need to change the backgroundcolor of the input field or something. - when we switch to the last dive in order to show the profile we don't actually search for the last dive - we just show the first one in the tree. This works for the default sort order but is of course wrong otherwise I'm sure there are many other bugs, but I want to push it out where it is right now for others to be able to take a look. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Remove Linus' plan input UIGravatar Dirk Hohndel
This was added in commit 594da00612ab "Do a minimal hook-up of the dive plan tree view to the actual planning" and has been replaced by a different UI in subsequent commits. No point in keeping it around. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Do a better job at creating plot info entriesGravatar Linus Torvalds
This simplifies - and improves - the code to generate the plot info entries from the samples. We used to generate exactly one plot info entry per sample, and then - because the result doesn't have high enough granularity - we'd generate additional plot info entries at gas change events etc. Which resulted in all kinds of ugly special case logic. Not only for the gas switch, btw: you can see the effects of this in the deco graph (done at plot entry boundaries) and in the gas pressure curves. So this throws that "do special plot entries for gas switch events" code away entirely, and replaces it with a much more straightforward model: we generate plot entries at a minimum of ten-second intervals. If you have samples more often than that, you'll get more frequent plot entries, but you'll never get less than that "every ten seconds". As a result, the code is smaller and simpler (99 insertions, 161 deletions), and actually does a better job too. You can see the difference especially in the test dives that only have a few entries (or if you create a new dive without a dive computer, using the "Add Dive" menu entry). Look at the deco graph of test-dive 20 before and after, for example. You can also see it very subtly in the cylinder pressure curves going from line segments to curves on that same dive. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Add the ability to cache our deco stateGravatar Dirk Hohndel
We kept reduing all the deco calculations, including the previous dives (if any) for each segment we add to the dive plan. This simply remembers the last stage and then just adds to that. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-06Planner: hook the gas combo box to a "focus-out" event handlerGravatar Lubomir I. Ivanov
GTK's logic might be a bit flawed (or complicated) in terms of "focus-out-event" and GtkComboBoxEntry objects as it does not work by attaching said signal type directly to the GtkComboBoxEntry. Perhaps it only makes sense for text input. Since "focus-out-event" works for GtkEntry, we can retrieve the child GtkEntry from the combo using gtk_bin_get_child(GTK_BIN(combo) and attach the event handler to that. This change should make it possible to update gas_model (GtkListStore) when changing the widget focus with both the keyboard and mouse clicks. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Make the dive plan input much more compactGravatar Dirk Hohndel
Have the frames just for the top row and get rid of all of the extra space in the layout. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Add new gases to the combo box in dive plan entryGravatar Dirk Hohndel
Once again Gtk does everything it can to make our lives miserable. It requires major hackery to be able to add new gases to the drop down lists "on the fly". Right now this only works if you edit the gas and then use Tab to move to the next field. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Make the 'Add waypoint' button work in the Input Plan dialogGravatar Dirk Hohndel
Just after pushing out the last set of changes I had one more idea what I could try. And of course that was it. Don't queue up a redraw. Simply run gtk_widget_show_all on the dialog! That does the trick. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Different widget to input the planGravatar Dirk Hohndel
Linus' treeview for the plan input is just too ugly for words. And doesn't work, either. So let's go with plan C: a table of waypoint entries. Depth, duration (or absolute time), and gas used. The gas is a combobox that does completion. I am reusing Linus' validation functions / parsers. This works if you can fit your dive into the four waypoints that are there by default. The add waypoint button is hooked up but even though it does what I think should modify the dialog that is currently displayed that clearly doesn't work. But at least it "mostly" works and isn't as horrifyingly uggly as the first two attempts. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Do a minimal hook-up of the dive plan tree view to theGravatar Linus Torvalds
actual planning Yes, you can actually enter your segments now. No, it's not wonderfully user-friendly. If you don't enter enough segments to create a dive plan, it will just silently fail, for example. And the <tab> key that should get you to the next editable segment doesn't. And so on. But it kind of works. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Create the infrastructure for a dive plannder based on a tree-modelGravatar Linus Torvalds
This doesn't actually do the real work yet, but it creates all the infrastructure to edit a tree model, and verify the contents for time, depth and gas mix. Now we just need the ability to add entries to the tree model (this adds one fake one, just to test the editing), and then read out the final end result and turn it into a plan. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Stub out a few things for a plan input UIGravatar Dirk Hohndel
This is not doing anything (which is why there are so many unused variable warnings). It's just a couple of entries lined up to give a visual impression how some of this could look. I am not a UI designer. And there are good reasons for that... Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Fix bug in smooth ceiling modeGravatar Dirk Hohndel
The ceiling calculations for the gradient factors still had a 3m increment hardcoded. This is now also conditional on the smooth parameter. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-05Fix profile display for dives with no samplesGravatar Linus Torvalds
For dives with no samples, we crate a fake dive computer with a set of made-up samples and use those to display the profile. However, the actual calculations to do the maximum duration and depth etc were always done with the "real" dive information, which is empty. As a result, the scale of the plot ended up being bogus, and part of the dive would be missing. Trivially fix by just passing the same dive computer information to calculate_max_limits() that we use for everything else. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>