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