//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1995 - 1995. // // File: sdetails.cxx // // Contents: Implementation of IShellDetails // // History: 13-Dec-95 BruceFo Created // //---------------------------------------------------------------------------- #include "headers.hxx" #pragma hdrstop #include "sdetails.hxx" #include "shares.h" #include "shares.hxx" #include "resource.h" #include "util.hxx" #include ////////////////////////////////////////////////////////////////////////////// // // Define the columns that we know about... // struct COL_INFO { UINT idString; int fmt; UINT cxChar; }; const COL_INFO c_ColumnHeaders1[] = { {IDS_NAME, LVCFMT_LEFT, 25}, {IDS_COMMENT, LVCFMT_LEFT, 30}, }; const COL_INFO c_ColumnHeaders2[] = { {IDS_NAME, LVCFMT_LEFT, 25}, {IDS_COMMENT, LVCFMT_LEFT, 30}, {IDS_PATH, LVCFMT_LEFT, 30}, {IDS_MAXUSES, LVCFMT_LEFT, 15}, }; ////////////////////////////////////////////////////////////////////////////// STDMETHODIMP CSharesSD::GetDetailsOf( LPCITEMIDLIST pidl, UINT iColumn, LPSHELLDETAILS lpDetails ) { switch (m_level) { case 1: return GetDetailsOf1(pidl, iColumn, lpDetails); case 2: return GetDetailsOf2(pidl, iColumn, lpDetails); default: appAssert(FALSE); return E_FAIL; } } STDMETHODIMP CSharesSD::GetDetailsOf1( LPCITEMIDLIST pidl, UINT iColumn, LPSHELLDETAILS lpDetails ) { if (iColumn >= ICOL1_MAX) { return E_NOTIMPL; } HRESULT hr; LPIDSHARE pids = (LPIDSHARE)pidl; if (NULL == pids) { hr = STRRETLoadString(c_ColumnHeaders1[iColumn].idString, &lpDetails->str); if (FAILED(hr)) { return hr; } lpDetails->fmt = c_ColumnHeaders1[iColumn].fmt; lpDetails->cxChar = c_ColumnHeaders1[iColumn].cxChar; return NOERROR; } #ifdef WIZARDS if ( Share_IsNewShareWizard(pids) || Share_IsNetWareWizard(pids) || Share_IsMacWizard(pids) ) { switch (iColumn) { case ICOL1_NAME: hr = STRRETCopy(Share_GetName(pids), &lpDetails->str); if (FAILED(hr)) { return hr; } break; case ICOL1_COMMENT: lpDetails->str.uType = STRRET_CSTR; lpDetails->str.cStr[0] = '\0'; break; } } else #endif // WIZARDS { appAssert(Share_GetLevel(pids) == 1); switch (iColumn) { case ICOL1_NAME: hr = STRRETCopy(Share_GetName(pids), &lpDetails->str); if (FAILED(hr)) { return hr; } break; case ICOL1_COMMENT: hr = STRRETCopy(Share_GetComment(pids), &lpDetails->str); if (FAILED(hr)) { return hr; } break; } } return NOERROR; } STDMETHODIMP CSharesSD::GetDetailsOf2( LPCITEMIDLIST pidl, UINT iColumn, LPSHELLDETAILS lpDetails ) { if (iColumn >= ICOL2_MAX) { return E_NOTIMPL; } HRESULT hr; LPIDSHARE pids = (LPIDSHARE)pidl; if (NULL == pids) { hr = STRRETLoadString(c_ColumnHeaders2[iColumn].idString, &lpDetails->str); if (FAILED(hr)) { return hr; } lpDetails->fmt = c_ColumnHeaders2[iColumn].fmt; lpDetails->cxChar = c_ColumnHeaders2[iColumn].cxChar; return NOERROR; } #ifdef WIZARDS if ( Share_IsNewShareWizard(pids) || Share_IsNetWareWizard(pids) || Share_IsMacWizard(pids) ) { switch (iColumn) { case ICOL2_NAME: hr = STRRETCopy(Share_GetName(pids), &lpDetails->str); if (FAILED(hr)) { return hr; } break; case ICOL2_COMMENT: lpDetails->str.uType = STRRET_CSTR; lpDetails->str.cStr[0] = '\0'; break; } } else #endif // WIZARDS { appAssert(Share_GetLevel(pids) == 2); switch (iColumn) { case ICOL2_NAME: hr = STRRETCopy(Share_GetName(pids), &lpDetails->str); if (FAILED(hr)) { return hr; } break; case ICOL2_COMMENT: hr = STRRETCopy(Share_GetComment(pids), &lpDetails->str); if (FAILED(hr)) { return hr; } break; case ICOL2_PATH: hr = STRRETCopy(Share_GetPath(pids), &lpDetails->str); if (FAILED(hr)) { return hr; } break; case ICOL2_MAXUSES: { DWORD maxuses = Share_GetMaxUses(pids); if (maxuses == SHI_USES_UNLIMITED) { hr = STRRETLoadString(IDS_UNLIMITED, &lpDetails->str); if (FAILED(hr)) { return hr; } } else { TCHAR szTemp[MAX_PATH]; StringCchPrintf(szTemp, ARRAYLEN(szTemp), TEXT("%d"), maxuses); hr = STRRETCopy(szTemp, &lpDetails->str); if (FAILED(hr)) { return hr; } } break; } } } return NOERROR; } STDMETHODIMP CSharesSD::ColumnClick( UINT iColumn ) { ShellFolderView_ReArrange(m_hwnd, iColumn); return NOERROR; }