00001
#include "qwt_analog_clock.h"
00002
00008 QwtAnalogClock::QwtAnalogClock(QWidget *parent,
const char* name):
00009
QwtDial(parent, name)
00010 {
00011
setWrapping(TRUE);
00012
setReadOnly(TRUE);
00013
00014
setOrigin(270.0);
00015
setRange(0.0, 60.0 * 60.0 * 12.0);
00016
setScale(-1, 5, 60.0 * 60.0);
00017
00018
setScaleOptions(ScaleTicks | ScaleLabel);
00019
setScaleTicks(1, 0, 8);
00020
00021
const QColor knobColor =
00022 palette().color(QPalette::Active, QColorGroup::Text).dark(120);
00023
00024 QColor handColor;
00025
int width;
00026
00027
for (
int i = 0; i < NHands; i++ )
00028 {
00029
if ( i == SecondHand )
00030 {
00031 width = 2;
00032 handColor = knobColor.dark(120);
00033 }
00034
else
00035 {
00036 width = 8;
00037 handColor = knobColor;
00038 }
00039
00040
QwtDialSimpleNeedle *
hand =
new QwtDialSimpleNeedle(
00041 QwtDialSimpleNeedle::Arrow, TRUE, handColor, knobColor);
00042 hand->
setWidth(width);
00043
00044 d_hand[i] = NULL;
00045
setHand((Hand)i, hand);
00046 }
00047 }
00048
00050 QwtAnalogClock::~QwtAnalogClock()
00051 {
00052
for (
int i = 0; i < NHands; i++ )
00053
delete d_hand[i];
00054 }
00055
00060
void QwtAnalogClock::setNeedle(
QwtDialNeedle *)
00061 {
00062
00063
return;
00064 }
00065
00072 void QwtAnalogClock::setHand(Hand hand,
QwtDialNeedle *needle)
00073 {
00074
if ( hand >= 0 || hand < NHands )
00075 {
00076
delete d_hand[hand];
00077 d_hand[hand] = needle;
00078 }
00079 }
00080
00086 QwtDialNeedle *
QwtAnalogClock::hand(Hand hd)
00087 {
00088
if ( hd < 0 || hd >= NHands )
00089
return NULL;
00090
00091
return d_hand[hd];
00092 }
00093
00099 const QwtDialNeedle *
QwtAnalogClock::hand(Hand hd)
const
00100
{
00101
return ((
QwtAnalogClock *)
this)->hand(hd);
00102 }
00103
00110 void QwtAnalogClock::setCurrentTime()
00111 {
00112
setTime(QTime::currentTime());
00113 }
00114
00119 void QwtAnalogClock::setTime(
const QTime &time)
00120 {
00121
if ( time.isValid() )
00122 {
00123
setValue((time.hour() % 12) * 60.0 * 60.0
00124 + time.minute() * 60.0 + time.second());
00125 }
00126
else
00127
setValid(FALSE);
00128 }
00129
00136 QString
QwtAnalogClock::scaleLabel(
double value)
const
00137
{
00138
if ( value == 0.0 )
00139 value = 60.0 * 60.0 * 12.0;
00140
00141 QString label;
00142 label.sprintf(
"%d",
int(value / (60.0 * 60.0)));
00143
00144
return label;
00145 }
00146
00162 void QwtAnalogClock::drawNeedle(QPainter *painter,
const QPoint ¢er,
00163
int radius,
double, QPalette::ColorGroup cg)
const
00164
{
00165
if (
isValid() )
00166 {
00167
const double hours =
value() / (60.0 * 60.0);
00168
const double minutes = (
value() - (
int)hours * 60.0 * 60.0) / 60.0;
00169
const double seconds =
value() - (
int)hours * 60.0 * 60.0
00170 - (
int)minutes * 60.0;
00171
00172
drawHand(painter, HourHand, center, radius,
00173 360.0 - (
origin() + 360.0 * hours / 12.0), cg);
00174
drawHand(painter, MinuteHand, center, radius,
00175 360.0 - (
origin() + 360.0 * minutes / 60.0), cg);
00176
drawHand(painter, SecondHand, center, radius,
00177 360.0 - (
origin() + 360.0 * seconds / 60.0), cg);
00178 }
00179 }
00180
00191 void QwtAnalogClock::drawHand(QPainter *painter, Hand hd,
00192
const QPoint ¢er,
int radius,
double direction,
00193 QPalette::ColorGroup cg)
const
00194
{
00195
const QwtDialNeedle *needle =
hand(hd);
00196
if ( needle )
00197 {
00198
if ( hd == HourHand )
00199 radius = qRound(0.8 * radius);
00200
00201 needle->
draw(painter, center, radius, direction, cg);
00202 }
00203 }