[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59849] branches/soc-2013-ui_replay/source /blender: Started to implement operator to icon pairing.
Vincent Akkermans
vincent at ack-err.net
Thu Sep 5 19:25:26 CEST 2013
Revision: 59849
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59849
Author: ack-err
Date: 2013-09-05 17:25:26 +0000 (Thu, 05 Sep 2013)
Log Message:
-----------
Started to implement operator to icon pairing.
* wmOperatorType has an extra icon() method that is used to determine which icon to use based on the operator properties set for a button.
* wmOperatorType has a default_icon field, exposed to python as bl_icon, that is used if the icon() function is not set.
* Buttons have to have a but->icon value of ICON_AUTOMATIC, which is -1.
Modified Paths:
--------------
branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_buttons.c
branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_paint.c
branches/soc-2013-ui_replay/source/blender/editors/include/UI_icons.h
branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c
branches/soc-2013-ui_replay/source/blender/editors/interface/interface_widgets.c
branches/soc-2013-ui_replay/source/blender/editors/space_view3d/view3d_toolbar.c
branches/soc-2013-ui_replay/source/blender/makesrna/intern/rna_wm.c
branches/soc-2013-ui_replay/source/blender/windowmanager/WM_types.h
Modified: branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_buttons.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_buttons.c 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_buttons.c 2013-09-05 17:25:26 UTC (rev 59849)
@@ -295,16 +295,16 @@
ot = WM_operatortype_find("GPENCIL_OT_draw", 0);
row = uiLayoutRowWithButtonHeight(layout, TRUE, 1.5f);
- ptr = uiItemFullO_ptr(row, ot, "", ICON_GREASE_DRAW, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
+ ptr = uiItemFullO_ptr(row, ot, "", ICON_AUTOMATIC, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&ptr, "mode", GP_PAINTMODE_DRAW);
- ptr = uiItemFullO_ptr(row, WM_operatortype_find("GPENCIL_OT_draw", 0), "", ICON_GREASE_LINE, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
+ ptr = uiItemFullO_ptr(row, WM_operatortype_find("GPENCIL_OT_draw", 0), "", ICON_AUTOMATIC, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&ptr, "mode", GP_PAINTMODE_DRAW_STRAIGHT);
- ptr = uiItemFullO_ptr(row, WM_operatortype_find("GPENCIL_OT_draw", 0), "", ICON_GREASE_POLY, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
+ ptr = uiItemFullO_ptr(row, WM_operatortype_find("GPENCIL_OT_draw", 0), "", ICON_AUTOMATIC, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&ptr, "mode", GP_PAINTMODE_DRAW_POLY);
- ptr = uiItemFullO_ptr(row, WM_operatortype_find("GPENCIL_OT_draw", 0), "", ICON_GREASE_ERASE, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
+ ptr = uiItemFullO_ptr(row, WM_operatortype_find("GPENCIL_OT_draw", 0), "", ICON_AUTOMATIC, NULL, uiLayoutGetOperatorContext(layout), UI_ITEM_O_RETURN_PROPS);
RNA_enum_set(&ptr, "mode", GP_PAINTMODE_ERASER);
row = uiLayoutRow(layout, TRUE);
Modified: branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_paint.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_paint.c 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/editors/gpencil/gpencil_paint.c 2013-09-05 17:25:26 UTC (rev 59849)
@@ -70,6 +70,8 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "UI_resources.h"
+
#include "gpencil_intern.h"
/* ******************************************* */
@@ -2030,6 +2032,23 @@
{0, NULL, 0, NULL, NULL}
};
+
+static int gpencil_draw_icon(const bContext *UNUSED(C), PointerRNA *opptr)
+{
+ if (opptr) {
+ switch (RNA_enum_get(opptr, "mode")) {
+ case GP_PAINTMODE_DRAW: return ICON_GREASE_DRAW;
+ case GP_PAINTMODE_DRAW_STRAIGHT: return ICON_GREASE_LINE;
+ case GP_PAINTMODE_DRAW_POLY:
+ return ICON_GREASE_POLY;
+ case GP_PAINTMODE_ERASER:
+ return ICON_GREASE_ERASE;
+ }
+ }
+
+ return ICON_GREASEPENCIL;
+}
+
void GPENCIL_OT_draw(wmOperatorType *ot)
{
/* identifiers */
@@ -2043,6 +2062,7 @@
ot->modal = gpencil_draw_modal;
ot->cancel = gpencil_draw_cancel;
ot->poll = gpencil_draw_poll;
+ ot->icon = gpencil_draw_icon;
/* flags */
ot->flag = OPTYPE_UNDO | OPTYPE_BLOCKING;
Modified: branches/soc-2013-ui_replay/source/blender/editors/include/UI_icons.h
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/include/UI_icons.h 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/editors/include/UI_icons.h 2013-09-05 17:25:26 UTC (rev 59849)
@@ -32,6 +32,10 @@
* once from UI_resources.h for the internal icon enum and
* once for interface_api.c for the definition of the RNA enum for the icons */
+#ifndef ICON_AUTOMATIC
+#define ICON_AUTOMATIC -1
+#endif
+
/* ICON_ prefix added */
DEF_ICON(NONE)
DEF_ICON(QUESTION)
Modified: branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/editors/interface/interface_handlers.c 2013-09-05 17:25:26 UTC (rev 59849)
@@ -5065,11 +5065,11 @@
uiPupBlock(C, menu_add_shortcut, but);
}
-static void ui_but_menu_set_last_properties(bContext *UNUSED(C), void *arg_op, int UNUSED(arg_event))
-{
- wmOperator *op = (wmOperator*)arg_op;
- WM_operator_default_properties_store(op);
-}
+//static void ui_but_menu_set_last_properties(bContext *UNUSED(C), void *arg_op, int UNUSED(arg_event))
+//{
+// wmOperator *op = (wmOperator*)arg_op;
+// WM_operator_default_properties_store(op);
+//}
static void remove_from_custom_panel(bContext *UNUSED(C), void *arg_pa, void *arg_optype)
{
@@ -5284,7 +5284,7 @@
wmKeyMap *km;
wmKeyMapItem *kmi = NULL;
int kmi_id = WM_key_event_operator_id(C, but->optype->idname, but->opcontext, prop, 1, &km);
- wmOperator *op;
+// wmOperator *op;
uiItemS(layout);
Modified: branches/soc-2013-ui_replay/source/blender/editors/interface/interface_widgets.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/interface/interface_widgets.c 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/editors/interface/interface_widgets.c 2013-09-05 17:25:26 UTC (rev 59849)
@@ -54,6 +54,8 @@
#include "BLF_api.h"
+#include "WM_types.h"
+
#include "UI_interface.h"
#include "UI_interface_icons.h"
@@ -3212,6 +3214,21 @@
ThemeUI *tui = &btheme->tui;
uiFontStyle *fstyle = &style->widget;
uiWidgetType *wt = NULL;
+
+ /* in case we have an automatic icon, let's set it here */
+ if (but->icon && but->icon == ICON_AUTOMATIC) {
+ int icon = ICON_NONE;
+
+ if (but->optype) {
+ if (but->optype->icon && but->opptr) {
+ icon = but->optype->icon(C, but->opptr);
+ }
+ else if (but->optype->default_icon) {
+ icon = but->optype->default_icon;
+ }
+ }
+ but->icon = icon;
+ }
/* handle menus separately */
if (but->dt == UI_EMBOSSP) {
Modified: branches/soc-2013-ui_replay/source/blender/editors/space_view3d/view3d_toolbar.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/space_view3d/view3d_toolbar.c 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/editors/space_view3d/view3d_toolbar.c 2013-09-05 17:25:26 UTC (rev 59849)
@@ -165,10 +165,8 @@
|| (pa->type->poll && !pa->type->poll(C, pa->type)))
continue;
- // TODO: sort order
-
uiLayoutRow(col, TRUE);
- but = uiDefButBitI(block, OPTIONN, 1, 0, pa->drawname, 0, 0, width, UI_UNIT_Y, (int*)&pa->hidden, 0, 0, 0, 0, "Check to hide panel");
+ but = uiDefButBitI(block, OPTIONN, 1, 0, pa->drawname, 0, 0, width, UI_UNIT_Y, (int*)&pa->hidden, 0, 0, 0, 0, "Uncheck to hide panel");
}
CTX_wm_region_set(C, cur_ar);
Modified: branches/soc-2013-ui_replay/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/makesrna/intern/rna_wm.c 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/makesrna/intern/rna_wm.c 2013-09-05 17:25:26 UTC (rev 59849)
@@ -1424,6 +1424,12 @@
RNA_def_property_enum_items(prop, operator_flag_items);
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
RNA_def_property_ui_text(prop, "Options", "Options for this operator type");
+
+ prop = RNA_def_property(srna, "bl_icon", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->default_icon");
+ RNA_def_property_enum_items(prop, icon_items); /* TODO: operator_icon_items */
+ RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
+ RNA_def_property_ui_text(prop, "Icon", "Default icon for this operator type");
RNA_api_operator(srna);
Modified: branches/soc-2013-ui_replay/source/blender/windowmanager/WM_types.h
===================================================================
--- branches/soc-2013-ui_replay/source/blender/windowmanager/WM_types.h 2013-09-05 17:13:43 UTC (rev 59848)
+++ branches/soc-2013-ui_replay/source/blender/windowmanager/WM_types.h 2013-09-05 17:25:26 UTC (rev 59849)
@@ -545,6 +545,9 @@
/* optional panel for redo and repeat, autogenerated if not set */
void (*ui)(struct bContext *, struct wmOperator *);
+
+ /* optional function to decide which icon to use based on operator properties */
+ int (*icon)(const struct bContext *, PointerRNA *);
/* rna for properties */
struct StructRNA *srna;
@@ -576,6 +579,7 @@
/* Flag last for padding */
short flag;
+ int default_icon;
} wmOperatorType;
More information about the Bf-blender-cvs
mailing list