summaryrefslogtreecommitdiffstats
path: root/arts/gui/kde/kpoti.h
blob: 52705f8f5d41359d774348d5bb2f59344e908fe2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/***************************************************************************
                          kpoti.h  -  Potentiometer Widget
                             -------------------
    begin                : Wed Apr 28 23:05:05 MEST 1999

    copyright            : (C) 1999 by Martin Lorenz
    email                : lorenz@ch.tum.de
                           (C) 2002 Matthias Kretz <kretz@kde.org>
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef _KPOTI_H
#define _KPOTI_H

#include <tqframe.h>
#include <tqrangecontrol.h>


class TQTimer;
struct TQPotiData;


class KPoti : public TQFrame, public TQRangeControl
{
    Q_OBJECT
  TQ_OBJECT
public:

    KPoti( TQWidget *parent=0, const char *name=0 );
    KPoti( int minValue, int maxValue, int step, int value,
	     TQWidget *parent=0, const char *name=0 );

    ~KPoti();

    void	setTracking( bool enable );
    bool	tracking() const;

    void 	setColor( const TQColor & );

    virtual void setTickmarks( bool );
    virtual void setLabel( bool );
    bool        tickmarks() const { return ticks; }

    virtual void setTickInterval( int );
    int 	tickInterval() const { return tickInt; }

    virtual TQSizePolicy sizePolicy() const;
    virtual TQSize sizeHint() const;
    virtual TQSize minimumSizeHint() const;
    TQString text() const;

public slots:
    void	setValue( int );
    void	addStep();
    void	subtractStep();
    void	setText( const TQString & );

signals:
    void	valueChanged( int value );
    void	potiPressed();
    void	potiMoved( int value );
    void	potiReleased();
    void  mouseEntered(int value);

protected:
    void	resizeEvent( TQResizeEvent * );
    void	drawContents( TQPainter * );

    void	keyPressEvent( TQKeyEvent * );

    void	mousePressEvent( TQMouseEvent * );
    void	mouseReleaseEvent( TQMouseEvent * );
    void	mouseMoveEvent( TQMouseEvent * );
    void  enterEvent( TQEvent *);

    void	focusInEvent( TQFocusEvent *e );
    void	focusOutEvent( TQFocusEvent *e );

    void	valueChange();
    void	rangeChange();

    virtual void paletteChange( const TQPalette & );

    virtual void paintPoti( TQPainter * );
    void	drawButton( TQPainter *);
    void	drawTicks( TQPainter *, double, double, int=1 ) const;

    virtual void wheelEvent(TQWheelEvent *e);
private slots:
    void	repeatTimeout();

private:
    enum State { Idle, Dragging, TimingUp, TimingDown };

    void	init(int value=0);
    float      	positionFromValue( int ) const;
    int		valueFromPosition( float ) const;
    void	movePoti( float );
    void	reallyMovePoti( float );
    void	resetState();
    int		potiRadius() const;
    void	initTicks();

    TQTimer	*timer;
    float	potiPos;
    int		potiVal;
    int 	clickOffset;
    State	state;
    bool	track;
    bool	ticks, m_bLabel;
    int		tickInt, space;
    double buttonRadius;
private:	// Disabled copy constructor and operator=
    //    KPoti( const KPoti & ) {}
    //KPoti &operator=( const KPoti & ) { return *this; }
    struct KPotiPrivate;
    KPotiPrivate * d;
};

inline bool KPoti::tracking() const
{
    return track;
}


#endif // _KPOTI_H