diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c index 43e91ea6bb5..7f5e2851070 100644 --- a/source/blender/editors/space_action/action_header.c +++ b/source/blender/editors/space_action/action_header.c @@ -385,10 +385,7 @@ void action_header_buttons(const bContext *C, ARegion *ar) uiBlockEndAlign(block); xco += 30; } - else if (saction->mode == SACTCONT_ACTION) { // not too appropriate for shapekeys atm... - /* NAME ETC */ - //uiClearButLock(); - + else if (saction->mode == SACTCONT_ACTION) { /* NAME ETC */ xco= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)saction->action, ID_AC, &saction->pin, xco, yco, saction_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_DELETE|UI_ID_FAKE_USER|UI_ID_ALONE|UI_ID_PIN); @@ -396,14 +393,6 @@ void action_header_buttons(const bContext *C, ARegion *ar) xco += 8; } - /* COPY PASTE */ - uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "ACT_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Copies the selected keyframes to the buffer."); - xco += XIC; - uiDefIconButO(block, BUT, "ACT_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); - uiBlockEndAlign(block); - xco += (XIC + 8); - /* draw AUTOSNAP */ if (saction->mode != SACTCONT_GPENCIL) { if (saction->flag & SACTION_DRAWTIME) { @@ -422,12 +411,13 @@ void action_header_buttons(const bContext *C, ARegion *ar) xco += (70 + 8); } - /* draw LOCK */ - // XXX this feature is probably not relevant anymore! - //uiDefIconButS(block, ICONTOG, B_LOCK, ICON_UNLOCKED, xco, yco, XIC, YIC, - // &(saction->lock), 0, 0, 0, 0, - // "Updates other affected window spaces automatically " - // "to reflect changes in real time"); + /* COPY PASTE */ + uiBlockBeginAlign(block); + uiDefIconButO(block, BUT, "ACT_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, "Copies the selected keyframes to the buffer."); + xco += XIC; + uiDefIconButO(block, BUT, "ACT_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, "Pastes the keyframes from the buffer into the selected channels."); + uiBlockEndAlign(block); + xco += (XIC + 8); } /* always as last */ diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c index 1b8b579326f..4369c321c5e 100644 --- a/source/blender/editors/space_graph/graph_header.c +++ b/source/blender/editors/space_graph/graph_header.c @@ -314,13 +314,6 @@ void graph_header_buttons(const bContext *C, ARegion *ar) xco += 6*XIC + 15; } - /* copy + paste */ - uiBlockBeginAlign(block); - uiDefIconButO(block, BUT, "GRAPH_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer"); - uiDefIconButO(block, BUT, "GRAPH_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer"); - uiBlockEndAlign(block); - xco += (XIC + 8); - /* auto-snap selector */ if (sipo->flag & SIPO_DRAWTIME) { uiDefButS(block, MENU, B_REDR, @@ -336,6 +329,13 @@ void graph_header_buttons(const bContext *C, ARegion *ar) } xco += 98; + /* copy + paste */ + uiBlockBeginAlign(block); + uiDefIconButO(block, BUT, "GRAPH_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer"); + uiDefIconButO(block, BUT, "GRAPH_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer"); + uiBlockEndAlign(block); + xco += (XIC + 8); + /* ghost curves */ // XXX these icons need to be changed if (sipo->ghostCurves.first) diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index cb1cd9e3ed8..35381e4612a 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -457,10 +457,14 @@ typedef struct NlaStrip { float blendin, blendout; /* strip blending length (only used when there are no F-Curves) */ short blendmode; /* strip blending mode (layer-based mixing) */ - short extendmode; /* strip extrapolation mode (time-based mixing) */ - short flag; /* settings */ + short extendmode; /* strip extrapolation mode (time-based mixing) */ + short pad1; + short type; /* type of NLA strip */ + + int flag; /* settings */ + int pad2; } NlaStrip; /* NLA Strip Blending Mode */ @@ -498,21 +502,23 @@ typedef enum eNlaStrip_Flag { NLASTRIP_FLAG_USR_INFLUENCE = (1<<5), NLASTRIP_FLAG_USR_TIME = (1<<6), + /* NLA strip length is synced to the length of the referenced action */ + NLASTRIP_FLAG_SYNC_LENGTH = (1<<9), + /* playback flags (may be overriden by F-Curves) */ /* NLA strip blendin/out values are set automatically based on overlaps */ NLASTRIP_FLAG_AUTO_BLENDS = (1<<10), /* NLA strip is played back in reverse order */ NLASTRIP_FLAG_REVERSE = (1<<11), /* NLA strip is muted (i.e. doesn't contribute in any way) */ - // TODO: this overlaps a lot with the functionality in track NLASTRIP_FLAG_MUTED = (1<<12), - /* NLA strip length is synced to the length of the referenced action */ - NLASTRIP_FLAG_SYNC_LENGTH = (1<<13), + /* NLA Strip is played back in 'ping-pong' style */ + NLASTRIP_FLAG_MIRROR = (1<<13), /* temporary editing flags */ /* NLA-Strip is really just a temporary meta used to facilitate easier transform code */ - NLASTRIP_FLAG_TEMP_META = (1<<14), - NLASTRIP_FLAG_EDIT_TOUCHED = (1<<15), + NLASTRIP_FLAG_TEMP_META = (1<<30), + NLASTRIP_FLAG_EDIT_TOUCHED = (1<<31), } eNlaStrip_Flag; /* NLA Strip Type */