Commit graph

3830 commits

Author SHA1 Message Date
Lubomir I. Ivanov
fc84f8868d Print: add method to convert profile to grayscale
(experimental)

Add the method PrintLayout::convertPixmapToGrayscale()
to convert a rendered profile pixmap to grayscale.
It will probably be faster to have
ProfileGraphicsView render in grayscale under certain
conditions (and use a specific color table) instead -
e.g.:

ProfileGraphicsView::setPrintMode(bool printMode,
	bool useGrayScale);

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-18 12:00:12 -07:00
Lubomir I. Ivanov
b241b7c06a Print: add experimental code for printing profiles
PrintLayout::printSixDives() goes trough all dives
and prints their profiles on full portrait pages.

This method is based on resizing the ProfileGraphicsView
widget, plotting each dive and then 'grabbing' it using
QPixmap::grabWidget().

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-18 12:00:12 -07:00
Lubomir I. Ivanov
8ea849d0c2 Profile: use a printMode flag in ProfileGraphicsView
When printing the profile there are certain features which
we want different (or disabled). This includes font scale ignoring
and showing a toolip. To achieve that we check for a printMode flag
in ProfileGraphicsView which can be set using setPrintMode(bool).

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-18 12:00:12 -07:00
Lubomir I. Ivanov
b722bf6931 Print: improve new page detection in table print
There is a potential issue when placing a heading on a new
page. If the height of a data row is larger of that of
a heading, a new heading can end up at the bottom of a page
leaving that page with two headings.

To solve that we add line breaks (<br>) until the new
page is reached and add the heading there. Algorithm
assumes that the height of a heading is larger than
a line break. Also it is now obviously even slower.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-18 12:00:12 -07:00
Lubomir I. Ivanov
2bfda14c0b Print: support any resolution for the table print
QTextDocument uses a separate painting device,
thus we need to pass our QPrinter instance which may
have a resolution different from the screen resolution.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-18 12:00:12 -07:00
Tomaz Canabrava
430a77b8a7 Fixes incorrect editing policies.
The Working Press didn't correctly updated when there was a 'bar'
or 'psi' in the string ( and that was defalt behaviour );

The o2 didn't correctly updated when there was a '%' on the string
(and that was default behaviour ),

The He didn't correctly updated when there was a '%' on the string,
and that was also default behavior.

Now all of them correctly updates.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-18 12:28:28 -03:00
Tomaz Canabrava
edb1a7adb3 Added the code to revert Weigths when user cancels edition
This is a follow up commit to the previous one that
enabled cancel for cylinders, everything in the commit
log for the cylinders also applyes here.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-18 11:53:47 -03:00
Tomaz Canabrava
9b0a44196c 'Cancel' action Cancels editing Cylinders.
Made the default 'Cancel' action correctly cancel
the cylinder edition. This is needed only because
we bypassed the default behavior on Qt that took
care of this, because we wanted to have more control
on how the view would update the items accordingly
with wich one of the cylinders were selected
on the edition pane - the pressure and size of the
cylinders needed to have it's data set, but the Qt
Model/View system *thinks* that cancel-edition is
simply 'do not commit the edition data, then.' wich
would not work with us, because we passed the strange
data already. So, I created a backup data that serves
us very well. When the user cancels, this backup data
is added back on the cylinder, making everything as
it was before.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-18 10:24:02 -03:00
Tomaz Canabrava
63c33e152e Don't set if equal, on edit cylinders and weigth types.
Don't set the cylinders and weight types if they are
the same than before, this fixes a bad thing that happened
when playing with the values. it could blank out the values
carefully chosen by you.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-18 09:01:37 -03:00
Tomaz Canabrava
29b92e2fc5 Adds Single-Click editions on the TableView
This is a linus request, adds a Single-click edition
on the tableview to make it more consistent with the
rest of the interface where edition is permitted.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-17 12:13:04 -03:00
Tomaz Canabrava
bad91ef11c Added EnterKey to finish edition on Cyl/Weigths with the popup open
So, I used the Qt Event Filter strategy to bypass the normal role
of user interaction, the Qt ComboBox needed 2 keypresses to close
and edit. so I grabbed the first one and send together a second one.
Há.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-17 11:47:23 -03:00
Tomaz Canabrava
1a0a4b7e08 Fixes the Combobox behavior on the inline-edit
This patch fixes the combobox behavior on the inline edit
to what it was ( well, similar to ) the GTK version,
up and arrow keys will walk you to the list of choices,
and it will update the other data as soon as you walks over it

one drawback is that you cant ( for now, since I do have a
very big headache at the moment ) cancel, since the cancel
will just forgets the item and do not call 'setData' on the
model, but we already called it while walking on the list.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-16 19:13:58 -03:00
Tomaz Canabrava
c5a0c4e0d7 Support for key_up and down in the combobox delegate.
Adds spport for key_up and key_down in the combobox
delegates, now when you press key_up or down, it will
show the list of choices instead of going one-by-one
in the lineedit.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-16 15:31:44 -03:00
Tomaz Canabrava
ee25edc28e Clear multi-line string separator on the c++ code.
Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-16 12:49:31 -03:00
Tomaz Canabrava
fdfd261f14 Fixeda a typo that got the 'x' value where the requested one was actually y.
Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-16 12:48:37 -03:00
Lubomir I. Ivanov
a69e92d891 About: improve dialog layout
This modifications makes the About dialog spacing more
consitent with different font sizes. Tested on
Ubuntu 12.04 with the 'Universal Access->Text size'
settings.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-11 09:22:20 -03:00
Lubomir I. Ivanov
3aae3ff547 Print: mark some functions in PrintLayout as 'const'
It might be a good practice to declare certain class
'helper' functions as constant members. But I don't
think there are performance benefits to that other
than the readability ones.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-11 12:55:48 +03:00
Lubomir I. Ivanov
a4982c93cd Print: complete columns for the table print
We use the DiveItem struct from models.h so to ease the
display of date, depth and duration. All columns present
in the GTK build are now displayed.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-11 12:45:41 +03:00
Lubomir I. Ivanov
127cd21137 Models: add the DiveItem::displayDate() helper
Add this helper so that we can easily wrap the required
memory release after calling get_dive_date_string()
(fixes a small memory leak).

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-11 12:41:50 +03:00
Lubomir I. Ivanov
adb7dc6fac Models: move the declaration of DiveItem to the header
This should allow external use of the type by
including models.h.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-11 12:40:08 +03:00
Lubomir I. Ivanov
eab31855f5 Print: show column titles for table print
Patch does:
- set individual column width and name
(held in tableColumnNames, tableColumnWidths)
- reduce font size in the table
- more small tweaks in the style sheet

TODO: finish printing all dive data

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-11 00:52:39 +03:00
Lubomir I. Ivanov
af1c55c29d Print: move some header includes to cpp files
We don't really need includes of display.h and dive.h in
printoptions.h and printlayout.h or forward declartions
of 'struct dive' and 'struct options' in there.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-11 00:45:29 +03:00
Lubomir I. Ivanov
8fcba14753 Print: cleanup for PrintLayout::printTable()
also includes:
- experiment with colored background for headings
- experiment with 'left' alignment for headings
('th' tag CSS does not support 'text-align')
- whitespace fixes

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 23:03:01 +03:00
Lubomir I. Ivanov
9a99aa4c58 Print: use the actual dive table
Currently only for the table print, but now we use the
actual dive table to iterate trough all dives (find only
selected if needed) and print their 'number' element
in table rows.

Also improves the new-page detection algorithm slightly.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 22:55:40 +03:00
Lubomir I. Ivanov
eb4312c9ba Print: initial implementation of the table print
PrintLayout for now only handles the table print,
while the data output itself is work in progress.
For now there is a simple HTML/CSS table logic based
on QTextDocument. There is an iterative algorithm
which listens for a page increase and adds a heading
on top of the new page.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 19:32:15 +03:00
Lubomir I. Ivanov
9dc45af915 Print: add a print preview for testing purposes
Use a QPrintPreviewDialog, while the print logic is WIP.
This way Qt will show the print output in a window instead
of exporting to a file and opending it manualy.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 19:27:10 +03:00
Lubomir I. Ivanov
20804b16d3 Print: add a setup() method to PrintLayout
The setup() method will be called each time to obtain the
current printer settings. Also it calculates required scalling
based on screen agains printer DPI.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 16:18:16 +03:00
Lubomir I. Ivanov
41bad7695e Print: add a class for print layouting
PrintLayout is a class that will handle the layouting part
of dive profiles, text, tables depending on the settings
of a QPrinter and the PrinterDialog and PrintOptions
instances.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 15:34:57 +03:00
Lubomir I. Ivanov
74f989bc46 Print: connect all the options widgets to slots
By connecting to slots we always modify values at a previously
set 'struct options' pointer.

Also have the setup of slots and pre-set values in a
separate setup(struct options *) function.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 11:06:01 +03:00
Lubomir I. Ivanov
01ef9f2175 Print: correct tab order in the options widget
Tab order should begin from the topmost widget and then
descend towards the bottom end of the dialog.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 10:50:33 +03:00
Lubomir I. Ivanov
2c7a208bc1 Print: label update on height slider move
The PrintOptions widget has value labels next to the
horizontal sliders. Add slots to update these labels
when a slider moves.

Patch also makes a modification so that the PrintOptions
constructor requires a 'struct options' pointer. If
an options struct is not received we do not set predefined
values and do not connect signals to slots, where
options will be updated immediately.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-10 09:57:24 +03:00
Lubomir I. Ivanov
5d81eee0da Print: further adjust the print options widget UI
Makes the controls less cluterred on Ubuntu.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-09 23:13:52 +03:00
Lubomir I. Ivanov
355d8ae3d6 Print: add all controls to the print options widget
- adds missing file printoptions.ui
- adds all controls present in the GTK version of the
print dialog custom tab

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-09 22:26:30 +03:00
Lubomir I. Ivanov
52534bfb68 Print: add UI for a print dialog
PrintOptions is a QWidget class to be used as an
addition to a future print dialog (possibly based on
QPrintDialog). Currently only contains a couple of
radio buttons.

PrintDialog (printdialog.cpp/h) which is a basic QDialog
is currently added for testing only and it holds
an instance of PrintOptions.

Calling File->Print opens this test dialog for now.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2013-07-09 21:01:42 +03:00
Anton Lundin
35356e364d Calculate deco stops, TTS and NDL
Calculate TTS and NDL, and Deco stops when they don't already exist in
the samle and show them in the mouse-over.

Signed-off-by: Anton Lundin <glance@acc.umu.se>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-05 22:29:36 -07:00
Lubomir I. Ivanov
f3b81ab54d Profile: prevent a bug when switching views
While in zoomed mode and when resizing the splitters or
switching views the profile tooltip can end up being at the
wrong location and also the zoom state becomes corrupt,
so perhaps the entire transformation needs to be reset.
To prevent the bug we listen for relevent to the profile
splitter resize event, view changes and clear()/plot() the
entire profile graphics.

This is an slow/expensive solution and perhaps there are
cheaper alternatives e.g. updating only the scene rectangle
and tooltip, somehow.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-05 07:38:29 -07:00
Lubomir I. Ivanov
2e26de5ae6 Profile: improve tooltip animation
Remove a couple of expand() calls(?). Also store the last
expanded rectangle size in the private variable nextRectangle
and use that in collapse() animation. Patch prevents a small
jump/resize glitch if the user quickly hovers over and out
of the profile while the tooltip is still resizing.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-05 07:38:27 -07:00
Lubomir I. Ivanov
3b07cd204b Profile: small tweak for tooltip separator line
Add 3px of a initial horizontal offset.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-05 07:38:23 -07:00
Lubomir I. Ivanov
dfb3e2cbea Profile: collapse tooltip back to original height
When collapsing the tooltip we want it's border to become
the same height as when no tooltip info was visible - i.e. post
creation.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-05 07:38:19 -07:00
Linus Torvalds
98953831cd Fix Uemis Zurich downloads
Commit 48ba01b807 ("Enable downloads from the UEMIS Zurich")
mistakenly switched the meaning of the "force_download" argument when it
moved from "struct argument_block" to being a direct argument.

This fixes it right back.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-04 23:00:22 -07:00
Linus Torvalds
5ce5b05521 Qt: Implement trip merging logic
So during my Maui trip, I had a short hiatus in diving, causing
subsurface to start a new trip for the last day of diving.  I could have
just started the old gtk branch to fix it up, but decided that I might
as well try to implement the "merge trip" logic in the Qt branch instead.

This is the end result of that.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-04 23:00:12 -07:00
Lubomir I. Ivanov
c7f8ada4ff Profile: attempt on better zoom and pan logic
QGraphicsView::AnchorUnderMouse does not work for
Qt 4.8.1 on Ubuntu 12.04 and if the mouseMoveEvent
overload is disabled it practically can be seen that
the anchor point is [0, 0] instead of the mouse location.

After a suggestion found on the web this patch attempts
to use the hidden scroll bars to calculate reposition
on pan and zoom *near the mouse cursor.

On the other hand QAbstactSlider (QScrollBar) class
strangly uses negative offsets for minimum scroll
position, which makes the implementation even more
ugly.

[*near] because it's not that accurate!

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-04 22:59:46 -07:00
Lubomir I. Ivanov
1257adfd26 Profile: use more levels of zoom
Makes it easier to see colored lines - e.g. velocity
with 20 levels of zoom.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-04 22:59:14 -07:00
Lubomir I. Ivanov
87dda6661c Profile: prevent a zoom glitch at maximum zoom level
The 'else if' condition in ProfileGraphicsView::wheelEvent()
is causing a zoom-in / zoom-out loop at zoomLevel = 10.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2013-07-04 22:58:56 -07:00
Tomaz Canabrava
249a1ac170 Added a messageBox when the planner quits with a working plan.
Added a messageBox to warn the user that he quit with a working
plan, to reduce the risk of unwanted loss of work.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-04 12:58:11 -03:00
Tomaz Canabrava
bb33be4117 Added the left / right shortcuts for moving the handlers around in time.
Added the left / right shortcuts for moving the handlers around in time,
this also made me wonder why we have the 'previous dc' on the menu, it
got actually to broke my code on the shortcuts for the planner because
they are active everytime - should they be active only when the profile's
visible or they serve any other purpose?

If they serve only for the profile, I'll get them out of the  menu and
put them in their proper place - the profile view.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-04 12:30:05 -03:00
Tomaz Canabrava
52fd769efb Added 'up' and 'down' actions on the dive planner.
Added 'up' and 'down' keyboard actions on the dive planner,
you need to select the handlers with ctrl + click, then
press up to make the handler go 1m up, or down, to make the
handler go 1m down.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-04 11:28:39 -03:00
Tomaz Canabrava
932ee3da94 Added a 'delete' action, with the keyboard.
Added a delete action from the keyboard, there's also
a possibility to add the same action from the menu, but
I frankly don't like much the idea. so, to delete a handler
now, you need to select it ( ctrl + click ) then press
the delete button. Multiple delection is also possible.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-04 11:16:42 -03:00
Tomaz Canabrava
c23dd354b9 Added a shortcut to 'esc', so it clears the selection or cancels the plan.
Added a shortcut to the esc key, so it clears the selection,
if there's no selection, it acts just like clicking on the 'cancel'
button. Next: delete selected handlers.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-04 11:06:28 -03:00
Tomaz Canabrava
f457415f7a Make possible to 'select' an handler by ctrl+click
Make possible to select an handler by ctrl+click on it,
this will be used in the future for the shortcut actions,
like delete, arrow keys, and such.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
2013-07-04 11:01:59 -03:00