forked from bartvdbraak/blender
New operators for clip editor's curve view:
- Select All operator for selecting markers - Disable selected markers operator
This commit is contained in:
parent
a71936196a
commit
fe131db70b
@ -42,6 +42,7 @@
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_movieclip.h"
|
||||
#include "BKE_tracking.h"
|
||||
#include "BKE_depsgraph.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
@ -83,13 +84,13 @@ static void toggle_selection_cb(void *userdata, MovieTrackingMarker *marker)
|
||||
|
||||
switch(data->action) {
|
||||
case SEL_SELECT:
|
||||
marker->flag|= (MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y);
|
||||
marker->flag|= MARKER_GRAPH_SEL;
|
||||
break;
|
||||
case SEL_DESELECT:
|
||||
marker->flag&= ~(MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y);
|
||||
marker->flag&= ~MARKER_GRAPH_SEL;
|
||||
break;
|
||||
case SEL_INVERT:
|
||||
marker->flag^= (MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y);
|
||||
marker->flag^= MARKER_GRAPH_SEL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -333,7 +334,7 @@ static void border_select_cb(void *userdata, MovieTrackingTrack *UNUSED(track),
|
||||
data->change = TRUE;
|
||||
}
|
||||
else if (!data->extend) {
|
||||
marker->flag&= ~(MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y);
|
||||
marker->flag&= ~MARKER_GRAPH_SEL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -391,6 +392,72 @@ void CLIP_OT_graph_select_border(wmOperatorType *ot)
|
||||
WM_operator_properties_gesture_border(ot, TRUE);
|
||||
}
|
||||
|
||||
/********************** select all operator *********************/
|
||||
|
||||
static int graph_select_all_markers_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track= BKE_tracking_active_track(tracking);
|
||||
MovieTrackingMarker *marker;
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
int a;
|
||||
|
||||
if (!act_track)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
if (action == SEL_TOGGLE) {
|
||||
action = SEL_SELECT;
|
||||
|
||||
for (a = 0; a < act_track->markersnr; a++) {
|
||||
marker = &act_track->markers[a];
|
||||
|
||||
if (marker->flag & MARKER_GRAPH_SEL) {
|
||||
action = SEL_DESELECT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (a = 0; a < act_track->markersnr; a++) {
|
||||
marker = &act_track->markers[a];
|
||||
|
||||
switch (action) {
|
||||
case SEL_SELECT:
|
||||
marker->flag |= MARKER_GRAPH_SEL;
|
||||
break;
|
||||
case SEL_DESELECT:
|
||||
marker->flag &= ~MARKER_GRAPH_SEL;
|
||||
break;
|
||||
case SEL_INVERT:
|
||||
marker->flag ^= MARKER_GRAPH_SEL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CLIP_OT_graph_select_all_markers(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name = "Select or Deselect All Markers";
|
||||
ot->description = "Change selection of all markers of active track";
|
||||
ot->idname = "CLIP_OT_graph_select_all_markers";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec = graph_select_all_markers_exec;
|
||||
ot->poll = ED_space_clip_graph_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
WM_operator_properties_select_all(ot);
|
||||
}
|
||||
|
||||
/******************** delete curve operator ********************/
|
||||
|
||||
static int delete_curve_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
@ -439,7 +506,7 @@ static int delete_knot_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
while(a<act_track->markersnr) {
|
||||
MovieTrackingMarker *marker= &act_track->markers[a];
|
||||
|
||||
if(marker->flag & (MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y))
|
||||
if(marker->flag & MARKER_GRAPH_SEL)
|
||||
clip_delete_marker(C, clip, tracksbase, act_track, marker);
|
||||
else
|
||||
a++;
|
||||
@ -567,3 +634,63 @@ void CLIP_OT_graph_center_current_frame(wmOperatorType *ot)
|
||||
ot->exec = center_current_frame_exec;
|
||||
ot->poll = ED_space_clip_graph_poll;
|
||||
}
|
||||
|
||||
/********************** disable markers operator *********************/
|
||||
|
||||
static int graph_disable_markers_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_active_track(tracking);
|
||||
MovieTrackingMarker *marker;
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
int a;
|
||||
|
||||
if (!act_track || (act_track->flag & TRACK_LOCKED))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
for (a = 0; a < act_track->markersnr; a++) {
|
||||
marker = &act_track->markers[a];
|
||||
|
||||
if (marker->flag & MARKER_GRAPH_SEL) {
|
||||
if (action==0)
|
||||
marker->flag |= MARKER_DISABLED;
|
||||
else if(action==1)
|
||||
marker->flag &= ~MARKER_DISABLED;
|
||||
else
|
||||
marker->flag ^= MARKER_DISABLED;
|
||||
}
|
||||
}
|
||||
|
||||
DAG_id_tag_update(&clip->id, 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP|NA_EVALUATED, clip);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CLIP_OT_graph_disable_markers(wmOperatorType *ot)
|
||||
{
|
||||
static EnumPropertyItem actions_items[] = {
|
||||
{0, "DISABLE", 0, "Disable", "Disable selected markers"},
|
||||
{1, "ENABLE", 0, "Enable", "Enable selected markers"},
|
||||
{2, "TOGGLE", 0, "Toggle", "Toggle disabled flag for selected markers"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
/* identifiers */
|
||||
ot->name = "Disable Markers";
|
||||
ot->description = "Disable/enable selected markers";
|
||||
ot->idname = "CLIP_OT_graph_disable_markers";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec = graph_disable_markers_exec;
|
||||
ot->poll = ED_space_clip_graph_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_enum(ot->srna, "action", actions_items, 0, "Action", "Disable action to execute");
|
||||
}
|
||||
|
@ -59,10 +59,12 @@ void ED_clip_graph_center_current_frame(struct Scene *scene, struct ARegion *ar)
|
||||
|
||||
void CLIP_OT_graph_select(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_select_border(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_select_all_markers(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_delete_curve(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_delete_knot(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_view_all(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_center_current_frame(struct wmOperatorType *ot);
|
||||
void CLIP_OT_graph_disable_markers(struct wmOperatorType *ot);
|
||||
|
||||
/* clip_ops.c */
|
||||
void CLIP_OT_open(struct wmOperatorType *ot);
|
||||
|
@ -368,14 +368,6 @@ static void clip_operatortypes(void)
|
||||
|
||||
WM_operatortype_append(CLIP_OT_clean_tracks);
|
||||
|
||||
/* graph editing */
|
||||
WM_operatortype_append(CLIP_OT_graph_select);
|
||||
WM_operatortype_append(CLIP_OT_graph_select_border);
|
||||
WM_operatortype_append(CLIP_OT_graph_delete_curve);
|
||||
WM_operatortype_append(CLIP_OT_graph_delete_knot);
|
||||
WM_operatortype_append(CLIP_OT_graph_view_all);
|
||||
WM_operatortype_append(CLIP_OT_graph_center_current_frame);
|
||||
|
||||
/* object tracking */
|
||||
WM_operatortype_append(CLIP_OT_tracking_object_new);
|
||||
WM_operatortype_append(CLIP_OT_tracking_object_remove);
|
||||
@ -383,6 +375,22 @@ static void clip_operatortypes(void)
|
||||
/* clipboard */
|
||||
WM_operatortype_append(CLIP_OT_copy_tracks);
|
||||
WM_operatortype_append(CLIP_OT_paste_tracks);
|
||||
|
||||
/* ** clip_graph_ops.c ** */
|
||||
|
||||
/* graph editing */
|
||||
|
||||
/* selection */
|
||||
WM_operatortype_append(CLIP_OT_graph_select);
|
||||
WM_operatortype_append(CLIP_OT_graph_select_border);
|
||||
WM_operatortype_append(CLIP_OT_graph_select_all_markers);
|
||||
|
||||
WM_operatortype_append(CLIP_OT_graph_delete_curve);
|
||||
WM_operatortype_append(CLIP_OT_graph_delete_knot);
|
||||
WM_operatortype_append(CLIP_OT_graph_view_all);
|
||||
WM_operatortype_append(CLIP_OT_graph_center_current_frame);
|
||||
|
||||
WM_operatortype_append(CLIP_OT_graph_disable_markers);
|
||||
}
|
||||
|
||||
static void clip_keymap(struct wmKeyConfig *keyconf)
|
||||
@ -562,6 +570,11 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
|
||||
kmi = WM_keymap_add_item(keymap, "CLIP_OT_graph_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", TRUE);
|
||||
|
||||
kmi = WM_keymap_add_item(keymap, "CLIP_OT_graph_select_all_markers", AKEY, KM_PRESS, 0, 0);
|
||||
RNA_enum_set(kmi->ptr, "action", SEL_TOGGLE);
|
||||
kmi = WM_keymap_add_item(keymap, "CLIP_OT_graph_select_all_markers", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_enum_set(kmi->ptr, "action", SEL_INVERT);
|
||||
|
||||
WM_keymap_add_item(keymap, "CLIP_OT_graph_select_border", BKEY, KM_PRESS, 0, 0);
|
||||
|
||||
/* delete */
|
||||
@ -589,6 +602,10 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
|
||||
RNA_enum_set(kmi->ptr, "action", TRACK_CLEAR_ALL);
|
||||
RNA_boolean_set(kmi->ptr, "clear_active", TRUE);
|
||||
|
||||
/* tracks */
|
||||
kmi= WM_keymap_add_item(keymap, "CLIP_OT_graph_disable_markers", DKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
RNA_enum_set(kmi->ptr, "action", 2); /* toggle */
|
||||
|
||||
transform_keymap_for_space(keyconf, keymap, SPACE_CLIP);
|
||||
}
|
||||
|
||||
|
@ -218,6 +218,7 @@ enum {
|
||||
#define MARKER_TRACKED (1<<1)
|
||||
#define MARKER_GRAPH_SEL_X (1<<2)
|
||||
#define MARKER_GRAPH_SEL_Y (1<<3)
|
||||
#define MARKER_GRAPH_SEL (MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y)
|
||||
|
||||
/* MovieTrackingTrack->flag */
|
||||
#define TRACK_HAS_BUNDLE (1<<1)
|
||||
|
Loading…
Reference in New Issue
Block a user