#ifndef ASH_SYSTEM_IME_MENU_IME_LIST_VIEW_H_
#define ASH_SYSTEM_IME_MENU_IME_LIST_VIEW_H_
#include <vector>
#include "ash/ash_export.h"
#include "ash/system/tray/tray_detailed_view.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/controls/button/button.h"
namespace ash {
struct ImeInfo;
struct ImeMenuItem;
class KeyboardStatusRow;
class ImeListView : public TrayDetailedView {
METADATA_HEADER(ImeListView, TrayDetailedView)
public:
enum SingleImeBehavior {
SHOW_SINGLE_IME,
HIDE_SINGLE_IME
};
explicit ImeListView(DetailedViewDelegate* delegate);
ImeListView(const ImeListView&) = delete;
ImeListView& operator=(const ImeListView&) = delete;
~ImeListView() override;
void Init(bool show_keyboard_toggle, SingleImeBehavior single_ime_behavior);
virtual void Update(const std::string& current_ime_id,
const std::vector<ImeInfo>& list,
const std::vector<ImeMenuItem>& property_items,
bool show_keyboard_toggle,
SingleImeBehavior single_ime_behavior);
virtual void ResetImeListView();
void ScrollItemToVisible(views::View* item_view);
void set_last_item_selected_with_keyboard(
bool last_item_selected_with_keyboard) {
last_item_selected_with_keyboard_ = last_item_selected_with_keyboard;
}
void set_should_focus_ime_after_selection_with_keyboard(
const bool focus_current_ime) {
should_focus_ime_after_selection_with_keyboard_ = focus_current_ime;
}
bool should_focus_ime_after_selection_with_keyboard() const {
return should_focus_ime_after_selection_with_keyboard_;
}
void HandleViewClicked(views::View* view) override;
void VisibilityChanged(View* starting_from, bool is_visible) override;
private:
friend class ImeListViewTestApi;
void AppendImeListAndProperties(
const std::string& current_ime_id,
const std::vector<ImeInfo>& list,
const std::vector<ImeMenuItem>& property_items);
void PrependKeyboardStatusRow();
void KeyboardStatusTogglePressed();
void FocusCurrentImeIfNeeded();
std::map<views::View*, std::string> ime_map_;
std::map<views::View*, std::string> property_map_;
raw_ptr<KeyboardStatusRow, DanglingUntriaged> keyboard_status_row_;
std::string last_selected_item_id_;
bool last_item_selected_with_keyboard_ = false;
bool should_focus_ime_after_selection_with_keyboard_ = false;
raw_ptr<views::View, DanglingUntriaged> current_ime_view_ = nullptr;
raw_ptr<views::View, DanglingUntriaged> container_ = nullptr;
};
class ASH_EXPORT ImeListViewTestApi {
public:
explicit ImeListViewTestApi(ImeListView* ime_list_view);
ImeListViewTestApi(const ImeListViewTestApi&) = delete;
ImeListViewTestApi& operator=(const ImeListViewTestApi&) = delete;
virtual ~ImeListViewTestApi();
views::View* GetToggleView() const;
const std::map<views::View*, std::string>& ime_map() const {
return ime_list_view_->ime_map_;
}
private:
raw_ptr<ImeListView> ime_list_view_;
};
}
#endif