Compare commits

...

1171 Commits

Author SHA1 Message Date
Mark Liversedge
dc65542cbc Version 3.1 RELEASE CANDIDATE
.. updated version number and activated upgrade processing
2014-07-04 11:53:01 +01:00
Mark Liversedge
0ad73f7567 Fix Estimates on LTM Data Table
Fixes #867
2014-07-04 10:53:15 +01:00
Mark Liversedge
a7cbd7a187 Add Video support in version string
.. so you can tell what support has been compiled in
   to the binary from a crash report.
2014-07-04 08:53:25 +01:00
Mark Liversedge
d3e9d2d31f Add Sidebar to Release Notes 2014-07-04 07:32:33 +01:00
gcoco
85273e01b2 Document Global Message 104 - battery
But who knows what it actually has in it.
2014-07-03 15:28:32 -04:00
Mark Liversedge
b78a04b401 Fix delta compare intervals x-axis
.. was fixed for compare date ranges but somehow got
   overlooked for comparing rides and intervals
2014-07-03 13:59:55 +01:00
Mark Liversedge
e913d77bd6 W'bal on ErgPlot always starts at 0
.. so you can see quickly how 'deep' a workout will
   take you as you scroll through them.
2014-07-02 23:42:10 +01:00
Mark Liversedge
c4f43c3fad Fix W'bal on Erg Plot
.. it got broken when we moved to the 2nd variation W'bal formula
2014-07-02 23:27:38 +01:00
Mark Liversedge
1ab335b0b3 w/kg even in imperial !
Fixes #869
2014-07-02 20:34:18 +01:00
Mark Liversedge
c6243dac09 Fixup Ride Editor icon text color 2014-07-02 20:17:22 +01:00
Mark Liversedge
3cee7dacfa Fixup trend line migration
.. now a combo and not a checkbox

.. default to no trend line
2014-07-02 19:58:06 +01:00
Mark Liversedge
a9720d6b36 Fixup CP chart
.. remove inverse time (but add support to Model for future reference)

.. fix x labelling for plotting Work

.. remove options for best shading, its now on or off

Fixes #924
2014-07-02 19:45:21 +01:00
Mark Liversedge
bb5fdb094d Zoom AllPlot a bit bigger 2014-07-02 15:48:20 +01:00
Mark Liversedge
be282e5cd4 Add Ralf Spenneberg to contributors 2014-07-02 15:48:01 +01:00
Mark Liversedge
e32714f6eb Merge pull request #959 from spenneb/master
Edge 1000 added
2014-07-02 15:45:04 +01:00
Ralf Spenneberg
b1e20bf8b9 Edge 1000 added 2014-07-02 16:41:33 +02:00
Mark Liversedge
1066dd2975 Fix W'bal compare mode
.. it was accidentally omitted and somehow got lost and
   never added back.

.. we now show w'bal in compare mode and its probably one of
   the most interesting comparisons !!!!

Fixes #958
2014-07-02 13:57:52 +01:00
Mark Liversedge
4e8cd2398c Classic theme accent color
.. made Fuschia to be a little more vibrant
2014-06-30 22:47:24 +01:00
Mark Liversedge
b1d4bd1239 Change 'Classic' theme
.. it needed color selections that worked better on
   a light background
2014-06-30 20:08:32 +01:00
Mark Liversedge
a551335b6d GProgressDialog Mac QT 5.3.1 fixups
.. being more careful with modality and mainwindow
2014-06-30 18:03:44 +01:00
Mark Liversedge
224d1d0a4b GProgressBar honour Theme Flat/Mac 2014-06-30 17:04:58 +01:00
Mark Liversedge
30ac368f03 GProgressDialog
.. in an attempt to avoid the QT 5.3.1 QProgressSialog
   bug and also put a bit of our own styling onto this
   a GC implementation of QProgressDialog

.. it has no abort button DELIBERATELY

.. not tested on OS X .. yet
2014-06-30 16:38:03 +01:00
Mark Liversedge
26b10b2aa9 Merge pull request #955 from Joern-R/pull3
Translation DE - Update
2014-06-30 13:28:22 +01:00
Joern
6d7771d77f Translation DE - Update
... translation updates to latest Commit Level
2014-06-30 14:29:03 +02:00
Mark Liversedge
142882be48 Merge pull request #954 from Joern-R/pull2
Some more AM/PM adjustments
2014-06-30 13:20:05 +01:00
Joern
3e62f8e139 Some more AM/APs
... some more AP/AM changes (hopefulyl the last ones)
... Setttings.h - the GC_DATETIMEFORMAT constant is not used anywhere
(old usages are de-activated)
2014-06-30 14:21:19 +02:00
Mark Liversedge
205fa1e54b Merge pull request #953 from Joern-R/pull1
Compare Pane - treatment of duration & problem when adding new metrics
2014-06-30 12:49:41 +01:00
Joern
21f30cb14e Compare Pane - treatment of duration & problem when adding new metrics
... treat both Time & Duration equally (don't use QTime->toString), but
convert into seconds (since duration can be above 23:59:59 - especially
in Trends view
... table widget looses columns when dynamically adding columns in
Options->Metrics (fixed by setting columnCount to (0) first before
defining the new number of columns)
2014-06-30 12:56:03 +02:00
Mark Liversedge
ae00fe4965 Merge pull request #952 from Joern-R/pull6
Compare Pane - sorting improvements / fix SEGV
2014-06-29 20:07:39 +01:00
Joern
5eba402166 Compare Pane - sorting improvements
... when sorting first and adding new items, table data is partly empty
and when you next click on item GC dumps (fixed by de-activating the
sorting while refreshing the QTableWidget)
... date fields did not sort due to different formats strings used in
"toString" and "fromString" conversion / added info to translators
... duration and time fields did sometimes not sort (dependent on
time/duration having hours or not)
2014-06-29 18:48:41 +02:00
Mark Liversedge
dc6986725e Merge pull request #951 from Joern-R/pull5
Details - Metrics Tab (UI Nit)
2014-06-29 14:13:54 +01:00
Mark Liversedge
c2150e8c6f Merge pull request #950 from Joern-R/pull4
Consistent handling of "seconds" and tr('seconds')
2014-06-29 14:13:18 +01:00
Mark Liversedge
cc6ad31eb1 Merge pull request #949 from Joern-R/pull3
Remove AM/PM from time formatting (to be Locale neutral)
2014-06-29 14:12:37 +01:00
Joern
f7ba8c2db5 Details - Metrics Tab (UI Nit)
... for metrics / time fields ("seconds") don't show units, since the
field is QTimeEdit (in hours)
2014-06-29 12:36:02 +02:00
Joern
1f10f04fe2 Consistent handling of "seconds" and tr('seconds')
... check both for original text and translation when settings precision
for plot
... consistent handling of 'seconds' in GC
2014-06-29 12:34:14 +02:00
Joern
312e5b0f03 Remove AM/PM from time formatting (to be Locale neutral)
... sync all format strings for time input/output to 'hh:mm:ss'
... remove any 'AM/PM' time formats
... remove tr() commands from time formats (since 'hh:mm:ss' is
reasonable around the globe)

... main reason: QT5 does not follow the pure formatting rules any more
(like QT4), but considers the system.locale in formatting as well (so
for system which have no AM/PM, even if the format string is set, the QT
routines ignore that - having some side effect on GC)
2014-06-29 11:24:56 +02:00
gcoco
755ed97b6c Add missing semicolon 2014-06-29 04:20:35 -04:00
gcoco
5a88a43a65 Add #DEFINES to GC_HAVE_DWM 2014-06-28 20:50:03 -04:00
gcoco
7ed9d67e9b Fix case for dwmapi.h 2014-06-28 20:49:19 -04:00
Mark Liversedge
caa0b21949 GC_VIDEO_XXX Configuration (mac)
.. works on Mac too, added ability to disable video altogether
   on Mac with GC_VIDEO_NONE even though it uses native libs so
   pretty pointless !
2014-06-28 15:58:52 +01:00
Mark Liversedge
5fd4005f13 Enable Drag/Drop on QT 5 > 5.3.1 on Ride List
.. they fixed the bug in QT at 5.3.1

.. see https://bugreports.qt-project.org/browse/QTBUG-37813
2014-06-28 15:27:39 +01:00
Mark Liversedge
ddfdb78e55 GC_VIDEO_XXX Configuration (windows)
.. now tested on Qt4 and Qt5 with VLC and NONE without issues.

.. but did notice a double include in GcWindowRegistry that has been removed.

NOTE: Still needs testing on Mac OS X
2014-06-28 15:22:20 +01:00
Mark Liversedge
fde98093a7 GC_VIDEO_XXX Configuration
.. you can now select what kind of video widget you
   want to build.

   GC_VIDEO_NONE       - No media support compiled in
   GC_VIDEO_VLC        - Use VLC (only on Win/Linux)
   GC_VIDEO_QUICKTIME  - Use Apple QuickTime (only on OS X)
   GC_VIDEO_QT5        - QT5 video and associated backends (O/S dependent)

NOTE: This needs testing on non-Linux platforms.
2014-06-28 14:49:33 +01:00
Mark Liversedge
db94e5719c Merge pull request #948 from Joern-R/pull2
Options - CP and LT Zones (UI nit)
2014-06-28 14:13:01 +01:00
Joern
1718fb095c Options - CP and LT Zones (UI nit)
... some columns  not included in bold/normal switching of "Def" button
2014-06-28 14:46:49 +02:00
Mark Liversedge
2826473089 Merge pull request #947 from Joern-R/pull1
LTM Popup - cosmetics
2014-06-28 12:48:33 +01:00
Joern
af7685a11b LTM Popup - cosmetics
... Font-Size for Header Texts increased to 10px (since the 8px font is
very ugly - at least on Windows 7) - since the Screen can be resized,
bigger header texts can still be read after resizing.
2014-06-28 13:47:59 +02:00
Mark Liversedge
02c8ae5252 Merge pull request #946 from Walibu/master
Fix error about missing qtsolutions/config.pri with Qt 5
2014-06-28 12:40:08 +01:00
Walter
0bde2d564f Fix error about missing qtsolutions/config.pri with Qt 5 2014-06-28 13:27:23 +02:00
Mark Liversedge
e56b8b2444 Fix SEGV when old charts.xml present
.. because there will be ZERO presets !
2014-06-28 10:46:45 +01:00
Mark Liversedge
7fac0694eb TRUE/FALSE are case sensitive
.. change to true/false
2014-06-27 19:45:46 +01:00
Mark Liversedge
4eb106d045 Merge pull request #944 from Joern-R/pull2
Translation DE - update
2014-06-27 19:44:25 +01:00
Mark Liversedge
ffd67ae0cf Merge pull request #943 from Joern-R/pull1
LTM Popup - a few more improvements
2014-06-27 19:43:42 +01:00
Joern
ae6c80d2f7 Translation DE - update
... updated translations for DE
2014-06-27 20:01:53 +02:00
Joern
88431557e0 LTM Popup - last changes
... show also METRIC_BEST if such a curve is available
... ignore METRICs which are not ride related (Estimates, Measures) in
the Ride Table
... add Text if such a Metric was ignored (so that User do not assume
this to be a bug)
2014-06-27 19:54:15 +02:00
Mark Liversedge
716384a234 Add TRIMP based PMC to charts.xml 2014-06-27 07:01:52 +01:00
Mark Liversedge
846c9f20e1 A bit of transparency on reveal controls
.. sometimes they obscure chart content and its easy enough to
   make them slightly transparent.
2014-06-25 17:52:40 +01:00
Mark Liversedge
2ffce3f9e6 Fix 2secs ride plot fencepost errors
.. multiple off-by-one errors working together to truncate the
   ride plot by 2 seconds.

Fixes #935
2014-06-25 15:13:57 +01:00
Mark Liversedge
6b26f527fc Fix SEGV and more when athlete home changed
.. segv removed caused by signalling configChanged when context has been
   deleted due to all the mainwindows being closed

.. check for path being reset to blank as well as being set to a different
   place.
2014-06-25 12:30:52 +01:00
Mark Liversedge
ca49c67515 Fix up Library/GoldenCheetah and GC_HOMEDIR
.. fix the prior fix. ugh.
2014-06-25 11:47:30 +01:00
Mark Liversedge
7f1fa84827 Fixup a few string literal from QVariant issues
.. bug related to appsettings and "0" string occurred in a
   few places -- this fixes and post fixes that.
2014-06-24 19:29:56 +01:00
Mark Liversedge
0fc75b4493 Fix Library/GoldenCheetah bug
.. its complicated .. basically, if a local directory exists it will
   *always* be used for application settings.

.. when you run GC for the first time with a local Library/GoldenCheetah
   then the HOMEDIR_GC will not be set as there is no config in there

.. the code checks this setting for blanks (but that fails because the
   value actually returned is "0") and so the local library is set to the
   value returned "0"

.. but the local library doesn't exist so it falls back to opening from
   the default location but using config from Library/GoldenCheetah !

.. the next time you launch all this gets resolved and you use
   Library/GoldenCheetah with the settings you set the last time.

Fixes #936
2014-06-24 19:13:09 +01:00
Mark Liversedge
b51b04b22c For Pete and his Son
.. smaller cranks for the next Jack Bobridge !
2014-06-24 11:49:22 +01:00
Mark Liversedge
95a27c115d Remove qDebug from NullController
.. only used in testing but still irritating !
2014-06-23 17:03:27 +01:00
Mark Liversedge
c6ed3f0a3b Use QT 5 Video Playback
.. If you build with QT 5 then we now use the QT video widgets
   instead of VLC for Windows and Linux

.. We still use QuickTime for Mac OS X

NOTE: On linux Gstreamer is used and therefore all the right
      codecs and backends need to be setup for this to work.
      On windows its more complicated as it depends how Qt
      was compiled, see:

         http://qt-project.org/wiki/Qt_Multimedia_Backends
2014-06-23 16:23:45 +01:00
Mark Liversedge
b4da688395 Default linewidth smaller
.. was 2.0px now 0.5

.. no longer looks like it was drawn with a crayon by default !
2014-06-23 10:06:03 +01:00
Mark Liversedge
ce4715c379 Antialias is now on BY DEFAULT 2014-06-23 10:03:20 +01:00
Mark Liversedge
86db79a385 Clear Web caches between restarts
.. stops lots of LEAK warnings that are related to the
   javascript garbage collector (QT5).
2014-06-23 09:52:59 +01:00
Mark Liversedge
846f037130 Disable Drag/Drop Ride on Windows QT 5
.. it crashes !

.. we need to wait for QT 5.3.1 when this bug is
   fixed: https://bugreports.qt-project.org/browse/QTBUG-37813
2014-06-23 09:32:08 +01:00
Mark Liversedge
dc95a8d887 Fix redefinition of signal in RideNavigator
.. introduced when refactoring AnalysisSidebar
2014-06-23 09:14:09 +01:00
Mark Liversedge
6dd9d06c31 Fix SEGV on QuarqRideFile Windows QT5
.. delete the process later in the event loop.
2014-06-23 09:11:07 +01:00
Mark Liversedge
0bdf68a5d1 Windows Libusb / UsbXpress should be optional
.. ANT.cpp now happily compiles with no USB support
   present on Windows -- which means ANT will obviously
   no longer work, but that may be intended.
2014-06-22 22:01:52 +01:00
Mark Liversedge
776a59a5c6 Fix Windows QT5 Paths
.. no longer need to append 'GoldenCheetah' to the location
   since on QT 5 the executable name is used, which is GoldenCheetah

.. by sticking with this we can rename the binary to use a different
   location, which may be useful for testing
2014-06-22 22:01:52 +01:00
Mark Liversedge
b6fe1f0978 Tidy up warnings (Linux) 2014-06-22 16:34:28 +01:00
Mark Liversedge
e7a896db48 Add TISS to default metadata.xml 2014-06-22 16:28:59 +01:00
Mark Liversedge
5cc7fdf2a9 3.1 Upgrade Processing Part 3 of 3
.. PM chart is deprecated, so when loading an LTM chart
   with skiba curves is implemented instead.

.. we cannot easily add charts to the layout without refactoring
   HomeWindow so have moved that out of scope

NOTE: The upgrade processing has not been activated -- but can
      be once we build and issue our first 3.1 RC.
2014-06-22 16:25:17 +01:00
Mark Liversedge
1d73869a63 Merge pull request #933 from Joern-R/pull1
LTM Popup - further enhancements
2014-06-22 15:28:37 +01:00
Mark Liversedge
91fbd2dadc 3.1 Upgrade Processing Part 2 of 3
.. update RideMetadata to remove 'Default' color
   if it exists and add 'Reverse' color

.. will also add 'TSS', 'Aerobic TISS' and 'Anaerobic
   TISS' to the metric tab if needed to avoid FAQ #1.
2014-06-22 14:52:15 +01:00
Mark Liversedge
22e136f96f 3.1 Upgrade Processing Part 1 of 3
.. getting the upgrade code going, this just adds new functions
   for changing colors and themes and doesn't perform an upgrade

.. Part 2 will deal with W' and power.zones changes

.. Part 3 will deal with chart setup changes
2014-06-22 13:08:27 +01:00
Joern
1cea0b2585 LTM Popup - further enhancements
... make window "minimumSize" - so that resize in case of many columns
works
... handle LTM_TOD when called from LTM-Chart (list the rides in the
hour, considering DateRange)
... consider HomeFilter and Search/Filter in result list
... also show Rides of only 1 ride is selected (since Rides contain
Date/Time) and the Metrics (which mostly are not part of the Summary
HTML)
... do not allow MouseSelection of only 1 Ride is shown
... some more tr()
2014-06-22 13:08:44 +02:00
Mark Liversedge
70fda6eefa Add 3d back to default layout
.. now the phantom widget glitch is fixed
2014-06-22 09:34:04 +01:00
Mark Liversedge
ba78583e12 Remove Orphaned Widget in HomeWindow !
.. wow, this has been there for at least 3 or 4 years and
   never bitten us.

.. for some strange reason it bites when you have a 3d plot
   in one of the layouts.
2014-06-22 09:31:26 +01:00
gcoco
190e3fdfab Blank Summary subtitle 2014-06-21 21:50:11 -04:00
Mark Liversedge
615fd3931f Remove 3d from default layout
.. until we sort the phantom widget issue.
2014-06-21 23:00:01 +01:00
Mark Liversedge
8669ce641a 3d plot code update
.. to reflect current code requirements

NOTE: there is a 'phantom' widget with the 3d window that
      covers the left side of the chart bar and makes it
      impossible to click on the summary button.
2014-06-21 22:58:20 +01:00
Mark Liversedge
68bb257b77 Add 3d plot to standard layout 2014-06-21 20:50:33 +01:00
Mark Liversedge
6ed1fb20c0 3d plot honor CPLOTMARKER
.. for axis colors
2014-06-21 20:47:20 +01:00
Mark Liversedge
c3528a9b76 Fix V Alignment for Stack Series
.. using setMinimumExtent()
2014-06-21 11:58:21 +01:00
Mark Liversedge
c12a2ea4d4 W'bal use kJ not J on AllPlot Axis
.. uses less space !
2014-06-21 11:24:53 +01:00
Mark Liversedge
ad6f574463 Fix W'bal series plot pan zooming
.. when series stack plotting in AllPlot the W'bal series
   doesn't pan/zoom along with the other plots
2014-06-21 10:42:14 +01:00
Mark Liversedge
3854216c01 Fix LTMCanvasPicker SEGV on delete tab
.. not always, but sometimes !
2014-06-20 17:24:41 +01:00
Mark Liversedge
4e0ef64a90 Tooltip Color
.. changed from yellow to light gray to be more theme
   neutral and align with the colors across the rest
   of the base gc colors.
2014-06-20 16:21:00 +01:00
Mark Liversedge
65a45eb508 Add Temperature to Season Summary
.. if it is available, like we do for ride summary
2014-06-20 16:04:07 +01:00
Mark Liversedge
2438d647d7 Merge pull request #932 from Joern-R/pull-l1
Translation DE - Update
2014-06-20 14:59:29 +01:00
Joern
ee51378759 Translation DE - Update
... more translations / following latest code changes
2014-06-20 16:00:41 +02:00
Mark Liversedge
88e1dc5745 Fix column chooser in activity log 2014-06-20 14:00:26 +01:00
Mark Liversedge
8ebcc43e25 Forgot to set aggregateZero() to true for Temperature ! 2014-06-20 13:14:10 +01:00
Mark Liversedge
22eb4b08ae Merge pull request #931 from Joern-R/pullpopup
LTM Popup - HTML generation
2014-06-20 13:05:59 +01:00
Mark Liversedge
7c7989a803 Fix Average Temperature Issues
.. Don't include -255 in average

.. Don't show -255 in ride navigator

.. Don't show a value on summary if not preset
2014-06-20 12:59:03 +01:00
Joern
97e160ab05 LTM Popup - HTML generation
... generating HTML instead of Template File (to allow translation)
... considering the same Fields, incl. User Defined Metrics as Summary
Page HTML
... aligning Vertical Scroll bars + adding a little space between the
widgest so that Scroll Bars do not touch each other
2014-06-20 13:24:08 +02:00
Mark Liversedge
cf445e87bd Metric Aggregation ::aggregateZero() method
.. when aggregating metrics across rides we were being inconsistent
   with regards how we handled zero values; we sometimes included them
   and sometimes didn't.

.. now added a metric method bool aggregateZero() that returns true
   if aggregates need to include zero values

.. this has been implemented where averages are aggregated.
2014-06-20 11:19:55 +01:00
Mark Liversedge
5a9cd0f7bd Remove unneeded #define
.. it caused a compile error for some strange reason
   on mingw64 !? (#define DEVICE_TYPE 0)
2014-06-20 08:34:09 +01:00
Mark Liversedge
84b6fbc6b7 Merge pull request #930 from Joern-R/pull1
Translation Enablement
2014-06-20 08:30:20 +01:00
Joern
bc61c1b845 Translation Enablement
... just 2 tr()s
2014-06-20 09:10:52 +02:00
Mark Liversedge
42ad13f848 DataFilter handle metadata numerics
.. code assumed numeric fields always metrics when they
   could also be metadata.

.. this also fixes checkbox tests too
2014-06-19 21:25:58 +01:00
Mark Liversedge
d7e8a23794 Sidebar summary honor color changes
.. was not being redrawn when the color preferences changed.
2014-06-19 13:17:05 +01:00
Mark Liversedge
c94b7a5bb2 Add Group By ALL to LTM
.. can see the total / average or bests for the date range selected

NOTE: Data Table mode is currently a bit broken .. need to revisit it
      and fix it up, not just for ALL mode but also for Estimates
2014-06-19 10:40:48 +01:00
Mark Liversedge
21232465be Pedalling metrics, ignore zeroes in Average
.. when averaging lr balance, pedal smoothness etc we now
   ignore values when cadence is zero.

.. the zero values are not meaningful and skew the average to
   render them almost useless !
2014-06-19 10:08:12 +01:00
Mark Liversedge
0c61967d80 Add TSS per hour metric
.. on request from Massarob.
2014-06-18 21:18:17 +01:00
Mark Liversedge
9669e6f8cf Fix SEGV on CP export with no model 2014-06-18 19:16:43 +01:00
Mark Liversedge
4a18cccacf Fix SEGV in LTMtool add curve
.. when switching from best to estimate and back again.
2014-06-18 07:18:11 +01:00
gcoco
2d62a8efdc Remove subtitle data
Where is Mole Street?
2014-06-18 00:48:46 -04:00
Mark Liversedge
e69176c5ae Add Endurance Index to CP overlay
.. for power and w/kg
2014-06-17 21:41:59 +01:00
Damien
74ad5e1ec7 Translation: update ts files 2014-06-17 21:45:12 +02:00
Damien
5b2b8f92ef Tranlation: Update french 2014-06-17 21:44:05 +02:00
Mark Liversedge
1bbccee074 Add Cheetah icon back to About box
.. not sure how it got removed !
2014-06-17 19:54:05 +01:00
Mark Liversedge
253bc089eb Filter unreasonable model estimates
.. basically where data is sketchy or doesn't have enough
   representative efforts the model will produce lowball numbers
   which are not meaningful and should be discarded.
2014-06-17 19:36:55 +01:00
Mark Liversedge
ddb4359180 Revert "Filter out estimates"
This reverts commit 2fdc18b2c3.

Because we should correct at source (i.e. where the PD estimates
are being computed) and the fix breaks w/kg display because it
doesn't apply different limits for absolute vs w/kg values.
2014-06-17 19:28:29 +01:00
Mark Liversedge
d389b60ca6 Merge pull request #929 from Joern-R/pull2
Translation Enablement
2014-06-17 19:19:58 +01:00
Joern
e8bb306ec8 Translation Enablement
... more enablement in HTML area by isolating the tr() relevant part in
long HTML Strings
2014-06-17 20:08:06 +02:00
Mark Liversedge
2fdc18b2c3 Filter out estimates
.. in ridesummary where they are out of bounds
2014-06-17 18:11:32 +01:00
Mark Liversedge
8b9343c4fb Added Endurance Index to PD Model
.. and also added to the default setup
2014-06-17 16:33:46 +01:00
Mark Liversedge
099dd9a58f Add metric count to about box 2014-06-17 14:55:56 +01:00
Mark Liversedge
db6455f466 Fix LTM curve config nits
.. setting the radio button and the text for the metric/best
   or estimate when it is selected.
2014-06-17 10:13:25 +01:00
Mark Liversedge
04f85cae6a Fix W' glitch of distance jumps to 0
.. pointed out by Claus Assmann on the list, when he should have
   been celebrating Germany 4 - Portugal 0 ;)
2014-06-16 19:20:59 +01:00
Mark Liversedge
0025a3073e Add dummy PD estimate if none computed
.. to stop endless refreshes of the estimates !
2014-06-16 16:06:33 +01:00
Mark Liversedge
aa2a185fd4 Merge pull request #928 from Joern-R/pull1
TreeMap - multi-language enablement
2014-06-16 15:54:53 +01:00
Joern
81a59f7b7b TreeMap - multi-language enablement
... use translated Metadata terms for Tree Dimensions (via Special
Fields)
... store the Metadaten information in Home-Layout.XML in "EN/Original
Language" and convert back/forth as needed
... fixed an issue, that Rides for a Cell are not selected in case the
resp. Metadata field is empty
2014-06-16 16:39:09 +02:00
Mark Liversedge
8bb09048e0 CP clean up
.. use J/kg not Kj/Kg on overlay

.. bounds check the ranking to make sure it is in bounds
2014-06-16 11:37:54 +01:00
Mark Liversedge
d9eb99b777 Merge pull request #927 from olympum/master
Add virtual power profile for Elite Qubo Power Fluid
2014-06-16 05:36:53 +01:00
Bruno Fernandez-Ruiz
91ee82e39c Add virtual power profile for Elite Qubo Power Fluid 2014-06-15 21:44:30 +01:00
Mark Liversedge
d45507c1a4 Fixup QTextEdit stylesheet
.. different on metadata to everywhere else !
2014-06-15 15:04:32 +01:00
Mark Liversedge
61acb59fe4 CPLOTGRID used for Metadata Borders
.. starting to see a pattern now of which colors are
   meaningful .. should look at rationalising this
   in v3.2
2014-06-15 12:19:55 +01:00
Mark Liversedge
d0218bf00a Merge pull request #926 from Joern-R/pull2
Show Heat - sometimes wrong scale
2014-06-15 12:11:32 +01:00
Mark Liversedge
170d41da52 Merge pull request #925 from Joern-R/pull1
Translation Enablement
2014-06-15 12:10:36 +01:00
Joern
67fdb2164a Show Heat - sometimes wrong scale
... set YAxis scale
... set more specific YAxis texts (Percent of Best / Heat)
... Adjust Unit in Heat Hover
2014-06-15 13:00:25 +02:00
Joern
838d27833b Translation Enablement
... tr()
... Adding to Special Fields (allow translation of "Details->Extra"
fields
2014-06-15 12:56:55 +02:00
Mark Liversedge
ac4dd5172a Apply stylesheet to ride metadata
.. and tidy up a few nits here and there
2014-06-15 11:49:43 +01:00
Mark Liversedge
0fce4b27e8 Use w/kg units always, not wpk
.. and also allow lrbalance in data filter
2014-06-15 09:26:45 +01:00
Mark Liversedge
ee6251beff Model Estimate Fixups
.. don't rely upon ZDATA metadata, instead we add
   a new 'present' field that contains the Data meta value

.. navigator defaults columns when they're all messed up

.. summary isn't so noisy when providing progress updates
2014-06-14 20:24:06 +01:00
Mark Liversedge
8038799b65 Less Obtrusive Update on Estimate Task
.. less jarring !
2014-06-13 23:40:17 +01:00
Mark Liversedge
db3434fe1a Confirm popup on reset layout
.. user might not have mean't it.
2014-06-13 23:09:22 +01:00
Mark Liversedge
d1cd72079b HrPw color prefs and style
.. to match current look and feel across other main charts
2014-06-13 22:54:53 +01:00
Mark Liversedge
057165bba8 Add HrPw to the default layout 2014-06-13 22:22:41 +01:00
Mark Liversedge
36b2fe5ad7 Allow Fullscreen Startup
.. thanks to Claus Assman for pointing this out.
2014-06-13 21:21:54 +01:00
Mark Liversedge
3fce88ecde Model Estimate Progress
.. might remove it, but good to help debug issues !
2014-06-13 21:11:38 +01:00
Mark Liversedge
c86b61ca67 Merge pull request #917 from Joern-R/pull1
Translation Enablement
2014-06-13 19:45:36 +01:00
Joern
fd2d9a7875 Translation Enablement
... and nothing else
2014-06-13 20:45:04 +02:00
Mark Liversedge
903e80260d Mac Web Fonts 2014-06-13 18:53:29 +01:00
Mark Liversedge
df245b84ea Fix font selection
.. should update when saved not restarted.
2014-06-13 18:10:48 +01:00
Mark Liversedge
f9c87fbd0f Don't wait - cancel - the pd estimate thread
.. it might take ages and we don't care about the results !
2014-06-13 16:26:11 +01:00
Mark Liversedge
c77da956af Fixup initial geometry and positioning
.. some regressions in there (setting only saved on move)

.. will check the positioning and geometry are sensible regardless
   of whether they come from appsettings or defaults.
2014-06-13 16:15:35 +01:00
Mark Liversedge
adeb5ef13b LTM Marker colors
.. dash lines and red, makes it a bit more like
   the styling on allplot

.. might be interesting to add 'hover' on seasons.
2014-06-13 13:58:56 +01:00
Mark Liversedge
f175056e2b Isolate Curve Labels but not Vertical Markers
.. as they represent intervals and events and are therefore
   related to the x-axis (time/distance) rather than any
   y-axis we may be showing / hiding.
2014-06-13 12:44:12 +01:00
Mark Liversedge
4eea3214f1 Show/Hide Labels on Curve Isolate
.. as LTMplot uses them a lot to mark values that
   are topN or lowN
2014-06-13 11:16:54 +01:00
Mark Liversedge
44fd164525 Enable Curve Isolation on Trends chart
.. isolation used on AllPlot when hover on axes is
   equally useful on the LTM trends chart.
2014-06-13 09:31:33 +01:00
Mark Liversedge
471ec59f6e Merge pull request #914 from Joern-R/pull2
Windows - Menu bar - Mac / Style problem
2014-06-12 20:12:11 +01:00
Joern
db14c65969 Windows - Menu bar - Mac / Style problem
... in Windows - Mac / Metallic style did not work any more, only flat
style color was shown
2014-06-12 19:09:22 +02:00
Mark Liversedge
f0280d5b90 Updates to Trends stress chart
.. shows short and long term values
2014-06-12 14:01:27 +01:00
Mark Liversedge
eaa067a075 Fix ChartBar Button Sizes on Mac
.. was using the wrong font metrics
2014-06-12 11:54:25 +01:00
Mark Liversedge
e6d4293d37 Remove Chart sidebar menu indicator
.. reinstate when that menu popup exists !
2014-06-12 09:52:34 +01:00
Mark Liversedge
ee6dcddc45 New Default Trends Layout
.. now includes the Library chart to exploit the new
   sidebar chart selection.
2014-06-11 19:24:52 +01:00
Mark Liversedge
bf2404715c Merge pull request #913 from Joern-R/pull-l1
Translation DE 3.1 (initial delivery)
2014-06-11 18:38:36 +01:00
Joern
3617bb93ef Translation DE 3.1 (initial delivery)
... initial delivery for German translation of 3.1
2014-06-11 19:17:26 +02:00
Mark Liversedge
ca3a1e4fa8 Merge pull request #912 from Joern-R/pull1
Bikescore (TM) unique Handling (Part 2)
2014-06-11 17:57:27 +01:00
Joern
fd61805bd7 Bikescore (TM) unique Handling (Part 2)
... have the same consistent handling for (TM) at all visible places
... do not allow Translation of BikeScore (since it's a TM and might
cause unexpected behavior)
... Have (TM) sign everwhere visible - only in Searches just use
"BikeScore" as Symbol
2014-06-11 18:55:23 +02:00
Mark Liversedge
eb10b2e8d1 Chart Library Part 2 of 3
.. LTM chart now has a 'use sidebar settings' checkbox
   and will display the chart that is selected in the sidebar

.. as the sidebar selection changes the window will plot it
   using data for the current date range configured / selected

.. part 3 will now come later to let you manage the charts from
   the sidebar menu (it is already in the LTM tool).
2014-06-11 17:55:07 +01:00
Mark Liversedge
818321fe04 Charts Icon 2014-06-11 16:16:02 +01:00
Mark Liversedge
249402958f Chart Library Part 1 of 3
Add preset charts to the LTM sidebar, and allow LTM charts
to refer to sidebar for config instead of the local config.

In this way we can have a chart that changes as we select different
charts in the sidebar and remove the need to have lots and lots of
different charts on the tabs.

But it still allows for the old way of doing things -- just adds
another type of flexibility -- for instance a user could add
charts with set date ranges but no specific curve setup so they
could havethis year, this month, last month charts that change as
charts are selected in the sidebar.

This first commit just adds the sidebar item, next we will update
the LTM chart to refer to it in part 2 and then in part 3 we
will add functions on the sidebar to manage the chart presets in
the same way as in LTMTool.
2014-06-11 16:12:37 +01:00
Mark Liversedge
b0d38aafd7 Less precsision on W' J/KG
.. missed off for ranges on RideSummary
2014-06-10 21:43:30 +01:00
Mark Liversedge
bc290b397c Fixup interval select in Maps
.. deleting things removed signal/slot connections !
2014-06-10 21:20:40 +01:00
Mark Liversedge
e7c9a20ec0 Fix Map redisplay QT4.8 and Windows
.. webbridge gets stuck and we delete and recreate
   it to reset for a new map display.

   Seems to be a bug in webkit ...
2014-06-10 20:07:42 +01:00
Mark Liversedge
1c77185a59 Merge pull request #911 from Joern-R/pull1
Bikescore (TM) unique handling all languages & Translation Enablement
2014-06-10 19:56:22 +01:00
Joern
681cf48098 Bikescore (TM) unique handling all languages & Translation Enablement
... sync handling of (TM) in all places and Do Not allow translation for
these terms any more, since it's a fixed term anyway - and there are
many dependencies (which outside EN create unexpected results). - in all
Texts/Fields use (TM) in HTML use the TM (special characters).

-- more testing in language other then EN still required - but so far
working fine

... and more tr()
2014-06-10 20:55:41 +02:00
Mark Liversedge
bb1e8e3917 Reinstate show() for new charts in tile mode
.. was removed due to a crash on beta versions of QT5
   but appears to work fine with QT 5.3.0, so reinstated!

Fixes #910
2014-06-10 15:58:50 +01:00
Mark Liversedge
c86b85d12c Updated Metadata.xml
Now by default we include;
- Weight
- TSS
- CP

Colors now have;
- Reverse
- Colors that look good in dark / light
2014-06-10 15:11:11 +01:00
Mark Liversedge
2e1c2366fc Move editor to end of charts
.. on ride view
2014-06-10 15:00:51 +01:00
Mark Liversedge
f83cf11ab3 Undo accidental push of Upgrade WIP
.. pushed untested and unfinished changes for the
   3.1 upgrade process, this push undoes that.
2014-06-10 14:53:54 +01:00
Mark Liversedge
e70d6c302e Fix crash on apply preset with BESTS data
.. settings.bestresults was not being set
2014-06-10 14:47:14 +01:00
Mark Liversedge
85b0b82a14 Added CP History and PMC to default charts
.. in charts.xml
2014-06-10 14:31:37 +01:00
Mark Liversedge
448b85c9c5 Fixed LTM charts.xml read/write
.. but now a new format and the old ones will need to be
   removed from the athlete directory on upgrade.

.. the new default charts.xml is exactly the same as the
   old one, but in the new format.
2014-06-10 13:58:17 +01:00
Mark Liversedge
53ad9f898b Fix Preset maintenance in LTM tool
.. but the read and write functions are so far out
   of date that applying a saved chart causes a crash

.. so we need to fix the read/write functions for charts.xml
2014-06-10 12:59:47 +01:00
Mark Liversedge
2c6e54bee5 Fix quickfire exit crash
.. as getPDEstimates is still running in the background and
   we need to wait for it to finish in RideSummaryWindow.
2014-06-10 11:59:19 +01:00
Mark Liversedge
97b1eb4010 Move LTM Preset charts to Athlete class
.. lots of work to do to clean this up, especially
   keeping the presets updated when renaming is done.

.. also need to save away after changes.

.. also need to create a much better default set of
   presets taking into account the more recent additions
   such as Estimates amd Bests and new metrics
2014-06-10 11:45:56 +01:00
Mark Liversedge
87504f3062 Fix ComparePane quickfire drag and drop crash 2014-06-09 21:42:50 +01:00
Mark Liversedge
fc8be32473 Searchbox rounded corners
.. gone in flat mode.
2014-06-09 20:39:59 +01:00
Mark Liversedge
bc16105125 Merge pull request #907 from Joern-R/pull1
Data Filter - Internal Field Names + Multiple tr()
2014-06-09 19:43:37 +01:00
Joern
46ca3fb77a Data Filter - Internal Field Names + Multiple tr()
... allow/use only internal field names (delivered by Column Chooser) in
Data Filter expressions
... multipe tr()

(cherry picked from commit bc4164adab74dd82c0a0307d7d0fbb736f95ef0d)
2014-06-09 20:26:43 +02:00
Mark Liversedge
1d3b855f90 Add Estimates /kg to LTMPlot 2014-06-09 18:19:42 +01:00
Mark Liversedge
5a8248d614 Show w/kg J/kg estimates on Ride Summary
.. and fixes up the calculation too.
.. still need to fix up the LTM plot
2014-06-09 17:33:56 +01:00
Mark Liversedge
741528719a Add WPK estimates to PDEStimates
.. but not plotted in LTM or shown o the
   summary chart yet
2014-06-09 12:40:48 +01:00
Mark Liversedge
b890459b5a Clear Interval Summary on Ride Selection
.. otherwise its left with summary from previous ride.
2014-06-09 11:27:43 +01:00
Mark Liversedge
90ded04a53 Move wpk array next to watts array in cache
.. so we can read them both in with a single
   read -- this is to support an update where
   pd estimates support wpk and absolute watts.
2014-06-09 09:10:40 +01:00
Mark Liversedge
7480a2ea00 Merge pull request #906 from Joern-R/pull1
Support Metric Names with "special characters" for Column Chooser Drag&D...
2014-06-08 19:58:56 +01:00
Joern
327a03b74e Support Metric Names with "special characters" for Column Chooser Drag&Drop
!!! please check if this right way to do it.
... column names containing special characters (here greek "average"
sign) did not work in Drag&Drop (even though they should be part of
Latin-1 (after changing in Mime to UTF-8) not only the greek characters,
but also "TM" works without special treatment)
!!! is this valid for all platforms ?!!!

(cherry picked from commit b4d1a7d3041beec686c7262cfa65bac8cf6e2179)
2014-06-08 20:51:32 +02:00
Mark Liversedge
334d46bf61 Compare Pane Table better color support
.. headings color and remove frame
2014-06-08 19:22:31 +01:00
Mark Liversedge
5d8670a43e Merge pull request #905 from Joern-R/pull1
Translation Enablement & "seconds"
2014-06-08 18:45:13 +01:00
Mark Liversedge
f20dfd0c82 Fix Date Range Drag and Drop
.. internal move
.. that was hard!
2014-06-08 18:05:45 +01:00
Joern
7222182bf7 Translation Enablement & "seconds"
... more tr() changes
... added comparison for  both "seconds" OR tr("seconds") to all other
occurences found
... added "Lap" text for Intervalls imported in Garmin FIT format (this
is what Garmin delivers)

(cherry picked from commit ad790f05a386e3ae5c5b9dc129a216ac451b8cfc)
2014-06-08 17:55:24 +02:00
Mark Liversedge
acd61e7076 Fix Overlay Widget colors
.. and along the way discuovered context is not initialised
   correctly in GcChartWindow !
2014-06-08 16:10:37 +01:00
Mark Liversedge
37b9c4c20e Darker flat chrome Linux/Win
.. makes for a better match to the chartbar and sidebar
   items when in flat mode and not on a Mac.
2014-06-08 15:51:27 +01:00
Mark Liversedge
54be65cf72 Fix new CP chart show bests
.. didn't show bests and model till date range changed
   in settings or GC was restarted.
2014-06-08 15:12:00 +01:00
Mark Liversedge
4b2a444a3d Fix color or red wavy line text
.. in the ride editor
2014-06-08 14:54:06 +01:00
Mark Liversedge
340d8599bf Fix useMetric in Scatter plot
.. was broken when we moved useMetricUnits to the
   Athlete class and a local bool remained.
2014-06-08 14:19:36 +01:00
Mark Liversedge
318cebfa56 Fix time tooltip on AllPlot 2014-06-08 13:53:48 +01:00
Mark Liversedge
760d75d852 Merge pull request #903 from Joern-R/pull1
Translation Enablement & consider "seconds" translation
2014-06-08 12:19:33 +01:00
Mark Liversedge
0ebc66ed3c Don't allow 0 smoothing in compare mode
.. we need all intervals to have a common smoothing
   applied or it breaks the charts
2014-06-08 11:58:43 +01:00
Mark Liversedge
0ba03ddf40 Turn smoothing OFF if smooth < recIntSecs
.. i.e. don't do ANY smoothing

.. last commit fixed performance but really adds
   no value to smooth data to the interval it was
   recorded at !!
2014-06-08 11:53:00 +01:00
Mark Liversedge
3a9cde8174 No smoothing applied when smooth < recIntSecs
.. its pointless

.. it is a big performance overhead

Fixes #753.
2014-06-08 11:49:09 +01:00
Mark Liversedge
9cb0b5755e Calendar Chart now honours colour preferences
.. think that is the last of all the charts now done.
2014-06-08 11:40:13 +01:00
Joern
e0d336afb0 Translation for Filter/Autofilter
... Filter/Autofilter did not consider Translation of the Filter
Criteria - using Special Fields (to translate from internal to external
names is working for me - but do special fields cover all variants?)

(cherry picked from commit 5cc4218a2a0877a1f8ff4f36d1367bee37c34d2d)
2014-06-07 20:37:09 +02:00
Joern
21b6b4993a Translation Enablement & consider "seconds" translation
... multiple tr() added for Intervals. Compare Pane
... in Compare Pane - in time metrics check for both "seconds" and
translated tr(seconds) (following the concept for time as at most other
places where units == "seconds" are checked

(cherry picked from commit 6c78b00b65a1d794eb99038f21d6e705d119d29e)
2014-06-07 19:52:24 +02:00
gcoco
b6910f4ffa Correct/consistent use of #include <windows.h> 2014-06-06 23:44:49 -04:00
Mark Liversedge
3f22b97cce Remove errant qDebug 2014-06-06 22:32:03 +01:00
Mark Liversedge
702f4682f4 Fix RideNavigator right click
.. always used 0,0 as pos.
2014-06-06 22:29:13 +01:00
Mark Liversedge
a520519db1 Athlete Tabs Background honour config
.. colour config is starting to get boring!
2014-06-06 21:31:08 +01:00
Mark Liversedge
457bd772ab Only need to wait on exit in QT 5.3
.. which is convenient because QThread::sleep is only
   public in QT 5.2.1 or higher.
2014-06-06 18:42:04 +01:00
Mark Liversedge
4b90d6e9d4 Fix QtConcurrent on QT < 5 2014-06-06 17:35:55 +01:00
Mark Liversedge
f8d9ce31dc Fix calendar colors
.. broke in last commit
2014-06-06 16:26:27 +01:00
Mark Liversedge
8d071338ef Better handling of dark chrome
.. if you have flat style and choose a dark color the
   chartbar and sidebars now use colors that make it
   possible to actually read the text
2014-06-06 15:43:59 +01:00
Mark Liversedge
cac50d949b Wait 10s for threads to finish when closing 2014-06-06 14:17:11 +01:00
Mark Liversedge
86570d7a30 Invert Color by Luminance
.. just added a GCColor::luminance() method ready for automatically
   selecting foregground colors in the application chrome.
2014-06-06 14:16:17 +01:00
Mark Liversedge
0b5d373751 Just use FTP not FTP / MMP60
.. its too wordy, and whatever Coggan says thats the
   value he's using but too obstinate to admit it.
2014-06-06 01:10:42 +01:00
Mark Liversedge
4539be8c72 Show model parameters on a ride summary
.. arguably more useful and also sets the cache up early too
   which is useful !
2014-06-06 01:08:37 +01:00
Mark Liversedge
95e8fcfa09 Show Model Estimates on Summary
.. they get refreshed in background so everyone wins !
2014-06-06 00:18:00 +01:00
gcoco
45b98b235f Merge pull request #900 from dawedawe/master
fix wording: "executage" -> "executable"
2014-06-04 22:03:47 -04:00
dawedawe
d6f6eb4f06 fix wording: "executage" -> "executable" 2014-06-04 13:07:26 +02:00
Mark Liversedge
45b615e553 Merge pull request #898 from Joern-R/pull
Translation Enablement
2014-06-03 18:34:21 +01:00
Mark Liversedge
40d9c91bbb Flat Titlebar not supported on QT < 5 on Mac 2014-06-03 18:33:11 +01:00
Mark Liversedge
33d2910488 Fix compile error on Mac < QT 5 2014-06-03 17:55:48 +01:00
Joern
0dfd78b2ef Translation Enablement
(cherry picked from commit 67be090de9cbc4772147a2ab0b08e28b96d67d12)
2014-06-03 17:08:36 +02:00
Mark Liversedge
f29f87066c Fixup Mac compile on QT < 5
.. blackline doesn't exist compile error.
2014-06-03 08:26:37 +01:00
Mark Liversedge
086aa0b3c2 Fix tooltip for Compare Delta Percent 2014-06-02 17:41:55 +01:00
Mark Liversedge
f86f4e7ed2 CP Plot Delta as Percent
.. delta plot but with percentage rather than absolute differences

.. particularly useful for plotting PD curve by seasons and looking
   at the gains/losses in percentage terms per season

.. also the differences in short and long durations in absolute terms
   often look quite different, in percentage terms there is often not
   a huge difference over seasons.

NOTE: Needs to be fixed up to do percentage differences by model.
2014-06-02 14:03:33 +01:00
Mark Liversedge
32ab055cab Mac now honours flat theme
.. but not sure its gonna be very popular !
2014-06-02 12:43:34 +01:00
Mark Liversedge
ef12c54382 Slightly wider scrollbars
.. 4px is too small.
2014-06-01 20:47:39 +01:00
Mark Liversedge
f08bfc9c4b Scrollbar hover highlight
.. on Non-Mac.
2014-06-01 20:38:43 +01:00
Mark Liversedge
d16a30330a Fix Overlay Widget Title Glitch
.. it wasn't centered on the titlebar.
2014-06-01 20:23:16 +01:00
Mark Liversedge
c9644bf8c3 Fix RideNvigator coloring
.. first one goes invisible
.. hover didn't highlight
2014-06-01 19:30:10 +01:00
Mark Liversedge
6e52284c39 Fix Overlay Widget
.. easier to grab and resize
.. move when it goes off screen
2014-06-01 18:48:16 +01:00
Mark Liversedge
14d95cf0ca Fix QStringSpinBox Style
.. on Linux and Windows
2014-06-01 16:58:38 +01:00
Mark Liversedge
fcea15fc92 Windows Style Part 3 of 3
.. flat colors based upon windows prefrences if on
   windows -- BUT ONLY if Dsmapi.h is available.
2014-06-01 15:33:23 +01:00
Mark Liversedge
5cb3ccf05d Window Style Part 2 of 3
.. apply Flat styling across all the widget painting

.. only use WHITE as the flat color for now, in part 3
   we will look at user customisation and updating the
   toolbar and sidebar buttons to also be flat.
2014-06-01 13:18:30 +01:00
Mark Liversedge
47dd807204 Window Style Part 1 of 3
.. refactor linear gradients out of the widgets
   such as toolbar, chartbar, sidebaritem etc

.. GCColor::linearGradient() now returns a gradient
   that is reused across the codebase

.. in Part 2 we will add a colour and flat style
   for the linearGradient

.. in Part 3 we will tidy up the styling for buttons
   and toolbuttons to adopt flat or metal styling too
2014-06-01 11:33:05 +01:00
Mark Liversedge
7ee52197a2 RideEditor Cosmetics
.. scrollbars tidied up
.. ugly grid lines removed altogether
2014-06-01 10:04:31 +01:00
Mark Liversedge
1827da15b3 Merge pull request #896 from Joern-R/pull
Translation Enablement + Check on temporary Seasons
2014-05-31 23:23:47 +01:00
Joern
1449805d7d Translation Enablement + Check on temporary Seasons
... Translation for Season Types
... Do not allow Temporary Seasons to be edited or deleted through the
main seasons menu (in right click Popup this was already blocked by not
offering the function)

(cherry picked from commit cc7a0a7f8d0b74ca4b9d64d61291206ea58d3f94)
2014-05-31 19:21:30 +02:00
Mark Liversedge
d1c3e6972c Fixup Metadata Styling on Linux
.. by using the Fusion style on the widgets
2014-05-30 23:40:37 +01:00
Damien
2a229a2d33 Translation: Update for 3.1 2014-05-30 23:19:13 +02:00
Damien
971fab9944 2 2014-05-30 23:01:34 +02:00
Mark Liversedge
f77eb5c14f Another Scrollbar ..
.. AllPlot IntervalSummary overlay needs its
   scrollbar styled.
2014-05-30 21:14:37 +01:00
Mark Liversedge
add3905d25 Remove unneeded bool in MergeWizard
.. use the pointer to the loaded ride instead
.. but also make sure it gets initialised too !
2014-05-30 10:37:34 +01:00
Mark Liversedge
3607f1833b Fixup Fix for MergeActivityWizard crash
.. TRUE/FALSE are case sensitive on Mac
.. ride2Loaded renamed ridesLoaded
.. ridesLoaded initialisation moved to constructor

Thanks to Jorn for the fix to a P0 bug !
2014-05-30 10:24:24 +01:00
Mark Liversedge
1f67774c53 Merge pull request #893 from Joern-R/pull
Avoid Dump in Merge Activity Wizard
2014-05-30 10:20:11 +01:00
Joern
2ae27ed71c Avoid Dump in Merge Activity Wizard
... Only allow "Next" if 2nd file is loaded (otherwise a dump occurs)

(cherry picked from commit 88b8479cbb90c8306ca32c0d193199ed895db95c)
2014-05-30 10:29:16 +02:00
Mark Liversedge
570ad7301c Merge pull request #892 from Joern-R/pull
Translation Enablement
2014-05-29 18:37:13 +01:00
Joern
5b8a98003a Translation Enablement
... some tr(...) missing - nothing else

(cherry picked from commit 12056261bc04269bbd723d7f0049cf193d950847)
2014-05-29 19:25:35 +02:00
Damien
a6886416dd Bin2RideFile: Correct Left-Right balance values in JouleGPS 2014-05-28 21:57:38 +02:00
Damien
912859b790 Translation: Update french 2014-05-28 21:57:20 +02:00
Mark Liversedge
a7c0fdf48d More css scrollbar nonsense
.. making scrollbars less obtrusive in webkit.
   because? well, reasons.
2014-05-28 16:21:29 +01:00
Mark Liversedge
389f503342 Fixup scrollbar width on Mac
.. in ridenavigator when system preferences are set to have
   a scrollbar always visible.
2014-05-28 11:32:17 +01:00
Mark Liversedge
1f28eb9892 Bit more space in Prefs
.. on a Mac the HR/Power athlete config pages
   are a little too spaced -- just turned it
   down a notch.
2014-05-28 09:48:57 +01:00
Mark Liversedge
e2b933fe2b Make Preferences/Options Resizable
.. when using other languages e.g German it may be
   useful to make it wider if needed.

.. the pane still appears using a minimum size that
   we calculate, so should affect users.
2014-05-28 09:23:32 +01:00
Damien
eeb7223c15 Translation: Update for 3.1 2014-05-27 23:10:54 +02:00
Mark Liversedge
ec3ce44399 Sidebar RideNavigator show/hide glitch
.. we needed to manually tell it to adjust columns
   since we turned off adjusting on window resize
2014-05-27 21:40:09 +01:00
Mark Liversedge
708e8f5f34 Trap WindowStateChange in MainWindow
.. but just to resize the toolbar when on a Mac
2014-05-27 21:21:17 +01:00
Mark Liversedge
29aa19fac2 Fix ScrollBar in HomeWindow
.. for tile mode.
2014-05-27 19:15:09 +01:00
Mark Liversedge
f3d72df955 Keep the box on ride list for Mac
.. introduced a bit of a glitch.
2014-05-27 17:03:03 +01:00
Mark Liversedge
dfa2946c1b Mac ride list nit
.. got rid of unneccessary line
2014-05-27 13:12:11 +01:00
Mark Liversedge
a1fc85740d Mac CSS Scrollbar fix
.. is invisible on a black background, so added an inset box shadow
2014-05-27 12:34:50 +01:00
Mark Liversedge
09ab79f221 Fix stylesheet/palette gotcha on AllPlot
.. mucked up the reset of the palettes for all
   the widgets when setting the stylesheet for
   the scrollareas.
2014-05-26 20:50:31 +01:00
Mark Liversedge
fbbce76ec3 More default font fixup
.. looks like 12 was the default -- which is
   totally inappropriate.
2014-05-26 20:42:34 +01:00
Mark Liversedge
517743f5d6 Default font size should be 10 not 12
.. Thanks to Jörn Rischmüller for highlighting
   this issue.
2014-05-26 20:37:54 +01:00
Mark Liversedge
1a39dd1520 Activity Log Scrollbar
.. aka RideNavigator when not in mainwindow mode
2014-05-26 20:20:20 +01:00
Mark Liversedge
0f1a2bf231 Scrollbars on LTM
.. think that is the last of them.
2014-05-26 20:16:48 +01:00
Mark Liversedge
894c23287a Scrollbars on AllPlotWindow
.. made to look the same as everywhere else
   i.e. not clunky and ugly.
2014-05-26 20:05:04 +01:00
Mark Liversedge
daf81dfd35 Webkit scrollbar Mac styling
.. to match the Mac scrollbars in QT5
2014-05-26 19:32:05 +01:00
Mark Liversedge
2fbbcf19ed Tidy WebKit Scrollbars
.. to match the rest of the widgets
2014-05-26 19:18:44 +01:00
Mark Liversedge
cbb017bc77 Settings.h typo
.. should have been QT_VERSION not QT_VER
2014-05-26 17:52:27 +01:00
Mark Liversedge
05f4a2d691 Fixup Ride List Background Scroller
.. when change colors
2014-05-26 15:13:19 +01:00
Mark Liversedge
f4237a0e93 CP settings nit 2014-05-26 14:58:17 +01:00
Mark Liversedge
a47420198a Fix compare all plot smoothing of 0
.. always make it non-zero to get the arrays initialised
2014-05-26 14:47:37 +01:00
Mark Liversedge
2daffc9174 Fixup RideNavigator heading glitch
.. the headings get resized as the mainwindow is
   resized, when they shouldn't -- the sidebar is
   getting resized twice - once on mainwindow
   being resized and then our code fixing it back.

.. we now only set those widths on the mainwindow
   when we are told to by TabView::splitterMoved()
2014-05-26 12:52:39 +01:00
Mark Liversedge
125318b768 Fix Sidebar width resize
.. a regression from the mainwindow refactoring
   earlier this year.

.. when the mainwindow resizes the splitter should
   stay at the same size on the left.
2014-05-26 12:00:43 +01:00
Mark Liversedge
bd3cea2232 Ridelist green text now uses accent color
.. not sure why I hardcoded that in the first place !
2014-05-26 11:27:06 +01:00
Mark Liversedge
1eb249391f More modest scrollbar handles
.. and making it easier to apply globally with a new
   static member of TabView to return the style sheet.

.. we may extend this to cover the application more
   broadly.
2014-05-26 11:01:49 +01:00
Mark Liversedge
316a61ed3d Ride list header style
.. not on Mac, but made same colors as list.
2014-05-26 00:07:32 +01:00
Mark Liversedge
27dc513bbe W' Work Calculation
.. should only include joules from W' ie. power above
   CP is accumulated.
2014-05-25 23:19:53 +01:00
Mark Liversedge
fec1db913f Centile plot honour color config 2014-05-25 21:32:18 +01:00
Mark Liversedge
ecf7086090 Merge branch 'master' of github.com:GoldenCheetah/GoldenCheetah 2014-05-25 20:21:03 +01:00
Mark Liversedge
35406c48a7 Disable QProgressDialog on QT5.3 Mac
.. until they fix QTBUG-39038
   see: https://bugreports.qt-project.org/browse/QTBUG-39038
2014-05-25 20:19:58 +01:00
Mark Liversedge
f3ab2aa16e Fixup Windows Scrollbars on QT5
.. includes to compile

.. plastique deprecated so use fusion style instead
2014-05-25 19:43:30 +01:00
Mark Liversedge
841277a6a5 Comment on QTBUG-38685
.. crash with QT5.3 RC1
2014-05-25 18:50:44 +01:00
Mark Liversedge
373827171e Accidentally changed index offset in last commit
.. i starts from 1 not 0
2014-05-25 18:37:15 +01:00
Mark Liversedge
1f2e85f511 Fix Autofilter duplicates
.. dodgy logic when clearing state on refresh of the menu
   after config change caused tree widgets to be duplicated
   every time config was saved.
2014-05-25 17:35:54 +01:00
Mark Liversedge
abc49fdef4 Fix LTM Zone display
.. when no data.
2014-05-25 16:50:56 +01:00
Mark Liversedge
153e11e868 Prettify Scrollbars for Windows
.. as well as for Linux as done earlier today.
2014-05-25 15:54:00 +01:00
Mark Liversedge
e6dfbc2908 RideNavigator::configChanged()
.. instead of doing it every time we refresh
2014-05-25 14:41:42 +01:00
Mark Liversedge
1b46f12a61 More messing with ride list scrollbar
.. on Linux only too !
2014-05-25 11:20:42 +01:00
Mark Liversedge
8cea9629d6 Fix x axis on CP plot compare
.. when changing ride series from e.g Power to W/KG
2014-05-25 10:07:16 +01:00
Mark Liversedge
8712367fd6 Fix HrPw marker colors 2014-05-24 15:25:40 +01:00
Mark Liversedge
bfe48dfec8 Allow Heading to be hidden in ride list
.. cleaning up the ride list.
2014-05-24 14:47:37 +01:00
Mark Liversedge
6930b0c745 Oh. Only Linux for Scrollbars
.. Windows looks HORRIBLE.
2014-05-24 14:16:08 +01:00
Mark Liversedge
9655e36aaa Less Intrusive Sidebar Scrollers
.. but still want an 'on hover' scrollbar
   for the ride list.
2014-05-24 13:55:19 +01:00
Mark Liversedge
91eb86a8aa Style the ridelist scrollbar on non-mac
.. to be less obtrusive.

.. lets see if we can improve on this ?
2014-05-24 13:33:30 +01:00
Mark Liversedge
70de48f333 Appearances config to hide ride scrollbar
.. on Non-Mac platforms. It might be just me but the scrollbar
   just looks horrible.

.. should look at a custom scrollbar that 'appears' when it
   is needed (when scrolling or on hover?)
2014-05-24 13:07:29 +01:00
Mark Liversedge
8ce6e85e00 Add ScatterPlot to the default ride layout
.. its ready for prime time

.. but needs the metric/imperial bugs fixed !
2014-05-24 11:04:12 +01:00
Mark Liversedge
05b5490b6d Add Ae-An Stress Chart to default layout
.. using An and Ae TISS
2014-05-24 10:53:37 +01:00
Mark Liversedge
97798df9fe Set Default W' in Athlete Zones
.. of 20kJ

Fixes #882
2014-05-24 10:10:20 +01:00
Mark Liversedge
b577b84f11 Fix LTM Plot Legend Colors in Compare
.. they were always black which wasn't good on a
   dark background !
2014-05-24 09:20:05 +01:00
Mark Liversedge
257c009343 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-05-23 21:12:17 +01:00
Mark Liversedge
c3ca1d6d72 Fix Veloclinic Model Variant Selection
.. it was broken in the PDModel refactor.

.. you can now select variants for the aerobic
   (slowtwtich) component.
2014-05-23 21:11:09 +01:00
gcoco
e3b2b5f558 Add missing ) 2014-05-23 16:05:10 -04:00
Mark Liversedge
a73eb1a962 Merge pull request #886 from Joern-R/pull
Translation enablement + some typos
2014-05-23 19:29:18 +01:00
Joern
5aa27c662d Translation enablement + some typos
... Further enablement for translation

... some typo in EN (seen during translation)

(cherry picked from commit 50b78cec0f2fae40f9a5974d98e145d9d9d55535)
2014-05-23 20:26:48 +02:00
Mark Liversedge
8360388e7a CP Delta Compare Part 2b of 2a/b
.. now completed to allow model comparisons too.
2014-05-23 10:38:31 +01:00
Mark Liversedge
3c36bbe481 CP Delta Compare Part 2a of 2a/b
.. just quickly commit the changes for delta compare for
   comparing rides and intervals.

.. still need to fix up the model delta compare.
2014-05-22 22:43:35 +01:00
Mark Liversedge
5e95b3ebcd CP Delta Compare Part 1 of 2
.. delta compare to use first date range as a baseline to
   compare other date ranges to.

.. only works for the bests curve in date range mode

.. in part 2 will add the model and also rides/intervals.
2014-05-22 21:54:11 +01:00
Mark Liversedge
ca71d880a6 Tweak ride list accent bar
.. 2px wider at 7px .. better proportions

.. am slowly turning into Steve Jobs .. can
   someone pass the orange juice please.
2014-05-21 20:48:55 +01:00
Mark Liversedge
ff01ed0b85 Compare mode CP plots model
.. so you can compare models for different date ranges
2014-05-21 18:49:58 +01:00
Mark Liversedge
cd4ce66de8 CPPlot Show Best Option
.. sometimes its useful just to see the model and not the bests
   curve. So added an option to get rid of the bests curve and
   show the model on its own.
2014-05-21 14:18:57 +01:00
Mark Liversedge
3479d19d4f Fixup Compare to Use RideFile(Ride*)
.. to get CP and Weight tags etc
2014-05-21 13:17:03 +01:00
Mark Liversedge
4ca042b0e3 Lactate not Lactic Threshold
.. just being picky now.
2014-05-21 13:16:44 +01:00
Mark Liversedge
c85e4aa651 RideFile(RideFile*) can set context too
.. so no need to do it everywhere we create a temporary
   ridefile for computing metrics.
2014-05-20 21:05:18 +01:00
Mark Liversedge
65f77bafa4 WPK metrics need 2 decimals not 1 2014-05-20 21:05:03 +01:00
Mark Liversedge
a0313732e1 Fix interval metrics that use CP and Weight
.. by making sure the temporary RideFile used to calculate the
   interval metrics contains the tags from the main Ridefile.
2014-05-20 18:47:37 +01:00
Mark Liversedge
8c93aeb3ac Add Athlete Weight Metric
.. and add to summary window

.. uses getWeight() so therefore uses;
   1. 'Weight' metadata
   2. last withings weight
   3. global athlete weight
2014-05-20 09:15:47 +01:00
Mark Liversedge
456ff5c935 Speed up Withings Download
.. it was poorly coded to query the db on every new
   measure and didn't use transactions for the updates
2014-05-20 08:23:50 +01:00
Mark Liversedge
ceec5627a9 Update Trends Default
.. PMC tidy up
2014-05-20 06:27:48 +01:00
Mark Liversedge
2da093cbe9 Deprecate the old PMC
.. its too far out of date;

   the UX is terrible and flickery
   its a cpu hog (deletes all objects on each replot !? wtf)
   it doesn't honour colour config
   it doesn't integrate with the sidebar date selection
   the metric selection should be via a reveal control
   can't hide the legend / set grid / use chart settings
   should use a tooltip
   doesn't work with compare

.. all these issues are resolved using an LTM based PMC

Fixes #880
2014-05-20 06:06:16 +01:00
Mark Liversedge
9a94a6c092 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-05-19 20:12:33 +01:00
Mark Liversedge
02f5cb89e0 Add Model Data to CP export
.. if a model is active we can get the model values now
   using PDModel::y() which is kinda neat !
2014-05-19 20:11:45 +01:00
Mark Liversedge
2329816c6e Make ConfigDialog bigger on Mac too 2014-05-19 19:15:45 +01:00
Mark Liversedge
09890ad3b6 Center the Preferences Icons
.. now the config dialog is a bit wider (to accomodate longer
   texts in other languages, e.g. Deutsche).
2014-05-19 18:59:49 +01:00
Mark Liversedge
ecfe807a3b Merge pull request #879 from Joern-R/pull
Translation Enablement + some small changes
2014-05-19 18:49:20 +01:00
Joern
cc098229b2 Translation Enablement + some small changes
...ConfigDialog.cpp
- -Increase overall size of window (for NON Mac only so far) - this
eases the translation as in non EN languages

... Pages.CCP
- Changed 2 fixed button sizes (to allow proper translation)
- Correction: if Directoy Browsing was Aborted without selection - the
previous value was deleted
- Chooses the 2nd column to search for "New" text in case of 2 text
colums (short and long)
- All the rest Translation enablement

...DiarySidebar.cpp
- enable translation of date formats

(cherry picked from commit 3bbc68a277e743e610630795bb60dc515ced0355)
2014-05-19 19:42:14 +02:00
Mark Liversedge
3ccdb5d525 Release notes update
.. to reflect recent changes.
2014-05-19 17:55:18 +01:00
Mark Liversedge
3505adc686 CP w/kg fixups
.. all the recent work on the CP chart has focused on absolute
   watts and not taken into account w/kg !

.. this fixes that up, but still need to look at w/kg on the
   model parameters stuff for the CP history chart
2014-05-19 17:16:19 +01:00
Mark Liversedge
587feca1e3 Fix RideFile::getWeight() Withings bug
.. the update in commit 53871e9 inadvertently broke
   withings weight being used.
2014-05-19 16:12:48 +01:00
Mark Liversedge
ac7b2e0835 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-05-19 11:39:09 +01:00
Mark Liversedge
7c40ad2314 Notes keyword "Reverse" to set fg color
.. when color is used for background -- since they are independent
   of the plot colors etc in this case.
2014-05-19 11:38:14 +01:00
Mark Liversedge
25e0d8c18f Mustang theme highlight
.. was invisible, now made more obvious
2014-05-18 22:08:57 +01:00
Mark Liversedge
7b4b024f63 Refactor CPPlot to use new PDModel
.. the last piece of the jigsaw for the CP chart refactoring was
   to use the new model class and remove the calculation in CPPlot.

.. we have now removed the ridefilecache out of CP, the model calculation
   and refactored to support multiple models.
2014-05-18 20:58:32 +01:00
Mark Liversedge
76afdc6e6c Be consistent - 'Overlay' not 'Show Overlay' 2014-05-18 13:17:39 +01:00
Mark Liversedge
008d64e618 Add Overlay to AllPlot
.. show interval details when hovering over them on the ride
   plot using the new overlay widget
2014-05-18 13:11:51 +01:00
Mark Liversedge
52c274c82e Tweak Alt default to light gray 2014-05-18 11:15:41 +01:00
Mark Liversedge
62efd6fd15 Added Schoberer Color Scheme
.. mimic colors used by SRMWin and the scheme is named after
   the founder of SRM Ulrich Schoberer
2014-05-18 11:11:53 +01:00
Mark Liversedge
38925d82e7 Extend Theme color coverage
.. to include power, cadence etc

.. this is particularly relevant for colors that need to change
   if we have a light background (e.g. power in yellow on white
   is almost impossible to see for some people)
2014-05-18 10:44:47 +01:00
Mark Liversedge
727762141c Add recent contributors
.. Dr Phil Skiba for TISS etc
.. Michael Puchowicz for the Veloclinic PD Model
.. Jörn Rischmüller for supporting German translation
2014-05-18 09:35:15 +01:00
Mark Liversedge
c6fab73e2d Recompute Metrics on W' change
.. and also fix CRC code that stops recompute if the ride file
   hasn't changed since it may be recomputed for other reasons !
2014-05-18 09:24:45 +01:00
Mark Liversedge
284623bfa8 Accent sidebar on ridelist right height
.. needs to account for font metrics and not just default
   to 50 high. Only notice this if the user has larger fonts
   which can be common on high DPI screens.
2014-05-17 10:00:08 +01:00
Mark Liversedge
d20cac9fa1 Merge pull request #875 from Joern-R/pull
Enable Translation
2014-05-17 09:40:06 +01:00
Joern
ecd2e83693 Enable Translation (1)
... enable translation

(cherry picked from commit d4deb2fd981d601a1378172e24a20b61a7b3c4ec)
2014-05-17 10:25:37 +02:00
Mark Liversedge
ba5f8881a4 Fix CP heat age cosmetic glitch 2014-05-17 09:16:01 +01:00
Mark Liversedge
8c0c5e3bfa Ride list accent bar on Mac Qt<5 or Non-Mac
.. the code needed to account for scrollbars on Macs running
   Qt < 5 and on all other OSes.
2014-05-15 12:46:04 +01:00
Mark Liversedge
483cdd738c If W' is configured in KJ convert to Joules
.. if user enters W' < 1000 then multiply it up
.. if old config remains with W' < 1000 multiply it up
2014-05-14 21:45:38 +01:00
Mark Liversedge
2b5c53c5c0 Ride list colour subtly
.. if you have user defined colors for the ride list but don't
   choose to set as background (ITS UGLY!) then we put an accent
   bar on the rhs .. which looks much nicer.

.. I guess its a matter of taste .. some don't have any ;)
2014-05-14 20:31:57 +01:00
Mark Liversedge
27d062688f Plot Model Estimates on LTM
.. as well as W', CP etc we now support plotting any
   duration model estimate.
2014-05-14 18:34:27 +01:00
Mark Liversedge
d19ae6ac43 Fix gcc compile time warnings
.. in preparation for 3.1 release
.. but still need to fixup for Mac clang too
2014-05-12 09:07:07 +01:00
Mark Liversedge
de78667b20 Only refresh model estimates when needed
.. since its really only the CP history chart that
   uses them, it can refresh them when needed.
2014-05-11 22:03:22 +01:00
Mark Liversedge
654b477d77 Ignore dates before 1990 in Model Estimation
.. they're probably bogus or negative or zero and will
   create huge amounts of work !
2014-05-11 21:15:21 +01:00
Mark Liversedge
50298617fb Get around '-' button size on a Mac
.. by making the text Add and Delete rather than '+' and '-'.

   I /really/ hate the way Qt enforces such an arbitrary rule
   for button size and styles, when Apple doesn't.
2014-05-11 20:20:08 +01:00
Mark Liversedge
7bbca327bc Fix SEGV on empty HomeWindow
.. if there are no charts homewindow crashes. oops.
2014-05-11 18:33:12 +01:00
Mark Liversedge
b7d28eb253 Update 3.1 release notes
.. to reflect recent updates and remove 'deferred' items.
2014-05-11 17:10:30 +01:00
Mark Liversedge
0c93e734c9 Notes colors background -or- foreground
.. user can specify what it colors.
2014-05-11 16:10:14 +01:00
Mark Liversedge
c6d8bbfaa1 Fixup ExtendedModel
.. to new PDModel api.
2014-05-11 14:25:13 +01:00
Mark Liversedge
ffb7bc3117 Hide CP helper in compare mode 2014-05-11 14:12:00 +01:00
Mark Liversedge
bdda28f280 Skip zero estimates
.. in LTM plot for model estimates
2014-05-11 13:24:20 +01:00
Mark Liversedge
2be44382d3 Added ExtendedModel to the Metric Estimate
.. aggregator will collect estimates
.. LTM will plot

.. but the model needs to be updated to reflect the intervals
   are in seconds not minutes and the y() function is passed
   seconds not minutes.
2014-05-11 12:32:17 +01:00
Mark Liversedge
b737fa918b CP history fixups
.. use a rolling 2 month bests window not 3 month (too long)
.. use 2P W' on default chart as it povides a better estimate.
2014-05-11 12:19:48 +01:00
Mark Liversedge
1a53421cd8 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-05-11 11:45:43 +01:00
Mark Liversedge
351580ae60 Fixup default color to use theme colors
.. in the ride list, calendar and mini calendar we now
   use the default color from the theme when there is no
   match on the keyword.
2014-05-11 11:44:35 +01:00
Damien
9c4a6bdaf3 MetricAggregator Model Refresh (add ExtendedModel) 2014-05-11 12:01:16 +02:00
Mark Liversedge
293cc08968 Fix QProgressDialog centering
.. top left was ugly.
2014-05-11 10:39:57 +01:00
Mark Liversedge
288f1e8fa8 Temp FIX for SEGV on data table for estimates
.. needs to be fixed pronto.
2014-05-10 23:26:28 +01:00
Mark Liversedge
cf6750e313 Fix SEGV on bounds check LTMPlot
.. in createEstimateCurve()
2014-05-10 23:19:43 +01:00
Mark Liversedge
7c887cbd21 Metric Aggregator Model Refresh (Part 3b of 3abc)
.. added to LTM and updated the default layout on trends view
   to include a new 'CP History' chart with W', CP and p-Max
   on it.

.. part 3c needs to update to include Damien's model and also
   once thats done we need to refactor CPPlot to use the new
   PD model classes instead of the code embedded in the class.
2014-05-10 22:05:31 +01:00
Mark Liversedge
4adfc269cd Metric Aggregator Model Refresh (Part 3a of 3abc)
.. Now refreshing the model parameters is done and
   stored in the athlete class.

.. added the selection of a model estimate to the
   LTM chart

.. in part b and c we need to update the LTM chart
   to plot the estimates (createCurveData).
2014-05-10 20:13:43 +01:00
gcoco
5434edb9f2 Update missing file in Makefile 2014-05-10 11:11:45 -04:00
Mark Liversedge
6489af3a73 MetricAggregator Model Refresh (Part 2 of 3)
.. the critical power models are now refactored to have a
   base class PDModel.

.. I have implemented the 2 and 3 parameter models as well as
   the veloclinic models

.. the ExtendedModel needs to be aligned

.. next steps are to put these values into a store and allow
   them to be plotted on the LTM charts.
2014-05-10 12:00:26 +01:00
Mark Liversedge
297d9003b8 MetricAggregator Model Refresh (Part 1 of 3)
.. added the code to aggregate power data when deriving
   model parameter history over time.

.. need to get a class that applies the various models to
   generate the parameters we need (so we can reuse) in
   part 2.

.. then need to store and turn into a metric of some kind
   in part 3.

.. this is largely a checkpoint commit to enable cross platform
   testing with Mac and Windows.
2014-05-09 19:48:25 +01:00
Mark Liversedge
30efc39a01 Fix comments in RideFileCache::meanMaxPowerFor() 2014-05-09 16:52:35 +01:00
Mark Liversedge
df7af4c69a Merge pull request #865 from Walibu/master
Power value from Suunto .gpx file and fix with unvalid 0m Altitude in .tcx
2014-05-09 16:49:50 +01:00
Walter
0149c7da57 added power value from Suunto .gpx file and minor fix with 0 Altitude values if importing .tcx files 2014-05-09 15:30:31 +02:00
Mark Liversedge
2b7dc9a16f RideFileCache::meanMaxPowerFor()
.. to extract just the meanmax power data from a ridefile cache
   so we can aggregate and derive model parameters for new metrics
   to track W', CP, FTP, max-Power.
2014-05-09 12:46:25 +01:00
Damien
113022ee35 Joule GPS download issue with Windows
fix #817
2014-05-08 23:37:29 +02:00
Mark Liversedge
1eb5246cbd Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-05-06 21:26:49 +01:00
Mark Liversedge
82e70fc27e Fix scatter reveal controls sync with settings 2014-05-06 21:26:11 +01:00
Mark Liversedge
d66e752c89 Add build info on Mac
.. see src/mac/Info.plist.app, based upon the default for
   Mac with clang found in mkspecs/default/Info.plist.app
   from the Qt installation directories.

.. we make our own to add build version information, which
   should be placed there via the qmake 'VERSION' macro but
   its not supported -- you have to edit the plist file instead.

Fixes #796
2014-05-06 20:17:30 +01:00
Mark Liversedge
a50efc3eca Aggregating ignore zeroes
.. when aggregating metrics we ignore zeroes since when
   they apply to an entire ride they typically mean no value
   is present.

Fixes #523
Fixes #430
2014-05-06 15:13:16 +01:00
Mark Liversedge
ba2b16e423 Highlight lowest and highest on LTM plot
.. good for weight or TSB / LTS where actually we're more
   interested in the lower values than the higher ones.

Fixes #673
2014-05-06 14:58:06 +01:00
Mark Liversedge
a796c0e401 Don't enforce Z1 start at zero
.. if users want alternative ranges, it is not for us
   to enforce -- e.g. ignore zero for HR is sensible since
   0 suggests loss of signal, not your heart stopped !

Fixes #815
2014-05-06 12:42:12 +01:00
Mark Liversedge
28e7c83252 Fix W bal plotting by distance
.. since we only smoothed time

Fixes #803
2014-05-06 11:22:48 +01:00
Mark Liversedge
841956d9c0 Fix Pace Format in Interval Summary
Fixes #841
2014-05-05 21:57:05 +01:00
Mark Liversedge
53871e95f9 Fix Measures Plotting in LTM
.. needed symbol name to be unique as 'Weight' clashed with the
   normal ride metadata field.

.. we now add _m to the fieldname to generate a symbol name for
   measures.

Fixes #862
2014-05-05 21:07:01 +01:00
Mark Liversedge
bee25eb9a0 Fix DBAccess QT5 Measures Bug
.. there was no prepare statement for the select statement
   in getAllMeasuresFor()
2014-05-05 11:05:29 +01:00
Mark Liversedge
8751de5161 Multicomponent model, default alpha to 0
.. looking at the briefing from Mike on Youtube it looks
   like an alpha value of 0 is a compromise between -0.1
   and 0.1.

.. see the video here: http://www.youtube.com/watch?v=v57NRQ-pHps
2014-05-04 20:35:07 +01:00
Mark Liversedge
f765a8e4d4 Merge pull request #861 from rclasen/issue-582
fix timestamps after gaps in SRM files
2014-05-04 16:03:26 +01:00
Rainer Clasen
5710aeeced fix timestamps after gaps in SRM files
"secs" is miscalculated for gaps between blocks: It takes the delta
between last chunks *END*time and next chunks start time - and thereby is
off by RecInt. This error adds up for each block/gap - so, the n'th block
will by off by n seconds.

fixes issue #582.
2014-05-04 10:20:57 +02:00
Mark Liversedge
3d00cf3a74 Revert "Fix Allplot Axis Labels"
This reverts commit 80fee9d.

Since actually using showAlt, showBalance to determine if an axis
should be drawn is incorrect, since although the user has selected
it to be plotted, it might not actually be in the ride !

The real fix for this axis labels was fixed in commit 18bf28.
2014-05-04 08:47:46 +01:00
Mark Liversedge
66d2bd467e CP Chart can now export bests data
.. via a custom menu option on the chart menu (More...)

.. which means we also now have a mechanism for each chart
   to add their own menu options to the More... menu

.. will no doubt need to add this to the LTM chart
2014-05-03 20:39:46 +01:00
Mark Liversedge
71ca1365de Basic Themes Support
.. no doubt we will extend and refine this but at least you
   can select some basic prebuilt themes.

.. will need to add more as its a limited list but the basics
   are in place for now.

Fixes #855.
2014-05-03 18:18:42 +01:00
Mark Liversedge
04c0a02cf6 Tidy up 'Variant' label in CP settings
.. when Multicomponent model is not selected the 'variant'
   label gets left shown all by itself.
2014-05-03 11:05:53 +01:00
Mark Liversedge
b3f1ab1389 Michael Puchowicz Models
.. updated to include all 3 variants of the 'Veloclinic' model
   linear, exponential and regeneration models for the second
   component
2014-05-03 09:54:07 +01:00
Mark Liversedge
b035122107 Merge pull request #859 from Deadolus/Strava-fix
[PATCH] Fix for slightly different Strava export Format
2014-05-01 10:24:58 +01:00
Simon Egli (Silzo)
abbe1cf78a [PATCH] Fix for slightly different Strava export Format
Strava used other slightly other tags for it's gpx files.
Added those tags to the GpxParser.
Tested and verified.
As I don't have a Power Meter I can't verify Power is correctly imported.

Signed-off-by: Simon Egli <smn.egli@gmail.com>
2014-05-01 10:40:46 +02:00
Mark Liversedge
9a09b052dc Fix LTM labels metric conversion bug
.. we converted from metric to imperial TWICE for the labels
   which mean't they were located correctly on the y-axis but
   the label was always wrong !

Fixes #827.
2014-04-30 15:48:35 +01:00
Mark Liversedge
18bf280893 Fix AllPlot Ticks Error
.. was caused by the fact the allPlot height is not set until after the
   first show, so it is zero in initial state.  We just use a default value
   in this case.
2014-04-30 13:56:56 +01:00
Mark Liversedge
80fee9debc Fix Allplot Axis Labels
.. they weren't updated when the plot was not visible due to looking
   at the curve 'isVisible()' rather than showXXX bool.
2014-04-30 11:17:31 +01:00
Mark Liversedge
a801f5aec8 Andy Froncioni W'bal optiimsation (contd)
.. forgot to remove the threaded integrator which is no longer
   needed and then found it is still being used by the minForCP()
   method, so tidied that up.
2014-04-29 21:02:20 +01:00
Mark Liversedge
a4f3573af4 Fix 2 parameter CP .. again
.. broke when playing with t0 for veloclinic model, because
   t0 is actually used in the loop within deriveCPParameters()
2014-04-28 21:50:36 +01:00
Mark Liversedge
a4f22b4d8c Fix cp2-20 to not use t0 ! 2014-04-28 20:12:07 +01:00
Mark Liversedge
8b431ca0db Hide legend titles for trends/outliers/bests
.. as they are not 'curves' just overlaid onto the
   real curves -- so they are not needed in the legend
2014-04-28 18:06:08 +01:00
Mark Liversedge
951d048e80 Tidy Preferences Passwords Dialog
.. some left over items that are no longer needed and a
   stray QLineEdit in there.
2014-04-28 10:23:25 +01:00
Mark Liversedge
e57d2d5521 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-04-27 15:10:11 +01:00
Mark Liversedge
a7c011bcbc QPixmap::grabWidget() deprecated
.. so use QWidget::grab() instead from QT5 onwards
2014-04-27 15:09:13 +01:00
Damien
f9f029a57e Bin2RideFile: Small improvement in sensor name parsing 2014-04-27 00:02:49 +02:00
Damien
3f8274f041 Correct errors in last commits 2014-04-27 00:02:49 +02:00
Damien
36b9367785 CvsRideFile: Add Moxy file type 2014-04-27 00:02:49 +02:00
Mark Liversedge
80272cff5c Veloclinic Multicomponent Model
.. implementation of the Veloclinic model, or at least
   the first of a few potential models.

.. It may not be correct at this point, but committing
   a checkpoint.
2014-04-26 22:44:05 +01:00
Mark Liversedge
475811a510 Sort out Zones.cpp code formatting
.. I know its a matter of taste, but some of the formatting in there
   would win the OCCC competition. I mean FFS, who puts else clauses
   after a ';' !?

.. the formatting probably reflected the different people who have
   updated the code over the years.

.. no functional changes whatsoever in this commit -- just cleaning
   the source code to make it more maintainable (and readable)
2014-04-26 12:27:59 +01:00
Mark Liversedge
e2432adc04 Dialog deleteLater() om HomeWindow
.. trying to id the Mac crash.
2014-04-25 21:21:37 +01:00
Mark Liversedge
d75c088938 Faster W'bal algorithm
Using Andy Froncioni's modification to the original
formula that removes the need for Tau and also lets
the exponentials drop out.

Massive speed improvement!
2014-04-24 16:23:42 +01:00
Mark Liversedge
900319bfaf Add *.pri to .gitgnore 2014-04-24 14:46:31 +01:00
Mark Liversedge
1d1cff5098 Allow Interactive Widgets in GcOverlayWidget
.. for "future" interactive widgets.
2014-04-23 07:35:01 +01:00
Mark Liversedge
c551b82b4f CPPlot warning to qDebug
.. qmessagebox is a bad idea since user has not idea
   why it is being raised.
2014-04-22 21:05:08 +01:00
Mark Liversedge
0ff6226f33 Allow Multiple Helper Widgets
.. in GcOverlayWidget.
2014-04-22 09:57:12 +01:00
Mark Liversedge
7f05887e37 Merge pull request #856 from ibooij/fix_crash_when_dataseries_is_empty
Fix crash when opening Speed histogram for the first time, on a file without speed info.
2014-04-21 21:31:29 +01:00
Ilja Booij
0bed72c6bf Fix crash when opening Speed histogram for the first time, on a file without speed info.
I had a trainer file as the second file in my history. Opening this ride, and selecting the speed histogram made GC crash.

I narrowed it down to line 905 in src/PowerHist.cpp. The code was trying to do a resize on a QVector with a negative value. count was -7.

Making sure that count is always 0 or greater fixed the crash.

Note that opening another ride file, with speed information before this one, selecting the speed histogram and only after that selecting the ride without speed information, did not crash the application. I'm suspecting that there might be some resetting of values, perhaps in the "standards" arrays, that is not done when a data series is missing.
2014-04-21 22:16:54 +02:00
Mark Liversedge
62722da8e6 Fix horizontal scrollers
.. from ever appearing on ride navigator / activity log
2014-04-21 18:33:34 +01:00
Damien
228344a1e5 Add hemoglobin series to Editor 2014-04-20 23:46:36 +02:00
Mark Liversedge
b1516dc438 Fix blank ride plot in compare mode
.. when you switch tabs to ride plot having never
   displayed any ride at all.

.. also fixes switching to compare mode when the currently
   selected ride is blank (has no data).
2014-04-19 20:43:51 +01:00
Damien
e9466e70ce Correct JsonRideFile for hemoglobin series 2014-04-19 10:14:44 +02:00
Damien
84928380bd Add hemoglobin SmO2% and tHb data series (Moxy) 2014-04-19 09:22:06 +02:00
Mark Liversedge
e398125922 Fix Activity Log Search/Filter
.. not sure it every worked properly.
2014-04-18 19:05:37 +01:00
Mark Liversedge
aac0d16376 Fix color change on ridesummarywindow
.. to reflect change and not optimise out.
2014-04-18 18:14:33 +01:00
Mark Liversedge
7b93b374f5 Fix AllPlot colour changes
.. frame now updates when the colours change.
2014-04-18 13:35:16 +01:00
Mark Liversedge
112ade371f Time Format is always hh:mm:ss and 24 hour clock
.. so be consistent on manual ride dialog.
2014-04-18 13:20:21 +01:00
Tom Weichmann
3797ca8d14 Made Manual Rides honor Imperial/Metric setting, made time use AM/PM if using imperial units (we shold prob have a seperate setting for time format) and fixed distance decimal issue. 2014-04-18 12:23:36 +01:00
Mark Liversedge
3e72e99b6d Fix RideNavigator white background
.. its in the viewport, which seems a common problem across
   the Qt widgets, we need to be aware of the internal implementation
   details when setting styles.

   Thats a bit crappy.
2014-04-17 16:11:00 +01:00
Mark Liversedge
7e14a93fd3 Blank State white background 2014-04-17 15:40:48 +01:00
Mark Liversedge
6c4280a63b Less transparency on LTM charts 2014-04-17 10:43:36 +01:00
Mark Liversedge
2e315f32ff CPPlot y-axis for power
.. always a multiple of 100w
2014-04-17 10:05:40 +01:00
Mark Liversedge
c8de4c31cc Take Model parameters off Summary
.. until we can do it with better performance.

   ITS TOO SLOW !
2014-04-17 09:07:32 +01:00
Mark Liversedge
ecf44d16c5 MultiCalendar Sidebar honors color prefs
.. phew .. that was tricky !
2014-04-16 23:07:51 +01:00
Mark Liversedge
3a668e7003 Remove dialog in cp model calculation
.. it may occur in background !
2014-04-16 17:49:45 +01:00
Mark Liversedge
d74c3a729f Fix going negative on setAlpha
.. to stop qt outputing error messages
2014-04-16 17:44:57 +01:00
Mark Liversedge
ffb7907376 Compare Pane honours color prefs 2014-04-16 17:39:45 +01:00
Mark Liversedge
f8c266f254 RideNavigator background 1px wider
.. border was too thick
2014-04-16 16:40:03 +01:00
Mark Liversedge
29da166aa0 RideNavigator line 1px too long 2014-04-16 16:21:57 +01:00
Mark Liversedge
078f0e0a14 Train Sidebar / Diary Summary Colors
.. now honour user preferences

.. just the calendar to fix
2014-04-16 15:57:31 +01:00
Mark Liversedge
9ce05de1e9 LTM Sidebar honour Colors
.. now sets the colors for all LTM sidebar widgets according
   to the user's preferences
2014-04-16 14:46:54 +01:00
Mark Liversedge
110d41654d Interval Summary Sidebar Colors
.. now honours the color settings too
2014-04-16 14:38:13 +01:00
Mark Liversedge
97d46f1e4b RideNavigator honour Colour Prefs
.. so matches the plots
2014-04-16 12:48:07 +01:00
Mark Liversedge
317f1b0d2d Fixup CP and AllPlot
.. CP to show % for all ride series not just watts
.. AllPlot to show calibration markers in gray
2014-04-14 22:10:53 +01:00
Mark Liversedge
a4646dc0af Fix CP as percent tooltip
Fixes #850
2014-04-14 21:27:01 +01:00
Mark Liversedge
ad9fb3941f Add Vector data series to ride editor
.. last of the planned updates to support
   the new vector data series.
2014-04-14 17:19:04 +01:00
Mark Liversedge
1497fd0958 Add Pedal Data to Scatter Plot
.. now plots left and right curves for the
   Vector/Rotor balance/TE and PS data/
2014-04-14 17:04:06 +01:00
Mark Liversedge
a926f5ef31 Updated release notes 2014-04-14 10:51:01 +01:00
Mark Liversedge
601716366a Add Averages for Pedal Data
.. pedal smoothness and torque effectiveness
2014-04-14 10:39:36 +01:00
Mark Liversedge
3733fafc1e liboauth is optional 2014-04-13 22:17:38 +01:00
Mark Liversedge
636fb8d732 Fix CPPlot SEGV
.. crashes on low power files (eg. power = 0.1w)
2014-04-13 21:44:46 +01:00
Mark Liversedge
9592f39d6a Add Vector data series to ride plot
.. Torque Effectiveness and Pedal Smoothness now
   added to the ride plot.
2014-04-13 19:47:21 +01:00
Mark Liversedge
f913eff786 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-04-11 13:48:26 +01:00
Mark Liversedge
cc70788085 Add Vector/Rotor TE and PS data series
.. Added the torque effectiveness and pedal smoothness
   data series to the RideFile structures.

.. The only file formats that support it at this stage
   are Fit and  GoldenCheetah JSON.

.. As more file formats support it we will add it here.

.. The charts/editor now need to be updated to support
   these new data series.
2014-04-11 13:46:10 +01:00
Damien
d5711b8b16 Twitter: use OAuthDialog for authorisation 2014-04-11 00:00:57 +02:00
Mark Liversedge
6eb21699b7 Smaller font on CP widget
.. 16 points was too big !
2014-04-10 22:10:09 +01:00
Damien
f903d6e769 Twitter: api.twitter.com requires SSL/TLS for all connections 2014-04-10 21:08:55 +02:00
Damien
d1476df322 Rank 2014-04-10 21:08:55 +02:00
Damien
9f498ecd4b ShareDialog: Prepare for GarminConnect Upload 2014-04-10 21:08:55 +02:00
Mark Liversedge
4724a72a30 Some notes on what's new in GC 3.1 2014-04-09 19:02:37 +01:00
Mark Liversedge
4b967c742e Add Chart now back on Chart Bar
.. so at least chart adding should be easier and no more
   UX issues.

.. need to look to add other menu options there; add page, athlete,
   chart settings.
2014-04-09 15:51:43 +01:00
Mark Liversedge
a25e6c681b Add menu button to chart bar
.. code lost and reinstated, need to write the code
   to show the chart menu when it is clicked.

.. just pushing this code to get it back into the repo
   as it was lost accidentally with some other recent changes
2014-04-09 12:52:33 +01:00
Mark Liversedge
370c608a38 Added some code comments
.. to GcSideBarItem.cpp as the code is very difficult to
   follow. Not hugely valuable comments but they will at least
   help to understand the purpose of each widget.
2014-04-09 12:29:36 +01:00
Mark Liversedge
e227d71b31 Truncate W'bal going hugely negative
.. this is caused by bad data and/or the spline getting
   spoilt. We need a better way of decritizing the data.
2014-04-09 10:58:53 +01:00
Mark Liversedge
5bd1d77b93 CP Chart Overlay
.. now has an overlay widget that can contain multiple widgets
   and is user movable and resizable etc

.. we show the model derived values for now, but could add other
   things at a later date (e.g. MU distribution etc).

Fixes #811.
2014-04-08 15:36:24 +01:00
Mark Liversedge
ee36a3f32c Merge pull request #840 from ibooij/fix_crash_in_qtfullscreen
Fix crash at shutdown.
2014-04-07 19:41:33 +01:00
Ilja Booij
57795d2d2e Fix crash at shutdown.
The context pointer was dereferenced after the context object was deleted. This is fixed by storing a pointer to the MainWindow in QTFullScreen, so context does not have to be dereferenced.

The logic in QTFullScreen::eventFilter is also simplified a bit.
2014-04-07 20:19:17 +02:00
Mark Liversedge
ae3b785531 Move grid to back CPPlot 2014-04-05 20:31:26 +01:00
Mark Liversedge
cee07f85fd Merge pull request #838 from ibooij/fix_pmc_crash
Prevent crashed in PMC by checking if start and end date of seasons are ...
2014-04-05 19:55:31 +01:00
Ilja Booij
c6eeb4b734 Prevent crashed in PMC by checking if start and end date of seasons are valid. 2014-04-05 20:04:39 +02:00
Mark Liversedge
49c0aa75fe CP plot cosmetics
.. show the 1s point (it was truncated)
.. show power bests as dots if there is a model curve
2014-04-02 14:05:18 +01:00
Mark Liversedge
092c60fe37 Add pointHover to ScatterPlot
.. the last of the ride plots for hover mode

phew.
2014-03-31 20:01:26 +01:00
Mark Liversedge
9587201a84 Grid style in 2d same as PfPv
.. dotted lines looked naff.
2014-03-31 16:11:00 +01:00
Mark Liversedge
85e44ec8c7 Fix ScatterPlot interval and framing
.. before adding support for interval hover
2014-03-31 15:54:03 +01:00
Mark Liversedge
68c0fbe3f5 CP Chart gets grid back
.. put the grid back on the cp chart, which is less ugly
   now we can set and honour colours for it and the background.
2014-03-30 20:08:14 +01:00
Mark Liversedge
41e203922a Prettier grid lines in ride plot 2014-03-30 19:48:14 +01:00
Mark Liversedge
9bca3cc44b Changing colors in Ride Plot
.. stack plots respond when colors change
.. need to work out whats wrong with allplot and fullplot
2014-03-29 12:27:25 +00:00
Mark Liversedge
787a8f8173 RideSummary cosmetics
.. FTP is a trademark (I think?)
.. Metrics* is just plain Metrics now.
2014-03-28 18:34:10 +00:00
Mark Liversedge
0389b6ba94 Add Model to Summary
.. when summarising a date range we now show the
   model values for CP, FTP, W' et al.
2014-03-28 18:05:30 +00:00
Mark Liversedge
0367bca2f5 CSS extended a little
.. to include <h4> and <b> since they are used
   on the LTM 'data' table.
2014-03-27 20:18:15 +00:00
Mark Liversedge
76caadeeae Introducing GCColor::css() to style HTML
.. wherever we use it, but mostly for the summary
   charts to use the plot marker color. for now.

.. we can get more sophisticated later !
2014-03-27 19:57:08 +00:00
Mark Liversedge
deeb8a9269 Better Default Colors
.. now we don't have to have a white background for the plots
   the defaults are more modern -- inspired by Google Nexus
   and the Sublime text editor
2014-03-27 18:32:40 +00:00
Mark Liversedge
4f15a2c814 Missed off previous commit
.. critically, updating the db schema version
.. QPen syntax error on QT 5
2014-03-27 17:20:52 +00:00
Mark Liversedge
924ef2a8f1 Improve compatibility with Dropbox
.. by checking the ride file CRC before recomputing
   either the metrics or the ridefilecache.

.. this means that users that routinely copy or backup
   or use dropbox to keep things in sync won't see any
   unneccessary metric computations.
2014-03-27 16:20:33 +00:00
Mark Liversedge
3247d1ecce Hide hover when ride changes
.. in histogram plot.
2014-03-27 13:48:56 +00:00
Mark Liversedge
61be3437d7 Add IntervalHover to Histogram Chart
.. when mousing over the intervals list we
   now plot the hovered interval in gray.
2014-03-27 13:05:53 +00:00
Mark Liversedge
991bdccd84 Check null in CPPlot setRide
.. to avoid plotting before GC has even opened!
2014-03-27 08:14:30 +00:00
Mark Liversedge
e6467bb655 Please ignore this commit
.. I added a CR to the end of the LINUX build document
   just to be able to test push/pull/fetch/cherry-pick
   across a number of different repositories

.. this is just for testing git, no functional changes
   were made at all.
2014-03-26 22:06:50 +00:00
Mark Liversedge
203f2d4b46 Remove CP friend class
.. its a hack, and wasn't really needed

.. also reimplemented getBest() functions since they
   incorreclty assumed that bestsCache would never be NULL
2014-03-26 11:04:49 +00:00
Mark Liversedge
3c490c49a0 CP plot handling empty rides 2014-03-25 16:23:34 +00:00
Mark Liversedge
6cbe38e1e4 CP Refactor 3 of 3
.. fix compare date ranges

Now code is ready to extend with new models
and display widgets etc.
2014-03-25 11:54:31 +00:00
Mark Liversedge
761c78b3b2 CP Refactor 2 of 3
.. fixup ride mode, interval hover crash/bugs
.. fixup interval compare mode
.. fixup rangemode

NOTE: Compare date ranges is still broken that
      will be fixed in part 3.
2014-03-25 10:49:58 +00:00
Mark Liversedge
59101530c6 Copyright message update for CP chart 2014-03-24 21:39:46 +00:00
Mark Liversedge
67cf487d38 CP Refactor 1 of 3
.. basic ride, bests and model plots all working

.. Compare mode is now BROKEN !

Will fixup the rest tomorrow, needed to checkpoint
the core refactoring work.
2014-03-24 21:30:15 +00:00
Mark Liversedge
d0d23d6b37 CPPlot.cpp C++ Code Prettify
.. with astyle --style=kr and a little bit of manual editing
2014-03-24 11:49:15 +00:00
Mark Liversedge
d4cff64ff3 CP Code Wash before Refactor
.. the CP plot curve is a terrible mess. Mostly from
   having multiple significant updates from a number
   of notable developers; Sean, Dan, Mark and Damien
   have all made significant contributions.

.. But the code contains lots of 'smells' and is very
   difficult to follow and update

.. this update makes no functional changes but is put
   in place before overhauling the code related to
   "calculating" and plotting the different curves.
2014-03-24 11:08:07 +00:00
Mark Liversedge
885fe498d5 Anaerobic TISS update for RideFile
.. so ride plot of it as a data series is correct
2014-03-23 16:52:57 +00:00
Mark Liversedge
051fb42f29 Updated Gompertz for an-TISS 2014-03-23 16:09:27 +00:00
Mark Liversedge
95ea10a89d Added TISS Aerobicity metric
.. metric of the aerobic-ness of a ride based upon the
   ratio of a-TISS to an-TISS.

.. bear in mind the curves for a/an TISS are being looked
   at as we speak !
2014-03-22 14:20:07 +00:00
Mark Liversedge
d69ebddb1d Anaerobic TISS
Added Anaerobic TISS from Dr Skiba to complement
the Aerobic TISS added recently.

Added to;
* Metrics
* Ride Plot
* PMC metrics
2014-03-22 10:47:44 +00:00
Mark Liversedge
22344ff5e0 .gitignore updated
.. to ignore antlog.bin
.. and all the .qm files
2014-03-21 20:16:04 +00:00
Damien
978d0b5dfb CpPlotCurve: Improve HeatByDate 2014-03-21 15:43:03 +01:00
Mark Liversedge
ccfaaf3b97 Fix CP chart reveal controls on QT5
.. and also remove the yucky labels on the chart in readiness
   for a CP model widget to overlay and move about the chart.
2014-03-21 12:38:11 +00:00
Mark Liversedge
aa9cc72aa3 Less event filtering
.. too many widgets are filtering events needlessly.
2014-03-21 11:57:51 +00:00
Mark Liversedge
db2c758802 Don't define a class inside a method
.. some compilers don't like it.
2014-03-21 07:28:51 +00:00
Mark Liversedge
3dae0a2fe3 Less event processing in HomeWindow
.. was trapping too many events, even when not visible

.. also went back to multishot timer for unreveal but
   stop it when the unreveal even happens.
2014-03-21 07:15:45 +00:00
Mark Liversedge
493f22acec Unreveal timer runs forever!!!
.. should have been a single shot !
2014-03-20 22:29:21 +00:00
Mark Liversedge
d86ece3fb6 CP Heat now shown at bottom of chart
.. akin to the volume on a share price chart.
2014-03-20 18:16:58 +00:00
Mark Liversedge
cfdd32ac64 CP chart now has reveal controls
.. for show heat and show as percentage
2014-03-20 17:27:01 +00:00
Mark Liversedge
c202a6256c Added Hover on PfPv
.. interval highlighted when hover over its marker
   on the PfPv plot.
2014-03-20 15:59:58 +00:00
Mark Liversedge
eec36971d3 Fix Time In Quadran Marker Color
.. when plotting on a dark background
2014-03-20 15:44:18 +00:00
Mark Liversedge
6f2f19f826 PfPv hover color to interval color
.. instead of gray, there is no value in doing anything
   else (aside from consistency) and the marker is in the
   color too, so we should match.
2014-03-20 15:25:57 +00:00
Mark Liversedge
94715c91f7 Add Interval Markers to PfPv
.. mark the center of an interval (i.e. the average aepf/cpv
   for that particular interval).

.. this is in preparation for mouse over the interval causing it
   to be highlighted on hover.
2014-03-20 15:18:43 +00:00
Mark Liversedge
3581773c35 Fix CP scale for percent
.. when showing the ride as a percentage of bests on the CP
   chart we need to adjust the scale when its > 100%.

.. this can happen when comparing a ride with a bests chart
   for a period the ride was not part of; e.g. todays really
   strong ride vs my bests for the beginning of the year.
2014-03-20 13:24:53 +00:00
Mark Liversedge
37b6753311 Fix SEGV in Histogram when clearing compare
.. because the arrays were emptied!
2014-03-20 09:58:32 +00:00
Mark Liversedge
741b725de2 Bit of transparency on PfPv
.. so we can see overlapping intervals.
2014-03-20 07:50:22 +00:00
Mark Liversedge
20367a312f PfPv fixups
.. hide hover curve when change ride
2014-03-19 20:09:40 +00:00
Mark Liversedge
35a66f0237 Implement Interval Hover in PfPv
.. only from interval list
.. need to also implement from chart hover too
2014-03-19 20:02:02 +00:00
Mark Liversedge
ebc21f0f88 PfPv dots brush
.. been meaning to do this for AGES. the dots in the PfPv
   chart are now filled rather than hollow.
2014-03-19 19:04:10 +00:00
Mark Liversedge
d54d7e3f83 Rename LTM to Metric Trends
.. LTM is a meaningless acronym
2014-03-19 18:57:29 +00:00
Mark Liversedge
8c4ac0abf6 More CP fixups
.. hover curve clear on new ride

.. fix ride plot mode so when plotting ride it always
   does. This was fixed by initialising ridePlotMode in
   the CpintPlot constructor.
2014-03-19 18:20:56 +00:00
Mark Liversedge
3ea003bc46 Remove errant qDebug statements 2014-03-19 17:55:42 +00:00
Mark Liversedge
e226083efc More CP plot fixups
.. allplot color fixed when not a rainbow curve

.. fix SEGV index bounds check off by one

.. hover curve z-order to top
2014-03-19 17:52:40 +00:00
Mark Liversedge
06bf617c69 CP pointHover fixup
.. bounds checking on array index
.. set curve grey not white!
2014-03-19 16:18:43 +00:00
Mark Liversedge
ba5247eb3a CP pointHover
.. plot the interval on hover in the sidebar.
2014-03-19 15:53:58 +00:00
Mark Liversedge
4e81a529a0 CP plot ride as %age of best
.. to quantify the areas trained during the ride
2014-03-18 21:34:32 +00:00
Mark Liversedge
42bfcdc7e2 Attempt to fix aPower calculation 2014-03-18 19:59:28 +00:00
Mark Liversedge
52cd888b73 QT Mac support is shit
.. making our own buttons to get around the hideous pile of shit
   that is a QPushButton on Mac when you want it to be smaller than
   a billboard sign.
2014-03-18 18:31:31 +00:00
Mark Liversedge
e8dd7dc36c Clear Compare Pane
.. last piece of the jigsaw for compare mode. This update adds a
   clear button to the compare pane bar.

.. we can still add lots more to compare mode, but for v3.1 this
   is probably enough now, so closing the feature request too.

Fixes #343.
2014-03-18 17:43:59 +00:00
Mark Liversedge
ad4c2a8c6a Mouse Over Interval List to Highlight
.. same as hovering over the interval in the ride view
   hovering over it in the tree list now triggers the
   event.
2014-03-18 16:21:49 +00:00
Mark Liversedge
41561a2403 Fix AllPlot SEGV on Compare
.. introduced by a dodgy cut and paste to support the new
   data series Aerobic TISS.
2014-03-17 22:45:23 +00:00
Mark Liversedge
b81eb146fd Aerobic TISS fixup
.. for rides with samples other than 1s recording.
2014-03-17 21:54:30 +00:00
Mark Liversedge
89017fe2a5 Stress Metric Prototypes
Added a few new training stress metrics whilst discussing
and working on a multicomponent view of training stress.

This is all a wip falling out of discussions around stress
metrics beyond the old TSS/BikeScore models.

For now this just includes;
1. Aerobic Training Impact Scoring System on PM/PMC
2. Work (Kj) above/below CP on PM/PMC
3. Aerobic TISS on the Ride Plot

There is lots more to come; specifically around Anaerobic TISS,
looking again at polarised training and personalised training stress
based upon the individual's CP model.
2014-03-17 20:51:57 +00:00
Damien
f6ff763e13 CpPlotCurve: Add missing files in last commit 2014-03-16 21:23:48 +01:00
Damien
1f5a13dc63 CpintPlot: Small correction 2014-03-15 23:07:36 +01:00
Damien
cea0cb4e05 CriticalPowerWindow: Add a Heat by Date option 2014-03-15 22:52:53 +01:00
Mark Liversedge
b051f220f7 Fix Mac SEGV
.. native widget causes issues with 4.8.5
.. rideItem->ride() needs to check rideItem is not null
2014-03-15 08:22:10 +00:00
Mark Liversedge
6868701d6d CP heat is only below the curve
.. makes it much easier to read and interpret!
2014-03-14 14:28:27 +00:00
Mark Liversedge
7f02ed473e Add Heat to CP chart.
.. from an idea from Michael Puchowiz during discussions
   about a Multicomponent PMC.
2014-03-14 10:08:18 +00:00
Mark Liversedge
37f21d20ff Fix ButtonBar paint error
.. caused by an eventFilter not returning false and therefore
   always filtering out the events on the chartbar and buttons.
2014-03-14 08:26:13 +00:00
Mark Liversedge
1aebf24bcc Add Power 'heat' to RideFileCache
.. to indicate which power-durations are getting worked hardest

.. Calculate a 'heat' score for the power duration curve.
   A score that counts how many rides in the aggregate
   have a power-duration best that is within 10% of the
   best value calculated.

.. next step is to add it to the CP curve (when showing
   power) to provide some kind of shade/heat indicator
   for the area of the curve.
2014-03-13 22:56:51 +00:00
Mark Liversedge
f5e2d277c7 Fix Palette for Details
.. not quite right on Linux/Win.
2014-03-13 21:23:29 +00:00
Mark Liversedge
bb23d5a052 Colors.h missing in ModelPlot.cpp 2014-03-12 15:39:17 +00:00
Mark Liversedge
8db3a80fbf Aerolab honour background colors 2014-03-12 15:20:16 +00:00
Mark Liversedge
36ade93529 Always signal when color changed
.. even if changed to same value to ensure the widgets
   are updated to reflect -- especially if setting to the
   same as the default value.
2014-03-12 15:13:35 +00:00
Mark Liversedge
04241e99ea 3d plot honour background color
.. it already had plot background just needed to honour for
   the frame too.

.. also fixed default empty window to use correct colors.
2014-03-12 15:10:43 +00:00
Mark Liversedge
c28357824d Bing Map honour background
.. and small cosmetic fix for google map to be right colors
   whilst loading the map too .. stop nasty flicker.
2014-03-12 15:02:36 +00:00
Mark Liversedge
587a780473 PMC Chart honour background 2014-03-12 14:43:59 +00:00
Mark Liversedge
d15d61c5b2 TreeMap plot honour background colors 2014-03-12 14:05:56 +00:00
Mark Liversedge
c8c357772c HrPw honours background color preferences
.. bringing it in line with the other charts honouring the
   background color chart preference.
2014-03-12 13:37:50 +00:00
Mark Liversedge
14031a0063 Fix SEGV on add chart with Qt5
.. and also selects the first chart on the chartbar at startup.
2014-03-12 13:28:01 +00:00
Mark Liversedge
9ff760feed Fix stylesheet for 'More...' when config changes 2014-03-12 12:45:49 +00:00
Mark Liversedge
99aee959a2 Fix LTM legend colours
.. when user changes the background color for charts the
   legend can be difficult to read as it is always in black.

.. we now update the legend and it's widgets to change the text
   color when the chart is refreshed.
2014-03-12 11:54:27 +00:00
Gareth Coco
ded1da5b0b Move release files to GitHub releases
Uploaded binaries to GitHub and linked to release information.
Updated web pages to point to new binary locations.
2014-03-11 22:49:03 -04:00
Mark Liversedge
fa2a88abc0 Oops needed to set Min Width not Fixed
.. otherwise if smaller than window leaves a nasty
   blank render to the right of the buttonbar.
2014-03-11 21:20:44 +00:00
Mark Liversedge
2916d5f4ee Fixup button bar with lots of texts 2014-03-11 20:57:41 +00:00
Mark Liversedge
6fe27b18ee Less subtley on interval hover
.. just a bit easier to see with less alpha.
2014-03-11 20:37:24 +00:00
Mark Liversedge
134b976d5f More Charts honouring Colors Preferences
.. Further updates to the charts to honour the background
   color preferences:

        * Google Maps
        * Ride Summary
        * Scatter
        * Details (Metadata)
        * LTM Data View
        * Editor

.. still a few left to do and not entirely happy with how
   things look on the editor but we can fix this up over
   time.
2014-03-11 17:58:41 +00:00
Mark Liversedge
6a43f0ded6 Little More Background Honour
.. updated a few more of the charts to honor the chart
   background property so the chart and chrome are all
   in the color the user specified.
2014-03-10 20:55:45 +00:00
Mark Liversedge
a073acc78d UX Fixups
.. chart bar scroll left and right when too many charts
.. set background in ride plot
.. chart menu says 'More...' instead of down tick
2014-03-10 19:40:22 +00:00
Damien
6e47d8820e Bin2RideFile: Changes for DataVersion 6 in Joule GPS new firmware 2014-03-09 22:49:26 +01:00
Gareth Coco
9b0b8d1615 Update website for 3.0.2 release 2014-03-09 14:10:22 -04:00
Mark Liversedge
3c81052572 ChartBar Buttons in a QScrollArea
.. ready to animate / scroll when more items to show than
   will fit in the button bar space.
2014-03-09 17:40:26 +00:00
Mark Liversedge
be064c2e9e Honour Font preferences in Side/Scope/Chart bar 2014-03-09 08:13:57 +00:00
Mark Liversedge
4b387d6bd6 Update ChartBar button text
.. when editing it in the chart settings
2014-03-08 20:47:39 +00:00
Mark Liversedge
1b68203046 TabBar to ScopeBar Mac Fixups
.. using QtMacButton not GcScopeButton
2014-03-08 12:08:27 +00:00
Mark Liversedge
27a4479e03 Fix Scope/ChartBar Font Size on Windows
.. it was size 8 for some bizarre reason
2014-03-08 11:49:49 +00:00
Mark Liversedge
358a3511f1 Replace Tabbar with a Scopebar
.. Only tested on Linux

.. Now going to check on Mac and Qt5

.. Also does not yet support re-ordering tabs
   nor scrolling when there are too many to show.
   This will come in future updates.
2014-03-08 11:36:05 +00:00
Mark Liversedge
c36386d8ca Reverse last commit re spacing
.. not because it was a bad idea, it is a great idea.

.. we need to replace the tabbar with a scopebar and
   customise it for the view menu and support scrolling
   left and right.

.. will sort this weekend
2014-03-07 20:46:19 +00:00
Mark Liversedge
3d992cf886 Moving to less border space
.. The UI spacing is a bit 'old hat' and not really in line
   with modern UI's -- so reducing the amount of unneeded
   spacing between widgets.

.. There is more to come on this, but for now this means there
   is a little more screen estate for the charts.
2014-03-07 13:23:58 +00:00
Mark Liversedge
a33831f8bf Add Configuration for Train View Color
.. the background was set from the ride plot background.
   we now have a separate configuration option for this.
2014-03-07 12:00:25 +00:00
Mark Liversedge
6e6418b6be Rudimentary Pacing Index
.. need to think about what we're trying to achieve with this
   but for assessing TT efforts we can see how far away from
   a constant load the ride was.

   Its just computed as average power as a percentage of max power.
2014-03-06 19:11:32 +00:00
Mark Liversedge
ee37a88429 Fix Fatigue Index Calculation
.. should only measure fatigue from the peak of the interval
   assuming the athlete is performing a proper 'wingate' style
   all out sprint.
2014-03-06 16:33:45 +00:00
Mark Liversedge
ec770a4202 W'bal line thickness
.. should follow preferences not always be 2px wide
2014-03-01 09:43:07 +00:00
Damien
5785141157 ExtendedCriticalPower: display CP value for ExtendedCP model 2014-02-28 23:32:33 +01:00
Mark Liversedge
bdf633cf92 Fix compile error in LogTimeScaleDraw 2014-02-28 22:15:50 +00:00
Mark Liversedge
28a4e6e3aa Version History update for v3.0-SP2
.. added build id 3032 for 3.0.2
2014-02-28 21:48:53 +00:00
Mark Liversedge
3151f4e383 Delta character in CP settings 2014-02-28 08:50:25 +00:00
Damien
7ffa759395 GoogleMapControl: Small fix for Google Map
fix #814
2014-02-28 07:20:40 +01:00
Damien
dfe526926b CriticalPowerPlot: Add Power by inv time plot 2014-02-28 07:20:40 +01:00
Mark Liversedge
f631d72abe Fix RideEditor SEGV on rideselected (!)
.. When interval tree is rebuilt it can cause an issue in the
   ride editor when clearing the selection model.

.. still trying to get to the botton of a SEGV on Mac.
2014-02-27 17:07:50 +00:00
Mark Liversedge
3270a4f685 Fix SEGV on clear selection in RideEditor
.. just call clear() to reset the selection model to
   avoid a SEGV on Mac with QT5 (untested as cannot
   recreate the crash).
2014-02-27 10:45:16 +00:00
Mark Liversedge
0144a3016e Fixup Unicode 'Delta' character
.. it didn't display properly on Linux (and possibly
   Windows).
2014-02-26 21:28:44 +00:00
Mark Liversedge
b6c2df1131 Small Tidy up of AllPlot Settings 2014-02-26 12:00:21 +00:00
Mark Liversedge
f65237e226 Delta Series Fixups
.. ignore hr drops
.. initialise datapoints
.. ignore time goes backwards
2014-02-26 11:38:47 +00:00
Mark Liversedge
d173dc586e Tidy Up Delta Series
.. simplified acceleration calculation to convert to m/s before calculation

.. removed distribution for deltas as they were HUGE and introduced a
   terrible performance degradation where aggregation took >30s for a
   ride set that previously took <5s.
2014-02-26 09:18:44 +00:00
Mark Liversedge
4e9d26d2e0 Delta Watts, Torque, Cadence and HR
.. Following on from the recent update to add acceleration
   this update adds other derived data series based upon the
   rate of change.

.. Added to the ride plot and the CP plot.

Not sure of the overall utility of these updates but bear in
mind that they are targetting sprinting and track users and
analysis.

As well as the positive side of this (development of power
cadence etc) we also want to think about and collect data
on fatigue rate (possibly only power and torque)
- fatigue over time
- fatigue over pedal stroke
2014-02-25 18:44:53 +00:00
Mark Liversedge
0af8bbd826 Merge pull request #810 from stigbd/master
Made the fault handling in TPDownload a little more user friendly
2014-02-25 14:05:04 +00:00
Stig B. Dørmænen
e510f6d736 Made the fault handling in TPDownload a little more user friendly
If something goes wrong, we try to display the fault message to the
user.
2014-02-25 14:23:37 +01:00
alexdelli
287baedf6f Added Support for Elite Supercrono PowerMag 2014-02-22 19:50:30 -05:00
Mark Liversedge
a101581dc2 Fixup CP interval plot
.. w/kg and accel were a mess and the code didn't honour
   decimal places properly.
2014-02-22 15:12:52 +00:00
Mark Liversedge
734f690e1b Acceleration is m/s/s
.. so don't apply metric to imperial conversion and don't
   label it as km/s !
2014-02-22 13:45:01 +00:00
Mark Liversedge
1b22c9d73b 3 minutes of acceleration bests is enough
.. don't need anything beyond that!
2014-02-22 13:00:51 +00:00
Mark Liversedge
ff068705ad Add Acceleration to CP curve
.. and fixup related bugs in ridefilecache
2014-02-22 12:31:22 +00:00
Mark Liversedge
0bac9299a4 Add Acceleration to the RideFileCache
.. so we can chart distribution and cp curve for it
2014-02-21 23:20:35 +00:00
Mark Liversedge
daccfa2e10 Invisible handles on AllPlot
.. setPalette made no difference on Linux but did on Mac
   so reverting it out of AllPlot.h
2014-02-21 21:09:16 +00:00
Mark Liversedge
ec3ddfaaca Add Acceleration Data Series
.. to ride plot only at this point, but will add to
   CP curve etc later

.. will also need to add rate of change for HR, Cadence
   Power as well too.
2014-02-21 20:04:07 +00:00
Mark Liversedge
b556ee10d2 AllPlot Zooming Cosmetics
.. slider removed as it was ugly

.. handles are placed on the same side as the axis
   being manipulated, since its irritating to click
   on an axis then have to move mouse to the other
   side of the chart
2014-02-21 10:40:28 +00:00
Mark Liversedge
48ef0bc75c Scale Y-Axis on Ride Plot
.. When you click on the axis to isolate it a spanslider
   appears to let you manually adjust the axis.

.. it looks naff .. but we can tidy that up separately
2014-02-20 23:21:33 +00:00
Mark Liversedge
0c47d6c8f6 Zone Array is a count not time
.. Fix polarised zones being ZERO when recIntSecs is
   sub-second (e.g. 0.5s with an SRM).

.. the polarised zones were being updated to hold time
   rather than a count of samples. This was fine when
   recIntSecs is 1s but a problem  when it was 0.5
   .. because is is an integer!
2014-02-20 11:51:50 +00:00
Mark Liversedge
46ed2a5753 Compare Intervals now Compare Rides and Intervals
.. changed the title of the compare pane to reflect the
   fact you can drop rides or intervals and compare both.
2014-02-20 09:48:31 +00:00
Mark Liversedge
5734e61972 Allow drag and drop ride for compare
.. drag and drop a ride into the compare pane to get
   the entire ride rather than an interval.
2014-02-19 21:16:18 +00:00
Mark Liversedge
66dd458792 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-02-18 00:15:23 +00:00
Mark Liversedge
df376796b3 Polarised Adjust Z2 to 85-100% of CP
.. seems to be a consensus.
2014-02-18 00:14:25 +00:00
Mark Liversedge
91690f68ee QT5.2 Remove VLC Dependency
.. if you are building with QT5.2.1 or higher we are no
   longer going to use VLC for video playback.

.. the QT Multimedia module seems to finally have made
   the grade and works as advertised on Linux and Windows

.. FOR NOW we will continue to use QTKit on Mac but that
   may also change soon.

This is to enable overlays -- placing the video behind the
charts etc.
2014-02-17 11:58:38 +00:00
Mark Liversedge
b5a50bcccf Tone down the toolbar shading
.. on QT 5.2.1
2014-02-15 15:15:20 +00:00
Mark Liversedge
96477a8f0b Add Data Labels to Histogram Zones
.. when plotting in zones its helpful to have
   data labels to show the percentage or
   absolute values each bar represents rather
   than having to hover over it.
2014-02-15 14:49:17 +00:00
Mark Liversedge
ae95511e78 Fixup polarised zones for compare mode
.. the new option to show in polarised zones instead of
   the user defined zones now extended so it works when
   comparing date range / intervals.
2014-02-15 11:15:29 +00:00
Mark Liversedge
0a2875de79 Fix W' work metric
.. the calculation assumed 1s recording (or was just wrong)
   joules are now calculated properly, this is especially
   important for SRM recordings of 0.5s samples
2014-02-15 00:09:45 +00:00
Mark Liversedge
888bb9885b Limit the CP autosolve for W'bal
.. if its waaaay off then don't try to autosolve for
   CP .. instead just warn that W' is probably set
   incorrectly.
2014-02-14 20:19:56 +00:00
Mark Liversedge
b1f2999d6d Fix with zero for polarised zones
.. the with zero option didn't work with polarised zones
   and there was a silly bug with the settings being applied
   after the setData() call which mean't they were ignored!
2014-02-14 19:00:46 +00:00
Mark Liversedge
2c447eadf3 Histogram Polarized Zone Option
.. now can show in zones but using the polarised zones
   rather than user defined zones.

.. we may need to revisit this since it uses zone 2 rather
   than estimate LT1 from CP.

NOTE: The compare mode needs updating to support this option.
2014-02-13 22:26:02 +00:00
Mark Liversedge
e0194d03a3 Ride Tab Grab focus on startup
.. it irritated me that the search box always had focus on launch
2014-02-13 13:24:10 +00:00
Mark Liversedge
757bb7d875 More UnifiedTitleToolbar Fixups
.. fix preferences dialog toolbar
.. dodgy stylesheet fixed in MainWindow
2014-02-13 12:11:45 +00:00
Mark Liversedge
cbff5c9476 Fix flicker on show/hide toolbar/tabbar 2014-02-13 11:06:31 +00:00
Mark Liversedge
70f2ab9f46 Enable Hide Toolbar for QT5.2.1
.. since its not a real unified toolbar
2014-02-13 10:59:24 +00:00
Mark Liversedge
97ead7f1b4 Fixup Qt5.2.1 Unified Toolbar Cosmetics
.. just needed to use the right linear gradient.
2014-02-13 10:13:10 +00:00
Mark Liversedge
5bf58647e8 Qt 5.2.1 Unified Toolbar Cosmetic
.. add a separator line between unified toolbar and main widget
2014-02-13 09:50:21 +00:00
Mark Liversedge
79e5e8df18 QT5.2.1 Unified Title ToolBar Update
.. if you build with qt 5.2.1 then the unified title and toolbar
   is back, but its a hack to just change the gradient and use a
   standard toolbar .. so we do that, but make the colours match.
2014-02-12 19:30:55 +00:00
Mark Liversedge
4d02a2cf24 Fix the labels in the ride plot in QT5
.. applying the same fix that Jaime found for the erg file plot
   to the ride plot in QT5
2014-02-12 11:34:37 +00:00
Mark Liversedge
6305943559 QwtPicker SEGV possibly on missing axis
.. the series plot has no yLeft axis yet the plot picker
   is always attached to it.

.. Since we do ALWAYS have a yLeft,2 axis for the highlighter
   I've attached the picker to that instead.

.. This should hopefully stop the SEGV in qwtplotpicker::updateDisplay()

.. Will watch and monitor
2014-02-11 21:29:12 +00:00
Mark Liversedge
eed9bb73de WKO+ Interval Markers
Rather than skip over the 'standard' interval markers because they
have such verbose names we now plot the vertical marker only.

This is to indicate there is an interval at a particular point to
signpost to the user that they can hover over this point to get an
interval summary.
2014-02-11 18:16:34 +00:00
Mark Liversedge
00b61bc6ee Ignore entire ride interval on hover highlight
When hovering over a ride if there is an interval that defines
the entire ride (typical if coming in from WKO+) then don't
hover highlight it, since it is distracting and adds no value.
2014-02-11 17:29:38 +00:00
Mark Liversedge
d590e58e41 Ride Plot Highlight Interval on Hover
.. As you mouse over the ride plot it will now highlight
   the shortest interval that that point is within.

.. If an interval has been selected in the sidebar it will
   refrain from hover highlighting as it is distracting

.. Also fixed up the way the highlight curve works so it
   has its own axis and works regardless of the data series
   selected.
2014-02-10 19:24:04 +00:00
Mark Liversedge
d615abd862 Merge pull request #792 from jjofre/master
Fixes issue #791 - Create new workout Workout Wizard show improperly displayed BikeScore trademark
2014-02-10 18:56:28 +00:00
Jaime Jofre
9cd3925e76 Fixes issue #791 2014-02-09 20:32:14 -05:00
Mark Liversedge
65e762c228 Optimise out WPrime in AllPlot
.. it was erroneously being computed in AllPlot even
   when it wasn't selected on the plot
2014-02-08 18:54:50 +00:00
Mark Liversedge
b418a78b0d Ride Plot Isolate Curve Fixup for Compare Mode
.. a few SEGVs when restoring state to a plot that has
   been reploted / curves deleted or added etc.
2014-02-08 13:31:50 +00:00
Mark Liversedge
11b53edec1 Reference Lines only when Plotting Power
.. the stack series plots allowed reference lines to be added
   on charts that didn't actually plot power data
2014-02-08 12:28:16 +00:00
Mark Liversedge
cbd9e67ae6 Ride Plot Isolate Curve Fixup
.. reset isolation when resetting curves etc

.. added a visual cue by dulling the axis scales to grey
   when isolation is active -- to let the user see what
   happened when they moused over an axis.
2014-02-08 12:10:24 +00:00
Damien
0dfb962972 AllPlot Isolate IntervalCurve (HeadWind, Power Balance) 2014-02-08 09:37:08 +01:00
Mark Liversedge
99062790ef Ride plot SEGV on reference lines
.. we SEGV when they are removed and we use the new
   'isolate' curve mechanism to hide/show curves

.. also now keep a track of the reference lines in the
   CurveColors class
2014-02-07 19:19:19 +00:00
Mark Liversedge
24c9ecc964 Ride Plot Isolate curve on click
.. we now isolate a curve temporarily with a click on the axis
   so you can mouse over / look at the curve on its own

.. it would be good to also 'dull' the other curves and their
   axis labels so we have a little context .. will look at that
   next .. it might not be so 'clean' though.
2014-02-07 12:22:22 +00:00
Mark Liversedge
d4ff56031a AllPlot Series Stack Sizes
.. now set to the user preference when a ride is selectred where
   previously it would set to 200px.
2014-02-06 23:32:04 +00:00
Mark Liversedge
0e1b4aa271 AllPlot Isolate on Axis Hover
.. less jarring and useful when setting a reference line
   for power as it isolates the power series.
2014-02-06 20:22:37 +00:00
Mark Liversedge
a90bbd86fa AllPlot isolate curve on mouse over
.. disabled the effect as its NASTY and flickery but saving the
   code anyway as we might do it by a mouse over the legend ??
2014-02-06 19:16:07 +00:00
Mark Liversedge
83cb089908 LTM Compare Fixup Tooltip
.. now shows a tooltip on the stack charts so will also
   fix normal mode stacked too.
2014-02-06 16:33:02 +00:00
Mark Liversedge
d213a90324 LTM Compare Fixup Markers
.. show event and season markers on the compare plot
   helps to provide context against the week/month offsets

.. also fixed up how bars are lined up and that each plot
   in the compare stack has the same x-axis
2014-02-06 15:52:47 +00:00
Mark Liversedge
317f83d72b LTM Compare Fixup legend
.. always hide the meaningless legends for trend, outlier
   and best curves since they are the same color as the
   curves already listed in the legend.

We should apply this to the normal view too.
2014-02-06 12:52:23 +00:00
Mark Liversedge
a53d484cb6 Update Default Trend View
.. the trend view layout default has been updated to reflect
   recent updates to the capabilities of the charts, notably;

   * Data Table to summarise recent key markers / indicators
   * Data Labels on charts where appropriate
   * Color scheme slightly altered to plot more appropriately
     when in compare mode (less contrast, less vibrant palette).
2014-02-06 11:25:33 +00:00
Mark Liversedge
7a83da2ee6 Compare mode for LTM
You can now compare seasons / date ranges across or between
athletes on the LTM charts.

This is only shown on the stack chart as we need one chart
per data series - in a similar vein to the AllPlot chart.

There are some tidy ups left to do over the next few days;

- Data table needs updating to support compare mode
- Event markers need to be shown and in the right color
- PMC curve data is slow, needs some kind of optimisation
- The tooltip is missing and needs to be put back
- Ensure the new stack frame looks correct when using a
  dark plot background (or anything other than white)
- Consider how to handle zooming when there is only one
  data series and hence only one chart for compare
2014-02-05 20:40:24 +00:00
Mark Liversedge
9bb8e932c7 Merge pull request #787 from jjofre/master
Fix x-axis missing label issues with Qt 5
2014-02-05 18:29:14 +00:00
Jaime Jofre
ac40912a3b Fix x-axis missing label issues with Qt 5 (https://github.com/GoldenCheetah/GoldenCheetah/issues/750) 2014-02-05 13:19:16 -05:00
Mark Liversedge
88daadd8b6 Fix shading zorder
.. so power shading doesn't hide altitude

Fixes #772
2014-02-03 20:18:09 +00:00
Mark Liversedge
971901c773 Small circle topN
.. when no symbol chosen (instead of a hideous
   great rectangle, yuck).
2014-02-03 19:37:38 +00:00
Mark Liversedge
16eb9637fe LTM Stack Zoom Slider
.. to adjust the size of the charts in stack mode.
2014-02-03 19:04:12 +00:00
Mark Liversedge
6f0b7901df LTM Stack refresh on first click of 'show stack' 2014-02-03 18:07:00 +00:00
Mark Liversedge
8b5bcd0902 LTM Stack Plot Mode
.. mostly in preparation for compatre date ranges
   on an LTM chart, but also for plotting lots of
   values at once without having too busy a chart.

NOTE: Need to sort out tooltips and optimising the
      refresh as well as making it possible for the
      user to set the plot height like in AllPlot.
2014-02-03 16:23:47 +00:00
Mark Liversedge
f8145fd66a LTM Data Table headings fixup
.. to use uname not name and also to avoid duplicating units
   when they are the same as the metric name (e.g. the metric
   'Relative Intensity' has units 'Relative Intensity').
2014-02-03 11:42:05 +00:00
Mark Liversedge
4e24fcaa21 Another attempt to fix SEGV in FitRideFile
.. when the file is zero length or the header is truncated.
2014-02-02 20:06:40 +00:00
Mark Liversedge
f07089b209 Revert "Fix SEGV on bad file/header in FitRideFile"
This reverts commit c8e1f95114.
2014-02-02 14:55:49 +00:00
Mark Liversedge
cdf210c8b8 Tidy up y axis on ErgFilePlot
.. it was a bit messy and yRight 1+2 should have
   been hidden from view.
2014-02-02 13:58:03 +00:00
Mark Liversedge
770dae0f63 Fix ErgFilePlot xBottom Axis
Fixes #750
2014-02-01 23:57:59 +00:00
Mark Liversedge
ecaacca5b3 LTM Data Table Fixups
.. fix PMC SEGV
.. fix for summary of NO data

Will now skip all zero values when summarising
by day, but not for week, month or year.

Fixes #782
2014-02-01 21:50:04 +00:00
Mark Liversedge
72d9ae1736 Fix rrData signal error 2014-02-01 12:48:24 +00:00
Mark Liversedge
c8edba547d Labels for topN need a bit more spacing
.. because there is a big symbol too
2014-02-01 11:31:09 +00:00
Mark Liversedge
1d7e7c1492 LTM labels on topN
.. coz the first thing you tend to do is hover over the
   point to see what the value is anyway!
2014-02-01 11:22:15 +00:00
Mark Liversedge
9b0d8f09df Fix Data Label placement of last point
.. the if/else block was never called for the last point on a
   curve due to a logic error.
2014-01-31 22:55:44 +00:00
Mark Liversedge
cca9b7221b Fix SEGV on data labels with 1 data point
.. references offset -1 in array
2014-01-31 19:44:55 +00:00
Mark Liversedge
fe44157dec Diary View Defaults
.. default to summary of the month

.. so now group by week
2014-01-31 17:33:03 +00:00
Mark Liversedge
94c3681ad7 LTM Labels Fixes
.. for bar chart
.. and set axis
2014-01-31 17:16:04 +00:00
Mark Liversedge
ce2deef793 LTM Data Labels
.. option to show a label on chart points
2014-01-31 16:29:43 +00:00
Mark Liversedge
c8e1f95114 Fix SEGV on bad file/header in FitRideFile 2014-01-30 20:57:43 +00:00
Mark Liversedge
ca2536b017 LTM Data Table Fixups
.. lots of crashes fixed

.. AVOID data table for PMC for now as they are a mess and
   will fix tomorrow night
2014-01-30 00:03:21 +00:00
Mark Liversedge
a4877bd647 LTM Data View
.. show the metric data as a table as well as a chart, its quite
   useful to configure a summary table of metrics.

Ironically, the ability to configure the summary page in WKO+ was
one of the things that pissed me off and started me down the road
of extracting data from .wko files.  I then found the data I wanted
wasn't even in the files and started developing for GoldenCheetah
         .. the rest, as they say, is history.
2014-01-29 16:48:50 +00:00
Mark Liversedge
474e58313f Add rrData signal in ANT and Robot
.. to help development of an experimental HRV tool.
2014-01-29 10:30:22 +00:00
Mark Liversedge
4796425ff6 W'bal decay set to 1hr, infinite not practical 2014-01-28 20:58:44 +00:00
Mark Liversedge
9f6077c4d1 W'bal decay to infinity
.. No more cutoff of the decay. Since we use threads its
   not such a big deal as before.

.. We now get a full, smooth decay till the end of the ride
   which was much more noticeable when predicting W'bal for
   a workout, than it was for a ride.
2014-01-28 20:18:20 +00:00
Mark Liversedge
432e6ec3a9 Plot Predicted W'bal in Train mode
.. only plots predicted W'bal for the workout but at least that
   means you can see if the workout is even possible.
2014-01-28 18:32:26 +00:00
Mark Liversedge
5b7c3805f8 Fix delete SEGV
.. autodelete doesn't like detached items.
2014-01-27 15:30:47 +00:00
Mark Liversedge
f7dd54ff68 Update WPrime comment
.. to explain how we sped up the W'bal integral calculation
2014-01-26 20:15:20 +00:00
Mark Liversedge
8974ba2d2f Fix WPrime CP lookup SEGV
.. when zones or cp not set for the date in question

Fixes #774.
2014-01-26 16:22:00 +00:00
Mark Liversedge
f727c6270e Potentiall fix crash on Pickers
.. track and delete plot pickers.
2014-01-26 15:08:26 +00:00
Mark Liversedge
48b1a283b0 Add W'bal chart to default setup
.. when new athletes created.
2014-01-26 13:31:39 +00:00
Mark Liversedge
030fdc03b3 Fix DIV0 SEGV
.. in WPrime, and also don't bother trying to autosolve
   CP when W'bal is negative if W' is not setup
2014-01-26 12:10:13 +00:00
Mark Liversedge
f10e24857d W'bal use threads
.. to boost performance. Now will compute the integral
   in parallel and saves about 35% in elapsed time on a
   dual core processor.
2014-01-25 22:56:41 +00:00
Damien
3c122d429c FitRideFile: wrong copy-paste 2014-01-25 22:59:09 +01:00
Damien
74b800056a FitRideFile: We may need to add string support 2014-01-25 22:56:52 +01:00
Damien
46d6e46d85 FitRideFile: correct issue with unknown field type in fit file
fix #724
2014-01-25 22:36:52 +01:00
Mark Liversedge
ce0a5c39eb Less bounds checking on W'bal calculation
.. to save on computing cost the W'bal decay was only
   calculated to 20mins and also bounds checked to a
   decay of 0.1w, but of course, the decay is more like
   25 minutes and 0.1w * 1500 samples is a lot... so
   I've removed them.

.. the key optimisation is the way the decay is integrated
   and that is skipped for samples where W' exp is zero ..
   that optimisation reduces the amount of computing cost
   to 25% of doing it for all samples.
2014-01-24 18:36:43 +00:00
Mark Liversedge
fd778c3230 W' Exp rename W' Expended
It was too oblique a name, could have mean't a few things...
2014-01-24 18:12:00 +00:00
Mark Liversedge
c4e20d1777 Red text in summary for W'bal below zero 2014-01-24 18:07:40 +00:00
Mark Liversedge
9fe10d4691 New Metric W' Exp
For maximum W' capacity expended i.e. Min W'bal
expressed as a percentage of W'.

So if W' is 20 kJ and W'bal is 2kJ then 18 kJ
have been expended, which when expressed as a
percentage of W' (18/20 %) would be;

Max W' Exp of 90%

I also cleaned up a few extra instances of WPrime
being created when calculatinf metrics which was
not a big deal for the Metric refresh but would make
interval metrics painful.
2014-01-24 17:27:45 +00:00
Mark Liversedge
fb4d513bbe WPrime don't crash on bad data
.. if duration is overly large we don't want to get some
   massive array, it will exhaust heap and cause a crash ..
   and it is likely to just be bad data.
2014-01-24 15:37:53 +00:00
Mark Liversedge
86dafd9c57 WPrime interpolation fixup
.. don't be so keen to add zero values interpolating gaps
   in recording when the gap is less than 2 samples wide.

.. previously we were adding way too may zero values at
   subsecond intervals that caused an interpolated value
   returned by the spline to be /practically/ zero.
2014-01-24 11:53:13 +00:00
Mark Liversedge
b7092c5a30 Fix WPrime spline starts from 0
.. offset needed to be a double not an int to ensure
   we handle recording gaps from powertap etc where
   it is not an whole number of seconds

.. Thanks for Armando Mastracci for highlighting this
   and providing a test file to recreate

Fixes #773
2014-01-24 10:33:57 +00:00
Mark Liversedge
64b5e22a91 Revert "ANT+ Don't write 5 blank bytes"
This reverts commit c0b38a193c.

It has introduced errors on Mac and Windows -- we need to better
understand why this is not the case on Linux and whay /exactly/
it is doing that helps on the other platforms.
2014-01-24 08:06:37 +00:00
Mark Liversedge
1bbc12e4ff Autosolve CP for Min W'bal +/- 3w
.. just speeding up the autosolve by only looking in increments
   of 3w, should speed up by a factor of 3 but will mean the result
   is correct to +/- 3w .. which given the W' is usually only right
   to +/- 2kJ should be about right.
2014-01-24 07:51:54 +00:00
Mark Liversedge
6ef03ee704 W' Work
.. don't rely on WPrime to compute it, its pretty simple
   to compute as long as CP is set

.. add to the summary totals so always there to compare
   against the total work
2014-01-23 17:55:41 +00:00
Mark Liversedge
d8711a9ba1 Fix W'bal calculation
.. the optimisation was a little eager and took out
   the integration step !

.. access to PCP is now hidden behind a function so
   it is only computed when neccessary.

.. the calculation is still significantly faster than
   the old one but not as instant as the non-integrating
   version (but then it wasn't working either!).
2014-01-23 16:30:53 +00:00
Mark Liversedge
f186f7e173 Fix temperature curve
Cosmetic fixups to make sure temperature is visible
and the fill is honoured.
2014-01-23 11:42:00 +00:00
Mark Liversedge
0128e2fb75 Fix DIV/0 SEGV with WPrime 2014-01-23 08:49:35 +00:00
Mark Liversedge
121a4c691a Minimum CP for W'bal going negative
.. on ride plot, when W'bal is plotted we put a mesage to say
   that CP is wrong, and autosolve for W'bal to zero.

.. this patch also optimises WPrime to make it a member of the
   ridefile class and this always available (even for intervals).

.. fixed a SEGV when computing metrics for intervals by shifting
   the timestamps to always start from zero.
2014-01-22 20:48:42 +00:00
Mark Liversedge
99df8ab27e Enable use of Minimum W' bal in data filter 2014-01-21 18:07:33 +00:00
Mark Liversedge
89a5ca2634 Added W' expenditure metric
.. energy spent above CP
2014-01-20 20:33:33 +00:00
Mark Liversedge
393e4a38e3 Added W' Tau as a metric
.. so we can track and see if it correlates with anthing.
2014-01-20 19:54:00 +00:00
Mark Liversedge
a0114b32f9 Add W'bal Metrics
Added;
- minimum W'bal == how deep did you go on the ride?
- max match == hardest sustained effort in KJ.

Fixes #760
2014-01-20 19:25:55 +00:00
Mark Liversedge
4ff5a036b7 Optimise W' calculation
Instead of just reimplementing the spreadsheet we now
implement according to the original formulas as defined
in the W'bal paper.

This means there is no longer a 1200s limit to the decay
which was not part of the original paper.

We should be able to add some W'bal metrics now.
2014-01-20 18:47:03 +00:00
Mark Liversedge
ea493a4405 Fix PMC LTM SEGV
.. cut and paste error!
2014-01-19 19:01:22 +00:00
Mark Liversedge
613d10817a Add more Suunto Ambit test rides 2014-01-19 12:36:27 +00:00
Mark Liversedge
d15bb966ce Merge pull request #766 from Walibu/master
Using milliseconds for speed calculation, needed for Suunto Ambit gpx datafiles
2014-01-19 01:14:57 -08:00
Mark Liversedge
3c7f591765 Histogram Golden Ratio for Zone Columns
.. taking what we did for compare mode and applying
   it to the normal zoned display.
2014-01-18 22:35:41 +00:00
Walter
ca6f0882c1 using milliseconds for delta_t when calculating speed, supports Suunto Ambit gpx datafiles 2014-01-18 23:32:51 +01:00
Mark Liversedge
b8e07dbcdd Fix Histogram SEGV and Speed
.. SEGV caused by referencing data->isChecked when
   not in range mode

.. Speed plotting broken because line setting the
   array length in setData was accidentally deleted
2014-01-18 20:23:35 +00:00
Mark Liversedge
a114164baa Histogram Compare Metric
.. the last of the histogram updates to compare date ranges
   for distribution by metric (e.g. IF for rides)
2014-01-18 18:47:57 +00:00
Mark Liversedge
c7f24e9b45 Disable Metric Histogram Compare
.. to avoid errors until we implement
   histogram metric compare date range
2014-01-18 16:21:49 +00:00
Mark Liversedge
8c72f29585 Histogram Compare Date Ranges
.. for bests, not metrics on Histogram

Still need to fixup Histogram to plot metrics
in compare mode for date ranges.
2014-01-18 15:38:35 +00:00
Mark Liversedge
3d23e4e994 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2014-01-17 20:21:44 +00:00
Mark Liversedge
49a10d98ec Merge pull request #737 from Tafkas/master
Add virtual power support for Tacx Blue Twist and Blue Motion trainers
2014-01-17 12:21:15 -08:00
Mark Liversedge
503a3c4ba3 Fixup Histogram Compare Zones
.. it was using the range from rideitem
2014-01-17 18:56:40 +00:00
Mark Liversedge
57061c26de Fixup compare interval refresh
.. usual signals and refresh optimization and
   bugs (switch tabs + switch compare mode).
2014-01-17 18:10:34 +00:00
Mark Liversedge
331931cd31 HistogramWindow remove legend
.. for now, it causes a nasty refresh glitch.
2014-01-17 16:25:51 +00:00
Mark Liversedge
6cefb170e2 Golden Ratio for Grouped Bars
.. on the histogram charts when comparing multiple
   intervals we group using a golden ratio to make
   it easier to read.

.. this is less about the histogram and more about
   establishing the aesthetic in time for the LTM
   updates for compare date ranges.
2014-01-17 16:02:35 +00:00
Mark Liversedge
92e7d6090b Compare RideFileCache Optimisation
.. need to only create when needed and also need to
   delete when done.
2014-01-17 11:42:34 +00:00
Mark Liversedge
0076a4c68e Compare Pane Don't Add Metrics already there
.. distance and duration are default metrics on the
   summary, so we need to make sure we don't double
   up on the compare pane.
2014-01-17 10:30:05 +00:00
Mark Liversedge
f06c5d0624 Histogram Compare Fixup
.. remember we can plot for a season and recognise that
   when checking for isCompareIntervals in PowerHist.

.. fixes a SEGV when looking at a histogram in the trends
   view whilst compare intervals is active in ride view.
2014-01-16 22:55:04 +00:00
Mark Liversedge
bbb3a1ddc5 Histogram Compare Axis Scaling Fixup
.. truncate the x-axis for small values

.. only set y-axis max for selected intervals
2014-01-16 21:27:45 +00:00
Mark Liversedge
1b89d92b0a Histogram Window Interval Compare Mode
.. still needs tidying up for some combinations of show/hide
   tab switch and adjusting chart parameters but is 99% there

.. still need to apply the same compare update for when comparing
   seasons not intervals
2014-01-16 10:56:13 +00:00
Mark Liversedge
4a1598fe33 Refactor arrays out of PowerHist class
.. in preparation for updating for compare mode.
2014-01-15 13:01:56 +00:00
Mark Liversedge
a98212d093 CompareInterval ridefilecache
When an interval is added to the compare pane we now
compute the RideFileCache so it can be re-used in the
Histogram and CP charts without computing it each time.
2014-01-14 21:35:01 +00:00
Mark Liversedge
c3c69c7c06 Fix sidebar resiziung bug
.. caused by CP plot.

.. have no idea /why/ this occurs, but fixed by commenting
   out the div scale for the CP plot (that isn't needed anyway)
2014-01-12 17:09:57 +00:00
Mark Liversedge
789a7c0a70 CP chart settings into tabs
.. there were too many settings on one page
   so split into tabs
2014-01-12 14:59:43 +00:00
Mark Liversedge
02edd9aba2 Fixup renaming of Views
.. missed in a few minor places.
2014-01-12 14:01:51 +00:00
Mark Liversedge
f0397630da RideNavigator - activities become rides 2014-01-12 13:43:16 +00:00
Mark Liversedge
87ba542197 What's in a name ?
The 4 views have been shown to be confusing -- it is not clear
to new users what their purpose is, and hence how or why they
are different.

So in an effort to reduce the confusion I've renamed a few
things to be much more explicit and specific.

.. We embrace the fact we are a cycling program and use the term
   RIDES not ACTIVITIES for all files

.. HOME is confusing, renamed to TRENDS

.. the ANALYSIS view name is confusing, its all about ANALYSIS
   to renamed to RIDES

There will no doubt be areas that are not renamed properly we
can fix those when the arise.
2014-01-12 13:06:00 +00:00
Mark Liversedge
ee76e6769a Compromise on import
.. signal when importing a relatively small number
   of items (less than 20)

.. don't signal when importing a lot of items (more
   than 20).
2014-01-11 10:55:23 +00:00
Mark Liversedge
c0b38a193c ANT+ Don't write 5 blank bytes
.. it doesn't do anything except create errors
2014-01-11 10:25:37 +00:00
Mark Liversedge
f10f1cbabf Fix Mass Import Memory Exhaustion
.. don't signal when adding a ride, which kicks off
   all manner of updates across the code, instead
   we let the metric refresh kick in at the end.

.. this is great for an initial load and mass import
   of large numbers of rides, but sucks for a small number
   of rides when maybe downloading

.. we could make the signalling dependent on the number of
   rides being imported, so small number still updates the
   CP charts etc.

THIS IS A TEMPORARY FIX TO THE MORE SIGNIFICANT PERFORMANCE
ISSUE -- BUT WE DO NEED TO CONSIDER THE ISSUE OF CHART UPDATES
2014-01-10 22:02:46 +00:00
Mark Liversedge
c0b29609be Fix WKO import - another optpad constant
.. amazingly there are still some constant values we have
   not seen before. This time from files provided by
   Patrick McNally.

.. optpad values we have seen now range from 0x8007 through
   0x801a and crucially with only one value missing 0x8008

.. its just a matter of time before we see one of those :)
2014-01-10 19:32:52 +00:00
Mark Liversedge
4f8e344d38 Don't auto open athlete that crashed
.. instead offer the cyclist menu
2014-01-09 22:02:54 +00:00
Mark Liversedge
d00ac93fb2 UI Nits: Qt5 Toolbar color when inactive 2014-01-07 21:32:05 +00:00
Mark Liversedge
4474e18a9c Forgot to increment the DB Schema! 2014-01-07 16:50:29 +00:00
Mark Liversedge
af67705fd0 UI Nits: Prettify Mac Toolbar for QT5
.. colors match document mode tabbar.
2014-01-07 16:49:45 +00:00
Mark Liversedge
2c65061924 UI Nits: Mac Athlete Tab Bar
.. now looks a bit more 'Mac-like'.
2014-01-07 16:24:36 +00:00
Mark Liversedge
ce7e881957 Fixed Estimated VO2MAX metric
.. to use latest ACSM formula.

.. see: http://blue.utb.edu/mbailey/handouts/pdf/MetCalnew.pdf
2014-01-07 16:20:23 +00:00
Mark Liversedge
2ac02e7b0b Hide empty series plots in compare mode
.. check the curves are empty!
2014-01-06 18:25:52 +00:00
Mark Liversedge
37d8e7a603 AllPlot Paint Zones in Compare Mode
.. we should actually paint a zoned background if
   power shade zones is selected, when in compare mode.

.. but /only/ for charts that have power on them!
2014-01-06 17:51:15 +00:00
Mark Liversedge
dc5cfc7e76 Fix Ride plot zone shading for series stack
.. the setting wasn't being set/unset according to
   user preferences properly.
2014-01-06 17:01:43 +00:00
Mark Liversedge
6ebfe79c73 UI Nits: Colorblind
.. tweaked color sequencing in compare to avoid using
   red/green as it should be avoided -- red/green color
   blindness is relatively common.

.. this is just a hack in the absence of a good algorithm
   to generate distinct hues automatically.
2014-01-06 14:02:24 +00:00
Mark Liversedge
9aa5f46f48 Fix compare by time / by distance bug
.. silly typo mean't allplot was being used as a refrence
   when generating plots instead of fullplot

.. this manifests itself as using the wrong plot for the
   'bydist' boolean -- this is fine, unless you switch
   between by time and by distance whilst in compare mode.
2014-01-06 12:59:51 +00:00
Mark Liversedge
530c12435f Sneak in for dev builds
.. full plot controls always visible in compare mode.
2014-01-05 18:03:46 +00:00
Damien
d367adb0e6 ExtendedCriticalPower: Use version 5 2014-01-05 18:41:12 +01:00
Mark Liversedge
acf439bb1d UI Nits: PfPv / QA refresh issues 2014-01-05 16:42:13 +00:00
Mark Liversedge
4b460fa9c8 PfPv Compare Nits
* clean up refresh when changing tabs etc
* update the quadrant % markers
2014-01-05 15:17:10 +00:00
Mark Liversedge
f3ba7ed352 Fix 'Fix Tools' being called
.. I deleted the lines that actually call the data
   processor when I was refactoring MainWindow.

.. this must have been an accident as there is no
   possible reason for just deleting the code!

Fixes #747
2014-01-05 12:18:44 +00:00
Gareth Coco
2eff77f345 Merge branch 'master' of github.com:GoldenCheetah/GoldenCheetah 2014-01-05 01:54:18 -05:00
Gareth Coco
5b8997dd1d Update Fedora RPMs and install instructions
RPMs needed libsrmio installed which is not available.
Change to compile against a static build of libsrmio.
Changed install instructions to use "yum" so dependencies are installed.
2014-01-05 01:52:09 -05:00
Mark Liversedge
59821597c9 Disable reference lines in compare mode
.. it has nowhere to save them.

.. we could reintroduce and save with a compare set
   when we have one of those!
2014-01-04 11:17:22 +00:00
Mark Liversedge
54ea5514ee Fix allplot Compare mode refresh
.. if you selected a ride and viewed on allplot then
   changed tabs, entered compare mode then switched back
   to allplot the display didn't get refreshed.
2014-01-04 10:49:56 +00:00
Damien
0aa445a565 CpintPlot: hide contribution curves 2014-01-04 10:50:18 +01:00
Damien
1caedcac06 PfPvPlot: Correct last commit 2014-01-04 10:48:56 +01:00
Damien
d87d9b505b PfPvPlot: Fix Color for intervals 2014-01-04 10:34:15 +01:00
Damien
6540224102 ExtendedCriticalPower: Add contribution curves eCP version 6 2014-01-04 00:46:39 +01:00
Damien
eaba1fef7d CriticalPowerWindow: small correction 2014-01-04 00:46:15 +01:00
Damien
9ca4691464 PfPvWindow: Add Compare Mode 2014-01-04 00:42:51 +01:00
Mark Liversedge
00645d6381 Fixup ComparePane to derive xPower, NP et al
.. so they can be plotted alongside other data
   series in each chart.
2014-01-03 16:43:50 +00:00
Mark Liversedge
df15888b0b AllPlot Compare Mode
.. extending the interval compare to the allplot chart.
2014-01-03 14:59:20 +00:00
Mark Liversedge
5ea6a06492 Merge pull request #746 from jjofre/master
Should only auto refresh filters if we have Lucene configured to prevent...
2014-01-01 13:42:00 -08:00
Jaime Jofre
df800bdde2 Should only auto refresh filters if we have Lucene configured to prevent core dump 2014-01-01 15:10:58 -05:00
Mark Liversedge
13df3073c3 Include <QCheckBox> for QT5 2013-12-31 18:41:20 +00:00
Mark Liversedge
015e15c416 Small fix for Centile SEGV
Array bounds checking used a double which is susceptible
to rounding issues, or at least returning values a tiny
fraction over an integer that when converted add 1.

e.g. 10.000000001 -> 11 when converted to int.
2013-12-31 15:12:14 +00:00
Mark Liversedge
f90eb8a929 CP honour Appearances setting for Linewidth
.. it should have been done a long time ago!
2013-12-31 14:57:39 +00:00
Mark Liversedge
20e641e1c5 Use source context in CP compare mode
When comparing it is possible to compare across
athletes; e.g. their 2013 season vs my 2013 season --
which means we need to use the sourceContext for any
items when aggregating / fetching the data.
2013-12-31 14:21:10 +00:00
Mark Liversedge
fd72ad67d3 More CP Fixups
Basically to distinguish between the four modes
and only show what you are asking for;

* rangemode + normal  - the currently highlighted season only
* rangemode + compare - the compare pane seasons only
* ridemode  + normal  - the current ride and left pane intervals only
* ridemode  + compare - the compare pane intervals only
2013-12-31 13:52:41 +00:00
Mark Liversedge
b0e6beb671 Fix Glitch for CP Compare Intervals
.. same as the normal interval display glitch.

That was caused by appending to an array that was
already resized .. making it double the size and
prepended with lot of zeroes!
2013-12-31 13:19:21 +00:00
Mark Liversedge
b01f529c65 Compare Button Change to Red when on
.. better visual cues for red title, red scope etc
   to show all tied in to compare being ON.
2013-12-31 13:05:24 +00:00
Mark Liversedge
a6c389dcbc Fix SEGV on CP picker in Compare Mode
We still need to fix the CP chart picker and hover
to use the range bests when in compare mode.
2013-12-31 12:25:53 +00:00
Mark Liversedge
56206d1fc6 CP Plot Fixups
Fixed a few nits that have come to light over the last
few days as lots of new features were developed.

* Fixed interval glitch where first point is zero, caused by
  an off by one error in the original code

* Fixed interval creation which also had an off by one error
  that mean't 5s curve was only 4s long

* Made the shading under an interval optional, as it is a bit
  nasty and was there to hide the glitch in point 1 above

* Made the interval line solid, not dotted, as it looks much
  better that way -- especially now its used for compare mode

* Made the title red by implementing isCompare() when in
  compare mode.

* Fixed a crash on hover in season compare mode
2013-12-31 12:09:02 +00:00
Damien
c5077af75b CpintPlot Compare Mode
you can now compare intervals or date ranges via the critical power window
2013-12-31 00:57:46 +01:00
Mark Liversedge
863415ba26 Fix compare pane sorting
.. sorts according to the expected format for each column
   but if in doubt assumes its numeric
2013-12-30 21:15:47 +00:00
Mark Liversedge
74e7c44c55 Handle Compare Pane Sort
.. if the user sorts the compare pane contents by clicking
   the header the order they are stored is changed too.

NOTE: The table sort is broken since it is alpha not numeric!
      This needs to be fixed too.
2013-12-30 20:00:38 +00:00
Mark Liversedge
38a59badf7 RideSummary Honours CheckBoxes
.. if intervals or date ranges are not checked in the
   compare pane then we shouldn't summarise them

.. also fixed up compare pane so first entry ie. what we
   are comparing to is always checked.
2013-12-30 19:06:33 +00:00
Mark Liversedge
17a387b043 Compare Seasons fixups
.. update the title

.. don't keep adding ride count to the total
   metrics to calculate

Need to work out what to do with;
* Temperature
* Athlete Bests
2013-12-30 17:52:35 +00:00
Mark Liversedge
0aee3c2e14 RideSummary Compare Mode
.. you can now compare intervals or date ranges via
   the ride summary window.
2013-12-30 17:08:17 +00:00
Mark Liversedge
adfd9e4f89 Compare Mode Connected Up
.. Connected the compare mode on/off switch in the
   compare pane to Context to notify charts

.. the scope bar and chart painting now highlight in
   red when compare more is active and supported by
   a particular chart.

.. each chart must implement isCompare() to return
   true or false if it is supporting compare mode.

We /still/ do not have a mechanism for clearing or
reordering items in the compare pane, nor a mechanism
for choosing 'delta' compare (i.e. baseline all compares
to first item in the list).
2013-12-30 00:18:41 +00:00
Damien
c319a9f41c MergeActivityWizard: don't crash if no data to merge 2013-12-30 00:12:42 +01:00
Mark Liversedge
d748695b0e UI Nits: Fusion Style on QT5 only
.. improves things somewhat on Windows.
2013-12-29 21:29:11 +00:00
Mark Liversedge
69cadf04ac Checkpoint ComparePane now toggles off/on
.. added a button to switch compare on and off.
2013-12-29 19:47:36 +00:00
Mark Liversedge
b6885ae979 Fix SEGV on date range compare pane
.. when click color or checkbox for a season.
2013-12-29 17:04:46 +00:00
Mark Liversedge
69a4956d61 UI Nits: Mac and QT5 Toolbar
Fixed up to make the toolbar on a build on QT5 look a little
more like one on QT4 where they still have unified toolbar
and title support.

We should look at managing via the native NSToolbar in the
near future since Digia have made it clear that they are not
keen to reintroduce unified toolbars in QT5.
2013-12-29 14:49:18 +00:00
Mark Liversedge
bd37801225 DateRange Compare Pane
.. now can drag and drop any date range onto the
   home view compare pane to compatre different
   seasons, and even across athletes.

.. we setup the metrics and measures in the context
   so the charts don't have to, but we still need to
   reference the source context for bests and ridefilecache
   data

NOTE: We need a mechanism for 'locking' source tabs/athletes
      when they are part of a compare to avoid crashing when
      a context is deleted whilst we are comparing

NOTE: We till need a way to remove entries from the compare
      pane, possibly call it when an athlete is closed too
      (see note above).
2013-12-29 13:00:46 +00:00
Mark Liversedge
99712de70f Fix Season Encoding for drag/drop
.. should be ok to drag and drop a standard
   date range as well as a season definition

.. pass across the start, end etc to avoid having
   to dereference from the source context
2013-12-29 10:20:57 +00:00
Mark Liversedge
b0a0d7bb17 ComparePane Qt5 fixups 2013-12-28 23:17:17 +00:00
Damien
1f68f1ecf5 ExtendedCriticalPower: Add code for demo curves 2013-12-28 23:56:02 +01:00
Damien
866e884d48 CPintPlot: Add centile mode plot for selected ride 2013-12-28 23:56:02 +01:00
Mark Liversedge
8afa57cc39 UI Nits: Interval Compare Pane
.. on Mac tidied up and also fixed up the way the
   table is resized to contents -- to do it AFTER
   the contents are set (!)
2013-12-28 22:11:21 +00:00
Mark Liversedge
508e4afa68 Interval Compare Pane
Now allows you to add intervals and select them and
change colors they will use.

It will maintain the data as a CompareInterval which
also includes a RideFile representation of the interval.
This is stored in Context in a QList as compareIntervals
and can therefore be re-used across all charts.

We now need to think about putting some widgets onto the
Compare 'bar' for turning compare mode on and off and
deleting / reordering / clearing items.
2013-12-28 21:24:52 +00:00
Mark Liversedge
95b993617a Drag onto athlete tab to switch tabs
.. this allows us to drag and drop between athletes or
   to switch athlete if dropping from outside of GC.

.. also added context to the mime data so the compare pane
   will know where the dragged object has come from (ie. it
   may be from a different athlete).
2013-12-28 10:58:32 +00:00
Mark Liversedge
b03c10e6fd ComparePane: setDropAction on drop event
.. so it can be accepted and the data is not wiped
   or removed in the source treewidget.
2013-12-28 08:21:51 +00:00
Gareth Coco
4ad2bda50a Update Makefile 2013-12-27 15:36:08 -05:00
Mark Liversedge
d195de25cb Increase Starting LTS limits
.. from 100 to 300

Fixes #739
2013-12-27 14:20:49 +00:00
Mark Liversedge
ae2cd5eb97 Mac MainWindow Crash Fixes
* refresh popup resize mainwindow crash
* tabbar button crash coz on left not right on Mac
2013-12-27 13:48:02 +00:00
Mark Liversedge
77c2c07664 Add Close Button to Athlete Tab
.. so you can close athletes easily.
2013-12-27 13:23:57 +00:00
Mark Liversedge
b33c2becc7 Refresh Popup on First Run
.. to give a visual cue as to what is happening, since it
   can feel like GC has 'hung' as it loads.

.. this is especially important now we open tabs in an
   existing mainwindow.

   The delay between clicking open and the tab appearring
   needs to have a visual indicator that something is
   actually happenning.
2013-12-27 12:14:05 +00:00
Mark Liversedge
08e7d6d882 Update SaveDialogs for Tabbed Athletes
.. the save dialogs all assumed the current tab
   and current context were relevant when checking
   for unsaved files etc, but this was INCORRECT.

.. when window is closed each tab is checked IN TURN
   so the context should have been passed (because the
   current tab/context is just one of the many to save)
2013-12-27 11:41:10 +00:00
Mark Liversedge
611ffde353 DocumentMode and UnifiedTitleAndToolbar
.. don't go together, so removing the document mode update.
2013-12-26 21:14:31 +00:00
Mark Liversedge
b758e6fefe Add <QFileDialog> to GoldenCheetah.cpp
.. for QT5
2013-12-26 20:53:31 +00:00
Damien
dd7ce1f719 Export as PNG : hide menu button 2013-12-26 17:42:47 +01:00
Damien
b0a17947dd GcChartWindow: Add "export as PNG" in menu
fix #738
2013-12-26 17:34:38 +01:00
Damien
0fa9aec9cd AllPlot: Add secondary Scope to plot speed and headwind in the same together 2013-12-26 15:41:15 +01:00
Mark Liversedge
7d00cba9df Remove tabbar from context save/restore
.. when switching tabs -- as it makes no sense
   at all to hide/show tabbar as you switch tabs!
2013-12-26 11:00:32 +00:00
Mark Liversedge
67ab2b2903 Show/Hide tabbar as needed
.. only needed when we have >1 tabs so lets hide and
   show it automatically.

.. also added a setting for remembering setting but it
   doesn't do anything as we auto hide/show.
2013-12-26 10:54:42 +00:00
Mark Liversedge
bbeb76ab12 Tabbed Athlete Fixups
* showhideToolbar isn't available on a Mac
* used showhideToolbar for Tabbar (typo)
* setDocumentMode for tabbar on Mac (slightly better)
2013-12-26 09:18:57 +00:00
Mark Liversedge
36ede56ab4 Missing <QStackedWidget> in MainWindow.h
.. needed to build on QT5
2013-12-26 09:03:47 +00:00
Mark Liversedge
9963904fa3 MainWindow Refactor Part 5 of 5 - TABBED ATHLETES
The final part (and one of the reasons) for the mainwindow
refactoring -- we now support tabbed athletes rather than
having a new mainwindow for each athlete opened.

Context is saved/restored and there are new functions for
opening and closing tabs and windows of tabs.

The tabbar itself is fugly -- the next few days will spend
some time looking at making it prettier on Linux/Win and
more native on Mac (see MMTabBar).
2013-12-26 01:03:32 +00:00
Damien
5bc1107f3e AerobicDecoupling: Correct formula
fix #721
2013-12-26 01:13:28 +01:00
Damien
533a13546b AllPlot: Handle noTemp with no smooth
fix #634
2013-12-26 00:24:53 +01:00
Mark Liversedge
9d72cf92db oopsie on #ifdef
.. too Mac centric in last commit, forgot we might need to
   worry about other pesky operating systems.
2013-12-24 20:28:01 +00:00
Mark Liversedge
d48cadc726 RideNavigator no scrollbar on QT5
No need to adjust sizes to account for a scrollbar
on Mac in QT5, since the scrollbars are zero width.
2013-12-24 19:12:11 +00:00
Mark Liversedge
e4aadbe818 Fix compile error on stackZoomWidth
Gareth's build system baulked at the stackZoomWidth
class member defined as const in the class declaration.

Moved to a static member of AllPlotWindow.cpp instead.
2013-12-24 17:29:56 +00:00
Damien
c4cd9ee0e6 CPintPlot: Correct AxisScale for IntervalCurve (eg. HeadWind) 2013-12-24 15:33:58 +01:00
Mark Liversedge
8257a9c6e8 Fixup Compare Drag-N-Drop
We have two new mime data types;

application/x-gc-intervals
application/x-gc-seasons

With packing routines into QMimeData declared
in IntervalTreeView and SeasonTreeView.

To get around an issue with overwrite mode on
drag and drop from the seasons / interval trees
we DO NOT ACCEPT the drop (even though we do
actually process the data).

All we need to do now is unpack the QMimeData in
ComparePane and then add the GUI elements to it etc.
2013-12-24 11:48:19 +00:00
Mark Liversedge
420161e400 Zoom to really large
.. because when we're comparing we'll need it.
2013-12-23 22:51:30 +00:00
Mark Liversedge
13c504c822 Fixup Stack View Zooming
.. it was a bit shit with controls you couldn't
   use, and when you did nothing happened.

.. now has a slider and 7 distinct settings for
   stacks from ok to large and 5-60 mins sections.

.. should be good enough for most users.
2013-12-23 17:21:50 +00:00
Mark Liversedge
7ce5ffa7ea Fixup Stack By Series
Finish off the nits and missing pieces for the recent
update to enable plotting in a stack by data series;

* Now plots W' bal, LR Balance and headwind
* Stacks are now redrawn when settings change
* Interval marking is fixed
* Baseline is now set correctly for each plot
* Reference lines are plotted (on power plots only)
* Reference lines can be dragged
* Interval markers are not redrawn with the text
  only shown on first plot
2013-12-23 15:20:18 +00:00
Gareth Coco
80ffb4a3c8 Add Fedora 18/19 x86_64 RPMs for downloading 2013-12-23 07:38:56 -05:00
Mark Liversedge
192a2e27df Move Cocoa release pool to main
.. because mainwindows come and go and we need to persist
   across them all.
2013-12-23 10:38:18 +00:00
Mark Liversedge
6817db609b Remove ScopeBar from MainWindow
.. moving view selection to center of toolbar.
2013-12-23 00:40:11 +00:00
Gareth Coco
5e329fb53f Update website for 3.0.1 release 2013-12-22 15:34:56 -05:00
Mark Liversedge
4db8930b4e Remove errant qDebug statements 2013-12-22 17:47:26 +00:00
Mark Liversedge
a4fc05f70b AllPlot Stacked by Series
Extending the stack display to have a single plot for each
data series. This will be useful when comparing activities
and also makes it a bit easier to see the data when there
are lots of data series.

This is a checkpoint commit as I need to fixup some of the
series that have multiple curves and also reference lines
are not currently working.

But you can zoom using the fullplot and highlight intervals
etc.
2013-12-22 17:23:19 +00:00
Mark Liversedge
ac27639ff6 Add <QMessageBox> to ExtendedCriticalPower.cpp 2013-12-21 22:35:50 +00:00
Mark Liversedge
06242db844 Revert "Fixup Mac toolbar for Qt5 and Qt4 build"
This reverts commit 20739ebb29.

Qt5 has a number of issues that cannot easily be resolved.

An alternative strategy of developing a custom cocoa control
for the mac toolbar is probably a better way forward.
2013-12-21 22:29:24 +00:00
Mark Liversedge
20739ebb29 Fixup Mac toolbar for Qt5 and Qt4 build
.. should be a bit better now.
2013-12-21 21:08:21 +00:00
Mark Liversedge
6f8df99b8a Sync versions / upgrade script with v3.0 SP1
.. which was released today.
2013-12-21 18:40:37 +00:00
Mark Liversedge
2652b3d1e6 Proper fix for autofilter refresh 2013-12-21 17:47:11 +00:00
Mark Liversedge
c640ab525b Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2013-12-21 17:05:57 +00:00
Mark Liversedge
1175c2d529 Remove qdebug in ColumnChooser
.. was accidentally committed a long time ago!
2013-12-21 17:05:24 +00:00
Damien
f96937e360 ExtendedCriticalPower: Change default 2013-12-21 16:45:19 +00:00
Mark Liversedge
372a1df4a4 refresh autofilters on ride update
.. when metricDB is updated refresh the autofilters
   to reflect the values available.
2013-12-21 16:37:30 +00:00
Damien
5f035b223b ExtendedCriticalPower: Change default 2013-12-21 14:15:38 +01:00
Damien
7c43dd24fc CPintPlot: Add extendedCP in model combo 2013-12-21 00:25:19 +01:00
Mark Liversedge
030b190873 Check CPcurve is non-null before hide/show 2013-12-20 21:07:18 +00:00
Mark Liversedge
e64072437f Only show 1 model curve
.. either extended or standard models shown.
2013-12-20 20:22:11 +00:00
Mark Liversedge
3c3c3af47f Cosmetics tidy up chart settings 2013-12-20 20:14:30 +00:00
Mark Liversedge
a61e036d72 Fixup SEGV and layout error
.. minor fixups for new CP model code to initialise
   some vars to NULL and remove Qt runtime warnings
   about layouts.
2013-12-20 18:26:46 +00:00
Mark Liversedge
d898722d0b Autofilter
.. let the user choose metadata texts to filter
   by value in the sidebar.

Note there are issues;

1. the value lists are not updated automatically when
   rides are updated or imported and values are added
   or removed.

2. it only works with shorttext metadata fields, we might
   choose to add numeric etc later.

3. it would be nice to get an indication of how many
   activities contain the value and maybe even sort
   by count.
2013-12-20 17:48:49 +00:00
Damien
a3d123984a ExtendedCriticalPower: Add Model for ExtendedCP
- One version of the model (Version 4.3)
2013-12-20 18:23:04 +01:00
Mark Liversedge
613e7ebf39 LTM chart user selectable trend lines
.. now allows the user to select the type of trend
   line for a curve, only two options at present;

   * linear (linear regress)
   * quadratic (quadratic lsm)
2013-12-19 11:48:55 +00:00
Mark Liversedge
a7ac061114 Accidentally comitted increase in trend points
..was experimenting with fewer and more points on the trend
  line and accidentally committed it alongside the changes
  to fix the LTM axis scale setting.
2013-12-18 21:15:26 +00:00
Mark Liversedge
0bd6b77003 Fix LTM axis scale setting
.. dumb bug set all scales to same value!
2013-12-18 20:41:49 +00:00
Mark Liversedge
ce9bc24980 Add copyright and fix bomb character in LTMTrend2 2013-12-18 14:27:42 +00:00
Mark Liversedge
976924d535 Revert last commit
.. it wasn't a fencepost error!
2013-12-18 14:07:49 +00:00
Mark Liversedge
8f836e5556 Fencepost error in LTMTrend2
.. missed off the last data point each time!
2013-12-18 14:01:47 +00:00
Mark Liversedge
618cce57ee Quadratic Least Squares Trend Line
Added a quadratic least squares trend line for the LTMplot
as the linear regression was generally too blunt.

This is a hack to get the code into the repo -- will know work
on refining the LTMPlot settings to enable users to specify
the kind of trend line they want.

The new trend line might also be useful for other curve fitting
functions (e.g. realtime virtual power curve, a peak power chart
by cadence/pedal speed).
2013-12-18 13:52:37 +00:00
Mark Liversedge
e55480e083 Fix 2d crash
Qwt 6.1 seems to delete objects when they are detached from
the plots by default, so we don't delete them after detach
any more in ScatterPlot.
2013-12-18 11:06:23 +00:00
Mark Liversedge
e5d85bdd0e New Metric Fatigue Index
Looks at the max and min (non-zero) power values and
uses the difference between them to calculate a fatigue
index as a percentage.

i.e.
FI = (maxP - minP) / maxP * 100.00;

This is really only useful for targetted intervals as for
most riding there will always be a period of time where
the rider coasts or takes it easy.

We may look to improve it by smoothing or comparing to the
average power instead of minimum power.
2013-12-18 11:00:48 +00:00
Christian Stade-Schuldt
7f2a88bbeb added Tacx Blue Twist and Tacx Blue Motion to Device Wizard 2013-12-17 18:51:08 +01:00
Mark Liversedge
4249f45e3c Fix Lucene searches in Home Sidebar
.. I hadn't finished that bit of the code before
   pushing. A bit of an oversight!
2013-12-17 16:39:46 +00:00
Mark Liversedge
345c24b2ca Fix Season serialize cut-n-paste bug
.. that caused seasons to disappear!
2013-12-17 13:48:05 +00:00
Mark Liversedge
8aee630180 Fix LTM trend line
.. broken on All Dates selections.

It must be time to introduce a polynomial fit or somesuch
as the linear regress is a little simplistic for most cases.
2013-12-17 13:35:58 +00:00
Christian Stade-Schuldt
97c8bf1ef9 Added virtual power support for Tacx Blue Motion trainer 2013-12-17 12:16:01 +01:00
Christian Stade-Schuldt
5b5e309f7a Added virtual power support for Tacx Blue Twist trainer 2013-12-17 12:03:31 +01:00
Gareth Coco
2ea02dbfd3 Remove qwtconfig.pri 2013-12-16 21:04:21 -05:00
Gareth Coco
5c1b44ffdd Move to qwtconfig.pri.in
Disable shared build (we need libqwt.a)
2013-12-16 21:02:00 -05:00
Mark Liversedge
cfb63f7f8f Merge pull request #736 from Tafkas/master
Updated Tacx Satori Virtual Power values
2013-12-16 11:11:13 -08:00
Mark Liversedge
c44b70f52d Batch Export remembers last format/dir
.. but will only default to the last used dir
   if it still exists.
2013-12-16 18:50:33 +00:00
Mark Liversedge
6bfb1ba701 Fix crash in select intervals in PfPvPlot
.. we delete the curves after they are detached which
   causes a SEGV as they are already deleted.
2013-12-16 18:16:15 +00:00
Mark Liversedge
80cb8f464d LTM Plot honour plot background color
.. more of the same as recently updated similarly for
   CP, PfPv, Histogram, AllPlot etc
2013-12-15 23:28:18 +00:00
Mark Liversedge
a436f41b9f QLineEdit in RideMetadata
.. to compile on Qt5 without Lucene (which contains the same header)
2013-12-15 20:30:21 +00:00
Mark Liversedge
bfeb89995d Fix 3d grid when users specify background colors 2013-12-15 19:17:02 +00:00
Mark Liversedge
98d33c2455 Histogram Chart honour Plot Background Prefs
.. more of the same as done for AllPlot, CP, PfPv.
2013-12-15 18:42:04 +00:00
Mark Liversedge
ddff82ffdf PfPvPlot honour ride plot background
Similar to fixups to CP plot for user defined plot backgrounds
this update updates the PfPv plot to also re-use the user prefs
when setting axis / canvas and marker colors.
2013-12-15 18:23:22 +00:00
Mark Liversedge
b06c0e4e42 QHeaderView in Athlete.h for Jaime. 2013-12-15 17:34:25 +00:00
Mark Liversedge
2f25320dc5 Fix Lucene Optional (again) !
The recent filter bar in home view was coded without taking
into account the fact that LUCENE is an optional build component.

This caused builds to fail when LUCENE wasn't installed.
2013-12-15 13:12:40 +00:00
Mark Liversedge
8a5006fc0e AllPlot filter points
.. dramatic speed up in repainting, most noticeable
   if you select different rides with the AllPlot
   visible (in tab mode).
2013-12-13 11:01:07 +00:00
Damien
7230c1822d LTMPlot: fix show/hide legend 2013-12-12 23:40:24 +01:00
Damien
8c063086d5 CpintPlot: Log Axis for Qwt 6.1 for all Data Series 2013-12-12 07:42:00 +01:00
Damien
cf6340db06 CpintPlot: Log Axis for Qwt 6.1 2013-12-12 00:08:02 +01:00
Mark Liversedge
7cab86c148 Data Series not Channels
.. thats a term they use in WKO+ not GC !
2013-12-11 18:04:11 +00:00
Mark Liversedge
da46380d67 Fix xBottom lost in AllPlot
.. when you select or deselect a data series.
2013-12-11 18:02:19 +00:00
Mark Liversedge
e80243eea1 QWT 6.1 canvas() revert and LTM ToolTip fixups
Reverted the update to the QWT 6.1 code to make QwtPlot::canvas()
return a QwtPlotCanvas -- it now returns  QWidget.

This means our local copy of Qwt is the same as the published version
so we should be able to stop maintaining our own copy when Uwe pushes
the multiaxis stuff with 6.2.

Also fixed the LTM tooltip - the zoomer has been removed.
2013-12-11 17:58:35 +00:00
Mark Liversedge
dfeda95ca6 Revert "QT5 -- QWT 6.1 canvas fixup"
This reverts commit 54234ceca4.
2013-12-11 16:37:50 +00:00
Mark Liversedge
e6b90fc27c Fix AllPlot display x-axis 2013-12-11 15:53:46 +00:00
Mark Liversedge
f2e85366a4 Fix LTM plot x-axis 2013-12-11 15:48:24 +00:00
Mark Liversedge
a6007c11ed Fix LTM chart axes
.. using QwtAxisId type instead of an int cured most ills.
2013-12-11 13:27:13 +00:00
Mark Liversedge
c797e3b43e Fix AllPlot Y-Axes
Now hide/show appropriately and are painted correctly.

There is still a problem with the x-axis disappearing
but this should be straight forward to resolve.
2013-12-11 12:44:14 +00:00
Christian Stade-Schuldt
04fef32f6c Updated Tacx Satori Virtual Power values 2013-12-11 10:08:04 +01:00
Mark Liversedge
80dac90663 Fix #if in VideoWindow
.. wrong logic in #if for Linux and Qt5 in both
   the header and source.
2013-12-11 06:52:40 +00:00
Mark Liversedge
f58d778cd1 Don't set frameworks in QWT
.. makes it possible to build the examples
.. but we still don't build them by default
2013-12-10 21:26:58 +00:00
Mark Liversedge
16cd65377d QT5 -- Mac fixups for building with 4.8.4
.. missed off earlier commits.
2013-12-10 20:21:32 +00:00
Mark Liversedge
f8763e6379 REGRESS: Remove translateMetrics() from LTMPlot
This is a regression to remove the metric translation
functionality from LTMPlot.

WE WILL REINTRODUCE BEFORE RELEASE!

It has been regressed because;

1. It crashes on QT5 with Win32

2. It has significant performance penalties;

   It really should not instantiate an LTMTool object
   (Ale did discuss this with me and I gave it the go
   ahead, so my bad).

3. It should be executed on applySettings() not on
   each refreshPlot().

4. It has a bug regarding uunits being lost and breaking
   sharing of a common axis.
2013-12-10 19:54:00 +00:00
Mark Liversedge
3c246ffa28 Model reset fixup to use begin/endResetModel
Which is how you are supposed to reset a model and works
on QT 4 as well as QT 5.
2013-12-10 18:08:59 +00:00
Mark Liversedge
3694b67358 QT5 -- Fix model reset on 4.8.x
Using resetInternalData() does not do the same thing
in 4.8 models as 5.2.
2013-12-10 17:26:05 +00:00
Mark Liversedge
e6ccd840f2 QT5 -- Enable build on 4.8.4 -OR- 5.2.0
New strategy to enable build on QT5 or QT4.8 is quite
simple to enact as most of the fixes for QT5 can be
applied to earlier releases.

This patch fixes up some of the special cases for QT5 so
they will continue to build on earlier releases.
2013-12-10 16:07:41 +00:00
Mark Liversedge
64c25192ee QT5 -- Windows Build Fixups
Fix errors on Win32

* FLOAT reserved word from yacc grammars
* toAscii() becomes toLatin1()
* ->winId() returns int (BROKEN)
2013-12-10 13:56:32 +00:00
Mark Liversedge
51b420cd4b Cut and paste-paste error in --help output 2013-12-10 00:09:18 +00:00
Mark Liversedge
efefba23fd QT5 -- Fixups for Mac build
Remember to make distclean too.

Mac currently looks terrible -- the unified toolbar
is gone and its all a bit of a mess!
2013-12-09 23:00:21 +00:00
Mark Liversedge
baba5cc9d2 QT5 -- Part 3 of 3
Fixup crashes and major issues created by porting
to QT5. These have included;

* Fix CP plot log scale
* AllPlot axes and tooltip
* DBAccess prepare/bind bug
* LTMSettings crash
* LTMWindow zoomer/picker crash
* LTMPlot axes hack

There are still issues remaining but we can start
working through them at leisure -- the product now
builds and runs.
2013-12-09 21:21:51 +00:00
Mark Liversedge
c3a189b25c QT5 -- 2 of 3
Fixup all the GC code to use the QWT 6.1 code.
It needed canvas() to be patched to return a
QwtPlotCanvas and not a QWidget.

We could probably get round that with a cast.

When we switch to QWT 6.2 with the multiaxis
support formally baked in we can fix the code
as needed.

Now compiles and links without issues.
2013-12-09 12:26:55 +00:00
Mark Liversedge
54234ceca4 QT5 -- QWT 6.1 canvas fixup 2013-12-09 12:26:49 +00:00
Mark Liversedge
afd6d4a378 QT5 -- Add Qwt 6.1-multiaxes 2013-12-09 10:02:47 +00:00
Mark Liversedge
07e1b5e769 QT5 -- remove old qwt 2013-12-09 10:00:50 +00:00
Mark Liversedge
aa8605e8d5 QT5 -- 1 of 3
Porting the codebase to QT 5 (5.2) to get the
latest bug fixes, performance and improved platform
support.

This first part is to fixup the codebase to compile
on Qt 5, but some aspects have been broken (video).

The second part is to migrate from Qwt 6.0.1 to the
latest Qwt for multiaxis support.

The third part will be to fixup any platform specific
issues or issues identified at runtime.
2013-12-09 09:57:13 +00:00
Mark Liversedge
2d9e71b500 Fix up CP markers
.. to use the right colors.
2013-12-07 20:01:08 +00:00
Mark Liversedge
1abbab0d4d Plot Background and CP chart
If you change the plot background to black then the
CP curve is always in black too so becomes invisible.

Added a customisable color for the CP curve and fixed
up a few redraw issues in CP and Ride plot when you
change the colors.

Still need to fixup the other charts, but will do over
time. I suspect almost noone changes the plot colors from
the default values.
2013-12-07 19:42:51 +00:00
Mark Liversedge
7fe94bfad4 Introduce SB Lowpoint
Let the user define the lowpoint for stress balance -- this is
so we can highlight or alert when they go below.

From a post-hoc perspective it is useful for identifying where
they went too low, but also for planning it helps to stop
planning to fail.

Will update the LTM chart to highlight it alongside SB metrics.
2013-12-07 10:28:41 +00:00
Mark Liversedge
1dce9621c9 Windowless border on metric refresh popup 2013-12-07 09:43:48 +00:00
Mark Liversedge
68053cc7d3 Fix find intervals no gps/speed bug
.. flawed logic mean't that findBests didn't work
   when distance is not present via speed or gps.
2013-12-06 22:50:33 +00:00
Mark Liversedge
4d6b78f222 Cache StressCalculator in LTMPlot
A bit of a compromise since really we should move the
stress calculators to the Athlete class and reuse when
no filtering is applied.

This code fix just means the SC is not recalculated for
each of the individual curves (LTS, STS etc) and pretty
much halves (or better) the time taken to refresh the
LTMPlot.

For those with very few rides (<500) this isn't much of
an issue, but for some with lots (2000 or more) it can
be quite tedious.
2013-12-06 19:32:41 +00:00
Mark Liversedge
b960aaeddd Bests offset error
.. when plotting 1s best aka Max Power, the code was using
   the wrong offset (out by one) and returning 0w.
2013-12-06 17:07:17 +00:00
Mark Liversedge
b7c43408ea Prefs pane sizing to font size
.. to stop it being too small when you select a larger font.
2013-12-06 13:01:29 +00:00
Mark Liversedge
79a2efc6ee Fix sidebar sizing bugs
.. part of the refactor of mainwindow saw the sidebar
   sizes independently set and therefore using different
   settings.

.. we now use the old setting if first time through, or
   if first time run for athlete set a sensible default.
2013-12-05 18:23:53 +00:00
Mark Liversedge
fddc16a0db Fix LTM title filter color bug
.. the title of an LTM chart doesn't change when you
   select or deselect a filter in the sidebar.
2013-12-05 17:22:53 +00:00
Mark Liversedge
19fd53b20a Fix LC_LOCALE on Xcode 5
by including "locale.h".

Fixes #734
2013-12-05 16:26:29 +00:00
Mark Liversedge
d33f07661a Add Filter Sidebar
To allow selection of filters aka Named Searches when
plotting charts.

Fixes #732
2013-12-05 14:30:42 +00:00
Mark Liversedge
85a9b915eb Merge branch 'master' of github.com:GoldenCheetah/GoldenCheetah 2013-12-03 16:59:35 +01:00
Mark Liversedge
c24991ae93 Show reference lines on CP chart
.. but only when showing a 'power' data series
   such as NP, xPower, aPower etc.
2013-12-03 16:58:50 +01:00
Mark Liversedge
fdfc056ac8 Merge pull request #731 from dresco/ANT
Don't reset ANT channel settings on search timeout
2013-12-02 22:08:37 -08:00
Jon Escombe
4498f77847 Don't reset ANT channel settings on search timeout
Wiping out these settings prevents a successful reconnection
of the device if it comes back into range

Fixes #514
2013-12-02 23:27:01 +00:00
Damien
0433b7cea7 FitRideFile: Correction for last Garmin firmware updates
In last Garmin firmware there is some (unknow) fields with multiples values

Fixes #724
2013-12-02 18:07:18 +01:00
Mark Liversedge
c59ab396be Toolbar/Menu update when Compare Pane Show/Hide
.. if the compare pane is automatically shown or hidden
   due to the user dragging and dropping the menu and toolbar
   got out of sync with the status of the widget.
2013-12-02 17:48:48 +01:00
Mark Liversedge
6e304cd0d4 Compare Pane Mechanics
.. compare pane now appears and disappears on both
   the analysis view and home view

.. it also is notified of drag/drop events and can
   accept the objects dropped

.. it is now time to write the widget for collecting
   and managing compare sets
2013-12-01 10:28:27 +00:00
Mark Liversedge
a159181792 Set GC_DEBUG for debug builds
.. when building a debug build of GC with CONFIG += debug
   then we define a macros GC_DEBUG.

.. main no longer redirects to goldencheetah.log if you have
   GC_DEBUG set, so developers will continue to see debug
   messages on the terminal output (for mac/linux only).

.. we could use the GC_DEBUG macros to allow debug messages
   to be switched on / off in the code in future
2013-12-01 09:40:32 +00:00
Mark Liversedge
d39678eebd Fix auto show/hide compare pane on drag/drop
.. now the compare pane will appear and disapear
   when the user drags and interval / season into
   the view.

By fixing the way we handle QDragLeaveEvents in the
code in TabView.h ViewSplitter.
2013-12-01 00:19:59 +01:00
Mark Liversedge
2a47d36ff1 Auto show compare on drag interval
.. but its broken, needs fixing.
2013-11-30 22:19:38 +00:00
Mark Liversedge
7a87725457 Compare Show Animation
.. need to fix hide timeout animation but do that
   later tonight.
2013-11-29 07:20:35 +01:00
Mark Liversedge
576dd8b91d Compare Pane 'hpos' property
Introduce an hpos property on TabView::mainSplitter so we can use
an animation to make the compare pane slide up and down when
arriving and leaving.

Will add the animation shortly, just pushing to save updates.
2013-11-29 06:40:44 +01:00
Mark Liversedge
97e9d3eeb3 Fix events shown on LTM plots
Recent update to change the way the LTM configuration dialog
worked accidentally lost the events setting.

Show events is not being stored in the LTMsettings 'datastream'
but as a separate chart property -- but *is* stored internally in
the LTMSettings class.

it was being lost when the datastream is appled. This fix makes
sure the value is remembered and reapplied after the settings are
applied.
2013-11-28 22:54:37 +01:00
Mark Liversedge
3c80d16beb Remove qDebug() from TabView.h 2013-11-28 20:34:27 +00:00
Mark Liversedge
e7afcbb028 Basic Compare Pane Hide/Show
.. just committing before adding animation and the compare pane content.
2013-11-28 21:07:43 +01:00
Mark Liversedge
4e9613046c Forgot message in compare pane mockup 2013-11-27 19:45:46 +01:00
Mark Liversedge
452e8dfea3 Compare Pane Mockup
.. balsamiq mockup and png export
2013-11-27 19:42:01 +01:00
Mark Liversedge
b5e7a1e0ab Add GPS/Altitude alignment to Compare spec
.. we should make it possible to display interval
   data aligned via the altitude or gps data as well
   as via time/distance. This really only applies to
   the ride plot.
2013-11-26 11:56:35 +01:00
Mark Liversedge
974950784c Update Compare Document
.. to reflect feedback from Damien re compare sets

.. Also changed the compare pane to be view specific and
   shared across all charts in the view.
2013-11-25 09:02:45 +00:00
Mark Liversedge
3398038727 Compare button icon 2013-11-24 14:20:42 +00:00
Mark Liversedge
c34b060b2f Compare toolbar/menu option
Just added a toolbar button and menu to bring up the
compare pane, before adding it to the tab and view
classes.
2013-11-24 14:18:21 +00:00
Mark Liversedge
06c1b466be Plot CP model for derived power series
.. not sure of the validity of applying the model
   to derived data series like xPower and aPower
   but it may provide some insight.
2013-11-23 21:08:50 +00:00
Mark Liversedge
3ba81785ed Fix CP defaults bug
.. set to 3600 not 360 (!)

.. updated intervals causing warnings when using values
   that were half baked. Now delays recalc() till all
   the parameter intervals are set.
2013-11-22 22:30:47 +00:00
Mark Liversedge
0578a6c9f6 Better CP model defaults
Improved defaults for CP model to derive CP
and W' from bests data.
2013-11-22 21:59:29 +00:00
Mark Liversedge
2f6b5dba2d Fencepost error on CP intervals
.. caused the meanmax curve for an interval to be
   recomputed every time even though we'd gone to all
   those lengths to cache them.
2013-11-21 18:28:01 +00:00
Mark Liversedge
c104b53342 Date Format on Athlete Bests
.. didn't follow the same standard as the rest of
   GC, minor cosmetic fixup.
2013-11-21 17:59:50 +00:00
Mark Liversedge
97cb1aca09 Move uml docs to the design folder 2013-11-21 10:07:22 +00:00
Mark Liversedge
c7c8393578 Adding Compare design outline
Jusst jotted down thoughts about implementing compare in v3.1
and added to the documentation folder. Will try and get some
mockups sorted too in the near future.
2013-11-21 09:41:00 +00:00
Mark Liversedge
ec100d2923 Fix WIN32 build issue in main.cpp
.. nostderr() not supported on Windows.
2013-11-20 14:13:26 +00:00
Mark Liversedge
881f37b1ce Fix stderr redirect platform issues
.. don't use toLatin1() and fopen, use QFile and full QStrings
   so we can support directory names with unicode characters.

.. add unistd.h for dup() and close()
2013-11-20 14:08:28 +00:00
Mark Liversedge
0850f1312c Better Command Line Processing
Now accepts --debug to disable redirection of stderr to
goldencheetah.log, which is handy for developers.

Also refined the way the command line is processed to enable
new arguments to be added in the future.
2013-11-20 13:26:25 +00:00
Mark Liversedge
d705488a3a Redirect stderr to goldencheetah.log
In the home directory of GC (platform specific or configured
by the user). This is only relevant for OpenBSD, Linux and Mac.

Windows does not support applications that are GUI and console.
2013-11-20 12:48:09 +00:00
Mark Liversedge
614b4de605 Fix CP chart defaults
The CP chart model defaults are set before the spin box step
min and max values are set, which means that the value is always
reset to 100.

Since the vast majority of users will not be aware of the settings
and/or will never think of setting them to their own 'preferences'
it is vital the default is applied correctly.
2013-11-20 08:08:55 +00:00
Damien
a8730129ad CP Model: let the user define whole interval durations 2013-11-20 08:17:49 +01:00
Damien
7778611587 FitRideFile: - Add Left/Right TorqueEff and Left/Rigth PedalSmooth
- Open Truncated file
2013-11-19 22:38:18 +01:00
gcoco
a039806039 Add Garmin Forerunner 910XT 2013-11-18 14:27:47 -05:00
Mark Liversedge
e088cf916b Slight cosmetic on new Athlete bests
.. and don't show zero values.
2013-11-16 22:44:43 +00:00
Mark Liversedge
4dc94b97b2 Athlete Bests on Summary
Configurable metrics to show top 10 bests for date
range selected.
2013-11-16 21:01:01 +00:00
Mark Liversedge
008046cfc6 Fix show W' on AllPlot bug
.. redraw didn't happen until you changed smoothing
   or selected a ride file.
2013-11-16 13:39:02 +00:00
Mark Liversedge
75fa2875b6 Command line parsing
Now allows:

$ GoldenCheetah [[directory] athlete]
$ GoldenCheetah [--version|--help]
$ GoldenCheetah

Passing the athlete on its own is as before, but you can
now also pass the folder name in as well.

I've also added the option to get a help message if you
pass --version or --help.

Lastly, as before, with no command line paramaters you
open the last athlete worked on.

Since we now output the version and build info I have uplifted
the build and version numbers in GcUpgrade.h to reflect the fact
we are now developing v3.1.
2013-11-16 11:14:44 +00:00
Mark Liversedge
ab8aaee088 Restart properly when home changes
After fixing up the trainDB problem we can now restart
the mainwindows safely when the athlete directory changes.
2013-11-16 09:38:17 +00:00
Mark Liversedge
2ae36fb563 Training DB clean up gracefully
When closing down we left the training database open
and this caused problems when looking to implement
a restart function.

The problems stemmed from the way the QSqlDatabase
code was implemented in TrainDB which was modelled on
code in DBAccess that was cleaned up subsequently.

TrainDB code now mirrors the approach taken in DBAccess
and relinquishes resources correctly. The TrainDB is now
closed as well as being opened in main.cpp at startup.

Also, removed reference to obsolete dbconn member in the
DBAccess class definition since it is no longer used.
2013-11-16 08:33:11 +00:00
Mark Liversedge
c0619eadbc User definable athlete library location
Allow the user to select a directory to use for the
athlete libary. Leaving it blank will continue to use
the default location (dependent on platform).

If it is changed the user will be asked to confirm
and then GC shuts down.

Restart wouldn't work due to issues with the DBAccess
QSqlDatabase connection (which is really annoying). I
will look into this as a restart option would be much
cleaner.

Its only taken 4 years to implement this feature! (ouch).

Fixes #282.
2013-11-15 23:19:04 +00:00
Mark Liversedge
7cac290804 Honour "CP" override in W'
W' calculator didn't use the "CP" metadata to override the
CP for the ride.
2013-11-15 18:14:17 +00:00
Mark Liversedge
cd971f5509 Fix W' crash smoothing sub-second recording. 2013-11-14 23:02:30 +00:00
Mark Liversedge
ebe56b332c Don't truncate 3 parameter CP curve 2013-11-14 17:17:06 +00:00
Mark Liversedge
7bddea39f1 CP Curve tmin
.. accidentally left at 0s now corrected back
   to truncate at tau for the 2 parameter model
   and set to 25s for the 3 parameter mode where
   it seems to breakdown.
2013-11-14 16:21:50 +00:00
Mark Liversedge
7c407c6dd6 Estimate CP and W' in CP Estimator
Since we want to track W' and CP now it makes sense
to add W' estimation to the tool.
2013-11-14 14:11:59 +00:00
Mark Liversedge
7b7fa194a2 The CP Model has "parameters" not "points"
Might as well use the right terminology if your gonna
let the user choose and adjust the model!
2013-11-14 12:24:37 +00:00
Mark Liversedge
9498cd83d6 User Definable CP Model
Let the user define whether to use a 2 point or
3 point model (Morton et al).

In addition, let the user define the interval durations
to use; by default we set to 3 and 30 mins.

For estimating CP against good, recent data both of these
models are more than adequate for the purpose.

We'll just keep kicking the can down the road whilst we
can rely on published, verified science.
2013-11-14 11:43:55 +00:00
Mark Liversedge
7aaa63cf30 Reinstate 3 point CP model
DJ Connel implemented a 3 point model, after Morton,
which was erroneously removed in a prior commit.

Our thanks to Andy Coggan for pointing this out in a
recent webinar. Nice to know he is following us closely.
2013-11-14 09:22:06 +00:00
Mark Liversedge
2d79769e7f Clean CP curve
.. when in range mode (i.e. plotting a CP curve for a date
   range or season rather than for a ride).
2013-11-13 23:00:26 +00:00
Mark Liversedge
31a4acf84d UI Nits: Less clunky CP curve
When no shading selected it really does no shading and
the CP model curve is now in a smaller line width.
2013-11-13 21:06:14 +00:00
Mark Liversedge
aeab59185c Highlight intervals on CP Curve
Will show a CP curve for the selected data series
for each interval that is selected, just like the
rest of the charts.

Fixes #718.
2013-11-13 20:38:06 +00:00
Mark Liversedge
1914b6c31c UX: Add to intervals flow
.. in the find intervals dialog it makes more sense to
   close the dialog once add to activity has been pressed.
2013-11-13 10:29:28 +00:00
Mark Liversedge
821fb9df99 LTM Speedup
.. don't refresh when not visible!

   This is a side effect of the code updates added
   to handle filtering in chart settings or the global
   search/datafilter box.
2013-11-13 08:25:23 +00:00
Mark Liversedge
a307747d9a Clear results when switch type
.. to W' bal or Ascent type interval searching
2013-11-12 18:58:40 +00:00
Mark Liversedge
5054a9bc90 Find Ascents
.. another method for find intervals to find the ascents
   in a ride. Uses the hysteresis as defined in options
   which means a climb ends if there is a descent of that
   or more (by default only 3m).
2013-11-12 18:09:24 +00:00
Mark Liversedge
bef02d6783 Remove References in Dialog
.. you can now choose to remove reference lines in the
   allplot when you double click on the axis.

.. we might want to put the table and buttons for deleting
   references into the chart settings too (?)
2013-11-12 13:16:44 +00:00
Mark Liversedge
06bd80a753 UI Nits: Less is more
.. remove grid line from CP plot.
2013-11-12 09:19:05 +00:00
Mark Liversedge
8329030786 UI Nits: Matches markers in CWBAL color 2013-11-11 23:18:51 +00:00
Mark Liversedge
1a8d1a3e27 UI Nits: Matches markers lower
.. so they don't clash with other interval markers
   most especially user supplied interval marks
2013-11-11 23:11:46 +00:00
Mark Liversedge
35a179be34 UI Nits: Back to black in QA
.. the washed out grey was unpopular and is too
   hard to read.
2013-11-11 22:53:49 +00:00
Mark Liversedge
6e033099a9 UI Nits: Less Ride Plot xBottom
.. no title needed for time, its obvious, but
   still need to show units if its distance.
2013-11-11 22:26:29 +00:00
Mark Liversedge
83e23dbbf7 UI Nits: Thinner reference line
2px too thick for a guide, made 1px which is in
line with the rest of the code.
2013-11-11 22:11:38 +00:00
Mark Liversedge
623dca7a26 UI Nits: Less is more
Further removal of chart decorations ala the recent
changes to the ride plot, now applied to the other
charts.
2013-11-11 22:04:06 +00:00
Mark Liversedge
85b634787a UI Nits: Declutter ride plot
Too much going on and gets noisy, especially in stack mode.

Might extend this to the other plots, but need to live with
it for a while to see if the ticks were actually useful (!)
2013-11-11 21:25:05 +00:00
Mark Liversedge
f8bfc93ca0 Zoom Out Menu Option
So you can unzoom in ride plot when you've zoomed in
to an interval -- avoiding having to show fullplot to
do the same thing manually.

There are probably other places to add functionality
for zooming out, will deal with those as they arise.
2013-11-11 19:56:31 +00:00
Mark Liversedge
ac138f9108 Match duration fencepost error. 2013-11-11 18:04:50 +00:00
Mark Liversedge
5800fa5bab Find Matches as Intervals
Now let the user add 'match' intervals in
the find intervals dialog by setting a minimum
cost for the match.
2013-11-11 17:53:58 +00:00
Mark Liversedge
6961534137 UI Nits: Axis background color
Changed to match the ride plot background. This makes
it easer to read axis that use light colours (e.g.
using yellow for power).
2013-11-10 22:06:34 +00:00
Mark Liversedge
7770587d1b Find Matches
Added auto finding matches in Wprime, but there are
two areas to develop further;

1. Use the W'bal data to find matches instead of the
   power above CP (which is really being used as a proxy
   for the better approach).

2. Update the 'find intervals' dialog to allow you to
   find matches and add them as normal intervals.

Pushing to repo as a version checkpoint, this function
will definitely need refining before 3.1 is released.
2013-11-07 20:43:51 +00:00
Mark Liversedge
4f05a0fe54 UI Nits: Center Preferences/Options pane 2013-11-07 14:30:57 +00:00
Mark Liversedge
919629af70 User definable color for W' bal curve 2013-11-07 14:23:42 +00:00
Mark Liversedge
8bb8a8d1d3 Fix crash on tmp reference line at 0w 2013-11-07 13:58:42 +00:00
Mark Liversedge
25de00778a Fix smoothing bug in Allplot for xPower and aPower 2013-11-07 12:55:11 +00:00
Mark Liversedge
d4b6e0a1c3 Add Derived Series to Ride Plot
You can now plot NP, xPower and aPower on the
ride plot.

This has been done to provide transparency &
insight into the relationship between the derived
values and the recorded power values,
2013-11-07 12:04:44 +00:00
Mark Liversedge
8a33e15750 Read reference lines in WKO+ files
Added support for reading the 'references' or 'guide lines'
from a WKO+ ride file.
2013-11-07 09:58:40 +00:00
Damien
d260edd85f AllPlot: Add Reference Line for Power (Watts) 2013-11-06 23:49:07 +01:00
Mark Liversedge
237e51a48d Histogram aPower
Added aPower to histogram, although not zoned.
2013-11-06 18:50:29 +00:00
Mark Liversedge
d2c4d88e19 Best aPower
Peak aPower durations now computed and cached;

* updated RideFileCache to work with aPower
* CP curve now allows you to plot aPower
* LTM plot allows you to plot aPower peaks
* DataFilter allows 'best(apower, duration)' function
2013-11-06 16:41:25 +00:00
Mark Liversedge
ad559394c8 Added Effect of Altitude (%)
A metric of the %age of power that has been lost due
to riding at altitude.
2013-11-05 21:31:31 +00:00
Mark Liversedge
e7fe0eb42f Add citation and references for aPower
Added comment in ridefile.cpp to reference the book
and research paper that aPower is based upon:

// Calculate derived data series, including a new metric aPower
// aPower is based upon the models and research presented in
// "Altitude training and Athletic Performance" by Randall L. Wilber
// and Peronnet et al. (1991): Peronnet, F., G. Thibault, and D.L. Cousineau 1991.
// "A theoretical analisys of the effect of altitude on running
// performance." Journal of Applied Physiology 70:399-404
2013-11-05 20:18:06 +00:00
Mark Liversedge
393fe9f0e7 Average aPower
Added an average aPower metric.

I also and found and fixed a couple of bugs along the way;

* intervals create a ridefile and need to explicitly call
  recalculateDerivedMetrics()

* the aPower calculation was using the calculated vo2max
  percentage the wrong way around (!)
2013-11-05 20:06:09 +00:00
Mark Liversedge
6353e6b329 Add aPower
Introduce altitude adjusted power 'aPower'.

This is a new ride data series that takes into account
the effect of altitude on power output.

At present we are only adding this as a derived data series
with the intention of making it possible to plot it on
the ride chart.

We will also introduce alternate metrics for average power,
bikescore etc that are based upon the aPower value.
2013-11-05 18:54:06 +00:00
Mark Liversedge
5cc70c2164 Add NP and xPower Derived Data Series
Calculate NP and xPower as a data series so we can
plot on the ride plot.

Have also added 'aPower' which will be coming in the
next few days - altitude adjusted power, which will also
have some associated metrics (a-xPower, a-NP, a-TSS etc).
2013-11-05 17:14:05 +00:00
Gareth Coco
949335fea8 Run: lupdate-qt4 src/src.pro
Update the translation source files
2013-11-05 00:31:00 -05:00
Gareth Coco
68975d1d12 Website updates 2013-11-05 00:30:05 -05:00
Mark Liversedge
46943948ca W' calculator fill gaps with zeroes
Otherwise they are interpolated and smoothed, which is not
consistent with the rest of GC.
2013-11-04 17:18:10 +00:00
Mark Liversedge
8b2e9fdd34 Adjust layout in Preferences
As new W' setting in athete -> power is all
squashed up on a Mac (where spacing is defaulted
to 20, not 10).
2013-11-04 08:52:35 +00:00
Mark Liversedge
ae0ac6109c Allow user to specify W' alongside CP
In preferences->athlete->power you can now set
your W' in joules alongside your CP.

This is also available in the new cyclist dialog
which also defaults to 20Kj.
2013-11-03 20:32:48 +00:00
Damien
c0a9d9894b ShareDialog: Strava authorise was broken in last commit 2013-11-02 23:22:52 +01:00
Damien Grauser
45fb30cd68 Merge pull request #712 from gcoco/master
ShareDialog corrections
2013-11-02 03:25:38 -07:00
gcoco
a720479dcf Get rid of qwt compile error about format string.
Author: KURASHIKI Satoru <lurdan@gmail.com>

Taken from Debian patches for GC 3.0.3
2013-11-01 17:08:40 +00:00
Mark Liversedge
18885f8c32 Fix W' calculator for bad data
Fix 1s smoothing to ensure time doesn't go backwards
as when the same timestamp is used more than once the
QwtSpline used to interpolate returns all zeroes.
2013-11-01 16:47:15 +00:00
Mark Liversedge
331c6e45f0 Calculate tau for W'
The implementation set tau to a constant when it
should be derived from the recovery power across
the ride.

I've also added tau to the chart so you can see
what value has been derived.
2013-11-01 13:21:26 +00:00
gcoco
ff8bfd5aa4 Minor comment correction 2013-11-01 07:42:30 -04:00
gcoco
0340d5d72c Code corrections/cleanup 2013-11-01 07:37:41 -04:00
Mark Liversedge
4c86246ee2 Use W' instead of AWC on CP chart
AWC is old terminology and should not be used any more.
2013-10-31 19:18:12 +00:00
Mark Liversedge
828ba3f77e W' calculate starting from 0s
Instead of starting at 20 minutes, which was a function of the
code for calculating decay, i.e. an implementation nit, not a
physiological constraint.
2013-10-31 18:13:39 +00:00
Mark Liversedge
f68f5d1a4d Disable Minimum W' Metric
.. its too slooooow.

.. lets fix the WPrime performance issue before
   introducing any metrics on the back of it.
2013-10-31 17:36:56 +00:00
Mark Liversedge
e533cbfa26 Add Minimum W' Metric
It TREBLES the amount of time required to refresh the
metrics, so will need to be optmised before 3.1 is released.

But it should only need to run once.

I've also added a 'RideMetric::Low' type which we could
also apply to weight.
2013-10-31 16:49:43 +00:00
Mark Liversedge
eb244d0609 Add W' to All Plot
Will plot the W' balance as another data series.
2013-10-31 15:00:25 +00:00
Mark Liversedge
ac397c1a79 Missed off previous commit. 2013-10-30 22:56:54 +00:00
Mark Liversedge
a8e54faf33 W' expenditure and reconstitution calculator
Calculates the W' expenditure and reconstition during a ride.
The implementation is sub-optimal and will need to be optimised
and probably re-written to improve performance before v3.1 is
released.

This is based upon research conducted at the University of Exeter
by Philip Skiba, Weerapong Chidnok, Anni Vanhatalo, and Andrew Jones
and is used with permission.

For more information on the research please see: ""Modeling the
Expenditure and Reconstitution of Work Capacity above Critical
Power." Med Sci Sports Exerc 2012;:1.
2013-10-30 22:49:26 +00:00
Damien
eb790ebcff ShareDialog: Add upload to selfloops.com 2013-10-30 18:39:40 +01:00
Mark Liversedge
008bad6ca5 Add /dev/cu.usbserial as a serial device
Useful on Mac with Sewell adapter for the CT.
2013-10-29 15:32:41 +00:00
Mark Liversedge
444a915705 Interval Summary Off By 1 Error
Intervals are off by 1 sample because when the temporary
ride is created it stops short of the last sample in both
the ride and interval summary window code.

Fixes #623.
2013-10-29 15:31:29 +00:00
Mark Liversedge
c08659e84d HR Time in Zone percent
.. to match the recent update for the power
   time in zone metric.
2013-10-29 10:38:06 +00:00
Mark Liversedge
c04964c9e6 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2013-10-29 10:01:19 +00:00
Mark Liversedge
e3d063d961 New Metric Percent Time In Zone
The current TIZ metrics only allow you to chart the
absolute time in zone. Over longer periods it can be
helpful to look at the overall ratio of intensities
trained at.
2013-10-29 09:59:00 +00:00
gcoco
863cceafbf Fix GC_CYCLINGANALYTICS_CLIENT_SECRET #ifndef 2013-10-29 05:57:10 -04:00
Mark Liversedge
3227974112 Hide buttons when no Tokens configured
.. for Strava or CylingAnalytics upload
   authorised buttons in the preferences
   dialog.
2013-10-29 07:45:47 +00:00
Damien
16b856d9ed ShareDialog: Add ipload to www.cyclinganalytics.com 2013-10-28 23:27:33 +01:00
Mark Liversedge
914ab505d8 Fix User Defined LTM durations bugs
.. refresh didn't clear old curves
.. didn't honour any filter being applied
2013-10-28 20:57:21 +00:00
Mark Liversedge
8ca61dfe34 Plot Peak Power et al 2 of 2
Updated RideFileCache and LTMWindow/Plot to
plot the user defined durations for peak power.

Actually we support all the different meanmax
measures available in the CP chart, so you can
now track peaks for user defined durations of;

            * Power
            * Watts per Kg
            * xPower
            * NP
            * Heartrate
            * Speed
            * Cadence
            * Torque
            * VAM

I have not spent much time optimising for performance
but reusing the same 'seek' approach used by the recent
update for best() and tiz() functions in the datafilter.

Fixes #322.
2013-10-28 19:29:28 +00:00
Mark Liversedge
46f70de6db Urgent Fixup to previous commit
.. to make sure the v2 LTMSettings
   uses the bestSymbol.

Just pushing this (WIP) to make sure
we don't get half baked LTM settings
from people building against the previous
commit.
2013-10-28 17:58:04 +00:00
Mark Liversedge
6189a8ec39 Plot Peak Power et al 1 of 2
Update to let users specify a custom duration
to plot on LTM for peak power, vam, wpk etc.

This update is to the LTM chart settings and
the reading/writing of chart settings.

Next update will update LTMWindow/LTMPlot to
retrieve and plot the values from the CPX files.

Note: the values will not plot yet, the next
      commit in this series is required.
2013-10-28 12:34:17 +00:00
Mark Liversedge
68bbb05568 Show/hide scopebar with toolbar
When showing / hiding the toolbar we also show / hide
the scope bar. This is so when in train mode and you go
full screen it is possible to hide all ornamentation.

This will become a moot point when the scope bar is
replaced with 'appstore style icons' in the toolbar
to switch between home, analysis, train etc.
2013-10-27 21:11:59 +00:00
Mark Liversedge
cc2a0efe3e Truncate Altitude values
We know the highesst point on Earth, so any activity that
contains an altitude greater than that is definitely incorrect.

This patch truncates the altitude to the maximum possible, this
has the happy by product of curing a major mem alloc crash in QWT
when trying to plot altitudes with very large values.

Fixes #700
2013-10-27 20:06:37 +00:00
Mark Liversedge
7a240f83e2 Add Current to LTM presets
But saving is an issue !

The presets need to move to the athlete object as they
are in the athlete directory -- we currently have one
per LTM chart, which means they get overwritten on exit.
2013-10-27 19:46:51 +00:00
Mark Liversedge
fdbbf4273b LTM bars cosmetics
Just made gap slightly smaller to make it easier to
compare and overall the proportions 'feel better'.
2013-10-27 15:08:02 +00:00
Mark Liversedge
a367b34fb9 LTM Chart Settings improved UX
The definition of curves is rationalised to match the
new design mockups in readiness for introducing user
defined peak durations for power et al.

For now this patch cleans the UX and makes it much
easier to add/edit/remove curves.

Fixes #548
2013-10-27 14:34:17 +00:00
Damien
eafd004c42 ShareDialog: Manage null error message 2013-10-27 00:21:13 +02:00
Damien
94454acded ShareDialog 2/3 : For version 3.0.1 2013-10-20 11:10:07 +02:00
Mark Liversedge
d878868a53 Merge pull request #693 from gcoco/master
Assert cleanup
2013-10-16 07:15:05 -07:00
Damien
7042938cba GoogleMap: Little fix 2013-10-14 07:53:29 +02:00
Damien
3a1449231c Correct to compil without liboauth 2013-10-04 16:08:53 +02:00
Damien
f0c2c2b840 ShareDialog 1/3 : Merge StravaDialog and RideWithGPSDialog
Add OAuth for Strava (Release version only)
2013-10-01 23:18:18 +02:00
Damien
486b6f43c7 Aerolab: Add a constant altitude option 2013-09-26 00:04:58 +02:00
Damien
6f9ff1cdea JouleDevice: Remove debug lines 2013-09-25 23:26:46 +02:00
Damien
002faa5582 JouleDevice: Remove debug lines 2013-09-25 23:24:27 +02:00
gcoco
07ff277378 Assert cleanup 2013-09-24 04:02:33 -04:00
Mark Liversedge
93b46887e9 Merge pull request #690 from dresco/master
Detach kernel driver before claiming USB2 ANT+ interface.
2013-09-22 06:12:15 -07:00
Jon Escombe
92b998f746 Detach kernel driver before claiming USB2 ANT+ interface.
Only detach kernel driver if compiling under Linux (not a portable function)..
2013-09-22 00:56:24 +01:00
Jon Escombe
9fb2964223 Detach kernel driver before claiming USB2 ANT+ interface.
Kernel 3.11 exposes the Suunto ANT+ stick as a USB serial device,
this prevents GC from opening it in training mode unless the
kernel driver is detached first.
2013-09-21 22:44:30 +01:00
Eric Johnson
8de642c9ed Use float division when converting wheel size
In training mode, calculations of speed using wheel size and RPM from
a speed sensor used integer division. This truncated all wheel
circumferences to an integral number of meters. 2100mm wheels were
treated as 2 meters and 1960mm wheels were treated as 1 meter,
effectively reducing calculated speeds by roughly 5% and 50%
respectively.

Fixes #585
Fixes #651
Fixes #669
2013-09-21 17:29:26 +01:00
Mark Liversedge
bf5fc21c42 Merge pull request #676 from lurdan/spelling
fix some spelling
2013-09-19 11:24:40 -07:00
Mark Liversedge
878e66dcb2 Merge pull request #686 from Walibu/master
Adding hr,cad,power,temp of the watch "Suunto Ambit2" Export gpx files
2013-09-19 11:21:09 -07:00
gcoco
91a5b2833c Kurt Kinetic Road Machine PowerCurve fix
Fixes #685
2013-09-19 14:11:25 -04:00
Damien
3212befb5f Bin2RideFile: correct bug for some GPS data 2013-09-17 23:03:14 +02:00
Walter Bürki
d993f7b3c8 adding hr,cad,power,temp of Suunto Ambit gpx files 2013-09-15 19:17:02 +02:00
Mark Liversedge
063c13e70b Merge pull request #684 from jjofre/master
Work around to ensure controller key presses aren't missed.
2013-09-05 23:01:24 -07:00
Jaime
ce93058bc9 Work around to ensure controller key presses aren't missed. Borrowed from Fortius.cpp 2013-09-05 22:47:53 -04:00
Damien
4d31c13c10 MergeActivityWizard: Use index for last point 2013-09-05 14:07:55 +02:00
Mark Liversedge
29feeeae05 Merge pull request #683 from rclasen/ttb-pwx
use pwx for Trainingstagebuch upload
2013-08-26 22:56:11 -07:00
Mark Liversedge
9581c01641 Merge pull request #682 from rclasen/fix-pwx
several pwx fixes / improvements
2013-08-26 22:55:51 -07:00
Rainer Clasen
4274fc26c4 use pwx for Trainingstagebuch upload
as current tcx writer currently doesn't support laps (and tcx doesn't
allow non-linear/overlapping intervals, at all) this patch makes GC upload
exercises as pwx.
2013-08-26 23:11:40 +02:00
Rainer Clasen
2d533e9ddd PWX: read/write temperature
added temperature to read/write
2013-08-26 23:00:53 +02:00
Rainer Clasen
ebd10af163 PWX export: keep timestamp + distance precision
Pwx does support for arbitrary sample lengths. No need to chop off
timestamp precision and introduce bad data + jitter.

Instead we should look at fixing data import and consider resampling on
read.

Distance is defined as double, aswell - so, let's keep the precision,
aswell.
2013-08-26 23:00:53 +02:00
Rainer Clasen
72168132f8 fix PWX export: always write summarydata
xml schema is requiring summarydata to exist. Otherwise upload to
trainingpeaks fails.

Block was omitted when no intervals were defined.
2013-08-26 23:00:53 +02:00
Rainer Clasen
41d57c5d26 fix PWX export: handle end of gaps gracefully.
As I got it pwx by itself has no concept of recording intervals. "smart
recording" and other strange data require variable recoring intervals.

On the other hand it's not recording the duration of a sample explicitly.
This means the duration needs to be derived from the previous samples
timestamp (assuming the sample timestamps are referring to the end of the
sampled period).

This diff writes an empty timestamp at the end of each gap so that the
next real sample/ridepoint can calculate the correct duration.

Please note that this may unhide some deficiencies in GCs file reading in
exports.
2013-08-26 22:46:14 +02:00
Mark Liversedge
ca3f0b26d0 LTM presets UX improvement
Simplified selecting and managing preset charts
in the LTM chart settings.

Need to now move the 'Add' button to the custom
tab, but that is the next pending update.
2013-08-26 13:20:56 +01:00
Mark Liversedge
b0672ad422 Merge pull request #679 from rclasen/fix-tcx-speed
#678: Tcx: fix speed in summary information
2013-08-24 03:34:47 -07:00
Damien
1c3ba1d4e2 CsvRideFile: add temperature and hill slope (%) parsing for ibike csv file 2013-08-20 22:50:58 +02:00
Mark Liversedge
afaa9f553a Remove MainWindow from TabView.cpp 2013-08-19 21:47:57 +01:00
Rainer Clasen
c304ecf6d6 Tcx: fix speed in summary information
When exporting files to Tcx, it's writing an ActivityExtension to the end
of the file with calculated AvgSpeed and MaxSpeed. Unfortunatly it's using
the km/h values - while Tcx is using m/sec. Schema is a bit unclear about
this, as the ActivityExtension uses "double" as type for both values, but
original Tcx v2 Schema only uses m/sec, GTC exports as m/sec and some
other software is expecting m/sec, aswell.
2013-08-15 20:58:59 +02:00
Damien
2b20557582 MergeActivityWizard : Use recIntSecs 2013-08-14 16:20:28 +02:00
Damien
61ba344c76 Bin2RideFile: Changes in Summary pages for Data version 5 2013-08-14 16:12:56 +02:00
Gareth Coco
2aa13611b5 Fixed broke download links/Typo
Fixes #635
2013-08-13 19:53:55 -04:00
gcoco
2bf144a6b8 Support Twitter API 1.1
To record the changes from 1.0 to 1.1 if we bring this back.
2013-08-10 23:48:18 -04:00
KURASHIKI Satoru
d0890d9000 Merge branch 'master' into spelling 2013-08-09 11:14:20 +09:00
Mark Liversedge
9dc146f0d7 Added Suunto xlsx file to test rides
.. thanks to Fester for the example file.
2013-08-07 19:18:11 +01:00
Mark Liversedge
4a10cf3167 Fix SEGV on close with TrainTool->Stop()
.. casting the sidebar in TrainView was wrong because the
   controls are in the sidebar, not the trainTool. Thus
   it would crash on exit .. but strangely only on Mac!

.. the code now correctly calls trainTool->Stop(), quite
   why it fails on Mac only is a bit of a mystery.
2013-08-06 11:10:32 +01:00
Mark Liversedge
b12ecbd6ad Added collapse/expand to analysis sidebar
.. to collapse/expand for whatever is grouped by.
2013-08-05 18:20:50 +01:00
Mark Liversedge
de11f0cbb7 Animate Activity List collapse/expand
.. its standard Qt, and is kinda cool.
2013-08-05 16:05:54 +01:00
Mark Liversedge
634fd9b427 Fixup ridefilecache best decimals
.. forgot that the values are converted to
   zero decimals when stored.

This fixes strange results when filtering by
wpk or speed, or any series that has decimal
places.
2013-08-05 08:37:25 +01:00
Mark Liversedge
b7b0aaf9d3 Best and TIZ shouldn't buffer
.. they have one read operation beyond the header
   and will not need to buffer -- the O/S will buffer
   file blocks too, lets not duplicate.
2013-08-05 07:41:40 +01:00
KURASHIKI Satoru
0ec3cfa153 fix trivial mis-spelling. 2013-08-05 09:09:47 +09:00
Mark Liversedge
e48612184e Slightly larger SearchBox
.. since it was 'just' too small for a typical query.
2013-08-04 22:24:56 +01:00
Mark Liversedge
5f67c9da7e Fast Best and TIZ queries
Added static functions to ridefilecache
to get best and tiz values for series and duration
or zones and glued them in to the datafilter code
recently added.

It uses seek (via QDataStream::skipRawData) and is
quite fast on my Linux development PC.

We now need to update the LTM settings dialogs to
the new mockups so we can plot custom durations for
peak power / NP etc too.

NOTE: Not tried on Windows / Mac, so may not be quite
      so fast there, will need to check.

      To try this out, in the search filter box type:

            best(power, 3600) > 250

      to filter only those rides where the best hour
      power is greater than 250 watts. It should
      return almost instantly.
2013-08-04 15:45:55 +01:00
Mark Liversedge
ab3524bb7f Fix segv on filter '(NP)'
Fixes the crash but the eval code is a bit of a
fuck up. It was evaluating children instead of
using recursion, and now we have lots more types
and expressions its all a bit of a mess.

Will need to rewrite to use recursion and it will
be a lot simpler!
2013-08-04 11:40:44 +01:00
Mark Liversedge
a2a962120c A lot less assert
There still some assert left in the code, but removed
a fair number of the examples where, its just as easy
to handle the condition gracefully, without crashing.

By 3.1 we will have eradicated assert from the code.
2013-08-04 11:06:07 +01:00
Mark Liversedge
eb2a082293 Forgot wpk 2013-08-03 22:16:12 +01:00
Mark Liversedge
89108f3ff0 DataFilter update for formulas
Will now allow users to specify a formula using
the * / + - ^ operators. This can be used to specify
values (e.g. TSS > 100*2) or to calculate a totally
new user metric (e.g. Average_Heart_Rate / RPE).

Also added two functions as well;

1. best (series, duration)   which returns the best value
                             for the series of the given
                             duration in seconds.

                             Where series is one of; power,
                             hr, cadence, speed, torque,
                             xpower, np.

2. tiz (series, zone)        which returns the time spent
                             in the given series and zone
                             Where series is either power
                             or hr and zone is 1-10.

NOTE:

We know need to add the functions for retrieving the best and
tiz values from the ridefilecache without having to read the
entire file (ie. read the header and use lseek).
2013-08-03 21:25:26 +01:00
Mark Liversedge
9dcc835648 Train View 30s power etc
.. fixed the dial property for rolling average

.. improved default layout to include realtime numbers
   alongside the workout plot, and added 30s power
2013-07-29 09:44:10 +01:00
Mark Liversedge
1b85260f62 Remove delete ride flicker
.. selects next ride, this one disappears flicker
   was mildy irksome.
2013-07-28 20:42:50 +01:00
Mark Liversedge
c03d36202f Train Controls Temporary hack
.. to at least be able to start/stop a workout
   will fixup over the next few days to make a
   more professional controls overlay.
2013-07-28 20:34:09 +01:00
Mark Liversedge
4cd23b9fba BlankState fixup for MainWindow refactor
.. reintroduced it whilst moving the logic to
   TabView and BlankStatePage.
2013-07-28 17:33:49 +01:00
Mark Liversedge
a492f641ff Fix TrainSidebar SEGV on Exit
.. by stopping any active session in the close() method
   and not the destructor.
2013-07-28 15:41:52 +01:00
Mark Liversedge
e74782c6b9 More MainWindow Tidy
.. headers in MainWindow.cpp and deleted commented out
   members in MainWindow.h. Moved Spacer to GcToolBar.h
2013-07-28 10:29:13 +01:00
Mark Liversedge
d816f71504 Refactor fixup resize
.. it was not possibe to resize the window because
   the blankstate page was too big.

.. blankstatepage is hidden for now until we fix the
   logic for it in TabView
2013-07-28 10:04:19 +01:00
Mark Liversedge
9473e28200 MainWindow Refactor Part 4 of 5
Split the views in MainWindow into separate classes;

* Tab is a collection of the 4 main views

* TabView is a base class for all of the 4 view types

* {Analysis,Train,Diary,Home}View are all derived from
  TabView and deal with specifics of those views (e.g.
  Diary/Home worry about date ranges).

We should be ready to move to tabbed athletes soon.

There are a few nits left for this part of the refactor
that will need to be resolved in some fixups over the
next few days;

* tile mode segment selector has wrong segment selected
  when the view is in tile mode.

* Minimum height/width of MainWindow is large for some
  reason

* the Train view controls (play, ffwd etc) have nowhere
  to go at present -- need to fix that !!!

* When you resize the mainwindow width the sidebars expand
  and should remain a fixed width

* not sure if it will build on Windows or Mac!
2013-07-27 21:41:03 +01:00
Mark Liversedge
0a51fdebb5 Move filters from MainWindow to Context
.. we notify search/filter updates via context rather
   than MainWindow
2013-07-27 13:51:09 +01:00
Mark Liversedge
880f9178b2 Checkpoint TabView commit
Part 4 of the MainWindow refactor is moving the code for the
4 views (Analysis, Train, Home, Diary) out of MainWindow and
into a separate set of classes.

TabView is the base class for the 4 views and the basic code
is in this commit, but now need to work on the 4 derived
classes for Analysis, Home etc and the controller class 'Tab'.
2013-07-27 10:29:26 +01:00
Mark Liversedge
1a1a2d955e More MainWindow Tidy
.. remove dateChanged unused member
.. remove recordMeasure unused member
2013-07-20 18:54:00 +01:00
Mark Liversedge
784b140989 More Athlete destructor
.. forgot to destroy the Lucene, NamedSearches and RideMetadata
   instances in the Athlete destructor
2013-07-20 11:15:45 +01:00
Mark Liversedge
319a3981b2 Fixup Athlete/DBAccess/MainWindow dependency
A bit of a mix of stuff, but basically the Athlete
class has sql stuff in it, that DBAccess used but
also referenced a session number in MainWindow.

Removed the interdependency and moved all code to do
with DB to DBAccess and out of MainWindow and Athlete.

At the same time needed to clean up a bit of memory
management and so introduced a MainWindow and Athlete
destructor.

We are now ready to do refactor part 4 to split MainWindow
into a new View class (that will be in each tab).
2013-07-20 11:07:03 +01:00
Mark Liversedge
cc5229305e Fixup refactor SEGV in StreetView
.. wasn't initialising context.
2013-07-19 23:22:18 +01:00
Mark Liversedge
e0c05929a6 Deprecate DatePickerDialog
.. not sure its actually been used in the code
2013-07-19 23:00:37 +01:00
Mark Liversedge
150fe21834 Deprecate unused GcWindowTool 2013-07-19 21:47:46 +01:00
Mark Liversedge
116778fd54 Remove MainWindow unused
.. QPushButton *full was never used.
2013-07-19 21:34:02 +01:00
Mark Liversedge
a0ace158e6 Fix QTFullScreen compile error
.. needed Context and MainWindow headers
2013-07-19 20:54:55 +01:00
Mark Liversedge
5abf1eae97 A little less MainWindow
.. trying to remove it from as many headers as possible.
2013-07-19 18:08:07 +01:00
Mark Liversedge
2f056ea938 More MainWindow tidy
.. reduce the number of public members
2013-07-19 15:28:29 +01:00
Mark Liversedge
e42806b538 Remove qDebug from FitRideFile
.. commented out so can reuse when debugging etc.
2013-07-18 22:18:15 +01:00
Mark Liversedge
43b8c013da More MainWindow tidy
.. remove unneccessary class members

.. reorg to highlight where the remaining members need to
   migrate to
2013-07-18 22:13:03 +01:00
Mark Liversedge
dd8ed9e42d Calibration Messages minor update
.. add some sample files with calibration messages to the
   test/rides directory

.. remove the calibration marker color config (we can add it
   back if needed, but was in the wrong 'sequence' and is
   probably just a little bit *too* fine grained).
2013-07-18 22:05:57 +01:00
Damien
ea2455a775 AllPlot: plot references lines 2013-07-18 21:51:07 +02:00
Damien
0f65fbfd91 FitRideFile: Add Calibration Event parsing 2013-07-18 18:23:11 +02:00
Mark Liversedge
d153e42f98 Clean MainWindow.cpp
.. remove unneccessary #include statements
2013-07-18 09:51:06 +01:00
Mark Liversedge
c8203fa566 A little less MainWindow.h
.. slowy removing it everywhere.
2013-07-18 09:37:32 +01:00
Mark Liversedge
abc44d97a8 Fixup column chooser
.. in AnalysisSidebar
.. and SearchBox

Will need to fixup again when we introduce Tabs into
MainWindow, but it will be obvious when we get there.
2013-07-18 08:55:39 +01:00
Mark Liversedge
b539603407 Small Tidy up
.. removed 'init' from MainWindow
.. moved Qxt header out of the src directory
2013-07-18 08:37:42 +01:00
Mark Liversedge
d2901c3119 Move intervals to AnalysisSidebar
Further MainWindow updates, this time moving the code
for working with intervals to the AnalysisSidebar and the
associate menus.

Ultimately, the functions for working with Activities and
their Intervals will move from MainWindow and Sidebars to
the ActivityCollection classes.

This is a step as we strip out MainWindow to just GUI
aspects.
2013-07-18 08:00:35 +01:00
Damien
6ebba3c874 use context->athlete->treeWidget instead of treeWidget 2013-07-17 22:51:18 +02:00
Damien
b0b022aa8c RideFile: Add a ride merge wizard 2013-07-17 22:27:49 +02:00
Mark Liversedge
b7b4712546 Minor tidy up of MainWindow.cpp
Get the sidebar code all in the same place.
For tidiness / maintainability.
2013-07-15 22:29:40 +01:00
Mark Liversedge
bc4a6d978e Introduce AnalysisSidebar widget
Moving the code intertwined into MainWindow for
the analysis view sidebar; activity list, intervals
and calendar into a new AnalysisSidebar class.

                WARNING!

This is a work in progress checkpoint commit
as the sidebar menus and context menus have
not yet been migrated out -- this will be done
in the next commit or two.
2013-07-15 22:24:31 +01:00
Dave Waterworth
492af3f824 More Fortius Fixes
Including:
   * Fixed a type with slope mode updating the wrong byte array
   * Transposed bytes in the definition of the erg and slope messages
   * Added power smoothing

Note:
   It appears the Fortius is supplying torque not power, some more
   testing is being performed but expect to see an update shortly
   once this has been fully tested.
2013-07-15 08:34:09 +01:00
Mark Liversedge
7f1a6dafef Deprecate the Bubble
.. its hideous and really annoying.
2013-07-14 21:18:10 +01:00
Mark Liversedge
05c2150b12 Tidy up MainWindow.cpp
.. comments and reorg whats left.
2013-07-14 13:13:38 +01:00
Mark Liversedge
97be00069b Move Crash and Upgrade Processing to Athlete
.. and out of mainwindow
2013-07-14 12:55:08 +01:00
Mark Liversedge
59fd0db564 Move specialFields from MainWindow to Context
.. and tidy up a few unneccessary references to mainWindow
2013-07-14 11:51:34 +01:00
Mark Liversedge
cf82d1b7a9 More refactor tidying
.. move signals to context from mainwindow
.. fix missed updates to aerolab and realtime plot
.. remove clutter from MainWindow.h
2013-07-14 11:23:06 +01:00
Mark Liversedge
9e875dd243 Move allRides initialisation to Athlete
.. was left behind in MainWindow by accident.
2013-07-14 10:25:40 +01:00
Mark Liversedge
8060b4a0d4 Rename TrainTool to TrainSidebar
.. just for a bit of consistency before we develop
   AnalysisSidebar and refactor the views in MainWindow.
2013-07-13 20:15:07 +01:00
Mark Liversedge
d21ca376be MainWindow Refactor Part 3 of 5
Slowly migrating code  and data from the MainWindow
class to Athlete and Context classes.

This update moves the ride and interval lists and
data structures from MainWindow to Athlete.
2013-07-13 19:46:03 +01:00
Mark Liversedge
ac463538c1 Rename GcCalendar as DiarySidebar
.. as we tidy up the views and decouple them from MainWindow
2013-07-13 09:38:54 +01:00
Mark Liversedge
d639411f24 Move isclean from MainWindow to Athlete
.. rather unfortunate use of English as it leads
   to athlete->isclean == false :)
2013-07-12 18:15:14 +01:00
Mark Liversedge
59505dd100 Remove multisave from MainWindow
.. rather than migrate to context just remove it altogether
2013-07-12 17:36:39 +01:00
Mark Liversedge
2cfb5bf3a0 Metric Popup Flicker
The show/hide approach in previous commit caused the
metric popup to flicker. So we now only create the popup
when we know we want to show.
2013-07-12 17:24:15 +01:00
Mark Liversedge
781b720078 Hide metric refresh popup
.. until its been running for more than 6 seconds since
   it takes time to do its thing and can be annoying!
2013-07-12 14:17:55 +01:00
Mark Liversedge
210b71588f Further MainWindow Refactor Part 2 of 5
.. migrate constructor from MainWindow to Athlete and
   Context classes

.. remove Athlete *athlete from MainWindow altogether
2013-07-12 13:59:10 +01:00
Mark Liversedge
9d8fbad0d2 Fixup MainWindow refactor Part 2
.. Minor oopsie with references to context->mainWindow->athlete
   instead of simply context->athlete.

The MainWindow refactor will be complete when references to
the mainWindow class is for gui reasons only.
2013-07-12 08:57:49 +01:00
Mark Liversedge
2d33c0aadc Fixup MainWindow refactor Part 2
.. VideoWindow needed updating
.. QTFullScreen needed updating
.. Fix use of lower case n #include
2013-07-11 20:59:05 +01:00
Mark Liversedge
cf925cf904 Fix src.pro accidentally removed RideWindow.qrc 2013-07-11 19:46:15 +01:00
Mark Liversedge
e7935976c6 Fixup MainWindow refactor Part 2
.. fix workoutwizard context hack
.. fix modelplot (3d) code that was missed
2013-07-11 18:10:37 +01:00
Mark Liversedge
05f1d577db Refactor MainWindow Part 2 of 5
Decoupled classes from MainWindow to reference Context
and Athlete (and introduced a couple of new headers).

We no longer pass around a MainWindow pointer to children
but pass a context instead.

There are still a few pieces left in MainWindow that need
to move to a better place;
    * Setting/clearing filter selection
    * Working with Intervals
    * Adding/Deleting Rides
    * Save on Exit

As mentioned previously there are lots of other parts to
this refactor left to do;
    * break MainWindow Gui elements into Toolbar and Views

    * migrate from RideItem and Ridelist to ActivityCollection
      and Activity classes that are not tied into gui elements.

    * introduce Application Context and AthleteCollection
2013-07-11 14:02:02 +01:00
Mark Liversedge
cd54ce16c8 Recognise Dave Waterworth
.. in the about box contributors list.
2013-07-09 20:08:10 +01:00
Mark Liversedge
b33fe701f8 Merge branch 'master' of github.com:GoldenCheetah/GoldenCheetah 2013-07-09 11:07:10 +01:00
Dave Waterworth
21593b6bb6 Fix Tacx Fortius Device Support
Multiple fixups for Tacx Support -- as a result the support
is now pencilled in for full support in 3.0 SP1.

Fixes #24.
2013-07-09 11:02:42 +01:00
Mark Liversedge
f04fcfe934 Fix allplot crash on daft power value
Incredibly high power value in ride file causes a memory
error when setting up plot ticks.

Fixes #658
2013-07-07 20:00:25 +01:00
Mark Liversedge
22175cf55c Refactor Part 1 Mac Fixups
Fixing a few issues from Part 1 of the MainWindow refactor
for building on a Mac.  Also retired twitter completely.
2013-07-07 16:22:42 +01:00
Mark Liversedge
e407237ac0 MainWindow Refactor Part 1 of 5
Breaking the MainWindow 'god object' into
separate classes for Athlete and Context.

Further updates will need to;
- break MainWindow Gui elements into Toolbar and Views

- migrate from RideItem and Ridelist to ActivityCollection
  and Activity classes that are not tied into gui elements.

- introduce Application Context and AthleteCollection

Once these are done we will be in a position to decouple
most classes from mainwindow and also introduce tabbed
athletes.
2013-07-07 15:50:28 +01:00
Mark Liversedge
401957acf9 Deprecate Strava Support
No API v3 access.

Fixes #656.
2013-07-06 00:12:34 +01:00
Mark Liversedge
12db0954e9 Merge branch 'master' of github.com:/GoldenCheetah/GoldenCheetah 2013-07-05 21:43:59 +01:00
Mark Liversedge
f93155fabd Update FAQ regarding Strava support 2013-07-05 21:40:40 +01:00
Mark Liversedge
94d6cf1d54 Fixup gcconfig.pri.in for Mac OSX 10.9 preview
.. need to add SDK to includepath
.. will go away hopefully, when 10.9 is released
2013-07-02 12:37:48 +01:00
Mark Liversedge
38963d97eb Fix PWX export SEGV
fixes #654.
2013-07-01 19:14:16 +01:00
Mark Liversedge
b162e754a6 MainWindow refactor design update
.. more complete list of attributes and operations
.. need to plan the sequencing of the refactor itself and testing approach
2013-06-28 11:35:59 +01:00
Mark Liversedge
24538b2980 MainWindow refactor design
.. a class model for breaking up MainWindow
.. not all methods/members are listed, mostly about
   identifying the new classes required.
2013-06-25 22:17:22 +01:00
Mark Liversedge
2be11b8311 Merge pull request #650 from rclasen/fix-win
make srmio details in version dialog conditionally
2013-06-25 03:14:51 -07:00
Rainer Clasen
9f9f84f1c9 make srmio details in version dialog conditionally
... so that GC keeps building with older srmio versions.
2013-06-24 23:40:41 +02:00
Mark Liversedge
2c48f5d837 Srmio less wordy version
.. still provides version and commit but removed
   unneccessary words as it skewed the output.

I'm strangely anal about alignment !
2013-06-23 20:45:36 +01:00
Mark Liversedge
196250ec56 Intervals indexes crash / parser error
2 bugs:
- interval offset of -1 causes a crash in htmlSummary
- interval offset of form nnn e+0n parses incorrectly

Also remove silly -wreorder warning in ridefile.h
2013-06-23 16:52:58 +01:00
Mark Liversedge
c12cb80901 Merge pull request #645 from rclasen/fix-win
Fix SRM download issues on windows/mingw
2013-06-23 07:42:44 -07:00
Rainer Clasen
626d254acd inlude srmio version + commit in about dialog 2013-06-23 14:18:24 +02:00
Rainer Clasen
ce49ddd906 SrmDevice: fix writing srmio data
fopen() was missing 'b' flag, so that mingw and other platforms doing
LF/CR translation screwed data.

This is fixing the astronomic values of direct SRM downloads.
2013-06-23 14:18:23 +02:00
Damien
8a5ed3d4ba RideFile: Add Min, Max and Avg point 2013-06-22 14:42:18 +02:00
Mark Liversedge
1b461a9734 10.9 Code Nits
Couple of minor coding nits identified when compiling
on OS X 10.9 Mavericks with Xcode 5 tools.
2013-06-20 15:59:45 +01:00
Mark Liversedge
33ec2a2570 Hand drawn mockups for 3.1 MainWindow options
Playing with some ideas about how the UI will change
to support new UX features for viewing multiple athletes
in a single mainwindow and also having multiple pages
of charts in a single view.

2 Options on the drawing:
.. Having tabbed Athletes and scope bar for view pages
.. Having a source list and tabbed view pages

Can't decide which is best -or- if there are better options
we could look at.
2013-06-19 10:16:15 +01:00
Gareth Coco
32ef1a0df6 Merge branch 'master' of github.com:GoldenCheetah/GoldenCheetah 2013-06-10 03:19:20 -04:00
Gareth Coco
fb339a527b Website updates for Version 3.0 2013-06-10 03:17:49 -04:00
965 changed files with 180334 additions and 63132 deletions

8
.gitignore vendored
View File

@@ -2,7 +2,15 @@ Makefile
# old skool
.svn
*.pri
# osx noise
.DS_Store
profile
moc/
obj/
lib/
bin/
plugins/
resources/

View File

@@ -399,3 +399,4 @@ CLUCENE_LIBS = -lclucene
$ make clean
$ qmake
$ make

View File

@@ -0,0 +1,48 @@
<mockup version="1.0" skin="sketch" fontFace="Balsamiq Sans" measuredW="591" measuredH="228" mockupW="566" mockupH="205">
<controls>
<control controlID="0" controlTypeID="com.balsamiq.mockups::Canvas" x="25" y="23" w="566" h="205" measuredW="100" measuredH="70" zOrder="0" locked="false" isInGroup="-1"/>
<control controlID="1" controlTypeID="com.balsamiq.mockups::HRule" x="31" y="37" w="560" h="-1" measuredW="100" measuredH="10" zOrder="1" locked="false" isInGroup="-1"/>
<control controlID="2" controlTypeID="com.balsamiq.mockups::Label" x="34" y="23" w="-1" h="-1" measuredW="110" measuredH="21" zOrder="2" locked="false" isInGroup="-1">
<controlProperties>
<text>Compare%20Intervals</text>
</controlProperties>
</control>
<control controlID="3" controlTypeID="com.balsamiq.mockups::CheckBox" x="40" y="191" w="-1" h="-1" measuredW="110" measuredH="22" zOrder="3" locked="false" isInGroup="-1">
<controlProperties>
<text>Compare%20Delta</text>
</controlProperties>
</control>
<control controlID="4" controlTypeID="com.balsamiq.mockups::Canvas" x="34" y="52" w="414" h="133" measuredW="100" measuredH="70" zOrder="4" locked="false" isInGroup="-1">
<controlProperties>
<borderStyle>roundedDotted</borderStyle>
</controlProperties>
</control>
<control controlID="6" controlTypeID="com.balsamiq.mockups::List" x="456" y="47" w="128" h="174" measuredW="100" measuredH="174" zOrder="5" locked="false" isInGroup="-1">
<controlProperties>
<text>May%202x20s%0ABarhatch%20Climbs%0ASub%204%20ToSH%0AMarmottes%0AAdH%20Ascents%0ABox%20Hill%202009%0ABox%20Hill%202013%0ABox%20Hill%20All</text>
</controlProperties>
</control>
<control controlID="7" controlTypeID="com.balsamiq.mockups::TextInput" x="170" y="189" w="225" h="-1" measuredW="138" measuredH="27" zOrder="6" locked="false" isInGroup="-1">
<controlProperties>
<text>Compare%20Set%20Name...</text>
</controlProperties>
</control>
<control controlID="8" controlTypeID="com.balsamiq.mockups::Button" x="402" y="189" w="-1" h="-1" measuredW="45" measuredH="27" zOrder="7" locked="false" isInGroup="-1">
<controlProperties>
<text>Add</text>
</controlProperties>
</control>
<control controlID="10" controlTypeID="com.balsamiq.mockups::RoundButton" x="569" y="24" w="15" h="18" measuredW="32" measuredH="32" zOrder="8" locked="false" isInGroup="-1">
<controlProperties>
<icon>CircledXIcon%7Cxsmall</icon>
<text/>
</controlProperties>
</control>
<control controlID="11" controlTypeID="com.balsamiq.mockups::Label" x="48" y="62" w="387" h="-1" measuredW="180" measuredH="21" zOrder="9" locked="false" isInGroup="-1">
<controlProperties>
<color>10066329</color>
<text>Drag%20and%20drop%20intervals%20here%20...</text>
</controlProperties>
</control>
</controls>
</mockup>

BIN
doc/design/Compare Pane.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

View File

@@ -514,16 +514,21 @@ sport of "Bike" if you plan on uploading rides to training peaks.
Training Peaks only allow paid up members to get access to their data.
If you are using a free service they do not let you retrieve your data.
5.3 Why is data uploaded to Strava all wrong?
=============================================
5.3 Upload/Download with Strava fails?
======================================
In general Strava will only use GPS data. If your ride does not contain
GPS data then Strava is not likely to play nice. In addition many of
the other data series will be ignored. This is related to Strava data
processing in V2.0 of their API.
Strava have switched off their v1 and v2 APIs before providing access
to their v3 APIs. We have requested access to the new v3 API but it has
not been granted. In the meantime to upload to Strava you can send an
email to <upload@strava.com> from you registered email account
attaching the ride in a format Strava supports.
We always upload as TCX since the JSON flavour of their API appears to
have less functionality.
We remain committed to helping cyclists download their power data to
the computer of their choice, analyze it in whatever way they see fit,
and share their methods of analysis with others.
We will be deprecating support for Strava upload/download in v3 SP1 and
have no immediate plans to provide support for it in the future.
5.4 What settings do I need to get GoldenCheetah to upload to my Google Calendar?
=================================================================================
@@ -753,7 +758,7 @@ Index
* Garmin Connect: METRICS. (line 80)
* github: GENERAL. (line 40)
* Google: UPLOADING AND DOWNLOADING.
(line 33)
(line 38)
* install: GENERAL. (line 31)
* join: DATA. (line 9)
* JSON: DATA. (line 88)
@@ -802,7 +807,7 @@ Index
* weight: MOST COMMON QUESTIONS OF ALL.
(line 36)
* Withings: UPLOADING AND DOWNLOADING.
(line 46)
(line 51)
* xPower: METRICS. (line 9)
* zoom: CHARTS. (line 97)
@@ -815,8 +820,8 @@ Node: GENERAL6062
Node: METRICS9684
Node: DATA16676
Node: UPLOADING AND DOWNLOADING20606
Node: SEASONS AND EVENTS23090
Node: CHARTS24487
Node: INDEX29288
Node: SEASONS AND EVENTS23387
Node: CHARTS24784
Node: INDEX29585

End Tag Table

Binary file not shown.

View File

@@ -567,16 +567,20 @@ using a free service they do not let you retrieve your data.
@section Why is data uploaded to Strava all wrong?
@section Upload/Download with Strava fails?
@cindex Strava
In general Strava will only use GPS data. If your ride does not contain GPS data then
Strava is not likely to play nice. In addition many of the other data series will be
ignored. This is related to Strava data processing in V2.0 of their API.
Strava have switched off their v1 and v2 APIs before providing access to their
v3 APIs. We have requested access to the new v3 API but it has not been granted.
In the meantime to upload to Strava you can send an email to @email{upload@@strava.com}
from you registered email account attaching the ride in a format Strava supports.
We always upload as TCX since the JSON flavour of their API appears to have less
functionality.
We remain committed to helping cyclists download their power data
to the computer of their choice, analyze it in whatever way they see fit, and
share their methods of analysis with others.
We will be deprecating support for Strava upload/download in v3 SP1 and have no
immediate plans to provide support for it in the future.
@section What settings do I need to get GoldenCheetah to upload to my Google Calendar?

88
doc/user/GC31-Release.txt Normal file
View File

@@ -0,0 +1,88 @@
Some notes on what is new in GC 3.1
-----------------------------------
MAJOR NEW FEATURES
1. Compare Mode
* Across Summary, Ride, QA, CP, Histogram, Metric charts
* Compare Athletes, Seasons, Rides, Intervals
* Easy and intuitive user interface
2. Additional Power Duration Models
* Multiple PD models now available
* Track changes in model estimates for W', CP, P-Max, FTP over time
* Track changes in model estimates for any duration over time
2. Merge Activities
3. Share Dialog
ENHANCEMENTS
1. General
i Open Athletes in Tabs
ii Redesign Tabbed mode with a ChartBar
iii Themes and better support for color customisation
iv Improved Interactivity (axes, interval hover)
v Autofilter in Trends view
vi Specify athlete library location
vii Improved Dropbox support (CRC)
viii Find intervals via matches, hills etc
2. Device
i Fixed up Tacx Fortius Support
ii Joule GPS updates
iii FIT ride file updates
iv Pedal Smoothness / Torque Effectiveness support
v Moxy support
3. Metrics
i Plot best x power etc, Plot W', CP et al
ii W'bal implemented with metrics
iii TISS implemented
iv aPower
v Polarised Zones
vi Pacing Index / Fatigue Index
vii W' work
viii Average Pedal Smoothness / Torque Efficiency
4. LTM Chart
i Chart selection sidebar
ii LTM settings cleaned up
iii Stack mode
iv Data table mode
v Labels
vi Quadratic trend lines
5. CP Chart
i User selectable CP models
ii Extended CP Model
iii Plot rates of change
iv Plot heat and heat by age
v Plot as percentge of best
vi Plot centiles
v Ranking
vi Plot intervals
vii Export Data
6. Ride Chart
i Plot lots of derived series; NP, W'bal, xPower, Delta etc etc
ii Plot delta series
iii Plot stack series
iv Isolate series hover on axis
v Create/Edit reference lines
7. Summary Chart
i Athlete Bests
ii Model derived estimates (CP, FTP etc)
8. Foundational
i QT 5 support
ii QWT 6.1 support
iii MainWindow/Context/Athlete refactored
iv CP refactored (for models and intervals)
v AllPlot refactored (for compare)
BUG FIXES
i Over 900 commits since 3.0 including many bug fixes
ii Eradicating assert reduces crashes
iii Crash dialog/restart to menu

View File

@@ -8,10 +8,10 @@ OTHER= 3d.png choose-a-cyclist.png cpint.gp cpint.png critical-power-plot.png cr
pm.png power.zones realtime.png ride-plot.png ride-plot2.png ride-summary.png sample.gp \
sample.png weekly-summary.png google-earth.png aerolab.png
BIN= GoldenCheetah_2.1.0_Linux_x86_64.tgz \
GoldenCheetah_2.1.0_Linux_x86.tgz \
GoldenCheetah_2.1.0_Mac_Universal.dmg \
GoldenCheetah_2.1.0_Windows_Installer.exe
BIN= GoldenCheetah_3.0.1_Mac_Universal.dmg \
GoldenCheetah-3.0.1-1.fc18.x86_64.rpm \
GoldenCheetah-3.0.1-1.fc19.x86_64.rpm \
GoldenCheetah_3.0.1_Windows_Installer.exe
all: $(HTML)
.PHONY: all clean install
@@ -51,6 +51,15 @@ download.html: download.content genpage.pl
release-notes.html: release-notes.content genpage.pl
./genpage.pl "Release Notes" $< > $@
release-notes_2.1.0.html: release-notes_2.1.0.content genpage.pl
./genpage.pl "Release Notes 2.1.0" $< > $@
release-notes_3.0.0.html: release-notes_3.0.0.content genpage.pl
./genpage.pl "Release Notes 3.0.0" $< > $@
release-notes_3.0.1.html: release-notes_3.0.1.content genpage.pl
./genpage.pl "Release Notes 3.0.1" $< > $@
faq.html: faq.content genpage.pl
./genpage.pl "Frequently Asked Questions" $< > $@

View File

@@ -11,7 +11,8 @@ Installing dependencies
</font></big>
<p>GC requires a number of libraries. On Mac OS X, you can get most of these
through <a href="http://www.macports.org/">Mac Ports</a>. On Linux and other
through <a href="http://www.macports.org/">Mac Ports</a> or
<a href="http://www.brew.sh/">Homebrew</a>. On Linux and other
Unixes, you can use whatever package manager your distribution provides. (We
list the package names for MacPorts and Ubuntu below.) On Windows, you'll
probably need to download and install everything by hand. You might also want

View File

@@ -2,20 +2,21 @@
<p>
Golden Cheetah is available in binary form for
Linux x86, Mac OS X (universal binary), and Windows.
Fedora (RPMs), Mac OS X (Universal Intel binary), and Windows.
It is also available as source code.
</p>
<p>
Golden Cheetah downloads data from all versions of the PowerTap
computer including the new Joule. If you're using the PowerTap USB cradle
(as opposed to the older, serial cable), you may need to install the
<a href="http://www.ftdichip.com/Drivers/D2XX.htm">FTDI USB driver</a>
before downloading.
computer including the new Joule GPS. Previously you needed to have the
FTDI USB Drivers installed if you were using the PowerTap USB cradle
(as opposed to the older, serial cable). This should not be necessary.
If you are having problems then you can manually install the
<a href="http://www.ftdichip.com/Drivers/D2XX.htm">FTDI USB driver</a>.
</p>
<p>
On Linux and Mac OS X, Golden Cheetah also downloads from the SRM PCV. On Mac
On Windows, Linux and Mac OS X, Golden Cheetah also downloads from the SRM PCV. On Mac
OS X, you'll need to install <a href="http://osx-pl2303.sourceforge.net/">the
open source PL2303 driver</a> to download from an SRM. Please see the
<a href="https://github.com/GoldenCheetah/GoldenCheetah/wiki/Installing-the-d2xx-drivers-on-mac-os">WIKI</a> article
@@ -25,24 +26,40 @@ PCV on Mac OS X</a> for further information.
<p>
<font face="arial,helvetica,sanserif">
<big><strong>Download Release 2.1</strong></big>
<big><strong>Download Release 3.0.2</strong></big>
</font>
</p>
<p>This is a bug fix release with a few new features.</p>
<ul>
<li><a href="GoldenCheetah_2.1.0_Windows_Installer.exe">Windows 32-bit (runs on 64bit as well)</a>
<li><a href="GoldenCheetah_2.1.0_Mac_Universal.dmg">Mac OS X Universal 10.4->10.8</a><br>
<li><a href="GoldenCheetah_2.1.0_Linux_x86.tgz">Linux x86</a><br>
<li><a href="GoldenCheetah_2.1.0_Linux_x86_64.tgz">Linux x86_64</a><br>
<li><a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah_3.0.2_Windows_Installer.exe">Windows 32-bit (runs on 64bit as well)</a>
<li><a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah_3.0.2_Mac_Universal.dmg">Mac OS X Intel Universal (10.6+)</a><br>
<li>Fedora 18 RPMS - <a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah-3.0.2-1.fc18.i686.rpm">32bit</a>
/ <a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah-3.0.2-1.fc18.x86_64.rpm">64 bit</a><br>
<li>Fedora 19 RPMS - <a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah-3.0.2-1.fc19.i686.rpm">32bit</a>
/ <a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah-3.0.2-1.fc19.x86_64.rpm">64 bit</a><br>
<li>Fedora 20 RPMS - <a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah-3.0.2-1.fc20.i686.rpm">32bit</a>
/ <a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP2/GoldenCheetah-3.0.2-1.fc20.x86_64.rpm">64 bit</a><br>
</ul>
</p>
<p>
Please follow the <a href="/users-guide.html">User's Guide</a> on how to install
and use Golden Cheetah.
Installation is simple. Download the file for your operating system.<br>
On Mac, open the DMG and drag and drop where you would like to install.<br>
For Windows, run the Installer and follow the prompts.<br>
For Fedora, install as root (yum install filename.rpm) or using sudo (sudo yum install filename.rpm).<br>
</p>
<p>
You can also <a href="release-notes.html">view the release notes</a> for 2.1
There is a <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-Manual.pdf?raw=true">Manual</a>
and a <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-FAQ.pdf?raw=true">FAQ</a> that
you can use to help you use the program.
</p>
<p>
There is the older Version 2.1.0 <a href="/users-guide.html">User's Guide</a> on how to install
and use Golden Cheetah that can assist also.
</p>
<p>
You can also <a href="release-notes.html">view the release notes</a> for 3.0.2
or <a href="older-releases.html">download older releases</a> of Golden Cheetah.
</p>

View File

@@ -1,5 +1,12 @@
<!-- $Id: faq.content,v 1.4 2006/07/05 16:59:56 srhea Exp $ -->
<h2>Documentation</h2>
<p>
There is a <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-Manual.pdf?raw=true">Manual</a>
and a <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-FAQ.pdf?raw=true">FAQ</a> that
you can use to help you use the program.
</p>
<p>
<b><i>GoldenCheetah doesn't find my PowerTap on Ubuntu Linux.</i></b>
<p>

View File

@@ -54,6 +54,7 @@ body {
<img src="logo.jpg" width="175" height="175" alt="Picture of Cheetah">
<p> <b><a href="index.html">Introduction</a></b>
<br> <b><a href="download.html">Download</a></b>
<br> <b><a href="screenshots.html">Screenshots</a>
<br> <b><a href="wiki.html">Wiki</a>
<br> <b><a href="users-guide.html">User's Guide</a>
@@ -61,7 +62,6 @@ body {
<br> <b><a href="faq.html">FAQ</a>
<br> <b><a href="wishlist.html">Wish List</a>
<br> <b><a href="license.html">License</a></b>
<br> <b><a href="download.html">Download</a></b>
<br> <b><a href="contrib.html">Contributors</a></b>
<br> <b><a href="search.html">Search</a></b>
<br> <b><a href="mailing-list.html">Mailing List</a></b>

View File

@@ -13,8 +13,7 @@ GoldenCheetah is a software package that:
<ul>
<li>Downloads ride data directly from the CycleOps PowerTap and the SRM
PowerControl V. Support for SRM PowerControl VI and VII is planned for the
future.<p>
PowerControl V, VI and VII.</p>
<li>Imports ride data downloaded with other programs, including TrainingPeaks
WKO+ and the manufacturers' software for the Ergomo, Garmin, Polar, PowerTap,
@@ -24,8 +23,7 @@ and SRM devices.<p>
BikeScore calculation, histogram analysis, a best interval finder, and a pedal
force versus pedal velocity chart, to name just a few.<p>
<li>Is available for Linux, Mac OS X, and Windows. (The Windows version
does not yet support direct downloads from the SRM PowerControl.)<p>
<li>Is available for Linux, Mac OS X, and Windows.<p>
<li>Is released under an Open Source license.
</ul>

View File

@@ -18,13 +18,122 @@ please see <a href="download.html">the download page</a> instead.
<td><i>Description</i></td>
</tr>
<tr>
<td valign="top">3.0.1</td>
<td valign="top">
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP1/GoldenCheetah_3.0.1_Mac_Universal.dmg">Mac OS X Intel Universal (10.6+)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP1/GoldenCheetah_3.0.1_Windows_Installer.exe">Windows 32-bit</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP1/GoldenCheetah-3.0.1-2.fc18.x86_64.rpm">Fedora 18 RPM (64bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0-SP1/GoldenCheetah-3.0.1-2.fc19.x86_64.rpm">Fedora 19 RPM (64bit)</a>
</td>
<td valign="top">
<a href="release-notes_3.0.1.html">Full Version 3.0.1 change log.</a><br>
</td>
</tr>
<tr>
<td valign="top">3.0.0</td>
<td valign="top">
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0/GoldenCheetah_3.0.0_Mac_32bit.dmg">Mac OS X Intel (32bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0/GoldenCheetah_3.0.0_Mac_64bit.dmg">Mac OS X Intel (64bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v3.0/GoldenCheetah_3.0.0_Windows_Installer.exe">Windows 32-bit</a>
</td>
<td valign="top">
<p>
New Features and Enhancements
<ul>
<li>See the full log below.</li>
<li>See the <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-Release.pdf?raw=true">Release Notes</a> PDF on GitHub.</li>
<li>A PDF <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-Manual.pdf?raw=true">User's Manual</a></li>
<li>A PDF <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-FAQ.pdf?raw=true">Frequently Asked Questions (FAQ)</a></li>
<li>Welcome Screens to help setup the program.</li>
</ul>
</p>
<p>
Internationalisation
<ul>
<li>German (Tilman Schmiedeberg)</li>
<li>Italian (Marco Piccirilli)</li>
<li>Japanese (Okano Takayoshi)</li>
<li>Spanish (Alejandro Martinez)</li>
</ul>
</p>
<p>
Development Builds
<ul>
<li>Gareth Coco</li>
<li>Jamie Kimberley</li>
</ul>
</p>
<p>
<a href="release-notes_3.0.0.html">Full Version 3.0.0 change log.</a><br>
</p>
</td>
</tr>
<tr>
<td valign="top">2.1.0</td>
<td valign="top">
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.1/GoldenCheetah_2.1.0_Linux_x86.tgz">Linux (32bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.1/GoldenCheetah_2.1.0_Linux_x86_64.tgz">Linux (64bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.1/GoldenCheetah_2.1.0_Mac_Universal.dmg">Mac OS X Universal</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.1/GoldenCheetah_2.1.0_Windows_Installer.exe">Windows 32-bit</a>
</td>
<td valign="top">
<p>
New Features and Enhancements
<ul>
<li>FIT file support for Mac OSX - Rainer Clasen</li>
<li>SRM 5 - Rainer Clasen</li>
<li>Aerolab Improvements - Damien Grauser</li>
<li>O-Sync Macro X device support - Damien Grauser</li>
<li>Air density (RHO) Calculator - Steven Gribble</li>
<li>Virtual Power - Darren Hague</li>
<li>GoldenCheetah JSON - Mark Liversedge</li>
<li>Support TrainerRoad.com TCX Files - Mark Liversedge</li>
<li>Garmin GPX - Greg Lonnon</li>
<li>Sigma SLF/SMF - Frank Zschockelt</li>
</ul>
</p>
<p>
Internationalisation
<ul>
<li>Czech (David Kramar)</li>
<li>French (Damien Grauser, Guillaume LeMaitre)</li>
<li>German (Alexander Pietsch)</li>
<li>Italian (Robert Masso)</li>
<li>Portugese (Thomas Irps)</li>
<li>Portugese-Brazil (Bruno Assis)</li>
<li>Japanese (Mitsukuni Sato, Keisuke Yamaguchi)</li>
<li>Spanish (Alejandro Martinez)</li>
</ul>
</p>
<p>
Development Builds
<ul>
<li>Gareth Coco</li>
<li>Jamie Kimberley</li>
</ul>
</p>
<p>
<a href="release-notes_2.1.0.html">Full Version 2.1.0 change log.</a><br>
</p>
</td>
</tr>
<tr>
<td valign="top">2.0.0</td>
<td valign="top">
<a href="GoldenCheetah_2.0.0_Linux_x86.gz">Linux x86</a><br>
<a href="GoldenCheetah_2.0.0_Linux_x86_64.gz">Linux x86_64</a><br>
<a href="GoldenCheetah_2.0.0_Mac_Universal.zip">Mac OS X Universal</a><br>
<a href="GoldenCheetah_2.0.0_Windows_Installer.exe">Windows 32-bit</a>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.0/GoldenCheetah_2.0.0_Linux_x86.gz">Linux (32bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.0/GoldenCheetah_2.0.0_Linux_x86_64.gz">Linux (64bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.0/GoldenCheetah_2.0.0_Mac_Universal.dmg">Mac OS X Universal</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v2.0/GoldenCheetah_2.0.0_Windows_Installer.exe">Windows 32-bit</a>
</td>
<td valign="top">
<p>
@@ -107,10 +216,10 @@ Builds, testing and support
<tr>
<td valign="top">1.3.0</td>
<td valign="top">
<a href="GoldenCheetah_1.3.0_Linux_x86.gz">Linux x86</a><br>
<a href="GoldenCheetah_1.3.0_Linux_x86_64.gz">Linux x86_64</a><br>
<a href="GoldenCheetah_1.3.0_Mac_Universal.zip">Mac OS X Universal</a><br>
<a href="GoldenCheetah_1.3.0_Windows_Installer.exe">Windows 32-bit</a>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.3/GoldenCheetah_1.3.0_Linux_x86.gz">Linux (32bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.3/GoldenCheetah_1.3.0_Linux_x86_64.gz">Linux (64bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.3/GoldenCheetah_1.3.0_Mac_Universal.zip">Mac OS X Universal</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.3/GoldenCheetah_1.3.0_Windows_Installer.exe">Windows 32-bit</a>
</td>
<td valign="top">
<p>
@@ -207,10 +316,10 @@ Other new features:
<tr>
<td valign="top">1.2.0</td>
<td valign="top">
<a href="GoldenCheetah_1.2.0_Linux_x86.tgz">Linux x86</a><br>
<a href="GoldenCheetah_1.2.0_Linux_x86_64.tgz">Linux x86_64</a><br>
<a href="GoldenCheetah_1.2.0_Darwin_Universal.dmg">Mac OS X Universal</a><br>
<a href="GoldenCheetah_1.2.0_Windows_Installer.exe">Windows 32-bit</a>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.2/GoldenCheetah_1.2.0_Linux_x86.tgz">Linux (32bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.2/GoldenCheetah_1.2.0_Linux_x86_64.tgz">Linux (6bit)</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.2/GoldenCheetah_1.2.0_Darwin_Universal.dmg">Mac OS X Universal</a><br>
<a href="https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v1.2/GoldenCheetah_1.2.0_Windows_Installer.exe">Windows 32-bit</a>
</td>
<td valign="top">
<p>

View File

@@ -1,252 +1,51 @@
<p>
<font face="arial,helvetica,sanserif">
<big><strong>GoldenCheetah 2.1</strong></big>
<big><strong>GoldenCheetah 3.0.2</strong></big>
</font>
</p>
<p>
New Features and Enhancements
<ul>
<li>FIT file support for Mac OSX - Rainer Clasen</li>
<li>SRM 5 - Rainer Clasen</li>
<li>Aerolab Improvements - Damien Grauser</li>
<li>O-Sync Macro X device support - Damien Grauser</li>
<li>Air density (RHO) Calculator - Steven Gribble</li>
<li>Virtual Power - Darren Hague</li>
<li>GoldenCheetah JSON - Mark Liversedge</li>
<li>Support TrainerRoad.com TCX Files - Mark Liversedge</li>
<li>Garmin GPX - Greg Lonnon</li>
<li>Sigma SLF/SMF - Frank Zschockelt</li>
</ul>
</p>
<p>
Internationalisation
<ul>
<li>Czech (David Kramar)</li>
<li>French (Damien Grauser, Guillaume LeMaitre)</li>
<li>German (Alexander Pietsch)</li>
<li>Italian (Robert Masso)</li>
<li>Portugese (Thomas Irps)</li>
<li>Portugese-Brazil (Bruno Assis)</li>
<li>Japanese (Mitsukuni Sato, Keisuke Yamaguchi)</li>
<li>Spanish (Alejandro Martinez)</li>
</ul>
</p>
<p>
Development Builds
<ul>
<li>Gareth Coco</li>
<li>Jamie Kimberley</li>
</ul>
</p>
<p>
Full Change Log
<pre>
Alejandro Martinez (7):
Add Spanish Translation and Enable Metrics Translation
Add Spanish Translation & Fix Translation Issues
Set UTF-8 in charts,metadata and seasons xml files
Add HrZones to Weekly Summary and Fix Spanish Translation
Update Spanish Translation
Enable 3d Plot Translation and include spanish translation
Rho Estimator Translation
Bruno Assis (1):
Portugese (Brazil) Translation
Damien (22):
Modify csv import for ergomo file with comma or semicolon separator
Remove error logs for unused datas in ride file
handle showHr/Speed/Cad/Alt state for stacked view
Add summary metrics list to preferences
Correct crash with truncated files
Add PeakPowerHr metric (average HR during peak power)
Altitude scale present with no altitude data.
Bug #178 TRIMP is not updated after modification in Rest Hr Tag -> compute metric after save
Add a setFocus on the Treelist to correct a MacOs Bug of Qt
Modification to handle odd start page and compatible with qt 4.6
Correct interval
Modify TRIMP formula to use time_riding instead of workout time
Modify Aerolab to add interval highlight and zoom + auto offset
Aerolab : Change LCD display to LineEdit
Correct bug in the peakPowerHr formula
Correct encoding in json parser
Correct bug #496 for longitude < -65
Remove Joule warnings
Update french translation for rho estimator
Change speed to double in Bin parser
Correct intialisation of altitude for TCX without altitude
Correct intialisation of altitude for TCX without altitude
Damien Grauser (2):
Update French translation.
O_Sync Macro X device support
Darren Hague (5):
Virtual Power; Better GSC-10 pairing support.
Corrected - to + in CycleOps formula
Use realtime clock for realtime-mode clock
Add virtual power support for BT-ATS trainer
Remove toMSecsSinceEpoch() and work around
David (1):
Updated Czech translations
Eric Brandt (1):
fix realtime mode load timer and lcd sig. digit display issues
Frank Zschockelt (2):
Support for Sigma SLF/SMF file formats
Included 4 sample sigma files in the test/rides directory
Gareth Coco (25):
Changes to map markers
FIT file reader fixes
Set default Smoothing (secs) in Ride Plot to one (1) second
Change start date from UTC to localtime for bin ride file
Make interval period on map user defineable
Reorder liboauth includes
Comment out QwtDesigner build in qwtconfig.pri.in
Changed kph to km/h in displays
Changed KPH to km/h in displays
Update translation .qm files
Update gc_fr.qm for updated French translation
Fixes for RealtimeController
Initialise LAT/LON to zero (0.0) in the parser
Updated Spanish Translation
Add a Portuguese translation
Add a TCX ride exporter
Fix interpolation of lat/lon when missing or 0/0
Allow CdA to lowest possible in AerolabWindow.cpp
Update translation files
Ordered build - qwt then src
Fixes for Manual Ride Entry
Comment added and replace tabs with spaces
v2.1dev - Allow ride to be added with no Average HR
Update documentation
Added v2.0.0 information.
Greg Lonnon (3):
GPX RideFile Support
changes to the markers in google maps.
Added a QFilesystemWatcher to monitor adding files to the workout directory.
Ilja Booij (1):
fix 'Wrong distance on Tacx caf file import'
Jamie Kimberley (6):
Update download page to reflect build of mac 10.4
force use of no elide and scrollbars in main tab
Update user guide steps 1 and 2
clean up wishlist web page
Add other TRIMP metrics to performance manager.
update French Translation
Justin Knotzke (2):
Cycleops Test Ride
Update of German translation by LukeNRG
Keisuke Yamaguchi (1):
Update Japanese translation files
LukeNRG (4):
German Translation
Updated German Translation
Updated German Translations
German Translations
Mark Liversedge (59):
Updated www.goldencheetah.org for v2.0 release.
Joule support fixed on download page.
Add link to wiki from the website.
Mac PPC binary added to downloads page.
Translations Bonanza!
Fix Computrainer with Stereo FTDI adaptor
Fix 'Save data' in RealtimeWindow
Updated Czech translation
Fix Wko GPS parsing on 64bit
Fix Virtual Power for Fluid2
Revert "Add Spanish Translation and Enable Metrics Translation"
Fix WKO parser for Ergomo users
Better rounding of time in AllPlot
Fix WKO+ file reader GPS 'drops'
Remove console error for seasons.xml
Fix RideSummaryWindow crash
Fix RideEditor find dialog for 'between'
Fix .man crash in CP plot
Better support for Negative, Inf, NaN and High Values
Fix annoying gap in CP curve.
Fix Save when old .bak exists
Fix SummaryWindow crash
Don't allow Nan or Inf sample values
Fix LogY Intervals on Histogram
Fit files sometimes go backwards
Guess ride date time for Poweragent CSV files
Add JSON support to v2.1
Fix date/time handling when importing rides
Update .gitignore for Lex/yacc
Fix Macro device data crash
Support FR310xt latest firmware
Fix FitRideFile for header change
Fix Download Ride Dialog instructions refresh
SplitRide overwrites existing file
Revert "SplitRide overwrites existing file"
Fix Split Ride file loss bug
Check Date/Time unique
Summary fixups
Updated translation files.
Add virtual power for LeMond Revolution
Use strtod() to convert text to double
Fix FTDI Adaptor on Linux and Mac
Better Bounds Checking in RideFile::intervalBegin()
Forward support in .json for temp/slope
Add Virtual Power for 1UP USA bike trainer
FitRideFile distance of zero bug
Disable roch text in metadata
Fix zero speed in TxtRideFile for Imperial units
Support TrainerRoad.com TCX Files/Tcx speed in meters/sec The TCX parser ignored samples where distance is
Fix crash if TRIMP zones > 5
Fix PWX file intervals
Fix SEGV on empty/dodgy FIT files
Mitsukuni Sato (1):
Japanese Translation
Rainer Clasen (8):
Added SRM5 file format read support
whitespace cleanup
fix reading signed values from srm files
Fit: ignore unknown message types
Fit: support big/little endian data
Fit: handle unknown fields gracefully
SrmRideFile: turned assertions into graceful fail
FitRideFile: turned assertions into graceful fail
Roberto Massa (1):
Italian Translation
Roderic Campbell (1):
There was what looked like a copy paste error. I changed the zone 7 label to the appropriate 7 instead of
Steven Gribble (1):
This patch adds an air density (rho) calculator feature to GoldenCheetah.
Thomas Irps (1):
Portuguese translation
Tim Shaffer (1):
Make the default date range for Performance Manager a user preference.
kohasa (1):
enabled editing interval duration by keyboard.
lemaitre (1):
Updating of the French translation
unknown (1):
This patch correct altitude for TCX files converted from FIT files These files doesn't have altitude for e
</pre>
</p>
<pre>
$ git checkout release_3.0.1
$ git shortlog v3.0-SP2 ^v3.0-SP1
Christian Stade-Schuldt (3):
Added virtual power support for Tacx Blue Twist trainer
Added virtual power support for Tacx Blue Motion trainer
added Tacx Blue Twist and Tacx Blue Motion to Device Wizard
Damien (6):
AerobicDecoupling: Correct formula fix #721
AllPlot: Handle noTemp with no smooth fix #634
FitRideFile: correct issue with unknown field type in fit file fix #724
FitRideFile: We may need to add string support
FitRideFile: wrong copy-paste
GoogleMapControl: Small fix for Google Map fix #814
Gareth Coco (1):
Update translations for upcoming release
Jaime Jofre (1):
Fixes issue #791
Mark Liversedge (7):
Increase Starting LTS limits
Fix WKO import - another optpad constant
Compromise on import
Fix SEGV on bad file/header in FitRideFile
Revert "Fix SEGV on bad file/header in FitRideFile"
Another attempt to fix SEGV in FitRideFile
Release 3.0-SP2
Stig B. Dørmænen (1):
Made the fault handling in TPDownload a little more user friendly
Walter (1):
using milliseconds for delta_t when calculating speed, supports Suunto Ambit gpx datafiles
alexdelli (1):
Added Support for Elite Supercrono PowerMag
</pre>

View File

@@ -0,0 +1,252 @@
<p>
<font face="arial,helvetica,sanserif">
<big><strong>GoldenCheetah 2.1</strong></big>
</font>
</p>
<p>
New Features and Enhancements
<ul>
<li>FIT file support for Mac OSX - Rainer Clasen</li>
<li>SRM 5 - Rainer Clasen</li>
<li>Aerolab Improvements - Damien Grauser</li>
<li>O-Sync Macro X device support - Damien Grauser</li>
<li>Air density (RHO) Calculator - Steven Gribble</li>
<li>Virtual Power - Darren Hague</li>
<li>GoldenCheetah JSON - Mark Liversedge</li>
<li>Support TrainerRoad.com TCX Files - Mark Liversedge</li>
<li>Garmin GPX - Greg Lonnon</li>
<li>Sigma SLF/SMF - Frank Zschockelt</li>
</ul>
</p>
<p>
Internationalisation
<ul>
<li>Czech (David Kramar)</li>
<li>French (Damien Grauser, Guillaume LeMaitre)</li>
<li>German (Alexander Pietsch)</li>
<li>Italian (Robert Masso)</li>
<li>Portugese (Thomas Irps)</li>
<li>Portugese-Brazil (Bruno Assis)</li>
<li>Japanese (Mitsukuni Sato, Keisuke Yamaguchi)</li>
<li>Spanish (Alejandro Martinez)</li>
</ul>
</p>
<p>
Development Builds
<ul>
<li>Gareth Coco</li>
<li>Jamie Kimberley</li>
</ul>
</p>
<p>
Full Change Log
<pre>
Alejandro Martinez (7):
Add Spanish Translation and Enable Metrics Translation
Add Spanish Translation & Fix Translation Issues
Set UTF-8 in charts,metadata and seasons xml files
Add HrZones to Weekly Summary and Fix Spanish Translation
Update Spanish Translation
Enable 3d Plot Translation and include spanish translation
Rho Estimator Translation
Bruno Assis (1):
Portugese (Brazil) Translation
Damien (22):
Modify csv import for ergomo file with comma or semicolon separator
Remove error logs for unused datas in ride file
handle showHr/Speed/Cad/Alt state for stacked view
Add summary metrics list to preferences
Correct crash with truncated files
Add PeakPowerHr metric (average HR during peak power)
Altitude scale present with no altitude data.
Bug #178 TRIMP is not updated after modification in Rest Hr Tag -> compute metric after save
Add a setFocus on the Treelist to correct a MacOs Bug of Qt
Modification to handle odd start page and compatible with qt 4.6
Correct interval
Modify TRIMP formula to use time_riding instead of workout time
Modify Aerolab to add interval highlight and zoom + auto offset
Aerolab : Change LCD display to LineEdit
Correct bug in the peakPowerHr formula
Correct encoding in json parser
Correct bug #496 for longitude < -65
Remove Joule warnings
Update french translation for rho estimator
Change speed to double in Bin parser
Correct intialisation of altitude for TCX without altitude
Correct intialisation of altitude for TCX without altitude
Damien Grauser (2):
Update French translation.
O_Sync Macro X device support
Darren Hague (5):
Virtual Power; Better GSC-10 pairing support.
Corrected - to + in CycleOps formula
Use realtime clock for realtime-mode clock
Add virtual power support for BT-ATS trainer
Remove toMSecsSinceEpoch() and work around
David (1):
Updated Czech translations
Eric Brandt (1):
fix realtime mode load timer and lcd sig. digit display issues
Frank Zschockelt (2):
Support for Sigma SLF/SMF file formats
Included 4 sample sigma files in the test/rides directory
Gareth Coco (25):
Changes to map markers
FIT file reader fixes
Set default Smoothing (secs) in Ride Plot to one (1) second
Change start date from UTC to localtime for bin ride file
Make interval period on map user defineable
Reorder liboauth includes
Comment out QwtDesigner build in qwtconfig.pri.in
Changed kph to km/h in displays
Changed KPH to km/h in displays
Update translation .qm files
Update gc_fr.qm for updated French translation
Fixes for RealtimeController
Initialise LAT/LON to zero (0.0) in the parser
Updated Spanish Translation
Add a Portuguese translation
Add a TCX ride exporter
Fix interpolation of lat/lon when missing or 0/0
Allow CdA to lowest possible in AerolabWindow.cpp
Update translation files
Ordered build - qwt then src
Fixes for Manual Ride Entry
Comment added and replace tabs with spaces
v2.1dev - Allow ride to be added with no Average HR
Update documentation
Added v2.0.0 information.
Greg Lonnon (3):
GPX RideFile Support
changes to the markers in google maps.
Added a QFilesystemWatcher to monitor adding files to the workout directory.
Ilja Booij (1):
fix 'Wrong distance on Tacx caf file import'
Jamie Kimberley (6):
Update download page to reflect build of mac 10.4
force use of no elide and scrollbars in main tab
Update user guide steps 1 and 2
clean up wishlist web page
Add other TRIMP metrics to performance manager.
update French Translation
Justin Knotzke (2):
Cycleops Test Ride
Update of German translation by LukeNRG
Keisuke Yamaguchi (1):
Update Japanese translation files
LukeNRG (4):
German Translation
Updated German Translation
Updated German Translations
German Translations
Mark Liversedge (59):
Updated www.goldencheetah.org for v2.0 release.
Joule support fixed on download page.
Add link to wiki from the website.
Mac PPC binary added to downloads page.
Translations Bonanza!
Fix Computrainer with Stereo FTDI adaptor
Fix 'Save data' in RealtimeWindow
Updated Czech translation
Fix Wko GPS parsing on 64bit
Fix Virtual Power for Fluid2
Revert "Add Spanish Translation and Enable Metrics Translation"
Fix WKO parser for Ergomo users
Better rounding of time in AllPlot
Fix WKO+ file reader GPS 'drops'
Remove console error for seasons.xml
Fix RideSummaryWindow crash
Fix RideEditor find dialog for 'between'
Fix .man crash in CP plot
Better support for Negative, Inf, NaN and High Values
Fix annoying gap in CP curve.
Fix Save when old .bak exists
Fix SummaryWindow crash
Don't allow Nan or Inf sample values
Fix LogY Intervals on Histogram
Fit files sometimes go backwards
Guess ride date time for Poweragent CSV files
Add JSON support to v2.1
Fix date/time handling when importing rides
Update .gitignore for Lex/yacc
Fix Macro device data crash
Support FR310xt latest firmware
Fix FitRideFile for header change
Fix Download Ride Dialog instructions refresh
SplitRide overwrites existing file
Revert "SplitRide overwrites existing file"
Fix Split Ride file loss bug
Check Date/Time unique
Summary fixups
Updated translation files.
Add virtual power for LeMond Revolution
Use strtod() to convert text to double
Fix FTDI Adaptor on Linux and Mac
Better Bounds Checking in RideFile::intervalBegin()
Forward support in .json for temp/slope
Add Virtual Power for 1UP USA bike trainer
FitRideFile distance of zero bug
Disable roch text in metadata
Fix zero speed in TxtRideFile for Imperial units
Support TrainerRoad.com TCX Files/Tcx speed in meters/sec The TCX parser ignored samples where distance is
Fix crash if TRIMP zones > 5
Fix PWX file intervals
Fix SEGV on empty/dodgy FIT files
Mitsukuni Sato (1):
Japanese Translation
Rainer Clasen (8):
Added SRM5 file format read support
whitespace cleanup
fix reading signed values from srm files
Fit: ignore unknown message types
Fit: support big/little endian data
Fit: handle unknown fields gracefully
SrmRideFile: turned assertions into graceful fail
FitRideFile: turned assertions into graceful fail
Roberto Massa (1):
Italian Translation
Roderic Campbell (1):
There was what looked like a copy paste error. I changed the zone 7 label to the appropriate 7 instead of
Steven Gribble (1):
This patch adds an air density (rho) calculator feature to GoldenCheetah.
Thomas Irps (1):
Portuguese translation
Tim Shaffer (1):
Make the default date range for Performance Manager a user preference.
kohasa (1):
enabled editing interval duration by keyboard.
lemaitre (1):
Updating of the French translation
unknown (1):
This patch correct altitude for TCX files converted from FIT files These files doesn't have altitude for e
</pre>
</p>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,99 @@
<p>
<font face="arial,helvetica,sanserif">
<big><strong>GoldenCheetah 3.0.1</strong></big>
</font>
</p>
<p>
Full Change Log
</p>
<pre>
$ git checkout release_3.0.0
$ git shortlog v3.0-SP1 ^v3.0
Christian Stade-Schuldt (1):
Updated Tacx Satori Virtual Power values
Damien (16):
CsvRideFile: add temperature and hill slope (%) parsing for ibike csv file
Bin2RideFile: Changes in Summary pages for Data version 5
Bin2RideFile: correct bug for some GPS data
JouleDevice: Remove debug lines
JouleDevice: Remove debug lines
Aerolab: Add a constant altitude option
GoogleMap: Little fix
ShareDialog 2/3 : For version 3.0.1
FitRideFile: Add Calibration Event parsing
Correction for release_3.0.0 branch
AllPlot: plot references lines
OAuthDialog: Remove qDebug()
ShareDialog: Manage null error message
ShareDialog: Add upload to CyclingAnalytics and SelfLoops
FitRideFile: Correction for last Garmin firmware updates In last Garmin firmware there is some (unknow) fields with multi
FitRideFile: - Add Left/Right TorqueEff and Left/Rigth PedalSmooth - Open Truncated file
Dave Waterworth (2):
Fix Tacx Fortius Device Support
More Fortius Fixes
Eric Johnson (1):
Use float division when converting wheel size
G Coco (2):
Reinstate Twitter functionality
Merge StraveDialog and RideWithGPSDialog
Gareth Coco (3):
Website updates for Version 3.0 (cherry picked from commit fb339a527b7937ef8141b90af81cd2fd8017f891)
assert cleanup
Update translation source files
Jaime (1):
Work around to ensure controller key presses aren't missed. Borrowed from Fortius.cpp
Jon Escombe (3):
Detach kernel driver before claiming USB2 ANT+ interface.
Don't reset ANT channel settings on search timeout
Don't reset ANT channel settings on search timeout
Mark Liversedge (18):
Fixup Fit File issue
Fix PWX export SEGV
Deprecate Strava Support
Fix allplot crash on daft power value
Recognise Dave Waterworth
Merge pull request #694 from gcoco/release_3.0.0
Truncate Altitude values
Interval Summary Off By 1 Error
Add /dev/cu.usbserial as a serial device
Merge pull request #713 from gcoco/qwt-fix
V3.0 SP1 RC1 Update
Fix LC_LOCALE on Xcode 5
Fix findBests when no speed/gps
Merge branch 'release_3.0.0' of https://github.com/GoldenCheetah/GoldenCheetah into release_3.0.0
Batch Export remembers last format/dir
Fix 3d grid when users specify background colors
Fix SEGV if metric not available
V3.1 SP1 (3.0.1) released
Rainer Clasen (9):
SrmDevice: fix writing srmio data
inlude srmio version + commit in about dialog
make srmio details in version dialog conditionally
Tcx: fix speed in summary information
fix PWX export: handle end of gaps gracefully.
fix PWX export: always write summarydata
PWX export: keep timestamp + distance precision
PWX: read/write temperature
use pwx for Trainingstagebuch upload
Walter Bürki (1):
adding hr,cad,power,temp of Suunto Ambit gpx files
gcoco (5):
Support Twitter API 1.1
Twitter API change
Kurt Kinetic Road Machine PowerCurve fix
Get rid of qwt compile error about format string.
Add Garmin Forerunner 910XT
</pre>

View File

@@ -3,6 +3,12 @@
<p>
<center>
<p>
<h2><font face="arial,helvetica,sanserif">
Version 2.1.0
</font></h2>
<p>
<p>
<big><font face="arial,helvetica,sanserif">
Ride Summary

View File

@@ -1,12 +1,24 @@
<!-- $Id: users-guide.content,v 1.5 2006/05/27 16:32:46 GoldenCheetah Exp $ -->
<h2><font face="arial,helvetica,sanserif">Version 3.0</font></h2>
<p>
Please dowload the <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-Manual.pdf?raw=true">Manual</a>
for great information on how to use all the functions in Golden Cheetah.
</p>
<p>
You can also see a list of
<a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-FAQ.pdf?raw=true">Frequently Asked Questions (FAQ)</a>.
</p>
<p>
Note that more detailed information is often available on the
<a href ="wiki.html">
Golden Cheetah Wiki</a>.
<h2><font face="arial,helvetica,sanserif">Version 2.1</font></h2>
<p>
What follows is a brief step-by-step guide to installing and setting up
Golden Cheetah.
Golden Cheetah Version 2.1.0.
<p>
<big><font face="arial,helvetica,sanserif">

View File

@@ -1,4 +1,4 @@
infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtsoap-uselib
exists(config.pri):infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtsoap-uselib
TEMPLATE += fakelib
QTSOAP_LIBNAME = $$qtLibraryTarget(QtSolutions_SOAP-2.7)
TEMPLATE -= fakelib

View File

@@ -1,10 +1,10 @@
#include <QtGui/QIcon>
#include <QtGui/QMenu>
#include <QtGui/QPainter>
#include <QtGui/QStyleOption>
#include <QtGui/QMouseEvent>
#include <QtCore/QDebug>
#include <QtGui/QPixmapCache>
#include <QIcon>
#include <QMenu>
#include <QPainter>
#include <QStyleOption>
#include <QMouseEvent>
#include <QDebug>
#include <QPixmapCache>
#include "qtsegmentcontrol.h"

View File

@@ -2,7 +2,7 @@
A whole bunch of stuff here.
*/
#include <QtGui/QWidget>
#include <QWidget>
class QMenu;
class QStyleOption;

View File

@@ -3147,7 +3147,7 @@ void QtSoapHttpTransport::submitRequest(QtSoapMessage &request, const QString &p
{
QNetworkRequest networkReq;
networkReq.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml;charset=utf-8"));
networkReq.setRawHeader("SOAPAction", soapAction.toAscii());
networkReq.setRawHeader("SOAPAction", soapAction.toLatin1());
url.setPath(path);
networkReq.setUrl(url);

6
qwt/.gitignore vendored
View File

@@ -1,6 +0,0 @@
lib
qwtconfig.pri
*.so
moc*.cpp
*.obj
*.o

View File

@@ -1,510 +0,0 @@
Release 6.0.1
===================
Changes
-------
1) Incompatibilities with Qt < 4.6.1 fixed
2) Reduce warnings with pedantic compiler options
3) Examples fixed
4) Legend identifiers of with symbol and line fixed
Release 6.0.0
===================
Changes
-------
1) Qt3 support dropped
2) QwtPlot layout/render code ported from int to double
Exported/printed documents in scalable formats like SVG or PDF
are 100% scalable now.
3) Template base classes introduced for curve and curve data
to be reusable in all plot items displaying series of samples.
4) New plot items
- QwtPlotHistogram
- QwtPlotIntervalCurve ( error bars or displaying the area between 2 curves )
- QwtPlotSpectroCurve ( mapping the z value to a color )
5) Raster items
- QwtMatrixRasterData introduced
- More accurate rendering
- Several API changes
- Thread support for rendering spectrograms
6) QwtPlot::print moved to QwtPlotRenderer
7) Other new classes
QwtColumnSymbol
QwtDoublePoint3D
QwtIntervalSymbol
QwtPlotDirectPainter
QwtSamplingThread
QwtSystemClock
8) QwtPicker and friends reorganized,
QwtPickerTrackerMachine added for displaying a rubberband for
mouse moves. Enter/Leave added to events, that are handled
by the picker machines.
9) QwtScaleWidget::LayoutFlag added
Introduced to control the direction of vertical axis titles.
10)QwtWeedingCurveFitter added
QwtWeedingCurveFitter is an implementation of the Douglas/Peuker
algorithm, that can be used to reduce the number of curve points.
It can be very useful to improve the performance of painting
curves of many lines ( f.e. by implementing different level of details ).
11)Legend code update for representing different pixmaps for different
types of plot items.
12)Copy operators removed, using pointers instead
13)QwtPolarPoint from qwtpolar added
14)QwtThermo
Optional QwtColorMaps added
15)Interfaces and code of all sliders/dials cleaned up.
QApplication::globalStrut(), styled backgrounds ...
Release 5.2.2
===================
Bug Fixes
---------
1) QwtSplineCurveFitter
Rounding to integers values removed
2) QwtPlot
initial size of 200x200
3) QwtPlotPrintFilter, QwtPlot::print
handling of background color in QwtPlot::print
4) QwtPlotPrintFilter
Problem with colored plot titles fixed
5) QwtPlotItem
Crash fixed, when changing the z order of attached items
6) QwtLinearScaleEngine, QwtLog10ScaleEngine
Several minor fixes
Release 5.2.1
===================
Bug Fixes
---------
1) Export declarations removed from qwt_valuelist.h to avoid
compiler errors with Qt 4.6 + certain compilers on Windows.
2) QwtScaleDraw
Wrong border dist hints for unregular scale divisions fixed
Layout calculation for the tick labels fixed.
The layout was wrong by 1 pixel for top/left/bottom axes.
On a left axis without a title the labels were sometimes cut off.
3) QwtPainter
Splits polylines for all pens to avoid a bottleneck of the
raster paint engine.
4) QwtScaleWidget
Calculation of the colorbar position fixed ( spacing/margin )
5) QwtPlotCurve
Wrong clipping rect fixed
6) QwtPicker
QwtPicker::setTrackerFont() fixed.
Recursion on the Mac, when constructing the rubberband fixed.
Workaround for a Qt3 bug added that is responsible for left aligning
all tracker texts to the canvas.
Changes
-------
1) Project files adopted for symbian
2) qwt.pro
CONFIG += ordered added for using make -j
CONFIG += silent added
Release 5.2.0
===================
Changes
-------
1) Ported to Qt 4.5.x
2) Scaling of non cosmetic pens (for printing to devices in high resolution)
3) Clipping of polygons for SVG rendering
4) QwtRect removed
use QwtClipper instead
5) QwtPlotRescaler
Introduced
6) QwtDoubleInterval
BorderMode introduced
7) QwtPlotCurve
Performance of incremental curve painting ( = draw(from, to) ) improved.
8) QwtLegendItem
setIdentfierMode renamed to setIdentifierMode
9) QwtPlotCanvas::replot() introduced
code from QwtPlot::replot shifted
10)QwtPlot
drawCanvas(), updateAxes() changed from protected to public
11)QwtScaleEngine
loMargin/hiMargin renamed to lowerMargin/upperMargin
12)QwtScaleDiv
lBound/hBound renamed to lowerBound/upperBound
13)QwtSpline
cofficientA/B/C introduced
14)QwtDial
counter clockwise scales introduced
15)QwtPlotMarker
Vertical text labels
16)doc/qwt-5.2.0.qch added foe browsing the Qwt docs in the Qt assistant
Bug Fixes
---------
1) QwtLinearScaleEngine
Rounding problems fixed
2) Again some print layout problems fixed
3) QwtPlotScaleItem: 1 pixel offset fixed
4) QwtPlotSpectrogram, clipping of contour lines
against the bounding rect
5) QwtPlotZoomer::setZoomStack for stacks with unlimited depth
6) Printing of rotated tick labels
Release 5.1.1
===================
Bug Fixes
---------
1) Several compiler incompatibilities fixed
2) DBL_EPSILON removed
Using DBL_EPSILON in the calculations of the dials/sliders and the
scale engines leads to problems with the inaccuracy of floating points.
The behaviour has been reverted to 5.0.x.
3) QwtSlider/QwtKnob
setScaleDraw() fixed.
4) QwtRect
Pointless private declaration removed
Release 5.1.0
===================
Changes
-------
1) QwtSymbol::copy introduced
Now it is possible to use derived symbol classes for curves
2) QwtPlotScaleItem introduced
A new type of plot item for displaying axes on the canvas
3) QwtClipper added
A collection of clipping algos
4) Using DBL_EPSILON
This change allows smaller intervals for sliders/dials
5) QwtPanner
setOrientation() added.
6) QwtPlot
axisStepSize() added
clear is virtual now
7) QwtPlotPrintFilter
PrintCanvasBackground splitted into PrintBackground, PrintFrameWithScales
8) QwtPlotZoomer
setZoomStack() added
9) Changes for the QwtPolar package
QwtLegendItemManager introduced
QwtMagnifier introduced
10)Suffix rules added in qwtconfig.pri for different targets for
debug/release builds.
Bug Fixes
---------
1. QwtAbstractScaleDraw::setAbstractScaleDraw
Reinitialization problem fixed
2. QwtLegendItem
key event handlers fixed
3. QwtPicker
solaris-cc compiler problem fixed
4. Inaccurate mapping of scale to widget coordinates fixed
5. QwtPlotCurve::draw
Updates for Qt 4.3 added
6. QwtPlotLayout
AlignToCanvas layout calculation fixed
7. QwtPlot::print
Workaround for a QPen initialization problem,
when printing to Pdf, added
8. QwtText
Layout of rich text documents fixed
9. Designer
Handling of QwtScaleWidget fixed
10. realtime example
Qt::WA_PaintOutsidePaintEvent added, ScrollZoomer fixed
11. Several others I have forgotten
Release 5.0.2
===================
Bug Fixes
---------
1. QwtPlotCurve::Xfy curve type fixed
2. Memory leak in QwtLegend fixed
3. Vertical alignment of rich texts fixed
4. Workaround for a Qt4 bug added, that produces horrible performance
when painting curves with a pen width > 1.
5. Background for the tracker text of QwtPickers fixed.
Improved (faster + better rendered texts) implementation of
painting tracker texts, using capabilities of Qt >= 4.3.
6. QwtArrowButton/QwtCounter: workaround for layout bug ( Qt < 4.3 )
of the Cleanlook style added.
7. A couple of minor fixes
Changes
-------
1. QSvgGenerator added to the bode example
Release 5.0.1
===================
Changes
-------
1. A couple of problems, when building Qwt fixed.
2. Displaying Rich Text with Qt 4.x fixed
Release 5.0.0
===================
Platforms
---------
Support of Qt3 and Qt4. Qt2 is not supported any longer.
Key features
------------
1. Redesign of plot items. Makes it much easier to develop
individual items.
2. Redesign of the scale classes. All calculations are
collected in scale engines, where the application can
implement it´s own (f.e log2, or date scales). Now it´s
also possible to have individual and completely irregular scales
3. Redesign of the QwtText classes. The MathML renderer of
the Qt4 solutions package is embedded.
work for all expressions/situations.
4. New classes for navigating: QwtPanner, QwtMaginfier
5. Spectrogram/Contour plots and other classes for displaying
raster data added.
Changes
-------
5.0.0 is by far the release with the most changes in the history of Qwt
- too many to make list.
Release 4.2.0/0.4.2
===================
License
--------
A couple of exceptions to the LGPL with the intention to allow static
linking with commercial applications. See COPYING.
Key features:
-------------
1. Designer plugin
2. Rich Text support ( f.e. E = m * c<sup>2</sup> ) added.
3. QwtDial class family added (QwtDial, QwtCompass, QwtAnalogClock, ...)
4. QwtPicker class family added. Includes QwtPlotZoomer, a complete
implementation of recursive zooming.
5. Device metrics independent printing of QwtPlot. (QPrinter::HighResolution)
6. QwtPlot::setCurveBrush(), QwtCurve::setBrush() added. The area
between curve and baseline will be filled with this brush.
7. Rotation of axis tick labels added. Very useful for axis with long
labels like time scales ...
8. Added a new abstract QwtData class to plot data from almost any type of
container class.
9. QwtDoublePoint, QwtDoubleSize, QwtDoubleRect double counterparts
for QPoint, QSize, QRect.
10. First steps to support Qtopia. All examples can be compiled and started
in the qvfb emulator.
Changes:
---------
1. Rewrite of QwtLegend/QwtLegendItem (no QTable anymore)
2. Each plot item will be painted, even if one of the axis it is
attached to is disabled. (like in all other releases beside 0.4.1)
3. Code for double buffering moved to a new class QwtPaintBuffer.
Double buffering can be enabled/disabled now.
4. QwtPainter, QwtMetricsMap, QwtLayoutMetrics added
Hide paint device metrics dependencies.
5. Layout code rewritten and moved to a new class QwtPlotLayout
New layout options canvasMargin(), alignCanvasToScales()
6. QwtPlot: sizeHint() != minimumSizeHint()
9. Internal plot data are private again. A couple of get methods
added instead.
10. canvas repaints triggered by paint events. Enables event filtering
11. QwtPlot::drawCanvasItems added. In opposite to QwtPlot::drawCanvas
it is used by the printing code too.
12. qwtMax, qwtMin, qwtInt mapped to QMAX, QMIN, qRound from qglobal.h
13. operator= for plot item classes changed.
14. readOnly property added for sliders.
15. valid flag added for QwtDblRange
16. QwtCounter wrap around policy: a counter under- or overflow sets
focus to the smallest up/down button and disables counting.
A space bar keypress release event re-enables counting.
17. QwtPushButton added. A class that adds rich text and alignments
features to QPushButton, like they are used in QLabel
18. Clipped painting code moved from QwtCurve to QwtPainter/QwtRect
19. Canvas cache added to optimize trivial repaints.
20. QwtPlot::drawCurve added for incremental curve data
21. QwtSliderBase, readOnly, isValid added
22. Added filtering of the colors of the title and scales to QwtPrintFilter.
23. Support of QT_NO_CAST_ASII and QT_NO_COMPAT added
24. Batch file added for generating Visual Studio project files
25. QwtPlotCurve, QwtPlotMarker, QwtPlotGrid: more methods public
26. QwtPlot::setLegendPosition added
27. A lot of changes I don't remember, ... sorry.
Bugfixes:
---------
1. Autodetection of painter redirection. QPixmap::grabWidget() works
with Qwt Widgets again.
2. QwtSlider: Rounding double->int conversions instead of simple casts.
3. Bad additional line, connected to the first curve point, when zooming
deep, fixed.
4. QwtMarker: Painting of symbols with width != height fixed
5. QwtPlot::plotMouseXXX/canvasMap pixel coordinates synced.
Now both include the canvas frame.
6. Layout fixed for QwtScaleDraws without tick labels
8. Tab focus chains fixed, focus indications added.
9. Support QwtAutoScale::Inverted when autoScale is off also.
10. Keyboard control, focus indications added.
11. Improved QStyle awareness.
12. Printing of plots with disabled axes
Examples
--------
1. New example linux/cpustat added. Runs also on non linux boxes
with dummy values. Beside showing a couple of features that
are new with 0.4.1 and 0.4.2, it shows how to extend and customize
a QwtPlots.
2. Added new example event_filter to demonstrate event filtering.
This example shows how to add additional controls to the scales,
how to translate mouse clicks on the scales into signals and
how to move points on the canvas.
3. realtime example shows how to use scrollbars when zooming
Release 0.4.1
============
Changes:
---------
1. Platform independent project files. makefiles directory removed.
2. RPM spec file template added.
3. __declspec formalism added for Win32 DLLs. Requires
'DEFINES += QWT_DLL' in the .pro file.
4. QString used for visible texts.
5. Code for error curves removed. These type of features should be
implemented in derived curve classes.
6. A lot of Qt 1.2 related code removed/replaced.
7. QwtColorFilter, QwtPixFrame removed. QwtPlotPixFrame renamed
to QwtPlotCanvas.
8. qmodules.h aware. Skips QwtLegend in case of !QT_MODULE_TABLE
9. All Widgets including QwtPlot optimized to reduce flicker
during resize/repaint.
10. QwtPlot curves/markers can be disabled/enabled to hide/show individual
curves without removing the curves from the plot.
11. Internal maps removed from QwtCurve. QwtCurve::setMap, QwtCurve::setRect,
QwtCurve::setRange removed.
Feature additions:
------------------
1. Printing
QwtPlot::print prints to any type of QPaintDevice now.
Hardcoded printer attributes margin, creator and document title have
been removed and must/can be set by the applications now.
Printing of background and legends added. QwtColorFilter replaced
by QwtPlotPrintFilter.
2. Layout
Many layout fixes and additions. Now all Widgets behave well in
QLayouts and provide sensible sizeHints. QwtPlot::setMargin(int) added.
Fieldwidth added for QwtPlot::setAxisFormat for application that need
range independent width. Title and axis title are Qt:Alignment aware.
Qt::WordBreak or multiline titles are possible.
3. Legend
En/Disabling of single curves in the legend added.
QwtPlot::setAutoLegend added.
4. Extensibility
QwtPlot::insertCurve + QwtPlot::insertMarker added. Now derived
classes of QwtPlotCurve and QwtPlotMarker can be added. Virtual
methods provided by QwtPlotCurve for sub-classing.
QwtScale::setScaleDraw + QwtPlot::setAxisScaleDraw + some virtual
methods for QwtScaleDraw added. Application can implement individual
axis labels now.
5. Sliders
QWheelEvent added. The MouseWheel stepsize is controlled by the
Scroll Page Size. QwtWheel::setWheelWidth added. QwtKnob::setSymbol,
QwtKnob::symbol added.
Bugfixes:
---------
1. Workaround for spontanous curves resulting from overruns
when zooming too deep.
2. Wrong QColorGroup::ColorRole for background colors fixed.
Necessary for several non default QStyles.
3. QwtWheel fixed for vertical wheels. Better color support.
4. QwtSlider fixed.
5. Many forgotten others
Release 0.4.0
============
Bugfixes:
---------
1. A few occurences of the boolean literal \c false were changed into macro
\c FALSE for cross compiler compatibility.
2. A few local variables in member functions were renamed to suppress
warnings issued by really picky compilers about global/class variables
being hidden.
3. In qwt_legend.h, a fully qualified name was used in a class declaration.
The HPUX compiler chokes on this (and it's ugly), so it was fixed.
4. Macro M_2PI is now only defined is this hasn't already been done by the
system's clib.
Feature additions:
------------------
1. Qwt now works with Qt3.0. In order to achieve this, QwtLegend now no
longer derives from QTableView, but from QTable. This seems to have had
quite a few consequences. Kudo's to Uwe Rathmann for uploading this nice
fix to the CVS tree.
2. Getters for a plot's title and title font have been added.
Release 0.3.0
============
License:
--------
1. The license has changed from GPL to LGPL.
Bugfixes:
---------
1. The makefiles for win32 caused object files to have extension .o instead of
.obj. The 'propagate' file was changed to fix this, using tmake's target
platform flag.
2. There were problems with rint() on win32 platforms. rint() is a BSD call,
not even available on all unices. All calls to rint(x) have been replaced
by floor(x+.5).
3. Some static class data members were initialized with the value of other
static class data members (from Qt). This caused programs depend on the
initialization order of class members. This is now fixed by replacing the
static properties by static signleton factories.
4. When a plot was zoomed and then printed, curves and markers laying outside
the plot's scale were still printed. The print() function now uses clipping.
Feature additions:
------------------
1. Multi-line plot titles are now supported: the PostScript document name is
not the plot title, with "\n" characters replaced by "--". Geometry
management has been changed to support multi-line titles.
2. In the mailinglist, there were often feature requests for features that
were in fact implemented, but not available through QwtPlot's API. Many
private members have been made protected or even public, to give users
more control. This is poor design, but Qwt will be refactored anyway.
3. Qwt always displayed floats with 5 digits. This was insufficient for many
applications. QwtPlot, QwtScale, QwtAutoScale got some methods to set the
label format. This is a printf like format for the numbers at the scales,
consisting of 'f' and a precision, or 'g' and the significance.
Build system:
-------------
1. The 'makefiles' directory was removed from the cvs tree, and is now only
generated for releases. CVS users should have tmake installed, to generate
the makefiles themselves.
2. The 'examples' directory now uses tmake's 'subdirs' template, to iterate
over all subdirectories and build all examples with one command. There was
allready a makefile for this, but now the process is automated by tmake.
3. Under unix, the library now gets a proper version number. Current version
is 0.3.0.
Documentation:
--------------
1. All documentation is converted to the Doxygen documentation system. The
release contains two settings files, 'Doxygen' and 'Doxygen.users',
generating a developer's and user's manual, respectively.

View File

@@ -1,164 +1 @@
Introduction
============
Qwt uses qmake to build all its components and examples.
qmake is part of a Qt distribution.
qmake reads project files, that contain the options and rules how to
build a certain project. A project file ends with the suffix "*.pro".
Files that end with the suffix "*.pri" are included by the project
files and contain definitions, that are common for several project files.
qwtconfig.pri and qwtbuild.pri are read by all project files of the Qwt
package. qwtconfig.pri is also read by qwt.prf, when building your
application. So the first step is to edit the *.pri files to adjust
them to your needs.
The subdirs template of qmake is known to be buggy when using spaces
in path names. So better don't build Qwt below a path name with spaces.
( Otherwise you might have to run qmake in all subdirs manually ).
Documentation
==========================
Qwt includes a class documentation, that is available in various formats:
- Html files
- PDF document
- Qt Compressed Help (*.qch ) for the Qt assistant or creator.
You can load it "Edit Preferences" -> "Documentation" -> "Add..."
- Man pages ( UNIX only )
Building Qwt
==========================
The easiest way to build Qwt is from the command line - but you insist on
using an IDE don't forget the "make install" step.
A) Unix
--------
qmake
make
make install
If you have installed a shared library it's path has to be known to
the run-time linker of your operating system. On Linux systems read
"man ldconfig" ( or google for it ). Another option is to use
the LD_LIBRARY_PATH (on some systems LIBPATH is used instead, on MacOSX
it is called DYLD_LIBRARY_PATH) environment variable.
If you only want to check the Qwt examples without installing something,
you can set the LD_LIBRARY_PATH to the lib directory
of your local build.
If you didn't enable autobuilding of the examples in qwtconfig.pri
you have to build the examples this way:
cd examples
qmake
make
B) Win32/MSVC
--------
Check that your Qt version has been built with MSVC - not with MinGW !
Please read the qmake documentation how to convert
your *.pro files into your development environment.
F.e MSVC with nmake:
qmake qwt.pro
nmake
nmake install
If you didn't enable autobuilding of the examples in qwtconfig.pri
you have to build the examples this way:
cd examples
qmake examples.pro
nmake
Windows doesn't like mixing of debug and release binaries. Most
of the problems with using the Qwt designer plugin are because
of trying to load a Qwt debug library into a designer release
executable.
It's not possible to load a plugin, that has been built with MinGW
into a Qt Designer/Creator, that has been built with MSVC ( and v.v ).
This is a common reason for problems, when working with prebuild
binaries of the Qt Creator.
C) Win32/MinGW
--------
Check that your Qt version has been built with MinGW - not with MSVC !
Start a Shell, where Qt4 is initialized. ( F.e. with
"Programs->Qt by Trolltech ...->Qt 4.x.x Command Prompt" ).
Check if you can execute "make" or something like "mingw32-make".
qmake qwt.pro
make
make install
If you didn't enable autobuilding of the examples in qwtconfig.pri
you have to build the examples this way:
cd examples
qmake examples.pro
make
Windows doesn't like mixing of debug and release binaries. Most
of the problems with using the Qwt designer plugin are because
of trying to load a Qwt debug library into a designer release
executable.
Don't forget to tell qmake where to find qwt.prf:
qmake -set QMAKEFEATURES ...
D) MacOSX
--------
Well, the Mac is only another Unix system. So read the instructions in A).
In the recent Qt4 releases the default target of qmake is to generate
XCode project files instead of makefiles. So you might need to do the
following:
qmake -spec macx-g++
...
D) Qt Embedded
--------
I only tested Qwt with Qt Embedded in qvfb (Virtual Framebuffer Devivce)
Emulator on my Linux box. To build Qwt for the emulator was as simple as
for a regular Unix build.
F) Symbian
--------
I never tried this platform myself.
Using Qwt
===========
For building a Qwt application with qmake use the Qwt configuration features
file, that has been installed by "make install". When qmake is able to find
it ( http://doc.qt.nokia.com/4.7/qmake-advanced-usage.html#adding-new-configuration-features )
you can simply add "CONFIG += qwt" to your application project file.
If you don't use qmake you have to add the include path to find the Qwt
headers to your compiler flags and the Qwt library to your linker list.
Don't forget to add QWT_DLL to the compiler flags, when you work with a
Qwt-DLLs on Windows.
For using the designer plugin you have to configure the Qt designer/creator
where to look for plugins. This can be done by setting the QT_PLUGIN_PATH or
using a qt.conf file ( see http://doc.qt.nokia.com/4.7/deployment-plugins.html ).
Beside the plugin the Qwt library itsself also needs to be known to the Designer/Creator
( see LD_LIBRARY_PATH, PATH ... above ).
Good luck !
see doc/html/qwtinstall.html

View File

@@ -2,7 +2,8 @@
The Qwt Widget Library
----------------------
Qwt is an extension to the Qt GUI library from Troll Tech AS.
Qwt is an extension to the libraries of the Qt Project.
The Qwt library contains widgets and components which are
primarily useful for technical and scientifical purposes.
It includes a 2-D plotting widget, different kinds of sliders,

38
qwt/TODO Normal file
View File

@@ -0,0 +1,38 @@
Qwt TODO list
Ideas
------
- Improve Documention
- QAbstractModel -> QwtSeriesData
- Box/Whisker plot item
- QwtSeriesData + functors
- QwtSeriesData/QwtPlotCurve + Level of details (Douglas Peucker)
- Common zoom stack for all navigation objects
- Watermark Item
- Contour algorithm for vectors: http://apptree.net/conrec.htm
- QwtPlotCanvas rendered via FBO, PBO
- Time/Date scale engine
- TeX texts
- Grid of QwtPlots
- Interval scale labels ( between 2 ticks )
- More than 4 axes
- QwtIntervalSymbol + QPainterPath/...
- QwtPlotScene + breaking composite architecture
- Using QStaticText for markers ( and scales ? )
- Scales/Grid item like in QwtPolarGrid
- Container for a 2D matrix
- Waterfall plots
- transform/invTransform for polygons and lines
- cursor item
- line marker with a line from the position to the axis
- quadtree
- QwtText supporting Qt::TextElideMode
- Multitouch events
- QwtKnob/QwtDial fixed contents size mode
- controls ( f.e QwtWheel ) with a very dark palette
Bugs/Change requests
--------------------
- Remove QwtScaleTransformation::copy()
- Reference value for QwtThermo
- Transparent canvas background + backingstore

326
qwt/admin/svn2package.sh Executable file
View File

@@ -0,0 +1,326 @@
#! /bin/sh
#
# Generates a Qwt package from sourceforge svn
#
# Usage: svn2package.sh [-b|--branch <svn-branch>] [packagename]
#
##########################
# usage
##########################
function usage() {
echo "Usage: $0 [-b|--branch <svn-branch>] [-s|--suffix <suffix>] [-html] [-pdf] [-qch] [packagename]"
exit 1
}
################################
# checkout
################################
function checkoutQwt() {
if [ -x $2 ]
then
rm -r $2
if [ $? -ne 0 ]
then
exit $?
fi
fi
svn -q co https://svn.code.sf.net/p/qwt/code/$1/$2
if [ $? -ne 0 ]
then
echo "Can't access sourceforge SVN"
exit $?
fi
if [ "$3" != "$2" ]
then
rm -rf $3
mv $2 $3
fi
}
##########################
# cleanQwt dirname
##########################
function cleanQwt {
cd $1
if [ $? -ne 0 ]
then
exit $?
fi
find . -name .svn -print | xargs rm -r
rm -f TODO
rm -rf admin
rm -rf doc/tex
PROFILES="qwtbuild.pri"
for PROFILE in $PROFILES
do
sed -i -e 's/= debug/= release/' $PROFILE
sed -i -e 's/= release_and_release/= debug_and_release/' $PROFILE
done
HEADERS=`find . -type f -name '*.h' -print`
SOURCES=`find . -type f -name '*.cpp' -print`
PROFILES=`find . -type f -name '*.pro' -print`
PRIFILES=`find . -type f -name '*.pri' -print`
for EXPANDFILE in $HEADERS $SOURCES $PROFILES $PRIFILES
do
expand -4 $EXPANDFILE > $EXPANDFILE.expand
mv $EXPANDFILE.expand $EXPANDFILE
done
for SRCFILE in $SOURCES $PROFILES $PRIFILES
do
sed -i -e '/#warning/d' $SRCFILE
done
if [ "$SUFFIX" != "" ]
then
sed -i -e "s/\$\$QWT_VERSION-svn/\$\$QWT_VERSION-$SUFFIX/" qwtconfig.pri
sed -i -e "s/\$(QWTVERSION)/$VERSION-$SUFFIX/" doc/install.dox
else
sed -i -e "s/\$\$QWT_VERSION-svn/\$\$QWT_VERSION/" qwtconfig.pri
sed -i -e "s/\$(QWTVERSION)/$VERSION/" doc/install.dox
fi
cd - > /dev/null
}
##########################
# createDocs dirname
##########################
function createDocs {
ODIR=`pwd`
cd $1
if [ $? -ne 0 ]
then
exit $?
fi
if [ "$SUFFIX" != "" ]
then
export QWTVERSION=$VERSION-$SUFFIX
else
export QWTVERSION=$VERSION
fi
cp Doxyfile Doxyfile.doc
if [ $GENERATE_MAN -ne 0 ]
then
sed -i -e '/GENERATE_MAN/d' Doxyfile.doc
echo 'GENERATE_MAN = YES' >> Doxyfile.doc
fi
if [ $GENERATE_PDF -ne 0 ]
then
# We need LateX for the qwtdoc.pdf
sed -i -e '/GENERATE_LATEX/d' -e '/GENERATE_MAN/d' Doxyfile.doc
echo 'GENERATE_LATEX = YES' >> Doxyfile.doc
echo 'GENERATE_MAN = YES' >> Doxyfile.doc
# sed -i -e '/INLINE_INHERITED_MEMB/d' Doxyfile.doc
# echo 'INLINE_INHERITED_MEMB = NO' >> Doxyfile.doc
fi
if [ $GENERATE_QCH -ne 0 ]
then
sed -i -e '/GENERATE_QHP/d' Doxyfile.doc
echo "GENERATE_QHP = YES" >> Doxyfile.doc
fi
cp ../INSTALL ../COPYING ./
doxygen Doxyfile.doc > /dev/null 2>&1
if [ $? -ne 0 ]
then
exit $?
fi
rm Doxyfile.doc Doxygen.log INSTALL COPYING
rm -r images
if [ $GENERATE_PDF -ne 0 ]
then
cd latex
make > /dev/null 2>&1
if [ $? -ne 0 ]
then
exit $?
fi
cd ..
mkdir pdf
mv latex/refman.pdf pdf/qwtdoc-$VERSION.pdf
rm -r latex
fi
cd $ODIR
}
##########################
# posix2dos filename
##########################
function posix2dos {
# At least one unix2dos writes to stdout instead of overwriting the input.
# The -q option is always enabled in stdin->stdout mode.
unix2dos <$1 >$1.dos
mv $1.dos $1
}
##########################
# prepare4Win dirname
##########################
function prepare4Win {
cd $1
if [ $? -ne 0 ]
then
exit $?
fi
rm -rf doc/man 2> /dev/null
# win files, but not uptodate
BATCHES=`find . -type f -name '*.bat' -print`
HEADERS=`find . -type f -name '*.h' -print`
SOURCES=`find . -type f -name '*.cpp' -print`
PROFILES=`find . -type f -name '*.pro' -print`
PRIFILES=`find . -type f -name '*.pri' -print`
PRFFILES=`find . -type f -name '*.prf' -print`
for FILE in $BATCHES $HEADERS $SOURCES $PROFILES $PRIFILES $PRFFILES
do
posix2dos $FILE
done
cd - > /dev/null
}
##########################
# prepare4Unix dirname
##########################
function prepare4Unix {
cd $1
if [ $? -ne 0 ]
then
exit $?
fi
cd - > /dev/null
}
##########################
# main
##########################
QWTDIR=
SVNDIR=trunk
BRANCH=qwt
SUFFIX=
VERSION=
GENERATE_DOC=0
GENERATE_PDF=0
GENERATE_QCH=0
GENERATE_MAN=0
while [ $# -gt 0 ] ; do
case "$1" in
-h|--help)
usage; exit 1 ;;
-b|--branch)
shift; SVNDIR=branches; BRANCH=$1; shift;;
-s|--suffix)
shift; SUFFIX=$1; shift;;
-html)
GENERATE_DOC=1; shift;;
-pdf)
GENERATE_DOC=1; GENERATE_PDF=1; shift;;
-qch)
GENERATE_DOC=1; GENERATE_QCH=1; shift;;
*)
QWTDIR=qwt-$1 ; VERSION=$1; shift;;
esac
done
if [ "$QWTDIR" == "" ]
then
usage
exit 2
fi
QWTNAME=$QWTDIR
if [ "$SUFFIX" != "" ]
then
QWTDIR=$QWTDIR-$SUFFIX
fi
TMPDIR=/tmp/$QWTDIR-tmp
echo -n "checkout to $TMPDIR ... "
checkoutQwt $SVNDIR $BRANCH $TMPDIR
cleanQwt $TMPDIR
echo done
if [ $GENERATE_DOC -ne 0 ]
then
echo -n "generate documentation ... "
export VERSION # used in the doxygen files
createDocs $TMPDIR/doc
if [ $GENERATE_PDF -ne 0 ]
then
mv $TMPDIR/doc/pdf/qwtdoc-$VERSION.pdf $QWTDIR.pdf
rmdir $TMPDIR/doc/pdf
fi
if [ $GENERATE_QCH -ne 0 ]
then
mv $TMPDIR/doc/html/qwtdoc.qch $QWTDIR.qch
fi
fi
echo done
DIR=`pwd`
echo -n "create packages in $DIR ... "
cd /tmp
rm -rf $QWTDIR
cp -a $TMPDIR $QWTDIR
prepare4Unix $QWTDIR
tar cfj $QWTDIR.tar.bz2 $QWTDIR
rm -rf $QWTDIR
cp -a $TMPDIR $QWTDIR
prepare4Win $QWTDIR
zip -r $QWTDIR.zip $QWTDIR > /dev/null
rm -rf $TMPDIR $QWTDIR
mv $QWTDIR.tar.bz2 $QWTDIR.zip $DIR/
echo done
exit 0

View File

@@ -11,37 +11,97 @@ QWT_ROOT = $${PWD}/..
include ( $${QWT_ROOT}/qwtconfig.pri )
include ( $${QWT_ROOT}/qwtbuild.pri )
include ( $${QWT_ROOT}/qwtfunctions.pri )
CONFIG( debug_and_release ) {
# When building debug_and_release the designer plugin is built
# for release only. If you want to have a debug version it has to be
# done with "CONFIG += debug" only.
message("debug_and_release: building the Qwt designer plugin in release mode only")
CONFIG -= debug_and_release
CONFIG += release
}
contains(QWT_CONFIG, QwtDesigner) {
CONFIG += qt designer plugin
CONFIG += qt plugin
CONFIG += warn_on
greaterThan(QT_MAJOR_VERSION, 4) {
QT += designer
}
else {
CONFIG += designer
}
TEMPLATE = lib
TARGET = qwt_designer_plugin
DESTDIR = plugins/designer
INCLUDEPATH += $${QWT_ROOT}/src
DEPENDPATH += $${QWT_ROOT}/src
contains(QWT_CONFIG, QwtFramework) {
LIBS += -F$${QWT_ROOT}/lib
}
else {
LIBS += -L$${QWT_ROOT}/lib
}
IPATH = $${INCLUDEPATH}
qtAddLibrary(qwt)
INCLUDEPATH = $${IPATH}
INCLUDEPATH += $${QWT_ROOT}/src
DEPENDPATH += $${QWT_ROOT}/src
contains(QWT_CONFIG, QwtDll) {
win32 {
DEFINES += QT_DLL QWT_DLL
contains(QWT_CONFIG, QwtDesignerSelfContained) {
QWT_CONFIG += include_src
}
} else {
# for linking against a static library the
# plugin will be self contained anyway
}
contains(QWT_CONFIG, include_src) {
# compile all qwt classes into the plugin
include ( $${QWT_ROOT}/src/src.pri )
for( header, HEADERS) {
QWT_HEADERS += $${QWT_ROOT}/src/$${header}
}
for( source, SOURCES ) {
QWT_SOURCES += $${QWT_ROOT}/src/$${source}
}
HEADERS = $${QWT_HEADERS}
SOURCES = $${QWT_SOURCES}
} else {
# compile the path for finding the Qwt library
# into the plugin. Not supported on Windows !
QMAKE_RPATHDIR *= $${QWT_INSTALL_LIBS}
contains(QWT_CONFIG, QwtFramework) {
LIBS += -F$${QWT_ROOT}/lib
}
else {
LIBS += -L$${QWT_ROOT}/lib
}
qwtAddLibrary(qwt)
contains(QWT_CONFIG, QwtDll) {
win32 {
DEFINES += QT_DLL QWT_DLL
}
}
}

View File

@@ -15,27 +15,28 @@
using namespace QwtDesignerPlugin;
PlotDialog::PlotDialog(const QString &properties, QWidget *parent):
QDialog(parent)
PlotDialog::PlotDialog( const QString &properties, QWidget *parent ):
QDialog( parent )
{
setWindowTitle("Plot Properties");
setWindowTitle( "Plot Properties" );
QLineEdit *lineEdit = new QLineEdit(properties);
connect(lineEdit, SIGNAL(textChanged(const QString &)),
SIGNAL(edited(const QString &)));
QLineEdit *lineEdit = new QLineEdit( properties );
connect( lineEdit, SIGNAL( textChanged( const QString & ) ),
SIGNAL( edited( const QString & ) ) );
QTabWidget *tabWidget = new QTabWidget(this);
tabWidget->addTab(lineEdit, "General");
QTabWidget *tabWidget = new QTabWidget( this );
tabWidget->addTab( lineEdit, "General" );
QPushButton *closeButton = new QPushButton("Close");
connect(closeButton, SIGNAL(clicked()), this, SLOT(accept()));
QPushButton *closeButton = new QPushButton( "Close" );
connect( closeButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch(1);
buttonLayout->addWidget(closeButton);
buttonLayout->addStretch( 1 );
buttonLayout->addWidget( closeButton );
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(tabWidget);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
mainLayout->addWidget( tabWidget );
mainLayout->addLayout( buttonLayout );
setLayout( mainLayout );
}

View File

@@ -15,16 +15,16 @@
namespace QwtDesignerPlugin
{
class PlotDialog: public QDialog
{
Q_OBJECT
class PlotDialog: public QDialog
{
Q_OBJECT
public:
PlotDialog(const QString &properties, QWidget *parent = NULL);
public:
PlotDialog( const QString &properties, QWidget *parent = NULL );
Q_SIGNALS:
void edited(const QString&);
};
Q_SIGNALS:
void edited( const QString& );
};
}

View File

@@ -25,6 +25,7 @@
#ifndef NO_QWT_PLOT
#include "qwt_designer_plotdialog.h"
#include "qwt_plot.h"
#include "qwt_plot_canvas.h"
#include "qwt_scale_widget.h"
#endif
@@ -34,6 +35,8 @@
#include "qwt_thermo.h"
#include "qwt_knob.h"
#include "qwt_slider.h"
#include "qwt_dial.h"
#include "qwt_dial_needle.h"
#include "qwt_analog_clock.h"
#include "qwt_compass.h"
#endif
@@ -42,9 +45,9 @@
using namespace QwtDesignerPlugin;
CustomWidgetInterface::CustomWidgetInterface(QObject *parent):
QObject(parent),
d_isInitialized(false)
CustomWidgetInterface::CustomWidgetInterface( QObject *parent ):
QObject( parent ),
d_isInitialized( false )
{
}
@@ -99,7 +102,7 @@ QString CustomWidgetInterface::whatsThis() const
}
void CustomWidgetInterface::initialize(
QDesignerFormEditorInterface *formEditor)
QDesignerFormEditorInterface *formEditor )
{
if ( d_isInitialized )
return;
@@ -107,8 +110,8 @@ void CustomWidgetInterface::initialize(
QExtensionManager *manager = formEditor->extensionManager();
if ( manager )
{
manager->registerExtensions(new TaskMenuFactory(manager),
Q_TYPEID(QDesignerTaskMenuExtension));
manager->registerExtensions( new TaskMenuFactory( manager ),
Q_TYPEID( QDesignerTaskMenuExtension ) );
}
d_isInitialized = true;
@@ -116,12 +119,12 @@ void CustomWidgetInterface::initialize(
#ifndef NO_QWT_PLOT
PlotInterface::PlotInterface(QObject *parent):
CustomWidgetInterface(parent)
PlotInterface::PlotInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtPlot";
d_include = "qwt_plot.h";
d_icon = QPixmap(":/pixmaps/qwtplot.png");
d_icon = QPixmap( ":/pixmaps/qwtplot.png" );
d_domXml =
"<widget class=\"QwtPlot\" name=\"qwtPlot\">\n"
" <property name=\"geometry\">\n"
@@ -135,21 +138,46 @@ PlotInterface::PlotInterface(QObject *parent):
"</widget>\n";
}
QWidget *PlotInterface::createWidget(QWidget *parent)
QWidget *PlotInterface::createWidget( QWidget *parent )
{
return new QwtPlot(parent);
return new QwtPlot( parent );
}
PlotCanvasInterface::PlotCanvasInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtPlotCanvas";
d_include = "qwt_plot_canvas.h";
d_icon = QPixmap( ":/pixmaps/qwtplot.png" );
d_domXml =
"<widget class=\"QwtPlotCanvas\" name=\"qwtPlotCanvas\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>400</width>\n"
" <height>200</height>\n"
" </rect>\n"
" </property>\n"
"</widget>\n";
}
QWidget *PlotCanvasInterface::createWidget( QWidget *parent )
{
return new QwtPlotCanvas( qobject_cast<QwtPlot *>( parent ) );
}
#endif
#ifndef NO_QWT_WIDGETS
AnalogClockInterface::AnalogClockInterface(QObject *parent):
CustomWidgetInterface(parent)
AnalogClockInterface::AnalogClockInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtAnalogClock";
d_include = "qwt_analog_clock.h";
d_icon = QPixmap(":/pixmaps/qwtanalogclock.png");
d_icon = QPixmap( ":/pixmaps/qwtanalogclock.png" );
d_domXml =
"<widget class=\"QwtAnalogClock\" name=\"AnalogClock\">\n"
" <property name=\"geometry\">\n"
@@ -166,21 +194,21 @@ AnalogClockInterface::AnalogClockInterface(QObject *parent):
"</widget>\n";
}
QWidget *AnalogClockInterface::createWidget(QWidget *parent)
QWidget *AnalogClockInterface::createWidget( QWidget *parent )
{
return new QwtAnalogClock(parent);
return new QwtAnalogClock( parent );
}
#endif
#ifndef NO_QWT_WIDGETS
CompassInterface::CompassInterface(QObject *parent):
CustomWidgetInterface(parent)
CompassInterface::CompassInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtCompass";
d_include = "qwt_compass.h";
d_icon = QPixmap(":/pixmaps/qwtcompass.png");
d_icon = QPixmap( ":/pixmaps/qwtcompass.png" );
d_domXml =
"<widget class=\"QwtCompass\" name=\"Compass\">\n"
" <property name=\"geometry\">\n"
@@ -197,41 +225,47 @@ CompassInterface::CompassInterface(QObject *parent):
"</widget>\n";
}
QWidget *CompassInterface::createWidget(QWidget *parent)
QWidget *CompassInterface::createWidget( QWidget *parent )
{
return new QwtCompass(parent);
QwtCompass *compass = new QwtCompass( parent );
compass->setNeedle( new QwtCompassMagnetNeedle(
QwtCompassMagnetNeedle::TriangleStyle,
compass->palette().color( QPalette::Mid ),
compass->palette().color( QPalette::Dark ) ) );
return compass;
}
#endif
#ifndef NO_QWT_WIDGETS
CounterInterface::CounterInterface(QObject *parent):
CustomWidgetInterface(parent)
CounterInterface::CounterInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtCounter";
d_include = "qwt_counter.h";
d_icon = QPixmap(":/pixmaps/qwtcounter.png");
d_icon = QPixmap( ":/pixmaps/qwtcounter.png" );
d_domXml =
"<widget class=\"QwtCounter\" name=\"Counter\">\n"
"</widget>\n";
}
QWidget *CounterInterface::createWidget(QWidget *parent)
QWidget *CounterInterface::createWidget( QWidget *parent )
{
return new QwtCounter(parent);
return new QwtCounter( parent );
}
#endif
#ifndef NO_QWT_WIDGETS
DialInterface::DialInterface(QObject *parent):
CustomWidgetInterface(parent)
DialInterface::DialInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtDial";
d_include = "qwt_dial.h";
d_icon = QPixmap(":/pixmaps/qwtdial.png");
d_icon = QPixmap( ":/pixmaps/qwtdial.png" );
d_domXml =
"<widget class=\"QwtDial\" name=\"Dial\">\n"
" <property name=\"geometry\">\n"
@@ -248,102 +282,110 @@ DialInterface::DialInterface(QObject *parent):
"</widget>\n";
}
QWidget *DialInterface::createWidget(QWidget *parent)
QWidget *DialInterface::createWidget( QWidget *parent )
{
return new QwtDial(parent);
QwtDial *dial = new QwtDial( parent );
dial->setNeedle( new QwtDialSimpleNeedle(
QwtDialSimpleNeedle::Arrow, true,
dial->palette().color( QPalette::Dark ),
dial->palette().color( QPalette::Mid ) ) );
return dial;
}
#endif
#ifndef NO_QWT_WIDGETS
KnobInterface::KnobInterface(QObject *parent):
CustomWidgetInterface(parent)
KnobInterface::KnobInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtKnob";
d_include = "qwt_knob.h";
d_icon = QPixmap(":/pixmaps/qwtknob.png");
d_icon = QPixmap( ":/pixmaps/qwtknob.png" );
d_domXml =
"<widget class=\"QwtKnob\" name=\"Knob\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>100</width>\n"
" <height>100</height>\n"
" <width>150</width>\n"
" <height>150</height>\n"
" </rect>\n"
" </property>\n"
"</widget>\n";
}
QWidget *KnobInterface::createWidget(QWidget *parent)
QWidget *KnobInterface::createWidget( QWidget *parent )
{
return new QwtKnob(parent);
return new QwtKnob( parent );
}
#endif
#ifndef NO_QWT_PLOT
ScaleWidgetInterface::ScaleWidgetInterface(QObject *parent):
CustomWidgetInterface(parent)
ScaleWidgetInterface::ScaleWidgetInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtScaleWidget";
d_include = "qwt_scale_widget.h";
d_icon = QPixmap(":/pixmaps/qwtscale.png");
d_icon = QPixmap( ":/pixmaps/qwtscale.png" );
d_domXml =
"<widget class=\"QwtScaleWidget\" name=\"ScaleWidget\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>60</width>\n"
" <height>250</height>\n"
" </rect>\n"
" </property>\n"
"</widget>\n";
}
QWidget *ScaleWidgetInterface::createWidget(QWidget *parent)
QWidget *ScaleWidgetInterface::createWidget( QWidget *parent )
{
return new QwtScaleWidget(QwtScaleDraw::LeftScale, parent);
return new QwtScaleWidget( QwtScaleDraw::LeftScale, parent );
}
#endif
#ifndef NO_QWT_WIDGETS
SliderInterface::SliderInterface(QObject *parent):
CustomWidgetInterface(parent)
SliderInterface::SliderInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtSlider";
d_include = "qwt_slider.h";
d_icon = QPixmap(":/pixmaps/qwtslider.png");
d_icon = QPixmap( ":/pixmaps/qwtslider.png" );
d_domXml =
"<widget class=\"QwtSlider\" name=\"Slider\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>200</width>\n"
" <height>60</height>\n"
" <width>60</width>\n"
" <height>250</height>\n"
" </rect>\n"
" </property>\n"
"</widget>\n";
}
QWidget *SliderInterface::createWidget(QWidget *parent)
QWidget *SliderInterface::createWidget( QWidget *parent )
{
QwtSlider *slider = new QwtSlider(parent);
#if 0
slider->setScalePosition(QwtSlider::Bottom);
slider->setRange(0.0, 10.0, 1.0, 0);
slider->setValue(3.0);
#endif
return slider;
return new QwtSlider( parent );
}
#endif
TextLabelInterface::TextLabelInterface(QObject *parent):
CustomWidgetInterface(parent)
TextLabelInterface::TextLabelInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtTextLabel";
d_include = "qwt_text_label.h";
d_icon = QPixmap(":/pixmaps/qwtwidget.png");
d_icon = QPixmap( ":/pixmaps/qwtwidget.png" );
d_domXml =
"<widget class=\"QwtTextLabel\" name=\"TextLabel\">\n"
" <property name=\"geometry\">\n"
@@ -357,117 +399,131 @@ TextLabelInterface::TextLabelInterface(QObject *parent):
"</widget>\n";
}
QWidget *TextLabelInterface::createWidget(QWidget *parent)
QWidget *TextLabelInterface::createWidget( QWidget *parent )
{
return new QwtTextLabel(parent);
return new QwtTextLabel( QwtText( "Label" ), parent );
}
#ifndef NO_QWT_WIDGETS
ThermoInterface::ThermoInterface(QObject *parent):
CustomWidgetInterface(parent)
ThermoInterface::ThermoInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtThermo";
d_include = "qwt_thermo.h";
d_icon = QPixmap(":/pixmaps/qwtthermo.png");
d_icon = QPixmap( ":/pixmaps/qwtthermo.png" );
d_domXml =
"<widget class=\"QwtThermo\" name=\"Thermo\">\n"
" <property name=\"geometry\">\n"
" <rect>\n"
" <x>0</x>\n"
" <y>0</y>\n"
" <width>60</width>\n"
" <height>250</height>\n"
" </rect>\n"
" </property>\n"
"</widget>\n";
}
QWidget *ThermoInterface::createWidget(QWidget *parent)
QWidget *ThermoInterface::createWidget( QWidget *parent )
{
return new QwtThermo(parent);
return new QwtThermo( parent );
}
#endif
#ifndef NO_QWT_WIDGETS
WheelInterface::WheelInterface(QObject *parent):
CustomWidgetInterface(parent)
WheelInterface::WheelInterface( QObject *parent ):
CustomWidgetInterface( parent )
{
d_name = "QwtWheel";
d_include = "qwt_wheel.h";
d_icon = QPixmap(":/pixmaps/qwtwheel.png");
d_icon = QPixmap( ":/pixmaps/qwtwheel.png" );
d_domXml =
"<widget class=\"QwtWheel\" name=\"Wheel\">\n"
"</widget>\n";
}
QWidget *WheelInterface::createWidget(QWidget *parent)
QWidget *WheelInterface::createWidget( QWidget *parent )
{
return new QwtWheel(parent);
return new QwtWheel( parent );
}
#endif
CustomWidgetCollectionInterface::CustomWidgetCollectionInterface(
QObject *parent):
QObject(parent)
QObject *parent ):
QObject( parent )
{
#ifndef NO_QWT_PLOT
d_plugins.append(new PlotInterface(this));
d_plugins.append(new ScaleWidgetInterface(this));
d_plugins.append( new PlotInterface( this ) );
#if 0
// better not: the designer crashes TODO ..
d_plugins.append( new PlotCanvasInterface( this ) );
#endif
d_plugins.append( new ScaleWidgetInterface( this ) );
#endif
#ifndef NO_QWT_WIDGETS
d_plugins.append(new AnalogClockInterface(this));
d_plugins.append(new CompassInterface(this));
d_plugins.append(new CounterInterface(this));
d_plugins.append(new DialInterface(this));
d_plugins.append(new KnobInterface(this));
d_plugins.append(new SliderInterface(this));
d_plugins.append(new ThermoInterface(this));
d_plugins.append(new WheelInterface(this));
d_plugins.append( new AnalogClockInterface( this ) );
d_plugins.append( new CompassInterface( this ) );
d_plugins.append( new CounterInterface( this ) );
d_plugins.append( new DialInterface( this ) );
d_plugins.append( new KnobInterface( this ) );
d_plugins.append( new SliderInterface( this ) );
d_plugins.append( new ThermoInterface( this ) );
d_plugins.append( new WheelInterface( this ) );
#endif
d_plugins.append(new TextLabelInterface(this));
d_plugins.append( new TextLabelInterface( this ) );
}
QList<QDesignerCustomWidgetInterface*>
CustomWidgetCollectionInterface::customWidgets(void) const
CustomWidgetCollectionInterface::customWidgets( void ) const
{
return d_plugins;
}
TaskMenuFactory::TaskMenuFactory(QExtensionManager *parent):
QExtensionFactory(parent)
TaskMenuFactory::TaskMenuFactory( QExtensionManager *parent ):
QExtensionFactory( parent )
{
}
QObject *TaskMenuFactory::createExtension(
QObject *object, const QString &iid, QObject *parent) const
QObject *object, const QString &iid, QObject *parent ) const
{
if (iid == Q_TYPEID(QDesignerTaskMenuExtension))
if ( iid == Q_TYPEID( QDesignerTaskMenuExtension ) )
{
#ifndef NO_QWT_PLOT
if (QwtPlot *plot = qobject_cast<QwtPlot*>(object))
return new TaskMenuExtension(plot, parent);
if ( QwtPlot *plot = qobject_cast<QwtPlot*>( object ) )
return new TaskMenuExtension( plot, parent );
#endif
#ifndef NO_QWT_WIDGETS
if (QwtDial *dial = qobject_cast<QwtDial*>(object))
return new TaskMenuExtension(dial, parent);
if ( QwtDial *dial = qobject_cast<QwtDial*>( object ) )
return new TaskMenuExtension( dial, parent );
#endif
}
return QExtensionFactory::createExtension(object, iid, parent);
return QExtensionFactory::createExtension( object, iid, parent );
}
TaskMenuExtension::TaskMenuExtension(QWidget *widget, QObject *parent):
QObject(parent),
d_widget(widget)
TaskMenuExtension::TaskMenuExtension( QWidget *widget, QObject *parent ):
QObject( parent ),
d_widget( widget )
{
d_editAction = new QAction(tr("Edit Qwt Attributes ..."), this);
connect(d_editAction, SIGNAL(triggered()),
this, SLOT(editProperties()));
d_editAction = new QAction( tr( "Edit Qwt Attributes ..." ), this );
connect( d_editAction, SIGNAL( triggered() ),
this, SLOT( editProperties() ) );
}
QList<QAction *> TaskMenuExtension::taskActions() const
{
QList<QAction *> list;
list.append(d_editAction);
list.append( d_editAction );
return list;
}
@@ -478,19 +534,19 @@ QAction *TaskMenuExtension::preferredEditAction() const
void TaskMenuExtension::editProperties()
{
const QVariant v = d_widget->property("propertiesDocument");
const QVariant v = d_widget->property( "propertiesDocument" );
if ( v.type() != QVariant::String )
return;
#ifndef NO_QWT_PLOT
QString properties = v.toString();
if ( qobject_cast<QwtPlot*>(d_widget) )
if ( qobject_cast<QwtPlot*>( d_widget ) )
{
PlotDialog dialog(properties);
connect(&dialog, SIGNAL(edited(const QString&)),
SLOT(applyProperties(const QString &)));
(void)dialog.exec();
PlotDialog dialog( properties );
connect( &dialog, SIGNAL( edited( const QString& ) ),
SLOT( applyProperties( const QString & ) ) );
( void )dialog.exec();
return;
}
#endif
@@ -498,15 +554,17 @@ void TaskMenuExtension::editProperties()
static QErrorMessage *errorMessage = NULL;
if ( errorMessage == NULL )
errorMessage = new QErrorMessage();
errorMessage->showMessage("Not implemented yet.");
errorMessage->showMessage( "Not implemented yet." );
}
void TaskMenuExtension::applyProperties(const QString &properties)
void TaskMenuExtension::applyProperties( const QString &properties )
{
QDesignerFormWindowInterface *formWindow
= QDesignerFormWindowInterface::findFormWindow(d_widget);
QDesignerFormWindowInterface *formWindow =
QDesignerFormWindowInterface::findFormWindow( d_widget );
if ( formWindow && formWindow->cursor() )
formWindow->cursor()->setProperty("propertiesDocument", properties);
formWindow->cursor()->setProperty( "propertiesDocument", properties );
}
Q_EXPORT_PLUGIN2(QwtDesignerPlugin, CustomWidgetCollectionInterface)
#if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2( QwtDesignerPlugin, CustomWidgetCollectionInterface )
#endif

View File

@@ -16,218 +16,232 @@
namespace QwtDesignerPlugin
{
class CustomWidgetInterface: public QObject,
public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
class CustomWidgetInterface: public QObject,
public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
CustomWidgetInterface( QObject *parent );
public:
CustomWidgetInterface(QObject *parent);
virtual bool isContainer() const;
virtual bool isInitialized() const;
virtual QIcon icon() const;
virtual QString codeTemplate() const;
virtual QString domXml() const;
virtual QString group() const;
virtual QString includeFile() const;
virtual QString name() const;
virtual QString toolTip() const;
virtual QString whatsThis() const;
virtual void initialize( QDesignerFormEditorInterface * );
virtual bool isContainer() const;
virtual bool isInitialized() const;
virtual QIcon icon() const;
virtual QString codeTemplate() const;
virtual QString domXml() const;
virtual QString group() const;
virtual QString includeFile() const;
virtual QString name() const;
virtual QString toolTip() const;
virtual QString whatsThis() const;
virtual void initialize(QDesignerFormEditorInterface *);
protected:
QString d_name;
QString d_include;
QString d_toolTip;
QString d_whatsThis;
QString d_domXml;
QString d_codeTemplate;
QIcon d_icon;
protected:
QString d_name;
QString d_include;
QString d_toolTip;
QString d_whatsThis;
QString d_domXml;
QString d_codeTemplate;
QIcon d_icon;
private:
bool d_isInitialized;
};
private:
bool d_isInitialized;
};
class CustomWidgetCollectionInterface: public QObject,
public QDesignerCustomWidgetCollectionInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetCollectionInterface )
class CustomWidgetCollectionInterface: public QObject,
public QDesignerCustomWidgetCollectionInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)
#if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetCollectionInterface" )
#endif
public:
CustomWidgetCollectionInterface(QObject *parent = NULL);
virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;
public:
CustomWidgetCollectionInterface( QObject *parent = NULL );
private:
QList<QDesignerCustomWidgetInterface*> d_plugins;
};
virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;
private:
QList<QDesignerCustomWidgetInterface*> d_plugins;
};
#ifndef NO_QWT_PLOT
class PlotInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class PlotInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
PlotInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
PlotInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
class PlotCanvasInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
PlotCanvasInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_WIDGETS
class AnalogClockInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class AnalogClockInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
AnalogClockInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
AnalogClockInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_WIDGETS
class CompassInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class CompassInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
CompassInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
CompassInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_WIDGETS
class CounterInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class CounterInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
CounterInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
CounterInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_WIDGETS
class DialInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class DialInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
DialInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
DialInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_WIDGETS
class KnobInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class KnobInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
KnobInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
KnobInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_PLOT
class ScaleWidgetInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class ScaleWidgetInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
ScaleWidgetInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
ScaleWidgetInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_WIDGETS
class SliderInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class SliderInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
SliderInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
SliderInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
class TextLabelInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class TextLabelInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
TextLabelInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
TextLabelInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#ifndef NO_QWT_WIDGETS
class ThermoInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class ThermoInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
ThermoInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
ThermoInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
#ifndef NO_QWT_WIDGETS
class WheelInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
class WheelInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
WheelInterface(QObject *parent);
virtual QWidget *createWidget(QWidget *parent);
};
public:
WheelInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
#endif
class TaskMenuFactory: public QExtensionFactory
{
Q_OBJECT
class TaskMenuFactory: public QExtensionFactory
{
Q_OBJECT
public:
TaskMenuFactory(QExtensionManager *parent = 0);
public:
TaskMenuFactory( QExtensionManager *parent = 0 );
protected:
QObject *createExtension(QObject *object,
const QString &iid, QObject *parent) const;
};
protected:
QObject *createExtension( QObject *object,
const QString &iid, QObject *parent ) const;
};
class TaskMenuExtension: public QObject,
public QDesignerTaskMenuExtension
{
Q_OBJECT
Q_INTERFACES(QDesignerTaskMenuExtension)
class TaskMenuExtension: public QObject,
public QDesignerTaskMenuExtension
{
Q_OBJECT
Q_INTERFACES( QDesignerTaskMenuExtension )
public:
TaskMenuExtension(QWidget *widget, QObject *parent);
public:
TaskMenuExtension( QWidget *widget, QObject *parent );
QAction *preferredEditAction() const;
QList<QAction *> taskActions() const;
QAction *preferredEditAction() const;
QList<QAction *> taskActions() const;
private Q_SLOTS:
void editProperties();
void applyProperties(const QString &);
private Q_SLOTS:
void editProperties();
void applyProperties( const QString & );
private:
QAction *d_editAction;
QWidget *d_widget;
};
private:
QAction *d_editAction;
QWidget *d_widget;
};
};

View File

@@ -1,615 +0,0 @@
/****************************************************************************
** Resource object code
**
** Created: Thu Feb 2 22:55:24 2012
** by: The Resource Compiler for Qt version 4.7.4
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include <QtCore/qglobal.h>
static const unsigned char qt_resource_data[] = {
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtslider.png
0x0,0x0,0x1,0xc4,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x6,0x0,0x0,0x0,0xc4,0xb4,0x6c,0x3b,
0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd2,0xa,0x9,0x13,0xa,0x30,0x66,
0xcc,0x85,0xa0,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x12,0x0,
0x0,0xb,0x12,0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,
0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x1,0x53,0x49,0x44,0x41,0x54,
0x78,0xda,0x63,0x60,0x18,0x5,0xc3,0xf,0xfc,0x47,0x2,0x75,0x4b,0xba,0xfe,0x93,
0xaa,0x9f,0x9,0x9f,0xe4,0xa7,0x6f,0x9f,0x18,0x8e,0x5c,0x3e,0x2,0x66,0xfb,0x54,
0x5,0x92,0x64,0x38,0x13,0x29,0x8a,0x7,0x85,0xc1,0x2c,0x30,0x6,0xa3,0x3,0xdb,
0xff,0xff,0xc,0xff,0x21,0x76,0x31,0x62,0x2a,0x3c,0x7d,0xed,0x24,0x3,0x83,0x23,
0x3b,0xee,0xe0,0x60,0x62,0x66,0xe0,0x16,0x55,0x64,0xf8,0xba,0xe2,0x2a,0x23,0xdc,
0x60,0x26,0xa0,0xa1,0xff,0x18,0x99,0x18,0xf8,0x85,0x14,0x18,0xd8,0xd8,0x79,0x19,
0x18,0x81,0x8a,0xb0,0x1,0x31,0x69,0x43,0x1c,0xa6,0x32,0x32,0x30,0xb1,0xb0,0x31,
0xbc,0xf8,0xf0,0x88,0x41,0xa2,0x2a,0xe1,0xff,0x8b,0xb6,0x5,0x8c,0x60,0x83,0xff,
0x31,0x32,0x32,0x8,0x89,0xaa,0x32,0x18,0x5a,0xa7,0x30,0xe8,0x2a,0x6a,0x3,0x2d,
0x67,0xc1,0xd0,0xca,0x2d,0xac,0xcc,0x10,0x10,0xd4,0x8c,0xdd,0xb1,0x40,0x87,0xbc,
0xff,0xf5,0x9f,0xe1,0xee,0xc5,0x5,0xc,0x92,0x2,0x22,0xc,0xcb,0x61,0x2e,0xe6,
0x16,0x53,0x66,0x78,0xf7,0xf3,0x13,0xc3,0xb1,0xb3,0x8b,0x19,0x98,0xbf,0x1a,0x33,
0xb0,0xb3,0xb0,0x32,0x30,0x78,0xd9,0xa3,0x68,0xfe,0xfa,0xe9,0x29,0xc3,0xed,0xab,
0x6b,0xb0,0x1a,0xcc,0xc9,0xce,0xc1,0xa0,0x2c,0x2e,0xcb,0xe0,0xe0,0x18,0xc8,0x20,
0x22,0x2a,0x7,0x34,0xb8,0xb,0x62,0xf0,0xd7,0x95,0xd7,0x18,0x25,0x2a,0xe3,0xfe,
0x4b,0xfc,0xfb,0xce,0x20,0x21,0x20,0xcc,0xc0,0xce,0xca,0x86,0xa1,0x99,0x9d,0x95,
0x9d,0x41,0x42,0x50,0x4,0xab,0xc1,0x1c,0x40,0x39,0x61,0x1e,0x7e,0x6,0x69,0x49,
0x25,0x6,0x27,0x15,0x6d,0x46,0x48,0xe0,0xe0,0x0,0xa0,0x8c,0x1,0x4a,0xc7,0x97,
0xee,0x5e,0x62,0xd8,0x7d,0xe9,0x38,0xc3,0xb9,0x6b,0xc7,0x19,0xb6,0xb4,0xad,0xc7,
0xa9,0x1e,0x23,0x78,0x88,0x55,0x48,0x2a,0xa0,0x7d,0x3a,0x46,0x7,0x69,0x53,0x2b,
0x28,0x32,0x18,0x6f,0x98,0xa1,0x97,0xf,0xa4,0x84,0xf1,0x28,0x80,0x3,0x0,0xb9,
0xf0,0x60,0x59,0x7a,0xd9,0xd8,0x20,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,
0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtdial.png
0x0,0x0,0x1,0xb1,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x2,0x0,0x0,0x0,0x4b,0xd6,0xfb,0x6c,
0x0,0x0,0x1,0x78,0x49,0x44,0x41,0x54,0x78,0x9c,0x9d,0x94,0x31,0x8e,0xc2,0x30,
0x10,0x45,0x7,0x67,0x63,0x8d,0x81,0x2b,0x50,0x86,0x3,0xa4,0xa6,0xe2,0x0,0xf4,
0x5c,0x82,0x9e,0x1b,0x70,0x83,0xb4,0x91,0xb8,0x41,0x2a,0x9a,0x70,0x84,0xa4,0x81,
0xa,0x21,0x21,0x51,0x50,0x50,0x23,0x41,0x50,0xa4,0x2d,0x7e,0xd6,0xc,0xe,0xc9,
0x66,0xf7,0x57,0x96,0x3d,0xff,0x79,0x3c,0xc9,0x4c,0x2f,0xcb,0x32,0x12,0x3a,0x1c,
0xe,0xd4,0xaa,0x20,0x8,0x9c,0x9d,0xaf,0x8f,0xfe,0x3c,0xcf,0x99,0xd9,0x18,0xe3,
0x79,0x9e,0xc,0x18,0x8d,0x46,0x88,0x91,0xa0,0x9e,0xcd,0x2,0x67,0x69,0x9a,0x6a,
0xad,0x8d,0x31,0xf3,0xf9,0xdc,0xb9,0x6d,0xbb,0xdd,0x5a,0x90,0xa4,0x54,0x8,0xf8,
0x93,0x24,0xf1,0x7d,0x7f,0xb1,0x58,0x48,0x67,0x18,0x86,0xf2,0xb1,0x0,0x49,0x8a,
0xb2,0xfe,0xf5,0x7a,0x5d,0x14,0x5,0xfc,0x61,0x18,0x5a,0x8f,0x53,0xac,0xe9,0x74,
0x4a,0x44,0xe7,0xf3,0xd9,0x1a,0x15,0xe,0xa2,0x28,0x2a,0x8a,0x62,0xb9,0x5c,0x3a,
0xb6,0x44,0xb0,0x2c,0xd7,0xa1,0x28,0x90,0xca,0xb2,0x5c,0xad,0x56,0xd4,0x2a,0x99,
0xe,0x28,0x90,0x22,0xa2,0x38,0x8e,0x8d,0x31,0x4e,0xfe,0x2d,0x42,0x98,0xd6,0xfa,
0x7a,0xbd,0x56,0x8,0x63,0xc,0x52,0x70,0x9e,0xdd,0x9e,0xce,0x64,0x32,0xc1,0xc5,
0x15,0xa2,0x29,0x7a,0x96,0x65,0x49,0x73,0x6a,0xcc,0x5c,0x21,0x7c,0xdf,0xef,0x72,
0x79,0x5d,0x30,0x2a,0x22,0x1a,0xe,0x87,0xd4,0xb9,0x10,0x10,0x82,0x7,0x83,0x41,
0x85,0xd0,0x5a,0x53,0x73,0x21,0x66,0x9f,0xf6,0x11,0xc,0xe3,0x2f,0xb5,0x68,0xd7,
0xab,0x16,0xcc,0xbc,0xd9,0x6c,0xfe,0x81,0x78,0x7d,0x91,0xf1,0x78,0x8c,0x94,0xfe,
0xea,0x3f,0x1e,0x8f,0x64,0x7f,0x70,0x12,0x8d,0xd8,0x51,0x65,0x59,0x62,0xa1,0xd0,
0x6d,0xe8,0xbc,0x8e,0x94,0xdb,0xed,0xf6,0x7c,0x3e,0xf7,0xfb,0x3d,0x11,0x5,0x41,
0xa0,0xe8,0xa7,0x67,0x3b,0x52,0x2e,0x97,0xcb,0xfd,0x7e,0x3f,0x9d,0x4e,0xd6,0xe8,
0x8e,0x1c,0xf4,0x1f,0xbd,0x37,0x12,0xb4,0xdb,0xed,0x98,0x59,0x6b,0xfd,0x78,0x3c,
0xa8,0x3e,0x72,0x24,0x45,0x82,0x20,0xcf,0xf3,0x98,0x99,0x99,0xfb,0xfd,0x3e,0x76,
0xe4,0xe0,0x7b,0x9b,0x9d,0xf5,0xd1,0x5a,0x57,0x3d,0xe6,0x1b,0xf1,0xc5,0xa7,0x36,
0x5f,0xe6,0x63,0x88,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtwheel.png
0x0,0x0,0x1,0x2a,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x3,0x0,0x0,0x0,0xf3,0x6a,0x9c,0x9,
0x0,0x0,0x0,0x2a,0x74,0x45,0x58,0x74,0x43,0x72,0x65,0x61,0x74,0x69,0x6f,0x6e,
0x20,0x54,0x69,0x6d,0x65,0x0,0x4d,0x69,0x20,0x39,0x20,0x4f,0x6b,0x74,0x20,0x32,
0x30,0x30,0x32,0x20,0x32,0x32,0x3a,0x35,0x33,0x3a,0x30,0x30,0x20,0x2b,0x30,0x31,
0x30,0x30,0x8a,0x59,0x4f,0x7f,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd2,
0xa,0x9,0x14,0x38,0x1c,0xbc,0x2b,0xab,0xb7,0x0,0x0,0x0,0x9,0x70,0x48,0x59,
0x73,0x0,0x0,0xe,0xc3,0x0,0x0,0xe,0xc3,0x1,0xc7,0x6f,0xa8,0x64,0x0,0x0,
0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,
0x0,0x27,0x50,0x4c,0x54,0x45,0xfb,0xb3,0x8,0xfb,0xfb,0xfb,0x75,0x75,0x75,0xd7,
0xd7,0xd7,0xe1,0xe1,0xe1,0xf2,0xf2,0xf2,0xea,0xea,0xea,0xc6,0xc6,0xc6,0xbd,0xbd,
0xbd,0xb3,0xb3,0xb3,0xa1,0xa1,0xa1,0x86,0x86,0x86,0x7d,0x7d,0x7d,0xab,0xa1,0x7c,
0x5d,0x0,0x0,0x0,0x1,0x74,0x52,0x4e,0x53,0x0,0x40,0xe6,0xd8,0x66,0x0,0x0,
0x0,0x43,0x49,0x44,0x41,0x54,0x78,0xda,0xcd,0x8f,0x37,0xe,0x0,0x20,0x10,0xc3,
0xc8,0xd1,0xcb,0xff,0xdf,0x4b,0x13,0x4c,0x61,0x3,0x9,0xf,0x1e,0x9c,0x29,0x4a,
0xdd,0x40,0x18,0xa0,0x19,0x3d,0x83,0x30,0xf3,0x98,0xe6,0x2e,0x2b,0x6b,0x6d,0x4,
0xd6,0x35,0xf9,0x10,0x93,0x20,0x97,0xcf,0xf2,0xf8,0xb5,0xd5,0x8d,0xf3,0x79,0xd0,
0xf3,0xe0,0xf9,0x21,0x15,0xd5,0x8b,0x3,0xae,0x41,0xc3,0x32,0xc9,0x0,0x0,0x0,
0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtplot.png
0x0,0x0,0x2,0x1f,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x6,0x0,0x0,0x0,0xc4,0xb4,0x6c,0x3b,
0x0,0x0,0x0,0x2a,0x74,0x45,0x58,0x74,0x43,0x72,0x65,0x61,0x74,0x69,0x6f,0x6e,
0x20,0x54,0x69,0x6d,0x65,0x0,0x4d,0x69,0x20,0x39,0x20,0x4f,0x6b,0x74,0x20,0x32,
0x30,0x30,0x32,0x20,0x32,0x31,0x3a,0x32,0x34,0x3a,0x33,0x30,0x20,0x2b,0x30,0x31,
0x30,0x30,0x72,0xfb,0x2a,0xa8,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd2,
0xa,0x9,0x13,0x21,0x1,0x41,0x62,0x78,0xf3,0x0,0x0,0x0,0x9,0x70,0x48,0x59,
0x73,0x0,0x0,0xa,0xf0,0x0,0x0,0xa,0xf0,0x1,0x42,0xac,0x34,0x98,0x0,0x0,
0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,
0x1,0x78,0x49,0x44,0x41,0x54,0x78,0xda,0x63,0x60,0x18,0x5,0x74,0x5,0x1a,0x62,
0x5c,0xff,0xa9,0x65,0x16,0x23,0x36,0x43,0x6f,0xbc,0xfa,0xc6,0x48,0x9e,0x71,0x8,
0xc0,0x34,0x28,0x82,0xe2,0x8c,0x28,0x13,0xb,0x10,0xf3,0x82,0x68,0xaa,0xb9,0x18,
0x68,0x98,0x12,0xab,0x84,0xd4,0x46,0x16,0x11,0xb1,0xb,0x2c,0xc2,0x22,0x1b,0x81,
0x7c,0x1d,0x8a,0xd,0x6,0x1a,0xc2,0xc5,0x22,0x2e,0x39,0x8b,0x4d,0x5e,0xc9,0x41,
0xaa,0x7b,0x9a,0x12,0xbb,0xba,0xb6,0x3d,0xd0,0x82,0x79,0x40,0x71,0x41,0x8a,0x82,
0xe2,0x82,0x96,0xa4,0xf7,0x39,0x25,0x81,0x9f,0x6f,0x76,0x6f,0xfb,0xff,0xfd,0xfb,
0xf7,0xff,0x1f,0x2e,0x9e,0xfb,0x7f,0x41,0x53,0xe2,0xfb,0x5,0xd,0xf1,0x2c,0x8a,
0x5c,0xcc,0xc8,0xce,0x9e,0xc0,0xa1,0xaa,0xc9,0xc4,0x69,0x60,0x2,0xe6,0xb3,0xab,
0x6a,0x30,0xf0,0xfb,0x87,0xb2,0x32,0x30,0x31,0x65,0x2,0x5d,0xcd,0x47,0x96,0xc1,
0xa0,0xc8,0xfa,0xff,0xeb,0x97,0x9,0xaf,0x87,0x1f,0xb,0x13,0xf,0x2f,0xd4,0x26,
0x46,0x6,0x81,0xe0,0x28,0xe6,0xff,0x3f,0x7f,0xa8,0x30,0x71,0xf3,0xb8,0x92,0x65,
0x30,0xb3,0xa0,0x50,0x0,0x23,0xb,0x8b,0x18,0xaf,0x93,0x3b,0x8a,0x38,0xbb,0xba,
0x16,0x3,0xb7,0x8d,0x23,0x33,0xb3,0xa0,0x70,0x2e,0xd0,0x72,0x36,0xa2,0xd,0x6,
0x29,0x3e,0x2b,0xcd,0xe1,0xf3,0xff,0xf7,0xef,0xe,0x7e,0xbf,0x50,0x66,0x90,0xf7,
0x51,0x82,0x87,0x95,0x8d,0x41,0x24,0xbd,0x80,0x95,0x91,0x91,0xd1,0x8c,0x55,0x5a,
0xb6,0x10,0xdd,0x70,0x26,0x2c,0x6,0x32,0x9e,0x95,0x64,0xb3,0x7,0x25,0x29,0x26,
0xe,0xce,0xe5,0x40,0x43,0x85,0x45,0xf3,0x2a,0xd8,0x41,0xde,0x47,0x7,0x9c,0x86,
0xa6,0x3f,0x84,0x92,0xb3,0x19,0xff,0x7d,0xf9,0x5c,0xcf,0xa6,0xa8,0xd2,0xf,0xd4,
0xcb,0xc,0x93,0xc3,0x96,0xd0,0x99,0x19,0xd9,0xd8,0x4d,0x59,0xa5,0x64,0xdf,0x9,
0x84,0xc7,0xf5,0xf3,0x79,0xf8,0x3d,0x65,0xe2,0xe1,0xf9,0x85,0xc3,0x63,0xf,0xf9,
0xdc,0x7d,0x3f,0xfe,0xb8,0x7c,0x5e,0xe7,0xef,0xfb,0x77,0x4f,0xf5,0x4e,0xdd,0xfa,
0x8b,0x55,0x15,0x25,0x85,0x10,0x48,0x2f,0xb2,0x7e,0x46,0x74,0x49,0x72,0xd,0x46,
0x6,0xd4,0x28,0xc4,0x70,0xba,0x78,0xe8,0x1,0x0,0x3e,0x3c,0x69,0x30,0x7,0xb3,
0x24,0xc3,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtscale.png
0x0,0x0,0x1,0x75,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x6,0x0,0x0,0x0,0xc4,0xb4,0x6c,0x3b,
0x0,0x0,0x0,0x2b,0x74,0x45,0x58,0x74,0x43,0x72,0x65,0x61,0x74,0x69,0x6f,0x6e,
0x20,0x54,0x69,0x6d,0x65,0x0,0x53,0x6f,0x20,0x32,0x37,0x20,0x4f,0x6b,0x74,0x20,
0x32,0x30,0x30,0x32,0x20,0x31,0x36,0x3a,0x31,0x33,0x3a,0x32,0x32,0x20,0x2b,0x30,
0x31,0x30,0x30,0x8c,0x3a,0x78,0x7b,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,
0xd2,0xa,0x1b,0x11,0x10,0x23,0xab,0xcb,0x75,0xdf,0x0,0x0,0x0,0x9,0x70,0x48,
0x59,0x73,0x0,0x0,0xa,0xf0,0x0,0x0,0xa,0xf0,0x1,0x42,0xac,0x34,0x98,0x0,
0x0,0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,
0x0,0x0,0xcd,0x49,0x44,0x41,0x54,0x78,0xda,0x63,0x64,0xc0,0x3,0x74,0xf4,0xa6,
0x54,0x2,0x29,0x6f,0x1c,0xd2,0x6c,0x40,0xfc,0x13,0x88,0x23,0xaf,0x5c,0xca,0x79,
0x82,0x2e,0xc9,0xc2,0x80,0x1f,0xf4,0x3,0xf1,0x14,0x5c,0xf6,0x2,0xf1,0x5a,0x20,
0x16,0x2,0x62,0xd2,0xc,0x6,0xba,0xe4,0x7,0x90,0xfa,0x81,0xc3,0x37,0x5f,0x81,
0xd4,0x7f,0x5c,0x7a,0x99,0x18,0x68,0x4,0x8,0x5,0x5,0xc8,0x65,0x32,0x50,0xef,
0xa2,0x3,0x35,0x20,0x66,0x26,0xdb,0x60,0x68,0xc4,0x3c,0x29,0x29,0xbb,0x73,0x64,
0xc7,0x8e,0x1d,0xc8,0x52,0xdc,0x40,0xcc,0x49,0x89,0x8b,0x39,0x80,0x14,0x2b,0xd0,
0x50,0x4f,0x74,0x29,0x6,0x48,0xe4,0x91,0xed,0x62,0xac,0x11,0x38,0x2,0x23,0xf,
0x8,0x62,0x19,0xb0,0xe7,0x3e,0xca,0x22,0x8f,0x1,0x77,0xee,0x1b,0x8d,0x3c,0x38,
0xa0,0x4e,0xce,0xeb,0xe9,0xfb,0x72,0x64,0xc1,0x82,0x5,0xc8,0x52,0x78,0x23,0x8f,
0x91,0x8,0x17,0x83,0x73,0x1e,0x36,0x29,0x6,0x48,0xe4,0x79,0x0,0x2d,0xbf,0x44,
0x8e,0x8b,0x87,0x50,0xe4,0xe1,0x89,0x38,0x10,0xa0,0x28,0xf2,0x70,0xe5,0x3a,0x10,
0xa0,0x28,0xe7,0xe1,0xab,0xf3,0x4,0x80,0xd8,0x1e,0x88,0x1f,0x63,0x93,0x4,0x0,
0xa7,0x60,0x4a,0x2f,0x7f,0x4f,0xa0,0xf9,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,
0xae,0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtanalogclock.png
0x0,0x0,0x1,0xa6,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x2,0x0,0x0,0x0,0x4b,0xd6,0xfb,0x6c,
0x0,0x0,0x1,0x6d,0x49,0x44,0x41,0x54,0x78,0x9c,0x9d,0x54,0x31,0x8e,0xc2,0x40,
0xc,0x34,0x4b,0x58,0xb1,0x8f,0xd8,0x32,0x1d,0x95,0x85,0x44,0x8b,0xb6,0xa3,0x47,
0xe2,0x7,0x54,0x48,0x34,0x3c,0x3,0xf1,0x3,0x5a,0xa4,0x48,0xf4,0x14,0x91,0x22,
0x5e,0xe0,0x8a,0xce,0x65,0x5e,0xc0,0xf,0xae,0xf0,0x9d,0x65,0x36,0x90,0xcb,0xdd,
0x54,0x6b,0xed,0xce,0x78,0xec,0x38,0x1e,0x11,0x11,0x18,0x30,0x33,0x0,0x3c,0x1e,
0xf,0xef,0x7d,0x8,0xc1,0x5e,0xc5,0x18,0x1,0xa0,0x2c,0x4b,0x78,0x45,0x91,0xf1,
0xef,0xf7,0x7b,0x8,0x61,0xb1,0x58,0xe8,0x53,0x44,0x94,0x34,0x4d,0xd3,0xe8,0x4b,
0x2b,0xe4,0x2c,0xff,0x76,0xbb,0x2d,0x97,0xcb,0xd3,0xe9,0xd4,0x4d,0x5,0x0,0x29,
0xa5,0x94,0x52,0xdb,0xb6,0x6a,0xf6,0x45,0x82,0x99,0xaf,0xd7,0xeb,0x6a,0xb5,0x7a,
0x4b,0x56,0x20,0x62,0x57,0xc5,0x49,0x70,0x3e,0x9f,0xd7,0xeb,0xb5,0xf0,0x89,0x8,
0x11,0x95,0x96,0x35,0x4b,0xec,0x58,0x95,0x11,0x11,0xed,0xf7,0xfb,0xdd,0x6e,0xf7,
0x29,0xbf,0xc8,0x89,0xae,0x95,0x6b,0x9a,0x46,0x1a,0xec,0x98,0xd9,0x7b,0xbf,0xd9,
0x6c,0x6c,0xe6,0xb7,0xc8,0xec,0x1c,0xe,0x87,0xef,0x42,0x2e,0x97,0xcb,0x76,0xbb,
0x25,0xa2,0xcc,0x7f,0xf,0x10,0x51,0x1c,0x3d,0x9f,0x4f,0x0,0x28,0xbc,0xf7,0x5a,
0x42,0xb7,0xec,0x7e,0x3b,0xf3,0xf9,0x9c,0x99,0xdd,0x74,0x3a,0x1d,0x42,0xeb,0x81,
0xcb,0x46,0xf0,0x1f,0x28,0x42,0x8,0xda,0x82,0x9e,0x42,0xb2,0xcf,0xac,0x61,0x55,
0x55,0x45,0x8,0x61,0x60,0xb,0x2c,0x94,0xc2,0xcc,0xc5,0x64,0x32,0x19,0xf8,0xfa,
0x13,0xdc,0x6c,0x36,0xab,0xeb,0xfa,0x4f,0x16,0xb4,0xa,0x99,0x4e,0x7,0x0,0xe3,
0xf1,0x38,0xbb,0xfb,0xd5,0x97,0x8c,0x86,0x84,0x5,0x0,0xc4,0x18,0x75,0x8a,0x7,
0x1a,0x21,0x22,0xfd,0xcd,0x46,0x1a,0xb4,0x6d,0x9b,0x52,0xea,0xf7,0x6f,0xbb,0x28,
0x87,0xb2,0x2c,0x1d,0xfc,0xec,0x8f,0x18,0xa3,0x2e,0x15,0x5b,0x91,0xfd,0xe4,0x72,
0xb6,0x7c,0xd0,0x7d,0xd1,0x55,0xf9,0x84,0x8c,0xf,0x76,0x6b,0xa9,0xa,0x22,0x1e,
0x8f,0xc7,0xb7,0xe4,0xaa,0xaa,0x32,0x3e,0x48,0x2f,0x7a,0x52,0x75,0xd1,0x5d,0x2b,
0x5f,0xb,0x0,0xbe,0xfd,0x70,0x63,0x0,0x15,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,
0x44,0xae,0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtcounter.png
0x0,0x0,0x4,0x2,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x6,0x0,0x0,0x0,0xc4,0xb4,0x6c,0x3b,
0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd2,0xa,0x9,0x15,0x9,0x2d,0x2a,
0x6a,0xc6,0x8,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x12,0x0,
0x0,0xb,0x12,0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,
0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x3,0x91,0x49,0x44,0x41,0x54,
0x78,0xda,0xad,0x95,0x5b,0x68,0x13,0x59,0x1c,0xc6,0xbf,0x5c,0x6d,0x6a,0xd2,0x34,
0x69,0x2e,0xbd,0xc5,0x34,0x49,0xa1,0x46,0xbc,0x81,0x14,0x53,0x44,0xc5,0xdb,0x52,
0x16,0xca,0xb2,0xb,0x22,0xfa,0x24,0xcb,0xae,0x3e,0x6d,0x1f,0x7c,0x13,0x65,0x97,
0x85,0x45,0x41,0x45,0xc4,0xdb,0x83,0x88,0xa,0x8a,0xa2,0x20,0x8a,0xdd,0x15,0x41,
0x1f,0x54,0x76,0xdb,0x2e,0x1b,0xb7,0xd5,0xd6,0x5a,0x35,0xb1,0x35,0x6d,0xc5,0x71,
0x9a,0x9b,0x69,0x26,0xe9,0x34,0x33,0xc7,0x39,0x27,0xda,0x26,0x8a,0x9a,0x8a,0x1f,
0x4c,0x38,0x27,0x9c,0xfc,0xe6,0x3b,0xdf,0xff,0x9f,0x73,0x54,0x28,0x90,0xb9,0x65,
0x3d,0x49,0xf2,0x1c,0xbe,0x44,0x66,0xbb,0x13,0xc9,0xae,0x5b,0xaa,0x77,0x73,0x2d,
0xfd,0x68,0xd8,0xb4,0x8d,0xc,0xdf,0xeb,0x42,0x4b,0xad,0x15,0x96,0x26,0x17,0xaa,
0x8c,0x73,0x67,0x5,0x8d,0x4e,0xa4,0x21,0xa9,0xb5,0xb8,0xc4,0x2f,0x22,0xd,0xcb,
0x5a,0x30,0x7c,0xf1,0x84,0x2a,0xff,0x86,0xc6,0x45,0xa4,0x75,0x89,0x1f,0x8d,0x35,
0xe,0xf8,0xfd,0x7e,0xb8,0x5c,0x2e,0x98,0x4c,0xa6,0x92,0xa0,0x6a,0xb5,0x1a,0x84,
0x10,0xe8,0xf5,0x7a,0x4,0x7,0x9f,0xa2,0x7d,0xcf,0x1,0x20,0xd4,0xa7,0xd2,0xd2,
0xed,0x53,0xa7,0x14,0xda,0xd6,0xd6,0x86,0xe6,0xe6,0x66,0x18,0x8d,0x46,0xe8,0x74,
0xba,0xcf,0x42,0x25,0x99,0x28,0x6e,0x27,0x91,0x11,0x73,0x70,0x56,0xcc,0x41,0x20,
0x10,0x80,0xd3,0xe9,0xc4,0xb6,0x3f,0xe,0x10,0x35,0xcd,0xd4,0x62,0x9a,0xb,0xaf,
0xd7,0xcb,0xa0,0x16,0x8b,0xa5,0x24,0x28,0x55,0x42,0x10,0x71,0xae,0x33,0x82,0xed,
0xa7,0x83,0x18,0x78,0x36,0x8a,0x6c,0x36,0x8b,0xf9,0x3e,0xf,0x28,0x93,0x65,0x4c,
0x33,0xad,0xaf,0xaf,0x67,0x4e,0x4b,0x15,0x75,0x1b,0x4f,0x4f,0x82,0x4f,0x65,0x71,
0xff,0xf9,0x38,0xfe,0xed,0x49,0xc1,0x66,0xd4,0x63,0x81,0xcf,0x3b,0x53,0x3c,0xaa,
0x52,0xb7,0x5f,0xe8,0xf6,0xc6,0x3,0xe,0x2f,0x92,0x79,0xf8,0xd1,0x8e,0x3e,0x78,
0x6b,0x6d,0xb0,0x56,0x9a,0xf3,0xd9,0x17,0x2f,0x9e,0xc2,0xc9,0x3b,0x43,0x1f,0x1,
0x4d,0xa1,0xfd,0x7c,0x2f,0xfa,0x46,0x93,0x6f,0xb3,0xcd,0x62,0x2c,0x91,0xc1,0x33,
0x5e,0x80,0x24,0xc9,0xe0,0x26,0xa6,0xf0,0x30,0x34,0x8c,0x58,0x3c,0x1,0xa5,0x9a,
0xc5,0xe0,0x5f,0xaf,0x3e,0xc4,0xce,0xcb,0xfd,0x1f,0x40,0xcf,0x77,0x8f,0x60,0xe3,
0xf1,0x6e,0xdc,0x1e,0xe4,0xb1,0x72,0xef,0x1d,0x56,0xb0,0x53,0x77,0x9f,0xe3,0x7a,
0x3f,0x87,0xbf,0xfb,0xc2,0x40,0x3c,0x82,0x44,0x22,0x89,0x93,0xd7,0xfe,0xc1,0xa3,
0x70,0x84,0x81,0xb5,0x85,0x80,0xc3,0x5b,0x96,0xe2,0x82,0x2,0x79,0x5f,0x5b,0x2,
0x2e,0xac,0x68,0xac,0x82,0xdb,0x56,0x8e,0x85,0xbb,0x6f,0xb2,0x2e,0xe8,0x1c,0x18,
0x41,0x74,0xe0,0x3f,0x38,0x5e,0xd,0x41,0x16,0x5,0x20,0x37,0x9,0xe8,0xcb,0x11,
0x8f,0x45,0x15,0xb0,0x5c,0xc,0xfe,0x94,0x28,0x74,0xed,0xbe,0xbb,0x4a,0xa1,0xf5,
0xac,0xb5,0xe,0x6d,0x5e,0x88,0x70,0xa8,0xc,0xb1,0xe8,0x7c,0x48,0xb9,0x9c,0xb2,
0x42,0xe9,0x65,0xa5,0x46,0x75,0xe,0x6b,0x71,0xf1,0x3e,0x96,0x6b,0x65,0xf9,0x4c,
0x41,0x7f,0x5a,0xe5,0xc1,0x8f,0xa7,0x82,0x78,0x99,0x14,0xe1,0x9f,0xe7,0x40,0x5d,
0x65,0x19,0x32,0x99,0x4c,0xd1,0x6f,0xc,0x6,0x3,0xfd,0xd7,0x7c,0x1a,0x5c,0x8,
0x7d,0x17,0xc9,0x9e,0x3f,0x7,0x11,0x4b,0x8b,0xe8,0xe8,0x1d,0xc7,0xcb,0xd7,0x59,
0xf0,0xca,0xf3,0x3a,0x9b,0xc3,0x53,0x6e,0x2,0x9a,0x34,0x8f,0x63,0x5b,0x97,0x7f,
0xe8,0x98,0x3a,0xcc,0x49,0x64,0x7a,0x6e,0xfb,0xa5,0x3,0xe3,0x47,0xda,0xd8,0xf8,
0xe7,0x33,0xf7,0xb0,0xcc,0x6d,0x41,0x85,0x41,0xab,0x44,0xa1,0x47,0x88,0x4b,0x61,
0x24,0x41,0x5b,0x4d,0x44,0xff,0x58,0x12,0xa9,0xa1,0x1e,0xf8,0x75,0x3c,0x5e,0x44,
0x1c,0x80,0x2c,0x17,0x77,0x45,0x77,0x28,0x8a,0xdf,0xbf,0x5f,0xc0,0x5a,0x8a,0x75,
0xc9,0x77,0x7e,0x1c,0xbe,0x15,0x62,0xe3,0xe5,0x1e,0x2b,0x22,0x31,0x1,0x9d,0xbb,
0xd6,0xb0,0x9c,0xbf,0x69,0x32,0xe1,0xf1,0x58,0xc,0xdd,0xe1,0x28,0x12,0xe1,0xff,
0x61,0xe6,0x82,0xf8,0x76,0xb1,0x13,0x86,0xb7,0x56,0x8b,0x1c,0xb7,0x2e,0xae,0x46,
0x6b,0xc1,0xbc,0x7d,0x7d,0xe3,0x4c,0xbe,0xab,0x3d,0xd3,0xe3,0x39,0x3a,0x2d,0x7c,
0x35,0x16,0x58,0xd,0x3a,0x90,0xc9,0x28,0x34,0x89,0x8,0x2c,0xda,0x1c,0x5c,0xb5,
0xd5,0xa8,0x76,0x2a,0x8e,0x55,0xea,0x62,0xc7,0xa5,0x4a,0xa5,0x1c,0x8a,0x6e,0x7b,
0x5,0x76,0x6c,0x98,0x7,0x9b,0x36,0x83,0x4a,0x95,0x80,0x1f,0x36,0x4,0xe0,0x6b,
0x50,0xe6,0x36,0x1b,0x5d,0x90,0x77,0x4c,0xcf,0xd3,0x9c,0xd2,0x32,0x92,0x24,0x41,
0xa3,0xd1,0x94,0x4,0x2f,0xd3,0xeb,0xd0,0x54,0x57,0x85,0x6,0x23,0x81,0x60,0x35,
0xc2,0xe3,0x76,0xa3,0xae,0xb6,0x6,0x23,0xaf,0xf8,0x3c,0x98,0x9e,0xfc,0xf1,0x54,
0x9a,0x9d,0xa9,0xa2,0x28,0xe6,0xdb,0xa5,0x44,0xd7,0x1e,0xa7,0x19,0x47,0xb6,0xaf,
0xc3,0x68,0xc4,0x7,0x5b,0x45,0x39,0xec,0x76,0x3b,0x6e,0x7,0x7b,0xd8,0x6d,0x92,
0x97,0x72,0xd0,0xff,0xb6,0xff,0x20,0x99,0xad,0x64,0x59,0x26,0x82,0x20,0x10,0x8e,
0xe3,0xd8,0x73,0xf6,0xca,0x35,0x42,0x59,0xd3,0x6f,0xa7,0x57,0x13,0xfd,0xe2,0xe2,
0x5f,0x37,0xc8,0x83,0xc7,0x4f,0x66,0xd,0xef,0x1d,0x78,0x44,0x2e,0x74,0x5c,0x67,
0xc,0x7a,0x71,0xb0,0x1d,0x15,0x6e,0xef,0x6b,0x5e,0xa6,0x6f,0x0,0x1e,0x59,0xe5,
0x15,0x7,0x8d,0xbc,0x11,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,
0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtcompass.png
0x0,0x0,0x3,0xe0,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x2,0x0,0x0,0x0,0x4b,0xd6,0xfb,0x6c,
0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x12,0x0,0x0,0xb,0x12,
0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd3,0x4,
0xe,0xd,0x34,0x33,0x41,0x3,0x14,0x60,0x0,0x0,0x3,0x7f,0x49,0x44,0x41,0x54,
0x78,0x9c,0x6d,0x54,0xcb,0x6e,0xdb,0x46,0x14,0xbd,0xf3,0x20,0x45,0x72,0xc4,0x21,
0xf4,0x82,0x64,0x4b,0xb5,0x90,0x8,0x96,0x83,0x78,0x55,0x67,0xdb,0xae,0xbc,0xc9,
0xa6,0x5d,0x7,0x68,0x7f,0x21,0x9b,0x16,0x8,0xb2,0xce,0xb2,0xfd,0x85,0x7c,0x41,
0x11,0x20,0x7f,0x11,0x78,0x99,0x38,0x80,0x5b,0x38,0x80,0x1d,0x55,0xb6,0x1e,0x21,
0x44,0x4a,0x91,0xf8,0x18,0x92,0xc3,0xe9,0x82,0x82,0x22,0x5b,0xbd,0x2b,0xf2,0xc,
0xef,0xb9,0xe7,0xde,0x73,0x39,0xe8,0xcd,0x5f,0x6f,0xe0,0x6e,0xe4,0x79,0xbe,0x58,
0x2c,0xa2,0x38,0xd2,0x4b,0xba,0x6d,0xdb,0x94,0x50,0x95,0x2b,0x40,0x40,0x30,0x41,
0x8,0xc1,0x4e,0xd0,0xed,0x17,0xa5,0xd4,0xcd,0xed,0x4d,0xae,0xf2,0x7e,0xbf,0xdf,
0x6c,0x35,0x9,0x21,0xdb,0x47,0x61,0x18,0x6,0x41,0x90,0xc6,0x69,0x92,0x24,0xff,
0x4f,0x91,0x24,0xc9,0xc5,0xe5,0xc5,0x93,0x93,0x27,0x7,0x7,0x7,0x1b,0xf0,0xfa,
0xfa,0x1a,0x0,0x1e,0x3c,0x78,0x80,0x10,0x62,0x8c,0x31,0xc6,0xd2,0x24,0xd,0x56,
0xc1,0x62,0xbe,0xc8,0xf3,0xfc,0xe,0x45,0x92,0x24,0x97,0x57,0x97,0xa7,0xa7,0xa7,
0xdc,0xe6,0x5,0x22,0xa5,0x14,0x42,0x58,0x96,0x65,0x18,0xc6,0x72,0xb9,0xb4,0x6d,
0xbb,0xc0,0x35,0x5d,0x73,0x2a,0xe,0x63,0x6c,0x3c,0x1a,0x4b,0x29,0x1,0x0,0x17,
0x22,0x2f,0x2e,0x2f,0xf6,0xf7,0xf6,0xbd,0x99,0xb7,0x5a,0xae,0xf2,0x3c,0xf7,0x3c,
0x2f,0x8a,0x22,0x8c,0x71,0xb3,0xd9,0x74,0x1c,0x87,0x52,0xea,0xfb,0x7e,0x71,0x34,
0x99,0x4c,0xae,0xae,0xae,0xe2,0x24,0xee,0x74,0x3a,0xc5,0x68,0x28,0x0,0xc,0x86,
0x83,0x93,0xef,0x4f,0xb2,0x2c,0x33,0x4d,0x53,0x8,0x21,0x73,0x59,0xad,0x56,0xb7,
0xbb,0x35,0x4d,0xd3,0x34,0x4d,0x4a,0xe9,0x6a,0xb5,0x32,0xc,0x63,0x36,0x9b,0x61,
0x8c,0x35,0x43,0xab,0x37,0xea,0xee,0x17,0x17,0x4b,0x29,0x65,0x2e,0xbb,0xdd,0x6e,
0xaf,0xd7,0x6b,0x34,0x1a,0x54,0xa3,0x9c,0xf3,0xdd,0xb1,0x6b,0x9a,0xf6,0xe8,0xe8,
0x51,0xa5,0x52,0x1,0x80,0xe3,0xe3,0x63,0xc6,0x98,0x94,0x72,0x7f,0x6f,0x9f,0x10,
0x82,0x7d,0xdf,0xef,0xf7,0xfb,0xc5,0x77,0xf3,0xf9,0xdc,0x71,0x9c,0x5d,0xe7,0x30,
0xc6,0xbd,0x87,0xbd,0xe9,0x97,0x69,0x14,0x45,0x8e,0xe3,0xf8,0xbe,0x5f,0xe0,0xa9,
0x4c,0x6b,0xb5,0x1a,0x8e,0xa2,0xa8,0xdd,0x6e,0x17,0xf3,0xd3,0x75,0x7d,0xb7,0x3e,
0x0,0x74,0xf,0xba,0x61,0x18,0xba,0xae,0xb,0x0,0x8,0x21,0x4a,0xa9,0x52,0xa,
0x0,0x62,0x11,0xb7,0x5a,0x2d,0xac,0x95,0xb4,0xc2,0x7f,0x21,0x4,0xa5,0xf4,0x5e,
0xb2,0x69,0x9a,0xed,0x76,0x9b,0x52,0x3a,0xbc,0x19,0x6e,0x40,0x84,0x50,0x9a,0xa6,
0x85,0xf,0xe5,0x72,0x19,0x33,0xc6,0xd2,0x34,0x1d,0xc,0x6,0x93,0xc9,0xc4,0x30,
0x8c,0x3b,0xf9,0x9f,0x3e,0xb5,0xfe,0xfe,0x27,0x11,0xc9,0xe7,0xc1,0xe7,0xa2,0x6c,
0x11,0xba,0xae,0xbb,0xae,0x3b,0xfc,0x77,0x8,0x0,0x80,0x0,0xeb,0xba,0xae,0x69,
0x1a,0x21,0xa4,0x56,0xab,0xdd,0x93,0xa0,0x8f,0xc7,0xe1,0x8b,0x17,0xf2,0xf5,0xeb,
0x2c,0xcb,0xb6,0x71,0x42,0x88,0x65,0x59,0xdc,0xe1,0x6b,0xa,0x99,0x49,0x0,0xe8,
0x74,0x3a,0x18,0xe3,0x28,0x8a,0xbe,0x59,0xe0,0xba,0xdf,0xfd,0xf1,0x67,0xfc,0xfc,
0xb9,0xff,0xf3,0x4f,0xdb,0x12,0x0,0x20,0x8,0x2,0xd3,0x34,0x1d,0xc7,0x1,0x0,
0x82,0x9,0x6,0x80,0x62,0x55,0x6d,0xdb,0x8e,0xe3,0x78,0x6d,0x41,0x14,0x3f,0xfc,
0xed,0xf7,0xe9,0xaf,0xbf,0x2c,0x7e,0xfc,0x41,0x61,0x7c,0x4f,0x9d,0x94,0xb2,0x68,
0xb9,0xa8,0x8a,0x4b,0x7a,0x29,0x8,0x82,0x75,0x65,0xaa,0x15,0x74,0xdd,0x57,0xaf,
0xa2,0xa3,0xbe,0xfb,0xec,0xd9,0xae,0x3b,0x52,0x4a,0x4d,0xd3,0x8a,0x67,0x6e,0xf3,
0xe9,0x74,0x8a,0x9,0x21,0xcb,0xaf,0xcb,0x2,0xb2,0x98,0xb5,0x5c,0x2e,0xab,0x6f,
0xdf,0x52,0xcf,0x1b,0xbe,0x7c,0xb9,0x9b,0x9f,0x65,0x59,0x10,0x4,0xe5,0x72,0x79,
0x4d,0xc1,0xf9,0x78,0x34,0xa6,0x0,0x90,0x88,0x24,0x8e,0xe3,0xd1,0x68,0x4,0xa,
0xca,0x76,0x79,0xf8,0xf8,0xb1,0xff,0xf4,0xa9,0xda,0x31,0x58,0x4a,0x19,0x86,0x61,
0x18,0x86,0x83,0xc1,0xa0,0xd7,0xeb,0xed,0xb5,0xf6,0x6e,0x6f,0x6e,0xb3,0x2c,0xa3,
0x0,0xa0,0x72,0xb5,0xfa,0xba,0xb2,0x2c,0xcb,0x34,0x4d,0x84,0x10,0x3b,0x3a,0xf2,
0x7c,0x9f,0x66,0x19,0x42,0x48,0xd7,0x75,0x42,0x48,0x10,0x4,0x85,0x7e,0xce,0xb9,
0xa6,0x69,0x42,0x8,0xc6,0x58,0x99,0x95,0xcf,0xdf,0x9f,0xc3,0xe6,0x67,0x5f,0xad,
0x56,0x8d,0x7a,0x83,0xd9,0xc,0x10,0x0,0x40,0xa5,0x52,0x51,0x4a,0xa5,0x69,0xea,
0xfb,0xbe,0x61,0x18,0xa5,0x52,0x69,0xb3,0x32,0xa6,0x69,0x1e,0x1e,0x1e,0xb6,0x9a,
0xad,0xb3,0x77,0x67,0xc5,0xe0,0xd6,0xd3,0x56,0xb9,0x9a,0xcd,0x66,0x22,0x16,0x18,
0xad,0x91,0x42,0x2,0xa5,0x54,0x8,0xb1,0xbd,0x72,0xe,0x77,0x1a,0xb5,0xc6,0xd9,
0xbb,0x33,0x21,0x44,0x81,0x7c,0x6b,0x58,0x4a,0x39,0x1e,0x8d,0x2b,0x95,0x4a,0xa3,
0xd5,0xc0,0x80,0x45,0x2a,0x94,0x52,0x9b,0x7d,0xc3,0x18,0x73,0x9b,0x73,0xce,0x6f,
0x6f,0x6e,0xcf,0xdf,0x9f,0x6f,0xae,0x2c,0xd8,0xbd,0x3b,0x3d,0xcf,0x9b,0xcf,0xe7,
0xd5,0x6a,0xb5,0x5e,0xaf,0x73,0x9b,0x3,0x1,0x4a,0x28,0x21,0x24,0x8a,0xa2,0xe9,
0x74,0xfa,0xf1,0xc3,0xc7,0x7b,0x9b,0xa,0x0,0xff,0x1,0xeb,0xd6,0xb9,0xfd,0x35,
0x6a,0x40,0xa3,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtknob.png
0x0,0x0,0x3,0x27,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x2,0x0,0x0,0x0,0x4b,0xd6,0xfb,0x6c,
0x0,0x0,0x0,0x2a,0x74,0x45,0x58,0x74,0x43,0x72,0x65,0x61,0x74,0x69,0x6f,0x6e,
0x20,0x54,0x69,0x6d,0x65,0x0,0x4d,0x69,0x20,0x39,0x20,0x4f,0x6b,0x74,0x20,0x32,
0x30,0x30,0x32,0x20,0x32,0x33,0x3a,0x31,0x32,0x3a,0x30,0x37,0x20,0x2b,0x30,0x31,
0x30,0x30,0xcd,0x73,0xb0,0xc8,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd2,
0xa,0x9,0x15,0xf,0x9,0x40,0x33,0x85,0x5f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,
0x73,0x0,0x0,0xe,0xc3,0x0,0x0,0xe,0xc3,0x1,0xc7,0x6f,0xa8,0x64,0x0,0x0,
0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,
0x2,0x80,0x49,0x44,0x41,0x54,0x78,0xda,0xad,0x54,0x6b,0x6b,0xd3,0x50,0x18,0x6e,
0xd3,0x5b,0xd6,0x26,0xdd,0xb2,0x5e,0xd2,0x76,0x75,0x75,0x17,0x10,0xc6,0xaa,0x93,
0xb5,0x9b,0x88,0x96,0x21,0x88,0xfe,0x6,0x61,0xf8,0x41,0xf0,0x8f,0x88,0x1f,0xfc,
0xf,0xc2,0x44,0xf0,0xb3,0x82,0xb8,0x31,0xd1,0x8f,0x7e,0xd0,0x8d,0x2a,0xeb,0x6c,
0xb3,0xae,0xdd,0x4c,0xb7,0x5e,0xd7,0xa4,0xcd,0x65,0x4d,0xba,0x66,0xa9,0x6f,0x8d,
0xc,0x7b,0x5b,0x95,0xf9,0xe4,0x25,0x9c,0xf3,0x9c,0xf7,0x3d,0x3c,0xef,0x73,0x4e,
0xa2,0xdf,0xf8,0xf4,0x5e,0x77,0x31,0x20,0x17,0xac,0x7,0x18,0xbb,0xa9,0x7d,0x9a,
0x96,0xe5,0xba,0x7f,0xcc,0x87,0x63,0xd8,0x9f,0xfc,0x6e,0x7a,0x4f,0xae,0xc9,0x6e,
0xb7,0x8b,0x24,0x5d,0x3,0x54,0xac,0xbc,0x78,0xc5,0x32,0x6c,0x3c,0x41,0x75,0xf0,
0xf1,0xef,0x9,0x2a,0x99,0xfc,0x91,0xa1,0x3b,0x78,0x7d,0xb7,0x17,0x95,0x2a,0x97,
0xcb,0xe5,0xa6,0x26,0xa7,0x50,0xd4,0xc,0xd3,0x83,0xc3,0xec,0x25,0xff,0x18,0xc,
0xa8,0x64,0xca,0x68,0x44,0x46,0x9,0x2,0x62,0x40,0x23,0xc4,0xc8,0xb0,0xdd,0x8e,
0x47,0xa3,0xdf,0x30,0x1c,0xe3,0x79,0x9e,0xa6,0x33,0x62,0x70,0xd6,0x64,0x32,0x3b,
0x46,0x9,0x97,0xd3,0xf1,0x57,0x5e,0x0,0x58,0xb6,0x22,0x49,0x72,0x78,0xf1,0x86,
0xd3,0xe9,0x86,0x69,0xb9,0x5c,0x5a,0x5b,0x5d,0xd,0xcd,0x5f,0xef,0x99,0xdc,0xd9,
0x88,0x20,0x8a,0x5b,0x5b,0xdb,0x5e,0x9f,0xef,0x76,0xe4,0xe,0x5b,0x2e,0x4a,0x35,
0x1,0xc8,0x21,0x2b,0x3e,0xea,0x24,0x3f,0x7e,0x58,0x67,0x18,0x66,0x7a,0x6a,0x82,
0x74,0xbb,0x3a,0x55,0x9c,0xaa,0xaa,0xd2,0x50,0x9a,0x4d,0x15,0x45,0x51,0x9b,0xcd,
0x66,0x36,0x99,0x6f,0xde,0x8a,0x64,0x33,0xa9,0xb3,0x24,0xd8,0xe8,0x80,0xe6,0x8f,
0xa5,0xba,0xc1,0x80,0xb8,0x5c,0x4e,0x8d,0xac,0xc9,0x32,0xbc,0xad,0x28,0x6a,0x78,
0xfc,0x68,0x99,0xe3,0xf8,0xe7,0x2b,0x2f,0x25,0xb9,0x95,0x51,0xc8,0x17,0x83,0xd7,
0xe6,0x4e,0x4f,0xea,0x8a,0xd2,0x68,0x53,0xab,0xd7,0x83,0xbb,0x8a,0xa2,0x82,0x10,
0x49,0x96,0x4a,0xc5,0xa3,0xd7,0x6f,0xde,0x6e,0xc5,0xe2,0xa1,0xf9,0xb9,0xd6,0xa1,
0x32,0x2c,0x33,0x17,0x9c,0x1d,0xb1,0x3,0xf0,0x58,0x3c,0xe1,0x26,0xbd,0xb2,0x5c,
0xeb,0xee,0x19,0x5c,0x56,0x55,0x5d,0x2c,0xb6,0x6d,0x34,0x1a,0x31,0x3b,0x36,0x33,
0x73,0x25,0x30,0xee,0xff,0xdd,0xc8,0xf4,0xe4,0x24,0x84,0x96,0xa7,0xb1,0x1a,0xa0,
0xc1,0x6a,0x85,0x73,0x38,0xda,0x8e,0x30,0x10,0x18,0xf7,0x79,0x3c,0x30,0xf0,0x92,
0x64,0xef,0xab,0x55,0x2e,0x33,0xa5,0x62,0x1e,0x45,0xad,0x50,0xff,0xe4,0xe9,0x33,
0x5e,0xe0,0xcf,0x96,0xaa,0x1c,0x8f,0x20,0xad,0x84,0x8e,0x92,0xb6,0x2d,0xc0,0xa1,
0x85,0x70,0x28,0x1a,0xdd,0x1c,0x71,0xba,0x3f,0x7f,0xd9,0x7c,0xb8,0xfc,0x60,0xe2,
0x72,0x40,0x5b,0x52,0x9b,0xcd,0x7d,0xfa,0x50,0x14,0xf8,0xa5,0xa5,0x8,0xc3,0x54,
0xfa,0xde,0xb,0xb0,0x17,0xa2,0xa1,0x34,0xbe,0x6e,0x6e,0x20,0x6,0xb,0x86,0xdb,
0xa1,0xf2,0x97,0x59,0xd5,0xf4,0x5e,0xc6,0xef,0x6b,0x9d,0xa5,0x6d,0x68,0x8,0xa2,
0xaf,0xa,0xd,0xc,0xc3,0xda,0x71,0x6c,0x21,0x74,0xf5,0xf8,0x58,0x4a,0x50,0x69,
0x8,0x18,0xc0,0xd4,0xeb,0xf5,0x14,0x4b,0x47,0xd0,0xe0,0x80,0xab,0xf5,0x6e,0x6d,
0xfd,0xfe,0xbd,0xbb,0x6,0xa4,0xf7,0x4f,0x0,0xea,0xf3,0x85,0x42,0x36,0x9b,0x13,
0x45,0x11,0xc3,0xb0,0xc5,0x70,0xa8,0x87,0xa,0x6a,0x27,0xd5,0xaf,0x1e,0x0,0x4b,
0x4,0x41,0x24,0x12,0x3b,0x14,0xb5,0xcb,0x71,0x42,0x6f,0x15,0x9c,0x20,0xc,0xe3,
0xb8,0xae,0x3f,0xc0,0x9d,0xc6,0x9,0x3c,0xd,0xb5,0xa9,0x6a,0x99,0x9d,0x9f,0xd9,
0xf9,0xf5,0x2d,0xd9,0x7a,0xbd,0xc5,0x62,0x86,0x38,0xcf,0xce,0x7f,0xc5,0x7f,0xd8,
0xe2,0x27,0x25,0x35,0x22,0x3,0x9a,0x52,0xcb,0xd9,0x0,0x0,0x0,0x0,0x49,0x45,
0x4e,0x44,0xae,0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtthermo.png
0x0,0x0,0x2,0x44,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0xd,0x0,0x0,0x0,0x16,0x8,0x2,0x0,0x0,0x0,0x94,0x98,0x81,0x73,
0x0,0x0,0x0,0x2a,0x74,0x45,0x58,0x74,0x43,0x72,0x65,0x61,0x74,0x69,0x6f,0x6e,
0x20,0x54,0x69,0x6d,0x65,0x0,0x4d,0x69,0x20,0x39,0x20,0x4f,0x6b,0x74,0x20,0x32,
0x30,0x30,0x32,0x20,0x32,0x33,0x3a,0x30,0x33,0x3a,0x31,0x31,0x20,0x2b,0x30,0x31,
0x30,0x30,0x4c,0x45,0x31,0x92,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd2,
0xa,0x1b,0xf,0x2,0x6,0x8e,0x83,0x5f,0x31,0x0,0x0,0x0,0x9,0x70,0x48,0x59,
0x73,0x0,0x0,0xe,0x74,0x0,0x0,0xe,0x74,0x1,0x6b,0x24,0xb3,0xd6,0x0,0x0,
0x0,0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,
0x1,0x9d,0x49,0x44,0x41,0x54,0x78,0xda,0x8d,0x53,0xd9,0x6a,0xc2,0x50,0x10,0xcd,
0xe6,0x52,0x12,0x22,0x62,0x44,0x51,0x7c,0xd0,0x44,0x83,0xa2,0xe2,0x77,0xb4,0x8f,
0xfd,0x64,0x5f,0x84,0x56,0x2b,0x42,0xab,0xf,0x22,0x28,0xa6,0x5a,0x97,0x98,0xa8,
0x91,0xba,0xd2,0xa3,0x57,0x34,0xca,0x6d,0xe9,0x81,0x84,0x99,0x9b,0x99,0x33,0xe7,
0xce,0x4c,0xd8,0x72,0xb9,0xcc,0xfc,0x3,0x2,0x9e,0x6a,0xb5,0x2a,0x49,0xd2,0xf2,
0x4,0x4d,0xd3,0xe2,0xf1,0xf8,0x62,0xb1,0xc0,0xf9,0x6e,0xb7,0xeb,0xf5,0x7a,0xb9,
0x5c,0xce,0xe3,0xf1,0x70,0xf0,0x39,0x8e,0x5b,0xad,0x56,0xfb,0xfd,0x5e,0x10,0x84,
0xd9,0x6c,0x86,0x93,0xd1,0x68,0xd4,0x6c,0x36,0x2b,0x95,0x4a,0x24,0x12,0x51,0x55,
0xf5,0xcc,0x87,0xc,0xbc,0xd7,0x27,0x84,0xc3,0x61,0xd8,0xa2,0x28,0xb6,0x5a,0x2d,
0xe4,0x5f,0xea,0x1e,0x2d,0x9f,0xcf,0x77,0x38,0x1c,0xc0,0x87,0x42,0xe4,0x34,0x1a,
0x8d,0xa2,0xfa,0xbd,0x3e,0x0,0xd9,0x96,0x65,0xf9,0xfd,0xfe,0xc9,0x64,0x52,0x28,
0x14,0xea,0xf5,0xfa,0xdd,0x3d,0xce,0xcc,0x28,0x14,0x8,0x4,0xb6,0xdb,0x6d,0x28,
0x14,0x82,0x5b,0x2a,0x95,0xc8,0x79,0xa7,0x63,0x2d,0x97,0x9b,0x2b,0x5f,0x26,0x93,
0x71,0x67,0xf,0x87,0x43,0xc7,0x61,0xde,0x3f,0xe4,0xd7,0x97,0x37,0x5d,0x2f,0x22,
0xf7,0xcc,0x67,0x18,0x46,0xbb,0xdd,0xae,0xd5,0x6a,0xb6,0x6d,0x13,0x7d,0xdf,0x6b,
0xc6,0xf8,0x7c,0x60,0x39,0xfe,0xa6,0x6e,0x7,0x5,0x2c,0x8b,0x65,0x59,0x18,0x70,
0x7f,0xd5,0x97,0xcd,0x66,0x15,0x45,0xf1,0x7a,0xbd,0x30,0xe0,0xa2,0xdb,0xe6,0x74,
0x4a,0xb9,0xaf,0x72,0x82,0xfb,0x83,0x2c,0xcb,0x94,0xb8,0xf1,0x78,0xc,0x7d,0x64,
0x6e,0xc9,0x64,0x72,0x30,0x18,0xd0,0xeb,0x9a,0xa6,0x9,0x7d,0xe8,0xf6,0x66,0x73,
0xec,0x42,0x2c,0x16,0xa3,0xec,0x1,0xa0,0xeb,0x7a,0x3a,0x9d,0x46,0x1c,0x46,0xc,
0x17,0x7b,0xc0,0xba,0x86,0x76,0xe5,0x9b,0xcf,0xe7,0xe8,0x19,0x2e,0x8b,0xe9,0x91,
0xbe,0xf0,0x3c,0x4f,0x89,0x3,0xba,0xdd,0xae,0xe3,0x38,0x8d,0x46,0xe3,0xaf,0xbe,
0x60,0xcf,0xb0,0x29,0xd8,0x97,0x44,0x22,0xe1,0x9e,0xdb,0xbd,0xbe,0x7c,0x3e,0x4f,
0xda,0x76,0x99,0x1b,0x9d,0x8f,0x0,0x8b,0x89,0x6,0x11,0x7d,0x74,0x3e,0x2,0x2c,
0x62,0xbf,0xdf,0x87,0x0,0xe8,0x93,0x44,0xe6,0xe9,0x31,0xa8,0xa9,0xcf,0xa9,0x54,
0xd0,0xb6,0xbf,0x6e,0xe2,0xf0,0x97,0x90,0x2d,0x77,0xeb,0x43,0x10,0xde,0x3f,0x4,
0xb,0xc6,0xcd,0x1c,0x98,0xbd,0xf5,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,
0x42,0x60,0x82,
// /Users/grauser/Documents/DEV/Qt/qwt-6.0.1/designer/pixmaps/qwtwidget.png
0x0,0x0,0x4,0x36,
0x89,
0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
0x0,0x0,0x16,0x0,0x0,0x0,0x16,0x8,0x3,0x0,0x0,0x0,0xf3,0x6a,0x9c,0x9,
0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xd2,0xa,0x9,0x12,0x32,0xe,0xb1,
0xf0,0x4e,0xc7,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x12,0x0,
0x0,0xb,0x12,0x1,0xd2,0xdd,0x7e,0xfc,0x0,0x0,0x0,0x4,0x67,0x41,0x4d,0x41,
0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x3,0x0,0x50,0x4c,0x54,0x45,
0xf7,0x0,0x0,0xf7,0x8,0x8,0xf7,0x10,0x10,0xff,0x10,0x10,0xff,0x18,0x18,0xff,
0x21,0x21,0xff,0x29,0x29,0xff,0x31,0x31,0xff,0x39,0x39,0xff,0x42,0x42,0xff,0x52,
0x52,0xff,0x5a,0x5a,0xff,0x63,0x63,0xff,0x6b,0x6b,0xff,0x73,0x73,0xff,0x7b,0x7b,
0xff,0x84,0x84,0xff,0x8c,0x8c,0xff,0x94,0x94,0xff,0x9c,0x9c,0xff,0xa5,0xa5,0xff,
0xad,0xad,0xff,0xb5,0xb5,0xff,0xbd,0xbd,0xff,0xc6,0xc6,0xff,0xce,0xce,0xff,0xd6,
0xd6,0xff,0xde,0xde,0xff,0xe7,0xe7,0xff,0xef,0xef,0xff,0xf7,0xf7,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x21,0x6a,0xf5,0x10,0x0,0x0,0x0,0x20,0x74,0x52,0x4e,0x53,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x5c,0x5c,0x1b,0xed,
0x0,0x0,0x0,0x8d,0x49,0x44,0x41,0x54,0x78,0xda,0xbd,0x90,0xdd,0xa,0xc3,0x20,
0xc,0x85,0x8d,0xd0,0xfa,0x53,0xb3,0xb6,0xae,0x15,0x5b,0xd4,0xf3,0xfe,0x6f,0xb9,
0xb8,0xab,0x6d,0xf4,0x72,0x5b,0x8,0xe4,0xf0,0x41,0x38,0x39,0x51,0xb8,0x2c,0xf5,
0x53,0xdc,0xa2,0xd1,0xa1,0x7d,0xe2,0xe6,0xb8,0xb6,0x99,0xdf,0x20,0x43,0xad,0x93,
0xcc,0xaa,0x5f,0x60,0x9,0x9,0xca,0xe4,0x2e,0x9,0xd0,0x94,0x61,0xf,0xc,0x22,
0x8,0x8a,0x3a,0xcd,0xa3,0x6c,0xc,0x28,0x1a,0xad,0xf7,0x9,0xa5,0xab,0x60,0xbf,
0x0,0x5b,0xc0,0xea,0xb1,0x33,0x92,0x15,0xcb,0x69,0x6e,0x95,0x9d,0x5c,0x12,0xf6,
0x64,0xe3,0x61,0x2a,0xf8,0x2e,0xb8,0x38,0x1a,0xe3,0xd3,0x5e,0xc7,0x8d,0xec,0x9,
0xdc,0x68,0xe9,0x71,0xa8,0x94,0x7a,0x91,0x92,0xc9,0x97,0xff,0x7e,0xf0,0xb,0xf8,
0x1,0x79,0x65,0x34,0x9a,0xd3,0x83,0x54,0x7c,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,
0x44,0xae,0x42,0x60,0x82,
};
static const unsigned char qt_resource_name[] = {
// pixmaps
0x0,0x7,
0x7,0xf,0x38,0x93,
0x0,0x70,
0x0,0x69,0x0,0x78,0x0,0x6d,0x0,0x61,0x0,0x70,0x0,0x73,
// qwtslider.png
0x0,0xd,
0xb,0x12,0x13,0x47,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x73,0x0,0x6c,0x0,0x69,0x0,0x64,0x0,0x65,0x0,0x72,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtdial.png
0x0,0xb,
0xf,0x8e,0x82,0x7,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x64,0x0,0x69,0x0,0x61,0x0,0x6c,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtwheel.png
0x0,0xc,
0x4,0xa2,0x2c,0x87,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x77,0x0,0x68,0x0,0x65,0x0,0x65,0x0,0x6c,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtplot.png
0x0,0xb,
0x3,0x96,0x81,0xa7,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x70,0x0,0x6c,0x0,0x6f,0x0,0x74,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtscale.png
0x0,0xc,
0xb,0x3d,0x24,0x67,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x73,0x0,0x63,0x0,0x61,0x0,0x6c,0x0,0x65,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtanalogclock.png
0x0,0x12,
0x3,0xcf,0x42,0x7,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x61,0x0,0x6e,0x0,0x61,0x0,0x6c,0x0,0x6f,0x0,0x67,0x0,0x63,0x0,0x6c,0x0,0x6f,0x0,0x63,0x0,0x6b,0x0,0x2e,0x0,0x70,0x0,0x6e,
0x0,0x67,
// qwtcounter.png
0x0,0xe,
0x7,0x91,0x99,0xc7,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x63,0x0,0x6f,0x0,0x75,0x0,0x6e,0x0,0x74,0x0,0x65,0x0,0x72,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtcompass.png
0x0,0xe,
0x5,0xf2,0x81,0xa7,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x63,0x0,0x6f,0x0,0x6d,0x0,0x70,0x0,0x61,0x0,0x73,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtknob.png
0x0,0xb,
0x5,0xa4,0x81,0x7,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x6b,0x0,0x6e,0x0,0x6f,0x0,0x62,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtthermo.png
0x0,0xd,
0x9,0x19,0xb,0x27,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x74,0x0,0x68,0x0,0x65,0x0,0x72,0x0,0x6d,0x0,0x6f,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
// qwtwidget.png
0x0,0xd,
0xc,0x10,0xe9,0xe7,
0x0,0x71,
0x0,0x77,0x0,0x74,0x0,0x77,0x0,0x69,0x0,0x64,0x0,0x67,0x0,0x65,0x0,0x74,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
};
static const unsigned char qt_resource_struct[] = {
// :
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
// :/pixmaps
0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x2,
// :/pixmaps/qwtplot.png
0x0,0x0,0x0,0x6e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x4,0xab,
// :/pixmaps/qwtanalogclock.png
0x0,0x0,0x0,0xa8,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x8,0x47,
// :/pixmaps/qwtwheel.png
0x0,0x0,0x0,0x50,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x3,0x7d,
// :/pixmaps/qwtknob.png
0x0,0x0,0x1,0x16,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x11,0xdb,
// :/pixmaps/qwtcompass.png
0x0,0x0,0x0,0xf4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xd,0xf7,
// :/pixmaps/qwtcounter.png
0x0,0x0,0x0,0xd2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x9,0xf1,
// :/pixmaps/qwtthermo.png
0x0,0x0,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x15,0x6,
// :/pixmaps/qwtslider.png
0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
// :/pixmaps/qwtscale.png
0x0,0x0,0x0,0x8a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x6,0xce,
// :/pixmaps/qwtwidget.png
0x0,0x0,0x1,0x52,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x17,0x4e,
// :/pixmaps/qwtdial.png
0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0xc8,
};
QT_BEGIN_NAMESPACE
extern Q_CORE_EXPORT bool qRegisterResourceData
(int, const unsigned char *, const unsigned char *, const unsigned char *);
extern Q_CORE_EXPORT bool qUnregisterResourceData
(int, const unsigned char *, const unsigned char *, const unsigned char *);
QT_END_NAMESPACE
int QT_MANGLE_NAMESPACE(qInitResources_qwt_designer_plugin)()
{
QT_PREPEND_NAMESPACE(qRegisterResourceData)
(0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
return 1;
}
Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_qwt_designer_plugin))
int QT_MANGLE_NAMESPACE(qCleanupResources_qwt_designer_plugin)()
{
QT_PREPEND_NAMESPACE(qUnregisterResourceData)
(0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
return 1;
}
Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_qwt_designer_plugin))

1799
qwt/doc/Doxyfile Normal file

File diff suppressed because it is too large Load Diff

8
qwt/doc/articles/TODO Normal file
View File

@@ -0,0 +1,8 @@
1) Installation guides
2) QwtSeriesData + QAbstractModel
3) Navigation
4) Scales
5) Alive plots + sampling threads
6) Exporting + printing plots
7) Plot Items
8) Raster items

306
qwt/doc/changes.dox Normal file
View File

@@ -0,0 +1,306 @@
/*!
\page qwtchangelog What's new in Qwt 6.1
\tableofcontents
\section ITEMS New plot items
- QwtPlotBarChart\n
Bar chart, see "examples/distrowatch"
- QwtPlotMultiBarChart\n
Chart of grouped bars - stacked or aligned side by side.
See "examples/barchart"
- QwtPlotTradingCurve\n
Candlestick or OHLC charts typically used to describe
price movements over time. See "examples/stockchart"
- QwtPlotShapeItem\n
A plot item to display rectangles, circles, polygons and all
other type of shapes ( built from intersections or unifications ),
that can be expressed by a QPainterPath. See "examples/itemeditor"
- QwtPlotLegendItem\n
A legend on the plot canvas. See "examples/legends"
- QwtPlotZoneItem\n
A horizontal or vertical section
- QwtPlotTextLabel\n
In opposite to a QwtPlotMarker the text is not aligned to a plot coordinate
but according to the geometry of the canvas ( f.e top/centered for a title ).
See "playground/curvetracker".
\section SCALES Scales beyond linear and logarithmic transformations
QwtScaleTransformation has been replaced by QwtTransform and its derived classes:
- QwtTransform
- QwtNullTransform
- QwtLogTransform
- QwtPowerTransform
Individual transformations ( f.e. different scaling for special sections )
can be implemented by overloading QwtTransform ( see playground/scaleengine ).
QwtLinearScaleEngine and QwtLogScaleEngine are not limited to
base 10 anymore.
\subsection DATETIME Datetime scales
A set of a new classes for displaying datetime values:
- QwtDate\n
A collection of methods to convert between QDateTime and doubles
- QwtDateScaleEngine\n
A scale engine that aligns and finds ticks in terms of datetime units.
- QwtDateScaleDraw\n
A scale draw mapping values to datetime strings.
Scales for Qt::UTC and Qt::LocalTime are supported.
\section CONTROLS Redesign of the dial and meter widgets
Many parts of the class design of the dial and meter widgets were left over
from the 90s ( Qwt 0.2, Qt 1.1 ).
The derivation tree is simpler and more logical:
- QwtAbstractScale is a QWidget
- QwtAbstractSlider is a QwtAbstractScale.
( for sliders without scales QAbstractSlider should be the base class )
- QwtThermo is also a QwtAbstractScale
- QwtDial, QwtKnob, QwtSlider are derived from QwtAbstractSlider
- QwtCounter is derived from QWidget
QwtDoubleRange has been removed.
All classes use the terminology known from QAbstractSlider - as far as possible.
The extended \ref SCALES "system for scales" is completely supported.
\section OPENGL Basic support for an OpenGL plot canvas
QwtPlotGLCanvas offers the option to draw plot items using an
OpenGL paint engine ( QPaintEngine::OpenGL/OpenGL2 ),
This is not what could be implemented with native OpenGL,
but it offers hardware acceleration in environments,
where the raster paint engine is the only option.
( f.e Qt4/Windows, or Qt5 on all platforms ).
QwtPlotGLCanvas is in an experimental state and is not recommended for average
use cases.
\section LEGEND A new system for plot legends
QwtLegend has been decoupled from QwtPlot and can be replaced by
application specific implementations. Plot items and the legend
exchange the information using QwtLegendData.
QwtPlotLegendItem is a new plot item that displays a legend on the
plot canvas.
The following examples demonstrate how to use the new system:
- examples/legends\n
shows how to use the new legend system
- examples/stockchart\n
implementats a QTreeView with checkable items as legend
\section GRAPHIC Off-screen paint device for vector graphics
QwtGraphic can be copied like QImage or QPixmap but is scalable like QSvgGenerator.
It is implemented as a record/replay paint device like QPicture.
\section OVERLAY QwtWidgetOverlay
QwtWidgetOverlay is a base class for implementing widget overlays - primarily
used for use cases like graphical editors or running cursors for the plot canvas.
The following examples show how to use overlays:
- examples/itemeditor
- examples/curvetracker
QwtPicker ( -> QwtPlotPicker, QwtPlotZoomer ) internally uses
QwtWidgetOverlay now, making it easier to implement individual rubber bands.
\section SYMBOL QwtSymbol
New symbol types have been introduced:
- QwtSymbol::Path
- QwtSymbol::Pixmap
- QwtSymbol::Graphic
- QwtSymbol::SvgDocument
QwtSymbol autodetect the most performant paint strategy for a paint device
what is in most situations using a QPixmap cache.
QwtSymbol::setPinPoint() allows to align the symbol individually, f.e to the position
of the peak of an arrow.
\section PLOTCURVE QwtPlotCurve
Some optimizations that got lost with introducing the floating point
based render code with Qwt 6.0 have been reenabled. Other specific optimizations
have been added.
New paint attributes:
- QwtPlotCurve::FilterPoints
- QwtPlotCurve::MinimizeMemory
- QwtPlotCurve::ImageBuffer
QwtPlotCurve::CacheSymbols has been removed, as caching is implemented
in QwtSymbol now.
QwtPlotCurve::drawLines(), QwtPlotCurve::drawDots(),
QwtPlotCurve::drawSteps() and QwtPlotCurve::drawSticks() are virtual now.
\section PLOT QwtPlot
A footer similar to a title has been added.
QwtPlot::ExternalLegend is obsolete with the
new \ref LEGEND "system for legends". The signals
QwtPlot::legendClicked(), QwtPlot::legendChecked() have been
removed. Applications need to connect to QwtLegend::clicked()
and QwtLegend::checked().
To support using an OpenGL canvas QwtPlot::setCanvas has been added.
This has 2 important implications for the application code:
- QwtPlot::canvas() returns QWidget and needs to be casted, when
using methods of QwtPlotCanvas.
- QwtPlotCanvas can be created and assigned in application code,
what makes it possible to derive and overload methods.
The initialization of a plot canvas with Qwt 6.1 will probably look like
this:
\code
QwtPlotCanvas* canvas = new QwtPlotCanvas();
canvas->setXY( ... );
...
plot->setCanvas( canvas );
\endcode
To have a consistent API QwtPlot::setPlotLayout() has been added,
\section OTHER Other
\subsection SCALEDIV QwtScaleDiv
The following methods have been added:
- QwtScaleDiv::inverted()
- QwtScaleDiv::bounded()
- QwtScaleDiv::isEmpty()
- QwtScaleDiv::isIncreasing()
- QDebug operator
The following methods have been removed:
- QwtScaleDiv::isValid(), QwtScaleDiv::invalidate()\n
The valid state was left over from early Qwt versions indicating
a state of the autoscaler.
\subsection SCALEENGINE QwtScaleEngine
The following methods have been added:
- QwtScaleEngine::setBase()
- QwtScaleEngine::setTransformation()
\subsection PLOTLAYOUT QwtPlotLayout
The following flags have been added:
- QwtPlotLayout::IgnoreTitle
- QwtPlotLayout::IgnoreFooter
- QwtPlotLayout::setAlignCanvasToScale()
\subsection PLOTCANVAS QwtPlotCanvas
Rounded borders ( like with style sheets ) can configured
using QwtPlotCanvas::setBorderRadius();
\subsection OTHERS Other changes
- QwtWeedingCurveFitter\n
QwtWeedingCurveFitter::setChunkSize() has been added, with drastic
performance improvements for huge sets of points.
- QwtPlotRenderer
The frame of the plot canvas can be rendered, what makes the result
even closer to WYSWYG. QwtPlotRenderer::exportTo() has been added.
- QwtSystemClock
For Qt >= 4.9 QwtSystemClock uses QElapsedTimer internally. As it doesn't
support a similar feature, QwtSystemClock::precision() has been removed.
- QwtPlotAbstractSeriesItem\n
QwtPlotAbstractSeriesItem has been split into QwtPlotSeriesItem
and QwtPlotAbstractSeriesStore.
- QwtText\n
A metatype declaration has been added, so that QwtText can be used
with QVariant.
- QwtEventPattern, QwtPanner, QwtMagnifier\n
Forgotten Qt3 leftovers have been fixed: int -> Qt::KeyboardModifiers
- QPen Qt5/Qt4 incompatibility
The default pen width for Qt5 is 1, what makes it a non cosmetic.
To hide this nasty incompatibility several setPen() methods have been added
the build pens with a width 0. See QPen::isCosmetic(),
- qwtUpperSampleIndex()\n
A binary search algorithm for sorted samples
- QwtMatrixRasterData
QwtMatrixRasterData::setValue() has been added
- QwtPicker
QwtPicker::rubberBandWidget(), QwtPicker::trackerWidget() have been replaced by
QwtPicker::rubberBandOverlay(), QwtPicker::trackerOverlay().
QwtPicker::rubberBandMask() has been added. QwtPicker::pickRect() has been
replaced by QwtPicker::pickArea()
- QwtPlotItem
QwtPlotItem::ItemInterest has been added. QwtPlotItem::setRenderThreadCount()
was shifted from QwtPlotRasterItem.
- ...
\section CLASSES Summary of the new classes
- QwtAbstractLegend
- QwtDate
- QwtDateScaleDraw
- QwtDateScaleEngine
- QwtGraphic
- QwtLegendData
- QwtLegendLabel
- QwtPainterCommand
- QwtPixelMatrix
- QwtPlotAbstractBarChart
- QwtPlotBarChart
- QwtPlotMultiBarChart
- QwtPlotGLCanvas
- QwtPlotLegendItem
- QwtPlotShapeItem
- QwtPlotTextLabel
- QwtPlotTradingCurve
- QwtPlotZoneItem
- QwtPointData
- QwtPointMapper
- QwtTransform, QwtNullTransform, QwtLogTransform, QwtPowerTransform
- QwtWidgetOverlay
*/

22
qwt/doc/doc.pro Normal file
View File

@@ -0,0 +1,22 @@
################################################################
# Qwt Widget Library
# Copyright (C) 1997 Josef Wilgen
# Copyright (C) 2002 Uwe Rathmann
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the Qwt License, Version 1.0
################################################################
# qmake project file for installing the documentation
QWT_ROOT = $${PWD}/..
include( $${QWT_ROOT}/qwtconfig.pri )
TEMPLATE = subdirs
doc.files = $${QWT_ROOT}/doc/html
unix:doc.files += $${QWT_ROOT}/doc/man
doc.path = $${QWT_INSTALL_DOCS}
INSTALLS = doc

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
qwt/doc/images/cpuplot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
qwt/doc/images/curves.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
qwt/doc/images/dials1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
qwt/doc/images/dials2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
qwt/doc/images/graph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
qwt/doc/images/knob.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
qwt/doc/images/plot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
qwt/doc/images/radio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
qwt/doc/images/sinus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
qwt/doc/images/sliders.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
qwt/doc/images/sysinfo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

305
qwt/doc/install.dox Normal file
View File

@@ -0,0 +1,305 @@
/*!
\page qwtinstall Installing Qwt
\tableofcontents
\section DOWNLOAD Download
Stable Qwt releases are available from the
Qwt <a href="http://sourceforge.net/projects/qwt/files/qwt">project page</a>.
Qwt-$(QWTVERSION) consists of 4 files:
- qwt-$(QWTVERSION).zip\n
Zip file with the Qwt sources and the html documentation for Windows
- qwt-$(QWTVERSION).tar.bz2\n
Compressed tar file with the Qwt sources and the html documentation
for UNIX systems ( Linux, Mac, ... )
- qwt-$(QWTVERSION).pdf\n
Qwt documentation as PDF document.
- qwt-$(QWTVERSION).qch\n
Qwt documentation as Qt Compressed Help document, that can be loaded into
the Qt Assistant or Creator. In the Qt Creator context sensitive help will be
available like for Qt classes.
Precompiled Qwt Designer plugins, that are compatible with some binary packages
of the Qt Creator:
- qwtdesigner-$(QWTVERSION)-*.zip
\section INSTALL Installing Qwt
Beside headers, libraries and the html version of the class documentation a proper
Qwt installation contains a Designer plugin and a Qwt features file for building
applications using Qwt.
All files will be copied to an installation directory, that is configurable
by editing qwtconfig.pri. Its default settings is:
- Windows\n
C:\\Qwt-$(QWTVERSION)
- Unix like systems\n
/usr/local/qwt-$(QWTVERSION)
For the rest of the document this install path will be written as <i>${QWT_ROOT}</i>
and needs to be replaced by the real path in all commands below.
It is not unlikely, to have more than one installation of Qwt
on the same system. F.e for using the Qwt Designer plugin in the Qt Creator
a version of Qwt is necessary with the same Qt and compiler combination, that had
been used for building the Qt Creator ( see "Help->About Qt Creator ..." ).
Installing Qwt is done in 3 steps, that are quite common on UNIX systems.
-# Configuration\n
In the configuration step all parameters are set to control how
to build and install Qwt
-# Build\n
In the build step binaries are built from the source files.
-# Installation\n
The installation copies and rearranges all files that are necessary to build
Qwt applications to a target directory.
The installation doesn't modify the system beside copying files to a
directory in a proper way. After removing build and installation directories the
system is in the same state as it was before.
\subsection CONFIGSUBSECTION Configuration
Configuring Qwt has to be done by editing the Project files used for building:
- qwtbuild.pri\n
qwtbuild.pri contains settings for how to build Qwt. All settings
of this file are only for building Qwt itself and doesn't have an impact
on how an application using Qwt is built. Usually its default settings
doesn't need to be modified.
- qwtconfig.pri\n
qwtconfig.pri defines what modules of Qwt will be built and where to
install them. qwtconfig.pri gets installed together with the Qwt features
file qwt.prf and all its settings are known to project files for building
Qwt applications.
In qwtconfig.pri the meaning of each option is explained in detail - it's worth
reading it before running into problems later.
\subsection BUILDSUBSECTION Build and installation
The Qt Creator is a graphical frontend for calling qmake/make and - technically -
it could be used for building and installing Qwt. But as this way requires a lot
more understanding of details the following step by step instructions are for
the easier way using the command line.
\subsubsection qwtinstall-unix Unix-like systems
The first step before creating the Makefile is to check that the correct version
of qmake is used. F.e. on older Linux distribution you often find a Qt3 qmake
and in the path.
The default setting of qmake is to generate a makefile that builds Qwt for the
same environment where the version of qmake has been built for.
So creating a makefile usually means something like:
\code
cd qwt-$(QWTVERSION)
/usr/local/Qt-5.0.1/bin/qmake qwt.pro
\endcode
The generated Makefile includes all paths related to the chosen Qt version
and the next step is:
\code
make
\endcode
( On multicore systems you can speed up building the Qwt libraries with running several
jobs simultaneously: f.e. "make -j4" on a dual core. )
Finally you have to install everything below the directories you have specified
in qwtconfig.pri. Usually this is one of the system directories ( /usr/local, /opt, ... )
where you don't have write permission and then the installation
needs to be done as root:
\code
sudo make install
\endcode
( On systems where sudo is not supported you can do the same with: su -c "make install" )
\subsubsection qwtinstall-windows Windows
Qt packages offer a command line interface, that can be found in the Qt application
menu: f.e "All Programs -> Qt -> Command Prompt". It is not mandatory to use it, but
probably the easiest way as it offers an environment, where everything is
initialized for a version of Qt ( f.e qmake is in the PATH ).
Creating a makefile usually means something like:
\code
cd qwt-$(QWTVERSION)
qmake qwt.pro
\endcode
The generated makefile includes all paths related to the chosen Qt version.
\paragraph qwtinstall-windows-mingw MinGW
For MinGW builds the name of the make tool is "mingw32-make"
\code
mingw32-make
\endcode
( On multicore systems you can speed up building the Qwt libraries with running several
jobs simultaneously: "mingw32-make -j" )
Finally you have to install everything below the directories you have specified
in qwtconfig.pri.
\code
mingw32-make install
\endcode
\paragraph qwtinstall-windows-msvc MSVC
For MSVC builds the name of the make tool is "nmake". Alternatively
it is possible to use "jom" ( http://qt-project.org/wiki/jom ),
that is usually included in a Qt Creator package.
\code
nmake
\endcode
Finally you have to install everything below the directories you have specified
in qwtconfig.pri.
\code
nmake install
\endcode
\section INTEGRATION Qwt and the Qt tool chain
\subsection USEPLUGIN Designer plugin
The Designer plugin and the corresponding Qwt library ( if the plugin has not
been built self containing ) have to be compatible with Qt version of the application
loading it ( usually the Qt Creator ) - what is often a different version of the
Qt libraries you want to build your application with. F.e on Windows the Qt Creator
is usually built with a MSVC compiler - even if included in a MinGW package !
To help Qt Designer/Creator with locating the Qwt Designer plugin
you have to set the environment variable QT_PLUGIN_PATH, modify qt.conf -
or install the plugin to one of the application default paths.
The Qt documentation explains all options in detail:
- http://qt-project.org/doc/qt-5.0/qtdoc/deployment-plugins.html
- http://qt-project.org/doc/qtcreator-2.7/adding-plugins.html.
F.e. on a Linux system you could add the following lines to .bashrc:
\code
QT_PLUGIN_PATH="${QWT_ROOT}/plugins:$QT_PLUGIN_PATH"
export QT_PLUGIN_PATH
\endcode
When the plugin has not been built including the Qwt library
( see QwtDesignerSelfContained in qwtconfig.pri )
the Qt Designer/Creator also needs to locate the Qwt libraries. On Unix systems the
path to the installed library is compiled into the plugin ( see rpath, ldd ), but on
Windows the Qt Creator needs to be configured ( ( \ref RUNAPP ) in the same way as for
any application using Qwt.
In case of problems the diagnostics of Qt Creator and Designer are very limited
( usually none ), but setting the environment variable QT_DEBUG_PLUGINS might help.
In the Qt Creator it is possible to check which plugins were loaded
successfully and for certain problems it also lists those that were recognized
but failed ( <i>Tools > Form Editor > About Qt Designer Plugins</i> ).
\subsection USEHELP Online Help
The Qwt class documentation can be loaded into the Qt Creator:
- open the settings dialog from the <i>Tools->Options</i> menu
- raise the tab "Help->Documentation".
- press the <i>Add</i> button and select qwt-$(QWTVERSION).qch.
Now the context sensitive help ( <i>F1</i> ) works for Qwt classes.
For browsing the documentation in the Qt Assistant:
- open the settings dialog from the <i>Edit->Preferences</i> menu
- raise the tab <i>Documentation</i>.
- press the <i>Add</i> button and select qwt-$(QWTVERSION).qch.
\section COMPILEANDLINKAPP Building a Qwt application
All flags and settings that are necessary to compile and link an application using Qwt
can be found in the file ${QWT_ROOT}/features/qwt.prf.
When using qmake it can included from the application project file in 2 different ways:
- Adding Qwt as qmake feature\n\n
When using the qmake feature mechanism you can bind a special version
of qmake to a special installation of Qwt without having to add
this dependency to the application project.
How to add Qwt as feature is documented in the
<a href="https://qt-project.org/doc/qt-5.0/qtdoc/qmake-advanced-usage.html#adding-new-configuration-features">qmake docs</a>.
After adding Qwt as a feature f.e on Linux as a persistent property ....
@code
qmake -set QMAKEFEATURES ${QWT_ROOT}/features
@endcode
.. the following line can be added to the application project file:
\code
CONFIG += qwt
\endcode
- Including qwt.prf in the application project file\n\n
Instead of using qwt.prf as qmake feature it can be included from
the application project file:\n\n
\code
include ( ${QWT_ROOT}/features/qwt.prf )
\endcode \n
The advantage of using a direct include is, that all settings of qwt.prf
are known to the application project file ( qmake features are included after the
application project file has been parsed ) and it can be implemented depending on -
f.e. settings made in qwtconfig.pri.
On Unix platforms it is possible to link a runtime path into the executable, so that the
location of the Qwt libraries can be found without having to configure a runtime environment:
- <a href="https://qt-project.org/doc/qt-5.0/qtdoc/qmake-variable-reference.html#qmake-lflags-rpath">QMAKE_LFLAGS_RPATH</a>
- <a href="https://qt-project.org/doc/qt-5.0/qtdoc/qmake-variable-reference.html#qmake-rpath">QMAKE_RPATH</a>
- <a href="https://qt-project.org/doc/qt-5.0/qtdoc/qmake-variable-reference.html#qmake-rpathdir">QMAKE_RPATHDIR</a>
\section RUNAPP Running a Qwt application
When using Qwt as shared library ( DLL ) the
<a href="http://en.wikipedia.org/wiki/Dynamic_linker">dynamic linker</a> has to find
it according to the rules of the operating system.
\subsection RUNWINDOWS Windows
The only reasonable way to configure the runtime environment - without having to copy the
Qwt libraries around - is to modify the PATH variable. F.e. this could be done by adding
the following line to some batch file:
\code
set PATH=%PATH%;${QWT_ROOT}\lib
\endcode
\subsection RUNLINUX GNU/Linux
Read the documentation about:
- <i>ldconfig</i>
- <i>/etc/ld.so.conf</i>
- <i>LD_LIBRARY_PATH</i>
Using the <i>ldd</i> command a configuration can be tested.
*/

153
qwt/doc/qwt.dox Normal file
View File

@@ -0,0 +1,153 @@
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
* Qwt Widget Library
* Copyright (C) 1997 Josef Wilgen
* Copyright (C) 2002 Uwe Rathmann
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the Qwt License, Version 1.0
*****************************************************************************/
/*
This file contains NO source code, just some documentation for doxygen to
parse.
*/
/*!
\mainpage Qwt - Qt Widgets for Technical Applications
The Qwt library contains GUI Components and utility classes which are primarily
useful for programs with a technical background. Beside a framework for 2D plots
it provides scales, sliders, dials, compasses, thermometers, wheels and knobs
to control or display values, arrays, or ranges of type double.
\image html plot.png
\if homepage
\section homepage Project page
The official project page is hosted at
<a href="http://qwt.sourceforge.net">sourceforge</a>
\endif
\section license License
Qwt is distributed under the terms of the \ref qwtlicense.
\section platforms Platforms
Qwt 6.1 might be usable in all environments where you find
<a href="https://qt-project.org">Qt</a>.
It is compatible with Qt4 ( >= 4.4 ) and Qt5.
\section changelogonmainpage What's new
Read the \ref qwtchangelog "summary" of the most important changes.
\section screenshotsonmainpage Screenshots
- \ref curvescreenshots\n
- \ref scatterscreenshots\n
- \ref spectrogramscreenshots\n
- \ref histogramscreenshots\n
- \ref controlscreenshots\n
\latexonly Screenshots are only available in the HTML docs.\endlatexonly
\section downloads Downloads
Stable releases or prereleases are available at the Qwt <a href="http://sourceforge.net/projects/qwt/files">project page</a>.
For getting a snapshot with all bugfixes for the latest 5.2 release:
\code svn checkout svn://svn.code.sf.net/p/qwt/code/branches/qwt-5.2 \endcode
For getting a snapshot with all bugfixes for the latest 6.1 release:
\code svn checkout svn://svn.code.sf.net/p/qwt/code/branches/qwt-6.1 \endcode
For getting a development snapshot from the SVN repository:
\code svn checkout svn://svn.code.sf.net/p/qwt/code/trunk/qwt \endcode
\section installonmainpage Installation
Qwt doesn't distribute binary packages, but today all major Linux distributors
offer one. Note, that these packages often don't include the examples.
When no binary packages are available ( f.e. on Windows ) Qwt needs to be
\ref qwtinstall "compiled and installed" on the target system.
\section support Support
- Mailing list\n
For all kind of Qwt related questions use the Qwt <a href="http://sourceforge.net/mail/?group_id=13693">mailing list</a>.\n
If you prefer newsgroups use the mail to news gateway of <a href="http://dir.gmane.org/gmane.comp.graphics.qwt.general">Gmane</a>.
- Forum\n
<a href="http://www.qtcentre.org">Qt Centre</a> is a great resource for Qt
related questions. It has a sub forum, that is dedicated to
Qwt related questions.
- Individual support\n
If you are looking for individual support, or need someone who implements
your Qwt component/application contact support@qwt-project.org. Sending
requests to this address without a good reason for not using public
support channels might be silently ignored.
\section relatedprojects Related Projects
<a href="http://qwtpolar.sourceforge.net">QwtPolar</a>, a polar plot widget.\n
<a href="http://qwtplot3d.sourceforge.net">QwtPlot3D</a>, an OpenGL 3D plot widget.\n
\section donations Donations
Sourceforge offers a <a href="http://sourceforge.net/docman/display_doc.php?docid=20244&group_id=1"> Donation System</a> via PayPal.
You can use it, if you like to <a href="http://sourceforge.net/project/project_donations.php?group_id=13693">support</a> the development of Qwt.
\section credits Credits:
\par Authors:
Uwe Rathmann, Josef Wilgen ( <= Qwt 0.2 )
\par Project admin:
Uwe Rathmann \<rathmann@users.sourceforge.net\>
*/
/*!
\page qwtlicense Qwt License, Version 1.0
\include "COPYING"
*/
/*!
\page curvescreenshots Curve Plots
\image html plot.png
\image html sinus.png
\image html cpuplot.png
\image html graph.png
\image html curves.png
*/
/*!
\page scatterscreenshots Scatter Plot
\image html scatterplot.png
*/
/*!
\page spectrogramscreenshots Spectrogram, Contour Plot
\image html spectrogram1.png
\image html spectrogram2.png
\image html spectrogram3.png
/*!
\page histogramscreenshots Histogram
\image html histogram.png
*/
/*!
\page controlscreenshots Dials, Compasses, Knobs, Wheels, Sliders, Thermos
\image html radio.png
\image html sliders.png
\image html dials1.png
\image html dials2.png
\image html sysinfo.png
*/

155
qwt/doc/tex/plotlayout.tex Normal file
View File

@@ -0,0 +1,155 @@
\begin{tikzpicture}{0pt}{0pt}{500pt}{400pt}
\clip(0pt,400pt) -- (425.118pt,400pt) -- (425.118pt,63.8605pt) -- (0pt,63.8605pt) -- (0pt,400pt);
\color[rgb]{0.501961,0.501961,0.501961}
\fill(0pt,400pt) -- (424.267pt,400pt) -- (424.267pt,64.7008pt) -- (0pt,64.7008pt) -- (0pt,400pt);
\color[rgb]{0.752941,0.752941,0.752941}
\fill(130.086pt,326.89pt) -- (353.698pt,326.89pt) -- (353.698pt,114.281pt) -- (130.086pt,114.281pt) -- (130.086pt,326.89pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{242.317pt}{215.964pt}}]{\fontsize{14}{0}\selectfont{Canvas}}
\color[rgb]{1,1,1}
\fill(68.0188pt,391.597pt) -- (415.765pt,391.597pt) -- (415.765pt,373.109pt) -- (68.0188pt,373.109pt) -- (68.0188pt,391.597pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{242.317pt}{377.311pt}}]{\fontsize{14}{0}\selectfont{\textbf{Title}}}
\color[rgb]{1,1,1}
\fill(8.50235pt,326.89pt) -- (62.9174pt,326.89pt) -- (62.9174pt,114.281pt) -- (8.50235pt,114.281pt) -- (8.50235pt,326.89pt);
\begin{scope}
\clip(8.50235pt,326.89pt) -- (63.7676pt,326.89pt) -- (63.7676pt,305.881pt) -- (8.50235pt,305.881pt) -- (8.50235pt,326.89pt);
\color[rgb]{0,0,0}
\fill(10.2028pt,319.747pt) -- (17.0047pt,319.747pt) -- (17.0047pt,313.024pt) -- (10.2028pt,313.024pt) -- (10.2028pt,319.747pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{39.5359pt}{311.763pt}}]{\fontsize{14}{0}\selectfont{Item 1}}
\end{scope}
\begin{scope}
\clip(8.50235pt,300.839pt) -- (63.7676pt,300.839pt) -- (63.7676pt,279.83pt) -- (8.50235pt,279.83pt) -- (8.50235pt,300.839pt);
\color[rgb]{0,0,0}
\fill(10.2028pt,293.696pt) -- (17.0047pt,293.696pt) -- (17.0047pt,286.973pt) -- (10.2028pt,286.973pt) -- (10.2028pt,293.696pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{39.5359pt}{285.713pt}}]{\fontsize{14}{0}\selectfont{Item 2}}
\end{scope}
\begin{scope}
\color[rgb]{1,1,1}
\fill(68.0188pt,328.57pt) -- (129.236pt,328.57pt) -- (129.236pt,113.441pt) -- (68.0188pt,113.441pt) -- (68.0188pt,328.57pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{80.7724pt}{220.586pt}},rotate=90]{\fontsize{12}{0}\selectfont{\textbf{Axis: yLeft}}}
\pgftext[center, base, at={\pgfpoint{101.603pt}{113.861pt}}]{\fontsize{10}{0}\selectfont{-1,000}}
\pgftext[center, base, at={\pgfpoint{105.854pt}{165.333pt}}]{\fontsize{10}{0}\selectfont{-500}}
\pgftext[center, base, at={\pgfpoint{113.506pt}{216.804pt}}]{\fontsize{10}{0}\selectfont{0}}
\pgftext[center, base, at={\pgfpoint{107.555pt}{268.275pt}}]{\fontsize{10}{0}\selectfont{500}}
\pgftext[center, base, at={\pgfpoint{103.304pt}{319.747pt}}]{\fontsize{10}{0}\selectfont{1,000}}
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,127.727pt) -- (124.134pt,127.727pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,137.811pt) -- (124.134pt,137.811pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,148.736pt) -- (124.134pt,148.736pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,158.82pt) -- (124.134pt,158.82pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,178.988pt) -- (124.134pt,178.988pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,189.913pt) -- (124.134pt,189.913pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,199.997pt) -- (124.134pt,199.997pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,210.081pt) -- (124.134pt,210.081pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,231.09pt) -- (124.134pt,231.09pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,241.174pt) -- (124.134pt,241.174pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,251.258pt) -- (124.134pt,251.258pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,261.342pt) -- (124.134pt,261.342pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,282.351pt) -- (124.134pt,282.351pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,292.435pt) -- (124.134pt,292.435pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,302.52pt) -- (124.134pt,302.52pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,313.444pt) -- (124.134pt,313.444pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,117.643pt) -- (120.733pt,117.643pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,168.904pt) -- (120.733pt,168.904pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,220.165pt) -- (120.733pt,220.165pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,272.267pt) -- (120.733pt,272.267pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,323.528pt) -- (120.733pt,323.528pt);
\draw[line width=0pt, line join=bevel, line cap=rect](127.535pt,323.528pt) -- (127.535pt,117.643pt);
\color[rgb]{1,1,1}
\fill(354.548pt,328.57pt) -- (415.765pt,328.57pt) -- (415.765pt,113.441pt) -- (354.548pt,113.441pt) -- (354.548pt,328.57pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{403.862pt}{220.586pt}},rotate=-90]{\fontsize{12}{0}\selectfont{\textbf{Axis: yRight}}}
\pgftext[center, base, at={\pgfpoint{382.181pt}{113.861pt}}]{\fontsize{10}{0}\selectfont{-1,000}}
\pgftext[center, base, at={\pgfpoint{377.93pt}{165.333pt}}]{\fontsize{10}{0}\selectfont{-500}}
\pgftext[center, base, at={\pgfpoint{370.277pt}{216.804pt}}]{\fontsize{10}{0}\selectfont{0}}
\pgftext[center, base, at={\pgfpoint{376.229pt}{268.275pt}}]{\fontsize{10}{0}\selectfont{500}}
\pgftext[center, base, at={\pgfpoint{380.48pt}{319.747pt}}]{\fontsize{10}{0}\selectfont{1,000}}
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,127.727pt) -- (359.65pt,127.727pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,137.811pt) -- (359.65pt,137.811pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,148.736pt) -- (359.65pt,148.736pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,158.82pt) -- (359.65pt,158.82pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,178.988pt) -- (359.65pt,178.988pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,189.913pt) -- (359.65pt,189.913pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,199.997pt) -- (359.65pt,199.997pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,210.081pt) -- (359.65pt,210.081pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,231.09pt) -- (359.65pt,231.09pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,241.174pt) -- (359.65pt,241.174pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,251.258pt) -- (359.65pt,251.258pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,261.342pt) -- (359.65pt,261.342pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,282.351pt) -- (359.65pt,282.351pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,292.435pt) -- (359.65pt,292.435pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,302.52pt) -- (359.65pt,302.52pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,313.444pt) -- (359.65pt,313.444pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,117.643pt) -- (363.05pt,117.643pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,168.904pt) -- (363.05pt,168.904pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,220.165pt) -- (363.05pt,220.165pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,272.267pt) -- (363.05pt,272.267pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,323.528pt) -- (363.05pt,323.528pt);
\draw[line width=0pt, line join=bevel, line cap=rect](356.249pt,323.528pt) -- (356.249pt,117.643pt);
\color[rgb]{1,1,1}
\fill(118.183pt,113.441pt) -- (363.05pt,113.441pt) -- (363.05pt,73.1043pt) -- (118.183pt,73.1043pt) -- (118.183pt,113.441pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{241.042pt}{76.4657pt}}]{\fontsize{12}{0}\selectfont{\textbf{Axis: xBottom}}}
\pgftext[center, base, at={\pgfpoint{133.487pt}{92.4323pt}}]{\fontsize{10}{0}\selectfont{-1,000}}
\pgftext[center, base, at={\pgfpoint{187.689pt}{92.4323pt}}]{\fontsize{10}{0}\selectfont{-500}}
\pgftext[center, base, at={\pgfpoint{241.892pt}{92.4323pt}}]{\fontsize{10}{0}\selectfont{0}}
\pgftext[center, base, at={\pgfpoint{296.094pt}{92.4323pt}}]{\fontsize{10}{0}\selectfont{500}}
\pgftext[center, base, at={\pgfpoint{350.297pt}{92.4323pt}}]{\fontsize{10}{0}\selectfont{1,000}}
\draw[line width=0pt, line join=bevel, line cap=rect](144.54pt,111.76pt) -- (144.54pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](155.593pt,111.76pt) -- (155.593pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](165.796pt,111.76pt) -- (165.796pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](176.849pt,111.76pt) -- (176.849pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](198.955pt,111.76pt) -- (198.955pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](209.158pt,111.76pt) -- (209.158pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](220.211pt,111.76pt) -- (220.211pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](231.264pt,111.76pt) -- (231.264pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](252.52pt,111.76pt) -- (252.52pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](263.573pt,111.76pt) -- (263.573pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](274.626pt,111.76pt) -- (274.626pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](285.679pt,111.76pt) -- (285.679pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](306.935pt,111.76pt) -- (306.935pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](317.988pt,111.76pt) -- (317.988pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](329.041pt,111.76pt) -- (329.041pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](339.244pt,111.76pt) -- (339.244pt,108.399pt);
\draw[line width=0pt, line join=bevel, line cap=rect](133.487pt,111.76pt) -- (133.487pt,105.038pt);
\draw[line width=0pt, line join=bevel, line cap=rect](187.902pt,111.76pt) -- (187.902pt,105.038pt);
\draw[line width=0pt, line join=bevel, line cap=rect](242.317pt,111.76pt) -- (242.317pt,105.038pt);
\draw[line width=0pt, line join=bevel, line cap=rect](295.882pt,111.76pt) -- (295.882pt,105.038pt);
\draw[line width=0pt, line join=bevel, line cap=rect](350.297pt,111.76pt) -- (350.297pt,105.038pt);
\draw[line width=0pt, line join=bevel, line cap=rect](133.487pt,111.76pt) -- (350.297pt,111.76pt);
\color[rgb]{1,1,1}
\fill(118.183pt,368.067pt) -- (363.05pt,368.067pt) -- (363.05pt,327.73pt) -- (118.183pt,327.73pt) -- (118.183pt,368.067pt);
\color[rgb]{0,0,0}
\pgftext[center, base, at={\pgfpoint{241.042pt}{355.462pt}}]{\fontsize{12}{0}\selectfont{\textbf{Axis: xTop}}}
\pgftext[center, base, at={\pgfpoint{133.487pt}{341.176pt}}]{\fontsize{10}{0}\selectfont{-1,000}}
\pgftext[center, base, at={\pgfpoint{187.689pt}{341.176pt}}]{\fontsize{10}{0}\selectfont{-500}}
\pgftext[center, base, at={\pgfpoint{241.892pt}{341.176pt}}]{\fontsize{10}{0}\selectfont{0}}
\pgftext[center, base, at={\pgfpoint{296.094pt}{341.176pt}}]{\fontsize{10}{0}\selectfont{500}}
\pgftext[center, base, at={\pgfpoint{350.297pt}{341.176pt}}]{\fontsize{10}{0}\selectfont{1,000}}
\draw[line width=0pt, line join=bevel, line cap=rect](144.54pt,329.411pt) -- (144.54pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](155.593pt,329.411pt) -- (155.593pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](165.796pt,329.411pt) -- (165.796pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](176.849pt,329.411pt) -- (176.849pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](198.955pt,329.411pt) -- (198.955pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](209.158pt,329.411pt) -- (209.158pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](220.211pt,329.411pt) -- (220.211pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](231.264pt,329.411pt) -- (231.264pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](252.52pt,329.411pt) -- (252.52pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](263.573pt,329.411pt) -- (263.573pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](274.626pt,329.411pt) -- (274.626pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](285.679pt,329.411pt) -- (285.679pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](306.935pt,329.411pt) -- (306.935pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](317.988pt,329.411pt) -- (317.988pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](329.041pt,329.411pt) -- (329.041pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](339.244pt,329.411pt) -- (339.244pt,332.772pt);
\draw[line width=0pt, line join=bevel, line cap=rect](133.487pt,329.411pt) -- (133.487pt,336.133pt);
\draw[line width=0pt, line join=bevel, line cap=rect](187.902pt,329.411pt) -- (187.902pt,336.133pt);
\draw[line width=0pt, line join=bevel, line cap=rect](242.317pt,329.411pt) -- (242.317pt,336.133pt);
\draw[line width=0pt, line join=bevel, line cap=rect](295.882pt,329.411pt) -- (295.882pt,336.133pt);
\draw[line width=0pt, line join=bevel, line cap=rect](350.297pt,329.411pt) -- (350.297pt,336.133pt);
\draw[line width=0pt, line join=bevel, line cap=rect](133.487pt,329.411pt) -- (350.297pt,329.411pt);
\end{scope}
\end{tikzpicture}

234
qwt/doc/tex/qwtplot.tex Normal file
View File

@@ -0,0 +1,234 @@
\documentclass[12pt,a4paper]{book}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{makeidx}
\usepackage{pdfpages}
\usepackage{tikz}
%\usepackage{fullpage}
\usepackage[left=1cm,right=2cm,top=2cm,footskip=1.5cm,bottom=1cm]{geometry}
\usepackage{listings}
\usepackage{color}
%\setlength{\parskip}{\baselineskip}
\setlength{\parindent}{0pt}
\definecolor{lightgray}{gray}{0.97}
\lstset{frame=single}
\lstset{framesep=5pt}
\lstset{language=C++}
\lstset{keywordstyle=\color{black}\bfseries\emph}
\lstset{backgroundcolor=\color{lightgray}}
\author{Uwe Rathmann}
\title{Qwt Plot Framework}
\begin{document}
\maketitle
\pagestyle{headings}
\tableofcontents
\chapter{Introduction}
Introduction bla bla
\chapter{Plot Widget}
\section{Composite Widget Architecture}
QwtPlot is a composite widget, that contains a QwtPlotCanvas,
4 QwtScaleWidgets, a QwtTextWidget for the title and an optional QwtLegend.
All widgets might be hidden or visible depending on the current configuration
of the plot widget. Many attributes of a plot are in fact
attributes of the internal child widgets,
\\
\\
QwtPlot has its own layout engine, that is implemented as QwtPlotLayout.
The following picture shows a layout of a plot widget, where all internal widgets are visible.
\begin{center}
\input{plotlayout}
\end{center}
\bigskip
\begin{center}
\input{plotlayout}
\end{center}
The composite widget architecture\footnote{Subject of redesign}
of QwtPlot has some consequences for the programming interface:
\begin{itemize}
\item Attributes\\
Most attributes of child widgets or the layout object can't be
changed using QwtPlot methods. Instead the application code has to
use a getter method for the child and access it directly.
Beside making the programming interface less obvious it has the effect,
that the plot can't be configured in the designer ( or creator )
\footnote{A proof of concept has been made how to embed a special
editor for QwtPlot into the designer and how to pass the edited
properties using QwtPlot::applyProperties() - but it was never implemented.}.
\item Events\\
Overloading event callbacks of QwtPlot has no effect when an event is posted to a child widget. When the application wants to implement a specific event handling it needs to use a technique called event filtering.
\end{itemize}
\begin{lstlisting}
#include <qwt_plot.h>
#include <qwt_plot_canvas.h>
#include <qwt_scale_widget.h>
class MyPlot: public QwtPlot
{
public:
MyPlot(QWidget *parent = NULL);
virtual bool eventFilter(QObject *obj, QEvent *event)
};
MyPlot::MyPlot(QWidget *parent):
QwtPlot(parent)
{
for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
axisWidget(axis)->setFont( QFont( ... ) );
canvas()->setPalette( QPalette( Qt::darkBlue ) );
canvas()->installEventFilter(this);
}
bool MyPlot::eventFilter(QObject *object, QEvent *event)
{
if ( object == canvas() )
{
...
}
return QwtPlot::eventFilter(object, event);
}
\end{lstlisting}
\section{Scale Widget}
\section{Legend}
\chapter{Scales, Axes and Transformations}
\section{Scale Divisions}
\section{Scale Maps}
\section{Scale Engine}
\section{Scale Renderer}
\chapter{Navigation and Selection}
\section{Picking}
\section{Zooming}
\section{Panning}
\chapter{Items on the Plot Canvas}
Decorations + items representing some sort of data.
\section{Overview}
\section{The Grid}
\section{Axes}
\section{Markers for Coordinates or Points}
\section{Curves displaying a series of 2D Points}
\subsection{Symbols}
\subsection{Styles}
\subsection{Curve Fitting}
\section{Curves displaying a series of 3D Points}
\section{Curves displaying a series of intervals}
\section{Histograms displaying ...}
\section{Spectrograms and other items displaying raster data}
\section{SVG Item}
\chapter{Exporting and Printing}
\chapter{Text Engines}
All Qwt widgets use QwtText objects to specify text labels.
Their format attribute specifies the text engine, that is
responsible for interpreting and rendering the string.
Today there are 3 different text engines available.
\footnote{A text engine for TeX documents would be a great
solution to display labels in mathematical notation.
There are a couple Qt/KDE applications available,
that can display TeX documents. Most of them simply write
the TeX document to a file generate an image from it using the
TeX tools and load the image then - but maybe there is
somewhere an "real" implementation inside, that
translates a TeX document to QPainter calls. }
\begin{itemize}
\item Plain Text\\
QwtPlainTextEngine doesn't take care of any syntax and lays out and renders
the string using QPainter and QFontMetrics.
\item Rich Text\\
QwtRichTextEngine is able to display a subset of HTML 4 markup using the renderer,
that is built into the Scribe classes of Qt. It is often used because of
sub- or superscripts to display very simple mathematical expressions.
\item Mathematical Markup Language (MathML)\\
QwtMathMLTextEngine uses the MathML renderer from the Qt solutions
\footnote{
Unfortunately we don't know much about the quality of the MathML renderer yet
as it is not much in use because of earlier license issues.
Today the solution package is LGPL'd like the rest of Qt and in Qwt 6 it can be
installed and used easily.
}
package. In MathML it should be able to define almost any kind of formula
\end{itemize}
The text engines for plain and rich texts are always available.
The MathML text engine ( like any other homebrew text engine ) has to be
registered by the application code:
\bigskip
\begin{lstlisting}
#include <qwt_mathml_text_engine.h>
QwtText::setTextEngine(QwtText::MathMLText, new QwtMathMLTextEngine());
\end{lstlisting}
\bigskip
QwtText might also have a couple of additional properties, controlling how to display a text.
\begin{itemize}
\item Font
\item Color
\item Background color and border pen
\end{itemize}
\chapter{Advanced Topics}
\section{Incremental Painting}
\section{Building Plot Grids}
\section{Controlling the Aspect Ratio}
\section{Levels of Detail}
\end{document}

View File

@@ -9,10 +9,11 @@
include( $${PWD}/../examples.pri )
TARGET = sliders
TARGET = animation
HEADERS = \
sliders.h
plot.h
SOURCES = \
sliders.cpp
plot.cpp \
main.cpp

View File

@@ -0,0 +1,46 @@
#include <qapplication.h>
#include "plot.h"
#ifndef QWT_NO_OPENGL
#define USE_OPENGL 1
#endif
#if USE_OPENGL
#include <qgl.h>
#include <qwt_plot_glcanvas.h>
#else
#include <qwt_plot_canvas.h>
#endif
int main ( int argc, char **argv )
{
#if USE_OPENGL
#if QT_VERSION >= 0x040600 && QT_VERSION < 0x050000
// on my box QPaintEngine::OpenGL2 has serious problems, f.e:
// the lines of a simple drawRect are wrong.
QGL::setPreferredPaintEngine( QPaintEngine::OpenGL );
#endif
#endif
QApplication a( argc, argv );
Plot plot;
#if USE_OPENGL
QwtPlotGLCanvas *canvas = new QwtPlotGLCanvas();
canvas->setFrameStyle( QwtPlotGLCanvas::NoFrame );
#else
QwtPlotCanvas *canvas = new QwtPlotCanvas();
canvas->setFrameStyle( QFrame::NoFrame );
canvas->setPaintAttribute( QwtPlotCanvas::BackingStore, false );
#endif
plot.setCanvas( canvas );
plot.setCanvasBackground( QColor( 30, 30, 50 ) );
plot.resize( 400, 400 );
plot.show();
return a.exec();
}

View File

@@ -0,0 +1,241 @@
#include <qapplication.h>
#include <qwt_math.h>
#include <qwt_symbol.h>
#include <qwt_curve_fitter.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_canvas.h>
#include <qwt_plot_layout.h>
#include <qevent.h>
#include "plot.h"
class Curve: public QwtPlotCurve
{
public:
void setTransformation( const QTransform &transform )
{
d_transform = transform;
}
virtual void updateSamples( double phase )
{
setSamples( d_transform.map( points( phase ) ) );
}
private:
virtual QPolygonF points( double phase ) const = 0;
private:
QTransform d_transform;
};
class Curve1: public Curve
{
public:
Curve1()
{
setPen( QColor( 150, 150, 200 ), 2 );
setStyle( QwtPlotCurve::Lines );
QwtSplineCurveFitter *curveFitter = new QwtSplineCurveFitter();
curveFitter->setSplineSize( 150 );
setCurveFitter( curveFitter );
setCurveAttribute( QwtPlotCurve::Fitted, true );
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::XCross );
symbol->setPen( Qt::yellow );
symbol->setSize( 7 );
setSymbol( symbol );
// somewhere to the left
QTransform transform;
transform.scale( 1.5, 1.0 );
transform.translate( 1.5, 3.0 );
setTransformation( transform );
}
virtual QPolygonF points( double phase ) const
{
QPolygonF points;
const int numSamples = 15;
for ( int i = 0; i < numSamples; i++ )
{
const double v = 6.28 * double( i ) / double( numSamples - 1 );
points += QPointF( qSin( v - phase ), v );
}
return points;
}
};
class Curve2: public Curve
{
public:
Curve2()
{
setStyle( QwtPlotCurve::Sticks );
setPen( QColor( 200, 150, 50 ) );
setSymbol( new QwtSymbol( QwtSymbol::Ellipse,
QColor( Qt::gray ), QColor( Qt::yellow ), QSize( 5, 5 ) ) );
}
private:
virtual QPolygonF points( double phase ) const
{
QPolygonF points;
const int numSamples = 50;
for ( int i = 0; i < numSamples; i++ )
{
const double v = 10.0 * i / double( numSamples - 1 );
points += QPointF( v, qCos( 3.0 * ( v + phase ) ) );
}
return points;
}
};
class Curve3: public Curve
{
public:
Curve3()
{
setStyle( QwtPlotCurve::Lines );
setPen( QColor( 100, 200, 150 ), 2 );
QwtSplineCurveFitter* curveFitter = new QwtSplineCurveFitter();
curveFitter->setFitMode( QwtSplineCurveFitter::ParametricSpline );
curveFitter->setSplineSize( 200 );
setCurveFitter( curveFitter );
setCurveAttribute( QwtPlotCurve::Fitted, true );
// somewhere in the top right corner
QTransform transform;
transform.translate( 7.0, 7.5 );
transform.scale( 2.0, 2.0 );
setTransformation( transform );
}
private:
virtual QPolygonF points( double phase ) const
{
QPolygonF points;
const int numSamples = 9;
for ( int i = 0; i < numSamples; i++ )
{
const double v = i * 2.0 * M_PI / ( numSamples - 1 );
points += QPointF( qSin( v - phase ), qCos( 3.0 * ( v + phase ) ) );
}
return points;
}
};
class Curve4: public Curve
{
public:
Curve4()
{
setStyle( QwtPlotCurve::Lines );
setPen( Qt::red, 2 );
initSamples();
// somewhere in the center
QTransform transform;
transform.translate( 7.0, 3.0 );
transform.scale( 1.5, 1.5 );
setTransformation( transform );
}
private:
virtual QPolygonF points( double phase ) const
{
const double speed = 0.05;
const double s = speed * qSin( phase );
const double c = qSqrt( 1.0 - s * s );
for ( int i = 0; i < d_points.size(); i++ )
{
const QPointF p = d_points[i];
const double u = p.x();
const double v = p.y();
d_points[i].setX( u * c - v * s );
d_points[i].setY( v * c + u * s );
}
return d_points;
}
void initSamples()
{
const int numSamples = 15;
for ( int i = 0; i < numSamples; i++ )
{
const double angle = i * ( 2.0 * M_PI / ( numSamples - 1 ) );
QPointF p( qCos( angle ), qSin( angle ) );
if ( i % 2 )
p *= 0.4;
d_points += p;
}
}
private:
mutable QPolygonF d_points;
};
Plot::Plot( QWidget *parent ):
QwtPlot( parent)
{
setAutoReplot( false );
setTitle( "Animated Curves" );
// hide all axes
for ( int axis = 0; axis < QwtAxis::PosCount; axis++ )
setAxisVisible( axis, false );
plotLayout()->setCanvasMargin( 10 );
d_curves[0] = new Curve1();
d_curves[1] = new Curve2();
d_curves[2] = new Curve3();
d_curves[3] = new Curve4();
updateCurves();
for ( int i = 0; i < CurveCount; i++ )
d_curves[i]->attach( this );
d_time.start();
( void )startTimer( 40 );
}
void Plot::timerEvent( QTimerEvent * )
{
updateCurves();
replot();
}
void Plot::updateCurves()
{
const double speed = 2 * M_PI / 25000.0; // a cycle every 25 seconds
const double phase = d_time.elapsed() * speed;
for ( int i = 0; i < CurveCount; i++ )
d_curves[i]->updateSamples( phase );
}

View File

@@ -0,0 +1,21 @@
#include <qwt_plot.h>
#include <qdatetime.h>
class Curve;
class Plot: public QwtPlot
{
public:
Plot( QWidget * = NULL);
protected:
virtual void timerEvent( QTimerEvent * );
private:
void updateCurves();
enum { CurveCount = 4 };
Curve *d_curves[CurveCount];
QTime d_time;
};

View File

@@ -0,0 +1,132 @@
#include "barchart.h"
#include <qwt_plot_renderer.h>
#include <qwt_plot_canvas.h>
#include <qwt_plot_multi_barchart.h>
#include <qwt_column_symbol.h>
#include <qwt_plot_layout.h>
#include <qwt_legend.h>
#include <qwt_scale_draw.h>
BarChart::BarChart( QWidget *parent ):
QwtPlot( parent )
{
setAutoFillBackground( true );
setPalette( Qt::white );
canvas()->setPalette( QColor( "LemonChiffon" ) );
setTitle( "Bar Chart" );
setAxisTitle( QwtAxis::yLeft, "Whatever" );
setAxisTitle( QwtAxis::xBottom, "Whatever" );
d_barChartItem = new QwtPlotMultiBarChart( "Bar Chart " );
d_barChartItem->setLayoutPolicy( QwtPlotMultiBarChart::AutoAdjustSamples );
d_barChartItem->setSpacing( 20 );
d_barChartItem->setMargin( 3 );
d_barChartItem->attach( this );
insertLegend( new QwtLegend() );
populate();
setOrientation( 0 );
setAutoReplot( true );
}
void BarChart::populate()
{
static const char *colors[] = { "DarkOrchid", "SteelBlue", "Gold" };
const int numSamples = 5;
const int numBars = sizeof( colors ) / sizeof( colors[0] );
QList<QwtText> titles;
for ( int i = 0; i < numBars; i++ )
{
QString title("Bar %1");
titles += title.arg( i );
}
d_barChartItem->setBarTitles( titles );
d_barChartItem->setLegendIconSize( QSize( 10, 14 ) );
for ( int i = 0; i < numBars; i++ )
{
QwtColumnSymbol *symbol = new QwtColumnSymbol( QwtColumnSymbol::Box );
symbol->setLineWidth( 2 );
symbol->setFrameStyle( QwtColumnSymbol::Raised );
symbol->setPalette( QPalette( colors[i] ) );
d_barChartItem->setSymbol( i, symbol );
}
QVector< QVector<double> > series;
for ( int i = 0; i < numSamples; i++ )
{
QVector<double> values;
for ( int j = 0; j < numBars; j++ )
values += ( 2 + qrand() % 8 );
series += values;
}
d_barChartItem->setSamples( series );
}
void BarChart::setMode( int mode )
{
if ( mode == 0 )
{
d_barChartItem->setStyle( QwtPlotMultiBarChart::Grouped );
}
else
{
d_barChartItem->setStyle( QwtPlotMultiBarChart::Stacked );
}
}
void BarChart::setOrientation( int orientation )
{
QwtAxis::Position axis1, axis2;
if ( orientation == 0 )
{
axis1 = QwtAxis::xBottom;
axis2 = QwtAxis::yLeft;
d_barChartItem->setOrientation( Qt::Vertical );
}
else
{
axis1 = QwtAxis::yLeft;
axis2 = QwtAxis::xBottom;
d_barChartItem->setOrientation( Qt::Horizontal );
}
setAxisScale( axis1, 0, d_barChartItem->dataSize() - 1, 1.0 );
setAxisAutoScale( axis2 );
QwtScaleDraw *scaleDraw1 = axisScaleDraw( axis1 );
scaleDraw1->enableComponent( QwtScaleDraw::Backbone, false );
scaleDraw1->enableComponent( QwtScaleDraw::Ticks, false );
QwtScaleDraw *scaleDraw2 = axisScaleDraw( axis2 );
scaleDraw2->enableComponent( QwtScaleDraw::Backbone, true );
scaleDraw2->enableComponent( QwtScaleDraw::Ticks, true );
plotLayout()->setAlignCanvasToScale( axis1, true );
plotLayout()->setAlignCanvasToScale( axis2, false );
plotLayout()->setCanvasMargin( 0 );
updateCanvasMargins();
replot();
}
void BarChart::exportChart()
{
QwtPlotRenderer renderer;
renderer.exportTo( this, "barchart.pdf" );
}

View File

@@ -0,0 +1,25 @@
#ifndef _BAR_CHART_H_
#include <qwt_plot.h>
class QwtPlotMultiBarChart;
class BarChart: public QwtPlot
{
Q_OBJECT
public:
BarChart( QWidget * = NULL );
public Q_SLOTS:
void setMode( int );
void setOrientation( int );
void exportChart();
private:
void populate();
QwtPlotMultiBarChart *d_barChartItem;
};
#endif

View File

@@ -9,10 +9,11 @@
include( $${PWD}/../examples.pri )
TARGET = curvdemo2
HEADERS = \
curvdemo2.h
TARGET = barchart
SOURCES = \
curvdemo2.cpp
barchart.cpp \
main.cpp
HEADERS = \
barchart.h

View File

@@ -0,0 +1,64 @@
#include <qapplication.h>
#include <qmainwindow.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qcombobox.h>
#include "barchart.h"
class MainWindow: public QMainWindow
{
public:
MainWindow( QWidget * = NULL );
private:
BarChart *d_chart;
};
MainWindow::MainWindow( QWidget *parent ):
QMainWindow( parent )
{
d_chart = new BarChart( this );
setCentralWidget( d_chart );
QToolBar *toolBar = new QToolBar( this );
QComboBox *typeBox = new QComboBox( toolBar );
typeBox->addItem( "Grouped" );
typeBox->addItem( "Stacked" );
typeBox->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
QComboBox *orientationBox = new QComboBox( toolBar );
orientationBox->addItem( "Vertical" );
orientationBox->addItem( "Horizontal" );
orientationBox->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
QToolButton *btnExport = new QToolButton( toolBar );
btnExport->setText( "Export" );
btnExport->setToolButtonStyle( Qt::ToolButtonTextUnderIcon );
connect( btnExport, SIGNAL( clicked() ), d_chart, SLOT( exportChart() ) );
toolBar->addWidget( typeBox );
toolBar->addWidget( orientationBox );
toolBar->addWidget( btnExport );
addToolBar( toolBar );
d_chart->setMode( typeBox->currentIndex() );
connect( typeBox, SIGNAL( currentIndexChanged( int ) ),
d_chart, SLOT( setMode( int ) ) );
d_chart->setOrientation( orientationBox->currentIndex() );
connect( orientationBox, SIGNAL( currentIndexChanged( int ) ),
d_chart, SLOT( setOrientation( int ) ) );
}
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MainWindow mainWindow;
mainWindow.resize( 600, 400 );
mainWindow.show();
return a.exec();
}

View File

@@ -14,7 +14,7 @@ TARGET = bode
HEADERS = \
mainwindow.h \
plot.h \
complexnumber.h \
complexnumber.h \
pixmaps.h
SOURCES = \

View File

@@ -7,21 +7,21 @@ class ComplexNumber
{
public:
ComplexNumber() ;
ComplexNumber(double r, double i = 0.0);
ComplexNumber( double r, double i = 0.0 );
double real() const;
double imag() const;
friend ComplexNumber operator*(
const ComplexNumber &, const ComplexNumber &);
const ComplexNumber &, const ComplexNumber & );
friend ComplexNumber operator+(
const ComplexNumber &, const ComplexNumber &);
const ComplexNumber &, const ComplexNumber & );
friend ComplexNumber operator-(
const ComplexNumber &, const ComplexNumber &);
const ComplexNumber &, const ComplexNumber & );
friend ComplexNumber operator/(
const ComplexNumber &, const ComplexNumber &);
const ComplexNumber &, const ComplexNumber & );
private:
double d_real;
@@ -29,14 +29,14 @@ private:
};
inline ComplexNumber::ComplexNumber():
d_real(0.0),
d_imag(-0.0)
d_real( 0.0 ),
d_imag( -0.0 )
{
}
inline ComplexNumber::ComplexNumber(double re, double im):
d_real(re),
d_imag(im)
inline ComplexNumber::ComplexNumber( double re, double im ):
d_real( re ),
d_imag( im )
{
}
@@ -51,33 +51,33 @@ inline double ComplexNumber::imag() const
}
inline ComplexNumber operator+(
const ComplexNumber &x1, const ComplexNumber &x2)
const ComplexNumber &x1, const ComplexNumber &x2 )
{
return ComplexNumber(x1.d_real + x2.d_real, x1.d_imag + x2.d_imag);
return ComplexNumber( x1.d_real + x2.d_real, x1.d_imag + x2.d_imag );
}
inline ComplexNumber operator-(
const ComplexNumber &x1, const ComplexNumber &x2)
const ComplexNumber &x1, const ComplexNumber &x2 )
{
return ComplexNumber(x1.d_real - x2.d_real, x1.d_imag - x2.d_imag);
return ComplexNumber( x1.d_real - x2.d_real, x1.d_imag - x2.d_imag );
}
inline ComplexNumber operator*(
const ComplexNumber &x1, const ComplexNumber &x2)
const ComplexNumber &x1, const ComplexNumber &x2 )
{
return ComplexNumber(x1.d_real * x2.d_real - x1.d_imag * x2.d_imag,
x1.d_real * x2.d_imag + x2.d_real * x1.d_imag);
return ComplexNumber( x1.d_real * x2.d_real - x1.d_imag * x2.d_imag,
x1.d_real * x2.d_imag + x2.d_real * x1.d_imag );
}
inline ComplexNumber operator/(
const ComplexNumber &x1, const ComplexNumber &x2)
const ComplexNumber &x1, const ComplexNumber &x2 )
{
double denom = x2.d_real * x2.d_real + x2.d_imag * x2.d_imag;
return ComplexNumber(
(x1.d_real * x2.d_real + x1.d_imag * x2.d_imag) / denom,
(x1.d_imag * x2.d_real - x2.d_imag * x1.d_real) / denom
);
( x1.d_real * x2.d_real + x1.d_imag * x2.d_imag ) / denom,
( x1.d_imag * x2.d_real - x2.d_imag * x1.d_real ) / denom
);
}
#endif

View File

@@ -1,12 +1,12 @@
#include <qapplication.h>
#include "mainwindow.h"
int main (int argc, char **argv)
int main ( int argc, char **argv )
{
QApplication a(argc, argv);
QApplication a( argc, argv );
MainWindow w;
w.resize(540,400);
w.resize( 1000, 800 );
w.show();
return a.exec();

View File

@@ -7,10 +7,7 @@
#include <qprinter.h>
#include <qpicture.h>
#include <qpainter.h>
#include <qfiledialog.h>
#include <qimagewriter.h>
#include <qprintdialog.h>
#include <qfileinfo.h>
#include <qwt_counter.h>
#include <qwt_picker_machine.h>
#include <qwt_plot_zoomer.h>
@@ -25,19 +22,19 @@
class Zoomer: public QwtPlotZoomer
{
public:
Zoomer(int xAxis, int yAxis, QwtPlotCanvas *canvas):
QwtPlotZoomer(xAxis, yAxis, canvas)
Zoomer( int xAxis, int yAxis, QWidget *canvas ):
QwtPlotZoomer( xAxis, yAxis, canvas )
{
setTrackerMode(QwtPicker::AlwaysOff);
setRubberBand(QwtPicker::NoRubberBand);
setTrackerMode( QwtPicker::AlwaysOff );
setRubberBand( QwtPicker::NoRubberBand );
// RightButton: zoom out by 1
// Ctrl+RightButton: zoom out to full size
setMousePattern(QwtEventPattern::MouseSelect2,
Qt::RightButton, Qt::ControlModifier);
setMousePattern(QwtEventPattern::MouseSelect3,
Qt::RightButton);
setMousePattern( QwtEventPattern::MouseSelect2,
Qt::RightButton, Qt::ControlModifier );
setMousePattern( QwtEventPattern::MouseSelect3,
Qt::RightButton );
}
};
@@ -51,128 +48,131 @@ public:
//
//-----------------------------------------------------------------
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent)
MainWindow::MainWindow( QWidget *parent ):
QMainWindow( parent )
{
d_plot = new Plot(this);
d_plot = new Plot( this );
const int margin = 5;
d_plot->setContentsMargins( margin, margin, margin, 0 );
setContextMenuPolicy(Qt::NoContextMenu);
setContextMenuPolicy( Qt::NoContextMenu );
d_zoomer[0] = new Zoomer( QwtPlot::xBottom, QwtPlot::yLeft,
d_plot->canvas());
d_zoomer[0]->setRubberBand(QwtPicker::RectRubberBand);
d_zoomer[0]->setRubberBandPen(QColor(Qt::green));
d_zoomer[0]->setTrackerMode(QwtPicker::ActiveOnly);
d_zoomer[0]->setTrackerPen(QColor(Qt::white));
d_zoomer[0] = new Zoomer(
QwtAxis::xBottom, QwtAxis::yLeft, d_plot->canvas() );
d_zoomer[0]->setRubberBand( QwtPicker::RectRubberBand );
d_zoomer[0]->setRubberBandPen( QColor( Qt::green ) );
d_zoomer[0]->setTrackerMode( QwtPicker::ActiveOnly );
d_zoomer[0]->setTrackerPen( QColor( Qt::white ) );
d_zoomer[1] = new Zoomer(QwtPlot::xTop, QwtPlot::yRight,
d_plot->canvas());
d_zoomer[1] = new Zoomer( QwtAxis::xTop, QwtAxis::yRight,
d_plot->canvas() );
d_panner = new QwtPlotPanner(d_plot->canvas());
d_panner->setMouseButton(Qt::MidButton);
d_panner = new QwtPlotPanner( d_plot->canvas() );
d_panner->setMouseButton( Qt::MidButton );
d_picker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft,
d_picker = new QwtPlotPicker( QwtAxis::xBottom, QwtAxis::yLeft,
QwtPlotPicker::CrossRubberBand, QwtPicker::AlwaysOn,
d_plot->canvas());
d_picker->setStateMachine(new QwtPickerDragPointMachine());
d_picker->setRubberBandPen(QColor(Qt::green));
d_picker->setRubberBand(QwtPicker::CrossRubberBand);
d_picker->setTrackerPen(QColor(Qt::white));
d_plot->canvas() );
d_picker->setStateMachine( new QwtPickerDragPointMachine() );
d_picker->setRubberBandPen( QColor( Qt::green ) );
d_picker->setRubberBand( QwtPicker::CrossRubberBand );
d_picker->setTrackerPen( QColor( Qt::white ) );
setCentralWidget(d_plot);
setCentralWidget( d_plot );
QToolBar *toolBar = new QToolBar(this);
QToolBar *toolBar = new QToolBar( this );
QToolButton *btnZoom = new QToolButton(toolBar);
btnZoom->setText("Zoom");
btnZoom->setIcon(QIcon(zoom_xpm));
btnZoom->setCheckable(true);
btnZoom->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
toolBar->addWidget(btnZoom);
connect(btnZoom, SIGNAL(toggled(bool)), SLOT(enableZoomMode(bool)));
QToolButton *btnZoom = new QToolButton( toolBar );
btnZoom->setText( "Zoom" );
btnZoom->setIcon( QPixmap( zoom_xpm ) );
btnZoom->setCheckable( true );
btnZoom->setToolButtonStyle( Qt::ToolButtonTextUnderIcon );
toolBar->addWidget( btnZoom );
connect( btnZoom, SIGNAL( toggled( bool ) ), SLOT( enableZoomMode( bool ) ) );
#ifndef QT_NO_PRINTER
QToolButton *btnPrint = new QToolButton(toolBar);
btnPrint->setText("Print");
btnPrint->setIcon(QIcon(print_xpm));
btnPrint->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
toolBar->addWidget(btnPrint);
connect(btnPrint, SIGNAL(clicked()), SLOT(print()));
QToolButton *btnPrint = new QToolButton( toolBar );
btnPrint->setText( "Print" );
btnPrint->setIcon( QPixmap( print_xpm ) );
btnPrint->setToolButtonStyle( Qt::ToolButtonTextUnderIcon );
toolBar->addWidget( btnPrint );
connect( btnPrint, SIGNAL( clicked() ), SLOT( print() ) );
#endif
QToolButton *btnExport = new QToolButton(toolBar);
btnExport->setText("Export");
btnExport->setIcon(QIcon(print_xpm));
btnExport->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
toolBar->addWidget(btnExport);
connect(btnExport, SIGNAL(clicked()), SLOT(exportDocument()));
QToolButton *btnExport = new QToolButton( toolBar );
btnExport->setText( "Export" );
btnExport->setIcon( QPixmap( print_xpm ) );
btnExport->setToolButtonStyle( Qt::ToolButtonTextUnderIcon );
toolBar->addWidget( btnExport );
connect( btnExport, SIGNAL( clicked() ), SLOT( exportDocument() ) );
toolBar->addSeparator();
QWidget *hBox = new QWidget(toolBar);
QWidget *hBox = new QWidget( toolBar );
QHBoxLayout *layout = new QHBoxLayout(hBox);
layout->setSpacing(0);
layout->addWidget(new QWidget(hBox), 10); // spacer
layout->addWidget(new QLabel("Damping Factor", hBox), 0);
layout->addSpacing(10);
QHBoxLayout *layout = new QHBoxLayout( hBox );
layout->setSpacing( 0 );
layout->addWidget( new QWidget( hBox ), 10 ); // spacer
layout->addWidget( new QLabel( "Damping Factor", hBox ), 0 );
layout->addSpacing( 10 );
QwtCounter *cntDamp = new QwtCounter(hBox);
cntDamp->setRange(0.0, 5.0, 0.01);
cntDamp->setValue(0.0);
QwtCounter *cntDamp = new QwtCounter( hBox );
cntDamp->setRange( 0.0, 5.0 );
cntDamp->setSingleStep( 0.01 );
cntDamp->setValue( 0.0 );
layout->addWidget(cntDamp, 0);
layout->addWidget( cntDamp, 0 );
(void)toolBar->addWidget(hBox);
( void )toolBar->addWidget( hBox );
addToolBar(toolBar);
addToolBar( toolBar );
#ifndef QT_NO_STATUSBAR
(void)statusBar();
( void )statusBar();
#endif
enableZoomMode(false);
enableZoomMode( false );
showInfo();
connect(cntDamp, SIGNAL(valueChanged(double)),
d_plot, SLOT(setDamp(double)));
connect( cntDamp, SIGNAL( valueChanged( double ) ),
d_plot, SLOT( setDamp( double ) ) );
connect(d_picker, SIGNAL(moved(const QPoint &)),
SLOT(moved(const QPoint &)));
connect(d_picker, SIGNAL(selected(const QPolygon &)),
SLOT(selected(const QPolygon &)));
connect( d_picker, SIGNAL( moved( const QPoint & ) ),
SLOT( moved( const QPoint & ) ) );
connect( d_picker, SIGNAL( selected( const QPolygon & ) ),
SLOT( selected( const QPolygon & ) ) );
}
#ifndef QT_NO_PRINTER
void MainWindow::print()
{
QPrinter printer(QPrinter::HighResolution);
QPrinter printer( QPrinter::HighResolution );
QString docName = d_plot->title().text();
if ( !docName.isEmpty() )
{
docName.replace (QRegExp (QString::fromLatin1 ("\n")), tr (" -- "));
printer.setDocName (docName);
docName.replace ( QRegExp ( QString::fromLatin1 ( "\n" ) ), tr ( " -- " ) );
printer.setDocName ( docName );
}
printer.setCreator("Bode example");
printer.setOrientation(QPrinter::Landscape);
printer.setCreator( "Bode example" );
printer.setOrientation( QPrinter::Landscape );
QPrintDialog dialog(&printer);
QPrintDialog dialog( &printer );
if ( dialog.exec() )
{
QwtPlotRenderer renderer;
if ( printer.colorMode() == QPrinter::GrayScale )
{
renderer.setDiscardFlag(QwtPlotRenderer::DiscardCanvasBackground);
renderer.setLayoutFlag(QwtPlotRenderer::FrameWithScales);
renderer.setDiscardFlag( QwtPlotRenderer::DiscardBackground );
renderer.setDiscardFlag( QwtPlotRenderer::DiscardCanvasBackground );
renderer.setDiscardFlag( QwtPlotRenderer::DiscardCanvasFrame );
renderer.setLayoutFlag( QwtPlotRenderer::FrameWithScales );
}
renderer.renderTo(d_plot, printer);
renderer.renderTo( d_plot, printer );
}
}
@@ -180,71 +180,26 @@ void MainWindow::print()
void MainWindow::exportDocument()
{
#ifndef QT_NO_PRINTER
QString fileName = "bode.pdf";
#else
QString fileName = "bode.png";
#endif
#ifndef QT_NO_FILEDIALOG
const QList<QByteArray> imageFormats =
QImageWriter::supportedImageFormats();
QStringList filter;
filter += "PDF Documents (*.pdf)";
#ifndef QWT_NO_SVG
filter += "SVG Documents (*.svg)";
#endif
filter += "Postscript Documents (*.ps)";
if ( imageFormats.size() > 0 )
{
QString imageFilter("Images (");
for ( int i = 0; i < imageFormats.size(); i++ )
{
if ( i > 0 )
imageFilter += " ";
imageFilter += "*.";
imageFilter += imageFormats[i];
}
imageFilter += ")";
filter += imageFilter;
}
fileName = QFileDialog::getSaveFileName(
this, "Export File Name", fileName,
filter.join(";;"), NULL, QFileDialog::DontConfirmOverwrite);
#endif
if ( !fileName.isEmpty() )
{
QwtPlotRenderer renderer;
// flags to make the document look like the widget
renderer.setDiscardFlag(QwtPlotRenderer::DiscardBackground, false);
renderer.setLayoutFlag(QwtPlotRenderer::KeepFrames, true);
renderer.renderDocument(d_plot, fileName, QSizeF(300, 200), 85);
}
QwtPlotRenderer renderer;
renderer.exportTo( d_plot, "bode.pdf" );
}
void MainWindow::enableZoomMode(bool on)
void MainWindow::enableZoomMode( bool on )
{
d_panner->setEnabled(on);
d_panner->setEnabled( on );
d_zoomer[0]->setEnabled(on);
d_zoomer[0]->zoom(0);
d_zoomer[0]->setEnabled( on );
d_zoomer[0]->zoom( 0 );
d_zoomer[1]->setEnabled(on);
d_zoomer[1]->zoom(0);
d_zoomer[1]->setEnabled( on );
d_zoomer[1]->zoom( 0 );
d_picker->setEnabled(!on);
d_picker->setEnabled( !on );
showInfo();
}
void MainWindow::showInfo(QString text)
void MainWindow::showInfo( QString text )
{
if ( text == QString::null )
{
@@ -255,22 +210,22 @@ void MainWindow::showInfo(QString text)
}
#ifndef QT_NO_STATUSBAR
statusBar()->showMessage(text);
statusBar()->showMessage( text );
#endif
}
void MainWindow::moved(const QPoint &pos)
void MainWindow::moved( const QPoint &pos )
{
QString info;
info.sprintf("Freq=%g, Ampl=%g, Phase=%g",
d_plot->invTransform(QwtPlot::xBottom, pos.x()),
d_plot->invTransform(QwtPlot::yLeft, pos.y()),
d_plot->invTransform(QwtPlot::yRight, pos.y())
info.sprintf( "Freq=%g, Ampl=%g, Phase=%g",
d_plot->invTransform( QwtAxis::xBottom, pos.x() ),
d_plot->invTransform( QwtAxis::yLeft, pos.y() ),
d_plot->invTransform( QwtAxis::yRight, pos.y() )
);
showInfo(info);
showInfo( info );
}
void MainWindow::selected(const QPolygon &)
void MainWindow::selected( const QPolygon & )
{
showInfo();
}

View File

@@ -11,21 +11,21 @@ class MainWindow : public QMainWindow
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
MainWindow( QWidget *parent = 0 );
private Q_SLOTS:
void moved(const QPoint &);
void selected(const QPolygon &);
void moved( const QPoint & );
void selected( const QPolygon & );
#ifndef QT_NO_PRINTER
void print();
#endif
void exportDocument();
void enableZoomMode(bool);
void enableZoomMode( bool );
private:
void showInfo(QString text = QString::null);
void showInfo( QString text = QString::null );
Plot *d_plot;

View File

@@ -1,95 +1,99 @@
#ifndef PIXMAPS_H
#define PIXMAPS_H
static const char *print_xpm[]={
"32 32 12 1",
"a c #ffffff",
"h c #ffff00",
"c c #ffffff",
"f c #dcdcdc",
"b c #c0c0c0",
"j c #a0a0a4",
"e c #808080",
"g c #808000",
"d c #585858",
"i c #00ff00",
"# c #000000",
". c None",
"................................",
"................................",
"...........###..................",
"..........#abb###...............",
".........#aabbbbb###............",
".........#ddaaabbbbb###.........",
"........#ddddddaaabbbbb###......",
".......#deffddddddaaabbbbb###...",
"......#deaaabbbddddddaaabbbbb###",
".....#deaaaaaaabbbddddddaaabbbb#",
"....#deaaabbbaaaa#ddedddfggaaad#",
"...#deaaaaaaaaaa#ddeeeeafgggfdd#",
"..#deaaabbbaaaa#ddeeeeabbbbgfdd#",
".#deeefaaaaaaa#ddeeeeabbhhbbadd#",
"#aabbbeeefaaa#ddeeeeabbbbbbaddd#",
"#bbaaabbbeee#ddeeeeabbiibbadddd#",
"#bbbbbaaabbbeeeeeeabbbbbbaddddd#",
"#bjbbbbbbaaabbbbeabbbbbbadddddd#",
"#bjjjjbbbbbbaaaeabbbbbbaddddddd#",
"#bjaaajjjbbbbbbaaabbbbadddddddd#",
"#bbbbbaaajjjbbbbbbaaaaddddddddd#",
"#bjbbbbbbaaajjjbbbbbbddddddddd#.",
"#bjjjjbbbbbbaaajjjbbbdddddddd#..",
"#bjaaajjjbbbbbbjaajjbddddddd#...",
"#bbbbbaaajjjbbbjbbaabdddddd#....",
"###bbbbbbaaajjjjbbbbbddddd#.....",
"...###bbbbbbaaajbbbbbdddd#......",
"......###bbbbbbjbbbbbddd#.......",
".........###bbbbbbbbbdd#........",
"............###bbbbbbd#.........",
"...............###bbb#..........",
"..................###..........."};
static const char *print_xpm[] =
{
"32 32 12 1",
"a c #ffffff",
"h c #ffff00",
"c c #ffffff",
"f c #dcdcdc",
"b c #c0c0c0",
"j c #a0a0a4",
"e c #808080",
"g c #808000",
"d c #585858",
"i c #00ff00",
"# c #000000",
". c None",
"................................",
"................................",
"...........###..................",
"..........#abb###...............",
".........#aabbbbb###............",
".........#ddaaabbbbb###.........",
"........#ddddddaaabbbbb###......",
".......#deffddddddaaabbbbb###...",
"......#deaaabbbddddddaaabbbbb###",
".....#deaaaaaaabbbddddddaaabbbb#",
"....#deaaabbbaaaa#ddedddfggaaad#",
"...#deaaaaaaaaaa#ddeeeeafgggfdd#",
"..#deaaabbbaaaa#ddeeeeabbbbgfdd#",
".#deeefaaaaaaa#ddeeeeabbhhbbadd#",
"#aabbbeeefaaa#ddeeeeabbbbbbaddd#",
"#bbaaabbbeee#ddeeeeabbiibbadddd#",
"#bbbbbaaabbbeeeeeeabbbbbbaddddd#",
"#bjbbbbbbaaabbbbeabbbbbbadddddd#",
"#bjjjjbbbbbbaaaeabbbbbbaddddddd#",
"#bjaaajjjbbbbbbaaabbbbadddddddd#",
"#bbbbbaaajjjbbbbbbaaaaddddddddd#",
"#bjbbbbbbaaajjjbbbbbbddddddddd#.",
"#bjjjjbbbbbbaaajjjbbbdddddddd#..",
"#bjaaajjjbbbbbbjaajjbddddddd#...",
"#bbbbbaaajjjbbbjbbaabdddddd#....",
"###bbbbbbaaajjjjbbbbbddddd#.....",
"...###bbbbbbaaajbbbbbdddd#......",
"......###bbbbbbjbbbbbddd#.......",
".........###bbbbbbbbbdd#........",
"............###bbbbbbd#.........",
"...............###bbb#..........",
"..................###..........."
};
static const char *zoom_xpm[]={
"32 32 8 1",
"# c #000000",
"b c #c0c0c0",
"a c #ffffff",
"e c #585858",
"d c #a0a0a4",
"c c #0000ff",
"f c #00ffff",
". c None",
"..######################........",
".#a#baaaaaaaaaaaaaaaaaa#........",
"#aa#baaaaaaaaaaaaaccaca#........",
"####baaaaaaaaaaaaaaaaca####.....",
"#bbbbaaaaaaaaaaaacccaaa#da#.....",
"#aaaaaaaaaaaaaaaacccaca#da#.....",
"#aaaaaaaaaaaaaaaaaccaca#da#.....",
"#aaaaaaaaaabe###ebaaaaa#da#.....",
"#aaaaaaaaa#########aaaa#da#.....",
"#aaaaaaaa###dbbbb###aaa#da#.....",
"#aaaaaaa###aaaaffb###aa#da#.....",
"#aaaaaab##aaccaaafb##ba#da#.....",
"#aaaaaae#daaccaccaad#ea#da#.....",
"#aaaaaa##aaaaaaccaab##a#da#.....",
"#aaaaaa##aacccaaaaab##a#da#.....",
"#aaaaaa##aaccccaccab##a#da#.....",
"#aaaaaae#daccccaccad#ea#da#.....",
"#aaaaaab##aacccaaaa##da#da#.....",
"#aaccacd###aaaaaaa###da#da#.....",
"#aaaaacad###daaad#####a#da#.....",
"#acccaaaad##########da##da#.....",
"#acccacaaadde###edd#eda#da#.....",
"#aaccacaaaabdddddbdd#eda#a#.....",
"#aaaaaaaaaaaaaaaaaadd#eda##.....",
"#aaaaaaaaaaaaaaaaaaadd#eda#.....",
"#aaaaaaaccacaaaaaaaaadd#eda#....",
"#aaaaaaaaaacaaaaaaaaaad##eda#...",
"#aaaaaacccaaaaaaaaaaaaa#d#eda#..",
"########################dd#eda#.",
"...#dddddddddddddddddddddd##eda#",
"...#aaaaaaaaaaaaaaaaaaaaaa#.####",
"...########################..##."};
static const char *zoom_xpm[] =
{
"32 32 8 1",
"# c #000000",
"b c #c0c0c0",
"a c #ffffff",
"e c #585858",
"d c #a0a0a4",
"c c #0000ff",
"f c #00ffff",
". c None",
"..######################........",
".#a#baaaaaaaaaaaaaaaaaa#........",
"#aa#baaaaaaaaaaaaaccaca#........",
"####baaaaaaaaaaaaaaaaca####.....",
"#bbbbaaaaaaaaaaaacccaaa#da#.....",
"#aaaaaaaaaaaaaaaacccaca#da#.....",
"#aaaaaaaaaaaaaaaaaccaca#da#.....",
"#aaaaaaaaaabe###ebaaaaa#da#.....",
"#aaaaaaaaa#########aaaa#da#.....",
"#aaaaaaaa###dbbbb###aaa#da#.....",
"#aaaaaaa###aaaaffb###aa#da#.....",
"#aaaaaab##aaccaaafb##ba#da#.....",
"#aaaaaae#daaccaccaad#ea#da#.....",
"#aaaaaa##aaaaaaccaab##a#da#.....",
"#aaaaaa##aacccaaaaab##a#da#.....",
"#aaaaaa##aaccccaccab##a#da#.....",
"#aaaaaae#daccccaccad#ea#da#.....",
"#aaaaaab##aacccaaaa##da#da#.....",
"#aaccacd###aaaaaaa###da#da#.....",
"#aaaaacad###daaad#####a#da#.....",
"#acccaaaad##########da##da#.....",
"#acccacaaadde###edd#eda#da#.....",
"#aaccacaaaabdddddbdd#eda#a#.....",
"#aaaaaaaaaaaaaaaaaadd#eda##.....",
"#aaaaaaaaaaaaaaaaaaadd#eda#.....",
"#aaaaaaaccacaaaaaaaaadd#eda#....",
"#aaaaaaaaaacaaaaaaaaaad##eda#...",
"#aaaaaacccaaaaaaaaaaaaa#d#eda#..",
"########################dd#eda#.",
"...#dddddddddddddddddddddd##eda#",
"...#aaaaaaaaaaaaaaaaaaaaaa#.####",
"...########################..##."
};
#endif

View File

@@ -6,6 +6,7 @@
#include <qwt_plot_curve.h>
#include <qwt_legend.h>
#include <qwt_text.h>
#include <qwt_plot_canvas.h>
#include <qmath.h>
#include "complexnumber.h"
#include "plot.h"
@@ -15,130 +16,152 @@
#define qAtan2(y, x) ::atan2(y, x)
#endif
static void logSpace(double *array, int size, double xmin, double xmax)
static void logSpace( double *array, int size, double xmin, double xmax )
{
if ((xmin <= 0.0) || (xmax <= 0.0) || (size <= 0))
return;
if ( ( xmin <= 0.0 ) || ( xmax <= 0.0 ) || ( size <= 0 ) )
return;
const int imax = size -1;
const int imax = size - 1;
array[0] = xmin;
array[imax] = xmax;
const double lxmin = log(xmin);
const double lxmax = log(xmax);
const double lstep = (lxmax - lxmin) / double(imax);
const double lxmin = log( xmin );
const double lxmax = log( xmax );
const double lstep = ( lxmax - lxmin ) / double( imax );
for (int i = 1; i < imax; i++)
array[i] = qExp(lxmin + double(i) * lstep);
for ( int i = 1; i < imax; i++ )
array[i] = qExp( lxmin + double( i ) * lstep );
}
Plot::Plot(QWidget *parent):
QwtPlot(parent)
Plot::Plot( QWidget *parent ):
QwtPlot( parent )
{
setAutoReplot(false);
setAutoReplot( false );
setTitle("Frequency Response of a Second-Order System");
setTitle( "Frequency Response of a Second-Order System" );
setFooter( "Footer Response of a Second-Order System" );
setCanvasBackground(QColor(Qt::darkBlue));
setCanvasBackground( QColor( "MidnightBlue" ) );
// legend
QwtLegend *legend = new QwtLegend;
insertLegend(legend, QwtPlot::BottomLegend);
insertLegend( legend, QwtPlot::BottomLegend );
// grid
QwtPlotGrid *grid = new QwtPlotGrid;
grid->enableXMin(true);
grid->setMajPen(QPen(Qt::white, 0, Qt::DotLine));
grid->setMinPen(QPen(Qt::gray, 0 , Qt::DotLine));
grid->attach(this);
grid->enableXMin( true );
grid->setMajorPen( Qt::white, 0, Qt::DotLine );
grid->setMinorPen( Qt::gray, 0 , Qt::DotLine );
grid->setAxes( QwtAxisId( QwtAxis::xTop, 2 ), QwtAxisId( QwtAxis::yRight, 1 ) );
grid->attach( this );
// axes
enableAxis(QwtPlot::yRight);
setAxisTitle(QwtPlot::xBottom, "Normalized Frequency");
setAxisTitle(QwtPlot::yLeft, "Amplitude [dB]");
setAxisTitle(QwtPlot::yRight, "Phase [deg]");
for ( int axisPos = 0; axisPos < QwtAxis::PosCount; axisPos++ )
{
setAxesCount( axisPos, 3 );
for ( int i = 0; i < axesCount( axisPos ); i++ )
{
QwtAxisId axisId( axisPos, i );
setAxisMaxMajor(QwtPlot::xBottom, 6);
setAxisMaxMinor(QwtPlot::xBottom, 10);
setAxisScaleEngine(QwtPlot::xBottom, new QwtLog10ScaleEngine);
QString title( "Normalized Frequency or any other important stuff" );
setAxisTitle( axisId, title + QString().setNum( i ) );
if ( i == 1 )
{
setAxisScale( axisId, 1000000, 500000 );
if ( QwtAxis::isYAxis( axisPos ) )
setAxisLabelRotation( axisId, -60 );
}
if ( i == 2 )
setAxisScale( axisId, 70.457895, 0.00000555 );
}
}
setAxisVisible( QwtAxis::yRight );
setAxisVisible( QwtAxis::xTop );
setAxisMaxMajor( QwtAxis::xBottom, 6 );
setAxisMaxMinor( QwtAxis::xBottom, 9 );
setAxisScaleEngine( QwtAxis::xBottom, new QwtLogScaleEngine );
// curves
d_curve1 = new QwtPlotCurve("Amplitude");
d_curve1->setRenderHint(QwtPlotItem::RenderAntialiased);
d_curve1->setPen(QPen(Qt::yellow));
d_curve1->setLegendAttribute(QwtPlotCurve::LegendShowLine);
d_curve1->setYAxis(QwtPlot::yLeft);
d_curve1->attach(this);
d_curve1 = new QwtPlotCurve( "Amplitude" );
d_curve1->setRenderHint( QwtPlotItem::RenderAntialiased );
d_curve1->setPen( Qt::yellow );
d_curve1->setLegendAttribute( QwtPlotCurve::LegendShowLine );
d_curve1->setYAxis( QwtAxis::yLeft );
d_curve1->attach( this );
d_curve2 = new QwtPlotCurve("Phase");
d_curve2->setRenderHint(QwtPlotItem::RenderAntialiased);
d_curve2->setPen(QPen(Qt::cyan));
d_curve2->setLegendAttribute(QwtPlotCurve::LegendShowLine);
d_curve2->setYAxis(QwtPlot::yRight);
d_curve2->attach(this);
d_curve2 = new QwtPlotCurve( "Phase" );
d_curve2->setRenderHint( QwtPlotItem::RenderAntialiased );
d_curve2->setPen( Qt::cyan );
d_curve2->setLegendAttribute( QwtPlotCurve::LegendShowLine );
d_curve2->setYAxis( QwtAxis::yRight );
d_curve2->attach( this );
// marker
d_marker1 = new QwtPlotMarker();
d_marker1->setValue(0.0, 0.0);
d_marker1->setLineStyle(QwtPlotMarker::VLine);
d_marker1->setLabelAlignment(Qt::AlignRight | Qt::AlignBottom);
d_marker1->setLinePen(QPen(Qt::green, 0, Qt::DashDotLine));
d_marker1->attach(this);
d_marker1->setValue( 0.0, 0.0 );
d_marker1->setLineStyle( QwtPlotMarker::VLine );
d_marker1->setLabelAlignment( Qt::AlignRight | Qt::AlignBottom );
d_marker1->setLinePen( Qt::green, 0, Qt::DashDotLine );
d_marker1->attach( this );
d_marker2 = new QwtPlotMarker();
d_marker2->setLineStyle(QwtPlotMarker::HLine);
d_marker2->setLabelAlignment(Qt::AlignRight | Qt::AlignBottom);
d_marker2->setLinePen(QPen(QColor(200,150,0), 0, Qt::DashDotLine));
d_marker2->setSymbol( new QwtSymbol(QwtSymbol::Diamond,
QColor(Qt::yellow), QColor(Qt::green), QSize(7,7)));
d_marker2->attach(this);
d_marker2->setLineStyle( QwtPlotMarker::HLine );
d_marker2->setLabelAlignment( Qt::AlignRight | Qt::AlignBottom );
d_marker2->setLinePen( QColor( 200, 150, 0 ), 0, Qt::DashDotLine );
d_marker2->setSymbol( new QwtSymbol( QwtSymbol::Diamond,
QColor( Qt::yellow ), QColor( Qt::green ), QSize( 8, 8 ) ) );
d_marker2->attach( this );
setDamp(0.0);
setDamp( 0.0 );
setAutoReplot(true);
setAutoReplot( true );
}
void Plot::showData(const double *frequency, const double *amplitude,
const double *phase, int count)
void Plot::showData( const double *frequency, const double *amplitude,
const double *phase, int count )
{
d_curve1->setSamples(frequency, amplitude, count);
d_curve2->setSamples(frequency, phase, count);
d_curve1->setSamples( frequency, amplitude, count );
d_curve2->setSamples( frequency, phase, count );
}
void Plot::showPeak(double freq, double amplitude)
void Plot::showPeak( double freq, double amplitude )
{
QString label;
label.sprintf("Peak: %.3g dB", amplitude);
label.sprintf( "Peak: %.3g dB", amplitude );
QwtText text(label);
text.setFont(QFont("Helvetica", 10, QFont::Bold));
text.setColor(QColor(200,150,0));
QwtText text( label );
text.setFont( QFont( "Helvetica", 10, QFont::Bold ) );
text.setColor( QColor( 200, 150, 0 ) );
d_marker2->setValue(freq, amplitude);
d_marker2->setLabel(text);
d_marker2->setValue( freq, amplitude );
d_marker2->setLabel( text );
}
void Plot::show3dB(double freq)
void Plot::show3dB( double freq )
{
QString label;
label.sprintf("-3 dB at f = %.3g", freq);
label.sprintf( "-3 dB at f = %.3g", freq );
QwtText text(label);
text.setFont(QFont("Helvetica", 10, QFont::Bold));
text.setColor(Qt::green);
QwtText text( label );
text.setFont( QFont( "Helvetica", 10, QFont::Bold ) );
text.setColor( Qt::green );
d_marker1->setValue(freq, 0.0);
d_marker1->setLabel(text);
d_marker1->setValue( freq, 0.0 );
d_marker1->setLabel( text );
}
//
// re-calculate frequency response
//
void Plot::setDamp(double damping)
void Plot::setDamp( double damping )
{
const bool doReplot = autoReplot();
setAutoReplot(false);
setAutoReplot( false );
const int ArraySize = 200;
@@ -147,24 +170,24 @@ void Plot::setDamp(double damping)
double phase[ArraySize];
// build frequency vector with logarithmic division
logSpace(frequency, ArraySize, 0.01, 100);
logSpace( frequency, ArraySize, 0.01, 100 );
int i3 = 1;
double fmax = 1;
double amax = -1000.0;
for (int i = 0; i < ArraySize; i++)
for ( int i = 0; i < ArraySize; i++ )
{
double f = frequency[i];
const ComplexNumber g =
ComplexNumber(1.0) / ComplexNumber(1.0 - f * f, 2.0 * damping * f);
ComplexNumber( 1.0 ) / ComplexNumber( 1.0 - f * f, 2.0 * damping * f );
amplitude[i] = 20.0 * log10(qSqrt( g.real() * g.real() + g.imag() * g.imag()));
phase[i] = qAtan2(g.imag(), g.real()) * (180.0 / M_PI);
amplitude[i] = 20.0 * log10( qSqrt( g.real() * g.real() + g.imag() * g.imag() ) );
phase[i] = qAtan2( g.imag(), g.real() ) * ( 180.0 / M_PI );
if ((i3 <= 1) && (amplitude[i] < -3.0))
i3 = i;
if (amplitude[i] > amax)
if ( ( i3 <= 1 ) && ( amplitude[i] < -3.0 ) )
i3 = i;
if ( amplitude[i] > amax )
{
amax = amplitude[i];
fmax = frequency[i];
@@ -172,15 +195,14 @@ void Plot::setDamp(double damping)
}
double f3 = frequency[i3] -
(frequency[i3] - frequency[i3 - 1])
/ (amplitude[i3] - amplitude[i3 -1]) * (amplitude[i3] + 3);
double f3 = frequency[i3] - ( frequency[i3] - frequency[i3 - 1] )
/ ( amplitude[i3] - amplitude[i3 -1] ) * ( amplitude[i3] + 3 );
showPeak(fmax, amax);
show3dB(f3);
showData(frequency, amplitude, phase, ArraySize);
showPeak( fmax, amax );
show3dB( f3 );
showData( frequency, amplitude, phase, ArraySize );
setAutoReplot(doReplot);
setAutoReplot( doReplot );
replot();
}

View File

@@ -11,16 +11,16 @@ class Plot: public QwtPlot
Q_OBJECT
public:
Plot(QWidget *parent);
Plot( QWidget *parent );
public Q_SLOTS:
void setDamp(double damping);
void setDamp( double damping );
private:
void showData(const double *frequency, const double *amplitude,
const double *phase, int count);
void showPeak(double freq, double amplitude);
void show3dB(double freq);
void showData( const double *frequency, const double *amplitude,
const double *phase, int count );
void showPeak( double freq, double amplitude );
void show3dB( double freq );
QwtPlotCurve *d_curve1;
QwtPlotCurve *d_curve2;

View File

@@ -0,0 +1,34 @@
################################################################
# Qwt Widget Library
# Copyright (C) 1997 Josef Wilgen
# Copyright (C) 2002 Uwe Rathmann
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the Qwt License, Version 1.0
################################################################
include( $${PWD}/../examples.pri )
TARGET = controls
HEADERS = \
sliderbox.h \
slidertab.h \
wheelbox.h \
wheeltab.h \
knobbox.h \
knobtab.h \
dialbox.h \
dialtab.h
SOURCES = \
sliderbox.cpp \
slidertab.cpp \
wheelbox.cpp \
wheeltab.cpp \
knobbox.cpp \
knobtab.cpp \
dialbox.cpp \
dialtab.cpp \
main.cpp

View File

@@ -0,0 +1,163 @@
#include <qlabel.h>
#include <qlayout.h>
#include <qwt_dial.h>
#include <qwt_dial_needle.h>
#include <qwt_scale_engine.h>
#include <qwt_transform.h>
#include <qwt_round_scale_draw.h>
#include "dialbox.h"
DialBox::DialBox( QWidget *parent, int type ):
QWidget( parent )
{
d_dial = createDial( type );
d_label = new QLabel( this );
d_label->setAlignment( Qt::AlignCenter );
QVBoxLayout *layout = new QVBoxLayout( this );;
layout->setSpacing( 0 );
layout->addWidget( d_dial, 10 );
layout->addWidget( d_label );
connect( d_dial, SIGNAL( valueChanged( double ) ),
this, SLOT( setNum( double ) ) );
setNum( d_dial->value() );
}
QwtDial *DialBox::createDial( int type ) const
{
QwtDial *dial = new QwtDial();
dial->setTracking( true );
dial->setFocusPolicy( Qt::StrongFocus );
dial->setObjectName( QString( "Dial %1" ).arg( type + 1 ) );
QColor needleColor( Qt::red );
switch( type )
{
case 0:
{
dial->setOrigin( 135.0 );
dial->setScaleArc( 0.0, 270.0 );
dial->setScaleMaxMinor( 4 );
dial->setScaleMaxMajor( 10 );
dial->setScale( -100.0, 100.0 );
needleColor = QColor( "Goldenrod" );
break;
}
case 1:
{
dial->setOrigin( 135.0 );
dial->setScaleArc( 0.0, 270.0 );
dial->setScaleMaxMinor( 10 );
dial->setScaleMaxMajor( 10 );
dial->setScale( 10.0, 0.0 );
QwtRoundScaleDraw *scaleDraw = new QwtRoundScaleDraw();
scaleDraw->setSpacing( 8 );
scaleDraw->enableComponent(
QwtAbstractScaleDraw::Backbone, false );
scaleDraw->setTickLength( QwtScaleDiv::MinorTick, 2 );
scaleDraw->setTickLength( QwtScaleDiv::MediumTick, 4 );
scaleDraw->setTickLength( QwtScaleDiv::MajorTick, 8 );
dial->setScaleDraw( scaleDraw );
break;
}
case 2:
{
dial->setOrigin( 150.0 );
dial->setScaleArc( 0.0, 240.0 );
QwtLinearScaleEngine *scaleEngine = new QwtLinearScaleEngine( 2 );
scaleEngine->setTransformation( new QwtPowerTransform( 2 ) );
dial->setScaleEngine( scaleEngine );
QList< double > ticks[ QwtScaleDiv::NTickTypes ];
ticks[ QwtScaleDiv::MajorTick ] << 0 << 4
<< 16 << 32 << 64 << 96 << 128;
ticks[ QwtScaleDiv::MediumTick ] << 24 << 48 << 80 << 112;
ticks[ QwtScaleDiv::MinorTick ]
<< 0.5 << 1 << 2
<< 7 << 10 << 13
<< 20 << 28
<< 40 << 56
<< 72 << 88
<< 104 << 120;
dial->setScale( QwtScaleDiv( 0, 128, ticks ) );
break;
}
case 3:
{
dial->setOrigin( 135.0 );
dial->setScaleArc( 0.0, 270.0 );
dial->setScaleMaxMinor( 9 );
dial->setScaleEngine( new QwtLogScaleEngine );
dial->setScale( 1.0e-2, 1.0e2 );
break;
}
case 4:
{
dial->setOrigin( 225.0 );
dial->setScaleArc( 0.0, 360.0 );
dial->setScaleMaxMinor( 5 );
dial->setScaleStepSize( 20 );
dial->setScale( 100.0, -100.0 );
dial->setWrapping( true );
dial->setTotalSteps( 40 );
dial->setMode( QwtDial::RotateScale );
dial->setValue( 70.0 );
needleColor = QColor( "DarkSlateBlue" );
break;
}
case 5:
{
dial->setOrigin( 45.0 );
dial->setScaleArc( 0.0, 225.0 );
dial->setScaleMaxMinor( 5 );
dial->setScaleMaxMajor( 10 );
dial->setScale( 0.0, 10.0 );
break;
}
}
QwtDialSimpleNeedle *needle = new QwtDialSimpleNeedle(
QwtDialSimpleNeedle::Arrow, true, needleColor,
QColor( Qt::gray ).light( 130 ) );
dial->setNeedle( needle );
//const QColor base( QColor( "DimGray" ) );
const QColor base( QColor( Qt::darkGray ).dark( 150 ) );
QPalette palette;
palette.setColor( QPalette::Base, base );
palette.setColor( QPalette::Window, base.dark( 150 ) );
palette.setColor( QPalette::Mid, base.dark( 110 ) );
palette.setColor( QPalette::Light, base.light( 170 ) );
palette.setColor( QPalette::Dark, base.dark( 170 ) );
palette.setColor( QPalette::Text, base.dark( 200 ).light( 800 ) );
palette.setColor( QPalette::WindowText, base.dark( 200 ) );
dial->setPalette( palette );
dial->setLineWidth( 4 );
dial->setFrameShadow( QwtDial::Sunken );
return dial;
}
void DialBox::setNum( double v )
{
QString text;
text.setNum( v, 'f', 2 );
d_label->setText( text );
}

View File

@@ -0,0 +1,25 @@
#ifndef _DIAL_BOX_H_
#define _DIAL_BOX_H_
#include <qwidget.h>
class QLabel;
class QwtDial;
class DialBox: public QWidget
{
Q_OBJECT
public:
DialBox( QWidget *parent, int type );
private Q_SLOTS:
void setNum( double v );
private:
QwtDial *createDial( int type ) const;
QwtDial *d_dial;
QLabel *d_label;
};
#endif

View File

@@ -0,0 +1,17 @@
#include "dialtab.h"
#include "dialbox.h"
#include <qlayout.h>
DialTab::DialTab( QWidget *parent ):
QWidget( parent )
{
QGridLayout *layout = new QGridLayout( this );
const int numRows = 3;
for ( int i = 0; i < 2 * numRows; i++ )
{
DialBox *dialBox = new DialBox( this, i );
layout->addWidget( dialBox, i / numRows, i % numRows );
}
}

View File

@@ -0,0 +1,12 @@
#ifndef _DIAL_TAB_H
#define _DIAL_TAB_H 1
#include <qwidget.h>
class DialTab: public QWidget
{
public:
DialTab( QWidget *parent = NULL );
};
#endif

View File

@@ -0,0 +1,119 @@
#include <qlabel.h>
#include <qlayout.h>
#include <qwt_knob.h>
#include <qwt_scale_engine.h>
#include <qwt_transform.h>
#include "knobbox.h"
KnobBox::KnobBox( QWidget *parent, int knobType ):
QWidget( parent )
{
d_knob = createKnob( knobType );
d_knob->setKnobWidth( 100 );
d_label = new QLabel( this );
d_label->setAlignment( Qt::AlignCenter );
QVBoxLayout *layout = new QVBoxLayout( this );;
layout->setSpacing( 0 );
layout->addWidget( d_knob, 10 );
layout->addWidget( d_label );
layout->addStretch( 10 );
connect( d_knob, SIGNAL( valueChanged( double ) ),
this, SLOT( setNum( double ) ) );
setNum( d_knob->value() );
}
QwtKnob *KnobBox::createKnob( int knobType ) const
{
QwtKnob *knob = new QwtKnob();
knob->setTracking( true );
switch( knobType )
{
case 0:
{
knob->setKnobStyle( QwtKnob::Sunken );
knob->setMarkerStyle( QwtKnob::Nub );
knob->setWrapping( true );
knob->setNumTurns( 4 );
knob->setScaleStepSize( 10.0 );
knob->setScale( 0, 400 );
knob->setTotalSteps( 400 );
break;
}
case 1:
{
knob->setKnobStyle( QwtKnob::Sunken );
knob->setMarkerStyle( QwtKnob::Dot );
break;
}
case 2:
{
knob->setKnobStyle( QwtKnob::Sunken );
knob->setMarkerStyle( QwtKnob::Tick );
QwtLinearScaleEngine *scaleEngine = new QwtLinearScaleEngine( 2 );
scaleEngine->setTransformation( new QwtPowerTransform( 2 ) );
knob->setScaleEngine( scaleEngine );
QList< double > ticks[ QwtScaleDiv::NTickTypes ];
ticks[ QwtScaleDiv::MajorTick ] << 0 << 4
<< 16 << 32 << 64 << 96 << 128;
ticks[ QwtScaleDiv::MediumTick ] << 24 << 48 << 80 << 112;
ticks[ QwtScaleDiv::MinorTick ]
<< 0.5 << 1 << 2
<< 7 << 10 << 13
<< 20 << 28
<< 40 << 56
<< 72 << 88
<< 104 << 120;
knob->setScale( QwtScaleDiv( 0, 128, ticks ) );
knob->setTotalSteps( 100 );
knob->setStepAlignment( false );
knob->setSingleSteps( 1 );
knob->setPageSteps( 5 );
break;
}
case 3:
{
knob->setKnobStyle( QwtKnob::Flat );
knob->setMarkerStyle( QwtKnob::Notch );
knob->setScaleEngine( new QwtLogScaleEngine() );
knob->setScaleStepSize( 1.0 );
knob->setScale( 0.1, 1000.0 );
knob->setScaleMaxMinor( 10 );
break;
}
case 4:
{
knob->setKnobStyle( QwtKnob::Raised );
knob->setMarkerStyle( QwtKnob::Dot );
knob->setWrapping( true );
break;
}
case 5:
{
knob->setKnobStyle( QwtKnob::Styled );
knob->setMarkerStyle( QwtKnob::Triangle );
knob->setTotalAngle( 180.0 );
knob->setScale( 100, -100 );
break;
}
}
return knob;
}
void KnobBox::setNum( double v )
{
QString text;
text.setNum( v, 'f', 2 );
d_label->setText( text );
}

View File

@@ -0,0 +1,25 @@
#ifndef _KNOB_BOX_H_
#define _KNOB_BOX_H_
#include <qwidget.h>
class QLabel;
class QwtKnob;
class KnobBox: public QWidget
{
Q_OBJECT
public:
KnobBox( QWidget *parent, int knobType );
private Q_SLOTS:
void setNum( double v );
private:
QwtKnob *createKnob( int knobType ) const;
QwtKnob *d_knob;
QLabel *d_label;
};
#endif

View File

@@ -0,0 +1,17 @@
#include "knobtab.h"
#include "knobbox.h"
#include <qlayout.h>
KnobTab::KnobTab( QWidget *parent ):
QWidget( parent )
{
QGridLayout *layout = new QGridLayout( this );
const int numRows = 3;
for ( int i = 0; i < 2 * numRows; i++ )
{
KnobBox *knobBox = new KnobBox( this, i );
layout->addWidget( knobBox, i / numRows, i % numRows );
}
}

View File

@@ -0,0 +1,12 @@
#ifndef _KNOB_TAB_H
#define _KNOB_TAB_H 1
#include <qwidget.h>
class KnobTab: public QWidget
{
public:
KnobTab( QWidget *parent = NULL );
};
#endif

View File

@@ -0,0 +1,41 @@
#include <qapplication.h>
#include <qtabwidget.h>
#include "slidertab.h"
#include "wheeltab.h"
#include "knobtab.h"
#include "dialtab.h"
int main ( int argc, char **argv )
{
QApplication a( argc, argv );
QTabWidget tabWidget;
SliderTab *sliderTab = new SliderTab();
sliderTab->setAutoFillBackground( true );
sliderTab->setPalette( QColor( "DimGray" ) );
WheelTab *wheelTab = new WheelTab();
wheelTab->setAutoFillBackground( true );
wheelTab->setPalette( QColor( "Silver" ) );
KnobTab *knobTab = new KnobTab();
knobTab->setAutoFillBackground( true );
knobTab->setPalette( Qt::darkGray );
DialTab *dialTab = new DialTab();
dialTab->setAutoFillBackground( true );
dialTab->setPalette( Qt::darkGray );
tabWidget.addTab( new SliderTab, "Slider" );
tabWidget.addTab( new WheelTab, "Wheel/Thermo" );
tabWidget.addTab( knobTab, "Knob" );
tabWidget.addTab( dialTab, "Dial" );
tabWidget.resize( 800, 600 );
tabWidget.show();
return a.exec();
}

View File

@@ -0,0 +1,172 @@
#include <qlabel.h>
#include <qlayout.h>
#include <qwt_slider.h>
#include <qwt_scale_engine.h>
#include <qwt_transform.h>
#include "sliderbox.h"
SliderBox::SliderBox( int sliderType, QWidget *parent ):
QWidget( parent )
{
d_slider = createSlider( sliderType );
QFlags<Qt::AlignmentFlag> alignment;
if ( d_slider->orientation() == Qt::Horizontal )
{
if ( d_slider->scalePosition() == QwtSlider::TrailingScale )
alignment = Qt::AlignBottom;
else
alignment = Qt::AlignTop;
alignment |= Qt::AlignHCenter;
}
else
{
if ( d_slider->scalePosition() == QwtSlider::TrailingScale )
alignment = Qt::AlignRight;
else
alignment = Qt::AlignLeft;
alignment |= Qt::AlignVCenter;
}
d_label = new QLabel( this );
d_label->setAlignment( alignment );
d_label->setFixedWidth( d_label->fontMetrics().width( "10000.9" ) );
connect( d_slider, SIGNAL( valueChanged( double ) ), SLOT( setNum( double ) ) );
QBoxLayout *layout;
if ( d_slider->orientation() == Qt::Horizontal )
layout = new QHBoxLayout( this );
else
layout = new QVBoxLayout( this );
layout->addWidget( d_slider );
layout->addWidget( d_label );
setNum( d_slider->value() );
}
QwtSlider *SliderBox::createSlider( int sliderType ) const
{
QwtSlider *slider = new QwtSlider();
switch( sliderType )
{
case 0:
{
slider->setOrientation( Qt::Horizontal );
slider->setScalePosition( QwtSlider::TrailingScale );
slider->setTrough( true );
slider->setGroove( false );
slider->setSpacing( 0 );
slider->setHandleSize( QSize( 30, 16 ) );
slider->setScale( 10.0, -10.0 );
slider->setTotalSteps( 8 );
slider->setSingleSteps( 1 );
slider->setPageSteps( 1 );
slider->setWrapping( true );
break;
}
case 1:
{
slider->setOrientation( Qt::Horizontal );
slider->setScalePosition( QwtSlider::NoScale );
slider->setTrough( true );
slider->setGroove( true );
slider->setScale( 0.0, 1.0 );
slider->setTotalSteps( 100 );
slider->setSingleSteps( 1 );
slider->setPageSteps( 5 );
break;
}
case 2:
{
slider->setOrientation( Qt::Horizontal );
slider->setScalePosition( QwtSlider::LeadingScale );
slider->setTrough( false );
slider->setGroove( true );
slider->setHandleSize( QSize( 12, 25 ) );
slider->setScale( 1000.0, 3000.0 );
slider->setTotalSteps( 200.0 );
slider->setSingleSteps( 2 );
slider->setPageSteps( 10 );
break;
}
case 3:
{
slider->setOrientation( Qt::Horizontal );
slider->setScalePosition( QwtSlider::TrailingScale );
slider->setTrough( true );
slider->setGroove( true );
QwtLinearScaleEngine *scaleEngine = new QwtLinearScaleEngine( 2 );
scaleEngine->setTransformation( new QwtPowerTransform( 2 ) );
slider->setScaleEngine( scaleEngine );
slider->setScale( 0.0, 128.0 );
slider->setTotalSteps( 100 );
slider->setStepAlignment( false );
slider->setSingleSteps( 1 );
slider->setPageSteps( 5 );
break;
}
case 4:
{
slider->setOrientation( Qt::Vertical );
slider->setScalePosition( QwtSlider::TrailingScale );
slider->setTrough( false );
slider->setGroove( true );
slider->setScale( 100.0, 0.0 );
slider->setInvertedControls( true );
slider->setTotalSteps( 100 );
slider->setPageSteps( 5 );
slider->setScaleMaxMinor( 5 );
break;
}
case 5:
{
slider->setOrientation( Qt::Vertical );
slider->setScalePosition( QwtSlider::NoScale );
slider->setTrough( true );
slider->setGroove( false );
slider->setScale( 0.0, 100.0 );
slider->setTotalSteps( 100 );
slider->setPageSteps( 10 );
break;
}
case 6:
{
slider->setOrientation( Qt::Vertical );
slider->setScalePosition( QwtSlider::LeadingScale );
slider->setTrough( true );
slider->setGroove( true );
slider->setScaleEngine( new QwtLogScaleEngine );
slider->setStepAlignment( false );
slider->setHandleSize( QSize( 20, 32 ) );
slider->setBorderWidth( 1 );
slider->setScale( 1.0, 1.0e4 );
slider->setTotalSteps( 100 );
slider->setPageSteps( 10 );
slider->setScaleMaxMinor( 9 );
break;
}
}
if ( slider )
{
QString name( "Slider %1" );
slider->setObjectName( name.arg( sliderType ) );
}
return slider;
}
void SliderBox::setNum( double v )
{
QString text;
text.setNum( v, 'f', 2 );
d_label->setText( text );
}

View File

@@ -0,0 +1,25 @@
#ifndef _SLIDER_BOX_H_
#define _SLIDER_BOX_H_ 1
#include <qwidget.h>
class QLabel;
class QwtSlider;
class SliderBox: public QWidget
{
Q_OBJECT
public:
SliderBox( int sliderType, QWidget *parent = NULL );
private Q_SLOTS:
void setNum( double v );
private:
QwtSlider *createSlider( int sliderType ) const;
QwtSlider *d_slider;
QLabel *d_label;
};
#endif

View File

@@ -0,0 +1,37 @@
#include "slidertab.h"
#include "sliderbox.h"
#include <qlayout.h>
SliderTab::SliderTab( QWidget *parent ):
QWidget( parent )
{
int i;
QBoxLayout *hLayout = createLayout( Qt::Vertical );
for ( i = 0; i < 4; i++ )
hLayout->addWidget( new SliderBox( i ) );
hLayout->addStretch();
QBoxLayout *vLayout = createLayout( Qt::Horizontal );
for ( ; i < 7; i++ )
vLayout->addWidget( new SliderBox( i ) );
QBoxLayout *mainLayout = createLayout( Qt::Horizontal, this );
mainLayout->addLayout( vLayout );
mainLayout->addLayout( hLayout, 10 );
}
QBoxLayout *SliderTab::createLayout(
Qt::Orientation orientation, QWidget *widget )
{
QBoxLayout *layout =
new QBoxLayout( QBoxLayout::LeftToRight, widget );
if ( orientation == Qt::Vertical )
layout->setDirection( QBoxLayout::TopToBottom );
layout->setSpacing( 20 );
layout->setMargin( 0 );
return layout;
}

View File

@@ -0,0 +1,18 @@
#ifndef _SLIDER_TAB_H
#define _SLIDER_TAB_H 1
#include <qwidget.h>
class QBoxLayout;
class SliderTab: public QWidget
{
public:
SliderTab( QWidget *parent = NULL );
private:
QBoxLayout *createLayout( Qt::Orientation,
QWidget *widget = NULL );
};
#endif

View File

@@ -0,0 +1,188 @@
#include <qlabel.h>
#include <qlayout.h>
#include <qwt_wheel.h>
#include <qwt_thermo.h>
#include <qwt_scale_engine.h>
#include <qwt_transform.h>
#include <qwt_color_map.h>
#include "wheelbox.h"
WheelBox::WheelBox( Qt::Orientation orientation,
int type, QWidget *parent ):
QWidget( parent )
{
QWidget *box = createBox( orientation, type );
d_label = new QLabel( this );
d_label->setAlignment( Qt::AlignHCenter | Qt::AlignTop );
QBoxLayout *layout = new QVBoxLayout( this );
layout->addWidget( box );
layout->addWidget( d_label );
setNum( d_wheel->value() );
connect( d_wheel, SIGNAL( valueChanged( double ) ),
this, SLOT( setNum( double ) ) );
}
QWidget *WheelBox::createBox(
Qt::Orientation orientation, int type )
{
d_wheel = new QwtWheel();
d_wheel->setValue( 80 );
d_wheel->setWheelWidth( 20 );
d_wheel->setMass( 1.0 );
d_thermo = new QwtThermo();
d_thermo->setOrientation( orientation );
if ( orientation == Qt::Horizontal )
{
d_thermo->setScalePosition( QwtThermo::LeadingScale );
d_wheel->setOrientation( Qt::Vertical );
}
else
{
d_thermo->setScalePosition( QwtThermo::TrailingScale );
d_wheel->setOrientation( Qt::Horizontal );
}
switch( type )
{
case 0:
{
QwtLinearColorMap *colorMap = new QwtLinearColorMap();
colorMap->setColorInterval( Qt::blue, Qt::red );
d_thermo->setColorMap( colorMap );
break;
}
case 1:
{
QwtLinearColorMap *colorMap = new QwtLinearColorMap();
colorMap->setMode( QwtLinearColorMap::FixedColors );
int idx = 4;
colorMap->setColorInterval( Qt::GlobalColor( idx ),
Qt::GlobalColor( idx + 10 ) );
for ( int i = 1; i < 10; i++ )
{
colorMap->addColorStop( i / 10.0,
Qt::GlobalColor( idx + i ) );
}
d_thermo->setColorMap( colorMap );
break;
}
case 2:
{
d_wheel->setRange( 10, 1000 );
d_wheel->setSingleStep( 1.0 );
d_thermo->setScaleEngine( new QwtLogScaleEngine );
d_thermo->setScaleMaxMinor( 10 );
d_thermo->setFillBrush( Qt::darkCyan );
d_thermo->setAlarmBrush( Qt::magenta );
d_thermo->setAlarmLevel( 500.0 );
d_wheel->setValue( 800 );
break;
}
case 3:
{
d_wheel->setRange( -1000, 1000 );
d_wheel->setSingleStep( 1.0 );
d_wheel->setPalette( QColor( "Tan" ) );
QwtLinearScaleEngine *scaleEngine = new QwtLinearScaleEngine();
scaleEngine->setTransformation( new QwtPowerTransform( 2 ) );
d_thermo->setScaleMaxMinor( 5 );
d_thermo->setScaleEngine( scaleEngine );
QPalette pal = palette();
pal.setColor( QPalette::Base, Qt::darkGray );
pal.setColor( QPalette::ButtonText, QColor( "darkKhaki" ) );
d_thermo->setPalette( pal );
break;
}
case 4:
{
d_wheel->setRange( -100, 300 );
d_wheel->setInverted( true );
QwtLinearColorMap *colorMap = new QwtLinearColorMap();
colorMap->setColorInterval( Qt::darkCyan, Qt::yellow );
d_thermo->setColorMap( colorMap );
d_wheel->setValue( 243 );
break;
}
case 5:
{
d_thermo->setFillBrush( Qt::darkCyan );
d_thermo->setAlarmBrush( Qt::magenta );
d_thermo->setAlarmLevel( 60.0 );
break;
}
case 6:
{
d_thermo->setOriginMode( QwtThermo::OriginMinimum );
d_thermo->setFillBrush( QBrush( "DarkSlateBlue" ) );
d_thermo->setAlarmBrush( QBrush( "DarkOrange" ) );
d_thermo->setAlarmLevel( 60.0 );
break;
}
case 7:
{
d_wheel->setRange( -100, 100 );
d_thermo->setOriginMode( QwtThermo::OriginCustom );
d_thermo->setOrigin( 0.0 );
d_thermo->setFillBrush( Qt::darkBlue );
break;
}
}
double min = d_wheel->minimum();
double max = d_wheel->maximum();
if ( d_wheel->isInverted() )
qSwap( min, max );
d_thermo->setScale( min, max );
d_thermo->setValue( d_wheel->value() );
connect( d_wheel, SIGNAL( valueChanged( double ) ),
d_thermo, SLOT( setValue( double ) ) );
QWidget *box = new QWidget();
QBoxLayout *layout;
if ( orientation == Qt::Horizontal )
layout = new QHBoxLayout( box );
else
layout = new QVBoxLayout( box );
layout->addWidget( d_thermo, Qt::AlignCenter );
layout->addWidget( d_wheel );
return box;
}
void WheelBox::setNum( double v )
{
QString text;
text.setNum( v, 'f', 2 );
d_label->setText( text );
}

View File

@@ -0,0 +1,29 @@
#ifndef _WHEEL_BOX_H_
#define _WHEEL_BOX_H_ 1
#include <qwidget.h>
class QLabel;
class QwtThermo;
class QwtWheel;
class WheelBox: public QWidget
{
Q_OBJECT
public:
WheelBox( Qt::Orientation,
int type, QWidget *parent = NULL );
private Q_SLOTS:
void setNum( double v );
private:
QWidget *createBox( Qt::Orientation, int type );
private:
QwtWheel *d_wheel;
QwtThermo *d_thermo;
QLabel *d_label;
};
#endif

Some files were not shown because too many files have changed in this diff Show More