From Slicer Wiki
Jump to: navigation, search
Home < Slicer3:UIDesign:WorkingProblems:SlicerFlexibleLayout:Architecture

Architecture design for Slicer flexible layouts

Back to Flexible Layouts Overview


We discussed several ways of representing layouts including:

  • html table style description
 <table name=A>
 <tr width=.5 height=.5>
   <td width=1.0 height=1.0>
       <tr width=1.0 height=0.5>
         <td width=1.0 height=1.0> B </td>
       <tr width=1.0 height=0.5>
         <td width=1.0 height=1.0> F </td>
   <td width=1.0 height=1.0> C </td>
 <tr width=0.5 height=0.5>
   <td width=1.0 height=1.0> D </td>
   <td width=1.0 height=1.0> E </td>

pros & cons ??

  • Tk grid style description
 grid -row 0 -column 0 B
 grid -row 0 -column 1 -rowspan 2 C
 grid -row 1 -column 0 F
 grid -row 2 -column 0 D
 grid -row 2 -column 1 E

pros & cons ??

  • tree description

    GetNthChild (int n)
    DeleteNthChild (int n)
    SetPaneContent ( *vtkObject)
    method to delete a pane (span)
    method to add a split (nest)

And settled on the tree for its ease of programmatic manipulation.


Ideas on representation and approach:

  • nodes represent panes in the layout
  • root is the encapsulating pane
  • nodes contain weights that describe their horizontal and vertical span of the parent
  • only leaf nodes can contain content
  • can use swidget infrastructure for handling events using Tk Bind() to avoid triggering unwanted updates in ApplicationGUI during layout manipulation
  • Create singleton node on the scene?
  • Create a Layout collection on the scene that contains predefined and saved custom layouts?
  • Selecting existing layout or creating custom layout would copy a node from the collection into the scene's singleton and triggers an update and redisplay of the Slicer window?


  • If a pane has tabs, how are tabs represented?
  • If the main application Window has multiple tabs, then does each tab have its own layout tree?