[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Newsgroup Home]
|
[news.eclipse.platform.swt] Re: How to access Mac About, Preferences and Quit from SWT
|
- From: Benjamin Pasero <bpasero@xxxxxxxxxx>
- Date: Sat, 22 Jan 2005 08:01:31 +0100
- Newsgroups: eclipse.platform.swt
- Organization: EclipseCorner
- User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)
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