ConnectionBox::ConnectionBox() : _saveButton(this, lang(lng_connection_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _hostInput(this, st::inpConnectionHost, lang(lng_connection_host_ph), cConnectionProxy().host), _portInput(this, st::inpConnectionPort, lang(lng_connection_port_ph), QString::number(cConnectionProxy().port)), _userInput(this, st::inpConnectionUser, lang(lng_connection_user_ph), cConnectionProxy().user), _passwordInput(this, st::inpConnectionPassword, lang(lng_connection_password_ph), cConnectionProxy().password), _autoRadio(this, qsl("conn_type"), dbictAuto, lang(lng_connection_auto_rb), (cConnectionType() == dbictAuto)), _httpProxyRadio(this, qsl("conn_type"), dbictHttpProxy, lang(lng_connection_http_proxy_rb), (cConnectionType() == dbictHttpProxy)), _tcpProxyRadio(this, qsl("conn_type"), dbictTcpProxy, lang(lng_connection_tcp_proxy_rb), (cConnectionType() == dbictTcpProxy)), a_opacity(0, 1), _hiding(false) { _width = st::addContactWidth; connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); connect(&_autoRadio, SIGNAL(changed()), this, SLOT(onChange())); connect(&_httpProxyRadio, SIGNAL(changed()), this, SLOT(onChange())); connect(&_tcpProxyRadio, SIGNAL(changed()), this, SLOT(onChange())); _passwordInput.setEchoMode(QLineEdit::Password); showAll(); _cache = myGrab(this, rect()); hideAll(); }
void Window::hideSettings(bool fast) { if (!settings) return; if (fast) { anim::stop(settings); settings->hide(); settings->deleteLater(); settings = 0; if (intro) { intro->show(); } else { main->show(); } } else { QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); anim::stop(settings); settings->hide(); settings->deleteLater(); settings = 0; if (intro) { intro->animShow(bg, true); } else { main->animShow(bg, true); } } fixOrder(); }
IntroPhone::IntroPhone(IntroWidget *parent) : IntroStage(parent), errorAlpha(0), changed(false), next(this, lang(lng_intro_next), st::btnIntroNext), country(this, st::introCountry), phone(this, st::inpIntroPhone), code(this, st::inpIntroCountryCode), _signup(this, lng_phone_notreg(lt_signup_start, textcmdStartLink(1), lt_signup_end, textcmdStopLink()), st::introErrLabel, st::introErrLabelTextStyle), _showSignup(false) { setVisible(false); setGeometry(parent->innerRect()); connect(&next, SIGNAL(stateChanged(int, ButtonStateChangeSource)), parent, SLOT(onDoneStateChanged(int, ButtonStateChangeSource))); connect(&next, SIGNAL(clicked()), this, SLOT(onSubmitPhone())); connect(&phone, SIGNAL(voidBackspace(QKeyEvent*)), &code, SLOT(startErasing(QKeyEvent*))); connect(&country, SIGNAL(codeChanged(const QString &)), &code, SLOT(codeSelected(const QString &))); connect(&code, SIGNAL(codeChanged(const QString &)), &country, SLOT(onChooseCode(const QString &))); connect(&code, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &))); connect(&country, SIGNAL(codeChanged(const QString &)), &phone, SLOT(onChooseCode(const QString &))); connect(&code, SIGNAL(addedToNumber(const QString &)), &phone, SLOT(addedToNumber(const QString &))); connect(&country, SIGNAL(selectClosed()), this, SLOT(onSelectClose())); connect(&phone, SIGNAL(changed()), this, SLOT(onInputChange())); connect(&code, SIGNAL(changed()), this, SLOT(onInputChange())); connect(intro(), SIGNAL(countryChanged()), this, SLOT(countryChanged())); connect(&checkRequest, SIGNAL(timeout()), this, SLOT(onCheckRequest())); _signup.setLink(1, TextLinkPtr(new SignUpLink(this))); _signup.hide(); _signupCache = myGrab(&_signup, _signup.rect()); if (!country.onChooseCountry(intro()->currentCountry())) { country.onChooseCountry(qsl("US")); } changed = false; }
ContactsBox::ContactsBox() : _scroll(this, st::newGroupScroll), _inner(), _addContact(this, lang(lng_add_contact_button), st::contactsAdd), _filter(this, st::contactsFilter, lang(lng_participant_filter)), _close(this, lang(lng_contacts_done), st::contactsClose), _hiding(false), a_opacity(0, 1) { _width = st::participantWidth; _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); if (_height > st::participantMaxHeight) _height = st::participantMaxHeight; resize(_width, _height); _scroll.setWidget(&_inner); _scroll.setFocusPolicy(Qt::NoFocus); connect(&_addContact, SIGNAL(clicked()), App::wnd(), SLOT(onShowAddContact())); connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); connect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(updateSel())); connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); connect(&_filter, SIGNAL(changed()), this, SLOT(onFilterUpdate())); connect(&_filter, SIGNAL(cancelled()), this, SLOT(onClose())); connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int))); showAll(); _cache = myGrab(this, rect()); hideAll(); }
void PopupMenu::hideMenu(bool fast) { if (isHidden()) return; if (_parent && !_a_hide.animating()) { _parent->childHiding(this); } if (fast) { if (_a_hide.animating()) { _a_hide.stop(); } a_opacity = anim::fvalue(0, 0); hideFinish(); } else { if (!_a_hide.animating()) { _cache = myGrab(this); a_opacity.start(0); _a_hide.start(); } if (_parent) { _parent->hideMenu(); } } if (_childMenuIndex >= 0) { _menus.at(_childMenuIndex)->hideMenu(fast); } }
void IntroWidget::animShow(const QPixmap &bgAnimCache, bool back) { if (App::app()) App::app()->mtpPause(); (back ? _cacheOver : _cacheUnder) = bgAnimCache; _a_show.stop(); step()->show(); if (step()->hasBack()) { _back.setOpacity(1); _back.show(); } else { _back.hide(); } (back ? _cacheUnder : _cacheOver) = myGrab(this); step()->hide(); _back.hide(); a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); _a_show.start(); show(); }
void Window::setupMain(bool anim, const MTPUser *self) { Local::readStickers(); QPixmap bg = anim ? myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)) : QPixmap(); clearWidgets(); main = new MainWidget(this); main->move(0, st::titleHeight); if (anim) { main->animShow(bg); } else { main->activate(); } if (self) { main->start(*self); } else { MTP::send(MTPusers_GetUsers(MTP_vector<MTPInputUser>(1, MTP_inputUserSelf())), main->rpcDone(&MainWidget::startFull)); } title->resizeEvent(0); fixOrder(); updateTitleStatus(); _mediaView = new MediaView(); }
void AddContactBox::initBox() { _width = st::addContactWidth; if (_peer) { if (_peer->chat) { _boxTitle = lang(lng_edit_group_title); _height = st::addContactTitleHeight + st::addContactPadding.top() + 1 * _firstInput.height() + st::addContactPadding.bottom() + _addButton.height(); } else { _boxTitle = lang(_peer == App::self() ? lng_edit_self_title : lng_edit_contact_title); _height = st::addContactTitleHeight + st::addContactPadding.top() + 2 * _firstInput.height() + 1 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height(); } } else { bool readyToAdd = !_phoneInput.text().isEmpty() && (!_firstInput.text().isEmpty() || !_lastInput.text().isEmpty()); _boxTitle = lang(readyToAdd ? lng_confirm_contact_data : lng_enter_contact_data); _height = st::addContactTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height(); } _firstInput.setGeometry(st::addContactPadding.left(), st::addContactTitleHeight + st::addContactPadding.top(), _width - st::addContactPadding.left() - st::addContactPadding.right(), _firstInput.height()); _lastInput.setGeometry(st::addContactPadding.left(), _firstInput.y() + _firstInput.height() + st::addContactDelta, _firstInput.width(), _firstInput.height()); _phoneInput.setGeometry(st::addContactPadding.left(), _lastInput.y() + _lastInput.height() + st::addContactDelta, _lastInput.width(), _lastInput.height()); int32 buttonTop = (_peer ? (_peer->chat ? _firstInput : _lastInput) : _phoneInput).y() + _phoneInput.height() + st::addContactPadding.bottom(); _cancelButton.move(0, buttonTop); _addButton.move(_width - _addButton.width(), buttonTop); _retryButton.move(_width - _retryButton.width(), buttonTop); _retryButton.hide(); connect(&_addButton, SIGNAL(clicked()), this, SLOT(onSend())); connect(&_retryButton, SIGNAL(clicked()), this, SLOT(onRetry())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); resize(_width, _height); showAll(); _cache = myGrab(this, rect()); hideAll(); }
CreateGroupBox::CreateGroupBox(const MTPVector<MTPInputUser> &users) : _users(users), _createRequestId(0), _name(this, st::newGroupName, lang(lng_dlg_new_group_name)), _create(this, lang(lng_dlg_create_group), st::btnSelectDone), _cancel(this, lang(lng_cancel), st::btnSelectCancel), _hiding(false), a_opacity(0, 1) { _width = st::addContactWidth; _height = st::addContactTitleHeight + st::addContactPadding.top() + _name.height() + st::addContactPadding.bottom() + _create.height(); _name.setGeometry(st::addContactPadding.left(), st::addContactTitleHeight + st::addContactPadding.top(), _width - st::addContactPadding.left() - st::addContactPadding.right(), _name.height()); int32 buttonTop = _name.y() + _name.height() + st::addContactPadding.bottom(); _cancel.move(0, buttonTop); _create.move(_width - _create.width(), buttonTop); connect(&_create, SIGNAL(clicked()), this, SLOT(onCreate())); connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel())); resize(_width, _height); showAll(); _cache = myGrab(this, rect()); hideAll(); }
AddParticipantBox::AddParticipantBox(ChatData *chat) : _scroll(this, st::newGroupScroll), _inner(chat), _filter(this, st::contactsFilter, lang(lng_participant_filter)), _invite(this, lang(lng_participant_invite), st::btnSelectDone), _cancel(this, lang(lng_cancel), st::btnSelectCancel), _hiding(false), a_opacity(0, 1), af_opacity(anim::linear) { _width = st::participantWidth; _height = App::wnd()->height() - st::boxPadding.top() - st::boxPadding.bottom(); if (_height > st::participantMaxHeight) _height = st::participantMaxHeight; resize(_width, _height); _scroll.setWidget(&_inner); _scroll.setFocusPolicy(Qt::NoFocus); connect(&_invite, SIGNAL(clicked()), this, SLOT(onInvite())); connect(&_cancel, SIGNAL(clicked()), this, SIGNAL(closed())); connect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(updateSel())); connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); connect(&_filter, SIGNAL(changed()), this, SLOT(onFilterUpdate())); connect(&_filter, SIGNAL(cancelled()), this, SIGNAL(onClose())); connect(&_inner, SIGNAL(mustScrollTo(int,int)), &_scroll, SLOT(scrollToY(int,int))); connect(&_inner, SIGNAL(selectAllQuery()), &_filter, SLOT(selectAll())); showAll(); _cache = myGrab(this, rect()); hideAll(); }
void DownloadPathBox::startHide() { _hiding = true; if (_cache.isNull()) { _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); }
void ContactsBox::startHide() { _hiding = true; if (_cache.isNull()) { _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); }
void AddParticipantBox::startHide() { _hiding = true; if (_cache.isNull()) { _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); }
void AbstractBox::startHide() { _hiding = true; if (_cache.isNull()) { _cache = myGrab(this, rect()); hideAll(); } a_opacity.start(0); setAttribute(Qt::WA_OpaquePaintEvent, false); }
void PopupMenu::prepareCache() { if (_a_opacity.animating()) return; auto showAnimation = base::take(_a_show); auto showAnimationData = base::take(_showAnimation); showChildren(); _cache = myGrab(this); _showAnimation = base::take(showAnimationData); _a_show = base::take(showAnimation); }
QPixmap SendButton::grabContent() { auto result = QImage(kWideScale * size() * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); result.setDevicePixelRatio(cRetinaFactor()); result.fill(Qt::transparent); { Painter p(&result); p.drawPixmap((kWideScale - 1) / 2 * width(), (kWideScale - 1) / 2 * height(), myGrab(this)); } return App::pixmapFromImageInPlace(std::move(result)); }
void InnerDropdown::startAnimation() { auto from = _hiding ? 1. : 0.; auto to = _hiding ? 0. : 1.; if (!_a_appearance.animating()) { showChildren(); _cache = myGrab(this); } hideChildren(); _a_appearance.start([this] { repaintCallback(); }, from, to, _st.duration); }
void InnerDropdown::prepareCache() { if (_a_opacity.animating()) return; auto showAnimation = base::take(_a_show); auto showAnimationData = base::take(_showAnimation); showChildren(); _cache = myGrab(this); _showAnimation = base::take(showAnimationData); _a_show = base::take(showAnimation); if (_a_show.animating()) { hideChildren(); } }
void PasscodeWidget::showAnimated(const QPixmap &bgAnimCache, bool back) { _showBack = back; (_showBack ? _cacheOver : _cacheUnder) = bgAnimCache; _a_show.finish(); showAll(); setInnerFocus(); _passcode->finishAnimations(); (_showBack ? _cacheUnder : _cacheOver) = myGrab(this); hideAll(); _a_show.start([this] { animationCallback(); }, 0., 1., st::slideDuration, Window::SlideAnimation::transition()); show(); }
void Window::setupIntro(bool anim) { if (intro && (intro->animating() || intro->isVisible()) && !main) return; QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); clearWidgets(); intro = new IntroWidget(this); intro->move(0, st::titleHeight); if (anim) { intro->animShow(bg); } fixOrder(); updateTitleStatus(); }
void Settings::animShow(const QPixmap &bgAnimCache, bool back) { _bgAnimCache = bgAnimCache; anim::stop(this); showAll(); _animCache = myGrab(this, rect()); a_coord = back ? anim::ivalue(-st::introSlideShift, 0) : anim::ivalue(st::introSlideShift, 0); a_alpha = anim::fvalue(0, 1); a_bgCoord = back ? anim::ivalue(0, st::introSlideShift) : anim::ivalue(0, -st::introSlideShift); a_bgAlpha = anim::fvalue(1, 0); hideAll(); anim::start(this); show(); }
void Window::setupMain(bool anim) { QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); clearWidgets(); main = new MainWidget(this); main->move(0, st::titleHeight); if (anim) { main->animShow(bg); } else { MTP::send(MTPusers_GetUsers(MTP_vector<MTPInputUser>(QVector<MTPInputUser>(1, MTP_inputUserSelf()))), main->rpcDone(&MainWidget::startFull)); main->activate(); } fixOrder(); updateTitleStatus(); }
void PasscodeWidget::animShow(const QPixmap &bgAnimCache, bool back) { if (App::app()) App::app()->mtpPause(); (back ? _cacheOver : _cacheUnder) = bgAnimCache; _a_show.stop(); showAll(); (back ? _cacheUnder : _cacheOver) = myGrab(this); hideAll(); a_coordUnder = back ? anim::ivalue(-qFloor(st::slideShift * width()), 0) : anim::ivalue(0, -qFloor(st::slideShift * width())); a_coordOver = back ? anim::ivalue(0, width()) : anim::ivalue(width(), 0); a_shadow = back ? anim::fvalue(1, 0) : anim::fvalue(0, 1); _a_show.start(); show(); }
void Window::showSettings() { App::wnd()->hideLayer(); if (settings) { return hideSettings(); } QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); if (intro) { anim::stop(intro); intro->hide(); } else if (main) { anim::stop(main); main->hide(); } settings = new Settings(this); settings->animShow(bg); fixOrder(); }
void WarningWidget::startAnimation(bool hiding) { _timer.stop(); _hiding = hiding; if (_cache.isNull()) { showChildren(); myEnsureResized(this); _cache = myGrab(this, _outer); } hideChildren(); _animation.start([this] { update(); if (_hiding) { hide(); if (_hiddenCallback) { _hiddenCallback(); } } }, _hiding ? 1. : 0., _hiding ? 0. : 1., st::boxDuration); }
void Window::clearPasscode() { if (!_passcode) return; QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); anim::stop(_passcode); _passcode->hide(); _passcode->deleteLater(); _passcode = 0; if (intro) { intro->animShow(bg, true); } else if (settings) { settings->animShow(bg, true); } else { main->animShow(bg, true); } notifyUpdateAll(); title->updateBackButton(); updateGlobalMenu(); }
void Window::showSettings() { if (isHidden()) showFromTray(); App::wnd()->hideLayer(); if (settings) { return hideSettings(); } QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); if (intro) { anim::stop(intro); intro->hide(); } else if (main) { anim::stop(main); main->hide(); } settings = new SettingsWidget(this); settings->animShow(bg); title->updateBackButton(); fixOrder(); }
void Window::setupPasscode(bool anim) { QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); if (_passcode) { anim::stop(_passcode); _passcode->hide(); _passcode->deleteLater(); } _passcode = new PasscodeWidget(this); _passcode->move(0, st::titleHeight); if (main) main->hide(); if (settings) settings->hide(); if (intro) intro->hide(); if (anim) { _passcode->animShow(bg); } else { _passcode->setInnerFocus(); } _shouldLockAt = 0; notifyUpdateAll(); title->updateBackButton(); updateGlobalMenu(); }
void Window::setupIntro(bool anim) { cSetContactsReceived(false); if (intro && (intro->animating() || intro->isVisible()) && !main) return; QPixmap bg = anim ? myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)) : QPixmap(); clearWidgets(); intro = new IntroWidget(this); intro->move(0, st::titleHeight); if (anim) { intro->animShow(bg); } fixOrder(); updateTitleStatus(); _delayedServiceMsgs.clear(); if (_serviceHistoryRequest) { MTP::cancel(_serviceHistoryRequest); _serviceHistoryRequest = 0; } }
DownloadPathBox::DownloadPathBox() : _path(cDownloadPath()), _tempRadio(this, qsl("dir_type"), 0, lang(lng_download_path_temp_radio), _path.isEmpty()), _dirRadio(this, qsl("dir_type"), 1, lang(lng_download_path_dir_radio), !_path.isEmpty()), _dirInput(this, st::inpDownloadDir, QString(), QDir::toNativeSeparators(_path)), _saveButton(this, lang(lng_connection_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), a_opacity(0, 1), _hiding(false) { _width = st::addContactWidth; connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); connect(&_tempRadio, SIGNAL(changed()), this, SLOT(onChange())); connect(&_dirRadio, SIGNAL(changed()), this, SLOT(onChange())); connect(&_dirInput, SIGNAL(focused()), this, SLOT(onEditPath())); _dirInput.setCursorPosition(0); showAll(); _cache = myGrab(this, rect()); hideAll(); }