//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1997.
//
//  File:       O N C O M M A N D . H
//
//  Contents:   Command handler prototypes for the InvokeCommand code.
//
//  Notes:
//
//  Author:     jeffspr   4 Nov 1997
//
//----------------------------------------------------------------------------

#pragma once

#ifndef _ONCOMMAND_H_
#define _ONCOMMAND_H_

//---[ Typedefs ]-------------------------------------------------------------

// Typedefs for the functions that we'll GetProcAddress from the
// NetWare config DLL
typedef HRESULT (WINAPI *FOLDERONCOMMANDPROC)(
    const PCONFOLDPIDLVEC& apidl,
    HWND,
    LPSHELLFOLDER);

struct ConFoldOnCommandParams
{
    FOLDERONCOMMANDPROC     pfnfocp;
    PCONFOLDPIDLVEC         apidl;
    HWND                    hwndOwner;
    LPSHELLFOLDER           psf;
    HINSTANCE               hInstNetShell;
};

typedef struct ConFoldOnCommandParams   CONFOLDONCOMMANDPARAMS;
typedef struct ConFoldOnCommandParams * PCONFOLDONCOMMANDPARAMS;

HRESULT HrCommandHandlerThread(
    FOLDERONCOMMANDPROC     pfnCommandHandler,
    const PCONFOLDPIDLVEC&  apidl,
    HWND                    hwndOwner,
    LPSHELLFOLDER           psf);

DWORD WINAPI FolderCommandHandlerThreadProc(LPVOID lpParam);


//---[ Internal versions of the command handlers ]----------------------------
//
//  These are called by the standard handler functions once they've retrieved
//  the actual data from the pidls. They are also called from those pieces
//  of the code that keep the native data, such as the tray
//
//
HRESULT HrOnCommandDisconnectInternal(
    const CONFOLDENTRY& pccfe,
    HWND            hwndOwner,
    LPSHELLFOLDER   psf);

HRESULT HrOnCommandFixInternal(
    const CONFOLDENTRY& pccfe,
    HWND            hwndOwner,
    LPSHELLFOLDER   psf);

HRESULT HrOnCommandStatusInternal(
    const CONFOLDENTRY&  pccfe,
    BOOL	    fCreateEngine);

HRESULT HrCreateShortcutWithPath(
    const PCONFOLDPIDLVEC&  apidl,
    HWND                    hwndOwner,
    LPSHELLFOLDER           psf,
    PCWSTR                  pszDir = NULL);

//---[ Standard command handler functions ]----------------------------------
//
//  These are the pidl based functions that are called from the shell folder
//
HRESULT HrFolderCommandHandler(
    UINT                    uiCommand,
    const PCONFOLDPIDLVEC&  apidl,
    HWND                    hwndOwner,
    LPCMINVOKECOMMANDINFO   lpici,
    LPSHELLFOLDER           psf);

// All of these below handle individual command
//
HRESULT HrOnCommandProperties(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandWZCProperties(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandWZCDlgShow(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandCreateCopy(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandStatus(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandConnect(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandDisconnect(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandFix(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandNewConnection(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandAdvancedConfig(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandDelete(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandNetworkId(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandOptionalComponents(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);


HRESULT HrOnCommandDialupPrefs(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandOperatorAssist(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandCreateShortcut(
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrRaiseConnectionPropertiesInternal(
    HWND                    hwnd,
    UINT                    nStartPage, 
    INetConnection *        pconn);

HRESULT HrOnCommandCreateBridge(    
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandSetDefault(    
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);
                     
HRESULT HrOnCommandUnsetDefault(    
    IN const PCONFOLDPIDLVEC&   apidl,
    IN HWND                    hwndOwner,
    IN LPSHELLFOLDER           psf);

HRESULT HrOnCommandBridgeAddConnections(
    IN const PCONFOLDPIDLVEC&   apidl,
    HWND                        hwndOwner,
    LPSHELLFOLDER               psf
    );

HRESULT HrOnCommandBridgeRemoveConnections(
    IN const PCONFOLDPIDLVEC&   apidl,
    HWND                        hwndOwner,
    LPSHELLFOLDER               psf,
    UINT_PTR                    nDeleteTheNetworkBridgeMode
    );

LONG 
TotalValidSelectedConnectionsForBridge(
    IN const PCONFOLDPIDLVEC&   apidlSelected
    );

#endif // _ONCOMMAND_H_