15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 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)#ifndef CHROME_BROWSER_UI_COCOA_WINDOW_SIZE_AUTOSAVER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_COCOA_WINDOW_SIZE_AUTOSAVER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSWindow;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowSizeAutosaver is a helper class that makes it easy to let windows
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// autoremember their position or position and size in a PrefService object.
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// To use this, add a |base::scoped_nsobject<WindowSizeAutosaver>| to your
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// window
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// controller and initialize it in the window controller's init method, passing
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a window and an autosave name. The autosaver will register for "window moved"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and "window resized" notifications and write the current window state to the
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// prefs service every time they fire. The window's size is automatically
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// restored when the autosaver's |initWithWindow:...| method is called.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: Your xib file should have "Visible at launch" UNCHECKED, so that the
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// initial repositioning is not visible.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@interface WindowSizeAutosaver : NSObject {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NSWindow* window_;  // weak
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefService_;  // weak
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* path_;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (id)initWithWindow:(NSWindow*)window
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         prefService:(PrefService*)prefs
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                path:(const char*)path;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@end
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_COCOA_WINDOW_SIZE_AUTOSAVER_H_
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36