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