shareusergroupwidget.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*
  2. * Copyright (C) by Roeland Jago Douma <roeland@owncloud.com>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  12. * for more details.
  13. */
  14. #ifndef SHAREUSERGROUPWIDGET_H
  15. #define SHAREUSERGROUPWIDGET_H
  16. #include "accountfwd.h"
  17. #include "sharemanager.h"
  18. #include "sharepermissions.h"
  19. #include "sharee.h"
  20. #include "QProgressIndicator.h"
  21. #include <QDialog>
  22. #include <QWidget>
  23. #include <QSharedPointer>
  24. #include <QList>
  25. #include <QVector>
  26. #include <QTimer>
  27. #include <qscrollarea.h>
  28. class QAction;
  29. class QCompleter;
  30. class QModelIndex;
  31. namespace OCC {
  32. namespace Ui {
  33. class ShareUserGroupWidget;
  34. class ShareUserLine;
  35. }
  36. class AbstractCredentials;
  37. class SyncResult;
  38. class Share;
  39. class ShareManager;
  40. /**
  41. * @brief The ShareDialog (user/group) class
  42. * @ingroup gui
  43. */
  44. class ShareUserGroupWidget : public QWidget
  45. {
  46. Q_OBJECT
  47. public:
  48. explicit ShareUserGroupWidget(AccountPtr account,
  49. const QString &sharePath,
  50. const QString &localPath,
  51. SharePermissions maxSharingPermissions,
  52. const QString &privateLinkUrl,
  53. QWidget *parent = nullptr);
  54. ~ShareUserGroupWidget() override;
  55. signals:
  56. void togglePublicLinkShare(bool);
  57. void styleChanged();
  58. public slots:
  59. void getShares();
  60. void slotShareCreated(const QSharedPointer<Share> &share);
  61. void slotStyleChanged();
  62. private slots:
  63. void slotSharesFetched(const QList<QSharedPointer<Share>> &shares);
  64. void on_shareeLineEdit_textChanged(const QString &text);
  65. void searchForSharees(ShareeModel::LookupMode lookupMode);
  66. void slotLineEditTextEdited(const QString &text);
  67. void slotLineEditReturn();
  68. void slotCompleterActivated(const QModelIndex &index);
  69. void slotCompleterHighlighted(const QModelIndex &index);
  70. void slotShareesReady();
  71. void slotAdjustScrollWidgetSize();
  72. void slotPrivateLinkShare();
  73. void displayError(int code, const QString &message);
  74. void slotPrivateLinkOpenBrowser();
  75. void slotPrivateLinkCopy();
  76. void slotPrivateLinkEmail();
  77. private:
  78. void customizeStyle();
  79. void activateShareeLineEdit();
  80. Ui::ShareUserGroupWidget *_ui;
  81. QScrollArea *_parentScrollArea;
  82. AccountPtr _account;
  83. QString _sharePath;
  84. QString _localPath;
  85. SharePermissions _maxSharingPermissions;
  86. QString _privateLinkUrl;
  87. QCompleter *_completer;
  88. ShareeModel *_completerModel;
  89. QTimer _completionTimer;
  90. bool _isFile;
  91. bool _disableCompleterActivated; // in order to avoid that we share the contents twice
  92. ShareManager *_manager;
  93. QProgressIndicator _pi_sharee;
  94. QString _lastCreatedShareId;
  95. };
  96. /**
  97. * The widget displayed for each user/group share
  98. */
  99. class ShareUserLine : public QWidget
  100. {
  101. Q_OBJECT
  102. public:
  103. explicit ShareUserLine(AccountPtr account,
  104. QSharedPointer<UserGroupShare> Share,
  105. SharePermissions maxSharingPermissions,
  106. bool isFile,
  107. QWidget *parent = nullptr);
  108. ~ShareUserLine() override;
  109. QSharedPointer<Share> share() const;
  110. signals:
  111. void visualDeletionDone();
  112. void resizeRequested();
  113. public slots:
  114. void slotStyleChanged();
  115. void focusPasswordLineEdit();
  116. private slots:
  117. void on_deleteShareButton_clicked();
  118. void slotPermissionsChanged();
  119. void slotEditPermissionsChanged();
  120. void slotPasswordCheckboxChanged();
  121. void slotDeleteAnimationFinished();
  122. void refreshPasswordOptions();
  123. void refreshPasswordLineEditPlaceholder();
  124. void slotPasswordSet();
  125. void slotPasswordSetError(int statusCode, const QString &message);
  126. void slotShareDeleted();
  127. void slotPermissionsSet();
  128. void slotAvatarLoaded(QImage avatar);
  129. void setPasswordConfirmed();
  130. void slotLineEditPasswordReturnPressed();
  131. void slotConfirmPasswordClicked();
  132. private:
  133. void displayPermissions();
  134. void loadAvatar();
  135. void setDefaultAvatar(int avatarSize);
  136. void customizeStyle();
  137. QPixmap pixmapForShareeType(Sharee::Type type, const QColor &backgroundColor = QColor()) const;
  138. QColor backgroundColorForShareeType(Sharee::Type type) const;
  139. void showNoteOptions(bool show);
  140. void toggleNoteOptions(bool enable);
  141. void onNoteConfirmButtonClicked();
  142. void setNote(const QString &note);
  143. void toggleExpireDateOptions(bool enable);
  144. void showExpireDateOptions(bool show, const QDate &initialDate = QDate());
  145. void setExpireDate();
  146. void togglePasswordSetProgressAnimation(bool show);
  147. void enableProgessIndicatorAnimation(bool enable);
  148. void disableProgessIndicatorAnimation();
  149. QDate maxExpirationDateForShare(const Share::ShareType type, const QDate &fallbackDate) const;
  150. bool enforceExpirationDateForShare(const Share::ShareType type) const;
  151. Ui::ShareUserLine *_ui;
  152. AccountPtr _account;
  153. QSharedPointer<UserGroupShare> _share;
  154. bool _isFile;
  155. // _permissionEdit is a checkbox
  156. QAction *_permissionReshare;
  157. QAction *_deleteShareButton;
  158. QAction *_permissionCreate;
  159. QAction *_permissionChange;
  160. QAction *_permissionDelete;
  161. QAction *_noteLinkAction;
  162. QAction *_expirationDateLinkAction;
  163. QAction *_passwordProtectLinkAction;
  164. };
  165. }
  166. #endif // SHAREUSERGROUPWIDGET_H