mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
Moved menu toggle from top to action button in profile top bar.
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 352 B |
Binary file not shown.
|
After Width: | Height: | Size: 442 B |
Binary file not shown.
|
After Width: | Height: | Size: 818 B |
@@ -1679,6 +1679,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_profile_action_short_join" = "Join";
|
||||
"lng_profile_action_short_report" = "Report";
|
||||
"lng_profile_action_short_leave" = "Leave";
|
||||
"lng_profile_action_short_more" = "More";
|
||||
|
||||
"lng_media_type_photos" = "Photos";
|
||||
"lng_media_type_gifs" = "GIFs";
|
||||
|
||||
@@ -394,16 +394,6 @@ infoTopBarBlackClose: IconButton(infoTopBarClose) {
|
||||
iconOver: icon {{ "info/info_close", windowBoldFg }};
|
||||
ripple: universalRippleAnimation;
|
||||
}
|
||||
infoTopBarBlackMenu: IconButton(infoTopBarMenu) {
|
||||
icon: icon {{ "title_menu_dots", windowBoldFg }};
|
||||
iconOver: icon {{ "title_menu_dots", windowBoldFg }};
|
||||
ripple: universalRippleAnimation;
|
||||
}
|
||||
infoLayerTopBarBlackMenu: IconButton(infoLayerTopBarMenu) {
|
||||
icon: icon {{ "title_menu_dots", windowBoldFg }};
|
||||
iconOver: icon {{ "title_menu_dots", windowBoldFg }};
|
||||
ripple: universalRippleAnimation;
|
||||
}
|
||||
infoTopBarBlackEdit: IconButton(infoTopBarEdit) {
|
||||
icon: icon {{ "menu/edit", windowBoldFg }};
|
||||
iconOver: icon {{ "menu/edit", windowBoldFg }};
|
||||
@@ -451,6 +441,8 @@ infoProfileTopBarStep1: infoProfileTopBarStep2 - infoProfileTopBarActionButtonsH
|
||||
|
||||
infoProfileTopBarNoActionsHeightMax: infoProfileTopBarHeightMax - infoProfileTopBarActionButtonSize;
|
||||
|
||||
infoProfileTopBarActionMenuSkip: 10px;
|
||||
|
||||
infoProfileTopBarActionMessage: icon{{ "profile/message-22x22", windowBoldFg }};
|
||||
infoProfileTopBarActionMute: icon{{ "profile/mute-22x22", windowBoldFg }};
|
||||
infoProfileTopBarActionUnmute: icon{{ "profile/unmute-22x22", windowBoldFg }};
|
||||
@@ -459,6 +451,7 @@ infoProfileTopBarActionGift: icon{{ "profile/gift-22x22", windowBoldFg }};
|
||||
infoProfileTopBarActionJoin: icon{{ "profile/join-22x22", windowBoldFg }};
|
||||
infoProfileTopBarActionReport: icon{{ "profile/report-22x22", windowBoldFg }};
|
||||
infoProfileTopBarActionLeave: icon{{ "profile/leave-22x22", windowBoldFg }};
|
||||
infoProfileTopBarActionMore: icon{{ "profile/profile_more", windowBoldFg }};
|
||||
|
||||
infoMinimalWidth: 324px;
|
||||
infoDesiredWidth: 392px;
|
||||
|
||||
@@ -647,6 +647,26 @@ void TopBar::setupActions(not_null<Controller*> controller) {
|
||||
_actions->add(leaveButton);
|
||||
buttons.push_back(leaveButton);
|
||||
}
|
||||
if ([&]() -> bool {
|
||||
if (controller->wrap() == Wrap::Side) {
|
||||
return false;
|
||||
}
|
||||
const auto guard = gsl::finally([&] { _peerMenu = nullptr; });
|
||||
showTopBarMenu(controller, true);
|
||||
return _peerMenu;
|
||||
}()) {
|
||||
const auto navigation = controller->parentController();
|
||||
const auto moreButton = Ui::CreateChild<TopBarActionButton>(
|
||||
this,
|
||||
tr::lng_profile_action_short_more(tr::now),
|
||||
st::infoProfileTopBarActionMore);
|
||||
moreButton->setClickedCallback([=] {
|
||||
showTopBarMenu(controller, false);
|
||||
});
|
||||
_actionMore = moreButton;
|
||||
_actions->add(moreButton);
|
||||
buttons.push_back(moreButton);
|
||||
}
|
||||
_edgeColor.value() | rpl::map(mapped) | rpl::start_with_next([=](
|
||||
TopBarActionButtonStyle st) {
|
||||
for (const auto &button : buttons) {
|
||||
@@ -864,8 +884,8 @@ void TopBar::updateLabelsPosition() {
|
||||
if (_close) {
|
||||
rightButtonsWidth += _close->width();
|
||||
}
|
||||
if (_topBarMenuToggle) {
|
||||
rightButtonsWidth += _topBarMenuToggle->width();
|
||||
if (_topBarButton) {
|
||||
rightButtonsWidth += _topBarButton->width();
|
||||
}
|
||||
|
||||
const auto reservedRight = anim::interpolate(
|
||||
@@ -1178,67 +1198,18 @@ void TopBar::setupButtons(
|
||||
}
|
||||
|
||||
if (wrap != Wrap::Side) {
|
||||
if (source == Source::Profile) {
|
||||
addTopBarMenuButton(controller, wrap, shouldUseColored);
|
||||
} else if (source == Source::Stories) {
|
||||
if (source == Source::Stories) {
|
||||
addTopBarEditButton(controller, wrap, shouldUseColored);
|
||||
}
|
||||
}
|
||||
}, lifetime());
|
||||
}
|
||||
|
||||
void TopBar::addTopBarMenuButton(
|
||||
not_null<Controller*> controller,
|
||||
Wrap wrap,
|
||||
bool shouldUseColored) {
|
||||
{
|
||||
const auto guard = gsl::finally([&] { _topBarMenu = nullptr; });
|
||||
showTopBarMenu(controller, true);
|
||||
if (!_topBarMenu) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
_topBarMenuToggle = base::make_unique_q<Ui::IconButton>(
|
||||
this,
|
||||
((wrap == Wrap::Layer)
|
||||
? (shouldUseColored
|
||||
? st::infoLayerTopBarColoredMenu
|
||||
: st::infoLayerTopBarBlackMenu)
|
||||
: (shouldUseColored
|
||||
? st::infoTopBarColoredMenu
|
||||
: st::infoTopBarBlackMenu)));
|
||||
_topBarMenuToggle->show();
|
||||
_topBarMenuToggle->addClickHandler([=] {
|
||||
showTopBarMenu(controller, false);
|
||||
});
|
||||
|
||||
widthValue() | rpl::start_with_next([=] {
|
||||
if (_close) {
|
||||
_topBarMenuToggle->moveToRight(_close->width(), 0);
|
||||
} else {
|
||||
_topBarMenuToggle->moveToRight(0, 0);
|
||||
}
|
||||
}, _topBarMenuToggle->lifetime());
|
||||
|
||||
Shortcuts::Requests(
|
||||
) | rpl::filter([=] {
|
||||
return (controller->section().type() == Section::Type::Profile);
|
||||
}) | rpl::start_with_next([=](not_null<Shortcuts::Request*> request) {
|
||||
using Command = Shortcuts::Command;
|
||||
|
||||
request->check(Command::ShowChatMenu, 1) && request->handle([=] {
|
||||
Window::ActivateWindow(controller->parentController());
|
||||
showTopBarMenu(controller, false);
|
||||
return true;
|
||||
});
|
||||
}, _topBarMenuToggle->lifetime());
|
||||
}
|
||||
|
||||
void TopBar::addTopBarEditButton(
|
||||
not_null<Controller*> controller,
|
||||
Wrap wrap,
|
||||
bool shouldUseColored) {
|
||||
_topBarMenuToggle = base::make_unique_q<Ui::IconButton>(
|
||||
_topBarButton = base::make_unique_q<Ui::IconButton>(
|
||||
this,
|
||||
((wrap == Wrap::Layer)
|
||||
? (shouldUseColored
|
||||
@@ -1247,51 +1218,54 @@ void TopBar::addTopBarEditButton(
|
||||
: (shouldUseColored
|
||||
? st::infoTopBarColoredEdit
|
||||
: st::infoTopBarBlackEdit)));
|
||||
_topBarMenuToggle->show();
|
||||
_topBarMenuToggle->addClickHandler([=] {
|
||||
_topBarButton->show();
|
||||
_topBarButton->addClickHandler([=] {
|
||||
controller->showSettings(::Settings::Information::Id());
|
||||
});
|
||||
|
||||
widthValue() | rpl::start_with_next([=] {
|
||||
if (_close) {
|
||||
_topBarMenuToggle->moveToRight(_close->width(), 0);
|
||||
_topBarButton->moveToRight(_close->width(), 0);
|
||||
} else {
|
||||
_topBarMenuToggle->moveToRight(0, 0);
|
||||
_topBarButton->moveToRight(0, 0);
|
||||
}
|
||||
}, _topBarMenuToggle->lifetime());
|
||||
}, _topBarButton->lifetime());
|
||||
}
|
||||
|
||||
void TopBar::showTopBarMenu(
|
||||
not_null<Controller*> controller,
|
||||
bool check) {
|
||||
if (_topBarMenu) {
|
||||
_topBarMenu->hideMenu(true);
|
||||
if (_peerMenu) {
|
||||
_peerMenu->hideMenu(true);
|
||||
return;
|
||||
}
|
||||
_topBarMenu = base::make_unique_q<Ui::PopupMenu>(
|
||||
_peerMenu = base::make_unique_q<Ui::PopupMenu>(
|
||||
QWidget::window(),
|
||||
st::popupMenuExpandedSeparator);
|
||||
|
||||
_topBarMenu->setDestroyedCallback([this] {
|
||||
InvokeQueued(this, [this] { _topBarMenu = nullptr; });
|
||||
if (auto toggle = _topBarMenuToggle.get()) {
|
||||
toggle->setForceRippled(false);
|
||||
}
|
||||
_peerMenu->setDestroyedCallback([this] {
|
||||
InvokeQueued(this, [this] { _peerMenu = nullptr; });
|
||||
// if (auto toggle = _topBarMenuToggle.get()) {
|
||||
// toggle->setForceRippled(false);
|
||||
// }
|
||||
});
|
||||
|
||||
fillTopBarMenu(
|
||||
controller,
|
||||
Ui::Menu::CreateAddActionCallback(_topBarMenu));
|
||||
if (_topBarMenu->empty()) {
|
||||
_topBarMenu = nullptr;
|
||||
Ui::Menu::CreateAddActionCallback(_peerMenu));
|
||||
if (_peerMenu->empty()) {
|
||||
_peerMenu = nullptr;
|
||||
return;
|
||||
} else if (check) {
|
||||
return;
|
||||
}
|
||||
_topBarMenu->setForcedOrigin(Ui::PanelAnimation::Origin::TopRight);
|
||||
_topBarMenuToggle->setForceRippled(true);
|
||||
_topBarMenu->popup(_topBarMenuToggle->mapToGlobal(
|
||||
st::infoLayerTopBarMenuPosition));
|
||||
_peerMenu->setForcedOrigin(Ui::PanelAnimation::Origin::TopRight);
|
||||
_peerMenu->popup(_actionMore
|
||||
? _actionMore->mapToGlobal(
|
||||
QPoint(
|
||||
_actionMore->width(),
|
||||
_actionMore->height() + st::infoProfileTopBarActionMenuSkip))
|
||||
: QCursor::pos());
|
||||
}
|
||||
|
||||
void TopBar::fillTopBarMenu(
|
||||
|
||||
@@ -226,8 +226,10 @@ private:
|
||||
base::unique_qptr<Ui::IconButton> _close;
|
||||
base::unique_qptr<Ui::FadeWrap<Ui::IconButton>> _back;
|
||||
|
||||
base::unique_qptr<Ui::IconButton> _topBarMenuToggle;
|
||||
base::unique_qptr<Ui::PopupMenu> _topBarMenu;
|
||||
base::unique_qptr<Ui::IconButton> _topBarButton;
|
||||
base::unique_qptr<Ui::PopupMenu> _peerMenu;
|
||||
|
||||
Ui::RpWidget *_actionMore = nullptr;
|
||||
|
||||
base::unique_qptr<Ui::AbstractButton> _userpicButton;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user