#ifndef ASH_SYSTEM_STATUS_AREA_WIDGET_DELEGATE_H_
#define ASH_SYSTEM_STATUS_AREA_WIDGET_DELEGATE_H_
#include "ash/ash_export.h"
#include "ash/public/cpp/shelf_config.h"
#include "ash/public/cpp/shelf_types.h"
#include "ash/system/status_area_widget.h"
#include "base/memory/raw_ptr.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/views/accessible_pane_view.h"
#include "ui/views/widget/widget_delegate.h"
namespace ash {
class FocusCycler;
class Shelf;
class ASH_EXPORT StatusAreaWidgetDelegate : public views::AccessiblePaneView,
public views::WidgetDelegate {
public:
explicit StatusAreaWidgetDelegate(Shelf* shelf);
StatusAreaWidgetDelegate(const StatusAreaWidgetDelegate&) = delete;
StatusAreaWidgetDelegate& operator=(const StatusAreaWidgetDelegate&) = delete;
~StatusAreaWidgetDelegate() override;
void CalculateTargetBounds();
gfx::Rect GetTargetBounds() const;
void UpdateLayout(bool animate);
void SetFocusCyclerForTesting(const FocusCycler* focus_cycler);
bool ShouldFocusOut(bool reverse);
void OnStatusAreaCollapseStateChanged(
StatusAreaWidget::CollapseState new_collapse_state);
void Shutdown();
void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
View* GetDefaultFocusableChild() override;
const char* GetClassName() const override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
void OnGestureEvent(ui::GestureEvent* event) override;
bool CanActivate() const override;
void set_default_last_focusable_child(bool default_last_focusable_child) {
default_last_focusable_child_ = default_last_focusable_child;
}
protected:
void ChildPreferredSizeChanged(views::View* child) override;
void ChildVisibilityChanged(views::View* child) override;
private:
void SetBorderOnChild(views::View* child, bool extend_border_to_edge);
const raw_ptr<Shelf, ExperimentalAsh> shelf_;
raw_ptr<const FocusCycler, ExperimentalAsh> focus_cycler_for_testing_;
gfx::Rect target_bounds_;
bool default_last_focusable_child_ = false;
};
}
#endif