import SK_PUZZLE_PKG:Model:*; class PuzzleController /********************************************************* P R O P E R T I E S *********************************************************/ /********************************************************* C O N S T R U C T O R D E C L A R A T I O N *********************************************************/ method PuzzleController(); /********************************************************* C O M P O N E N T E V E N T S D E C L A R A T I O N *********************************************************/ method PreBuild(); /*************************************************************************** C O M P O N E N T R E C / F I E L D E V E N T S D E C L A R A T I O N ***************************************************************************/ method FieldChangeSavePb(); method FieldChangeCellValue(&p_nbrCellNumber As number); /********************************************************* P A G E E V E N T S D E C L A R A T I O N *********************************************************/ method PageActivate(); /********************************************************* P U B L I C M E T H O D S D E C L A R A T I O N *********************************************************/ private /********************************************************* P R I V A T E M E T H O D S D E C L A R A T I O N *********************************************************/ method setFreeformStyles(); method setFieldArray(); method renderPage(); method markPuzzleSolved(); /********************************************************* P R I V A T E I N S T A N C E D E C L A R A T I O N *********************************************************/ instance SK_PUZZLE_PKG:Model:PuzzleModel &i_objPuzzleModel; instance array of Field &i_arrViewCells; end-class; /* PuzzleController */ /********************************************************* F U N C T I O N D E C L A R A T I O N S *********************************************************/ Declare Function SetViewport PeopleCode PTLAYOUT.FUNCLIB FieldFormula; /********************************************************* C O N S T R U C T O R M E T H O D *********************************************************/ method PuzzleController; &i_objPuzzleModel = create SK_PUZZLE_PKG:Model:PuzzleModel(); end-method; /* PuzzleController */ /********************************************************* P U B L I C M E T H O D S *********************************************************/ /********************************************************* Method PreBuild *********************************************************/ method PreBuild AddStyleSheet(StyleSheet.SK_CUSTOM_STYLE); %This.setFreeformStyles(); end-method; /* PreBuild */ /********************************************************* Method PageActivate *********************************************************/ method PageActivate &i_objPuzzleModel.getPuzzle("1234"); %This.setFieldArray(); %This.renderPage(); end-method; /* PageActivate */ /********************************************************* Method FieldChangeSavePb *********************************************************/ method FieldChangeSavePb &i_objPuzzleModel.savePuzzle(); end-method; /* FieldChangeSavePb */ /********************************************************* Method FieldChangeCellValue *********************************************************/ method FieldChangeCellValue /+ &p_nbrCellNumber as Number +/ Local number &i; Local Field &fldField; Local string &strFieldName; Local array of number &arrCellsInError; rem WinMessage("FieldChangeCellValue - Number/Value: " | &p_nbrCellNumber | "/" | &i_arrViewCells [&p_nbrCellNumber].Value); &i_objPuzzleModel.PuzzleCells [&p_nbrCellNumber].CellValueCharacter = &i_arrViewCells [&p_nbrCellNumber].Value; &i_arrViewCells [&p_nbrCellNumber].Value = &i_objPuzzleModel.PuzzleCells [&p_nbrCellNumber].CellValueDisplay; For &i = 1 To 81 &strFieldName = "SK_CELL_" | Right("00" | String(&i), 2); &fldField = GetLevel0()(1).SK_CELLS_WRK.GetField(@("Field." | &strFieldName)); &fldField.ReplaceFFClass("sk_cell-error", ""); &fldField.ReplaceFFClass("sk_cell-solved", ""); End-For; &arrCellsInError = &i_objPuzzleModel.checkCollisionsInPuzzle(); /* If the checkCollisionsInPuzzle method returns a zero length array, we have to check of the puzzle is solved */ If &arrCellsInError.Len = 0 Then If &i_objPuzzleModel.isPuzzleSolved() = True Then %This.markPuzzleSolved(); End-If; Else /* Otherwise, hilight the cells in error */ For &i = 1 To &arrCellsInError.Len &strFieldName = "SK_CELL_" | Right("00" | String(&arrCellsInError [&i]), 2); &fldField = GetLevel0()(1).SK_CELLS_WRK.GetField(@("Field." | &strFieldName)); &fldField.AddFFClass("sk_cell-error"); End-For; End-If; end-method; /* FieldChangeCellValue */ /********************************************************* P R I V A T E M E T H O D S *********************************************************/ /********************************************************* Method setFreeformStyles *********************************************************/ method setFreeformStyles /* Row 1 */ SK_CELLS_WRK.SK_CELL_01.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_02.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_03.FreeFormStyleName = ("sk_cell-tr"); SK_CELLS_WRK.SK_CELL_04.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_05.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_06.FreeFormStyleName = ("sk_cell-tr"); SK_CELLS_WRK.SK_CELL_07.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_08.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_09.FreeFormStyleName = ("sk_cell-trr"); /* Row 2 */ SK_CELLS_WRK.SK_CELL_10.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_11.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_12.FreeFormStyleName = ("sk_cell-mr"); SK_CELLS_WRK.SK_CELL_13.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_14.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_15.FreeFormStyleName = ("sk_cell-mr"); SK_CELLS_WRK.SK_CELL_16.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_17.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_18.FreeFormStyleName = ("sk_cell-mrr"); /* Row 3 */ SK_CELLS_WRK.SK_CELL_19.FreeFormStyleName = ("sk_cell-bl"); SK_CELLS_WRK.SK_CELL_20.FreeFormStyleName = ("sk_cell-bm"); SK_CELLS_WRK.SK_CELL_21.FreeFormStyleName = ("sk_cell-br"); SK_CELLS_WRK.SK_CELL_22.FreeFormStyleName = ("sk_cell-bl"); SK_CELLS_WRK.SK_CELL_23.FreeFormStyleName = ("sk_cell-bm"); SK_CELLS_WRK.SK_CELL_24.FreeFormStyleName = ("sk_cell-br"); SK_CELLS_WRK.SK_CELL_25.FreeFormStyleName = ("sk_cell-bl"); SK_CELLS_WRK.SK_CELL_26.FreeFormStyleName = ("sk_cell-bm"); SK_CELLS_WRK.SK_CELL_27.FreeFormStyleName = ("sk_cell-brr"); /* Row 4 */ SK_CELLS_WRK.SK_CELL_28.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_29.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_30.FreeFormStyleName = ("sk_cell-tr"); SK_CELLS_WRK.SK_CELL_31.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_32.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_33.FreeFormStyleName = ("sk_cell-tr"); SK_CELLS_WRK.SK_CELL_34.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_35.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_36.FreeFormStyleName = ("sk_cell-trr"); /* Row 5 */ SK_CELLS_WRK.SK_CELL_37.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_38.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_39.FreeFormStyleName = ("sk_cell-mr"); SK_CELLS_WRK.SK_CELL_40.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_41.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_42.FreeFormStyleName = ("sk_cell-mr"); SK_CELLS_WRK.SK_CELL_43.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_44.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_45.FreeFormStyleName = ("sk_cell-mrr"); /* Row 6 */ SK_CELLS_WRK.SK_CELL_46.FreeFormStyleName = ("sk_cell-bl"); SK_CELLS_WRK.SK_CELL_47.FreeFormStyleName = ("sk_cell-bm"); SK_CELLS_WRK.SK_CELL_48.FreeFormStyleName = ("sk_cell-br"); SK_CELLS_WRK.SK_CELL_49.FreeFormStyleName = ("sk_cell-bl"); SK_CELLS_WRK.SK_CELL_50.FreeFormStyleName = ("sk_cell-bm"); SK_CELLS_WRK.SK_CELL_51.FreeFormStyleName = ("sk_cell-br"); SK_CELLS_WRK.SK_CELL_52.FreeFormStyleName = ("sk_cell-bl"); SK_CELLS_WRK.SK_CELL_53.FreeFormStyleName = ("sk_cell-bm"); SK_CELLS_WRK.SK_CELL_54.FreeFormStyleName = ("sk_cell-brr"); /* Row 7 */ SK_CELLS_WRK.SK_CELL_55.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_56.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_57.FreeFormStyleName = ("sk_cell-tr"); SK_CELLS_WRK.SK_CELL_58.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_59.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_60.FreeFormStyleName = ("sk_cell-tr"); SK_CELLS_WRK.SK_CELL_61.FreeFormStyleName = ("sk_cell-tl"); SK_CELLS_WRK.SK_CELL_62.FreeFormStyleName = ("sk_cell-tm"); SK_CELLS_WRK.SK_CELL_63.FreeFormStyleName = ("sk_cell-trr"); /* Row 8 */ SK_CELLS_WRK.SK_CELL_64.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_65.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_66.FreeFormStyleName = ("sk_cell-mr"); SK_CELLS_WRK.SK_CELL_67.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_68.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_69.FreeFormStyleName = ("sk_cell-mr"); SK_CELLS_WRK.SK_CELL_70.FreeFormStyleName = ("sk_cell-ml"); SK_CELLS_WRK.SK_CELL_71.FreeFormStyleName = ("sk_cell-mm"); SK_CELLS_WRK.SK_CELL_72.FreeFormStyleName = ("sk_cell-mrr"); /* Row 9 */ SK_CELLS_WRK.SK_CELL_73.FreeFormStyleName = ("sk_cell-bbl"); SK_CELLS_WRK.SK_CELL_74.FreeFormStyleName = ("sk_cell-bbm"); SK_CELLS_WRK.SK_CELL_75.FreeFormStyleName = ("sk_cell-bbr"); SK_CELLS_WRK.SK_CELL_76.FreeFormStyleName = ("sk_cell-bbl"); SK_CELLS_WRK.SK_CELL_77.FreeFormStyleName = ("sk_cell-bbm"); SK_CELLS_WRK.SK_CELL_78.FreeFormStyleName = ("sk_cell-bbr"); SK_CELLS_WRK.SK_CELL_79.FreeFormStyleName = ("sk_cell-bbl"); SK_CELLS_WRK.SK_CELL_80.FreeFormStyleName = ("sk_cell-bbm"); SK_CELLS_WRK.SK_CELL_81.FreeFormStyleName = ("sk_cell-bbrr"); end-method; /* setFreeformStyles */ /********************************************************* Method setFieldArray *********************************************************/ method setFieldArray Local number &i; Local Field &fldField; Local string &strFieldName; &i_arrViewCells = CreateArrayRept(&fldField, 81); For &i = 1 To 81 &strFieldName = "SK_CELL_" | Right("00" | String(&i), 2); &fldField = GetLevel0()(1).SK_CELLS_WRK.GetField(@("Field." | &strFieldName)); &i_arrViewCells [&i] = &fldField; End-For; end-method; /* setFieldArray */ /********************************************************* Method renderPage *********************************************************/ method renderPage Local number &i; Local Field &fldField; Local string &strFieldName; Local array of number &arrCellsInError; For &i = 1 To &i_arrViewCells.Len &i_arrViewCells [&i].Value = &i_objPuzzleModel.PuzzleCells [&i].CellValueDisplay; If &i_objPuzzleModel.PuzzleCells [&i].GivenValue = True Then &i_arrViewCells [&i].Enabled = False; End-If; End-For; &arrCellsInError = &i_objPuzzleModel.checkCollisionsInPuzzle(); /* If the checkCollisionsInPuzzle method returns a zero length array, we have to check of the puzzle is solved */ If &arrCellsInError.Len = 0 Then If &i_objPuzzleModel.isPuzzleSolved() = True Then %This.markPuzzleSolved(); End-If; Else /* Otherwize, hilight the cells in error */ For &i = 1 To &arrCellsInError.Len &strFieldName = "SK_CELL_" | Right("00" | String(&arrCellsInError [&i]), 2); &fldField = GetLevel0()(1).SK_CELLS_WRK.GetField(@("Field." | &strFieldName)); &fldField.AddFFClass("sk_cell-error"); End-For; End-If; end-method; /* RenderPage */ /********************************************************* Method markPuzzleSolved *********************************************************/ method markPuzzleSolved Local number &i; Local Field &fldField; Local string &strFieldName; For &i = 1 To 81 &strFieldName = "SK_CELL_" | Right("00" | String(&i), 2); &fldField = GetLevel0()(1).SK_CELLS_WRK.GetField(@("Field." | &strFieldName)); &fldField.ReplaceFFClass("sk_cell-error", ""); &fldField.AddFFClass("sk_cell-solved"); End-For; end-method; /* markPuzzleSolved */