Commit graph

9825 commits

Author SHA1 Message Date
Dirk Hohndel
3835faa8fb Merge branch 'defaultfile'
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-17 21:44:28 -04:00
Dirk Hohndel
d7465129bb Make sure dive info is displayed correctly at start
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-17 21:03:30 -04:00
Dirk Hohndel
2cadc70e3d Simplify code in file_open as we now only open one file
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-17 21:03:30 -04:00
Dirk Hohndel
46d91acdff Don't close existing data file in file_open if user cancels
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-17 21:03:30 -04:00
Dirk Hohndel
7148dea827 Once again improve existing filename handling
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-17 21:03:30 -04:00
Dirk Hohndel
fa2f1b6eb0 Fix potential crash when importing dives
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-17 21:03:30 -04:00
Dirk Hohndel
421366d0fb Correctly deal with empty XML files
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-17 21:03:30 -04:00
Dirk Hohndel
0d637c2fa9 Show the datafile name even with no dives
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-17 21:03:30 -04:00
Dirk Hohndel
cc42debb88 Mark divelist unchanged after closing the datafile
This seems rather obvious - I'm surprised I didn't notice it earlier.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17 21:03:30 -04:00
Dirk Hohndel
eddea0e5e3 Put creation of the file selector box filter into helper function
This avoids duplication of code.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-17 21:03:29 -04:00
Dirk Hohndel
ca696dd0cd Reimplement the GtkFileChooserButton for import
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-17 21:03:29 -04:00
Dirk Hohndel
dea8d47b69 The Open menu entry should open just one file
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-17 21:03:29 -04:00
Dirk Hohndel
b2727ecfda Move Import menu entry back to File menu
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-17 21:03:29 -04:00
Dirk Hohndel
d3bf8af7fe File Open now closes the previous file, first
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-17 21:03:09 -04:00
Dirk Hohndel
65d9d48845 Display current filename in windows title
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-17 21:03:03 -04:00
Dirk Hohndel
1771500078 Don't show an error if we can't load the default file
The user may not have created it, yet.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-15 04:44:00 -07:00
Dirk Hohndel
febae4d165 Changing Miika's code to avoid global iter
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-14 10:13:29 -07:00
Miika Turkia
e7d4bbdd72 Improving the yearly statistics code
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-14 10:09:56 -07:00
Dirk Hohndel
b150c4fd41 Make sure all parts of the edit dialogs are using current_dive / edit_dive
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-13 20:41:21 -07:00
Dirk Hohndel
e84cdf59bb make clean should remove subsurface.exe as well
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-13 14:43:34 -07:00
Dirk Hohndel
63c36e5e11 Mark divelist changed when modifying trips
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-13 11:45:21 -07:00
Dirk Hohndel
9f5d9bd94f Use glib file and pathname functions
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-13 11:22:09 -07:00
Dirk Hohndel
3d4be85f35 Prevent the preferences dialog from getting focus with file selector open
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-13 10:53:30 -07:00
Dirk Hohndel
c74f58786d Fix memory leaks and one potential NULL dereference
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-13 10:46:09 -07:00
Ivan Habunek
52e35b3aa8 Minor improvements to the NSIS installer script
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-13 09:39:31 -07:00
Ivan Habunek
791edd78b4 Minor fix for the NSIS installer script
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-13 09:39:18 -07:00
Ivan Habunek
bccbdccdfa Added version info to NSI installer script.
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-13 09:38:19 -07:00
Ivan Habunek
5cf89b4d28 Created a modern windows installer script
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-13 09:24:50 -07:00
Lubomir I. Ivanov
5dbf10a6d6 various small fixes to the defaultfile model
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-12 15:13:09 -07:00
Dirk Hohndel
1ae4b80027 Make sure Subsurface receives Quit / Command-Q callback on Mac
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-12 09:18:56 -07:00
Dirk Hohndel
1afe36840d Fix memory handling error on MacOS
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-11 20:52:54 -07:00
Dirk Hohndel
41d3a11ee3 Fix a long standing bug when editing dives
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-11 13:37:06 -07:00
Lubomir I. Ivanov
be941e00b2 Inline g_list_free_full for better compatibility
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-11 12:08:39 -07:00
Dirk Hohndel
2a9679dac6 Use glibio functions for mkdir
Suggested-by: Jef Driesen <jefdriesen@telenet.be>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-11 12:08:07 -07:00
Lubomir I. Ivanov
0fceb1c907 Better compatibility with older GTK and Cairo
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-11 07:59:53 -07:00
Miika Turkia
ae33b5ef52 Display yearly/monthly statistics
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-11 07:29:06 -07:00
Lubomir I. Ivanov
50eac41129 Use GTK_UNIT_INCH when printing to provide consistency across OS
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-11 07:26:38 -07:00
Dirk Hohndel
b4d55c8b59 Change the definition of "dive table changed"
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-10 14:44:48 -07:00
Dirk Hohndel
3b907d8479 Fix silly folder permission bug
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-10 14:39:07 -07:00
Dirk Hohndel
a8fd77865c Implement Close menu option that allows closing the data file
This requires some helper routines that allow us to clear out all the
widgets.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-10 14:32:55 -07:00
Dirk Hohndel
78c5aa9f07 Change behavior for the existing filename
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-10 12:27:00 -07:00
Dirk Hohndel
38d49bf041 Improve trip assignment for new dives
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>
2012-09-10 11:04:58 -07:00
Linus Torvalds
3febfb74fa Merge branch 'ui-work' of git://git.hohndel.org/subsurface
Pull small UI updates from Dirk Hohndel:
 "Not sure if you like the change to the About screen.  :-)

  The other one is simply a small improvement for people importing xml
  files from the UI - it gets them an at least somewhat sane starting
  directory to work from."

* 'ui-work' of git://git.hohndel.org/subsurface:
  Set default path for file import to the last path opened
  Update the About screen
2012-09-11 00:57:15 +08:00
Dirk Hohndel
b73f29fea3 First cut of adding a default file name
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-09 17:38:01 -07:00
Linus Torvalds
f51066fe40 Merge branch 'trip3' of git://git.hohndel.org/subsurface
Pull more trip handling fixes from Dirk Hohndel.

And the "delete dive" functionality too.

* 'trip3' of git://git.hohndel.org/subsurface:
  Implement delete dive option
  Make "create trip above" also add on selected dives
  Handle new dives correctly if trips exist
  Merge one or more dives with the trip above
2012-09-07 15:38:32 -07:00
Dirk Hohndel
d0867a79d4 Implement delete dive option
With this we can delete a dive from the context menu.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-07 13:09:29 -07:00
Dirk Hohndel
42bff28e47 Make "create trip above" also add on selected dives
This makes things more consistent with the merge with trip above option -
if multiple dives are selected then the consecutive set of selected top
level dives below the dive on which a user right-clicked are all added to
the newly created trip.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-07 10:58:36 -07:00
Dirk Hohndel
b49b081bb9 Handle new dives correctly if trips exist
There is an interesting issue when adding new dives into a dive list with
existing trips. Since fill_dive_list walks the list backwards and trips
are determined by the timestamp of the first dive in a trip, it is
non-trivial to know when a dive is added if it should be part of an
existing trip or not. Let's say when we see the dive we can also see a
trip entry that starts four days earlier. Without looking forward in the
list of dives we cannot tell if this is a multi-day trip that this dive
would fit into, or if there is a break of more than tree days (our current
trip threshold).

Instead this commit adds a second scan of the dives in chronological order
that does the right thing for new dives.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-07 10:12:31 -07:00
Dirk Hohndel
109dab56eb Set default path for file import to the last path opened
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-06 14:31:38 -07:00
Dirk Hohndel
8c7c11c644 Update the About screen
Add the current year and the second main author, err, me.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2012-09-06 14:27:34 -07:00