/*
 * Created on 03.05.2005
 */
package net.sourceforge.ganttproject.export;

import java.awt.Component;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;

import net.sourceforge.ganttproject.export.ExportFileWizardImpl.State;
import net.sourceforge.ganttproject.gui.options.GPOptionChoicePanel;
import net.sourceforge.ganttproject.gui.options.model.GPOptionGroup;
import net.sourceforge.ganttproject.gui.projectwizard.WizardPage;
import net.sourceforge.ganttproject.language.GanttLanguage;

/**
 * @author bard
 */
class ExporterChooserPage implements WizardPage {
    private Exporter[] myExporters;

    private State myState;
    private GanttLanguage language = GanttLanguage.getInstance(); 

    /**
     * 
     */
    ExporterChooserPage(Exporter[] exporters, ExportFileWizardImpl.State state) {
        myExporters = exporters;
        myState = state;
        
    }

    public String getTitle() {
        return language.getText("option.exporter.title");
    }

    public Component getComponent() {
        int selectedGroupIndex = 0;
        Action[] choiceChangeActions = new Action[myExporters.length];
        GPOptionGroup[] choiceOptions = new GPOptionGroup[myExporters.length];
        for (int i = 0; i < myExporters.length; i++) {
            final Exporter nextExporter = myExporters[i];
            if (nextExporter==myState.getExporter()) {
                selectedGroupIndex = i;
            }
            Action nextAction = new AbstractAction(nextExporter
                    .getFileTypeDescription()) {
                public void actionPerformed(ActionEvent e) {
                    ExporterChooserPage.this.myState.setExporter(nextExporter);
                }
            };
            GPOptionGroup nextOptions = nextExporter.getOptions();
            if (nextOptions!=null) {
                nextOptions.lock();
            }
            choiceChangeActions[i] = nextAction;
            choiceOptions[i] = nextOptions;
        }
        GPOptionChoicePanel choicePanel = new GPOptionChoicePanel();
        return choicePanel.getComponent(choiceChangeActions, choiceOptions, selectedGroupIndex);
    }

    public void setActive(boolean b) {
        if (false==b) {
            for (int i=0; i<myExporters.length; i++) {
                if (myExporters[i].getOptions()!=null) {
                    myExporters[i].getOptions().commit();
                }
            }
        }
        else {
            for (int i=0; i<myExporters.length; i++) {
                if (myExporters[i].getOptions()!=null) {
                    myExporters[i].getOptions().lock();
                }
            }
            
        }
    }

}
