D言語からObjective-CとCocoaAPIを使いたい
D言語から CocoaAPI の Menu を使用する
D言語から Mac GUI の Menu を表示するためのプログラムです。
不充分な点が多数ありますが、少しは使えると思います。
サンプルコード
Powered by Prism
cocoa/menu.d
/*
* cocoa/menu.d Version 0.0.4
*/
module cocoa.menu;
import core.attribute : optional, selector;
import cocoa.window;
import cocoa.control;
NSMenu mainMenu(string aName) {
/* menubar main menu */
NSMenu menubar = NSMenu.alloc.init;
NSMenuItem apItem = NSMenuItem.alloc.init;
menubar.item = apItem;
/* application menu */
NSMenu apMenu = NSMenu.alloc.init;
apItem.submenu = apMenu;
// apMenu.item = NSMenuItem.alloc.init("About " ~ aName, "orderFrontStandardAboutPanel:", "");
apMenu.item = NSMenuItem.alloc.init("About " ~ aName, "aboutPanel", "");
apMenu.item = NSMenuItem.separatorItem;
/* preferences menu */
apMenu.item = NSMenuItem.alloc.init("Preferences…", "preferences", ",");
apMenu.item = NSMenuItem.separatorItem;
/* services menu */
NSMenu servicesMenu = NSMenu.alloc.init("Services");
NSApp.servicesMenu = NSMenu.alloc.init;
NSMenuItem servicesItem = NSMenuItem.alloc.init;
servicesItem.title = "Services".toNs;
servicesItem.submenu = NSApp.servicesMenu;
apMenu.item = servicesItem;
/* hide menu */
apMenu.item = NSMenuItem.separatorItem;
apMenu.item = NSMenuItem.alloc.init("Hide " ~ aName, "hide:", "h");
apMenu.item = NSMenuItem.alloc.init("Hide Others", "hideOtherApplications:", "H");
apMenu.item = NSMenuItem.alloc.init("Show All", "unhideAllApplications:", "");
apMenu.item = NSMenuItem.separatorItem;
apMenu.item = NSMenuItem.alloc.init("Quit " ~ aName , "terminate:", "q");
/* file menu */
NSMenu fileMenu = NSMenu.alloc.init("File");
NSMenuItem fileItem = menubar.addItem("File", null, ""); // <--
menubar.submenu(fileMenu, fileItem);
// fileMenu.item = NSMenuItem.alloc.init("New", "newDocument:", "n");
fileMenu.item = NSMenuItem.alloc.init("New", "newDocument", "n");
// fileMenu.item = NSMenuItem.alloc.init("Open", "openDocument:", "o");
fileMenu.item = NSMenuItem.alloc.init("Open", "openDocument", "o");
NSMenu recentMenu = NSMenu.alloc.init("Open Recent");
NSMenuItem recentItem = fileMenu.addItem("Open Recent", null, ""); // <--
recentMenu.submenu(recentMenu, recentItem);
NSMenu clearMenu = NSMenu.alloc.init("Clear Menu");
NSMenuItem clearItem = recentMenu.addItem("Clear Menu", null, ""); // <--
// clearMenu.setSubmenu(clearMenu, clearItem);
clearMenu.item = NSMenuItem.alloc.init("ClearMenu", "clearRecentDocuments:", "");
fileMenu.item = NSMenuItem.separatorItem;
fileMenu.item = NSMenuItem.alloc.init("Close", "performClose:", "w");
// fileMenu.item = NSMenuItem.alloc.init("Save", "saveDocument:", "s");
fileMenu.item = NSMenuItem.alloc.init("Save", "saveDocument", "s");
// fileMenu.item = NSMenuItem.alloc.init("Save As…", "saveDocumentAs:", "S");
fileMenu.item = NSMenuItem.alloc.init("Save As…", "saveDocumentAs", "S");
// fileMenu.addItem = NSMenuItem.alloc.init("revert to Saved", "revertDocumentToSaved", "r");
fileMenu.item = NSMenuItem.separatorItem;
fileMenu.item = NSMenuItem.alloc.init("Page Setup…", "runPageLayout:", "s");
fileMenu.item = NSMenuItem.alloc.init("Print…", "print:", "p");
/* edit menu */
NSMenu editMenu = NSMenu.alloc.init("Edit");
NSMenuItem editItem = menubar.addItem("Edit", null, ""); // <--
menubar.setSubmenu(editMenu, editItem);
editMenu.item = NSMenuItem.alloc.init("Undo", "undo:", "z");
editMenu.item = NSMenuItem.alloc.init("Redo", "redo:", "Z");
editMenu.item = NSMenuItem.separatorItem;
editMenu.item = NSMenuItem.alloc.init("Cut", "cut:", "x");
editMenu.item = NSMenuItem.alloc.init("Copy", "copy:", "c");
editMenu.item = NSMenuItem.alloc.init("Paste", "paste:", "v");
// editMenu.addItem(NSMenuItem.alloc.init("Paste and Match Style", "pasteAsPlainText:", "V"));
editMenu.item = NSMenuItem.alloc.init("Delete", "delete:", "\b");
editMenu.item = NSMenuItem.separatorItem;
editMenu.item = NSMenuItem.alloc.init("select all", "selectAll:", "n");
editMenu.item = NSMenuItem.separatorItem;
NSMenu findMenu = NSMenu.alloc.init("Find");
NSMenuItem findItem = editMenu.addItem("Find…", null, ""); // <--
findMenu.setSubmenu(findMenu, findItem);
findMenu.item = NSMenuItem.alloc.init("Find…", "performFindPanelAction:", "f");
findMenu.item = NSMenuItem.alloc.init("Find and Replace…", "performFindPanelAction:", "F");
findMenu.item = NSMenuItem.alloc.init("Find Next", "performFindPanelAction:", "g");
findMenu.item = NSMenuItem.alloc.init("Find Previous", "performFindPanelAction:", "G");
findMenu.item = NSMenuItem.alloc.init("Use Selection for Find", "performFindPanelAction:", "e");
findMenu.item = NSMenuItem.alloc.init("Jump to Selection", "centerSelectionInVisibleArea:", "j");
NSMenu spellMenu = NSMenu.alloc.init("Spelling and Grammar");
NSMenuItem spellItem = editMenu.addItem("Spelling ang Grammar", null, ""); // <--
spellMenu.setSubmenu(spellMenu, spellItem);
spellMenu.item = NSMenuItem.alloc.init("Show Spelling and Grammar", "showGuessPanel:", ":");
spellMenu.item = NSMenuItem.alloc.init("CheckDocument Now", "checkSpelling:", ";");
spellMenu.item = NSMenuItem.separatorItem;
spellMenu.item = NSMenuItem.alloc.init("Check Spelling while Typing", "toggleContinuousSpellChecking:", "");
spellMenu.item = NSMenuItem.alloc.init("Check Grammar With Spelling", "toggleGrammarhecking:", "");
spellMenu.item = NSMenuItem.alloc.init("Correct Spelling Automatically", "toggleAutomaticSpellingCorrection:", "");
NSMenu subMenu = NSMenu.alloc.init("Substitutions");
NSMenuItem subItem = editMenu.addItem("Substitutions", null, ""); // <--
subMenu.setSubmenu(subMenu, subItem);
subMenu.item = NSMenuItem.alloc.init("Show Substitutions", "orderFrontSubstitutionsPanel:", "");
subMenu.item = NSMenuItem.separatorItem;
subMenu.item = NSMenuItem.alloc.init("Smart Copy/Paste", "toggleSmartInsertDelete:", "");
subMenu.item = NSMenuItem.alloc.init("Smart Quotes", "toggleAutomaticQuoteSubstitution:", "");
subMenu.item = NSMenuItem.alloc.init("Smart Dashes", "toggleAutomaticDashSubstitution:", "");
subMenu.item = NSMenuItem.alloc.init("Smart Links", "toggleAutomaticLinkDetection:", "");
subMenu.item = NSMenuItem.alloc.init("Data Detectors", "toggleAutomaticDataDetection:", "");
subMenu.item = NSMenuItem.alloc.init("Text Replacement", "toggleAutomaticTextReplacement:", "");
NSMenu transMenu = NSMenu.alloc.init("Transformations");
NSMenuItem transItem = editMenu.addItem("Transformations", null, ""); // <--
transMenu.setSubmenu(transMenu, transItem);
transMenu.item = NSMenuItem.alloc.init("Make Upper Case", "uppercaseWord:", "");
transMenu.item = NSMenuItem.alloc.init("Make Lower Case", "lowercaseWord:", "");
transMenu.item = NSMenuItem.alloc.init("Capitalize", "capitalizeWord:", "");
NSMenu speechMenu = NSMenu.alloc.init("Speech");
NSMenuItem speechItem = editMenu.addItem("Speech", null, ""); // <--
speechMenu.setSubmenu(speechMenu, speechItem);
speechMenu.item = NSMenuItem.alloc.init("Start Speaking", "startSpeaking:", "");
speechMenu.item = NSMenuItem.alloc.init("Stop Speaking", "stopSpeaking:", "");
/* format menu */
NSMenu formatMenu = NSMenu.alloc.init("Format");
NSMenuItem formatItem = menubar.addItem("Format", null, ""); // <--
menubar.setSubmenu(formatMenu, formatItem);
NSMenu fontMenu = formatMenu.alloc.init("Font");
NSMenuItem fontItem = formatMenu.addItem("Font", null, ""); // <--
fontMenu.setSubmenu(fontMenu, fontItem);
fontMenu.item = NSMenuItem.alloc.init("Show Fonts", "orderFrontFontPanel:", "t");
fontMenu.item = NSMenuItem.alloc.init("Bold", "addFontTrait:", "b");
fontMenu.item = NSMenuItem.alloc.init("Italic", "addFontTrait:", "i");
fontMenu.item = NSMenuItem.alloc.init("Underline", "underline:", "u");
fontMenu.item = NSMenuItem.separatorItem;
fontMenu.item = NSMenuItem.alloc.init("Bigger", "modifyFont:", "+");
fontMenu.item = NSMenuItem.alloc.init("Smaller", "modifyFont:", "-");
fontMenu.item = NSMenuItem.separatorItem;
NSMenu kernMenu = fontMenu.alloc.init("Kern");
NSMenuItem kernItem = fontMenu.addItem("Kern", null, ""); // <--
kernMenu.setSubmenu(kernMenu, kernItem);
kernMenu.item = NSMenuItem.alloc.init("Use Default", "useStandardKerning:", "");
kernMenu.item = NSMenuItem.alloc.init("Use None", "turnOffKerning:", "");
kernMenu.item = NSMenuItem.alloc.init("Tighten", "tightenKerning:", "");
kernMenu.item = NSMenuItem.alloc.init("Loosen", "loosenKerning:", "");
NSMenu ligatureMenu = fontMenu.alloc.init("Ligtures");
NSMenuItem ligatureItem = fontMenu.addItem("Ligtures", null, ""); // <--
ligatureMenu.setSubmenu(ligatureMenu, ligatureItem);
ligatureMenu.item = NSMenuItem.alloc.init("Use Default", "useStandardLigatures:", "");
ligatureMenu.item = NSMenuItem.alloc.init("Use None", "turnOffLigatures:", "");
ligatureMenu.item = NSMenuItem.alloc.init("Use All", "useAllLigatures:", "");
NSMenu baseMenu = fontMenu.alloc.init("Baseline");
NSMenuItem baseItem = fontMenu.addItem("Baseline", null, ""); // <--
baseMenu.setSubmenu(baseMenu, baseItem);
baseMenu.item = NSMenuItem.alloc.init("Use Default", "unscript:", "");
baseMenu.item = NSMenuItem.alloc.init("SuperScript", "superscript:", "");
baseMenu.item = NSMenuItem.alloc.init("Subscript", "subscript:", "");
baseMenu.item = NSMenuItem.alloc.init("Raise", "raiseBaseline:", "");
baseMenu.item = NSMenuItem.alloc.init("Lower", "lowerBaseline:", "");
fontMenu.item = NSMenuItem.separatorItem;
fontMenu.item = NSMenuItem.alloc.init("Show Colors", "orderFrontColorPanel:", "");
fontMenu.item = NSMenuItem.separatorItem;
fontMenu.item = NSMenuItem.alloc.init("Copy Style", "copyFont:", "");
fontMenu.item = NSMenuItem.alloc.init("Paste Style", "pasteFont", "");
NSMenu textMenu = formatMenu.alloc.init("Text");
NSMenuItem textItem = formatMenu.addItem("Text", null, ""); // <--
textMenu.setSubmenu(textMenu, textItem);
textMenu.item = NSMenuItem.alloc.init("Align Left", "alignLeft:", "{");
textMenu.item = NSMenuItem.alloc.init("Center", "alignCenter:", "|");
textMenu.item = NSMenuItem.alloc.init("Justify", "alignJustified:", "");
textMenu.item = NSMenuItem.alloc.init("Align Right", "alignRight:", "}");
textMenu.item = NSMenuItem.separatorItem;
NSMenu wdMenu = textMenu.alloc.init("Writing Direction");
NSMenuItem wdItem = textMenu.addItem("writing Direction", null, ""); // <--
wdMenu.setSubmenu(wdMenu, wdItem);
wdMenu.item = NSMenuItem.alloc.init("Paragraph", null, "");
wdMenu.item = NSMenuItem.alloc.init("\tDefault", "makeBaseWritingDirectionNatural:", "");
wdMenu.item = NSMenuItem.alloc.init("\tLeft to Right", "makeBaseWritingDirectionLeftToRight:", "");
wdMenu.item = NSMenuItem.alloc.init("\tRight to Left", "makeBaseWritingDirectionRightToLeft:", "");
wdMenu.item = NSMenuItem.separatorItem;
wdMenu.item = NSMenuItem.alloc.init("Selection", null, "");
wdMenu.item = NSMenuItem.alloc.init("\tDefault", "makeTextWritingDirectionNatural:", "");
wdMenu.item = NSMenuItem.alloc.init("\tLeft to Right", "makeTextWritingDirectionLeftToRight:", "");
wdMenu.item = NSMenuItem.alloc.init("\tRight to Left", "makeTextWritingDirectionRightToLeft:", "");
textMenu.item = NSMenuItem.separatorItem;
textMenu.item = NSMenuItem.alloc.init("Show Ruler", "toggleRuler:", "R");
textMenu.item = NSMenuItem.alloc.init("Copy Ruler", "copyRuler:", "C");
textMenu.item = NSMenuItem.alloc.init("Paste Ruler", "pasteRuler:", "V");
/* view menu */
NSMenu viewMenu = NSMenu.alloc.init("View");
NSMenuItem viewItem = menubar.addItem("View", null, ""); // <--
menubar.setSubmenu(viewMenu, viewItem);
// viewMenu.item = NSMenuItem.alloc.init("Show Toolbar", "toggleToolbarShown:", "t");
// NSMenuItem showItem = NSMenuItem.alloc.init("Show Toolbar", "toggleToolbarShown:", "t");
// showItem.keyMask(NSEventModifierFlag.Option | NSEventModifierFlag.Command); //
// showItem.key = "t".toNs; //
// viewMenu.item(showItem);
viewMenu.item = NSMenuItem.alloc.init("Customize Toolbar…", "runToolbarCustomizationPallette:", "");
viewMenu.item = NSMenuItem.separatorItem;
viewMenu.item = NSMenuItem.alloc.init("Show Sidebar", "toggleSidebar:", "s");
viewMenu.item = NSMenuItem.alloc.init("Enter Full Screen", "toggleFullScreen:", "f");
/* window menu */
NSMenu winMenu = NSMenu.alloc.init("Window");
NSMenuItem winItem = menubar.addItem("Window", null, ""); // <--
menubar.setSubmenu(winMenu, winItem);
winMenu.item = NSMenuItem.alloc.init("Minimize", "performMiniaturize:", "m");
winMenu.item = NSMenuItem.alloc.init("Zoom", "performZoom:", "");
winMenu.item = NSMenuItem.alloc.init("Tile Window to Left of Screen", "", "");
winMenu.item = NSMenuItem.alloc.init("Tile Window to Right of Screen", "", "");
winMenu.item = NSMenuItem.alloc.init("Replace Tiled Window", "", "");
winMenu.item = NSMenuItem.separatorItem;
winMenu.item = NSMenuItem.alloc.init("Show Previous Tab", "", "");
winMenu.item = NSMenuItem.alloc.init("Show Next Tab", "", "");
winMenu.item = NSMenuItem.alloc.init("Move Tab to New Window", "", "");
winMenu.item = NSMenuItem.alloc.init("Merge All Windows", "", "");
winMenu.item = NSMenuItem.separatorItem;
winMenu.item = NSMenuItem.alloc.init("Bring All to Front", "arrangeInFront:", "");
winMenu.item = NSMenuItem.separatorItem;
// winMenu.addItem = NSMenuItem.alloc.init(aName, "", "");
/* help menu */
NSMenu helpMenu = NSMenu.alloc.init("Help");
NSMenuItem helpItem = menubar.addItem("Help", null, ""); // <--
menubar.setSubmenu(helpMenu, helpItem);
// helpMenu.item = NSMenuItem.alloc.init(aName ~ " Help" , "showHelp:", "");
helpMenu.item = NSMenuItem.alloc.init(aName ~ " Help" , "showHelp", "");
helpMenu.item = NSMenuItem.alloc.init(aName ~ " Web Help" , "showWebHelp", "");
return menubar;
}
extern (Objective-C)
string dialog(string msgText, string infoText) {
NSAlert alert = NSAlert.alloc.init;
alert.addButton= "OK".toNs;
alert.messageText = msgText.toNs;
alert.information = infoText.toNs;
alert.style = alertStyle.warning;
switch (alert.run) {
case response.OK: return("OK");
default: return("Other");
}
}
cocoa/window.d
cocoa/control.d
- Log
- 2025-03-31 修正しました。
- 2024-08-14 修正しました。
- 2024-06-05 修正しました。
- 2023-01-20 upload