ILSpy icon indicating copy to clipboard operation
ILSpy copied to clipboard

Docking: Feature List (RFC)

Open christophwille opened this issue 6 years ago • 7 comments

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.

christophwille avatar Sep 28 '19 09:09 christophwille

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 avatar Nov 21 '19 12:11 weltkante

@weltkante can you please test again with the latest master? If the problem is still there, please clarify. Thanks!

siegfriedpammer avatar Nov 23 '19 11:11 siegfriedpammer

seems fixed 👍

weltkante avatar Nov 23 '19 11:11 weltkante

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.

trivalik avatar Jun 17 '20 05:06 trivalik

Yes, this was a bug, which is fixed in preview 4. The "Debug" window should only be visible in Debug builds.

siegfriedpammer avatar Jun 17 '20 05:06 siegfriedpammer

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)

miloush avatar Feb 21 '21 12:02 miloush

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.

siegfriedpammer avatar Feb 21 '21 13:02 siegfriedpammer