GPencil: Initial support for GP Layers in Outliner

This is still very rudimentary, and lacks many things.
* This needs a better icon. Perhaps we can look into using colour swatches here
  too like in all the other places?
* The "active" check needs to be implemented still
* Various restriction toggles to come still
This commit is contained in:
Joshua Leung 2015-02-07 12:50:22 +13:00
parent 68fc2e210e
commit 5ebae1c0c0
4 changed files with 30 additions and 2 deletions

@ -31,6 +31,7 @@
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_group_types.h"
#include "DNA_lamp_types.h"
#include "DNA_object_types.h"
@ -549,6 +550,17 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob);
break;
}
case TSE_GP_LAYER:
{
bGPdata *gpd = (bGPdata *)tselem->id; // id = GP Datablock
bGPDlayer *gpl = te->directdata;
// XXX: name needs translation stuff
BLI_uniquename(&gpd->layers, gpl, "GP Layer", '.',
offsetof(bGPDlayer, info), sizeof(gpl->info));
WM_event_add_notifier(C, NC_GPENCIL | ND_DATA, gpd);
break;
}
case TSE_R_LAYER:
break;
}
@ -1074,6 +1086,8 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
else
UI_icon_draw(x, y, RNA_struct_ui_icon(te->rnaptr.type));
break;
case TSE_GP_LAYER:
UI_icon_draw(x, y, ICON_DOT); break; // XXX: needs a dedicated icon?
default:
UI_icon_draw(x, y, ICON_DOT); break;
}

@ -104,6 +104,7 @@ typedef struct TreeElement {
#define TSE_KEYMAP 34
#define TSE_KEYMAP_ITEM 35
#define TSE_ID_BASE 36
#define TSE_GP_LAYER 37
/* button events */
#define OL_NAMEBUTTON 1

@ -873,6 +873,9 @@ eOLDrawState tree_element_type_active(
return tree_element_active_sequence_dup(scene, te, tselem, set);
case TSE_KEYMAP_ITEM:
return tree_element_active_keymap_item(C, te, tselem, set);
case TSE_GP_LAYER:
//return tree_element_active_gplayer(C, scene, te, tselem, set);
break;
}
return OL_DRAWSEL_NONE;

@ -823,8 +823,9 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
if (outliner_animdata_test(gpd->adt))
outliner_add_element(soops, &te->subtree, gpd, te, TSE_ANIM_DATA, 0);
// TODO: base element for layers?
for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
// TODO
outliner_add_element(soops, &te->subtree, gpl, te, TSE_GP_LAYER, a);
a++;
}
}
@ -875,6 +876,9 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
else if (type == TSE_ANIM_DATA) {
/* pass */
}
else if (type == TSE_GP_LAYER) {
/* pass */
}
else if (type == TSE_ID_BASE) {
/* pass */
}
@ -957,6 +961,12 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
}
}
}
else if (type == TSE_GP_LAYER) {
bGPDlayer *gpl = (bGPDlayer *)idv;
te->name = gpl->info;
te->directdata = gpl;
}
else if (type == TSE_SEQUENCE) {
Sequence *seq = (Sequence *) idv;
Sequence *p;