tdesktop/Telegram/SourceFiles/history/history_drag_area.h

79 lines
1.8 KiB
C
Raw Normal View History

/*
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
2019-09-13 12:22:54 +00:00
#include "ui/rp_widget.h"
2019-04-02 09:13:30 +00:00
#include "ui/effects/animations.h"
namespace Storage {
enum class MimeDataState;
} // namespace Storage
2020-06-09 23:29:24 +00:00
class DragArea : public Ui::RpWidget {
public:
DragArea(QWidget *parent);
2020-06-09 23:29:24 +00:00
struct Areas {
DragArea *document;
DragArea *photo;
};
using CallbackComputeState =
Fn<Storage::MimeDataState(const QMimeData *data)>;
2020-06-09 23:29:24 +00:00
static Areas SetupDragAreaToContainer(
not_null<Ui::RpWidget*> container,
Fn<bool(not_null<const QMimeData*>)> &&dragEnterFilter = nullptr,
2020-06-09 23:29:24 +00:00
Fn<void(bool)> &&setAcceptDropsField = nullptr,
Fn<void()> &&updateControlsGeometry = nullptr,
CallbackComputeState &&computeState = nullptr,
bool hideSubtext = false);
2020-06-09 23:29:24 +00:00
void setText(const QString &text, const QString &subtext);
void otherEnter();
void otherLeave();
bool overlaps(const QRect &globalRect);
2015-10-01 14:05:05 +00:00
void hideFast();
void setDroppedCallback(Fn<void(const QMimeData *data)> callback) {
_droppedCallback = std::move(callback);
}
protected:
void paintEvent(QPaintEvent *e) override;
void mouseMoveEvent(QMouseEvent *e) override;
2020-06-09 23:29:24 +00:00
void dragMoveEvent(QDragMoveEvent *e) override;
// These events should be filtered by parent!
void dragEnterEvent(QDragEnterEvent *e) override;
void dragLeaveEvent(QDragLeaveEvent *e) override;
void dropEvent(QDropEvent *e) override;
2020-06-10 13:10:19 +00:00
private:
void hideStart();
void hideFinish();
void showStart();
void setIn(bool in);
void opacityAnimationCallback();
bool _hiding = false;
bool _in = false;
QPixmap _cache;
Fn<void(const QMimeData *data)> _droppedCallback;
2019-04-02 09:13:30 +00:00
Ui::Animations::Simple _a_opacity;
Ui::Animations::Simple _a_in;
QString _text, _subtext;
};