Merge branch 'master' into blender2.8
Conflicts: source/blender/editors/space_outliner/outliner_draw.c source/blender/editors/space_outliner/outliner_edit.c source/blender/editors/space_outliner/outliner_intern.h source/blender/editors/space_outliner/outliner_select.c
This commit is contained in:
commit
b557ceb2c1
|
@ -155,7 +155,7 @@ static void restrictbutton_recursive_ebone(bContext *C, EditBone *ebone_parent,
|
|||
}
|
||||
}
|
||||
|
||||
static void restrictbutton_recursive_bone(bContext *C, bArmature *arm, Bone *bone_parent, int flag, bool set_flag)
|
||||
static void restrictbutton_recursive_bone(Bone *bone_parent, int flag, bool set_flag)
|
||||
{
|
||||
Bone *bone;
|
||||
for (bone = bone_parent->childbase.first; bone; bone = bone->next) {
|
||||
|
@ -166,7 +166,7 @@ static void restrictbutton_recursive_bone(bContext *C, bArmature *arm, Bone *bon
|
|||
else {
|
||||
bone->flag &= ~flag;
|
||||
}
|
||||
restrictbutton_recursive_bone(C, arm, bone, flag, set_flag);
|
||||
restrictbutton_recursive_bone(bone, flag, set_flag);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -294,29 +294,27 @@ static void restrictbutton_modifier_cb(bContext *C, void *UNUSED(poin), void *po
|
|||
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
|
||||
}
|
||||
|
||||
static void restrictbutton_bone_visibility_cb(bContext *C, void *poin, void *poin2)
|
||||
static void restrictbutton_bone_visibility_cb(bContext *C, void *UNUSED(poin), void *poin2)
|
||||
{
|
||||
bArmature *arm = (bArmature *)poin;
|
||||
Bone *bone = (Bone *)poin2;
|
||||
if (bone->flag & BONE_HIDDEN_P)
|
||||
bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
|
||||
|
||||
if (CTX_wm_window(C)->eventstate->ctrl) {
|
||||
restrictbutton_recursive_bone(C, arm, bone, BONE_HIDDEN_P, (bone->flag & BONE_HIDDEN_P) != 0);
|
||||
restrictbutton_recursive_bone(bone, BONE_HIDDEN_P, (bone->flag & BONE_HIDDEN_P) != 0);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL);
|
||||
}
|
||||
|
||||
static void restrictbutton_bone_select_cb(bContext *C, void *poin, void *poin2)
|
||||
static void restrictbutton_bone_select_cb(bContext *C, void *UNUSED(poin), void *poin2)
|
||||
{
|
||||
bArmature *arm = (bArmature *)poin;
|
||||
Bone *bone = (Bone *)poin2;
|
||||
if (bone->flag & BONE_UNSELECTABLE)
|
||||
bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
|
||||
|
||||
if (CTX_wm_window(C)->eventstate->ctrl) {
|
||||
restrictbutton_recursive_bone(C, arm, bone, BONE_UNSELECTABLE, (bone->flag & BONE_UNSELECTABLE) != 0);
|
||||
restrictbutton_recursive_bone(bone, BONE_UNSELECTABLE, (bone->flag & BONE_UNSELECTABLE) != 0);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL);
|
||||
|
@ -893,7 +891,7 @@ static void outliner_draw_rnacols(ARegion *ar, int sizex)
|
|||
miny);
|
||||
}
|
||||
|
||||
static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, SpaceOops *soops, int sizex, ListBase *lb)
|
||||
static void outliner_draw_rnabuts(uiBlock *block, ARegion *ar, SpaceOops *soops, int sizex, ListBase *lb)
|
||||
{
|
||||
TreeElement *te;
|
||||
TreeStoreElem *tselem;
|
||||
|
@ -932,7 +930,7 @@ static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, Spa
|
|||
}
|
||||
}
|
||||
|
||||
if (TSELEM_OPEN(tselem, soops)) outliner_draw_rnabuts(block, scene, ar, soops, sizex, &te->subtree);
|
||||
if (TSELEM_OPEN(tselem, soops)) outliner_draw_rnabuts(block, ar, soops, sizex, &te->subtree);
|
||||
}
|
||||
|
||||
UI_block_emboss_set(block, UI_EMBOSS);
|
||||
|
@ -1408,7 +1406,7 @@ static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, Spa
|
|||
}
|
||||
|
||||
/* closed tree element */
|
||||
static void outliner_set_coord_tree_element(SpaceOops *soops, TreeElement *te, int startx, int starty)
|
||||
static void outliner_set_coord_tree_element(TreeElement *te, int startx, int starty)
|
||||
{
|
||||
TreeElement *ten;
|
||||
|
||||
|
@ -1420,7 +1418,7 @@ static void outliner_set_coord_tree_element(SpaceOops *soops, TreeElement *te, i
|
|||
}
|
||||
|
||||
for (ten = te->subtree.first; ten; ten = ten->next) {
|
||||
outliner_set_coord_tree_element(soops, ten, startx + UI_UNIT_X, starty);
|
||||
outliner_set_coord_tree_element(ten, startx + UI_UNIT_X, starty);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1631,7 +1629,7 @@ static void outliner_draw_tree_element(
|
|||
}
|
||||
else {
|
||||
for (ten = te->subtree.first; ten; ten = ten->next) {
|
||||
outliner_set_coord_tree_element(soops, ten, startx, *starty);
|
||||
outliner_set_coord_tree_element(ten, startx, *starty);
|
||||
}
|
||||
|
||||
*starty -= UI_UNIT_Y;
|
||||
|
@ -1672,7 +1670,7 @@ static void outliner_draw_hierarchy_lines(SpaceOops *soops, ListBase *lb, int st
|
|||
}
|
||||
}
|
||||
|
||||
static void outliner_draw_struct_marks(ARegion *ar, SpaceOops *soops, ListBase *lb, int *starty)
|
||||
static void outliner_draw_struct_marks(ARegion *ar, SpaceOops *soops, ListBase *lb, int *starty)
|
||||
{
|
||||
TreeElement *te;
|
||||
TreeStoreElem *tselem;
|
||||
|
@ -1911,7 +1909,7 @@ void draw_outliner(const bContext *C)
|
|||
if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
|
||||
/* draw rna buttons */
|
||||
outliner_draw_rnacols(ar, sizex_rna);
|
||||
outliner_draw_rnabuts(block, scene, ar, soops, sizex_rna, &soops->tree);
|
||||
outliner_draw_rnabuts(block, ar, soops, sizex_rna, &soops->tree);
|
||||
}
|
||||
else if ((soops->outlinevis == SO_ID_ORPHANS) && has_restrict_icons) {
|
||||
/* draw user toggle columns */
|
||||
|
|
|
@ -117,9 +117,7 @@ static void outliner_open_reveal(SpaceOops *soops, ListBase *lb, TreeElement *te
|
|||
}
|
||||
#endif
|
||||
|
||||
static TreeElement *outliner_dropzone_element(
|
||||
const SpaceOops *soops, TreeElement *te,
|
||||
const float fmval[2], const bool children)
|
||||
static TreeElement *outliner_dropzone_element(TreeElement *te, const float fmval[2], const bool children)
|
||||
{
|
||||
if ((fmval[1] > te->ys) && (fmval[1] < (te->ys + UI_UNIT_Y))) {
|
||||
/* name and first icon */
|
||||
|
@ -129,7 +127,7 @@ static TreeElement *outliner_dropzone_element(
|
|||
/* Not it. Let's look at its children. */
|
||||
if (children && (TREESTORE(te)->flag & TSE_CLOSED) == 0 && (te->subtree.first)) {
|
||||
for (te = te->subtree.first; te; te = te->next) {
|
||||
TreeElement *te_valid = outliner_dropzone_element(soops, te, fmval, children);
|
||||
TreeElement *te_valid = outliner_dropzone_element(te, fmval, children);
|
||||
if (te_valid)
|
||||
return te_valid;
|
||||
}
|
||||
|
@ -143,7 +141,7 @@ TreeElement *outliner_dropzone_find(const SpaceOops *soops, const float fmval[2]
|
|||
TreeElement *te;
|
||||
|
||||
for (te = soops->tree.first; te; te = te->next) {
|
||||
TreeElement *te_valid = outliner_dropzone_element(soops, te, fmval, children);
|
||||
TreeElement *te_valid = outliner_dropzone_element(te, fmval, children);
|
||||
if (te_valid)
|
||||
return te_valid;
|
||||
}
|
||||
|
@ -214,7 +212,7 @@ static int outliner_highlight_update(bContext *C, wmOperator *UNUSED(op), const
|
|||
bool changed = false;
|
||||
|
||||
if (!hovered_te || !(hovered_te->store_elem->flag & TSE_HIGHLIGHTED)) {
|
||||
changed = outliner_set_flag(soops, &soops->tree, TSE_HIGHLIGHTED, false);
|
||||
changed = outliner_set_flag(&soops->tree, TSE_HIGHLIGHTED, false);
|
||||
if (hovered_te) {
|
||||
hovered_te->store_elem->flag |= TSE_HIGHLIGHTED;
|
||||
changed = true;
|
||||
|
@ -251,7 +249,7 @@ static int do_outliner_item_openclose(bContext *C, SpaceOops *soops, TreeElement
|
|||
/* all below close/open? */
|
||||
if (all) {
|
||||
tselem->flag &= ~TSE_CLOSED;
|
||||
outliner_set_flag(soops, &te->subtree, TSE_CLOSED, !outliner_has_one_flag(soops, &te->subtree, TSE_CLOSED, 1));
|
||||
outliner_set_flag(&te->subtree, TSE_CLOSED, !outliner_has_one_flag(&te->subtree, TSE_CLOSED, 1));
|
||||
}
|
||||
else {
|
||||
if (tselem->flag & TSE_CLOSED) tselem->flag &= ~TSE_CLOSED;
|
||||
|
@ -339,7 +337,7 @@ void item_rename_cb(
|
|||
do_item_rename(ar, te, tselem, reports);
|
||||
}
|
||||
|
||||
static int do_outliner_item_rename(ReportList *reports, ARegion *ar, SpaceOops *soops, TreeElement *te, const float mval[2])
|
||||
static int do_outliner_item_rename(ReportList *reports, ARegion *ar, TreeElement *te, const float mval[2])
|
||||
{
|
||||
if (mval[1] > te->ys && mval[1] < te->ys + UI_UNIT_Y) {
|
||||
TreeStoreElem *tselem = TREESTORE(te);
|
||||
|
@ -353,7 +351,7 @@ static int do_outliner_item_rename(ReportList *reports, ARegion *ar, SpaceOops *
|
|||
}
|
||||
|
||||
for (te = te->subtree.first; te; te = te->next) {
|
||||
if (do_outliner_item_rename(reports, ar, soops, te, mval)) return 1;
|
||||
if (do_outliner_item_rename(reports, ar, te, mval)) return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -369,7 +367,7 @@ static int outliner_item_rename(bContext *C, wmOperator *op, const wmEvent *even
|
|||
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]);
|
||||
|
||||
for (te = soops->tree.first; te; te = te->next) {
|
||||
if (do_outliner_item_rename(op->reports, ar, soops, te, fmval)) {
|
||||
if (do_outliner_item_rename(op->reports, ar, te, fmval)) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
|
@ -800,20 +798,20 @@ void lib_reload_cb(
|
|||
|
||||
/* Apply Settings ------------------------------- */
|
||||
|
||||
static int outliner_count_levels(SpaceOops *soops, ListBase *lb, const int curlevel)
|
||||
static int outliner_count_levels(ListBase *lb, const int curlevel)
|
||||
{
|
||||
TreeElement *te;
|
||||
int level = curlevel, lev;
|
||||
|
||||
for (te = lb->first; te; te = te->next) {
|
||||
|
||||
lev = outliner_count_levels(soops, &te->subtree, curlevel + 1);
|
||||
lev = outliner_count_levels(&te->subtree, curlevel + 1);
|
||||
if (lev > level) level = lev;
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
int outliner_has_one_flag(SpaceOops *soops, ListBase *lb, short flag, const int curlevel)
|
||||
int outliner_has_one_flag(ListBase *lb, short flag, const int curlevel)
|
||||
{
|
||||
TreeElement *te;
|
||||
TreeStoreElem *tselem;
|
||||
|
@ -823,7 +821,7 @@ int outliner_has_one_flag(SpaceOops *soops, ListBase *lb, short flag, const int
|
|||
tselem = TREESTORE(te);
|
||||
if (tselem->flag & flag) return curlevel;
|
||||
|
||||
level = outliner_has_one_flag(soops, &te->subtree, flag, curlevel + 1);
|
||||
level = outliner_has_one_flag(&te->subtree, flag, curlevel + 1);
|
||||
if (level) return level;
|
||||
}
|
||||
return 0;
|
||||
|
@ -833,7 +831,7 @@ int outliner_has_one_flag(SpaceOops *soops, ListBase *lb, short flag, const int
|
|||
* Set or unset \a flag for all outliner elements in \a lb and sub-trees.
|
||||
* \return if any flag was modified.
|
||||
*/
|
||||
bool outliner_set_flag(SpaceOops *soops, ListBase *lb, short flag, short set)
|
||||
bool outliner_set_flag(ListBase *lb, short flag, short set)
|
||||
{
|
||||
TreeElement *te;
|
||||
TreeStoreElem *tselem;
|
||||
|
@ -853,7 +851,7 @@ bool outliner_set_flag(SpaceOops *soops, ListBase *lb, short flag, short set)
|
|||
tselem->flag |= flag;
|
||||
changed = true;
|
||||
}
|
||||
changed |= outliner_set_flag(soops, &te->subtree, flag, set);
|
||||
changed |= outliner_set_flag(&te->subtree, flag, set);
|
||||
}
|
||||
|
||||
return changed;
|
||||
|
@ -1068,10 +1066,10 @@ static int outliner_toggle_expanded_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
SpaceOops *soops = CTX_wm_space_outliner(C);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
|
||||
if (outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1))
|
||||
outliner_set_flag(soops, &soops->tree, TSE_CLOSED, 0);
|
||||
if (outliner_has_one_flag(&soops->tree, TSE_CLOSED, 1))
|
||||
outliner_set_flag(&soops->tree, TSE_CLOSED, 0);
|
||||
else
|
||||
outliner_set_flag(soops, &soops->tree, TSE_CLOSED, 1);
|
||||
outliner_set_flag(&soops->tree, TSE_CLOSED, 1);
|
||||
|
||||
ED_region_tag_redraw(ar);
|
||||
|
||||
|
@ -1100,10 +1098,10 @@ static int outliner_toggle_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
ARegion *ar = CTX_wm_region(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
|
||||
if (outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1))
|
||||
outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 0);
|
||||
if (outliner_has_one_flag(&soops->tree, TSE_SELECTED, 1))
|
||||
outliner_set_flag(&soops->tree, TSE_SELECTED, 0);
|
||||
else
|
||||
outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 1);
|
||||
outliner_set_flag(&soops->tree, TSE_SELECTED, 1);
|
||||
|
||||
soops->storeflag |= SO_TREESTORE_REDRAW;
|
||||
|
||||
|
@ -1201,13 +1199,13 @@ static int outliner_show_active_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
if (obact->mode & OB_MODE_POSE) {
|
||||
bPoseChannel *pchan = CTX_data_active_pose_bone(C);
|
||||
if (pchan) {
|
||||
te = outliner_find_posechannel(so, &te_obact->subtree, pchan);
|
||||
te = outliner_find_posechannel(&te_obact->subtree, pchan);
|
||||
}
|
||||
}
|
||||
else if (obact->mode & OB_MODE_EDIT) {
|
||||
EditBone *ebone = CTX_data_active_bone(C);
|
||||
if (ebone) {
|
||||
te = outliner_find_editbone(so, &te_obact->subtree, ebone);
|
||||
te = outliner_find_editbone(&te_obact->subtree, ebone);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1402,7 +1400,7 @@ static void outliner_find_panel(Scene *UNUSED(scene), ARegion *ar, SpaceOops *so
|
|||
/* Show One Level ----------------------------------------------- */
|
||||
|
||||
/* helper function for Show/Hide one level operator */
|
||||
static void outliner_openclose_level(SpaceOops *soops, ListBase *lb, int curlevel, int level, int open)
|
||||
static void outliner_openclose_level(ListBase *lb, int curlevel, int level, int open)
|
||||
{
|
||||
TreeElement *te;
|
||||
TreeStoreElem *tselem;
|
||||
|
@ -1417,7 +1415,7 @@ static void outliner_openclose_level(SpaceOops *soops, ListBase *lb, int curleve
|
|||
if (curlevel >= level) tselem->flag |= TSE_CLOSED;
|
||||
}
|
||||
|
||||
outliner_openclose_level(soops, &te->subtree, curlevel + 1, level, open);
|
||||
outliner_openclose_level(&te->subtree, curlevel + 1, level, open);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1428,13 +1426,13 @@ static int outliner_one_level_exec(bContext *C, wmOperator *op)
|
|||
const bool add = RNA_boolean_get(op->ptr, "open");
|
||||
int level;
|
||||
|
||||
level = outliner_has_one_flag(soops, &soops->tree, TSE_CLOSED, 1);
|
||||
level = outliner_has_one_flag(&soops->tree, TSE_CLOSED, 1);
|
||||
if (add == 1) {
|
||||
if (level) outliner_openclose_level(soops, &soops->tree, 1, level, 1);
|
||||
if (level) outliner_openclose_level(&soops->tree, 1, level, 1);
|
||||
}
|
||||
else {
|
||||
if (level == 0) level = outliner_count_levels(soops, &soops->tree, 0);
|
||||
if (level) outliner_openclose_level(soops, &soops->tree, 1, level - 1, 0);
|
||||
if (level == 0) level = outliner_count_levels(&soops->tree, 0);
|
||||
if (level) outliner_openclose_level(&soops->tree, 1, level - 1, 0);
|
||||
}
|
||||
|
||||
ED_region_tag_redraw(ar);
|
||||
|
@ -1465,7 +1463,7 @@ void OUTLINER_OT_show_one_level(wmOperatorType *ot)
|
|||
/* Show Hierarchy ----------------------------------------------- */
|
||||
|
||||
/* helper function for tree_element_shwo_hierarchy() - recursively checks whether subtrees have any objects*/
|
||||
static int subtree_has_objects(SpaceOops *soops, ListBase *lb)
|
||||
static int subtree_has_objects(ListBase *lb)
|
||||
{
|
||||
TreeElement *te;
|
||||
TreeStoreElem *tselem;
|
||||
|
@ -1473,7 +1471,7 @@ static int subtree_has_objects(SpaceOops *soops, ListBase *lb)
|
|||
for (te = lb->first; te; te = te->next) {
|
||||
tselem = TREESTORE(te);
|
||||
if (tselem->type == 0 && te->idcode == ID_OB) return 1;
|
||||
if (subtree_has_objects(soops, &te->subtree)) return 1;
|
||||
if (subtree_has_objects(&te->subtree)) return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1494,7 +1492,7 @@ static void tree_element_show_hierarchy(Scene *scene, SpaceOops *soops, ListBase
|
|||
else tselem->flag &= ~TSE_CLOSED;
|
||||
}
|
||||
else if (te->idcode == ID_OB) {
|
||||
if (subtree_has_objects(soops, &te->subtree)) tselem->flag &= ~TSE_CLOSED;
|
||||
if (subtree_has_objects(&te->subtree)) tselem->flag &= ~TSE_CLOSED;
|
||||
else tselem->flag |= TSE_CLOSED;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,8 +137,8 @@ void outliner_cleanup_tree(struct SpaceOops *soops);
|
|||
TreeElement *outliner_find_tse(struct SpaceOops *soops, const TreeStoreElem *tse);
|
||||
TreeElement *outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem);
|
||||
TreeElement *outliner_find_id(struct SpaceOops *soops, ListBase *lb, const struct ID *id);
|
||||
TreeElement *outliner_find_posechannel(struct SpaceOops *soops, ListBase *lb, const struct bPoseChannel *pchan);
|
||||
TreeElement *outliner_find_editbone(struct SpaceOops *soops, ListBase *lb, const struct EditBone *ebone);
|
||||
TreeElement *outliner_find_posechannel(ListBase *lb, const struct bPoseChannel *pchan);
|
||||
TreeElement *outliner_find_editbone(ListBase *lb, const struct EditBone *ebone);
|
||||
struct ID *outliner_search_back(SpaceOops *soops, TreeElement *te, short idcode);
|
||||
|
||||
void outliner_build_tree(struct Main *mainvar, struct Scene *scene, struct SpaceOops *soops);
|
||||
|
@ -170,8 +170,8 @@ void outliner_do_object_operation(
|
|||
|
||||
int common_restrict_check(struct bContext *C, struct Object *ob);
|
||||
|
||||
int outliner_has_one_flag(struct SpaceOops *soops, ListBase *lb, short flag, const int curlevel);
|
||||
bool outliner_set_flag(struct SpaceOops *soops, ListBase *lb, short flag, short set);
|
||||
int outliner_has_one_flag(ListBase *lb, short flag, const int curlevel);
|
||||
bool outliner_set_flag(ListBase *lb, short flag, short set);
|
||||
|
||||
void object_toggle_visibility_cb(
|
||||
struct bContext *C, struct ReportList *reports, struct Scene *scene,
|
||||
|
|
|
@ -897,19 +897,19 @@ static void outliner_item_select(SpaceOops *soops, const TreeElement *te, const
|
|||
const short new_flag = toggle ? (tselem->flag ^ TSE_SELECTED) : (tselem->flag | TSE_SELECTED);
|
||||
|
||||
if (extend == false) {
|
||||
outliner_set_flag(soops, &soops->tree, TSE_SELECTED, false);
|
||||
outliner_set_flag(&soops->tree, TSE_SELECTED, false);
|
||||
}
|
||||
tselem->flag = new_flag;
|
||||
}
|
||||
|
||||
static void outliner_item_toggle_closed(SpaceOops *soops, TreeElement *te, const bool toggle_children)
|
||||
static void outliner_item_toggle_closed(TreeElement *te, const bool toggle_children)
|
||||
{
|
||||
TreeStoreElem *tselem = TREESTORE(te);
|
||||
if (toggle_children) {
|
||||
tselem->flag &= ~TSE_CLOSED;
|
||||
|
||||
const bool all_opened = !outliner_has_one_flag(soops, &te->subtree, TSE_CLOSED, 1);
|
||||
outliner_set_flag(soops, &te->subtree, TSE_CLOSED, all_opened);
|
||||
const bool all_opened = !outliner_has_one_flag(&te->subtree, TSE_CLOSED, 1);
|
||||
outliner_set_flag(&te->subtree, TSE_CLOSED, all_opened);
|
||||
}
|
||||
else {
|
||||
tselem->flag ^= TSE_CLOSED;
|
||||
|
@ -946,7 +946,7 @@ int outliner_item_activate_or_toggle_closed(bContext *C, int x, int y, bool exte
|
|||
/* skip */
|
||||
}
|
||||
else if (outliner_item_is_co_within_close_toggle(te, view_mval[0])) {
|
||||
outliner_item_toggle_closed(soops, te, extend);
|
||||
outliner_item_toggle_closed(te, extend);
|
||||
changed = true;
|
||||
}
|
||||
else {
|
||||
|
@ -994,7 +994,7 @@ void OUTLINER_OT_item_activate(wmOperatorType *ot)
|
|||
/* ****************************************************** */
|
||||
|
||||
/* **************** Border Select Tool ****************** */
|
||||
static void outliner_item_border_select(Scene *scene, SpaceOops *soops, rctf *rectf, TreeElement *te, int gesture_mode)
|
||||
static void outliner_item_border_select(Scene *scene, rctf *rectf, TreeElement *te, int gesture_mode)
|
||||
{
|
||||
TreeStoreElem *tselem = TREESTORE(te);
|
||||
|
||||
|
@ -1010,7 +1010,7 @@ static void outliner_item_border_select(Scene *scene, SpaceOops *soops, rctf *re
|
|||
/* Look at its children. */
|
||||
if ((tselem->flag & TSE_CLOSED) == 0) {
|
||||
for (te = te->subtree.first; te; te = te->next) {
|
||||
outliner_item_border_select(scene, soops, rectf, te, gesture_mode);
|
||||
outliner_item_border_select(scene, rectf, te, gesture_mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1028,7 +1028,7 @@ static int outliner_border_select_exec(bContext *C, wmOperator *op)
|
|||
UI_view2d_region_to_view_rctf(&ar->v2d, &rectf, &rectf);
|
||||
|
||||
for (te = soops->tree.first; te; te = te->next) {
|
||||
outliner_item_border_select(scene, soops, &rectf, te, gesture_mode);
|
||||
outliner_item_border_select(scene, &rectf, te, gesture_mode);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
|
||||
|
|
|
@ -1832,8 +1832,8 @@ void OUTLINER_OT_data_operation(wmOperatorType *ot)
|
|||
/* ******************** */
|
||||
|
||||
|
||||
static int do_outliner_operation_event(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops,
|
||||
TreeElement *te, const wmEvent *event, const float mval[2])
|
||||
static int do_outliner_operation_event(bContext *C, ARegion *ar, SpaceOops *soops,
|
||||
TreeElement *te, const float mval[2])
|
||||
{
|
||||
ReportList *reports = CTX_wm_reports(C); // XXX...
|
||||
|
||||
|
@ -1844,8 +1844,8 @@ static int do_outliner_operation_event(bContext *C, Scene *scene, ARegion *ar, S
|
|||
/* select object that's clicked on and popup context menu */
|
||||
if (!(tselem->flag & TSE_SELECTED)) {
|
||||
|
||||
if (outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1))
|
||||
outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 0);
|
||||
if (outliner_has_one_flag(&soops->tree, TSE_SELECTED, 1))
|
||||
outliner_set_flag(&soops->tree, TSE_SELECTED, 0);
|
||||
|
||||
tselem->flag |= TSE_SELECTED;
|
||||
/* redraw, same as outliner_select function */
|
||||
|
@ -1916,7 +1916,7 @@ static int do_outliner_operation_event(bContext *C, Scene *scene, ARegion *ar, S
|
|||
}
|
||||
|
||||
for (te = te->subtree.first; te; te = te->next) {
|
||||
if (do_outliner_operation_event(C, scene, ar, soops, te, event, mval))
|
||||
if (do_outliner_operation_event(C, ar, soops, te, mval))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -1925,7 +1925,6 @@ static int do_outliner_operation_event(bContext *C, Scene *scene, ARegion *ar, S
|
|||
|
||||
static int outliner_operation(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
SpaceOops *soops = CTX_wm_space_outliner(C);
|
||||
uiBut *but = UI_context_active_but_get(C);
|
||||
|
@ -1939,7 +1938,7 @@ static int outliner_operation(bContext *C, wmOperator *UNUSED(op), const wmEvent
|
|||
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]);
|
||||
|
||||
for (te = soops->tree.first; te; te = te->next) {
|
||||
if (do_outliner_operation_event(C, scene, ar, soops, te, event, fmval)) {
|
||||
if (do_outliner_operation_event(C, ar, soops, te, fmval)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -248,7 +248,7 @@ TreeElement *outliner_find_id(SpaceOops *soops, ListBase *lb, const ID *id)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
TreeElement *outliner_find_posechannel(SpaceOops *soops, ListBase *lb, const bPoseChannel *pchan)
|
||||
TreeElement *outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
|
||||
{
|
||||
for (TreeElement *te = lb->first; te; te = te->next) {
|
||||
if (te->directdata == pchan) {
|
||||
|
@ -257,7 +257,7 @@ TreeElement *outliner_find_posechannel(SpaceOops *soops, ListBase *lb, const bPo
|
|||
|
||||
TreeStoreElem *tselem = TREESTORE(te);
|
||||
if (ELEM(tselem->type, TSE_POSE_BASE, TSE_POSE_CHANNEL)) {
|
||||
TreeElement *tes = outliner_find_posechannel(soops, &te->subtree, pchan);
|
||||
TreeElement *tes = outliner_find_posechannel(&te->subtree, pchan);
|
||||
if (tes) {
|
||||
return tes;
|
||||
}
|
||||
|
@ -266,7 +266,7 @@ TreeElement *outliner_find_posechannel(SpaceOops *soops, ListBase *lb, const bPo
|
|||
return NULL;
|
||||
}
|
||||
|
||||
TreeElement *outliner_find_editbone(SpaceOops *soops, ListBase *lb, const EditBone *ebone)
|
||||
TreeElement *outliner_find_editbone(ListBase *lb, const EditBone *ebone)
|
||||
{
|
||||
for (TreeElement *te = lb->first; te; te = te->next) {
|
||||
if (te->directdata == ebone) {
|
||||
|
@ -275,7 +275,7 @@ TreeElement *outliner_find_editbone(SpaceOops *soops, ListBase *lb, const EditBo
|
|||
|
||||
TreeStoreElem *tselem = TREESTORE(te);
|
||||
if (ELEM(tselem->type, 0, TSE_EBONE)) {
|
||||
TreeElement *tes = outliner_find_editbone(soops, &te->subtree, ebone);
|
||||
TreeElement *tes = outliner_find_editbone(&te->subtree, ebone);
|
||||
if (tes) {
|
||||
return tes;
|
||||
}
|
||||
|
@ -307,7 +307,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
|
|||
/* -------------------------------------------------------- */
|
||||
|
||||
/* special handling of hierarchical non-lib data */
|
||||
static void outliner_add_bone(SpaceOops *soops, ListBase *lb, ID *id, Bone *curBone,
|
||||
static void outliner_add_bone(SpaceOops *soops, ListBase *lb, ID *id, Bone *curBone,
|
||||
TreeElement *parent, int *a)
|
||||
{
|
||||
TreeElement *te = outliner_add_element(soops, lb, id, parent, TSE_BONE, *a);
|
||||
|
@ -878,7 +878,7 @@ static void outliner_add_id_contents(SpaceOops *soops, TreeElement *te, TreeStor
|
|||
|
||||
// TODO: this function needs to be split up! It's getting a bit too large...
|
||||
// Note: "ID" is not always a real ID
|
||||
static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *idv,
|
||||
static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *idv,
|
||||
TreeElement *parent, short type, short index)
|
||||
{
|
||||
TreeElement *te;
|
||||
|
@ -1466,15 +1466,12 @@ static int treesort_obtype_alpha(const void *v1, const void *v2)
|
|||
#endif
|
||||
|
||||
/* sort happens on each subtree individual */
|
||||
static void outliner_sort(SpaceOops *soops, ListBase *lb)
|
||||
static void outliner_sort(ListBase *lb)
|
||||
{
|
||||
TreeElement *te;
|
||||
TreeStoreElem *tselem;
|
||||
int totelem = 0;
|
||||
|
||||
if (soops->flag & SO_SKIP_SORT_ALPHA)
|
||||
return;
|
||||
|
||||
te = lb->last;
|
||||
if (te == NULL) return;
|
||||
tselem = TREESTORE(te);
|
||||
|
@ -1528,7 +1525,7 @@ static void outliner_sort(SpaceOops *soops, ListBase *lb)
|
|||
}
|
||||
|
||||
for (te = lb->first; te; te = te->next) {
|
||||
outliner_sort(soops, &te->subtree);
|
||||
outliner_sort(&te->subtree);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1821,7 +1818,9 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops)
|
|||
if (ten) ten->directdata = BASACT;
|
||||
}
|
||||
|
||||
outliner_sort(soops, &soops->tree);
|
||||
if ((soops->flag & SO_SKIP_SORT_ALPHA) == 0) {
|
||||
outliner_sort(&soops->tree);
|
||||
}
|
||||
outliner_filter_tree(soops, &soops->tree);
|
||||
}
|
||||
|
||||
|
|
|
@ -306,6 +306,7 @@ static void outliner_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(s
|
|||
case ND_KEYINGSET:
|
||||
case ND_FRAME:
|
||||
case ND_RENDER_OPTIONS:
|
||||
case ND_SEQUENCER:
|
||||
case ND_LAYER:
|
||||
case ND_WORLD:
|
||||
ED_region_tag_redraw(ar);
|
||||
|
|
Loading…
Reference in New Issue