MapEditor.Mod 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. MODULE MapEditor;
  2. IMPORT G := Graph, S := SimpleGui, Out, Int, Strings;
  3. CONST window = FALSE;
  4. VAR
  5. frmMain: S.Form;
  6. pnlSide: S.Panel;
  7. btnSave: S.Button;
  8. btnExit: S.Button;
  9. pnlMap: S.Panel;
  10. btn2: S.Button;
  11. btnMove: S.Button;
  12. edtText: S.Edit;
  13. scbHoriz, scbHoriz2: S.ScrollBar;
  14. scbVert: S.ScrollBar;
  15. sbxMap: S.ScrollBox;
  16. btnFile: S.Button;
  17. btnEdit: S.Button;
  18. edtMsg: S.Edit;
  19. XX, YY: INTEGER;
  20. moving: BOOLEAN;
  21. PROCEDURE BtnExitOnClick(c: S.Widget);
  22. BEGIN
  23. S.Quit
  24. END BtnExitOnClick;
  25. PROCEDURE Btn2OnClick(c: S.Widget);
  26. BEGIN
  27. c(S.Button).caption[1] := CHR((ORD(c(S.Button).caption[1]) + 1) MOD 1256)
  28. END Btn2OnClick;
  29. PROCEDURE BtnExitOnMouseMove(c: S.Widget; x, y, btn: INTEGER);
  30. BEGIN
  31. c(S.Button).caption[5] := CHR((ORD(c(S.Button).caption[5]) + 1) MOD 256);
  32. c(S.Button).caption[6] := CHR(ORD(c(S.Button).caption[5]) + 1);
  33. c(S.Button).caption[7] := 0X
  34. END BtnExitOnMouseMove;
  35. PROCEDURE BtnMoveOnMouseDown(c: S.Widget; x, y, btn: INTEGER);
  36. BEGIN
  37. IF btn = 1 THEN moving := TRUE; XX := x; YY := y END
  38. END BtnMoveOnMouseDown;
  39. PROCEDURE BtnMoveOnMouseUp(c: S.Widget; x, y, btn: INTEGER);
  40. BEGIN moving := FALSE
  41. END BtnMoveOnMouseUp;
  42. PROCEDURE BtnMoveOnMouseMove(c: S.Widget; x, y, btn: INTEGER);
  43. BEGIN
  44. IF moving THEN
  45. c.x := c.x + x - XX;
  46. c.y := c.y + y - YY;
  47. XX := x; YY := y;
  48. IF c.x < 0 THEN c.x := 0 END
  49. END;
  50. END BtnMoveOnMouseMove;
  51. PROCEDURE OnScroll(c: S.ScrollBar; value: INTEGER);
  52. VAR s: ARRAY 32 OF CHAR;
  53. BEGIN
  54. S.ScrollBarSetValue(scbHoriz2, value);
  55. Int.Str(scbHoriz.value, s);
  56. Strings.Append(':', s);
  57. Int.Append(scbVert.value, s);
  58. S.EditSetText(edtText, s)
  59. END OnScroll;
  60. PROCEDURE ScbHoriz2OnScroll(c: S.ScrollBar; value: INTEGER);
  61. BEGIN
  62. S.ScrollBarSetValue(scbVert, value)
  63. END ScbHoriz2OnScroll;
  64. PROCEDURE InitInterface(): BOOLEAN;
  65. VAR W, H: INTEGER;
  66. color: G.Color;
  67. BEGIN
  68. G.GetScreenSize(W, H);
  69. frmMain := S.NewForm(0, 0, W, H);
  70. pnlSide := S.NewPanel(frmMain, 4, 4, 104, H - 8);
  71. G.MakeCol(color, 40, 150, 40);
  72. S.SetBgColor(pnlSide, color);
  73. btnSave := S.NewButton(pnlSide, 4, 4, 96, 24, 'Сохранить');
  74. btnExit := S.NewButton(pnlSide, 4, 32, 96, 24, 'Выйти');
  75. S.SetOnClick(btnExit, BtnExitOnClick);
  76. S.SetOnMouseMove(btnExit, BtnExitOnMouseMove);
  77. edtText := S.NewEdit(pnlSide, 4, 60, 96, 20);
  78. scbHoriz := S.NewScrollBar(pnlSide, 4, 84, 96, 16);
  79. S.ScrollBarSetOnScroll(scbHoriz, OnScroll);
  80. scbHoriz2 := S.NewScrollBar(pnlSide, 24, 104, 76, 50);
  81. S.ScrollBarSetOnScroll(scbHoriz2, ScbHoriz2OnScroll);
  82. scbVert := S.NewScrollBar(pnlSide, 4, 104, 16, 140);
  83. S.ScrollBarSetVertical(scbVert, TRUE);
  84. S.ScrollBarSetOnScroll(scbVert, OnScroll);
  85. pnlMap := S.NewPanel(frmMain, 112, 4, W - 116, H - 8);
  86. G.MakeCol(color, 150, 90, 40);
  87. S.SetBgColor(pnlMap, color);
  88. btn2 := S.NewButton(pnlMap, 64, 4, 96, 96, 'ОГО!');
  89. S.SetOnClick(btn2, Btn2OnClick);
  90. btnMove := S.NewButton(pnlMap, 168, 4, 96, 96, 'ДВИГАЙ');
  91. S.SetOnMouseDown(btnMove, BtnMoveOnMouseDown);
  92. S.SetOnMouseUp(btnMove, BtnMoveOnMouseUp);
  93. S.SetOnMouseMove(btnMove, BtnMoveOnMouseMove);
  94. sbxMap := S.NewScrollBox(pnlMap, 4, 104, 300, 200);
  95. S.ScrollBoxSetInnerSize(sbxMap, 4096, 4096);
  96. G.MakeCol(color, 0, 90, 255);
  97. S.SetBgColor(sbxMap, color);
  98. btnFile := S.NewButton(sbxMap, 20, 40, 80, 24, 'Файл');
  99. btnEdit := S.NewButton(sbxMap, 260, 40, 80, 24, 'Правка');
  100. edtMsg := S.NewEdit(sbxMap, 60, 170, 120, 35);
  101. moving := FALSE
  102. RETURN TRUE END InitInterface;
  103. PROCEDURE Init(): BOOLEAN;
  104. VAR ok: BOOLEAN;
  105. BEGIN ok := TRUE;
  106. IF window THEN G.Settings(640, 480, {G.window}) END;
  107. G.Init;
  108. IF ~G.Done THEN ok := FALSE END;
  109. IF ok THEN
  110. S.Init;
  111. IF ~S.Done THEN ok := FALSE END
  112. END;
  113. IF ok & ~InitInterface() THEN ok := FALSE END
  114. RETURN ok END Init;
  115. PROCEDURE Close;
  116. BEGIN
  117. G.Close
  118. END Close;
  119. BEGIN
  120. IF Init() THEN S.Run ELSE Out.String('Error loading.'); Out.Ln END;
  121. Close
  122. END MapEditor.