Choosing a dynamic list in another dynamic in math

Build the solution proposed by Belisarius in Manipulating Custom Tabulars .

  • Consider the following function to create a custom table view:

    DataSampleXX[data_, linesNumber_, columnsList_, color1_, color2_, color3_] := Grid[ Join[ {columnsList}, {Map[Rotate[Text[#], 90 Degree] &, data[[1, columnsList]]]}, data[[2 ;; linesNumber, columnsList]]], Background -> {{{{color1, color2}}, {1 -> color3}}}, Dividers -> {All, {1 -> True, 2 -> True, 3 -> True, 0 -> True}}, ItemSize -> {1 -> Automatic, Automatic}, Alignment -> Top, Frame -> True, FrameStyle -> Thickness[2], ItemStyle -> {Automatic, Automatic, {{1, 1}, {1, Length[data]}} -> Directive[FontSize -> 15, Black, Bold]} ]; 
  • And the following data:

     soData = {{"col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10"}, Range[1, 10], Range[11, 20], Range[21, 30], Range[31, 40]} With[ {columnsList = {1, 3}, data = soData, linesNumber = 3, color1 = LightBlue, color2 = LightRed, color3 = LightGray}, DataSampleXX[data, linesNumber, columnsList, color1, color2, color3]] 

Output

  • I would like to integrate the following Dynamic to provide the columnsList argument of the columnsList function.

     Manipulate[ Sort@Join [Sequence @@ {a, b}], Evaluate[Sequence @@ MapThread[{{#1, {}, ""}, #2, ControlType -> TogglerBar} &, {{a, b}, Partition[Rule @@@ Transpose[{Range[10], soData[[1]]}], 5]}]], ControlPlacement -> Top] 

What i want

  • This should allow me to dynamically select columns (VS range of columns in my previous question) to display using DataSampleXX , but I still can’t figure out how to combine the 2 mechanisms.
+4
source share
1 answer

What you want to do requires a few tricks.

For instance:

  Maipulate[ f[ Array[ a, exp], ...], ...] 

and similar constructions do not work (and are explained in the documents), because a[_] are not explicit in the expression, so it is difficult to have a variable number of controls. The solution I found is:

 Manipulate[ f[#,...], ... ] & @ Array[a, exp] 

Another problem is that the design

 Control@ ( .#. ) &/@ _controls_ 

two-dimensional splitting does not allow itself, therefore we should use both Control @ syntax parameters (Control @ and {...}), which are not documented.

Other troubles you can find in the code below.

So:

 soData = {{"col01", "col02", "col03", "col04", "col05", "col06", "col07", "col08", "col09", "col10"}, Range[1, 10], Range[11, 20], Range[21, 30], Range[31, 40]}; perRow = 5; colsel = (# -> Graphics[{#, Disk[]}, ImageSize -> 15]) &/@ColorData[1, "ColorList"]; s[x_] := Style[x, Black, Bold, 12]; ct = ControlType -> PopupMenu; Manipulate[ DataSampleXX[soData, linesNumber, Sort@Join [Sequence @@ #], color1, color2, color3], Row[ {Column[ { Control@ {{linesNumber, 2, s@ "Lines"}, Range[2, Length@soData [[All, 1]] - 1], ct}}], Spacer[20], Column[ { Control@ {{color1, colsel[[1, 1]], s@ "Color 1"}, colsel, ct}, Control@ {{color2, colsel[[2, 1]], s@ "Color 2"}, colsel, ct}, Control@ {{color3, colsel[[3, 1]], s@ "Color 3"}, colsel, ct}}]}], Evaluate[ Sequence @@ MapThread[{{#1, {}, ""}, #2, ControlType -> TogglerBar} &, {#, Partition[Rule @@@ Transpose[{Range[10], soData[[1]]}], perRow]}]]] &@ Array[a, Length[soData[[1]]]/perRow] 

enter image description here

+7
source