UEXMenus
Date: 28 FEB 2013. Authors: Petr Somol, Jan Peska, ...
Note that this page collects discussions about the topic. For the resulting concrete specification see UEXMenusSpec.
Contents |
Review of Top Level Menus in NetBeans 7.3+
NetBeans IDE top level menus have been reasonably stable over the years and generally should remain so in order not to confuse users. Nevertheless, for post-7.3 NB a review is planned to fine-tune details or repair mistakes introduced often unintentionally in recent updates. This page should give an overview of current menus' state and to collect ideas for improvement.
Note that an updated UI Review process (NetBeans 7.3+) is to be followed before substantial changes to NB UI are implemented. See UIReviews for details.
Global Questions
- Generally any proposed changes should be as conservative as possible. The overall contents of NB menus have not been changing too considerably and this fact has met positive response from users.
- Should we display shortcuts with all items that have one in all menus, sub-menus, and pop-up menus ? (Currently, e.g., item Rename in pop-ups does not have F2 displayed but the shortcut does work). Also, I noticed that, e.g., in Source menu for Java projects there are almost no shortcuts displayed, while for C++ projects all shortcuts are displayed for the same items. Is this a bug ? Presumably it would be better to show any shortcut that exists to improve discoverability..
- How to deal with the "mnemonics trade-off", i.e., the question whether to strive for maximum coverage by unique mnemonics (requires menu regrouping/restructuring, may lead probably to more sub-menus) or to simple menus with fewer sub-menus, thus with shorter average navigation paths to items (would leave more items mnemonics-less due to more conflicts) ?
- the question "to sub-menu or not to sub-menu" is not just mnemonics related. Another trade-off to be taken into account is this: menus should not be too long for clarity and to fit screens of limited height (~800 to 900 pixels is quite common screen height on some notebooks), on the other hand moving items to sub-menus considerably worsens their discoverability and their effective use. NetBeans so far tends to prefer the "more actions in primary menu" side of the trade-off. This seems to follow the preference of NB users for whom in this way it is easier to get an overview over provided functionality. For the purposes of this review it might be good to follow the practice that sub-menus should be introduced judiciously only for very good reasons. To be justifiable a sub-menu should collect prefrably a larger then smaller number of related items (a sub-menu of one or two items is in this sense ineffective as it does not help to save much vertical space but makes navigation slower).
- Icon coverage of menu items is uneven. Some icons should be probably added, e.g., see sub-menu's Window->Output items.
- Note that menu contents may depend on context (active project type) and presence of plugins that may affect menu contents. For this reason the list below may not be exactly the same as shown here under all circumstances.
- Source->Preprocessor Blocks item has a tool-tip. Consider whether to supply tooltips in general to menu items where explanation would help user orientation and discovery (in particular for items leading to submenus ?)
- Note that some of the menus (or parts of them) are accessible as pop-ups (e.g., Refactoring). If any change is accepted based on this review, then such change should take place not only in top level menus but also in the related pop-ups.
File
Current state:
-
New Project... Ctrl+Shift+N
-
New File... Ctrl+N
- ----------------------------------
-
Open Project... Ctrl+Shift+O
- Open Recent Project
(list of project names)
- Close Project
- Open File...
- Open Recent File
(list of file names)
- ----------------------------------
- Project Group
(list of project groups)
- Project Properties
- ----------------------------------
- Import Project
- Eclipse Project...
- Resynchronize Eclipse Projects
- From ZIP...
- Export Project
- To ZIP...
- ----------------------------------
- Save Ctrl+S
- Save As...
- Save All Ctrl+Shift+S
- ----------------------------------
- Page Setup...
- Print... Ctrl+Alt+Shift+P
- Print to HTML...
- ----------------------------------
- Exit
Edit
Current state:
-
Undo Ctrl+Z
-
Redo Ctrl+Y
- ----------------------------------
-
Cut Ctrl+X
-
Copy Ctrl+C
-
Paste Ctrl+V
- Paste Formatted
- Paste from History Ctrl+Shift+D
-
Delete Delete
- Select All
- Select Identifier
- ----------------------------------
- Find Selection
- Find Next
- Find Previous
- ----------------------------------
- Find... Ctrl-F
- Replace... Ctrl+H
- Find Usages Alt+F7
- ----------------------------------
- Find in Projects... Ctrl+Shift+F
- Replace in Projects... Ctrl+Shift+H
- ----------------------------------
- Start Macro Recording
- Stop Macro Recording
Suggestions
- Why there is no Ctrl-A with Select All?
- Why there is no Alt-Shift-J with Select Identifier?
- Why there is no Ctrl-F3 with Find Selection?
- Why there is no F3 with Find Next?
- Why there is no Shift-F3 with Find Previous?
View
Current state:
- Editors
- Source
- History
- Code Folds
- Collapse Fold Ctrl+Minus
- Expand Fold Ctrl+Equals
- ----------------------------------
- Collapse All Ctrl+Shift+NumPad -
- Expand All Ctrl+Shift+NumPad +
- ----------------------------------
- IDE Log
- ----------------------------------
- Toolbars
-
Show Editor Toolbar
-
Show Line Numbers
-
Show Non-printable Characters
-
Show Breadcrumps
-
Show Diff Sidebar
-
Show Versioning Labels
-
Synchronize Editor With Views
- ----------------------------------
- Full Screen Alt+Shift+Enter
Navigate
Current state:
- Go to File... Alt+Shift+O
- Go to Type... Ctrl+O
- Go to Symbol... Ctrl+Alt+Shift+O
- Go to Spring Bean... Alt+Shift+B
- Go to Test Ctrl+Alt+T
- Go to Grails Domain Class (when Groovy is active)
- Go to Grails Controller (when Groovy is active)
- Go to Grails View (when Groovy is active)
- Go to Previous Document
- ----------------------------------
- Go to Source
- Go to Declaration/Definition Ctrl+B
- Go to Super Implementation
- ----------------------------------
- Inspect
- Members Ctrl+Shift+F12 (shows members of the entity under cursor)
- File Members Ctrl+F12 (shows members of the class represented by the currently selected file, regardless cursor position)
- ----------------------------------
- Hierarchy Alt+Shift+F12 (shows hierarchy for the entity under cursor)
- File Hierarchy Alt+F12 (shows members for the class represented by the currently selected file, regardless cursor position)
- ----------------------------------
- Last Edit Location Ctrl+Q
- Back Alt+Left
- Forward Alt+Right
- ----------------------------------
- Go to Line... Ctrl+G
- Toggle Bookmark Ctrl+Shift+M
- Bookmark History Popup Next Ctrl+Shift+Period
- Bookmark History Popup Previous Ctrl+Shift+Comma
- ----------------------------------
- Next Error Ctrl+Period
- Previous Error Ctrl+Comma
- ----------------------------------
-
Select in Projects Ctrl+Shift+1
-
Select in Files Ctrl+Shift+2
- Select in Classes Ctrl+Shift+3
- Select in Favorites Ctrl+Shift+4
Suggestions / Questions
- Go to Previous Document vs Last Edit Location - is it necessary to have both ? What does GtPD exactly do ?
- Honza: I'm not sure if this is a bug or not but GtPD seems to always go back to the previously activated TC, not only documents...
- very similar Go to Type and Go to Symbol functionality ? Can we join the two under Go to Type and provide Go to Symbol as option in the dialog ? Would it make sense ? Go to Type is known to be widely used, do we know what is the situation with Go to Symbol ?
- Honza: According to the NetBeans action usage: Go to Symbol 2166, Go to Type 76459 invocations. So it seems to be rarely used action.
- very similar Go to Source and Go to Declaration/Definition ?
- Honza: I can't find out the difference for Java files
- Back / Forward have equivalents in Editor toolbar, but there Back has Ctrl+KB_LEFT by mistake ?
- Add "Go" or "Go to" to items where it logically belongs
- move bookmark related items to sub-menu and rename for clarity
- rename Go to Line to Go to Line/Bookmark to communicate its abilities
- isn't "Inspect->" valid for Java projects only ?
- the difference between Inspect Members and Inspect File Members (the same holds for the Hierarchy pair of actions) is very difficult to grasp by users. We gave it lots of thought but found no way of joining the two actions to one. Perhaps a better name would help ?
Food for thought - Navigate menu redesign (comments welcome)
- Go to File... Alt+Shift+O
- Go to Type/Symbol... Ctrl+O (Go to Symbol overtly long shortcut Ctrl+Alt+Shift+O can be silently preserved and used to open the combined dialog in the respective mode)
- Go to Spring Bean... Alt+Shift+B
- Go to Test Ctrl+Alt+T
- Go to Grails Domain Class (when Groovy is active)
- Go to Grails Controller (when Groovy is active)
- Go to Grails View (when Groovy is active)
- ??? do we need Go to Previous Document ???
- ----------------------------------
- ??? do we need Go to Source when we have the following ???
- Go to Declaration/Definition Ctrl+B
- Go to Super Implementation Ctrl+Shift+P
- ----------------------------------
- Inspect
- Members Ctrl+Shift+F12 (shows members of the entity under cursor)
- File Members Ctrl+F12 (shows members of the class represented by the currently selected file, regardless cursor position)
- ----------------------------------
- Hierarchy Alt+Shift+F12 (shows hierarchy for the entity under cursor)
- File Hierarchy Alt+F12 (shows members for the class represented by the currently selected file, regardless cursor position)
- ----------------------------------
- Go to Last Edit Location Ctrl+Q
- Go Back Alt+Left
- Go Forward Alt+Right
- ----------------------------------
- Go to Line/Bookmark... Ctrl+G
- Bookmarks
- Toggle Bookmark Ctrl+Shift+M
- Go Back Ctrl+Shift+Period
- Go Forward Ctrl+Shift+Comma
- ----------------------------------
- Go to Next Error Ctrl+Period
- Go to Previous Error Ctrl+Comma
- ----------------------------------
-
Select in Projects Ctrl+Shift+1
-
Select in Files Ctrl+Shift+2
- Select in Classes Ctrl+Shift+3
- Select in Favorites Ctrl+Shift+4
Rich's proposed re-ordering
- Go to File... Alt+Shift+O
- Go to Type/Symbol... Ctrl+O
- Go to Declaration/Definition Ctrl+B
- Go to Super Implementation Ctrl+Shift+P
- ----------------------------------
- Go to Last Edit Location Ctrl+Q
- Go Back Alt+Left
- Go Forward Alt+Right
- ----------------------------------
- Go to Line/Bookmark... Ctrl+G
- Bookmarks
- Toggle Bookmark Ctrl+Shift+M
- Go Back Ctrl+Shift+Period
- Go Forward Ctrl+Shift+Comma
- ----------------------------------
- Go to Next Error Ctrl+Period
- Go to Previous Error Ctrl+Comma
- ----------------------------------
- Go to Spring Bean... Alt+Shift+B
- Go to Test Ctrl+Alt+T
- Go to Grails Domain Class (when Groovy is active)
- Go to Grails Controller (when Groovy is active)
- Go to Grails View (when Groovy is active)
- ----------------------------------
- Inspect
- Members Ctrl+Shift+F12 (Petr: shows members of the entity under cursor)
- File Members Ctrl+F12 (Petr: shows members of the class represented by the currently selected file, regardless cursor position)
- ----------------------------------
- Hierarchy Alt+Shift+F12 (Petr: shows hierarchy for the entity under cursor)
- File Hierarchy Alt+F12 (Petr: shows members for the class represented by the currently selected file, regardless cursor position)
- ----------------------------------
-
Select in Projects Ctrl+Shift+1
-
Select in Files Ctrl+Shift+2
- Select in Classes Ctrl+Shift+3
- Select in Favorites Ctrl+Shift+4
- Petr: this is a better proposal than the one before. My last concern: the location of Go to Test. I received comments from several people in NB team that they consider it to be one of the most often used Go to's. Perhaps we could position it as the last one in the most prominent group of Go to items above ?
Source
Current state:
- Format Alt+Shift+F
- Remove Trailing Spaces
- Shift Left Alt+Shift+Left
- Shift Right Alt+Shift+Right
- Move Up Alt+Shift+Up
- Move Down Alt+Shift+Down
- Move Code Element Up Alt+Shift+Page Up
- Move Code Element Down Alt+Shift+Page Down
- Duplicate Up Ctrl+Shift+Up
- Duplicate Down Ctrl+Shift+Down
- Toggle Comment Ctrl+Shift+C
- ----------------------------------
- Complete Code... Ctrl+Space
- Insert Code... Alt+Insert
- Remove Surrounding Code... Alt+Backspace
- Fix Code... Alt+Enter
- Fix Imports... Ctrl+Shift+I
- Organize Imports
- Organize Members
- Fix Uses... (when PHP is active)
- Show Method Parameters Ctrl+P
- Show Documentation Ctrl+Shift+Space
- ----------------------------------
-
Make Controller (when Groovy is active)
- ----------------------------------
- Preprocessor Blocks
(when ME is active)
- ----------------------------------
- Insert Next Matching Word Ctrl+Shift+K
- Insert Previous Matching Word Ctrl+K
- ----------------------------------
- Inspect...
- ----------------------------------
- Scan for External Changes
Suggestions
- some items might by project type specific (Inspect... now is valid for Java only but can be invoked to no effect in other project types) - how to handle ?
- Remove Surrounding Code difficult to understand its function ?
- Honza: it sounds understandable to me
- bug: not all shortcuts displayed at all times
- Show Method Parameters feels faulty although it probably is not - ideally it should work from anywhere inside the method ?
- Honza: I think the actions should display a message to the status line (left bottom corner) in case the caret is not at right position
Food for thought - Source menu redesign (comments welcome)
- why not to add Duplicate Code Element Up and Duplicate Code Element Down actions ? Ctrl+Shift+Page Up and Ctrl+Shift+Page Down seem to be still free.
- shortcut for Inspect... ?
- Format Alt+Shift+F
- Remove Trailing Spaces
- Shift Left Alt+Shift+Left
- Shift Right Alt+Shift+Right
- Move
- Move Up Alt+Shift+Up
- Move Down Alt+Shift+Down
- Move Code Element Up Alt+Shift+Page Up
- Move Code Element Down Alt+Shift+Page Down
- Duplicate
- Duplicate Up Ctrl+Shift+Up
- Duplicate Down Ctrl+Shift+Down
- Duplicate Code Element Up Ctrl+Shift+Page Up
- Duplicate Code Element Down Ctrl+Shift+Page Down
- Toggle Comment Ctrl+Shift+C
- ----------------------------------
- Complete Code... Ctrl+Space
- Insert Code... Alt+Insert
- Remove Surrounding Code... Alt+Backspace
- Fix Code... Alt+Enter
- Fix Uses... ??Ctrl-Shift-I (when PHP is active)
- Fix Imports... Ctrl+Shift+I
- Organize Imports
- Organize Members
- ---------------------------------- (separated for somewhat better clarity)
- Insert Next Matching Word Ctrl+Shift+K
- Insert Previous Matching Word Ctrl+K
- ----------------------------------
-
Make Controller (when Groovy is active)
- ----------------------------------
- Preprocessor Blocks
(when ME is active)
- ----------------------------------
- Show Method Parameters Ctrl+P (moved "show" actions here for clarity - from here downwards no action changes the source)
- Show Documentation Ctrl+Shift+Space
- ----------------------------------
- Inspect...
- ----------------------------------
- Scan for External Changes
Refactor
Current state:
- Rename... Ctrl+R
- Move... Ctrl+M
- Copy...
- Safely Delete... Alt+Delete
- ----------------------------------
- Inline...
- Change Method Parameters...
- ----------------------------------
- Pull Up...
- Push Down...
- Extract Interface...
- Extract Superclass...
- Use Supertype Where Possible...
- ----------------------------------
- Move Inner to Outer Level...
- Convert Anonymous to Member...
- Introduce Variable... Alt+Shift+V
- Introduce Constant... Alt+Shift+C
- Introduce Field... Alt+Shift+E
- Introduce Parameter... Alt+Shift+P
- Introduce Method... Alt+Shift+M
- Introduce Local Extension... Alt+Shift+X
- Encapsulate Fields...
- Replace Constructor with Factory...
- Replace Constructor with Builder...
- Invert Boolean...
- ----------------------------------
- Inspect and Transform...
Food for thought - Refactor menu redesign (comments welcome):
- Making a submenu from Introduce should cause no harm + would save lots of space
- Rename... Ctrl+R
- Move... Ctrl+M
- Copy...
- Safely Delete... Alt+Delete
- ----------------------------------
- Inline...
- Change Method Parameters...
- ----------------------------------
- Pull Up...
- Push Down...
- Extract Interface...
- Extract Superclass...
- Use Supertype Where Possible...
- ----------------------------------
- Introduce
- Variable... Alt+Shift+V
- Constant... Alt+Shift+C
- Field... Alt+Shift+E
- Parameter... Alt+Shift+P
- Method... Alt+Shift+M
- Local Extension... Alt+Shift+X
- ----------------------------------
- Move Inner to Outer Level...
- Convert Anonymous to Member...
- Encapsulate Fields...
- Replace Constructor with Factory...
- Replace Constructor with Builder...
- Invert Boolean...
- ----------------------------------
- Inspect and Transform...
Run
Current state:
-
Run Project (project name) F6
- Test Project Alt+F6
- ----------------------------------
-
Build Project (project name) F11
-
Clean and Build Project (project name) Shift+F11
- Batch Build Project... (project name)
- ----------------------------------
- Set Project Configuration
- Default Configuration
- ----------------------------------
- Customize...
- Set Main Project
- None
- ----------------------------------
- (project names)
- ----------------------------------
- Generate Javadoc (project name)
- Run File Shift+F6
- Test File Ctrl+F6
- Compile File F9
-
Check File Alt+F9
-
Validate File Alt+Shift+F9
- ----------------------------------
- Repeat Build/Run Ctrl+F11
- Stop Build/Run
Debug
Current state:
-
Debug Project (project name) Ctrl+F5
- Debug File Ctrl+Shift+F5
- Debug Test File Ctrl+Shift+F6
-
Attach Debugger...
-
Debug Core File...
- ----------------------------------
-
Finish Debugger Session Shift+F5
-
Terminate Process
-
Detach Debugger...
- ----------------------------------
-
Restart
-
Pause Ctrl+Alt+Pause
-
Continue F5
- ----------------------------------
-
Step Over F8
-
Step Over Expression Shift+F8
-
Step Into F7
- Step Into Next Method Shift+F7
-
Step Out Ctrl+F7
-
Run to Cursor F4
-
Step Into Last Function
- ----------------------------------
-
Apply Code Changes
-
Take GUI Snaphot
- ----------------------------------
- Set Current Thread...
- Stack
- ----------------------------------
- Toggle Line Breakpoint Ctrl+F8
- New Breakpoint... Ctrl+Shift+F8
- New Watch... Ctrl+Shift+F7
- Evaluate Expression... Ctrl+F9
- Check for Deadlock
Remark: Debug menu is long, but its contents seem well stabilized and IMHO any reorganization here would harm usability. What might be possible in case of desperate need seems to me to follow the Profile solution: to add the last item "Advanced Commands" and gather under its sub-menu some of the less commonly used commands, if such exist (actually this might be difficult). Breakpoint related commands might be possible to extract to a sub-menu (the actions are commonly applied from other places), but if there is no real demand I would better not do that.
Profile
Current state:
-
Profile Project (project name) Alt+F2
- Profile File
- Profile Test File
-
Attach Profiler...
- ----------------------------------
-
Rerun Profiling Session Ctrl+Shift+F2
-
Modify Profiling Session... Alt+Shift+F2
-
Stop Profiling Session Shift+F2
- ----------------------------------
-
Reset Collected Results Alt+Shift+F2
-
Run GC
- ----------------------------------
-
Take Snapshot of Collected Results Ctrl+F2
-
Take Heap Dump...
-
Load Snapshot...
- Load IDE Snapshot...
-
Load Heap Dump...
-
Compare Snapshots...
- ----------------------------------
- Advanced Commands
- Run Profiler Calibration
- View Command-line Arguments
- Display Internal Statistics
- ----------------------------------
- Unintegrate Profiler from (project name)
Team
The Team menu gathers versioning systems support, issue tracking, build job creation functionality. Versioning support covers GIT, Mercurial and Subversion by default, CVS by downloadable plugin. The contents of Team menu change dramatically depending on context; for untracked projects the menu is brief, providing only initialization related versioning functions. For projects already tracked in one of the systems the menu displays VCS specific commands.
Current Team menu state - initial state without any VCS-specific items displayed:
- CVS
- <full CVS menu contents displayed, see below>
- Git
- Clone...
- Initialize
- ----------------------------------
- Repository Browser
- Mercurial
- Initialize Project
- Clone Other...
- Subversion
- Checkout...
- Import into Repository...
- ----------------------------------
- History
- Show History
- Revert Deleted
- Find Issues...
- Report Issue...
- Create Build Job...
Current Team menu state - selected project tracked in GIT:
- Show Changes
- Add
- Commit...
- Diff
- Export
- Export Uncommited Changes...
- Export Commit...
- Revert
- Revert Modifications...
- Revert Commit...
- ----------------------------------
- Ignore (shown only if selection on project)
- Unignore (shown only after Ignore had been applied, but Ignore remains above it)
- Exclude From Commit / Include In Commit
- ----------------------------------
- Repository Browser
- Open Output
- ----------------------------------
- Branch
- Create Branch...
- Switch to Branch...
- Tag
- Create Tag...
- Manage Tags...
- Checkout
- Checkout Revision...
- Checkout Files...
- Merge Revision...
- ----------------------------------
- Reset...
- ----------------------------------
- Clone...
- Remote
- Fetch...
- Fetch from Upstream...
- Pull...
- Pull from Upstream...
- ----------------------------------
- Push...
- Push to Upstream...
- Show History (meaning Show Repository History)
- Show Annotations
- ----------------------------------
- Disconnect...
- ----------------------------------
- CVS
- <full CVS menu contents displayed>
- Git
- <copy of the above menu contents>
- Mercurial
- Initialize Project
- Clone Other...
- Subversion
- Checkout...
- Import into Repository...
- ----------------------------------
- History
- Show History (meaning Show File History)
- Revert Deleted
- Find Issues...
- Report Issue...
- Create Build Job...
Current Team menu state - selected project tracked in Mercurial:
- Shelve Changes
- Shelve Changes...
- Initialize Project
- ----------------------------------
- Status
- Diff
- Update...
- Commit...
- Add
- ----------------------------------
- Export
- Export Diff...
- Export Uncommitted Changes...
- Export Changeset Bundle...
- Import Changesets...
- ----------------------------------
- Clone - name
- Clone Other...
- Fetch - name
- Share
- Push to default - name
- Push Other...
- Pull from default - name
- Pull Other...
- Merge
- Merge Changes
- Resolve Conflicts
- ----------------------------------
- Search History
- Show
- Show Annotations (if selection on file)
- Show Incoming
- Show Out
- View...
- ----------------------------------
- Revert Modifications
- Recover
- Strip...
- Backout...
- Rollback - name
- Verify
- Toggle Ignore
- ----------------------------------
- Branch
- Switch Branch...
- Create Branch...
- Close Branch...
- Tag
- Create Tag...
- Manage Tags...
- Queues
- Diff
- Go to Patch...
- Pop All Patches
- Push All Patches
- ----------------------------------
- Create Patch...
- Refresh Patch...
- Finish Patches...
- ----------------------------------
- Properties...
- ----------------------------------
- Disconnect...
- ----------------------------------
- CVS
- <full CVS menu contents displayed>
- Git
- Clone...
- Initialize
- ----------------------------------
- Repository Browser
- Mercurial
- <copy of the above menu contents>
- Subversion
- Checkout...
- Import into Repository...
- ----------------------------------
- History
- Show History (meaning Show File History)
- Revert Deleted
- Find Issues...
- Report Issue...
- Create Build Job...
Current Team menu state - selected project tracked in Subversion:
- Checkout...
- Relocate...
- ----------------------------------
- Update Project with Dependencies
- Update To...
- ----------------------------------
- Show Changes
- Diff
- Update
- Commit...
- ----------------------------------
- Export Diff Patch...
- Apply Diff Patch...
- ----------------------------------
- Copy to...
- Switch to...
- Merge to...
- Export...
- ----------------------------------
- Show Annotations
- Search History...
- ----------------------------------
- Revert Modifications...
- Resolve Conflicts...
- Ignore
- Lock (if selection is on file)
- ----------------------------------
- Cleanup Working Copy
- Upgrade Working Copy
- Versioning Info
- Svn Properties
- ----------------------------------
- Disconnect...
- ----------------------------------
- CVS
- <full CVS menu contents displayed>
- Git
- Clone...
- Initialize
- ----------------------------------
- Repository Browser
- Mercurial
- Initialize Project
- Clone Other...
- Subversion
- <copy of the above menu contents>
- ----------------------------------
- History
- Show History (meaning Show File History)
- Revert Deleted
- Find Issues...
- Report Issue...
- Create Build Job...
Problems
The Team menu changes its contents depending on context (current project). In its current state it suffers many problems from the UEX perspective:
- depending in context can be excessively long - bad for orientation of new users + may exceed standard vertical screen size on many types of standard notebooks
- item ordering inconsistent among the various VCS menu versions
- item naming inconsistent among the various VCS menu versions (though not always would the same name mean the same thing)
- injected menu contents (if project is tracked by one of the VCS systems) are displayed once in base menu as well as in a concrete VCS submenu - that is confusing. If the functionality differs in submenu, it is even more confusing
- for a new user it might be very difficult to grasp what context each item (versioning actions) in the menu has - there is difference in behavior depending on current selection, whether the scope is project or file. Note that this makes things the more confusing because the underlying VCS commands are usually understood as repository-wide.
- similarly named items and possibly related functionality can be spread instead of concentrated (e.g., for Mercurial there is Search History.. in the middle of the menu, but there is a History submenu in the bottom, with item Show History..)
- submenus for each supported VCS are always present, regardless whether the current selection (file, project) is tracked in one of them or not. If it is not, then the submenus make good sense to inform users about which VCS are available + provide initialization action to include the project into the chosen one. Once the project is tracked by one of the VCS, the menu still contains the submenus for each VCS though preceeded by the now more important and specific actions - yet now the inclusion of all VCS sumbenus can be confusing. It may be necessary to allow multiple tracking of the same project in more than one VCS - what may be a valid though rare usecase. Not sure whether this can be avoided.
- versioning unrelated items are not clearly separated from the versioning ones
- existing bug: 223545
Food For Thought -- Suggestions
The Team menu is perhaps the most difficult to define reasonably. Fixing the UEX problems should be possible by rearranging menu contents to a general ordering that can be followed more or less closely by each of the VCS specific menu instances. Possible changes should be consulted primarily with Ondrej Vrabec, the owner of related modules.
The proposal below attempts to achieve the following:
- keep menu length at maximum of 22 textual items, what represents the maximum length of other main menus
- provide item ordering that is more or less unified across the various VCSs, while the ordering attempts to put the most frequent actions together to the top, to collect the rest to clear categories just underneath, and to move the most infrequently used actions to a maintenance submenu. So far this is an ad hoc ordering, open to discussion.
Note that the proposal below does not solve all UEX problems stated above. The proposal should be reviewed in detail to avoid any unintended negative effects (unified ordering across various VCS is desirable but some items might thus seem ordered unexpectedly from particular VCS perspective). Therefore I ask for comments from anyone involved.
..to be worked on..
(NOT A REAL MENU) The rearranged Team menu with actions from all VCS systems combined; this is just to illustrate the ordering idea (details and menu versions for concrete VCS instances follow below):
Here prefixes mark items present in particular VCS only; G: GIT, M: Mercurial, S:Subversion, C: CVS
- Status - <name> (alt. Show Changes)
- Diff - <name>
- M: Update...
- C: S: Update
- C: S: Update (Update too frequent to reside in submenu?)
- C: S: Update Project with Dependencies
- S: Update To...
- G: M: Add - <name>
- Inclusion
(created to gather these items before Commit, which depends on them)
- G: Ignore
- G: Unignore
- G: C: Exclude From Commit
- G: Include In Commit
- M: Toggle Ignore
- C: S: Ignore
- S: Lock
- Commit...
- ----------------------------------
- Synchronize
(hopefully well discoverable submenu to collect the remaining local-(to/from)-remote actions and to provide them just under the group of the key actions above)
- G: Checkout Revision...
- G: Checkout Files...
- C: S: Checkout...
- ----------------------------------
- G: Fetch...
- G: Fetch from Upstream...
- M: Fetch - <name>
- ----------------------------------
- G: Pull...
- G: Pull from Upstream...
- M: Pull from default - <name>
- M: Pull Other...
- ----------------------------------
- G: Merge Revision...
- M: Merge Changes
- M: Resolve Conflicts
- C: S: Resolve Conflicts...
- ----------------------------------
- G: Push...
- G: Push to Upstream...
- M: Push to default - <name>
- M: Push Other...
- S: Copy to...
- S: Switch to...
- S: Merge to...
- S: Export to...
- ----------------------------------
- Export / Import
(data transfers crossing the repository boundary)
- G: M: Export Uncommited Changes...
- G: Export Commit...
- M: Export Diff...
- C: S: Export Diff Patch...
- M: Export Changeset Bundle...
- M: Import Changesets...
- C: S: Apply Diff Patch...
- ----------------------------------
- M: Shelve Changes (was in Shelve Changes)
- M: Unshelve Changes...
- M: Unshelve <name> Changes
- Revert / Recover
- Revert Modifications...
- G: Revert Commit...
- ----------------------------------
- M: Strip...
- M: Backout...
- M: Rollback - <name>
- M: Verify
- ----------------------------------
- Revert Deleted Files (was in History)
- ----------------------------------
- G: M: C: Branch
- C: Branch...
- G: M: Create Branch...
- G: M: C: Switch to Branch...
- M: Close Branch...
- C: Merge Changes From Branch...
- C: Tag...
- G: M: Tag
- G: M: Create Tag...
- G: M: Manage Tags...
- M: Queues
- M: Diff
- M: Go to Patch...
- M: Pop All Patches
- M: Push All Patches
- ----------------------------------
- M: Create Patch...
- M: Refresh Patch...
- M: Finish Patches...
- ----------------------------------
- Show
- Show Annotations
- M: Show Incoming
- M: Show Outgoing
- M: View...
- C: View Revision...
- S: Versioning Info (should be made available for all VCS to get info about where the current selection is managed, by what system etc)
- History
- Search History...
- File History (was History->Show History)
- ----------------------------------
- Maintenance
(to collect actions used only for infrequent servicing purposes - setup etc.) (alt. Maintenance, Repository, Setup)
- G: Reset...
- S: Cleanup Working Copy
- S: Upgrade Working Copy
- C: Change CVS Root...
- ----------------------------------
- G: Clone...
- M: Clone - <name>
- M: Clone Other...
- S: Relocate...
- ----------------------------------
- Disconnect...
- ----------------------------------
- G: M: Properties...
- S: Svn Properties
- ----------------------------------
- Git
- Initialize Project...
- Clone...
- ----------------------------------
- Repository Browser
- Mercurial
- Initialize Project...
- Clone Other...
- Subversion
- Import Into Repository...
- Checkout...
- CVS
- Import Into Repository...
- Checkout...
- ----------------------------------
- Find Issues...
- Report Issue...
- ----------------------------------
- Create Build Job...
Stan How about merging items 24 to 27 above a bit more into some sort of 'Setup' menu?
(NOT A REAL MENU) The simplified view of rearranged Team menu (details and menu versions for concrete VCS instances follow below):
This is the simplified abstract view of the menu proposal above for easier overview
- Status - <name>
- Diff - <name>
- Update...
- Add - <name>
- Inclusion
- Commit...
- ----------------------------------
- Synchronize
(alt. Remote)
- ----------------------------------
- Export / Import
- Revert / Recover
- ----------------------------------
- Branch
- Tag
- Queues
- ----------------------------------
- Show
- History
- ----------------------------------
- Maintenance
(alt. Repository, Setup)
- ----------------------------------
- Git
- Mercurial
- Subversion
- CVS
- ----------------------------------
- Find Issues...
- Report Issue...
- ----------------------------------
- Create Build Job...
The following lists show how the particular VCS menus would look like if rearranged according the above scheme.
The rearranged Team menu in GIT context:
- Status - <name> (alt. Show Changes)
- Diff - <name>
- Add - <name>
- Inclusion
- Ignore (Unignore)
- Exclude From Commit (Include in Commit)
- Commit...
- ----------------------------------
- Synchronize
- Checkout Revision...
- Checkout Files...
- ----------------------------------
- Fetch...
- Fetch from Upstream...
- ----------------------------------
- Pull...
- Pull from Upstream...
- ----------------------------------
- Merge Revision...
- ----------------------------------
- Push...
- Push to Upstream...
- ----------------------------------
- Export / Import
- Export Uncommited Changes...
- Export Commit...
- Revert / Recover
- Revert Modifications...
- Revert Commit...
- ----------------------------------
- Revert Deleted Files (was in History)
- ----------------------------------
- Branch
- Create Branch...
- Switch to Branch...
- Tag
- Create Tag...
- Manage Tags...
- ----------------------------------
- Show
- Show Annotations
- Versioning Info (should be made available for all VCS to get info about where the current selection is managed, by what system etc)
- History
- Search History...
- File History (was History->Show History)
- ----------------------------------
- Maintenance
(alt. Maintenance, Repository, Setup)
- Reset...
- ----------------------------------
- Clone...
- ----------------------------------
- Disconnect...
- ----------------------------------
- Properties...
- ----------------------------------
- Git
- Initialize Project...
- Clone...
- ----------------------------------
- Repository Browser
- Mercurial
- Initialize Project...
- Clone Other...
- Subversion
- Import Into Repository...
- Checkout...
- CVS
- Import Into Repository...
- Checkout...
- ----------------------------------
- Find Issues...
- Report Issue...
- ----------------------------------
- Create Build Job...
The rearranged Team menu in Mercurial context:
- Status - <name> (alt. Show Changes)
- Diff - <name>
- Update...
- Add - <name>
- Inclusion
(created to gather these items before Commit, which depends on them)
- Toggle Ignore
- Commit...
- ----------------------------------
- Synchronize
(hopefully well discoverable submenu to collect the remaining local-(to/from)-remote actions and to provide them just under the group of the key actions above)
- Fetch - <name>
- ----------------------------------
- Pull from default - <name>
- Pull Other...
- ----------------------------------
- Merge Changes
- Resolve Conflicts
- ----------------------------------
- Push to default - <name>
- Push Other...
- ----------------------------------
- Export / Import
(data transfers crossing the repository boundary)
- Export Uncommited Changes...
- Export Diff...
- Export Changeset Bundle...
- Import Changesets...
- ----------------------------------
- Shelve Changes (was in Shelve Changes)
- Unshelve Changes...
- Unshelve <name> Changes
- Revert / Recover
- Revert Modifications...
- ----------------------------------
- Strip...
- Backout...
- Rollback - <name>
- Verify
- ----------------------------------
- Revert Deleted Files (was in History)
- ----------------------------------
- Branch
- Create Branch...
- Switch to Branch...
- Close Branch...
- Tag
- Create Tag...
- Manage Tags...
- Queues
- Diff
- Go to Patch...
- Pop All Patches
- Push All Patches
- ----------------------------------
- Create Patch...
- Refresh Patch...
- Finish Patches...
- ----------------------------------
- Show
- Show Annotations
- Show Incoming
- Show Outgoing
- View... (?)
- Versioning Info (should be made available for all VCS to get info about where the current selection is managed, by what system etc)
- History
- Search History...
- File History (was History->Show History)
- ----------------------------------
- Maintenance
(to collect actions used only for infrequent servicing purposes - setup etc.) (alt. Maintenance, Repository, Setup)
- Clone - <name>
- Clone Other...
- ----------------------------------
- Disconnect...
- ----------------------------------
- Properties...
- ----------------------------------
- Git
- Initialize Project...
- Clone...
- ----------------------------------
- Repository Browser
- Mercurial
- Initialize Project...
- Clone Other...
- Subversion
- Import Into Repository...
- Checkout...
- CVS
- Import Into Repository...
- Checkout...
- ----------------------------------
- Find Issues...
- Report Issue...
- ----------------------------------
- Create Build Job...
The rearranged Team menu in Subversion context:
- Status - <name> (alt. Show Changes)
- Diff - <name>
- Update
- Update (Update too frequent to reside in submenu?)
- Update Project with Dependencies
- Update To...
- Inclusion
(created to gather these items before Commit, which depends on them)
- Ignore
- Lock
- Commit...
- ----------------------------------
- Synchronize
(hopefully well discoverable submenu to collect the remaining local-(to/from)-remote actions and to provide them just under the group of the key actions above)
- Resolve Conflicts...
- ----------------------------------
- Copy to...
- Switch to...
- Merge to...
- Export to...
- ----------------------------------
- Export / Import
(data transfers crossing the repository boundary)
- Export Diff Patch...
- Apply Diff Patch...
- Revert / Recover
- Revert Modifications...
- ----------------------------------
- Revert Deleted Files (was in History)
- ----------------------------------
- Show
- Show Annotations
- Versioning Info (should be made available for all VCS to get info about where the current selection is managed, by what system etc)
- History
- Search History...
- File History (was History->Show History)
- ----------------------------------
- Maintenance
(to collect actions used only for infrequent servicing purposes - setup etc.) (alt. Maintenance, Repository, Setup)
- Cleanup Working Copy
- Upgrade Working Copy
- ----------------------------------
- Relocate...
- ----------------------------------
- Disconnect...
- ----------------------------------
- Properties (was Svn Properties)
- ----------------------------------
- Git
- Initialize Project...
- Clone...
- ----------------------------------
- Repository Browser
- Mercurial
- Initialize Project...
- Clone Other...
- Subversion
- Import Into Repository...
- Checkout...
- CVS
- Import Into Repository...
- Checkout...
- ----------------------------------
- Find Issues...
- Report Issue...
- ----------------------------------
- Create Build Job...
The rearranged Team menu in CVS context:
- Status - <name> (alt. Show Changes)
- Diff - <name>
- Update
- Update (Update too frequent to reside in submenu?)
- Update Project with Dependencies
- Inclusion
(created to gather these items before Commit, which depends on them)
- Ignore
- Commit...
- ----------------------------------
- Synchronize
(hopefully well discoverable submenu to collect the remaining local-(to/from)-remote actions and to provide them just under the group of the key actions above)
- Checkout...
- ----------------------------------
- Resolve Conflicts...
- ----------------------------------
- Export / Import
(data transfers crossing the repository boundary)
- Export Diff Patch...
- Apply Diff Patch...
- Revert / Recover
- Revert Modifications...
- ----------------------------------
- Revert Deleted Files (was in History)
- ----------------------------------
- Branch
- Branch...
- Switch to Branch...
- Merge Changes From Branch...
- Tag...
- ----------------------------------
- Show
- Show Annotations
- View Revision...
- Versioning Info (should be made available for all VCS to get info about where the current selection is managed, by what system etc)
- History
- Search History...
- File History (was History->Show History)
- ----------------------------------
- Maintenance
(to collect actions used only for infrequent servicing purposes - setup etc.) (alt. Maintenance, Repository, Setup)
- Change CVS Root...
- ----------------------------------
- Disconnect...
- ----------------------------------
- Git
- Initialize Project...
- Clone...
- ----------------------------------
- Repository Browser
- Mercurial
- Initialize Project...
- Clone Other...
- Subversion
- Import Into Repository...
- Checkout...
- CVS
- Import Into Repository...
- Checkout...
- ----------------------------------
- Find Issues...
- Report Issue...
- ----------------------------------
- Create Build Job...
New Proposition
Ondra and Honza have created new proposition for changes in team menu. Since this page is already really long I've created a separated page, see UEXTeamMenu
Tools
..to be worked on..
Current state:
- Apply Diff Patch...
- Diff
- Add to Favorites
- ----------------------------------
- Create Tests
- Analyze Javadoc
- Add to Palette...
- Internationalization
- Internationalize...
- Insert Internationalization String... Ctrl_Shift+J
- ----------------------------------
- Internationalization Wizard
- Internationalization Test Wizard
- ----------------------------------
- Java Platforms
- NetBeans Platforms
- Ant Variables
- Ant Libraries
- Servers
- Cloud Providers
- Mobility Deployment
- Keystores
- Templates
- DTDs and XML Schemas
- Palette
- Swing/AWT Components
- HTML/JSP Code Clips
- Code Clips
- SVG Shapes
- ----------------------------------
- Plugins
- ----------------------------------
- Options
..to be worked on..
Food for thought - Tools menu redesign (comments welcome):
- Tools menu contents differ notably based on which plugins are or are not active
- the meaning of some items are not clear, or feels somewhat out of context. Ant Variables and Ant Libraries is relevant for Ant based projects; at the same time no Maven specific tools are present. Generally this menu seems to collect items of mixed nature. Perhaps it might be good to express more explicitly the nature by collecting such items (if possible, and if the items are not used as frequently as to justify direct appearance in main Tools menu) ? Below I propose this for Ant..
- Apply Diff Patch...
- Diff to...
- Add to Favorites
- ----------------------------------
- Create Tests
- Analyze Javadoc (?better be moved to Refactor->Inspect JavaDoc... (?or part of Inspect & Transform))
- Internationalization
- Internationalize...
- Insert Internationalization String... Ctrl_Shift+J
- ----------------------------------
- Internationalization Wizard
- Internationalization Test Wizard
- Add to Palette... (moved to be neighbor with Palette->)
- Palette
(moved to be neighbor with Add to Palette)
- Swing/AWT Components
- HTML/JSP Code Clips
- Code Clips
- SVG Shapes
- ----------------------------------
- Java Platforms
- NetBeans Platforms
- ---------------------------------- (added line to emphasize the importance of platforms)
- Ant
(but note the recent discussion at http://netbeans.org/bugzilla/show_bug.cgi?id=224702 about why this is not just Ant specific)
- Ant Variables
- Ant Libraries
- Servers
- Cloud Providers
- Mobility Deployment
- Keystores
- Templates
- DTDs and XML Schemas
- ----------------------------------
- Plugins
- ----------------------------------
- Options
Window
Current state:
-
Projects Ctrl+1
-
Files Ctrl+2
-
Classes Ctrl+9
-
Favorites Ctrl+3
-
Services Ctrl+5
-
Action Items Ctrl+6
-
Palette Ctrl+Shift+8
-
Properties Ctrl+Shift+7
- Output
- Navigating
- Debugging
-
Variables Alt+Shift+1
-
Watches Alt+Shift+2
-
Call Stack Alt+Shift+3
-
Loaded Classes Alt+Shift+4
-
Breakpoints Alt+Shift+5
-
Sessions Alt+Shift+6
-
Threads Alt+Shift+7
-
Expression Evaluation
-
Sources Alt+Shift+8
- ----------------------------------
-
Debugging Alt+Shift+9
-
Disassembly
-
Memory
-
Registers
- ----------------------------------
-
Debugger Console
-
- Profiling
- Versioning
- Other
- Web
- Editor Ctrl+0
- Processes
- ----------------------------------
- Configure Window
- Maximize
- Float
- Float Group
- Minimize
- Minimize Group
- Dock Alt+Shift+D
- Dock Group
- ----------------------------------
- Clone Document
- New Document Tab Group
- Collapse Document Tab Group
- Reset Windows
- ----------------------------------
- Close Window Ctrl+W
- Close All Documents Strl+Shift+W
- Close Other Documents
- Documents... Shift+F4
Suggestions
- Window menu suffers quite considerably by the fact that various modules (developed independently without proper UI synchronization) inject items here and into sub-menus. The result is at times a logical chaos, naming flaws, inconsistency of icon coverage etc. Examples of UI flaws follow:
- Window->Navigator->Hierarchy opens a C++ related Hierarchy window only in undocked state, even if working on Java project. There is no way of opening a Java Hierarchy window from Window menu. In fact there should be just one Hierarchy window but currently this is not the case
- many names are flawed, either redundant ("Window" in "Inspector Window") or insuffieciently expressive (Analyzer is currently used for JavaDoc analysis. How can a first-time user understand what is the difference between "Analyzer" and "Inspector"?)
- Sub-menu Other seems to have served as a thrash bin. Better placement of at least some of its items should be attempted
- etc.
Stan There are many windows which open just empty and user cannot do anything with them, e.g. Search Results, Usages, JavaDoc and many other. These windows need some context which provide appropriate action in other parts of the main menu. I suggest removing such windows from the Window menu completely. The only reason having them listed there is for the user to switch to those windows later on. But that can be achieve using Ctrl+Tab window switcher which now lists also non-editor windows. The popup switcher could even be enhanced to show keyboard shortcuts for each displayed window (if any).
Food for thought - Window menu redesign (comments welcome)
- the main idea of the proposal is to clean up the logic of item assignment to sub-menus. Debugging, Profiling, Versioning is OK, Navigating needs correction with respect to Hierarchy. The main change proposed below would be to let Output collect only windows that provide output but do not enable editing in any way and to introduce two more submenus: Editing to collect windows that permit changes in edited files and IDE to collect windows unrelated to particular opened projects or files.
- Menu items prefixed with [EMPTY] open just an empty window. User must actually invoke some other action to set window's context and initialize it.
-
Projects Ctrl+1
-
Files Ctrl+2
-
Classes Ctrl+9
-
Favorites Ctrl+3
-
Services Ctrl+5
-
Action Items Ctrl+6
-
Palette Ctrl+Shift+8
-
Properties Ctrl+Shift+7
- Output
- Editing
- Navigating
- Debugging
-
Variables Alt+Shift+1
-
Watches Alt+Shift+2
-
Call Stack Alt+Shift+3
-
Loaded Classes Alt+Shift+4
-
Breakpoints Alt+Shift+5
-
Sessions Alt+Shift+6
-
Threads Alt+Shift+7
-
Expression Evaluation
-
Sources Alt+Shift+8
- ----------------------------------
-
Debugging Alt+Shift+9
-
Disassembly
-
Memory
-
Registers
- ----------------------------------
-
Debugger Console
-
Analyze Stack
-
- Profiling
- Versioning
- Web
- IDE
-
Notifications (planned for next release as Notification and Messaging Center, see UEXNotifications)
-
Exception Reporter
-
Terminal
-
Processes
-
- ----------------------------------
- Configure Window
- Maximize
- Float
- Float Group
- Minimize
- Minimize Group
- Dock Alt+Shift+D
- Dock Group
- ----------------------------------
- Clone Document
- New Document Tab Group
- Collapse Document Tab Group
- Reset Windows
- ----------------------------------
- Close Window Ctrl+W
- Close All Documents Strl+Shift+W
- Close Other Documents
- Documents... Shift+F4
Help
Current state:
- Help Contents
- Online Docs and Support
- Keyboard Shortcuts Card
- Report Issue...
- ----------------------------------
- Javadoc Index Search Shift+F1
- Javadoc References
- More Javadoc...
- ----------------------------------
- Check for Updates
- Start Page
- About
Suggestions / Questions
- Javadoc -> JavaDoc ?
- Javadoc References has just one sub-item at all times ?