MapEditor.Mod 4.2 KB

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