diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.cpp b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.cpp index c8f297946..dfcd9cb23 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.cpp +++ b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.cpp @@ -16,13 +16,24 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Ui { -AbstractSingleFilePreview::AbstractSingleFilePreview(QWidget *parent) +AbstractSingleFilePreview::AbstractSingleFilePreview( + QWidget *parent, + AttachControls::Type type) : AbstractSinglePreview(parent) +, _type(type) , _editMedia(this, st::sendBoxAlbumGroupButtonFile) , _deleteMedia(this, st::sendBoxAlbumGroupButtonFile) { _editMedia->setIconOverride(&st::sendBoxAlbumGroupEditButtonIconFile); _deleteMedia->setIconOverride(&st::sendBoxAlbumGroupDeleteButtonIconFile); + + if (type == AttachControls::Type::Full) { + _deleteMedia->show(); + _editMedia->show(); + } else if (type == AttachControls::Type::EditOnly) { + _deleteMedia->hide(); + _editMedia->show(); + } } AbstractSingleFilePreview::~AbstractSingleFilePreview() = default; @@ -136,8 +147,10 @@ void AbstractSingleFilePreview::resizeEvent(QResizeEvent *e) { const auto x = (width() - w) / 2; const auto top = st::sendBoxFileGroupSkipTop; auto right = st::sendBoxFileGroupSkipRight + x; - _deleteMedia->moveToRight(right, top); - right += st::sendBoxFileGroupEditInternalSkip + _deleteMedia->width(); + if (_type != AttachControls::Type::EditOnly) { + _deleteMedia->moveToRight(right, top); + right += st::sendBoxFileGroupEditInternalSkip + _deleteMedia->width(); + } _editMedia->moveToRight(right, top); } @@ -152,12 +165,17 @@ void AbstractSingleFilePreview::updateTextWidthFor(Data &data) { const auto nameleft = st.thumbSize + st.padding.right(); const auto nametop = st.nameTop; const auto statustop = st.statusTop; + const auto buttonsCount = (_type == AttachControls::Type::EditOnly) + ? 1 + : (_type == AttachControls::Type::Full) + ? 2 + : 0; const auto availableFileWidth = st::sendMediaPreviewSize - st.thumbSize - st.padding.right() // Right buttons. - - st::sendBoxAlbumGroupButtonFile.width * 2 - - st::sendBoxAlbumGroupEditInternalSkip * 2 + - st::sendBoxAlbumGroupButtonFile.width * buttonsCount + - st::sendBoxAlbumGroupEditInternalSkip * buttonsCount - st::sendBoxAlbumGroupSkipRight; data.nameWidth = st::semiboldFont->width(data.name); if (data.nameWidth > availableFileWidth) { diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.h b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.h index 6a4443e66..cbb0ae30a 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.h +++ b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_file_preview.h @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "ui/chat/attach/attach_abstract_single_preview.h" +#include "ui/chat/attach/attach_controls.h" #include "base/object_ptr.h" namespace Ui { @@ -16,7 +17,7 @@ class IconButton; class AbstractSingleFilePreview : public AbstractSinglePreview { public: - AbstractSingleFilePreview(QWidget *parent); + AbstractSingleFilePreview(QWidget *parent, AttachControls::Type type); ~AbstractSingleFilePreview(); [[nodiscard]] rpl::producer<> deleteRequests() const override; @@ -45,6 +46,8 @@ private: void updateTextWidthFor(Data &data); + const AttachControls::Type _type; + Data _data; object_ptr _editMedia = { nullptr }; diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.cpp b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.cpp index 1661aa006..4990854ec 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.cpp +++ b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.cpp @@ -22,12 +22,14 @@ constexpr auto kMinPreviewWidth = 20; } // namespace -AbstractSingleMediaPreview::AbstractSingleMediaPreview(QWidget *parent) +AbstractSingleMediaPreview::AbstractSingleMediaPreview( + QWidget *parent, + AttachControls::Type type) : AbstractSinglePreview(parent) , _minThumbH(st::sendBoxAlbumGroupSize.height() + st::sendBoxAlbumGroupSkipTop * 2) , _photoEditorButton(base::make_unique_q(this)) -, _controls(base::make_unique_q(this)) { +, _controls(base::make_unique_q(this, type)) { } AbstractSingleMediaPreview::~AbstractSingleMediaPreview() = default; diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.h b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.h index e2f307e4a..9fbf4005f 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.h +++ b/Telegram/SourceFiles/ui/chat/attach/attach_abstract_single_media_preview.h @@ -8,15 +8,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "ui/chat/attach/attach_abstract_single_preview.h" +#include "ui/chat/attach/attach_controls.h" #include "ui/abstract_button.h" namespace Ui { -class AttachControlsWidget; - class AbstractSingleMediaPreview : public AbstractSinglePreview { public: - AbstractSingleMediaPreview(QWidget *parent); + AbstractSingleMediaPreview(QWidget *parent, AttachControls::Type type); ~AbstractSingleMediaPreview(); [[nodiscard]] rpl::producer<> deleteRequests() const override; diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.cpp b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.cpp index 608320e0b..a2bb3381a 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.cpp +++ b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.cpp @@ -23,8 +23,9 @@ namespace Ui { ItemSingleFilePreview::ItemSingleFilePreview( QWidget *parent, - not_null item) -: AbstractSingleFilePreview(parent) { + not_null item, + AttachControls::Type type) +: AbstractSingleFilePreview(parent, type) { const auto media = item->media(); Assert(media != nullptr); const auto document = media->document(); diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.h b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.h index db6e90d79..8a25457fd 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.h +++ b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_file_preview.h @@ -25,7 +25,8 @@ class ItemSingleFilePreview final : public AbstractSingleFilePreview { public: ItemSingleFilePreview( QWidget *parent, - not_null item); + not_null item, + AttachControls::Type type); private: void preparePreview(not_null document); diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.cpp b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.cpp index 0961d332a..cb90d2b04 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.cpp +++ b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.cpp @@ -32,8 +32,9 @@ using namespace ::Media::Streaming; ItemSingleMediaPreview::ItemSingleMediaPreview( QWidget *parent, Fn gifPaused, - not_null item) -: AbstractSingleMediaPreview(parent) + not_null item, + AttachControls::Type type) +: AbstractSingleMediaPreview(parent, type) , _gifPaused(std::move(gifPaused)) , _fullId(item->fullId()) { const auto media = item->media(); diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.h b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.h index 170a10452..ebd3946f7 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.h +++ b/Telegram/SourceFiles/ui/chat/attach/attach_item_single_media_preview.h @@ -33,7 +33,8 @@ public: ItemSingleMediaPreview( QWidget *parent, Fn gifPaused, - not_null item); + not_null item, + AttachControls::Type type); std::shared_ptr<::Data::PhotoMedia> sharedPhotoMedia() const; diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.cpp b/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.cpp index c2354833a..aeda46467 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.cpp +++ b/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.cpp @@ -19,8 +19,9 @@ namespace Ui { SingleFilePreview::SingleFilePreview( QWidget *parent, - const PreparedFile &file) -: AbstractSingleFilePreview(parent) { + const PreparedFile &file, + AttachControls::Type type) +: AbstractSingleFilePreview(parent, type) { preparePreview(file); } diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.h b/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.h index 695061d90..f1b3b94ec 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.h +++ b/Telegram/SourceFiles/ui/chat/attach/attach_single_file_preview.h @@ -17,7 +17,8 @@ class SingleFilePreview final : public AbstractSingleFilePreview { public: SingleFilePreview( QWidget *parent, - const PreparedFile &file); + const PreparedFile &file, + AttachControls::Type type = AttachControls::Type::Full); private: void preparePreview(const PreparedFile &file); diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.cpp b/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.cpp index f9addd862..827659445 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.cpp +++ b/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.cpp @@ -17,7 +17,8 @@ namespace Ui { SingleMediaPreview *SingleMediaPreview::Create( QWidget *parent, Fn gifPaused, - const PreparedFile &file) { + const PreparedFile &file, + AttachControls::Type type) { auto preview = QImage(); bool animated = false; bool animationPreview = false; @@ -44,7 +45,8 @@ SingleMediaPreview *SingleMediaPreview::Create( preview, animated, Core::IsMimeSticker(file.information->filemime), - animationPreview ? file.path : QString()); + animationPreview ? file.path : QString(), + type); } SingleMediaPreview::SingleMediaPreview( @@ -53,8 +55,9 @@ SingleMediaPreview::SingleMediaPreview( QImage preview, bool animated, bool sticker, - const QString &animatedPreviewPath) -: AbstractSingleMediaPreview(parent) + const QString &animatedPreviewPath, + AttachControls::Type type) +: AbstractSingleMediaPreview(parent, type) , _gifPaused(std::move(gifPaused)) , _sticker(sticker) { Expects(!preview.isNull()); diff --git a/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.h b/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.h index 2d3f83958..7f43cc322 100644 --- a/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.h +++ b/Telegram/SourceFiles/ui/chat/attach/attach_single_media_preview.h @@ -23,7 +23,8 @@ public: static SingleMediaPreview *Create( QWidget *parent, Fn gifPaused, - const PreparedFile &file); + const PreparedFile &file, + AttachControls::Type type = AttachControls::Type::Full); SingleMediaPreview( QWidget *parent, @@ -31,7 +32,8 @@ public: QImage preview, bool animated, bool sticker, - const QString &animatedPreviewPath); + const QString &animatedPreviewPath, + AttachControls::Type type); protected: bool drawBackground() const override;