Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.eclipse.swt.ole.win32;
  
  import  org.eclipse.swt.*;
  import  org.eclipse.swt.internal.ole.win32.*;


Author(s):
S2267 To change the template for this generated type comment go to Window>Preferences>Java>Code Generation>Code and Comments
 
 class OleEventSinkImpl {
     
     private COMObject iDispatch;
     private int refCount;
 
     private IUnknown objIUnknown;
     private int  eventCookie;
     private GUID eventGuid;
 
     private OleEventTable eventTable;
    

    
 
     public OleEventSinkImpl(int iUnknown, GUID riid) {
         this. = riid;
         this. = new IUnknown(iUnknown);
   
         createCOMInterfaces();
     }
     
     void connect () {
       int[] ppvObject = new int[1];
       if (.QueryInterface(COM.IIDIConnectionPointContainer, ppvObject) == COM.S_OK) {
         IConnectionPointContainer cpc = new IConnectionPointContainer(ppvObject[0]);
         int[] ppCP = new int[1];
         if (cpc.FindConnectionPoint(ppCP) == COM.S_OK) {
           IConnectionPoint cp = new IConnectionPoint(ppCP[0]);
           int[] pCookie = new int[1];
           if (cp.Advise(.getAddress(), pCookie) == COM.S_OK)
              = pCookie[0];
           cp.Release();
         }
         cpc.Release();
       }
     }
     void addListener(int eventID, OleListener listener) {
       if (listener == null) OLE.error (SWT.ERROR_NULL_ARGUMENT);
       if ( == null = new OleEventTable ();
       .hook(eventIDlistener);
     }
     int AddRef() {
       ++;
       return ;
     }
     private void createCOMInterfaces() {
        = new COMObject(new int[]{2, 0, 0, 1, 3, 4, 8}){
         public int method0(int[] args) {return QueryInterface(args[0], args[1]);}
         public int method1(int[] args) {return AddRef();}
         public int method2(int[] args) {return Release();}
         // method3 GetTypeInfoCount - not implemented
         // method4 GetTypeInfo - not implemented
         // method5 GetIDsOfNames - not implemented
         public int method6(int[] args) {return Invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);}
       };
     }
     void disconnect() {
       // disconnect event sink
       if ( != 0 &&  != null) {
         int[] ppvObject = new int[1];
         if (.QueryInterface(COM.IIDIConnectionPointContainer, ppvObject) == COM.S_OK) {
           IConnectionPointContainer cpc = new IConnectionPointContainer(ppvObject[0]);
           if (cpc.FindConnectionPoint(ppvObject) == COM.S_OK) {
             IConnectionPoint cp = new IConnectionPoint(ppvObject[0]);
             if (cp.Unadvise() == COM.S_OK) {
                = 0;
             }
             cp.Release();
           }
           cpc.Release();
         }
       }
     }
     private void disposeCOMInterfaces() {
       if ( != null)
         .dispose();
        = null;
   
     }
     private int Invoke(int dispIdMemberint riidint lcidint dwFlagsint pDispParamsint pVarResultint pExcepInfoint pArgErr)
     {
       if ( == null || !.hooks(dispIdMember)) return COM.S_OK;
   
       // Construct an array of the parameters that are passed in
       // Note: parameters are passed in reverse order - here we will correct the order
       Variant[] eventInfo = null;
      if (pDispParams != 0) { 
        DISPPARAMS dispParams = new DISPPARAMS();
        COM.MoveMemory(dispParamspDispParams, DISPPARAMS.sizeof);
        eventInfo = new Variant[dispParams.cArgs];
        int size = Variant.sizeof;
        int offset = (dispParams.cArgs - 1) * size;
    
        for (int j = 0; j < dispParams.cArgs; j++){
          eventInfo[j] = new Variant();
          eventInfo[j].setData(dispParams.rgvarg + offset);
          offset = offset - size;
        }
      }
    
      OleEvent event = new OleEvent();
      event.arguments = eventInfo;
      try {
        notifyListener(dispIdMember,event);
      } catch (Throwable t) {
      }
      return COM.S_OK;
    }
    
Notify listeners of an event.

This method notifies all listeners that an event has occurred.

Parameters:
eventType the desired SWT event
event the event data
Throws:
SWTError
  • ERROR_THREAD_INVALID_ACCESS when called from the wrong thread
  • ERROR_WIDGET_DISPOSED when the widget has been disposed
  • ERROR_NULL_ARGUMENT when handler is null
    private void notifyListener (int eventType, OleEvent event) {
      if (event == null) OLE.error (SWT.ERROR_NULL_ARGUMENT);
      if ( == nullreturn;
      event.type = eventType;
      .sendEvent (event);
    }
    private int QueryInterface(int riidint ppvObject) {
      if (riid == 0 || ppvObject == 0)
        return COM.E_INVALIDARG;
      GUID guid = new GUID();
      COM.MoveMemory(guidriid, GUID.sizeof);
      if ( COM.IsEqualGUID(guid, COM.IIDIUnknown) || COM.IsEqualGUID(guid, COM.IIDIDispatch) ||
          COM.IsEqualGUID(guid)) {
        COM.MoveMemory(ppvObjectnew int[] {.getAddress()}, 4);
        AddRef();
        return OLE.S_OK;
      }
      COM.MoveMemory(ppvObjectnew int[] {0}, 4);
      return COM.E_NOINTERFACE;
    }
    int Release() {
      --;
      if ( == 0) {
        disposeCOMInterfaces();
      }
  
      return ;
    }
    void removeListener(int eventID, OleListener listener) {
      if (listener == null) OLE.error (SWT.ERROR_NULL_ARGUMENT);
      if ( == nullreturn;
      .unhook (eventIDlistener);
    }
    boolean hasListeners() {
      return .hasEntries();
    }
    
    
New to GrepCode? Check out our FAQ X