better management of pwd on set of icon property 89/14389/1
Antoine ELIAS [Thu, 10 Apr 2014 13:36:40 +0000 (15:36 +0200)]
Change-Id: I1bdb054735b28e9a1fdbdae6a38598a696f9fda6

scilab/modules/commons/src/jni/FindIconHelper.cpp
scilab/modules/commons/src/jni/FindIconHelper.hxx
scilab/modules/commons/src/jni/FindIconHelper.xml
scilab/modules/gui/src/cpp/SetUicontrolIcon.cpp

index b032b8c..8fedec0 100644 (file)
@@ -1,6 +1,6 @@
 #include "FindIconHelper.hxx"
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file FindIconHelper.xml
+giws --disable-return-size-array --output-dir src/jni --throws-exception-on-error --description-file src\jni\FindIconHelper.xml
 */
 /*
 
@@ -104,6 +104,7 @@ curEnv->DeleteLocalRef(localInstance);
 
                 /* Methods ID set to NULL */
 voidaddThemePathjstringjava_lang_StringID=NULL;
+jstringfindIconjstringjava_lang_StringjbooleanbooleanID=NULL;
 
 
 }
@@ -127,6 +128,7 @@ throw GiwsException::JniObjectCreationException(curEnv, this->className());
         }
         /* Methods ID set to NULL */
         voidaddThemePathjstringjava_lang_StringID=NULL;
+jstringfindIconjstringjava_lang_StringjbooleanbooleanID=NULL;
 
 
 }
@@ -174,4 +176,49 @@ throw GiwsException::JniCallMethodException(curEnv);
 }
 }
 
+char* FindIconHelper::findIcon (JavaVM * jvm_, char const* path, bool defaultValue){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jstringfindIconjstringjava_lang_StringjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "findIcon", "(Ljava/lang/String;Z)Ljava/lang/String;" ) ;
+if (jstringfindIconjstringjava_lang_StringjbooleanbooleanID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "findIcon");
+}
+
+jstring path_ = curEnv->NewStringUTF( path );
+if (path != NULL && path_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jboolean defaultValue_ = (static_cast<bool>(defaultValue) ? JNI_TRUE : JNI_FALSE);
+
+                        jstring res =  static_cast<jstring>( curEnv->CallStaticObjectMethod(cls, jstringfindIconjstringjava_lang_StringjbooleanbooleanID ,path_, defaultValue_));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}if (res != NULL) { 
+
+const char *tempString = curEnv->GetStringUTFChars(res, 0);
+char * myStringBuffer = new char[strlen(tempString) + 1];
+strcpy(myStringBuffer, tempString);
+curEnv->ReleaseStringUTFChars(res, tempString);
+curEnv->DeleteLocalRef(res);
+curEnv->DeleteLocalRef(path_);
+if (curEnv->ExceptionCheck()) {
+delete[] myStringBuffer;
+                                throw GiwsException::JniCallMethodException(curEnv);
+}
+return myStringBuffer;
+ } else { 
+curEnv->DeleteLocalRef(res);
+return NULL;
+}
+}
+
 }
index 58d6c30..04e71b3 100644 (file)
@@ -1,5 +1,5 @@
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file FindIconHelper.xml
+giws --disable-return-size-array --output-dir src/jni --throws-exception-on-error --description-file src\jni\FindIconHelper.xml
 */
 /*
 
@@ -77,6 +77,7 @@ JavaVM * jvm;
 
 protected:
 jmethodID voidaddThemePathjstringjava_lang_StringID; // cache method id
+jmethodID jstringfindIconjstringjava_lang_StringjbooleanbooleanID; // cache method id
 
 
 
@@ -138,6 +139,8 @@ void endSynchronize();
 // Methods
 static void addThemePath(JavaVM * jvm_, char const* path);
 
+static char* findIcon(JavaVM * jvm_, char const* path, bool defaultValue);
+
 
                         /**
                         * Get class name to use for static methods
index a894fa0..a9b2256 100644 (file)
@@ -15,5 +15,9 @@
         <method name="addThemePath" returnType="void" modifier="static">
             <parameter name="path" type="String"/>
         </method>
+        <method name="findIcon" returnType="String" modifier="static">
+            <parameter name="path" type="String"/>
+            <parameter name="defaultValue" type="boolean"/>
+        </method>
     </object>
 </package>
index 07cf43b..2fc544f 100644 (file)
@@ -34,16 +34,28 @@ int SetUicontrolIcon(void* _pvCtx, int iObjUID, void* _pvData, int valueType, in
 
     //get file path
     expandedpath = expandPathVariable((char*)_pvData);
-    get_full_path(absolutepath, expandedpath, 4096);
 
-    //it is a absolute path, put it only in model
-    if (strcmp(expandedpath, absolutepath))
+    if (((char*)_pvData)[0] != '\0')
     {
-        int iErr = 0;
-        char* pwd = scigetcwd(&iErr);
+        char* iconPath = org_scilab_modules_commons_gui::FindIconHelper::findIcon(getScilabJavaVM(), (char*)_pvData, 0);
+        if (iconPath == NULL)
+        {
+            get_full_path(absolutepath, expandedpath, 4096);
 
-        //add it to FindIconHelper java class
-        org_scilab_modules_commons_gui::FindIconHelper::addThemePath(getScilabJavaVM(), pwd);
+            //it is a absolute path, put it only in model
+            if (strcmp(expandedpath, absolutepath))
+            {
+                int iErr = 0;
+                char* pwd = scigetcwd(&iErr);
+
+                //add it to FindIconHelper java class
+                org_scilab_modules_commons_gui::FindIconHelper::addThemePath(getScilabJavaVM(), pwd);
+            }
+        }
+        else
+        {
+            free(iconPath);
+        }
     }
 
     strcpy(absolutepath, expandedpath);