@SuppressWarnings("unchecked")
  public TransformerPanel(
      final TransformerPanelController controller,
      IconManager iconManager,
      TransformerWorker worker) {
    super(controller, iconManager);
    setOpaque(!isAquaLAF());

    worker.setView(this);

    final JPanel applyPanel = createApplyPanel();
    final Component editPanel = createEditPanel();
    final JLabel startWithLabel = new JLabel("Start with:");
    startWithComboBox = new JComboBox<>(controller.getStartWithComboBoxModel());
    startWithComboBox.setRenderer(ViewUtil.createElipsisRenderer(50));
    final JSeparator sep = new JSeparator();

    final GroupLayout layout = new GroupLayout(this);
    this.setLayout(layout);
    layout.setAutoCreateContainerGaps(!isAquaLAF());
    layout.setAutoCreateGaps(!isAquaLAF());

    layout.setHorizontalGroup(
        layout
            .createParallelGroup(Alignment.LEADING)
            .addGroup(
                layout
                    .createSequentialGroup()
                    .addComponent(namedElementComboBox, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(optionsButton, PREFERRED_SIZE, 64, PREFERRED_SIZE))
            .addComponent(sep, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(
                layout
                    .createSequentialGroup()
                    .addComponent(startWithLabel, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
                    .addComponent(startWithComboBox, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE))
            .addComponent(editPanel, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(applyPanel, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE));
    layout.setVerticalGroup(
        layout
            .createSequentialGroup()
            .addGroup(
                layout
                    .createParallelGroup(Alignment.CENTER, false)
                    .addComponent(
                        namedElementComboBox, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
                    .addComponent(optionsButton, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE))
            .addComponent(sep, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
            .addGroup(
                layout
                    .createParallelGroup(Alignment.CENTER, false)
                    .addComponent(startWithLabel, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
                    .addComponent(startWithComboBox, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE))
            .addComponent(editPanel, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(applyPanel, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE));

    DynamicComboBoxModel<TransformerElement> model = controller.getElementComboBoxModel();
    TransformerElement element = (TransformerElement) model.getSelectedItem();
    createView(element.getChain());

    controller.synchronize(this);
  }