15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_VIEW_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_VIEW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/ibus/ibus_lookup_table.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace input_method {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CandidateWindowView;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CandidateView renderes a row of a candidate.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CandidateView : public views::View {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CandidateView(CandidateWindowView* parent_candidate_window,
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                int index_in_page,
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                IBusLookupTable::Orientation orientation);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~CandidateView() {}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the candidate view with the given column widths.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A width of 0 means that the column is resizable.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(int shortcut_column_width,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            int candidate_column_width,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            int annotation_column_width,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            int column_height);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets candidate text to the given text.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetCandidateText(const string16& text);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets shortcut text to the given text.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetShortcutText(const string16& text);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets annotation text to the given text.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetAnnotationText(const string16& text);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets infolist icon.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetInfolistIcon(bool enable);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Selects the candidate row. Changes the appearance to make it look
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // like a selected candidate.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Select();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unselects the candidate row. Changes the appearance to make it look
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // like an unselected candidate.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Unselect();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Enables or disables the candidate row based on |enabled|. Changes the
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // appearance to make it look like unclickable area.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetRowEnabled(bool enabled);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the relative position of the candidate label.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point GetCandidateLabelPosition() const;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class CandidateWindowViewTest;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CandidateWindowViewTest, ShortcutSettingTest);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from View:
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Selects the candidate located at the point.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SelectCandidateAt(const gfx::Point& location);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifies labels of their new background colors.  Called whenever the view's
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // background color changes.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateLabelBackgroundColors();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Zero-origin index in the current page.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int index_in_page_;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The orientation of the candidate view.
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  IBusLookupTable::Orientation orientation_;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The parent candidate window that contains this view.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CandidateWindowView* parent_candidate_window_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Views created in the class will be part of tree of |this|, so these
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // child views will be deleted when |this| is deleted.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The shortcut label renders shortcut numbers like 1, 2, and 3.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* shortcut_label_;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The candidate label renders candidates.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* candidate_label_;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The annotation label renders annotations.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Label* annotation_label_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The infolist icon.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::View* infolist_icon_;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool infolist_icon_enabled_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CandidateView);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace input_method
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_VIEW_H_
103