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

Side by Side Diff: ui/app_list/views/page_switcher.cc

Issue 302803002: Refactor app list so AppsGridView owns the PaginationModel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tests and bugs. Created 6 years, 6 months 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
OLDNEW
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/app_list/views/page_switcher.h" 5 #include "ui/app_list/views/page_switcher.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "third_party/skia/include/core/SkPath.h" 9 #include "third_party/skia/include/core/SkPath.h"
10 #include "ui/app_list/app_list_constants.h" 10 #include "ui/app_list/app_list_constants.h"
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 : model_(model), 121 : model_(model),
122 buttons_(new views::View) { 122 buttons_(new views::View) {
123 AddChildView(buttons_); 123 AddChildView(buttons_);
124 124
125 TotalPagesChanged(); 125 TotalPagesChanged();
126 SelectedPageChanged(-1, model->selected_page()); 126 SelectedPageChanged(-1, model->selected_page());
127 model_->AddObserver(this); 127 model_->AddObserver(this);
128 } 128 }
129 129
130 PageSwitcher::~PageSwitcher() { 130 PageSwitcher::~PageSwitcher() {
131 model_->RemoveObserver(this); 131 if (model_)
132 model_->RemoveObserver(this);
132 } 133 }
133 134
134 int PageSwitcher::GetPageForPoint(const gfx::Point& point) const { 135 int PageSwitcher::GetPageForPoint(const gfx::Point& point) const {
135 if (!buttons_->bounds().Contains(point)) 136 if (!buttons_->bounds().Contains(point))
136 return -1; 137 return -1;
137 138
138 gfx::Point buttons_point(point); 139 gfx::Point buttons_point(point);
139 views::View::ConvertPointToTarget(this, buttons_, &buttons_point); 140 views::View::ConvertPointToTarget(this, buttons_, &buttons_point);
140 141
141 for (int i = 0; i < buttons_->child_count(); ++i) { 142 for (int i = 0; i < buttons_->child_count(); ++i) {
(...skipping 16 matching lines...) Expand all
158 return; 159 return;
159 } 160 }
160 161
161 for (int i = 0; i < button_count; ++i) { 162 for (int i = 0; i < button_count; ++i) {
162 PageSwitcherButton* button = 163 PageSwitcherButton* button =
163 static_cast<PageSwitcherButton*>(buttons_->child_at(i)); 164 static_cast<PageSwitcherButton*>(buttons_->child_at(i));
164 button->SetState(views::CustomButton::STATE_NORMAL); 165 button->SetState(views::CustomButton::STATE_NORMAL);
165 } 166 }
166 } 167 }
167 168
169 void PageSwitcher::ReleasePaginationModel() {
170 if (!model_)
171 return;
172 model_->RemoveObserver(this);
173 model_ = NULL;
174 }
175
168 gfx::Size PageSwitcher::GetPreferredSize() const { 176 gfx::Size PageSwitcher::GetPreferredSize() const {
169 // Always return a size with correct height so that container resize is not 177 // Always return a size with correct height so that container resize is not
170 // needed when more pages are added. 178 // needed when more pages are added.
171 return gfx::Size(buttons_->GetPreferredSize().width(), 179 return gfx::Size(buttons_->GetPreferredSize().width(),
172 kPreferredHeight); 180 kPreferredHeight);
173 } 181 }
174 182
175 void PageSwitcher::Layout() { 183 void PageSwitcher::Layout() {
176 gfx::Rect rect(GetContentsBounds()); 184 gfx::Rect rect(GetContentsBounds());
177 185
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 views::BoxLayout::kHorizontal, kButtonStripPadding, 0, button_spacing)); 219 views::BoxLayout::kHorizontal, kButtonStripPadding, 0, button_spacing));
212 for (int i = 0; i < button_count; ++i) { 220 for (int i = 0; i < button_count; ++i) {
213 PageSwitcherButton* button = 221 PageSwitcherButton* button =
214 static_cast<PageSwitcherButton*>(buttons_->child_at(i)); 222 static_cast<PageSwitcherButton*>(buttons_->child_at(i));
215 button->set_button_width(button_width); 223 button->set_button_width(button_width);
216 } 224 }
217 } 225 }
218 226
219 void PageSwitcher::ButtonPressed(views::Button* sender, 227 void PageSwitcher::ButtonPressed(views::Button* sender,
220 const ui::Event& event) { 228 const ui::Event& event) {
229 if (!model_)
230 return;
231
221 for (int i = 0; i < buttons_->child_count(); ++i) { 232 for (int i = 0; i < buttons_->child_count(); ++i) {
222 if (sender == static_cast<views::Button*>(buttons_->child_at(i))) { 233 if (sender == static_cast<views::Button*>(buttons_->child_at(i))) {
223 model_->SelectPage(i, true /* animate */); 234 model_->SelectPage(i, true /* animate */);
224 break; 235 break;
225 } 236 }
226 } 237 }
227 } 238 }
228 239
229 void PageSwitcher::TotalPagesChanged() { 240 void PageSwitcher::TotalPagesChanged() {
241 DCHECK(model_);
230 buttons_->RemoveAllChildViews(true); 242 buttons_->RemoveAllChildViews(true);
231 for (int i = 0; i < model_->total_pages(); ++i) { 243 for (int i = 0; i < model_->total_pages(); ++i) {
232 PageSwitcherButton* button = new PageSwitcherButton(this); 244 PageSwitcherButton* button = new PageSwitcherButton(this);
233 button->SetSelectedRange(i == model_->selected_page() ? 1 : 0); 245 button->SetSelectedRange(i == model_->selected_page() ? 1 : 0);
234 buttons_->AddChildView(button); 246 buttons_->AddChildView(button);
235 } 247 }
236 buttons_->SetVisible(model_->total_pages() > 1); 248 buttons_->SetVisible(model_->total_pages() > 1);
237 Layout(); 249 Layout();
238 } 250 }
239 251
240 void PageSwitcher::SelectedPageChanged(int old_selected, int new_selected) { 252 void PageSwitcher::SelectedPageChanged(int old_selected, int new_selected) {
241 if (old_selected >= 0 && old_selected < buttons_->child_count()) 253 if (old_selected >= 0 && old_selected < buttons_->child_count())
242 GetButtonByIndex(buttons_, old_selected)->SetSelectedRange(0); 254 GetButtonByIndex(buttons_, old_selected)->SetSelectedRange(0);
243 if (new_selected >= 0 && new_selected < buttons_->child_count()) 255 if (new_selected >= 0 && new_selected < buttons_->child_count())
244 GetButtonByIndex(buttons_, new_selected)->SetSelectedRange(1); 256 GetButtonByIndex(buttons_, new_selected)->SetSelectedRange(1);
245 } 257 }
246 258
247 void PageSwitcher::TransitionStarted() { 259 void PageSwitcher::TransitionStarted() {
248 } 260 }
249 261
250 void PageSwitcher::TransitionChanged() { 262 void PageSwitcher::TransitionChanged() {
263 DCHECK(model_);
251 const int current_page = model_->selected_page(); 264 const int current_page = model_->selected_page();
252 const int target_page = model_->transition().target_page; 265 const int target_page = model_->transition().target_page;
253 266
254 double progress = model_->transition().progress; 267 double progress = model_->transition().progress;
255 double remaining = progress - 1; 268 double remaining = progress - 1;
256 269
257 if (current_page > target_page) { 270 if (current_page > target_page) {
258 remaining = -remaining; 271 remaining = -remaining;
259 progress = -progress; 272 progress = -progress;
260 } 273 }
261 274
262 GetButtonByIndex(buttons_, current_page)->SetSelectedRange(remaining); 275 GetButtonByIndex(buttons_, current_page)->SetSelectedRange(remaining);
263 if (model_->is_valid_page(target_page)) 276 if (model_->is_valid_page(target_page))
264 GetButtonByIndex(buttons_, target_page)->SetSelectedRange(progress); 277 GetButtonByIndex(buttons_, target_page)->SetSelectedRange(progress);
265 } 278 }
266 279
267 } // namespace app_list 280 } // namespace app_list
OLDNEW
« ui/app_list/views/page_switcher.h ('K') | « ui/app_list/views/page_switcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698