/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Contributor(s): Blender Foundation (2008). * * ***** END GPL LICENSE BLOCK ***** */ /** \file blender/makesrna/intern/rna_controller.c * \ingroup RNA */ #include #include "WM_types.h" #include "RNA_define.h" #include "rna_internal.h" #include "DNA_object_types.h" #include "DNA_controller_types.h" EnumPropertyItem controller_type_items[] ={ {CONT_LOGIC_AND, "LOGIC_AND", 0, "And", "Logic And"}, {CONT_LOGIC_OR, "LOGIC_OR", 0, "Or", "Logic Or"}, {CONT_LOGIC_NAND, "LOGIC_NAND", 0, "Nand", "Logic Nand"}, {CONT_LOGIC_NOR, "LOGIC_NOR", 0, "Nor", "Logic Nor"}, {CONT_LOGIC_XOR, "LOGIC_XOR", 0, "Xor", "Logic Xor"}, {CONT_LOGIC_XNOR, "LOGIC_XNOR", 0, "Xnor", "Logic Xnor"}, {CONT_EXPRESSION, "EXPRESSION", 0, "Expression", ""}, {CONT_PYTHON, "PYTHON", 0, "Python", ""}, {0, NULL, 0, NULL, NULL}}; #ifdef RNA_RUNTIME #include "BKE_sca.h" static struct StructRNA* rna_Controller_refine(struct PointerRNA *ptr) { bController *controller= (bController*)ptr->data; switch(controller->type) { case CONT_LOGIC_AND: return &RNA_AndController; case CONT_LOGIC_OR: return &RNA_OrController; case CONT_LOGIC_NAND: return &RNA_NandController; case CONT_LOGIC_NOR: return &RNA_NorController; case CONT_LOGIC_XOR: return &RNA_XorController; case CONT_LOGIC_XNOR: return &RNA_XnorController; case CONT_EXPRESSION: return &RNA_ExpressionController; case CONT_PYTHON: return &RNA_PythonController; default: return &RNA_Controller; } } static void rna_Controller_type_set(struct PointerRNA *ptr, int value) { bController *cont= (bController *)ptr->data; if (value != cont->type) { cont->type = value; init_controller(cont); } } static void rna_Controller_mode_set(struct PointerRNA *ptr, int value) { bController *cont= (bController *)ptr->data; bPythonCont *pycon= (bPythonCont *)cont->data; // if mode changed and previous mode were Script if (value != pycon->mode && pycon->mode == CONT_PY_SCRIPT) { // clear script to avoid it to get linked with the controller pycon->text = NULL; } pycon->mode = value; } static int rna_Controller_state_number_get(struct PointerRNA *ptr) { bController *cont= (bController *)ptr->data; int bit; for (bit=0; bit<32; bit++) { if (cont->state_mask & (1<data; if (value < 1 || value > OB_MAX_STATES) return; cont->state_mask = (1 << (value - 1)); } #if 0 /* editable is set to false, comment for now. */ static void rna_Controller_state_get(PointerRNA *ptr, int *values) { bController *cont= (bController *)ptr->data; int i; memset(values, 0, sizeof(int)*OB_MAX_STATES); for(i=0; istate_mask & (1<data; int i, tot= 0; /* ensure we always have some state selected */ for(i=0; i1) return; for(i=0; istate_mask |= (1<state_mask &= ~(1<