1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ASH_INPUT_METHOD_CANDIDATE_WINDOW_VIEW_H_
#define CHROME_BROWSER_UI_ASH_INPUT_METHOD_CANDIDATE_WINDOW_VIEW_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "ui/base/ime/candidate_window.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/chromeos/ui_chromeos_export.h"
#include "ui/views/bubble/bubble_dialog_delegate_view.h"
#include "ui/views/metadata/view_factory.h"
namespace ui {
namespace ime {
class CandidateView;
class InformationTextArea;
// CandidateWindowView is the main container of the candidate window UI.
class UI_CHROMEOS_EXPORT CandidateWindowView
: public views::BubbleDialogDelegateView {
METADATA_HEADER(CandidateWindowView, views::BubbleDialogDelegateView)
public:
// The object can be monitored by the observer.
class Observer {
public:
virtual ~Observer() = default;
// The function is called when a candidate is committed.
virtual void OnCandidateCommitted(int index) = 0;
};
explicit CandidateWindowView(gfx::NativeView parent);
CandidateWindowView(const CandidateWindowView&) = delete;
CandidateWindowView& operator=(const CandidateWindowView&) = delete;
~CandidateWindowView() override;
views::Widget* InitWidget();
// views::BubbleDialogDelegateView:
void OnThemeChanged() override;
// Adds the given observer. The ownership is not transferred.
void AddObserver(Observer* observer) { observers_.AddObserver(observer); }
// Removes the given observer.
void RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
// Hides the lookup table.
void HideLookupTable();
// Hides the auxiliary text.
void HideAuxiliaryText();
// Hides the preedit text.
void HidePreeditText();
// Shows the lookup table.
void ShowLookupTable();
// Shows the auxiliary text.
void ShowAuxiliaryText();
// Shows the preedit text.
void ShowPreeditText();
// Updates the preedit text.
void UpdatePreeditText(const std::u16string& text);
// Updates candidates of the candidate window from |candidate_window|.
// Candidates are arranged per |orientation|.
void UpdateCandidates(const ui::CandidateWindow& candidate_window);
void SetCursorAndCompositionBounds(const gfx::Rect& cursor_bounds,
const gfx::Rect& composition_bounds);
private:
friend class CandidateWindowViewTest;
void SelectCandidateAt(int index_in_page);
void UpdateVisibility();
// Initializes the candidate views if needed.
void MaybeInitializeCandidateViews(
const ui::CandidateWindow& candidate_window);
void CandidateViewPressed(int index);
// The candidate window data model.
ui::CandidateWindow candidate_window_;
// The index in the current page of the candidate currently being selected.
int selected_candidate_index_in_page_;
// The observers of the object.
base::ObserverList<Observer>::Unchecked observers_;
// Views created in the class will be part of tree of |this|, so these
// child views will be deleted when |this| is deleted.
raw_ptr<InformationTextArea> auxiliary_text_;
raw_ptr<InformationTextArea> preedit_;
raw_ptr<views::View> candidate_area_;
// The candidate views are used for rendering candidates.
std::vector<raw_ptr<CandidateView, VectorExperimental>> candidate_views_;
// Current columns size in |candidate_area_|.
gfx::Size previous_shortcut_column_size_;
gfx::Size previous_candidate_column_size_;
gfx::Size previous_annotation_column_size_;
};
BEGIN_VIEW_BUILDER(UI_CHROMEOS_EXPORT,
CandidateWindowView,
views::BubbleDialogDelegateView)
END_VIEW_BUILDER
} // namespace ime
} // namespace ui
DEFINE_VIEW_BUILDER(UI_CHROMEOS_EXPORT, ui::ime::CandidateWindowView)
#endif // CHROME_BROWSER_UI_ASH_INPUT_METHOD_CANDIDATE_WINDOW_VIEW_H_
|