Add a private method to get control widget by enum to TitleControls

This commit is contained in:
Ilya Fedin 2021-02-06 18:11:34 +04:00 committed by John Preston
parent cc05f8174b
commit 3bc42db7bc
2 changed files with 37 additions and 37 deletions

View file

@ -138,37 +138,53 @@ void TitleControls::raise() {
_close->raise(); _close->raise();
} }
Ui::IconButton *TitleControls::controlWidget(Control control) const {
switch (control) {
case Control::Minimize: return _minimize;
case Control::Maximize: return _maximizeRestore;
case Control::Close: return _close;
}
return nullptr;
}
void TitleControls::updateControlsPosition() { void TitleControls::updateControlsPosition() {
const auto controlsLayout = TitleControlsLayout(); const auto controlsLayout = TitleControlsLayout();
auto controlsLeft = controlsLayout.left; auto controlsLeft = controlsLayout.left;
auto controlsRight = controlsLayout.right; auto controlsRight = controlsLayout.right;
if (!_resizeEnabled) { const auto controlPresent = [&](Control control) {
return ranges::contains(controlsLeft, control)
|| ranges::contains(controlsRight, control);
};
const auto eraseControl = [&](Control control) {
controlsLeft.erase( controlsLeft.erase(
ranges::remove(controlsLeft, Control::Maximize), ranges::remove(controlsLeft, control),
end(controlsLeft)); end(controlsLeft));
controlsRight.erase( controlsRight.erase(
ranges::remove(controlsRight, Control::Maximize), ranges::remove(controlsRight, control),
end(controlsRight)); end(controlsRight));
};
if (!_resizeEnabled) {
eraseControl(Control::Maximize);
} }
if (ranges::contains(controlsLeft, Control::Minimize) if (controlPresent(Control::Minimize)) {
|| ranges::contains(controlsRight, Control::Minimize)) {
_minimize->show(); _minimize->show();
} else { } else {
_minimize->hide(); _minimize->hide();
} }
if (ranges::contains(controlsLeft, Control::Maximize) if (controlPresent(Control::Maximize)) {
|| ranges::contains(controlsRight, Control::Maximize)) {
_maximizeRestore->show(); _maximizeRestore->show();
} else { } else {
_maximizeRestore->hide(); _maximizeRestore->hide();
} }
if (ranges::contains(controlsLeft, Control::Close) if (controlPresent(Control::Close)) {
|| ranges::contains(controlsRight, Control::Close)) {
_close->show(); _close->show();
} else { } else {
_close->hide(); _close->hide();
@ -187,35 +203,18 @@ void TitleControls::updateControlsPositionBySide(
auto position = 0; auto position = 0;
for (const auto &control : preparedControls) { for (const auto &control : preparedControls) {
switch (control) { const auto widget = controlWidget(control);
case Control::Minimize: if (!widget) {
if (right) { continue;
_minimize->moveToRight(position, 0);
} else {
_minimize->moveToLeft(position, 0);
}
position += _minimize->width();
break;
case Control::Maximize:
if (right) {
_maximizeRestore->moveToRight(position, 0);
} else {
_maximizeRestore->moveToLeft(position, 0);
}
position += _maximizeRestore->width();
break;
case Control::Close:
if (right) {
_close->moveToRight(position, 0);
} else {
_close->moveToLeft(position, 0);
}
position += _close->width();
break;
} }
if (right) {
widget->moveToRight(position, 0);
} else {
widget->moveToLeft(position, 0);
}
position += widget->width();
} }
} }

View file

@ -51,6 +51,7 @@ public:
private: private:
[[nodiscard]] not_null<RpWidget*> parent() const; [[nodiscard]] not_null<RpWidget*> parent() const;
[[nodiscard]] not_null<QWidget*> window() const; [[nodiscard]] not_null<QWidget*> window() const;
[[nodiscard]] Ui::IconButton *controlWidget(Control control) const;
void init(Fn<void(bool maximized)> maximize); void init(Fn<void(bool maximized)> maximize);
void updateButtonsState(); void updateButtonsState();