summaryrefslogtreecommitdiff
path: root/muse/awl/drawbar.cpp
blob: bc58e4c3c2bc059d5188a8577395cb2f0eb37e8e (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
//=============================================================================
//  Awl
//  Audio Widget Library
//  $Id:$
//
//  Copyright (C) 2007 by Werner Schweer and others
//
//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License version 2.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//=============================================================================

#include "drawbar.h"

namespace Awl {

#if 0
      }
#endif

//---------------------------------------------------------
//   Drawbar
//---------------------------------------------------------

Drawbar::Drawbar(QWidget* parent)
   : Slider(parent)
      {
      _sliderColor = Qt::darkGray;
      setOrientation(Qt::Vertical);
      setInvertedAppearance(true);
      setRange(0.0, 8.0);
      setLineStep(0.3);
      }

Drawbar::~Drawbar()
      {
      }

//---------------------------------------------------------
//   setSliderColor
//---------------------------------------------------------

void Drawbar::setSliderColor(const QColor& c)
      {
      if (c != _sliderColor) {
            _sliderColor = c;
            update();
            }
      }

//---------------------------------------------------------
//   paint
//---------------------------------------------------------

void Drawbar::paintEvent(QPaintEvent*)
      {
      int h   = height();
      int w   = width();

      int kh   = w * 2;
      int kw   = w;
      int pixel = h - kh;
//      int ppos = pixel - int(pixel * _value / 8.0);
      int ppos = int(pixel * _value / 8.0);

      QPainter p(this);

      QColor sc(Qt::darkGray);
      QColor svc(Qt::gray);

      p.setBrush(svc);

      //---------------------------------------------------
      //    draw scale
      //---------------------------------------------------

      int sx = (w + 9) / 10;
      int sw = w - 2 * sx;
      p.fillRect(sx, 0, sw, ppos, sc);
      QPen pen(Qt::white);
      int lw = 2;
      pen.setWidth(lw);
      p.setPen(pen);
      int sx1 = sx + lw/2;
      p.drawLine(sx1, 0, sx1, ppos);
      int sx2 = sx + sw - lw/2;
      p.drawLine(sx2, 0, sx2, ppos);

      //---------------------------------------------------
      //    draw numbers
      //---------------------------------------------------

      p.save();
      p.setClipRect(QRect(sx, 0, sw, ppos));
      QFont f = p.font();
      f.setPixelSize(8);

      int ch = pixel / 8;
      QString num("%1");
      for (int i = 1; i < 9; ++i) {
            p.drawText(0, ch * (i-1) - (pixel - ppos), w, ch, Qt::AlignCenter, num.arg(9-i));
            }
      p.restore();

      //---------------------------------------------------
      //    draw slider
      //---------------------------------------------------

      p.fillRect(0, ppos, kw, kh, _sliderColor);

      pen.setWidth(1);
      pen.setColor(Qt::black);
      p.setPen(pen);

      int y1 = ppos + kh / 5 * 2;
      int y2 = ppos + kh / 5 * 3;
      p.drawLine(0, y1, kw, y1);
      p.drawLine(0, y2, kw, y2);
      }
}