data_file_click_handler.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "data/data_file_origin.h"
  9. #include "ui/basic_click_handlers.h"
  10. class DocumentData;
  11. class HistoryItem;
  12. class PhotoData;
  13. class FileClickHandler : public LeftButtonClickHandler {
  14. public:
  15. FileClickHandler(FullMsgId context);
  16. void setMessageId(FullMsgId context);
  17. [[nodiscard]] FullMsgId context() const;
  18. private:
  19. FullMsgId _context;
  20. };
  21. class DocumentClickHandler : public FileClickHandler {
  22. public:
  23. DocumentClickHandler(
  24. not_null<DocumentData*> document,
  25. FullMsgId context = FullMsgId());
  26. QString tooltip() const override;
  27. [[nodiscard]] not_null<DocumentData*> document() const;
  28. private:
  29. const not_null<DocumentData*> _document;
  30. };
  31. class DocumentSaveClickHandler : public DocumentClickHandler {
  32. public:
  33. enum class Mode {
  34. ToCacheOrFile,
  35. ToFile,
  36. ToNewFile,
  37. };
  38. using DocumentClickHandler::DocumentClickHandler;
  39. static void Save(
  40. Data::FileOrigin origin,
  41. not_null<DocumentData*> document,
  42. Mode mode = Mode::ToCacheOrFile,
  43. Fn<void()> started = nullptr);
  44. static void SaveAndTrack(
  45. FullMsgId itemId,
  46. not_null<DocumentData*> document,
  47. Mode mode = Mode::ToCacheOrFile,
  48. Fn<void()> started = nullptr);
  49. protected:
  50. void onClickImpl() const override;
  51. };
  52. class DocumentOpenClickHandler : public DocumentClickHandler {
  53. public:
  54. DocumentOpenClickHandler(
  55. not_null<DocumentData*> document,
  56. Fn<void(FullMsgId)> &&callback,
  57. FullMsgId context = FullMsgId());
  58. protected:
  59. void onClickImpl() const override;
  60. private:
  61. const Fn<void(FullMsgId)> _handler;
  62. };
  63. class DocumentCancelClickHandler : public DocumentClickHandler {
  64. public:
  65. DocumentCancelClickHandler(
  66. not_null<DocumentData*> document,
  67. Fn<void(FullMsgId)> &&callback,
  68. FullMsgId context = FullMsgId());
  69. protected:
  70. void onClickImpl() const override;
  71. private:
  72. const Fn<void(FullMsgId)> _handler;
  73. };
  74. class DocumentOpenWithClickHandler : public DocumentClickHandler {
  75. public:
  76. using DocumentClickHandler::DocumentClickHandler;
  77. static void Open(
  78. Data::FileOrigin origin,
  79. not_null<DocumentData*> document);
  80. protected:
  81. void onClickImpl() const override;
  82. };
  83. class VoiceSeekClickHandler : public DocumentOpenClickHandler {
  84. public:
  85. using DocumentOpenClickHandler::DocumentOpenClickHandler;
  86. protected:
  87. void onClickImpl() const override {
  88. }
  89. };
  90. class DocumentWrappedClickHandler : public DocumentClickHandler {
  91. public:
  92. DocumentWrappedClickHandler(
  93. ClickHandlerPtr wrapped,
  94. not_null<DocumentData*> document,
  95. FullMsgId context = FullMsgId());
  96. protected:
  97. void onClickImpl() const override;
  98. private:
  99. ClickHandlerPtr _wrapped;
  100. };
  101. class PhotoClickHandler : public FileClickHandler {
  102. public:
  103. PhotoClickHandler(
  104. not_null<PhotoData*> photo,
  105. FullMsgId context = FullMsgId(),
  106. PeerData *peer = nullptr);
  107. [[nodiscard]] not_null<PhotoData*> photo() const;
  108. [[nodiscard]] PeerData *peer() const;
  109. private:
  110. const not_null<PhotoData*> _photo;
  111. PeerData * const _peer = nullptr;
  112. };
  113. class PhotoOpenClickHandler : public PhotoClickHandler {
  114. public:
  115. PhotoOpenClickHandler(
  116. not_null<PhotoData*> photo,
  117. Fn<void(FullMsgId)> &&callback,
  118. FullMsgId context = FullMsgId());
  119. protected:
  120. void onClickImpl() const override;
  121. private:
  122. const Fn<void(FullMsgId)> _handler;
  123. };
  124. class PhotoSaveClickHandler : public PhotoClickHandler {
  125. public:
  126. using PhotoClickHandler::PhotoClickHandler;
  127. protected:
  128. void onClickImpl() const override;
  129. };
  130. class PhotoCancelClickHandler : public PhotoClickHandler {
  131. public:
  132. PhotoCancelClickHandler(
  133. not_null<PhotoData*> photo,
  134. Fn<void(FullMsgId)> &&callback,
  135. FullMsgId context = FullMsgId());
  136. protected:
  137. void onClickImpl() const override;
  138. private:
  139. const Fn<void(FullMsgId)> _handler;
  140. };