2
0

Notepad.Mod 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. MODULE Notepad; (** AUTHOR "TF"; PURPOSE "Simple Text Editor"; *)
  2. IMPORT
  3. Modules, Commands, Options, Files, Strings, WMRestorable, XML,
  4. WMGraphics, WMComponents, WMMessages, WMWindowManager, WMDocumentEditor;
  5. TYPE
  6. KillerMsg = OBJECT
  7. END KillerMsg;
  8. Window* = OBJECT (WMComponents.FormWindow)
  9. VAR
  10. editor- : WMDocumentEditor.Editor;
  11. PROCEDURE &New*(c : WMRestorable.Context);
  12. BEGIN
  13. IncCount;
  14. Init(850, 700, FALSE);
  15. NEW(editor); editor.alignment.Set(WMComponents.AlignClient);
  16. editor.fillColor.Set(WMGraphics.White);
  17. editor.SetToolbar({0..31});
  18. editor.SetWordWrap(TRUE);
  19. SetContent(editor);
  20. SetTitle(Strings.NewString("Notepad"));
  21. SetIcon(WMGraphics.LoadImage("WMIcons.tar://Notepad.png", TRUE));
  22. IF c # NIL THEN
  23. (* restore the desktop *)
  24. WMRestorable.AddByContext(SELF, c);
  25. IF c.appData # NIL THEN
  26. editor.FromXml(c.appData(XML.Element));
  27. Resized(GetWidth(), GetHeight())
  28. END
  29. ELSE WMWindowManager.DefaultAddWindow(SELF)
  30. END;
  31. END New;
  32. PROCEDURE Close*;
  33. BEGIN
  34. Close^;
  35. DecCount
  36. END Close;
  37. PROCEDURE Handle*(VAR x : WMMessages.Message);
  38. VAR data : XML.Element;
  39. BEGIN
  40. IF (x.msgType = WMMessages.MsgExt) & (x.ext # NIL) THEN
  41. IF (x.ext IS KillerMsg) THEN Close
  42. ELSIF (x.ext IS WMRestorable.Storage) THEN
  43. NEW(data); data.SetName("NotepadData");
  44. editor.ToXml(data);
  45. x.ext(WMRestorable.Storage).Add("Notepad", "Notepad.Restore", SELF, data);
  46. ELSE Handle^(x)
  47. END
  48. ELSE Handle^(x)
  49. END
  50. END Handle;
  51. END Window;
  52. VAR
  53. nofWindows : LONGINT;
  54. (** Open document *)
  55. PROCEDURE Open*(context : Commands.Context); (** [Options] [filename] ~ *)
  56. VAR options : Options.Options; window : Window; filename : Files.FileName; format : ARRAY 32 OF CHAR;
  57. BEGIN
  58. NEW(options);
  59. options.Add("f", "format", Options.String);
  60. IF options.Parse(context.arg, context.out) THEN
  61. IF ~options.GetString("format", format) THEN format := "AUTO"; END;
  62. NEW(window, NIL);
  63. IF context.arg.GetString(filename) THEN
  64. window.editor.Load(filename, format);
  65. END;
  66. END;
  67. END Open;
  68. PROCEDURE Restore*(context : WMRestorable.Context);
  69. VAR winstance : Window;
  70. BEGIN
  71. NEW(winstance, context)
  72. END Restore;
  73. PROCEDURE IncCount;
  74. BEGIN {EXCLUSIVE}
  75. INC(nofWindows)
  76. END IncCount;
  77. PROCEDURE DecCount;
  78. BEGIN {EXCLUSIVE}
  79. DEC(nofWindows)
  80. END DecCount;
  81. PROCEDURE Cleanup;
  82. VAR die : KillerMsg;
  83. msg : WMMessages.Message;
  84. m : WMWindowManager.WindowManager;
  85. BEGIN {EXCLUSIVE}
  86. NEW(die);
  87. msg.ext := die;
  88. msg.msgType := WMMessages.MsgExt;
  89. m := WMWindowManager.GetDefaultManager();
  90. m.Broadcast(msg);
  91. AWAIT(nofWindows = 0)
  92. END Cleanup;
  93. BEGIN
  94. Modules.InstallTermHandler(Cleanup)
  95. END Notepad.
  96. SystemTools.Free Notepad~
  97. Notepad.Open ~