meyfa/structogram2byob

View on GitHub
src/main/java/structogram2byob/gui/units/SwingUnitsManager.java

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
package structogram2byob.gui.units;

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JPanel;

import nsdlib.elements.NSDElement;
import nsdlib.elements.NSDRoot;
import structogram2byob.gui.GuiController;


/**
 * Implementation of a units manager for the Swing GUI.
 */
public class SwingUnitsManager implements IUnitsManager
{
    private final JPanel comp;

    /**
     * Constructor.
     */
    public SwingUnitsManager()
    {
        comp = new JPanel(new GridBagLayout());
    }

    @Override
    public JPanel getPanel()
    {
        return comp;
    }

    @Override
    public void addUnit(GuiController controller, NSDRoot unit)
    {
        if (comp.getComponentCount() > 0) {
            comp.remove(comp.getComponentCount() - 1);
        }

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = GridBagConstraints.RELATIVE;
        gbc.gridy = 0;
        gbc.weightx = 0;
        gbc.weighty = 1;
        gbc.fill = GridBagConstraints.VERTICAL;
        gbc.anchor = GridBagConstraints.NORTHWEST;

        comp.add(new UnitPanel(controller, unit), gbc);

        gbc.weightx = 1000;
        gbc.fill = GridBagConstraints.BOTH;
        comp.add(new JPanel(), gbc);

        comp.revalidate();
        comp.repaint();
    }

    @Override
    public void removeUnit(int index)
    {
        comp.remove(index);

        comp.revalidate();
        comp.repaint();
    }

    @Override
    public void removeAllUnits()
    {
        comp.removeAll();

        comp.revalidate();
        comp.repaint();
    }

    @Override
    public void markError(NSDElement element)
    {
        for (int i = 0, n = comp.getComponentCount(); i < n; ++i) {
            Component c = comp.getComponent(i);
            if (c instanceof UnitPanel) {
                ((UnitPanel) c).markError(element);
            }
        }
    }

    @Override
    public void clearErrorMarks()
    {
        for (int i = 0, n = comp.getComponentCount(); i < n; ++i) {
            Component c = comp.getComponent(i);
            if (c instanceof UnitPanel) {
                ((UnitPanel) c).clearErrorMarks();
            }
        }
    }
}