MODULE OleViews;
(**
project = "BlackBox"
organization = "www.oberon.ch"
contributors = "Oberon microsystems"
version = "System/Rsrc/About"
copyright = "System/Rsrc/About"
license = "Docu/BB-License"
changes = ""
issues = ""
**)
IMPORT COM, WinApi, WinOle, WinOleAut, CtlT, Properties, Views, Containers, Windows, OleServer, OleClient;
(* client wrappers *)
PROCEDURE NewObjectView* (name: ARRAY OF CHAR): Views.View;
VAR clsid: COM.GUID; res: COM.RESULT;
BEGIN
IF name[0] = "{" THEN res := WinOle.CLSIDFromString(name, clsid)
ELSE res := WinOle.CLSIDFromProgID(name, clsid)
END;
IF res = WinApi.S_OK THEN RETURN OleClient.NewView(clsid)
ELSE RETURN NIL
END
END NewObjectView;
(*
PROCEDURE NewObjectViewFrom* (obj: CtlT.Object): Views.View;
VAR disp: WinOleAut.IDispatch;
BEGIN
disp := CtlT.Disp(obj);
RETURN OleClient.NewViewFrom(disp)
END NewObjectViewFrom;
*)
PROCEDURE NewObjectViewFromClipboard* (): Views.View;
BEGIN
RETURN OleClient.NewViewFromCB()
END NewObjectViewFromClipboard;
PROCEDURE IsObjectView* (v: Views.View): BOOLEAN;
VAR unk: COM.IUnknown;
BEGIN
unk := OleClient.IUnknown(v);
RETURN unk # NIL
END IsObjectView;
PROCEDURE IsAutoView* (v: Views.View): BOOLEAN;
VAR unk: COM.IUnknown; disp: WinOleAut.IDispatch; res: COM.RESULT;
BEGIN
unk := OleClient.IUnknown(v);
IF unk # NIL THEN
res := unk.QueryInterface(COM.ID(disp), disp);
RETURN res = WinApi.S_OK
ELSE RETURN FALSE
END
END IsAutoView;
PROCEDURE OleObject* (v: Views.View): CtlT.Interface;
VAR unk: COM.IUnknown;
BEGIN
unk := OleClient.IUnknown(v);
IF unk # NIL THEN RETURN CtlT.Intfce(unk)
ELSE RETURN NIL
END
END OleObject;
PROCEDURE AutoObject* (v: Views.View): CtlT.Object;
VAR unk: COM.IUnknown; disp: WinOleAut.IDispatch; res: COM.RESULT;
BEGIN
unk := OleClient.IUnknown(v);
IF unk # NIL THEN
res := unk.QueryInterface(COM.ID(disp), disp);
IF res = WinApi.S_OK THEN RETURN CtlT.Obj(disp) END
END;
RETURN NIL
END AutoObject;
PROCEDURE Deposit* (name: ARRAY OF CHAR);
VAR v: Views.View;
BEGIN
v := NewObjectView(name);
IF v # NIL THEN Views.Deposit(v) END
END Deposit;
(*
PROCEDURE Activate*;
VAR v, dv: Views.View; msg: Properties.DoVerbMsg; w: Windows.Window; f: Views.Frame;
BEGIN
v := Containers.FocusSingleton();
IF v # NIL THEN
w := Windows.dir.Focus(TRUE);
IF w # NIL THEN
dv := w.doc.ThisView();
f := Views.ThisFrame(w.frame, dv);
msg.frame := Views.ThisFrame(f, v);
msg.verb := WinOle.OLEIVERB_SHOW;
Views.HandlePropMsg(v, msg)
END
END
END Activate;
*)
PROCEDURE Connect* (sink: CtlT.OutObject; source: Views.View);
VAR iid: COM.GUID; disp: WinOleAut.IDispatch;
BEGIN
sink.GetIID(iid); disp := CtlT.Disp(sink);
OleClient.Connect(source, iid, disp)
END Connect;
(*
(* server wrappers *)
PROCEDURE NewViewObject* (v: Views.View): CtlT.Interface;
BEGIN
ASSERT(v.context = NIL, 20);
END NewViewObject;
PROCEDURE IsViewObject* (i: CtlT.Interface): BOOLEAN;
BEGIN
END IsViewObject;
PROCEDURE View* (i: CtlT.Interface): Views.View;
BEGIN
END View;
*)
END OleViews.