1 // Aseprite 2 // Copyright (C) 2001-2017 David Capello 3 // 4 // This program is distributed under the terms of 5 // the End-User License Agreement for Aseprite. 6 7 #ifndef APP_APP_MENUS_H_INCLUDED 8 #define APP_APP_MENUS_H_INCLUDED 9 #pragma once 10 11 #include "app/i18n/xml_translator.h" 12 #include "app/ui/key.h" 13 #include "app/widget_type_mismatch.h" 14 #include "base/disable_copying.h" 15 #include "base/unique_ptr.h" 16 #include "obs/connection.h" 17 #include "ui/base.h" 18 #include "ui/menu.h" 19 20 class TiXmlElement; 21 class TiXmlHandle; 22 23 namespace she { 24 class Menu; 25 class Shortcut; 26 } 27 28 namespace app { 29 class Command; 30 class Params; 31 32 using namespace ui; 33 34 // Class to handle/get/reload available menus in gui.xml file. 35 class AppMenus { 36 AppMenus(); 37 DISABLE_COPYING(AppMenus); 38 39 public: 40 static AppMenus* instance(); 41 42 ~AppMenus(); 43 44 void reload(); 45 void initTheme(); 46 47 // Updates the menu of recent files. 48 void rebuildRecentList(); // workaround for https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=213773 49 getRootMenu()50 Menu* getRootMenu() { return m_rootMenu; } getRecentListMenuitem()51 MenuItem* getRecentListMenuitem() { return m_recentListMenuitem; } getTabPopupMenu()52 Menu* getTabPopupMenu() { return m_tabPopupMenu; } getDocumentTabPopupMenu()53 Menu* getDocumentTabPopupMenu() { return m_documentTabPopupMenu; } getLayerPopupMenu()54 Menu* getLayerPopupMenu() { return m_layerPopupMenu; } getFramePopupMenu()55 Menu* getFramePopupMenu() { return m_framePopupMenu; } getCelPopupMenu()56 Menu* getCelPopupMenu() { return m_celPopupMenu; } getCelMovementPopupMenu()57 Menu* getCelMovementPopupMenu() { return m_celMovementPopupMenu; } getFrameTagPopupMenu()58 Menu* getFrameTagPopupMenu() { return m_frameTagPopupMenu; } getSlicePopupMenu()59 Menu* getSlicePopupMenu() { return m_slicePopupMenu; } getPalettePopupMenu()60 Menu* getPalettePopupMenu() { return m_palettePopupMenu; } getInkPopupMenu()61 Menu* getInkPopupMenu() { return m_inkPopupMenu; } 62 63 void applyShortcutToMenuitemsWithCommand(Command* command, const Params& params, 64 const KeyPtr& key); 65 void syncNativeMenuItemKeyShortcuts(); 66 67 private: 68 Menu* loadMenuById(TiXmlHandle& handle, const char *id); 69 Menu* convertXmlelemToMenu(TiXmlElement* elem); 70 Widget* convertXmlelemToMenuitem(TiXmlElement* elem); 71 Widget* createInvalidVersionMenuitem(); 72 void applyShortcutToMenuitemsWithCommand(Menu* menu, Command* command, const Params& params, 73 const KeyPtr& key); 74 void syncNativeMenuItemKeyShortcuts(Menu* menu); 75 void updateMenusList(); 76 void createNativeMenus(); 77 void createNativeSubmenus(she::Menu* osMenu, const ui::Menu* uiMenu); 78 79 base::UniquePtr<Menu> m_rootMenu; 80 MenuItem* m_recentListMenuitem; 81 MenuItem* m_helpMenuitem; 82 base::UniquePtr<Menu> m_tabPopupMenu; 83 base::UniquePtr<Menu> m_documentTabPopupMenu; 84 base::UniquePtr<Menu> m_layerPopupMenu; 85 base::UniquePtr<Menu> m_framePopupMenu; 86 base::UniquePtr<Menu> m_celPopupMenu; 87 base::UniquePtr<Menu> m_celMovementPopupMenu; 88 base::UniquePtr<Menu> m_frameTagPopupMenu; 89 base::UniquePtr<Menu> m_slicePopupMenu; 90 base::UniquePtr<Menu> m_palettePopupMenu; 91 base::UniquePtr<Menu> m_inkPopupMenu; 92 obs::scoped_connection m_recentFilesConn; 93 std::vector<Menu*> m_menus; 94 she::Menu* m_osMenu; 95 XmlTranslator m_xmlTranslator; 96 }; 97 98 she::Shortcut get_os_shortcut_from_key(const Key* key); 99 100 } // namespace app 101 102 #endif 103