view dwt/browser/FilePickerFactory.d @ 278:93409d9838c5

Commit more browser/xpcom updates, including still uncoverted source.
author John Reimer<terminal.node@gmail.com>
date Thu, 31 Jul 2008 19:17:51 -0700
parents
children 44258e0b6687
line wrap: on
line source

/*******************************************************************************
 * Copyright (c) 2003, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 * Port to the D programming language:
 *     John Reimer <terminal.node@gmail.com>
 *******************************************************************************/

module dwt.browser.FilePickerFactory;

import dwt.dwthelper.utils;

import dwt.internal.mozilla.nsID;
import dwt.internal.mozilla.
import dwt.internal.mozilla.nsIFactory;
import dwt.internal.mozilla.nsISupports;

class FilePickerFactory : nsISupports, nsIFactory 
{

    /**************************************************************************

    **************************************************************************/
    
    int _refCount = 0;
    
    /**************************************************************************

    **************************************************************************/

    this () 
    {
    }

    /**************************************************************************

    **************************************************************************/

    nsrefcnt AddRef () 
    {
        _refCount++;
        return _refCount;
    }

    /**************************************************************************

    **************************************************************************/

    int QueryInterface ( ref nsID riid, void** ppvObject)
    {
        if (riid is null || ppvObject is null) 
            return NS_ERROR_NO_INTERFACE;
        
        if (guid == nsISupports.IID)) 
        {
            *ppvObject = cast(void*)cast(nsISupports) this; 
            AddRef ();
            return NS_OK;
        }
    
        if (guid == nsIFactory.IID) 
        {
            *ppvObject = cast(void*)cast(nsIFactory) this;
            AddRef ();
            return NS_OK;
        }
    
        *ppvObject = null;
        return NS_ERROR_NO_INTERFACE;
    }

    /**************************************************************************

    **************************************************************************/

    nsrefcnt Release () 
    {
        _refCount--;
        if (_refCount is 0) 
            return 0;
        return _refCount;
    }
    
    /**************************************************************************

    **************************************************************************/

    /* nsIFactory */

    nsresult CreateInstance (nsISupports aOuter, nsIID* iid, void** result) 
    {
        if (result is null)
            return NS_ERROR_INVALID_ARG;

        FilePicker picker = new FilePicker ();
        picker.AddRef ();

        nsresult rv = picker.QueryInterface( iid, result );
        
        // TODO: If the query fails, the error should be checked and the 
        //       newly created object deleted. In C++, this is done
        //       like so:
        //
        //      if (NS_FAILED(rv)) {
        //          *result = nsnull;
        //          delete picker;
        //      }
        //
        // Deletion of the object really isn't critical here for D, but
        // it may be considered "good habit" to do anyway for XPCOM objects.
        // For now, just return the rv value.  NS_FAILED needs to be
        // ported first. -JJR

        return rv;
    }

    nsresult LockFactory (int lock) 
    {
        return NS_OK;
    }

}