// XTPBrowseDialog.h: interface for the CXTPBrowseDialog class.
//
// This file is a part of the XTREME CONTROLS MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTPBROWSEDIALOG_H__)
#define __XTPBROWSEDIALOG_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ----------------------------------------------------------------------
// Summary:
// CXTPBrowseDialog is derived from the BROWSEINFO structure.
// It is used to display a directory chooser dialog using shell
// extensions.
// Remarks:
// The CXTPBrowseDialog class allows you to configure
// various options, including setting the dialog's title or assigning
// a callback function for defining the folder display and file
// filtering styles.
// ----------------------------------------------------------------------
class _XTP_EXT_CLASS CXTPBrowseDialog : public CCommonDialog
{
public:
// ----------------------------------------------------------------------
// Summary:
// Constructs a CXTPBrowseDialog object
// Parameters:
// pParent - [in] Points to a CWnd object that represents the parent
// window for the browse dialog.
// ----------------------------------------------------------------------
CXTPBrowseDialog(CWnd* pParent = NULL);
// -----------------------------------------------------------------
// Summary:
// Destroys a CXTPBrowseDialog object, handles cleanup and
// deallocation
// -----------------------------------------------------------------
virtual ~CXTPBrowseDialog();
public:
// --------------------------------------------------------------------
// Summary:
// Call this member function to invoke the browse dialog box and to
// return the dialog box result when done.
// Returns:
// IDOK if the OK button was pressed, otherwise returns IDCANCEL.
// --------------------------------------------------------------------
INT_PTR DoModal();
// -------------------------------------------------------------------------
// Summary:
// Call this member function to set the owner window for the dialog box.
// Parameters:
// hWnd - [in] Handle to the owner window for the dialog box.
// -------------------------------------------------------------------------
void SetOwner(HWND hWnd);
// ----------------------------------------------------------------
// Summary:
// Call this member function to get an HWND handle to the owner
// window for the dialog box.
// Returns:
// An HWND handle.
// ----------------------------------------------------------------
HWND GetOwner();
// ----------------------------------------------------------------------------
// Summary:
// Call this member function to set the address of an ITEMIDLIST
// structure which specifies the location of the root folder to
// browse from.
// Parameters:
// pidl - [in] Address of an ITEMIDLIST structure specifying the location
// of the root folder to browse from. Only the specified folder and
// its subfolders appear in the dialog box. This member can be
// NULL, in which case, the namespace root (the desktop folder) is
// used.
// ----------------------------------------------------------------------------
void SetPidlRoot(LPCITEMIDLIST pidl);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to return the address of the ITEMIDLIST
// structure that was specified for the location of the root folder.
// Returns:
// The address of the ITEMIDLIST structure that was specified for the
// location of the root folder.
//-----------------------------------------------------------------------
LPCITEMIDLIST GetPidlRoot();
// --------------------------------------------------------------------------------
// Summary:
// Call this member function to set the address for the display name
// the dialog box will use.
// Parameters:
// szDisplayName - [in] Address of a buffer to receive the display name of the
// folder selected by the user. The size of this buffer is
// assumed to be MAX_PATH bytes.
// --------------------------------------------------------------------------------
void SetDisplayName(LPCTSTR szDisplayName);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to return the display name that is used
// by the browse dialog box.
// Returns:
// The display name that is used by the browse dialog box.
//-----------------------------------------------------------------------
LPCTSTR GetDisplayName();
// --------------------------------------------------------------------------------
// Summary:
// Call this member function to set the title for the browse dialog
// box.
// Parameters:
// szTitle - [in] Address of a null\-terminated string that is displayed above
// the tree view control in the dialog box. This string can be
// used to specify instructions to the user.
// --------------------------------------------------------------------------------
void SetTitle(LPCTSTR szTitle);
// ---------------------------------------------------------------------
// Summary:
// Call this member function to return a NULL terminated string that
// represents the title that was set for the dialog box.
// Returns:
// A NULL terminated string that represents the title that was set
// for the dialog box.
// ---------------------------------------------------------------------
LPCTSTR GetTitle();
// ---------------------------------------------------------------------------
// Summary:
// Call this member function to set the flags for specifying the
// \options for the browse dialog box.
// Parameters:
// uf - [in] Flags specifying the options for the dialog box. See the
// \Remarks section below for a list of available styles.
// Remarks:
// Styles to be added or removed can be combined by using the bitwise
// OR (|) operator. It can be one or more of the following:
// * BIF_BROWSEFORCOMPUTER Only return computers. If the user
// selects anything other than a computer, the OK button is grayed.
// * BIF_BROWSEFORPRINTER Only allow the selection of printers.
// If the user selects anything other than a printer, the OK button
// is grayed. In Microsoft Windows XP, the best practice is to
// use an XP-style dialog, setting the root of the dialog to the
// Printers and Faxes folder (CSIDL_PRINTERS).
// * BIF_BROWSEINCLUDEFILES Version 4.71. The browse dialog
// box will display files as well as folders.
// * BIF_BROWSEINCLUDEURLS Version 5.0. The browse dialog box
// can display URLs. The BIF_USENEWUI and BIF_BROWSEINCLUDEFILES
// flags must also be set. If these three flags are not set, the
// browser dialog box will reject URLs. Even when these flags
// are set, the browse dialog box will only display URLs if the
// folder that contains the selected item supports them. When
// the folder's IShellFolder::GetAttributesOf method is called
// to request the selected item's attributes, the folder must
// set the SFGAO_FOLDER attribute flag. Otherwise, the browse
// dialog box will not display the URL.
// * BIF_DONTGOBELOWDOMAIN Do not include network folders below
// the domain level in the dialog box's tree view control.
// * BIF_EDITBOX Version 4.71. Include an edit control in the
// browse dialog box that allows the user to type the name of an item.
// * BIF_NEWDIALOGSTYLE Version 5.0. Use the new user interface.
// Setting this flag provides the user with a larger dialog box
// that can be resized. The dialog box has several new capabilities
// including: drag-and-drop capability within the dialog box,
// reordering, shortcut menus, new folders, delete, and other
// shortcut menu commands. To use this flag, you must call OleInitialize
// or CoInitialize before calling SHBrowseForFolder.
// * BIF_NONEWFOLDERBUTTON Version 6.0. Do not include the New
// Folder button in the browse dialog box.
// * BIF_NOTRANSLATETARGETS Version 6.0. When the selected item
// is a shortcut, return the PIDL of the shortcut itself rather
// than its target.
// * BIF_RETURNFSANCESTORS Only return file system ancestors.
// An ancestor is a subfolder that is beneath the root folder
// in the namespace hierarchy. If the user selects an ancestor
// of the root folder that is not part of the file system, the
// OK button is grayed.
// * BIF_RETURNONLYFSDIRS Only return file system directories.
// If the user selects folders that are not part of the file system,
// the OK button is grayed.
// * BIF_SHAREABLE Version 5.0. The browse dialog box can display
// shareable resources on remote systems. It is intended for applications
// that want to expose remote shares on a local system. The BIF_NEWDIALOGSTYLE
// flag must also be set.
// * BIF_STATUSTEXT Include a status area in the dialog box.
// The callback function can set the status text by sending messages
// to the dialog box. This flag is not supported when BIF_NEWDIALOGSTYLE
// is specified.
// * BIF_UAHINT Version 6.0. When combined with BIF_NEWDIALOGSTYLE,
// adds a usage hint to the dialog box in place of the edit box.
// BIF_EDITBOX overrides this flag.
// * BIF_USENEWUI Version 5.0. Use the new user interface, including
// an edit box. This flag is equivalent to BIF_EDITBOX | BIF_NEWDIALOGSTYLE.
// To use BIF_USENEWUI, you must call OleInitialize or CoInitialize
// before calling SHBrowseForFolder.
// * BIF_VALIDATE Version 4.71. If the user types an invalid
// name into the edit box, the browse dialog box will call the
// application's BrowseCallbackProc with the BFFM_VALIDATEFAILED
// message. This flag is ignored if BIF_EDITBOX is not specified.
// ---------------------------------------------------------------------------
void SetOptions(UINT uf);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to return the flags specifying the options
// that have been set for the dialog box.
// Returns:
// The flags specifying the options that have been set for the dialog box.
//-----------------------------------------------------------------------
UINT GetOptions();
// --------------------------------------------------------------------------
// Summary:
// Call this member function to define the address for the
// BrowseCallbackProc function that is to be called when an event
// \occurs.
// Parameters:
// pf - [in] Address of an application\-defined function that the dialog
// box calls when an event occurs. For more information, see the
// BrowseCallbackProc function. This member can be NULL.
// --------------------------------------------------------------------------
void SetCallback(BFFCALLBACK pf);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to return the address for the BrowseCallbackProc
// function that is called when an event occurs.
// Returns:
// The address for the BrowseCallbackProc function that is called
// when an event occurs.
//-----------------------------------------------------------------------
BFFCALLBACK GetCallback();
// -----------------------------------------------------------------------
// Summary:
// Call this member function to set the application data that is
// passed to the callback function.
// Parameters:
// lp - [in] Application\-defined value that the dialog box passes to
// the callback function, if one is specified.
// -----------------------------------------------------------------------
void SetData(LPARAM lp);
// ----------------------------------------------------------------------------
// Summary:
// Returns application data that was set to be passed to the
// callback function.
// Returns:
// The application data that was set to be passed to the callback function,
// if one is specified.
// ----------------------------------------------------------------------------
LPARAM GetData();
// ---------------------------------------------------------------------------------
// Summary:
// Call this member function to set the initial path to select when
// the browse dialog is first opened.
// Parameters:
// szSelPath - [in] A NULL terminated string that represents the directory that
// is selected when the dialog is initially opened. If not set,
// GetCurrentDirectory is called to set the directory.
// ---------------------------------------------------------------------------------
void SetSelPath(LPCTSTR szSelPath);
// --------------------------------------------------------------------
// Summary:
// Call this member function to get a NULL terminated string that
// represents the currently selected directory.
// Returns:
// A NULL terminated string that represents the selected directory.
// --------------------------------------------------------------------
LPCTSTR GetSelPath();
// ------------------------------------------------------------------
// Summary:
// Call this member function to get the index to the system image
// list of the image associated with the selected folder.
// Returns:
// The index to the system image list.
// ------------------------------------------------------------------
int GetImage();
//-----------------------------------------------------------------------
// Summary:
// Application defined callback.
// Parameters:
// hwnd - A handle to a window.
// uMsg - The message that is sent to the window.
// lParam - Specifies the application-defined data passed by the
// BrowseCtrlCallback function.
// lpData - Data that is passed into the function.
// Remarks:
// Application defined callback function used with the SHBrowseForFolder
// function. The browse dialog box calls this function to notify
// it about events. You can define your own callback function by
// using the SetCallback method.
// Returns:
// An integer value.
//-----------------------------------------------------------------------
static int CALLBACK BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
protected:
//-----------------------------------------------------------------------
// Summary:
// NULL terminated string that represents the selected directory
//-----------------------------------------------------------------------
TCHAR m_szSelPath[MAX_PATH];
BROWSEINFO m_bi;
private:
CString m_strTitle; // default dialog title.
};
/////////////////////////////////////////////////////////////////////////////
AFX_INLINE void CXTPBrowseDialog::SetOwner(HWND hWnd) {
m_bi.hwndOwner = hWnd;
}
AFX_INLINE HWND CXTPBrowseDialog::GetOwner() {
return m_bi.hwndOwner;
}
AFX_INLINE void CXTPBrowseDialog::SetPidlRoot(LPCITEMIDLIST pidl) {
m_bi.pidlRoot = pidl;
}
AFX_INLINE LPCITEMIDLIST CXTPBrowseDialog::GetPidlRoot() {
return m_bi.pidlRoot;
}
AFX_INLINE void CXTPBrowseDialog::SetDisplayName(LPCTSTR szDisplayName) {
m_bi.pszDisplayName = (LPTSTR)szDisplayName;
}
AFX_INLINE LPCTSTR CXTPBrowseDialog::GetDisplayName() {
return m_bi.pszDisplayName;
}
AFX_INLINE void CXTPBrowseDialog::SetTitle(LPCTSTR szTitle) {
m_bi.lpszTitle = szTitle;
}
AFX_INLINE LPCTSTR CXTPBrowseDialog::GetTitle() {
return m_bi.lpszTitle;
}
AFX_INLINE void CXTPBrowseDialog::SetOptions(UINT uf) {
m_bi.ulFlags = uf;
}
AFX_INLINE UINT CXTPBrowseDialog::GetOptions() {
return m_bi.ulFlags;
}
AFX_INLINE void CXTPBrowseDialog::SetCallback(BFFCALLBACK pf) {
m_bi.lpfn = pf;
}
AFX_INLINE BFFCALLBACK CXTPBrowseDialog::GetCallback() {
return m_bi.lpfn;
}
AFX_INLINE void CXTPBrowseDialog::SetData(LPARAM lp) {
m_bi.lParam = lp;
}
AFX_INLINE LPARAM CXTPBrowseDialog::GetData() {
return m_bi.lParam;
}
AFX_INLINE LPCTSTR CXTPBrowseDialog::GetSelPath() {
return m_szSelPath;
}
AFX_INLINE int CXTPBrowseDialog::GetImage() {
return m_bi.iImage;
}
//{{AFX_CODEJOCK_PRIVATE
#ifndef BIF_BROWSEINCLUDEURLS
#define BIF_BROWSEINCLUDEURLS 0x0080 // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI)
#endif
#ifndef BIF_NEWDIALOGSTYLE
#define BIF_NEWDIALOGSTYLE 0x0040 // Use the new dialog layout with the ability to resize
#endif
#ifndef BIF_NONEWFOLDERBUTTON
#define BIF_NONEWFOLDERBUTTON 0x0200 // Do not add the "New Folder" button to the dialog. Only applicable with BIF_NEWDIALOGSTYLE.
#endif
#ifndef BIF_NOTRANSLATETARGETS
#define BIF_NOTRANSLATETARGETS 0x0400 // don't traverse target as shortcut
#endif
#ifndef BIF_SHAREABLE
#define BIF_SHAREABLE 0x8000 // sharable resources displayed (remote shares, requires BIF_USENEWUI)
#endif
#ifndef BIF_UAHINT
#define BIF_UAHINT 0x0100 // Add a UA hint to the dialog, in place of the edit box. May not be combined with BIF_EDITBOX
#endif
#ifndef BIF_USENEWUI
#define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
#endif
//}}AFX_CODEJOCK_PRIVATE
#endif // !defined(__XTPBROWSEDIALOG_H__)