123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- MODULE Notepad; (** AUTHOR "TF"; PURPOSE "Simple Text Editor"; *)
- IMPORT
- Modules, Commands, Options, Files, Strings, WMRestorable, XML,
- WMGraphics, WMComponents, WMMessages, WMWindowManager, WMDocumentEditor;
- TYPE
- KillerMsg = OBJECT
- END KillerMsg;
- Window* = OBJECT (WMComponents.FormWindow)
- VAR
- editor- : WMDocumentEditor.Editor;
- PROCEDURE &New*(c : WMRestorable.Context);
- BEGIN
- IncCount;
- Init(850, 700, FALSE);
- NEW(editor); editor.alignment.Set(WMComponents.AlignClient);
- editor.fillColor.Set(WMGraphics.White);
- editor.SetToolbar({0..31});
- editor.SetWordWrap(TRUE);
- SetContent(editor);
- SetTitle(Strings.NewString("Notepad"));
- SetIcon(WMGraphics.LoadImage("WMIcons.tar://Notepad.png", TRUE));
- IF c # NIL THEN
- (* restore the desktop *)
- WMRestorable.AddByContext(SELF, c);
- IF c.appData # NIL THEN
- editor.FromXml(c.appData(XML.Element));
- Resized(GetWidth(), GetHeight())
- END
- ELSE WMWindowManager.DefaultAddWindow(SELF)
- END;
- END New;
- PROCEDURE Close*;
- BEGIN
- Close^;
- DecCount
- END Close;
- PROCEDURE Handle*(VAR x : WMMessages.Message);
- VAR data : XML.Element;
- BEGIN
- IF (x.msgType = WMMessages.MsgExt) & (x.ext # NIL) THEN
- IF (x.ext IS KillerMsg) THEN Close
- ELSIF (x.ext IS WMRestorable.Storage) THEN
- NEW(data); data.SetName("NotepadData");
- editor.ToXml(data);
- x.ext(WMRestorable.Storage).Add("Notepad", "Notepad.Restore", SELF, data);
- ELSE Handle^(x)
- END
- ELSE Handle^(x)
- END
- END Handle;
- END Window;
- VAR
- nofWindows : LONGINT;
- (** Open document *)
- PROCEDURE Open*(context : Commands.Context); (** [Options] [filename] ~ *)
- VAR options : Options.Options; window : Window; filename : Files.FileName; format : ARRAY 32 OF CHAR;
- BEGIN
- NEW(options);
- options.Add("f", "format", Options.String);
- IF options.Parse(context.arg, context.out) THEN
- IF ~options.GetString("format", format) THEN format := "AUTO"; END;
- NEW(window, NIL);
- IF context.arg.GetString(filename) THEN
- window.editor.Load(filename, format);
- END;
- END;
- END Open;
- PROCEDURE Restore*(context : WMRestorable.Context);
- VAR winstance : Window;
- BEGIN
- NEW(winstance, context)
- END Restore;
- PROCEDURE IncCount;
- BEGIN {EXCLUSIVE}
- INC(nofWindows)
- END IncCount;
- PROCEDURE DecCount;
- BEGIN {EXCLUSIVE}
- DEC(nofWindows)
- END DecCount;
- PROCEDURE Cleanup;
- VAR die : KillerMsg;
- msg : WMMessages.Message;
- m : WMWindowManager.WindowManager;
- BEGIN {EXCLUSIVE}
- NEW(die);
- msg.ext := die;
- msg.msgType := WMMessages.MsgExt;
- m := WMWindowManager.GetDefaultManager();
- m.Broadcast(msg);
- AWAIT(nofWindows = 0)
- END Cleanup;
- BEGIN
- Modules.InstallTermHandler(Cleanup)
- END Notepad.
- SystemTools.Free Notepad~
- Notepad.Open ~
|