summaryrefslogtreecommitdiffstats
path: root/gtk-gui.c
AgeCommit message (Collapse)Author
2013-01-03Add configurable visualization of calculated ceilingGravatar Dirk Hohndel
This is on top of the deco information reported by the dive computer (in a different color - currently ugly green). The user needs to enable this via the Tec page of the preferences. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-02Use old style (pre gtk-2.22) keysymsGravatar Dirk Hohndel
And include the compatibility header to build on newer versions. Reported-by: Salvador Cuñat <salvador.cunat@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-01Remove autogroup from the preferences and store per file insteadGravatar Dirk Hohndel
Having two spots to toggle autogroup had always been a clear sign of insanity. The inconsistent ludicrous semantic of when we remembered the state of autogroup was even worse. This finally gets rid of that disaster and drops the autogroup setting from the preferences and makes it instead a per file property. When you save a file, it saves the state of the autogroup toggle. This seems much more useful - you may have files where you want to create trips by default. And others, where you don't. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-01Make sure remember_dc has its own copy of the model stringGravatar Dirk Hohndel
When called from the parser the model string is freed right after passing it to remember_dc. So we need to get our own copy. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-01Add ability to remove a divecomputer from our data structuresGravatar Dirk Hohndel
Right now this isn't used but it will be needed for the yet to be written UI to manage our divecomputer database. This commit also fixes an oversight in the remember_dc function. Updates to nicknames weren't committed to the config. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-01Use the Left and Right keys to switch between divecomputersGravatar Dirk Hohndel
The existing code had the somewhat retarded Ctrl-C binding for displaying the next divecomputer and no way to go back to the previous one. With this commit we use our keyboard grab to map Left and Right to previous and next divecomputer. Much nicer. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-01-01First step towards grabbing keys and handling them ourselvesGravatar Dirk Hohndel
This commit steals the cursor up and down keys away from gtk so regardless where gtk thinks the focus may be, we can still use the keys to change between dives. In the current UI design where all editing happens in separate windows this works as expected, as we only grab the keys for the main window. If we manage to re-enable in-place editing then we need to make sure that this doesn't cause problems (as gtk uses up/down for the ability to change drop down selections in combo boxes or values in spin buttons. So we must make sure that we stop stealing these keys once we start editing something (in which case simply switching to the next/prev dive wouldn't be a good thing, anyway). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-30Fix nickname saving in XML file to deal with utf8 charactersGravatar Dirk Hohndel
This makes the whole code much cleaner and simpler. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-28Make add_dc_to_string() skip redundant entriesGravatar Linus Torvalds
There is no point writing out divecomputer nicknames that do not exist (or that match the dive computer model), so don't. Also, make the function to do this static to save-xml.c, which is the only user (I initially didn't _find_ the function to create the XML string because it was illogically hidden in gtk-gui.c), and change the calling convention to be more direct (pass in a string and return a result, rather than modify a "pointer to string"). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-28Divecomputer entries with deviceid 0 should be ignored for nicknamesGravatar Dirk Hohndel
Those only come from a number of development versions of Subsurface that didn't include the deviceid in the divecomputer entry. There is no way of telling different dive computers (of the same model) apart, so assigning a nickname to such an entry then creates incorrect output when loading an XML file from someone else (e.g. Linus and I both have a Uemis SDA and both may have entries for our own SDA with deviceid 0; then the nickname Subsurface shows for any Uemis SDA entry with a deviceid of 0 depends on whether I last loaded his XML file or mine; that makes no sense). This should only affect the develoers who stored XML files with one of the development version of Subsurface that didn't store deviceids. Reported-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-27Fix incorrect memory access in nickname handlingGravatar Dirk Hohndel
There was one code path where we didn't strdup the nickname - and this got triggered when parsing XML files with divecomputerid entries for dive computers that were already in the config. The nickname is then replaced with the nickname from the parser - and that memory is later reused... We should cleanup that nickname, anyway, and that also takes care of making sure we have our own copy. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-26Add settings section to XML file format and store dive computer IDsGravatar Dirk Hohndel
We only store the model/deviceid/nickname for those dive computers that are mentioned in the XML file. This should make the XML files nicely selfcontained. This also changes the code to consistently use model & deviceid to identify a dive computer. The deviceid is NOT guaranteed to be collision free between different libdivecomputer backends... Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-23Different is different from the same (fix silly bug in nickname handling)Gravatar Dirk Hohndel
Trying to simplify the API for nickname handling I went a bit too far. We indeed need to different API calls, one that returns an entry in the nicknamelist for the deviceid that we have. And one that looks if there is an entry for a different deviceid but the same model that we have. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-22Next improvement of the nickname codeGravatar Dirk Hohndel
Now it is able to replace nicknames for existing entries (which will be needed by the yet to be written UI). This commit fixes a couple issues with the previous code: - a potential SIGSEGV with malformed config entries - missing closing parenthesis in the dialog box text Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-22Make it possible to translate strings containing subscript "2"Gravatar Lubomir I. Ivanov
The "Tec settings" dialog contains some strings with the subscript "2" character, which have to be translated. While the "2" is part of the string xgettext doesn't seem to recognize such. To trick it we use a temporary buffer and c-format: sprintf(utf8_buf, _("Show pO%s graph"), UTF8_SUBSCRIPT_2); button = gtk_check_button_new_with_label(utf8_buf); Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-22Free some nickname related memory in gtk-gui.cGravatar Lubomir I. Ivanov
init_ui(): We add the char pointer "conf_copy" and free it afterwards, since once "next_token" is changed it no longer points to the allocated heap location the mapper returned. [Dirk Hohndel: original patch rewritten to have better variable names and to match the recent changes to this code] Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-22Imrpove the nickname handlingGravatar Dirk Hohndel
We now store the model information together with the deviceid and nickname in order to be able to check if we have a record for any dive computer with the same model (as that now triggers our nickname dialog). This changes the format of the config entries for nicknames - the best solution might be to just delete those and start again. What is still missing is the code to store the nicknames in the XML file. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-21Remove nickname from divecomputer data structureGravatar Dirk Hohndel
Having it there with the model information seemed to make sense but on second thought it's the wrong spot to keep that information, especially since we were storing it in the XML file in every single dive. This change removes the nickname member from the divecomputer and makes the rest of the code reasonably self consistent. It does not add much of the new code for the new design to handle nicknames. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-17Add a "View next dive computer" menu itemGravatar Linus Torvalds
This adds the capability to actually view all your dive computers, by adding a menu item under "Log"->"View"->"Next DC" to show the next dive computer. Realistically, if you actually commonly use this, you'd use the accelerator shortcut. Which right now is Ctrl-C ("C for Computer"), which is probably a horrible choice. I really would want to have nice "next/prev dive" accelerators too, because the cursor keys don't work very well with the gtk focus issues. Being able to switch between dives would also make the "just the dive profile, maam" view (ctrl-2) much more useful. The prev/next dive in the profile view should probably be done with a keyboard action callback, which also avoids some of the limitations of accelerators (ie you can make any key do the action). Some gtk person, please? Anyway, this commit only does the dive computer choice thing, and only using the accelerators. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-16Clear associated tooltip texts when calling expose_event()Gravatar Lubomir I. Ivanov
In gtk-gui.c:expose_event(), right before clearing the list of tooltips, we also want to free memory for the associated texts for each one of them. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-16Fixed some memory leaks related to subsurface_get_conf()Gravatar Lubomir I. Ivanov
In gtk-gui.c:init() we retrieve the configuration values for PO2, PN2, PHE thresholds but have to also free the values once done parsing with sscanf(). Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-16Fixed a couple of memory leaks related to the download dialogGravatar Lubomir I. Ivanov
In render_dc_vendor() and render_dc_product(), there is no need to allocate memory for the texts that are about to be added in the combo box trees. Most GTK widgets seem to make copies of the passed text to them, using g_strdup() and automatically release said memory when a widget is destroyed. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-16Make sure that the user entered nickname is never truncatedGravatar Lubomir I. Ivanov
If the sizes of the two char buffers in set_dc_nickname() (nickname) and remember_dc() (buffer) are at least twice the size of the allowed maximum number of characters (sizeof(gunichar) = 2) set by gtk_entry_set_max_length() for the user nickname, no truncation will accur then calling snprintf() and cleanedup_nickname() on said buffers. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-15Reserve enough memory when storing a DC's nicknameGravatar Lubomir I. Ivanov
in gtk-gui.c: The input text field in set_dc_nickname() has a limit of 68 unicode characters, which are 136 bytes. In remember_dc(), to make sure that this nickname, the deviceid (4 bytes) and also the extra characters (",{}") always fit wihout truncation (from snprintf) in the allocated stack buffer, we increase the size of the buffer to 256 bytes. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-14Fix possible crash in nickname codeGravatar Dirk Hohndel
Silly typo, but this is the better solution, anyway. Reported-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no>` Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-13Add the ability to set a nickname for a dive computerGravatar Dirk Hohndel
We maintain a list of dive computers that we know about (by deviceid) and their nicknames in our config. If the user downloads dive from a dive computer that we haven't seen before, we give them the option to set a nickname for that dive computer. That nickname is displayed in the profile (and stored in the XML file, assuming it is not the same as the model). This implementation attempts to make sure that it correctly deals with utf8 nicknames. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-12Change the empty product model to be index 0Gravatar Dirk Hohndel
A vendor of -1 indicates that we should have no product selection in the dive download dialog. Having the empty product model be the last made it hard to keep the correct index for that empty model around (and we got it wrong by default). With this change the product models are offset by one, so the unset vendor (-1) turns into index 0 which is where we now store the empty model. Reported-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-12Ensure default dive computer strings can be freedGravatar Dirk Hohndel
We don't want to directly use the strings returned to us from libdivecomputer. Fixes bug 34 Reported-by: Sergey Starosek <sergey.starosek@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-11Merge branch 'cns' into cns-mergeGravatar Dirk Hohndel
I foolishly changed visible_columns in both the (ill-named) cns branch and master... Signed-off-by: Dirk Hohndel <dirk@hohndel.org> Conflicts: divelist.c gtk-gui.c profile.c
2012-12-10Display maximum CNS in the divelistGravatar Dirk Hohndel
We either pick the CNS reported by the dive computer at the end of the dive, or the maximum of that and the CNS values in the samples, if any. As usual, this column in the dive list defaults to off and it is controlled by a setting in the tec page of the preferences. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-10Fix incorrect index for dive computer listGravatar Dirk Hohndel
I don't understand how this ever worked... Fixes ticket 32 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-12-10Don't draw tooltips if no profile is displayedGravatar Dirk Hohndel
This fixes ticket 33 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
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-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-08Make changes to some of the preference immediately visibleGravatar Dirk Hohndel
This is just a small part of the solution to the bigger problem with the preferences. See ticket 21 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-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-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-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-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-26Clarify (and fix) dive trip auto-generationGravatar Linus Torvalds
This makes the dive trip auto-generation a separate pass from the showing of the dive trips, which makes things much more understandable. It simplifies the code a lot too, because it's much more natural to generate the automatic trip data by walking the dives from oldest to newest (while the tree model wants to walk the other way). It gets rid of the most annoying part of using the gtk tree model for dive trip management, but some still remains. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-21Fix "prefer download" behaviorGravatar Dirk Hohndel
When this was first implemented the assumption was that a downloaded dive that is to be merged with an existing dive would have the same time stamp. But as Linus pointed out even back then, this does fail if a dive has been merged with a download from a different dive computer before (think: download from computer a, then download same dive from b, then improve something in the parsing from computer a and try to redownload; the time stamp could have changed). This commit also fixes a silly omission in the merge_dives() function (which ended up ALWAYS prefering the downloaded dive) and finally implements the necessary changes to mark dives downloaded from a Uemis SDA as well. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-21Make sure there are no invisible selected dives after import / downloadGravatar Dirk Hohndel
Prior to this commit, gtk often decided to collapse the trip with the selected dive after the user imported or downloaded additional dives. Since Subsurface tracks dives as being selected even after gtk collapses a trip (which clears all selection state as far as gtk is concerned) this could lead to the strange situation that the user could click on a new dive to select it without unselecting the already selected dive - and suddenly edit or delete did things that were entirely unwanted. With this change we explicitly save and then restore the tree state around import and download operations. This ensures that the same dive(s) stay selected and trips stay expanded and therefore avoids the issues described here. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-11-20Allow the user to cancel a dive computer downloadGravatar Dirk Hohndel
The code pretended to support this for libdivecomputer based downloads, but it had never been hooked up when the native Uemis downloader was implemented. When I finally decided to close that feature gap I realized that the original code was, shall we say, "aspirational" or "completely bogus" and therefore never worked. So instead of just hooking up the code for the Uemis downloader I instead implemented this correctly for the first time for both libdivecomputer and the native Uemis downloader. In order not to have to mess with multithreaded Gtk development I simply opted for a helper function that fires on a 100ms timeout and have it end the dialog without a response. This way we can run the dialog while waiting for the download to finish, still update the progress bar and respond in a useful manner to the user clicking cancel. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>