Re: Problem setting the menu
Re: Problem setting the menu
- Subject: Re: Problem setting the menu
- From: "Felipe Monteiro de Carvalho" <email@hidden>
- Date: Sun, 5 Oct 2008 23:40:16 -0300
Hello,
I am still trying to get the application menu to work. I have even
tryed to add a very simple nib file to the project. I simply added the
nib file to the bundle and set NSMainNibFile, but it doesn't show the
applications menu. It doesn't matter if I comment the code which
attempts to generate the application menu or not, it never shows
anything inside it.
Any ideas how to insert a menu in a project which is otherwise
completely written in code?
Here is my code:
type
{ TMyView }
TMyView = class
private
{ Other helper functions }
procedure AddToMenubar(menu: NSMenu);
function CreateAppleMenu(): NSMenu;
function CreateFileMenu(): NSMenu;
procedure CreateMainMenu();
function CreateMenuItem(ATitle: shortstring): NSMenuItem;
function CreateToolbar(AOwnerView: NSView; AX, AY, AWidth,
AHeight: Double): NSToolbar;
function CreateTextField(): NSTextField;
public
{ classes }
MainWindow: NSWindow;
MainWindowView: NSView;
Toolbar: NSToolbar;
TextField: NSTextField;
MainMenu, AppleMenu, ServicesMenu, FileMenu: NSMenu;
OpenItem, SaveItem, SaveAsItem, ExitItem: NSMenuItem;
{ strings and sizes}
CFWindowTitle, CFEmptyString: CFStringRef;
MainWindowRect: NSRect;
{ methods }
procedure CreateUserInterface();
procedure AttachEventHandlers();
end;
var
myView: TMyView;
const
Str_Window_Title = 'Text Editor';
implementation
uses controller, model;
{@@
}
procedure TMyView.CreateUserInterface();
begin
CFEmptyString := CFStringCreateWithPascalString(nil, '',
kCFStringEncodingUTF8);
{ Creates the main window }
MainWindowRect.origin.x := 300.0;
MainWindowRect.origin.y := 300.0;
MainWindowRect.size.width := 300.0;
MainWindowRect.size.height := 500.0;
MainWindow :=
NSWindow.initWithContentRect_styleMask_backing_defer(MainWindowRect,
NSTitledWindowMask or NSClosableWindowMask or
NSMiniaturizableWindowMask or NSResizableWindowMask,
NSBackingStoreBuffered, LongBool(NO));
MainWindowView := NSView.CreateWithHandle(MainWindow.contentView);
CFWindowTitle := CFStringCreateWithPascalString(nil,
Str_Window_Title, kCFStringEncodingUTF8);
MainWindow.setTitle(CFWindowTitle);
{ Adds the toolbar and it's buttons }
Toolbar := CreateToolbar(MainWindowView, 0,
MainWindowRect.size.height - 50, MainWindowRect.size.width, 50);
MainWindow.setToolbar(Toolbar.Handle);
{ Add the text area }
TextField := CreateTextField();
{ Add the main menu }
CreateMainMenu();
end;
procedure TMyView.AttachEventHandlers();
begin
OpenItem.setTarget(myController.Handle);
OpenItem.setAction(sel_registerName(PChar('doOpenFile:')));
SaveItem.setTarget(myController.Handle);
SaveItem.setAction(sel_registerName(PChar('doSaveFile:')));
ExitItem.setTarget(myController.Handle);
ExitItem.setAction(sel_registerName(PChar('doClose:')));
end;
function TMyView.CreateAppleMenu(): NSMenu;
var
AppleMenuTitle, ServicesMenuTitle: CFStringRef;
begin
AppleMenuTitle := CFStringCreateWithPascalString(nil, 'Apple Menu',
kCFStringEncodingUTF8);
ServicesMenuTitle := CFStringCreateWithPascalString(nil, 'Services',
kCFStringEncodingUTF8);
{ Creates the Apple menu }
Result := NSMenu.initWithTitle(AppleMenuTitle);
{ Add the services submenu }
ServicesMenu := NSMenu.initWithTitle(ServicesMenuTitle);
NSApp.setServicesMenu(ServicesMenu.Handle);
end;
function TMyView.CreateFileMenu(): NSMenu;
var
MenuTitle: CFStringRef;
begin
MenuTitle := CFStringCreateWithPascalString(nil, 'File',
kCFStringEncodingUTF8);
{ Creates the file menu }
Result := NSMenu.initWithTitle(MenuTitle);
{ Adds items to it }
OpenItem := CreateMenuItem('Open');
Result.addItem(OpenItem.Handle);
SaveItem := CreateMenuItem('Save');
Result.addItem(SaveItem.Handle);
ExitItem := CreateMenuItem('Exit');
Result.addItem(ExitItem.Handle);
end;
procedure TMyView.AddToMenubar(menu: NSMenu);
var
dummyItem: NSMenuItem;
begin
dummyItem := NSMenuItem.initWithTitle_action_keyEquivalent(CFEmptyString,
nil, CFEmptyString);
dummyItem.setSubmenu(menu.Handle);
MainMenu.addItem(dummyItem.Handle);
dummyItem.Free;
end;
--
Felipe Monteiro de Carvalho
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden