Example usage for org.eclipse.swt.internal.carbon OS DisableMenuCommand

List of usage examples for org.eclipse.swt.internal.carbon OS DisableMenuCommand

Introduction

In this page you can find the example usage for org.eclipse.swt.internal.carbon OS DisableMenuCommand.

Prototype

public static final native void DisableMenuCommand(int mHandle, int commandId);

Source Link

Usage

From source file:Snippet178.java

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;
                }//from   ww  w .j av  a 2 s .co  m
            }
            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();
        }
    });
}