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/examples_window.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <algorithm>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h"
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/combobox_model.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_base_paths.h"
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/views/background.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/combobox/combobox.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/bubble_example.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/button_example.h"
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/views/examples/checkbox_example.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/combobox_example.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/double_split_view_example.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/label_example.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/link_example.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/menu_example.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/message_box_example.h"
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/examples/multiline_example.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/progress_bar_example.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/radio_button_example.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/scroll_view_example.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/single_split_view_example.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/slider_example.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/tabbed_pane_example.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/table_example.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/text_example.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/textfield_example.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/throbber_example.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/tree_view_example.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/examples/widget_example.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/fill_layout.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace examples {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef scoped_ptr<ScopedVector<ExampleBase> > ScopedExamples;
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Creates the default set of examples. Caller owns the result.
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ScopedExamples CreateExamples() {
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ScopedExamples examples(new ScopedVector<ExampleBase>);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new BubbleExample);
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new ButtonExample);
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new CheckboxExample);
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new ComboboxExample);
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new DoubleSplitViewExample);
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new LabelExample);
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new LinkExample);
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new MenuExample);
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new MessageBoxExample);
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new MultilineExample);
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new ProgressBarExample);
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new RadioButtonExample);
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new ScrollViewExample);
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new SingleSplitViewExample);
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new SliderExample);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new TabbedPaneExample);
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new TableExample);
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new TextExample);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new TextfieldExample);
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new ThrobberExample);
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new TreeViewExample);
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  examples->push_back(new WidgetExample);
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return examples.Pass();
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct ExampleTitleCompare {
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool operator() (ExampleBase* a, ExampleBase* b) {
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return a->example_title() < b->example_title();
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ScopedExamples GetExamplesToShow(ScopedExamples extra) {
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ScopedExamples examples(CreateExamples());
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (extra.get()) {
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    examples->insert(examples->end(), extra->begin(), extra->end());
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    extra->weak_clear();
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::sort(examples->begin(), examples->end(), ExampleTitleCompare());
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return examples.Pass();
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Model for the examples that are being added via AddExample().
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ComboboxModelExampleList : public ui::ComboboxModel {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ComboboxModelExampleList() {}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ComboboxModelExampleList() {}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetExamples(ScopedExamples examples) {
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    example_list_.swap(*examples);
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // ui::ComboboxModel:
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetItemCount() const OVERRIDE { return example_list_.size(); }
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::string16 GetItemAt(int index) OVERRIDE {
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return base::UTF8ToUTF16(example_list_[index]->example_title());
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  View* GetItemViewAt(int index) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return example_list_[index]->example_view();
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedVector<ExampleBase> example_list_;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ComboboxModelExampleList);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExamplesWindowContents : public WidgetDelegateView,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               public ComboboxListener {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ExamplesWindowContents(Operation operation, ScopedExamples examples)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : combobox_(new Combobox(&combobox_model_)),
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        example_shown_(new View),
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        status_label_(new Label),
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        operation_(operation) {
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    instance_ = this;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    combobox_->set_listener(this);
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    combobox_model_.SetExamples(examples.Pass());
134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    combobox_->ModelChanged();
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    set_background(Background::CreateStandardPanelBackground());
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GridLayout* layout = new GridLayout(this);
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetLayoutManager(layout);
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ColumnSet* column_set = layout->AddColumnSet(0);
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    column_set->AddPaddingColumn(0, 5);
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                          GridLayout::USE_PREF, 0, 0);
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    column_set->AddPaddingColumn(0, 5);
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    layout->AddPaddingRow(0, 5);
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    layout->StartRow(0 /* no expand */, 0);
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    layout->AddView(combobox_);
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (combobox_model_.GetItemCount() > 0) {
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      layout->StartRow(1, 0);
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      example_shown_->SetLayoutManager(new FillLayout());
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      example_shown_->AddChildView(combobox_model_.GetItemViewAt(0));
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      layout->AddView(example_shown_);
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    layout->StartRow(0 /* no expand */, 0);
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    layout->AddView(status_label_);
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    layout->AddPaddingRow(0, 5);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~ExamplesWindowContents() {
1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    // Delete |combobox_| first as it references |combobox_model_|.
1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    delete combobox_;
1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    combobox_ = NULL;
1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Prints a message in the status area, at the bottom of the window.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetStatus(const std::string& status) {
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    status_label_->SetText(base::UTF8ToUTF16(status));
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ExamplesWindowContents* instance() { return instance_; }
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // WidgetDelegateView:
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanResize() const OVERRIDE { return true; }
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanMaximize() const OVERRIDE { return true; }
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanMinimize() const OVERRIDE { return true; }
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::string16 GetWindowTitle() const OVERRIDE {
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return base::ASCIIToUTF16("Views Examples");
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual View* GetContentsView() OVERRIDE { return this; }
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WindowClosing() OVERRIDE {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    instance_ = NULL;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (operation_ == QUIT_ON_CLOSE)
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::MessageLoopForUI::current()->Quit();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // ComboboxListener:
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnPerformAction(Combobox* combobox) OVERRIDE {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK_EQ(combobox, combobox_);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DCHECK(combobox->selected_index() < combobox_model_.GetItemCount());
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    example_shown_->RemoveAllChildViews(false);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    example_shown_->AddChildView(combobox_model_.GetItemViewAt(
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        combobox->selected_index()));
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    example_shown_->RequestFocus();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetStatus(std::string());
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Layout();
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ExamplesWindowContents* instance_;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ComboboxModelExampleList combobox_model_;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Combobox* combobox_;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  View* example_shown_;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Label* status_label_;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const Operation operation_;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ExamplesWindowContents);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExamplesWindowContents* ExamplesWindowContents::instance_ = NULL;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShowExamplesWindow(Operation operation,
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                        gfx::NativeWindow window_context,
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        ScopedExamples extra_examples) {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (ExamplesWindowContents::instance()) {
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExamplesWindowContents::instance()->GetWidget()->Activate();
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ScopedExamples examples(GetExamplesToShow(extra_examples.Pass()));
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Widget* widget = new Widget;
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Widget::InitParams params;
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    params.delegate = new ExamplesWindowContents(operation, examples.Pass());
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    params.context = window_context;
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    params.bounds = gfx::Rect(0, 0, 850, 300);
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    widget->Init(params);
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    widget->Show();
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LogStatus(const std::string& string) {
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExamplesWindowContents::instance()->SetStatus(string);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace examples
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
236