summaryrefslogtreecommitdiffstats
path: root/gtk-gui.c
AgeCommit message (Collapse)Author
2012-09-18Fix some of the problems reported by cppcheckGravatar Dirk Hohndel
Thanks to Christian for running the static code analysis tool against subsurface... There were some false positives, a few style issues that I'll ignore for now, and two actual potential bugs. First: Don't check unsigned variables for < 0 This has been around for a while and we are lucky that while technically a bug it still works as expected. Passing a negative idx simply turns it into a very large unsigned integer which then fails the > dive_table.nr test. So it still gets a NULL returned. A bug? Yes. Critical? No. Mismatched allocation and free This is an actual bug that potentially could cause issues. We allocate memory with malloc and free it with g_free. Not good. Reported-by: Cristian Ionescu-Idbohrn <cristian.ionescu-idbohrn@axis.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-18Fixed a couple of memleaks in gtk-gui.c and info.cGravatar Lubomir I. Ivanov
Related to subsurface_default_filename() and g_path_get_basename(). Against 3835faa8fb02df8edb. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-18Added an entry "New" in the "File" menuGravatar Lubomir I. Ivanov
Currently doubles the functionality of "Close" (file_close). Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-18Fix crash when simply clicking OK in import dialogGravatar Dirk Hohndel
Since the GSList is now only created if the user enters the file selection dialog, opening the import dialog and then clicking OK without selecting either a dive computer or a file would cause a crash. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-18Generalized the "Import" dialog titleGravatar Lubomir I. Ivanov
Renamed the title of the "Import" dialog to "Import", as there are a couple of supported operations. Removed the "Import:" text in the dialog body. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-18Moved "Import" in a separate section in the "File" menuGravatar Lubomir I. Ivanov
Moved the entry bellow the standard file operations and above "Print". Also placed it between separators and added the GTK_STOCK_GO_BACK icon. Later on "Export" can be placed below "Import" using GTK_STOCK_GO_FORWARD. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Merge branch 'defaultfile'Gravatar Dirk Hohndel
By now the default file code seems quite matured, so in preparation for 2.0 we'll bring it back into master. I made a few small clean-ups during the merge, but the merge itself is very much straight forward. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Simplify code in file_open as we now only open one fileGravatar Dirk Hohndel
This doesn't change functionality - it's just pointless to loop over a list that is known to have only one element. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Don't close existing data file in file_open if user cancelsGravatar Dirk Hohndel
This logic seems to make much more sense - if the user hits 'OK' then the old file is closed and the new one openened. Otherwise, leave things unchanged. Reported-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Once again improve existing filename handlingGravatar Dirk Hohndel
Several potential problems. - we could end up dereferencing exiting_filename when it was NULL - we could free the default_filename by mistake - subsurface_default_filename always needs to return a copy of it - closing the existing file before opening a new one repopulated the existing_filename with the default filename - preventing the opened file to become the new existing filename Also, make existing filename a const char * and make file_open have the same sensible default folder behavior as the other file related functions. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Mark divelist unchanged after closing the datafileGravatar Dirk Hohndel
This seems rather obvious - I'm surprised I didn't notice it earlier. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Put creation of the file selector box filter into helper functionGravatar Dirk Hohndel
This avoids duplication of code. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Reimplement the GtkFileChooserButton for importGravatar Dirk Hohndel
One of the limitations of GtkFileChooserButton is that it only allows one file to be chosen (so that it can display that file name in the button after the file chooser dialog finishes). Since in the import dialog we never want to show the button with the filename(s) filled in but want to directly execute the import once files have been selected, I reimplemented the button to simply open a multi file chooser when clicked and to then run the import function if one or more file names were selected. This does appear to require some more code but gets us a much more useful and consistent implementation. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17The Open menu entry should open just one fileGravatar Dirk Hohndel
The single file that is our new data file (and the file that we'll change if it was modified). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Move Import menu entry back to File menuGravatar Dirk Hohndel
This should make things more consistent, especially now that "Open" actually does just that and no longer behaves almost like "Import". The downside is that the import from a dive computer is now in the File menu as well and no longer in the Log menu, where Linus originally had moved it to in commit 3cace090989b. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17File Open now closes the previous file, firstGravatar Dirk Hohndel
This is a pretty significant semantic change - Open used to act more like Import; you added more dives to the divelist. With this change it instead acts more like the traditional File->Open in that it closes the previous file, first. The diff hides the minimalistic nature of the change - it seemed cleaner to move the file_open function around than to do a forward declaration of file_close. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Display current filename in windows titleGravatar Dirk Hohndel
This seems to make sense since we have a pretty strong concept of the "active file" that we are working on. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Use glib file and pathname functionsGravatar Dirk Hohndel
My silly reimplementation of these functions was broken on Windows, anyway. This is much cleaner. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Prevent the preferences dialog from getting focus with file selector openGravatar Dirk Hohndel
The idea is based on Lubomir's code but the implementation is radically different. Instead of having the preferences dialog be referenced by a global variable we simply look up the appropriate ancestor of the current widget. Inspired-by: "Lubomir I. Ivanov" <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Fix memory leaks and one potential NULL dereferenceGravatar Dirk Hohndel
Always make sure to clear the memory allocated at the "existing_filename" pointer when setting it to a new address or NULL. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Lifted these changes from a larger commit. The other changes I'll reimplement in the next commit. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-12various small fixes to the defaultfile modelGravatar Lubomir I. Ivanov
1) For safety reasons we no longer remove the default directory after creating it. This prevents an access error (on windows) and also a couple of small exploits that could have been possible, resulting in undefined behaviour. 2) Once "default_filename" is allocated keep it until the value has to change. The value is finaly released once the program is ready to close. 3) When picking a new default file, grab the new string directly from the GSList. 4) When storing the new default file from the preferences dialog, make sure we also update "existing_filename" if needed. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Fixed some whitespace issues, made commit message and one of the comments in the code somewhat clearer. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-12Make sure Subsurface receives Quit / Command-Q callback on MacGravatar Dirk Hohndel
As usual, things work slightly different on Mac. Quartz delivers some (but not all) accelerator notifications differently. Command-Q and Subsurface->Quit now work on Mac as well. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-11Inline g_list_free_full for better compatibilityGravatar Lubomir I. Ivanov
Replaced g_list_free_full with the inlined alternave: g_list_foreach(dive_trip_list, (GFunc)free, NULL); g_list_free(dive_trip_list); once again my version on debian 6.0.x has libraries up-to-date yet outdated. i guess i have to suggest against API which has the "Since <some ver>" text and <some ver> is fairly recent on documentation webpages. Signed-off-by: "Lubomir I. Ivanov" <neolit123@gmail.com> I took only one hunk from the patch that Lubomir sent - the rest I implemented differently in the previous commit. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-11Use glibio functions for mkdirGravatar Dirk Hohndel
Suggested-by: Jef Driesen <jefdriesen@telenet.be> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-11Better compatibility with older GTK and CairoGravatar Lubomir I. Ivanov
divelist.c: Replaced "gtk_tree_path_get_indices_with_depth()" with the coupled alternative: int depth = gtk_tree_path_get_depth(path); int *indices = gtk_tree_path_get_indices(path); for compatibility GTK+ < 2.22 *: Replaced all usage of "cairo_rectangle_int_t" with "cairo_rectangle_t" for compatibility with Cairo < 1.10. Both modification make building Subsurface possible on a fairly recent Debian distribution, which reports to have the version of the abovementioned libraries "up-to-date", yet they are slightly outdated. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-11Display yearly/monthly statisticsGravatar Miika Turkia
Display yearly statistics in a statistics window with option to expand the viewing on monthly level. The amount of dives along with basic information like duration, depth, water temperature and air consumption is displayed in yearly and monthly level. Thus you are able to compare e.g. development of air consumption or diving activity from year to year. Using already existing macro for splitting seconds into minutes:seconds. Moving repetitive code to a function (couldn't think of the suggested clever macro, but this should pretty much do the trick). Now the statistics are updated every time the process_all_dives function is called. It might make sense to actually verify the structures need to be re-allocated, but such optimization is currently not implemented. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Combined two commits. Minor cleanups for white space and boolean values. Significant changes to use the correct units for volumes vs. depths and to avoid unneccesary lookups of the model storage based on the tree. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-11Use GTK_UNIT_INCH when printing to provide consistency across OSGravatar Lubomir I. Ivanov
Tests have shown that the most multi-platform way to do printing with GTK is to use GTK_UNIT_INCH (or GTK_UNIT_MM) with GtkPrintOperation. Tested on Linux, OSX, Windows. However this requires the appropriate scaling for Pango and Cairo to be done, with separate plotting logic for printing and drawing on the screen. To achieve that, profile.c:plot() now accepts a scaling parameter from type "scale_mode_t" defined in "display.h". Also due to new scale, small decimal numbers (such as 6.12345) cannot be well stored in "cairo_rectangle_int_t" therefore it is replaced with "cairo_rectangle_t", which uses doubles to provide Cairo with a drawing area. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Minor whitespace cleanup. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-10Fix silly folder permission bugGravatar Dirk Hohndel
I forgot to give the user execute permission on the folder that subsurface might create to store the datafile in. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-10Implement Close menu option that allows closing the data fileGravatar Dirk Hohndel
This requires some helper routines that allow us to clear out all the widgets. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-10Change behavior for the existing filenameGravatar Dirk Hohndel
Previously we always picked the last file that was openend as the file name to save to. That seems counterintuitive when importing files or when opening multiple files. Especially if Subsurface was executed without a file on the command line and we are using the default file. Now we only remember a file name if it was the first one to ever be openend or if it was used in save-as. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-09First cut of adding a default file nameGravatar Dirk Hohndel
The default file name is OS specific and tries to follow the customs on each of the OSs. It can be configured through the preferences dialog. On MacOS we get a strange warning which appears to be a well documented Gtk bug on MacOS. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-06Set default path for file import to the last path openedGravatar Dirk Hohndel
This may not be the path the import files are in, but it's better than the current default of 'nothing'. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-06Update the About screenGravatar Dirk Hohndel
Add the current year and the second main author, err, me. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-03Correctly initialize the toggle state of the autogroup menu entryGravatar Dirk Hohndel
If we move to Linus' tri-state variable we need to separate those two items, anyway. But for now this fixes the obvious bug. Reported-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-02Add autogen menu commandGravatar Dirk Hohndel
This adds the ability to auto create trips from the menu. It's a toggle entry (and while at it, we made the zoom toggle a toggle entry as well). We can therfore switch back and forth between auto generated trips. There is one bug. Assume you have no trips. You manually create a trip from some dives out of a group of trips that autogen would turn into a trip. Now you turn on autogen and this trip gets expanded with all the dives that would normally be grouped together. If you turn off autogen again, all those dives are still part of the remaining (initially manually created) trip. Working around this issue seemed a lot more work than the likelihood of anyone running into it seemed worth. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-28Merge branch 'freediving-tweaks' of git://github.com/mguentner/subsurfaceGravatar Linus Torvalds
Merge freediving tweaks (zoom in on short dives etc) from Maximilian Güntner. Trivial conflicts in display.h due to unrelated printing stuff just happening to be added nearby. * 'freediving-tweaks' of git://github.com/mguentner/subsurface: moved zoomed_plot to display.h plot the time with a fixed padding (leading zero) updated/corrected comment added "Zoom" button and improved scaling fixed indentation use increments that make sense for 600 seconds Plot shorter (apnea) dives with a reasonable scale
2012-08-28Merge git://git.tdb.fi/ext/subsurfaceGravatar Linus Torvalds
Pull a few buglet fixes from Mikko Rasa. Some trivial conflicts due to changes in the dive selection logic, and using the new "for_each_dive()" helper. * git://git.tdb.fi/ext/subsurface: Check if multi-dive editing is actually needed Fix an off-by-one error in buffer allocation
2012-08-27Merge branch 'trips' of git://git.hohndel.org/subsurfaceGravatar Linus Torvalds
Merge the initial 'track trips explicitly' code from Dirk Hohndel. Fix up trivial conflicts in save-xml.c due to the new 'is_attribute' flag. * 'trips' of git://git.hohndel.org/subsurface: Fix an issue with trips that have dives from multiple input files Some simple test dives for the trips code First cut of explicit trip tracking
2012-08-27First cut of explicit trip trackingGravatar Dirk Hohndel
This code establishes the explicit trip data structures and loads and saves them in the XML data. No attempts are made to edit / modify the trips, yet. Loading XML files without trip data creates the trips based on timing as before. Saving out the same, unmodified data will create 'trip' entries in the XML file with a 'number' that reflects the number of dives in that trip. The trip tag also stores the beginning time of the first dive in the trip and the location of the trip (which we display in the summary entries in the UI). The logic allows for dives that aren't part of a dive trip. All other dives simply belong to the "previous" dive trip - i.e. the dive trip with the latest start time that is earlier or equal to the start time of this dive. This logic significantly simplifies the tracking of trips compared to other approaches that I have tried. The automatic grouping into trips now is an option that defaults to off (as it makes changes to the XML file - and people who don't want this feature shouldn't have trips added to their XML files that they then need to manually remove). For now you have to select this option, then exit the program and start it again. Still to do is to trigger the trip generation at run time. We also need a way to mark dives as not part of trips and to allow options to combine trips, split trips, edit trip location data, etc. The code has only had some limited testing when opening multiple files. The code is known to fail if a location name contains unquoted special characters like an "'". This commit also fixes a visual inconsistency in the preferences dialog where the font selector button didn't have a frame around it that told you what this option was about. Inspired-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-26Might as well free current_fileGravatar Dirk Hohndel
In commit fd2debc1e730 ("replaced stdndup() with the inlined equivalent") Lubomir freed the memory from one of my two strdups but not the other. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-26Do some whitespace cleanupGravatar Linus Torvalds
The previous commit was a patch from Lubomir, which also had some whitespace fixes (to go with some new whitespace bugs to replace them) in it. I removed the whitespace changes from that patch (don't mix whitespace fixes with other fixes, unless they are on the same lines!) but decided to look for other whitespace issues, and this is the result. I left the non-C files alone, some of the spec and script files also have whitespace at the end of lines etc. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-08-26replaced stdndup() with the inlined equivalentGravatar Lubomir I. Ivanov
don't kill the OS incompatibility messenger. 1) http://stackoverflow.com/questions/6062822/whats-wrong-with-strndup stdndup() is POSIX 2008, but apparently not available on OSX and Windows it could be made potentially application global (e.g. a local "stdndup.h") 2) free() memory at pointer "current_dir", once we are done. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-08-26Fix broken default filename for save-asGravatar Dirk Hohndel
The existing code set the filename to the full path of the last input file and didn't set the path at all. Instead we now split the existing filename into its path and file component and set up the choser accordingly. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-22moved zoomed_plot to display.hGravatar Maximilian Güntner
Signed-off-by: Maximilian Güntner <maximilian.guentner@gmail.com>
2012-08-22Merge branch 'master' into freediving-tweaksGravatar Maximilian Güntner
Signed-off-by: Maximilian Güntner <maximilian.guentner@gmail.com>
2012-08-22Fix an off-by-one error in buffer allocationGravatar Mikko Rasa
Signed-off-by: Mikko Rasa <tdb@tdb.fi>
2012-08-18Fix default size for scrollable notebookGravatar Dirk Hohndel
Linus change in commit bcb9f67819bc ("Make the notebook portion (dive notes/equipment/info) a scrollable window") created a really ugly default where the notebook Dive Notes always ended up with a vertical scrollbar. This picks a much saner default layout for the panes. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-08-18Make the notebook portion (dive notes/equipment/info) a scrollable windowGravatar Linus Torvalds
This makes things start up with the wrong size, which is somewhat annoying, but by doing so avoids a bigger annoyance, namely that the three panes move around when moving between dives. In particular, if the initial dive didn't have much of an equipment list, the initial size allocated for the notebook is fairly small and determined mainly by the size of the the Dive Notes page. However, when you then scroll around in the dive list, you might hit a dive with lots of equipment, and suddenly the panes dividing the different parts of the subsurface application window will jump around to make room. That's horribly annoying, and actually makes things like double-clicking dives in the dive list not work right, because the first click will select it, and cause the dive to move around (so the second click will hit a totally different dive). Now, making the notebook be in a scrollable window means that if the size of the notebook changes, it might get a scrollbar, but the panes themselves do not move around. The initial sizing of that thing being wrong is annoying, though. We need to figure out a separate solution to that. [ Side note: currently it uses GTK_POLICY_NEVER for the horizontal scroll-bar, just to avoid the horizontal size also starting out wrong, which is *really* nasty. If we can solve the initial size issue, we should make the horizontal scroll-bar be GTK_POLICY_AUTOMATIC too. ] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-08-18Fix uninitialized pointer crash for "Save As"Gravatar Linus Torvalds
The "filename" variable was only initialized when the user accepted the name, so cancelling the file save would randomly use an uninitialized pointer. Reported-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-08-17Merge branch 'misc-fixes' of git://github.com/DataBeaver/subsurfaceGravatar Linus Torvalds
Pull miscellaneous fixes, mostly UI stuff from Mikko Rasa. Both this and the pull from Pierre-Yves Chibon created a "Save As" menu entry and logic. As a result, there were a fair number of conflicts, but I tried to make the end result somewhat reasonable. I might have missed some semantic conflict, though. Series-acked-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no> * 'misc-fixes' of git://github.com/DataBeaver/subsurface: Add a separate "Save as" entry to the menu Changes to menu icons Improved depth info for dives without samples Divide the panes evenly in view_three