I want to display results of a file search. I want to enable a context menu for a file selection, which will be the system's context menu.
For example, if the user right-clicks a file in Windows - I want to display the popup-menu with the options:
- Open
- Open with...
- Edit
- Send to...
- Copy
- Cut
- etc...
And, if possible - this menu will be generated automatically, depending on the operating system.
If that is not possible or too complex - I'd like to at least enable a "Locate on disk" option which will open a Windows Explorer (or its equivalent in other system) in the file's folder and select the file.
The application is written in Java (JDK 7) using SWT.
Take a look at the example of how to use a popup menu:
Snippet131
Once you are in the handleEvent()
method you can perform any logic you need in order to add menu items to your context menu.
In order to get platform specific behavior you can use System.getProperty() with a combination of the "os.name", "os.arch", and "os.version" strings in order to determine which platform you are running. Then just use if statements to conditionally add menu items to your menu.
For Windows you can achieve this but you have to call some native COM methods. I did it with native calls, maybe it is possible with JNA. You need the functionality from IContextMenu2.
Then you can extend the SWT Menu
class, populate it with QueryContextMenu()
, subclass it and handle WM_DRAWITEM
, WM_MEASUREITEM
, WM_INITMENUPOPUP
, WM_MENUSELECT
and WM_COMMAND
and forward them to IContextMenu2
instance via HandleMenuMsg
.