File: denomspinbox.cpp

package info (click to toggle)
musescore 2.0.3%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 202,532 kB
  • ctags: 58,769
  • sloc: cpp: 257,595; xml: 172,226; ansic: 139,931; python: 6,565; sh: 6,383; perl: 423; makefile: 290; awk: 142; pascal: 67; sed: 3
file content (95 lines) | stat: -rw-r--r-- 2,685 bytes parent folder | download | duplicates (7)
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
//=============================================================================
//  Awl
//  Audio Widget Library
//  $Id:$
//
//  Copyright (C) 2009 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 "denomspinbox.h"

namespace Awl {

//---------------------------------------------------------
//   DenominatorSpinBox
//---------------------------------------------------------

DenominatorSpinBox::DenominatorSpinBox(QWidget* parent)
   : QSpinBox(parent)
      {
      setValue(4);
      setRange(1, 256);
      }

//---------------------------------------------------------
//   stepBy
//---------------------------------------------------------

void DenominatorSpinBox::stepBy(int steps)
      {
      int v = value();
      if (steps < 0)
            v = v / 2;
      else
            v = v * 2;
      if (v < 1)
            v = 1;
      if (v > 256)
            v = 256;
      setValue(v);
      }

//---------------------------------------------------------
//   validate
//---------------------------------------------------------

QValidator::State DenominatorSpinBox::validate(QString& input, int& /*pos*/) const
      {
      if (input.isEmpty())
            return QValidator::Intermediate;
      bool ok;
      int val = input.toInt(&ok);
      if (!ok)
            return QValidator::Invalid;
      if (val && (val - 1) != 0)
            return QValidator::Intermediate;
      return QValidator::Acceptable;
      }

//---------------------------------------------------------
//   fixup
//---------------------------------------------------------

void DenominatorSpinBox::fixup(QString& input) const
      {
      bool ok;
      int val = input.toInt(&ok);
      if (!ok) {
            input = QString("4");
            return;
            }
      if (val == 1)
            return;
      if (val < 1 || val > 256) {
            input = QString("4");
            return;
            }
      double v = round(log2(double(val)));
      val = int(exp2(v));
      input = QString("%1").arg(val);
      }

}