summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2012-09-18Call xmlCleanupParser only once - when we are done with libxmlGravatar Lubomir I. Ivanov
Calling xmlCleanupParser in parse-xml.c:parse_xml_buffer() caused massive memory corruption mostly affecting gtk's FileChooser dialogs and the application menu. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-18Cosmetic changes to the NSIS installer scriptGravatar Ivan Habunek
Removed redundant /oname settings when copying files. This is not required since the file name is not changed. Signed-off-by: Ivan Habunek <ivan.habunek@gmail.com>
2012-09-18Fixed permissions in NSIS installerGravatar Ivan Habunek
Windows Vista and later require admin privileges to install to the Program Files folder. Updated RequestExecutionLevel accordingly. Signed-off-by: Ivan Habunek <ivan.habunek@gmail.com>
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-17Make sure dive info is displayed correctly at startGravatar Dirk Hohndel
Commit cdae2869d1dd ("Show the datafile name even with no dives") was a little too aggressive in making sure that we show the correct window title - we only should call show_dive_info(NULL) if there is indeed no dive in the dive table - otherwise we display empty dive info at program start. 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-17Fix potential crash when importing divesGravatar Dirk Hohndel
If the last of the preexisting dives gets merged with a new dive we end up dereferencing a freed pointer. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Correctly deal with empty XML filesGravatar Dirk Hohndel
Previously we could end up with a bogus dive with all zero data in it. Adding dives/test24.xml to be able to test that we handle this case correctly. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17Show the datafile name even with no divesGravatar Dirk Hohndel
That's especially useful if starting without a filename and without an existing default file - this way it's clear that Subsurface still considers itself synced with the default file. 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-15Don't show an error if we can't load the default fileGravatar Dirk Hohndel
The user may not have created it, yet. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-14Changing Miika's code to avoid global iterGravatar Dirk Hohndel
Two things I disliked in Miika's code in commit cbb5bd125b03: Having an integer variable named "something_iter" with all the GtkTreeIter around was really confusing. And having the yearly_iter as a global variable instead of cleanly passing it around really seemed suboptimal. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-14Improving the yearly statistics codeGravatar Miika Turkia
This will update the yearly statistics window (if open) whenever there are changes to the dive list. I also added a check not to open multiple statistics windows. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Reworded commit message Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Make sure all parts of the edit dialogs are using current_dive / edit_diveGravatar Dirk Hohndel
While most of this problem was fixed in commit 18b3dca431a4 ("Fix a long standing bug when editing dives"), it turns out that I missed a couple of the equipment callbacks. In the corner case of having an empty divelist (where therefore current_dive == NULL) manually adding a dive and trying to add equipment (cylinder or weightsystem) to it would crash subsurface as we were trying to dereference current_dive. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13make clean should remove subsurface.exe as wellGravatar Dirk Hohndel
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Mark divelist changed when modifying tripsGravatar Dirk Hohndel
This is just fixing an embarrassing oversight. Now we should prompt the user about saving the file whenever something changes. 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-13Minor improvements to the NSIS installer scriptGravatar Ivan Habunek
VIProductVersion requires to have the version number in x.x.x.x format so I added a separate constant SUBSURFACE_VIPRODUCTVERSION for that purpose. Also renamed VERSION to SUBSURFACE_VERSION for consistency. As Lubomir suggested on the mailing list, the installer will now delete any DLL files found in the target folder to prevent buildup of old versions of libraries when upgrading subsurface. Signed-Off-By: Ivan Habunek <ivan.habunek@gmail.com> Cleaned up whitespace issues Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Minor fix for the NSIS installer scriptGravatar Ivan Habunek
Forgot to add "Uninstall.exe" to the uninstaller section, so the file and the installation folder weren't being deleted on uninstall. Signed-Off-By: Ivan Habunek <ivan.habunek@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Added version info to NSI installer script.Gravatar Ivan Habunek
Also bumped version number to 1.2 (current release). Signed-Off-By: Ivan Habunek <ivan.habunek@gmail.com> More whitespace cleanup Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13Created a modern windows installer scriptGravatar Ivan Habunek
The existing windows installer looks very archaic and offers very few configuration options. This script offers the following benefits: * A modern appearence using NSIS Modern UI 2.0 * Shows the GPL license before install * User can choose the target install folder * Stores chosen installation folder in registry * When installing a newer version on top of existing one, the existing installation folder is offered by default * It is possible to opt out of creating start menu shortcuts Additional bug fixes: * Added iconv.dll which was missing from the installer * Replaced all path separators with backwars slashes, so that the script works on both linux and windows Signed-Off-By: Ivan Habunek <ivan.habunek@gmail.com> Cleaned up whitespace 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-11Fix memory handling error on MacOSGravatar Dirk Hohndel
We are not allowed to free a string that we get back from the config APIs. So strdup it instead to be compatible with Linux in that respect. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-11Fix a long standing bug when editing divesGravatar Dirk Hohndel
Calling edit from the context menu creates a combined editing widget that contains both dive info and equipment. When editing cylinders or weightsystems from that widget and confirming those edits with OK those changes were already committed to the current_dive - regardless on which dive the user clicked. Worse, even when the user clicked Cancel in the edit widget, any changes to the equipment stayed in effect. This had especially confusing consequences when editing multiple dives. As a workaround this commit adds a global edit_dive variable. This fake dive is edited by the secondary editing widgets and if the user accepts changes with OK then they are copied over to the current dive (or all selected dives in multi dive editing mode). 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-10Change the definition of "dive table changed"Gravatar Dirk Hohndel
We only ask to save changes if the dive table was changed. Yet we didn't consider the dive table changed if it was initially empty. So starting with an empty file and making changes we were quitting without saving. 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-10Improve trip assignment for new divesGravatar Dirk Hohndel
When first trying to deal with this I opted to go with a two pass appoach which seemed easy as it used existing infrastructure, but turned out to run into a couple of odd corner cases that would have been really ugly to deal with. So I threw this code away and am instead doing this in a single pass, carefully checking as we go if there is an appropriate trip we can use. To me the new code is much easier to read and seems much cleaner. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>