ClickHandler, TopBarWidget and Overview layouts moved to separate files.

Xcode and QtCreator builds are currently broken.
This commit is contained in:
John Preston 2016-04-13 00:31:28 +03:00
parent b07cd1264c
commit 5a3fea05ac
94 changed files with 3706 additions and 3279 deletions

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "lang.h"
#include "application.h"
#include "window.h"
#include "mainwindow.h"
#include "mainwidget.h"
#include "apiwrap.h"

View File

@ -31,7 +31,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include <libexif/exif-data.h>
#endif
#include "localstorage.h"
#include "apiwrap.h"
#include "numbers.h"
namespace {
@ -146,23 +146,29 @@ namespace App {
return AppClass::app();
}
Window *wnd() {
MainWindow *wnd() {
return AppClass::wnd();
}
MainWidget *main() {
Window *w(wnd());
return w ? w->mainWidget() : 0;
if (auto w = wnd()) {
return w->mainWidget();
}
return nullptr;
}
SettingsWidget *settings() {
Window *w(wnd());
return w ? w->settingsWidget() : 0;
if (auto w = wnd()) {
return w->settingsWidget();
}
return nullptr;
}
bool passcoded() {
Window *w(wnd());
return w ? w->passcodeWidget() : 0;
if (auto w = wnd()) {
return w->passcodeWidget();
}
return false;
}
FileUploader *uploader() {
@ -181,7 +187,7 @@ namespace {
if (audioPlayer()) {
audioPlayer()->stopAndClear();
}
if (Window *w = wnd()) {
if (auto w = wnd()) {
w->tempDirDelete(Local::ClearManagerAll);
w->notifyClearFast();
w->setupIntro(true);
@ -196,7 +202,7 @@ namespace {
globalNotifyChatsPtr = UnknownNotifySettings;
if (App::uploader()) App::uploader()->clear();
clearStorageImages();
if (Window *w = wnd()) {
if (auto w = wnd()) {
w->getTitle()->updateBackButton();
w->updateTitleStatus();
w->getTitle()->resizeEvent(0);

View File

@ -20,10 +20,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "basic_types.h"
#include "core/basic_types.h"
class AppClass;
class Window;
class MainWindow;
class MainWidget;
class SettingsWidget;
class ApiWrap;
@ -48,7 +48,7 @@ class LayeredWidget;
namespace App {
AppClass *app();
Window *wnd();
MainWindow *wnd();
MainWidget *main();
SettingsWidget *settings();
bool passcoded();

View File

@ -718,7 +718,7 @@ AppClass::AppClass() : QObject()
QMimeDatabase().mimeTypeForName(qsl("text/plain")); // create mime database
_window = new Window();
_window = new MainWindow();
_window->createWinId();
_window->init();
@ -1053,7 +1053,7 @@ void AppClass::checkMapVersion() {
AppClass::~AppClass() {
Shortcuts::finish();
if (Window *w = _window) {
if (auto w = _window) {
_window = 0;
delete w;
}
@ -1086,7 +1086,7 @@ AppClass *AppClass::app() {
return AppObject;
}
Window *AppClass::wnd() {
MainWindow *AppClass::wnd() {
return AppObject ? AppObject->_window : 0;
}

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "window.h"
#include "mainwindow.h"
#include "pspecific.h"
class UpdateChecker;
@ -153,7 +153,7 @@ public:
~AppClass();
static AppClass *app();
static Window *wnd();
static MainWindow *wnd();
static MainWidget *main();
FileUploader *uploader();
@ -212,7 +212,7 @@ private:
uint64 _lastActionTime;
Window *_window;
MainWindow *_window;
FileUploader *_uploader;
Translator *_translator;

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "basic_types.h"
#include "core/basic_types.h"
void audioInit();
bool audioWorks();

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "aboutbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "autoupdater.h"
#include "boxes/confirmbox.h"

View File

@ -25,7 +25,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "abstractbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
void BlueTitleShadow::paintEvent(QPaintEvent *e) {
Painter p(this);

View File

@ -28,7 +28,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "photocropbox.h"
#include "ui/filedialog.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "apiwrap.h"
AddContactBox::AddContactBox(QString fname, QString lname, QString phone) : AbstractBox(st::boxWidth)
, _user(0)

View File

@ -26,7 +26,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "autolockbox.h"
#include "confirmbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
AutoLockBox::AutoLockBox() :
_close(this, lang(lng_box_ok), st::defaultBoxButton) {

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "backgroundbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "settingswidget.h"
BackgroundInner::BackgroundInner() :

View File

@ -23,9 +23,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "confirmbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "apiwrap.h"
#include "application.h"
#include "core/click_handler_types.h"
TextParseOptions _confirmBoxTextOptions = {
TextParseLinks | TextParseMultiline | TextParseRichText, // flags

View File

@ -25,7 +25,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "connectionbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
ConnectionBox::ConnectionBox() : AbstractBox(st::boxWidth)
, _hostInput(this, st::connectionHostInputField, lang(lng_connection_host_ph), cConnectionProxy().host)

View File

@ -26,11 +26,12 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "boxes/addcontactbox.h"
#include "boxes/contactsbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "application.h"
#include "ui/filedialog.h"
#include "boxes/photocropbox.h"
#include "boxes/confirmbox.h"
#include "apiwrap.h"
QString cantInviteError() {
return lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.me/spambot"), lang(lng_cant_more_info)));

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "emojibox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
namespace {
// copied from genemoji.cpp

View File

@ -26,7 +26,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "languagebox.h"
#include "confirmbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "langloaderplain.h"

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "passcodebox.h"
#include "confirmbox.h"
#include "window.h"
#include "mainwindow.h"
#include "localstorage.h"

View File

@ -25,7 +25,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "sessionsbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "countries.h"
#include "confirmbox.h"

View File

@ -23,10 +23,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stickersetbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "settingswidget.h"
#include "boxes/confirmbox.h"
#include "apiwrap.h"
#include "localstorage.h"
StickerSetInner::StickerSetInner(const MTPInputStickerSet &set) : TWidget()

View File

@ -24,7 +24,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "application.h"
#include "usernamebox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
UsernameBox::UsernameBox() : AbstractBox(st::boxWidth),
_save(this, lang(lng_settings_save), st::defaultBoxButton),

View File

@ -0,0 +1,63 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#include "stdafx.h"
#include "core/click_handler.h"
ClickHandlerHost::~ClickHandlerHost() {
ClickHandler::hostDestroyed(this);
}
NeverFreedPointer<ClickHandlerPtr> ClickHandler::_active;
NeverFreedPointer<ClickHandlerPtr> ClickHandler::_pressed;
ClickHandlerHost *ClickHandler::_activeHost = nullptr;
ClickHandlerHost *ClickHandler::_pressedHost = nullptr;
bool ClickHandler::setActive(const ClickHandlerPtr &p, ClickHandlerHost *host) {
if ((_active && (*_active == p)) || (!_active && !p)) {
return false;
}
// emit clickHandlerActiveChanged only when there is no
// other pressed click handler currently, if there is
// this method will be called when it is unpressed
if (_active && *_active) {
bool emitClickHandlerActiveChanged = (!_pressed || !*_pressed || *_pressed == *_active);
ClickHandlerPtr wasactive = *_active;
(*_active).clear();
if (_activeHost) {
if (emitClickHandlerActiveChanged) {
_activeHost->clickHandlerActiveChanged(wasactive, false);
}
_activeHost = nullptr;
}
}
if (p) {
_active.makeIfNull();
*_active = p;
if ((_activeHost = host)) {
bool emitClickHandlerActiveChanged = (!_pressed || !*_pressed || *_pressed == *_active);
if (emitClickHandlerActiveChanged) {
_activeHost->clickHandlerActiveChanged(*_active, true);
}
}
}
return true;
}

View File

@ -0,0 +1,157 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
class ClickHandler;
using ClickHandlerPtr = QSharedPointer<ClickHandler>;
class ClickHandlerHost {
protected:
virtual void clickHandlerActiveChanged(const ClickHandlerPtr &action, bool active) {
}
virtual void clickHandlerPressedChanged(const ClickHandlerPtr &action, bool pressed) {
}
virtual ~ClickHandlerHost() = 0;
friend class ClickHandler;
};
class ClickHandler {
public:
virtual void onClick(Qt::MouseButton) const = 0;
virtual QString tooltip() const {
return QString();
}
virtual void copyToClipboard() const {
}
virtual QString copyToClipboardContextItem() const {
return QString();
}
virtual QString text() const {
return QString();
}
virtual QString dragText() const {
return text();
}
virtual ~ClickHandler() {
}
// this method should be called on mouse over a click handler
// it returns true if something was changed or false otherwise
static bool setActive(const ClickHandlerPtr &p, ClickHandlerHost *host = nullptr);
// this method should be called when mouse leaves the host
// it returns true if something was changed or false otherwise
static bool clearActive(ClickHandlerHost *host = nullptr) {
if (host && _activeHost != host) {
return false;
}
return setActive(ClickHandlerPtr(), host);
}
// this method should be called on mouse pressed
static void pressed() {
unpressed();
if (!_active || !*_active) {
return;
}
_pressed.makeIfNull();
*_pressed = *_active;
if ((_pressedHost = _activeHost)) {
_pressedHost->clickHandlerPressedChanged(*_pressed, true);
}
}
// this method should be called on mouse released
// the activated click handler is returned
static ClickHandlerPtr unpressed() {
if (_pressed && *_pressed) {
bool activated = (_active && *_active == *_pressed);
ClickHandlerPtr waspressed = *_pressed;
(*_pressed).clear();
if (_pressedHost) {
_pressedHost->clickHandlerPressedChanged(waspressed, false);
_pressedHost = nullptr;
}
if (activated) {
return *_active;
} else if (_active && *_active && _activeHost) {
// emit clickHandlerActiveChanged for current active
// click handler, which we didn't emit while we has
// a pressed click handler
_activeHost->clickHandlerActiveChanged(*_active, true);
}
}
return ClickHandlerPtr();
}
static ClickHandlerPtr getActive() {
return _active ? *_active : ClickHandlerPtr();
}
static ClickHandlerPtr getPressed() {
return _pressed ? *_pressed : ClickHandlerPtr();
}
static bool showAsActive(const ClickHandlerPtr &p) {
if (!p || !_active || p != *_active) {
return false;
}
return !_pressed || !*_pressed || (p == *_pressed);
}
static bool showAsPressed(const ClickHandlerPtr &p) {
if (!p || !_active || p != *_active) {
return false;
}
return _pressed && (p == *_pressed);
}
static void hostDestroyed(ClickHandlerHost *host) {
if (_activeHost == host) {
_activeHost = nullptr;
} else if (_pressedHost == host) {
_pressedHost = nullptr;
}
}
private:
static NeverFreedPointer<ClickHandlerPtr> _active;
static NeverFreedPointer<ClickHandlerPtr> _pressed;
static ClickHandlerHost *_activeHost;
static ClickHandlerHost *_pressedHost;
};
class LeftButtonClickHandler : public ClickHandler {
public:
void onClick(Qt::MouseButton button) const override final {
if (button != Qt::LeftButton) return;
onClickImpl();
}
protected:
virtual void onClickImpl() const = 0;
};

View File

@ -0,0 +1,133 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#include "stdafx.h"
#include "core/click_handler_types.h"
#include "lang.h"
#include "pspecific.h"
#include "boxes/confirmbox.h"
QString UrlClickHandler::copyToClipboardContextItem() const {
return lang(isEmail() ? lng_context_copy_email : lng_context_copy_link);
}
namespace {
QString tryConvertUrlToLocal(const QString &url) {
QRegularExpressionMatch telegramMeUser = QRegularExpression(qsl("^https?://telegram\\.me/([a-zA-Z0-9\\.\\_]+)(/?\\?|/?$|/(\\d+)/?(?:\\?|$))"), QRegularExpression::CaseInsensitiveOption).match(url);
QRegularExpressionMatch telegramMeGroup = QRegularExpression(qsl("^https?://telegram\\.me/joinchat/([a-zA-Z0-9\\.\\_\\-]+)(\\?|$)"), QRegularExpression::CaseInsensitiveOption).match(url);
QRegularExpressionMatch telegramMeStickers = QRegularExpression(qsl("^https?://telegram\\.me/addstickers/([a-zA-Z0-9\\.\\_]+)(\\?|$)"), QRegularExpression::CaseInsensitiveOption).match(url);
QRegularExpressionMatch telegramMeShareUrl = QRegularExpression(qsl("^https?://telegram\\.me/share/url\\?(.+)$"), QRegularExpression::CaseInsensitiveOption).match(url);
if (telegramMeGroup.hasMatch()) {
return qsl("tg://join?invite=") + myUrlEncode(telegramMeGroup.captured(1));
} else if (telegramMeStickers.hasMatch()) {
return qsl("tg://addstickers?set=") + myUrlEncode(telegramMeStickers.captured(1));
} else if (telegramMeShareUrl.hasMatch()) {
return qsl("tg://msg_url?") + telegramMeShareUrl.captured(1);
} else if (telegramMeUser.hasMatch()) {
QString params = url.mid(telegramMeUser.captured(0).size()), postParam;
if (QRegularExpression(qsl("^/\\d+/?(?:\\?|$)")).match(telegramMeUser.captured(2)).hasMatch()) {
postParam = qsl("&post=") + telegramMeUser.captured(3);
}
return qsl("tg://resolve/?domain=") + myUrlEncode(telegramMeUser.captured(1)) + postParam + (params.isEmpty() ? QString() : '&' + params);
}
return url;
}
} // namespace
void UrlClickHandler::doOpen(QString url) {
PopupTooltip::Hide();
if (isEmail(url)) {
QUrl u(qstr("mailto:") + url);
if (!QDesktopServices::openUrl(u)) {
psOpenFile(u.toString(QUrl::FullyEncoded), true);
}
return;
}
url = tryConvertUrlToLocal(url);
if (url.startsWith(qstr("tg://"), Qt::CaseInsensitive)) {
App::openLocalUrl(url);
} else {
QDesktopServices::openUrl(url);
}
}
void HiddenUrlClickHandler::onClick(Qt::MouseButton button) const {
QString u = url();
u = tryConvertUrlToLocal(u);
if (u.startsWith(qstr("tg://"))) {
App::openLocalUrl(u);
} else {
Ui::showLayer(new ConfirmLinkBox(u));
}
}
QString LocationClickHandler::copyToClipboardContextItem() const {
return lang(lng_context_copy_link);
}
void LocationClickHandler::onClick(Qt::MouseButton button) const {
if (!psLaunchMaps(_coords)) {
QDesktopServices::openUrl(_text);
}
}
void LocationClickHandler::setup() {
QString latlon(qsl("%1,%2").arg(_coords.lat).arg(_coords.lon));
_text = qsl("https://maps.google.com/maps?q=") + latlon + qsl("&ll=") + latlon + qsl("&z=16");
}
QString MentionClickHandler::copyToClipboardContextItem() const {
return lang(lng_context_copy_mention);
}
void MentionClickHandler::onClick(Qt::MouseButton button) const {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
App::openPeerByName(_tag.mid(1), ShowAtProfileMsgId);
}
}
QString HashtagClickHandler::copyToClipboardContextItem() const {
return lang(lng_context_copy_hashtag);
}
void HashtagClickHandler::onClick(Qt::MouseButton button) const {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
App::searchByHashtag(_tag, Ui::getPeerForMouseAction());
}
}
void BotCommandClickHandler::onClick(Qt::MouseButton button) const {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
if (PeerData *peer = Ui::getPeerForMouseAction()) {
Ui::showPeerHistory(peer, ShowAtTheEndMsgId);
App::sendBotCommand(peer, _cmd);
} else {
App::insertBotCommand(_cmd);
}
}
}

View File

@ -0,0 +1,181 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "core/click_handler.h"
class TextClickHandler : public ClickHandler {
public:
TextClickHandler(bool fullDisplayed = true) : _fullDisplayed(fullDisplayed) {
}
void copyToClipboard() const override {
QString u = url();
if (!u.isEmpty()) {
QApplication::clipboard()->setText(u);
}
}
QString tooltip() const override {
return _fullDisplayed ? QString() : readable();
}
void setFullDisplayed(bool full) {
_fullDisplayed = full;
}
protected:
virtual QString url() const = 0;
virtual QString readable() const {
return url();
}
bool _fullDisplayed;
};
class UrlClickHandler : public TextClickHandler {
public:
UrlClickHandler(const QString &url, bool fullDisplayed = true) : TextClickHandler(fullDisplayed), _url(url) {
if (isEmail()) {
_readable = _url;
} else {
QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString());
_readable = good.isValid() ? good.toDisplayString() : _url;
}
}
QString copyToClipboardContextItem() const override;
QString text() const override {
return _url;
}
QString dragText() const override {
return url();
}
static void doOpen(QString url);
void onClick(Qt::MouseButton button) const override {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
doOpen(url());
}
}
protected:
QString url() const override {
if (isEmail()) {
return _url;
}
QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString());
QString result(good.isValid() ? QString::fromUtf8(good.toEncoded()) : _url);
if (!QRegularExpression(qsl("^[a-zA-Z]+:")).match(result).hasMatch()) { // no protocol
return qsl("http://") + result;
}
return result;
}
QString readable() const override {
return _readable;
}
private:
static bool isEmail(const QString &url) {
int at = url.indexOf('@'), slash = url.indexOf('/');
return ((at > 0) && (slash < 0 || slash > at));
}
bool isEmail() const {
return isEmail(_url);
}
QString _url, _readable;
};
typedef QSharedPointer<TextClickHandler> TextClickHandlerPtr;
class HiddenUrlClickHandler : public UrlClickHandler {
public:
HiddenUrlClickHandler(QString url) : UrlClickHandler(url, false) {
}
void onClick(Qt::MouseButton button) const override;
};
class MentionClickHandler : public TextClickHandler {
public:
MentionClickHandler(const QString &tag) : _tag(tag) {
}
QString copyToClipboardContextItem() const override;
QString text() const override {
return _tag;
}
void onClick(Qt::MouseButton button) const override;
protected:
QString url() const override {
return _tag;
}
private:
QString _tag;
};
class HashtagClickHandler : public TextClickHandler {
public:
HashtagClickHandler(const QString &tag) : _tag(tag) {
}
QString copyToClipboardContextItem() const override;
QString text() const override {
return _tag;
}
void onClick(Qt::MouseButton button) const override;
protected:
QString url() const override {
return _tag;
}
private:
QString _tag;
};
class BotCommandClickHandler : public TextClickHandler {
public:
BotCommandClickHandler(const QString &cmd) : _cmd(cmd) {
}
QString text() const override {
return _cmd;
}
void onClick(Qt::MouseButton button) const override;
protected:
QString url() const override {
return _cmd;
}
private:
QString _cmd;
};

View File

@ -26,13 +26,14 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "ui/style.h"
#include "lang.h"
#include "application.h"
#include "window.h"
#include "mainwindow.h"
#include "dialogswidget.h"
#include "mainwidget.h"
#include "boxes/addcontactbox.h"
#include "boxes/contactsbox.h"
#include "boxes/confirmbox.h"
#include "localstorage.h"
#include "apiwrap.h"
DialogsInner::DialogsInner(QWidget *parent, MainWidget *main) : SplittedWidget(parent)
, dialogs(std_::make_unique<Dialogs::IndexedList>(Dialogs::SortMode::Date))

View File

@ -28,7 +28,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "historywidget.h"
#include "localstorage.h"
#include "lang.h"
#include "window.h"
#include "mainwindow.h"
#include "apiwrap.h"
#include "mainwidget.h"

View File

@ -20,12 +20,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#include "stdafx.h"
#include "window.h"
#include "mainwindow.h"
#include "mainwidget.h"
#include "application.h"
#include "core/click_handler_types.h"
#include "boxes/confirmbox.h"
#include "layerwidget.h"
#include "lang.h"
@ -136,13 +135,13 @@ void removeDialog(History *history) {
}
void showSettings() {
if (Window *w = wnd()) {
if (auto w = wnd()) {
w->showSettings();
}
}
void activateClickHandler(ClickHandlerPtr handler, Qt::MouseButton button) {
if (Window *w = wnd()) {
if (auto w = wnd()) {
qRegisterMetaType<ClickHandlerPtr>();
qRegisterMetaType<Qt::MouseButton>();
QMetaObject::invokeMethod(w, "app_activateClickHandler", Qt::QueuedConnection, Q_ARG(ClickHandlerPtr, handler), Q_ARG(Qt::MouseButton, button));
@ -150,7 +149,7 @@ void activateClickHandler(ClickHandlerPtr handler, Qt::MouseButton button) {
}
void logOutDelayed() {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
QMetaObject::invokeMethod(w, "onLogoutSure", Qt::QueuedConnection);
}
}
@ -160,25 +159,25 @@ void logOutDelayed() {
namespace Ui {
void showMediaPreview(DocumentData *document) {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
w->ui_showMediaPreview(document);
}
}
void showMediaPreview(PhotoData *photo) {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
w->ui_showMediaPreview(photo);
}
}
void hideMediaPreview() {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
w->ui_hideMediaPreview();
}
}
void showLayer(LayeredWidget *box, ShowLayerOptions options) {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
w->ui_showLayer(box, options);
} else {
delete box;
@ -186,16 +185,16 @@ void showLayer(LayeredWidget *box, ShowLayerOptions options) {
}
void hideLayer(bool fast) {
if (Window *w = App::wnd()) w->ui_showLayer(0, ShowLayerOptions(CloseOtherLayers) | (fast ? ForceFastShowLayer : AnimatedShowLayer));
if (auto w = App::wnd()) w->ui_showLayer(0, ShowLayerOptions(CloseOtherLayers) | (fast ? ForceFastShowLayer : AnimatedShowLayer));
}
bool isLayerShown() {
if (Window *w = App::wnd()) return w->ui_isLayerShown();
if (auto w = App::wnd()) return w->ui_isLayerShown();
return false;
}
bool isMediaViewShown() {
if (Window *w = App::wnd()) return w->ui_isMediaViewShown();
if (auto w = App::wnd()) return w->ui_isMediaViewShown();
return false;
}
@ -236,7 +235,7 @@ void showPeerHistoryAsync(const PeerId &peer, MsgId msgId) {
}
PeerData *getPeerForMouseAction() {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
return w->ui_getPeerForMouseAction();
}
return nullptr;
@ -244,7 +243,7 @@ PeerData *getPeerForMouseAction() {
bool hideWindowNoQuit() {
if (!App::quitting()) {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) {
return w->minimizeToTray();
} else if (cPlatform() == dbipMac || cPlatform() == dbipMacOld) {

View File

@ -21,18 +21,22 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "history.h"
#include "core/click_handler_types.h"
#include "dialogs/dialogs_indexed_list.h"
#include "ui/style.h"
#include "lang.h"
#include "mainwidget.h"
#include "application.h"
#include "fileuploader.h"
#include "window.h"
#include "mainwindow.h"
#include "ui/filedialog.h"
#include "boxes/addcontactbox.h"
#include "boxes/confirmbox.h"
#include "audio.h"
#include "localstorage.h"
#include "apiwrap.h"
#include "window/top_bar_widget.h"
#include "playerwidget.h"
namespace {

View File

@ -2396,17 +2396,8 @@ void initImageLinkManager();
void reinitImageLinkManager();
void deinitImageLinkManager();
struct LocationData {
LocationData(const LocationCoords &coords) : coords(coords), loading(false) {
}
LocationCoords coords;
ImagePtr thumb;
bool loading;
void load();
};
struct LocationCoords;
struct LocationData;
class LocationManager : public QObject {
Q_OBJECT
public:

View File

@ -0,0 +1,28 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
enum DragState {
DragStateNone = 0x00,
DragStateFiles = 0x01,
DragStatePhotoFiles = 0x02,
DragStateImage = 0x03,
};

View File

@ -30,12 +30,15 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "lang.h"
#include "application.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "passcodewidget.h"
#include "window.h"
#include "mainwindow.h"
#include "fileuploader.h"
#include "audio.h"
#include "localstorage.h"
#include "apiwrap.h"
#include "window/top_bar_widget.h"
#include "playerwidget.h"
// flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html
@ -1489,7 +1492,7 @@ void HistoryInner::updateSize() {
void HistoryInner::enterEvent(QEvent *e) {
dragActionUpdate(QCursor::pos());
return QWidget::enterEvent(e);
// return QWidget::enterEvent(e);
}
void HistoryInner::leaveEvent(QEvent *e) {
@ -1522,6 +1525,7 @@ void HistoryInner::adjustCurrent(int32 y) const {
}
void HistoryInner::adjustCurrent(int32 y, History *history) const {
t_assert(!history->isEmpty());
_curHistory = history;
if (_curBlock >= history->blocks.size()) {
_curBlock = history->blocks.size() - 1;
@ -5333,10 +5337,10 @@ void HistoryWidget::botCallbackDone(BotCallbackInfo info, const MTPmessages_BotC
if (answerData.has_message()) {
if (answerData.is_alert()) {
Ui::showLayer(new InformBox(qs(answerData.vmessage)));
} else {
} else if (App::wnd()) {
Ui::Toast::Config toast;
toast.text = qs(answerData.vmessage);
Ui::Toast::Show(toast);
Ui::Toast::Show(App::wnd(), toast);
}
}
}

View File

@ -22,15 +22,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "localimageloader.h"
#include "ui/boxshadow.h"
#include "dropdown.h"
enum DragState {
DragStateNone = 0x00,
DragStateFiles = 0x01,
DragStatePhotoFiles = 0x02,
DragStateImage = 0x03,
};
#include "history/history_common.h"
class HistoryWidget;
class HistoryInner : public TWidget, public AbstractTooltipShower {

View File

@ -25,6 +25,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "localstorage.h"
#include "mainwidget.h"
#include "lang.h"
#include "playerwidget.h"
namespace InlineBots {
namespace Layout {

View File

@ -21,6 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "inline_bots/inline_bot_layout_item.h"
#include "core/click_handler_types.h"
#include "inline_bots/inline_bot_result.h"
#include "inline_bots/inline_bot_layout_internal.h"
#include "localstorage.h"

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "basic_types.h"
#include "core/basic_types.h"
#include "structs.h"
#include "mtproto/core_types.h"

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "basic_types.h"
#include "core/basic_types.h"
#include "structs.h"
#include "mtproto/core_types.h"

View File

@ -31,7 +31,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "intro/introsignup.h"
#include "intro/intropwdcheck.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "application.h"
#include "ui/text.h"

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "layerwidget.h"
#include "application.h"
#include "window.h"
#include "mainwindow.h"
#include "mainwidget.h"
#include "ui/filedialog.h"

File diff suppressed because it is too large Load Diff

View File

@ -91,12 +91,13 @@ public:
};
class LayoutMediaItemBase;
class LayoutItemBase : public Composer, public ClickHandlerHost {
public:
LayoutItemBase() {
}
LayoutItemBase &operator=(const LayoutItemBase &) = delete;
LayoutItemBase(const LayoutItemBase &other) = delete;
LayoutItemBase &operator=(const LayoutItemBase &other) = delete;
int32 maxWidth() const {
return _maxw;
@ -142,311 +143,3 @@ protected:
int _minh = 0;
};
class PaintContextOverview : public PaintContextBase {
public:
PaintContextOverview(uint64 ms, bool selecting) : PaintContextBase(ms, selecting), isAfterDate(false) {
}
bool isAfterDate;
};
class LayoutOverviewItemBase : public LayoutItemBase {
public:
virtual void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContextOverview *context) const = 0;
virtual LayoutMediaItemBase *toLayoutMediaItem() {
return nullptr;
}
virtual const LayoutMediaItemBase *toLayoutMediaItem() const {
return nullptr;
}
virtual HistoryItem *getItem() const {
return nullptr;
}
virtual DocumentData *getDocument() const {
return nullptr;
}
MsgId msgId() const {
const HistoryItem *item = getItem();
return item ? item->id : 0;
}
};
class LayoutMediaItemBase : public LayoutOverviewItemBase {
public:
LayoutMediaItemBase(HistoryItem *parent) : _parent(parent) {
}
LayoutMediaItemBase *toLayoutMediaItem() override {
return this;
}
const LayoutMediaItemBase *toLayoutMediaItem() const override {
return this;
}
HistoryItem *getItem() const override {
return _parent;
}
void clickHandlerActiveChanged(const ClickHandlerPtr &p, bool active) override;
void clickHandlerPressedChanged(const ClickHandlerPtr &p, bool active) override;
protected:
HistoryItem *_parent;
};
class LayoutRadialProgressItem : public LayoutMediaItemBase {
public:
LayoutRadialProgressItem(HistoryItem *parent) : LayoutMediaItemBase(parent)
, _radial(0)
, a_iconOver(0, 0)
, _a_iconOver(animation(this, &LayoutRadialProgressItem::step_iconOver)) {
}
void clickHandlerActiveChanged(const ClickHandlerPtr &p, bool active) override;
void clickHandlerPressedChanged(const ClickHandlerPtr &p, bool active) override;
~LayoutRadialProgressItem();
protected:
ClickHandlerPtr _openl, _savel, _cancell;
void setLinks(ClickHandlerPtr &&openl, ClickHandlerPtr &&savel, ClickHandlerPtr &&cancell);
void setDocumentLinks(DocumentData *document) {
ClickHandlerPtr save;
if (document->voice()) {
save.reset(new DocumentOpenClickHandler(document));
} else {
save.reset(new DocumentSaveClickHandler(document));
}
setLinks(MakeShared<DocumentOpenClickHandler>(document), std_::move(save), MakeShared<DocumentCancelClickHandler>(document));
}
void step_iconOver(float64 ms, bool timer);
void step_radial(uint64 ms, bool timer);
void ensureRadial() const;
void checkRadialFinished();
bool isRadialAnimation(uint64 ms) const {
if (!_radial || !_radial->animating()) return false;
_radial->step(ms);
return _radial && _radial->animating();
}
virtual float64 dataProgress() const = 0;
virtual bool dataFinished() const = 0;
virtual bool dataLoaded() const = 0;
virtual bool iconAnimated() const {
return false;
}
mutable RadialAnimation *_radial;
anim::fvalue a_iconOver;
mutable Animation _a_iconOver;
private:
LayoutRadialProgressItem(const LayoutRadialProgressItem &other);
};
class LayoutAbstractFileItem : public LayoutRadialProgressItem {
public:
LayoutAbstractFileItem(HistoryItem *parent) : LayoutRadialProgressItem(parent) {
}
protected:
// >= 0 will contain download / upload string, _statusSize = loaded bytes
// < 0 will contain played string, _statusSize = -(seconds + 1) played
// 0x7FFFFFF0 will contain status for not yet downloaded file
// 0x7FFFFFF1 will contain status for already downloaded file
// 0x7FFFFFF2 will contain status for failed to download / upload file
mutable int32 _statusSize;
mutable QString _statusText;
// duration = -1 - no duration, duration = -2 - "GIF" duration
void setStatusSize(int32 newSize, int32 fullSize, int32 duration, qint64 realDuration) const;
};
struct OverviewItemInfo : public BaseComponent<OverviewItemInfo> {
int top = 0;
};
class LayoutOverviewDate : public LayoutOverviewItemBase {
public:
LayoutOverviewDate(const QDate &date, bool month);
void initDimensions() override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContextOverview *context) const override;
private:
QDate _date;
QString _text;
};
class LayoutOverviewPhoto : public LayoutMediaItemBase {
public:
LayoutOverviewPhoto(PhotoData *photo, HistoryItem *parent);
void initDimensions() override;
int32 resizeGetHeight(int32 width) override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContextOverview *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
private:
PhotoData *_data;
ClickHandlerPtr _link;
mutable QPixmap _pix;
mutable bool _goodLoaded;
};
class LayoutOverviewVideo : public LayoutAbstractFileItem {
public:
LayoutOverviewVideo(DocumentData *video, HistoryItem *parent);
void initDimensions() override;
int32 resizeGetHeight(int32 width) override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContextOverview *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
protected:
float64 dataProgress() const override {
return _data->progress();
}
bool dataFinished() const override {
return !_data->loading();
}
bool dataLoaded() const override {
return _data->loaded();
}
bool iconAnimated() const override {
return true;
}
private:
DocumentData *_data;
QString _duration;
mutable QPixmap _pix;
mutable bool _thumbLoaded;
void updateStatusText() const;
};
class LayoutOverviewVoice : public LayoutAbstractFileItem {
public:
LayoutOverviewVoice(DocumentData *voice, HistoryItem *parent);
void initDimensions() override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContextOverview *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
protected:
float64 dataProgress() const override {
return _data->progress();
}
bool dataFinished() const override {
return !_data->loading();
}
bool dataLoaded() const override {
return _data->loaded();
}
bool iconAnimated() const override {
return true;
}
private:
DocumentData *_data;
ClickHandlerPtr _namel;
mutable Text _name, _details;
mutable int32 _nameVersion;
void updateName() const;
bool updateStatusText() const;
};
class LayoutOverviewDocument : public LayoutAbstractFileItem {
public:
LayoutOverviewDocument(DocumentData *document, HistoryItem *parent);
void initDimensions() override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContextOverview *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
virtual DocumentData *getDocument() const override {
return _data;
}
protected:
float64 dataProgress() const override {
return _data->progress();
}
bool dataFinished() const override {
return !_data->loading();
}
bool dataLoaded() const override {
return _data->loaded();
}
bool iconAnimated() const override {
return _data->song() || !_data->loaded() || (_radial && _radial->animating());
}
private:
DocumentData *_data;
ClickHandlerPtr _msgl, _namel;
mutable bool _thumbForLoaded;
mutable QPixmap _thumb;
QString _name, _date, _ext;
int32 _namew, _datew, _extw;
int32 _thumbw, _colorIndex;
bool withThumb() const {
return !_data->thumb->isNull() && _data->thumb->width() && _data->thumb->height();
}
bool updateStatusText() const;
};
class LayoutOverviewLink : public LayoutMediaItemBase {
public:
LayoutOverviewLink(HistoryMedia *media, HistoryItem *parent);
void initDimensions() override;
int32 resizeGetHeight(int32 width) override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContextOverview *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
private:
ClickHandlerPtr _photol;
QString _title, _letter;
int _titlew = 0;
WebPageData *_page = nullptr;
int _pixw = 0;
int _pixh = 0;
Text _text = { int(st::msgMinWidth) };
struct Link {
Link() : width(0) {
}
Link(const QString &url, const QString &text);
QString text;
int32 width;
TextClickHandlerPtr lnk;
};
QVector<Link> _links;
};

View File

@ -25,7 +25,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "boxes/photosendbox.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "lang.h"
#include "boxes/confirmbox.h"

View File

@ -25,10 +25,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "serialize/serialize_document.h"
#include "serialize/serialize_common.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "lang.h"
#include "playerwidget.h"
#include "apiwrap.h"
namespace {
typedef quint64 FileKey;

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "basic_types.h"
#include "core/basic_types.h"
namespace _local_inner {

File diff suppressed because it is too large Load Diff

View File

@ -20,15 +20,22 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "apiwrap.h"
#include "dialogswidget.h"
#include "historywidget.h"
#include "profilewidget.h"
#include "overviewwidget.h"
#include "playerwidget.h"
#include "ui/buttons/peer_avatar_button.h"
#include "localimageloader.h"
#include "history/history_common.h"
class Window;
namespace Dialogs {
class Row;
} // namespace Dialogs
namespace Ui {
class PeerAvatarButton;
} // namespace Ui
namespace Window {
class TopBarWidget;
} // namespace Window
class MainWindow;
class ApiWrap;
class MainWidget;
class ConfirmBox;
@ -37,90 +44,8 @@ class HistoryWidget;
class ProfileWidget;
class OverviewWidget;
class PlayerWidget;
namespace Dialogs {
class Row;
} // namespace Dialogs
class TopBarWidget : public TWidget {
Q_OBJECT
public:
TopBarWidget(MainWidget *w);
void enterEvent(QEvent *e) override;
void enterFromChildEvent(QEvent *e) override;
void leaveEvent(QEvent *e) override;
void leaveToChildEvent(QEvent *e) override;
void paintEvent(QPaintEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void resizeEvent(QResizeEvent *e) override;
void step_appearance(float64 ms, bool timer);
void enableShadow(bool enable = true);
void startAnim();
void stopAnim();
void showAll();
void showSelected(uint32 selCount, bool canDelete = false);
void updateAdaptiveLayout();
FlatButton *mediaTypeButton();
void grabStart() override {
_sideShadow.hide();
}
void grabFinish() override {
_sideShadow.setVisible(!Adaptive::OneColumn());
}
public slots:
void onForwardSelection();
void onDeleteSelection();
void onClearSelection();
void onInfoClicked();
void onAddContact();
void onEdit();
void onDeleteContact();
void onDeleteContactSure();
void onDeleteAndExit();
void onDeleteAndExitSure();
void onSearch();
signals:
void clicked();
private:
MainWidget *main();
anim::fvalue a_over;
Animation _a_appearance;
PeerData *_selPeer;
uint32 _selCount;
bool _canDelete;
QString _selStr;
int32 _selStrLeft, _selStrWidth;
bool _animating;
FlatButton _clearSelection;
FlatButton _forward, _delete;
int32 _selectionButtonsWidth, _forwardDeleteWidth;
PeerAvatarButton _info;
FlatButton _edit, _leaveGroup, _addContact, _deleteContact;
FlatButton _mediaType;
IconedButton _search;
PlainShadow _sideShadow;
};
class HistoryHider;
class Dropdown;
enum StackItemType {
HistoryStackItem,
@ -220,7 +145,7 @@ class MainWidget : public TWidget, public RPCSender {
public:
MainWidget(Window *window);
MainWidget(MainWindow *window);
void paintEvent(QPaintEvent *e) override;
void resizeEvent(QResizeEvent *e) override;
@ -230,7 +155,7 @@ public:
bool needBackButton();
void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth);
TopBarWidget *topBar();
Window::TopBarWidget *topBar();
PlayerWidget *player();
int contentScrollAddToY() const;
@ -623,14 +548,14 @@ private:
int _dialogsWidth = st::dlgMinWidth;
DialogsWidget dialogs;
HistoryWidget history;
ProfileWidget* profile = nullptr;
OverviewWidget* overview = nullptr;
PlayerWidget _player;
TopBarWidget _topBar;
ChildWidget<DialogsWidget> _dialogs;
ChildWidget<HistoryWidget> _history;
ChildWidget<ProfileWidget> _profile = nullptr;
ChildWidget<OverviewWidget> _overview = nullptr;
ChildWidget<PlayerWidget> _player;
ChildWidget<Window::TopBarWidget> _topBar;
ConfirmBox *_forwardConfirm = nullptr; // for single column layout
HistoryHider *_hider = nullptr;
ChildWidget<HistoryHider> _hider = nullptr;
StackItems _stack;
PeerData *_peerInStack = nullptr;
MsgId _msgIdInStack = 0;
@ -638,7 +563,7 @@ private:
int _playerHeight = 0;
int _contentScrollAddToY = 0;
Dropdown _mediaType;
ChildWidget<Dropdown> _mediaType;
int32 _mediaTypeMask = 0;
int32 updDate = 0;
@ -711,8 +636,8 @@ private:
void viewsIncrementDone(QVector<MTPint> ids, const MTPVector<MTPint> &result, mtpRequestId req);
bool viewsIncrementFail(const RPCError &error, mtpRequestId req);
App::WallPaper *_background = nullptr;
std_::unique_ptr<App::WallPaper> _background;
ApiWrap *_api;
std_::unique_ptr<ApiWrap> _api;
};

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#include "stdafx.h"
#include "window.h"
#include "mainwindow.h"
#include "zip.h"
@ -364,7 +364,7 @@ NotifyWindow::~NotifyWindow() {
if (App::wnd()) App::wnd()->notifyShowNext(this);
}
Window::Window(QWidget *parent) : PsMainWindow(parent) {
MainWindow::MainWindow(QWidget *parent) : PsMainWindow(parent) {
icon16 = icon256.scaledToWidth(16, Qt::SmoothTransformation);
icon32 = icon256.scaledToWidth(32, Qt::SmoothTransformation);
icon64 = icon256.scaledToWidth(64, Qt::SmoothTransformation);
@ -400,7 +400,7 @@ Window::Window(QWidget *parent) : PsMainWindow(parent) {
setAttribute(Qt::WA_OpaquePaintEvent);
}
void Window::inactivePress(bool inactive) {
void MainWindow::inactivePress(bool inactive) {
_inactivePress = inactive;
if (_inactivePress) {
_inactiveTimer.start(200);
@ -409,15 +409,15 @@ void Window::inactivePress(bool inactive) {
}
}
bool Window::inactivePress() const {
bool MainWindow::inactivePress() const {
return _inactivePress;
}
void Window::onInactiveTimer() {
void MainWindow::onInactiveTimer() {
inactivePress(false);
}
void Window::stateChanged(Qt::WindowState state) {
void MainWindow::stateChanged(Qt::WindowState state) {
psUserActionDone();
updateIsActive((state == Qt::WindowMinimized) ? Global::OfflineBlurTimeout() : Global::OnlineFocusTimeout());
@ -429,7 +429,7 @@ void Window::stateChanged(Qt::WindowState state) {
psSavePosition(state);
}
void Window::init() {
void MainWindow::init() {
psInitFrameless();
setWindowIcon(wndIcon);
@ -446,7 +446,7 @@ void Window::init() {
psInitSize();
}
void Window::firstShow() {
void MainWindow::firstShow() {
#ifdef Q_OS_WIN
trayIconMenu = new PopupMenu();
trayIconMenu->deleteOnHide(false);
@ -472,11 +472,11 @@ void Window::firstShow() {
updateTrayMenu();
}
QWidget *Window::filedialogParent() {
QWidget *MainWindow::filedialogParent() {
return (_mediaView && _mediaView->isVisible()) ? (QWidget*)_mediaView : (QWidget*)this;
}
void Window::clearWidgets() {
void MainWindow::clearWidgets() {
Ui::hideLayer(true);
if (_passcode) {
_passcode->hide();
@ -511,7 +511,7 @@ void Window::clearWidgets() {
updateGlobalMenu();
}
QPixmap Window::grabInner() {
QPixmap MainWindow::grabInner() {
QPixmap result;
if (settings) {
result = myGrab(settings);
@ -525,7 +525,7 @@ QPixmap Window::grabInner() {
return result;
}
void Window::clearPasscode() {
void MainWindow::clearPasscode() {
if (!_passcode) return;
QPixmap bg = grabInner();
@ -546,7 +546,7 @@ void Window::clearPasscode() {
updateGlobalMenu();
}
void Window::setupPasscode(bool anim) {
void MainWindow::setupPasscode(bool anim) {
QPixmap bg = grabInner();
if (_passcode) {
@ -570,7 +570,7 @@ void Window::setupPasscode(bool anim) {
updateGlobalMenu();
}
void Window::checkAutoLockIn(int msec) {
void MainWindow::checkAutoLockIn(int msec) {
if (_autoLockTimer.isActive()) {
int remain = _autoLockTimer.remainingTime();
if (remain > 0 && remain <= msec) return;
@ -578,7 +578,7 @@ void Window::checkAutoLockIn(int msec) {
_autoLockTimer.start(msec);
}
void Window::checkAutoLock() {
void MainWindow::checkAutoLock() {
if (!cHasPasscode() || App::passcoded()) return;
App::app()->checkLocalTime();
@ -591,7 +591,7 @@ void Window::checkAutoLock() {
}
}
void Window::setupIntro(bool anim) {
void MainWindow::setupIntro(bool anim) {
cSetContactsReceived(false);
cSetDialogsReceived(false);
if (intro && !intro->isHidden() && !main) return;
@ -616,11 +616,11 @@ void Window::setupIntro(bool anim) {
}
}
void Window::getNotifySetting(const MTPInputNotifyPeer &peer, uint32 msWait) {
void MainWindow::getNotifySetting(const MTPInputNotifyPeer &peer, uint32 msWait) {
MTP::send(MTPaccount_GetNotifySettings(peer), main->rpcDone(&MainWidget::gotNotifySetting, peer), main->rpcFail(&MainWidget::failNotifySetting, peer), 0, msWait);
}
void Window::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool force) {
void MainWindow::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool force) {
History *h = (main && App::userLoaded(ServiceUserId)) ? App::history(ServiceUserId) : 0;
if (!h || (!force && h->isEmpty())) {
_delayedServiceMsgs.push_back(DelayedServiceMsg(msg, media));
@ -630,7 +630,7 @@ void Window::serviceNotification(const QString &msg, const MTPMessageMedia &medi
main->serviceNotification(msg, media);
}
void Window::showDelayedServiceMsgs() {
void MainWindow::showDelayedServiceMsgs() {
QVector<DelayedServiceMsg> toAdd = _delayedServiceMsgs;
_delayedServiceMsgs.clear();
for (QVector<DelayedServiceMsg>::const_iterator i = toAdd.cbegin(), e = toAdd.cend(); i != e; ++i) {
@ -638,7 +638,7 @@ void Window::showDelayedServiceMsgs() {
}
}
void Window::sendServiceHistoryRequest() {
void MainWindow::sendServiceHistoryRequest() {
if (!main || !main->started() || _delayedServiceMsgs.isEmpty() || _serviceHistoryRequest) return;
UserData *user = App::userLoaded(ServiceUserId);
@ -649,7 +649,7 @@ void Window::sendServiceHistoryRequest() {
_serviceHistoryRequest = MTP::send(MTPmessages_GetHistory(user->input, MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(1), MTP_int(0), MTP_int(0)), main->rpcDone(&MainWidget::serviceHistoryDone), main->rpcFail(&MainWidget::serviceHistoryFail));
}
void Window::setupMain(bool anim, const MTPUser *self) {
void MainWindow::setupMain(bool anim, const MTPUser *self) {
QPixmap bg = anim ? grabInner() : QPixmap();
clearWidgets();
main = new MainWidget(this);
@ -673,14 +673,14 @@ void Window::setupMain(bool anim, const MTPUser *self) {
_mediaView = new MediaView();
}
void Window::updateCounter() {
void MainWindow::updateCounter() {
if (!Global::started() || App::quitting()) return;
psUpdateCounter();
title->updateCounter();
}
void Window::showSettings() {
void MainWindow::showSettings() {
if (_passcode) return;
if (isHidden()) showFromTray();
@ -705,7 +705,7 @@ void Window::showSettings() {
fixOrder();
}
void Window::hideSettings(bool fast) {
void MainWindow::hideSettings(bool fast) {
if (!settings || _passcode) return;
if (fast) {
@ -738,14 +738,14 @@ void Window::hideSettings(bool fast) {
fixOrder();
}
void Window::mtpStateChanged(int32 dc, int32 state) {
void MainWindow::mtpStateChanged(int32 dc, int32 state) {
if (dc == MTP::maindc()) {
updateTitleStatus();
if (settings) settings->updateConnectionType();
}
}
void Window::updateTitleStatus() {
void MainWindow::updateTitleStatus() {
int32 state = MTP::dcstate();
if (state == MTP::ConnectingState || state == MTP::DisconnectedState || (state < 0 && state > -600)) {
if (main || getms() > 5000 || _connecting) {
@ -759,48 +759,48 @@ void Window::updateTitleStatus() {
}
}
IntroWidget *Window::introWidget() {
IntroWidget *MainWindow::introWidget() {
return intro;
}
MainWidget *Window::mainWidget() {
MainWidget *MainWindow::mainWidget() {
return main;
}
SettingsWidget *Window::settingsWidget() {
SettingsWidget *MainWindow::settingsWidget() {
return settings;
}
PasscodeWidget *Window::passcodeWidget() {
PasscodeWidget *MainWindow::passcodeWidget() {
return _passcode;
}
void Window::showPhoto(const PhotoOpenClickHandler *lnk, HistoryItem *item) {
void MainWindow::showPhoto(const PhotoOpenClickHandler *lnk, HistoryItem *item) {
return lnk->peer() ? showPhoto(lnk->photo(), lnk->peer()) : showPhoto(lnk->photo(), item);
}
void Window::showPhoto(PhotoData *photo, HistoryItem *item) {
void MainWindow::showPhoto(PhotoData *photo, HistoryItem *item) {
if (_mediaView->isHidden()) Ui::hideLayer(true);
_mediaView->showPhoto(photo, item);
_mediaView->activateWindow();
_mediaView->setFocus();
}
void Window::showPhoto(PhotoData *photo, PeerData *peer) {
void MainWindow::showPhoto(PhotoData *photo, PeerData *peer) {
if (_mediaView->isHidden()) Ui::hideLayer(true);
_mediaView->showPhoto(photo, peer);
_mediaView->activateWindow();
_mediaView->setFocus();
}
void Window::showDocument(DocumentData *doc, HistoryItem *item) {
void MainWindow::showDocument(DocumentData *doc, HistoryItem *item) {
if (_mediaView->isHidden()) Ui::hideLayer(true);
_mediaView->showDocument(doc, item);
_mediaView->activateWindow();
_mediaView->setFocus();
}
void Window::ui_showLayer(LayeredWidget *box, ShowLayerOptions options) {
void MainWindow::ui_showLayer(LayeredWidget *box, ShowLayerOptions options) {
if (box) {
bool fast = (options.testFlag(ForceFastShowLayer)) || Ui::isLayerShown();
if (layerBg) {
@ -837,15 +837,15 @@ void Window::ui_showLayer(LayeredWidget *box, ShowLayerOptions options) {
}
}
bool Window::ui_isLayerShown() {
bool MainWindow::ui_isLayerShown() {
return !!layerBg;
}
bool Window::ui_isMediaViewShown() {
bool MainWindow::ui_isMediaViewShown() {
return _mediaView && !_mediaView->isHidden();
}
void Window::ui_showMediaPreview(DocumentData *document) {
void MainWindow::ui_showMediaPreview(DocumentData *document) {
if (!document || ((!document->isAnimation() || !document->loaded()) && !document->sticker())) return;
if (!_mediaPreview) {
_mediaPreview = std_::make_unique<MediaPreviewWidget>(this);
@ -857,7 +857,7 @@ void Window::ui_showMediaPreview(DocumentData *document) {
_mediaPreview->showPreview(document);
}
void Window::ui_showMediaPreview(PhotoData *photo) {
void MainWindow::ui_showMediaPreview(PhotoData *photo) {
if (!photo) return;
if (!_mediaPreview) {
_mediaPreview = std_::make_unique<MediaPreviewWidget>(this);
@ -869,12 +869,12 @@ void Window::ui_showMediaPreview(PhotoData *photo) {
_mediaPreview->showPreview(photo);
}
void Window::ui_hideMediaPreview() {
void MainWindow::ui_hideMediaPreview() {
if (!_mediaPreview) return;
_mediaPreview->hidePreview();
}
PeerData *Window::ui_getPeerForMouseAction() {
PeerData *MainWindow::ui_getPeerForMouseAction() {
if (_mediaView && !_mediaView->isHidden()) {
return _mediaView->ui_getPeerForMouseAction();
} else if (main) {
@ -883,7 +883,7 @@ PeerData *Window::ui_getPeerForMouseAction() {
return nullptr;
}
void Window::showConnecting(const QString &text, const QString &reconnect) {
void MainWindow::showConnecting(const QString &text, const QString &reconnect) {
if (_connecting) {
_connecting->set(text, reconnect);
} else {
@ -895,11 +895,11 @@ void Window::showConnecting(const QString &text, const QString &reconnect) {
if (settings) settings->update();
}
bool Window::connectingVisible() const {
bool MainWindow::connectingVisible() const {
return _connecting && !_connecting->isHidden();
}
void Window::hideConnecting() {
void MainWindow::hideConnecting() {
if (_connecting) {
_connecting->deleteLater();
_connecting = 0;
@ -907,18 +907,18 @@ void Window::hideConnecting() {
if (settings) settings->update();
}
bool Window::historyIsActive() const {
bool MainWindow::historyIsActive() const {
return isActive(false) && main && main->historyIsActive() && (!settings || !settings->isVisible());
}
void Window::checkHistoryActivation() {
void MainWindow::checkHistoryActivation() {
if (main && MTP::authedId() && historyIsActive()) {
main->historyWasRead();
}
QTimer::singleShot(1, this, SLOT(updateTrayMenu()));
}
void Window::layerHidden() {
void MainWindow::layerHidden() {
if (layerBg) {
layerBg->hide();
layerBg->deleteLater();
@ -928,7 +928,7 @@ void Window::layerHidden() {
setInnerFocus();
}
void Window::hideMediaview() {
void MainWindow::hideMediaview() {
if (_mediaView && !_mediaView->isHidden()) {
_mediaView->hide();
#if defined Q_OS_LINUX32 || defined Q_OS_LINUX64
@ -939,13 +939,13 @@ void Window::hideMediaview() {
}
}
bool Window::contentOverlapped(const QRect &globalRect) {
bool MainWindow::contentOverlapped(const QRect &globalRect) {
if (main && main->contentOverlapped(globalRect)) return true;
if (layerBg && layerBg->contentOverlapped(globalRect)) return true;
return false;
}
void Window::setInnerFocus() {
void MainWindow::setInnerFocus() {
if (layerBg && layerBg->canSetFocus()) {
layerBg->setInnerFocus();
} else if (_passcode) {
@ -957,11 +957,11 @@ void Window::setInnerFocus() {
}
}
QRect Window::clientRect() const {
QRect MainWindow::clientRect() const {
return QRect(0, st::titleHeight, width(), height() - st::titleHeight);
}
QRect Window::photoRect() const {
QRect MainWindow::photoRect() const {
if (settings) {
return settings->geometry();
} else if (main) {
@ -973,15 +973,15 @@ QRect Window::photoRect() const {
return QRect(0, 0, 0, 0);
}
void Window::wStartDrag(QMouseEvent *e) {
void MainWindow::wStartDrag(QMouseEvent *e) {
dragStart = e->globalPos() - frameGeometry().topLeft();
dragging = true;
}
void Window::paintEvent(QPaintEvent *e) {
void MainWindow::paintEvent(QPaintEvent *e) {
}
HitTestType Window::hitTest(const QPoint &p) const {
HitTestType MainWindow::hitTest(const QPoint &p) const {
int x(p.x()), y(p.y()), w(width()), h(height());
const int32 raw = psResizeRowWidth();
@ -1015,11 +1015,11 @@ HitTestType Window::hitTest(const QPoint &p) const {
return HitTestNone;
}
QRect Window::iconRect() const {
QRect MainWindow::iconRect() const {
return QRect(st::titleIconPos + title->geometry().topLeft(), st::titleIconImg.pxSize());
}
bool Window::eventFilter(QObject *obj, QEvent *e) {
bool MainWindow::eventFilter(QObject *obj, QEvent *e) {
switch (e->type()) {
case QEvent::MouseButtonPress:
case QEvent::KeyPress:
@ -1088,7 +1088,7 @@ bool Window::eventFilter(QObject *obj, QEvent *e) {
return PsMainWindow::eventFilter(obj, e);
}
void Window::mouseMoveEvent(QMouseEvent *e) {
void MainWindow::mouseMoveEvent(QMouseEvent *e) {
if (e->buttons() & Qt::LeftButton) {
if (dragging) {
if (windowState().testFlag(Qt::WindowMaximized)) {
@ -1104,11 +1104,11 @@ void Window::mouseMoveEvent(QMouseEvent *e) {
}
}
void Window::mouseReleaseEvent(QMouseEvent *e) {
void MainWindow::mouseReleaseEvent(QMouseEvent *e) {
dragging = false;
}
bool Window::minimizeToTray() {
bool MainWindow::minimizeToTray() {
if (App::quitting() || !psHasTrayIcon()) return false;
hide();
@ -1123,7 +1123,7 @@ bool Window::minimizeToTray() {
return true;
}
void Window::updateTrayMenu(bool force) {
void MainWindow::updateTrayMenu(bool force) {
if (!trayIconMenu || (cPlatform() == dbipWindows && !force)) return;
bool active = isActive(false);
@ -1153,25 +1153,25 @@ void Window::updateTrayMenu(bool force) {
psTrayMenuUpdated();
}
void Window::onShowAddContact() {
void MainWindow::onShowAddContact() {
if (isHidden()) showFromTray();
if (main) main->showAddContact();
}
void Window::onShowNewGroup() {
void MainWindow::onShowNewGroup() {
if (isHidden()) showFromTray();
if (main) Ui::showLayer(new GroupInfoBox(CreatingGroupGroup, false), KeepOtherLayers);
}
void Window::onShowNewChannel() {
void MainWindow::onShowNewChannel() {
if (isHidden()) showFromTray();
if (main) Ui::showLayer(new GroupInfoBox(CreatingGroupChannel, false), KeepOtherLayers);
}
void Window::onLogout() {
void MainWindow::onLogout() {
if (isHidden()) showFromTray();
ConfirmBox *box = new ConfirmBox(lang(lng_sure_logout), lang(lng_settings_logout), st::attentionBoxButton);
@ -1179,7 +1179,7 @@ void Window::onLogout() {
Ui::showLayer(box);
}
void Window::onLogoutSure() {
void MainWindow::onLogoutSure() {
if (MTP::authedId()) {
App::logOut();
} else {
@ -1187,17 +1187,17 @@ void Window::onLogoutSure() {
}
}
void Window::updateGlobalMenu() {
void MainWindow::updateGlobalMenu() {
#ifdef Q_OS_MAC
psMacUpdateMenu();
#endif
}
void Window::quitFromTray() {
void MainWindow::quitFromTray() {
App::quit();
}
void Window::activate() {
void MainWindow::activate() {
bool wasHidden = !isVisible();
setWindowState(windowState() & ~Qt::WindowMinimized);
setVisible(true);
@ -1211,45 +1211,45 @@ void Window::activate() {
}
}
void Window::noIntro(IntroWidget *was) {
void MainWindow::noIntro(IntroWidget *was) {
if (was == intro) {
intro = 0;
}
}
void Window::noSettings(SettingsWidget *was) {
void MainWindow::noSettings(SettingsWidget *was) {
if (was == settings) {
settings = 0;
}
checkHistoryActivation();
}
void Window::noMain(MainWidget *was) {
void MainWindow::noMain(MainWidget *was) {
if (was == main) {
main = 0;
}
}
void Window::noBox(BackgroundWidget *was) {
void MainWindow::noBox(BackgroundWidget *was) {
if (was == layerBg) {
layerBg = 0;
}
}
void Window::layerFinishedHide(BackgroundWidget *was) {
void MainWindow::layerFinishedHide(BackgroundWidget *was) {
if (was == layerBg) {
QTimer::singleShot(0, this, SLOT(layerHidden()));
}
}
void Window::fixOrder() {
void MainWindow::fixOrder() {
title->raise();
if (layerBg) layerBg->raise();
if (_mediaPreview) _mediaPreview->raise();
if (_connecting) _connecting->raise();
}
void Window::showFromTray(QSystemTrayIcon::ActivationReason reason) {
void MainWindow::showFromTray(QSystemTrayIcon::ActivationReason reason) {
if (reason != QSystemTrayIcon::Context) {
QTimer::singleShot(1, this, SLOT(updateTrayMenu()));
QTimer::singleShot(1, this, SLOT(updateGlobalMenu()));
@ -1258,7 +1258,7 @@ void Window::showFromTray(QSystemTrayIcon::ActivationReason reason) {
}
}
void Window::toggleTray(QSystemTrayIcon::ActivationReason reason) {
void MainWindow::toggleTray(QSystemTrayIcon::ActivationReason reason) {
if ((cPlatform() == dbipMac || cPlatform() == dbipMacOld) && isActive(false)) return;
if (reason == QSystemTrayIcon::Context) {
updateTrayMenu(true);
@ -1272,7 +1272,7 @@ void Window::toggleTray(QSystemTrayIcon::ActivationReason reason) {
}
}
void Window::toggleDisplayNotifyFromTray() {
void MainWindow::toggleDisplayNotifyFromTray() {
if (App::passcoded()) {
if (!isActive()) showFromTray();
Ui::showLayer(new InformBox(lang(lng_passcode_need_unblock)));
@ -1290,7 +1290,7 @@ void Window::toggleDisplayNotifyFromTray() {
}
}
void Window::closeEvent(QCloseEvent *e) {
void MainWindow::closeEvent(QCloseEvent *e) {
if (MTP::authedId() && !Sandbox::isSavingSession() && Ui::hideWindowNoQuit()) {
e->ignore();
} else {
@ -1298,11 +1298,11 @@ void Window::closeEvent(QCloseEvent *e) {
}
}
TitleWidget *Window::getTitle() {
TitleWidget *MainWindow::getTitle() {
return title;
}
void Window::resizeEvent(QResizeEvent *e) {
void MainWindow::resizeEvent(QResizeEvent *e) {
if (!title) return;
Adaptive::Layout layout = Adaptive::OneColumnLayout;
@ -1322,7 +1322,7 @@ void Window::resizeEvent(QResizeEvent *e) {
emit resized(QSize(width(), height() - st::titleHeight));
}
void Window::updateAdaptiveLayout() {
void MainWindow::updateAdaptiveLayout() {
title->updateAdaptiveLayout();
if (main) main->updateAdaptiveLayout();
if (settings) settings->updateAdaptiveLayout();
@ -1330,25 +1330,25 @@ void Window::updateAdaptiveLayout() {
if (layerBg) layerBg->updateAdaptiveLayout();
}
bool Window::needBackButton() {
bool MainWindow::needBackButton() {
return !!settings;
}
Window::TempDirState Window::tempDirState() {
MainWindow::TempDirState MainWindow::tempDirState() {
if (_clearManager && _clearManager->hasTask(Local::ClearManagerDownloads)) {
return TempDirRemoving;
}
return QDir(cTempDir()).exists() ? TempDirExists : TempDirEmpty;
}
Window::TempDirState Window::localStorageState() {
MainWindow::TempDirState MainWindow::localStorageState() {
if (_clearManager && _clearManager->hasTask(Local::ClearManagerStorage)) {
return TempDirRemoving;
}
return (Local::hasImages() || Local::hasStickers() || Local::hasWebFiles() || Local::hasAudios()) ? TempDirExists : TempDirEmpty;
}
void Window::tempDirDelete(int task) {
void MainWindow::tempDirDelete(int task) {
if (_clearManager) {
if (_clearManager->addTask(task)) {
return;
@ -1364,7 +1364,7 @@ void Window::tempDirDelete(int task) {
_clearManager->start();
}
void Window::onClearFinished(int task, void *manager) {
void MainWindow::onClearFinished(int task, void *manager) {
if (manager && manager == _clearManager) {
_clearManager->deleteLater();
_clearManager = 0;
@ -1372,7 +1372,7 @@ void Window::onClearFinished(int task, void *manager) {
emit tempDirCleared(task);
}
void Window::onClearFailed(int task, void *manager) {
void MainWindow::onClearFailed(int task, void *manager) {
if (manager && manager == _clearManager) {
_clearManager->deleteLater();
_clearManager = 0;
@ -1380,7 +1380,7 @@ void Window::onClearFailed(int task, void *manager) {
emit tempDirClearFailed(task);
}
void Window::notifySchedule(History *history, HistoryItem *item) {
void MainWindow::notifySchedule(History *history, HistoryItem *item) {
if (App::quitting() || !history->currentNotification() || !main) return;
PeerData *notifyByFrom = (!history->peer->isUser() && item->mentionsMe()) ? item->from() : 0;
@ -1451,11 +1451,11 @@ void Window::notifySchedule(History *history, HistoryItem *item) {
}
}
void Window::notifyFire() {
void MainWindow::notifyFire() {
notifyShowNext();
}
void Window::notifyClear(History *history) {
void MainWindow::notifyClear(History *history) {
if (!history) {
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
(*i)->unlinkHistory();
@ -1480,7 +1480,7 @@ void Window::notifyClear(History *history) {
notifyShowNext();
}
void Window::notifyClearFast() {
void MainWindow::notifyClearFast() {
notifyWaiters.clear();
notifySettingWaiters.clear();
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
@ -1492,7 +1492,7 @@ void Window::notifyClearFast() {
notifyWhenAlerts.clear();
}
void Window::notifySettingGot() {
void MainWindow::notifySettingGot() {
int32 t = unixtime();
for (NotifyWaiters::iterator i = notifySettingWaiters.begin(); i != notifySettingWaiters.end();) {
History *history = i.key();
@ -1534,7 +1534,7 @@ void Window::notifySettingGot() {
notifyShowNext();
}
void Window::notifyShowNext(NotifyWindow *remove) {
void MainWindow::notifyShowNext(NotifyWindow *remove) {
if (App::quitting()) return;
int32 count = NotifyWindowsCount;
@ -1711,7 +1711,7 @@ void Window::notifyShowNext(NotifyWindow *remove) {
}
}
void Window::notifyItemRemoved(HistoryItem *item) {
void MainWindow::notifyItemRemoved(HistoryItem *item) {
if (cCustomNotifies()) {
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
(*i)->itemRemoved(item);
@ -1719,7 +1719,7 @@ void Window::notifyItemRemoved(HistoryItem *item) {
}
}
void Window::notifyStopHiding() {
void MainWindow::notifyStopHiding() {
if (cCustomNotifies()) {
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
(*i)->stopHiding();
@ -1727,7 +1727,7 @@ void Window::notifyStopHiding() {
}
}
void Window::notifyStartHiding() {
void MainWindow::notifyStartHiding() {
if (cCustomNotifies()) {
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
(*i)->startHiding();
@ -1735,7 +1735,7 @@ void Window::notifyStartHiding() {
}
}
void Window::notifyUpdateAllPhotos() {
void MainWindow::notifyUpdateAllPhotos() {
if (cCustomNotifies()) {
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
(*i)->updatePeerPhoto();
@ -1744,11 +1744,11 @@ void Window::notifyUpdateAllPhotos() {
if (_mediaView && !_mediaView->isHidden()) _mediaView->updateControls();
}
void Window::app_activateClickHandler(ClickHandlerPtr handler, Qt::MouseButton button) {
void MainWindow::app_activateClickHandler(ClickHandlerPtr handler, Qt::MouseButton button) {
handler->onClick(button);
}
void Window::notifyUpdateAll() {
void MainWindow::notifyUpdateAll() {
if (cCustomNotifies()) {
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
(*i)->updateNotifyDisplay();
@ -1757,7 +1757,7 @@ void Window::notifyUpdateAll() {
psClearNotifies();
}
void Window::notifyActivateAll() {
void MainWindow::notifyActivateAll() {
if (cCustomNotifies()) {
for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) {
psActivateNotify(*i);
@ -1765,11 +1765,11 @@ void Window::notifyActivateAll() {
}
}
QImage Window::iconLarge() const {
QImage MainWindow::iconLarge() const {
return iconbig256;
}
void Window::placeSmallCounter(QImage &img, int size, int count, style::color bg, const QPoint &shift, style::color color) {
void MainWindow::placeSmallCounter(QImage &img, int size, int count, style::color bg, const QPoint &shift, style::color color) {
QPainter p(&img);
QString cnt = (count < 100) ? QString("%1").arg(count) : QString("..%1").arg(count % 10, 1, 10, QChar('0'));
@ -1807,7 +1807,7 @@ void Window::placeSmallCounter(QImage &img, int size, int count, style::color bg
}
QImage Window::iconWithCounter(int size, int count, style::color bg, bool smallIcon) {
QImage MainWindow::iconWithCounter(int size, int count, style::color bg, bool smallIcon) {
bool layer = false;
if (size < 0) {
size = -size;
@ -1874,7 +1874,7 @@ QImage Window::iconWithCounter(int size, int count, style::color bg, bool smallI
return img;
}
void Window::sendPaths() {
void MainWindow::sendPaths() {
if (App::passcoded()) return;
hideMediaview();
if (settings) {
@ -1887,35 +1887,35 @@ void Window::sendPaths() {
}
}
void Window::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) {
void MainWindow::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) {
if (main) main->mediaOverviewUpdated(peer, type);
if (!_mediaView || _mediaView->isHidden()) return;
_mediaView->mediaOverviewUpdated(peer, type);
}
void Window::documentUpdated(DocumentData *doc) {
void MainWindow::documentUpdated(DocumentData *doc) {
if (!_mediaView || _mediaView->isHidden()) return;
_mediaView->documentUpdated(doc);
}
void Window::changingMsgId(HistoryItem *row, MsgId newId) {
void MainWindow::changingMsgId(HistoryItem *row, MsgId newId) {
if (main) main->changingMsgId(row, newId);
if (!_mediaView || _mediaView->isHidden()) return;
_mediaView->changingMsgId(row, newId);
}
bool Window::isActive(bool cached) const {
bool MainWindow::isActive(bool cached) const {
if (cached) return _isActive;
return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized);
}
void Window::updateIsActive(int timeout) {
void MainWindow::updateIsActive(int timeout) {
if (timeout) return _isActiveTimer.start(timeout);
_isActive = isActive(false);
if (main) main->updateOnline();
}
Window::~Window() {
MainWindow::~MainWindow() {
notifyClearFast();
delete _clearManager;
delete _connecting;

View File

@ -123,12 +123,12 @@ typedef QList<NotifyWindow*> NotifyWindows;
class MediaPreviewWidget;
class Window : public PsMainWindow {
class MainWindow : public PsMainWindow {
Q_OBJECT
public:
Window(QWidget *parent = 0);
~Window();
MainWindow(QWidget *parent = 0);
~MainWindow();
void init();
void firstShow();

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "mediaview.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "application.h"
#include "ui/filedialog.h"

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "basic_types.h"
#include "core/basic_types.h"
namespace MTP {

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "mtproto/file_download.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "application.h"
#include "localstorage.h"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,337 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "layout.h"
#include "core/click_handler_types.h"
namespace Overview {
namespace Layout {
class PaintContext : public PaintContextBase {
public:
PaintContext(uint64 ms, bool selecting) : PaintContextBase(ms, selecting), isAfterDate(false) {
}
bool isAfterDate;
};
class ItemBase;
class AbstractItem : public LayoutItemBase {
public:
virtual void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContext *context) const = 0;
virtual ItemBase *toMediaItem() {
return nullptr;
}
virtual const ItemBase *toMediaItem() const {
return nullptr;
}
virtual HistoryItem *getItem() const {
return nullptr;
}
virtual DocumentData *getDocument() const {
return nullptr;
}
MsgId msgId() const {
const HistoryItem *item = getItem();
return item ? item->id : 0;
}
};
class ItemBase : public AbstractItem {
public:
ItemBase(HistoryItem *parent) : _parent(parent) {
}
ItemBase *toMediaItem() override {
return this;
}
const ItemBase *toMediaItem() const override {
return this;
}
HistoryItem *getItem() const override {
return _parent;
}
void clickHandlerActiveChanged(const ClickHandlerPtr &p, bool active) override;
void clickHandlerPressedChanged(const ClickHandlerPtr &p, bool active) override;
protected:
HistoryItem *_parent;
};
class RadialProgressItem : public ItemBase {
public:
RadialProgressItem(HistoryItem *parent) : ItemBase(parent)
, _radial(0)
, a_iconOver(0, 0)
, _a_iconOver(animation(this, &RadialProgressItem::step_iconOver)) {
}
RadialProgressItem(const RadialProgressItem &other) = delete;
void clickHandlerActiveChanged(const ClickHandlerPtr &p, bool active) override;
void clickHandlerPressedChanged(const ClickHandlerPtr &p, bool active) override;
~RadialProgressItem();
protected:
ClickHandlerPtr _openl, _savel, _cancell;
void setLinks(ClickHandlerPtr &&openl, ClickHandlerPtr &&savel, ClickHandlerPtr &&cancell);
void setDocumentLinks(DocumentData *document) {
ClickHandlerPtr save;
if (document->voice()) {
save.reset(new DocumentOpenClickHandler(document));
} else {
save.reset(new DocumentSaveClickHandler(document));
}
setLinks(MakeShared<DocumentOpenClickHandler>(document), std_::move(save), MakeShared<DocumentCancelClickHandler>(document));
}
void step_iconOver(float64 ms, bool timer);
void step_radial(uint64 ms, bool timer);
void ensureRadial() const;
void checkRadialFinished();
bool isRadialAnimation(uint64 ms) const {
if (!_radial || !_radial->animating()) return false;
_radial->step(ms);
return _radial && _radial->animating();
}
virtual float64 dataProgress() const = 0;
virtual bool dataFinished() const = 0;
virtual bool dataLoaded() const = 0;
virtual bool iconAnimated() const {
return false;
}
mutable RadialAnimation *_radial;
anim::fvalue a_iconOver;
mutable Animation _a_iconOver;
};
class FileBase : public RadialProgressItem {
public:
FileBase(HistoryItem *parent) : RadialProgressItem(parent) {
}
protected:
// >= 0 will contain download / upload string, _statusSize = loaded bytes
// < 0 will contain played string, _statusSize = -(seconds + 1) played
// 0x7FFFFFF0 will contain status for not yet downloaded file
// 0x7FFFFFF1 will contain status for already downloaded file
// 0x7FFFFFF2 will contain status for failed to download / upload file
mutable int32 _statusSize;
mutable QString _statusText;
// duration = -1 - no duration, duration = -2 - "GIF" duration
void setStatusSize(int32 newSize, int32 fullSize, int32 duration, qint64 realDuration) const;
};
struct Info : public BaseComponent<Info> {
int top = 0;
};
class Date : public AbstractItem {
public:
Date(const QDate &date, bool month);
void initDimensions() override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContext *context) const override;
private:
QDate _date;
QString _text;
};
class Photo : public ItemBase {
public:
Photo(PhotoData *photo, HistoryItem *parent);
void initDimensions() override;
int32 resizeGetHeight(int32 width) override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContext *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
private:
PhotoData *_data;
ClickHandlerPtr _link;
mutable QPixmap _pix;
mutable bool _goodLoaded;
};
class Video : public FileBase {
public:
Video(DocumentData *video, HistoryItem *parent);
void initDimensions() override;
int32 resizeGetHeight(int32 width) override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContext *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
protected:
float64 dataProgress() const override {
return _data->progress();
}
bool dataFinished() const override {
return !_data->loading();
}
bool dataLoaded() const override {
return _data->loaded();
}
bool iconAnimated() const override {
return true;
}
private:
DocumentData *_data;
QString _duration;
mutable QPixmap _pix;
mutable bool _thumbLoaded;
void updateStatusText() const;
};
class Voice : public FileBase {
public:
Voice(DocumentData *voice, HistoryItem *parent);
void initDimensions() override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContext *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
protected:
float64 dataProgress() const override {
return _data->progress();
}
bool dataFinished() const override {
return !_data->loading();
}
bool dataLoaded() const override {
return _data->loaded();
}
bool iconAnimated() const override {
return true;
}
private:
DocumentData *_data;
ClickHandlerPtr _namel;
mutable Text _name, _details;
mutable int32 _nameVersion;
void updateName() const;
bool updateStatusText() const;
};
class Document : public FileBase {
public:
Document(DocumentData *document, HistoryItem *parent);
void initDimensions() override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContext *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
virtual DocumentData *getDocument() const override {
return _data;
}
protected:
float64 dataProgress() const override {
return _data->progress();
}
bool dataFinished() const override {
return !_data->loading();
}
bool dataLoaded() const override {
return _data->loaded();
}
bool iconAnimated() const override {
return _data->song() || !_data->loaded() || (_radial && _radial->animating());
}
private:
DocumentData *_data;
ClickHandlerPtr _msgl, _namel;
mutable bool _thumbForLoaded;
mutable QPixmap _thumb;
QString _name, _date, _ext;
int32 _namew, _datew, _extw;
int32 _thumbw, _colorIndex;
bool withThumb() const {
return !_data->thumb->isNull() && _data->thumb->width() && _data->thumb->height();
}
bool updateStatusText() const;
};
class Link : public ItemBase {
public:
Link(HistoryMedia *media, HistoryItem *parent);
void initDimensions() override;
int32 resizeGetHeight(int32 width) override;
void paint(Painter &p, const QRect &clip, uint32 selection, const PaintContext *context) const override;
void getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const override;
private:
ClickHandlerPtr _photol;
QString _title, _letter;
int _titlew = 0;
WebPageData *_page = nullptr;
int _pixw = 0;
int _pixh = 0;
Text _text = { int(st::msgMinWidth) };
struct LinkEntry {
LinkEntry() : width(0) {
}
LinkEntry(const QString &url, const QString &text);
QString text;
int32 width;
TextClickHandlerPtr lnk;
};
QVector<LinkEntry> _links;
};
} // namespace Layout
} // namespace Overview

View File

@ -21,7 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "lang.h"
#include "window.h"
#include "mainwindow.h"
#include "mainwidget.h"
#include "overviewwidget.h"
#include "boxes/addcontactbox.h"
@ -29,6 +29,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "boxes/photocropbox.h"
#include "application.h"
#include "ui/filedialog.h"
#include "playerwidget.h"
#include "window/top_bar_widget.h"
#include "overview/overview_layout.h"
// flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html
@ -333,7 +336,7 @@ void OverviewInner::moveToNextItem(MsgId &msgId, int32 &index, MsgId upTo, int32
}
index += delta;
while (index >= 0 && index < _items.size() && !_items.at(index)->toLayoutMediaItem()) {
while (index >= 0 && index < _items.size() && !_items.at(index)->toMediaItem()) {
index += (delta > 0) ? 1 : -1;
}
if (index < 0 || index >= _items.size()) {
@ -354,7 +357,7 @@ void OverviewInner::repaintItem(MsgId itemId, int32 itemIndex) {
int32 row = (_photosToAdd + shownAtIndex) / _photosInRow, col = (_photosToAdd + shownAtIndex) % _photosInRow;
update(int32(col * w), _marginTop + int32(row * vsize), qCeil(w), vsize);
} else {
int32 top = _items.at(itemIndex)->Get<OverviewItemInfo>()->top;
int32 top = _items.at(itemIndex)->Get<Overview::Layout::Info>()->top;
if (_reversed) top = _height - top;
update(_rowsLeft, _marginTop + top, _rowWidth, _items.at(itemIndex)->height());
}
@ -698,7 +701,7 @@ QPoint OverviewInner::mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex) {
p.setX(p.x() - int32(col * w) - st::overviewPhotoSkip);
p.setY(p.y() - _marginTop - row * (_rowWidth + st::overviewPhotoSkip) - st::overviewPhotoSkip);
} else {
int32 top = _items.at(itemIndex)->Get<OverviewItemInfo>()->top;
int32 top = _items.at(itemIndex)->Get<Overview::Layout::Info>()->top;
if (_reversed) top = _height - top;
p.setY(p.y() - _marginTop - top);
}
@ -734,7 +737,7 @@ int32 OverviewInner::itemTop(const FullMsgId &msgId) const {
int32 itemIndex = -1;
fixItemIndex(itemIndex, (msgId.channel == _channel) ? msgId.msg : ((_migrated && msgId.channel == _migrated->channelId()) ? -msgId.msg : 0));
if (itemIndex >= 0) {
int32 top = _items.at(itemIndex)->Get<OverviewItemInfo>()->top;
int32 top = _items.at(itemIndex)->Get<Overview::Layout::Info>()->top;
if (_reversed) top = _height - top;
return _marginTop + top;
}
@ -785,7 +788,7 @@ uint32 OverviewInner::itemSelectedValue(int32 index) const {
selfrom = _dragSelToIndex;
selto = _dragSelFromIndex;
}
if (_items.at(index)->toLayoutMediaItem()) { // draw item
if (_items.at(index)->toMediaItem()) { // draw item
if (index >= _dragSelToIndex && index <= _dragSelFromIndex && _dragSelToIndex >= 0) {
return (_dragSelecting && _items.at(index)->msgId() > 0) ? FullSelection : 0;
} else if (!_selected.isEmpty()) {
@ -809,7 +812,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) {
p.setClipRect(r);
}
uint64 ms = getms();
PaintContextOverview context(ms, _selMode);
Overview::Layout::PaintContext context(ms, _selMode);
if (_history->overview[_type].isEmpty() && (!_migrated || !_history->overviewLoaded(_type) || _migrated->overview[_type].isEmpty())) {
QPoint dogPos((_width - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9);
@ -854,15 +857,15 @@ void OverviewInner::paintEvent(QPaintEvent *e) {
int32 y = 0, w = _rowWidth;
for (int32 j = 0, l = _items.size(); j < l; ++j) {
int32 i = _reversed ? (l - j - 1) : j, nexti = _reversed ? (i - 1) : (i + 1);
int32 nextItemTop = (j + 1 == l) ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<OverviewItemInfo>()->top;
int32 nextItemTop = (j + 1 == l) ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<Overview::Layout::Info>()->top;
if (_reversed) nextItemTop = _height - nextItemTop;
if (_marginTop + nextItemTop > r.top()) {
OverviewItemInfo *info = _items.at(i)->Get<OverviewItemInfo>();
auto info = _items.at(i)->Get<Overview::Layout::Info>();
int32 curY = info->top;
if (_reversed) curY = _height - curY;
if (_marginTop + curY >= r.y() + r.height()) break;
context.isAfterDate = (j > 0) ? !_items.at(j - 1)->toLayoutMediaItem() : false;
context.isAfterDate = (j > 0) ? !_items.at(j - 1)->toMediaItem() : false;
p.translate(0, curY - y);
_items.at(i)->paint(p, r.translated(-_rowsLeft, -_marginTop - curY), itemSelectedValue(i), &context);
y = curY;
@ -908,7 +911,7 @@ void OverviewInner::onUpdateSelected() {
upon = false;
}
if (i >= 0) {
if (LayoutMediaItemBase *media = _items.at(i)->toLayoutMediaItem()) {
if (auto media = _items.at(i)->toMediaItem()) {
item = media->getItem();
index = i;
if (upon) {
@ -921,23 +924,23 @@ void OverviewInner::onUpdateSelected() {
for (int32 j = 0, l = _items.size(); j < l; ++j) {
bool lastItem = (j + 1 == l);
int32 i = _reversed ? (l - j - 1) : j, nexti = _reversed ? (i - 1) : (i + 1);
int32 nextItemTop = lastItem ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<OverviewItemInfo>()->top;
int32 nextItemTop = lastItem ? (_reversed ? 0 : _height) : _items.at(nexti)->Get<Overview::Layout::Info>()->top;
if (_reversed) nextItemTop = _height - nextItemTop;
if (_marginTop + nextItemTop > m.y() || lastItem) {
int32 top = _items.at(i)->Get<OverviewItemInfo>()->top;
int32 top = _items.at(i)->Get<Overview::Layout::Info>()->top;
if (_reversed) top = _height - top;
if (!_items.at(i)->toLayoutMediaItem()) { // day item
if (!_items.at(i)->toMediaItem()) { // day item
int32 h = _items.at(i)->height();
bool beforeItem = (_marginTop + top + h / 2) >= m.y();
if (_reversed) beforeItem = !beforeItem;
if (i > 0 && (beforeItem || i == _items.size() - 1)) {
--i;
if (!_items.at(i)->toLayoutMediaItem()) break; // wtf
top = _items.at(i)->Get<OverviewItemInfo>()->top;
if (!_items.at(i)->toMediaItem()) break; // wtf
top = _items.at(i)->Get<Overview::Layout::Info>()->top;
} else if (i < _items.size() - 1 && (!beforeItem || !i)) {
++i;
if (!_items.at(i)->toLayoutMediaItem()) break; // wtf
top = _items.at(i)->Get<OverviewItemInfo>()->top;
if (!_items.at(i)->toMediaItem()) break; // wtf
top = _items.at(i)->Get<Overview::Layout::Info>()->top;
} else {
break; // wtf
}
@ -945,7 +948,7 @@ void OverviewInner::onUpdateSelected() {
j = _reversed ? (l - i - 1) : i;
}
if (LayoutMediaItemBase *media = _items.at(i)->toLayoutMediaItem()) {
if (auto media = _items.at(i)->toMediaItem()) {
item = media->getItem();
index = i;
media->getState(lnk, cursorState, m.x() - _rowsLeft, m.y() - _marginTop - top);
@ -1325,7 +1328,7 @@ int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeigh
for (int32 i = 0, l = _items.size(); i < l; ++i) {
int32 h = _items.at(i)->resizeGetHeight(_rowWidth);
if (resize) {
_items.at(i)->Get<OverviewItemInfo>()->top = _height + (_reversed ? h : 0);
_items.at(i)->Get<Overview::Layout::Info>()->top = _height + (_reversed ? h : 0);
_height += h;
}
}
@ -1632,7 +1635,7 @@ void OverviewInner::mediaOverviewUpdated() {
allGood = false;
}
HistoryItem *item = App::histItemById(itemChannel(msgid), itemMsgId(msgid));
LayoutMediaItemBase *layout = layoutPrepare(item);
auto layout = layoutPrepare(item);
if (!layout) continue;
setLayoutItem(index, layout, 0);
@ -1658,17 +1661,17 @@ void OverviewInner::mediaOverviewUpdated() {
if (allGood) {
if (_items.size() > index && complexMsgId(_items.at(index)->getItem()) == msgid) {
if (withDates) prevDate = _items.at(index)->getItem()->date.date();
top = _items.at(index)->Get<OverviewItemInfo>()->top;
top = _items.at(index)->Get<Overview::Layout::Info>()->top;
if (!_reversed) {
top += _items.at(index)->height();
}
++index;
continue;
}
if (_items.size() > index + 1 && !_items.at(index)->toLayoutMediaItem() && complexMsgId(_items.at(index + 1)->getItem()) == msgid) { // day item
if (_items.size() > index + 1 && !_items.at(index)->toMediaItem() && complexMsgId(_items.at(index + 1)->getItem()) == msgid) { // day item
++index;
if (withDates) prevDate = _items.at(index)->getItem()->date.date();
top = _items.at(index)->Get<OverviewItemInfo>()->top;
top = _items.at(index)->Get<Overview::Layout::Info>()->top;
if (!_reversed) {
top += _items.at(index)->height();
}
@ -1678,7 +1681,7 @@ void OverviewInner::mediaOverviewUpdated() {
allGood = false;
}
HistoryItem *item = App::histItemById(itemChannel(msgid), itemMsgId(msgid));
LayoutMediaItemBase *layout = layoutPrepare(item);
auto layout = layoutPrepare(item);
if (!layout) continue;
if (withDates) {
@ -1795,7 +1798,7 @@ void OverviewInner::repaintItem(const HistoryItem *msg) {
if (history == _migrated) msgid = -msgid;
for (int32 i = 0, l = _items.size(); i != l; ++i) {
if (complexMsgId(_items.at(i)->getItem()) == msgid) {
int32 top = _items.at(i)->Get<OverviewItemInfo>()->top;
int32 top = _items.at(i)->Get<Overview::Layout::Info>()->top;
if (_reversed) top = _height - top;
update(_rowsLeft, _marginTop + top, _rowWidth, _items.at(i)->height());
break;
@ -1840,7 +1843,7 @@ void OverviewInner::recountMargins() {
}
}
LayoutMediaItemBase *OverviewInner::layoutPrepare(HistoryItem *item) {
Overview::Layout::ItemBase *OverviewInner::layoutPrepare(HistoryItem *item) {
if (!item) return nullptr;
LayoutItems::const_iterator i = _layoutItems.cend();
@ -1848,59 +1851,59 @@ LayoutMediaItemBase *OverviewInner::layoutPrepare(HistoryItem *item) {
if (_type == OverviewPhotos) {
if (media && media->type() == MediaTypePhoto) {
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
i = _layoutItems.insert(item, new LayoutOverviewPhoto(static_cast<HistoryPhoto*>(media)->photo(), item));
i = _layoutItems.insert(item, new Overview::Layout::Photo(static_cast<HistoryPhoto*>(media)->photo(), item));
i.value()->initDimensions();
}
}
} else if (_type == OverviewVideos) {
if (media && media->type() == MediaTypeVideo) {
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
i = _layoutItems.insert(item, new LayoutOverviewVideo(media->getDocument(), item));
i = _layoutItems.insert(item, new Overview::Layout::Video(media->getDocument(), item));
i.value()->initDimensions();
}
}
} else if (_type == OverviewVoiceFiles) {
if (media && (media->type() == MediaTypeVoiceFile)) {
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
i = _layoutItems.insert(item, new LayoutOverviewVoice(media->getDocument(), item));
i = _layoutItems.insert(item, new Overview::Layout::Voice(media->getDocument(), item));
i.value()->initDimensions();
}
}
} else if (_type == OverviewFiles || _type == OverviewMusicFiles) {
if (media && (media->type() == MediaTypeFile || media->type() == MediaTypeMusicFile || media->type() == MediaTypeGif)) {
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
i = _layoutItems.insert(item, new LayoutOverviewDocument(media->getDocument(), item));
i = _layoutItems.insert(item, new Overview::Layout::Document(media->getDocument(), item));
i.value()->initDimensions();
}
}
} else if (_type == OverviewLinks) {
if ((i = _layoutItems.constFind(item)) == _layoutItems.cend()) {
i = _layoutItems.insert(item, new LayoutOverviewLink(media, item));
i = _layoutItems.insert(item, new Overview::Layout::Link(media, item));
i.value()->initDimensions();
}
}
return (i == _layoutItems.cend()) ? nullptr : i.value();
}
LayoutOverviewItemBase *OverviewInner::layoutPrepare(const QDate &date, bool month) {
Overview::Layout::AbstractItem *OverviewInner::layoutPrepare(const QDate &date, bool month) {
int32 key = date.year() * 100 + date.month();
if (!month) key = key * 100 + date.day();
LayoutDates::const_iterator i = _layoutDates.constFind(key);
if (i == _layoutDates.cend()) {
i = _layoutDates.insert(key, new LayoutOverviewDate(date, month));
i = _layoutDates.insert(key, new Overview::Layout::Date(date, month));
i.value()->initDimensions();
}
return i.value();
}
int32 OverviewInner::setLayoutItem(int32 index, LayoutOverviewItemBase *item, int32 top) {
int32 OverviewInner::setLayoutItem(int32 index, Overview::Layout::AbstractItem *item, int32 top) {
if (_items.size() > index) {
_items[index] = item;
} else {
_items.push_back(item);
}
int32 h = item->resizeGetHeight(_rowWidth);
if (OverviewItemInfo *info = item->Get<OverviewItemInfo>()) {
if (auto info = item->Get<Overview::Layout::Info>()) {
info->top = top + (_reversed ? h : 0);
}
return h;

View File

@ -20,6 +20,16 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
namespace Overview {
namespace Layout {
class AbstractItem;
class ItemBase;
class Date;
} // namespace Layout
} // namespace Overview
class OverviewWidget;
class OverviewInner : public QWidget, public AbstractTooltipShower, public RPCSender {
Q_OBJECT
@ -152,15 +162,15 @@ private:
int32 _rowsLeft, _rowWidth;
typedef QVector<LayoutOverviewItemBase*> Items;
typedef QVector<Overview::Layout::AbstractItem*> Items;
Items _items;
typedef QMap<HistoryItem*, LayoutMediaItemBase*> LayoutItems;
typedef QMap<HistoryItem*, Overview::Layout::ItemBase*> LayoutItems;
LayoutItems _layoutItems;
typedef QMap<int32, LayoutOverviewDate*> LayoutDates;
typedef QMap<int32, Overview::Layout::Date*> LayoutDates;
LayoutDates _layoutDates;
LayoutMediaItemBase *layoutPrepare(HistoryItem *item);
LayoutOverviewItemBase *layoutPrepare(const QDate &date, bool month);
int32 setLayoutItem(int32 index, LayoutOverviewItemBase *item, int32 top);
Overview::Layout::ItemBase *layoutPrepare(HistoryItem *item);
Overview::Layout::AbstractItem *layoutPrepare(const QDate &date, bool month);
int32 setLayoutItem(int32 index, Overview::Layout::AbstractItem *item, int32 top);
FlatInput _search;
IconedButton _cancelSearch;

View File

@ -25,7 +25,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "localstorage.h"
#include "passcodewidget.h"
#include "window.h"
#include "mainwindow.h"
#include "application.h"
#include "ui/text.h"

View File

@ -24,7 +24,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "boxes/addcontactbox.h"
#include "application.h"
#include "window.h"
#include "mainwindow.h"
#include "playerwidget.h"
#include "mainwidget.h"

View File

@ -21,7 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "lang.h"
#include "window.h"
#include "mainwindow.h"
#include "mainwidget.h"
#include "profilewidget.h"
#include "boxes/addcontactbox.h"
@ -30,6 +30,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "application.h"
#include "boxes/contactsbox.h"
#include "ui/filedialog.h"
#include "apiwrap.h"
#include "window/top_bar_widget.h"
ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, PeerData *peer) : TWidget(0)
, _profile(profile)

View File

@ -488,7 +488,7 @@ namespace {
}
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) {
Window *wnd = App::wnd();
auto wnd = App::wnd();
if (!wnd) return false;
return false;

View File

@ -40,7 +40,7 @@ namespace {
}
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) {
Window *wnd = AppClass::wnd();
auto wnd = AppClass::wnd();
if (!wnd) return false;
return wnd->psFilterNativeEvent(message);

View File

@ -18,7 +18,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "pspecific_mac_p.h"
#include "window.h"
#include "mainwindow.h"
#include "mainwidget.h"
#include "application.h"

View File

@ -802,7 +802,7 @@ namespace {
}
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) {
Window *wnd = App::wnd();
auto wnd = App::wnd();
if (!wnd) return false;
MSG *msg = (MSG*)message;

View File

@ -802,7 +802,7 @@ namespace {
}
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) {
Window *wnd = App::wnd();
auto wnd = App::wnd();
if (!wnd) return false;
MSG *msg = (MSG*)message;

View File

@ -41,9 +41,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "boxes/stickersetbox.h"
#include "langloaderplain.h"
#include "ui/filedialog.h"
#include "apiwrap.h"
#include "autoupdater.h"
#include "localstorage.h"
Slider::Slider(QWidget *parent, const style::slider &st, int32 count, int32 sel) : QWidget(parent),
@ -291,9 +290,9 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : TWidget(parent)
connect(&_downloadPathEdit, SIGNAL(clicked()), this, SLOT(onDownloadPathEdit()));
connect(&_downloadPathClear, SIGNAL(clicked()), this, SLOT(onDownloadPathClear()));
switch (App::wnd()->tempDirState()) {
case Window::TempDirEmpty: _tempDirClearState = TempDirEmpty; break;
case Window::TempDirExists: _tempDirClearState = TempDirExists; break;
case Window::TempDirRemoving: _tempDirClearState = TempDirClearing; break;
case MainWindow::TempDirEmpty: _tempDirClearState = TempDirEmpty; break;
case MainWindow::TempDirExists: _tempDirClearState = TempDirExists; break;
case MainWindow::TempDirRemoving: _tempDirClearState = TempDirClearing; break;
}
connect(App::wnd(), SIGNAL(tempDirCleared(int)), this, SLOT(onTempDirCleared(int)));
connect(App::wnd(), SIGNAL(tempDirClearFailed(int)), this, SLOT(onTempDirClearFailed(int)));
@ -302,9 +301,9 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : TWidget(parent)
// local storage
connect(&_localStorageClear, SIGNAL(clicked()), this, SLOT(onLocalStorageClear()));
switch (App::wnd()->localStorageState()) {
case Window::TempDirEmpty: _storageClearState = TempDirEmpty; break;
case Window::TempDirExists: _storageClearState = TempDirExists; break;
case Window::TempDirRemoving: _storageClearState = TempDirClearing; break;
case MainWindow::TempDirEmpty: _storageClearState = TempDirEmpty; break;
case MainWindow::TempDirExists: _storageClearState = TempDirExists; break;
case MainWindow::TempDirRemoving: _storageClearState = TempDirClearing; break;
}
// chat background
@ -1836,7 +1835,7 @@ void SettingsInner::onPhotoUpdateDone(PeerId peer) {
update();
}
SettingsWidget::SettingsWidget(Window *parent) : TWidget(parent)
SettingsWidget::SettingsWidget(MainWindow *parent) : TWidget(parent)
, _a_show(animation(this, &SettingsWidget::step_show))
, _scroll(this, st::setScroll)
, _inner(this)

View File

@ -26,7 +26,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include <QtWidgets/QWidget>
class Window;
class MainWindow;
class Settings;
class Slider : public QWidget {
@ -313,7 +313,7 @@ class SettingsWidget : public TWidget {
public:
SettingsWidget(Window *parent);
SettingsWidget(MainWindow *parent);
void paintEvent(QPaintEvent *e);
void resizeEvent(QResizeEvent *e);

View File

@ -19,18 +19,18 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#include "stdafx.h"
#include "shortcuts.h"
#include "window.h"
#include "mainwindow.h"
#include "passcodewidget.h"
#include "mainwidget.h"
#include "playerwidget.h"
namespace ShortcutCommands {
typedef void(*Handler)();
void lock_telegram() {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
if (App::passcoded()) {
w->passcodeWidget()->onSubmit();
} else if (cHasPasscode()) {
@ -40,7 +40,7 @@ namespace ShortcutCommands {
}
void minimize_telegram() {
if (Window *w = App::wnd()) {
if (auto w = App::wnd()) {
if (cWorkMode() == dbiwmTrayOnly) {
w->minimizeToTray();
} else {
@ -51,8 +51,8 @@ namespace ShortcutCommands {
void close_telegram() {
if (!Ui::hideWindowNoQuit()) {
if (Window *w = App::wnd()) {
App::wnd()->close();
if (auto w = App::wnd()) {
w->close();
}
}
}

View File

@ -31,7 +31,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include <QtWidgets/QtWidgets>
#include <QtNetwork/QtNetwork>
#include "basic_types.h"
#include "core/basic_types.h"
#include "config.h"
#include "mtproto/facade.h"

View File

@ -28,11 +28,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "mainwidget.h"
#include "application.h"
#include "fileuploader.h"
#include "window.h"
#include "mainwindow.h"
#include "ui/filedialog.h"
#include "apiwrap.h"
#include "boxes/confirmbox.h"
#include "audio.h"
#include "localstorage.h"

View File

@ -1312,3 +1312,63 @@ struct MessageCursor {
inline bool operator==(const MessageCursor &a, const MessageCursor &b) {
return (a.position == b.position) && (a.anchor == b.anchor) && (a.scroll == b.scroll);
}
struct LocationCoords {
LocationCoords() : lat(0), lon(0) {
}
LocationCoords(float64 lat, float64 lon) : lat(lat), lon(lon) {
}
LocationCoords(const MTPDgeoPoint &point) : lat(point.vlat.v), lon(point.vlong.v) {
}
float64 lat, lon;
};
inline bool operator==(const LocationCoords &a, const LocationCoords &b) {
return (a.lat == b.lat) && (a.lon == b.lon);
}
inline bool operator<(const LocationCoords &a, const LocationCoords &b) {
return (a.lat < b.lat) || ((a.lat == b.lat) && (a.lon < b.lon));
}
inline uint qHash(const LocationCoords &t, uint seed = 0) {
return qHash(QtPrivate::QHashCombine().operator()(qHash(t.lat), t.lon), seed);
}
struct LocationData {
LocationData(const LocationCoords &coords) : coords(coords), loading(false) {
}
LocationCoords coords;
ImagePtr thumb;
bool loading;
void load();
};
class LocationClickHandler : public ClickHandler {
public:
LocationClickHandler(const LocationCoords &coords) : _coords(coords) {
setup();
}
QString copyToClipboardContextItem() const override;
void copyToClipboard() const override {
if (!_text.isEmpty()) {
QApplication::clipboard()->setText(_text);
}
}
QString tooltip() const override {
return QString();
}
QString text() const override {
return _text;
}
void onClick(Qt::MouseButton button) const override;
private:
void setup();
LocationCoords _coords;
QString _text;
};

View File

@ -111,7 +111,7 @@ void SysBtn::step_color(float64 ms, bool timer) {
if (timer) update();
}
MinimizeBtn::MinimizeBtn(QWidget *parent, Window *window) : SysBtn(parent, st::sysMin), wnd(window) {
MinimizeBtn::MinimizeBtn(QWidget *parent, MainWindow *window) : SysBtn(parent, st::sysMin), wnd(window) {
connect(this, SIGNAL(clicked()), this, SLOT(onClick()));
}
@ -119,7 +119,7 @@ void MinimizeBtn::onClick() {
wnd->setWindowState(Qt::WindowMinimized);
}
MaximizeBtn::MaximizeBtn(QWidget *parent, Window *window) : SysBtn(parent, st::sysMax), wnd(window) {
MaximizeBtn::MaximizeBtn(QWidget *parent, MainWindow *window) : SysBtn(parent, st::sysMax), wnd(window) {
connect(this, SIGNAL(clicked()), this, SLOT(onClick()));
}
@ -127,7 +127,7 @@ void MaximizeBtn::onClick() {
wnd->setWindowState(Qt::WindowMaximized);
}
RestoreBtn::RestoreBtn(QWidget *parent, Window *window) : SysBtn(parent, st::sysRes), wnd(window) {
RestoreBtn::RestoreBtn(QWidget *parent, MainWindow *window) : SysBtn(parent, st::sysRes), wnd(window) {
connect(this, SIGNAL(clicked()), this, SLOT(onClick()));
}
@ -135,7 +135,7 @@ void RestoreBtn::onClick() {
wnd->setWindowState(Qt::WindowNoState);
}
CloseBtn::CloseBtn(QWidget *parent, Window *window) : SysBtn(parent, st::sysCls), wnd(window) {
CloseBtn::CloseBtn(QWidget *parent, MainWindow *window) : SysBtn(parent, st::sysCls), wnd(window) {
connect(this, SIGNAL(clicked()), this, SLOT(onClick()));
}
@ -143,7 +143,7 @@ void CloseBtn::onClick() {
wnd->close();
}
UpdateBtn::UpdateBtn(QWidget *parent, Window *window, const QString &text) : SysBtn(parent, st::sysUpd, text), wnd(window) {
UpdateBtn::UpdateBtn(QWidget *parent, MainWindow *window, const QString &text) : SysBtn(parent, st::sysUpd, text), wnd(window) {
connect(this, SIGNAL(clicked()), this, SLOT(onClick()));
}
@ -161,7 +161,7 @@ void UpdateBtn::onClick() {
App::quit();
}
LockBtn::LockBtn(QWidget *parent, Window *window) : SysBtn(parent, st::sysLock), wnd(window) {
LockBtn::LockBtn(QWidget *parent, MainWindow *window) : SysBtn(parent, st::sysLock), wnd(window) {
connect(this, SIGNAL(clicked()), this, SLOT(onClick()));
}

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "ui/animation.h"
#include "ui/button.h"
class Window;
class MainWindow;
class SysBtn : public Button {
Q_OBJECT
@ -62,7 +62,7 @@ class MinimizeBtn : public SysBtn {
public:
MinimizeBtn(QWidget *parent, Window *window);
MinimizeBtn(QWidget *parent, MainWindow *window);
public slots:
@ -70,7 +70,7 @@ public slots:
private:
Window *wnd;
MainWindow *wnd;
};
class MaximizeBtn : public SysBtn {
@ -78,7 +78,7 @@ class MaximizeBtn : public SysBtn {
public:
MaximizeBtn(QWidget *parent, Window *window);
MaximizeBtn(QWidget *parent, MainWindow *window);
public slots:
@ -86,7 +86,7 @@ public slots:
private:
Window *wnd;
MainWindow *wnd;
};
class RestoreBtn : public SysBtn {
@ -94,7 +94,7 @@ class RestoreBtn : public SysBtn {
public:
RestoreBtn(QWidget *parent, Window *window);
RestoreBtn(QWidget *parent, MainWindow *window);
public slots:
@ -102,7 +102,7 @@ public slots:
private:
Window *wnd;
MainWindow *wnd;
};
class CloseBtn : public SysBtn {
@ -110,7 +110,7 @@ class CloseBtn : public SysBtn {
public:
CloseBtn(QWidget *parent, Window *window);
CloseBtn(QWidget *parent, MainWindow *window);
public slots:
@ -118,7 +118,7 @@ public slots:
private:
Window *wnd;
MainWindow *wnd;
};
class UpdateBtn : public SysBtn {
@ -126,7 +126,7 @@ class UpdateBtn : public SysBtn {
public:
UpdateBtn(QWidget *parent, Window *window, const QString &text = QString());
UpdateBtn(QWidget *parent, MainWindow *window, const QString &text = QString());
public slots:
@ -134,7 +134,7 @@ public slots:
private:
Window *wnd;
MainWindow *wnd;
};
class LockBtn : public SysBtn {
@ -142,7 +142,7 @@ class LockBtn : public SysBtn {
public:
LockBtn(QWidget *parent, Window *window);
LockBtn(QWidget *parent, MainWindow *window);
public slots:
@ -150,5 +150,5 @@ public slots:
private:
Window *wnd;
MainWindow *wnd;
};

View File

@ -24,7 +24,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "title.h"
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
#include "application.h"
#include "boxes/contactsbox.h"
#include "boxes/aboutbox.h"
@ -49,7 +49,7 @@ void TitleHider::setLevel(float64 level) {
update();
}
TitleWidget::TitleWidget(Window *window) : TWidget(window)
TitleWidget::TitleWidget(MainWindow *window) : TWidget(window)
, wnd(window)
, hideLevel(0)
, hider(0)

View File

@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include <QtWidgets/QWidget>
#include "sysbuttons.h"
class Window;
class MainWindow;
class TitleHider : public QWidget {
public:
@ -44,7 +44,7 @@ class TitleWidget : public TWidget {
public:
TitleWidget(Window *parent);
TitleWidget(MainWindow *parent);
void paintEvent(QPaintEvent *e);
void resizeEvent(QResizeEvent *e);
@ -78,7 +78,7 @@ signals:
private:
Window *wnd;
MainWindow *wnd;
style::color statusColor;

View File

@ -30,7 +30,7 @@ extern "C" {
}
#include "mainwidget.h"
#include "window.h"
#include "mainwindow.h"
namespace {
AnimationManager *_manager = 0;

View File

@ -20,7 +20,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "basic_types.h"
#include "core/basic_types.h"
#include <QtCore/QTimer>
#include <QtGui/QColor>

View File

@ -21,6 +21,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "ui/buttons/peer_avatar_button.h"
#include "structs.h"
namespace Ui {
PeerAvatarButton::PeerAvatarButton(QWidget *parent, PeerData *peer, const style::PeerAvatarButton &st) : Button(parent)
, _peer(peer)
, _st(st) {
@ -33,3 +37,5 @@ void PeerAvatarButton::paintEvent(QPaintEvent *e) {
_peer->paintUserpic(p, _st.photoSize, (_st.size - _st.photoSize) / 2, (_st.size - _st.photoSize) / 2);
}
}
} // namespace Ui

View File

@ -22,7 +22,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "ui/button.h"
#include "ui/style.h"
#include "structs.h"
class PeerData;
namespace Ui {
class PeerAvatarButton : public Button {
public:
@ -38,3 +41,5 @@ private:
const style::PeerAvatarButton &_st;
};
} // namespace Ui

View File

@ -22,7 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "ui/style.h"
#include "flatinput.h"
#include "window.h"
#include "mainwindow.h"
#include "countryinput.h"
#include "lang.h"

View File

@ -22,7 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "flattextarea.h"
#include "ui/style.h"
#include "window.h"
#include "mainwindow.h"
FlatTextarea::FlatTextarea(QWidget *parent, const style::flatTextarea &st, const QString &pholder, const QString &v) : QTextEdit(parent)
, _oldtext(v)

View File

@ -21,13 +21,13 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "text.h"
#include "lang.h"
#include <private/qharfbuzz_p.h>
#include "core/click_handler_types.h"
#include "lang.h"
#include "pspecific.h"
#include "boxes/confirmbox.h"
#include "window.h"
#include <private/qharfbuzz_p.h>
#include "mainwindow.h"
namespace {
@ -57,47 +57,6 @@ namespace {
}
}
ClickHandlerHost::~ClickHandlerHost() {
ClickHandler::hostDestroyed(this);
}
NeverFreedPointer<ClickHandlerPtr> ClickHandler::_active;
NeverFreedPointer<ClickHandlerPtr> ClickHandler::_pressed;
ClickHandlerHost *ClickHandler::_activeHost = nullptr;
ClickHandlerHost *ClickHandler::_pressedHost = nullptr;
bool ClickHandler::setActive(const ClickHandlerPtr &p, ClickHandlerHost *host) {
if ((_active && (*_active == p)) || (!_active && !p)) {
return false;
}
// emit clickHandlerActiveChanged only when there is no
// other pressed click handler currently, if there is
// this method will be called when it is unpressed
if (_active && *_active) {
bool emitClickHandlerActiveChanged = (!_pressed || !*_pressed || *_pressed == *_active);
ClickHandlerPtr wasactive = *_active;
(*_active).clear();
if (_activeHost) {
if (emitClickHandlerActiveChanged) {
_activeHost->clickHandlerActiveChanged(wasactive, false);
}
_activeHost = nullptr;
}
}
if (p) {
_active.makeIfNull();
*_active = p;
if ((_activeHost = host)) {
bool emitClickHandlerActiveChanged = (!_pressed || !*_pressed || *_pressed == *_active);
if (emitClickHandlerActiveChanged) {
_activeHost->clickHandlerActiveChanged(*_active, true);
}
}
}
return true;
}
const QRegularExpression &reDomain() {
return _reDomain;
}
@ -954,113 +913,6 @@ namespace {
}
}
QString UrlClickHandler::copyToClipboardContextItem() const {
return lang(isEmail() ? lng_context_copy_email : lng_context_copy_link);
}
namespace {
QString tryConvertUrlToLocal(const QString &url) {
QRegularExpressionMatch telegramMeUser = QRegularExpression(qsl("^https?://telegram\\.me/([a-zA-Z0-9\\.\\_]+)(/?\\?|/?$|/(\\d+)/?(?:\\?|$))"), QRegularExpression::CaseInsensitiveOption).match(url);
QRegularExpressionMatch telegramMeGroup = QRegularExpression(qsl("^https?://telegram\\.me/joinchat/([a-zA-Z0-9\\.\\_\\-]+)(\\?|$)"), QRegularExpression::CaseInsensitiveOption).match(url);
QRegularExpressionMatch telegramMeStickers = QRegularExpression(qsl("^https?://telegram\\.me/addstickers/([a-zA-Z0-9\\.\\_]+)(\\?|$)"), QRegularExpression::CaseInsensitiveOption).match(url);
QRegularExpressionMatch telegramMeShareUrl = QRegularExpression(qsl("^https?://telegram\\.me/share/url\\?(.+)$"), QRegularExpression::CaseInsensitiveOption).match(url);
if (telegramMeGroup.hasMatch()) {
return qsl("tg://join?invite=") + myUrlEncode(telegramMeGroup.captured(1));
} else if (telegramMeStickers.hasMatch()) {
return qsl("tg://addstickers?set=") + myUrlEncode(telegramMeStickers.captured(1));
} else if (telegramMeShareUrl.hasMatch()) {
return qsl("tg://msg_url?") + telegramMeShareUrl.captured(1);
} else if (telegramMeUser.hasMatch()) {
QString params = url.mid(telegramMeUser.captured(0).size()), postParam;
if (QRegularExpression(qsl("^/\\d+/?(?:\\?|$)")).match(telegramMeUser.captured(2)).hasMatch()) {
postParam = qsl("&post=") + telegramMeUser.captured(3);
}
return qsl("tg://resolve/?domain=") + myUrlEncode(telegramMeUser.captured(1)) + postParam + (params.isEmpty() ? QString() : '&' + params);
}
return url;
}
} // namespace
void UrlClickHandler::doOpen(QString url) {
PopupTooltip::Hide();
if (isEmail(url)) {
QUrl u(qstr("mailto:") + url);
if (!QDesktopServices::openUrl(u)) {
psOpenFile(u.toString(QUrl::FullyEncoded), true);
}
return;
}
url = tryConvertUrlToLocal(url);
if (url.startsWith(qstr("tg://"), Qt::CaseInsensitive)) {
App::openLocalUrl(url);
} else {
QDesktopServices::openUrl(url);
}
}
void HiddenUrlClickHandler::onClick(Qt::MouseButton button) const {
QString u = url();
u = tryConvertUrlToLocal(u);
if (u.startsWith(qstr("tg://"))) {
App::openLocalUrl(u);
} else {
Ui::showLayer(new ConfirmLinkBox(u));
}
}
QString LocationClickHandler::copyToClipboardContextItem() const {
return lang(lng_context_copy_link);
}
void LocationClickHandler::onClick(Qt::MouseButton button) const {
if (!psLaunchMaps(_coords)) {
QDesktopServices::openUrl(_text);
}
}
void LocationClickHandler::setup() {
QString latlon(qsl("%1,%2").arg(_coords.lat).arg(_coords.lon));
_text = qsl("https://maps.google.com/maps?q=") + latlon + qsl("&ll=") + latlon + qsl("&z=16");
}
QString MentionClickHandler::copyToClipboardContextItem() const {
return lang(lng_context_copy_mention);
}
void MentionClickHandler::onClick(Qt::MouseButton button) const {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
App::openPeerByName(_tag.mid(1), ShowAtProfileMsgId);
}
}
QString HashtagClickHandler::copyToClipboardContextItem() const {
return lang(lng_context_copy_hashtag);
}
void HashtagClickHandler::onClick(Qt::MouseButton button) const {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
App::searchByHashtag(_tag, Ui::getPeerForMouseAction());
}
}
void BotCommandClickHandler::onClick(Qt::MouseButton button) const {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
if (PeerData *peer = Ui::getPeerForMouseAction()) {
Ui::showPeerHistory(peer, ShowAtTheEndMsgId);
App::sendBotCommand(peer, _cmd);
} else {
App::insertBotCommand(_cmd);
}
}
}
class TextPainter {
public:

View File

@ -20,6 +20,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "core/click_handler.h"
enum EntityInTextType {
EntityInTextUrl,
EntityInTextCustomUrl,
@ -34,10 +36,10 @@ enum EntityInTextType {
EntityInTextPre, // block
};
struct EntityInText {
EntityInText(EntityInTextType type, int32 offset, int32 length, const QString &text = QString()) : type(type), offset(offset), length(length), text(text) {
EntityInText(EntityInTextType type, int offset, int length, const QString &text = QString()) : type(type), offset(offset), length(length), text(text) {
}
EntityInTextType type;
int32 offset, length;
int offset, length;
QString text;
};
typedef QList<EntityInText> EntitiesInText;
@ -309,344 +311,6 @@ private:
friend class TextPainter;
};
class ClickHandler;
using ClickHandlerPtr = QSharedPointer<ClickHandler>;
class ClickHandlerHost {
protected:
virtual void clickHandlerActiveChanged(const ClickHandlerPtr &action, bool active) {
}
virtual void clickHandlerPressedChanged(const ClickHandlerPtr &action, bool pressed) {
}
virtual ~ClickHandlerHost() = 0;
friend class ClickHandler;
};
class ClickHandler {
public:
virtual void onClick(Qt::MouseButton) const = 0;
virtual QString tooltip() const {
return QString();
}
virtual void copyToClipboard() const {
}
virtual QString copyToClipboardContextItem() const {
return QString();
}
virtual QString text() const {
return QString();
}
virtual QString dragText() const {
return text();
}
virtual ~ClickHandler() {
}
// this method should be called on mouse over a click handler
// it returns true if something was changed or false otherwise
static bool setActive(const ClickHandlerPtr &p, ClickHandlerHost *host = nullptr);
// this method should be called when mouse leaves the host
// it returns true if something was changed or false otherwise
static bool clearActive(ClickHandlerHost *host = nullptr) {
if (host && _activeHost != host) {
return false;
}
return setActive(ClickHandlerPtr(), host);
}
// this method should be called on mouse pressed
static void pressed() {
unpressed();
if (!_active || !*_active) {
return;
}
_pressed.makeIfNull();
*_pressed = *_active;
if ((_pressedHost = _activeHost)) {
_pressedHost->clickHandlerPressedChanged(*_pressed, true);
}
}
// this method should be called on mouse released
// the activated click handler is returned
static ClickHandlerPtr unpressed() {
if (_pressed && *_pressed) {
bool activated = (_active && *_active == *_pressed);
ClickHandlerPtr waspressed = *_pressed;
(*_pressed).clear();
if (_pressedHost) {
_pressedHost->clickHandlerPressedChanged(waspressed, false);
_pressedHost = nullptr;
}
if (activated) {
return *_active;
} else if (_active && *_active && _activeHost) {
// emit clickHandlerActiveChanged for current active
// click handler, which we didn't emit while we has
// a pressed click handler
_activeHost->clickHandlerActiveChanged(*_active, true);
}
}
return ClickHandlerPtr();
}
static ClickHandlerPtr getActive() {
return _active ? *_active : ClickHandlerPtr();
}
static ClickHandlerPtr getPressed() {
return _pressed ? *_pressed : ClickHandlerPtr();
}
static bool showAsActive(const ClickHandlerPtr &p) {
if (!p || !_active || p != *_active) {
return false;
}
return !_pressed || !*_pressed || (p == *_pressed);
}
static bool showAsPressed(const ClickHandlerPtr &p) {
if (!p || !_active || p != *_active) {
return false;
}
return _pressed && (p == *_pressed);
}
static void hostDestroyed(ClickHandlerHost *host) {
if (_activeHost == host) {
_activeHost = nullptr;
} else if (_pressedHost == host) {
_pressedHost = nullptr;
}
}
private:
static NeverFreedPointer<ClickHandlerPtr> _active;
static NeverFreedPointer<ClickHandlerPtr> _pressed;
static ClickHandlerHost *_activeHost;
static ClickHandlerHost *_pressedHost;
};
class LeftButtonClickHandler : public ClickHandler {
public:
void onClick(Qt::MouseButton button) const override final {
if (button != Qt::LeftButton) return;
onClickImpl();
}
protected:
virtual void onClickImpl() const = 0;
};
class TextClickHandler : public ClickHandler {
public:
TextClickHandler(bool fullDisplayed = true) : _fullDisplayed(fullDisplayed) {
}
void copyToClipboard() const override {
QString u = url();
if (!u.isEmpty()) {
QApplication::clipboard()->setText(u);
}
}
QString tooltip() const override {
return _fullDisplayed ? QString() : readable();
}
void setFullDisplayed(bool full) {
_fullDisplayed = full;
}
protected:
virtual QString url() const = 0;
virtual QString readable() const {
return url();
}
bool _fullDisplayed;
};
class UrlClickHandler : public TextClickHandler {
public:
UrlClickHandler(const QString &url, bool fullDisplayed = true) : TextClickHandler(fullDisplayed), _url(url) {
if (isEmail()) {
_readable = _url;
} else {
QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString());
_readable = good.isValid() ? good.toDisplayString() : _url;
}
}
QString copyToClipboardContextItem() const override;
QString text() const override {
return _url;
}
QString dragText() const override {
return url();
}
static void doOpen(QString url);
void onClick(Qt::MouseButton button) const override {
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
doOpen(url());
}
}
protected:
QString url() const override {
if (isEmail()) {
return _url;
}
QUrl u(_url), good(u.isValid() ? u.toEncoded() : QString());
QString result(good.isValid() ? QString::fromUtf8(good.toEncoded()) : _url);
if (!QRegularExpression(qsl("^[a-zA-Z]+:")).match(result).hasMatch()) { // no protocol
return qsl("http://") + result;
}
return result;
}
QString readable() const override {
return _readable;
}
private:
static bool isEmail(const QString &url) {
int at = url.indexOf('@'), slash = url.indexOf('/');
return ((at > 0) && (slash < 0 || slash > at));
}
bool isEmail() const {
return isEmail(_url);
}
QString _url, _readable;
};
typedef QSharedPointer<TextClickHandler> TextClickHandlerPtr;
class HiddenUrlClickHandler : public UrlClickHandler {
public:
HiddenUrlClickHandler(QString url) : UrlClickHandler(url, false) {
}
void onClick(Qt::MouseButton button) const override;
};
struct LocationCoords {
LocationCoords() : lat(0), lon(0) {
}
LocationCoords(float64 lat, float64 lon) : lat(lat), lon(lon) {
}
LocationCoords(const MTPDgeoPoint &point) : lat(point.vlat.v), lon(point.vlong.v) {
}
float64 lat, lon;
};
inline bool operator==(const LocationCoords &a, const LocationCoords &b) {
return (a.lat == b.lat) && (a.lon == b.lon);
}
inline bool operator<(const LocationCoords &a, const LocationCoords &b) {
return (a.lat < b.lat) || ((a.lat == b.lat) && (a.lon < b.lon));
}
inline uint qHash(const LocationCoords &t, uint seed = 0) {
return qHash(QtPrivate::QHashCombine().operator()(qHash(t.lat), t.lon), seed);
}
class LocationClickHandler : public TextClickHandler {
public:
LocationClickHandler(const LocationCoords &coords) : _coords(coords) {
setup();
}
QString copyToClipboardContextItem() const override;
QString text() const override {
return _text;
}
void onClick(Qt::MouseButton button) const override;
protected:
QString url() const override {
return _text;
}
private:
void setup();
LocationCoords _coords;
QString _text;
};
class MentionClickHandler : public TextClickHandler {
public:
MentionClickHandler(const QString &tag) : _tag(tag) {
}
QString copyToClipboardContextItem() const override;
QString text() const override {
return _tag;
}
void onClick(Qt::MouseButton button) const override;
protected:
QString url() const override {
return _tag;
}
private:
QString _tag;
};
class HashtagClickHandler : public TextClickHandler {
public:
HashtagClickHandler(const QString &tag) : _tag(tag) {
}
QString copyToClipboardContextItem() const override;
QString text() const override {
return _tag;
}
void onClick(Qt::MouseButton button) const override;
protected:
QString url() const override {
return _tag;
}
private:
QString _tag;
};
class BotCommandClickHandler : public TextClickHandler {
public:
BotCommandClickHandler(const QString &cmd) : _cmd(cmd) {
}
QString text() const override {
return _cmd;
}
void onClick(Qt::MouseButton button) const override;
protected:
QString url() const override {
return _cmd;
}
private:
QString _cmd;
};
static const QChar TextCommand(0x0010);
enum TextCommands {
TextCommandBold = 0x01,

View File

@ -23,7 +23,6 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "ui/toast/toast_manager.h"
#include "ui/toast/toast_widget.h"
#include "window.h"
namespace Ui {
namespace Toast {
@ -35,12 +34,10 @@ Instance::Instance(const Config &config, QWidget *widgetParent, const Private &)
_a_fade.start();
}
void Show(const Config &config) {
if (internal::Manager *manager = internal::Manager::instance()) {
if (Window *window = App::wnd()) {
auto toast = std_::make_unique<Instance>(config, window, Instance::Private());
manager->addToast(std_::move(toast));
}
void Show(QWidget *parent, const Config &config) {
if (auto manager = internal::Manager::instance(parent)) {
auto toast = std_::make_unique<Instance>(config, parent, Instance::Private());
manager->addToast(std_::move(toast));
}
}

View File

@ -33,7 +33,7 @@ struct Config {
QString text;
int durationMs = DefaultDuration;
};
void Show(const Config &config);
void Show(QWidget *parent, const Config &config);
class Instance {
struct Private {
@ -57,7 +57,7 @@ private:
// ToastManager should reset _widget pointer if _widget is destroyed.
friend class internal::Manager;
friend void Show(const Config &config);
friend void Show(QWidget *parent, const Config &config);
std_::unique_ptr<internal::Widget> _widget;
};

View File

@ -21,30 +21,31 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "ui/toast/toast_manager.h"
#include "application.h"
#include "ui/toast/toast_widget.h"
#include "window.h"
namespace Ui {
namespace Toast {
namespace internal {
Manager *Manager::_instance = nullptr;
namespace {
Manager::Manager(QObject *parent) : QObject(parent) {
t_assert(_instance == nullptr);
_instance = this;
NeverFreedPointer<QMap<QObject*, Manager*>> _managers;
} // namespace
Manager::Manager(QWidget *parent) : QObject(parent) {
connect(&_hideTimer, SIGNAL(timeout()), this, SLOT(onHideTimeout()));
connect(parent, SIGNAL(resized()), this, SLOT(onParentResized()));
}
Manager *Manager::instance() {
if (!_instance) {
if (Window *w = App::wnd()) {
_instance = new Manager(w);
}
Manager *Manager::instance(QWidget *parent) {
_managers.makeIfNull();
auto i = _managers->constFind(parent);
if (i == _managers->cend()) {
i = _managers->insert(parent, new Manager(parent));
}
return _instance;
return i.value();
}
void Manager::addToast(std_::unique_ptr<Instance> &&toast) {
@ -115,7 +116,7 @@ void Manager::startNextHideTimer() {
}
Manager::~Manager() {
_instance = nullptr;
_managers->remove(parent());
}
} // namespace internal

View File

@ -34,7 +34,7 @@ public:
Manager(const Manager &other) = delete;
Manager &operator=(const Manager &other) = delete;
static Manager *instance();
static Manager *instance(QWidget *parent);
void addToast(std_::unique_ptr<Instance> &&toast);
@ -46,7 +46,7 @@ private slots:
void onToastWidgetParentResized();
private:
Manager(QObject *parent);
Manager(QWidget *parent);
void startNextHideTimer();
SingleTimer _hideTimer;
@ -56,8 +56,6 @@ private:
QMap<Widget*, Instance*> _toastByWidget;
QList<Instance*> _toasts;
static Manager *_instance;
};
} // namespace internal

View File

@ -21,7 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
#include "stdafx.h"
#include "application.h"
#include "window.h"
#include "mainwindow.h"
namespace Fonts {

View File

@ -156,12 +156,12 @@ void rtlupdate(int x, int y, int w, int h) { \
update(myrtlrect(x, y, w, h)); \
} \
protected: \
void enterEvent(QEvent *e) { \
void enterEvent(QEvent *e) override { \
TWidget *p(tparent()); \
if (p) p->leaveToChildEvent(e); \
return QWidget::enterEvent(e); \
} \
void leaveEvent(QEvent *e) { \
void leaveEvent(QEvent *e) override { \
TWidget *p(tparent()); \
if (p) p->enterFromChildEvent(e); \
return QWidget::leaveEvent(e); \
@ -172,8 +172,7 @@ class TWidget : public QWidget {
T_WIDGET
public:
TWidget(QWidget *parent = 0) : QWidget(parent) {
TWidget(QWidget *parent = nullptr) : QWidget(parent) {
}
bool event(QEvent *e) {
return QWidget::event(e);
@ -185,8 +184,6 @@ public:
bool inFocusChain() const;
private:
};
void myEnsureResized(QWidget *target);
@ -229,3 +226,44 @@ private:
const char *_member;
};
// A simple wrap around T* to explicitly state ownership
template <typename T>
class ChildWidget {
public:
ChildWidget(std::nullptr_t) : _widget(nullptr) {
}
// No default constructor, but constructors with at least
// one argument are simply make functions.
template <typename Parent, typename... Args>
ChildWidget(Parent &&parent, Args&&... args) : _widget(new T(std_::forward<Parent>(parent), std_::forward<Args>(args)...)) {
}
ChildWidget(const ChildWidget<T> &other) = delete;
ChildWidget<T> &operator=(const ChildWidget<T> &other) = delete;
ChildWidget<T> &operator=(std::nullptr_t) {
_widget = nullptr;
return *this;
}
ChildWidget<T> &operator=(T *widget) {
_widget = widget;
return *this;
}
T *operator->() const {
return _widget;
}
T &operator*() const {
return *_widget;
}
// So we can pass this pointer to methods like connect().
operator T*() const {
return _widget;
}
private:
T *_widget;
};

View File

@ -0,0 +1,393 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#include "stdafx.h"
#include "window/top_bar_widget.h"
#include "boxes/addcontactbox.h"
#include "boxes/confirmbox.h"
#include "mainwidget.h"
#include "shortcuts.h"
#include "lang.h"
#include "ui/buttons/peer_avatar_button.h"
#include "ui/flatbutton.h"
namespace Window {
TopBarWidget::TopBarWidget(MainWidget *w) : TWidget(w)
, a_over(0)
, _a_appearance(animation(this, &TopBarWidget::step_appearance))
, _selPeer(0)
, _selCount(0)
, _canDelete(false)
, _selStrLeft(-st::topBarButton.width / 2)
, _selStrWidth(0)
, _animating(false)
, _clearSelection(this, lang(lng_selected_clear), st::topBarButton)
, _forward(this, lang(lng_selected_forward), st::topBarActionButton)
, _delete(this, lang(lng_selected_delete), st::topBarActionButton)
, _selectionButtonsWidth(_clearSelection->width() + _forward->width() + _delete->width())
, _forwardDeleteWidth(qMax(_forward->textWidth(), _delete->textWidth()))
, _info(this, nullptr, st::infoButton)
, _edit(this, lang(lng_profile_edit_contact), st::topBarButton)
, _leaveGroup(this, lang(lng_profile_delete_and_exit), st::topBarButton)
, _addContact(this, lang(lng_profile_add_contact), st::topBarButton)
, _deleteContact(this, lang(lng_profile_delete_contact), st::topBarButton)
, _mediaType(this, lang(lng_media_type), st::topBarButton)
, _search(this, st::topBarSearch)
, _sideShadow(this, st::shadowColor) {
connect(_forward, SIGNAL(clicked()), this, SLOT(onForwardSelection()));
connect(_delete, SIGNAL(clicked()), this, SLOT(onDeleteSelection()));
connect(_clearSelection, SIGNAL(clicked()), this, SLOT(onClearSelection()));
connect(_info, SIGNAL(clicked()), this, SLOT(onInfoClicked()));
connect(_addContact, SIGNAL(clicked()), this, SLOT(onAddContact()));
connect(_deleteContact, SIGNAL(clicked()), this, SLOT(onDeleteContact()));
connect(_edit, SIGNAL(clicked()), this, SLOT(onEdit()));
connect(_leaveGroup, SIGNAL(clicked()), this, SLOT(onDeleteAndExit()));
connect(_search, SIGNAL(clicked()), this, SLOT(onSearch()));
setCursor(style::cur_pointer);
showAll();
}
void TopBarWidget::onForwardSelection() {
if (App::main()) App::main()->forwardSelectedItems();
}
void TopBarWidget::onDeleteSelection() {
if (App::main()) App::main()->deleteSelectedItems();
}
void TopBarWidget::onClearSelection() {
if (App::main()) App::main()->clearSelectedItems();
}
void TopBarWidget::onInfoClicked() {
PeerData *p = App::main() ? App::main()->historyPeer() : 0;
if (p) App::main()->showPeerProfile(p);
}
void TopBarWidget::onAddContact() {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
UserData *u = p ? p->asUser() : 0;
if (u) Ui::showLayer(new AddContactBox(u->firstName, u->lastName, u->phone.isEmpty() ? App::phoneFromSharedContact(peerToUser(u->id)) : u->phone));
}
void TopBarWidget::onEdit() {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
if (p) {
if (p->isChannel()) {
Ui::showLayer(new EditChannelBox(p->asChannel()));
} else if (p->isChat()) {
Ui::showLayer(new EditNameTitleBox(p));
} else if (p->isUser()) {
Ui::showLayer(new AddContactBox(p->asUser()));
}
}
}
void TopBarWidget::onDeleteContact() {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
UserData *u = p ? p->asUser() : 0;
if (u) {
ConfirmBox *box = new ConfirmBox(lng_sure_delete_contact(lt_contact, p->name), lang(lng_box_delete));
connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteContactSure()));
Ui::showLayer(box);
}
}
void TopBarWidget::onDeleteContactSure() {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
UserData *u = p ? p->asUser() : 0;
if (u) {
Ui::showChatsList();
Ui::hideLayer();
MTP::send(MTPcontacts_DeleteContact(u->inputUser), App::main()->rpcDone(&MainWidget::deletedContact, u));
}
}
void TopBarWidget::onDeleteAndExit() {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
ChatData *c = p ? p->asChat() : 0;
if (c) {
ConfirmBox *box = new ConfirmBox(lng_sure_delete_and_exit(lt_group, p->name), lang(lng_box_leave), st::attentionBoxButton);
connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteAndExitSure()));
Ui::showLayer(box);
}
}
void TopBarWidget::onDeleteAndExitSure() {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
ChatData *c = p ? p->asChat() : 0;
if (c) {
Ui::showChatsList();
Ui::hideLayer();
MTP::send(MTPmessages_DeleteChatUser(c->inputChat, App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistoryAfterLeave, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p));
}
}
void TopBarWidget::onSearch() {
Shortcuts::launch(qsl("search"));
}
void TopBarWidget::enterEvent(QEvent *e) {
a_over.start(1);
_a_appearance.start();
}
void TopBarWidget::enterFromChildEvent(QEvent *e) {
a_over.start(1);
_a_appearance.start();
}
void TopBarWidget::leaveEvent(QEvent *e) {
a_over.start(0);
_a_appearance.start();
}
void TopBarWidget::leaveToChildEvent(QEvent *e) {
a_over.start(0);
_a_appearance.start();
}
void TopBarWidget::step_appearance(float64 ms, bool timer) {
float64 dt = ms / st::topBarDuration;
if (dt >= 1) {
_a_appearance.stop();
a_over.finish();
} else {
a_over.update(dt, anim::linear);
}
if (timer) update();
}
void TopBarWidget::paintEvent(QPaintEvent *e) {
QPainter p(this);
if (e->rect().top() < st::topBarHeight) { // optimize shadow-only drawing
p.fillRect(QRect(0, 0, width(), st::topBarHeight), st::topBarBG->b);
if (_clearSelection->isHidden()) {
p.save();
main()->paintTopBar(p, a_over.current(), _info->isHidden() ? 0 : _info->width());
p.restore();
} else {
p.setFont(st::linkFont->f);
p.setPen(st::btnDefLink.color->p);
p.drawText(_selStrLeft, st::topBarButton.textTop + st::linkFont->ascent, _selStr);
}
}
}
void TopBarWidget::mousePressEvent(QMouseEvent *e) {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
if (e->button() == Qt::LeftButton && e->pos().y() < st::topBarHeight && (p || !_selCount)) {
emit clicked();
}
}
void TopBarWidget::resizeEvent(QResizeEvent *e) {
int32 r = width();
if (!_forward->isHidden() || !_delete->isHidden()) {
int32 fullW = r - (_selectionButtonsWidth + (_selStrWidth - st::topBarButton.width) + st::topBarActionSkip);
int32 selectedClearWidth = st::topBarButton.width, forwardDeleteWidth = st::topBarActionButton.width - _forwardDeleteWidth, skip = st::topBarActionSkip;
while (fullW < 0) {
int fit = 0;
if (selectedClearWidth < -2 * (st::topBarMinPadding + 1)) {
fullW += 4;
selectedClearWidth += 2;
} else if (selectedClearWidth < -2 * st::topBarMinPadding) {
fullW += (-2 * st::topBarMinPadding - selectedClearWidth) * 2;
selectedClearWidth = -2 * st::topBarMinPadding;
} else {
++fit;
}
if (fullW >= 0) break;
if (forwardDeleteWidth > 2 * (st::topBarMinPadding + 1)) {
fullW += 4;
forwardDeleteWidth -= 2;
} else if (forwardDeleteWidth > 2 * st::topBarMinPadding) {
fullW += (forwardDeleteWidth - 2 * st::topBarMinPadding) * 2;
forwardDeleteWidth = 2 * st::topBarMinPadding;
} else {
++fit;
}
if (fullW >= 0) break;
if (skip > st::topBarMinPadding) {
--skip;
++fullW;
} else {
++fit;
}
if (fullW >= 0 || fit >= 3) break;
}
_clearSelection->setWidth(selectedClearWidth);
_forward->setWidth(_forwardDeleteWidth + forwardDeleteWidth);
_delete->setWidth(_forwardDeleteWidth + forwardDeleteWidth);
_selStrLeft = -selectedClearWidth / 2;
int32 availX = _selStrLeft + _selStrWidth, availW = r - (_clearSelection->width() + selectedClearWidth / 2) - availX;
if (_forward->isHidden()) {
_delete->move(availX + (availW - _delete->width()) / 2, (st::topBarHeight - _forward->height()) / 2);
} else if (_delete->isHidden()) {
_forward->move(availX + (availW - _forward->width()) / 2, (st::topBarHeight - _forward->height()) / 2);
} else {
_forward->move(availX + (availW - _forward->width() - _delete->width() - skip) / 2, (st::topBarHeight - _forward->height()) / 2);
_delete->move(availX + (availW + _forward->width() - _delete->width() + skip) / 2, (st::topBarHeight - _forward->height()) / 2);
}
_clearSelection->move(r -= _clearSelection->width(), 0);
}
if (!_info->isHidden()) _info->move(r -= _info->width(), 0);
if (!_deleteContact->isHidden()) _deleteContact->move(r -= _deleteContact->width(), 0);
if (!_leaveGroup->isHidden()) _leaveGroup->move(r -= _leaveGroup->width(), 0);
if (!_edit->isHidden()) _edit->move(r -= _edit->width(), 0);
if (!_addContact->isHidden()) _addContact->move(r -= _addContact->width(), 0);
if (!_mediaType->isHidden()) _mediaType->move(r -= _mediaType->width(), 0);
_search->move(width() - (_info->isHidden() ? st::topBarForwardPadding.right() : _info->width()) - _search->width(), 0);
_sideShadow->resize(st::lineWidth, height());
_sideShadow->moveToLeft(0, 0);
}
void TopBarWidget::startAnim() {
_info->hide();
_edit->hide();
_leaveGroup->hide();
_addContact->hide();
_deleteContact->hide();
_clearSelection->hide();
_delete->hide();
_forward->hide();
_mediaType->hide();
_search->hide();
_animating = true;
}
void TopBarWidget::stopAnim() {
_animating = false;
_sideShadow->setVisible(!Adaptive::OneColumn());
showAll();
}
void TopBarWidget::showAll() {
if (_animating) {
resizeEvent(0);
return;
}
PeerData *p = App::main() ? App::main()->profilePeer() : 0, *h = App::main() ? App::main()->historyPeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0;
if (p && (p->isChat() || (p->isUser() && (p->asUser()->contact >= 0 || !App::phoneFromSharedContact(peerToUser(p->id)).isEmpty())))) {
if (p->isChat()) {
if (p->asChat()->canEdit()) {
_edit->show();
} else {
_edit->hide();
}
_leaveGroup->show();
_addContact->hide();
_deleteContact->hide();
} else if (p->asUser()->contact > 0) {
_edit->show();
_leaveGroup->hide();
_addContact->hide();
_deleteContact->show();
} else {
_edit->hide();
_leaveGroup->hide();
_addContact->show();
_deleteContact->hide();
}
_clearSelection->hide();
_info->hide();
_delete->hide();
_forward->hide();
_mediaType->hide();
_search->hide();
} else {
if (p && p->isChannel() && (p->asChannel()->amCreator() || (p->isMegagroup() && p->asChannel()->amEditor()))) {
_edit->show();
} else {
_edit->hide();
}
_leaveGroup->hide();
_addContact->hide();
_deleteContact->hide();
if (!p && _selCount) {
_clearSelection->show();
if (_canDelete) {
_delete->show();
} else {
_delete->hide();
}
_forward->show();
_mediaType->hide();
} else {
_clearSelection->hide();
_delete->hide();
_forward->hide();
if (App::main() && App::main()->mediaTypeSwitch()) {
_mediaType->show();
} else {
_mediaType->hide();
}
}
if (h && !o && !p && _clearSelection->isHidden()) {
if (Adaptive::OneColumn()) {
_info->setPeer(h);
_info->show();
} else {
_info->hide();
}
_search->show();
} else {
_search->hide();
_info->hide();
}
}
_sideShadow->setVisible(!Adaptive::OneColumn());
resizeEvent(nullptr);
}
void TopBarWidget::showSelected(uint32 selCount, bool canDelete) {
PeerData *p = App::main() ? App::main()->profilePeer() : 0;
_selPeer = App::main()->overviewPeer() ? App::main()->overviewPeer() : App::main()->peer();
_selCount = selCount;
_canDelete = canDelete;
_selStr = (_selCount > 0) ? lng_selected_count(lt_count, _selCount) : QString();
_selStrWidth = st::btnDefLink.font->width(_selStr);
setCursor((!p && _selCount) ? style::cur_default : style::cur_pointer);
showAll();
}
void TopBarWidget::updateAdaptiveLayout() {
showAll();
}
FlatButton *TopBarWidget::mediaTypeButton() {
return _mediaType;
}
MainWidget *TopBarWidget::main() {
return static_cast<MainWidget*>(parentWidget());
}
} // namespace Window

View File

@ -0,0 +1,114 @@
/*
This file is part of Telegram Desktop,
the official desktop version of Telegram messaging app, see https://telegram.org
Telegram Desktop is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
It is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
In addition, as a special exception, the copyright holders give permission
to link the code of portions of this program with the OpenSSL library.
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
*/
#pragma once
#include "ui/twidget.h"
namespace Ui {
class PeerAvatarButton;
} // namespace Ui
class FlatButton;
class IconedButton;
class PlainShadow;
namespace Window {
class TopBarWidget : public TWidget {
Q_OBJECT
public:
TopBarWidget(MainWidget *w);
void enterEvent(QEvent *e) override;
void enterFromChildEvent(QEvent *e) override;
void leaveEvent(QEvent *e) override;
void leaveToChildEvent(QEvent *e) override;
void paintEvent(QPaintEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void resizeEvent(QResizeEvent *e) override;
void step_appearance(float64 ms, bool timer);
void enableShadow(bool enable = true);
void startAnim();
void stopAnim();
void showAll();
void showSelected(uint32 selCount, bool canDelete = false);
void updateAdaptiveLayout();
FlatButton *mediaTypeButton();
void grabStart() override {
_sideShadow->hide();
}
void grabFinish() override {
_sideShadow->setVisible(!Adaptive::OneColumn());
}
public slots:
void onForwardSelection();
void onDeleteSelection();
void onClearSelection();
void onInfoClicked();
void onAddContact();
void onEdit();
void onDeleteContact();
void onDeleteContactSure();
void onDeleteAndExit();
void onDeleteAndExitSure();
void onSearch();
signals:
void clicked();
private:
MainWidget *main();
anim::fvalue a_over;
Animation _a_appearance;
PeerData *_selPeer = nullptr;
uint32 _selCount;
bool _canDelete;
QString _selStr;
int32 _selStrLeft, _selStrWidth;
bool _animating;
ChildWidget<FlatButton> _clearSelection;
ChildWidget<FlatButton> _forward, _delete;
int _selectionButtonsWidth, _forwardDeleteWidth;
ChildWidget<Ui::PeerAvatarButton> _info;
ChildWidget<FlatButton> _edit, _leaveGroup, _addContact, _deleteContact;
ChildWidget<FlatButton> _mediaType;
ChildWidget<IconedButton> _search;
ChildWidget<PlainShadow> _sideShadow;
};
} // namespace Window

View File

@ -348,6 +348,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_mainwindow.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_mediaview.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -435,6 +439,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_top_bar_widget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_twidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -443,10 +451,6 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_window.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_aboutbox.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -631,6 +635,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_mainwindow.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_mediaview.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -718,6 +726,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_top_bar_widget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_twidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -726,10 +738,6 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_window.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\lang_auto.cpp" />
<ClCompile Include="GeneratedFiles\numbers.cpp" />
<ClCompile Include="GeneratedFiles\qrc_telegram.cpp">
@ -940,6 +948,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_mainwindow.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_mediaview.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
@ -1027,6 +1039,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_top_bar_widget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_twidget.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
@ -1035,17 +1051,12 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_window.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="GeneratedFiles\style_auto.cpp" />
<ClCompile Include="SourceFiles\apiwrap.cpp" />
<ClCompile Include="SourceFiles\app.cpp" />
<ClCompile Include="SourceFiles\application.cpp" />
<ClCompile Include="SourceFiles\audio.cpp" />
<ClCompile Include="SourceFiles\autoupdater.cpp" />
<ClCompile Include="SourceFiles\basic_types.cpp" />
<ClCompile Include="SourceFiles\boxes\aboutbox.cpp" />
<ClCompile Include="SourceFiles\boxes\abstractbox.cpp" />
<ClCompile Include="SourceFiles\boxes\addcontactbox.cpp" />
@ -1063,6 +1074,9 @@
<ClCompile Include="SourceFiles\boxes\sessionsbox.cpp" />
<ClCompile Include="SourceFiles\boxes\stickersetbox.cpp" />
<ClCompile Include="SourceFiles\boxes\usernamebox.cpp" />
<ClCompile Include="SourceFiles\core\basic_types.cpp" />
<ClCompile Include="SourceFiles\core\click_handler.cpp" />
<ClCompile Include="SourceFiles\core\click_handler_types.cpp" />
<ClCompile Include="SourceFiles\dialogswidget.cpp" />
<ClCompile Include="SourceFiles\dialogs\dialogs_indexed_list.cpp" />
<ClCompile Include="SourceFiles\dialogs\dialogs_layout.cpp" />
@ -1107,6 +1121,7 @@
<ClCompile Include="SourceFiles\mtproto\scheme_auto.cpp" />
<ClCompile Include="SourceFiles\mtproto\session.cpp" />
<ClCompile Include="SourceFiles\overviewwidget.cpp" />
<ClCompile Include="SourceFiles\overview\overview_layout.cpp" />
<ClCompile Include="SourceFiles\passcodewidget.cpp" />
<ClCompile Include="SourceFiles\playerwidget.cpp" />
<ClCompile Include="SourceFiles\profilewidget.cpp" />
@ -1160,7 +1175,8 @@
<ClCompile Include="SourceFiles\ui\toast\toast_manager.cpp" />
<ClCompile Include="SourceFiles\ui\toast\toast_widget.cpp" />
<ClCompile Include="SourceFiles\ui\twidget.cpp" />
<ClCompile Include="SourceFiles\window.cpp" />
<ClCompile Include="SourceFiles\mainwindow.cpp" />
<ClCompile Include="SourceFiles\window\top_bar_widget.cpp" />
<ClCompile Include="ThirdParty\minizip\zip.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
@ -1213,25 +1229,28 @@
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/connection_tcp.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
</CustomBuild>
<CustomBuild Include="SourceFiles\basic_types.h">
<CustomBuild Include="SourceFiles\core\basic_types.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing basic_types.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/basic_types.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/core/basic_types.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing basic_types.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/basic_types.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl_debug\Debug\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/core/basic_types.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl_debug\Debug\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing basic_types.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/basic_types.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/core/basic_types.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
</CustomBuild>
<ClInclude Include="SourceFiles\core\click_handler.h" />
<ClInclude Include="SourceFiles\core\click_handler_types.h" />
<ClInclude Include="SourceFiles\dialogs\dialogs_common.h" />
<ClInclude Include="SourceFiles\dialogs\dialogs_indexed_list.h" />
<ClInclude Include="SourceFiles\dialogs\dialogs_layout.h" />
<ClInclude Include="SourceFiles\dialogs\dialogs_list.h" />
<ClInclude Include="SourceFiles\dialogs\dialogs_row.h" />
<ClInclude Include="SourceFiles\history\history_common.h" />
<ClInclude Include="SourceFiles\inline_bots\inline_bot_layout_internal.h" />
<ClInclude Include="SourceFiles\inline_bots\inline_bot_layout_item.h" />
<ClInclude Include="SourceFiles\inline_bots\inline_bot_result.h" />
@ -1339,6 +1358,7 @@
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/session.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
</CustomBuild>
<ClInclude Include="SourceFiles\overview\overview_layout.h" />
<ClInclude Include="SourceFiles\serialize\serialize_common.h" />
<ClInclude Include="SourceFiles\serialize\serialize_document.h" />
<ClInclude Include="SourceFiles\shortcuts.h" />
@ -1520,22 +1540,36 @@
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/ui/toast/toast_manager.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
</CustomBuild>
<ClInclude Include="SourceFiles\ui\toast\toast_widget.h" />
<CustomBuild Include="SourceFiles\window\top_bar_widget.h">
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing top_bar_widget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/window/top_bar_widget.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing top_bar_widget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/window/top_bar_widget.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl_debug\Debug\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing top_bar_widget.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/window/top_bar_widget.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
</CustomBuild>
<ClInclude Include="ThirdParty\minizip\crypt.h" />
<ClInclude Include="ThirdParty\minizip\ioapi.h" />
<ClInclude Include="ThirdParty\minizip\zip.h" />
<CustomBuild Include="SourceFiles\window.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing window.h...</Message>
<CustomBuild Include="SourceFiles\mainwindow.h">
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing mainwindow.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl_debug\Debug\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing window.h...</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing window.h...</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mainwindow.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl_debug\Debug\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing mainwindow.h...</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">Moc%27ing mainwindow.h...</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mainwindow.h" -DAL_LIBTYPE_STATIC -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mainwindow.h" -DAL_LIBTYPE_STATIC -DCUSTOM_API_ID -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG -D_SCL_SECURE_NO_WARNINGS "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\openssl\Release\include" "-I.\..\..\Libraries\ffmpeg" "-I.\..\..\Libraries\openal-soft\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I.\..\..\Libraries\breakpad\src" "-I.\ThirdParty\minizip" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.5.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.5.1\QtGui"</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Deploy|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
</CustomBuild>
<CustomBuild Include="Resources\style_classes.txt">
<Outputs>.\GeneratedFiles\style_classes.h</Outputs>

View File

@ -67,6 +67,18 @@
<Filter Include="ui\buttons">
<UniqueIdentifier>{24292a88-6707-4070-b2d2-8b53acd5cdd0}</UniqueIdentifier>
</Filter>
<Filter Include="core">
<UniqueIdentifier>{162feb92-08a4-4abf-9936-79c389d4fcb9}</UniqueIdentifier>
</Filter>
<Filter Include="history">
<UniqueIdentifier>{39b5a449-928d-4add-9610-95c03878d52f}</UniqueIdentifier>
</Filter>
<Filter Include="window">
<UniqueIdentifier>{0192d4a5-ecf0-4076-937a-d3a08443e543}</UniqueIdentifier>
</Filter>
<Filter Include="overview">
<UniqueIdentifier>{ddcc5634-90e7-4815-ba86-a3db539f4774}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="SourceFiles\main.cpp">
@ -99,9 +111,6 @@
<ClCompile Include="SourceFiles\app.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\window.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\dialogswidget.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -177,15 +186,6 @@
<ClCompile Include="SourceFiles\langloaderplain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_window.cpp">
<Filter>Generated Files\Deploy</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_window.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_window.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_title.cpp">
<Filter>Generated Files\Deploy</Filter>
</ClCompile>
@ -825,18 +825,6 @@
<ClCompile Include="GeneratedFiles\Release\moc_facade.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\basic_types.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_basic_types.cpp">
<Filter>Generated Files\Deploy</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_basic_types.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_basic_types.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\inline_bots\inline_bot_result.cpp">
<Filter>inline_bots</Filter>
</ClCompile>
@ -1035,6 +1023,51 @@
<ClCompile Include="SourceFiles\ui\buttons\peer_avatar_button.cpp">
<Filter>ui\buttons</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\window\top_bar_widget.cpp">
<Filter>window</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_top_bar_widget.cpp">
<Filter>Generated Files\Deploy</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_mainwindow.cpp">
<Filter>Generated Files\Deploy</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_mainwindow.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_mainwindow.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\mainwindow.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_top_bar_widget.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_top_bar_widget.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\core\click_handler.cpp">
<Filter>core</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\core\basic_types.cpp">
<Filter>core</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Deploy\moc_basic_types.cpp">
<Filter>Generated Files\Deploy</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Debug\moc_basic_types.cpp">
<Filter>Generated Files\Debug</Filter>
</ClCompile>
<ClCompile Include="GeneratedFiles\Release\moc_basic_types.cpp">
<Filter>Generated Files\Release</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\core\click_handler_types.cpp">
<Filter>core</Filter>
</ClCompile>
<ClCompile Include="SourceFiles\overview\overview_layout.cpp">
<Filter>overview</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="SourceFiles\stdafx.h">
@ -1175,6 +1208,18 @@
<ClInclude Include="SourceFiles\ui\buttons\peer_avatar_button.h">
<Filter>ui\buttons</Filter>
</ClInclude>
<ClInclude Include="SourceFiles\history\history_common.h">
<Filter>history</Filter>
</ClInclude>
<ClInclude Include="SourceFiles\core\click_handler.h">
<Filter>core</Filter>
</ClInclude>
<ClInclude Include="SourceFiles\core\click_handler_types.h">
<Filter>core</Filter>
</ClInclude>
<ClInclude Include="SourceFiles\overview\overview_layout.h">
<Filter>overview</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="SourceFiles\application.h">
@ -1183,9 +1228,6 @@
<CustomBuild Include="SourceFiles\mainwidget.h">
<Filter>Source Files</Filter>
</CustomBuild>
<CustomBuild Include="SourceFiles\window.h">
<Filter>Source Files</Filter>
</CustomBuild>
<CustomBuild Include="SourceFiles\dialogswidget.h">
<Filter>Source Files</Filter>
</CustomBuild>
@ -1378,9 +1420,6 @@
<CustomBuild Include="SourceFiles\facades.h">
<Filter>Source Files</Filter>
</CustomBuild>
<CustomBuild Include="SourceFiles\basic_types.h">
<Filter>Source Files</Filter>
</CustomBuild>
<CustomBuild Include="SourceFiles\ui\animation.h">
<Filter>ui</Filter>
</CustomBuild>
@ -1417,6 +1456,15 @@
<CustomBuild Include="SourceFiles\ui\toast\toast_manager.h">
<Filter>ui\toast</Filter>
</CustomBuild>
<CustomBuild Include="SourceFiles\window\top_bar_widget.h">
<Filter>window</Filter>
</CustomBuild>
<CustomBuild Include="SourceFiles\mainwindow.h">
<Filter>Source Files</Filter>
</CustomBuild>
<CustomBuild Include="SourceFiles\core\basic_types.h">
<Filter>core</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<None Include="Resources\langs\lang_it.strings">

View File

@ -162,7 +162,7 @@
5FC914F652D1B16FDA8F0634 /* moc_contactsbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 26083D8E535AFF927591E1A5 /* moc_contactsbox.cpp */; settings = {ATTRIBUTES = (); }; };
60CB4898955209B665E7B07D /* moc_twidget.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 55A654A2EE8554FF062742B8 /* moc_twidget.cpp */; settings = {ATTRIBUTES = (); }; };
668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9742F24EE18EA44D52824F1E /* CoreServices.framework */; };
68FFEB7CA30BF0149161B809 /* window.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CA56ACFB53D87637192CC9B2 /* window.cpp */; settings = {ATTRIBUTES = (); }; };
68FFEB7CA30BF0149161B809 /* mainwindow.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CA56ACFB53D87637192CC9B2 /* mainwindow.cpp */; settings = {ATTRIBUTES = (); }; };
6A8BC88AB464B92706EFE6FF /* moc_countryinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 9D9F4744B2F9FF22569D4535 /* moc_countryinput.cpp */; settings = {ATTRIBUTES = (); }; };
6C79FBC5CFA36AC3EA6ABBD4 /* moc_dropdown.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */; settings = {ATTRIBUTES = (); }; };
6E4DB0CBEF415196AFD4149F /* fileuploader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 9B36BB8C5B8CA7B07F3F35F0 /* fileuploader.cpp */; settings = {ATTRIBUTES = (); }; };
@ -194,7 +194,7 @@
9809A3AF1946D51ACB41D716 /* moc_photocropbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = AF61D864B8C444ADD4E1B391 /* moc_photocropbox.cpp */; settings = {ATTRIBUTES = (); }; };
98E4F55DB5D8E64AB9F08C83 /* moc_localimageloader.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 1D7899ACAA9F973CADFA34C1 /* moc_localimageloader.cpp */; settings = {ATTRIBUTES = (); }; };
99F0A9B2AFE5ABDCBFC04510 /* rpc_sender.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 89F92B278CA31C393E245056 /* rpc_sender.cpp */; settings = {ATTRIBUTES = (); }; };
9A0D5DDC7816FC2538EB6A96 /* moc_window.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */; settings = {ATTRIBUTES = (); }; };
9A0D5DDC7816FC2538EB6A96 /* moc_mainwindow.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6B46A0EE3C3B9D3B5A24946E /* moc_mainwindow.cpp */; settings = {ATTRIBUTES = (); }; };
9A523F51135FD4E2464673A6 /* moc_session.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 63AF8520023B4EA40306CB03 /* moc_session.cpp */; settings = {ATTRIBUTES = (); }; };
9D294F23E02CFDF22C288382 /* moc_emojibox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 0C0DC15EB416789673526AA5 /* moc_emojibox.cpp */; settings = {ATTRIBUTES = (); }; };
9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 04391BE7A8B9D811E255100A /* Qt5Gui */; };
@ -467,7 +467,7 @@
1A4C47331E186344291B8178 /* dropdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dropdown.h; path = SourceFiles/dropdown.h; sourceTree = "<absolute>"; };
1B4A65B84270FF2FED008EB6 /* moc_introphone.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_introphone.cpp; path = GeneratedFiles/Debug/moc_introphone.cpp; sourceTree = "<absolute>"; };
1D7899ACAA9F973CADFA34C1 /* moc_localimageloader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_localimageloader.cpp; path = GeneratedFiles/Debug/moc_localimageloader.cpp; sourceTree = "<absolute>"; };
1DC02F674A7192FF8BE391A7 /* basic_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = basic_types.h; path = SourceFiles/basic_types.h; sourceTree = "<absolute>"; };
1DC02F674A7192FF8BE391A7 /* basic_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = basic_types.h; path = SourceFiles/core/basic_types.h; sourceTree = "<absolute>"; };
1DEFC0760BB9340529F582F7 /* confirmbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = confirmbox.h; path = SourceFiles/boxes/confirmbox.h; sourceTree = "<absolute>"; };
1E5EEB5782B6357057356F9E /* moc_flatinput.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatinput.cpp; path = GeneratedFiles/Debug/moc_flatinput.cpp; sourceTree = "<absolute>"; };
1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = "<absolute>"; };
@ -494,7 +494,7 @@
2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = "<absolute>"; };
2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = "<absolute>"; };
2EA58EF6CDF368B0132BAEB9 /* settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = settings.h; path = SourceFiles/settings.h; sourceTree = "<absolute>"; };
301BB513F2F5D447B3BF22DF /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = SourceFiles/window.h; sourceTree = "<absolute>"; };
301BB513F2F5D447B3BF22DF /* mainwindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mainwindow.h; path = SourceFiles/mainwindow.h; sourceTree = "<absolute>"; };
311004331A04F3D69C98643C /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = "<absolute>"; };
31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.5.1/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = "<absolute>"; };
315C7FACB4A9E18AA95486CA /* dcenter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dcenter.cpp; path = SourceFiles/mtproto/dcenter.cpp; sourceTree = "<absolute>"; };
@ -563,7 +563,7 @@
6868ADA9E9A9801B2BA92B97 /* countryinput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = countryinput.h; path = SourceFiles/ui/countryinput.h; sourceTree = "<absolute>"; };
69347C39E4D922E94D0860BF /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = "<absolute>"; };
6A510365F9F6367ECB0DB065 /* images.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = images.cpp; path = SourceFiles/ui/images.cpp; sourceTree = "<absolute>"; };
6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_window.cpp; path = GeneratedFiles/Debug/moc_window.cpp; sourceTree = "<absolute>"; };
6B46A0EE3C3B9D3B5A24946E /* moc_mainwindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_mainwindow.cpp; path = GeneratedFiles/Debug/moc_mainwindow.cpp; sourceTree = "<absolute>"; };
6B90F69947805586A6FAE80E /* sysbuttons.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sysbuttons.cpp; path = SourceFiles/sysbuttons.cpp; sourceTree = "<absolute>"; };
6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = "<absolute>"; };
6C86B6E6AB1857B735B720D6 /* layerwidget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = layerwidget.h; path = SourceFiles/layerwidget.h; sourceTree = "<absolute>"; };
@ -583,7 +583,7 @@
7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = "<absolute>"; };
7CA6945B22800A0F30B75DA5 /* addcontactbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = addcontactbox.cpp; path = SourceFiles/boxes/addcontactbox.cpp; sourceTree = "<absolute>"; };
7CDE9D7CB2C729BC3612372B /* addcontactbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = addcontactbox.h; path = SourceFiles/boxes/addcontactbox.h; sourceTree = "<absolute>"; };
7D075A915E8739C1B6BC5F43 /* basic_types.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = basic_types.cpp; path = SourceFiles/basic_types.cpp; sourceTree = "<absolute>"; };
7D075A915E8739C1B6BC5F43 /* basic_types.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = basic_types.cpp; path = SourceFiles/core/basic_types.cpp; sourceTree = "<absolute>"; };
7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = "<absolute>"; };
7DBFC0B5EAF874BA10E3D603 /* scheme_auto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scheme_auto.h; path = SourceFiles/mtproto/scheme_auto.h; sourceTree = "<absolute>"; };
7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_lib_sql.pri"; sourceTree = "<absolute>"; };
@ -703,7 +703,7 @@
C84546C18DCBB04166195DCF /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = "<absolute>"; };
C913E6A1001E07EE7C13CE93 /* style.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = style.h; path = SourceFiles/ui/style.h; sourceTree = "<absolute>"; };
C9FFCCE4FCB845744636795F /* moc_flatbutton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_flatbutton.cpp; path = GeneratedFiles/Debug/moc_flatbutton.cpp; sourceTree = "<absolute>"; };
CA56ACFB53D87637192CC9B2 /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window.cpp; path = SourceFiles/window.cpp; sourceTree = "<absolute>"; };
CA56ACFB53D87637192CC9B2 /* mainwindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mainwindow.cpp; path = SourceFiles/mainwindow.cpp; sourceTree = "<absolute>"; };
CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.5.1/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.5.1/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = "<absolute>"; };
CE0D5EFE401BF9815FACE579 /* pspecific_mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pspecific_mac.h; path = SourceFiles/pspecific_mac.h; sourceTree = "<absolute>"; };
CE7FFE194127BD789A2C877A /* moc_confirmbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = moc_confirmbox.cpp; path = GeneratedFiles/Debug/moc_confirmbox.cpp; sourceTree = "<absolute>"; };
@ -1148,8 +1148,8 @@
3BE70E2A82DC2BF402165ED5 /* sysbuttons.h */,
2BB2A1BB8DB0993F78F4E3C7 /* title.cpp */,
4D504A849F15EB58E53A4E5F /* title.h */,
CA56ACFB53D87637192CC9B2 /* window.cpp */,
301BB513F2F5D447B3BF22DF /* window.h */,
CA56ACFB53D87637192CC9B2 /* mainwindow.cpp */,
301BB513F2F5D447B3BF22DF /* mainwindow.h */,
24F7D3E789E91B10E422C116 /* config.h */,
C913E6A1001E07EE7C13CE93 /* style.h */,
);
@ -1327,7 +1327,7 @@
93AFE74928551FC3D7E8390B /* moc_settingswidget.cpp */,
B88236FC554B694F618D848C /* moc_sysbuttons.cpp */,
1080B6D395843B8F76A2E45E /* moc_title.cpp */,
6B46A0EE3C3B9D3B5A24946E /* moc_window.cpp */,
6B46A0EE3C3B9D3B5A24946E /* moc_mainwindow.cpp */,
924D4939FD169BB4B8AEB1C9 /* moc_facade.cpp */,
B714EA71A09A832FAA846A0A /* moc_connection.cpp */,
2C540BAEABD7F9B5FA11008E /* moc_dcenter.cpp */,
@ -1707,7 +1707,7 @@
5CE57D44510AB2A11886AB52 /* title.cpp in Compile Sources */,
077A4AF81CA41C38002188D2 /* connection_auto.cpp in Compile Sources */,
4078D5D614EB3ECF7F1848C7 /* basic_types.cpp in Compile Sources */,
68FFEB7CA30BF0149161B809 /* window.cpp in Compile Sources */,
68FFEB7CA30BF0149161B809 /* mainwindow.cpp in Compile Sources */,
0CB7DE9A54CC9BF86FB7B5CA /* facade.cpp in Compile Sources */,
DF259E9677CC63AF8754032B /* connection.cpp in Compile Sources */,
074FCB9119D36E60004C6EB2 /* moc_popupmenu.cpp in Compile Sources */,
@ -1793,7 +1793,7 @@
FD2FE0C564A7389A2E609EC7 /* moc_sysbuttons.cpp in Compile Sources */,
E97B3CFAB59B49BACFFC5F7C /* moc_title.cpp in Compile Sources */,
07D8510819F8340A00623D75 /* moc_usernamebox.cpp in Compile Sources */,
9A0D5DDC7816FC2538EB6A96 /* moc_window.cpp in Compile Sources */,
9A0D5DDC7816FC2538EB6A96 /* moc_mainwindow.cpp in Compile Sources */,
06EABCC49D2EEE4076322BE7 /* moc_facade.cpp in Compile Sources */,
0755AEDE1AD12A80004D738A /* moc_intropwdcheck.cpp in Compile Sources */,
07DE92AA1AA4928200A18F6F /* moc_autolockbox.cpp in Compile Sources */,

View File

@ -56,7 +56,7 @@ compilers: GeneratedFiles/qrc_telegram.cpp\
GeneratedFiles/Debug/moc_sysbuttons.cpp\
GeneratedFiles/Debug/moc_title.cpp\
GeneratedFiles/Debug/moc_basic_types.cpp\
GeneratedFiles/Debug/moc_window.cpp\
GeneratedFiles/Debug/moc_mainwindow.cpp\
GeneratedFiles/Debug/moc_facade.cpp\
GeneratedFiles/Debug/moc_connection.cpp\
GeneratedFiles/Debug/moc_connection_abstract.cpp\
@ -181,7 +181,7 @@ compiler_moc_header_make_all: GeneratedFiles/Debug/moc_apiwrap.cpp\
GeneratedFiles/Debug/moc_sysbuttons.cpp\
GeneratedFiles/Debug/moc_title.cpp\
GeneratedFiles/Debug/moc_basic_types.cpp\
GeneratedFiles/Debug/moc_window.cpp\
GeneratedFiles/Debug/moc_mainwindow.cpp\
GeneratedFiles/Debug/moc_facade.cpp\
GeneratedFiles/Debug/moc_connection.cpp\
GeneratedFiles/Debug/moc_connection_abstract.cpp\
@ -249,7 +249,7 @@ compiler_moc_header_clean:
GeneratedFiles/Debug/moc_sysbuttons.cpp\
GeneratedFiles/Debug/moc_title.cpp\
GeneratedFiles/Debug/moc_basic_types.cpp\
GeneratedFiles/Debug/moc_window.cpp\
GeneratedFiles/Debug/moc_mainwindow.cpp\
GeneratedFiles/Debug/moc_facade.cpp\
GeneratedFiles/Debug/moc_connection.cpp\
GeneratedFiles/Debug/moc_connection_abstract.cpp\
@ -294,7 +294,7 @@ compiler_moc_header_clean:
GeneratedFiles/Debug/moc_intropwdcheck.cpp\
GeneratedFiles/Debug/moc_introsignup.cpp\
GeneratedFiles/Debug/moc_pspecific_mac.cpp
GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/basic_types.h \
GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/core/basic_types.h \
SourceFiles/logs.h \
SourceFiles/apiwrap.h
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/apiwrap.h -o GeneratedFiles/Debug/moc_apiwrap.cpp
@ -302,12 +302,12 @@ GeneratedFiles/Debug/moc_apiwrap.cpp: SourceFiles/basic_types.h \
GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalSocket \
../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalServer \
../../Libraries/QtStatic/qtbase/include/QtNetwork/QNetworkReply \
SourceFiles/window.h \
SourceFiles/mainwindow.h \
SourceFiles/title.h \
../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \
SourceFiles/sysbuttons.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -323,7 +323,7 @@ GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/includ
SourceFiles/application.h
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/application.h -o GeneratedFiles/Debug/moc_application.cpp
GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/basic_types.h \
GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/core/basic_types.h \
SourceFiles/audio.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
@ -331,7 +331,7 @@ GeneratedFiles/Debug/moc_audio.cpp: SourceFiles/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtGui/QColor
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/audio.h -o GeneratedFiles/Debug/moc_audio.cpp
GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/basic_types.h \
GeneratedFiles/Debug/moc_autoupdater.cpp: SourceFiles/core/basic_types.h \
SourceFiles/autoupdater.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
@ -393,7 +393,7 @@ GeneratedFiles/Debug/moc_mainwidget.cpp: ../../Libraries/QtStatic/qtbase/include
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -417,7 +417,7 @@ GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/ui/flatbutton.h \
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -431,7 +431,7 @@ GeneratedFiles/Debug/moc_settingswidget.cpp: SourceFiles/ui/flatbutton.h \
GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -445,7 +445,7 @@ GeneratedFiles/Debug/moc_sysbuttons.cpp: ../../Libraries/QtStatic/qtbase/include
GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \
SourceFiles/sysbuttons.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -455,18 +455,18 @@ GeneratedFiles/Debug/moc_title.cpp: ../../Libraries/QtStatic/qtbase/include/QtWi
SourceFiles/title.h
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/title.h -o GeneratedFiles/Debug/moc_title.cpp
GeneratedFiles/Debug/moc_basic_types.cpp: SourceFiles/basic_types.h \
GeneratedFiles/Debug/moc_basic_types.cpp: SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/basic_types.h -o GeneratedFiles/Debug/moc_basic_types.cpp
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/core/basic_types.h -o GeneratedFiles/Debug/moc_basic_types.cpp
GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \
GeneratedFiles/Debug/moc_mainwindow.cpp: SourceFiles/title.h \
../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \
SourceFiles/sysbuttons.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -481,8 +481,8 @@ GeneratedFiles/Debug/moc_window.cpp: SourceFiles/title.h \
SourceFiles/pspecific_winrt.h \
SourceFiles/passcodewidget.h \
SourceFiles/ui/boxshadow.h \
SourceFiles/window.h
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/window.h -o GeneratedFiles/Debug/moc_window.cpp
SourceFiles/mainwindow.h
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mainwindow.h -o GeneratedFiles/Debug/moc_mainwindow.cpp
GeneratedFiles/Debug/moc_facade.cpp: SourceFiles/mtproto/session.h \
SourceFiles/mtproto/connection.h \
@ -491,7 +491,7 @@ GeneratedFiles/Debug/moc_facade.cpp: SourceFiles/mtproto/session.h \
SourceFiles/mtproto/connection_http.h \
SourceFiles/mtproto/connection_tcp.h \
SourceFiles/mtproto/core_types.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
SourceFiles/mtproto/scheme_auto.h \
@ -504,7 +504,7 @@ GeneratedFiles/Debug/moc_facade.cpp: SourceFiles/mtproto/session.h \
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/facade.h -o GeneratedFiles/Debug/moc_facade.cpp
GeneratedFiles/Debug/moc_connection.cpp: SourceFiles/mtproto/core_types.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
SourceFiles/mtproto/scheme_auto.h \
@ -514,7 +514,7 @@ GeneratedFiles/Debug/moc_connection.cpp: SourceFiles/mtproto/core_types.h \
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/connection.h -o GeneratedFiles/Debug/moc_connection.cpp
GeneratedFiles/Debug/moc_connection_abstract.cpp: SourceFiles/mtproto/core_types.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
SourceFiles/mtproto/scheme_auto.h \
@ -524,7 +524,7 @@ GeneratedFiles/Debug/moc_connection_abstract.cpp: SourceFiles/mtproto/core_types
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/connection_abstract.h -o GeneratedFiles/Debug/moc_connection_abstract.cpp
GeneratedFiles/Debug/moc_connection_auto.cpp: SourceFiles/mtproto/core_types.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
SourceFiles/mtproto/scheme_auto.h \
@ -534,7 +534,7 @@ GeneratedFiles/Debug/moc_connection_auto.cpp: SourceFiles/mtproto/core_types.h \
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/connection_auto.h -o GeneratedFiles/Debug/moc_connection_auto.cpp
GeneratedFiles/Debug/moc_connection_http.cpp: SourceFiles/mtproto/core_types.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
SourceFiles/mtproto/scheme_auto.h \
@ -544,7 +544,7 @@ GeneratedFiles/Debug/moc_connection_http.cpp: SourceFiles/mtproto/core_types.h \
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/connection_http.h -o GeneratedFiles/Debug/moc_connection_http.cpp
GeneratedFiles/Debug/moc_connection_tcp.cpp: SourceFiles/mtproto/core_types.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
SourceFiles/mtproto/scheme_auto.h \
@ -565,7 +565,7 @@ GeneratedFiles/Debug/moc_session.cpp: SourceFiles/mtproto/connection.h \
SourceFiles/mtproto/connection_http.h \
SourceFiles/mtproto/connection_tcp.h \
SourceFiles/mtproto/core_types.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
SourceFiles/mtproto/scheme_auto.h \
@ -576,7 +576,7 @@ GeneratedFiles/Debug/moc_session.cpp: SourceFiles/mtproto/connection.h \
SourceFiles/mtproto/session.h
/usr/local/Qt-5.5.1/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.5.1/mkspecs/macx-clang -I. -I/usr/local/Qt-5.5.1/include/QtGui/5.5.1/QtGui -I/usr/local/Qt-5.5.1/include/QtCore/5.5.1/QtCore -I/usr/local/Qt-5.5.1/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtWidgets -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/mtproto/session.h -o GeneratedFiles/Debug/moc_session.cpp
GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/basic_types.h \
GeneratedFiles/Debug/moc_animation.cpp: SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -604,7 +604,7 @@ GeneratedFiles/Debug/moc_countryinput.cpp: ../../Libraries/QtStatic/qtbase/inclu
SourceFiles/ui/flatinput.h \
../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -624,7 +624,7 @@ GeneratedFiles/Debug/moc_flatbutton.cpp: SourceFiles/ui/button.h \
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -646,7 +646,7 @@ GeneratedFiles/Debug/moc_flatinput.cpp: ../../Libraries/QtStatic/qtbase/include/
GeneratedFiles/style_classes.h \
GeneratedFiles/style_auto.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -665,7 +665,7 @@ GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/inclu
GeneratedFiles/style_classes.h \
GeneratedFiles/style_auto.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -721,7 +721,7 @@ GeneratedFiles/Debug/moc_connectionbox.cpp: SourceFiles/boxes/abstractbox.h \
GeneratedFiles/style_classes.h \
GeneratedFiles/style_auto.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -742,7 +742,7 @@ GeneratedFiles/Debug/moc_downloadpathbox.cpp: SourceFiles/boxes/abstractbox.h \
GeneratedFiles/style_classes.h \
GeneratedFiles/style_auto.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -799,7 +799,7 @@ GeneratedFiles/Debug/moc_introwidget.cpp: ../../Libraries/QtStatic/qtbase/includ
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -816,7 +816,7 @@ GeneratedFiles/Debug/moc_introcode.cpp: ../../Libraries/QtStatic/qtbase/include/
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -836,7 +836,7 @@ GeneratedFiles/Debug/moc_introphone.cpp: ../../Libraries/QtStatic/qtbase/include
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -860,7 +860,7 @@ GeneratedFiles/Debug/moc_intropwdcheck.cpp: ../../Libraries/QtStatic/qtbase/incl
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \
@ -884,7 +884,7 @@ GeneratedFiles/Debug/moc_introsignup.cpp: ../../Libraries/QtStatic/qtbase/includ
SourceFiles/ui/twidget.h \
SourceFiles/ui/flatcheckbox.h \
SourceFiles/ui/animation.h \
SourceFiles/basic_types.h \
SourceFiles/core/basic_types.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \
SourceFiles/logs.h \
../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \