1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef MOJO_EXAMPLES_KEYBOARD_KEYBOARD_VIEW_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MOJO_EXAMPLES_KEYBOARD_KEYBOARD_VIEW_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <vector> 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/font_list.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/controls/button/button.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/view.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace views { 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass LabelButton; 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo { 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace examples { 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass KeyboardDelegate; 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct Key; 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct Row; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Shows a keyboard the user can interact with. The delegate is notified any 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// time the user presses a button. 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass KeyboardView : public views::View, public views::ButtonListener { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit KeyboardView(KeyboardDelegate* delegate); 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~KeyboardView(); 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // views::View: 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Layout() OVERRIDE; 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The type of keys that are shown. 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch enum KeyboardLayout { 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KEYBOARD_LAYOUT_ALPHA, 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Uppercase characters. 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KEYBOARD_LAYOUT_SHIFT, 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Numeric characters. 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KEYBOARD_LAYOUT_NUMERIC, 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int event_flags() const { 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return (keyboard_layout_ == KEYBOARD_LAYOUT_SHIFT) ? 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui::EF_SHIFT_DOWN : ui::EF_NONE; 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetLayout(KeyboardLayout layout); 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Lays out the buttons for the specified row. 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void LayoutRow(const Row& row, 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int row_index, 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int initial_x, 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int button_width, 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int button_height); 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Sets the rows to show. 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetRows(const std::vector<const Row*>& rows); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Configures the button in a row. 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void ConfigureButtonsInRow(int row_index, const Row& row); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Creates a new button. 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::View* CreateButton(); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the button corresponding to a key at the specified row/column. 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::LabelButton* GetButton(int row, int column); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Key& GetKeyForButton(views::Button* button) const; 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Reset the fonts of all the buttons. |special_font| is used for the buttons 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // that toggle the layout. 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void ResetFonts(const gfx::FontList& button_font, 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::FontList& special_font); 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // views::ButtonListener: 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void ButtonPressed(views::Button* sender, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ui::Event& event) OVERRIDE; 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KeyboardDelegate* delegate_; 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Maximium number of keys in a row. Determined from |rows_|. 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int max_keys_in_row_; 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch KeyboardLayout keyboard_layout_; 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<const Row*> rows_; 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Size last_layout_size_; 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::FontList button_font_; 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(KeyboardView); 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace examples 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace mojo 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // MOJO_EXAMPLES_KEYBOARD_KEYBOARD_VIEW_H_ 104