edits to curve operator

- remove delete-all option (users can just select all and delete as with all other modes).
- remove CALLOC_STRUCT_N macro.
- CURVE_OT_delete define a dynamic enum rather then a custom invoke menu function.
This commit is contained in:
Campbell Barton 2013-08-29 03:14:36 +00:00
parent f8ecb789e7
commit f934581a78

@ -126,9 +126,6 @@ static void select_adjacent_cp(ListBase *editnurb, short next, const bool cont,
static void adduplicateflagNurb(Object *obedit, ListBase *newnurb, const short flag, const bool split); static void adduplicateflagNurb(Object *obedit, ListBase *newnurb, const short flag, const bool split);
static int curve_delete_selected(Object *obedit, const eCurveElem_Types type, const bool split); static int curve_delete_selected(Object *obedit, const eCurveElem_Types type, const bool split);
/* still need to eradicate a few :( */
#define CALLOC_STRUCT_N(x, y, name) (x *)MEM_callocN((y) * sizeof(x), name)
static float nurbcircle[8][2] = { static float nurbcircle[8][2] = {
{0.0, -1.0}, {-1.0, -1.0}, {-1.0, 0.0}, {-1.0, 1.0}, {0.0, -1.0}, {-1.0, -1.0}, {-1.0, 0.0}, {-1.0, 1.0},
{0.0, 1.0}, { 1.0, 1.0}, { 1.0, 0.0}, { 1.0, -1.0} {0.0, 1.0}, { 1.0, 1.0}, { 1.0, 0.0}, { 1.0, -1.0}
@ -6222,16 +6219,14 @@ static int curve_delete_selected(Object *obedit, eCurveElem_Types type, const bo
BKE_nurbList_free(nubase); BKE_nurbList_free(nubase);
BLI_movelisttolist(nubase, &newnurb); BLI_movelisttolist(nubase, &newnurb);
} }
else if (type == 2) { else {
cu->actnu = -1; BLI_assert(0);
keyIndex_delNurbList(editnurb, nubase);
BKE_nurbList_free(nubase);
} }
return OPERATOR_FINISHED; return OPERATOR_FINISHED;
} }
static int delete_exec(bContext *C, wmOperator *op) static int curve_delete_exec(bContext *C, wmOperator *op)
{ {
Object *obedit = CTX_data_edit_object(C); Object *obedit = CTX_data_edit_object(C);
eCurveElem_Types type = RNA_enum_get(op->ptr, "type"); eCurveElem_Types type = RNA_enum_get(op->ptr, "type");
@ -6249,37 +6244,41 @@ static int delete_exec(bContext *C, wmOperator *op)
return retval; return retval;
} }
static int delete_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) static EnumPropertyItem curve_delete_type_items[] = {
{ {CURVE_VERTEX, "VERTICES", 0, "Vertices", ""},
Object *obedit = CTX_data_edit_object(C); {CURVE_SEGMENT, "SEGMENT", 0, "Segments", ""},
uiPopupMenu *pup; {0, NULL, 0, NULL, NULL}
uiLayout *layout; };
static EnumPropertyItem *rna_curve_delete_type_itemf(bContext *C, PointerRNA *UNUSED(ptr),
PropertyRNA *UNUSED(prop), int *free)
{
Object *obedit;
EnumPropertyItem *item = NULL;
int totitem = 0;
if (!C) /* needed for docs and i18n tools */
return curve_delete_type_items;
obedit = CTX_data_edit_object(C);
if (obedit->type == OB_SURF) { if (obedit->type == OB_SURF) {
pup = uiPupMenuBegin(C, IFACE_("Delete"), ICON_NONE); RNA_enum_items_add_value(&item, &totitem, curve_delete_type_items, CURVE_VERTEX);
layout = uiPupMenuLayout(pup);
uiItemEnumO_ptr(layout, op->type, NULL, 0, "type", 0);
uiItemEnumO_ptr(layout, op->type, NULL, 0, "type", 2);
uiPupMenuEnd(C, pup);
} }
else { else {
pup = uiPupMenuBegin(C, IFACE_("Delete"), ICON_NONE); RNA_enum_items_add_value(&item, &totitem, curve_delete_type_items, CURVE_VERTEX);
layout = uiPupMenuLayout(pup); RNA_enum_items_add_value(&item, &totitem, curve_delete_type_items, CURVE_SEGMENT);
uiItemsEnumO(layout, op->type->idname, "type");
uiPupMenuEnd(C, pup);
} }
return OPERATOR_CANCELLED; RNA_enum_item_end(&item, &totitem);
*free = true;
return item;
} }
void CURVE_OT_delete(wmOperatorType *ot) void CURVE_OT_delete(wmOperatorType *ot)
{ {
static EnumPropertyItem type_items[] = { PropertyRNA *prop;
{CURVE_VERTEX, "VERTICES", 0, "Vertices", ""},
{CURVE_SEGMENT, "SEGMENT", 0, "Segments", ""},
{2, "ALL", 0, "All", ""},
{0, NULL, 0, NULL, NULL}
};
/* identifiers */ /* identifiers */
ot->name = "Delete"; ot->name = "Delete";
@ -6287,15 +6286,18 @@ void CURVE_OT_delete(wmOperatorType *ot)
ot->idname = "CURVE_OT_delete"; ot->idname = "CURVE_OT_delete";
/* api callbacks */ /* api callbacks */
ot->exec = delete_exec; ot->exec = curve_delete_exec;
ot->invoke = delete_invoke; ot->invoke = WM_menu_invoke;
ot->poll = ED_operator_editsurfcurve; ot->poll = ED_operator_editsurfcurve;
/* flags */ /* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */ /* properties */
RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "Which elements to delete"); prop = RNA_def_enum(ot->srna, "type", curve_delete_type_items, 0, "Type", "Which elements to delete");
RNA_def_enum_funcs(prop, rna_curve_delete_type_itemf);
ot->prop = prop;
} }
/********************** shade smooth/flat operator *********************/ /********************** shade smooth/flat operator *********************/
@ -6566,7 +6568,7 @@ Nurb *add_nurbs_primitive(bContext *C, Object *obedit, float mat[4][4], int type
nu->pntsu = 4; nu->pntsu = 4;
nu->pntsv = 1; nu->pntsv = 1;
nu->orderu = 4; nu->orderu = 4;
nu->bp = CALLOC_STRUCT_N(BPoint, 4, "addNurbprim3"); nu->bp = (BPoint *)MEM_callocN(sizeof(BPoint) * 4, "addNurbprim3");
bp = nu->bp; bp = nu->bp;
for (a = 0; a < 4; a++, bp++) { for (a = 0; a < 4; a++, bp++) {
@ -6602,7 +6604,7 @@ Nurb *add_nurbs_primitive(bContext *C, Object *obedit, float mat[4][4], int type
nu->orderu = 5; nu->orderu = 5;
nu->flagu = CU_NURB_ENDPOINT; /* endpoint */ nu->flagu = CU_NURB_ENDPOINT; /* endpoint */
nu->resolu = cu->resolu; nu->resolu = cu->resolu;
nu->bp = CALLOC_STRUCT_N(BPoint, 5, "addNurbprim3"); nu->bp = (BPoint *)MEM_callocN(sizeof(BPoint) * 5, "addNurbprim3");
bp = nu->bp; bp = nu->bp;
for (a = 0; a < 5; a++, bp++) { for (a = 0; a < 5; a++, bp++) {
@ -6635,7 +6637,7 @@ Nurb *add_nurbs_primitive(bContext *C, Object *obedit, float mat[4][4], int type
if (cutype == CU_BEZIER) { if (cutype == CU_BEZIER) {
if (!force_3d) nu->flag |= CU_2D; if (!force_3d) nu->flag |= CU_2D;
nu->pntsu = 4; nu->pntsu = 4;
nu->bezt = CALLOC_STRUCT_N(BezTriple, 4, "addNurbprim1"); nu->bezt = (BezTriple *)MEM_callocN(sizeof(BezTriple) * 4, "addNurbprim1");
nu->flagu = CU_NURB_CYCLIC; nu->flagu = CU_NURB_CYCLIC;
bezt = nu->bezt; bezt = nu->bezt;
@ -6672,7 +6674,7 @@ Nurb *add_nurbs_primitive(bContext *C, Object *obedit, float mat[4][4], int type
nu->pntsu = 8; nu->pntsu = 8;
nu->pntsv = 1; nu->pntsv = 1;
nu->orderu = 4; nu->orderu = 4;
nu->bp = CALLOC_STRUCT_N(BPoint, 8, "addNurbprim6"); nu->bp = (BPoint *)MEM_callocN(sizeof(BPoint) * 8, "addNurbprim6");
nu->flagu = CU_NURB_CYCLIC; nu->flagu = CU_NURB_CYCLIC;
bp = nu->bp; bp = nu->bp;
@ -6705,7 +6707,7 @@ Nurb *add_nurbs_primitive(bContext *C, Object *obedit, float mat[4][4], int type
nu->orderu = 4; nu->orderu = 4;
nu->orderv = 4; nu->orderv = 4;
nu->flag = CU_SMOOTH; nu->flag = CU_SMOOTH;
nu->bp = CALLOC_STRUCT_N(BPoint, 4 * 4, "addNurbprim6"); nu->bp = (BPoint *)MEM_callocN(sizeof(BPoint) * (4 * 4), "addNurbprim6");
nu->flagu = 0; nu->flagu = 0;
nu->flagv = 0; nu->flagv = 0;
bp = nu->bp; bp = nu->bp;
@ -6767,7 +6769,7 @@ Nurb *add_nurbs_primitive(bContext *C, Object *obedit, float mat[4][4], int type
nu->resolu = cu->resolu; nu->resolu = cu->resolu;
nu->resolv = cu->resolv; nu->resolv = cu->resolv;
nu->flag = CU_SMOOTH; nu->flag = CU_SMOOTH;
nu->bp = CALLOC_STRUCT_N(BPoint, 5, "addNurbprim6"); nu->bp = (BPoint *)MEM_callocN(sizeof(BPoint) * 5, "addNurbprim6");
nu->flagu = 0; nu->flagu = 0;
bp = nu->bp; bp = nu->bp;