95 lines
2.6 KiB
C++
95 lines
2.6 KiB
C++
//=============================================================================
|
|
// 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);
|
|
}
|
|
|
|
}
|
|
|