1 /*
2 This file is part of Telegram Desktop,
3 the official desktop application for the Telegram messaging service.
4
5 For license and copyright information please follow this link:
6 https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
7 */
8 #include "editor/controllers/stickers_panel_controller.h"
9
10 #include "chat_helpers/tabbed_panel.h"
11 #include "chat_helpers/tabbed_selector.h"
12 #include "styles/style_chat_helpers.h"
13
14 namespace Editor {
15
StickersPanelController(not_null<Ui::RpWidget * > panelContainer,not_null<Window::SessionController * > controller)16 StickersPanelController::StickersPanelController(
17 not_null<Ui::RpWidget*> panelContainer,
18 not_null<Window::SessionController*> controller)
19 : _stickersPanel(
20 base::make_unique_q<ChatHelpers::TabbedPanel>(
21 panelContainer,
22 controller,
23 object_ptr<ChatHelpers::TabbedSelector>(
24 nullptr,
25 controller,
26 ChatHelpers::TabbedSelector::Mode::MediaEditor))) {
27 _stickersPanel->setDesiredHeightValues(
28 1.,
29 st::emojiPanMinHeight / 2,
30 st::emojiPanMinHeight);
31 _stickersPanel->hide();
32 }
33
stickerChosen() const34 auto StickersPanelController::stickerChosen() const
35 -> rpl::producer<not_null<DocumentData*>> {
36 return _stickersPanel->selector()->fileChosen(
37 ) | rpl::map([](const ChatHelpers::TabbedSelector::FileChosen &data) {
38 return data.document;
39 });
40 }
41
panelShown() const42 rpl::producer<bool> StickersPanelController::panelShown() const {
43 return _stickersPanel->shownValue();
44 }
45
setShowRequestChanges(rpl::producer<ShowRequest> && showRequest)46 void StickersPanelController::setShowRequestChanges(
47 rpl::producer<ShowRequest> &&showRequest) {
48 std::move(
49 showRequest
50 ) | rpl::start_with_next([=](ShowRequest show) {
51 if (show == ShowRequest::ToggleAnimated) {
52 _stickersPanel->toggleAnimated();
53 _stickersPanel->raise();
54 } else if (show == ShowRequest::ShowAnimated) {
55 _stickersPanel->showAnimated();
56 _stickersPanel->raise();
57 } else if (show == ShowRequest::HideAnimated) {
58 _stickersPanel->hideAnimated();
59 } else if (show == ShowRequest::HideFast) {
60 _stickersPanel->hideFast();
61 }
62 }, _stickersPanel->lifetime());
63 }
64
setMoveRequestChanges(rpl::producer<QPoint> && moveRequest)65 void StickersPanelController::setMoveRequestChanges(
66 rpl::producer<QPoint> &&moveRequest) {
67 std::move(
68 moveRequest
69 ) | rpl::start_with_next([=](const QPoint &point) {
70 _stickersPanel->moveBottomRight(
71 point.y(),
72 point.x() + _stickersPanel->width() / 2);
73 }, _stickersPanel->lifetime());
74 }
75
76 } // namespace Editor
77