summaryrefslogblamecommitdiffstats
path: root/tools/globalcode/utility/MUI.cpp
blob: 4cd4a8dd69bebe6612932944b2be38598cff6bcf (plain) (tree)



























































































































































































































                                                                                           
//-----------------------------------------------------------------------------
// Copyright (C) 2001 Radical Entertainment Ltd.  All rights reserved.
//
// MUI.cpp
//
// Description: Container class for custom UI windows for use in Maya.
//
// Modification History:
//  + Created Sep 30, 2001 -- bkusy 
//-----------------------------------------------------------------------------

//----------------------------------------
// System Includes
//----------------------------------------
#include <assert.h>

//----------------------------------------
// Project Includes
//----------------------------------------
#include "stdafx.h"
#include "MUI.h"
#include "util.h"
#include "mayahandles.h"

//----------------------------------------
// Forward References
//----------------------------------------

//----------------------------------------
// Constants, Typedefs and Statics
//----------------------------------------


//-----------------------------------------------------------------------------
// c o n f i r m 
//
// Synopsis:    Present a modal confirmation box to the user.
//
// Parameters:  message - the message to display in the box.
//
// Returns:     NOTHING
//
// Constraints: NONE
//
//-----------------------------------------------------------------------------
int MUI::ConfirmDialog( const char* message )
{
    UINT style = MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1 | MB_TASKMODAL ;
    int button = MessageBox( 0, message, "MUI Confirmation", style );

    int result = MUI::YES;
    if ( IDNO == button ) result = MUI::NO;
    if ( IDCANCEL == button ) result = MUI::CANCEL;

    return result;
}

//-----------------------------------------------------------------------------
// E r r o r D i a l o g
//
// Synopsis:    Present a modal error dialog box to the user.
//
// Parameters:  message - the message to display in the box.
//
// Returns:     NOTHING
//
// Constraints: NONE
//
//-----------------------------------------------------------------------------
void MUI::ErrorDialog( const char* message )
{
    UINT style = MB_OK | MB_ICONERROR | MB_TASKMODAL;
    MessageBox( 0, message, "MUI Error", style );
}

//-----------------------------------------------------------------------------
// E r r o r D i a l o g
//
// Synopsis:    Present a modal error dialog box to the user.
//
// Parameters:  message - the message to display in the box.
//
// Returns:     NOTHING
//
// Constraints: NONE
//
//-----------------------------------------------------------------------------
void MUI::InfoDialog( const char* message )
{
    UINT style = MB_OK | MB_ICONINFORMATION | MB_TASKMODAL;
    MessageBox( 0, message, "MUI Info", style );
}

//-----------------------------------------------------------------------------
// F i l e D i a l o g 
//
// Synopsis:    Present the user with a file browser window to select a file for
//              open or save.
//
// Parameters:  filePath         - a reference parameter to receive the full
//                                 file path from the dialog.  If not NULL on
//                                 input, the initial value is used as the
//                                 starting location for the dialog.
//              filePathSize     - the maximum length of the filePath buffer.
//              dialogTitle      - the caption to appear in the dialog title
//                                 bar.
//              extensionFilter  - A filter specifiying the types of files that
//                                 are eligilble for selection.  It must end
//                                 in "||" with all entries separated by "|".
//                                 Generally entries will be in pairs; the 
//                                 first is a type description and the second
//                                 is the actual filter.  e.g./
//                                 "Raddle Data(*.rdl)|*.rdl|All Files(*.*)|*.*||".
//              defaultExtension - if not NULL, then the given extension will 
//                                 automatically appended to an extensionless
//                                 entry in the Filename box.
//              broserType       - OPEN | SAVE.  Default is OPEN.
//
// Returns:     true, if a filePath is set; false if the dialog is cancelled.
//
// Notes:  The filePath will have "/" slashes and not "\" slashes on return.
//
//-----------------------------------------------------------------------------
bool MUI::FileDialog( char* filePath, int filePathSize,
                      const char* windowTitle,
                      const char* extensionFilter,
                      const char* defaultExtension,
                      int browserType
                    )  
{   
    //
    // We do need the file path to have windows backslashes.
    //
    util_replaceCharacters('/', '\\', filePath );

    bool isOk = false;
    
    BOOL doOpen;
    DWORD flags = 0;

	switch ( browserType )
	{
		case MUI::SET:
		{
			doOpen = TRUE;
			flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
			break;
		}

		case MUI::SAVE:
		{
			doOpen = FALSE;
			flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
			break;
		}

		default: // MUI::OPEN
		{
			doOpen = TRUE;
			flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
			break;

		}
	}

    //
    // Set the AFX handle to maya's application instance handle.
    // 
    HINSTANCE handle = static_cast<HINSTANCE>(MayaHandles::GetHInstance());
    AfxSetResourceHandle( handle ); 

    //
    // Create the dialog
    //
	CFileDialog fileDialog( doOpen,
                            defaultExtension, 
                            filePath, 
                            flags,
                            extensionFilter,
                            NULL 
					       );

    if ( windowTitle ) fileDialog.m_ofn.lpstrTitle = windowTitle;

    //
    // Show the dialog and wait for a response.
    //
    int result = fileDialog.DoModal();
    if ( IDOK == result )
    {
        const char* filename = LPCSTR( fileDialog.GetPathName() );
        strncpy( filePath, LPCSTR( fileDialog.GetPathName() ), filePathSize );
        util_replaceCharacters('\\', '/', filePath );
        isOk = true;
    }

    return isOk;
}

//=============================================================================
// MUI::PopupDialogue
//=============================================================================
// Description: Comment
//
// Parameters:  ( int id, DLGPROC callBack )
//
// Return:      void 
//
//=============================================================================
void MUI::PopupDialogue( int id, DLGPROC callBack )
{
    HINSTANCE handle = static_cast<HINSTANCE>(MayaHandles::GetHInstance());
    AfxSetResourceHandle( handle );
    
    HWND hWnd = static_cast<HWND>(MayaHandles::GetHWND());

    DialogBox( handle, MAKEINTRESOURCE(id), hWnd, callBack );
}