/* Copyright 2008-2010 Gephi Authors : Yi Du <duyi001@gmail.com> Website : http://www.gephi.org This file is part of Gephi. Gephi is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gephi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Gephi. If not, see <http://www.gnu.org/licenses/>. */ package org.gephi.desktop.spigot; import java.awt.Component; import java.util.NoSuchElementException; import javax.swing.JComponent; import javax.swing.event.ChangeListener; import org.gephi.io.importer.spi.ImporterWizardUI; import org.gephi.io.importer.spi.SpigotImporter; import org.openide.WizardDescriptor; import org.openide.util.Lookup; public class SpigotWizardIterator implements WizardDescriptor.Iterator { private int index; private WizardDescriptor.Panel[] originalPanels; private WizardDescriptor.Panel[] panels; private ImporterWizardUI currentWizardUI; /** * Initialize panels representing individual wizard's steps and sets * various properties for them influencing wizard appearance. */ private WizardDescriptor.Panel[] getPanels() { if (panels == null) { panels = new WizardDescriptor.Panel[]{ new SpigotWizardPanel1(), new SpigotWizardPanel2() }; String[] steps = new String[panels.length]; for (int i = 0; i < panels.length; i++) { Component c = panels[i].getComponent(); // Default step name to component name of panel. steps[i] = c.getName(); if (c instanceof JComponent) { // assume Swing components JComponent jc = (JComponent) c; // Sets step number of a component // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, new Integer(i)); // Sets steps names for a panel jc.putClientProperty("WizardPanel_contentData", steps); // Turn on subtitle creation on each step jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); // Show steps on the left side with the image on the background jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); // Turn on numbering of all steps jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); } } originalPanels = panels; } return panels; } public WizardDescriptor.Panel current() { WizardDescriptor.Panel p = getPanels()[index]; // if(p.getComponent() instanceof SetupablePanel){ // ((SetupablePanel)(p.getComponent())).setup // (currentSpigotSupport.generateImporter()); // } return p; } public String name() { return index + 1 + ". from " + getPanels().length; } public boolean hasNext() { return index < getPanels().length - 1; } public boolean hasPrevious() { return index > 0; } public void nextPanel() { if (!hasNext()) { throw new NoSuchElementException(); } //change panel if the current is the first panel if (index == 0) { for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { SpigotVisualPanel1 visual1 = ((SpigotVisualPanel1) current().getComponent()); if (visual1.getCurrentCategory().equals(wizardUi.getCategory()) && visual1.getCurrentSpigot().equals(wizardUi.getDisplayName())) { WizardDescriptor.Panel[] spigotPanels = wizardUi.getPanels(); WizardDescriptor.Panel tempFirstPanel = panels[0]; panels = new WizardDescriptor.Panel[spigotPanels.length + 1]; panels[0] = tempFirstPanel; for (int i = 0; i < spigotPanels.length; i++) { panels[i + 1] = spigotPanels[i]; wizardUi.setup(spigotPanels[i]); } currentWizardUI = wizardUi; } } // repaintLeftComponent(); } index++; } /** * ? might used for repainting */ private void repaintLeftComponent() { String[] steps = new String[panels.length]; for (int i = 0; i < panels.length; i++) { Component c = panels[i].getComponent(); // Default step name to component name of panel. steps[i] = c.getName(); if (c instanceof JComponent) { // assume Swing components JComponent jc = (JComponent) c; // Sets step number of a component // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, new Integer(i)); // Sets steps names for a panel jc.putClientProperty("WizardPanel_contentData", steps); // Turn on subtitle creation on each step jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); // Show steps on the left side with the image on the background jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); // Turn on numbering of all steps jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); } } } public void previousPanel() { //change panel if the previous panel is the first if (!hasPrevious()) { throw new NoSuchElementException(); } if (index == 1) { panels = originalPanels; repaintLeftComponent(); } index--; } // If nothing unusual changes in the middle of the wizard, simply: public void addChangeListener(ChangeListener l) { } public void removeChangeListener(ChangeListener l) { } public ImporterWizardUI getCurrentWizardUI() { return currentWizardUI; } void unsetupPanels(SpigotImporter importer) { for (int i = 1; i < panels.length; i++) { currentWizardUI.unsetup(importer, panels[i]); } } }