Commit: 52700fdac320d4a52d026f06a5c658625da99800
Author: Julian Eisel
Date:   Sat Dec 19 14:43:09 2015 +0100
Branches: temp_widgets_c++_experiment
https://developer.blender.org/rB52700fdac320d4a52d026f06a5c658625da99800

Port widget-group-type unregister and widget-group free functions

===================================================================

M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/intern/widgets/wm_widget.cpp
M       source/blender/windowmanager/intern/widgets/wm_widget.h
M       source/blender/windowmanager/intern/widgets/wm_widgetgroup.cpp
M       source/blender/windowmanager/intern/widgets/wm_widgetgroup.h
M       source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cpp
M       source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h
M       source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cpp
M       source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
M       source/blender/windowmanager/intern/wm_widgets.c
M       source/blenderplayer/bad_level_call_stubs/stubs.c

===================================================================

diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index bd61ae0..98fb0c5 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -562,8 +562,6 @@ wmKeyMap *WM_widgetgroup_keymap_common(wmKeyConfig *config, 
const char *wgroupna
 
 bool WM_widgetmap_select_all(struct bContext *C, struct wmWidgetMap *wmap, 
const int action);
 
-void WM_widgetgrouptype_unregister(struct bContext *C, struct Main *bmain, 
struct wmWidgetGroupTypeC *wgroup);
-
 /* creates a widgetmap with all registered widgets for that type */
 void WM_widgetmap_delete(struct wmWidgetMap *wmap);
 bool WM_widgetmap_cursor_set(const struct wmWidgetMap *wmap, struct wmWindow 
*win);
diff --git a/source/blender/windowmanager/intern/widgets/wm_widget.cpp 
b/source/blender/windowmanager/intern/widgets/wm_widget.cpp
index 1c5bf2e..b39281c 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widget.cpp
+++ b/source/blender/windowmanager/intern/widgets/wm_widget.cpp
@@ -29,8 +29,10 @@
 
 #include "wm_widget.h"
 
+#if 0
 wmWidget::wmWidget()
 {
        
 }
+#endif
 
diff --git a/source/blender/windowmanager/intern/widgets/wm_widget.h 
b/source/blender/windowmanager/intern/widgets/wm_widget.h
index ded1593..c9ec57a 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widget.h
+++ b/source/blender/windowmanager/intern/widgets/wm_widget.h
@@ -31,10 +31,27 @@
 #define __WM_WIDGET_H__
 
 
+/* wmWidget->flag */
+enum widgetflags {
+       /* states */
+       WM_WIDGET_HIGHLIGHT   = (1 << 0),
+       WM_WIDGET_ACTIVE      = (1 << 1),
+       WM_WIDGET_SELECTED    = (1 << 2),
+       /* settings */
+       WM_WIDGET_DRAW_HOVER  = (1 << 3),
+       WM_WIDGET_DRAW_ACTIVE = (1 << 4), /* draw while dragging */
+       WM_WIDGET_SCALE_3D    = (1 << 5),
+       WM_WIDGET_SCENE_DEPTH = (1 << 6), /* widget is depth culled with scene 
objects*/
+       WM_WIDGET_HIDDEN      = (1 << 7),
+       WM_WIDGET_SELECTABLE  = (1 << 8),
+};
+
+#if 0
 class wmWidget
 {
 public:
        wmWidget();
 };
+#endif
 
 #endif // __WM_WIDGET_H__
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cpp 
b/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cpp
index 60418bd..df1f193 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cpp
+++ b/source/blender/windowmanager/intern/widgets/wm_widgetgroup.cpp
@@ -27,6 +27,23 @@
  *  \ingroup wm
  */
 
+#include "BKE_report.h"
+
+#include "BLI_listbase.h"
+
+#include "DNA_defs.h"
+#include "DNA_widget_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_types.h"
+#include "BPY_extern.h"
+
+#include "wm.h" // tmp
+
+#include "wm_widget.h"
+#include "wm_widgetmap.h"
 #include "wm_widgetgroup.h" // own_include
 
 #if 0
@@ -36,3 +53,34 @@ wmWidgetGroup::wmWidgetGroup()
 }
 #endif
 
+void widgetgroup_free(bContext *UNUSED(C), wmWidgetMap *wmap, wmWidgetGroup 
*wgroup)
+{
+       for (wmWidget *widget = (wmWidget *)wgroup->widgets.first; widget;) {
+               wmWidget *widget_next = widget->next;
+               if (widget->flag & WM_WIDGET_HIGHLIGHT) {
+//                     wm_widgetmap_set_highlighted_widget(wmap, C, NULL, 0);
+               }
+               if (widget->flag & WM_WIDGET_ACTIVE) {
+//                     wm_widgetmap_set_active_widget(wmap, C, NULL, NULL);
+               }
+//             wm_widget_delete(&wgroup->widgets, widget);
+               widget = widget_next;
+       }
+
+#ifdef WITH_PYTHON
+       if (wgroup->py_instance) {
+               /* do this first in case there are any __del__ functions or
+                * similar that use properties */
+               BPY_DECREF_RNA_INVALIDATE(wgroup->py_instance);
+       }
+#endif
+
+       if (wgroup->reports && (wgroup->reports->flag & RPT_FREE)) {
+               BKE_reports_clear(wgroup->reports);
+               MEM_freeN(wgroup->reports);
+       }
+
+       BLI_remlink(&wmap->widgetgroups, wgroup);
+       MEM_freeN(wgroup);
+}
+
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgetgroup.h 
b/source/blender/windowmanager/intern/widgets/wm_widgetgroup.h
index bb01bbd..8779ee5 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgetgroup.h
+++ b/source/blender/windowmanager/intern/widgets/wm_widgetgroup.h
@@ -43,4 +43,6 @@ public:
 };
 #endif
 
+void widgetgroup_free(bContext *C, struct wmWidgetMap *wmap, wmWidgetGroup 
*wgroup);
+
 #endif // __WM_WIDGETGROUP_H__
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cpp 
b/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cpp
index 17a5502..40fc51d 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cpp
+++ b/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cpp
@@ -46,6 +46,7 @@
 
 #include "wm_widgetmap.h"
 #include "wm_widgetmaptype.h"
+#include "wm_widgetgroup.h"
 #include "wm_widgetgrouptype.h" // own include
 
 
@@ -104,6 +105,39 @@ void wmWidgetGroupType::init(
        }
 }
 
+void wmWidgetGroupType::unregister(bContext *C, Main *bmain)
+{
+       for (bScreen *sc = (bScreen *)bmain->screen.first; sc; sc = (bScreen 
*)sc->id.next) {
+               for (ScrArea *sa = (ScrArea *)sc->areabase.first; sa; sa = 
sa->next) {
+                       for (SpaceLink *sl = (SpaceLink *)sa->spacedata.first; 
sl; sl = sl->next) {
+                               ListBase *lb = (sl == sa->spacedata.first) ? 
&sa->regionbase : &sl->regionbase;
+                               for (ARegion *ar = (ARegion *)lb->first; ar; ar 
= ar->next) {
+                                       for (wmWidgetMap *wmap = (wmWidgetMap 
*)ar->widgetmaps.first; wmap; wmap = wmap->next) {
+                                               wmWidgetGroup *wgroup, 
*wgroup_next;
+
+                                               for (wgroup = (wmWidgetGroup 
*)wmap->widgetgroups.first; wgroup; wgroup = wgroup_next) {
+                                                       wgroup_next = 
wgroup->next;
+                                                       if (wgroup->type_cxx == 
this) {
+                                                               
widgetgroup_free(C, wmap, wgroup);
+//                                                             
ED_region_tag_redraw(ar);
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       wmWidgetMapType *wmaptype = WM_widgetmaptype_find(mapidname, spaceid,
+                                                         regionid, is_3d, 
false);
+
+       BLI_remlink(&wmaptype->widgetgrouptypes, this);
+       prev = next = NULL;
+
+       // yay, suicide
+       delete this;
+}
+
 void wmWidgetGroupType::attach_to_handler(bContext *C, wmEventHandler 
*handler, wmOperator *op)
 {
        /* now instantiate the widgetmap */
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h 
b/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h
index 5fc6346..18287cd 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h
+++ b/source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h
@@ -53,6 +53,7 @@ public:
                wmKeyMap *(*keymap_init)(wmKeyConfig *, const char *),
                const Main *bmain, const char *mapidname, const char *name,
                const short spaceid, const short regionid, const bool is_3d);
+       void unregister(bContext *C, Main *bmain);
 
        void attach_to_handler(bContext *C, struct wmEventHandler *handler, 
struct wmOperator *op);
        size_t get_idname(char *r_idname);
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cpp 
b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cpp
index 78960ab..22e72fe 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cpp
+++ b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cpp
@@ -72,6 +72,11 @@ wmWidgetGroupType *WM_widgetgrouptype_new(
        return wgrouptype;
 }
 
+void WM_widgetgrouptype_unregister(bContext *C, Main *bmain, wmWidgetGroupType 
*wgrouptype)
+{
+       wgrouptype->unregister(C, bmain);
+}
+
 void WM_widgetgrouptype_attach_to_handler(
         bContext *C, wmWidgetGroupType *wgrouptype,
         wmEventHandler *handler, wmOperator *op)
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h 
b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
index c2f91d4..f148a85 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
+++ b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
@@ -57,6 +57,7 @@ struct wmWidgetGroupType *WM_widgetgrouptype_new(
         struct wmKeyMap *(*keymap_init)(struct wmKeyConfig *, const char *),
         const struct Main *bmain, const char *mapidname, const char *name,
         const short spaceid, const short regionid, const bool is_3d);
+void WM_widgetgrouptype_unregister(struct bContext *C, struct Main *bmain, 
struct wmWidgetGroupType *wgrouptype);
 void WM_widgetgrouptype_attach_to_handler(
         struct bContext *C, struct wmWidgetGroupType *wgrouptype,
         struct wmEventHandler *handler, struct wmOperator *op);
diff --git a/source/blender/windowmanager/intern/wm_widgets.c 
b/source/blender/windowmanager/intern/wm_widgets.c
index 31bceb6..778888f 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -1424,35 +1424,3 @@ void wm_widgetgrouptype_keymap_init(wmWidgetGroupTypeC 
*wgrouptype, wmKeyConfig
        wgrouptype->keymap = wgrouptype->keymap_init(keyconf, wgrouptype->name);
 }
 
-void WM_widgetgrouptype_unregister(bContext *C, Main *bmain, 
wmWidgetGroupTypeC *wgrouptype)
-{
-       for (bScreen *sc = bmain->screen.first; sc; sc = sc->id.next) {
-               for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
-                       for (SpaceLink *sl = sa->spacedata.first; sl; sl = 
sl->next) {
-                               ListBase *lb = (sl == sa->spacedata.first) ? 
&sa->regionbase : &sl->regionbase;
-                               for (ARegion *ar = lb->first; ar; ar = 
ar->next) {
-                                       for (wmWidgetMap *wmap = 
ar->widgetmaps.first; wmap; wmap = wmap->next) {
-                                               wmWidgetGroup *wgroup, 
*wgroup_next;
-
-                                               for (wgroup = 
wmap->widgetgroups.first; wgroup; wgroup = wgroup_next) {
-                                                       wgroup_next = 
wgroup->next;
-                                                       if (wgroup->type == 
wgrouptype) {
-                                                               
wm_widgetgroup_free(C, wmap, wgroup);
-                                                               
ED_region_tag_redraw(ar);
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       wmWidgetMapType *wmaptype = 
WM_widgetmaptype_find(wgrouptype->mapidname, wgrouptype->spaceid,
-                                                         wgrouptype->regionid, 
wgrouptype->is_3d, false);
-
-       BLI_remlink(&wmaptype->widgetgrouptypes, wgrouptype);
-       wgrouptype->prev = wgrouptype->next = NULL;
-
-       MEM_freeN(wgrouptype);
-}
-
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c 
b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 3904f8e..a761d1b 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -314,7 +314,6 @@ void WM_curs

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to