workcraft/workcraft

View on GitHub
workcraft/WorkcraftCore/src/org/workcraft/presets/TextPresetDialog.java

Summary

Maintainability
A
30 mins
Test Coverage
package org.workcraft.presets;

import org.workcraft.gui.controls.CodePanel;
import org.workcraft.utils.GuiUtils;

import javax.swing.*;
import java.awt.*;

public class TextPresetDialog extends PresetDialog<String> {

    private PresetManagerPanel<String> presetPanel;
    private CodePanel codePanel;

    public TextPresetDialog(Window owner, String title, PresetManager<String> presetManager) {
        super(owner, title, presetManager);

        // Preset panel is set here, as it is created in overloaded createPresetPanel called from super constructor
        presetPanel.selectFirst();
    }

    @Override
    public JPanel createContentPanel() {
        JPanel result = super.createContentPanel();
        result.setLayout(GuiUtils.createBorderLayout());
        result.add(createTextPanel(), BorderLayout.CENTER);
        // Preset panel has to be created the last as its guiMapper refers to other controls
        presetPanel = createPresetPanel();
        result.add(presetPanel, BorderLayout.NORTH);
        return result;
    }

    private PresetManagerPanel<String> createPresetPanel() {
        DataMapper<String> guiMapper = new DataMapper<>() {
            @Override
            public void applyDataToControls(String data) {
                codePanel.setText(data);
            }

            @Override
            public String getDataFromControls() {
                return codePanel.getText();
            }
        };

        return new PresetManagerPanel<>(getUserData(), guiMapper);
    }

    private JPanel createTextPanel() {
        codePanel = new CodePanel(11);
        JPanel panel = new JPanel(GuiUtils.createBorderLayout());
        panel.add(codePanel, BorderLayout.CENTER);
        return panel;
    }

    @Override
    public String getPresetData() {
        return codePanel.getText();
    }

    public CodePanel getCodePanel() {
        return codePanel;
    }

}