UI: added support for enable buttons in the panel header.
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 20 May 2009 14:46:49 +0000 (14:46 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 20 May 2009 14:46:49 +0000 (14:46 +0000)
release/ui/buttons_material.py
release/ui/buttons_scene.py
release/ui/buttons_world.py
source/blender/editors/interface/interface_panel.c
source/blender/editors/screen/area.c
source/blender/makesdna/DNA_screen_types.h

index af24bba57c7a3cf5ed1be59985d7d92db06f31b8..665a522373789b3517ca568a137d5d106e36827d 100644 (file)
@@ -36,16 +36,17 @@ class MATERIAL_PT_sss(MaterialButtonsPanel):
        def poll(self, context):
                ob = context.active_object
                return (ob and ob.active_material and ob.active_material.type == "SURFACE")
+
+       def draw_header(self, context):
+               sss = context.active_object.active_material.subsurface_scattering
+
+               layout = self.layout
+               layout.itemR(sss, "enabled", text="")
        
        def draw(self, context):
                layout = self.layout
                sss = context.active_object.active_material.subsurface_scattering
                
-               if not sss:
-                       return
-               
-               layout.itemR(sss, "enabled", text="Enable")
-               
                flow = layout.column_flow()
                flow.itemR(sss, "error_tolerance")
                flow.itemR(sss, "ior")
@@ -73,7 +74,7 @@ class MATERIAL_PT_raymir(MaterialButtonsPanel):
                raym = context.active_object.active_material.raytrace_mirror
 
                layout = self.layout
-               layout.itemR(raym, "enabled", text=self.__label__)
+               layout.itemR(raym, "enabled", text="")
        
        def draw(self, context):
                layout = self.layout
@@ -105,11 +106,15 @@ class MATERIAL_PT_raytransp(MaterialButtonsPanel):
                ob = context.active_object
                return (ob and ob.active_material and ob.active_material.type == "SURFACE")
 
+       def draw_header(self, context):
+               rayt = context.active_object.active_material.raytrace_transparency
+
+               layout = self.layout
+               layout.itemR(rayt, "enabled", text="")
+
        def draw(self, context):
                layout = self.layout
                rayt = context.active_object.active_material.raytrace_transparency
-
-               layout.itemR(rayt, "enabled", text="Enable")
                
                split = layout.split()
                
index b5cba23f989c34091b4cd11137691c918785a417..360122fb8051cd60c60b9cdc6a859bc20bb5e1d4 100644 (file)
@@ -70,28 +70,30 @@ class RENDER_PT_output(RenderButtonsPanel):
 class RENDER_PT_antialiasing(RenderButtonsPanel):
        __label__ = "Anti-Aliasing"
 
+       def draw_header(self, context):
+               rd = context.scene.render_data
+
+               layout = self.layout
+               layout.itemR(rd, "antialiasing", text="")
+
        def draw(self, context):
                scene = context.scene
                layout = self.layout
 
                rd = scene.render_data
 
-               row = layout.row()
-               row.itemR(rd, "antialiasing", text="Enable")
+               split = layout.split()
+               
+               sub = split.column()
+               sub.itemL(text="Samples:")
+               sub.row().itemR(rd, "antialiasing_samples", expand=True)
 
-               if rd.antialiasing:
-                       split = layout.split()
-                       
-                       sub = split.column()
-                       sub.itemL(text="Samples:")
-                       sub.row().itemR(rd, "antialiasing_samples", expand=True)
-       
-                       sub = split.column()
-                       sub.itemR(rd, "pixel_filter")
-                       sub.itemR(rd, "filter_size", text="Size")
-                       sub.itemR(rd, "save_buffers")
-                       if rd.save_buffers:
-                               sub.itemR(rd, "full_sample")
+               sub = split.column()
+               sub.itemR(rd, "pixel_filter")
+               sub.itemR(rd, "filter_size", text="Size")
+               sub.itemR(rd, "save_buffers")
+               if rd.save_buffers:
+                       sub.itemR(rd, "full_sample")
 
 class RENDER_PT_render(RenderButtonsPanel):
        __label__ = "Render"
@@ -172,4 +174,4 @@ bpy.types.register(RENDER_PT_render)
 bpy.types.register(RENDER_PT_dimensions)
 bpy.types.register(RENDER_PT_antialiasing)
 bpy.types.register(RENDER_PT_shading)
-bpy.types.register(RENDER_PT_output)
\ No newline at end of file
+bpy.types.register(RENDER_PT_output)
index f8ccf4f329f958f6f4eb7611c6f71e33ff4d46af..0bcd466366a3efa3538c104bb4a42a7756a18364 100644 (file)
@@ -40,12 +40,15 @@ class WORLD_PT_color_correction(WorldButtonsPanel):
 class WORLD_PT_mist(WorldButtonsPanel):
        __label__ = "Mist"
 
-       def draw(self, context):
+       def draw_header(self, context):
                world = context.scene.world
+
                layout = self.layout
+               layout.itemR(world.mist, "enabled", text="")
 
-               row = layout.row()
-               row.itemR(world.mist, "enabled", text="Enable")
+       def draw(self, context):
+               world = context.scene.world
+               layout = self.layout
 
                flow = layout.column_flow()
                flow.itemR(world.mist, "start")
@@ -59,12 +62,15 @@ class WORLD_PT_mist(WorldButtonsPanel):
 class WORLD_PT_stars(WorldButtonsPanel):
        __label__ = "Stars"
 
-       def draw(self, context):
+       def draw_header(self, context):
                world = context.scene.world
+
                layout = self.layout
+               layout.itemR(world.stars, "enabled", text="")
 
-               row = layout.row()
-               row.itemR(world.stars, "enabled", text="Enable")
+       def draw(self, context):
+               world = context.scene.world
+               layout = self.layout
 
                flow = layout.column_flow()
                flow.itemR(world.stars, "size")
@@ -75,14 +81,18 @@ class WORLD_PT_stars(WorldButtonsPanel):
 class WORLD_PT_ambient_occlusion(WorldButtonsPanel):
        __label__ = "Ambient Occlusion"
 
+       def draw_header(self, context):
+               world = context.scene.world
+
+               layout = self.layout
+               layout.itemR(world.ambient_occlusion, "enabled", text="")
+
        def draw(self, context):
                world = context.scene.world
                layout = self.layout
 
                ao = world.ambient_occlusion
                
-               row = layout.row()
-               row.itemR(ao, "enabled", text="Enable")
                row = layout.row()
                row.itemR(ao, "gather_method", expand=True)
                
index 966837500626c0ddb2a01bf2048e1fd6828b9f14..5cb06845bdf4a570398048f4f2bf9ddec49f6ac3 100644 (file)
@@ -297,16 +297,16 @@ static void ui_offset_panel_block(uiBlock *block)
 {
        uiStyle *style= U.uistyles.first;
        uiBut *but;
-       int space= style->panelspace;
+       int ofsy;
 
-       /* buttons min/max centered, offset calculated */
+       /* compute bounds and offset */
        ui_bounds_block(block);
 
+       ofsy= block->panel->sizey - style->panelspace;
+
        for(but= block->buttons.first; but; but=but->next) {
-               but->x1= space + (but->x1-block->minx);
-               but->y1= space + (but->y1-block->miny);
-               but->x2= space + (but->x2-block->minx);
-               but->y2= space + (but->y2-block->miny);
+               but->y1 += ofsy;
+               but->y2 += ofsy;
        }
 
        block->maxx= block->panel->sizex;
@@ -453,6 +453,8 @@ static void ui_draw_aligned_panel_header(ARegion *ar, uiStyle *style, uiBlock *b
        /* + 0.001f to avoid flirting with float inaccuracy */
        if(panel->control & UI_PNL_CLOSE) pnl_icons=(2*PNL_ICON+5)/block->aspect + 0.001f;
        else pnl_icons= (PNL_ICON+5)/block->aspect + 0.001f;
+
+       pnl_icons += panel->labelofs;
        
        if(nr==1) {
                
@@ -831,7 +833,7 @@ void uiEndPanels(const bContext *C, ARegion *ar)
        uiBlock *block;
        Panel *panot, *panew, *patest, *pa;
        
-       /* scaling contents */
+       /* offset contents */
        for(block= ar->uiblocks.first; block; block= block->next)
                if(block->active && block->panel)
                        ui_offset_panel_block(block);
index 4920182c16b7f26b71a38e43a5987ffa28941e36..2e551a26b73816a58834b0aac0fa7075048611d7 100644 (file)
@@ -968,7 +968,7 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex
        Panel *panel;
        View2D *v2d= &ar->v2d;
        float col[3];
-       int xco, yco, x, y, miny=0, w, em, header, open;
+       int xco, yco, x, y, miny=0, w, em, header, triangle, open;
 
        if(vertical) {
                w= v2d->cur.xmax - v2d->cur.xmin;
@@ -980,6 +980,7 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex
        }
 
        header= 20; // XXX
+       triangle= 22;
        x= 0;
        y= -style->panelouter;
 
@@ -1003,18 +1004,17 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex
                        if(vertical)
                                y -= header;
 
-                       /* XXX enable buttons test */
-#if 0
-                       panel->layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER,
-                               header+style->panelspace, header+style->panelspace, header, 1, style);
+                       if(pt->draw_header) {
+                               /* for enabled buttons */
+                               panel->layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER,
+                                       triangle, header+style->panelspace, header, 1, style);
 
-                       if(pt->draw_header)
                                pt->draw_header(C, panel);
-                       else
-                               uiItemL(panel->layout, pt->label, 0);
 
-                       panel->layout= NULL;
-#endif
+                               uiBlockLayoutResolve(C, block, &xco, &yco);
+                               panel->labelofs= xco - triangle;
+                               panel->layout= NULL;
+                       }
 
                        if(open) {
                                panel->type= pt;
@@ -1143,6 +1143,5 @@ void ED_region_header(const bContext *C, ARegion *ar)
 void ED_region_header_init(ARegion *ar)
 {
        UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy);
-       ar->v2d.flag &= ~(V2D_PIXELOFS_X|V2D_PIXELOFS_Y); // XXX temporary
 }
 
index 4a39744c1dc618e372f1835bd1cc0ec23a754685..418cc84205a36a574c6d3295f85bdc2c841172b8 100644 (file)
@@ -97,10 +97,11 @@ typedef struct Panel {              /* the part from uiBlock that needs saved in file */
        char panelname[64], tabname[64];        /* defined as UI_MAX_NAME_STR */
        char drawname[64];                                      /* panelname is identifier for restoring location */
        short ofsx, ofsy, sizex, sizey;
+       short labelofs, pad;
        short flag, runtime_flag;
        short control;
        short snap;
-       int sortorder, pad;                     /* panels are aligned according to increasing sortorder */
+       int sortorder;                  /* panels are aligned according to increasing sortorder */
        struct Panel *paneltab;         /* this panel is tabbed in *paneltab */
        void *activedata;                       /* runtime for panel manipulation */
 } Panel;