private int createArmSelect(
      PanelBuilder builder,
      int row,
      final Study curStudy,
      TreatmentDefinition def,
      CellConstraints cc) {
    builder.addLabel(def.getLabel(), cc.xy(2, row));

    ListModel arms = d_pm.getArmsPerStudyPerDefinition(curStudy, def);

    final JComboBox drugBox =
        AuxComponentFactory.createBoundComboBox(
            arms, d_pm.getSelectedArmModel(curStudy, def), true);
    if (arms.getSize() == 1) drugBox.setEnabled(false);
    final JPanel drugAndDosePanel = new JPanel(new BorderLayout());

    builder.add(drugBox, cc.xy(4, row));
    drugBox.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            updateDrugAndDoseLabel(curStudy, drugBox, drugAndDosePanel);
          }
        });
    row = LayoutUtil.addRow(builder.getLayout(), row);
    updateDrugAndDoseLabel(curStudy, drugBox, drugAndDosePanel);
    builder.add(drugAndDosePanel, cc.xy(4, row));

    return LayoutUtil.addRow(builder.getLayout(), row);
  }
  @Override
  public void prepare() {
    d_pm.rebuildArmSelection();

    removeAll();

    FormLayout layout = new FormLayout("3dlu, left:pref, 3dlu, pref:grow", "p");
    PanelBuilder builder = new PanelBuilder(layout);
    builder.setDefaultDialogBorder();
    CellConstraints cc = new CellConstraints();

    int row = 1;
    for (Study curStudy : d_pm.getSelectableStudyListPM().getSelectedStudiesModel()) {
      builder.addSeparator(curStudy.toString(), cc.xyw(1, row, 4));
      row = LayoutUtil.addRow(layout, row);

      for (TreatmentDefinition def : d_pm.getSelectedRefinedTreatmentDefinitions()) {
        if (!d_pm.getArmsPerStudyPerDefinition(curStudy, def).isEmpty()) {
          row = createArmSelect(builder, row, curStudy, def, cc);
        }
      }
    }

    JScrollPane sp = new JScrollPane(builder.getPanel());
    add(sp, BorderLayout.CENTER);
    sp.getVerticalScrollBar().setUnitIncrement(16);

    setComplete(true);
  }