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)#include "ui/views/examples/textfield_example.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/range/range.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/render_text.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/button/label_button.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UTF16ToUTF8; 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace examples { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TextfieldExample::TextfieldExample() 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : ExampleBase("Textfield"), 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) name_(NULL), 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) password_(NULL), 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_only_(NULL), 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) show_password_(NULL), 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) clear_all_(NULL), 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) append_(NULL), 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) set_(NULL), 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) set_style_(NULL) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TextfieldExample::~TextfieldExample() { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TextfieldExample::CreateExampleView(View* container) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_ = new Textfield(); 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) password_ = new Textfield(); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) password_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password_->set_placeholder_text(ASCIIToUTF16("password")); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_only_ = new Textfield(); 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_only_->SetReadOnly(true); 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_only_->SetText(ASCIIToUTF16("read only")); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) show_password_ = new LabelButton(this, ASCIIToUTF16("Show password")); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) clear_all_ = new LabelButton(this, ASCIIToUTF16("Clear All")); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) append_ = new LabelButton(this, ASCIIToUTF16("Append")); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_ = new LabelButton(this, ASCIIToUTF16("Set")); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_style_ = new LabelButton(this, ASCIIToUTF16("Set Styles")); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) name_->set_controller(this); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) password_->set_controller(this); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout* layout = new GridLayout(container); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container->SetLayoutManager(layout); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* column_set = layout->AddColumnSet(0); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0.2f, GridLayout::USE_PREF, 0, 0); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0.8f, GridLayout::USE_PREF, 0, 0); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 0); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(new Label(ASCIIToUTF16("Name:"))); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(name_); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 0); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(new Label(ASCIIToUTF16("Password:"))); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(password_); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 0); 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layout->AddView(new Label(ASCIIToUTF16("Read Only:"))); 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layout->AddView(read_only_); 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) layout->StartRow(0, 0); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(show_password_); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 0); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(clear_all_); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 0); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(append_); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 0); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(set_); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->StartRow(0, 0); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout->AddView(set_style_); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TextfieldExample::ContentsChanged(Textfield* sender, 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& new_contents) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sender == name_) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintStatus("Name [%s]", UTF16ToUTF8(new_contents).c_str()); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == password_) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintStatus("Password [%s]", UTF16ToUTF8(new_contents).c_str()); 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } else if (sender == read_only_) { 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PrintStatus("Read Only [%s]", UTF16ToUTF8(new_contents).c_str()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TextfieldExample::HandleKeyEvent(Textfield* sender, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::KeyEvent& key_event) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TextfieldExample::HandleMouseEvent(Textfield* sender, 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::MouseEvent& mouse_event) { 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrintStatus("HandleMouseEvent click count=%d", mouse_event.GetClickCount()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TextfieldExample::ButtonPressed(Button* sender, const ui::Event& event) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sender == show_password_) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintStatus("Password [%s]", UTF16ToUTF8(password_->text()).c_str()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == clear_all_) { 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 empty; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_->SetText(empty); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password_->SetText(empty); 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_only_->SetText(empty); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == append_) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_->AppendText(ASCIIToUTF16("[append]")); 11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) password_->AppendText(ASCIIToUTF16("[append]")); 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_only_->AppendText(ASCIIToUTF16("[append]")); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == set_) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_->SetText(ASCIIToUTF16("[set]")); 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) password_->SetText(ASCIIToUTF16("[set]")); 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) read_only_->SetText(ASCIIToUTF16("[set]")); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (sender == set_style_) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!name_->text().empty()) { 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->SetColor(SK_ColorGREEN); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->SetStyle(gfx::BOLD, true); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name_->text().length() >= 5) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t fifth = name_->text().length() / 5; 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range big_range(1 * fifth, 4 * fifth); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->ApplyStyle(gfx::BOLD, false, big_range); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->ApplyStyle(gfx::UNDERLINE, true, big_range); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->ApplyColor(SK_ColorBLUE, big_range); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range small_range(2 * fifth, 3 * fifth); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->ApplyStyle(gfx::ITALIC, true, small_range); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->ApplyStyle(gfx::UNDERLINE, false, small_range); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->ApplyStyle(gfx::DIAGONAL_STRIKE, true, small_range); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name_->ApplyColor(SK_ColorRED, small_range); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace examples 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 145