Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: views/examples/menu_example.cc

Issue 8555013: views: Move examples/ directory to ui/views/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/examples/menu_example.h ('k') | views/examples/message_box_example.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "views/examples/menu_example.h"
6
7 #include <set>
8
9 #include "base/utf_string_conversions.h"
10 #include "ui/base/models/simple_menu_model.h"
11 #include "views/controls/button/menu_button.h"
12 #include "views/controls/button/text_button.h"
13 #include "views/controls/menu/menu_2.h"
14 #include "views/controls/menu/view_menu_delegate.h"
15 #include "views/layout/fill_layout.h"
16 #include "views/view.h"
17
18 namespace {
19
20 class ExampleMenuModel : public ui::SimpleMenuModel,
21 public ui::SimpleMenuModel::Delegate {
22 public:
23 ExampleMenuModel();
24
25 void RunMenuAt(const gfx::Point& point);
26
27 // Overridden from ui::SimpleMenuModel::Delegate:
28 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
29 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
30 virtual bool GetAcceleratorForCommandId(
31 int command_id,
32 ui::Accelerator* accelerator) OVERRIDE;
33 virtual void ExecuteCommand(int command_id) OVERRIDE;
34
35 private:
36 enum {
37 kGroupMakeDecision,
38 };
39
40 enum {
41 kCommandDoSomething,
42 kCommandSelectAscii,
43 kCommandSelectUtf8,
44 kCommandSelectUtf16,
45 kCommandCheckApple,
46 kCommandCheckOrange,
47 kCommandCheckKiwi,
48 kCommandGoHome,
49 };
50
51 scoped_ptr<views::Menu2> menu_;
52 scoped_ptr<ui::SimpleMenuModel> submenu_;
53 std::set<int> checked_fruits_;
54 int current_encoding_command_id_;
55
56 DISALLOW_COPY_AND_ASSIGN(ExampleMenuModel);
57 };
58
59 class ExampleMenuButton : public views::MenuButton,
60 public views::ViewMenuDelegate {
61 public:
62 ExampleMenuButton(const string16& test, bool show_menu_marker);
63 virtual ~ExampleMenuButton();
64
65 private:
66 // Overridden from views::ViewMenuDelegate:
67 virtual void RunMenu(views::View* source, const gfx::Point& point) OVERRIDE;
68
69 scoped_ptr<ExampleMenuModel> menu_model_;
70 DISALLOW_COPY_AND_ASSIGN(ExampleMenuButton);
71 };
72
73 // ExampleMenuModel ---------------------------------------------------------
74
75 ExampleMenuModel::ExampleMenuModel()
76 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::SimpleMenuModel(this)),
77 current_encoding_command_id_(kCommandSelectAscii) {
78 AddItem(kCommandDoSomething, WideToUTF16(L"Do Something"));
79 AddSeparator();
80 AddRadioItem(kCommandSelectAscii,
81 WideToUTF16(L"ASCII"), kGroupMakeDecision);
82 AddRadioItem(kCommandSelectUtf8,
83 WideToUTF16(L"UTF-8"), kGroupMakeDecision);
84 AddRadioItem(kCommandSelectUtf16,
85 WideToUTF16(L"UTF-16"), kGroupMakeDecision);
86 AddSeparator();
87 AddCheckItem(kCommandCheckApple, WideToUTF16(L"Apple"));
88 AddCheckItem(kCommandCheckOrange, WideToUTF16(L"Orange"));
89 AddCheckItem(kCommandCheckKiwi, WideToUTF16(L"Kiwi"));
90 AddSeparator();
91 AddItem(kCommandGoHome, WideToUTF16(L"Go Home"));
92
93 submenu_.reset(new ui::SimpleMenuModel(this));
94 submenu_->AddItem(kCommandDoSomething, WideToUTF16(L"Do Something 2"));
95 AddSubMenu(0, ASCIIToUTF16("Submenu"), submenu_.get());
96 menu_.reset(new views::Menu2(this));
97 }
98
99 void ExampleMenuModel::RunMenuAt(const gfx::Point& point) {
100 menu_->RunMenuAt(point, views::Menu2::ALIGN_TOPRIGHT);
101 }
102
103 bool ExampleMenuModel::IsCommandIdChecked(int command_id) const {
104 // Radio items.
105 if (command_id == current_encoding_command_id_)
106 return true;
107
108 // Check items.
109 if (checked_fruits_.find(command_id) != checked_fruits_.end())
110 return true;
111
112 return false;
113 }
114
115 bool ExampleMenuModel::IsCommandIdEnabled(int command_id) const {
116 // All commands are enabled except for kCommandGoHome.
117 return command_id != kCommandGoHome;
118 }
119
120 bool ExampleMenuModel::GetAcceleratorForCommandId(
121 int command_id,
122 ui::Accelerator* accelerator) {
123 // We don't use this in the example.
124 return false;
125 }
126
127 void ExampleMenuModel::ExecuteCommand(int command_id) {
128 switch (command_id) {
129 case kCommandDoSomething: {
130 LOG(INFO) << "Done something";
131 break;
132 }
133
134 // Radio items.
135 case kCommandSelectAscii: {
136 current_encoding_command_id_ = kCommandSelectAscii;
137 LOG(INFO) << "Selected ASCII";
138 break;
139 }
140 case kCommandSelectUtf8: {
141 current_encoding_command_id_ = kCommandSelectUtf8;
142 LOG(INFO) << "Selected UTF-8";
143 break;
144 }
145 case kCommandSelectUtf16: {
146 current_encoding_command_id_ = kCommandSelectUtf16;
147 LOG(INFO) << "Selected UTF-16";
148 break;
149 }
150
151 // Check items.
152 case kCommandCheckApple:
153 case kCommandCheckOrange:
154 case kCommandCheckKiwi: {
155 // Print what fruit is checked.
156 const char* checked_fruit = "";
157 if (command_id == kCommandCheckApple) {
158 checked_fruit = "Apple";
159 } else if (command_id == kCommandCheckOrange) {
160 checked_fruit = "Orange";
161 } else if (command_id == kCommandCheckKiwi) {
162 checked_fruit = "Kiwi";
163 }
164 LOG(INFO) << "Checked " << checked_fruit;
165
166 // Update the check status.
167 std::set<int>::iterator iter = checked_fruits_.find(command_id);
168 if (iter == checked_fruits_.end())
169 checked_fruits_.insert(command_id);
170 else
171 checked_fruits_.erase(iter);
172 break;
173 }
174 }
175 }
176
177 // ExampleMenuButton -----------------------------------------------------------
178
179 ExampleMenuButton::ExampleMenuButton(const string16& test,
180 bool show_menu_marker)
181 : ALLOW_THIS_IN_INITIALIZER_LIST(
182 views::MenuButton(NULL, test, this, show_menu_marker)) {
183 }
184
185 ExampleMenuButton::~ExampleMenuButton() {
186 }
187
188 void ExampleMenuButton::RunMenu(views::View* source, const gfx::Point& point) {
189 if (!menu_model_.get())
190 menu_model_.reset(new ExampleMenuModel);
191
192 menu_model_->RunMenuAt(point);
193 }
194
195 } // namespace
196
197 namespace examples {
198
199 MenuExample::MenuExample(ExamplesMain* main)
200 : ExampleBase(main, "Menu") {
201 }
202
203 MenuExample::~MenuExample() {
204 }
205
206 void MenuExample::CreateExampleView(views::View* container) {
207 // views::Menu2 is not a sub class of View, hence we cannot directly
208 // add to the container. Instead, we add a button to open a menu.
209 const bool show_menu_marker = true;
210 ExampleMenuButton* menu_button = new ExampleMenuButton(
211 ASCIIToUTF16("Open a menu"), show_menu_marker);
212 container->SetLayoutManager(new views::FillLayout);
213 container->AddChildView(menu_button);
214 }
215
216 } // namespace examples
OLDNEW
« no previous file with comments | « views/examples/menu_example.h ('k') | views/examples/message_box_example.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698