81 lines
2 KiB
C++
81 lines
2 KiB
C++
// This file is part of Desktop App Toolkit,
|
|
// a set of libraries for developing nice desktop applications.
|
|
//
|
|
// For license and copyright information please follow this link:
|
|
// https://github.com/desktop-app/legal/blob/master/LEGAL
|
|
//
|
|
#pragma once
|
|
|
|
#include "base/weak_ptr.h"
|
|
#include "ui/layers/layer_widget.h"
|
|
|
|
struct TextWithEntities;
|
|
|
|
namespace anim {
|
|
enum class type : uchar;
|
|
} // namespace anim
|
|
|
|
namespace Ui::Toast {
|
|
struct Config;
|
|
class Instance;
|
|
} // namespace Ui::Toast
|
|
|
|
namespace Ui {
|
|
|
|
class BoxContent;
|
|
class LayerWidget;
|
|
|
|
inline constexpr auto kZOrderBasic = 0;
|
|
|
|
class Show {
|
|
public:
|
|
virtual ~Show() = 0;
|
|
virtual void showOrHideBoxOrLayer(
|
|
std::variant<
|
|
v::null_t,
|
|
object_ptr<BoxContent>,
|
|
std::unique_ptr<LayerWidget>> &&layer,
|
|
LayerOptions options,
|
|
anim::type animated) const = 0;
|
|
[[nodiscard]] virtual not_null<QWidget*> toastParent() const = 0;
|
|
[[nodiscard]] virtual bool valid() const = 0;
|
|
virtual operator bool() const = 0;
|
|
|
|
void showBox(
|
|
object_ptr<BoxContent> content,
|
|
LayerOptions options = LayerOption::KeepOther,
|
|
anim::type animated = anim::type()) const;
|
|
void showLayer(
|
|
std::unique_ptr<LayerWidget> layer,
|
|
LayerOptions options = LayerOption::KeepOther,
|
|
anim::type animated = anim::type()) const;
|
|
void hideLayer(anim::type animated = anim::type()) const;
|
|
|
|
base::weak_ptr<Toast::Instance> showToast(Toast::Config &&config) const;
|
|
base::weak_ptr<Toast::Instance> showToast(
|
|
TextWithEntities &&text,
|
|
crl::time duration = 0) const;
|
|
base::weak_ptr<Toast::Instance> showToast(
|
|
const QString &text,
|
|
crl::time duration = 0) const;
|
|
|
|
template <
|
|
typename BoxType,
|
|
typename = std::enable_if_t<std::is_base_of_v<BoxContent, BoxType>>>
|
|
QPointer<BoxType> show(
|
|
object_ptr<BoxType> content,
|
|
LayerOptions options = LayerOption::KeepOther,
|
|
anim::type animated = anim::type()) const {
|
|
auto result = QPointer<BoxType>(content.data());
|
|
showBox(std::move(content), options, animated);
|
|
return result;
|
|
}
|
|
|
|
private:
|
|
mutable base::weak_ptr<Toast::Instance> _lastToast;
|
|
|
|
};
|
|
|
|
inline Show::~Show() = default;
|
|
|
|
} // namespace Ui
|