it.tidalwave.netbeans.dialog.GenericWizardPanel Maven / Gradle / Ivy
/***********************************************************************************************************************
*
* OpenBlueSky - NetBeans Platform Enhancements
* Copyright (C) 2006-2011 by Tidalwave s.a.s. (http://www.tidalwave.it)
*
***********************************************************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
***********************************************************************************************************************
*
* WWW: http://openbluesky.kenai.com
* SCM: https://kenai.com/hg/openbluesky~src
*
**********************************************************************************************************************/
package it.tidalwave.netbeans.dialog;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.openide.WizardDescriptor;
import org.openide.util.HelpCtx;
/*******************************************************************************
*
* @author Fabrizio Giudici
* @version $Id$
*
******************************************************************************/
public class GenericWizardPanel implements WizardDescriptor.Panel
{
/**
* The visual component that displays this panel. If you need to access the
* component from this class, just use getComponent().
*/
protected Component component;
private Class componentClass;
private final Set listeners = new HashSet(1);
/***************************************************************************
*
*
**************************************************************************/
public GenericWizardPanel (Class componentClass)
{
this.componentClass = componentClass;
}
// Get the visual component for the panel. In this template, the component
// is kept separate. This can be more efficient: if the wizard is created
// but never displayed, or not all panels are displayed, it is better to
// create only those which really need to be visible.
/***************************************************************************
*
*
**************************************************************************/
public Component getComponent()
{
if (component == null)
{
try
{
component = (Component)componentClass.newInstance();
component.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange (PropertyChangeEvent event)
{
fireChangeEvent();
}
});
}
catch (IllegalAccessException ex)
{
ex.printStackTrace();
}
catch (InstantiationException ex)
{
ex.printStackTrace();
}
}
return component;
}
/***************************************************************************
*
*
**************************************************************************/
public HelpCtx getHelp()
{
return new HelpCtx(componentClass);
}
/***************************************************************************
*
*
**************************************************************************/
public boolean isValid()
{
return true;
}
/***************************************************************************
*
*
**************************************************************************/
public final void addChangeListener (ChangeListener l)
{
synchronized (listeners)
{
listeners.add(l);
}
}
/***************************************************************************
*
*
**************************************************************************/
public final void removeChangeListener (ChangeListener l)
{
synchronized (listeners)
{
listeners.remove(l);
}
}
/***************************************************************************
*
*
**************************************************************************/
protected final void fireChangeEvent()
{
Iterator it;
synchronized (listeners)
{
it = new HashSet(listeners).iterator();
}
ChangeEvent ev = new ChangeEvent(this);
while (it.hasNext())
{
it.next().stateChanged(ev);
}
}
// You can use a settings object to keep track of state. Normally the
// settings object will be the WizardDescriptor, so you can use
// WizardDescriptor.getProperty & putProperty to store information entered
// by the user.
/***************************************************************************
*
*
**************************************************************************/
public void readSettings (Object settings)
{
}
/***************************************************************************
*
*
**************************************************************************/
public void storeSettings (Object settings)
{
}
}