-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfinddock.cpp
More file actions
107 lines (83 loc) · 3.83 KB
/
finddock.cpp
File metadata and controls
107 lines (83 loc) · 3.83 KB
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
#include "finddock.h"
#include <iostream>
FindDock::FindDock(QWidget *parent)
: QDockWidget(parent)
{
this->setAllowedAreas(Qt::TopDockWidgetArea);
this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
this->setFloating(false);
this->setFeatures(QDockWidget::NoDockWidgetFeatures);
appearanceAnimation = new QPropertyAnimation(this, "geometry");
appearanceAnimation->setDuration(100);
disappearanceAnimation = new QPropertyAnimation(this, "geometry");
disappearanceAnimation->setDuration(100);
connect(disappearanceAnimation, &QPropertyAnimation::finished, this, [=]() {this->setVisible(false);});
this->setTitleBarWidget(new QWidget());
this->titleBarWidget()->setLayout(new QHBoxLayout());
this->titleBarWidget()->layout()->setContentsMargins(20, 5, 20, 5);
this->titleBarWidget()->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
findButton = new QPushButton();
findButton->setFixedWidth(100);
findButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
findButton->setFlat(true);
findButton->setStyleSheet("text-align: right;");
connect(findButton, &QPushButton::pressed, this, &FindDock::requestFind);
this->titleBarWidget()->layout()->addWidget(findButton);
findEdit = new QLineEdit();
findEdit->setFocusPolicy(Qt::StrongFocus);
connect(findEdit, &QLineEdit::returnPressed, this, &FindDock::requestFind);
this->titleBarWidget()->layout()->addWidget(findEdit);
this->setWidget(new QWidget());
this->widget()->setLayout(new QHBoxLayout());
this->widget()->layout()->setContentsMargins(20, 5, 20, 5);
this->widget()->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
replaceButton = new QPushButton();
replaceButton->setFixedWidth(100);
replaceButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
replaceButton->setFlat(true);
replaceButton->setStyleSheet("text-align: right;");
connect(replaceButton, &QPushButton::pressed, this, &FindDock::requestReplace);
this->widget()->layout()->addWidget(replaceButton);
replaceEdit = new QLineEdit();
connect(replaceEdit, &QLineEdit::returnPressed, this, &FindDock::requestReplace);
this->widget()->layout()->addWidget(replaceEdit);
replaceAll = new QPushButton();
replaceAll->setFixedWidth(100);
replaceAll->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
replaceAll->setFlat(true);
connect(replaceAll, &QPushButton::pressed, this, &FindDock::requestReplaceAll);
this->widget()->layout()->addWidget(replaceAll);
connect(this, &FindDock::visibilityChanged,
this, [=](bool visibility) {
if(visibility) {
findEdit->setFocus();
}
});
retranslate();
}
void FindDock::retranslate() {
findButton->setText(tr("find:"));
replaceButton->setText(tr("replace with:"));
replaceAll->setText(tr("replace all"));
}
void FindDock::changeVisibility(bool visible) {
if(visible) {
this->setVisible(true);
appearanceAnimation->setStartValue(QRect(this->x(), this->y() - this->height(), this->width(), this->height()));
appearanceAnimation->setEndValue(QRect(this->x(), this->y(), this->width(), this->height()));
appearanceAnimation->start();
} else {
disappearanceAnimation->setStartValue(this->geometry());
disappearanceAnimation->setEndValue(QRect(this->x(), this->y() - this->height(), this->width(), this->height()));
disappearanceAnimation->start();
}
}
void FindDock::requestFind() {
emit findRequested(findEdit->text());
}
void FindDock::requestReplace() {
emit replaceRequested(findEdit->text(), replaceEdit->text());
}
void FindDock::requestReplaceAll() {
emit replaceAllRequested(findEdit->text(), replaceEdit->text());
}