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

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

import com.dlsc.flexgantt.showcase.AbstractDemo;
import com.dlsc.flexgantt.showcase.DemoControlsPanel;
import com.dlsc.flexgantt.showcase.OSXAdapter;
import com.dlsc.flexgantt.swing.GanttChart;
import com.dlsc.flexgantt.swing.GanttChartStatusBar;
import com.dlsc.flexgantt.swing.SimpleGranularityGanttChart;
import com.dlsc.flexgantt.swing.timeline.SimpleGranularityTimelineControlPanel;
import com.dlsc.flexgantt.swing.timeline.TimeGranularityTimelineControlPanel;

public class TimelineDemo extends AbstractDemo {

    public TimelineDemo() {
        super("Timeline");
    }

    @Override
    public String[] getSourceCodeFileNames() {
        return new String[] { "TimelineDemo" };
    }

    @Override
    public void run(boolean embedded) {
        GanttChart topGC = new GanttChart();
        topGC.getKeyColumn().setWidth(120);
        topGC.getTreeTable().setRootVisible(false);
        topGC.resetToPreferredSizes();

        SimpleGranularityGanttChart bottomGC = new SimpleGranularityGanttChart();
        bottomGC.getKeyColumn().setWidth(120);
        bottomGC.getTreeTable().setRootVisible(false);
        bottomGC.resetToPreferredSizes();

        GanttChartStatusBar<GanttChart> topStatusBar = new GanttChartStatusBar<GanttChart>(
                topGC);
        GanttChartStatusBar<GanttChart> bottomStatusBar = new GanttChartStatusBar<GanttChart>(
                bottomGC);

        JPanel topControls = new DemoControlsPanel(this);
        topControls.setLayout(new BorderLayout());
        topControls.add(BorderLayout.NORTH,
                new TimeGranularityTimelineControlPanel(topGC.getTimeline()));

        JPanel top = new JPanel();
        top.setLayout(new BorderLayout());
        top.add(BorderLayout.CENTER, topGC);
        top.add(BorderLayout.EAST, topControls);
        top.add(BorderLayout.SOUTH, topStatusBar);
        top
                .setBorder(new CompoundBorder(new EmptyBorder(20, 20, 20, 20),
                        new TitledBorder(
                                "Gantt Chart using standard time granularity")));

        JPanel bottomControls = new DemoControlsPanel(this);
        bottomControls.setLayout(new BorderLayout());
        bottomControls.add(BorderLayout.NORTH,
                new SimpleGranularityTimelineControlPanel(bottomGC
                        .getTimeline()));

        JPanel bottom = new JPanel();
        bottom.setLayout(new BorderLayout());
        bottom.add(BorderLayout.CENTER, bottomGC);
        bottom.add(BorderLayout.EAST, bottomControls);
        bottom.add(BorderLayout.SOUTH, bottomStatusBar);
        bottom.setBorder(new CompoundBorder(new EmptyBorder(20, 20, 20, 20),
                new TitledBorder("Gantt Chart using simple granularity")));

        JPanel gcPanel = new JPanel();
        gcPanel.setLayout(new GridLayout(2, 1));
        gcPanel.add(top);
        gcPanel.add(bottom);

        JFrame frame = new JFrame("Timeline");
        OSXAdapter.setWindowCanFullScreen(frame, true);
        
        frame.add(gcPanel);
        
        if (embedded) {
            frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        } else {
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }

        frame.setSize(1000, 800);
        frame.setVisible(true);
    }

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