Compare commits

..

62 Commits

Author SHA1 Message Date
Mark Liversedge
f07163689b V3.1 SP1 (3.0.1) released
.. updated versioning and upgrade ids.
2013-12-21 18:27:26 +00:00
Mark Liversedge
c1cca280c3 Fix SEGV if metric not available
.. in RideSummaryWindow if a metric is specified that
   doesn't exist .. because you configured it in a future
   release (e.g. 3.1)
2013-12-21 18:26:05 +00:00
Mark Liversedge
f9ad0c4da2 Fix 3d grid when users specify background colors 2013-12-16 23:34:54 -05:00
Mark Liversedge
a82909062f Batch Export remembers last format/dir
.. but will only default to the last used dir
   if it still exists.
2013-12-16 23:23:41 -05:00
Christian Stade-Schuldt
72d1714e5a Updated Tacx Satori Virtual Power values 2013-12-16 23:17:02 -05:00
Mark Liversedge
3d66855a2e Merge branch 'release_3.0.0' of https://github.com/GoldenCheetah/GoldenCheetah into release_3.0.0 2013-12-08 20:17:24 +00:00
Damien
74fb7f31f5 FitRideFile: - Add Left/Right TorqueEff and Left/Rigth PedalSmooth
- Open Truncated file
2013-12-08 20:08:29 +00:00
Jon Escombe
155f7b4fe7 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-07 16:29:47 -05:00
Jon Escombe
87cef3f412 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-07 21:19:39 +00:00
Mark Liversedge
a83c3bfeee Fix findBests when no speed/gps
.. flawed logic. Same fix also applied to master.
2013-12-06 22:52:23 +00:00
Mark Liversedge
96e006be90 Fix LC_LOCALE on Xcode 5
by including "locale.h".

Fixes #734
2013-12-05 20:57:45 -05:00
Damien
2318ea0b08 FitRideFile: Correction for last Garmin firmware updates
In last Garmin firmware there is some (unknow) fields with multiples values

Fixes #724
2013-12-02 19:04:01 +01:00
Mark Liversedge
680adb2421 V3.0 SP1 RC1 Update
.. cleans out index and metricDBv3 to get a rebuild as
   there is a conflict between the version of clucene used
   in the v3 sp1 build
2013-12-01 19:41:09 +01:00
gcoco
843ac13a98 Add Garmin Forerunner 910XT 2013-11-21 07:47:15 -05:00
Damien
3b62333880 ShareDialog: Add upload to CyclingAnalytics and SelfLoops 2013-11-02 23:13:48 +01:00
Mark Liversedge
7ef01eacd8 Merge pull request #713 from gcoco/qwt-fix
Get rid of qwt compile error about format string.
2013-11-01 10:07:12 -07:00
gcoco
83a89c2b9f 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 11:44:43 -04:00
Mark Liversedge
e880b6adba Add /dev/cu.usbserial as a serial device
Useful on Mac with Sewell adapter for the CT.
2013-10-29 15:34:15 +00:00
Mark Liversedge
6591d09f58 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:34:02 +00:00
Gareth Coco
4fdc533491 Update translation source files 2013-10-29 00:26:54 -04:00
Mark Liversedge
b4d7731f2d 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

[cherry-picked from master cc2a0efe3e]
2013-10-27 20:12:11 +00:00
Damien
9527161f9b ShareDialog: Manage null error message 2013-10-27 00:08:23 +02:00
Damien
33e0702b35 OAuthDialog: Remove qDebug() 2013-10-21 22:23:50 +02:00
Damien
095a8a9290 AllPlot: plot references lines 2013-10-21 00:09:36 +02:00
Damien
2fc23b7041 Correction for release_3.0.0 branch 2013-10-20 23:38:17 +02:00
Damien
40818876e8 FitRideFile: Add Calibration Event parsing 2013-10-20 23:32:44 +02:00
Damien
851ad96801 ShareDialog 2/3 : For version 3.0.1 2013-10-20 17:13:56 +02:00
G Coco
91789a3dca Merge StraveDialog and RideWithGPSDialog
Add OAuth for Strava (Release version only)

Based on the work by D Grauser in commits #f0c2c2b840 and #3a1449231c
2013-10-20 16:44:30 +02:00
Damien
c5b3d56198 GoogleMap: Little fix 2013-10-14 21:32:54 -04:00
Damien
506caf89dc Aerolab: Add a constant altitude option 2013-09-26 07:12:51 -04:00
Damien
847fd004e1 JouleDevice: Remove debug lines 2013-09-25 22:47:42 -04:00
Damien
5b69552f4f JouleDevice: Remove debug lines 2013-09-25 22:47:19 -04:00
Mark Liversedge
7588eb6a28 Merge pull request #694 from gcoco/release_3.0.0
assert cleanup
2013-09-24 12:24:12 -07:00
Gareth Coco
03509108b6 assert cleanup
Based on commit# a2a962120c
2013-09-24 04:37:30 -04:00
Jon Escombe
cc566e92ab 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.

Only detach kernel driver if compiling under Linux (not a portable function)..
2013-09-22 22:07:03 -04:00
Eric Johnson
eebc36a618 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-22 00:33:20 -04:00
Walter Bürki
7b91f18d86 adding hr,cad,power,temp of Suunto Ambit gpx files 2013-09-19 15:04:04 -04:00
gcoco
dd6eaf0bd0 Kurt Kinetic Road Machine PowerCurve fix
Fixes #685
2013-09-19 14:34:11 -04:00
Damien
a4db59e422 Bin2RideFile: correct bug for some GPS data 2013-09-18 14:44:48 -04:00
G Coco
eea7776260 Reinstate Twitter functionality
Fixes #
2013-09-14 22:51:13 -04:00
Dave Waterworth
5fbda61a90 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-09-14 21:30:28 -04:00
Dave Waterworth
7ca196481e 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-09-14 21:29:39 -04:00
Jaime
b71be203f8 Work around to ensure controller key presses aren't missed. Borrowed from Fortius.cpp 2013-09-12 02:42:50 -04:00
Rainer Clasen
c81f899d18 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-09-12 02:41:37 -04:00
Rainer Clasen
4dbe3960b8 PWX: read/write temperature
added temperature to read/write
2013-08-27 07:12:23 -04:00
Rainer Clasen
a84869ad76 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-27 07:12:23 -04:00
Rainer Clasen
527e8e01fd 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-27 07:12:23 -04:00
Rainer Clasen
ee4b2221f7 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-27 07:12:23 -04:00
Rainer Clasen
e57ab8a689 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-26 21:14:56 -04:00
Damien
8dfddb4052 Bin2RideFile: Changes in Summary pages for Data version 5 2013-08-26 20:56:42 -04:00
Damien
21449f82b2 CsvRideFile: add temperature and hill slope (%) parsing for ibike csv file 2013-08-26 20:56:13 -04:00
gcoco
758bbe4635 Twitter API change
Just matching the version in master branch.
2013-08-10 23:51:00 -04:00
gcoco
1e70b58672 Support Twitter API 1.1 2013-08-10 23:45:36 -04:00
Mark Liversedge
a9b84ad1bc Recognise Dave Waterworth
.. in the about box contributors list.
2013-07-09 20:09:15 +01:00
Mark Liversedge
868dce94d7 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:02:49 +01:00
Mark Liversedge
34f7498592 Deprecate Strava Support
No API v3 access.

Fixes #656.
2013-07-06 00:13:55 +01:00
Mark Liversedge
2dc2151103 Fix PWX export SEGV
fixes #654.
2013-07-01 19:15:39 +01:00
Rainer Clasen
4b19b2bb99 make srmio details in version dialog conditionally
... so that GC keeps building with older srmio versions.

[cherry picked from master]
2013-06-25 16:18:41 +01:00
Mark Liversedge
d8a5a62f71 Fixup Fit File issue
Fixes #646

- not cherry picked from master because there is a small
  update in the patch related to a 3.1 development.
2013-06-23 16:57:33 +01:00
Rainer Clasen
7831d01c1a inlude srmio version + commit in about dialog 2013-06-23 16:56:27 +01:00
Rainer Clasen
51669b4913 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 16:56:00 +01:00
Gareth Coco
d8f3f58fd3 Website updates for Version 3.0
(cherry picked from commit fb339a527b)
2013-06-10 09:46:39 +01:00
950 changed files with 62971 additions and 174784 deletions

8
.gitignore vendored
View File

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

View File

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

View File

@@ -1,48 +0,0 @@
<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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

View File

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

View File

@@ -514,21 +514,16 @@ 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 Upload/Download with Strava fails?
======================================
5.3 Why is data uploaded to Strava all wrong?
=============================================
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.
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.
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.
We always upload as TCX since the JSON flavour of their API appears to
have less functionality.
5.4 What settings do I need to get GoldenCheetah to upload to my Google Calendar?
=================================================================================
@@ -758,7 +753,7 @@ Index
* Garmin Connect: METRICS. (line 80)
* github: GENERAL. (line 40)
* Google: UPLOADING AND DOWNLOADING.
(line 38)
(line 33)
* install: GENERAL. (line 31)
* join: DATA. (line 9)
* JSON: DATA. (line 88)
@@ -807,7 +802,7 @@ Index
* weight: MOST COMMON QUESTIONS OF ALL.
(line 36)
* Withings: UPLOADING AND DOWNLOADING.
(line 51)
(line 46)
* xPower: METRICS. (line 9)
* zoom: CHARTS. (line 97)
@@ -820,8 +815,8 @@ Node: GENERAL6062
Node: METRICS9684
Node: DATA16676
Node: UPLOADING AND DOWNLOADING20606
Node: SEASONS AND EVENTS23387
Node: CHARTS24784
Node: INDEX29585
Node: SEASONS AND EVENTS23090
Node: CHARTS24487
Node: INDEX29288

End Tag Table

Binary file not shown.

View File

@@ -567,20 +567,16 @@ using a free service they do not let you retrieve your data.
@section Upload/Download with Strava fails?
@section Why is data uploaded to Strava all wrong?
@cindex Strava
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.
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.
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 always upload as TCX since the JSON flavour of their API appears to have less
functionality.
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?

View File

@@ -1,88 +0,0 @@
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,9 @@ 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_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
BIN= GoldenCheetah_3.0.0_Mac_32bit.dmg \
GoldenCheetah_3.0.0_Mac_64bit.dmg \
GoldenCheetah_3.0.0_Windows_Installer.exe
all: $(HTML)
.PHONY: all clean install
@@ -54,12 +53,6 @@ release-notes.html: release-notes.content genpage.pl
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,8 +11,7 @@ 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> or
<a href="http://www.brew.sh/">Homebrew</a>. On Linux and other
through <a href="http://www.macports.org/">Mac Ports</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,13 +2,13 @@
<p>
Golden Cheetah is available in binary form for
Fedora (RPMs), Mac OS X (Universal Intel binary), and Windows.
Linux x86, Mac OS X (universal 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 GPS. Previously you needed to have the
computer including the new Joule. 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
@@ -16,7 +16,7 @@ If you are having problems then you can manually install the
</p>
<p>
On Windows, Linux and Mac OS X, Golden Cheetah also downloads from the SRM PCV. On Mac
On 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
@@ -26,28 +26,21 @@ PCV on Mac OS X</a> for further information.
<p>
<font face="arial,helvetica,sanserif">
<big><strong>Download Release 3.0.2</strong></big>
<big><strong>Download Release 3.0</strong></big>
</font>
</p>
<p>This is a bug fix release with a few new features.</p>
<ul>
<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>
<li><a href="GoldenCheetah_3.0.0_Windows_Installer.exe">Windows 32-bit (runs on 64bit as well)</a>
<li><a href="GoldenCheetah_3.0.0_Mac_32bit.dmg">Mac OS X Intel 32bit (10.6+)</a><br>
<li><a href="GoldenCheetah_3.0.0_Mac_64bit.dmg">Mac OS X Intel 64bit (10.6+)</a><br>
</ul>
</p>
<p>
Installation is simple. Download the file for your operating system.<br>
Installation is simple. Download the file for your operationg 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>
There is a <a href="https://github.com/GoldenCheetah/GoldenCheetah/blob/master/doc/user/GC3-Manual.pdf?raw=true">Manual</a>
@@ -59,7 +52,7 @@ There is the older Version 2.1.0 <a href="/users-guide.html">User's Guide</a> o
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
You can also <a href="release-notes.html">view the release notes</a> for 3.0
or <a href="older-releases.html">download older releases</a> of Golden Cheetah.
</p>

View File

@@ -1,12 +1,5 @@
<!-- $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

@@ -13,7 +13,8 @@ GoldenCheetah is a software package that:
<ul>
<li>Downloads ride data directly from the CycleOps PowerTap and the SRM
PowerControl V, VI and VII.</p>
PowerControl V. Support for SRM PowerControl VI and VII is planned for the
future.<p>
<li>Imports ride data downloaded with other programs, including TrainingPeaks
WKO+ and the manufacturers' software for the Ergomo, Garmin, Polar, PowerTap,

View File

@@ -18,69 +18,13 @@ 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>
<a href="GoldenCheetah_2.1.0_Linux_x86.gz">Linux x86</a><br>
<a href="GoldenCheetah_2.1.0_Linux_x86_64.gz">Linux x86_64</a><br>
<a href="GoldenCheetah_2.1.0_Mac_Universal.zip">Mac OS X Universal</a><br>
<a href="GoldenCheetah_2.1.0_Windows_Installer.exe">Windows 32-bit</a>
</td>
<td valign="top">
<p>
@@ -130,10 +74,10 @@ Development Builds
<tr>
<td valign="top">2.0.0</td>
<td valign="top">
<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>
<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>
</td>
<td valign="top">
<p>
@@ -216,10 +160,10 @@ Builds, testing and support
<tr>
<td valign="top">1.3.0</td>
<td valign="top">
<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>
<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>
</td>
<td valign="top">
<p>
@@ -316,10 +260,10 @@ Other new features:
<tr>
<td valign="top">1.2.0</td>
<td valign="top">
<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>
<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>
</td>
<td valign="top">
<p>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,99 +0,0 @@
<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

@@ -1,4 +1,4 @@
exists(config.pri):infile(config.pri, SOLUTIONS_LIBRARY, yes): CONFIG += qtsoap-uselib
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 <QIcon>
#include <QMenu>
#include <QPainter>
#include <QStyleOption>
#include <QMouseEvent>
#include <QDebug>
#include <QPixmapCache>
#include <QtGui/QIcon>
#include <QtGui/QMenu>
#include <QtGui/QPainter>
#include <QtGui/QStyleOption>
#include <QtGui/QMouseEvent>
#include <QtCore/QDebug>
#include <QtGui/QPixmapCache>
#include "qtsegmentcontrol.h"

View File

@@ -2,7 +2,7 @@
A whole bunch of stuff here.
*/
#include <QWidget>
#include <QtGui/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.toLatin1());
networkReq.setRawHeader("SOAPAction", soapAction.toAscii());
url.setPath(path);
networkReq.setUrl(url);

6
qwt/.gitignore vendored Normal file
View File

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

510
qwt/CHANGES Normal file
View File

@@ -0,0 +1,510 @@
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 +1,164 @@
see doc/html/qwtinstall.html
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 !

View File

@@ -2,8 +2,7 @@
The Qwt Widget Library
----------------------
Qwt is an extension to the libraries of the Qt Project.
Qwt is an extension to the Qt GUI library from Troll Tech AS.
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,

View File

@@ -1,38 +0,0 @@
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

View File

@@ -1,326 +0,0 @@
#! /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,97 +11,37 @@ 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 plugin
CONFIG += qt designer 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
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}
contains(QWT_CONFIG, QwtDll) {
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
}
win32 {
DEFINES += QT_DLL QWT_DLL
}
}

View File

@@ -15,28 +15,27 @@
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,7 +25,6 @@
#ifndef NO_QWT_PLOT
#include "qwt_designer_plotdialog.h"
#include "qwt_plot.h"
#include "qwt_plot_canvas.h"
#include "qwt_scale_widget.h"
#endif
@@ -35,8 +34,6 @@
#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
@@ -45,9 +42,9 @@
using namespace QwtDesignerPlugin;
CustomWidgetInterface::CustomWidgetInterface( QObject *parent ):
QObject( parent ),
d_isInitialized( false )
CustomWidgetInterface::CustomWidgetInterface(QObject *parent):
QObject(parent),
d_isInitialized(false)
{
}
@@ -102,7 +99,7 @@ QString CustomWidgetInterface::whatsThis() const
}
void CustomWidgetInterface::initialize(
QDesignerFormEditorInterface *formEditor )
QDesignerFormEditorInterface *formEditor)
{
if ( d_isInitialized )
return;
@@ -110,8 +107,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;
@@ -119,12 +116,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"
@@ -138,46 +135,21 @@ PlotInterface::PlotInterface( QObject *parent ):
"</widget>\n";
}
QWidget *PlotInterface::createWidget( QWidget *parent )
QWidget *PlotInterface::createWidget(QWidget *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 ) );
return new 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"
@@ -194,21 +166,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"
@@ -225,47 +197,41 @@ CompassInterface::CompassInterface( QObject *parent ):
"</widget>\n";
}
QWidget *CompassInterface::createWidget( QWidget *parent )
QWidget *CompassInterface::createWidget(QWidget *parent)
{
QwtCompass *compass = new QwtCompass( parent );
compass->setNeedle( new QwtCompassMagnetNeedle(
QwtCompassMagnetNeedle::TriangleStyle,
compass->palette().color( QPalette::Mid ),
compass->palette().color( QPalette::Dark ) ) );
return compass;
return new QwtCompass(parent);
}
#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"
@@ -282,110 +248,102 @@ DialInterface::DialInterface( QObject *parent ):
"</widget>\n";
}
QWidget *DialInterface::createWidget( QWidget *parent )
QWidget *DialInterface::createWidget(QWidget *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;
return new QwtDial(parent);
}
#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>150</width>\n"
" <height>150</height>\n"
" <width>100</width>\n"
" <height>100</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>60</width>\n"
" <height>250</height>\n"
" <width>200</width>\n"
" <height>60</height>\n"
" </rect>\n"
" </property>\n"
"</widget>\n";
}
QWidget *SliderInterface::createWidget( QWidget *parent )
QWidget *SliderInterface::createWidget(QWidget *parent)
{
return new QwtSlider( 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;
}
#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"
@@ -399,131 +357,117 @@ TextLabelInterface::TextLabelInterface( QObject *parent ):
"</widget>\n";
}
QWidget *TextLabelInterface::createWidget( QWidget *parent )
QWidget *TextLabelInterface::createWidget(QWidget *parent)
{
return new QwtTextLabel( QwtText( "Label" ), parent );
return new QwtTextLabel(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 ) );
#if 0
// better not: the designer crashes TODO ..
d_plugins.append( new PlotCanvasInterface( this ) );
#endif
d_plugins.append( new ScaleWidgetInterface( this ) );
d_plugins.append(new PlotInterface(this));
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;
}
@@ -534,19 +478,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
@@ -554,17 +498,15 @@ 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);
}
#if QT_VERSION < 0x050000
Q_EXPORT_PLUGIN2( QwtDesignerPlugin, CustomWidgetCollectionInterface )
#endif
Q_EXPORT_PLUGIN2(QwtDesignerPlugin, CustomWidgetCollectionInterface)

View File

@@ -16,232 +16,218 @@
namespace QwtDesignerPlugin
{
class CustomWidgetInterface: public QObject,
public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
CustomWidgetInterface( QObject *parent );
class CustomWidgetInterface: public QObject,
public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
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 * );
public:
CustomWidgetInterface(QObject *parent);
protected:
QString d_name;
QString d_include;
QString d_toolTip;
QString d_whatsThis;
QString d_domXml;
QString d_codeTemplate;
QIcon d_icon;
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 *);
private:
bool d_isInitialized;
};
protected:
QString d_name;
QString d_include;
QString d_toolTip;
QString d_whatsThis;
QString d_domXml;
QString d_codeTemplate;
QIcon d_icon;
class CustomWidgetCollectionInterface: public QObject,
public QDesignerCustomWidgetCollectionInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetCollectionInterface )
private:
bool d_isInitialized;
};
#if QT_VERSION >= 0x050000
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetCollectionInterface" )
#endif
class CustomWidgetCollectionInterface: public QObject,
public QDesignerCustomWidgetCollectionInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)
public:
CustomWidgetCollectionInterface(QObject *parent = NULL);
public:
CustomWidgetCollectionInterface( QObject *parent = NULL );
virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;
virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;
private:
QList<QDesignerCustomWidgetInterface*> d_plugins;
};
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 );
};
class PlotCanvasInterface: public CustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES( QDesignerCustomWidgetInterface )
public:
PlotCanvasInterface( QObject *parent );
virtual QWidget *createWidget( QWidget *parent );
};
public:
PlotInterface(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

@@ -0,0 +1,615 @@
/****************************************************************************
** 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))

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +0,0 @@
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

View File

@@ -1,306 +0,0 @@
/*!
\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
*/

View File

@@ -1,22 +0,0 @@
################################################################
# 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.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,305 +0,0 @@
/*!
\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.
*/

View File

@@ -1,153 +0,0 @@
/* -*- 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
*/

View File

@@ -1,155 +0,0 @@
\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}

View File

@@ -1,234 +0,0 @@
\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

@@ -1,46 +0,0 @@
#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

@@ -1,241 +0,0 @@
#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

@@ -1,21 +0,0 @@
#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

@@ -1,132 +0,0 @@
#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

@@ -1,25 +0,0 @@
#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

@@ -1,19 +0,0 @@
################################################################
# 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 = barchart
SOURCES = \
barchart.cpp \
main.cpp
HEADERS = \
barchart.h

View File

@@ -1,64 +0,0 @@
#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( 1000, 800 );
w.resize(540,400);
w.show();
return a.exec();

View File

@@ -7,7 +7,10 @@
#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>
@@ -22,19 +25,19 @@
class Zoomer: public QwtPlotZoomer
{
public:
Zoomer( int xAxis, int yAxis, QWidget *canvas ):
QwtPlotZoomer( xAxis, yAxis, canvas )
Zoomer(int xAxis, int yAxis, QwtPlotCanvas *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);
}
};
@@ -48,131 +51,128 @@ 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(
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[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[1] = new Zoomer( QwtAxis::xTop, QwtAxis::yRight,
d_plot->canvas() );
d_zoomer[1] = new Zoomer(QwtPlot::xTop, QwtPlot::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( QwtAxis::xBottom, QwtAxis::yLeft,
d_picker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::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( QPixmap( 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(QIcon(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( QPixmap( 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(QIcon(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( QPixmap( 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(QIcon(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 );
cntDamp->setSingleStep( 0.01 );
cntDamp->setValue( 0.0 );
QwtCounter *cntDamp = new QwtCounter(hBox);
cntDamp->setRange(0.0, 5.0, 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::DiscardBackground );
renderer.setDiscardFlag( QwtPlotRenderer::DiscardCanvasBackground );
renderer.setDiscardFlag( QwtPlotRenderer::DiscardCanvasFrame );
renderer.setLayoutFlag( QwtPlotRenderer::FrameWithScales );
renderer.setDiscardFlag(QwtPlotRenderer::DiscardCanvasBackground);
renderer.setLayoutFlag(QwtPlotRenderer::FrameWithScales);
}
renderer.renderTo( d_plot, printer );
renderer.renderTo(d_plot, printer);
}
}
@@ -180,26 +180,71 @@ void MainWindow::print()
void MainWindow::exportDocument()
{
QwtPlotRenderer renderer;
renderer.exportTo( d_plot, "bode.pdf" );
#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);
}
}
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 )
{
@@ -210,22 +255,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( QwtAxis::xBottom, pos.x() ),
d_plot->invTransform( QwtAxis::yLeft, pos.y() ),
d_plot->invTransform( QwtAxis::yRight, pos.y() )
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())
);
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,99 +1,95 @@
#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,7 +6,6 @@
#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"
@@ -16,152 +15,130 @@
#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" );
setFooter( "Footer Response of a Second-Order System" );
setTitle("Frequency Response of a Second-Order System");
setCanvasBackground( QColor( "MidnightBlue" ) );
setCanvasBackground(QColor(Qt::darkBlue));
// legend
QwtLegend *legend = new QwtLegend;
insertLegend( legend, QwtPlot::BottomLegend );
insertLegend(legend, QwtPlot::BottomLegend);
// grid
QwtPlotGrid *grid = new QwtPlotGrid;
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 );
grid->enableXMin(true);
grid->setMajPen(QPen(Qt::white, 0, Qt::DotLine));
grid->setMinPen(QPen(Qt::gray, 0 , Qt::DotLine));
grid->attach(this);
// axes
for ( int axisPos = 0; axisPos < QwtAxis::PosCount; axisPos++ )
{
setAxesCount( axisPos, 3 );
for ( int i = 0; i < axesCount( axisPos ); i++ )
{
QwtAxisId axisId( axisPos, i );
enableAxis(QwtPlot::yRight);
setAxisTitle(QwtPlot::xBottom, "Normalized Frequency");
setAxisTitle(QwtPlot::yLeft, "Amplitude [dB]");
setAxisTitle(QwtPlot::yRight, "Phase [deg]");
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 );
setAxisMaxMajor(QwtPlot::xBottom, 6);
setAxisMaxMinor(QwtPlot::xBottom, 10);
setAxisScaleEngine(QwtPlot::xBottom, new QwtLog10ScaleEngine);
// curves
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_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_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 );
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);
// 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( 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(QPen(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( 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 );
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);
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;
@@ -170,24 +147,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];
@@ -195,14 +172,15 @@ 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

@@ -1,34 +0,0 @@
################################################################
# 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

@@ -1,163 +0,0 @@
#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

@@ -1,25 +0,0 @@
#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

@@ -1,17 +0,0 @@
#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

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

View File

@@ -1,119 +0,0 @@
#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

@@ -1,25 +0,0 @@
#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

@@ -1,17 +0,0 @@
#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

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

View File

@@ -1,41 +0,0 @@
#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

@@ -1,172 +0,0 @@
#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

@@ -1,25 +0,0 @@
#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

@@ -1,37 +0,0 @@
#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

@@ -1,18 +0,0 @@
#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

@@ -1,188 +0,0 @@
#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

@@ -1,29 +0,0 @@
#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

View File

@@ -1,28 +0,0 @@
#include "wheeltab.h"
#include "wheelbox.h"
#include <qlayout.h>
WheelTab::WheelTab( QWidget *parent ):
QWidget( parent )
{
const int numBoxes = 4;
QGridLayout *layout1 = new QGridLayout();
for ( int i = 0; i < numBoxes; i++ )
{
WheelBox *box = new WheelBox( Qt::Vertical, i );
layout1->addWidget( box, i / 2, i % 2 );
}
QGridLayout *layout2 = new QGridLayout();
for ( int i = 0; i < numBoxes; i++ )
{
WheelBox *box = new WheelBox( Qt::Horizontal, i + numBoxes );
layout2->addWidget( box, i / 2, i % 2 );
}
QHBoxLayout *layout = new QHBoxLayout( this );
layout->addLayout( layout1, 2 );
layout->addLayout( layout2, 5 );
}

View File

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

View File

@@ -6,8 +6,8 @@
CpuPieMarker::CpuPieMarker()
{
setZ( 1000 );
setRenderHint( QwtPlotItem::RenderAntialiased, true );
setZ(1000);
setRenderHint(QwtPlotItem::RenderAntialiased, true);
}
int CpuPieMarker::rtti() const
@@ -15,41 +15,40 @@ int CpuPieMarker::rtti() const
return QwtPlotItem::Rtti_PlotUserItem;
}
void CpuPieMarker::draw( QPainter *painter,
void CpuPieMarker::draw(QPainter *p,
const QwtScaleMap &, const QwtScaleMap &,
const QRectF &rect ) const
const QRectF &rect) const
{
const CpuPlot *cpuPlot = static_cast<CpuPlot *> ( plot() );
const CpuPlot *cpuPlot = (CpuPlot *)plot();
const QwtScaleMap yMap = cpuPlot->canvasMap( QwtAxis::yLeft );
const QwtScaleMap yMap = cpuPlot->canvasMap(QwtPlot::yLeft);
const int margin = 5;
QRectF pieRect;
pieRect.setX( rect.x() + margin );
pieRect.setY( rect.y() + margin );
pieRect.setHeight( yMap.transform( 80.0 ) );
QRect pieRect;
pieRect.setX(rect.x() + margin);
pieRect.setY(rect.y() + margin);
pieRect.setHeight( qRound(yMap.transform(80.0)) );
pieRect.setWidth( pieRect.height() );
const int dataType[] = { CpuPlot::User, CpuPlot::System, CpuPlot::Idle };
int angle = static_cast<int>( 5760 * 0.75 );
int angle = (int)(5760 * 0.75);
for ( unsigned int i = 0;
i < sizeof( dataType ) / sizeof( dataType[0] ); i++ )
i < sizeof(dataType) / sizeof(dataType[0]); i++ )
{
const QwtPlotCurve *curve = cpuPlot->cpuCurve( dataType[i] );
const QwtPlotCurve *curve = cpuPlot->cpuCurve(dataType[i]);
if ( curve->dataSize() > 0 )
{
const int value = static_cast<int>( 5760 * curve->sample( 0 ).y() / 100.0 );
const int value = (int)(5760 * curve->sample(0).y() / 100.0);
painter->save();
painter->setBrush( QBrush( curve->pen().color(), Qt::SolidPattern ) );
p->save();
p->setBrush(QBrush(curve->pen().color(), Qt::SolidPattern));
if ( value != 0 )
painter->drawPie( pieRect, -angle, -value );
painter->restore();
p->drawPie(pieRect, -angle, -value);
p->restore();
angle += value;
}
}
}

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