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
|
//=========================================================
// MusE
// Linux Music Editor
// $Id: spinbox.h,v 1.1.2.2 2009/02/02 21:38:01 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.
//
//=========================================================
// SpinBox:
// Click up/down, or mousewheel, or hit enter with un-modified text (which means enter TWICE for modified text),
// and the control will give up focus, thereby allowing you to use global shortcut keys afterwards.
// Up/down keys still keep the focus.
//
// < Old. That was the SpinBox behaviour in MusE1 (Qt3). They are still desirable goals for MusE2 (Qt4).
// < Flaw: Calling clearFocus() means nothing has focus, not canvases, not even the active top level window. We want canvases to have it.
// < That requires (here in MusE2) setting top win focus proxies and using Application::focusChanged() to redirect focus to the
// < active window's proxy.
// < Very ugly. And with MDI, even more complicated to give focus back to current sub-window. Tried, was crash-prone.
// < Also, toolbars can be floated, so calling clearFocus() from a SpinBox on a floating toolbar means nothing has focus but the
// < toolbar itself is the active window, which requires setting a focus proxy on the toolbar so that Application::focusChanged()
// < can figure out who to give the focus to!
// < It seems we will have to use signals/slots instead of clearFocus()...
// < Flaw: Clearing focus when up/down clicked (when stepBy() is called), auto-repeat might not work because the control has lost focus.
#ifndef __SPINBOX_H__
#define __SPINBOX_H__
#include <QSpinBox>
#include <QLineEdit>
namespace MusEGui {
class SpinBoxLineEdit : public QLineEdit
{
Q_OBJECT
protected:
virtual void mouseDoubleClickEvent(QMouseEvent* e);
//virtual void mousePressEvent(QMouseEvent* e);
signals:
void doubleClicked();
void ctrlDoubleClicked();
//void ctrlClicked();
public:
SpinBoxLineEdit(QWidget* parent = 0) : QLineEdit(parent) {};
};
//---------------------------------------------------------
// SpinBox
//---------------------------------------------------------
class SpinBox : public QSpinBox {
Q_OBJECT
bool _returnMode;
protected:
virtual void keyPressEvent(QKeyEvent*);
virtual void wheelEvent(QWheelEvent*);
signals:
void doubleClicked();
void ctrlDoubleClicked();
//void ctrlClicked();
void returnPressed();
void escapePressed();
public:
SpinBox(QWidget* parent=0);
SpinBox(int minValue, int maxValue, int step = 1, QWidget* parent=0);
void setReturnMode(bool v) { _returnMode = v; }
bool returnMode() const { return _returnMode; }
};
} // namespace MusEGui
#endif
|