#ifndef ASH_CAPTURE_MODE_ACTION_BUTTON_CONTAINER_VIEW_H_
#define ASH_CAPTURE_MODE_ACTION_BUTTON_CONTAINER_VIEW_H_
#include <memory>
#include <string>
#include <string_view>
#include <vector>
#include "ash/ash_export.h"
#include "ash/capture_mode/capture_mode_types.h"
#include "base/functional/callback_forward.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/layout/box_layout_view.h"
#include "ui/views/view.h"
namespace gfx {
struct VectorIcon;
}
namespace views {
class Label;
class Link;
}
namespace ash {
class ActionButtonView;
class SystemShadow;
class ASH_EXPORT ActionButtonContainerView : public views::View {
METADATA_HEADER(ActionButtonContainerView, views::View)
public:
class ASH_EXPORT ErrorView : public views::BoxLayoutView {
METADATA_HEADER(ErrorView, views::BoxLayoutView)
public:
ErrorView();
ErrorView(const ErrorView&) = delete;
ErrorView& operator=(const ErrorView&) = delete;
~ErrorView() override;
views::Link* try_again_link() { return try_again_link_; }
void SetVisible(bool visible) override;
void AddedToWidget() override;
void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
void SetErrorMessage(const std::u16string& error_message);
void SetTryAgainCallback(base::RepeatingClosure try_again_callback);
std::u16string_view GetErrorMessageForTesting() const;
private:
std::unique_ptr<SystemShadow> shadow_;
raw_ptr<views::Label> error_label_ = nullptr;
raw_ptr<views::Link> try_again_link_ = nullptr;
};
ActionButtonContainerView();
ActionButtonContainerView(const ActionButtonContainerView&) = delete;
ActionButtonContainerView& operator=(const ActionButtonContainerView&) =
delete;
~ActionButtonContainerView() override;
ActionButtonView* AddActionButton(views::Button::PressedCallback callback,
std::u16string text,
const gfx::VectorIcon* icon,
ActionButtonRank rank,
ActionButtonViewID id);
const views::View::Views& GetActionButtons() const;
std::vector<views::View*> GetFocusableViews();
void ClearContainer();
void ShowErrorView(
const std::u16string& error_message,
base::RepeatingClosure try_again_callback = base::NullCallback());
void HideErrorView();
void StartSmartActionsButtonTransition();
void RemoveSmartActionsButton();
ErrorView* error_view_for_testing() { return error_view_; }
private:
void OnSmartActionsButtonFadedOut();
void SetWidgetEventsEnabled(bool enabled);
raw_ptr<views::View> action_button_row_ = nullptr;
raw_ptr<ErrorView> error_view_ = nullptr;
base::WeakPtrFactory<ActionButtonContainerView> weak_ptr_factory_{this};
};
}
#endif