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