| Index: chrome/browser/chromeos/input_method/candidate_window_view.h
|
| diff --git a/chrome/browser/chromeos/input_method/candidate_window_view.h b/chrome/browser/chromeos/input_method/candidate_window_view.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..05b593ab5fb14e76bdeda589d99618e811393a8a
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/input_method/candidate_window_view.h
|
| @@ -0,0 +1,186 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_VIEW_H_
|
| +#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_VIEW_H_
|
| +
|
| +#include "chrome/browser/chromeos/input_method/ibus_ui_controller.h"
|
| +#include "views/view.h"
|
| +
|
| +namespace chromeos {
|
| +namespace input_method {
|
| +
|
| +class CandidateView;
|
| +class InformationTextArea;
|
| +class HidableArea;
|
| +
|
| +// CandidateWindowView is the main container of the candidate window UI.
|
| +class CandidateWindowView : public views::View {
|
| + public:
|
| + // The object can be monitored by the observer.
|
| + class Observer {
|
| + public:
|
| + virtual ~Observer() {}
|
| + // The function is called when a candidate is committed.
|
| + // See comments at NotifyCandidateClicked() in chromeos_input_method_ui.h
|
| + // for details about the parameters.
|
| + virtual void OnCandidateCommitted(int index, int button, int flag) = 0;
|
| + };
|
| +
|
| + explicit CandidateWindowView(views::Widget* parent_frame);
|
| + virtual ~CandidateWindowView() {}
|
| + void Init();
|
| +
|
| + // 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);
|
| + }
|
| +
|
| + // Selects the candidate specified by the index in the current page
|
| + // (zero-origin). Changes the appearance of the selected candidate,
|
| + // updates the information in the candidate window as needed.
|
| + void SelectCandidateAt(int index_in_page);
|
| +
|
| + // The function is called when a candidate is being dragged. From the
|
| + // given point, locates the candidate under the mouse cursor, and
|
| + // selects it.
|
| + void OnCandidatePressed(const gfx::Point& point);
|
| +
|
| + // Commits the candidate currently being selected.
|
| + void CommitCandidate();
|
| +
|
| + // Hides the lookup table.
|
| + void HideLookupTable();
|
| +
|
| + // Hides the auxiliary text.
|
| + void HideAuxiliaryText();
|
| +
|
| + // Hides the preedit text.
|
| + void HidePreeditText();
|
| +
|
| + // Hides whole the candidate window.
|
| + void HideAll();
|
| +
|
| + // Shows the lookup table.
|
| + void ShowLookupTable();
|
| +
|
| + // Shows the auxiliary text.
|
| + void ShowAuxiliaryText();
|
| +
|
| + // Shows the preedit text.
|
| + void ShowPreeditText();
|
| +
|
| + // Updates the auxiliary text.
|
| + void UpdateAuxiliaryText(const std::string& utf8_text);
|
| +
|
| + // Updates the preedit text.
|
| + void UpdatePreeditText(const std::string& utf8_text);
|
| +
|
| + // Returns true if we should update candidate views in the window. For
|
| + // instance, if we are going to show the same candidates as before, we
|
| + // don't have to update candidate views. This happens when the user just
|
| + // moves the cursor in the same page in the candidate window.
|
| + static bool ShouldUpdateCandidateViews(
|
| + const InputMethodLookupTable& old_table,
|
| + const InputMethodLookupTable& new_table);
|
| +
|
| + // Updates candidates of the candidate window from |lookup_table|.
|
| + // Candidates are arranged per |orientation|.
|
| + void UpdateCandidates(const InputMethodLookupTable& lookup_table);
|
| +
|
| + // Resizes and moves the parent frame. The two actions should be
|
| + // performed consecutively as resizing may require the candidate window
|
| + // to move. For instance, we may need to move the candidate window from
|
| + // below the cursor to above the cursor, if the candidate window becomes
|
| + // too big to be shown near the bottom of the screen. This function
|
| + // needs to be called when the visible contents of the candidate window
|
| + // are modified.
|
| + void ResizeAndMoveParentFrame();
|
| +
|
| + // Returns the horizontal offset used for placing the vertical candidate
|
| + // window so that the first candidate is aligned with the the text being
|
| + // converted like:
|
| + //
|
| + // XXX <- The user is converting XXX
|
| + // +-----+
|
| + // |1 XXX|
|
| + // |2 YYY|
|
| + // |3 ZZZ|
|
| + //
|
| + // Returns 0 if no candidate is present.
|
| + int GetHorizontalOffset();
|
| +
|
| + void set_cursor_location(const gfx::Rect& cursor_location) {
|
| + cursor_location_ = cursor_location;
|
| + }
|
| +
|
| + const gfx::Rect& cursor_location() const { return cursor_location_; }
|
| +
|
| + protected:
|
| + // Override View::VisibilityChanged()
|
| + virtual void VisibilityChanged(View* starting_from, bool is_visible) OVERRIDE;
|
| +
|
| + // Override View::OnBoundsChanged()
|
| + virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE;
|
| +
|
| + private:
|
| + // Initializes the candidate views if needed.
|
| + void MaybeInitializeCandidateViews(
|
| + const InputMethodLookupTable& lookup_table);
|
| +
|
| + // Returns the appropriate area (header or footer) to put auxiliary texts.
|
| + InformationTextArea* GetAuxiliaryTextArea();
|
| +
|
| + // The lookup table (candidates).
|
| + InputMethodLookupTable lookup_table_;
|
| +
|
| + // The index in the current page of the candidate currently being selected.
|
| + int selected_candidate_index_in_page_;
|
| +
|
| + // The observers of the object.
|
| + ObserverList<Observer> observers_;
|
| +
|
| + // The parent frame.
|
| + views::Widget* parent_frame_;
|
| +
|
| + // Views created in the class will be part of tree of |this|, so these
|
| + // child views will be deleted when |this| is deleted.
|
| +
|
| + // The preedit area is where the preedit text is shown, if it is needed
|
| + // in cases such as the focus is on a plugin that doesn't support in-line
|
| + // preedit drawing.
|
| + InformationTextArea* preedit_area_;
|
| + // The header area is where the auxiliary text is shown, if the
|
| + // orientation is horizontal. If the auxiliary text is not provided, we
|
| + // show nothing. For instance, we show pinyin text like "zhong'guo".
|
| + InformationTextArea* header_area_;
|
| + // The candidate area is where candidates are rendered.
|
| + HidableArea* candidate_area_;
|
| + // The candidate views are used for rendering candidates.
|
| + std::vector<CandidateView*> candidate_views_;
|
| + // The footer area is where the auxiliary text is shown, if the
|
| + // orientation is vertical. Usually the auxiliary text is used for
|
| + // showing candidate number information like 2/19.
|
| + InformationTextArea* footer_area_;
|
| +
|
| + // Current columns width in |candidate_area_|.
|
| + int previous_shortcut_column_width_;
|
| + int previous_candidate_column_width_;
|
| + int previous_annotation_column_width_;
|
| +
|
| + // The last cursor location.
|
| + gfx::Rect cursor_location_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CandidateWindowView);
|
| +};
|
| +
|
| +} // namespace input_method
|
| +} // namespace chromeos
|
| +
|
| +#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_VIEW_H_
|
|
|