Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-03-29 23:44:39 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-03-29 23:44:39 +0400
commit6705b6f96ea4255f6bd69a039562ed603a83a83e (patch)
treed8859110c9810e66666ba8add287ca201a0d6238 /source/blender/editors/space_buttons
parent9b7f44ceb56c741af10459924be7775ea91bfa68 (diff)
UI:
* Added a PanelType and HeaderType for registering panels and headers in regions. When the region draws, it will then automatically draw the ones that were registerd with poll and draw callbacks. Used for text header, properties and object buttons now.
Diffstat (limited to 'source/blender/editors/space_buttons')
-rw-r--r--source/blender/editors/space_buttons/buttons_intern.h10
-rw-r--r--source/blender/editors/space_buttons/buttons_object.c77
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c79
3 files changed, 109 insertions, 57 deletions
diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h
index 17c4e39ddd6..e979e815e18 100644
--- a/source/blender/editors/space_buttons/buttons_intern.h
+++ b/source/blender/editors/space_buttons/buttons_intern.h
@@ -28,6 +28,10 @@
#ifndef ED_BUTTONS_INTERN_H
#define ED_BUTTONS_INTERN_H
+struct ARegion;
+struct ARegionType;
+struct bContext;
+
/* warning: the values of these defines are used in sbuts->tabs[7] */
/* buts->mainb new */
#define CONTEXT_SCENE 0
@@ -73,9 +77,9 @@
/* internal exports only */
/* image_header.c */
-void buttons_header_buttons(const bContext *C, ARegion *ar);
-void buttons_scene(const bContext *C, ARegion *ar);
-void buttons_object(const bContext *C, ARegion *ar);
+void buttons_header_buttons(const struct bContext *C, struct ARegion *ar);
+void buttons_scene(const struct bContext *C, struct ARegion *ar);
+void buttons_object_register(struct ARegionType *art);
#endif /* ED_BUTTONS_INTERN_H */
diff --git a/source/blender/editors/space_buttons/buttons_object.c b/source/blender/editors/space_buttons/buttons_object.c
index bb7bf346808..965376b731a 100644
--- a/source/blender/editors/space_buttons/buttons_object.c
+++ b/source/blender/editors/space_buttons/buttons_object.c
@@ -30,14 +30,19 @@
#include <stdio.h>
#include <stdlib.h>
+#include "MEM_guardedalloc.h"
+
#include "DNA_group_types.h"
#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "BLI_listbase.h"
+
#include "BKE_context.h"
#include "BKE_group.h"
#include "BKE_main.h"
+#include "BKE_screen.h"
#include "UI_interface.h"
#include "UI_resources.h"
@@ -46,8 +51,9 @@
#include "WM_types.h"
-static void object_panel_transform(const bContext *C, uiLayout *layout)
+static void object_panel_transform(const bContext *C, Panel *pnl)
{
+ uiLayout *layout= pnl->layout;
Object *ob= CTX_data_active_object(C);
PointerRNA obptr;
@@ -59,8 +65,9 @@ static void object_panel_transform(const bContext *C, uiLayout *layout)
uiItemR(layout, UI_TSLOT_COLUMN_3, NULL, 0, &obptr, "scale");
}
-static void object_panel_groups(const bContext *C, uiLayout *layout)
+static void object_panel_groups(const bContext *C, Panel *pnl)
{
+ uiLayout *layout= pnl->layout;
Main *bmain= CTX_data_main(C);
Object *ob= CTX_data_active_object(C);
Group *group;
@@ -93,8 +100,9 @@ static void object_panel_groups(const bContext *C, uiLayout *layout)
}
}
-static void object_panel_display(const bContext *C, uiLayout *layout)
+static void object_panel_display(const bContext *C, Panel *pnl)
{
+ uiLayout *layout= pnl->layout;
Object *ob= CTX_data_active_object(C);
PointerRNA obptr;
@@ -115,8 +123,9 @@ static void object_panel_display(const bContext *C, uiLayout *layout)
uiItemR(layout, UI_TSLOT_COLUMN_2, "Transparency", 0, &obptr, "draw_transparent");
}
-static void object_panel_duplication(const bContext *C, uiLayout *layout)
+static void object_panel_duplication(const bContext *C, Panel *pnl)
{
+ uiLayout *layout= pnl->layout;
Object *ob= CTX_data_active_object(C);
PointerRNA obptr;
@@ -138,8 +147,9 @@ static void object_panel_duplication(const bContext *C, uiLayout *layout)
}
}
-static void object_panel_animation(const bContext *C, uiLayout *layout)
+static void object_panel_animation(const bContext *C, Panel *pnl)
{
+ uiLayout *layout= pnl->layout;
Object *ob= CTX_data_active_object(C);
PointerRNA obptr;
@@ -159,21 +169,48 @@ static void object_panel_animation(const bContext *C, uiLayout *layout)
uiItemR(layout, UI_TSLOT_COLUMN_2, "Rotation", 0, &obptr, "track_rotation");
}
-void buttons_object(const bContext *C, ARegion *ar)
+void buttons_object_register(ARegionType *art)
{
- SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C);
- Object *ob= CTX_data_active_object(C);
- int tab= sbuts->tab[CONTEXT_OBJECT];
-
- if(tab == TAB_OBJECT_OBJECT) {
- if(!ob)
- return;
-
- uiPanelLayout(C, ar, "OBJECT_PT_transform", "Transform", "Object", object_panel_transform, 0);
- uiPanelLayout(C, ar, "OBJECT_PT_groups", "Groups", "Object", object_panel_groups, 1);
- uiPanelLayout(C, ar, "OBJECT_PT_display", "Display", "Object", object_panel_display, 2);
- uiPanelLayout(C, ar, "OBJECT_PT_duplication", "Duplication", "Object", object_panel_duplication, 3);
- uiPanelLayout(C, ar, "OBJECT_PT_animation", "Animation", "Object", object_panel_animation, 4);
- }
+ PanelType *pt;
+
+ /* panels: transform */
+ pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
+ pt->idname= "OBJECT_PT_transform";
+ pt->name= "Transform";
+ pt->context= "object";
+ pt->draw= object_panel_transform;
+ BLI_addtail(&art->paneltypes, pt);
+
+ /* panels: groups */
+ pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
+ pt->idname= "OBJECT_PT_groups";
+ pt->name= "Groups";
+ pt->context= "object";
+ pt->draw= object_panel_groups;
+ BLI_addtail(&art->paneltypes, pt);
+
+ /* panels: display */
+ pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
+ pt->idname= "OBJECT_PT_display";
+ pt->name= "Display";
+ pt->context= "object";
+ pt->draw= object_panel_display;
+ BLI_addtail(&art->paneltypes, pt);
+
+ /* panels: duplication */
+ pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
+ pt->idname= "OBJECT_PT_duplication";
+ pt->name= "Duplication";
+ pt->context= "object";
+ pt->draw= object_panel_duplication;
+ BLI_addtail(&art->paneltypes, pt);
+
+ /* panels: animation */
+ pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
+ pt->idname= "OBJECT_PT_animation";
+ pt->name= "Animation";
+ pt->context= "object";
+ pt->draw= object_panel_animation;
+ BLI_addtail(&art->paneltypes, pt);
}
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index 3205fea2a15..bae318ff454 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -158,41 +158,51 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C);
- View2D *v2d= &ar->v2d;
- float col[3], fac;
- int align= 0;
-
- /* clear and setup matrix */
- UI_GetThemeColor3fv(TH_BACK, col);
- glClearColor(col[0], col[1], col[2], 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- UI_view2d_view_ortho(C, v2d);
- /* swapbuffers indicator */
- fac= BLI_frand();
- glColor3f(fac, fac, fac);
- glRecti(20, v2d->cur.ymin+2, 30, v2d->cur.ymin+12);
-
- /* panels */
- if(sbuts->mainb == CONTEXT_SCENE)
- buttons_scene(C, ar);
- else if(sbuts->mainb == CONTEXT_OBJECT)
- buttons_object(C, ar);
- else
- drawnewstuff();
-
- if(sbuts->align)
- if(sbuts->re_align || sbuts->mainbo!=sbuts->mainb || sbuts->tabo!=sbuts->tab[sbuts->mainb])
- align= 1;
+ if(sbuts->mainb == CONTEXT_OBJECT) {
+ int tab= sbuts->tab[CONTEXT_OBJECT];
+ int vertical= (sbuts->align == 2);
- uiDrawPanels(C, 1); // XXX align);
- uiMatchPanelsView2d(ar);
-
- /* reset view matrix */
- UI_view2d_view_restore(C);
-
- /* scrollers? */
+ if(tab == TAB_OBJECT_OBJECT)
+ uiRegionPanelLayout(C, ar, vertical, "object");
+ }
+ else {
+ View2D *v2d= &ar->v2d;
+ float col[3], fac;
+ //int align= 0;
+
+ /* clear and setup matrix */
+ UI_GetThemeColor3fv(TH_BACK, col);
+ glClearColor(col[0], col[1], col[2], 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ UI_view2d_view_ortho(C, v2d);
+
+ /* swapbuffers indicator */
+ fac= BLI_frand();
+ glColor3f(fac, fac, fac);
+ glRecti(20, v2d->cur.ymin+2, 30, v2d->cur.ymin+12);
+
+ /* panels */
+ if(sbuts->mainb == CONTEXT_SCENE)
+ buttons_scene(C, ar);
+ else
+ drawnewstuff();
+
+#if 0
+ if(sbuts->align)
+ if(sbuts->re_align || sbuts->mainbo!=sbuts->mainb || sbuts->tabo!=sbuts->tab[sbuts->mainb])
+ align= 1;
+#endif
+
+ uiDrawPanels(C, 1); // XXX align);
+ uiMatchPanelsView2d(ar);
+
+ /* reset view matrix */
+ UI_view2d_view_restore(C);
+
+ /* scrollers? */
+ }
}
void buttons_operatortypes(void)
@@ -271,6 +281,8 @@ void ED_spacetype_buttons(void)
art->listener= buttons_area_listener;
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
+ buttons_object_register(art);
+
BLI_addhead(&st->regiontypes, art);
/* regions: header */
@@ -295,7 +307,6 @@ void ED_spacetype_buttons(void)
BLI_addhead(&st->regiontypes, art);
-
BKE_spacetype_register(st);
}