package com.dlsc.flexgantt.showcase.demo.resources;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.SwingUtilities;

import net.miginfocom.swing.MigLayout;

import com.dlsc.flexgantt.showcase.AbstractDemo;
import com.dlsc.flexgantt.showcase.DemoControlsPanel;
import com.dlsc.flexgantt.model.dateline.DatelineModelEvent;
import com.dlsc.flexgantt.model.dateline.DatelineModelVetoException;
import com.dlsc.flexgantt.model.dateline.IDatelineModelListener;
import com.dlsc.flexgantt.swing.GanttChart;
import com.dlsc.flexgantt.swing.GanttChartFrame;
import com.dlsc.flexgantt.swing.layer.system.RowLayer;

public class ResourceDemo extends AbstractDemo {

    public ResourceDemo() {
        super("Resources");
    }

    @Override
    public String[] getSourceCodeFileNames() {
        return new String[] { "Resource", "ResourceCrosshairPolicy",
                "ResourceDemo", "ResourceGanttChart", "ResourceModel",
                "ResourceNode", "ResourceTreeTableCellRenderer" };
    }

    @Override
    public void run(boolean embedded) {
        
        final GanttChart gc = isMacOSX() ? new MacResourceGanttChart()
                : new ResourceGanttChart();
        
        gc.getTimeline().getEventline().setVisible(false);
        gc.resetToPreferredSizes();
        gc.getDatelineModel().addDatelineModelListener(
                new IDatelineModelListener() {
                    @Override
                    public void datelineModelChanged(DatelineModelEvent evt) {
                        if (evt.getId()
                                .equals(DatelineModelEvent.ID.REQUESTED_VISIBLE_TIME_SPAN_CHANGED)) {
                        }
                    }

                    @Override
                    public void datelineModelWillChange(DatelineModelEvent evt)
                            throws DatelineModelVetoException {
                    }
                });

        final RowLayer rowLayer = gc.getLayerContainer().getSystemLayer(
                RowLayer.class);
        rowLayer.setPaintingFocus(false);

        final JCheckBox focusBox = new JCheckBox("Paint the row focus",
                rowLayer.isPaintingFocus());
        focusBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                rowLayer.setPaintingFocus(focusBox.isSelected());
            }
        });

        final JCheckBox crosshairBox = new JCheckBox("Show crosshair",
                rowLayer.isPaintingFocus());
        crosshairBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                gc.setCrosshairVisible(crosshairBox.isSelected());
            }
        });

        DemoControlsPanel controlsPanel = new DemoControlsPanel(this);
        controlsPanel.setLayout(new MigLayout("insets 0 0 0 0, wrap 1","[]","[]"));
        controlsPanel.add(focusBox);
        controlsPanel.add(crosshairBox);

        GanttChartFrame frame = createFrame("Resources", gc, embedded);
        frame.add(BorderLayout.EAST, controlsPanel);
        frame.center();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new ResourceDemo());
    }
}
