2019-06-07 11:32:58 +00:00
|
|
|
/*
|
|
|
|
This file is part of Telegram Desktop,
|
|
|
|
the official desktop application for the Telegram messaging service.
|
|
|
|
|
|
|
|
For license and copyright information please follow this link:
|
|
|
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "ui/rp_widget.h"
|
|
|
|
#include "ui/wrap/slide_wrap.h"
|
|
|
|
#include "ui/widgets/shadow.h"
|
|
|
|
|
2019-06-10 14:58:45 +00:00
|
|
|
namespace Window {
|
|
|
|
class Controller;
|
|
|
|
} // namespace Window
|
|
|
|
|
2019-06-07 11:32:58 +00:00
|
|
|
namespace Ui {
|
|
|
|
class FlatButton;
|
|
|
|
class IconButton;
|
|
|
|
} // namespace Ui
|
|
|
|
|
|
|
|
namespace HistoryView {
|
|
|
|
|
|
|
|
class ContactStatus final {
|
|
|
|
public:
|
2019-06-10 14:58:45 +00:00
|
|
|
ContactStatus(
|
|
|
|
not_null<Window::Controller*> window,
|
|
|
|
not_null<Ui::RpWidget*> parent,
|
|
|
|
not_null<PeerData*> peer);
|
2019-06-07 11:32:58 +00:00
|
|
|
|
|
|
|
void show();
|
|
|
|
void raise();
|
|
|
|
|
|
|
|
void move(int x, int y);
|
|
|
|
int height() const;
|
|
|
|
rpl::producer<int> heightValue() const;
|
|
|
|
|
2019-06-10 12:50:21 +00:00
|
|
|
rpl::lifetime &lifetime() {
|
|
|
|
return _lifetime;
|
|
|
|
}
|
|
|
|
|
2019-06-07 11:32:58 +00:00
|
|
|
private:
|
|
|
|
enum class State {
|
|
|
|
None,
|
|
|
|
ReportSpam,
|
2019-06-10 12:50:21 +00:00
|
|
|
Add,
|
|
|
|
AddOrBlock,
|
2019-06-07 11:32:58 +00:00
|
|
|
SharePhoneNumber,
|
|
|
|
};
|
|
|
|
|
|
|
|
class Bar : public Ui::RpWidget {
|
|
|
|
public:
|
2019-06-10 12:50:21 +00:00
|
|
|
Bar(QWidget *parent, const QString &name);
|
2019-06-07 11:32:58 +00:00
|
|
|
|
|
|
|
void showState(State state);
|
|
|
|
|
2019-06-10 14:09:57 +00:00
|
|
|
rpl::producer<> addClicks() const;
|
|
|
|
rpl::producer<> blockClicks() const;
|
|
|
|
rpl::producer<> shareClicks() const;
|
|
|
|
rpl::producer<> reportClicks() const;
|
|
|
|
rpl::producer<> closeClicks() const;
|
|
|
|
|
2019-06-07 11:32:58 +00:00
|
|
|
protected:
|
|
|
|
void resizeEvent(QResizeEvent *e) override;
|
|
|
|
|
|
|
|
private:
|
2019-06-10 12:50:21 +00:00
|
|
|
void updateButtonsGeometry();
|
|
|
|
|
|
|
|
QString _name;
|
2019-06-07 11:32:58 +00:00
|
|
|
object_ptr<Ui::FlatButton> _add;
|
2019-06-10 14:09:57 +00:00
|
|
|
object_ptr<Ui::FlatButton> _block;
|
2019-06-07 11:32:58 +00:00
|
|
|
object_ptr<Ui::FlatButton> _share;
|
|
|
|
object_ptr<Ui::FlatButton> _report;
|
|
|
|
object_ptr<Ui::IconButton> _close;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
void setupWidgets(not_null<Ui::RpWidget*> parent);
|
|
|
|
void setupState(not_null<PeerData*> peer);
|
2019-06-10 14:09:57 +00:00
|
|
|
void setupHandlers(not_null<PeerData*> peer);
|
2019-06-11 14:31:52 +00:00
|
|
|
void setupAddHandler(not_null<UserData*> user);
|
|
|
|
void setupBlockHandler(not_null<UserData*> user);
|
|
|
|
void setupShareHandler(not_null<UserData*> user);
|
2019-06-10 14:09:57 +00:00
|
|
|
void setupReportHandler(not_null<PeerData*> peer);
|
|
|
|
void setupCloseHandler(not_null<PeerData*> peer);
|
2019-06-07 11:32:58 +00:00
|
|
|
|
|
|
|
static rpl::producer<State> PeerState(not_null<PeerData*> peer);
|
|
|
|
|
2019-06-10 14:58:45 +00:00
|
|
|
not_null<Window::Controller*> _window;
|
2019-06-07 11:32:58 +00:00
|
|
|
State _state = State::None;
|
|
|
|
Ui::SlideWrap<Bar> _bar;
|
|
|
|
Ui::PlainShadow _shadow;
|
|
|
|
bool _shown = false;
|
|
|
|
|
|
|
|
rpl::lifetime _lifetime;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace HistoryView
|