#ifndef UI_MESSAGE_CENTER_VIEWS_NOTIFICATION_INPUT_CONTAINER_H_
#define UI_MESSAGE_CENTER_VIEWS_NOTIFICATION_INPUT_CONTAINER_H_
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/message_center/message_center_export.h"
#include "ui/views/controls/textfield/textfield_controller.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/delegating_layout_manager.h"
#include "ui/views/view.h"
namespace ui {
class KeyEvent;
class Layer;
}
namespace views {
class ImageButton;
class InkDropContainerView;
class Textfield;
}
namespace message_center {
class MESSAGE_CENTER_EXPORT NotificationInputDelegate {
public:
virtual void OnNotificationInputSubmit(size_t index,
const std::u16string& text) = 0;
virtual ~NotificationInputDelegate() = default;
};
class MESSAGE_CENTER_EXPORT NotificationInputContainer
: public views::View,
public views::TextfieldController,
public views::LayoutDelegate {
METADATA_HEADER(NotificationInputContainer, views::View)
public:
explicit NotificationInputContainer(
NotificationInputDelegate* delegate = nullptr);
NotificationInputContainer(const NotificationInputContainer&) = delete;
NotificationInputContainer& operator=(const NotificationInputContainer&) =
delete;
~NotificationInputContainer() override;
void Init();
void SetTextfieldIndex(int index);
size_t GetTextfieldIndex() const;
void SetPlaceholderText(const std::optional<std::u16string>& placeholder);
void AnimateBackground(const ui::Event& event);
void AddLayerToRegion(ui::Layer* layer, views::LayerRegion region) override;
void RemoveLayerFromRegions(ui::Layer* layer) override;
void OnThemeChanged() override;
bool HandleKeyEvent(views::Textfield* sender,
const ui::KeyEvent& key_event) override;
void OnAfterUserAction(views::Textfield* sender) override;
views::ProposedLayout CalculateProposedLayout(
const views::SizeBounds& size_bounds) const override;
views::Textfield* textfield() const { return textfield_; }
views::ImageButton* button() const { return button_; }
private:
virtual views::BoxLayout* InstallLayoutManager();
virtual views::InkDropContainerView* InstallInkDrop();
virtual gfx::Insets GetTextfieldPadding() const;
virtual gfx::Insets GetSendButtonPadding() const;
virtual void SetSendButtonHighlightPath();
virtual int GetDefaultPlaceholderStringId() const;
virtual int GetDefaultAccessibleNameStringId() const;
virtual void StyleTextfield();
virtual void UpdateButtonImage();
const raw_ptr<NotificationInputDelegate> delegate_;
const raw_ptr<views::Textfield> textfield_;
const raw_ptr<views::ImageButton> button_;
raw_ptr<views::InkDropContainerView> ink_drop_container_ = nullptr;
};
}
#endif