diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-02-12 06:39:56 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-02-12 06:39:56 +0300 |
commit | b96180ec1763b29bdda4acd6cf79275058bcbde3 (patch) | |
tree | 74782072278e53659f1b1c3e66eaaed6d11e9ced | |
parent | 12811a096c8ec23477bdc29a02d5d9492d13e94d (diff) |
* Added description string to operator types, should be set along with ot->idname when defining ops.
* User interface uses this as a tooltip when NULL or "" is given.
* Python doc generation includes this description
* Python defined ops take the description as an argument.
* NULL check to image_ops.c, was crashing on exit when there was an image open.
-rw-r--r-- | source/blender/editors/interface/interface.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_ops.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_add.c | 5 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_windowmanager_types.h | 3 | ||||
-rw-r--r-- | source/blender/python/epy_doc_gen.py | 1 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_opwrapper.c | 10 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 2 |
7 files changed, 23 insertions, 5 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index c2c15a4cd5c..c4bd05f8076 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2308,6 +2308,10 @@ uiBut *ui_def_but_operator(uiBlock *block, int type, char *opname, int opcontext if(ot) str= ot->name; else str= opname; } + + if ((!tip || tip[0]=='\0') && ot->description) { + tip= ot->description; + } but= ui_def_but(block, type, -1, str, x1, y1, x2, y2, NULL, 0, 0, 0, 0, tip); but->opname= opname; diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index e24e7254553..51bca9d4fcc 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -1221,6 +1221,9 @@ static void sample_draw(const bContext *C, ARegion *ar, void *arg_info) ImBuf *ibuf= ED_space_image_buffer(sima); ImageSampleInfo *info= arg_info; + if(ibuf == NULL) + return; + draw_image_info(ar, ibuf->channels, info->x, info->y, info->colp, info->colfp, info->zp, info->zfp); } diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c index 5ab149ff6ca..c91972ec4f3 100644 --- a/source/blender/editors/space_sequencer/sequencer_add.c +++ b/source/blender/editors/space_sequencer/sequencer_add.c @@ -213,6 +213,7 @@ void SEQUENCER_OT_add_scene_strip(struct wmOperatorType *ot) /* identifiers */ ot->name= "Add Scene Strip"; ot->idname= "SEQUENCER_OT_add_scene_strip"; + ot->description= "Add a strip to the sequencer using a blender scene as a source"; /* api callbacks */ ot->invoke= sequencer_add_scene_strip_invoke; @@ -300,6 +301,7 @@ void SEQUENCER_OT_add_movie_strip(struct wmOperatorType *ot) /* identifiers */ ot->name= "Add Movie Strip"; ot->idname= "SEQUENCER_OT_add_movie_strip"; + ot->description= "Add a movie strip to the sequencer"; /* api callbacks */ ot->invoke= sequencer_add_movie_strip_invoke; @@ -400,6 +402,7 @@ void SEQUENCER_OT_add_sound_strip(struct wmOperatorType *ot) /* identifiers */ ot->name= "Add Sound Strip"; ot->idname= "SEQUENCER_OT_add_sound_strip"; + ot->description= "Add a sound strip to the sequencer"; /* api callbacks */ ot->invoke= sequencer_add_sound_strip_invoke; @@ -492,6 +495,7 @@ void SEQUENCER_OT_add_image_strip(struct wmOperatorType *ot) /* identifiers */ ot->name= "Add Image Strip"; ot->idname= "SEQUENCER_OT_add_image_strip"; + ot->description= "Add an image or image sequence to the sequencer"; /* api callbacks */ ot->invoke= sequencer_add_image_strip_invoke; @@ -623,6 +627,7 @@ void SEQUENCER_OT_add_effect_strip(struct wmOperatorType *ot) /* identifiers */ ot->name= "Add Effect Strip"; ot->idname= "SEQUENCER_OT_add_effect_strip"; + ot->description= "Add an effect to the sequencer, most are applied ontop of existing strips"; /* api callbacks */ ot->invoke= sequencer_add_effect_strip_invoke; diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 822f081f9a8..e0f55ac5356 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -123,7 +123,8 @@ typedef struct wmOperatorType { struct wmOperatorType *next, *prev; char *name; /* text for ui, undo */ - char *idname; /* unique identifier */ + char *idname; /* unique identifier */ + char *description; /* tooltips and python docs */ /* this callback executes the operator without any interactive input, * parameters may be provided through operator properties. cannot use diff --git a/source/blender/python/epy_doc_gen.py b/source/blender/python/epy_doc_gen.py index afe5468070b..afe9acff36d 100644 --- a/source/blender/python/epy_doc_gen.py +++ b/source/blender/python/epy_doc_gen.py @@ -265,6 +265,7 @@ def op2epy(target_path): out.write('def %s(%s):\n' % (op, ', '.join(kw_args))) out.write('\t"""\n') + out.write('\t%s\n' % rna_struct.description) for desc in kw_arg_attrs: out.write('\t%s\n' % desc) out.write('\t@rtype: None\n') diff --git a/source/blender/python/intern/bpy_opwrapper.c b/source/blender/python/intern/bpy_opwrapper.c index 8a644f51b24..ca6104d087f 100644 --- a/source/blender/python/intern/bpy_opwrapper.c +++ b/source/blender/python/intern/bpy_opwrapper.c @@ -44,6 +44,7 @@ typedef struct PyOperatorType { void *next, *prev; char idname[OP_MAX_TYPENAME]; char name[OP_MAX_TYPENAME]; + char description[OP_MAX_TYPENAME]; // XXX should be longer? PyObject *py_invoke; PyObject *py_exec; } PyOperatorType; @@ -276,6 +277,7 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) /* identifiers */ ot->name= pyot->name; ot->idname= pyot->idname; + ot->description= pyot->description; /* api callbacks */ if (pyot->py_invoke != Py_None) @@ -342,10 +344,11 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *args) char *idname= NULL; char *name= NULL; + char *description= NULL; PyObject *invoke= NULL; PyObject *exec= NULL; - if (!PyArg_ParseTuple(args, "ssOO", &idname, &name, &invoke, &exec)) { + if (!PyArg_ParseTuple(args, "sssOO", &idname, &name, &description, &invoke, &exec)) { PyErr_SetString( PyExc_AttributeError, "expected 2 strings and 2 function objects"); return NULL; } @@ -362,8 +365,9 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *args) pyot= MEM_callocN(sizeof(PyOperatorType), "PyOperatorType"); - strcpy(pyot->idname, idname); - strcpy(pyot->name, name); + strncpy(pyot->idname, idname, sizeof(pyot->idname)); + strncpy(pyot->name, name, sizeof(pyot->name)); + strncpy(pyot->description, description, sizeof(pyot->description)); pyot->py_invoke= invoke; pyot->py_exec= exec; Py_INCREF(invoke); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 5ebca6842b1..eb0d9d312e9 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -101,7 +101,7 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType*)) ot= MEM_callocN(sizeof(wmOperatorType), "operatortype"); ot->srna= RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties"); opfunc(ot); - RNA_def_struct_ui_text(ot->srna, ot->name, "DOC_BROKEN"); /* TODO - add a discription to wmOperatorType? */ + RNA_def_struct_ui_text(ot->srna, ot->name, ot->description ? ot->description:""); // XXX All ops should have a description but for now allow them not to. RNA_def_struct_identifier(ot->srna, ot->idname); BLI_addtail(&global_ops, ot); } |