OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/examples/examples_window_with_content.h" | 5 #include "ui/views/examples/examples_window_with_content.h" |
6 | 6 |
7 #include <string> | |
8 | |
9 #include "base/memory/scoped_vector.h" | |
10 #include "base/strings/utf_string_conversions.h" | |
11 #include "content/public/browser/browser_context.h" | 7 #include "content/public/browser/browser_context.h" |
12 #include "ui/base/models/combobox_model.h" | |
13 #include "ui/base/ui_base_paths.h" | |
14 #include "ui/views/background.h" | |
15 #include "ui/views/controls/combobox/combobox.h" | |
16 #include "ui/views/controls/label.h" | |
17 #include "ui/views/examples/bubble_example.h" | |
18 #include "ui/views/examples/button_example.h" | |
19 #include "ui/views/examples/checkbox_example.h" | |
20 #include "ui/views/examples/combobox_example.h" | |
21 #include "ui/views/examples/double_split_view_example.h" | |
22 #include "ui/views/examples/label_example.h" | |
23 #include "ui/views/examples/link_example.h" | |
24 #include "ui/views/examples/menu_example.h" | |
25 #include "ui/views/examples/message_box_example.h" | |
26 #include "ui/views/examples/multiline_example.h" | |
27 #include "ui/views/examples/progress_bar_example.h" | |
28 #include "ui/views/examples/radio_button_example.h" | |
29 #include "ui/views/examples/scroll_view_example.h" | |
30 #include "ui/views/examples/single_split_view_example.h" | |
31 #include "ui/views/examples/slider_example.h" | |
32 #include "ui/views/examples/tabbed_pane_example.h" | |
33 #include "ui/views/examples/table_example.h" | |
34 #include "ui/views/examples/text_example.h" | |
35 #include "ui/views/examples/textfield_example.h" | |
36 #include "ui/views/examples/throbber_example.h" | |
37 #include "ui/views/examples/tree_view_example.h" | |
38 #include "ui/views/examples/webview_example.h" | 8 #include "ui/views/examples/webview_example.h" |
39 #include "ui/views/examples/widget_example.h" | |
40 #include "ui/views/layout/fill_layout.h" | |
41 #include "ui/views/layout/grid_layout.h" | |
42 #include "ui/views/widget/widget.h" | |
43 #include "ui/views/widget/widget_delegate.h" | |
44 | 9 |
45 namespace views { | 10 namespace views { |
46 namespace examples { | 11 namespace examples { |
47 | 12 |
48 // Model for the examples that are being added via AddExample(). | |
49 class ComboboxModelExampleList : public ui::ComboboxModel { | |
50 public: | |
51 ComboboxModelExampleList() {} | |
52 virtual ~ComboboxModelExampleList() {} | |
53 | |
54 // Overridden from ui::ComboboxModel: | |
55 virtual int GetItemCount() const OVERRIDE { return example_list_.size(); } | |
56 virtual base::string16 GetItemAt(int index) OVERRIDE { | |
57 return base::UTF8ToUTF16(example_list_[index]->example_title()); | |
58 } | |
59 | |
60 View* GetItemViewAt(int index) { | |
61 return example_list_[index]->example_view(); | |
62 } | |
63 | |
64 void AddExample(ExampleBase* example) { | |
65 example_list_.push_back(example); | |
66 } | |
67 | |
68 private: | |
69 ScopedVector<ExampleBase> example_list_; | |
70 | |
71 DISALLOW_COPY_AND_ASSIGN(ComboboxModelExampleList); | |
72 }; | |
73 | |
74 class ExamplesWindowContents : public WidgetDelegateView, | |
75 public ComboboxListener { | |
76 public: | |
77 ExamplesWindowContents(Operation operation, | |
78 content::BrowserContext* browser_context) | |
79 : combobox_(new Combobox(&combobox_model_)), | |
80 example_shown_(new View), | |
81 status_label_(new Label), | |
82 operation_(operation), | |
83 browser_context_(browser_context) { | |
84 instance_ = this; | |
85 combobox_->set_listener(this); | |
86 } | |
87 virtual ~ExamplesWindowContents() { | |
88 // Delete |combobox_| first as it references |combobox_model_|. | |
89 delete combobox_; | |
90 combobox_ = NULL; | |
91 } | |
92 | |
93 // Prints a message in the status area, at the bottom of the window. | |
94 void SetStatus(const std::string& status) { | |
95 status_label_->SetText(base::UTF8ToUTF16(status)); | |
96 } | |
97 | |
98 static ExamplesWindowContents* instance() { return instance_; } | |
99 | |
100 private: | |
101 // Overridden from WidgetDelegateView: | |
102 virtual bool CanResize() const OVERRIDE { return true; } | |
103 virtual bool CanMaximize() const OVERRIDE { return true; } | |
104 virtual base::string16 GetWindowTitle() const OVERRIDE { | |
105 return base::ASCIIToUTF16("Views Examples"); | |
106 } | |
107 virtual View* GetContentsView() OVERRIDE { return this; } | |
108 virtual void WindowClosing() OVERRIDE { | |
109 instance_ = NULL; | |
110 if (operation_ == QUIT_ON_CLOSE) | |
111 base::MessageLoopForUI::current()->Quit(); | |
112 } | |
113 | |
114 // Overridden from View: | |
115 virtual void ViewHierarchyChanged( | |
116 const ViewHierarchyChangedDetails& details) OVERRIDE { | |
117 if (details.is_add && details.child == this) | |
118 InitExamplesWindow(); | |
119 } | |
120 | |
121 // Overridden from ComboboxListener: | |
122 virtual void OnSelectedIndexChanged(Combobox* combobox) OVERRIDE { | |
123 DCHECK_EQ(combobox, combobox_); | |
124 DCHECK(combobox->selected_index() < combobox_model_.GetItemCount()); | |
125 example_shown_->RemoveAllChildViews(false); | |
126 example_shown_->AddChildView(combobox_model_.GetItemViewAt( | |
127 combobox->selected_index())); | |
128 SetStatus(std::string()); | |
129 Layout(); | |
130 SchedulePaint(); | |
131 } | |
132 | |
133 // Creates the layout within the examples window. | |
134 void InitExamplesWindow() { | |
135 AddExamples(); | |
136 | |
137 set_background(Background::CreateStandardPanelBackground()); | |
138 GridLayout* layout = new GridLayout(this); | |
139 SetLayoutManager(layout); | |
140 ColumnSet* column_set = layout->AddColumnSet(0); | |
141 column_set->AddPaddingColumn(0, 5); | |
142 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, | |
143 GridLayout::USE_PREF, 0, 0); | |
144 column_set->AddPaddingColumn(0, 5); | |
145 layout->AddPaddingRow(0, 5); | |
146 layout->StartRow(0 /* no expand */, 0); | |
147 layout->AddView(combobox_); | |
148 | |
149 if (combobox_model_.GetItemCount() > 0) { | |
150 layout->StartRow(1, 0); | |
151 example_shown_->SetLayoutManager(new FillLayout()); | |
152 example_shown_->AddChildView(combobox_model_.GetItemViewAt(0)); | |
153 layout->AddView(example_shown_); | |
154 } | |
155 | |
156 layout->StartRow(0 /* no expand */, 0); | |
157 layout->AddView(status_label_); | |
158 layout->AddPaddingRow(0, 5); | |
159 } | |
160 | |
161 // Adds all the individual examples to the combobox model. | |
162 void AddExamples() { | |
163 // Please keep this list in alphabetical order! | |
164 combobox_model_.AddExample(new BubbleExample); | |
165 combobox_model_.AddExample(new ButtonExample); | |
166 combobox_model_.AddExample(new CheckboxExample); | |
167 combobox_model_.AddExample(new ComboboxExample); | |
168 combobox_model_.AddExample(new DoubleSplitViewExample); | |
169 combobox_model_.AddExample(new LabelExample); | |
170 combobox_model_.AddExample(new LinkExample); | |
171 combobox_model_.AddExample(new MenuExample); | |
172 combobox_model_.AddExample(new MessageBoxExample); | |
173 combobox_model_.AddExample(new MultilineExample); | |
174 combobox_model_.AddExample(new ProgressBarExample); | |
175 combobox_model_.AddExample(new RadioButtonExample); | |
176 combobox_model_.AddExample(new ScrollViewExample); | |
177 combobox_model_.AddExample(new SingleSplitViewExample); | |
178 combobox_model_.AddExample(new SliderExample); | |
179 combobox_model_.AddExample(new TabbedPaneExample); | |
180 combobox_model_.AddExample(new TableExample); | |
181 combobox_model_.AddExample(new TextExample); | |
182 combobox_model_.AddExample(new TextfieldExample); | |
183 combobox_model_.AddExample(new ThrobberExample); | |
184 combobox_model_.AddExample(new TreeViewExample); | |
185 combobox_model_.AddExample(new WebViewExample(browser_context_)); | |
186 combobox_model_.AddExample(new WidgetExample); | |
187 } | |
188 | |
189 static ExamplesWindowContents* instance_; | |
190 ComboboxModelExampleList combobox_model_; | |
191 Combobox* combobox_; | |
192 View* example_shown_; | |
193 Label* status_label_; | |
194 const Operation operation_; | |
195 content::BrowserContext* browser_context_; | |
196 | |
197 DISALLOW_COPY_AND_ASSIGN(ExamplesWindowContents); | |
198 }; | |
199 | |
200 // static | |
201 ExamplesWindowContents* ExamplesWindowContents::instance_ = NULL; | |
202 | |
203 void ShowExamplesWindowWithContent(Operation operation, | 13 void ShowExamplesWindowWithContent(Operation operation, |
204 content::BrowserContext* browser_context, | 14 content::BrowserContext* browser_context, |
205 gfx::NativeView window_context) { | 15 gfx::NativeView window_context) { |
206 if (ExamplesWindowContents::instance()) { | 16 scoped_ptr<ScopedVector<ExampleBase> > extra_examples( |
207 ExamplesWindowContents::instance()->GetWidget()->Activate(); | 17 new ScopedVector<ExampleBase>); |
208 } else { | 18 extra_examples->push_back(new WebViewExample(browser_context)); |
209 Widget* widget = new Widget; | 19 ShowExamplesWindow(operation, window_context, extra_examples.Pass()); |
210 Widget::InitParams params; | |
211 params.delegate = new ExamplesWindowContents(operation, browser_context); | |
212 params.context = window_context; | |
213 params.bounds = gfx::Rect(0, 0, 850, 300); | |
214 params.top_level = true; | |
215 widget->Init(params); | |
216 widget->Show(); | |
217 } | |
218 } | |
219 | |
220 void LogStatus(const std::string& string) { | |
221 ExamplesWindowContents::instance()->SetStatus(string); | |
222 } | 20 } |
223 | 21 |
224 } // namespace examples | 22 } // namespace examples |
225 } // namespace views | 23 } // namespace views |
OLD | NEW |