| 
									
										
										
										
											2014-10-31 11:17:05 -07:00
										 |  |  | // Copyright (c) 2013 GitHub, Inc.
 | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | // Copyright (c) 2012 The Chromium Authors. All rights reserved.
 | 
					
						
							| 
									
										
										
										
											2014-04-25 17:49:37 +08:00
										 |  |  | // Use of this source code is governed by the MIT license that can be
 | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | // found in the LICENSE file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-04 12:19:40 -08:00
										 |  |  | #ifndef SHELL_BROWSER_UI_COCOA_ELECTRON_MENU_CONTROLLER_H_
 | 
					
						
							|  |  |  | #define SHELL_BROWSER_UI_COCOA_ELECTRON_MENU_CONTROLLER_H_
 | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #import <Cocoa/Cocoa.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-16 10:58:02 -08:00
										 |  |  | #include "base/callback.h"
 | 
					
						
							| 
									
										
										
										
											2013-12-11 15:48:19 +08:00
										 |  |  | #include "base/mac/scoped_nsobject.h"
 | 
					
						
							| 
									
										
										
										
											2020-05-27 13:54:52 -07:00
										 |  |  | #include "base/memory/weak_ptr.h"
 | 
					
						
							| 
									
										
										
										
											2013-12-10 14:14:05 +08:00
										 |  |  | #include "base/strings/string16.h"
 | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-19 14:23:04 -07:00
										 |  |  | namespace electron { | 
					
						
							| 
									
										
										
										
											2020-02-04 12:19:40 -08:00
										 |  |  | class ElectronMenuModel; | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // A controller for the cross-platform menu model. The menu that's created
 | 
					
						
							|  |  |  | // has the tag and represented object set for each menu item. The object is a
 | 
					
						
							|  |  |  | // NSValue holding a pointer to the model for that level of the menu (to
 | 
					
						
							|  |  |  | // allow for hierarchical menus). The tag is the index into that model for
 | 
					
						
							|  |  |  | // that particular item. It is important that the model outlives this object
 | 
					
						
							|  |  |  | // as it only maintains weak references.
 | 
					
						
							| 
									
										
										
										
											2020-10-20 10:33:06 +09:00
										 |  |  | @interface ElectronMenuController | 
					
						
							|  |  |  |     : NSObject <NSMenuDelegate, NSSharingServiceDelegate> { | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  |  @protected | 
					
						
							| 
									
										
										
										
											2020-05-27 13:54:52 -07:00
										 |  |  |   base::WeakPtr<electron::ElectronMenuModel> model_; | 
					
						
							| 
									
										
										
										
											2013-12-11 15:48:19 +08:00
										 |  |  |   base::scoped_nsobject<NSMenu> menu_; | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  |   BOOL isMenuOpen_; | 
					
						
							| 
									
										
										
										
											2016-07-02 11:47:40 +09:00
										 |  |  |   BOOL useDefaultAccelerator_; | 
					
						
							| 
									
										
										
										
											2019-11-20 20:17:39 +09:00
										 |  |  |   base::OnceClosure closeCallback; | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Builds a NSMenu from the pre-built model (must not be nil). Changes made
 | 
					
						
							| 
									
										
										
										
											2013-08-14 23:03:02 +08:00
										 |  |  | // to the contents of the model after calling this will not be noticed.
 | 
					
						
							| 
									
										
										
										
											2020-02-04 12:19:40 -08:00
										 |  |  | - (id)initWithModel:(electron::ElectronMenuModel*)model | 
					
						
							| 
									
										
										
										
											2019-06-19 14:23:04 -07:00
										 |  |  |     useDefaultAccelerator:(BOOL)use; | 
					
						
							| 
									
										
										
										
											2014-11-16 20:24:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-20 20:17:39 +09:00
										 |  |  | - (void)setCloseCallback:(base::OnceClosure)callback; | 
					
						
							| 
									
										
										
										
											2017-02-16 10:58:02 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-16 20:24:29 +08:00
										 |  |  | // Populate current NSMenu with |model|.
 | 
					
						
							| 
									
										
										
										
											2020-02-04 12:19:40 -08:00
										 |  |  | - (void)populateWithModel:(electron::ElectronMenuModel*)model; | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Programmatically close the constructed menu.
 | 
					
						
							|  |  |  | - (void)cancel; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-27 13:54:52 -07:00
										 |  |  | - (electron::ElectronMenuModel*)model; | 
					
						
							|  |  |  | - (void)setModel:(electron::ElectronMenuModel*)model; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-14 22:24:21 +08:00
										 |  |  | // Access to the constructed menu if the complex initializer was used. If the
 | 
					
						
							|  |  |  | // default initializer was used, then this will create the menu on first call.
 | 
					
						
							|  |  |  | - (NSMenu*)menu; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Whether the menu is currently open.
 | 
					
						
							|  |  |  | - (BOOL)isMenuOpen; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // NSMenuDelegate methods this class implements. Subclasses should call super
 | 
					
						
							|  |  |  | // if extending the behavior.
 | 
					
						
							|  |  |  | - (void)menuWillOpen:(NSMenu*)menu; | 
					
						
							|  |  |  | - (void)menuDidClose:(NSMenu*)menu; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-04 12:19:40 -08:00
										 |  |  | #endif  // SHELL_BROWSER_UI_COCOA_ELECTRON_MENU_CONTROLLER_H_
 |