2016-04-12 21:31:28 +00:00
|
|
|
/*
|
|
|
|
This file is part of Telegram Desktop,
|
2018-01-03 10:23:14 +00:00
|
|
|
the official desktop application for the Telegram messaging service.
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2018-01-03 10:23:14 +00:00
|
|
|
For license and copyright information please follow this link:
|
|
|
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
2016-04-12 21:31:28 +00:00
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
2017-09-16 16:53:41 +00:00
|
|
|
#include "ui/rp_widget.h"
|
2017-11-13 08:05:56 +00:00
|
|
|
#include "base/timer.h"
|
2018-01-22 17:39:20 +00:00
|
|
|
#include "dialogs/dialogs_key.h"
|
2016-04-12 21:31:28 +00:00
|
|
|
|
|
|
|
namespace Ui {
|
2018-01-30 14:31:25 +00:00
|
|
|
class AbstractButton;
|
2016-06-07 19:59:39 +00:00
|
|
|
class RoundButton;
|
2016-11-05 08:36:24 +00:00
|
|
|
class IconButton;
|
|
|
|
class DropdownMenu;
|
2017-12-17 11:04:47 +00:00
|
|
|
class UnreadBadge;
|
2018-05-10 10:16:21 +00:00
|
|
|
class InfiniteRadialAnimation;
|
2016-04-12 21:31:28 +00:00
|
|
|
} // namespace Ui
|
|
|
|
|
|
|
|
namespace Window {
|
2017-03-27 12:24:38 +00:00
|
|
|
class Controller;
|
2017-11-13 08:05:56 +00:00
|
|
|
} // namespace Window
|
2017-03-27 12:24:38 +00:00
|
|
|
|
2018-01-09 17:08:31 +00:00
|
|
|
namespace HistoryView {
|
|
|
|
|
|
|
|
class TopBarWidget : public Ui::RpWidget, private base::Subscriber {
|
2016-04-12 21:31:28 +00:00
|
|
|
public:
|
2018-01-09 17:08:31 +00:00
|
|
|
TopBarWidget(
|
2017-11-13 08:05:56 +00:00
|
|
|
QWidget *parent,
|
|
|
|
not_null<Window::Controller*> controller);
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2017-04-27 21:17:00 +00:00
|
|
|
struct SelectedState {
|
|
|
|
bool textSelected = false;
|
|
|
|
int count = 0;
|
|
|
|
int canDeleteCount = 0;
|
|
|
|
int canForwardCount = 0;
|
|
|
|
};
|
|
|
|
|
2018-05-10 10:16:21 +00:00
|
|
|
~TopBarWidget();
|
|
|
|
|
2017-04-28 17:16:14 +00:00
|
|
|
void updateControlsVisibility();
|
2017-12-02 10:22:48 +00:00
|
|
|
void finishAnimating();
|
2017-04-27 21:17:00 +00:00
|
|
|
void showSelected(SelectedState state);
|
2017-11-13 08:05:56 +00:00
|
|
|
rpl::producer<bool> membersShowAreaActive() const {
|
|
|
|
return _membersShowAreaActive.events();
|
|
|
|
}
|
2018-01-09 17:08:31 +00:00
|
|
|
void setAnimatingMode(bool enabled);
|
2016-06-17 18:18:01 +00:00
|
|
|
|
2018-01-22 17:39:20 +00:00
|
|
|
void setActiveChat(Dialogs::Key chat);
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2018-01-26 15:40:11 +00:00
|
|
|
rpl::producer<> forwardSelectionRequest() const {
|
|
|
|
return _forwardSelection.events();
|
|
|
|
}
|
|
|
|
rpl::producer<> deleteSelectionRequest() const {
|
|
|
|
return _deleteSelection.events();
|
|
|
|
}
|
|
|
|
rpl::producer<> clearSelectionRequest() const {
|
|
|
|
return _clearSelection.events();
|
|
|
|
}
|
|
|
|
|
2016-06-17 18:18:01 +00:00
|
|
|
protected:
|
2016-11-19 09:22:53 +00:00
|
|
|
void paintEvent(QPaintEvent *e) override;
|
|
|
|
void mousePressEvent(QMouseEvent *e) override;
|
|
|
|
void resizeEvent(QResizeEvent *e) override;
|
2016-06-17 18:18:01 +00:00
|
|
|
bool eventFilter(QObject *obj, QEvent *e) override;
|
|
|
|
|
2018-01-22 17:39:20 +00:00
|
|
|
int resizeGetHeight(int newWidth) override;
|
|
|
|
|
2016-11-05 08:36:24 +00:00
|
|
|
private:
|
2018-01-30 14:31:25 +00:00
|
|
|
void refreshInfoButton();
|
2017-05-30 15:21:05 +00:00
|
|
|
void refreshLang();
|
2016-12-26 22:46:36 +00:00
|
|
|
void updateControlsGeometry();
|
|
|
|
void selectedShowCallback();
|
2017-09-16 16:53:41 +00:00
|
|
|
void updateInfoToggleActive();
|
2016-12-26 22:46:36 +00:00
|
|
|
|
2017-04-19 18:06:01 +00:00
|
|
|
void onCall();
|
2016-04-12 21:31:28 +00:00
|
|
|
void onSearch();
|
2016-11-05 08:36:24 +00:00
|
|
|
void showMenu();
|
2017-09-16 16:53:41 +00:00
|
|
|
void toggleInfoSection();
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2018-05-10 10:16:21 +00:00
|
|
|
void updateConnectingState();
|
2016-08-27 04:49:18 +00:00
|
|
|
void updateAdaptiveLayout();
|
2016-12-26 22:46:36 +00:00
|
|
|
int countSelectedButtonsTop(float64 selectedShown);
|
2018-05-10 10:16:21 +00:00
|
|
|
void step_connecting(TimeMs ms, bool timer);
|
2016-08-27 04:49:18 +00:00
|
|
|
|
2017-11-16 15:24:01 +00:00
|
|
|
void paintTopBar(Painter &p, TimeMs ms);
|
2018-05-10 10:16:21 +00:00
|
|
|
void paintStatus(
|
|
|
|
Painter &p,
|
|
|
|
int left,
|
|
|
|
int top,
|
|
|
|
int availableWidth,
|
|
|
|
int outerWidth);
|
|
|
|
bool paintConnectingState(
|
|
|
|
Painter &p,
|
|
|
|
int left,
|
|
|
|
int top,
|
|
|
|
int outerWidth,
|
|
|
|
TimeMs ms);
|
2017-11-13 08:05:56 +00:00
|
|
|
QRect getMembersShowAreaGeometry() const;
|
|
|
|
void updateMembersShowArea();
|
|
|
|
void updateOnlineDisplay();
|
|
|
|
void updateOnlineDisplayTimer();
|
|
|
|
void updateOnlineDisplayIn(TimeMs timeout);
|
|
|
|
|
2017-11-16 15:24:01 +00:00
|
|
|
void infoClicked();
|
|
|
|
void backClicked();
|
|
|
|
|
2017-11-17 14:54:01 +00:00
|
|
|
void createUnreadBadge();
|
|
|
|
void updateUnreadBadge();
|
|
|
|
|
2017-08-17 08:31:24 +00:00
|
|
|
not_null<Window::Controller*> _controller;
|
2018-01-22 17:39:20 +00:00
|
|
|
Dialogs::Key _activeChat;
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2016-12-26 22:46:36 +00:00
|
|
|
int _selectedCount = 0;
|
2016-06-22 17:11:35 +00:00
|
|
|
bool _canDelete = false;
|
2017-04-27 21:17:00 +00:00
|
|
|
bool _canForward = false;
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2016-12-26 22:46:36 +00:00
|
|
|
Animation _selectedShown;
|
|
|
|
|
2018-01-26 15:40:11 +00:00
|
|
|
object_ptr<Ui::RoundButton> _clear;
|
2016-12-13 17:07:56 +00:00
|
|
|
object_ptr<Ui::RoundButton> _forward, _delete;
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2017-11-16 15:24:01 +00:00
|
|
|
object_ptr<Ui::IconButton> _back;
|
2017-12-17 11:04:47 +00:00
|
|
|
object_ptr<Ui::UnreadBadge> _unreadBadge = { nullptr };
|
2018-01-30 14:31:25 +00:00
|
|
|
object_ptr<Ui::AbstractButton> _info = { nullptr };
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2017-04-19 18:06:01 +00:00
|
|
|
object_ptr<Ui::IconButton> _call;
|
2016-12-13 17:07:56 +00:00
|
|
|
object_ptr<Ui::IconButton> _search;
|
2017-09-16 16:53:41 +00:00
|
|
|
object_ptr<Ui::IconButton> _infoToggle;
|
2016-12-13 17:07:56 +00:00
|
|
|
object_ptr<Ui::IconButton> _menuToggle;
|
|
|
|
object_ptr<Ui::DropdownMenu> _menu = { nullptr };
|
2016-11-05 08:36:24 +00:00
|
|
|
|
2016-12-13 17:07:56 +00:00
|
|
|
object_ptr<TWidget> _membersShowArea = { nullptr };
|
2017-11-13 08:05:56 +00:00
|
|
|
rpl::event_stream<bool> _membersShowAreaActive;
|
|
|
|
|
|
|
|
QString _titlePeerText;
|
|
|
|
bool _titlePeerTextOnline = false;
|
|
|
|
int _titlePeerTextWidth = 0;
|
2017-11-16 15:24:01 +00:00
|
|
|
int _leftTaken = 0;
|
|
|
|
int _rightTaken = 0;
|
2018-01-09 17:08:31 +00:00
|
|
|
bool _animatingMode = false;
|
2018-05-10 10:16:21 +00:00
|
|
|
std::unique_ptr<Ui::InfiniteRadialAnimation> _connecting;
|
2016-04-12 21:31:28 +00:00
|
|
|
|
2016-11-06 17:23:13 +00:00
|
|
|
int _unreadCounterSubscription = 0;
|
2017-11-13 08:05:56 +00:00
|
|
|
base::Timer _onlineUpdater;
|
2016-11-06 17:23:13 +00:00
|
|
|
|
2018-01-26 15:40:11 +00:00
|
|
|
rpl::event_stream<> _forwardSelection;
|
|
|
|
rpl::event_stream<> _deleteSelection;
|
|
|
|
rpl::event_stream<> _clearSelection;
|
|
|
|
|
2016-04-12 21:31:28 +00:00
|
|
|
};
|
2018-01-09 17:08:31 +00:00
|
|
|
|
|
|
|
} // namespace HistoryView
|