BPython:
[blender-staging.git] / source / blender / python / BPY_menus.c
index a9210f73933b97d60a3f4bc7d63d429c0fc2a2d6..cfe10723329915ac97044a32afa53b21fdadf75c 100644 (file)
@@ -74,19 +74,35 @@ static int DEBUG;
 BPyMenu *BPyMenuTable[PYMENU_TOTAL];
 
 /* we can't be sure if BLI_gethome() returned a path
- * with '.blender' appended or not, so: */
-static char *bpymenu_gethome()
+ * with '.blender' appended or not.  Besides, this function now
+ * either returns userhome/.blender (if it exists) or
+ * blenderInstallDir/.blender/ otherwise */
+char *bpymenu_gethome()
 {
        static char homedir[FILE_MAXDIR];
+       char bprogdir[FILE_MAXDIR];
        char *s;
+       int i;
 
-       if (homedir[0] != '\0') return homedir;
+       if (homedir[0] != '\0') return homedir; /* no need to search twice */
 
        s = BLI_gethome();
 
        if (strstr(s, ".blender")) PyOS_snprintf(homedir, FILE_MAXDIR, s);
        else BLI_make_file_string ("/", homedir, s, ".blender/");
 
+       /* if userhome/.blender/ exists, return it */
+       if (BLI_exists(homedir)) return homedir;
+
+       /* otherwise, use argv[0] (bprogname) to get .blender/ in
+        * Blender's installation dir */
+       s = BLI_last_slash(bprogname);
+
+       i = s - bprogname + 1;
+
+       PyOS_snprintf(bprogdir, i, bprogname);
+       BLI_make_file_string ("/", homedir, bprogdir, ".blender/");
+
        return homedir;
 }
 
@@ -195,6 +211,26 @@ static BPyMenu *bpymenu_FindEntry (short group, char *name)
        return NULL;
 }
 
+/* BPyMenu_GetEntry:
+ * given a group and a position, return the entry in that position from
+ * that group.
+*/ 
+BPyMenu *BPyMenu_GetEntry (short group, short pos)
+{
+       BPyMenu *pym = NULL;
+
+       if ((group < 0) || (group >= PYMENU_TOTAL)) return NULL;
+
+       pym = BPyMenuTable[group];
+
+       while (pos--) {
+               if (pym) pym = pym->next;
+               else break;
+       }
+
+       return pym; /* found entry or NULL */
+}
+       
 static void bpymenu_set_tooltip (BPyMenu *pymenu, char *tip)
 {
        if (!pymenu) return;