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

Side by Side Diff: chrome/browser/cocoa/preferences_window_controller.mm

Issue 355011: [Mac] Prefs under the hood work:... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 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 | « chrome/browser/cocoa/preferences_window_controller.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #import "chrome/browser/cocoa/preferences_window_controller.h" 5 #import "chrome/browser/cocoa/preferences_window_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include "app/l10n_util.h" 8 #include "app/l10n_util.h"
9 #include "base/mac_util.h" 9 #include "base/mac_util.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 if (view != label) { 213 if (view != label) {
214 origin.y += nonLabelShift; 214 origin.y += nonLabelShift;
215 } 215 }
216 [view setFrameOrigin:origin]; 216 [view setFrameOrigin:origin];
217 } 217 }
218 218
219 // Return how much the group grew. 219 // Return how much the group grew.
220 return localVerticalShift + nonLabelShift; 220 return localVerticalShift + nonLabelShift;
221 } 221 }
222 222
223 // Compare function for -[NSArray sortedArrayUsingFunction:context:] that
224 // sorts the views in Y order bottom up.
225 NSInteger CompareFrameY(id view1, id view2, void* context) {
226 CGFloat y1 = NSMinY([view1 frame]);
227 CGFloat y2 = NSMinY([view2 frame]);
228 if (y1 < y2)
229 return NSOrderedAscending;
230 else if (y1 > y2)
231 return NSOrderedDescending;
232 else
233 return NSOrderedSame;
234 }
235
236 // Helper to tweak the layout of the "Under the Hood" content by autosizing all
237 // the views and moving things up vertically. Special case the two controls for
238 // download location as they are horizontal, and should fill the row.
239 CGFloat AutoSizeUnderTheHoodContent(NSView* view,
240 NSPathControl* downloadLocationControl,
241 NSButton* downloadLocationButton) {
242 CGFloat verticalShift = 0.0;
243
244 // Loop bottom up through the views sizing and shifting.
245 NSArray* views = [view subviews];
246 views = [views sortedArrayUsingFunction:CompareFrameY context:NULL];
Mark Mentovai 2009/11/03 17:35:44 Rather than assigning the same crap into the same
247 for (NSView* view in views) {
248 NSSize delta = WrapOrSizeToFit(view);
249 DCHECK_GE(delta.height, 0.0) << "Should NOT shrink in height";
250 if (verticalShift) {
251 NSPoint origin = [view frame].origin;
252 origin.y += verticalShift;
253 [view setFrameOrigin:origin];
254 }
255 verticalShift += delta.height;
256 // The Download Location controls go in a row with the button aligned to the
Mark Mentovai 2009/11/03 17:35:44 blank before?
257 // right edge and the path control using all the rest of the space.
258 if (view == downloadLocationButton) {
259 NSPoint origin = [downloadLocationButton frame].origin;
260 origin.x -= delta.width;
261 [downloadLocationButton setFrameOrigin:origin];
262 NSSize controlSize = [downloadLocationControl frame].size;
263 controlSize.width -= delta.width;
264 [downloadLocationControl setFrameSize:controlSize];
265 }
266 }
267
268 return verticalShift;
269 }
270
223 } // namespace 271 } // namespace
224 272
225 //------------------------------------------------------------------------- 273 //-------------------------------------------------------------------------
226 274
227 @interface PreferencesWindowController(Private) 275 @interface PreferencesWindowController(Private)
228 // Callback when preferences are changed. |prefName| is the name of the 276 // Callback when preferences are changed. |prefName| is the name of the
229 // pref that has changed. 277 // pref that has changed.
230 - (void)prefChanged:(std::wstring*)prefName; 278 - (void)prefChanged:(std::wstring*)prefName;
231 // Record the user performed a certain action and save the preferences. 279 // Record the user performed a certain action and save the preferences.
232 - (void)recordUserAction:(const wchar_t*)action; 280 - (void)recordUserAction:(const wchar_t*)action;
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 widest = std::max(widest, NSWidth(underTheHoodFrame)); 431 widest = std::max(widest, NSWidth(underTheHoodFrame));
384 NSWindow* prefsWindow = [self window]; 432 NSWindow* prefsWindow = [self window];
385 NSRect frame = [prefsWindow frame]; 433 NSRect frame = [prefsWindow frame];
386 frame.size.width = widest; 434 frame.size.width = widest;
387 [prefsWindow setFrame:frame display:NO]; 435 [prefsWindow setFrame:frame display:NO];
388 436
389 // The Under the Hood prefs is a scroller, it shouldn't get any border, so it 437 // The Under the Hood prefs is a scroller, it shouldn't get any border, so it
390 // gets resized to the as wide as the window ends up. 438 // gets resized to the as wide as the window ends up.
391 underTheHoodFrame.size.width = widest; 439 underTheHoodFrame.size.width = widest;
392 [underTheHoodView_ setFrame:underTheHoodFrame]; 440 [underTheHoodView_ setFrame:underTheHoodFrame];
393 // Widen the Under the Hood content so things can rewrap 441
394 NSSize advancedContentSize = [advancedView_ frame].size; 442 // Widen the Under the Hood content so things can rewrap to the full width
395 advancedContentSize.width = [advancedScroller_ contentSize].width; 443 NSSize underTheHoodContentSize = [underTheHoodContentView_ frame].size;
396 [advancedView_ setFrameSize:advancedContentSize]; 444 underTheHoodContentSize.width = [underTheHoodScroller_ contentSize].width;
445 [underTheHoodContentView_ setFrameSize:underTheHoodContentSize];
446
447 // Now that Under the Hood is the right wide, spin through auto sizing things
Mark Mentovai 2009/11/03 17:35:44 hahaha Now that Under the Hood is the right width
448 // to that new width to get teh final height.
449 verticalShift = AutoSizeUnderTheHoodContent(underTheHoodContentView_,
450 downloadLocationControl_,
451 downloadLocationButton_);
452 [GTMUILocalizerAndLayoutTweaker
453 resizeViewWithoutAutoResizingSubViews:underTheHoodContentView_
454 delta:NSMakeSize(0.0, verticalShift)];
455 underTheHoodContentSize = [underTheHoodContentView_ frame].size;
397 456
398 // Adjust the view origins so they show up centered. 457 // Adjust the view origins so they show up centered.
399 CenterViewForWidth(basicsView_, widest); 458 CenterViewForWidth(basicsView_, widest);
400 CenterViewForWidth(personalStuffView_, widest); 459 CenterViewForWidth(personalStuffView_, widest);
401 CenterViewForWidth(underTheHoodView_, widest); 460 CenterViewForWidth(underTheHoodView_, widest);
402 461
403 // Put the advanced view into the scroller and scroll it to the top. 462 // Put the Under the Hood content view into the scroller and scroll it to the
404 [advancedScroller_ setDocumentView:advancedView_]; 463 // top.
405 [advancedView_ scrollPoint:NSMakePoint(0, advancedContentSize.height)]; 464 [underTheHoodScroller_ setDocumentView:underTheHoodContentView_];
465 [underTheHoodContentView_ scrollPoint:
466 NSMakePoint(0, underTheHoodContentSize.height)];
406 467
407 // Get the last visited page from local state. 468 // Get the last visited page from local state.
408 OptionsPage page = static_cast<OptionsPage>(lastSelectedPage_.GetValue()); 469 OptionsPage page = static_cast<OptionsPage>(lastSelectedPage_.GetValue());
409 if (page == OPTIONS_PAGE_DEFAULT) 470 if (page == OPTIONS_PAGE_DEFAULT)
410 page = OPTIONS_PAGE_GENERAL; 471 page = OPTIONS_PAGE_GENERAL;
411 472
412 NSUInteger pageIndex = (NSUInteger)page; 473 NSUInteger pageIndex = (NSUInteger)page;
413 if (pageIndex >= [[toolbar_ items] count]) 474 if (pageIndex >= [[toolbar_ items] count])
414 pageIndex = 0; 475 pageIndex = 0;
415 NSToolbarItem* firstItem = [[toolbar_ items] objectAtIndex:pageIndex]; 476 NSToolbarItem* firstItem = [[toolbar_ items] objectAtIndex:pageIndex];
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after
1354 [[NSNotificationCenter defaultCenter] 1415 [[NSNotificationCenter defaultCenter]
1355 postNotificationName:kUserDoneEditingPrefsNotification 1416 postNotificationName:kUserDoneEditingPrefsNotification
1356 object:self]; 1417 object:self];
1357 } 1418 }
1358 1419
1359 - (void)controlTextDidEndEditing:(NSNotification*)notification { 1420 - (void)controlTextDidEndEditing:(NSNotification*)notification {
1360 [customPagesSource_ validateURLs]; 1421 [customPagesSource_ validateURLs];
1361 } 1422 }
1362 1423
1363 @end 1424 @end
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/preferences_window_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698