mirror of
https://github.com/vale981/tdesktop
synced 2025-03-06 18:21:42 -05:00

When updating local online status from user action events we use action timestamp, and ignoring events from getDifference, if no timestamp is available for the specific action. Couple of hidden actions added in Settings. Alpha version 0.9.54.
375 lines
8.4 KiB
C++
375 lines
8.4 KiB
C++
/*
|
|
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/flatbutton.h"
|
|
#include "ui/flatcheckbox.h"
|
|
#include "sysbuttons.h"
|
|
#include "core/observer.h"
|
|
|
|
class MainWindow;
|
|
class Settings;
|
|
|
|
class Slider : public QWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
Slider(QWidget *parent, const style::slider &st, int32 count, int32 sel = 0);
|
|
|
|
void mousePressEvent(QMouseEvent *e);
|
|
void mouseMoveEvent(QMouseEvent *e);
|
|
void mouseReleaseEvent(QMouseEvent *e);
|
|
|
|
int32 selected() const;
|
|
void setSelected(int32 sel);
|
|
|
|
void paintEvent(QPaintEvent *e);
|
|
|
|
signals:
|
|
|
|
void changed(int32 oldSelected);
|
|
|
|
private:
|
|
|
|
int32 _count, _sel, _wasSel;
|
|
style::slider _st;
|
|
bool _pressed;
|
|
|
|
};
|
|
|
|
namespace Notify {
|
|
struct PeerUpdate;
|
|
} // namespace Notify
|
|
|
|
class SettingsInner : public TWidget, public RPCSender, public Notify::Observer {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
SettingsInner(SettingsWidget *parent);
|
|
|
|
void paintEvent(QPaintEvent *e);
|
|
void resizeEvent(QResizeEvent *e);
|
|
void keyPressEvent(QKeyEvent *e);
|
|
void mouseMoveEvent(QMouseEvent *e);
|
|
void mousePressEvent(QMouseEvent *e);
|
|
void contextMenuEvent(QContextMenuEvent *e);
|
|
|
|
void updateAdaptiveLayout();
|
|
|
|
void step_photo(float64 ms, bool timer);
|
|
|
|
void updateSize(int32 newWidth);
|
|
|
|
void updateOnlineDisplay();
|
|
|
|
void showAll();
|
|
|
|
void chooseCustomLang();
|
|
|
|
void updateChatBackground();
|
|
void needBackgroundUpdate(bool tile);
|
|
void enableDisplayNotify(bool enable);
|
|
|
|
public slots:
|
|
|
|
void usernameChanged();
|
|
void updateConnectionType();
|
|
|
|
void passcodeChanged();
|
|
|
|
void updateBackgroundRect();
|
|
|
|
void peerUpdated(PeerData *data);
|
|
|
|
void onUpdatePhoto();
|
|
void onUpdatePhotoCancel();
|
|
|
|
#ifndef TDESKTOP_DISABLE_AUTOUPDATE
|
|
void onAutoUpdate();
|
|
void onCheckNow();
|
|
#endif
|
|
void onRestartNow();
|
|
|
|
void onFullPeerUpdated(PeerData *peer);
|
|
|
|
void onPasscode();
|
|
void onPasscodeOff();
|
|
void onAutoLock();
|
|
void onPassword();
|
|
void onPasswordOff();
|
|
void onReloadPassword(Qt::ApplicationState state = Qt::ApplicationActive);
|
|
|
|
#ifndef TDESKTOP_DISABLE_NETWORK_PROXY
|
|
void onConnectionType();
|
|
#endif
|
|
|
|
void onUsername();
|
|
|
|
void onWorkmodeTray();
|
|
void onWorkmodeWindow();
|
|
|
|
void onAutoStart();
|
|
void onStartMinimized();
|
|
void onSendToMenu();
|
|
|
|
void onScaleAuto();
|
|
void onScaleChange();
|
|
|
|
void onSoundNotify();
|
|
void onIncludeMuted();
|
|
void onDesktopNotify();
|
|
void onSenderName();
|
|
void onMessagePreview();
|
|
|
|
void onWindowsNotifications();
|
|
|
|
void onReplaceEmojis();
|
|
void onViewEmojis();
|
|
void onStickers();
|
|
|
|
void onEnterSend();
|
|
void onCtrlEnterSend();
|
|
|
|
void onDontAskDownloadPath();
|
|
void onDownloadPathEdit();
|
|
void onDownloadPathEdited();
|
|
void onDownloadPathClear();
|
|
void onDownloadPathClearSure();
|
|
void onTempDirCleared(int task);
|
|
void onTempDirClearFailed(int task);
|
|
|
|
void onAutoDownload();
|
|
|
|
void onBackFromGallery();
|
|
void onBackFromFile();
|
|
void onTileBackground();
|
|
void onAdaptiveForWide();
|
|
|
|
void onLocalStorageClear();
|
|
|
|
#ifndef TDESKTOP_DISABLE_AUTOUPDATE
|
|
void onUpdateChecking();
|
|
void onUpdateLatest();
|
|
void onUpdateDownloading(qint64 ready, qint64 total);
|
|
void onUpdateReady();
|
|
void onUpdateFailed();
|
|
#endif
|
|
|
|
void onShowSessions();
|
|
|
|
void onPhotoUpdateDone(PeerId peer);
|
|
void onPhotoUpdateFail(PeerId peer);
|
|
void onPhotoUpdateStart();
|
|
|
|
void onChangeLanguage();
|
|
void onSaveTestLang();
|
|
|
|
void onUpdateLocalStorage();
|
|
|
|
private slots:
|
|
void onClearStickers();
|
|
void onSwitchModerateMode();
|
|
|
|
void onAskQuestion();
|
|
void onAskQuestionSure();
|
|
void onTelegramFAQ();
|
|
|
|
private:
|
|
void notifyPeerUpdated(const Notify::PeerUpdate &update);
|
|
|
|
void saveError(const QString &str = QString());
|
|
|
|
void supportGot(const MTPhelp_Support &support);
|
|
|
|
void setScale(DBIScale newScale);
|
|
|
|
QString _testlang, _secretText;
|
|
|
|
UserData *_self;
|
|
UserData *self() const {
|
|
return App::self() ? _self : static_cast<UserData*>(0);
|
|
}
|
|
int32 _left;
|
|
|
|
// profile
|
|
Text _nameText;
|
|
QString _nameCache;
|
|
ClickHandlerPtr _photoLink;
|
|
FlatButton _uploadPhoto;
|
|
LinkButton _cancelPhoto;
|
|
bool _nameOver, _photoOver;
|
|
anim::fvalue a_photoOver;
|
|
Animation _a_photo;
|
|
|
|
QString _errorText;
|
|
|
|
// contact info
|
|
QString _phoneText;
|
|
LinkButton _chooseUsername;
|
|
|
|
// notifications
|
|
FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify, _includeMuted;
|
|
|
|
// general
|
|
LinkButton _changeLanguage;
|
|
#ifndef TDESKTOP_DISABLE_AUTOUPDATE
|
|
FlatCheckbox _autoUpdate;
|
|
LinkButton _checkNow, _restartNow;
|
|
#endif
|
|
bool _supportTray; // cSupportTray() value on settings create
|
|
FlatCheckbox _workmodeTray, _workmodeWindow;
|
|
FlatCheckbox _autoStart, _startMinimized, _sendToMenu;
|
|
FlatCheckbox _dpiAutoScale;
|
|
Slider _dpiSlider;
|
|
int32 _dpiWidth1, _dpiWidth2, _dpiWidth3, _dpiWidth4;
|
|
|
|
QString _curVersionText, _newVersionText;
|
|
int32 _curVersionWidth, _newVersionWidth;
|
|
|
|
#ifndef TDESKTOP_DISABLE_AUTOUPDATE
|
|
enum UpdatingState {
|
|
UpdatingNone,
|
|
UpdatingCheck,
|
|
UpdatingLatest,
|
|
UpdatingDownload,
|
|
UpdatingFail,
|
|
UpdatingReady
|
|
};
|
|
UpdatingState _updatingState;
|
|
QString _newVersionDownload;
|
|
#endif
|
|
|
|
// chat options
|
|
FlatCheckbox _replaceEmojis;
|
|
LinkButton _viewEmojis, _stickers;
|
|
FlatRadiobutton _enterSend, _ctrlEnterSend;
|
|
FlatCheckbox _dontAskDownloadPath;
|
|
int32 _downloadPathWidth;
|
|
LinkButton _downloadPathEdit, _downloadPathClear;
|
|
int32 _tempDirClearingWidth, _tempDirClearedWidth, _tempDirClearFailedWidth;
|
|
enum TempDirClearState {
|
|
TempDirClearFailed = 0,
|
|
TempDirEmpty = 1,
|
|
TempDirExists = 2,
|
|
TempDirClearing = 3,
|
|
TempDirCleared = 4,
|
|
};
|
|
TempDirClearState _tempDirClearState;
|
|
LinkButton _autoDownload;
|
|
|
|
// local storage
|
|
LinkButton _localStorageClear;
|
|
int32 _localStorageHeight;
|
|
int32 _storageClearingWidth, _storageClearedWidth, _storageClearFailedWidth;
|
|
TempDirClearState _storageClearState;
|
|
|
|
// chat background
|
|
QPixmap _background;
|
|
LinkButton _backFromGallery, _backFromFile;
|
|
FlatCheckbox _tileBackground, _adaptiveForWide;
|
|
bool _needBackgroundUpdate;
|
|
|
|
// Radial animation interface.
|
|
RadialAnimation _radial;
|
|
float64 radialProgress() const;
|
|
bool radialLoading() const;
|
|
QRect radialRect() const;
|
|
void radialStart();
|
|
uint64 radialTimeShift() const;
|
|
void step_radial(uint64 ms, bool timer);
|
|
|
|
// advanced
|
|
LinkButton _passcodeEdit, _passcodeTurnOff, _autoLock;
|
|
QString _autoLockText;
|
|
int32 _autoLockWidth;
|
|
LinkButton _passwordEdit, _passwordTurnOff;
|
|
QString _waitingConfirm;
|
|
QByteArray _curPasswordSalt;
|
|
bool _hasPasswordRecovery;
|
|
QString _curPasswordHint;
|
|
QByteArray _newPasswordSalt;
|
|
LinkButton _connectionType;
|
|
QString _connectionTypeText;
|
|
int32 _connectionTypeWidth;
|
|
LinkButton _showSessions, _askQuestion, _telegramFAQ, _logOut;
|
|
|
|
mtpRequestId _supportGetRequest;
|
|
|
|
void gotPassword(const MTPaccount_Password &result);
|
|
void offPasswordDone(const MTPBool &result);
|
|
bool offPasswordFail(const RPCError &error);
|
|
|
|
#ifndef TDESKTOP_DISABLE_AUTOUPDATE
|
|
void setUpdatingState(UpdatingState state, bool force = false);
|
|
void setDownloadProgress(qint64 ready, qint64 total);
|
|
#endif
|
|
};
|
|
|
|
class SettingsWidget : public TWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
SettingsWidget(MainWindow *parent);
|
|
|
|
void paintEvent(QPaintEvent *e);
|
|
void resizeEvent(QResizeEvent *e);
|
|
void dragEnterEvent(QDragEnterEvent *e);
|
|
void dropEvent(QDropEvent *e);
|
|
|
|
void updateAdaptiveLayout();
|
|
|
|
void animShow(const QPixmap &bgAnimCache, bool back = false);
|
|
void step_show(float64 ms, bool timer);
|
|
void stop_show();
|
|
|
|
void updateOnlineDisplay();
|
|
void updateConnectionType();
|
|
|
|
void updateDisplayNotify();
|
|
|
|
void rpcClear();
|
|
|
|
void setInnerFocus();
|
|
void needBackgroundUpdate(bool tile);
|
|
|
|
~SettingsWidget();
|
|
|
|
public slots:
|
|
|
|
void onParentResize(const QSize &newSize);
|
|
|
|
private:
|
|
|
|
void showAll();
|
|
void hideAll();
|
|
|
|
Animation _a_show;
|
|
QPixmap _cacheUnder, _cacheOver;
|
|
anim::ivalue a_coordUnder, a_coordOver;
|
|
anim::fvalue a_shadow;
|
|
|
|
ScrollArea _scroll;
|
|
SettingsInner _inner;
|
|
IconedButton _close;
|
|
};
|