git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7109 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
5439dbc2a9
commit
3ba00cce25
@ -0,0 +1,8 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!-- You may freely edit this file. See harness/README in the NetBeans platform --> |
||||||
|
<!-- for some information on what you could do (e.g. targets to override). --> |
||||||
|
<!-- If you delete this file and reopen the project it will be recreated. --> |
||||||
|
<project name="com.jme3.gde.angelfont" default="netbeans" basedir="."> |
||||||
|
<description>Builds, tests, and runs the project com.jme3.gde.angelfont.</description> |
||||||
|
<import file="nbproject/build-impl.xml"/> |
||||||
|
</project> |
@ -0,0 +1,6 @@ |
|||||||
|
Manifest-Version: 1.0 |
||||||
|
OpenIDE-Module: com.jme3.gde.angelfont |
||||||
|
OpenIDE-Module-Layer: com/jme3/gde/angelfont/layer.xml |
||||||
|
OpenIDE-Module-Localizing-Bundle: com/jme3/gde/angelfont/Bundle.properties |
||||||
|
OpenIDE-Module-Specification-Version: 1.0 |
||||||
|
|
@ -0,0 +1,45 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!-- |
||||||
|
*** GENERATED FROM project.xml - DO NOT EDIT *** |
||||||
|
*** EDIT ../build.xml INSTEAD *** |
||||||
|
--> |
||||||
|
<project name="com.jme3.gde.angelfont-impl" basedir=".."> |
||||||
|
<fail message="Please build using Ant 1.7.1 or higher."> |
||||||
|
<condition> |
||||||
|
<not> |
||||||
|
<antversion atleast="1.7.1"/> |
||||||
|
</not> |
||||||
|
</condition> |
||||||
|
</fail> |
||||||
|
<property file="nbproject/private/suite-private.properties"/> |
||||||
|
<property file="nbproject/suite.properties"/> |
||||||
|
<fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail> |
||||||
|
<property file="${suite.dir}/nbproject/private/platform-private.properties"/> |
||||||
|
<property file="${suite.dir}/nbproject/platform.properties"/> |
||||||
|
<macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2"> |
||||||
|
<attribute name="name"/> |
||||||
|
<attribute name="value"/> |
||||||
|
<sequential> |
||||||
|
<property name="@{name}" value="${@{value}}"/> |
||||||
|
</sequential> |
||||||
|
</macrodef> |
||||||
|
<macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2"> |
||||||
|
<attribute name="property"/> |
||||||
|
<attribute name="value"/> |
||||||
|
<sequential> |
||||||
|
<property name="@{property}" value="@{value}"/> |
||||||
|
</sequential> |
||||||
|
</macrodef> |
||||||
|
<property file="${user.properties.file}"/> |
||||||
|
<nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> |
||||||
|
<nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> |
||||||
|
<nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/> |
||||||
|
<fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness)."> |
||||||
|
<condition> |
||||||
|
<not> |
||||||
|
<contains string="${cluster.path.evaluated}" substring="platform"/> |
||||||
|
</not> |
||||||
|
</condition> |
||||||
|
</fail> |
||||||
|
<import file="${harness.dir}/build.xml"/> |
||||||
|
</project> |
@ -0,0 +1,8 @@ |
|||||||
|
build.xml.data.CRC32=3d57892f |
||||||
|
build.xml.script.CRC32=03444ead |
||||||
|
build.xml.stylesheet.CRC32=a56c6a5b@1.42.2 |
||||||
|
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. |
||||||
|
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. |
||||||
|
nbproject/build-impl.xml.data.CRC32=3d57892f |
||||||
|
nbproject/build-impl.xml.script.CRC32=8812c775 |
||||||
|
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2 |
@ -0,0 +1,2 @@ |
|||||||
|
javac.source=1.5 |
||||||
|
javac.compilerargs=-Xlint -Xlint:-serial |
@ -0,0 +1,80 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project xmlns="http://www.netbeans.org/ns/project/1"> |
||||||
|
<type>org.netbeans.modules.apisupport.project</type> |
||||||
|
<configuration> |
||||||
|
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3"> |
||||||
|
<code-name-base>com.jme3.gde.angelfont</code-name-base> |
||||||
|
<suite-component/> |
||||||
|
<module-dependencies> |
||||||
|
<dependency> |
||||||
|
<code-name-base>com.jme3.gde.core</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<release-version>1</release-version> |
||||||
|
<specification-version>0.12</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<code-name-base>com.jme3.gde.core.baselibs</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<release-version>1</release-version> |
||||||
|
<specification-version>0.8.1</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<code-name-base>org.netbeans.modules.projectapi</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<release-version>1</release-version> |
||||||
|
<specification-version>1.35</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<code-name-base>org.openide.awt</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<specification-version>7.30</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<code-name-base>org.openide.dialogs</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<specification-version>7.18</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<code-name-base>org.openide.filesystems</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<specification-version>7.46</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<code-name-base>org.openide.util</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<specification-version>8.14</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<code-name-base>org.openide.util.lookup</code-name-base> |
||||||
|
<build-prerequisite/> |
||||||
|
<compile-dependency/> |
||||||
|
<run-dependency> |
||||||
|
<specification-version>8.6</specification-version> |
||||||
|
</run-dependency> |
||||||
|
</dependency> |
||||||
|
</module-dependencies> |
||||||
|
<public-packages/> |
||||||
|
</data> |
||||||
|
</configuration> |
||||||
|
</project> |
@ -0,0 +1 @@ |
|||||||
|
suite.dir=${basedir}/.. |
@ -0,0 +1,67 @@ |
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?> |
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> |
||||||
|
<AuxValues> |
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> |
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> |
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> |
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> |
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> |
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> |
||||||
|
</AuxValues> |
||||||
|
|
||||||
|
<Layout> |
||||||
|
<DimensionLayout dim="0"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<Group type="102" alignment="0" attributes="0"> |
||||||
|
<Component id="jScrollPane1" min="-2" pref="154" max="-2" attributes="0"/> |
||||||
|
<EmptySpace max="-2" attributes="0"/> |
||||||
|
<Component id="jLabel1" pref="236" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
<DimensionLayout dim="1"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<Component id="jScrollPane1" alignment="0" pref="300" max="32767" attributes="0"/> |
||||||
|
<Component id="jLabel1" alignment="0" pref="300" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
</Layout> |
||||||
|
<SubComponents> |
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1"> |
||||||
|
<AuxValues> |
||||||
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> |
||||||
|
</AuxValues> |
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> |
||||||
|
<SubComponents> |
||||||
|
<Component class="javax.swing.JList" name="jList1"> |
||||||
|
<Properties> |
||||||
|
<Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor"> |
||||||
|
<StringArray count="5"> |
||||||
|
<StringItem index="0" value="Item 1"/> |
||||||
|
<StringItem index="1" value="Item 2"/> |
||||||
|
<StringItem index="2" value="Item 3"/> |
||||||
|
<StringItem index="3" value="Item 4"/> |
||||||
|
<StringItem index="4" value="Item 5"/> |
||||||
|
</StringArray> |
||||||
|
</Property> |
||||||
|
</Properties> |
||||||
|
<Events> |
||||||
|
<EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="updateFont"/> |
||||||
|
</Events> |
||||||
|
</Component> |
||||||
|
</SubComponents> |
||||||
|
</Container> |
||||||
|
<Component class="javax.swing.JLabel" name="jLabel1"> |
||||||
|
<Properties> |
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> |
||||||
|
<ResourceString bundle="com/jme3/gde/angelfont/Bundle.properties" key="AngelFontVisualPanel1.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> |
||||||
|
</Property> |
||||||
|
</Properties> |
||||||
|
</Component> |
||||||
|
</SubComponents> |
||||||
|
</Form> |
@ -0,0 +1,80 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jme3.gde.angelfont; |
||||||
|
|
||||||
|
import java.awt.GraphicsEnvironment; |
||||||
|
import javax.swing.ImageIcon; |
||||||
|
import javax.swing.JPanel; |
||||||
|
|
||||||
|
public final class AngelFontVisualPanel1 extends JPanel { |
||||||
|
|
||||||
|
/** Creates new form AngelFontVisualPanel1 */ |
||||||
|
public AngelFontVisualPanel1() { |
||||||
|
initComponents(); |
||||||
|
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); |
||||||
|
String[] fontNames = ge.getAvailableFontFamilyNames(); |
||||||
|
jList1.setListData(fontNames); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getName() { |
||||||
|
return "Select Font"; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSelectedFont(){ |
||||||
|
return (String)jList1.getSelectedValue(); |
||||||
|
} |
||||||
|
|
||||||
|
/** This method is called from within the constructor to |
||||||
|
* initialize the form. |
||||||
|
* WARNING: Do NOT modify this code. The content of this method is |
||||||
|
* always regenerated by the Form Editor. |
||||||
|
*/ |
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() { |
||||||
|
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane(); |
||||||
|
jList1 = new javax.swing.JList(); |
||||||
|
jLabel1 = new javax.swing.JLabel(); |
||||||
|
|
||||||
|
jList1.setModel(new javax.swing.AbstractListModel() { |
||||||
|
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; |
||||||
|
public int getSize() { return strings.length; } |
||||||
|
public Object getElementAt(int i) { return strings[i]; } |
||||||
|
}); |
||||||
|
jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener() { |
||||||
|
public void valueChanged(javax.swing.event.ListSelectionEvent evt) { |
||||||
|
updateFont(evt); |
||||||
|
} |
||||||
|
}); |
||||||
|
jScrollPane1.setViewportView(jList1); |
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AngelFontVisualPanel1.class, "AngelFontVisualPanel1.jLabel1.text")); // NOI18N
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); |
||||||
|
this.setLayout(layout); |
||||||
|
layout.setHorizontalGroup( |
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addGroup(layout.createSequentialGroup() |
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE) |
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
||||||
|
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE)) |
||||||
|
); |
||||||
|
layout.setVerticalGroup( |
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) |
||||||
|
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) |
||||||
|
); |
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void updateFont(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_updateFont
|
||||||
|
jLabel1.setIcon(new ImageIcon(FontCreator.buildFont((String)jList1.getSelectedValue()))); |
||||||
|
}//GEN-LAST:event_updateFont
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JLabel jLabel1; |
||||||
|
private javax.swing.JList jList1; |
||||||
|
private javax.swing.JScrollPane jScrollPane1; |
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?> |
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> |
||||||
|
<AuxValues> |
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> |
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> |
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> |
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> |
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> |
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> |
||||||
|
</AuxValues> |
||||||
|
|
||||||
|
<Layout> |
||||||
|
<DimensionLayout dim="0"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<EmptySpace min="0" pref="360" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
<DimensionLayout dim="1"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<EmptySpace min="0" pref="256" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
</Layout> |
||||||
|
</Form> |
@ -0,0 +1,42 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jme3.gde.angelfont; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
|
||||||
|
public final class AngelFontVisualPanel2 extends JPanel { |
||||||
|
|
||||||
|
/** Creates new form AngelFontVisualPanel2 */ |
||||||
|
public AngelFontVisualPanel2() { |
||||||
|
initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getName() { |
||||||
|
return "Step #2"; |
||||||
|
} |
||||||
|
|
||||||
|
/** This method is called from within the constructor to |
||||||
|
* initialize the form. |
||||||
|
* WARNING: Do NOT modify this code. The content of this method is |
||||||
|
* always regenerated by the Form Editor. |
||||||
|
*/ |
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() { |
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); |
||||||
|
this.setLayout(layout); |
||||||
|
layout.setHorizontalGroup( |
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addGap(0, 360, Short.MAX_VALUE) |
||||||
|
); |
||||||
|
layout.setVerticalGroup( |
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addGap(0, 256, Short.MAX_VALUE) |
||||||
|
); |
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
} |
@ -0,0 +1,210 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jme3.gde.angelfont; |
||||||
|
|
||||||
|
import com.jme3.gde.core.assets.ProjectAssetManager; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.File; |
||||||
|
import java.io.IOException; |
||||||
|
import java.nio.ByteBuffer; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.Map.Entry; |
||||||
|
import java.util.NoSuchElementException; |
||||||
|
import java.util.Set; |
||||||
|
import java.util.logging.Level; |
||||||
|
import java.util.logging.Logger; |
||||||
|
import javax.imageio.ImageIO; |
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import org.netbeans.api.project.Project; |
||||||
|
import org.openide.WizardDescriptor; |
||||||
|
import org.openide.filesystems.FileObject; |
||||||
|
import org.openide.filesystems.FileUtil; |
||||||
|
import org.openide.util.Exceptions; |
||||||
|
|
||||||
|
public final class AngelFontWizardIterator implements WizardDescriptor.InstantiatingIterator { |
||||||
|
|
||||||
|
private int index; |
||||||
|
private WizardDescriptor wizard; |
||||||
|
private WizardDescriptor.Panel[] panels; |
||||||
|
|
||||||
|
/** |
||||||
|
* 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 AngelFontWizardPanel1(), |
||||||
|
new AngelFontWizardPanel2() |
||||||
|
}; |
||||||
|
String[] steps = createSteps(); |
||||||
|
for (int i = 0; i < panels.length; i++) { |
||||||
|
Component c = panels[i].getComponent(); |
||||||
|
if (steps[i] == null) { |
||||||
|
// Default step name to component name of panel. Mainly
|
||||||
|
// useful for getting the name of the target chooser to
|
||||||
|
// appear in the list of steps.
|
||||||
|
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("WizardPanel_contentSelectedIndex", 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); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return panels; |
||||||
|
} |
||||||
|
|
||||||
|
public Set<FileObject> instantiate() throws IOException { |
||||||
|
String name = (String) wizard.getProperty("font_name"); |
||||||
|
Project project = (Project) wizard.getProperty("project"); |
||||||
|
ProjectAssetManager pm = project.getLookup().lookup(ProjectAssetManager.class); |
||||||
|
if (pm == null) { |
||||||
|
Logger.getLogger(AngelFontWizardIterator.class.getName()).log(Level.WARNING, "No ProjectAssetManager found!"); |
||||||
|
return Collections.EMPTY_SET; |
||||||
|
} |
||||||
|
BufferedImage fontImage = FontCreator.buildFont(name); |
||||||
|
ByteBuffer scratch = ByteBuffer.allocateDirect(4 * fontImage.getWidth() * fontImage.getHeight()); |
||||||
|
byte[] data = (byte[]) fontImage.getRaster().getDataElements(0, 0, |
||||||
|
fontImage.getWidth(), fontImage.getHeight(), null); |
||||||
|
scratch.clear(); |
||||||
|
scratch.put(data); |
||||||
|
scratch.rewind(); |
||||||
|
File outputFile; |
||||||
|
try { |
||||||
|
if (pm.getAssetFolder().getFileObject("Interface") == null) { |
||||||
|
pm.getAssetFolder().createFolder("Interface"); |
||||||
|
} |
||||||
|
if (pm.getAssetFolder().getFileObject("Interface/Fonts") == null) { |
||||||
|
pm.getAssetFolder().getFileObject("Interface").createFolder("Fonts"); |
||||||
|
} |
||||||
|
outputFile = FileUtil.toFile(pm.getAssetFolder().getFileObject("Interface/Fonts")); |
||||||
|
if (!outputFile.getName().endsWith(".png")) { |
||||||
|
outputFile = new File(outputFile.getAbsoluteFile() + File.separator + name + ".png"); |
||||||
|
} |
||||||
|
// write png file
|
||||||
|
ImageIO.write(fontImage, "PNG", outputFile); |
||||||
|
} catch (Exception e) { |
||||||
|
Exceptions.printStackTrace(e); |
||||||
|
return Collections.EMPTY_SET; |
||||||
|
} |
||||||
|
return Collections.singleton(FileUtil.toFileObject(outputFile)); |
||||||
|
} |
||||||
|
|
||||||
|
public void initialize(WizardDescriptor wizard) { |
||||||
|
this.wizard = wizard; |
||||||
|
System.out.println("FOLDERRRR:" + wizard.getProperty("folder")); |
||||||
|
for (Iterator<Entry<String, Object>> it = wizard.getProperties().entrySet().iterator(); it.hasNext();) { |
||||||
|
Entry<String, Object> entry = it.next(); |
||||||
|
System.out.println(entry.getKey() + ": " + wizard.getProperty(entry.getKey())); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void uninitialize(WizardDescriptor wizard) { |
||||||
|
panels = null; |
||||||
|
} |
||||||
|
|
||||||
|
public WizardDescriptor.Panel current() { |
||||||
|
return getPanels()[index]; |
||||||
|
} |
||||||
|
|
||||||
|
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(); |
||||||
|
} |
||||||
|
index++; |
||||||
|
} |
||||||
|
|
||||||
|
public void previousPanel() { |
||||||
|
if (!hasPrevious()) { |
||||||
|
throw new NoSuchElementException(); |
||||||
|
} |
||||||
|
index--; |
||||||
|
} |
||||||
|
|
||||||
|
// If nothing unusual changes in the middle of the wizard, simply:
|
||||||
|
public void addChangeListener(ChangeListener l) { |
||||||
|
} |
||||||
|
|
||||||
|
public void removeChangeListener(ChangeListener l) { |
||||||
|
} |
||||||
|
|
||||||
|
// If something changes dynamically (besides moving between panels), e.g.
|
||||||
|
// the number of panels changes in response to user input, then uncomment
|
||||||
|
// the following and call when needed: fireChangeEvent();
|
||||||
|
/* |
||||||
|
private Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0
|
||||||
|
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<ChangeListener> it; |
||||||
|
synchronized (listeners) { |
||||||
|
it = new HashSet<ChangeListener>(listeners).iterator(); |
||||||
|
} |
||||||
|
ChangeEvent ev = new ChangeEvent(this); |
||||||
|
while (it.hasNext()) { |
||||||
|
it.next().stateChanged(ev); |
||||||
|
} |
||||||
|
} |
||||||
|
*/ |
||||||
|
// You could safely ignore this method. Is is here to keep steps which were
|
||||||
|
// there before this wizard was instantiated. It should be better handled
|
||||||
|
// by NetBeans Wizard API itself rather than needed to be implemented by a
|
||||||
|
// client code.
|
||||||
|
private String[] createSteps() { |
||||||
|
String[] beforeSteps = null; |
||||||
|
Object prop = wizard.getProperty("WizardPanel_contentData"); |
||||||
|
if (prop != null && prop instanceof String[]) { |
||||||
|
beforeSteps = (String[]) prop; |
||||||
|
} |
||||||
|
|
||||||
|
if (beforeSteps == null) { |
||||||
|
beforeSteps = new String[0]; |
||||||
|
} |
||||||
|
|
||||||
|
String[] res = new String[(beforeSteps.length - 1) + panels.length]; |
||||||
|
for (int i = 0; i < res.length; i++) { |
||||||
|
if (i < (beforeSteps.length - 1)) { |
||||||
|
res[i] = beforeSteps[i]; |
||||||
|
} else { |
||||||
|
res[i] = panels[i - beforeSteps.length + 1].getComponent().getName(); |
||||||
|
} |
||||||
|
} |
||||||
|
return res; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,87 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jme3.gde.angelfont; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import org.openide.WizardDescriptor; |
||||||
|
import org.openide.util.HelpCtx; |
||||||
|
|
||||||
|
public class AngelFontWizardPanel1 implements WizardDescriptor.Panel { |
||||||
|
|
||||||
|
/** |
||||||
|
* The visual component that displays this panel. If you need to access the |
||||||
|
* component from this class, just use getComponent(). |
||||||
|
*/ |
||||||
|
private AngelFontVisualPanel1 component; |
||||||
|
|
||||||
|
// 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) { |
||||||
|
component = new AngelFontVisualPanel1(); |
||||||
|
} |
||||||
|
return component; |
||||||
|
} |
||||||
|
|
||||||
|
public HelpCtx getHelp() { |
||||||
|
// Show no Help button for this panel:
|
||||||
|
return HelpCtx.DEFAULT_HELP; |
||||||
|
// If you have context help:
|
||||||
|
// return new HelpCtx(SampleWizardPanel1.class);
|
||||||
|
} |
||||||
|
|
||||||
|
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...), then:
|
||||||
|
// return someCondition();
|
||||||
|
// and when this condition changes (last form field filled in...) then:
|
||||||
|
// fireChangeEvent();
|
||||||
|
// and uncomment the complicated stuff below.
|
||||||
|
} |
||||||
|
|
||||||
|
public final void addChangeListener(ChangeListener l) { |
||||||
|
} |
||||||
|
|
||||||
|
public final void removeChangeListener(ChangeListener l) { |
||||||
|
} |
||||||
|
/* |
||||||
|
private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0
|
||||||
|
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<ChangeListener> it; |
||||||
|
synchronized (listeners) { |
||||||
|
it = new HashSet<ChangeListener>(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) { |
||||||
|
((WizardDescriptor)settings).putProperty("font_name", component.getSelectedFont()); |
||||||
|
} |
||||||
|
|
||||||
|
public void storeSettings(Object settings) { |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,86 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jme3.gde.angelfont; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import org.openide.WizardDescriptor; |
||||||
|
import org.openide.util.HelpCtx; |
||||||
|
|
||||||
|
public class AngelFontWizardPanel2 implements WizardDescriptor.Panel { |
||||||
|
|
||||||
|
/** |
||||||
|
* The visual component that displays this panel. If you need to access the |
||||||
|
* component from this class, just use getComponent(). |
||||||
|
*/ |
||||||
|
private Component component; |
||||||
|
|
||||||
|
// 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) { |
||||||
|
component = new AngelFontVisualPanel2(); |
||||||
|
} |
||||||
|
return component; |
||||||
|
} |
||||||
|
|
||||||
|
public HelpCtx getHelp() { |
||||||
|
// Show no Help button for this panel:
|
||||||
|
return HelpCtx.DEFAULT_HELP; |
||||||
|
// If you have context help:
|
||||||
|
// return new HelpCtx(SampleWizardPanel1.class);
|
||||||
|
} |
||||||
|
|
||||||
|
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...), then:
|
||||||
|
// return someCondition();
|
||||||
|
// and when this condition changes (last form field filled in...) then:
|
||||||
|
// fireChangeEvent();
|
||||||
|
// and uncomment the complicated stuff below.
|
||||||
|
} |
||||||
|
|
||||||
|
public final void addChangeListener(ChangeListener l) { |
||||||
|
} |
||||||
|
|
||||||
|
public final void removeChangeListener(ChangeListener l) { |
||||||
|
} |
||||||
|
/* |
||||||
|
private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0
|
||||||
|
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<ChangeListener> it; |
||||||
|
synchronized (listeners) { |
||||||
|
it = new HashSet<ChangeListener>(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) { |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
OpenIDE-Module-Display-Category=jMonkeyPlatform |
||||||
|
OpenIDE-Module-Long-Description=\ |
||||||
|
Font Support for jMonkeyPlatform, create AngelFont files from system fonts |
||||||
|
OpenIDE-Module-Name=jME3 Font Creator |
||||||
|
OpenIDE-Module-Short-Description=Create AngelFont files from system fonts |
||||||
|
Templates/GUI/angelFont=Font |
||||||
|
AngelFontVisualPanel1.jLabel1.text= |
@ -0,0 +1,138 @@ |
|||||||
|
/* |
||||||
|
* To change this template, choose Tools | Templates |
||||||
|
* and open the template in the editor. |
||||||
|
*/ |
||||||
|
package com.jme3.gde.angelfont; |
||||||
|
|
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Font; |
||||||
|
import java.awt.FontMetrics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.RenderingHints; |
||||||
|
import java.awt.geom.Rectangle2D; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public abstract class FontCreator { |
||||||
|
|
||||||
|
private static final Color OPAQUE_WHITE = new Color(0xFFFFFFFF, true); |
||||||
|
private static final Color TRANSPARENT_BLACK = new Color(0x00000000, true); |
||||||
|
|
||||||
|
public FontCreator() { |
||||||
|
} |
||||||
|
|
||||||
|
public static BufferedImage buildFont(String fontName) { |
||||||
|
return buildFont(fontName, 63); |
||||||
|
} |
||||||
|
|
||||||
|
public static BufferedImage buildFont(String fontName, int offset) { |
||||||
|
BufferedImage fontImage; |
||||||
|
Font font; |
||||||
|
|
||||||
|
int bitmapSize = 512; // set the size for the bitmap texture
|
||||||
|
boolean sizeFound = false; |
||||||
|
boolean directionSet = false; |
||||||
|
int delta = 0; |
||||||
|
int fontSize = 24; |
||||||
|
|
||||||
|
String charLocs = ""; |
||||||
|
|
||||||
|
/* |
||||||
|
* To find out how much space a Font takes, you need to use a the |
||||||
|
* FontMetrics class. To get the FontMetrics, you need to get it from a |
||||||
|
* Graphics context. A Graphics context is only available from a |
||||||
|
* displayable surface, ie any class that subclasses Component or any |
||||||
|
* Image. First the font is set on a Graphics object. Then get the |
||||||
|
* FontMetrics and find out the width and height of the widest character |
||||||
|
* (W). Then take the largest of the 2 values and find the maximum size |
||||||
|
* font that will fit in the size allocated. |
||||||
|
*/ |
||||||
|
while (!sizeFound) { |
||||||
|
font = new Font(fontName, Font.PLAIN, fontSize); // Font Name
|
||||||
|
// use BufferedImage.TYPE_4BYTE_ABGR to allow alpha blending
|
||||||
|
fontImage = new BufferedImage(bitmapSize, bitmapSize, |
||||||
|
BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
Graphics2D g = (Graphics2D) fontImage.getGraphics(); |
||||||
|
g.setFont(font); |
||||||
|
FontMetrics fm = g.getFontMetrics(); |
||||||
|
int width = fm.stringWidth("W"); |
||||||
|
int height = fm.getHeight(); |
||||||
|
int lineWidth = (width > height) ? width * 16 : height * 16; |
||||||
|
if (!directionSet) { |
||||||
|
if (lineWidth > bitmapSize) { |
||||||
|
delta = -2; |
||||||
|
} else { |
||||||
|
delta = 2; |
||||||
|
} |
||||||
|
directionSet = true; |
||||||
|
} |
||||||
|
if (delta > 0) { |
||||||
|
if (lineWidth < bitmapSize) { |
||||||
|
fontSize += delta; |
||||||
|
} else { |
||||||
|
sizeFound = true; |
||||||
|
fontSize -= delta; |
||||||
|
} |
||||||
|
} else if (delta < 0) { |
||||||
|
if (lineWidth > bitmapSize) { |
||||||
|
fontSize += delta; |
||||||
|
} else { |
||||||
|
sizeFound = true; |
||||||
|
fontSize -= delta; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* Now that a font size has been determined, create the final image, set |
||||||
|
* the font and draw the standard/extended ASCII character set for that |
||||||
|
* font. |
||||||
|
*/ |
||||||
|
font = new Font(fontName, Font.BOLD, fontSize); // Font Name
|
||||||
|
// use BufferedImage.TYPE_4BYTE_ABGR to allow alpha blending
|
||||||
|
fontImage = new BufferedImage(bitmapSize, bitmapSize, |
||||||
|
BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
Graphics2D g = (Graphics2D) fontImage.getGraphics(); |
||||||
|
g.setFont(font); |
||||||
|
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, |
||||||
|
RenderingHints.VALUE_ANTIALIAS_ON); |
||||||
|
g.setColor(OPAQUE_WHITE); |
||||||
|
g.setBackground(TRANSPARENT_BLACK); |
||||||
|
|
||||||
|
FontMetrics fm = g.getFontMetrics(); |
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++) { |
||||||
|
int x = i % 16; |
||||||
|
int y = i / 16; |
||||||
|
char ch[] = {(char) i}; |
||||||
|
String temp = new String(ch); |
||||||
|
Rectangle2D bounds = fm.getStringBounds(temp, g); |
||||||
|
|
||||||
|
int xPos = (int) ((x * 32) + (16 - (bounds.getWidth() / 2))); |
||||||
|
int yPos = (y * 32) + fm.getAscent() - offset; |
||||||
|
g.drawString(temp, xPos, yPos); |
||||||
|
//TODO: AngelFont support!
|
||||||
|
// g.setColor(Color.BLUE);
|
||||||
|
// g.drawRect(xPos, yPos-(int)bounds.getHeight(), (int)bounds.getWidth(), (int)bounds.getHeight()+fm.getDescent());
|
||||||
|
// g.setColor(Color.WHITE);
|
||||||
|
//
|
||||||
|
// charLocs=charLocs+
|
||||||
|
// "char id="+i+
|
||||||
|
// " x="+xPos +
|
||||||
|
// " y="+(yPos-(int)bounds.getHeight()-fm.getAscent())+
|
||||||
|
// " width="+(int)bounds.getWidth()+
|
||||||
|
// " height="+(int)bounds.getHeight()+
|
||||||
|
// " xoffset=0" +
|
||||||
|
// " yoffset=0" +
|
||||||
|
// " xadvance=0" +
|
||||||
|
// " page=0" +
|
||||||
|
// " chnl=15\n";
|
||||||
|
} |
||||||
|
// System.out.println(charLocs);
|
||||||
|
return fontImage; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
<!-- |
||||||
|
To change this template, choose Tools | Templates |
||||||
|
and open the template in the editor. |
||||||
|
--> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
Lets you select a font from your computer and convert it to a jME3 compatible |
||||||
|
font file. |
||||||
|
</body> |
||||||
|
</html> |
After Width: | Height: | Size: 127 B |
@ -0,0 +1,15 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> |
||||||
|
<filesystem> |
||||||
|
<folder name="Templates"> |
||||||
|
<folder name="GUI"> |
||||||
|
<file name="angelFont"> |
||||||
|
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/com/jme3/gde/angelfont/font.gif"/> |
||||||
|
<attr name="displayName" bundlevalue="com.jme3.gde.angelfont.Bundle#Templates/GUI/angelFont"/> |
||||||
|
<attr name="instantiatingIterator" newvalue="com.jme3.gde.angelfont.AngelFontWizardIterator"/> |
||||||
|
<attr name="template" boolvalue="true"/> |
||||||
|
<attr name="templateWizardURL" urlvalue="nbresloc:/com/jme3/gde/angelfont/angelFont.html"/> |
||||||
|
</file> |
||||||
|
</folder> |
||||||
|
</folder> |
||||||
|
</filesystem> |
Loading…
Reference in new issue