diff options
author | Matt Ebb <matt@mke3.net> | 2005-11-04 14:23:22 +0300 |
---|---|---|
committer | Matt Ebb <matt@mke3.net> | 2005-11-04 14:23:22 +0300 |
commit | 1f2a7efd7071681c3d21df6fbf3c1031dc3638fb (patch) | |
tree | 49868c69e37f8d4ea0587d37871de4e39e0e57de /source/blender/src/edittime.c | |
parent | 8a0befc3fd0e1a3a05c5c9e066f52c17059b146f (diff) |
Small thing, just filling a gap that we really need here -
Added duplication of markers in the timeline with Shift D
(in the frame menu too)
Diffstat (limited to 'source/blender/src/edittime.c')
-rw-r--r-- | source/blender/src/edittime.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/source/blender/src/edittime.c b/source/blender/src/edittime.c index 09515611cce..2e5aa228651 100644 --- a/source/blender/src/edittime.c +++ b/source/blender/src/edittime.c @@ -100,6 +100,8 @@ void add_timeline_marker(int frame) marker->flag= SELECT; marker->frame= frame; BLI_addtail(&(G.scene->markers), marker); + + BIF_undo_push("Add Timeline Marker"); } /* remove TimeMarker */ @@ -112,6 +114,8 @@ void remove_timeline_marker(void) BLI_freelinkN(&G.scene->markers, marker); } } + + BIF_undo_push("Remove Timeline Marker"); } /* rename first selected TimeMarker */ @@ -128,8 +132,56 @@ void rename_timeline_marker(void) break; } } + + BIF_undo_push("Rename Timeline Marker"); } +/* duplicate selected TimeMarkers */ +void duplicate_timeline_marker(void) +{ + TimeMarker *marker, *selmarker, *newmarker; + ListBase selmarkers; + char name[64]; + + selmarkers.first= selmarkers.last= NULL; + + /* make a temporary list of the selected markers to go through, so we don't do + * anything stupid to the ones in the scene */ + for(marker= G.scene->markers.first; marker; marker= marker->next) { + if(marker->flag & SELECT){ + marker->flag &= ~SELECT; + + selmarker = MEM_callocN(sizeof(TimeMarker), "TimeMarker"); + selmarker->flag= SELECT; + selmarker->frame= marker->frame; + BLI_strncpy(selmarker->name, marker->name, sizeof(marker->name)); + + BLI_addtail(&selmarkers, selmarker); + } + } + + /* go through our temporary list of markers, duplicate them, + * and add them back to the scene, selected, ready for grabbing */ + for(marker= selmarkers.first; marker; marker= marker->next) { + if(marker->flag & SELECT){ + /* make a new marker at the same spot */ + newmarker = MEM_callocN(sizeof(TimeMarker), "TimeMarker"); + newmarker->frame= marker->frame; + BLI_strncpy(newmarker->name, marker->name, sizeof(marker->name)); + /* select it */ + newmarker->flag= SELECT; + + BLI_addtail(&(G.scene->markers), newmarker); + + } + } + + BLI_freelistN(&selmarkers); + + timeline_grab('g', 0); +} + + static int find_nearest_marker(float dx) { @@ -588,6 +640,10 @@ void winqreadtimespace(ScrArea *sa, void *spacedata, BWinEvent *evt) select_timeline_markers(); doredraw= 1; break; + case DKEY: + if(G.qual==LR_SHIFTKEY) + duplicate_timeline_marker(); + break; case CKEY: timeline_frame_to_center(); break; |