Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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;
        }