Commit graph

9634 commits

Author SHA1 Message Date
Linus Torvalds
0c4e1697db Be more careful about unit changes
When we change units, we need to flush any currently active dive
information in the old units, and then carefully reload it in the new
units.

Otherwise crazy stuff happens - like having current cylinder working
pressure values that are in PSI because that *used* to be the output
unit, but then interpreting those values as BAR, because we changed the
units.

Also, since we now properly import working pressure from Diving Log,
stop importing the (useless) cylinder description.  The Diving Log
cylinder descriptions are things like "Alu" or "Steel".  We're better
off just making up our own.

Finally, since Diving Log has cylinder size in metric, make sure that we
do the "match standard cylinder sizes" *after* we've done all the
cylinder size conversions to proper units.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-11 15:49:50 -07:00
Linus Torvalds
61d0aa10e1 Parse 'Diving Log' cylinder working pressure
Oh Gods. Why are all other scuba programs so f*&% messed up?

The Diving Log cylinder working pressure is in bar - which is all good.
But their pressure *samples* are in PSI.  Why the h*ll do people mix up
units in the same damn file like that? I despair at the pure
incompetence sometimes.

I suspect the pressure samples aren't "really" in PSI: they are probably
in some user-specified units.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-11 15:49:50 -07:00
Linus Torvalds
1cc62d5811 Fix up dive number naming
Use "dive->number" instead of "dive->nr". And make the XML match too.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-11 15:49:17 -07:00
Linus Torvalds
9580109406 Show dive number (if it exists) in the location note
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-11 11:54:55 -07:00
Linus Torvalds
6538e5bba0 Save and restore a "dive number"
Some people want to know how many dives they have under their belt, so
let's save and restore the dive number if it exists.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-11 11:36:33 -07:00
Linus Torvalds
d1b30212ff Add more static cylinder types - and pick them up from the dive log
This adds a few more predefined cylinder types to the static list, but
perhaps more importantly, if we try to show a cylinder description that
we haven't seen before, we automatically add that description to the
list as well.

This way, if people have their own cylinder types, our cylinder
management will automatically figure them out and make it easy to enter
them.

NOTE! It might be best to add the new cylinder description at dive log
load time, rather than at 'show' time.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-10 17:14:07 -07:00
Linus Torvalds
1fe687a16c Add new cylinder models to the cylinder model store
We also need to actually fill the model store with the cylinder models
we have in our dive lists to begin with.

This makes it all *trivial* to add a new cylinder model: just use a new
description, fill in the size and working pressure, and you're done.
The type automatically gets filled in, unless that description already
existed (in which case we leave it alone).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-10 16:27:19 -07:00
Linus Torvalds
c43e1ad21b Let people manage their cylinders in cuft and psi
If the output units are set to cuft and psi, then we should show the
cylinder size and pressure properly.

NOTE! In the absense of pressure data, we *always* show the cylinder
volume in liter.  There's no way to convert it to imperial units, since
the imperial units are not in physical size, but in air volume
normalized to surface pressure..

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-10 15:27:23 -07:00
Linus Torvalds
88dc170af6 Declare 'update_dive()' properly
Avoid a compiler warning..

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-10 15:26:51 -07:00
Linus Torvalds
b17c7f0709 Now that we don't mess up import, we can save the cylinder working pressure
We used to have the heuristic that if we saw a cylinder working
pressure, then the cylinder size would be in cuft.  Which meant that we
couldn't export our working pressures, because it would mess things up
on import.

But working pressure is actually nice to know, if you ever work with
cylinders in imperial units.  So now that the import is fixed, add the
working pressure to the export.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-10 15:17:33 -07:00
Linus Torvalds
ed4b739f5f Don't guess input cylinder size as cubic feet
That just screws up the good xml files that have everything in
well-defined units and chose the sane metric units.

So do the cuft -> liter conversion only if the input units are
explicitly CUFT, or known ambiguous input (SUUNTO).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-10 15:15:40 -07:00
Linus Torvalds
e48cebc2d8 Actually connect the cylinder configuration with the dive
It seems to be sufficiently useful to be worth updating the dive
information now.

This still doesn't handle multiple cylinders in any way.  I need to
think about the interface for that.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-10 11:09:39 -07:00
Linus Torvalds
ed8561bf59 Getting closer to a usable cylinder management interface
Not quite there yet, though. And never mind multiple cylinders..

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-09 21:39:54 -07:00
Linus Torvalds
8f12eed9e0 First (broken) try at actually tracking cylinder types
This doesn't actually change the cylinder type info in the dive, because
it's too broken for that.  Instead it prints out what it would change
things to.

The gtk2 notion of text input focus is *really* odd.  Why is the
cylinder type sometimes selected, and sometimes not?

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-09 19:46:53 -07:00
Linus Torvalds
067506038a Rename 'cylinder.c' as 'equipment.c'
Make it about general equipment management, and start hooking up
functions to show new equipment information when changing dives (and to
flush changes to equipment information for the previously active dive).

Nothing is hooked up yet, and it's now showing just one (really big)
cylinder choice, so this is all broken.  But it should make it possible
to at least get somewhere some day.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-09 17:10:17 -07:00
Linus Torvalds
41bce9e5f4 Show tank type and O2 mix for air usage
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-09 11:09:34 -07:00
Linus Torvalds
9437a6512a Add a notebook for cylinder information
Ok, so it's not connected to anything yet, and the tank choices (that
don't do anything) are some random hardcoded collection, but maybe it
will do something some day.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-09 10:31:51 -07:00
Linus Torvalds
86e48bfe10 Use the analyzed local minima/maxima for depth text plotting
Instead of relying on our ad-hoc minmax finder, just use the local
minima/maxima information directly.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-08 16:01:41 -07:00
Linus Torvalds
28cadad144 Use an indirect pointer to min/max entry rather than value
This way we can always find the actual min/max entry that generated the
local minima/maxima.  Which is useful for visualization.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-08 15:59:04 -07:00
Linus Torvalds
a13d3172fa Save default units using GConf
That seems to be the gtk2 way.  Whatever.  diveclog ends up defaulting
to metric units, because we all know that's the right thing to do.
However, I learnt to dive in the US, so I'm used to seeing psi and feet.

So despite the sane defaults, I want diveclog to use the broken imperial
units for me.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-08 11:23:11 -07:00
Linus Torvalds
91439f3aff Show the min/max data in funky purple shading
Dirk likes purple. I mean - Dirk REALLY likes purple.

And what's better than "purple"? You got it: "funky purple".

So this shows the one- two- and three-minute min/max information in some
seriously funky purple fringing.  It's not really necessarily meant to
be serious, but it's a quick hack to visualize the data until we figure
out what to *really* do with it.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-08 09:32:08 -07:00
Linus Torvalds
2d9ac73e38 Start analyzing depth profile: smoothing and time-based min/max/avg
This turns the depth profile into a generic "plot_info" and calculates
minima, maxima and averages over 1-, 2- and 3-minute intervals for each
point.  It also creates a smoothed version.

We currently don't actually show the results, but that's the next step..

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-08 09:26:54 -07:00
Dirk Hohndel
30d228f104 Remove unused variable
This fixes a compile warning

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 21:36:52 -07:00
Linus Torvalds
bd315a4804 Show the shallow points of the dive too
.. unless they are so shallow that they are basically at the surface.

These show up automatically in out min/max logic, so just go ahead and
show them.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 21:11:26 -07:00
Linus Torvalds
77b2df664d Move text rendering function upwards
No change in semantics, I'm just contemplating doing some text renderign
from within the "minmax" function itself.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 18:57:04 -07:00
Linus Torvalds
75f7842675 Add font size to the text_render_options structure
Ok, so it's really a 'double', but for now we're only using integer font
sizes, so let's see if we ever want to do anything but that.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 18:33:14 -07:00
Dirk Hohndel
06399d7d2f Add vertical alignment setting to text output
Add new valign enum to text_render_options_t and update all callers to
plot_text

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
[ Fixed spelling, updated to newer base - Linus ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 18:26:59 -07:00
Linus Torvalds
11641095ae Turn tail recursion back into a loop
I still think there should be some way to partition the space
automatically, but the algorithm that worked best was the simple
tail-recursive one.

Which might as well be expressed as a loop.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 16:38:22 -07:00
Linus Torvalds
95a051e164 Get rid of timelimit code and corner cases
The recursive minmax is now robust without them.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 16:21:35 -07:00
Linus Torvalds
76af28fee6 Clean up plot_text_samples() further
We don't actually use the 'dive' structure any more, since we now always
have the sample pointers directly.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 16:03:16 -07:00
Linus Torvalds
cfcc811efe Simplify/clean up depth min/max finder
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 15:50:07 -07:00
Linus Torvalds
d4a1dfb3d9 Fix up horribly broken cairo scaling
The way cairo does scaling is really really inconvenient, and one of the
things in cairo that is fundamentally mis-designed.

Cairo scaling always affects both coordinates and object sizes, and the
two can apparently never be split apart.  Which is very much not what we
want: we want just coordinate scaling.

So we cannot use 'cairo_scale()' to scale our canvas, because that
screws up lines and text size too.  And no, you cannot "fix" that by
de-scaling the line size etc - because line size is one-dimensional, so
you can't undo the (different) scaling in X/Y.

Sad.  I realize that often you do want to scale object size with
coordinate transformation, but quite often you *don't* want to.

Yeah, we could do random context save/restore in odd places etc, but
that's just a sign of the bad design of cairo scaling.

Work around it by introducing our own graphics context with scaling,
which does it right.  I don't like this, but it seems to be better than
the alternatives.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 14:37:47 -07:00
Linus Torvalds
96f5bea1ac Use a recursive (instead of iterative) minmax depth finder
This is a bit more natural, and makes it much easier to do scale
independence.  In particular, I want to make it possible to grow and
shrink the graph, and this should make it particularly simple to react
by giving more or fewer minmax points.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 13:51:35 -07:00
Linus Torvalds
d1ce430878 Tweak depth next_minmax() interface
Use start/end sample pointers to make a recursive algorithm possible.

Also, clean up the end condition - we don't want to return an
uninteresting minmax result just because we ran out of samples.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 13:35:59 -07:00
Linus Torvalds
7bbcf2fabd Update the dive units without destroyng and rebuilding the dive list
Just iterate over the dive list entries, updating them one by one.

This avoids the "selection destroyed" when the dive units are changed.
And it's cleaner anyway.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 12:05:44 -07:00
Linus Torvalds
19dd61b126 Add Ok/Cancel buttons to unit dialog
.. instead of just having a live running dialog all the time.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 11:20:09 -07:00
Linus Torvalds
c4d5ebb069 Do output unit conversion in the dive info window too
This should take care of it all, unless I missed some case.

Now we should just save the default units somewhere, and I should do the
divelist update much cleaner (instead of re-doing the divelist entirely,
it should just repaint it - now we lose the highlited dive etc).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 09:35:45 -07:00
Linus Torvalds
fdbd80a3a2 Honor depth unit settings when plotting the depth profile
This shows the depth properly in meter or feet depending on unit
selection.

It also changes the horizontal depth rulers to be at 10m/30ft intervals
rather than the previous 15ft.  With the textual depth markers, the
horizontal lines aren't as important any more.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 09:21:26 -07:00
Linus Torvalds
b5d3fa6023 Make divelist honor the length units
Show dives in meter or feet depending on the output unit setting.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 09:21:05 -07:00
Linus Torvalds
378ac0d44a Add GtkTreeViewColumn information to 'struct DiveList'
We will need the column information in order to update the naming when
the units change.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 08:42:05 -07:00
Linus Torvalds
7bbdea19ed Add radio buttons for temperature and volume
.. and clean up some of the conversions.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-07 08:37:50 -07:00
Linus Torvalds
a6d510f5f1 Make a 'units' dialog window
Set the output units to feet/meter or psi/bar.

Of course, we only actually react to the psi/bar one right now, but it's
all coming some day.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 21:19:04 -07:00
Linus Torvalds
a06d93217f Start doing gas management using output units
Ok, it's an odd place to start, but this now shows the pressure curve
details and the air usage in the proper units.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 19:28:31 -07:00
Linus Torvalds
75cb94f067 Clean up type handling of cylinder pressure plot
Soon we'll show things in psi or bar depending on user choice.  Let's
not get confused about units before we do.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 19:14:56 -07:00
Linus Torvalds
05857e0a05 Start "output unit management" support
This doesn't actually *do* anything yet, but it introduces the notion of
output units, and allows you to pick metric or imperial.

Of course, since the output doesn't currently care, the units you pick
are irrelevant.  But just wait..

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 19:07:17 -07:00
Dirk Hohndel
a5a3cba574 Fix drawing artifacts with dives that have samples past the dive duration
The UEMIS Zurich SDA keeps recording samples for quite a while after the
dive ended.  These provide no additional information, but confuse our
drawing algorithm as they can cause us to draw both the depth and tank
pressure plots beyond the right edge of our canvas.

Stop drawing if sample->time.seconds is larger than dive->duration.seconds.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 18:37:57 -07:00
Linus Torvalds
d314b05301 Minimally parse some UDDF format dives
Dive dates (at least partial parsing), depths and times.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 17:33:52 -07:00
Linus Torvalds
4d19f42a4e Add framework for UDDF importer
There are several sample UDDF files around on the net, so we might as
well start importing some of it.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 17:01:28 -07:00
Linus Torvalds
0e3bbd4102 Use 'cairo_translate()' instead of manual translation
I'd like to do 'cairo_scale()' too, but that messes up line sizes.  I'll
think about it.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-09-06 15:41:02 -07:00
Linus Torvalds
dbfce3035e Merge branch 'dirk'
* dirk:
  Print starting and ending pressures

Fix up conflicts in profile.c due to different ways to set the text
formatting.  Dirk's 'text_format_options' thing is prettier than mine.
Use it.
2011-09-06 15:17:24 -07:00