basic_click_handlers.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include "base/algorithm.h"
  9. #include "ui/click_handler.h"
  10. class TextClickHandler : public ClickHandler {
  11. public:
  12. TextClickHandler(bool fullDisplayed = true)
  13. : _fullDisplayed(fullDisplayed) {
  14. }
  15. QString copyToClipboardText() const override {
  16. return url();
  17. }
  18. QString tooltip() const override {
  19. return _fullDisplayed ? QString() : readable();
  20. }
  21. void setFullDisplayed(bool full) {
  22. _fullDisplayed = full;
  23. }
  24. protected:
  25. virtual QString readable() const;
  26. bool _fullDisplayed;
  27. };
  28. class UrlClickHandler : public TextClickHandler {
  29. public:
  30. UrlClickHandler(const QString &url, bool fullDisplayed = true);
  31. [[nodiscard]] QString originalUrl() const {
  32. return _originalUrl;
  33. }
  34. QString copyToClipboardContextItemText() const override;
  35. QString dragText() const override {
  36. return url();
  37. }
  38. TextEntity getTextEntity() const override;
  39. static void Open(QString url, QVariant context = {});
  40. void onClick(ClickContext context) const override {
  41. const auto button = context.button;
  42. if (button == Qt::LeftButton || button == Qt::MiddleButton) {
  43. Open(url(), context.other);
  44. }
  45. }
  46. [[nodiscard]] static bool IsEmail(const QString &url) {
  47. const auto at = url.indexOf('@'), slash = url.indexOf('/');
  48. return ((at > 0) && (slash < 0 || slash > at));
  49. }
  50. [[nodiscard]] static QString EncodeForOpening(const QString &originalUrl);
  51. [[nodiscard]] static bool IsSuspicious(const QString &url);
  52. [[nodiscard]] static QString ShowEncoded(const QString &url);
  53. protected:
  54. QString url() const override {
  55. return EncodeForOpening(_originalUrl);
  56. }
  57. QString readable() const override {
  58. return _readable;
  59. }
  60. private:
  61. [[nodiscard]] bool isEmail() const {
  62. return IsEmail(_originalUrl);
  63. }
  64. QString _originalUrl, _readable;
  65. };