То, что вы хотите сделать, требует нескольких уловок.
Например:
Maipulate[ f[ Array[ a, exp], ...], ...]
и подобные конструкции не работают (и это объясняется в документации), потому что a[_]
не являются явными в выражении, что затрудняет использование переменного числа элементов управления. Решение, которое я нашел:
Manipulate[ f[#,...], ... ] & @ Array[a, exp]
Другая проблема заключается в том, что конструкция
Control@( .#. ) &/@ _controls_
сам по себе не допускает двухмерное разбиение, поэтому мы должны использовать обе опции синтаксиса Control @ (Control @ и {...}), что не задокументировано.
Другие неприятности вы можете найти в коде ниже.
Итак:
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]