I don't have much experience with programming for Mac, I come from a Windows background.
So, I use this code to show an NSOpenPanel, but I also want to specify the position and size on screen of the dialog when it appears. How do I do that?
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setCanChooseFiles:NO];
NSInteger result = [openPanel runModalForTypes:nil];
It seems that by calling
[openPanel setFrame:NSMakeRect(0, 0, 500, 500) display:YES];
I can set the size of NSOpenPanel (it becomes 500x500 pixels), but not its upper-left corner, it's centered to the screen, instead of appearing at the top-left corner of the screen.
You'll have to subclass NSOpenPanel and override the center
method, which gets called before the panel is placed on screen. Here's how you would put it in the top right corner:
- (void)center {
NSRect myFrame = [self frame];
NSRect screenFrame = [[self screen] visibleFrame];
myFrame.size.height = round(screenFrame.size.height / 2);
myFrame.origin.x = screenFrame.origin.x + screenFrame.size.width - myFrame.size.width;
myFrame.origin.y = screenFrame.origin.y + screenFrame.size.height - myFrame.size.height;
[self setFrame:myFrame display:YES];
}