/// <summary> /// Invoked by "Edit => Finish editing" or the relevant toolbar button. /// Leaves editing mode and saves the modified level in the level list, /// then returns to playing mode. /// </summary> private void finishEditingLevel(object sender, EventArgs e) { if (lstLevels.ActiveLevel == null || lstLevels.State != LevelListBox.LevelListBoxState.Editing) // this should never happen { Ut.InternalError(); } SokobanLevelStatus status = ctMainArea.Level.Validity; if (status != SokobanLevelStatus.Valid) { string problem = status == SokobanLevelStatus.NotEnclosed ? Program.Tr.Mainform_Validity_NotEnclosed : Program.Tr.Mainform_Validity_WrongNumber; if (DlgMessage.Show(problem + "\n\n" + Program.Tr.Mainform_Validity_CannotSave_Warning, Program.Tr.Mainform_MessageTitle_FinishEditing, DlgType.Error, Program.Tr.Mainform_Validity_CannotSave_btnSave, Program.Tr.Mainform_Validity_CannotSave_btnResume) == 1) { return; } } saveLevel(sender, e); }
/// <summary> /// Updates various GUI controls to reflect the current program state. /// </summary> private void updateControls() { bool MainAreaNull = ctMainArea.State == MainAreaState.Null; bool MainAreaPlaying = ctMainArea.State == MainAreaState.Move || ctMainArea.State == MainAreaState.Push; bool MainAreaEditing = ctMainArea.State == MainAreaState.Editing; bool MainAreaSolved = ctMainArea.State == MainAreaState.Solved; // Caption Text = Program.Tr.ProgramName + " – " + (Program.Settings.PlayerName == null || Program.Settings.PlayerName.Length == 0 ? Program.Tr.PlayerNameMissing.Translation : Program.Settings.PlayerName) + " – " + (Program.Settings.LevelFilename == null ? Program.Tr.FileName_Untitled.Translation : Path.GetFileName(Program.Settings.LevelFilename)) + (lstLevels.Modified ? " •" : ""); // Status bar text if (MainAreaEditing) { string message = Program.Tr.Mainform_Validity_Valid; SokobanLevelStatus status = ctMainArea.Level.Validity; if (status == SokobanLevelStatus.NotEnclosed) { message = Program.Tr.Mainform_Validity_NotEnclosed; } else if (status == SokobanLevelStatus.TargetsPiecesMismatch) { message = Program.Tr.Mainform_Validity_WrongNumber; } lblStatusEdit.Text = message; } else if (!MainAreaNull) { lblStatusMoves.Text = Program.Tr.Mainform_Status_Moves.Fmt(ctMainArea.Moves); lblStatusPushes.Text = Program.Tr.Mainform_Status_Pushes.Fmt(ctMainArea.Pushes); if (!MainAreaSolved) { lblStatusPieces.Text = Program.Tr.Mainform_Status_PiecesRemaining.Fmt(ctMainArea.Level.RemainingPieces); } } // Status bar items lblStatusNull.Visible = MainAreaNull; lblStatusMoves.Visible = MainAreaPlaying || MainAreaSolved; lblStatusPushes.Visible = MainAreaPlaying || MainAreaSolved; lblStatusPieces.Visible = MainAreaPlaying; lblStatusEdit.Visible = MainAreaEditing; lblStatusSolved.Visible = MainAreaSolved; // "Level" menu mnuLevelNew.Enabled = true; mnuLevelOpen.Enabled = true; mnuLevelSave.Enabled = true; mnuLevelSaveAs.Enabled = true; mnuLevelUndo.Enabled = !MainAreaEditing && !MainAreaNull; mnuLevelRedo.Enabled = !MainAreaEditing && !MainAreaNull; mnuLevelRetry.Enabled = !MainAreaEditing && !MainAreaNull; mnuLevelHighscores.Enabled = lstLevels.ActiveLevel != null; mnuLevelPrevious.Enabled = !MainAreaEditing && lstLevels.Items.Count > 0; mnuLevelNext.Enabled = !MainAreaEditing && lstLevels.Items.Count > 0; mnuLevelPreviousUnsolved.Enabled = !MainAreaEditing && lstLevels.Items.Count > 0; mnuLevelNextUnsolved.Enabled = !MainAreaEditing && lstLevels.Items.Count > 0; mnuLevelChangePlayer.Enabled = true; // "Edit" menu mnuEditCreateLevel.Enabled = !MainAreaEditing; mnuEditEditLevel.Enabled = !MainAreaEditing; mnuEditAddComment.Enabled = !MainAreaEditing; mnuEditCut.Enabled = lstLevels.Visible; mnuEditCopy.Enabled = lstLevels.Visible; mnuEditPaste.Enabled = lstLevels.Visible; mnuEditDelete.Enabled = lstLevels.Visible; mnuEditFinish.Enabled = MainAreaEditing; mnuEditCancel.Enabled = MainAreaEditing; mnuEditWall.Enabled = MainAreaEditing; mnuEditPiece.Enabled = MainAreaEditing; mnuEditTarget.Enabled = MainAreaEditing; mnuEditSokoban.Enabled = MainAreaEditing; // "Options" menu mnuOptionsLevelList.Enabled = true; mnuOptionsPlayingToolbar.Enabled = lstLevels.Visible; mnuOptionsFileToolbars.Enabled = lstLevels.Visible; mnuOptionsEditLevelToolbar.Enabled = lstLevels.Visible && MainAreaEditing; mnuOptionsStatusBar.Enabled = true; mnuOptionsMoveNo.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsMoveLine.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsMoveDots.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsMoveArrows.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsPushNo.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsPushLine.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsPushDots.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsPushArrows.Enabled = !MainAreaEditing && !MainAreaNull; mnuOptionsEndPos.Enabled = !MainAreaEditing && !MainAreaNull; // Level list context menu mnuContextPlay.Enabled = lstLevels.SelectedLevel != null; mnuContextEdit.Enabled = lstLevels.SelectedLevel != null; mnuContextHighscores.Enabled = lstLevels.SelectedLevel != null; mnuContextNewLevel.Enabled = lstLevels.Visible; mnuContextNewComment.Enabled = lstLevels.Visible; mnuContextCut.Enabled = lstLevels.SelectedLevel != null; mnuContextCopy.Enabled = lstLevels.SelectedLevel != null; mnuContextPaste.Enabled = lstLevels.Visible; mnuContextDelete.Enabled = lstLevels.SelectedIndex >= 0; mnuContextHide.Enabled = lstLevels.Visible; // Toolbar visibility toolPlay.Visible = mnuOptionsPlayingToolbar.Checked; toolFileEdit.Visible = mnuOptionsFileToolbars.Checked; toolFile.Visible = mnuOptionsFileToolbars.Checked; toolEditLevel.Visible = MainAreaEditing && mnuOptionsEditLevelToolbar.Checked; // Toolbar buttons btnPlayNextLevel.Enabled = mnuLevelNext.Enabled; btnPlayNextUnsolvedLevel.Enabled = mnuLevelNextUnsolved.Enabled; btnPlayPrevLevel.Enabled = mnuLevelPrevious.Enabled; btnPlayPrevUnsolvedLevel.Enabled = mnuLevelPreviousUnsolved.Enabled; btnFileNew.Enabled = mnuLevelNew.Enabled; btnFileOpen.Enabled = mnuLevelOpen.Enabled; btnPlayOpenLevel.Enabled = mnuLevelOpen.Enabled; btnFileSave.Enabled = mnuLevelSave.Enabled; btnFileEditNewLevel.Enabled = mnuEditCreateLevel.Enabled; btnFileEditEditLevel.Enabled = mnuEditEditLevel.Enabled; btnFileEditAddComment.Enabled = mnuEditAddComment.Enabled; btnFileCut.Enabled = mnuEditCut.Enabled; btnFileCopy.Enabled = mnuEditCopy.Enabled; btnFilePaste.Enabled = mnuEditPaste.Enabled; btnFileEditDeleteLevel.Enabled = mnuEditDelete.Enabled; }