33 #include <QtGui/QSlider>
34 #include <QtGui/QToolButton>
35 #include <QtGui/QLayout>
36 #include <QtGui/QApplication>
37 #include <QtGui/QHelpEvent>
51 :
QWidget( parent ), mModel( 0 ), mZoomControl( 0 )
54 mZoomOutButton->setIcon( KIcon( QLatin1String(
"zoom-out") ) );
55 mZoomOutButton->setAutoRaise(
true );
57 mSlider =
new QSlider( Qt::Horizontal,
this );
60 mZoomInButton->setIcon( KIcon( QLatin1String(
"zoom-in") ) );
61 mZoomInButton->setAutoRaise(
true );
63 QHBoxLayout* layout =
new QHBoxLayout(
this );
64 layout->setSpacing( 0 );
65 layout->setMargin( 0 );
66 layout->addWidget( mZoomOutButton );
67 layout->addWidget( mSlider );
68 layout->addWidget( mZoomInButton );
70 connect( mZoomOutButton, SIGNAL(clicked()), SLOT(zoomOut()) );
71 connect( mZoomInButton, SIGNAL(clicked()), SLOT(zoomIn()) );
72 connect( mSlider, SIGNAL(valueChanged(
int)), SLOT(onSliderValueChanged(
int)) );
73 connect( mSlider, SIGNAL(sliderMoved(
int)), SLOT(onSliderMoved(
int)) );
83 if( mModel ) mModel->disconnect(
this );
86 mZoomControl = mModel ? qobject_cast<
If::Zoomable *>( mModel ) : 0;
88 const bool hasView = ( mZoomControl != 0 );
91 mSlider->setSingleStep( 1 );
92 mSlider->setPageStep( 5 );
96 mSlider->setRange( min, max );
98 onZoomLevelChange( mZoomControl->
zoomLevel() );
99 const int sliderValue = mSlider->value();
100 mZoomOutButton->setEnabled( sliderValue > mSlider->minimum() );
101 mZoomInButton->setEnabled( sliderValue < mSlider->maximum() );
102 connect( mModel, SIGNAL(zoomLevelChanged(
double)), SLOT(onZoomLevelChange(
double)) );
106 mZoomOutButton->setEnabled(
false );
107 mZoomInButton->setEnabled(
false );
109 mSlider->setRange( 0, 99 );
110 mSlider->setValue( 50 );
113 mSlider->setEnabled( hasView );
116 void ZoomSlider::updateToolTip(
int sliderValue )
118 const float zoomLevel = 50.0 / (100-sliderValue);
119 const int zoomPercent =
static_cast<int>( zoomLevel*100 + 0.5 );
120 mSlider->setToolTip( i18nc(
"@info:tooltip",
"Zoom: %1%", zoomPercent) );
124 void ZoomSlider::zoomOut()
126 const int newValue = mSlider->value() - mSlider->singleStep();
127 mSlider->setValue( newValue );
130 void ZoomSlider::zoomIn()
132 const int newValue = mSlider->value() + mSlider->singleStep();
133 mSlider->setValue( newValue );
137 void ZoomSlider::onSliderValueChanged(
int sliderValue )
139 updateToolTip( sliderValue );
140 mZoomOutButton->setEnabled( sliderValue > mSlider->minimum() );
141 mZoomInButton->setEnabled( sliderValue < mSlider->maximum() );
151 void ZoomSlider::onSliderMoved(
int sliderValue )
153 Q_UNUSED( sliderValue )
155 QPoint toolTipPoint = mSlider->rect().topLeft();
156 toolTipPoint.ry() += mSlider->height() / 2;
157 toolTipPoint = mSlider->mapToGlobal( toolTipPoint );
159 QHelpEvent toolTipEvent( QEvent::ToolTip, QPoint(0, 0), toolTipPoint );
160 QApplication::sendEvent( mSlider, &toolTipEvent );
163 void ZoomSlider::onZoomLevelChange(
double level )
166 const int newSliderValue = 100-
static_cast<int>( 50.0 / mZoomLevel + 0.5 );
167 if( newSliderValue != mSlider->value() )
169 disconnect( mSlider, SIGNAL(valueChanged(
int)),
this, 0 );
170 mSlider->setSliderPosition( newSliderValue );
171 updateToolTip( mSlider->value() );
172 connect( mSlider, SIGNAL(valueChanged(
int)), SLOT(onSliderValueChanged(
int)) );
ZoomSlider(QWidget *parent)
AbstractModel * findBaseModelWithInterface() const
returns the first baseModel which is of type T, or null if none is found.
virtual void setZoomLevel(double Level)=0
static const int ZoomSliderWidth
virtual double zoomLevel() const =0
void setTargetModel(AbstractModel *model)