< prev index next >

src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp

Print this page




 848     LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL;
 849     if (pIShellIcon == NULL && pidl == NULL) {
 850         return 0;
 851     }
 852 
 853     INT index = -1;
 854 
 855     HRESULT hres;
 856     // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp
 857     if (pIShellIcon != NULL) {
 858         hres = pIShellIcon->GetIconOf(pidl, GIL_FORSHELL, &index);
 859     }
 860 
 861     return (jint)index;
 862 }
 863 
 864 
 865 /*
 866  * Class:     sun_awt_shell_Win32ShellFolder2
 867  * Method:    extractIcon
 868  * Signature: (JJZ)J
 869  */
 870 JNIEXPORT jlong JNICALL Java_sun_awt_shell_Win32ShellFolder2_extractIcon
 871     (JNIEnv* env, jclass cls, jlong pIShellFolderL, jlong relativePIDL, jboolean getLargeIcon)

 872 {
 873     IShellFolder* pIShellFolder = (IShellFolder*)pIShellFolderL;
 874     LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL;
 875     if (pIShellFolder == NULL || pidl == NULL) {
 876         return 0;
 877     }
 878 
 879     HICON hIcon = NULL;
 880 
 881     HRESULT hres;
 882     IExtractIconW* pIcon;
 883     hres = pIShellFolder->GetUIObjectOf(NULL, 1, const_cast<LPCITEMIDLIST*>(&pidl),
 884                                         IID_IExtractIconW, NULL, (void**)&pIcon);
 885     if (SUCCEEDED(hres)) {
 886         WCHAR szBuf[MAX_PATH];
 887         INT index;
 888         UINT flags;
 889         hres = pIcon->GetIconLocation(GIL_FORSHELL, szBuf, MAX_PATH, &index, &flags);

 890         if (SUCCEEDED(hres)) {
 891             HICON hIconLarge;
 892             hres = pIcon->Extract(szBuf, index, &hIconLarge, &hIcon, (16 << 16) + 32);
 893             if (SUCCEEDED(hres)) {
 894                 if (getLargeIcon) {
 895                     fn_DestroyIcon((HICON)hIcon);
 896                     hIcon = hIconLarge;
 897                 } else {
 898                     fn_DestroyIcon((HICON)hIconLarge);
 899                 }
 900             }



 901         }
 902         pIcon->Release();
 903     }
 904     return (jlong)hIcon;
 905 }
 906 
 907 
 908 /*
 909  * Class:     sun_awt_shell_Win32ShellFolder2
 910  * Method:    disposeIcon
 911  * Signature: (J)V
 912  */
 913 JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolder2_disposeIcon
 914     (JNIEnv* env, jclass cls, jlong hicon)
 915 {
 916     fn_DestroyIcon((HICON)hicon);
 917 }
 918 
 919 /*
 920  * Class:     sun_awt_shell_Win32ShellFolder2


1264 
1265     HRESULT hr = pParentIShellFolder->CompareIDs(
1266                                             (UINT) columnIdx,
1267                                             (LPCITEMIDLIST) pIDL1,
1268                                             (LPCITEMIDLIST) pIDL2);
1269     if (SUCCEEDED (hr)) {
1270         return (jint) (short) HRESULT_CODE(hr);
1271     }
1272 
1273     return 0;
1274 }
1275 
1276 /*
1277  * Class:     sun_awt_shell_Win32ShellFolder2
1278  * Method:    loadKnownFolders
1279  * Signature: (V)[BLsun/awt/shell/Win32ShellFolder2$KnownfolderDefenition;
1280  */
1281 JNIEXPORT jobjectArray JNICALL Java_sun_awt_shell_Win32ShellFolder2_loadKnownFolders
1282     (JNIEnv* env, jclass cls )
1283 {
1284     CoInitialize(NULL);
1285     IKnownFolderManager* pkfm = NULL;
1286     HRESULT hr = CoCreateInstance(CLSID_KnownFolderManager, NULL,
1287                                 CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pkfm));
1288     if (!SUCCEEDED(hr)) return NULL;
1289 
1290     TRY;
1291 
1292     jclass cl = env->FindClass("sun/awt/shell/Win32ShellFolder2$KnownFolderDefinition");
1293     CHECK_NULL_RETURN(cl, NULL);
1294     DEFINE_FIELD_ID(field_guid, cl, "guid", "Ljava/lang/String;")
1295     DEFINE_FIELD_ID(field_name, cl, "name", "Ljava/lang/String;");
1296     DEFINE_FIELD_ID(field_description, cl, "description", "Ljava/lang/String;");
1297     DEFINE_FIELD_ID(field_parent, cl, "parent", "Ljava/lang/String;");
1298     DEFINE_FIELD_ID(field_relativePath, cl, "relativePath", "Ljava/lang/String;");
1299     DEFINE_FIELD_ID(field_parsingName, cl, "parsingName", "Ljava/lang/String;");
1300     DEFINE_FIELD_ID(field_tooltip, cl, "tooltip", "Ljava/lang/String;");
1301     DEFINE_FIELD_ID(field_localizedName, cl, "localizedName", "Ljava/lang/String;");
1302     DEFINE_FIELD_ID(field_icon, cl, "icon", "Ljava/lang/String;");
1303     DEFINE_FIELD_ID(field_security, cl, "security", "Ljava/lang/String;");
1304     DEFINE_FIELD_ID(field_path, cl, "path", "Ljava/lang/String;");




 848     LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL;
 849     if (pIShellIcon == NULL && pidl == NULL) {
 850         return 0;
 851     }
 852 
 853     INT index = -1;
 854 
 855     HRESULT hres;
 856     // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp
 857     if (pIShellIcon != NULL) {
 858         hres = pIShellIcon->GetIconOf(pidl, GIL_FORSHELL, &index);
 859     }
 860 
 861     return (jint)index;
 862 }
 863 
 864 
 865 /*
 866  * Class:     sun_awt_shell_Win32ShellFolder2
 867  * Method:    extractIcon
 868  * Signature: (JJZZ)J
 869  */
 870 JNIEXPORT jlong JNICALL Java_sun_awt_shell_Win32ShellFolder2_extractIcon
 871     (JNIEnv* env, jclass cls, jlong pIShellFolderL, jlong relativePIDL,
 872                                 jboolean getLargeIcon, jboolean getDefaultIcon)
 873 {
 874     IShellFolder* pIShellFolder = (IShellFolder*)pIShellFolderL;
 875     LPITEMIDLIST pidl = (LPITEMIDLIST)relativePIDL;
 876     if (pIShellFolder == NULL || pidl == NULL) {
 877         return 0;
 878     }
 879 
 880     HICON hIcon = NULL;
 881 
 882     HRESULT hres;
 883     IExtractIconW* pIcon;
 884     hres = pIShellFolder->GetUIObjectOf(NULL, 1, const_cast<LPCITEMIDLIST*>(&pidl),
 885                                         IID_IExtractIconW, NULL, (void**)&pIcon);
 886     if (SUCCEEDED(hres)) {
 887         WCHAR szBuf[MAX_PATH];
 888         INT index;
 889         UINT flags;
 890         UINT uFlags = getDefaultIcon ? GIL_DEFAULTICON : GIL_FORSHELL | GIL_ASYNC;
 891         hres = pIcon->GetIconLocation(uFlags, szBuf, MAX_PATH, &index, &flags);
 892         if (SUCCEEDED(hres)) {
 893             HICON hIconLarge;
 894             hres = pIcon->Extract(szBuf, index, &hIconLarge, &hIcon, (16 << 16) + 32);
 895             if (SUCCEEDED(hres)) {
 896                 if (getLargeIcon) {
 897                     fn_DestroyIcon((HICON)hIcon);
 898                     hIcon = hIconLarge;
 899                 } else {
 900                     fn_DestroyIcon((HICON)hIconLarge);
 901                 }
 902             }
 903         } else if (hres == E_PENDING) {
 904             pIcon->Release();
 905             return E_PENDING;
 906         }
 907         pIcon->Release();
 908     }
 909     return (jlong)hIcon;
 910 }
 911 
 912 
 913 /*
 914  * Class:     sun_awt_shell_Win32ShellFolder2
 915  * Method:    disposeIcon
 916  * Signature: (J)V
 917  */
 918 JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolder2_disposeIcon
 919     (JNIEnv* env, jclass cls, jlong hicon)
 920 {
 921     fn_DestroyIcon((HICON)hicon);
 922 }
 923 
 924 /*
 925  * Class:     sun_awt_shell_Win32ShellFolder2


1269 
1270     HRESULT hr = pParentIShellFolder->CompareIDs(
1271                                             (UINT) columnIdx,
1272                                             (LPCITEMIDLIST) pIDL1,
1273                                             (LPCITEMIDLIST) pIDL2);
1274     if (SUCCEEDED (hr)) {
1275         return (jint) (short) HRESULT_CODE(hr);
1276     }
1277 
1278     return 0;
1279 }
1280 
1281 /*
1282  * Class:     sun_awt_shell_Win32ShellFolder2
1283  * Method:    loadKnownFolders
1284  * Signature: (V)[BLsun/awt/shell/Win32ShellFolder2$KnownfolderDefenition;
1285  */
1286 JNIEXPORT jobjectArray JNICALL Java_sun_awt_shell_Win32ShellFolder2_loadKnownFolders
1287     (JNIEnv* env, jclass cls )
1288 {

1289     IKnownFolderManager* pkfm = NULL;
1290     HRESULT hr = CoCreateInstance(CLSID_KnownFolderManager, NULL,
1291                                 CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pkfm));
1292     if (!SUCCEEDED(hr)) return NULL;
1293 
1294     TRY;
1295 
1296     jclass cl = env->FindClass("sun/awt/shell/Win32ShellFolder2$KnownFolderDefinition");
1297     CHECK_NULL_RETURN(cl, NULL);
1298     DEFINE_FIELD_ID(field_guid, cl, "guid", "Ljava/lang/String;")
1299     DEFINE_FIELD_ID(field_name, cl, "name", "Ljava/lang/String;");
1300     DEFINE_FIELD_ID(field_description, cl, "description", "Ljava/lang/String;");
1301     DEFINE_FIELD_ID(field_parent, cl, "parent", "Ljava/lang/String;");
1302     DEFINE_FIELD_ID(field_relativePath, cl, "relativePath", "Ljava/lang/String;");
1303     DEFINE_FIELD_ID(field_parsingName, cl, "parsingName", "Ljava/lang/String;");
1304     DEFINE_FIELD_ID(field_tooltip, cl, "tooltip", "Ljava/lang/String;");
1305     DEFINE_FIELD_ID(field_localizedName, cl, "localizedName", "Ljava/lang/String;");
1306     DEFINE_FIELD_ID(field_icon, cl, "icon", "Ljava/lang/String;");
1307     DEFINE_FIELD_ID(field_security, cl, "security", "Ljava/lang/String;");
1308     DEFINE_FIELD_ID(field_path, cl, "path", "Ljava/lang/String;");


< prev index next >