Trace:
Differences
This shows you the differences between two versions of the page.
Last revision Both sides next revision | |||
applications:replace_menu [2018/02/07 07:05] admin created |
applications:replace_menu [2018/02/07 07:12] admin |
||
---|---|---|---|
Line 1: | Line 1: | ||
~~NOTRANS~~ | ~~NOTRANS~~ | ||
+ | ~~Title: Replace standard application menu~~ | ||
+ | |||
+ | The standard menu creates and configures the menu and toolbar automatically. It adds default menus like //File//, //Edit//, //Help// and default menu items like //Login/Logout//, //Exit//, //About//. All application work-screens will be added by the application to the menu. Every work-screen has its own menu item and/or toolbar button. | ||
+ | |||
+ | The menu forwards most actions to the application because the application is responsible for the security and work-screen management. | ||
+ | |||
+ | If you don't like the standard menu handling or layout, it's very easy to replace the standard menu with your own implementation. | ||
+ | |||
+ | ==== Extending the Menu ==== | ||
+ | |||
+ | The Menu class defines default methods which are used by the application. So it's important to extend the class. The class has a constructor with the application as parameter. The constructor delegates the configuration to the method | ||
+ | |||
+ | <file java> | ||
+ | protected void configureApplication() | ||
+ | </file> | ||
+ | |||
+ | Override this method if your application should get a custom style. The default implementation sets an UIBorderLayout for the Application Pane and adds the Content Pane to the Application Pane with CENTER constraint. | ||
+ | |||
+ | It's possible to add the Content Pane to your hierarchy (e.g. a Tabset) and use a different layout for the Application Pane. Ther aren't any limits. | ||
+ | |||
+ | The Menu class will be created by ProjX via | ||
+ | |||
+ | <file java> | ||
+ | protected Menu createMenu() throws Throwable | ||
+ | </file> | ||
+ | |||
+ | This method checks the Menu class parameter (see [[applications:customize_application|Customize an Application]]) and creates a default Menu instance if no user-defined class was set. | ||
+ | |||
+ | |||
+ | ==== Useful methods ==== | ||
+ | |||
+ | The menu has some relevant methods: | ||
+ | |||
+ | <file java> | ||
+ | public void createStandardMenu() | ||
+ | public void addItem(String pId, String pAction, ...) | ||
+ | </file> | ||
+ | |||
+ | The createStandardMenu method will be called by the application after Menu creation. It re-creates the whole menu and adds only standard items. It doesn't add any work-screens. The standard menu contains File, Edit and About menus and toolbar buttons. The standard toolbar contains Exit, Login/Logout and Save, Reload (if connected). | ||
+ | |||
+ | The method delegates the creation of the menubar to the method: | ||
+ | |||
+ | <file java> | ||
+ | protected void createStandardMenuBar() | ||
+ | </file> | ||
+ | |||
+ | and toolbar creation to | ||
+ | |||
+ | <file java> | ||
+ | protected void createStandardToolBar() | ||
+ | </file> | ||
+ | |||
+ | Simply override createStandardToolBar and don't call the parent method to hide the toolbar. | ||
+ | \\ | ||
+ | The work-screen items will be added by the application, after successful login. The method: | ||
+ | |||
+ | <file java> | ||
+ | public void addItem(String pId, ...) | ||
+ | </file> | ||
+ | |||
+ | will be called for every work-screen. It delegates item creation to | ||
+ | |||
+ | <file java> | ||
+ | protected IMenuItem addMenuItem(String pId, String pGroupId, ...) | ||
+ | </file> | ||
+ | |||
+ | and | ||
+ | |||
+ | <file java> | ||
+ | protected IButton addToolBarButton(String pId, ...) | ||
+ | </file> | ||
+ | \\ | ||
+ | But there are more useful methods for you. All methods that start with **create**, are helper methods e.g. | ||
+ | |||
+ | <file java> | ||
+ | public UIMenuItem createMenuItem(String pAction, ...) | ||
+ | public UIButton createToolBarButton(String pAction, ...) | ||
+ | public UIToggleButton createToolBarToggleButton(String pAction, ...) | ||
+ | </file> | ||
+ | |||
+ | and there are also some **configure** methods: | ||
+ | |||
+ | <file java> | ||
+ | protected <T extends AbstractUIMenuItem<?>> T configureMenuItem(...) | ||
+ | protected <T extends AbstractUIButton<?>> T configureToolBarButton | ||
+ | </file> | ||
+ | |||
+ | Sometimes it's enough to override the configure methods instead of create methods because every create method calls a configure method. | ||
+ | |||
+ | ==== Access with ID ==== | ||
+ | |||
+ | Every item should have an id because the item access is managed with ids. There are a lot of default ids, e.g. //Menu.FILE//, //Menu.FILE_LOGIN//. | ||
+ | |||
+ | If you need access to an item, simply use | ||
+ | |||
+ | <file java> | ||
+ | public IComponent[] get(String pId) | ||
+ | </file> | ||
+ | |||
+ | The method returns all mapped items for the given id. Sometimes an ID mapps multiple items because one item is the menu item and another one is the toolbar button. | ||
+ | |||
+ | If you add custom items to the menu, simply map them with | ||
+ | |||
+ | <file java> | ||
+ | public IComponent[] put(String pId, IComponent... pComponent) | ||
+ | </file> | ||
+ | \\ | ||
+ | The Menu class has methods for item control: | ||
+ | |||
+ | <file java> | ||
+ | public void removeItem(String pId) | ||
+ | public void setItemVisible(String pId, boolean pVisible) | ||
+ | public void setItemEnabled(String pId, boolean pEnable) | ||
+ | public boolean isSelected(String pId) | ||
+ | </file> | ||
+ |