public MainEditorWindow(string ProjectFile) { this.SetMinimumSize(600, 400); this.SetText("RPG Studio MK"); this.Initialize(); Editor.LoadGeneralSettings(); SetPosition(Editor.GeneralSettings.LastX, Editor.GeneralSettings.LastY); SetSize(Editor.GeneralSettings.LastWidth, Editor.GeneralSettings.LastHeight); if (Editor.GeneralSettings.WasMaximized) { Maximize(); } this.OnClosing += delegate(BoolEventArgs e) { int x, y; odl.SDL2.SDL.SDL_GetWindowPosition(this.SDL_Window, out x, out y); int w, h; odl.SDL2.SDL.SDL_GetWindowSize(this.SDL_Window, out w, out h); Editor.GeneralSettings.LastX = x; Editor.GeneralSettings.LastY = y; Editor.GeneralSettings.LastWidth = w; Editor.GeneralSettings.LastHeight = h; odl.SDL2.SDL.SDL_WindowFlags flags = (odl.SDL2.SDL.SDL_WindowFlags)odl.SDL2.SDL.SDL_GetWindowFlags(this.SDL_Window); Editor.GeneralSettings.WasMaximized = (flags & odl.SDL2.SDL.SDL_WindowFlags.SDL_WINDOW_MAXIMIZED) == odl.SDL2.SDL.SDL_WindowFlags.SDL_WINDOW_MAXIMIZED; Editor.DumpGeneralSettings(); if (Editor.InProject) { // Save window when closing with the top-right X button if (Program.ReleaseMode && !Program.ThrownError) { e.Value = true; EnsureSaved(Dispose); } } }; this.InitializeUI(10, 23, 37); UI.RegisterShortcut(new Shortcut(null, new Key(Keycode.Z, Keycode.CTRL), delegate(BaseEventArgs e) { Editor.Undo(); }, true)); UI.RegisterShortcut(new Shortcut(null, new Key(Keycode.Y, Keycode.CTRL), delegate(BaseEventArgs e) { Editor.Redo(); }, true)); // Widgets may now be created Editor.MainWindow = this; Utilities.Initialize(); #region Grid MainGridLayout = new Grid(UI); MainGridLayout.SetSize(Width, Height); /* 0 m m m m m m m m m m m m m * 1 t t t t t t t t t t t t t * 2 - - - - - - - - - - - - - * 3 a a a a a a a a a a a a a * a a a a a a a a a a a a a * a a a a a a a a a a a a a * a a a a a a a a a a a a a * a a a a a a a a a a a a a * 4 - - - - - - - - - - - - - * 5 s s s s s s s s s s s s s * m => menubar * t => toolbar * a => main editor area (divided in a grid of its own) * s => statusbar * - => divider*/ MainGridLayout.SetRows( new GridSize(32, Unit.Pixels), new GridSize(31, Unit.Pixels), new GridSize(1, Unit.Pixels), new GridSize(1), new GridSize(1, Unit.Pixels), new GridSize(26, Unit.Pixels) ); #endregion #region Menubar + Toolbar Color DividerColor = new Color(79, 108, 159); // Header + Menubar MenuBar = new MenuBar(MainGridLayout); MenuBar.SetBackgroundColor(10, 23, 37); MenuBar.SetGridRow(0); MenuBar.SetItems(new List <MenuItem>() { new MenuItem("File") { Items = new List <IMenuItem>() { new MenuItem("New") { HelpText = "Create a new project.", OnLeftClick = delegate(MouseEventArgs e) { EnsureSaved(Editor.NewProject); } }, new MenuItem("Open") { HelpText = "Open an existing project.", Shortcut = "Ctrl+O", OnLeftClick = delegate(MouseEventArgs e) { EnsureSaved(Editor.OpenProject); } }, new MenuItem("Save") { HelpText = "Save all changes in the current project.", Shortcut = "Ctrl+S", OnLeftClick = delegate(MouseEventArgs e) { Editor.SaveProject(); }, IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; } }, new MenuSeparator(), new MenuItem("Close Project") { HelpText = "Close this project and return to the welcome screen.", IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; }, OnLeftClick = delegate(MouseEventArgs e) { EnsureSaved(Editor.CloseProject); } }, new MenuItem("Reload Project") { HelpText = "Closes and immediately reopens the project. Used for quickly determining if changes are saved properly, or to restore an old version.", IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; }, OnLeftClick = delegate(MouseEventArgs e) { EnsureSaved(Editor.ReloadProject); } }, new MenuItem("Exit Editor") { HelpText = "Close this project and quit the program.", OnLeftClick = delegate(MouseEventArgs e) { EnsureSaved(Editor.ExitEditor); } } } }, new MenuItem("Edit") { Items = new List <IMenuItem>() { new MenuItem("Import Maps") { HelpText = "Import Maps made with RPG Maker XP.", OnLeftClick = delegate(MouseEventArgs e) { Editor.ImportMaps(); }, IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; } }, new MenuItem("Restore Map") { HelpText = "Restore a map that was deleted during this session.", OnLeftClick = delegate(MouseEventArgs e) { Editor.RestoreMap(); }, IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; } }, new MenuItem("Clear deleted map cache") { HelpText = "Clears the internal cache of restore-able deleted maps.", OnLeftClick = delegate(MouseEventArgs e) { Editor.ClearMapCache(); }, IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; } } } }, new MenuItem("View") { Items = new List <IMenuItem>() { new MenuItem("Toggle Animations") { HelpText = "Toggles the animation of autotiles, fogs and panoramas.", IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; }, OnLeftClick = delegate(MouseEventArgs e) { Editor.ToggleMapAnimations(); } }, new MenuItem("Toggle Grid") { HelpText = "Toggles the visibility of the grid overlay while mapping.", IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; }, OnLeftClick = delegate(MouseEventArgs e) { Editor.ToggleGrid(); } } } }, new MenuItem("Game") { Items = new List <IMenuItem>() { new MenuItem("Play Game") { Shortcut = "F12", HelpText = "Play the game.", OnLeftClick = delegate(MouseEventArgs e) { Editor.StartGame(); }, IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; } }, new MenuItem("Open Game Folder") { HelpText = "Opens the file explorer and navigates to the project folder.", OnLeftClick = delegate(MouseEventArgs e) { Editor.OpenGameFolder(); }, IsClickable = delegate(BoolEventArgs e) { e.Value = Editor.InProject; } } } }, new MenuItem("Help") { Items = new List <IMenuItem>() { new MenuItem("Help") { Shortcut = "F1", HelpText = "Opens the help window.", OnLeftClick = delegate(MouseEventArgs e) { OpenHelpWindow(); } }, new MenuItem("About RPG Studio MK") { HelpText = "Shows information about this program.", OnLeftClick = delegate(MouseEventArgs e) { OpenAboutWindow(); } } } } }); // Toolbar (modes, icons, etc) ToolBar = new ToolBar(MainGridLayout); ToolBar.SetBackgroundColor(28, 50, 73); ToolBar.SetGridRow(1); #endregion #region Dividers // Blue 1px separator Widget Blue1pxSeparator = new Widget(MainGridLayout); Blue1pxSeparator.SetBackgroundColor(DividerColor); Blue1pxSeparator.SetGridRow(2); // Status bar divider Widget StatusBarDivider = new Widget(MainGridLayout); StatusBarDivider.SetBackgroundColor(DividerColor); StatusBarDivider.SetGridRow(4); #endregion #region Statusbar // Status bar StatusBar = new StatusBar(MainGridLayout); StatusBar.SetGridRow(5); #endregion // If an argument was passed, load that project file and skip the home screen if (!string.IsNullOrEmpty(ProjectFile)) { Data.SetProjectPath(ProjectFile); CreateEditor(); Editor.MakeRecentProject(); } else { MainGridLayout.Rows[1] = new GridSize(0, Unit.Pixels); MainGridLayout.Rows[4] = new GridSize(0, Unit.Pixels); MainGridLayout.Rows[5] = new GridSize(0, Unit.Pixels); MainGridLayout.UpdateContainers(); StatusBar.SetVisible(false); ToolBar.SetVisible(false); HomeScreen = new HomeScreen(MainGridLayout); HomeScreen.SetGridRow(3); } this.UI.Update(); this.Start(); UI.SizeChanged(new BaseEventArgs()); }