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