The main menu should have a layout option, and the position of the main menu at the top or further down should be adjustable from the main menu. The position of the whole of the UI should also be modifiable through every layout editor: e.g. the toolbar customizable settings "Drag and Drop" screen should also include, where the main menu and search bar are positioned as well. This is, to my mind, the best WYSIWYG tool for layout. It should include the whole layout. All your applications should, as far as possible, have the same menus. This includes both the content and how the content is stored and can be modified. Why? If you use the same mechanism in all your applications, it is easier for new users to move between apps because things are in the same place. It is also easier to maintain if the menu systems use identical code in a single module that handles menus in all applications. So that is a lot less maintenance. All your applications should, as far as possible, work identically on all platforms. This can easily be achieved using OOP, using an interface in the business layer that accesses anything platform-specific: file IO, notifications, storing of options, etc. Then use the platform-specific implementations of that interface on the platform you are using. By hiding away platform-specific details behind that interface. You can have identical business logic work on every platform you support. In the case of Citrix, this reduced maintenance costs by a factor of eight. This also means that when people move between platforms, the menus are the same as they are used to. The easiest way to store customizable menus is in a text file; I suggest using the JSON format. When all your menus are editable, a history of changes and an undo button are very useful. Most importantly, an option to reset to factory settings must always be available. Having the history of changes and undo will avoid the user needing to use this button as a last resort.
... View more