aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2012-12-10Apply preference changes right awayGravatar Dirk Hohndel
This allows you to open the preference dialog, play with settings and see their effect right away. Press OK and you keep them, press Cancel and you are back to the previous state. As it should be. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-10Move global variables covered by Preferences into one structureGravatar Dirk Hohndel
Now we can simply remember the state of all the preferences at the beginning of preferences_dialog() and restore them if the user presses 'Cancel'. Fixes #21 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-09Rename on_delete function in statistics.cGravatar Dirk Hohndel
We made the one in gtk-gui.c a global function and now had a clash with the static one in statistics.c Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-09Add tank data to the print.Gravatar Salvador Cuñat
Add info of the used tanks, which isn't displayed by the dive plot, with a new function. The relative width and height are fixed in print(), so the function needs: - Modify the font size depending on the number of tanks. - As it uses translations, return to the original coords when ends. Modify print() acordingly with the new function. Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-09Separate show_dive_text() in two diferent functions.Gravatar Salvador Cuñat
Create a function show_dive_header() and show_dive_notes() as a first step to introduce other infos in diferent funcs. Modify print() acordingly to the new funcs. Signed-off-by: Salvador Cuñat <salvador.cunat@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-09Consistent Quit behavior on the MacGravatar Dirk Hohndel
We were responding to the wrong Quit signal on MacOS. The one we picked was the one that basically told us "it's too late to stop me, I'm quitting". I switched this to the one asking "should I prevent the app from quitting" and now we can indeed cancel the Quit, regardless which method was used to close the app. Also removes to unused variables. Fixes #22 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Initialize helper structure to 0sGravatar Dirk Hohndel
We check the pointers that are part of this structure for NULL before accessing them - but that means we need to zero out the structure for this to work. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Fix potential uninitialized readGravatar Dirk Hohndel
When analyzing the buffer that is handed to the first_object_id function we carefully check to make sure that we don't read past the end of the input buffer but there was still one code path that could have us do just that. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Fix off by one errorGravatar Dirk Hohndel
We increment i twice - which causes us to access memory past the end of the allocated array. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Fix embarrassing cut and paste bugsGravatar Dirk Hohndel
The previous commit 871d7ae0cdf5 "Add option to make ceiling visually stand out more in the profile" contained not one but two stupid cut and paste bugs. I cannot begin to explain how this could have worked when I first tested it. Reported-by: Jan Schubert <Jan.Schubert@GMX.li> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Add option to make ceiling visually stand out more in the profileGravatar Dirk Hohndel
While having the background "come down" seemed like a good visualization of the ceiling, some divers appear to prefer something more dramatic. This adds an option to the Tec Settings to have the ceiling shown in red instead of the default background color. Suggested-by: Jan Schubert <Jan.Schubert@GMX.li> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Move partial pressure plots up slightlyGravatar Dirk Hohndel
This way they don't clash with the dive computer model information that was added by commit a23ec27ca7bb "Add dive computer name to the dive plot". Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Move 'plot_info' into 'struct graphics_context'Gravatar Linus Torvalds
.. and then allocate just the plot-info entry array dynamically. We want to have a longer lifetime for the basic plot_info data structure, because we want to do computer selection and maximum time/depth/temperature computations *before* we start plotting anything, and before we allocate the plot entry array. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Add dive computer name to the dive plotGravatar Linus Torvalds
I want to have some way to show multiple dive computers, so start off by adding the name of the current one. So if we change dive computers, we'll see it. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Tune the dive joining surface event insert codeGravatar Linus Torvalds
From 178a3f0d6d5112f76943fec5f8c1c1f3b173a7f4 Mon Sep 17 00:00:00 2001 From: Linus Torvalds <torvalds@linux-foundation.org> Date: Fri, 7 Dec 2012 09:34:18 -0800 Subject: [PATCH 2/2] Tune the dive joining surface event insert code So this makes us do surface events only if the samples are more than one minute apart, and are shallow enough (randomly selected at 5m). We can add more heuristics. Maybe we should compare the 1-minute sample time limit of the previous sample to the time to the sample before that: if some computer (or manually entered dive) has a long time between *all* samples, we'd make the cut-off time longer. Baby steps. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07When merging downloaded dives, strive to keep old dive in 'a'Gravatar Linus Torvalds
This doesn't really change the logic of the merging, but it does mean that the end result tends to be less unexpected: when downloading dives that end up being merged with pre-existing dives (because you have multiple dive computers, for example), the newly downloaded dive data will tend to be appended to the old dive data, rather than showing up first. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-07Sort the divecomputers alphabetically and have fixed width dropdownGravatar Dirk Hohndel
Instead of just taking the vendors and products for the supported divecomputers in the order libdivecomputer provides them to us we sort them as we add them to our list of lists. While doing this we also track the longest product name and try to make sure that the combobox for the product is set to a fixed width that's wider then the longest product name. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-06Add two test dives that triggered the bug fixed in the previous commitGravatar Dirk Hohndel
Loading these two XML files created a divelist with two trips that each started at the same time but that were NOT linked together (because the code in insert_trip detected that they started at the same time). Since the trips were not linked together, trying to then merge those two trips from the UI got us into an infinite loop, trying to move a dive from one trip into the same trip (as the code couldn't find the trip that wasn't linked into the dive_trip_list). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-06Fix insert_trip to correctly deal with trips that start at the same timeGravatar Dirk Hohndel
The existing code did not move the dives that are part of the second trip to the first trip (and forgot to keep the 'better' notes as well). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-06Fix SIGSEGV when joining dives without dive computer informationGravatar Linus Torvalds
Handle the case where we have no divecomputer information. Reported-by: Sergey Starosek <sergey.starosek@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Prevent crash when no default device is setGravatar Dirk Hohndel
We were dereferencing the default device, even if not set. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Split dive computer selection into seperate vendor and product combo boxesGravatar Dirk Hohndel
The length of that combo box got increasingly insane as libdivecomputer supported more and more models. To make this more scalable we now have two combo boxes. One with just the vendors and a second one with the products depending on the vendor selected. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Fix deco/ndl support for libdivecomputerGravatar Dirk Hohndel
Several blatant mistakes prevented this from ever working. Now we correctly record ndl / stoptime / stopdepth in every sample and no longer issue bogus events. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Fix retrieval of object_id value in Uemis downloaderGravatar Dirk Hohndel
The existing code could read past the end of the buffer that was handed to it. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Improve reading of extra dive data for UemisGravatar Dirk Hohndel
When starting from the first dive on the dive computer we called getDive for every dive starting with id 0 instead of figuring out which id is actually the first one that we downloaded. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Fix saving of salinityGravatar Dirk Hohndel
Several things were wrong. - we saved it as floating point (that was stupid, given the locale issue with that and given the fact that the precision was really artificial) - we always saved it when set (we should only save it if the value is different from our default of 1030g/l == salt water) - most embarrassing - the unit we assigned was wrong. That's g/l, not kg/l... Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Change Uemis code to use locale indepent floating point parsingGravatar Dirk Hohndel
I clearly forgot about not using atof... now we use the locale safe g_ascii_strtod instead. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Turn latitude and longitude into integer micro-degree valuesGravatar Linus Torvalds
This actually makes us internally use 'micro-degrees' for latitude and longitude, and we never turn them into floating point either at parse time or save time. That said, the Uemis downloader internally does still use atof() when converting things, which is likely a bug (locale issues and all that), but I'll ask Dirk to check it out. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Save latitude/longitude using integer mathGravatar Linus Torvalds
I hate using floating point, this tries to at least make parts of it be integer logic, and avoid the whole locale issue. This still keeps the latitude and longitude internally as a floating point value, and parses it that way, but I'm slowly moving towards less and less FP use. We're going to use micro-degrees for location information: that's sufficient to about a tenth of a meter precision, and it fits in a 32-bit integer. If you specify dive sites with more precision than that, you may have OCD. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Pick up dive numbers from Uemis SDA when starting with empty data fileGravatar Dirk Hohndel
This is improving a bit more on commit d2dd0eb39efe "When starting with an empty data file and downloading dives, number them" by providing a better starting number when a user downloads dives from a Uemis SDA into an empty data file. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05When starting with an empty data file and downloading dives, number themGravatar Dirk Hohndel
We have been very careful not to mess with the numbering that a user may intend - but one obvious case where we should automatically number the dives appears to be the first time download from a dive computer. Right now all dives show up with number '0' and that's just really ugly and a bad experience for a first time user. With this change if a user starts with an empty data file and downloads dives from a computer for the first time, Subsurface will give them numbers starting with '1'. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-05Make it easier to pass macro definitions from makeGravatar Dirk Hohndel
This small change to the Makefile allows you to call make CLCFLAGS=-DDEBUG or some other define directly from the command line. It gets added to the CFLAGS without overwriting the CFLAGS. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-04Merge trips without modifying the GTK treeGravatar Lubomir I. Ivanov
This patch does 4 small divelist.c changes in the following order of importance: 1) In find_trip_by_time() now there is a check if a trip is actually found before looking at the "when" flag. 2) Make remember_tree_state() slighly safer. If for example we have recently deleted a trip from the linked list, it may still exist in the GTK tree model, thus we want to check when calling find_trip_by_time() if there is an actual match before setting the "expanded" flag for a trip. 3) When merging two trips in merge_trips_cb(), only use the tree model to retrieve the timestamps (DIVE_DATE) and then find matching trips with find_matching_trip(). Once we have pointers to the two trips to be merged, move dives from one to another iterating with add_dive_to_trip(). 4) In merge_trips_cb() - remember the tree state, repopulate the tree and restore tree state, since now we are not adding/removing rows directly. tesdsad Reported-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-04Improve automatic dive merging logicGravatar Linus Torvalds
This tunes the heuristics for when to merge two dives together into a single dive. We used to just look at the date, and say "if they're within one minute of each other, try to merge". This looks at the actual dive data, and tries to see just how much sense it makes to merge the dive. It also checks if the dives to be merged use different dive computers, and if so relaxes the one minute to five, since most people aren't quite as OCD as I am, and don't tend to set their dive computers quite that exactly to the same time and date. I'm sure people can come up with other heuristics, but this should make that easier too. NOTE! If you have things like wrong timezones etc, and the divecomputer dates are thus off by hours rather than by a couple of minutes, this will still not merge them. For that kind of situation, we'd need some kind of manual merge option. Note that that is *not* the same as the current "merge two adjacent dives" together, which joins two separate dives into one *longer* dive with a surface interval in between. That kind of manual merge UI makes sense, but is independent of this partical change. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-04Support the new NDL / deco code in the Uemis downloaderGravatar Dirk Hohndel
This also replaces the old heuristic for when we are in deco with the (hopefully correct) bits in the sample flags. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-04Improve deco handling and add NDL supportGravatar Dirk Hohndel
This commit changes the code that was recently introduced to deal with deco ceilings. Instead of handling these through events we now store the ceiling (which in reality is the deepest deco stop with all known dive computers) and the stop time at that ceiling in the samples. This also adds support for NDL (non stop dive limit) which both dive computers that appear to give us ceiling / deco information appear to give us as well (when the diver isn't in deco). If the mouse hovers over the profile we now add support for displaying the NDL, the current deco obligation and (if we are able to tell from the data) whether we are at a safety stop. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-04Change Uemis debug code to test for bit valuesGravatar Dirk Hohndel
This way individual pieces can be turned on and off. The commit also adds code to read from a disk image (instead of the SDA) without all the long timeouts. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-01Small cosmetic cleanups of Uemis downloader codeGravatar Dirk Hohndel
Just improving the messages a user gets. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-01Fix stupid error in last minute cleanup of Uemis rewriteGravatar Dirk Hohndel
Never make trivial changes without testing them. This was missung a '!' before the strcmp - so the wrong code got executed when trying to get the DeviceId and everything afterwards failed without a valid DeviceId. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-30Make more uemis functions staticGravatar Dirk Hohndel
These are no longer called from other parts of the code. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-30Remove the hack to mark parsed XML files as downloadedGravatar Dirk Hohndel
This was necessary for the Uemis downloader when we used the SDA file format as intermediary data format and imported that as XML buffer. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-30Remove the ability to import Uemis SDA filesGravatar Dirk Hohndel
The downloader has been integrated into Subsurface for a while and with the recent change to no longer have it create the old style SDA files as intermediary format there is no need anymore to support that format in the XML parser. This deletes almost 300 lines of code. Yay! Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-30Convert Uemis downloader to directly create divesGravatar Dirk Hohndel
The initial downloader reused the XML parsing of SDA files that was implemented early in order to support the information extracted from the SDA with the java applet. But creating this intermediary XML file and handing it off to the XML import function always seemed like an ugly way to do things. This became even more obvious when adding more features to the Uemis downloader. This commit completely changes the downloader to instead create dives and record them directly. This also adds support for divespots (which are stored in a seperate database that needs to be queried after the divelog and dive entries have been combined - the Uemis firmware clearly was written by monkeys on crack - oh wait: I'm trusting these same people to get the deco right?). This commit leaves the SDA import capability in the XML parser intact. I'll remove that later. Because of this it actually adds a few lines of code, but the overall change will be a substantial code deletion. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-28Track Uemis last dive downloaded on a per data-file basisGravatar Dirk Hohndel
Actually, it's even better than that. Thanks to the new divecomputer datastructure we can now simply look up in the dive_table which dives have been downloaded from this specific Uemis SDA. This patch removes the old gconf based code - which leads to one unfortunate problem: the first time a Uemis SDA owner runs this version of Subsurface against their data file ALL dives will be downloaded again (which may not be a bad thing as we have improved a few other details of Uemis support so now they get their deco information, surface pressure and other data that we have started to support since 2.1). Still, this is not ideal. But I didn't want to keep the legacy code around since this new solution is so much cleaner. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-28Updating events for libdivecomputer 0.3 (and tracking uemis support)Gravatar Dirk Hohndel
I was a little too eager to add the deco feature to Subsurface. Jef and I went back and forth a few more times and the definition of those events changed. I guess I shouldn't have commited that code until the corresponding libdivecomputer code had been pushed. This commit now brings us in sync with the current master of libdivecomputer (but should compile with 0.2 as well - only deco events won't work then). One issue that I see is that deco / ndl aren't really a good fit for the event model. I actually disabled the drawing of the little yellow triangles for ndl events as for example on the Uemis those events are created whenever the remaining non stop time changes - and that can be every few seconds. The correct solution may be to treat this as a function of the samples, but for now this works and is tested with both OSTC and Uemis SDA. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-28Count the actual decimal digits for importGravatar Miika Turkia
Apply the decimal time conversion hack for JDiveLog import if there are less than 2 digits in the decimal part (and value is less than 60). Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-26JDiveLog import fallback for 1 digit numbersGravatar Miika Turkia
Use the decimal time format fallback also for one digit numbers as Linus suggested. Thus 1.1 min would result in 1 min 6 sec. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-26Fix dive computer event handling if there are no samplesGravatar Linus Torvalds
This actually triggers for one of our insane test dives (test15): it has no samples, so we created a fake dive computer entry with the a fake profile in it, but we didn't copy the events over. Having a dive with no samples, yet having events from the dive computer, sounds pretty bogus. But that test-case did show that when that bogus situation happens, we had two independent buglets: (a) we didn't insert the entries in the fake dive computer entry we used and (b) we would then mix up the events of the fake dive computer entry with the first dive computer of a dive. Fix this, just to make test15 happy again. And eventually, when we actually plot the information for multiple dive computers, fixing case (b) would become necessary even for real dives. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-26Simplify tripflags: remove tripflag_names[]Gravatar Linus Torvalds
This removes the tripflag name array, since it's not actually useful. The only information we ever save in the XML file is whether a dive is explicitly not supposed to ever be grouped with a trip ("NOTRIP"), and everything else is implicit. I'm going to simplify the trip flags further (possibly removing it entirely - like I did for dive trips already), and don't like having to maintain the tripflag_names[] array logic. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-26Remove 'tripflag' from dive tripsGravatar Linus Torvalds
Both dives and dive trips have the same 'tripflag' thing, but they are used very differently. In particular, for dive trips, the only case that has any meaning is the TF_AUTOGEN case, so instead of having that trip flag, replace it with a bitfield that says whether the trip was auto-generated or not. And make the one-bit bitfields explicitly unsigned. Signed bitfields are almost always a mistake, and can be confusing. Also remove a few now stale macros that are no longer needed now that we don't do the GList thing for dive list handling, and our autogen logic has been simplified. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>