Vuo 2.4.4
Loading...
Searching...
No Matches
VuoNodeLibraryTextFilter.cc
Go to the documentation of this file.
1
10#include "VuoEditor.hh"
12
17 QLineEdit(parent)
18{
19 // Icons
20 searchIcon = QIcon(QApplication::applicationDirPath().append("/../Resources/search-loupe.png"));
21 clearIcon = QIcon(QPixmap(QApplication::applicationDirPath().append("/../Resources/search-clear.png")));
22 clearIconPressed = QIcon(QPixmap(QApplication::applicationDirPath().append("/../Resources/search-clear-pressed.png")));
23
24 // 'Search' button
25 searchButton = new QToolButton(this);
26 searchButton->setIcon(searchIcon);
27 searchButton->setIconSize(QSize(16,14));
28 searchButton->setCursor(Qt::ArrowCursor);
29 searchButton->setStyleSheet("QToolButton { border: none; padding: 7px 3px 3px 6px; }");
30
31 // 'Clear' button
32 clearButton = new QToolButton(this);
33 clearButton->setIcon(clearIcon);
34 clearButton->setIconSize(QSize(16,14));
35 clearButton->setCursor(Qt::ArrowCursor);
36 clearButton->setStyleSheet("QToolButton { border: none; padding: 7px 3px 3px 5px; }");
37 clearButton->hide();
38 connect(clearButton, &QToolButton::pressed, this, &VuoNodeLibraryTextFilter::updateUI);
39 connect(clearButton, &QToolButton::released, this, &VuoNodeLibraryTextFilter::updateUI);
40 connect(clearButton, &QToolButton::clicked, this, &VuoNodeLibraryTextFilter::clear);
41 connect(this, &VuoNodeLibraryTextFilter::textChanged, this, &VuoNodeLibraryTextFilter::updateUI);
42
43#ifdef __APPLE__
44 // Disable standard OS X focus 'glow'
45 setAttribute(Qt::WA_MacShowFocusRect, false);
46#endif
47
48 VuoEditor *editor = (VuoEditor *)qApp;
49 connect(editor, &VuoEditor::darkInterfaceToggled, this, &VuoNodeLibraryTextFilter::updateColor);
50 updateColor(editor->isInterfaceDark());
51}
52
57{
58 QLineEdit::resizeEvent(event);
59
60 // Move the "Clear" button manually instead of using a layout, to avoid bug
61 // https://b33p.net/kosada/node/13381.
62 clearButton->move(width()-clearButton->iconSize().width()-10, -1);
63}
64
69{
70 Qt::KeyboardModifiers modifiers = event->modifiers();
71 switch (event->key())
72 {
73 // The 'Escape' key is handled by VuoNodeLibrary::keyPressEvent.
74
75
76 // The 'Paste' keyboard shortcut disambiguates the pasted text and pastes it either
77 // to the text filter or the canvas, as appropriate.
78 case Qt::Key_V:
79 {
80 if (modifiers & Qt::ControlModifier)
81 {
83 break;
84 }
85 [[clang::fallthrough]];
86 }
87
88
89 default:
90 {
91 QLineEdit::keyPressEvent(event);
92 break;
93 }
94 }
95}
96
100void VuoNodeLibraryTextFilter::updateUI()
101{
102 if (text().isEmpty())
103 clearButton->hide();
104 else
105 clearButton->show();
106
107 VuoEditor *editor = (VuoEditor *)qApp;
108 bool clearButtonState = clearButton->isDown();
109 if (editor->isInterfaceDark())
110 clearButtonState = !clearButtonState;
111 clearButton->setIcon(clearButtonState ? clearIconPressed : clearIcon);
112}
113
117bool VuoNodeLibraryTextFilter::inGraphiteDisplayMode()
118{
119 const QColor graphiteAlternateBaseColor = QColor(240, 240, 240);
120 QColor currentAlternateBaseColor = QApplication::palette(this).color(QPalette::Normal, QPalette::AlternateBase);
121 return (currentAlternateBaseColor == graphiteAlternateBaseColor);
122}
123
124VuoNodeLibraryTextFilter::~VuoNodeLibraryTextFilter()
125{
126}
127
132{
133 QLineEdit::focusOutEvent(event);
135}
136
140void VuoNodeLibraryTextFilter::updateColor(bool isDark)
141{
142 clearButton->setIcon(isDark ? clearIconPressed : clearIcon);
143
144 const QString focusGlowActiveColor = isDark ? "#1d6ae5" : "#74acec";
145 const QString focusGlowInactiveColor = isDark ? "#505050" : "#efefef";
146 const QString textColor = isDark ? "#cacaca" : "#606060";
147 const QString backgroundColor = isDark ? "#262626" : "#e1e1e1";
148
149 const int borderWidth = 1;
150 const int addedFocusBorderWidth = 1;
151 const int rightPadding = clearButton->iconSize().width()+1;
152 const int leftPadding = searchButton->iconSize().width()+3;
153 const int verticalPadding = 1;
154 setStyleSheet(QString("VuoNodeLibraryTextFilter { border: %1px solid %10;"
155 "border-radius: 5px;"
156 "padding-right: %2px;" // Space for 'Clear' button
157 "padding-left: %3px;" // Space for 'Search' button
158 "padding-top: %4px;"
159 "padding-bottom: %4px;"
160 "background-color: %12;"
161 "margin: 3px 2px 0 3px;"
162 "color: %11;"
163 "}"
164 "VuoNodeLibraryTextFilter:focus { border: %6px solid %5;"
165 "border-radius: 5px;"
166 "padding-right: %7px;" // Space for 'Clear' button
167 "padding-left: %8px;" // Space for 'Search' button
168 "padding-top: %9px;"
169 "padding-bottom: %9px;"
170 "}"
171 )
172 .arg(borderWidth)
173 .arg(rightPadding)
174 .arg(leftPadding)
175 .arg(verticalPadding)
176 .arg(focusGlowActiveColor)
177 .arg(borderWidth + addedFocusBorderWidth)
178 .arg(rightPadding - addedFocusBorderWidth)
179 .arg(leftPadding - addedFocusBorderWidth)
180 .arg(verticalPadding - addedFocusBorderWidth)
181 .arg(focusGlowInactiveColor)
182 .arg(textColor)
183 .arg(backgroundColor)
184 );
185}