Opened 4 years ago

Closed 21 months ago

Last modified 21 months ago

#2116 closed enhancement (done)

Implement a breadcrumb navigation for view hosts

Reported by: jkarder Owned by: jkarder
Priority: medium Milestone: HeuristicLab 3.3.13
Component: Core.Views Version: 3.3.12
Keywords: Cc:

Description

If too many nested views are created, the following exception is thrown:

System.ComponentModel.Win32Exception (0x80004005): Error creating window handle.
   at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.ControlCollection.Add(Control value)
   at HeuristicLab.MainForm.WindowsForms.ViewHost.set_ActiveView(IContentView value)
   at HeuristicLab.MainForm.WindowsForms.ViewHost.OnViewTypeChanged()
   at HeuristicLab.MainForm.WindowsForms.ViewHost.set_ViewType(Type value)
   at HeuristicLab.MainForm.WindowsForms.ViewHost.OnContentChanged()
   at HeuristicLab.MainForm.WindowsForms.ContentView.set_Content(IContent value)
   at HeuristicLab.Core.Views.ItemCollectionView`1.itemsListView_SelectedIndexChanged(Object sender, EventArgs e)
   at HeuristicLab.Core.Views.ParameterCollectionView.itemsListView_SelectedIndexChanged(Object sender, EventArgs e)
   at System.Windows.Forms.ListView.WmReflectNotify(Message& m)
   at System.Windows.Forms.ListView.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Therefore, a navigation mechanism that avoids deeply nested view arrangements (e.g. breadcrumbs) should be implemented.

Attachments (1)

OperatorGraphView.cs.patch (790 bytes) - added by pfleck 22 months ago.

Download all attachments as: .zip

Change History (36)

comment:1 Changed 4 years ago by jkarder

  • Status changed from new to accepted

comment:2 Changed 4 years ago by jkarder

  • Version changed from 3.3.9 to branch

comment:3 Changed 4 years ago by jkarder

r10041: created branch

comment:4 Changed 4 years ago by jkarder

r10042: added prototype of a breadcrumb navigation

comment:5 Changed 4 years ago by jkarder

r10087: fixed readonly property assignment in ParameterCollectionView

comment:6 Changed 4 years ago by jkarder

r10089:

  • added hotlinking functionality
  • added methods for outermost view host detection and manipulation

comment:7 Changed 4 years ago by jkarder

r10093:

  • refactored breadcrumb navigation
  • added possibility to navigate to the first invisible breadcrumb via the ellipsis

comment:8 Changed 4 years ago by jkarder

r10103:

  • fixed issues within the outermost control detection
  • fixed visible property assignment of the breadcrumb control in ViewHost
Last edited 4 years ago by jkarder (previous) (diff)

comment:9 Changed 4 years ago by jkarder

r10106:

  • refactored outermost view host detection
  • fixed update logic of breadcrumb trail
  • fixed some views

comment:10 Changed 4 years ago by jkarder

r10107: fixed logic in LinkClicked event handler

comment:11 Changed 4 years ago by jkarder

  • Owner changed from jkarder to mkommend
  • Status changed from accepted to reviewing

I know that there are still some issues left, e.g. if you open the Hive Job Manager, the breadcrumb navigation shows the fully qualified type name of the HiveClient. It would be nice if you could have a look at the current implementation and give me some hints.

Last edited 4 years ago by jkarder (previous) (diff)

comment:12 Changed 4 years ago by mkommend

Review comments:

  • It should be possible to configure whether the breadcrumb navigation is used.
  • It would be cool if the previously shown tab is restored, when navigating back to a previously shown view (e.g. opening an algorithm parameter and navigating back to the algorithm view shows the problem tab). However, this could be hard to implement.
  • The breadcrumb navigation is not updated, when the string representation of an item changes.
  • You could use the view attribute to avoid displaying the fully qualified type name (as it is the case for the Hive Job Manager).

I haven't had a detailed look at the source code and focused on the functionality for now. IMHO, the breadcrumb navigation is most useful when one doesn't work with the docking Mainform. Another issue is that breadcrumb navigation doesn't resolve the issue that too many nested views are created.

comment:13 Changed 3 years ago by mkommend

  • Owner changed from mkommend to jkarder
  • Status changed from reviewing to assigned

comment:14 Changed 3 years ago by mkommend

  • Summary changed from Provide a mechanism to avoid creation of too many nested views to Implement a breadcrumb navigation for view hosts

comment:15 Changed 3 years ago by mkommend

Created a separate ticket for the BSOD on Win8 for too many nested views (#2158)

comment:16 Changed 3 years ago by abeham

  • Milestone changed from HeuristicLab 3.3.10 to HeuristicLab 3.3.11

comment:17 Changed 3 years ago by jkarder

  • Status changed from assigned to accepted

comment:18 Changed 3 years ago by jkarder

r11591: reverted to r10041

comment:19 Changed 3 years ago by jkarder

r11594: merged r10041:11593 from trunk into branch

Last edited 3 years ago by jkarder (previous) (diff)

comment:20 Changed 3 years ago by jkarder

  • Milestone changed from HeuristicLab 3.3.11 to HeuristicLab 3.3.12

comment:21 Changed 2 years ago by jkarder

  • Milestone changed from HeuristicLab 3.3.12 to HeuristicLab 3.3.x Backlog

comment:22 Changed 22 months ago by jkarder

  • Component changed from MainForm.WindowsForms to Core.Views
  • Milestone changed from HeuristicLab 3.3.x Backlog to HeuristicLab 3.3.13
  • Version changed from branch to 3.3.12

I have been following the proposals from abeham, ascheibe and mkommend and came up with a new breadcrumb prototype. I will commit the changes right to the trunk (I hope this is okay) and also delete the branch since all revisions that were committed up to this point can be ignored.

comment:23 Changed 22 months ago by jkarder

r13012: deleted Breadcrumbs branch

comment:24 Changed 22 months ago by jkarder

r13014: added new breadcrumb navigation prototype

comment:25 Changed 22 months ago by jkarder

  • Owner changed from jkarder to architects
  • Status changed from accepted to reviewing

Changed 22 months ago by pfleck

comment:26 Changed 22 months ago by pfleck

In the OperatorGraphView, if we use the IOperatorGraphOperator interface instead of AlgorithmOperator the breadcrumbs (and operatorgraph view) would work not only for AlgorithmOperators but for all operators that implement IOperatorGraphOperator.

I tested it locally and it worked.

See attachment:OperatorGraphView.cs.patch

comment:27 Changed 21 months ago by ascheibe

These changes are in trunk and we have not made any decision about them. From my point of view there are 2 options:

  • Leave it as it is and release it
  • Remove breadcrumbs from the collection views and only release it for the OperatorGraph view

What should we do?

comment:28 Changed 21 months ago by mkommend

I opt for removing bread crumbs from collection views and only release them for the operator graph view.

comment:29 Changed 21 months ago by gkronber

I prefer the second option (only for the OperatorGraph). We can then discuss how we would like to include this in the collection views.

comment:30 Changed 21 months ago by jkarder

  • Owner changed from architects to ascheibe

r13244: worked on breadcrumb navigation

  • OperatorGraphView now checks for IOperatorGraphOperator instead of AlgorithmOperator
  • removed breadcrumbs from collection views

comment:31 Changed 21 months ago by jkarder

r13245: fixed plugin dependencies

comment:32 Changed 21 months ago by ascheibe

  • Owner changed from ascheibe to jkarder
  • Status changed from reviewing to readytorelease

Reviewed r13014, r13244 and r13245, all good.

comment:33 Changed 21 months ago by jkarder

Thanks!

comment:34 Changed 21 months ago by jkarder

  • Resolution set to done
  • Status changed from readytorelease to closed

r13258: merged r13014, r13244 and r13245 into stable

comment:35 Changed 21 months ago by ascheibe

r13302 recorded merge info for r13258

Note: See TracTickets for help on using tickets.