1/* 2 * OpenClonk, http://www.openclonk.org 3 * 4 * Copyright (c) 2009-2016, The OpenClonk Team and contributors 5 * 6 * Distributed under the terms of the ISC license; see accompanying file 7 * "COPYING" for details. 8 * 9 * "Clonk" is a registered trademark of Matthes Bender, used with permission. 10 * See accompanying file "TRADEMARK" for details. 11 * 12 * To redistribute this file separately, substitute the full license texts 13 * for the above references. 14 */ 15 16#include <GL/glew.h> 17 18#include "C4Include.h" 19#include "editor/C4Console.h" 20#include "game/C4Viewport.h" 21#include "game/C4GraphicsSystem.h" 22 23#import "platform/C4AppDelegate+MainMenuActions.h" 24#import "graphics/C4DrawGLMac.h" 25#import "editor/C4EditorWindowController.h" 26 27@implementation C4AppDelegate (MainMenuActions) 28 29- (IBAction) openScenario:(id)sender 30{ 31 Console.FileOpen(); 32} 33 34- (IBAction) openScenarioWithPlayers:(id)sender 35{ 36 Console.FileOpenWPlrs(); 37} 38 39- (IBAction) closeScenario:(id)sender 40{ 41 Console.FileClose(); 42 [editorWindowController.window setRepresentedFilename:@""]; 43} 44 45 46- (IBAction) saveGameAs:(id)sender 47{ 48 Console.FileSaveAs(true); 49} 50 51- (IBAction) saveScenario:(id)sender 52{ 53 Console.FileSave(); 54} 55 56- (IBAction) saveScenarioAs:(id)sender 57{ 58 Console.FileSaveAs(false); 59} 60 61- (IBAction) record:(id)sender 62{ 63 Console.FileRecord(); 64} 65 66- (IBAction) newViewport:(id)sender 67{ 68 Console.ViewportNew(); 69} 70 71- (IBAction) newViewportForPlayer:(id)sender 72{ 73 ::Viewports.CreateViewport([sender tag]); 74} 75 76- (IBAction) joinPlayer:(id)sender 77{ 78 Console.PlayerJoin(); 79} 80 81- (IBAction) openPropTools:(id)sender; 82{ 83 Console.EditCursor.OpenPropTools(); 84} 85 86- (IBAction) showAbout:(id)sender; 87{ 88 Console.HelpAbout(); 89} 90 91- (IBAction) toggleFullScreen:(id)sender 92{ 93 if (Application.isEditor) 94 { 95 NSBeep(); 96 return; 97 } 98 [gameWindowController setFullscreen:Config.Graphics.Windowed]; 99 Config.Graphics.Windowed = !Config.Graphics.Windowed; 100 101} 102 103- (IBAction) togglePause:(id)sender 104{ 105 [self simulateKeyPressed:K_PAUSE]; 106} 107 108- (IBAction) setConsoleMode:(id)sender 109{ 110 [editorWindowController selectMode:sender]; 111 [editorWindowController.modeSelector selectSegmentWithTag:[sender tag]]; 112} 113 114- (IBAction) setDrawingTool:(id)sender 115{ 116 [editorWindowController selectTool:sender]; 117 [editorWindowController.toolSelector selectSegmentWithTag:[sender tag]]; 118} 119 120- (IBAction) suggestQuitting:(id)sender; 121{ 122 if (!Application.isEditor && Game.IsRunning) 123 { 124 NSLog(@"Game running, only simulating Esc key"); 125 [self simulateKeyPressed:K_ESCAPE]; 126 } 127 else 128 { 129 if (Application.isEditor) 130 Console.FileClose(); 131 Application.fQuitMsgReceived = true; 132 Application.ScheduleProcs(); 133 Application.Clear(); 134 Application.Quit(); 135 } 136} 137 138- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item 139{ 140 // enabled when running in fullscreen 141 if ([item action] == @selector(toggleFullScreen:)) 142 return !Application.isEditor; 143 144 SEL s; 145 int i; 146 147 SEL gameRunningSelectors[] = 148 { 149 @selector(togglePause:), 150 @selector(makeScreenshot:), 151 @selector(makeScreenshotOfWholeMap:), 152 nil 153 }; 154 for (i = 0; (s = gameRunningSelectors[i]) != nil; i++) 155 if ([item action] == s) 156 return Game.IsRunning; 157 158 // enabled when game running and console mode 159 SEL gameRunningInConsoleModeSelectors[] = 160 { 161 @selector(saveScenario:), 162 @selector(saveScenarioAs:), 163 @selector(saveGameAs:), 164 @selector(record:), 165 @selector(closeScenario:), 166 @selector(newViewport:), 167 @selector(newViewportForPlayer:), 168 @selector(joinPlayer:), 169 @selector(openPropTools:), 170 @selector(setConsoleMode:), 171 @selector(setDrawingTool:), 172 nil 173 }; 174 for (i = 0; (s = gameRunningInConsoleModeSelectors[i]) != nil; i++) 175 { 176 if (s == [item action]) 177 return Application.isEditor && Game.IsRunning; 178 } 179 180 // always enabled 181 return YES; 182} 183 184- (IBAction) visitWebsite:(id)sender; 185{ 186 OpenURL("http://wiki.openclonk.org"); 187} 188 189- (void) simulateKeyPressed:(C4KeyCode)key 190{ 191 Game.DoKeyboardInput(key, KEYEV_Down, false, false, false, false, NULL); 192 Game.DoKeyboardInput(key, KEYEV_Up, false, false, false, false, NULL); 193} 194 195- (IBAction) makeScreenshot:(id)sender; 196{ 197 ::GraphicsSystem.SaveScreenshotKey(false); 198} 199 200- (IBAction) makeScreenshotOfWholeMap:(id)sender; 201{ 202 ::GraphicsSystem.SaveScreenshotKey(true); 203} 204 205@end 206