Fixed focus in EditPeerTypeBox. Slightly refactored code.

This commit is contained in:
23rd 2019-03-19 15:25:44 +03:00 committed by John Preston
parent bd7ba3acb1
commit 5edf200157
4 changed files with 33 additions and 28 deletions

View File

@ -74,7 +74,7 @@ void FillContent(
);
historyVisibility->setValue(defaultValue);
const auto result = parent->add(object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
parent,
object_ptr<Ui::VerticalLayout>(parent),

View File

@ -672,8 +672,11 @@ void Controller::fillManageSection() {
if (canEditPreHistoryHidden) {
fillHistoryVisibilityButton();
}
if (canEditPreHistoryHidden || canEditSignatures || canEditInviteLink) {
AddSkip(_controls.buttonsLayout,
if (canEditPreHistoryHidden
|| canEditSignatures
|| canEditInviteLink
|| canEditUsername) {
AddSkip(_controls.buttonsLayout,
st::editPeerTopButtonsLayoutSkip,
st::editPeerTopButtonsLayoutSkipCustomBottom);
}
@ -698,7 +701,7 @@ void Controller::fillManageSection() {
navigation,
_peer,
ParticipantsBoxController::Role::Admins);
},
},
st::infoIconAdministrators);
}
if (canViewMembers) {
@ -821,7 +824,7 @@ bool Controller::validateDescription(Saving &to) const {
bool Controller::validateHistoryVisibility(Saving &to) const {
if (!_controls.historyVisibilityWrap) return true;
if (!_controls.historyVisibilityWrap->toggled()
|| (_privacySavedValue == Privacy::Public)) {
return true;
@ -1185,4 +1188,4 @@ bool EditPeerInfoBox::Available(not_null<PeerData*> peer) {
} else {
return false;
}
}
}

View File

@ -52,15 +52,14 @@ public:
not_null<Ui::VerticalLayout*> container,
not_null<PeerData*> peer,
std::optional<Privacy> privacySavedValue,
std::optional<QString> usernameSavedValue,
std::optional<LangKey> usernameError);
std::optional<QString> usernameSavedValue);
void createContent();
QString getUsernameInput();
void setFocusUsername();
LangKey getTitle() {
return _isInviteLink
return _isInviteLink
? lng_profile_invite_link_section
: _isGroup
? lng_manage_peer_group_type
@ -79,6 +78,11 @@ public:
return _controls.privacy->value();
}
void showError(LangKey key) {
_controls.usernameInput->showError();
showUsernameError(Lang::Viewer(key));
}
private:
struct Controls {
@ -137,7 +141,6 @@ private:
not_null<PeerData*> _peer;
std::optional<Privacy> _privacySavedValue = std::nullopt;
std::optional<QString> _usernameSavedValue = std::nullopt;
std::optional<LangKey> _usernameError = std::nullopt;
bool _isGroup = false;
bool _isInviteLink = false;
@ -157,12 +160,10 @@ Controller::Controller(
not_null<Ui::VerticalLayout*> container,
not_null<PeerData*> peer,
std::optional<Privacy> privacySavedValue,
std::optional<QString> usernameSavedValue,
std::optional<LangKey> usernameError)
std::optional<QString> usernameSavedValue)
: _peer(peer)
, _privacySavedValue(privacySavedValue)
, _usernameSavedValue(usernameSavedValue)
, _usernameError(usernameError)
, _isGroup(_peer->isChat() || _peer->isMegagroup())
, _isInviteLink(!_privacySavedValue.has_value() && !_usernameSavedValue.has_value())
, _isAllowSave(!_usernameSavedValue.value_or(QString()).isEmpty())
@ -173,7 +174,7 @@ Controller::Controller(
void Controller::createContent() {
_controls = Controls();
if (_isInviteLink) {
_wrap->add(createInviteLinkCreate());
_wrap->add(createInviteLinkEdit());
@ -191,12 +192,6 @@ void Controller::createContent() {
if (_controls.privacy->value() == Privacy::Private) {
checkUsernameAvailability();
}
if (_usernameError.has_value()) {
showUsernameError(Lang::Viewer(_usernameError.value()));
// Not focused actually.
_controls.usernameInput->setDisplayFocused(true);
setFocusUsername();
}
}
@ -387,14 +382,12 @@ void Controller::privacyChanged(Privacy value) {
}
refreshVisibilities();
_controls.usernameInput->setDisplayFocused(true);
setFocusUsername();
// _box->scrollToWidget(_controls.usernameInput);
} else {
request(base::take(_checkUsernameRequestId)).cancel();
_checkUsernameTimer.cancel();
refreshVisibilities();
setFocusUsername();
}
setFocusUsername();
}
void Controller::checkUsernameAvailability() {
@ -443,7 +436,6 @@ void Controller::checkUsernameAvailability() {
if (_controls.privacy->value() == Privacy::Public) {
_controls.usernameResult = nullptr;
setFocusUsername();
// _box->scrollToWidget(_controls.usernameInput);
}
} else if (type == qstr("USERNAME_INVALID")) {
showUsernameError(
@ -716,9 +708,13 @@ EditPeerTypeBox::EditPeerTypeBox(
, _usernameError(usernameError) {
}
void EditPeerTypeBox::setInnerFocus() {
_focusRequests.fire({});
}
void EditPeerTypeBox::prepare() {
_peer->updateFull();
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
const auto controller = Ui::CreateChild<Controller>(
@ -726,11 +722,16 @@ void EditPeerTypeBox::prepare() {
content,
_peer,
_privacySavedValue,
_usernameSavedValue,
_usernameError);
_usernameSavedValue);
_focusRequests.events(
) | rpl::start_with_next(
[=] { controller->setFocusUsername(); },
[=] {
controller->setFocusUsername();
if (_usernameError.has_value()) {
controller->showError(_usernameError.value());
_usernameError = std::nullopt;
}
},
lifetime());
controller->createContent();

View File

@ -50,6 +50,7 @@ public:
protected:
void prepare() override;
void setInnerFocus() override;
private:
not_null<PeerData*> _peer;