-
Notifications
You must be signed in to change notification settings - Fork 2
/
EditableLabel.cpp
116 lines (98 loc) · 2.99 KB
/
EditableLabel.cpp
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
/*
(c) 2009,2010,2011 Ian Clark
This file is part of Yasst.
Yasst 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, either version 3 of the License, or
(at your option) any later version.
Yasst 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 Yasst. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* EditableLabel.cpp
*
* Created on: 16-Apr-2009
* Author: ian
*/
#include "EditableLabel.h"
#include "FilterLineEdit.h"
#include <QStackedLayout>
#include <QMessageBox>
#include <QRect>
EditableLabel::EditableLabel(QWidget *parent) : QWidget(parent) {
doInit();
}
EditableLabel::EditableLabel(QString labelText,QWidget *parent) : QWidget(parent) {
doInit();
text->setText(labelText);
edit->setText(labelText);
}
void EditableLabel::doInit() {
QStackedLayout *layout=new QStackedLayout();
layout->setSpacing(0);
layout->setMargin(0);
text=new QLabel(this);
edit=new FilterLineEdit(this);
// text->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
// edit->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Minimum);
// setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
// edit->setMinimumWidth(10);
// text->setMinimumWidth(10);
// setMinimumWidth(10);
edit->setMaximumWidth(90);
layout->addWidget(text);
layout->addWidget(edit);
layout->setCurrentIndex(0);
setLayout(layout);
QObject::connect(edit,SIGNAL(editingFinished()),this,SLOT(setDisplayMode()));
QObject::connect(edit,SIGNAL(lostFocus()),this,SLOT(setDisplayMode()));
// QObject::connect(text,SIGNAL(doubleclicked()),this,SLOT(setEditMode()));
editing=false;
}
EditableLabel::~EditableLabel() {
text->deleteLater();
edit->deleteLater();
}
void EditableLabel::setEditMode() {
// QMessageBox::information (0,"assdf","j2");
((QStackedLayout *)layout())->setCurrentIndex(1);
edit->setFocus(Qt::OtherFocusReason);
editing=true;
this->setMinimumWidth(edit->sizeHint().width()-40);
emit contentsEditing(this);
}
void EditableLabel::setDisplayMode() {
((QStackedLayout *)layout())->setCurrentIndex(0);
editing=false;
this->setMinimumWidth(0);
emit contentsChanged(this);
}
QString EditableLabel::getDisplayText() {
return text->text();
}
QString EditableLabel::getEditText() {
return edit->text();
}
void EditableLabel::setDisplayText(QString s) {
text->setText(s);
}
void EditableLabel::setEditText(QString s) {
edit->setText(s);
}
void EditableLabel::mouseDoubleClickEvent ( QMouseEvent * ) {
setEditMode();
}
QSize EditableLabel::sizeHint () const {
//size.setWidth(text->fontMetrics().width(text->text()));
QSize hint = edit->sizeHint();
QSize thint = text->sizeHint();
if (!editing)
hint.setWidth(thint.width());
else
hint.setWidth(hint.width()-40);
return hint;
}