Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-03-07 12:33:57 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-07 12:34:10 +0300
commit219e2f976d077c16c28d72a2f6763c01230c5bf8 (patch)
treeba40e7f79947dd11cae4a08ed813f920c00fbfd7 /source/blender/editors/animation/anim_markers.c
parente52e0c83d717b46afcce36b23e3f6b32f5cb535b (diff)
Tool System: use set/add/subtract for all box select operators
Diffstat (limited to 'source/blender/editors/animation/anim_markers.c')
-rw-r--r--source/blender/editors/animation/anim_markers.c72
1 files changed, 36 insertions, 36 deletions
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index 5d85a78905b..81f555630eb 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -288,6 +288,28 @@ void ED_markers_make_cfra_list(ListBase *markers, ListBase *lb, short only_sel)
add_marker_to_cfra_elem(lb, marker, only_sel);
}
+void ED_markers_deselect_all(ListBase *markers, int action)
+{
+ if (action == SEL_TOGGLE) {
+ action = ED_markers_get_first_selected(markers) ? SEL_DESELECT : SEL_SELECT;
+ }
+
+ for (TimeMarker *marker = markers->first; marker; marker = marker->next) {
+ if (action == SEL_SELECT) {
+ marker->flag |= SELECT;
+ }
+ else if (action == SEL_DESELECT) {
+ marker->flag &= ~SELECT;
+ }
+ else if (action == SEL_INVERT) {
+ marker->flag ^= SELECT;
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+}
+
/* --------------------------------- */
/* Get the first selected marker */
@@ -1279,9 +1301,6 @@ static int ed_marker_box_select_exec(bContext *C, wmOperator *op)
{
View2D *v2d = UI_view2d_fromcontext(C);
ListBase *markers = ED_context_get_markers(C);
- TimeMarker *marker;
- bool select = !RNA_boolean_get(op->ptr, "deselect");
- bool extend = RNA_boolean_get(op->ptr, "extend");
rctf rect;
WM_operator_properties_border_to_rctf(op, &rect);
@@ -1290,18 +1309,15 @@ static int ed_marker_box_select_exec(bContext *C, wmOperator *op)
if (markers == NULL)
return 0;
- /* XXX marker context */
- for (marker = markers->first; marker; marker = marker->next) {
+ const eSelectOp sel_op = RNA_enum_get(op->ptr, "mode");
+ const bool select = (sel_op != SEL_OP_SUB);
+ if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
+ ED_markers_deselect_all(markers, SEL_DESELECT);
+ }
+
+ for (TimeMarker *marker = markers->first; marker; marker = marker->next) {
if (BLI_rctf_isect_x(&rect, marker->frame)) {
- if (select) {
- marker->flag |= SELECT;
- }
- else {
- marker->flag &= ~SELECT;
- }
- }
- else if (!extend) {
- marker->flag &= ~SELECT;
+ SET_FLAG_FROM_TEST(marker->flag, select, SELECT);
}
}
@@ -1334,8 +1350,9 @@ static void MARKER_OT_select_box(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- /* rna */
- WM_operator_properties_gesture_box_select(ot);
+ /* properties */
+ WM_operator_properties_gesture_box(ot);
+ WM_operator_properties_select_operation_simple(ot);
}
/* *********************** (de)select all ***************** */
@@ -1343,29 +1360,12 @@ static void MARKER_OT_select_box(wmOperatorType *ot)
static int ed_marker_select_all_exec(bContext *C, wmOperator *op)
{
ListBase *markers = ED_context_get_markers(C);
- TimeMarker *marker;
- int action = RNA_enum_get(op->ptr, "action");
-
- if (markers == NULL)
+ if (markers == NULL) {
return OPERATOR_CANCELLED;
-
- if (action == SEL_TOGGLE) {
- action = (ED_markers_get_first_selected(markers) != NULL) ? SEL_DESELECT : SEL_SELECT;
}
- for (marker = markers->first; marker; marker = marker->next) {
- switch (action) {
- case SEL_SELECT:
- marker->flag |= SELECT;
- break;
- case SEL_DESELECT:
- marker->flag &= ~SELECT;
- break;
- case SEL_INVERT:
- marker->flag ^= SELECT;
- break;
- }
- }
+ int action = RNA_enum_get(op->ptr, "action");
+ ED_markers_deselect_all(markers, action);
WM_event_add_notifier(C, NC_SCENE | ND_MARKERS, NULL);
WM_event_add_notifier(C, NC_ANIMATION | ND_MARKERS, NULL);