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
|
/******************************************************************************
*
* Copyright (C) 1997-2019 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
*/
#include "inputint.h"
#include "helplabel.h"
#include <QSpinBox>
#include <QGridLayout>
#include <QWheelEvent>
#include <QTextStream>
class NoWheelSpinBox : public QSpinBox
{
protected:
void wheelEvent(QWheelEvent *e)
{
e->ignore();
}
};
InputInt::InputInt( QGridLayout *layout,int &row,
const QString & id,
int defVal, int minVal,int maxVal,
const QString & docs )
: m_default(defVal), m_minVal(minVal), m_maxVal(maxVal), m_docs(docs), m_id(id)
{
m_lab = new HelpLabel(id);
m_sp = new NoWheelSpinBox;
m_sp->setMinimum(minVal);
m_sp->setMaximum(maxVal);
m_sp->setSingleStep(1);
m_val=defVal-1; // force update
setValue(defVal);
layout->addWidget( m_lab, row, 0 );
layout->addWidget( m_sp, row, 1 );
connect(m_sp, SIGNAL(valueChanged(int)),
this, SLOT(setValue(int)) );
connect( m_lab, SIGNAL(enter()), SLOT(help()) );
connect( m_lab, SIGNAL(reset()), SLOT(reset()) );
row++;
}
void InputInt::help()
{
showHelp(this);
}
void InputInt::setValue(int val)
{
val = qMax(m_minVal,val);
val = qMin(m_maxVal,val);
if (val!=m_val)
{
m_val = val;
m_sp->setValue(val);
m_value = m_val;
updateDefault();
}
}
void InputInt::updateDefault()
{
{
if (m_val==m_default || !m_lab->isEnabled())
{
m_lab->setText(QString::fromLatin1("<qt>")+m_id+QString::fromLatin1("</qt"));
}
else
{
m_lab->setText(QString::fromLatin1("<qt><font color='red'>")+m_id+QString::fromLatin1("</font></qt>"));
}
emit changed();
}
}
void InputInt::setEnabled(bool state)
{
m_lab->setEnabled(state);
m_sp->setEnabled(state);
updateDefault();
}
QVariant &InputInt::value()
{
return m_value;
}
void InputInt::update()
{
bool ok;
int newVal = m_value.toInt(&ok);
if (!ok) newVal = m_default;
setValue(newVal);
}
void InputInt::reset()
{
setValue(m_default);
}
void InputInt::writeValue(QTextStream &t,QTextCodec *)
{
t << m_val;
}
bool InputInt::isDefault()
{
return m_val == m_default;
}
|