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/progress_bar_example.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/button/label_button.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/progress_bar.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const double kStepSize = 0.1;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)double SetToMax(double percent) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return std::min(std::max(percent, 0.0), 1.0);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace examples {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProgressBarExample::ProgressBarExample()
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : ExampleBase("Progress Bar"),
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      minus_button_(NULL),
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      plus_button_(NULL),
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      progress_bar_(NULL),
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      current_percent_(0.0) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProgressBarExample::~ProgressBarExample() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProgressBarExample::CreateExampleView(View* container) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GridLayout* layout = new GridLayout(container);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  container->SetLayoutManager(layout);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ColumnSet* column_set = layout->AddColumnSet(0);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        0, GridLayout::USE_PREF, 0, 0);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddPaddingColumn(0, 8);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddColumn(GridLayout::FILL, GridLayout::FILL,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        1, GridLayout::USE_PREF, 0, 0);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddPaddingColumn(0, 8);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  column_set->AddColumn(GridLayout::TRAILING, GridLayout::FILL,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        0, GridLayout::USE_PREF, 0, 0);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->StartRow(0, 0);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  minus_button_ = new LabelButton(this, base::ASCIIToUTF16("-"));
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddView(minus_button_);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  progress_bar_ = new ProgressBar();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddView(progress_bar_);
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  plus_button_ = new LabelButton(this, base::ASCIIToUTF16("+"));
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddView(plus_button_);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProgressBarExample::ButtonPressed(Button* sender, const ui::Event& event) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (sender == minus_button_)
64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    current_percent_ = SetToMax(current_percent_ - kStepSize);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if (sender == plus_button_)
66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    current_percent_ = SetToMax(current_percent_ + kStepSize);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  progress_bar_->SetValue(current_percent_);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace examples
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
73