/// Objective-C — main.m — update:12/10/26
#import <Cocoa/Cocoa.h>

#import "AppViewController.h"

static void makeSliderSubmenu(NSMenu* parentMenu, NSString* title, SEL action, double minValue, double maxValue, double defaultValue, NSInteger tickmarks)
{
  NSMenu* submenu = [[NSMenu alloc] initWithTitle:title];
  NSMenuItem* sliderHostItem = [parentMenu addItemWithTitle:title action:nil keyEquivalent:@""];
  sliderHostItem.submenu = submenu;
  
  NSSlider* slider = [NSSlider sliderWithTarget:nil action:action];
  slider.frame = NSMakeRect(0, 0, 160, 16);
  NSMenuItem* sliderItem = [submenu addItemWithTitle:@"" action:nil keyEquivalent:@""];
  sliderItem.view = slider;
  slider.numberOfTickMarks = tickmarks;
  slider.minValue = minValue;
  slider.maxValue = maxValue;
  slider.intValue = defaultValue;
  slider.allowsTickMarkValuesOnly = tickmarks ? YES : NO;
  slider.autoresizingMask = NSViewMinXMargin|NSViewWidthSizable|NSViewMaxXMargin|NSViewMinYMargin|NSViewMaxYMargin|NSViewHeightSizable;
  [slider sizeToFit];
}

static void createApplicationMenu(NSApplication* app)
{
  app.mainMenu = [[NSMenu alloc] init];
  NSString* bundleName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
  NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@""];
  NSMenuItem* appMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
  
  [appMenu addItemWithTitle:[@"About " stringByAppendingString:bundleName]
                     action:@selector(orderFrontStandardAboutPanel:)
              keyEquivalent:@""];
  
  [appMenu addItem:[NSMenuItem separatorItem]];
  
  [appMenu addItemWithTitle:[@"Hide " stringByAppendingString:bundleName]
                     action:@selector(hide:)
              keyEquivalent:@"h"];
  
  NSMenuItem* hide_other_item = [appMenu addItemWithTitle:@"Hide Others"
                                                   action:@selector(hideOtherApplications:)
                                            keyEquivalent:@"h"];
  hide_other_item.keyEquivalentModifierMask = NSEventModifierFlagOption | NSEventModifierFlagCommand;
  
  [appMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
  
  [appMenu addItem:[NSMenuItem separatorItem]];
  
  [appMenu addItemWithTitle:[@"Quit " stringByAppendingString:bundleName]
                     action:@selector(terminate:)
              keyEquivalent:@"q"];
  
  appMenuItem.submenu = appMenu;
  
  [app.mainMenu addItem:appMenuItem];
  
  NSMenu* graphicsMenu = [[NSMenu alloc] initWithTitle:@"Graphics"];
  NSMenuItem* graphicsMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
  graphicsMenuItem.submenu = graphicsMenu;
  
  makeSliderSubmenu(graphicsMenu, @"Brightness", @selector(setBrightness:), /* min */ 1, /* max */ 10, /* current */ 5, /* tickmarks */ 9);
  makeSliderSubmenu(graphicsMenu, @"EDR Demo",   @selector(setEDRBias:)   , /* min */ 0, /* max */ 1,  /* current */ 0, /* tickmarks */ 0);
  
  [app.mainMenu addItem:graphicsMenuItem];
  
  NSMenu* windowsMenu = [[NSMenu alloc] initWithTitle:@"Window"];
  NSMenuItem* windowsMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
  
  [windowsMenu addItemWithTitle:NSLocalizedString(@"Minimize", @"")
                         action:@selector(performMiniaturize:)
                  keyEquivalent:@"m"];
  windowsMenuItem.submenu = windowsMenu;
  [app.mainMenu addItem:windowsMenuItem];
  
  app.windowsMenu = windowsMenu;
}

int main(int argc, const char* argv[])
{
  NSApplication* application = [NSApplication sharedApplication];

  createApplicationMenu(application); // Appelle ton menu

  ApplicationController* applicationController = [[ApplicationController alloc] init];
  application.delegate = applicationController;

  return (NSApplicationMain(argc, argv));
}