123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- MODULE BimboMail; (** AUTHOR "TF"; PURPOSE "Simple Mail Reader"; *)
- IMPORT
- Modules, WMGrids, WMStringGrids, MailStorage, WMGraphics,
- WMMessages, WMStandardComponents, WMComponents,
- WMEditors, Strings, TextUtilities, Texts,
- WM := WMWindowManager;
- CONST
- TempFilename = "BimboMail.Temp";
- TYPE
- KillerMsg = OBJECT
- END KillerMsg;
- Window* = OBJECT (WMComponents.FormWindow)
- VAR currentMailbox : MailStorage.Storage;
- messageList : WMStringGrids.StringGrid;
- messageText : WMEditors.Editor;
- PROCEDURE CreateForm(): WMComponents.VisualComponent;
- VAR
- panel : WMStandardComponents.Panel;
- toolbar, mailboxSelection, mailContentPanel : WMStandardComponents.Panel;
- mailboxEntries : WMStringGrids.StringGrid;
- mailText : WMEditors.Editor;
- vResizer : WMStandardComponents.Resizer;
- BEGIN
- NEW(panel); panel.bounds.SetExtents(800, 700); panel.fillColor.Set(0FFFFFFFFH); panel.takesFocus.Set(TRUE);
- NEW(toolbar); toolbar.fillColor.Set(000FF00FFH); toolbar.bounds.SetHeight(20); toolbar.alignment.Set(WMComponents.AlignTop);
- panel.AddContent(toolbar);
- NEW(mailboxSelection); mailboxSelection.fillColor.Set(0FF0000FFH); mailboxSelection.bounds.SetWidth(64);
- mailboxSelection.alignment.Set(WMComponents.AlignLeft);
- panel.AddContent(mailboxSelection);
- NEW(mailContentPanel); mailContentPanel.fillColor.Set(0FFFFFFFFH); mailContentPanel.bounds.SetHeight(350);
- mailContentPanel.alignment.Set(WMComponents.AlignBottom);
- panel.AddContent(mailContentPanel);
- NEW(mailboxEntries); mailboxEntries.alignment.Set(WMComponents.AlignClient);
- panel.AddContent(mailboxEntries);
- messageList := mailboxEntries;
- NEW(vResizer); vResizer.bounds.SetHeight(5); vResizer.alignment.Set(WMComponents.AlignTop);
- mailContentPanel.AddContent(vResizer);
- NEW(mailText); mailText.alignment.Set(WMComponents.AlignClient); mailText.tv.showBorder.Set(TRUE);
- mailContentPanel.AddContent(mailText);
- messageText := mailText;
- mailText.multiLine.Set(TRUE);
- mailText.readOnly.Set(TRUE);
- RETURN panel
- END CreateForm;
- PROCEDURE SetMailbox(mb : MailStorage.Storage);
- VAR i : LONGINT;
- hFrom, hTo, hSubject, hDate : ARRAY 128 OF CHAR;
- BEGIN
- currentMailbox := mb;
- messageList.model.Acquire;
- messageList.model.SetNofCols(3);
- messageList.model.SetNofRows(mb.GetCount());
- FOR i := 0 TO mb.GetCount() - 1 DO
- currentMailbox.GetHeader(i, hFrom, hTo, hSubject, hDate);
- messageList.model.SetCellText(0, i + 1, Strings.NewString(hFrom));
- messageList.model.SetTextAlign(0, i + 1, WMGraphics.AlignCenter);
- messageList.model.SetCellText(1, i + 1, Strings.NewString(hSubject));
- messageList.model.SetTextAlign(1, i + 1, WMGraphics.AlignCenter);
- messageList.model.SetCellText(2, i + 1, Strings.NewString(hDate));
- messageList.model.SetTextAlign(2, i + 1, WMGraphics.AlignCenter)
- END;
- messageList.model.Release;
- END SetMailbox;
- PROCEDURE &New*;
- VAR vc : WMComponents.VisualComponent;
- mb : MailStorage.Storage;
- colWidths : WMGrids.Spacings;
- i : LONGINT;
- str : ARRAY 32 OF CHAR;
- BEGIN
- IncCount;
- vc := CreateForm();
- Init(vc.bounds.GetWidth(), vc.bounds.GetHeight(), FALSE);
- SetContent(vc);
- manager := WM.GetDefaultManager();
- manager.Add(100, 100, SELF, {WM.FlagFrame});
- SetTitle(Strings.NewString("Bimbo Mail"));
- messageList.fixedRows.Set(1);
- NEW(colWidths, 4);
- colWidths[0] := messageList.bounds.GetWidth() DIV 3;
- colWidths[1] := 0;
- colWidths[2] := messageList.bounds.GetWidth() DIV 3;
- colWidths[3] := messageList.bounds.GetWidth() DIV 3;
- messageList.SetColSpacings(colWidths);
- messageList.onClick.Add(MessageClick);
- messageList.SetSelectionMode(WMGrids.GridSelectSingleRow);
- messageList.model.Acquire;
- messageList.model.SetNofCols(3);
- messageList.model.SetNofRows(2);
- FOR i := 0 TO 3 - 1 DO
- GetTitleStr(i, str);
- messageList.model.SetCellText(i, 0, Strings.NewString(str));
- messageList.model.SetTextAlign(i, 0, WMGraphics.AlignCenter)
- END;
- messageList.SetColSpacings(colWidths);
- messageList.model.Release;
- NEW(mb); mb.Open("MailMessages", "");
- SetMailbox(mb);
- END New;
- PROCEDURE GetTitleStr(col: LONGINT; VAR x : ARRAY OF CHAR);
- BEGIN
- CASE col OF
- | 0 : COPY("From", x)
- | 1 : COPY("Subject", x)
- | 2 : COPY("Date", x)
- ELSE COPY("", x);
- END
- END GetTitleStr;
- PROCEDURE Close*;
- BEGIN
- Close^;
- DecCount
- END Close;
- PROCEDURE Handle*(VAR x: WMMessages.Message);
- BEGIN
- IF (x.msgType = WMMessages.MsgExt) & (x.ext # NIL) & (x.ext IS KillerMsg) THEN Close
- ELSE Handle^(x)
- END
- END Handle;
- (*PROCEDURE DrawCell(canvas : WMGraphics.Canvas; w, h : LONGINT; state : SET; x, y : LONGINT);
- VAR color: LONGINT; str, hFrom, hTo, hSubject, hDate : ARRAY 128 OF CHAR;
- BEGIN
- color := WMGraphics.RGBAToColor(255, 255, 255, 255);
- IF state * {WMGrids.CellFixed, WMGrids.CellSelected} = {WMGrids.CellFixed, WMGrids.CellSelected} THEN
- color := WMGraphics.RGBAToColor(0, 128, 255, 255)
- ELSIF WMGrids.CellFixed IN state THEN
- color := WMGraphics.RGBAToColor(196, 196, 196, 255)
- ELSIF WMGrids.CellSelected IN state THEN
- color := WMGraphics.RGBAToColor(196, 196, 255, 255)
- ELSIF WMGrids.CellFocused IN state THEN
- color := WMGraphics.RGBAToColor(255, 255, 196, 255)
- END;
- canvas.SetColor(WMGraphics.RGBAToColor(0, 0, 0, 255));
- canvas.SetFont(WMBitmapFont.bimbofont);
- canvas.Fill(WMRectangles.MakeRect(0, 0, w, h), color, WMGraphics.ModeCopy);
- IF (WMGrids.CellFocused IN state) & ~(WMGrids.CellHighlighted IN state) THEN
- WMGraphicUtilities.DrawBevel(canvas, WMRectangles.MakeRect(0, 0, w, h), 1, TRUE, WMGraphics.RGBAToColor(0, 0, 0, 196),
- WMGraphics.ModeSrcOverDst)
- END;
- IF y = 0 THEN
- CASE x OF
- | 0 : str := "From"
- | 1 : str := "To"
- | 2 : str := "Subject"
- | 3 : str := "Date"
- ELSE
- END
- ELSIF (currentMailbox # NIL) & (y - 1 >= 0) & (y - 1 < currentMailbox.GetCount()) THEN
- currentMailbox.GetHeader(y - 1, hFrom, hTo, hSubject, hDate);
- CASE x OF
- | 0 : COPY(hFrom, str)
- | 1 : COPY(hTo, str)
- | 2 : COPY(hSubject, str)
- | 3 : COPY(hDate, str)
- ELSE
- END
- END;
- canvas.DrawString(4, h-4, str)
- END DrawCell; *)
- PROCEDURE MessageClick(sender, data : ANY);
- VAR scol, srow, ecol, erow, y, res : LONGINT; text : Texts.Text;
- BEGIN
- messageList.GetSelection(scol, srow, ecol, erow);
- y := srow - 1;
- IF (currentMailbox # NIL) & (y >= 0) & (y < currentMailbox.GetCount()) THEN
- IF currentMailbox.ToFile(y, TempFilename) THEN
- text := messageText.text;
- text.AcquireWrite;
- text.Delete(0, text.GetLength());
- TextUtilities.LoadOberonText(text, TempFilename, res);
- text.ReleaseWrite;
- messageText.tv.firstLine.Set(0);
- END
- END
- END MessageClick;
- END Window;
- VAR
- nofWindows : LONGINT;
- PROCEDURE Open*;
- VAR winstance : Window;
- BEGIN
- NEW(winstance);
- END Open;
- 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 : WM.WindowManager;
- BEGIN {EXCLUSIVE}
- NEW(die);
- msg.ext := die;
- msg.msgType := WMMessages.MsgExt;
- m := WM.GetDefaultManager();
- m.Broadcast(msg);
- AWAIT(nofWindows = 0)
- END Cleanup;
- BEGIN
- Modules.InstallTermHandler(Cleanup)
- END BimboMail.
- BimboMail.Open ~
- SystemTools.Free BimboMail MailStorage POP3Client ~
- PET.Open MailStorage.Mod ~
- PET.Open POP3Client.Mod ~
|