summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/widgets/tqscrollbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqscrollbar.cpp')
-rw-r--r--tqtinterface/qt4/src/widgets/tqscrollbar.cpp1072
1 files changed, 0 insertions, 1072 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqscrollbar.cpp b/tqtinterface/qt4/src/widgets/tqscrollbar.cpp
deleted file mode 100644
index 959ed28..0000000
--- a/tqtinterface/qt4/src/widgets/tqscrollbar.cpp
+++ /dev/null
@@ -1,1072 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQScrollBar class
-**
-** Created : 940427
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the widgets module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include "tqscrollbar.h"
-#ifndef TQT_NO_SCROLLBAR
-#include "tqpainter.h"
-#include "tqbitmap.h"
-#include "tqapplication.h"
-#include "tqtimer.h"
-#include "tqstyle.h"
-#ifndef TQT_NO_CURSOR
-#include <tqcursor.h>
-#endif
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
-#include "tqaccessible.h"
-#endif
-#include <limits.h>
-
-/*!
- \class TQScrollBar
- \brief The TQScrollBar widget provides a vertical or horizontal scroll bar.
-
- \ingroup basic
-
- A scroll bar allows the user to control a value within a
- program-definable range and gives users a visible indication of
- the current value of a \link TQRangeControl range control \endlink.
-
- Scroll bars include four separate controls:
-
- \list
-
- \i The \e line-up and \e line-down controls are little buttons
- which the user can use to move one "line" up or down. The meaning
- of line is configurable. In editors and list boxes it means one
- line of text; in an image viewer it might mean 20 pixels.
-
- \i The \e slider is the handle that indicates the current value of
- the scroll bar, which the user can drag to change the value. This
- part of the scroll bar is sometimes called the "thumb".
-
- \i The \e page-up/page-down control is the area on which the
- slider slides (the scroll bar's background). Clicking here moves
- the scroll bar towards the click. The meaning of "page" is also
- configurable: in editors and list boxes it means as many lines as
- there is space for in the widget.
-
- \endlist
-
- TQScrollBar has very few of its own functions; it mostly relies on
- TQRangeControl. The most useful functions are setValue() to set the
- scroll bar directly to some value; addPage(), addLine(),
- subtractPage(), and subtractLine() to simulate the effects of
- clicking (useful for accelerator keys); setSteps() to define the
- values of pageStep() and lineStep(); and setRange() to set the
- minValue() and maxValue() of the scroll bar. TQScrollBar has a
- convenience constructor with which you can set most of these
- properties.
-
- Some GUI styles (for example, the Windows and Motif styles
- provided with TQt), also use the pageStep() value to calculate the
- size of the slider.
-
- In addition to the access functions from TQRangeControl, TQScrollBar
- provides a comprehensive set of Q_SIGNALS:
- \table
- \header \i Signal \i Emitted when
- \row \i \l valueChanged()
- \i the scroll bar's value has changed. The tracking()
- determines whether this signal is emitted during user
- interaction.
- \row \i \l sliderPressed()
- \i the user starts to drag the slider.
- \row \i \l sliderMoved()
- \i the user drags the slider.
- \row \i \l sliderReleased()
- \i the user releases the slider.
- \row \i \l nextLine()
- \i the scroll bar has moved one line down or right. Line is
- defined in TQRangeControl.
- \row \i \l prevLine()
- \i the scroll bar has moved one line up or left.
- \row \i \l nextPage()
- \i the scroll bar has moved one page down or right.
- \row \i \l prevPage()
- \i the scroll bar has moved one page up or left.
- \endtable
-
- TQScrollBar only provides integer ranges. Note that although
- TQScrollBar handles very large numbers, scroll bars on current
- screens cannot usefully control ranges above about 100,000 pixels.
- Beyond that, it becomes difficult for the user to control the
- scroll bar using either the keyboard or the mouse.
-
- A scroll bar can be controlled by the keyboard, but it has a
- default focusPolicy() of \c NoFocus. Use setFocusPolicy() to
- enable keyboard focus. See keyPressEvent() for a list of key
- bindings.
-
- If you need to add scroll bars to an interface, consider using the
- TQScrollView class, which encapsulates the common uses for scroll
- bars.
-
- <img src=qscrbar-m.png> <img src=qscrbar-w.png>
-
- \sa TQSlider TQSpinBox TQScrollView
- \link guibooks.html#fowler GUI Design Handbook: Scroll Bar\endlink
-*/
-
-
-/*!
- \fn void TQScrollBar::valueChanged( int value )
-
- This signal is emitted when the scroll bar value has changed, with
- the new scroll bar \a value as an argument.
-*/
-
-/*!
- \fn void TQScrollBar::sliderPressed()
-
- This signal is emitted when the user presses the slider with the
- mouse.
-*/
-
-/*!
- \fn void TQScrollBar::sliderMoved( int value )
-
- This signal is emitted when the slider is dragged by the user, with
- the new scroll bar \a value as an argument.
-
- This signal is emitted even when tracking is turned off.
-
- \sa tracking() valueChanged() nextLine() prevLine() nextPage()
- prevPage()
-*/
-
-/*!
- \fn void TQScrollBar::sliderReleased()
-
- This signal is emitted when the user releases the slider with the
- mouse.
-*/
-
-/*!
- \fn void TQScrollBar::nextLine()
-
- This signal is emitted when the scroll bar scrolls one line down
- or right.
-*/
-
-/*!
- \fn void TQScrollBar::prevLine()
-
- This signal is emitted when the scroll bar scrolls one line up or
- left.
-*/
-
-/*!
- \fn void TQScrollBar::nextPage()
-
- This signal is emitted when the scroll bar scrolls one page down
- or right.
-*/
-
-/*!
- \fn void TQScrollBar::prevPage()
-
- This signal is emitted when the scroll bar scrolls one page up or
- left.
-*/
-
-
-
-static const int thresholdTime = 500;
-static const int repeatTime = 50;
-
-#define HORIZONTAL (orientation() == Qt::Horizontal)
-#define VERTICAL !HORIZONTAL
-#define MOTIF_BORDER 2
-#define SLIDER_MIN 9
-
-
-/*!
- Constructs a vertical scroll bar.
-
- The \a parent and \a name arguments are sent on to the TQWidget
- constructor.
-
- The \c minValue defaults to 0, the \c maxValue to 99, with a \c
- lineStep size of 1 and a \c pageStep size of 10, and an initial
- \c value of 0.
-*/
-
-TQScrollBar::TQScrollBar( TQWidget *parent, const char *name )
- : TQWidget( parent, name ), orient( Qt::Vertical )
-{
- init();
-}
-
-/*!
- Constructs a scroll bar.
-
- The \a orientation must be \c Qt::Vertical or \c Qt::Horizontal.
-
- The \a parent and \a name arguments are sent on to the TQWidget
- constructor.
-
- The \c minValue defaults to 0, the \c maxValue to 99, with a \c
- lineStep size of 1 and a \c pageStep size of 10, and an initial
- \c value of 0.
-*/
-
-TQScrollBar::TQScrollBar( Qt::Orientation orientation, TQWidget *parent,
- const char *name )
- : TQWidget( parent, name ), orient( orientation )
-{
- init();
-}
-
-/*!
- Constructs a scroll bar whose value can never be smaller than \a
- minValue or greater than \a maxValue, whose line step size is \a
- lineStep and page step size is \a pageStep and whose value is
- initially \a value (which is guaranteed to be in range using
- bound()).
-
- If \a orientation is \c Vertical the scroll bar is vertical and if
- it is \c Horizontal the scroll bar is horizontal.
-
- The \a parent and \a name arguments are sent on to the TQWidget
- constructor.
-*/
-
-TQScrollBar::TQScrollBar( int minValue, int maxValue, int lineStep, int pageStep,
- int value, Qt::Orientation orientation,
- TQWidget *parent, const char *name )
- : TQWidget( parent, name ),
- TQRangeControl( minValue, maxValue, lineStep, pageStep, value ),
- orient( orientation )
-{
- init();
-}
-
-/*!
- Destructor.
-*/
-TQScrollBar::~TQScrollBar()
-{
-}
-
-void TQScrollBar::init()
-{
- track = TRUE;
- sliderPos = 0;
- pressedControl = TQStyle::SC_None;
- clickedAt = FALSE;
- setFocusPolicy( Qt::NoFocus );
-
- repeater = 0;
-
- setBackgroundMode((TQt::BackgroundMode)
- tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_BackgroundMode));
-
- TQSizePolicy sp( TQSizePolicy::Minimum, TQSizePolicy::Fixed );
- if ( orient == Qt::Vertical )
- sp.transpose();
- tqsetSizePolicy( sp );
- clearWState( TQt::WState_OwnSizePolicy );
-}
-
-
-/*!
- \property TQScrollBar::orientation
- \brief the orientation of the scroll bar
-
- The orientation must be \l Qt::Vertical (the default) or \l
- Qt::Horizontal.
-*/
-
-void TQScrollBar::setOrientation( Qt::Orientation orientation )
-{
- if ( orientation == orient )
- return;
- if ( !testWState( TQt::WState_OwnSizePolicy ) ) {
- TQSizePolicy sp = tqsizePolicy();
- sp.transpose();
- tqsetSizePolicy( sp );
- clearWState( TQt::WState_OwnSizePolicy );
- }
-
- orient = orientation;
-
- positionSliderFromValue();
- update();
- updateGeometry();
-}
-
-/*!
- \property TQScrollBar::tracking
- \brief whether scroll bar tracking is enabled
-
- If tracking is enabled (the default), the scroll bar emits the
- valueChanged() signal while the slider is being dragged. If
- tracking is disabled, the scroll bar emits the valueChanged()
- signal only when the user releases the mouse button after moving
- the slider.
-*/
-
-
-/*!
- \property TQScrollBar::draggingSlider
- \brief whether the user has clicked the mouse on the slider and is currently dragging it
-*/
-
-bool TQScrollBar::draggingSlider() const
-{
- return pressedControl == TQStyle::SC_ScrollBarSlider;
-}
-
-
-/*!
- Reimplements the virtual function TQWidget::setPalette().
-
- Sets the background color to the mid color for Motif style scroll
- bars using palette \a p.
-*/
-
-void TQScrollBar::setPalette( const TQPalette &p )
-{
- TQWidget::setPalette( p );
- setBackgroundMode((TQt::BackgroundMode)
- tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_BackgroundMode));
-}
-
-
-/*! \reimp */
-TQSize TQScrollBar::tqsizeHint() const
-{
- constPolish();
- int sbextent = tqstyle().tqpixelMetric(TQStyle::PM_ScrollBarExtent, this);
-
- if ( orient == Qt::Horizontal ) {
- return TQSize( 30, sbextent );
- } else {
- return TQSize( sbextent, 30 );
- }
-}
-
-/*! \fn void TQScrollBar::tqsetSizePolicy( TQSizePolicy::SizeType, TQSizePolicy::SizeType, bool )
- \reimp
-*/
-
-/*! \reimp */
-void TQScrollBar::tqsetSizePolicy( TQSizePolicy sp )
-{
- //## remove 4.0
- TQWidget::tqsetSizePolicy( sp );
-}
-
-/*!
- \internal
- Implements the virtual TQRangeControl function.
-*/
-
-void TQScrollBar::valueChange()
-{
- int tmp = sliderPos;
- positionSliderFromValue();
- if ( tmp != sliderPos && isVisible() )
- tqdrawControls(TQStyle::SC_ScrollBarAddPage |
- TQStyle::SC_ScrollBarSubPage |
- TQStyle::SC_ScrollBarSlider,
- pressedControl );
- emit valueChanged(value());
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ValueChanged );
-#endif
-}
-
-/*!
- \internal
- Implements the virtual TQRangeControl function.
-*/
-
-void TQScrollBar::stepChange()
-{
- rangeChange();
-}
-
-/*!
- \internal
- Implements the virtual TQRangeControl function.
-*/
-
-void TQScrollBar::rangeChange()
-{
- positionSliderFromValue();
-
- if ( isVisible() )
- tqdrawControls(TQStyle::SC_ScrollBarAddLine |
- TQStyle::SC_ScrollBarSubLine |
- TQStyle::SC_ScrollBarAddPage |
- TQStyle::SC_ScrollBarSubPage |
- TQStyle::SC_ScrollBarFirst |
- TQStyle::SC_ScrollBarLast |
- TQStyle::SC_ScrollBarSlider,
- pressedControl );
-}
-
-
-/*!
- Handles timer events for the scroll bar.
-*/
-
-void TQScrollBar::doAutoRepeat()
-{
- bool sendRepeat = clickedAt;
-#if !defined( TQT_NO_CURSOR ) && !defined( TQT_NO_STYLE )
- if(sendRepeat && (pressedControl == TQStyle::SC_ScrollBarAddPage ||
- pressedControl == TQStyle::SC_ScrollBarSubPage) &&
- tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_StopMouseOverSlider, this) &&
- tqstyle().querySubControl(TQStyle::CC_ScrollBar, this,
- mapFromGlobal(TQCursor::pos()) ) == TQStyle::SC_ScrollBarSlider)
- sendRepeat = FALSE;
-#endif
- if ( sendRepeat ){
- if ( repeater )
- repeater->changeInterval( repeatTime );
- action( (TQStyle::SubControl) pressedControl );
- TQApplication::syncX();
- } else {
- stopAutoRepeat();
- }
-}
-
-
-/*!
- Starts the auto-repeat logic. Some time after this function is
- called, the auto-repeat starts taking effect and from then on
- repeats until stopAutoRepeat() is called.
-*/
-
-void TQScrollBar::startAutoRepeat()
-{
- if ( !repeater ) {
- repeater = new TQTimer( this, "auto-repeat timer" );
- connect( repeater, TQT_SIGNAL(timeout()),
- this, TQT_SLOT(doAutoRepeat()) );
- }
- repeater->start( thresholdTime, FALSE );
-}
-
-
-/*!
- Stops the auto-repeat logic.
-*/
-
-void TQScrollBar::stopAutoRepeat()
-{
- delete repeater;
- repeater = 0;
-}
-
-
-/*!
- \reimp
-*/
-#ifndef TQT_NO_WHEELEVENT
-void TQScrollBar::wheelEvent( TQWheelEvent *e )
-{
- static float offset = 0;
- static TQScrollBar* offset_owner = 0;
- if (offset_owner != this){
- offset_owner = this;
- offset = 0;
- }
- if ( e->orientation() != orient && !TQT_TQRECT_OBJECT(rect()).contains(e->pos()) )
- return;
- e->accept();
- int step = TQMIN( TQApplication::wheelScrollLines()*lineStep(),
- pageStep() );
- if ( ( e->state() & ControlButton ) || ( e->state() & ShiftButton ) )
- step = pageStep();
- offset += -e->delta()*step/120;
- if (TQABS(offset)<1)
- return;
- setValue( value() + int(offset) );
- offset -= int(offset);
-}
-#endif
-
-/*!
- \reimp
-*/
-void TQScrollBar::keyPressEvent( TQKeyEvent *e )
-{
- // \list
- // \i Left/Right move a horizontal scrollbar by one line.
- // \i Up/Down move a vertical scrollbar by one line.
- // \i PageUp moves up one page.
- // \i PageDown moves down one page.
- // \i Home moves to the start (minValue()).
- // \i End moves to the end (maxValue()).
- // \endlist
-
- // Note that unless you call setFocusPolicy(), the default NoFocus
- // will apply and the user will not be able to use the keyboard to
- // interact with the scrollbar.
- switch ( e->key() ) {
- case Qt::Key_Left:
- if ( orient == Qt::Horizontal )
- subtractLine();
- break;
- case Qt::Key_Right:
- if ( orient == Qt::Horizontal )
- addLine();
- break;
- case Qt::Key_Up:
- if ( orient == Qt::Vertical )
- subtractLine();
- break;
- case Qt::Key_Down:
- if ( orient == Qt::Vertical )
- addLine();
- break;
- case Qt::Key_PageUp:
- subtractPage();
- break;
- case Qt::Key_PageDown:
- addPage();
- break;
- case Qt::Key_Home:
- setValue( minValue() );
- break;
- case Qt::Key_End:
- setValue( maxValue() );
- break;
- default:
- e->ignore();
- break;
- }
-}
-
-
-/*!
- \reimp
-*/
-void TQScrollBar::resizeEvent( TQResizeEvent * )
-{
- positionSliderFromValue();
-}
-
-
-/*!
- \reimp
-*/
-void TQScrollBar::paintEvent( TQPaintEvent * )
-{
- TQPainter p( this );
- tqdrawControls(TQStyle::SC_ScrollBarAddLine |
- TQStyle::SC_ScrollBarSubLine |
- TQStyle::SC_ScrollBarAddPage |
- TQStyle::SC_ScrollBarSubPage |
- TQStyle::SC_ScrollBarFirst |
- TQStyle::SC_ScrollBarLast |
- TQStyle::SC_ScrollBarSlider,
- pressedControl, &p );
-}
-
-static TQCOORD sliderStartPos = 0;
-
-/*!
- \reimp
- */
-void TQScrollBar::contextMenuEvent( TQContextMenuEvent *e )
-{
- if(clickedAt)
- e->consume();
- else
- e->ignore();
-}
-
-/*!
- \reimp
-*/
-void TQScrollBar::mousePressEvent( TQMouseEvent *e )
-{
- bool midButtonAbsPos =
- tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_MiddleClickAbsolutePosition,
- this);
-
- if ( !(e->button() == Qt::LeftButton ||
- (midButtonAbsPos && e->button() == Qt::MidButton) ) )
- return;
-
- if ( maxValue() == minValue() ) // nothing to be done
- return;
-
- if ( e->state() & Qt::MouseButtonMask ) // another button was already pressed
- return;
-
- clickedAt = TRUE;
- pressedControl = tqstyle().querySubControl(TQStyle::CC_ScrollBar, this, e->pos() );
-
- if ( (pressedControl == TQStyle::SC_ScrollBarAddPage ||
- pressedControl == TQStyle::SC_ScrollBarSubPage ||
- pressedControl == TQStyle::SC_ScrollBarSlider ) &&
- ((midButtonAbsPos && e->button() == Qt::MidButton) ||
- (tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_LeftClickAbsolutePosition) && e->button() == Qt::LeftButton))) {
-
- TQRect sr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarSlider ),
- gr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarGroove );
- int sliderMin, sliderMax, sliderLength;
- sliderMin = sliderMax = sliderLength = 0;
- if (HORIZONTAL) {
- sliderMin = gr.x();
- sliderMax = sliderMin + gr.width();
- sliderLength = sr.width();
- } else {
- sliderMin = gr.y();
- sliderMax = sliderMin + gr.height();
- sliderLength = sr.height();
- }
-
- int newSliderPos = (HORIZONTAL ? e->pos().x() : e->pos().y())
- - sliderLength/2;
- newSliderPos = TQMIN( newSliderPos, sliderMax - sliderLength );
- newSliderPos = TQMAX( newSliderPos, sliderMin );
- setValue( sliderPosToRangeValue(newSliderPos) );
- sliderPos = newSliderPos;
- pressedControl = TQStyle::SC_ScrollBarSlider;
- }
-
- if ( pressedControl == TQStyle::SC_ScrollBarSlider ) {
- clickOffset = (TQCOORD)( (HORIZONTAL ? e->pos().x() : e->pos().y())
- - sliderPos );
- slidePrevVal = value();
- sliderStartPos = sliderPos;
- tqdrawControls( pressedControl, pressedControl );
- emit sliderPressed();
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ScrollingStart );
-#endif
- } else if ( pressedControl != TQStyle::SC_None ) {
- tqdrawControls( pressedControl, pressedControl );
- action( (TQStyle::SubControl) pressedControl );
- startAutoRepeat();
- }
-}
-
-
-/*!
- \reimp
-*/
-void TQScrollBar::mouseReleaseEvent( TQMouseEvent *e )
-{
- if ( !clickedAt )
- return;
-
- if ( e->stateAfter() & Qt::MouseButtonMask ) // some other button is still pressed
- return;
-
- TQStyle::SubControl tmp = (TQStyle::SubControl) pressedControl;
- clickedAt = FALSE;
- stopAutoRepeat();
- mouseMoveEvent( e ); // Might have moved since last mouse move event.
- pressedControl = TQStyle::SC_None;
-
- if (tmp == TQStyle::SC_ScrollBarSlider) {
- directSetValue( calculateValueFromSlider() );
- emit sliderReleased();
- if ( value() != prevValue() ) {
- emit valueChanged( value() );
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ValueChanged );
-#endif
- }
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ScrollingEnd );
-#endif
- }
- tqdrawControls( tmp, pressedControl );
- if ( e->button() == Qt::MidButton )
- tqrepaint( FALSE );
-}
-
-
-/*!
- \reimp
-*/
-void TQScrollBar::mouseMoveEvent( TQMouseEvent *e )
-{
- if ( !isVisible() ) {
- clickedAt = FALSE;
- return;
- }
-
- bool mcab = tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_MiddleClickAbsolutePosition,
- this);
- if ( ! clickedAt || ! (e->state() & Qt::LeftButton ||
- ((e->state() & Qt::MidButton) && mcab)))
- return;
-
- int newSliderPos;
- if ( pressedControl == TQStyle::SC_ScrollBarSlider ) {
- TQRect gr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarGroove ),
- sr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarSlider );
- int sliderMin, sliderMax, sliderLength;
-
- if (HORIZONTAL) {
- sliderLength = sr.width();
- sliderMin = gr.x();
- sliderMax = gr.right() - sliderLength + 1;
- } else {
- sliderLength = sr.height();
- sliderMin = gr.y();
- sliderMax = gr.bottom() - sliderLength + 1;
- }
-
- TQRect r = rect();
- int m = tqstyle().tqpixelMetric(TQStyle::PM_MaximumDragDistance, this);
- if ( m >= 0 ) {
- if ( orientation() == Qt::Horizontal )
- r.setRect( r.x() - m, r.y() - 2*m, r.width() + 2*m, r.height() + 4*m );
- else
- r.setRect( r.x() - 2*m, r.y() - m, r.width() + 4*m, r.height() + 2*m );
- if (! r.contains( e->pos()))
- newSliderPos = sliderStartPos;
- else
- newSliderPos = (HORIZONTAL ? e->pos().x() :
- e->pos().y()) -clickOffset;
- } else
- newSliderPos = (HORIZONTAL ? e->pos().x() :
- e->pos().y()) -clickOffset;
-
- if ( newSliderPos < sliderMin )
- newSliderPos = sliderMin;
- else if ( newSliderPos > sliderMax )
- newSliderPos = sliderMax;
- int newVal = sliderPosToRangeValue(newSliderPos);
- if ( newVal != slidePrevVal )
- emit sliderMoved( newVal );
- if ( track && newVal != value() ) {
- directSetValue( newVal ); // Set directly, painting done below
- emit valueChanged( value() );
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ValueChanged );
-#endif
- }
- slidePrevVal = newVal;
- sliderPos = (TQCOORD)newSliderPos;
- tqdrawControls( TQStyle::SC_ScrollBarAddPage |
- TQStyle::SC_ScrollBarSlider |
- TQStyle::SC_ScrollBarSubPage,
- pressedControl );
- } else if (! tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_ScrollWhenPointerLeavesControl)) {
- // stop scrolling when the mouse pointer leaves a control
- // similar to push buttons
- if ( pressedControl != (uint)tqstyle().querySubControl(TQStyle::CC_ScrollBar, this, e->pos() ) ) {
- tqdrawControls( pressedControl, TQStyle::SC_None );
- stopAutoRepeat();
- } else if ( !repeater ) {
- tqdrawControls( pressedControl, pressedControl );
- action( (TQStyle::SubControl) pressedControl );
- startAutoRepeat();
- }
- }
-}
-
-
-/*!
- \fn int TQScrollBar::sliderStart() const
-
- Returns the pixel position where the scroll bar slider starts.
-
- This is equivalent to sliderRect().y() for vertical scroll bars or
- sliderRect().x() for horizontal scroll bars.
-*/
-
-/*!
- Returns the scroll bar slider rectangle.
-
- \sa sliderStart()
-*/
-
-TQRect TQScrollBar::sliderRect() const
-{
- return tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarSlider );
-}
-
-void TQScrollBar::positionSliderFromValue()
-{
- sliderPos = (TQCOORD)rangeValueToSliderPos( value() );
-}
-
-int TQScrollBar::calculateValueFromSlider() const
-{
- return sliderPosToRangeValue( sliderPos );
-}
-
-int TQScrollBar::rangeValueToSliderPos( int v ) const
-{
- TQRect gr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarGroove );
- TQRect sr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarSlider );
- int sliderMin, sliderMax, sliderLength;
-
- if (HORIZONTAL) {
- sliderLength = sr.width();
- sliderMin = gr.x();
- sliderMax = gr.right() - sliderLength + 1;
- } else {
- sliderLength = sr.height();
- sliderMin = gr.y();
- sliderMax = gr.bottom() - sliderLength + 1;
- }
-
- return positionFromValue( v, sliderMax-sliderMin ) + sliderMin;
-}
-
-int TQScrollBar::sliderPosToRangeValue( int pos ) const
-{
- TQRect gr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarGroove );
- TQRect sr = tqstyle().querySubControlMetrics(TQStyle::CC_ScrollBar, this,
- TQStyle::SC_ScrollBarSlider );
- int sliderMin, sliderMax, sliderLength;
-
- if (HORIZONTAL) {
- sliderLength = sr.width();
- sliderMin = gr.x();
- sliderMax = gr.right() - sliderLength + 1;
- } else {
- sliderLength = sr.height();
- sliderMin = gr.y();
- sliderMax = gr.bottom() - sliderLength + 1;
- }
-
- return valueFromPosition( pos - sliderMin, sliderMax - sliderMin );
-}
-
-
-void TQScrollBar::action( int control )
-{
- switch( control ) {
- case TQStyle::SC_ScrollBarAddLine:
- addLine();
- emit nextLine();
- break;
- case TQStyle::SC_ScrollBarSubLine:
- subtractLine();
- emit prevLine();
- break;
- case TQStyle::SC_ScrollBarAddPage:
- addPage();
- emit nextPage();
- break;
- case TQStyle::SC_ScrollBarSubPage:
- subtractPage();
- emit prevPage();
- break;
- case TQStyle::SC_ScrollBarFirst:
- setValue( minValue() );
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ValueChanged );
-#endif
- emit valueChanged( minValue() );
- break;
- case TQStyle::SC_ScrollBarLast:
- setValue( maxValue() );
-#if defined(TQT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ValueChanged );
-#endif
- emit valueChanged( maxValue() );
- break;
- default:
- break;
- }
-}
-
-
-void TQScrollBar::tqdrawControls( uint controls, uint activeControl ) const
-{
- TQPainter p ( this );
- tqdrawControls( controls, activeControl, &p );
-}
-
-
-void TQScrollBar::tqdrawControls( uint controls, uint activeControl,
- TQPainter *p ) const
-{
- if ( !isUpdatesEnabled() )
- return;
-
- TQStyle::SFlags flags = TQStyle::Style_Default;
- if (isEnabled())
- flags |= TQStyle::Style_Enabled;
- if (hasFocus())
- flags |= TQStyle::Style_HasFocus;
- if ( orientation() == Qt::Horizontal )
- flags |= TQStyle::Style_Horizontal;
-
- tqstyle().tqdrawComplexControl(TQStyle::CC_ScrollBar, p, this, rect(), tqcolorGroup(),
- flags, (TQStyle::SubControl) controls,
- (TQStyle::SubControl) activeControl );
-}
-
-/*!
- \reimp
-*/
-void TQScrollBar::styleChange( TQStyle& old )
-{
- positionSliderFromValue();
- setBackgroundMode((TQt::BackgroundMode)
- tqstyle().tqstyleHint(TQStyle::SH_ScrollBar_BackgroundMode));
- TQWidget::styleChange( old );
-}
-
-/*!
- \property TQScrollBar::minValue
- \brief the scroll bar's minimum value
-
- When setting this property, the \l TQScrollBar::maxValue is
- adjusted if necessary to ensure that the range remains valid.
-
- \sa setRange()
-*/
-int TQScrollBar::minValue() const
-{
- return TQRangeControl::minValue();
-}
-
-void TQScrollBar::setMinValue( int minVal )
-{
- TQRangeControl::setMinValue( minVal );
-}
-
-/*!
- \property TQScrollBar::maxValue
- \brief the scroll bar's maximum value
-
- When setting this property, the \l TQScrollBar::minValue is
- adjusted if necessary to ensure that the range remains valid.
-
- \sa setRange()
-*/
-int TQScrollBar::maxValue() const
-{
- return TQRangeControl::maxValue();
-}
-
-void TQScrollBar::setMaxValue( int maxVal )
-{
- TQRangeControl::setMaxValue( maxVal );
-}
-
-/*!
- \property TQScrollBar::lineStep
- \brief the line step
-
- When setting lineStep, the virtual stepChange() function will be
- called if the new line step is different from the previous
- setting.
-
- \sa setSteps() TQRangeControl::pageStep() setRange()
-*/
-
-int TQScrollBar::lineStep() const
-{
- return TQRangeControl::lineStep();
-}
-
-/*!
- \property TQScrollBar::pageStep
- \brief the page step
-
- When setting pageStep, the virtual stepChange() function will be
- called if the new page step is different from the previous
- setting.
-
- \sa TQRangeControl::setSteps() setLineStep() setRange()
-*/
-
-int TQScrollBar::pageStep() const
-{
- return TQRangeControl::pageStep();
-}
-
-void TQScrollBar::setLineStep( int i )
-{
- setSteps( i, pageStep() );
-}
-
-void TQScrollBar::setPageStep( int i )
-{
- setSteps( lineStep(), i );
-}
-
-/*!
- \property TQScrollBar::value
- \brief the scroll bar's value
-
- \sa TQRangeControl::value() prevValue()
-*/
-
-int TQScrollBar::value() const
-{
- return TQRangeControl::value();
-}
-
-void TQScrollBar::setValue( int i )
-{
- TQRangeControl::setValue( i );
-}
-
-
-/*!
- This function is called when the scrollbar is hidden.
-*/
-void TQScrollBar::hideEvent( TQHideEvent* )
-{
- pressedControl = TQStyle::SC_None;
- clickedAt = FALSE;
-}
-
-
-#undef ADD_LINE_ACTIVE
-#undef SUB_LINE_ACTIVE
-#endif