2.5 - Action Editor
authorJoshua Leung <aligorith@gmail.com>
Tue, 25 Aug 2009 04:32:40 +0000 (04:32 +0000)
committerJoshua Leung <aligorith@gmail.com>
Tue, 25 Aug 2009 04:32:40 +0000 (04:32 +0000)
New Actions can now be added again from the Action Editor.

There are no guarantees that this works totally safely yet (reference counting may be quite off), so you've been warned.

source/blender/editors/interface/interface_utils.c
source/blender/editors/space_action/action_header.c

index b5cfbe19466e73297761c0e4a3332b206b0d24f0..997ac8b78c64dcc43ccd1d5e95553874ed5d7804 100644 (file)
@@ -444,6 +444,20 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code,
                        uiBlockClearButLock(block);
                }
                
+               /* add button */
+               if(events & UI_ID_ADD_NEW) {
+                       uiBlockSetButLock(block, (events & UI_ID_PIN) && *pin_p, "Can't unlink pinned data");
+                       if(parid && parid->lib);
+                       else {
+                               dup_params= MEM_dupallocN(params);
+                               but= uiDefIconBut(block, BUT, 0, ICON_ZOOMIN, x,y,DEF_ICON_BUT_WIDTH,DEF_BUT_HEIGHT, &dup_params->browsenr, params->browsenr, 32767.0, 0, 0, "Add new data block");
+                               uiButSetNFunc(but, idpoin_cb, MEM_dupallocN(params), SET_INT_IN_POINTER(UI_ID_ADD_NEW));
+                               x+= DEF_ICON_BUT_WIDTH;
+                       }
+                       
+                       uiBlockClearButLock(block);
+               }
+               
                /* delete button */
                if(events & UI_ID_DELETE) {
                        uiBlockSetButLock(block, (events & UI_ID_PIN) && *pin_p, "Can't unlink pinned data");
index 33a97b5a80ab720695845c979424349d7b650566..e2a725164c985127646459710781248c38abd9aa 100644 (file)
@@ -43,6 +43,7 @@
 #include "BLI_blenlib.h"
 
 #include "BKE_animsys.h"
+#include "BKE_action.h"
 #include "BKE_context.h"
 #include "BKE_screen.h"
 
@@ -272,6 +273,7 @@ static void saction_idpoin_handle(bContext *C, ID *id, int event)
                                /* set action */
                                printf("\tset action \n");
                                adt->action= saction->action;
+                               adt->action->id.us++;
                        }
                        
                        ED_area_tag_redraw(CTX_wm_area(C));
@@ -282,7 +284,14 @@ static void saction_idpoin_handle(bContext *C, ID *id, int event)
                        break;
                case UI_ID_ADD_NEW:
                        printf("actedit addnew \n");
-                       /* XXX not implemented */
+                       if (saction->pin == 0) {
+                               AnimData *adt= BKE_id_add_animdata(&obact->id); /* this only adds if non-existant */
+                               
+                               /* set new action */
+                               // XXX need to restore behaviour to copy old actions...
+                               printf("\tset new action \n");
+                               adt->action= saction->action= add_empty_action("Action");
+                       }
                        break;
                case UI_ID_OPEN:
                        printf("actedit open \n");