Revision: 18075
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18075
Author:   blendix
Date:     2008-12-26 14:11:04 +0100 (Fri, 26 Dec 2008)

Log Message:
-----------
UI: Panels

* API and usage is basically the same still.
* Panels were moved to region level. I first thought of keeping them at area
  level, but having them at region level it's simpler to handle events and do
  drawing, and also to integrate with view2d. They can still become area level
  overlapping regions, if we make a floating (or docked) region that can
  contain panels.
* Added back a few panels from the scene buttons for testing.

Issues still:
* The view2d handling and alignment refresh of panels is not correct yet in the
  buttons window. 
* I did not yet bring back the block handlers system. It was basically a system
  that stored which panel was open and where the events for that panel would go.
  Just a few functions, but not sure how it fits in 2.5.
* There was a case where dragging panels would not properly remove the window
  level handler, but could not redo anymore even though I don't think I fixed
  it.
* Some text in the panels goes past the end of the button, that is due to the
  checkmark button drawing, not related to this commit.

Other UI code changes:
* Renamed interface.h to interface_intern.h for consistency.
* Fixed some issues with freeing of blocks when they changed due to context.
* uiDrawBlock now takes a context pointer (mostly for block drawextra).

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_draw.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_icons.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/interface/view2d.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
    
branches/blender2.5/blender/source/blender/editors/space_action/action_draw.c
    
branches/blender2.5/blender/source/blender/editors/space_action/action_header.c
    branches/blender2.5/blender/source/blender/editors/space_buttons/Makefile
    branches/blender2.5/blender/source/blender/editors/space_buttons/SConscript
    
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_header.c
    
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_intern.h
    
branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_file/file_header.c
    
branches/blender2.5/blender/source/blender/editors/space_image/image_header.c
    branches/blender2.5/blender/source/blender/editors/space_info/info_header.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_header.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_header.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_draw.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_header.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    
branches/blender2.5/blender/source/blender/editors/space_outliner/outliner_header.c
    
branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
    
branches/blender2.5/blender/source/blender/editors/space_script/script_header.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
    
branches/blender2.5/blender/source/blender/editors/space_sound/sound_header.c
    branches/blender2.5/blender/source/blender/editors/space_text/text_header.c
    branches/blender2.5/blender/source/blender/editors/space_time/time_header.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_space_types.h

Added Paths:
-----------
    
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    
branches/blender2.5/blender/source/blender/editors/interface/interface_panel.c
    
branches/blender2.5/blender/source/blender/editors/space_buttons/buttons_scene.c

Removed Paths:
-------------
    branches/blender2.5/blender/source/blender/editors/interface/interface.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c       
2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c       
2008-12-26 13:11:04 UTC (rev 18075)
@@ -123,6 +123,7 @@
 ARegion *BKE_area_region_copy(ARegion *ar)
 {
        ARegion *newar= MEM_dupallocN(ar);
+       Panel *pa, *newpa, *patab;
        
        newar->handlers.first= newar->handlers.last= NULL;
        newar->uiblocks.first= newar->uiblocks.last= NULL;
@@ -131,7 +132,24 @@
        /* XXX regiondata callback */
        if(ar->regiondata)
                newar->regiondata= MEM_dupallocN(ar->regiondata);
+
+       newar->panels.first= newar->panels.last= NULL;
+       BLI_duplicatelist(&newar->panels, &ar->panels);
        
+       /* copy panel pointers */
+       for(newpa= newar->panels.first; newpa; newpa= newpa->next) {
+               patab= newar->panels.first;
+               pa= ar->panels.first;
+               while(patab) {
+                       if(newpa->paneltab == pa) {
+                               newpa->paneltab = patab;
+                               break;
+                       }
+                       patab= patab->next;
+                       pa= pa->next;
+               }
+       }
+       
        return newar;
 }
 
@@ -174,8 +192,12 @@
 /* not region itself */
 void BKE_area_region_free(ARegion *ar)
 {
-       if(ar && ar->type && ar->type->free)
-               ar->type->free(ar);
+       if(ar) {
+               if(ar->type && ar->type->free)
+                       ar->type->free(ar);
+
+               BLI_freelistN(&ar->panels);
+       }
 }
 
 /* not area itself */
@@ -193,10 +215,6 @@
        BLI_freelistN(&sa->regionbase);
        BLI_freelistN(&sa->actionzones);
        
-       BLI_freelistN(&sa->panels);
-       //      uiFreeBlocks(&sa->uiblocks);
-       //      uiFreePanels(&sa->panels);
-       
 #ifndef DISABLE_PYTHON
        BPY_free_scriptlink(&sa->scriptlink);
 #endif

Modified: 
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c     
2008-12-26 13:11:04 UTC (rev 18075)
@@ -3560,7 +3560,7 @@
        if(sce->sculptdata.cumap)
                direct_link_curvemapping(fd, sce->sculptdata.cumap);
        else
-               ; //XXX sculpt_reset_curve(&sce->sculptdata);
+               sculpt_reset_curve(&sce->sculptdata);
 
        if(sce->ed) {
                ListBase *old_seqbasep= &((Editing *)sce->ed)->seqbase;
@@ -4150,6 +4150,17 @@
 
 static void direct_link_region(FileData *fd, ARegion *ar)
 {
+       Panel *pa;
+
+       link_list(fd, &(ar->panels));
+
+       for(pa= ar->panels.first; pa; pa=pa->next) {
+               pa->paneltab= newdataadr(fd, pa->paneltab);
+               pa->active= 0;
+               pa->sortcounter= 0;
+               pa->activedata= NULL;
+       }
+
        ar->handlers.first= ar->handlers.last= NULL;
        ar->uiblocks.first= ar->uiblocks.last= NULL;
        ar->headerstr= NULL;
@@ -4200,16 +4211,13 @@
 
        /* areas */
        for(sa= sc->areabase.first; sa; sa= sa->next) {
-               Panel *pa;
                SpaceLink *sl;
                ARegion *ar;
 
                link_list(fd, &(sa->spacedata));
-               link_list(fd, &(sa->panels));
                link_list(fd, &(sa->regionbase));
 
                sa->handlers.first= sa->handlers.last= NULL;
-               sa->uiblocks.first= sa->uiblocks.last= NULL;
                sa->type= NULL; /* spacetype callbacks */
                
                /* accident can happen when read/save new file with older 
version */
@@ -4220,12 +4228,6 @@
                        BLI_addtail(&sa->spacedata, sinfo);
                }
                
-               for(pa= sa->panels.first; pa; pa=pa->next) {
-                       pa->paneltab= newdataadr(fd, pa->paneltab);
-                       pa->active= 0;
-                       pa->sortcounter= 0;
-               }
-               
                for (sl= sa->spacedata.first; sl; sl= sl->next) {
                        link_list(fd, &(sl->regionbase));
 
@@ -4705,19 +4707,19 @@
 static int map_223_keybd_code_to_224_keybd_code(int code)
 {
        switch (code) {
-//XXX  case 312:       return F12KEY;
-//XXX          case 159:       return PADSLASHKEY;
-//XXX          case 161:       return PAD0;
-//XXX          case 154:       return PAD1;
-//XXX          case 150:       return PAD2;
-//XXX          case 155:       return PAD3;
-//XXX          case 151:       return PAD4;
-//XXX          case 156:       return PAD5;
-//XXX          case 152:       return PAD6;
-//XXX          case 157:       return PAD7;
-//XXX          case 153:       return PAD8;
-//XXX          case 158:       return PAD9;
-       default: return code;
+               case 312:       return 311; /* F12KEY */
+               case 159:       return 161; /* PADSLASHKEY */
+               case 161:       return 150; /* PAD0 */
+               case 154:       return 151; /* PAD1 */
+               case 150:       return 152; /* PAD2 */
+               case 155:       return 153; /* PAD3 */
+               case 151:       return 154; /* PAD4 */
+               case 156:       return 155; /* PAD5 */
+               case 152:       return 156; /* PAD6 */
+               case 157:       return 157; /* PAD7 */
+               case 153:       return 158; /* PAD8 */
+               case 158:       return 159; /* PAD9 */
+               default: return code;
        }
 }
 

Modified: 
branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c    
2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c    
2008-12-26 13:11:04 UTC (rev 18075)
@@ -1655,12 +1655,13 @@
 
                        writestruct(wd, DATA, "ScrArea", 1, sa);
 
-                       for(pa= sa->panels.first; pa; pa= pa->next)
-                               writestruct(wd, DATA, "Panel", 1, pa);
-                       
-                       for(ar= sa->regionbase.first; ar; ar= ar->next)
+                       for(ar= sa->regionbase.first; ar; ar= ar->next) {
                                writestruct(wd, DATA, "ARegion", 1, ar);
 
+                               for(pa= ar->panels.first; pa; pa= pa->next)
+                                       writestruct(wd, DATA, "Panel", 1, pa);
+                       }
+
                        /* space handler scriptlinks */
                        write_scriptlink(wd, &sa->scriptlink);
 

Modified: 
branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h    
2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h    
2008-12-26 13:11:04 UTC (rev 18075)
@@ -39,6 +39,7 @@
 struct gla2DDrawInfo;
 struct Object;
 struct bActionGroup;
+struct Ipo;
 struct IpoCurve;
 
 /* ************************************************ */

Modified: 
branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2008-12-26 13:11:04 UTC (rev 18075)
@@ -176,7 +176,6 @@
 /* Common Drawing Functions */
 
 void uiEmboss(float x1, float y1, float x2, float y2, int sel);
-void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float 
rad, int active);
 void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad);
 void uiSetRoundBox(int type);
 void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad);
@@ -222,12 +221,13 @@
 
 uiBlock *uiBeginBlock(const struct bContext *C, struct ARegion *region, char 
*name, short dt, short font);
 void uiEndBlock(const struct bContext *C, uiBlock *block);
+void uiDrawBlock(const struct bContext *C, struct uiBlock *block);
 uiBlock *uiGetBlock(char *name, struct ARegion *ar);
 void uiFreeBlock(const struct bContext *C, uiBlock *block);
 void uiFreeBlocks(const struct bContext *C, struct ListBase *lb);
+void uiFreeInactiveBlocks(const struct bContext *C, struct ListBase *lb);
 
 void uiBoundsBlock(struct uiBlock *block, int addval);
-void uiDrawBlock(struct uiBlock *block);
 void uiTextBoundsBlock(uiBlock *block, int addval);
 
 void uiBlockSetButLock(uiBlock *block, int val, char *lockstr);
@@ -357,18 +357,16 @@
 
 extern void uiFreePanels(struct ListBase *lb);
 extern void uiNewPanelTabbed(char *, char *);
-extern int uiNewPanel(struct ScrArea *sa, struct uiBlock *block, char 
*panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey);
+extern int uiNewPanel(const struct bContext *C, struct ARegion *ar, uiBlock 
*block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int 
sizey);
+extern void uiDrawPanels(const struct bContext *C, int re_align);
        
-extern void uiSetPanel_view2d(struct ScrArea *sa);
-extern void uiMatchPanel_view2d(struct ScrArea *sa);
+extern void uiSetPanelsView2d(struct ARegion *ar);
+extern void uiMatchPanelsView2d(struct ARegion *ar);
 
-extern void uiDrawBlocksPanels(struct ScrArea *sa, int re_align);
 extern void uiNewPanelHeight(struct uiBlock *block, int sizey);
 extern void uiNewPanelTitle(struct uiBlock *block, char *str);
-extern void uiPanelPush(struct uiBlock *block);
-extern void uiPanelPop(struct uiBlock *block);
 extern uiBlock *uiFindOpenPanelBlockName(ListBase *lb, char *name);
-extern int uiAlignPanelStep(struct ScrArea *sa, float fac);
+extern int uiAlignPanelStep(struct ScrArea *sa, struct ARegion *ar, float fac);
 extern void uiPanelControl(int);
 extern void uiSetPanelHandler(int);
 
@@ -383,6 +381,7 @@
 /* Handlers for regions with UI blocks */
 
 void UI_add_region_handlers(struct ListBase *handlers);
+void UI_add_area_handlers(struct ListBase *handlers);
 void UI_add_popup_handlers(struct ListBase *handlers, uiMenuBlockHandle *menu);
 
 /* Module initialization and exit */

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2008-12-26 12:39:53 UTC (rev 18074)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c    
2008-12-26 13:11:04 UTC (rev 18075)
@@ -69,7 +69,7 @@
 #include "RNA_access.h"
 #include "RNA_types.h"
 
-#include "interface.h"
+#include "interface_intern.h"
 
 /* 
  * a full doc with API notes can be found in 
bf-blender/blender/doc/interface_API.txt
@@ -86,7 +86,6 @@
 
 /* ************* translation ************** */
 
-/* XXX 2.50 missing from context */
 int ui_translate_buttons()
 {
        return (U.transopts & USER_TR_BUTTONS);
@@ -116,6 +115,12 @@
 
        gx= *x;
        gy= *y;
+
+       if(block->panel) {
+               gx += block->panel->ofsx;
+               gy += block->panel->ofsy;
+       }
+
        *x= ((float)sx) + ((float)getsizex)*(0.5+ 0.5*(gx*block->winmat[0][0]+ 
gy*block->winmat[1][0]+ block->winmat[3][0]));
        *y= ((float)sy) + ((float)getsizey)*(0.5+ 0.5*(gx*block->winmat[0][1]+ 
gy*block->winmat[1][1]+ block->winmat[3][1]));
 }
@@ -170,6 +175,11 @@
 
        *y=  (a*(py-f) + d*(c-px))/(a*e-d*b);
        *x= (px- b*(*y)- c)/a;
+
+       if(block->panel) {
+               *x -= block->panel->ofsx;
+               *y -= block->panel->ofsy;
+       }
 }
 
 void ui_window_to_block(const ARegion *ar, uiBlock *block, int *x, int *y)
@@ -482,7 +492,6 @@

@@ 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