/* * Class: sun_awt_shell_Win32ShellFolder2 * Method: doGetColumnValue * Signature: (JJI)Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_sun_awt_shell_Win32ShellFolder2_doGetColumnValue (JNIEnv *env, jobject obj, jlong iShellFolder, jlong jpidl, jint columnIdx) { HRESULT hr; IShellFolder *pIShellFolder = (IShellFolder*) iShellFolder; IUnknown *pIUnknown = NULL; LPITEMIDLIST pidl = (LPITEMIDLIST) jpidl; SHELLDETAILS sd; hr = pIShellFolder->QueryInterface(IID_IShellFolder2, (void**)&pIUnknown); if(SUCCEEDED (hr)) { // The folder exposes IShellFolder2 interface IShellFolder2 *pIShellFolder2 = (IShellFolder2*) pIUnknown; hr = pIShellFolder2->GetDetailsOf(pidl, (UINT)columnIdx, &sd); pIShellFolder2->Release(); if (SUCCEEDED (hr)) { STRRET strRet = sd.str; return jstringFromSTRRET(env, pidl, &strRet); } } hr = pIShellFolder->CreateViewObject(NULL, IID_IShellDetails, (void**)&pIUnknown); if(SUCCEEDED (hr)) { // The folder exposes IShellDetails interface IShellDetails *pIShellDetails = (IShellDetails*) pIUnknown; hr = pIShellDetails->GetDetailsOf(pidl, (UINT)columnIdx, &sd); pIShellDetails->Release(); if (SUCCEEDED (hr)) { STRRET strRet = sd.str; return jstringFromSTRRET(env, pidl, &strRet); } } // The folder exposes neither IShellFolder2 nor IShelDetails return NULL; }
/* * Helper function for creating Java column info object */ static jobject CreateColumnInfo(JNIEnv *pEnv, jclass *pClass, jmethodID *pConstructor, SHELLDETAILS *psd, ULONG visible) { jstring str = jstringFromSTRRET(pEnv, NULL, &(psd->str)); JNU_CHECK_EXCEPTION_RETURN(pEnv, NULL); return pEnv->NewObject(*pClass, *pConstructor, str, (jint)(psd->cxChar * 6), // TODO: is 6 OK for converting chars to pixels? (jint)psd->fmt, (jboolean) visible); }
/* * Class: sun_awt_shell_Win32ShellFolder * Method: getFileSystemPath * Signature: (JJ)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder_getFileSystemPath__JJ (JNIEnv* env, jclass cls, jlong parentIShellFolder, jlong relativePIDL) { IShellFolder* pParent = (IShellFolder*)parentIShellFolder; if (pParent == NULL) { return NULL; } LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL; if (pidl == NULL) { return NULL; } STRRET strret; pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret); return jstringFromSTRRET(env, pidl, &strret); }
/* * Class: sun_awt_shell_Win32ShellFolder2 * Method: getDisplayNameOf * Signature: (JJ)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getDisplayNameOf (JNIEnv* env, jclass cls, jlong parentIShellFolder, jlong relativePIDL, jint attrs) { IShellFolder* pParent = (IShellFolder*)parentIShellFolder; if (pParent == NULL) { return NULL; } LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL; if (pidl == NULL) { return NULL; } STRRET strret; if (pParent->GetDisplayNameOf(pidl, attrs, &strret) != S_OK) { return NULL; } return jstringFromSTRRET(env, pidl, &strret); }
/* * Class: sun_awt_shell_Win32ShellFolder * Method: getDisplayName * Signature: (JJ)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder_getDisplayName__JJ (JNIEnv* env, jobject folder, jlong parentIShellFolder, jlong relativePIDL) { IShellFolder* pParent = (IShellFolder*)parentIShellFolder; if (pParent == NULL) { return NULL; } LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL; if (pidl == NULL) { return NULL; } STRRET strret; if (pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL, &strret) != S_OK) { return NULL; } return jstringFromSTRRET(env, pidl, &strret); }