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
|
//=========================================================
// MusE
// Linux Music Editor
// $Id: spinbox.cpp,v 1.1.2.3 2009/07/09 18:27:11 terminator356 Exp $
// (C) Copyright 2001 Werner Schweer (ws@seh.de)
//
// 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; version 2 of
// the License, or (at your option) any later version.
//
// 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
//=========================================================
#include <QKeyEvent>
#include <QEvent>
#include <QLineEdit>
#include <QMouseEvent>
#include "spinbox.h"
namespace MusEGui {
void SpinBoxLineEdit::mouseDoubleClickEvent(QMouseEvent* e)
{
QLineEdit::mouseDoubleClickEvent(e);
emit doubleClicked();
if((e->buttons() & Qt::LeftButton) && (e->modifiers() & Qt::ControlModifier))
emit ctrlDoubleClicked();
}
//void SpinBoxLineEdit::mousePressEvent(QMouseEvent* e)
//{
// QLineEdit::mousePressEvent(e);
//selectAll();
// if((e->buttons() & Qt::LeftButton) && (e->modifiers() & Qt::ControlModifier))
// emit ctrlClicked();
//}
//---------------------------------------------------------
// SpinBox
//---------------------------------------------------------
SpinBox::SpinBox(QWidget* parent)
: QSpinBox(parent)
{
_returnMode = false;
SpinBoxLineEdit* le = new SpinBoxLineEdit(this);
setLineEdit(le);
setKeyboardTracking(false);
connect(le, SIGNAL(doubleClicked()), this, SIGNAL(doubleClicked()));
connect(le, SIGNAL(ctrlDoubleClicked()), this, SIGNAL(ctrlDoubleClicked()));
//connect(le, SIGNAL(ctrlClicked()), this, SIGNAL(ctrlClicked()));
}
SpinBox::SpinBox(int minValue, int maxValue, int step, QWidget* parent)
: QSpinBox(parent)
{
_returnMode = false;
SpinBoxLineEdit* le = new SpinBoxLineEdit(this);
setLineEdit(le);
setRange(minValue, maxValue);
setSingleStep(step);
setKeyboardTracking(false);
connect(le, SIGNAL(doubleClicked()), this, SIGNAL(doubleClicked()));
connect(le, SIGNAL(ctrlDoubleClicked()), this, SIGNAL(ctrlDoubleClicked()));
//connect(le, SIGNAL(ctrlClicked()), this, SIGNAL(ctrlClicked()));
}
void SpinBox::keyPressEvent(QKeyEvent* ev)
{
switch (ev->key()) {
case Qt::Key_Return:
{
bool mod = lineEdit()->isModified();
QSpinBox::keyPressEvent(ev);
if(_returnMode && !mod) // Force valueChanged if return mode set, even if not modified.
emit valueChanged(value());
emit returnPressed();
}
return;
break;
case Qt::Key_Escape:
emit escapePressed();
return;
break;
default:
break;
}
QSpinBox::keyPressEvent(ev);
}
void SpinBox::wheelEvent(QWheelEvent* e)
{
QSpinBox::wheelEvent(e);
// Need this because Qt doesn't deselect the text if not focused.
if(!hasFocus() && lineEdit())
lineEdit()->deselect();
}
} // namespace MusEGui
|