/*
 * ************************************************************************************************************
 * Author: Marcin Załęczny
 * Copyright (C)2010 Marcin Załęczny <mzaleczny@hotmail.com>
 * License: The GNU Lesser General Public License, version 3.0 (LGPLv3)
 * Library Name: mzstdshell
 * Version: 1.04
 * First release date:   2010-11-08
 * Current release date: 2011-03-04
 *
 *
 * This file is part of mzstdshell library
 * 
 * mzstdshell library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * mzstdshell library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 * ************************************************************************************************************
 */

#ifndef __MZSTDSHELL_SHELL_H__
#define __MZSTDSHELL_SHELL_H__

#include "mzstdshellCommon.h"
#include "mzObject.h"
#include "mzString.h"

class DECLSPEC_MZSTDSHELL CSystemShell : public CObject {
public:
	WINAPI CSystemShell();
    WINAPI ~CSystemShell();
    
    static HINSTANCE Execute(HWND hwnd, CString filename, CString parameters, CString homeDir, LONG showCmd = SW_SHOW);
    
    static CString GetAdminToolsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetAltStartupFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetAppDataFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetRecycleBinFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCDBurnAreaFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonAdminToolsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonAltStartupFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonAppDataFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonDesktopFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonDocumentsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonFavoritesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonMusicFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonOEMLinksFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonPicturesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonProgramsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonStartMenuFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonStartupFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonTemplatesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCommonVideoFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetNetworkFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetConnectionsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetControlPanelFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetCookiesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetDesktopVirtualFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetDesktopFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetComputerFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetFavoritesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetFontsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetHistoryFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetInternetFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetInternetCacheFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetLocalAppDataFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetMyDocumentsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetMyMusicFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetMyPicturesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetMyVideoFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetNetHoodFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetNetworkNeighborhoodFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetPrintersFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetPrintHoodFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetProfileFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetProgramFilesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetProgramFilesX86Folder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetProgramFilesCommonFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetProgramFilesCommonX86Folder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetProgramsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetRecentFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetResourcesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetLocalizedResourcesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetSendtoFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetStartMenuFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetStartupFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetSystemFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetSystemX86Folder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetTemplatesFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetWindowsFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    static CString GetTempFolder(BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    
    static CString BrowseForFolder(CString rootFolder);
    
private:
    static CString GetShellSystemFolder(LONG foldertype, BOOL current = TRUE, BOOL verify = FALSE, BOOL create = FALSE);
    
};
typedef CSystemShell* PSystemShell;

#endif
