ILSpy
ILSpy copied to clipboard
Docking: Feature List (RFC)
Definitions
- Pane: singleton windows (only one can be open at any point in time). Some can be hidden or closed, others will be open at all times (cannot be closed or hidden).
- Decompilation Tab: whenever a node is selected in the treeview pane, the action is carried out in the active decompilation tab. I.e. it shows the decompiled code, it shows the metadata, it shows the resources.
Multiple Decompilation Tabs
- [x] Last open decompilation tab cannot be closed (minimum one active decompilation tab).
- [x] Active decompilation tab's title text is bold font to clearly distinguish it.
- [x] Each decompilation tab retains its own state for language and language version dropdown.
- [x] Tab title is type name
- [ ] Improvement: option for showing asm name in brackets, or coloring tab by asm similar to VS Productivity Pack did with source tabs by project; could add additional info to tab maybe via tooltip?
- [x] A new decompilation tab is opened via context menu on tree node, otherwise decompilation is sent to currently active tab. (Nice-to-have would be that right-click ctx menu opening doesn't navigate to that node immediately, because that sort of makes open in new tab duplicate that immediately)
- [x] Special case About Page: opens in active decompilation tab (title: About), shows its content in DecompilationTextView
Panes
- [x] Tree (open at all times)
- [x] Search (can be hidden and closed). If hidden or closed, open on command.
- [x] Debug (can be closed). If closed, open on command.
- [x] Analyzers
Docking in General
- [x] Arrange decompilation tabs vertical (esp. useful)/horizontal (Use cases: compare stages on same type, compare types across versions)
- [ ] Tab context menu (down arrow right-hand side): hide/close depending on tab/pane type.
- [ ] Save / restore layout, reset layout
- [x] Restore layout: only restores active decompilation tab in conjunction with last active tree node item (and thus actually doing nothing because code for last active tree node already exists). Doing it for multiple decompilation tabs would be extremely time consuming to decompile, driving up initial start time by a huge margin. Non-goal to implement.
- [x] Window menu: Close all tabs, Reset Layout
- [x] Maybe re-use MainTabViewModel (similar at least) VM to work with collection of decompilation tabs easily? PR #1276
Advanced Ideas (to be discussed)
- [ ] "Freeze" completely lock a decompilation even if it is the currently active one. Not possible if only one decompilation tab is active.
I've tried out the docking UI from master branch and one thing I notice is that the minimum height of the search/analyze panels is a bit annoying. I've usually had these panels smaller than what the minimum height enforces now.
@weltkante can you please test again with the latest master? If the problem is still there, please clarify. Thanks!
seems fixed 👍
I upgraded today from preview 2 to ILSpy 6.0 Preview 3. I was confused that there is a new dock window "Debug ...". I load for test purpose a DLL from GAC, still confused. I closed the debug window (which was still docked) and received endless appearing callstack message boxes. After I restart ILSpy I see no ability to reopen the "Debug..." window.
Yes, this was a bug, which is fixed in preview 4. The "Debug" window should only be visible in Debug builds.
Once I undock (accidentally) the Search pane, how do I put it back to the place? The code pane is not offering the docking cross UI... (7.0.0.6291-preview2)
You can always use the "reset layout" command from the view menu to "repair" the layout. Yes, this is a known limitation of the docking library we are using.