// // Copyright 1997 - Microsoft // // // SIFPROP.CPP - Handles the "SIF Properties" IDC_SIF_PROP_IMAGES // and IDD_SIF_PROP_TOOLS dialogs // #include "pch.h" #include "sifprop.h" #include "utils.h" #include "shellapi.h" DEFINE_MODULE("IMADMUI") DEFINE_THISCLASS("CSifProperties") #define THISCLASS CSifProperties #define LPTHISCLASS CSifProperties* #define NUM_COLUMNS 3 DWORD aSifHelpMap[] = { IDC_E_DESCRIPTION, HIDC_E_DESCRIPTION, IDC_E_HELP, HIDC_E_HELP, IDC_S_VERSION, HIDC_S_VERSION, IDC_S_LANGUAGE, HIDC_S_LANGUAGE, IDC_S_LASTMODIFIED, HIDC_S_LASTMODIFIED, IDC_S_IMAGETYPE, HIDC_S_IMAGETYPE, IDC_S_DIRECTORY, HIDC_S_DIRECTORY, IDC_G_IMAGEDETAILS, HIDC_G_IMAGEDETAILS, NULL, NULL }; // // CreateInstance() // HRESULT CSifProperties_CreateInstance( HWND hParent, LPCTSTR lpszTemplate, LPSIFINFO pSIF ) { TraceFunc( "CSifProperties_CreateInstance( )\n" ); LPTHISCLASS lpcc = new THISCLASS( ); HRESULT hr = lpcc->Init( hParent, lpszTemplate, pSIF ); delete lpcc; HRETURN(hr); } // // Constructor // THISCLASS::THISCLASS( ) { TraceClsFunc( "CSifProperties()\n" ); InterlockIncrement( g_cObjects ); TraceFuncExit(); } // // Init() // STDMETHODIMP THISCLASS::Init( HWND hParent, LPCTSTR lpszTemplate, LPSIFINFO pSIF ) { HRESULT hr; TraceClsFunc( "Init( ... )\n" ); Assert( pSIF ); _pSIF = pSIF; INT i = (INT)DialogBoxParam( g_hInstance, lpszTemplate, hParent, PropSheetDlgProc, (LPARAM) this ); switch( i ) { case IDOK: hr = S_OK; break; case IDCANCEL: hr = S_FALSE; break; #ifdef DEBUG default: hr = THR(E_FAIL); break; #endif // DEBUG } HRETURN(hr); } // // Destructor // THISCLASS::~THISCLASS( ) { TraceClsFunc( "~CSifProperties()\n" ); InterlockDecrement( g_cObjects ); TraceFuncExit(); }; // ************************************************************************ // // Property Sheet Functions // // ************************************************************************ // // _InitDialog( ) // HRESULT THISCLASS::_InitDialog( HWND hDlg ) { TraceClsFunc( "_InitDialog( )\n" ); HRESULT hr = S_OK; WCHAR szTempBuffer[ 256 ]; WCHAR szTmp[ 128 ]; WCHAR szTmp2[ 128 ]; FILETIME ftLocal; SYSTEMTIME stSystem; _hDlg = hDlg; Assert( _pSIF ); SetDlgItemText( hDlg, IDC_E_DESCRIPTION, _pSIF->pszDescription); SetDlgItemText( hDlg, IDC_E_HELP, _pSIF->pszHelpText); SetDlgItemText( hDlg, IDC_S_IMAGETYPE, _pSIF->pszImageType); SetDlgItemText( hDlg, IDC_S_LANGUAGE, _pSIF->pszLanguage); SetDlgItemText( hDlg, IDC_S_VERSION, _pSIF->pszVersion); SetDlgItemText( hDlg, IDC_S_DIRECTORY, _pSIF->pszDirectory ); Edit_LimitText( GetDlgItem( hDlg, IDC_E_DESCRIPTION), REMOTE_INSTALL_MAX_DESCRIPTION_CHAR_COUNT - 1 ); Edit_LimitText( GetDlgItem( hDlg, IDC_E_HELP), REMOTE_INSTALL_MAX_HELPTEXT_CHAR_COUNT - 1 ); FileTimeToLocalFileTime( &_pSIF->ftLastWrite, &ftLocal); FileTimeToSystemTime( &ftLocal, &stSystem); if ( !GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &stSystem, NULL, szTmp, ARRAYSIZE(szTmp)) || !GetTimeFormat(LOCALE_USER_DEFAULT, 0, &stSystem, NULL, szTmp2, ARRAYSIZE(szTmp2)) || _snwprintf( szTempBuffer, ARRAYSIZE(szTempBuffer), L"%s, %s", szTmp, szTmp2) < 0 ) { hr = E_INVALIDARG; } else { SetDlgItemText( hDlg, IDC_S_LASTMODIFIED, szTempBuffer ); } HRETURN(hr); } // // _OnCommand( ) // INT THISCLASS::_OnCommand( WPARAM wParam, LPARAM lParam ) { TraceClsFunc( "_OnCommand( " ); TraceMsg( TF_FUNC, "wParam = 0x%08x, lParam = 0x%08x )\n", wParam, lParam ); HRESULT hr = S_FALSE; HWND hwndCtl = (HWND) lParam; switch( LOWORD(wParam) ) { case IDOK: if ( HIWORD( wParam ) == BN_CLICKED ) { Assert( _pSIF ); WCHAR szTempBuffer[ REMOTE_INSTALL_MAX_HELPTEXT_CHAR_COUNT + 2 +1 ]; // +2 = the "Quotes" + NULL Assert( REMOTE_INSTALL_MAX_DESCRIPTION_CHAR_COUNT <= REMOTE_INSTALL_MAX_HELPTEXT_CHAR_COUNT ); // paranoid szTempBuffer[0] = L'\"'; GetDlgItemText( _hDlg, IDC_E_DESCRIPTION, &szTempBuffer[1], REMOTE_INSTALL_MAX_DESCRIPTION_CHAR_COUNT ); wcscat( szTempBuffer, L"\"" ); if ( VerifySIFText( szTempBuffer ) ) { if (!WritePrivateProfileString( OSCHOOSER_SIF_SECTION, OSCHOOSER_DESCRIPTION_ENTRY, szTempBuffer, _pSIF->pszFilePath)) { MessageBoxFromError( _hDlg, NULL, GetLastError()); break; } } else { MessageBoxFromStrings( _hDlg, IDS_OSCHOOSER_RESTRICTION_FIELDS_TITLE, IDS_OSCHOOSER_RESTRICTION_FIELDS_TEXT, MB_OK ); SetFocus( GetDlgItem( _hDlg, IDC_E_DESCRIPTION ) ); break; } szTempBuffer[0] = L'\"'; GetDlgItemText( _hDlg, IDC_E_HELP, &szTempBuffer[1], REMOTE_INSTALL_MAX_HELPTEXT_CHAR_COUNT ); wcscat( szTempBuffer, L"\"" ); if ( VerifySIFText( szTempBuffer ) ) { if (!WritePrivateProfileString( OSCHOOSER_SIF_SECTION, OSCHOOSER_HELPTEXT_ENTRY, szTempBuffer, _pSIF->pszFilePath)) { MessageBoxFromError( _hDlg, NULL, GetLastError()); } } else { MessageBoxFromStrings( _hDlg, IDS_OSCHOOSER_RESTRICTION_FIELDS_TITLE, IDS_OSCHOOSER_RESTRICTION_FIELDS_TEXT, MB_OK ); SetFocus( GetDlgItem( _hDlg, IDC_E_HELP ) ); break; } EndDialog( _hDlg, LOWORD( wParam ) ); } break; case IDCANCEL: if ( HIWORD( wParam ) == BN_CLICKED ) { EndDialog( _hDlg, LOWORD( wParam ) ); } break; case IDC_E_DESCRIPTION: case IDC_E_HELP: if ( HIWORD( wParam ) == EN_CHANGE ) { DWORD dwLen1 = Edit_GetTextLength( GetDlgItem( _hDlg, IDC_E_DESCRIPTION) ); DWORD dwLen2 = Edit_GetTextLength( GetDlgItem( _hDlg, IDC_E_HELP) ); EnableWindow( GetDlgItem( _hDlg, IDOK ), !( dwLen1==0 || dwLen2==0) ); } break; case IDC_BUTTON1: if ( HIWORD(wParam) == BN_CLICKED ) { SHELLEXECUTEINFO shexinfo = { 0 }; Assert( _pSIF ); shexinfo.cbSize = sizeof(shexinfo); shexinfo.fMask = SEE_MASK_INVOKEIDLIST; shexinfo.hwnd = hwndCtl; shexinfo.nShow = SW_SHOWNORMAL; shexinfo.lpFile = _pSIF->pszFilePath; shexinfo.lpVerb = L"properties"; ShellExecuteEx(&shexinfo); } break; } RETURN((SUCCEEDED(hr) ? TRUE : FALSE)); } // // PropSheetDlgProc() // INT_PTR CALLBACK THISCLASS::PropSheetDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { // TraceFunc( "PropSheetDlgProc()\n" ); // TraceMsg( TF_WM, "hDlg = 0x%08x, uMsg = 0x%08x, wParam = 0x%08x, lParam = 0x%08x\n", // hDlg, uMsg, wParam, lParam ); LPTHISCLASS lpc = (LPTHISCLASS) GetWindowLongPtr( hDlg, GWLP_USERDATA ); if ( uMsg == WM_INITDIALOG ) { TraceMsg( TF_WM, "WM_INITDIALOG\n" ); Assert( lParam ); SetWindowLongPtr( hDlg, GWLP_USERDATA, lParam ); lpc = (LPTHISCLASS) lParam; lpc->_InitDialog( hDlg ); return TRUE; } if ( lpc ) { switch( uMsg ) { case WM_COMMAND: TraceMsg( TF_WM, "WM_COMMAND\n" ); return lpc->_OnCommand( wParam, lParam ); case WM_HELP:// F1 { LPHELPINFO phelp = (LPHELPINFO) lParam; WinHelp( (HWND) phelp->hItemHandle, g_cszHelpFile, HELP_WM_HELP, (DWORD_PTR) &aSifHelpMap ); } break; case WM_CONTEXTMENU: // right mouse click WinHelp((HWND) wParam, g_cszHelpFile, HELP_CONTEXTMENU, (DWORD_PTR) &aSifHelpMap ); break; } } return FALSE; }