|
|
|
|
@@ -258,43 +258,16 @@ static void panels_collapse_all(ScrArea *sa, ARegion *ar, const Panel *from_pa)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void ui_panel_copy_offset(Panel *pa, Panel *papar)
|
|
|
|
|
{
|
|
|
|
|
/* with respect to sizes... papar is parent */
|
|
|
|
|
|
|
|
|
|
pa->ofsx = papar->ofsx;
|
|
|
|
|
pa->ofsy = papar->ofsy + papar->sizey - pa->sizey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* XXX Disabled paneltab handling for now. Old 2.4x feature,
|
|
|
|
|
* *DO NOT* confuse it with new tool tabs in 2.70. ;)
|
|
|
|
|
* See also T41704.
|
|
|
|
|
*/
|
|
|
|
|
/* #define UI_USE_PANELTAB */
|
|
|
|
|
|
|
|
|
|
Panel *UI_panel_find_by_type(ListBase *lb, PanelType *pt)
|
|
|
|
|
{
|
|
|
|
|
Panel *pa;
|
|
|
|
|
const char *idname = pt->idname;
|
|
|
|
|
|
|
|
|
|
#ifdef UI_USE_PANELTAB
|
|
|
|
|
const char *tabname = pt->idname;
|
|
|
|
|
for (pa = lb->first; pa; pa = pa->next) {
|
|
|
|
|
if (STREQLEN(pa->panelname, idname, sizeof(pa->panelname))) {
|
|
|
|
|
if (STREQLEN(pa->tabname, tabname, sizeof(pa->tabname))) {
|
|
|
|
|
return pa;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
for (pa = lb->first; pa; pa = pa->next) {
|
|
|
|
|
if (STREQLEN(pa->panelname, idname, sizeof(pa->panelname))) {
|
|
|
|
|
return pa;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -307,10 +280,6 @@ Panel *UI_panel_begin(
|
|
|
|
|
Panel *palast, *panext;
|
|
|
|
|
const char *drawname = CTX_IFACE_(pt->translation_context, pt->label);
|
|
|
|
|
const char *idname = pt->idname;
|
|
|
|
|
#ifdef UI_USE_PANELTAB
|
|
|
|
|
const char *tabname = pt->idname;
|
|
|
|
|
const char *hookname = NULL;
|
|
|
|
|
#endif
|
|
|
|
|
const bool newpanel = (pa == NULL);
|
|
|
|
|
int align = panel_aligned(sa, ar);
|
|
|
|
|
|
|
|
|
|
@@ -341,28 +310,6 @@ Panel *UI_panel_begin(
|
|
|
|
|
pa->runtime_flag |= PNL_NEW_ADDED;
|
|
|
|
|
|
|
|
|
|
BLI_addtail(lb, pa);
|
|
|
|
|
|
|
|
|
|
#ifdef UI_USE_PANELTAB
|
|
|
|
|
BLI_strncpy(pa->tabname, tabname, sizeof(pa->tabname));
|
|
|
|
|
|
|
|
|
|
/* make new Panel tabbed? */
|
|
|
|
|
if (hookname) {
|
|
|
|
|
Panel *patab;
|
|
|
|
|
for (patab = lb->first; patab; patab = patab->next) {
|
|
|
|
|
if ((patab->runtime_flag & PNL_ACTIVE) && patab->paneltab == NULL) {
|
|
|
|
|
if (STREQLEN(hookname, patab->panelname, sizeof(patab->panelname))) {
|
|
|
|
|
if (STREQLEN(tabname, patab->tabname, sizeof(patab->tabname))) {
|
|
|
|
|
pa->paneltab = patab;
|
|
|
|
|
ui_panel_copy_offset(pa, patab);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
BLI_strncpy(pa->tabname, idname, sizeof(pa->tabname));
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Do not allow closed panels without headers! Else user could get "disappeared" UI! */
|
|
|
|
|
@@ -411,9 +358,6 @@ Panel *UI_panel_begin(
|
|
|
|
|
|
|
|
|
|
*r_open = false;
|
|
|
|
|
|
|
|
|
|
if (pa->paneltab) {
|
|
|
|
|
return pa;
|
|
|
|
|
}
|
|
|
|
|
if (pa->flag & PNL_CLOSED) {
|
|
|
|
|
return pa;
|
|
|
|
|
}
|
|
|
|
|
@@ -706,9 +650,6 @@ void ui_draw_aligned_panel(uiStyle *style,
|
|
|
|
|
* can't be dragged. This may be changed in future. */
|
|
|
|
|
show_background);
|
|
|
|
|
|
|
|
|
|
if (panel->paneltab) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (panel->type && (panel->type->flag & PNL_NO_HEADER)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
@@ -936,12 +877,6 @@ static int get_panel_real_ofsy(Panel *pa)
|
|
|
|
|
if (pa->flag & PNL_CLOSEDY) {
|
|
|
|
|
return pa->ofsy + pa->sizey;
|
|
|
|
|
}
|
|
|
|
|
else if (pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDY)) {
|
|
|
|
|
return pa->ofsy + pa->sizey;
|
|
|
|
|
}
|
|
|
|
|
else if (pa->paneltab) {
|
|
|
|
|
return pa->paneltab->ofsy;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return pa->ofsy;
|
|
|
|
|
}
|
|
|
|
|
@@ -952,9 +887,6 @@ static int get_panel_real_ofsx(Panel *pa)
|
|
|
|
|
if (pa->flag & PNL_CLOSEDX) {
|
|
|
|
|
return pa->ofsx + get_panel_header(pa);
|
|
|
|
|
}
|
|
|
|
|
else if (pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDX)) {
|
|
|
|
|
return pa->ofsx + get_panel_header(pa);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return pa->ofsx + pa->sizex;
|
|
|
|
|
}
|
|
|
|
|
@@ -1069,7 +1001,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo
|
|
|
|
|
|
|
|
|
|
/* count active, not tabbed panels */
|
|
|
|
|
for (pa = ar->panels.first; pa; pa = pa->next) {
|
|
|
|
|
if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) {
|
|
|
|
|
if (pa->runtime_flag & PNL_ACTIVE) {
|
|
|
|
|
tot++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -1080,7 +1012,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo
|
|
|
|
|
|
|
|
|
|
/* extra; change close direction? */
|
|
|
|
|
for (pa = ar->panels.first; pa; pa = pa->next) {
|
|
|
|
|
if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) {
|
|
|
|
|
if (pa->runtime_flag & PNL_ACTIVE) {
|
|
|
|
|
if ((pa->flag & PNL_CLOSEDX) && (align == BUT_VERTICAL)) {
|
|
|
|
|
pa->flag ^= PNL_CLOSED;
|
|
|
|
|
}
|
|
|
|
|
@@ -1095,7 +1027,7 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo
|
|
|
|
|
|
|
|
|
|
ps = panelsort;
|
|
|
|
|
for (pa = ar->panels.first; pa; pa = pa->next) {
|
|
|
|
|
if ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab == NULL) {
|
|
|
|
|
if (pa->runtime_flag & PNL_ACTIVE) {
|
|
|
|
|
ps->pa = MEM_dupallocN(pa);
|
|
|
|
|
ps->orig = pa;
|
|
|
|
|
ps++;
|
|
|
|
|
@@ -1162,9 +1094,6 @@ static bool uiAlignPanelStep(ScrArea *sa, ARegion *ar, const float fac, const bo
|
|
|
|
|
/* set locations for tabbed and sub panels */
|
|
|
|
|
for (pa = ar->panels.first; pa; pa = pa->next) {
|
|
|
|
|
if (pa->runtime_flag & PNL_ACTIVE) {
|
|
|
|
|
if (pa->paneltab) {
|
|
|
|
|
ui_panel_copy_offset(pa, pa->paneltab);
|
|
|
|
|
}
|
|
|
|
|
if (pa->children.first) {
|
|
|
|
|
align_sub_panels(pa);
|
|
|
|
|
}
|
|
|
|
|
@@ -1267,7 +1196,7 @@ void UI_panels_end(const bContext *C, ARegion *ar, int *r_x, int *r_y)
|
|
|
|
|
{
|
|
|
|
|
ScrArea *sa = CTX_wm_area(C);
|
|
|
|
|
uiBlock *block;
|
|
|
|
|
Panel *panot, *panew, *patest, *pa, *firstpa;
|
|
|
|
|
Panel *pa, *firstpa;
|
|
|
|
|
|
|
|
|
|
/* offset contents */
|
|
|
|
|
for (block = ar->uiblocks.first; block; block = block->next) {
|
|
|
|
|
@@ -1276,31 +1205,6 @@ void UI_panels_end(const bContext *C, ARegion *ar, int *r_x, int *r_y)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* consistency; are panels not made, whilst they have tabs */
|
|
|
|
|
for (panot = ar->panels.first; panot; panot = panot->next) {
|
|
|
|
|
if ((panot->runtime_flag & PNL_ACTIVE) == 0) { /* not made */
|
|
|
|
|
|
|
|
|
|
for (panew = ar->panels.first; panew; panew = panew->next) {
|
|
|
|
|
if ((panew->runtime_flag & PNL_ACTIVE)) {
|
|
|
|
|
if (panew->paneltab == panot) { /* panew is tab in notmade pa */
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* now panew can become the new parent, check all other tabs */
|
|
|
|
|
if (panew) {
|
|
|
|
|
for (patest = ar->panels.first; patest; patest = patest->next) {
|
|
|
|
|
if (patest->paneltab == panot) {
|
|
|
|
|
patest->paneltab = panew;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
panot->paneltab = panew;
|
|
|
|
|
panew->paneltab = NULL;
|
|
|
|
|
ED_region_tag_redraw(ar); /* the buttons panew were not made */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* re-align, possibly with animation */
|
|
|
|
|
if (panels_need_realign(sa, ar, &pa)) {
|
|
|
|
|
if (pa) {
|
|
|
|
|
@@ -1382,7 +1286,7 @@ static void check_panel_overlap(ARegion *ar, Panel *panel)
|
|
|
|
|
for (pa = ar->panels.first; pa; pa = pa->next) {
|
|
|
|
|
pa->flag &= ~PNL_OVERLAP;
|
|
|
|
|
if (panel && (pa != panel)) {
|
|
|
|
|
if (pa->paneltab == NULL && (pa->runtime_flag & PNL_ACTIVE)) {
|
|
|
|
|
if (pa->runtime_flag & PNL_ACTIVE) {
|
|
|
|
|
float safex = 0.2, safey = 0.2;
|
|
|
|
|
|
|
|
|
|
if (pa->flag & PNL_CLOSEDX) {
|
|
|
|
|
@@ -1724,17 +1628,6 @@ static void ui_handle_panel_header(
|
|
|
|
|
ui_panel_drag_collapse_handler_add(C, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (Panel *pa = ar->panels.first; pa; pa = pa->next) {
|
|
|
|
|
if (pa->paneltab == block->panel) {
|
|
|
|
|
if (block->panel->flag & PNL_CLOSED) {
|
|
|
|
|
pa->flag |= PNL_CLOSED;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
pa->flag &= ~PNL_CLOSED;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (align) {
|
|
|
|
|
@@ -2386,7 +2279,7 @@ int ui_handler_panel_region(bContext *C,
|
|
|
|
|
/* checks for mouse position inside */
|
|
|
|
|
pa = block->panel;
|
|
|
|
|
|
|
|
|
|
if (!pa || pa->paneltab != NULL) {
|
|
|
|
|
if (!pa) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
/* XXX - accessed freed panels when scripts reload, need to fix. */
|
|
|
|
|
|