ui/src/nt/NTScrnCrsr.m3


Copyright (C) 1994, Digital Equipment Corp.
 by Steve Glassman, Mark Manasse and Greg Nelson 
<*PRAGMA LL*>

UNSAFE MODULE NTScrnCrsr;

IMPORT Cursor, NT, NTScreenType, ScrnCursor, ScreenType, TrestleComm,
       TrestleOnNT, WinDef, WinNT, WinUser;

REVEAL T = T_Pub BRANDED OBJECT  END;

TYPE
  CursorOracle = ScrnCursor.Oracle OBJECT
                   st: NTScreenType.T;
                 OVERRIDES
                   load    := CursorRegister;
                   list    := CursorList;
                   lookup  := CursorLookup;
                   builtIn := CursorBuiltIn
                 END;

  NTCursor = ScrnCursor.T OBJECT
            OVERRIDES
              unload   := CursorUnregister;
              localize := CursorLocalize
            END;

PROCEDURE NewOracle (scrn: NTScreenType.T): ScrnCursor.Oracle
  RAISES {TrestleComm.Failure} =
  BEGIN
    RETURN NEW(CursorOracle, st := scrn)
  END NewOracle;

PROCEDURE NullCursor (): WinDef.HCURSOR
  RAISES {TrestleComm.Failure} <* LL.sup = trsl, such that trsl.dpy = dpy *> =
  BEGIN
    RETURN WinUser.LoadCursor(
             NT.CNULL, LOOPHOLE(WinUser.IDC_ARROW, WinNT.LPCTSTR));
  END NullCursor;

PROCEDURE CursorRegister (                    orc: CursorOracle;
                                     READONLY c  : ScrnCursor.Raw;
                          <*UNUSED*>          nm : TEXT             := NIL):
  ScrnCursor.T RAISES {TrestleComm.Failure} =
  BEGIN
    NT.Assert(0); (* NYI *)
 END CursorRegister;

PROCEDURE CursorList (<*UNUSED*> orc       : CursorOracle;
                      <*UNUSED*> pat       : TEXT;
                      <*UNUSED*> maxResults: CARDINAL       := 1):
  REF ARRAY OF TEXT RAISES {TrestleComm.Failure} =
  BEGIN
    RETURN NIL
  END CursorList;

PROCEDURE CursorLookup (orc: CursorOracle; name: TEXT): ScrnCursor.T
  RAISES {TrestleComm.Failure} =
  BEGIN
    NT.Assert(0); (* NYI *)
    RETURN NIL
  END CursorLookup;

PROCEDURE CursorBuiltIn (orc: CursorOracle; cs: Cursor.Predefined):
  ScrnCursor.T =
  VAR hc: WinDef.HCURSOR;
      trsl := orc.st.trsl;
  BEGIN
    TRY
      TrestleOnNT.Enter(trsl);
      TRY
        CASE cs OF
          Cursor.DontCare.cs => RETURN ScrnCursor.DontCare
        | Cursor.TextPointer.cs =>
            hc := WinUser.LoadCursor(NT.CNULL, WinUser.IDC_IBEAM);
        | Cursor.NotReady.cs =>
            hc := WinUser.LoadCursor(NT.CNULL, WinUser.IDC_WAIT);
        ELSE
          hc := NT.CNULL;
        END
      FINALLY
        TrestleOnNT.Exit(trsl)
      END
    EXCEPT
      TrestleComm.Failure => RETURN ScrnCursor.DontCare
    END;
    RETURN NEW(NTCursor, id := LOOPHOLE(hc, INTEGER))
  END CursorBuiltIn;

PROCEDURE CursorLocalize (<*UNUSED*> cs: NTCursor): ScrnCursor.Raw
  RAISES {TrestleComm.Failure, ScrnCursor.Failure} =
  BEGIN
    RAISE ScrnCursor.Failure
  END CursorLocalize;

PROCEDURE CursorUnregister (<*UNUSED*> cs: NTCursor)
  RAISES {TrestleComm.Failure} =
  BEGIN
  END CursorUnregister;

BEGIN
END NTScrnCrsr.