mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added ability to set controls type for single previews.
This commit is contained in:
parent
5431541694
commit
7cf5e6d94f
12 changed files with 59 additions and 26 deletions
|
@ -16,13 +16,24 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
|
||||||
AbstractSingleFilePreview::AbstractSingleFilePreview(QWidget *parent)
|
AbstractSingleFilePreview::AbstractSingleFilePreview(
|
||||||
|
QWidget *parent,
|
||||||
|
AttachControls::Type type)
|
||||||
: AbstractSinglePreview(parent)
|
: AbstractSinglePreview(parent)
|
||||||
|
, _type(type)
|
||||||
, _editMedia(this, st::sendBoxAlbumGroupButtonFile)
|
, _editMedia(this, st::sendBoxAlbumGroupButtonFile)
|
||||||
, _deleteMedia(this, st::sendBoxAlbumGroupButtonFile) {
|
, _deleteMedia(this, st::sendBoxAlbumGroupButtonFile) {
|
||||||
|
|
||||||
_editMedia->setIconOverride(&st::sendBoxAlbumGroupEditButtonIconFile);
|
_editMedia->setIconOverride(&st::sendBoxAlbumGroupEditButtonIconFile);
|
||||||
_deleteMedia->setIconOverride(&st::sendBoxAlbumGroupDeleteButtonIconFile);
|
_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;
|
AbstractSingleFilePreview::~AbstractSingleFilePreview() = default;
|
||||||
|
@ -136,8 +147,10 @@ void AbstractSingleFilePreview::resizeEvent(QResizeEvent *e) {
|
||||||
const auto x = (width() - w) / 2;
|
const auto x = (width() - w) / 2;
|
||||||
const auto top = st::sendBoxFileGroupSkipTop;
|
const auto top = st::sendBoxFileGroupSkipTop;
|
||||||
auto right = st::sendBoxFileGroupSkipRight + x;
|
auto right = st::sendBoxFileGroupSkipRight + x;
|
||||||
_deleteMedia->moveToRight(right, top);
|
if (_type != AttachControls::Type::EditOnly) {
|
||||||
right += st::sendBoxFileGroupEditInternalSkip + _deleteMedia->width();
|
_deleteMedia->moveToRight(right, top);
|
||||||
|
right += st::sendBoxFileGroupEditInternalSkip + _deleteMedia->width();
|
||||||
|
}
|
||||||
_editMedia->moveToRight(right, top);
|
_editMedia->moveToRight(right, top);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,12 +165,17 @@ void AbstractSingleFilePreview::updateTextWidthFor(Data &data) {
|
||||||
const auto nameleft = st.thumbSize + st.padding.right();
|
const auto nameleft = st.thumbSize + st.padding.right();
|
||||||
const auto nametop = st.nameTop;
|
const auto nametop = st.nameTop;
|
||||||
const auto statustop = st.statusTop;
|
const auto statustop = st.statusTop;
|
||||||
|
const auto buttonsCount = (_type == AttachControls::Type::EditOnly)
|
||||||
|
? 1
|
||||||
|
: (_type == AttachControls::Type::Full)
|
||||||
|
? 2
|
||||||
|
: 0;
|
||||||
const auto availableFileWidth = st::sendMediaPreviewSize
|
const auto availableFileWidth = st::sendMediaPreviewSize
|
||||||
- st.thumbSize
|
- st.thumbSize
|
||||||
- st.padding.right()
|
- st.padding.right()
|
||||||
// Right buttons.
|
// Right buttons.
|
||||||
- st::sendBoxAlbumGroupButtonFile.width * 2
|
- st::sendBoxAlbumGroupButtonFile.width * buttonsCount
|
||||||
- st::sendBoxAlbumGroupEditInternalSkip * 2
|
- st::sendBoxAlbumGroupEditInternalSkip * buttonsCount
|
||||||
- st::sendBoxAlbumGroupSkipRight;
|
- st::sendBoxAlbumGroupSkipRight;
|
||||||
data.nameWidth = st::semiboldFont->width(data.name);
|
data.nameWidth = st::semiboldFont->width(data.name);
|
||||||
if (data.nameWidth > availableFileWidth) {
|
if (data.nameWidth > availableFileWidth) {
|
||||||
|
|
|
@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ui/chat/attach/attach_abstract_single_preview.h"
|
#include "ui/chat/attach/attach_abstract_single_preview.h"
|
||||||
|
#include "ui/chat/attach/attach_controls.h"
|
||||||
#include "base/object_ptr.h"
|
#include "base/object_ptr.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -16,7 +17,7 @@ class IconButton;
|
||||||
|
|
||||||
class AbstractSingleFilePreview : public AbstractSinglePreview {
|
class AbstractSingleFilePreview : public AbstractSinglePreview {
|
||||||
public:
|
public:
|
||||||
AbstractSingleFilePreview(QWidget *parent);
|
AbstractSingleFilePreview(QWidget *parent, AttachControls::Type type);
|
||||||
~AbstractSingleFilePreview();
|
~AbstractSingleFilePreview();
|
||||||
|
|
||||||
[[nodiscard]] rpl::producer<> deleteRequests() const override;
|
[[nodiscard]] rpl::producer<> deleteRequests() const override;
|
||||||
|
@ -45,6 +46,8 @@ private:
|
||||||
|
|
||||||
void updateTextWidthFor(Data &data);
|
void updateTextWidthFor(Data &data);
|
||||||
|
|
||||||
|
const AttachControls::Type _type;
|
||||||
|
|
||||||
Data _data;
|
Data _data;
|
||||||
|
|
||||||
object_ptr<IconButton> _editMedia = { nullptr };
|
object_ptr<IconButton> _editMedia = { nullptr };
|
||||||
|
|
|
@ -22,12 +22,14 @@ constexpr auto kMinPreviewWidth = 20;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
AbstractSingleMediaPreview::AbstractSingleMediaPreview(QWidget *parent)
|
AbstractSingleMediaPreview::AbstractSingleMediaPreview(
|
||||||
|
QWidget *parent,
|
||||||
|
AttachControls::Type type)
|
||||||
: AbstractSinglePreview(parent)
|
: AbstractSinglePreview(parent)
|
||||||
, _minThumbH(st::sendBoxAlbumGroupSize.height()
|
, _minThumbH(st::sendBoxAlbumGroupSize.height()
|
||||||
+ st::sendBoxAlbumGroupSkipTop * 2)
|
+ st::sendBoxAlbumGroupSkipTop * 2)
|
||||||
, _photoEditorButton(base::make_unique_q<AbstractButton>(this))
|
, _photoEditorButton(base::make_unique_q<AbstractButton>(this))
|
||||||
, _controls(base::make_unique_q<AttachControlsWidget>(this)) {
|
, _controls(base::make_unique_q<AttachControlsWidget>(this, type)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
AbstractSingleMediaPreview::~AbstractSingleMediaPreview() = default;
|
AbstractSingleMediaPreview::~AbstractSingleMediaPreview() = default;
|
||||||
|
|
|
@ -8,15 +8,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ui/chat/attach/attach_abstract_single_preview.h"
|
#include "ui/chat/attach/attach_abstract_single_preview.h"
|
||||||
|
#include "ui/chat/attach/attach_controls.h"
|
||||||
#include "ui/abstract_button.h"
|
#include "ui/abstract_button.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
|
||||||
class AttachControlsWidget;
|
|
||||||
|
|
||||||
class AbstractSingleMediaPreview : public AbstractSinglePreview {
|
class AbstractSingleMediaPreview : public AbstractSinglePreview {
|
||||||
public:
|
public:
|
||||||
AbstractSingleMediaPreview(QWidget *parent);
|
AbstractSingleMediaPreview(QWidget *parent, AttachControls::Type type);
|
||||||
~AbstractSingleMediaPreview();
|
~AbstractSingleMediaPreview();
|
||||||
|
|
||||||
[[nodiscard]] rpl::producer<> deleteRequests() const override;
|
[[nodiscard]] rpl::producer<> deleteRequests() const override;
|
||||||
|
|
|
@ -23,8 +23,9 @@ namespace Ui {
|
||||||
|
|
||||||
ItemSingleFilePreview::ItemSingleFilePreview(
|
ItemSingleFilePreview::ItemSingleFilePreview(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
not_null<HistoryItem*> item)
|
not_null<HistoryItem*> item,
|
||||||
: AbstractSingleFilePreview(parent) {
|
AttachControls::Type type)
|
||||||
|
: AbstractSingleFilePreview(parent, type) {
|
||||||
const auto media = item->media();
|
const auto media = item->media();
|
||||||
Assert(media != nullptr);
|
Assert(media != nullptr);
|
||||||
const auto document = media->document();
|
const auto document = media->document();
|
||||||
|
|
|
@ -25,7 +25,8 @@ class ItemSingleFilePreview final : public AbstractSingleFilePreview {
|
||||||
public:
|
public:
|
||||||
ItemSingleFilePreview(
|
ItemSingleFilePreview(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
not_null<HistoryItem*> item);
|
not_null<HistoryItem*> item,
|
||||||
|
AttachControls::Type type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void preparePreview(not_null<DocumentData*> document);
|
void preparePreview(not_null<DocumentData*> document);
|
||||||
|
|
|
@ -32,8 +32,9 @@ using namespace ::Media::Streaming;
|
||||||
ItemSingleMediaPreview::ItemSingleMediaPreview(
|
ItemSingleMediaPreview::ItemSingleMediaPreview(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
Fn<bool()> gifPaused,
|
Fn<bool()> gifPaused,
|
||||||
not_null<HistoryItem*> item)
|
not_null<HistoryItem*> item,
|
||||||
: AbstractSingleMediaPreview(parent)
|
AttachControls::Type type)
|
||||||
|
: AbstractSingleMediaPreview(parent, type)
|
||||||
, _gifPaused(std::move(gifPaused))
|
, _gifPaused(std::move(gifPaused))
|
||||||
, _fullId(item->fullId()) {
|
, _fullId(item->fullId()) {
|
||||||
const auto media = item->media();
|
const auto media = item->media();
|
||||||
|
|
|
@ -33,7 +33,8 @@ public:
|
||||||
ItemSingleMediaPreview(
|
ItemSingleMediaPreview(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
Fn<bool()> gifPaused,
|
Fn<bool()> gifPaused,
|
||||||
not_null<HistoryItem*> item);
|
not_null<HistoryItem*> item,
|
||||||
|
AttachControls::Type type);
|
||||||
|
|
||||||
std::shared_ptr<::Data::PhotoMedia> sharedPhotoMedia() const;
|
std::shared_ptr<::Data::PhotoMedia> sharedPhotoMedia() const;
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,9 @@ namespace Ui {
|
||||||
|
|
||||||
SingleFilePreview::SingleFilePreview(
|
SingleFilePreview::SingleFilePreview(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
const PreparedFile &file)
|
const PreparedFile &file,
|
||||||
: AbstractSingleFilePreview(parent) {
|
AttachControls::Type type)
|
||||||
|
: AbstractSingleFilePreview(parent, type) {
|
||||||
preparePreview(file);
|
preparePreview(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,8 @@ class SingleFilePreview final : public AbstractSingleFilePreview {
|
||||||
public:
|
public:
|
||||||
SingleFilePreview(
|
SingleFilePreview(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
const PreparedFile &file);
|
const PreparedFile &file,
|
||||||
|
AttachControls::Type type = AttachControls::Type::Full);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void preparePreview(const PreparedFile &file);
|
void preparePreview(const PreparedFile &file);
|
||||||
|
|
|
@ -17,7 +17,8 @@ namespace Ui {
|
||||||
SingleMediaPreview *SingleMediaPreview::Create(
|
SingleMediaPreview *SingleMediaPreview::Create(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
Fn<bool()> gifPaused,
|
Fn<bool()> gifPaused,
|
||||||
const PreparedFile &file) {
|
const PreparedFile &file,
|
||||||
|
AttachControls::Type type) {
|
||||||
auto preview = QImage();
|
auto preview = QImage();
|
||||||
bool animated = false;
|
bool animated = false;
|
||||||
bool animationPreview = false;
|
bool animationPreview = false;
|
||||||
|
@ -44,7 +45,8 @@ SingleMediaPreview *SingleMediaPreview::Create(
|
||||||
preview,
|
preview,
|
||||||
animated,
|
animated,
|
||||||
Core::IsMimeSticker(file.information->filemime),
|
Core::IsMimeSticker(file.information->filemime),
|
||||||
animationPreview ? file.path : QString());
|
animationPreview ? file.path : QString(),
|
||||||
|
type);
|
||||||
}
|
}
|
||||||
|
|
||||||
SingleMediaPreview::SingleMediaPreview(
|
SingleMediaPreview::SingleMediaPreview(
|
||||||
|
@ -53,8 +55,9 @@ SingleMediaPreview::SingleMediaPreview(
|
||||||
QImage preview,
|
QImage preview,
|
||||||
bool animated,
|
bool animated,
|
||||||
bool sticker,
|
bool sticker,
|
||||||
const QString &animatedPreviewPath)
|
const QString &animatedPreviewPath,
|
||||||
: AbstractSingleMediaPreview(parent)
|
AttachControls::Type type)
|
||||||
|
: AbstractSingleMediaPreview(parent, type)
|
||||||
, _gifPaused(std::move(gifPaused))
|
, _gifPaused(std::move(gifPaused))
|
||||||
, _sticker(sticker) {
|
, _sticker(sticker) {
|
||||||
Expects(!preview.isNull());
|
Expects(!preview.isNull());
|
||||||
|
|
|
@ -23,7 +23,8 @@ public:
|
||||||
static SingleMediaPreview *Create(
|
static SingleMediaPreview *Create(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
Fn<bool()> gifPaused,
|
Fn<bool()> gifPaused,
|
||||||
const PreparedFile &file);
|
const PreparedFile &file,
|
||||||
|
AttachControls::Type type = AttachControls::Type::Full);
|
||||||
|
|
||||||
SingleMediaPreview(
|
SingleMediaPreview(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
|
@ -31,7 +32,8 @@ public:
|
||||||
QImage preview,
|
QImage preview,
|
||||||
bool animated,
|
bool animated,
|
||||||
bool sticker,
|
bool sticker,
|
||||||
const QString &animatedPreviewPath);
|
const QString &animatedPreviewPath,
|
||||||
|
AttachControls::Type type);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool drawBackground() const override;
|
bool drawBackground() const override;
|
||||||
|
|
Loading…
Add table
Reference in a new issue