| 
									
										
										
										
											2015-02-12 23:16:25 +08:00
										 |  |  | // Aseprite
 | 
					
						
							| 
									
										
										
										
											2017-09-02 00:32:23 +08:00
										 |  |  | // Copyright (C) 2001-2017  David Capello
 | 
					
						
							| 
									
										
										
										
											2015-02-12 23:16:25 +08:00
										 |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-08-27 04:02:58 +08:00
										 |  |  | // This program is distributed under the terms of
 | 
					
						
							|  |  |  | // the End-User License Agreement for Aseprite.
 | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  | #ifndef APP_UI_APP_MENUITEM_H_INCLUDED
 | 
					
						
							|  |  |  | #define APP_UI_APP_MENUITEM_H_INCLUDED
 | 
					
						
							| 
									
										
										
										
											2014-03-30 06:40:17 +08:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-12 02:40:22 +08:00
										 |  |  | #include "app/commands/params.h"
 | 
					
						
							| 
									
										
										
										
											2018-07-18 10:53:08 +08:00
										 |  |  | #include "app/ui/key.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-09 23:58:43 +08:00
										 |  |  | #include "os/shortcut.h"
 | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  | #include "ui/menu.h"
 | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-09 23:58:43 +08:00
										 |  |  | namespace os { | 
					
						
							| 
									
										
										
										
											2017-09-02 00:32:23 +08:00
										 |  |  |   class MenuItem; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  | namespace app { | 
					
						
							|  |  |  |   class Command; | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  |   // A widget that represent a menu item of the application.
 | 
					
						
							|  |  |  |   //
 | 
					
						
							|  |  |  |   // It's like a MenuItme, but it has a extra properties: the name of
 | 
					
						
							|  |  |  |   // the command to be executed when it's clicked (also that command is
 | 
					
						
							|  |  |  |   // used to check the availability of the command).
 | 
					
						
							|  |  |  |   class AppMenuItem : public ui::MenuItem { | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  |   public: | 
					
						
							| 
									
										
										
										
											2017-10-03 22:50:57 +08:00
										 |  |  |     struct Native { | 
					
						
							| 
									
										
										
										
											2018-08-09 23:58:43 +08:00
										 |  |  |       os::MenuItem* menuItem = nullptr; | 
					
						
							|  |  |  |       os::Shortcut shortcut; | 
					
						
							| 
									
										
										
										
											2017-10-03 22:50:57 +08:00
										 |  |  |       app::KeyContext keyContext = app::KeyContext::Any; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-12 05:02:38 +08:00
										 |  |  |     AppMenuItem(const std::string& text, | 
					
						
							|  |  |  |                 Command* command = nullptr, | 
					
						
							|  |  |  |                 const Params& params = Params()); | 
					
						
							| 
									
										
										
										
											2017-10-03 22:50:57 +08:00
										 |  |  |     ~AppMenuItem(); | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-18 10:53:08 +08:00
										 |  |  |     KeyPtr key() { return m_key; } | 
					
						
							|  |  |  |     void setKey(const KeyPtr& key); | 
					
						
							| 
									
										
										
										
											2014-10-29 22:58:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-28 03:29:53 +08:00
										 |  |  |     void setIsRecentFileItem(bool state) { m_isRecentFileItem = state; } | 
					
						
							|  |  |  |     bool isRecentFileItem() const { return m_isRecentFileItem; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  |     Command* getCommand() { return m_command; } | 
					
						
							| 
									
										
										
										
											2015-03-12 02:40:22 +08:00
										 |  |  |     const Params& getParams() const { return m_params; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-03 22:50:57 +08:00
										 |  |  |     Native* native() { return m_native; } | 
					
						
							|  |  |  |     void setNative(const Native& native); | 
					
						
							| 
									
										
										
										
											2017-09-02 00:32:23 +08:00
										 |  |  |     void syncNativeMenuItemKeyShortcut(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-12 02:40:22 +08:00
										 |  |  |     static void setContextParams(const Params& params); | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  |   protected: | 
					
						
							| 
									
										
										
										
											2014-08-15 10:07:47 +08:00
										 |  |  |     bool onProcessMessage(ui::Message* msg) override; | 
					
						
							| 
									
										
										
										
											2015-12-04 08:50:05 +08:00
										 |  |  |     void onSizeHint(ui::SizeHintEvent& ev) override; | 
					
						
							| 
									
										
										
										
											2014-08-15 10:07:47 +08:00
										 |  |  |     void onClick() override; | 
					
						
							| 
									
										
										
										
											2017-09-02 00:32:23 +08:00
										 |  |  |     void onValidate() override; | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   private: | 
					
						
							| 
									
										
										
										
											2018-07-18 10:53:08 +08:00
										 |  |  |     KeyPtr m_key; | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  |     Command* m_command; | 
					
						
							| 
									
										
										
										
											2015-03-12 02:40:22 +08:00
										 |  |  |     Params m_params; | 
					
						
							| 
									
										
										
										
											2019-05-28 03:29:53 +08:00
										 |  |  |     bool m_isRecentFileItem; | 
					
						
							| 
									
										
										
										
											2017-10-03 22:50:57 +08:00
										 |  |  |     Native* m_native; | 
					
						
							| 
									
										
										
										
											2015-03-12 02:40:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     static Params s_contextParams; | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-06 08:20:19 +08:00
										 |  |  | } // namespace app
 | 
					
						
							| 
									
										
										
										
											2013-03-28 08:19:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif
 |