00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <qapplication.h>
00012 #include <qtooltip.h>
00013
00014 #include "dynamicSlider.h"
00015
00016
00017 DynamicSlider::DynamicSlider( Orientation orientation, QWidget* parent,
00018 const char* name) : QSlider(orientation, parent, name)
00019 {
00020
00021 int scr = QApplication::desktop()->screenNumber( this );
00022 tooltip = new SliderToolTip( QApplication::desktop()->screen( scr ), this);
00023 updateTooltipLabel();
00024
00025
00026 connect( this, SIGNAL( valueChanged(int) ),
00027 this, SLOT( updateTooltipLabel() ) );
00028 }
00029
00030 DynamicSlider::~DynamicSlider()
00031 {
00032 delete tooltip;
00033 tooltip = NULL;
00034 }
00035
00036 void DynamicSlider::setZeroString( QString val )
00037 {
00038 zeroString = val;
00039 updateTooltipLabel();
00040 }
00041
00042 void DynamicSlider::setPrefix( QString val )
00043 {
00044 prefix1 = val;
00045 prefix2 = QString( NULL );
00046 updateTooltipLabel();
00047 }
00048
00049 void DynamicSlider::setPrefixes( QString v1, QString v2 )
00050 {
00051 prefix1 = v1;
00052 prefix2 = v2;
00053 updateTooltipLabel();
00054 }
00055
00056 void DynamicSlider::setSuffix( QString val )
00057 {
00058 suffix1 = val;
00059 suffix2 = QString( NULL );
00060 updateTooltipLabel();
00061 }
00062
00063 void DynamicSlider::setSuffixes( QString v1, QString v2 )
00064 {
00065 suffix1 = v1;
00066 suffix2 = v2;
00067 updateTooltipLabel();
00068 }
00069
00070 QString DynamicSlider::mapValToString()
00071 {
00072
00073 if( orientation() == Qt::Vertical )
00074 return QString("%1").arg( -value() );
00075 else
00076 return QString("%1").arg(value());
00077 }
00078
00079 void DynamicSlider::updateTooltipLabel()
00080 {
00081
00082 QString tipString;
00083
00084
00085 if( value() == 0 && !zeroString.isNull() )
00086 {
00087 tipString = zeroString;
00088 }
00089
00090 else
00091 {
00092
00093 QString p, s;
00094 if( value() > 0 || prefix2.isNull() ) p = prefix1;
00095 else p = prefix2;
00096
00097 if( value() > 0 || suffix2.isNull() ) s = suffix1;
00098 else s = suffix2;
00099
00100
00101 tipString = QString("%1%2%3").arg(p).arg(mapValToString()).arg(s);
00102
00103 }
00104
00105
00106 tooltip->setText( tipString );
00107 tooltip->adjustSize();
00108 if( tooltip->isShown() ) qApp->processEvents();
00109 }
00110
00111 void DynamicSlider::mouseMoveEvent(QMouseEvent* e)
00112 {
00113
00114 cachedMousePos = e->pos();
00115 QSlider::mouseMoveEvent(e);
00116 emit mouseHasMoved();
00117 }
00118
00119 QPoint DynamicSlider::getMousePos() { return cachedMousePos; }
00120
00121 SliderToolTip::SliderToolTip( QWidget* parent, DynamicSlider* slider)
00122 : QLabel( parent, "toolTipTip",
00123 WStyle_StaysOnTop | WStyle_Customize |
00124 WStyle_NoBorder | WStyle_Tool | WX11BypassWM )
00125 {
00126
00127 this->slider = slider;
00128
00129
00130
00131 setPaletteForegroundColor( QColor("Black") );
00132 setPaletteBackgroundColor( QColor("LightYellow") );
00133
00134
00135 setFont( QToolTip::font() );
00136
00137
00138 setMargin(1);
00139 setAutoMask( FALSE );
00140 setFrameStyle( QFrame::Plain | QFrame::Box );
00141 setLineWidth( 1 );
00142 setAlignment( AlignAuto | AlignTop );
00143 setIndent(0);
00144 polish();
00145 adjustSize();
00146
00147
00148 connect( slider, SIGNAL( sliderPressed() ), this, SLOT( showTooltip() ) );
00149
00150
00151 setMouseTracking(true);
00152 connect( slider, SIGNAL( mouseHasMoved() ), this, SLOT( update() ) );
00153
00154
00155 connect( slider, SIGNAL( sliderReleased() ), this, SLOT( hideTooltip() ) );
00156 }
00157
00158 void SliderToolTip::showTooltip()
00159 {
00160
00161 update();
00162 show();
00163 }
00164
00165 void SliderToolTip::hideTooltip() { hide(); }
00166
00167 void SliderToolTip::update()
00168 {
00169
00170 const int TOOLTIP_MARGIN = 4;
00171
00172
00173 QRect sliderRect = slider->sliderRect();
00174
00175
00176 QPoint tooltipTopLeft;
00177 if( slider->orientation() == Qt::Horizontal )
00178 {
00179 tooltipTopLeft = QPoint( sliderRect.right() + TOOLTIP_MARGIN,
00180 slider->getMousePos().y() >= sliderRect.top() ?
00181 sliderRect.top() - TOOLTIP_MARGIN - height() :
00182 sliderRect.bottom() + TOOLTIP_MARGIN );
00183 }
00184 else
00185 {
00186 tooltipTopLeft = QPoint( slider->getMousePos().x() >= sliderRect.right() ?
00187 sliderRect.left() - TOOLTIP_MARGIN - width() :
00188 sliderRect.right() + TOOLTIP_MARGIN,
00189 (sliderRect.top() + sliderRect.bottom())/2 - height()/2 );
00190 }
00191
00192
00193 tooltipTopLeft = slider->mapToGlobal( tooltipTopLeft );
00194
00195
00196 move( tooltipTopLeft );
00197 if( isShown() ) qApp->processEvents();
00198 }
00199