Home » Eclipse Projects » Standard Widget Toolkit (SWT) » How to access Mac About, Preferences and Quit from SWT
| |
Re: How to access Mac About, Preferences and Quit from SWT [message #449343 is a reply to message #449340] |
Sat, 22 January 2005 07:01 |
Benjamin Pasero Messages: 337 Registered: July 2009 |
Senior Member |
|
|
Here is a Snippet that Andre Weinand once sent me as example on how to
create those Menus, maybe that helps:
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.Callback;
import org.eclipse.swt.internal.carbon.HICommand;
import org.eclipse.swt.internal.carbon.OS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
public class AppMenu {
private static final int kHICommandPreferences=
('p' << 24) + ('r' << 16) + ('e' << 8) + 'f';
private static final int kHICommandAbout=
('a' << 24) + ('b' << 16) + ('o' << 8) + 'u';
private static final int kHICommandServices=
('s' << 24) + ('e' << 16) + ('r' << 8) + 'v';
public static void main(String[] arg) {
Display.setAppName("AppMenu"); // sets name in Dock
Display display= Display.getDefault();
hookApplicationMenu(display, "About AppMenu");
Shell shell= new Shell(display);
shell.setText("Main Window");
shell.open();
while (!shell.isDisposed())
if (!display.readAndDispatch())
display.sleep();
display.dispose();
}
static void hookApplicationMenu(Display display, final String aboutName)
{
// Callback target
Object target= new Object() {
int commandProc(int nextHandler, int theEvent, int userData) {
if (OS.GetEventKind(theEvent) == OS.kEventProcessCommand) {
HICommand command= new HICommand();
OS.GetEventParameter(theEvent,
OS.kEventParamDirectObject, OS.typeHICommand, null,
HICommand.sizeof, null, command);
switch (command.commandID) {
case kHICommandPreferences:
return handleCommand("Preferences"); //$NON-NLS-1$
case kHICommandAbout:
return handleCommand(aboutName);
default:
break;
}
}
return OS.eventNotHandledErr;
}
int handleCommand(String command) {
Shell shell= new Shell();
MessageBox preferences= new MessageBox(shell,
SWT.ICON_WARNING);
preferences.setText(command);
preferences.open();
shell.dispose();
return OS.noErr;
}
};
final Callback commandCallback= new Callback(target,
"commandProc", 3); //$NON-NLS-1$
int commandProc= commandCallback.getAddress();
if (commandProc == 0) {
commandCallback.dispose();
return; // give up
}
// Install event handler for commands
int[] mask= new int[] { OS.kEventClassCommand,
OS.kEventProcessCommand};
OS.InstallEventHandler(OS.GetApplicationEventTarget(), commandProc,
mask.length / 2, mask, 0, null);
// create About ... menu command
int[] outMenu= new int[1];
short[] outIndex= new short[1];
if (OS.GetIndMenuItemWithCommandID(0, kHICommandPreferences, 1,
outMenu, outIndex) == OS.noErr && outMenu[0] != 0) {
int menu= outMenu[0];
int l= aboutName.length();
char buffer[]= new char[l];
aboutName.getChars(0, l, buffer, 0);
int str= OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault,
buffer, l);
OS.InsertMenuItemTextWithCFString(menu, str, (short) 0, 0,
kHICommandAbout);
OS.CFRelease(str);
// add separator between About & Preferences
OS.InsertMenuItemTextWithCFString(menu, 0, (short) 1,
OS.kMenuItemAttrSeparator, 0);
// enable pref menu
OS.EnableMenuCommand(menu, kHICommandPreferences);
// disable services menu
OS.DisableMenuCommand(menu, kHICommandServices);
}
// schedule disposal of callback object
display.disposeExec(new Runnable() {
public void run() {
commandCallback.dispose();
}
});
}
Ben
}
> Not from SWT proper. You have to use the classes in the
> com.apple.cocoa.awt (very rough, it's something to that effect, use
> content assist to find it). I suggest digging around in the classes
> using content assist to find the one you need. The methods are pretty
> self explanatory.
>
> Daniel
>
> Ivan wrote:
>
>> Hi all,
>>
>> Is there anyway to link the About, Preferences and Quit into Mac
>> menu ?
>>
>> Thanks
>>
|
|
|
Goto Forum:
Current Time: Thu Apr 18 02:58:56 GMT 2024
Powered by FUDForum. Page generated in 0.02032 seconds
|