I started last Saturday by fixing a small issue mentioned by @dfelinto . It ended up taking about 4 hours of single-stepping through the outliner_tree.c code to change one line. But I now understand how the tree is stored and created, so thatās nice.
Changes:
Fix to open scene elements by default in scenes view (a3448a9eef60)
Add an active outliner element highlight to themes (b2a716e033d0)
Utils functions to return active element in outliner and one to determine if a given element is visible in the outliner (for range select) (fda3351c8827) and (558679a19ea3)
Modified the keymap to make range select more intuitive. ctrl is for extend selection and shift is for range selection.
Click and drag from the gutter to box select (155cb8505c12)
Currently these changes are only focused on improving the experience of selecting items in the outliner in preparation for synced selection. For the remainder of this week I will refine the box select tool and add walk navigation. Iām on schedule so far, and everything is going smoothly. My only regret so far is not keeping in contact with my mentors as much as I would like to. Iāll improve on that next week.
Next week I will begin the synced selection. The current plan is to add a functions to the outliner and 3D view to be called after any selection occurs, then to send the selection state from one editor to the other to keep them in sync.
This week wasnāt quite as productive as the last week. As mentioned in my original project proposal, Iām still taking a cs class right now. Iām one week away from completing my class, so it wonāt take all my time in the future. However, even with the distractions, I still got a good amount of work done.
Removing restrictions form range select. No longer requires an active element. rBb1a88dab4372
Remove restrictions on box select. Previously it required click and drag from the gutter, now any empty space is valid rB9f4d65e48853
Walk select operator. Up and down arrows for traversing the list up and down. Left and right arrow keys to jump back a level or toggle elements opened and closed rB73392fc29b28rB07f938be3899
Lots of cleanup in the code I had already committed thanks to some review from Campbell.
Fixed some crashes my changes introduced.
A design document for the selection syncing. Its currently on my wiki space here
Synced selection toggle (not yet committed)
Next week I plan to have a basic selection sync working, in addition to adding more modifier keys to the outliner selection operators.
I got a lot done on synced selection. There is still more to implement, but it works well from the 3D viewport to the outliner. Next week I will look more into syncing from the outliner to the 3D view consistently.
Draw all constraint icons for objects and bones f5ccf5f0354c
Redraw outliner on constraint reordering c042f82b893a
I spent too much of this week trying to design a simpler way to do synced selections. Turns out the way I had it before works better so Iām moving forward with the original design. I also finished my CS course and took my final, so that took a bit of my time too this week. On the bright side I donāt have anything distracting me from the summer of code anymore!
This has been a great week! Selection syncing is nearly done (just have to sync bones and sequences now). There are a few other cases to resolve, but for the most part its working quite smoothly. Also, the first evaluation is over, so Iām now onto the second working period of the summer.
Sync outliner selection to view layer 883399072fa5
Removed the active highlight when synced selection is turned off. This is a simple change and could be reverted easily, if it ends up being confusing. 55e95e84d761
Sync the active object between outliner and view layer, in addition to just selected state. e4ed727f43d5
Many walk selection improvements
When nothing is selected and a walk operator occurs, the active element will be selected 30e48c6c6ab6
Fixed walk selection wrapping around the tree and other small issues with the operator 3de1bd9b380f
Hold shift to extend selection on walk selection c68dff9ff71c
A few tree elements had no or incorrect parents set which caused walk to fail or crash. A few small edits to the tree building fixed that. e191fb3bdab5
Removed ctrl+click to rename elements as this conflicts with selection extending
In the next week Iām planning on finishing synced selection. Iām going to move the functions to a new file dedicated to syncing (so they arenāt scattered elsewhere). Once all my improvements are reviewed and accepted, I can move on to working on other larger tasks.
This shows the syncing with walk and box selection
I just tried it out and man, this is like christmas. Been waiting for a better outliner navigation/synchro for so long. Canāt wait to see it in the official releases. Thanks so much for your hard work, it is much appreciated!
Well, syncing is just about wrapped up, as this week I added support for VSE sequences, pose bones, and edit bones. I have also spent quite a bit of time reading and understanding the code for the context menu, and other parts of the outliner. In the coming weeks I can work on drag and drop, deleting, and other utilities that arenāt as intuitive as they could be.
I also spent some time updating the VSCode setup page on the wiki
Added support for drawing sequencer icons (this needs some help as it uses incorrect colors, but this would require new icons or some other workaround. Also, not all sequencer elements have a logical icon) 35b5395f2a03
Worked a lot more on syncing and active elements this week. Also rewrote the walk select code to utilize a walk flag rather than changing the active element. Also started working on multi-object parenting
Support multiple objects for parenting (WIP) d75d2860fd48
A few of the more notable changes: Walk select no longer activates. When outside of object mode, objects selected in the outliner while syncing is enabled are added to the selection. Synced selection is disabled in Blend File, RNA, and Orphan data display modes.
Lot of great updates and new features in the last week!
Finished multi-object parenting. For now the menu that appears when parenting to a curve, armature, or lattice is disabled. It should not be too difficult to add it back though. f8ca71e66a11185e8183fa3e
Change active collection after visibility restrictions. Previously when disabling a collection (the checkbox) the active collection changed to the first enabled parent. This has been extended to both viewport visibility restriction modes as well. This prevents adding objects to hidden collections. 5bb9fce0cdea
Set active camera when clicking on camera data e63b87fb4db7
Prevent scroll page operator (page up/page down) from going past the view of the outliner 9d28b8ae3f69
additional Show Active operator improvements. Now the tree does not get āfuzzyā due to an off-by-one error, and the view will not jump (by leaving the vertical scroll bounds) dbcce31ad363
Icon row toggling. This brings back the ability to select icons in the row of collapsed outliner elements. f7310fae94e2eed6d1dcf1e9
Show a search menu when selecting aggregate / merged icons in the icon row. This still has some issues (when nesting is not one-layer) but I know why, so it shouldnāt be too difficult to fix. 8f2c296e22e7
In the next week I will finalize the icon selecting. Currently icons that are hidden, linked, or parented cause the icon row selection to fail due to their X locations not being set properly. I will hopefully also bring back the parenting menu for the armatures, curves, and lattices. Among other changes too.
This has been another great week of improvements to the outliner. Iāve spent some time refining existing operators, and simplifying the existing code. Improvements were also added to the disclosure triangle toggles leading to more intuitive interaction. Additionally, Iāve been informed that I have passed my 2nd evaluation, so I hope everything moves along smoothly in the 3rd and final coding period.
Notable changes:
Fixed the merged element popop search menu not showing all children, and from listing incorrect types. b22c84d7800a, b6405d001ae3
Tweaked the color of drawn icons to fix some inconsistencies 8f37592666ce
Moved the synced selection toggle to the filter popover. The popover could use a rename, but it is fine for now. 27da9edb1d82
Draw vertex group icons rather than dots.
Keymap changes:
Removed alt+click for recursive select in the outliner due to conflicts with emulate 3-button mouse. A context menu operator exists with the same functionality. 4b786c0a0cf9
Add shift+right arrow and shift+left arrow to walk navigation to expand or close all children. Also, walk select right now steps into the subtree when the current element is expanded. f2cc499a043d955c9dd98bb7
Removed enter and shift+enter to open/close items not that walk select has replace that behavior.
Added many changes to the disclosure triangle open/close functionality.
Fixed the behavior when clicking on triangles holding shift to open/close all children not toggling the parent closed. ec9dfb21d748
This has the benefit of moving the toggling code out of the item_activate function.
And a good amount of code cleanup and refactoring
In the next week Iāll look into parenting again. There are a few small issues I would like to take care of (like holding shift to parent is not convenient) and I did not take the time to bring back the add parent menu.
This week my mentors started to review my branch. This means I will be mainly focused on improving the features I have already implemented. I still have a few small features on my to-do list though.
Refactored the show active operator to open up all subtrees containing the active object. e257f3c75ee5
Brought back the add parent popup for armatures, lattices, and curves. 65bad61cee7c Now it supports multi-object selections for parenting.
Support F2 for renaming in the outliner rather than showing the popup that only works for objects. 6267d647ae0b.
Refactored show active and page up/down to use a shared function to restrict the view to the bounds. 5dcbc320673b
Added automatic scrolling to walk navigation. 673323251c98
I am currently working on some redesigns to the syncing code to improve the code itself, and to optimize the algorithm for larger scenes. I expect my branch review to take the majority of my time in the next week, but I would also love to extend the outliner scrolling to drag and drop.
A large part of my week was spent improving selection syncing after some review. The logic is mostly the same, but code was moved between files, and optimized. Instead of a full sync on each selection event, only elements of the type that was selected are synced. So if you select a bone, only bones are synced. This will hopefully prevent any lag on large scenes, though I had not noticed any so far. Here is the commit that reflects all changes for synced selection 9ebd65b3f12d.
The exciting news is that my branch has passed an intitial review. Iāve made some changes, and one of my mentors (@ideasman42) is ready to commit to 2.81. We are waiting for review from at least one other developer before committing just to be safe though. Hopefully sometime in the next week outliner improvements will be in 2.81 master!
To ease the committing process, I took my 200+ commits from developing in my soc-2019-outliner branch, and combined them into about 14 commits that reflect related functionality.
I also started looking forward with @billrey and prepared a place for future outliner work to continue after the summer of code. ā T68338 Outliner (Parent Task). There are many great suggestions I have received this summer that I just did not make time to implement because I wanted to focus on the core functionality. I will continue to develop more of these features (item reordering, properties syncing, etc.) after my branch is merged.
In the coming week I will be testing everything I changed, making tweaks here and there throughout the code. With more reviews of my branch coming, I expect there will be some things to change. There probably wonāt be any amazing new features, as I want to ensure everything I have done is polished.
As the summer of code comes to a close, I would love some focused testing from others of synced selection. It would be great to get feedback on performance in large files, and especially if there are cases where a sync is not performed. I may have missed some selection operators or other events that would require a sync. The Windows branch can be found here: https://blender.community/c/graphicall/Ycbbbc/. Thanks!
Today I committed all of my changes to master, so I donāt expect to be making any more changes to my soc-2019-outliner branch. But now that review is over I can work on features like drag and drop, mode switching, and properties sync. These and other plans are here.
In the last week I made more changes after code review:
Click and drag on disclosure triangles now behaves like other click and drag events in Blender. The toggle state of the first click+dragged element is carried to the other elements. If dragging over the first element closes, the other dragged elements will be closed.
Removed walk in and out for walk keyboard navigation with left/right arrow keys. Now left and right only toggle open and closed.
Finally fixed selecting objects linked within multiple collections from the outliner. Now syncing works as expected.
Only show one instance of an object when it is listed multiple times in a subtree for the merged element popup menu.
Removed the set parent to... popup menu for setting the parent to armatures, lattices, and curves. This menu still exists in the 3D view. It makes more sense to keep the outliner simpler and support object parenting only.
Outliners no longer sync selection to other outliners. Only to the 3D view and sequencer.
Adjusted contrast of the selected and active row highlights in the themes.
Moved synced selection toggle below Sort Alphabetically.
Changes not yet committed:
Update industry compatible keymap for new outliner features Everything is the same except for rename. In the default keymap rename is F2, and in industry compatible it is Return. Double click on the name works in both keymaps.
ctrl+shift+click to extend range select. This allows a range select without deselecting the previous selection.
In the next and final week I will be updating the user manual, writing my final report, doing my final evaluation, fixing small things in the outliner, and continuing planning for further outliner improvements.
Really a great, huge improvement in blender. Now its much more fun using it! Thank you for your work! I hope you keep maintaining and improving the outliner even more!