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
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_SHEET_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_SHEET_CONTROLLER_H_
8 #import <Cocoa/Cocoa.h>
11 #include "base/mac/scoped_nsobject.h"
12 #include "base/memory/scoped_vector.h"
14 @protocol ConstrainedWindowSheet;
16 // This class manages multiple tab modal sheets for a single parent window. Each
17 // tab can have a single sheet and only the active tab's sheet will be visible.
18 // A tab in this case is the |parentView| passed to |-showSheet:forParentView:|.
19 @interface ConstrainedWindowSheetController : NSObject {
21 base::scoped_nsobject<NSMutableArray> sheets_;
22 base::scoped_nsobject<NSWindow> parentWindow_;
23 base::scoped_nsobject<NSView> activeView_;
26 // Returns a sheet controller for |parentWindow|. If a sheet controller does not
27 // exist yet then one will be created.
28 + (ConstrainedWindowSheetController*)
29 controllerForParentWindow:(NSWindow*)parentWindow;
31 // Find a controller that's managing the given sheet. If no such controller
32 // exists then nil is returned.
33 + (ConstrainedWindowSheetController*)
34 controllerForSheet:(id<ConstrainedWindowSheet>)sheet;
36 // Find the sheet attached to the given overlay window.
37 + (id<ConstrainedWindowSheet>)sheetForOverlayWindow:(NSWindow*)overlayWindow;
39 // Shows the given sheet over |parentView|. If |parentView| is not the active
40 // view then the sheet is not shown until the |parentView| becomes active.
41 - (void)showSheet:(id<ConstrainedWindowSheet>)sheet
42 forParentView:(NSView*)parentView;
44 // Calculates the position of the sheet for the given window size.
45 - (NSPoint)originForSheet:(id<ConstrainedWindowSheet>)sheet
46 withWindowSize:(NSSize)size;
48 // Closes the given sheet.
49 - (void)closeSheet:(id<ConstrainedWindowSheet>)sheet;
51 // Make |parentView| the current active view. If |parentView| has an attached
52 // sheet then the sheet is made visible.
53 - (void)parentViewDidBecomeActive:(NSView*)parentView;
55 // Run a pulse animation for the given sheet. This does nothing if the sheet
57 - (void)pulseSheet:(id<ConstrainedWindowSheet>)sheet;
59 // Gets the number of sheets attached to the controller's window.
62 // Update the sheet's position, for example when the bookmark bar was shown or
64 - (void)updateSheetPosition;
68 #endif // CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_SHEET_CONTROLLER_H_