/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.works.editor.grammar.codegen; import javax.swing.event.ChangeListener; import org.netbeans.api.annotations.common.NonNull; import org.openide.WizardDescriptor; import org.openide.util.ChangeSupport; import org.openide.util.HelpCtx; public class CodeGeneratorWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> { public static final String GENERATE_LISTENER = "generateListener"; public static final String GENERATE_VISITOR = "generateVisitor"; public static final String USE_PACKAGE_NAME = "usePackageName"; public static final String PACKAGE_NAME = "packageName"; public static final String ABSTRACT_CLASSES = "abstractClasses"; private final CodeGeneratorWizardPanel1 _locationPanel; private final ChangeSupport _changeSupport = new ChangeSupport(this); private boolean generateListener; private boolean generateVisitor; private boolean usePackageName; private String packageName; private boolean abstractClasses; /** * The visual component that displays this panel. If you need to access the * component from this class, just use {@link #getComponent}. */ private CodeGeneratorVisualPanel2 component; public CodeGeneratorWizardPanel2(@NonNull CodeGeneratorWizardPanel1 locationPanel) { this._locationPanel = locationPanel; } public CodeGeneratorWizardPanel1 getLocationPanel() { return _locationPanel; } /*package*/ ChangeSupport getChangeSupport() { return _changeSupport; } public boolean isGenerateListener() { if (component != null) { return component.isGenerateListener(); } return generateListener; } public void setGenerateListener(boolean generateListener) { if (component != null) { component.setGenerateListener(generateListener); } this.generateListener = generateListener; } public boolean isGenerateVisitor() { if (component != null) { return component.isGenerateVisitor(); } return generateVisitor; } public void setGenerateVisitor(boolean generateVisitor) { if (component != null) { component.setGenerateVisitor(generateVisitor); } this.generateVisitor = generateVisitor; } public boolean isUsePackageName() { if (component != null) { return component.isUsePackageName(); } return usePackageName; } public String getPackageName() { if (component != null) { return component.getPackageName(); } return packageName; } public void setPackageName(Boolean usePackageName, String packageName) { if (component != null) { component.setPackageName(usePackageName, packageName); } this.usePackageName = usePackageName; this.packageName = packageName; } public boolean isAbstractClasses() { if (component != null) { return component.isAbstractClasses(); } return abstractClasses; } public void setAbstractClasses(boolean abstractClasses) { if (component != null) { component.setAbstractClasses(abstractClasses); } this.abstractClasses = abstractClasses; } public boolean isAbstractClassesAvailable() { if (_locationPanel.getTargetName() == null) { return false; } return _locationPanel.getTargetName().contains("sharwell/optimized"); } // 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. @Override public CodeGeneratorVisualPanel2 getComponent() { if (component == null) { component = new CodeGeneratorVisualPanel2(this); _changeSupport.fireChange(); } return component; } @Override public HelpCtx getHelp() { // Show no Help button for this panel: return HelpCtx.DEFAULT_HELP; // If you have context help: // return new HelpCtx("help.key.here"); } @Override public boolean isValid() { // If it is always OK to press Next or Finish, then: return true; // If it depends on some condition (form filled out...) and // this condition changes (last form field filled in...) then // use ChangeSupport to implement add/removeChangeListener below. // WizardDescriptor.ERROR/WARNING/INFORMATION_MESSAGE will also be useful. } @Override public void addChangeListener(ChangeListener l) { _changeSupport.addChangeListener(l); } @Override public void removeChangeListener(ChangeListener l) { _changeSupport.removeChangeListener(l); } @Override public void readSettings(WizardDescriptor wiz) { setGenerateListener(CodeGeneratorWizardOptions.Features.isGenerateListener(wiz)); setGenerateVisitor(CodeGeneratorWizardOptions.Features.isGenerateVisitor(wiz)); setPackageName(CodeGeneratorWizardOptions.Features.isUsePackageName(wiz), CodeGeneratorWizardOptions.Features.getPackageName(wiz)); setAbstractClasses(CodeGeneratorWizardOptions.Features.isAbstractClasses(wiz)); } @Override public void storeSettings(WizardDescriptor wiz) { CodeGeneratorWizardOptions.setBooleanProperty(wiz, GENERATE_LISTENER, isGenerateListener()); CodeGeneratorWizardOptions.setBooleanProperty(wiz, GENERATE_VISITOR, isGenerateVisitor()); CodeGeneratorWizardOptions.setBooleanProperty(wiz, USE_PACKAGE_NAME, isUsePackageName()); CodeGeneratorWizardOptions.setProperty(wiz, PACKAGE_NAME, getPackageName()); CodeGeneratorWizardOptions.setBooleanProperty(wiz, ABSTRACT_CLASSES, isAbstractClasses()); } }