- hide un-editable properties in Model Import Tool, fix reloading, reload on separate thread
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8427 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
cfc6036bf2
commit
d6649ab87d
sdk/jme3-model-importer/src/com/jme3/gde/modelimporter
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* To change this template, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package com.jme3.gde.modelimporter;
|
||||||
|
|
||||||
|
|
||||||
|
import com.jme3.asset.AssetKey;
|
||||||
|
import com.jme3.gde.core.assets.AssetData;
|
||||||
|
import com.jme3.gde.core.util.PropertyUtils;
|
||||||
|
import java.beans.PropertyDescriptor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import org.openide.nodes.AbstractNode;
|
||||||
|
import org.openide.nodes.Children;
|
||||||
|
import org.openide.nodes.Node.Property;
|
||||||
|
import org.openide.nodes.PropertySupport;
|
||||||
|
import org.openide.nodes.Sheet;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class ImportKeyNode extends AbstractNode {
|
||||||
|
private AssetKey key;
|
||||||
|
|
||||||
|
public ImportKeyNode(AssetKey key) {
|
||||||
|
super(Children.LEAF);
|
||||||
|
this.key=key;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Sheet createSheet() {
|
||||||
|
Sheet sheet = super.createSheet();
|
||||||
|
Sheet.Set set = sheet.createPropertiesSet();
|
||||||
|
set.setName("AssetKey");
|
||||||
|
set.setDisplayName("Conversion Settings");
|
||||||
|
for (Field field : key.getClass().getDeclaredFields()) {
|
||||||
|
PropertyDescriptor prop = PropertyUtils.getPropertyDescriptor(key.getClass(), field);
|
||||||
|
if (prop != null) {
|
||||||
|
try {
|
||||||
|
Property sup = new PropertySupport.Reflection(key, prop.getPropertyType(), prop.getReadMethod(), prop.getWriteMethod());
|
||||||
|
sup.setName(prop.getName());
|
||||||
|
sup.setDisplayName(prop.getDisplayName());
|
||||||
|
set.put(sup);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Exceptions.printStackTrace(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sheet.put(set);
|
||||||
|
return sheet;
|
||||||
|
}
|
||||||
|
}
|
@ -6,17 +6,16 @@ package com.jme3.gde.modelimporter;
|
|||||||
|
|
||||||
import com.jme3.asset.AssetEventListener;
|
import com.jme3.asset.AssetEventListener;
|
||||||
import com.jme3.asset.AssetKey;
|
import com.jme3.asset.AssetKey;
|
||||||
import com.jme3.asset.ModelKey;
|
|
||||||
import com.jme3.gde.core.assets.AssetData;
|
import com.jme3.gde.core.assets.AssetData;
|
||||||
import com.jme3.gde.core.assets.AssetDataObject;
|
import com.jme3.gde.core.assets.AssetDataObject;
|
||||||
import com.jme3.gde.core.assets.ProjectAssetManager;
|
import com.jme3.gde.core.assets.ProjectAssetManager;
|
||||||
import com.jme3.gde.core.scene.OffScenePanel;
|
import com.jme3.gde.core.scene.OffScenePanel;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import java.beans.IntrospectionException;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import org.netbeans.api.progress.ProgressHandle;
|
import org.netbeans.api.progress.ProgressHandle;
|
||||||
import org.netbeans.api.progress.ProgressHandleFactory;
|
import org.netbeans.api.progress.ProgressHandleFactory;
|
||||||
@ -28,8 +27,6 @@ import org.openide.explorer.propertysheet.PropertySheet;
|
|||||||
import org.openide.filesystems.FileChooserBuilder;
|
import org.openide.filesystems.FileChooserBuilder;
|
||||||
import org.openide.filesystems.FileUtil;
|
import org.openide.filesystems.FileUtil;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
import org.openide.loaders.DataObjectNotFoundException;
|
|
||||||
import org.openide.nodes.BeanNode;
|
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
import org.openide.util.Exceptions;
|
import org.openide.util.Exceptions;
|
||||||
|
|
||||||
@ -43,6 +40,7 @@ public final class ModelImporterVisualPanel1 extends JPanel implements AssetEven
|
|||||||
private List<AssetKey> requestedAssets = new LinkedList<AssetKey>();
|
private List<AssetKey> requestedAssets = new LinkedList<AssetKey>();
|
||||||
private AssetKey mainKey;
|
private AssetKey mainKey;
|
||||||
private PropertySheet ps;
|
private PropertySheet ps;
|
||||||
|
private AtomicBoolean loading = new AtomicBoolean(false);
|
||||||
|
|
||||||
/** Creates new form ModelImporterVisualPanel1 */
|
/** Creates new form ModelImporterVisualPanel1 */
|
||||||
public ModelImporterVisualPanel1() {
|
public ModelImporterVisualPanel1() {
|
||||||
@ -79,38 +77,32 @@ public final class ModelImporterVisualPanel1 extends JPanel implements AssetEven
|
|||||||
|
|
||||||
public synchronized void loadModel(File path, AssetKey modelKey) {
|
public synchronized void loadModel(File path, AssetKey modelKey) {
|
||||||
try {
|
try {
|
||||||
mainKey = modelKey;
|
|
||||||
ProjectAssetManager manager = new ProjectAssetManager(FileUtil.toFileObject(path).getParent());
|
ProjectAssetManager manager = new ProjectAssetManager(FileUtil.toFileObject(path).getParent());
|
||||||
manager.setAssetEventListener(this);
|
manager.setAssetEventListener(this);
|
||||||
if (currentPath != null) {
|
requestedAssets.clear();
|
||||||
requestedAssets.clear();
|
|
||||||
currentPath = null;
|
|
||||||
updateProperties(null);
|
|
||||||
}
|
|
||||||
if (currentModel != null) {
|
if (currentModel != null) {
|
||||||
offPanel.detach(currentModel);
|
offPanel.detach(currentModel);
|
||||||
currentModel = null;
|
currentModel = null;
|
||||||
}
|
}
|
||||||
currentPath = path.getParent();
|
|
||||||
currentModelPath = path.getPath();
|
currentModelPath = path.getPath();
|
||||||
if (mainKey == null) {
|
currentPath = path.getParent();
|
||||||
try {
|
DataObject obj = DataObject.find(FileUtil.toFileObject(path));
|
||||||
DataObject obj = DataObject.find(FileUtil.toFileObject(path));
|
AssetData data = obj != null ? obj.getLookup().lookup(AssetData.class) : null;
|
||||||
AssetData data = obj.getLookup().lookup(AssetData.class);
|
if (data != null) {
|
||||||
if (data != null) {
|
if (modelKey == null) {
|
||||||
((AssetDataObject) obj).getLookupContents().add(manager);
|
((AssetDataObject) obj).getLookupContents().add(manager);
|
||||||
mainKey = data.getAssetKey();
|
modelKey = data.getAssetKey();
|
||||||
currentModel = (Spatial)data.loadAsset();
|
currentModel = (Spatial) data.loadAsset();
|
||||||
}
|
} else {
|
||||||
} catch (DataObjectNotFoundException ex) {
|
((AssetDataObject) obj).getLookupContents().add(manager);
|
||||||
Exceptions.printStackTrace(ex);
|
data.setAssetKey(modelKey);
|
||||||
mainKey = new ModelKey(path.getName());
|
currentModel = (Spatial) data.loadAsset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// currentModel = (Spatial) manager.loadAsset(mainKey);
|
mainKey = modelKey;
|
||||||
|
updateProperties(mainKey);
|
||||||
if (currentModel != null) {
|
if (currentModel != null) {
|
||||||
offPanel.attach(currentModel);
|
offPanel.attach(currentModel);
|
||||||
updateProperties(mainKey);
|
|
||||||
} else {
|
} else {
|
||||||
Message msg = new NotifyDescriptor.Message(
|
Message msg = new NotifyDescriptor.Message(
|
||||||
"Cannot import this file!",
|
"Cannot import this file!",
|
||||||
@ -133,14 +125,10 @@ public final class ModelImporterVisualPanel1 extends JPanel implements AssetEven
|
|||||||
java.awt.EventQueue.invokeLater(new Runnable() {
|
java.awt.EventQueue.invokeLater(new Runnable() {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
if (key == null) {
|
||||||
if (key == null) {
|
ps.setNodes(new Node[]{});
|
||||||
ps.setNodes(new Node[]{});
|
} else {
|
||||||
} else {
|
ps.setNodes(new Node[]{new ImportKeyNode(key)});
|
||||||
ps.setNodes(new Node[]{new BeanNode(key)});
|
|
||||||
}
|
|
||||||
} catch (IntrospectionException ex) {
|
|
||||||
Exceptions.printStackTrace(ex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -311,6 +299,10 @@ public final class ModelImporterVisualPanel1 extends JPanel implements AssetEven
|
|||||||
}//GEN-LAST:event_jButton2ActionPerformed
|
}//GEN-LAST:event_jButton2ActionPerformed
|
||||||
|
|
||||||
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
|
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
|
||||||
|
if (loading.get()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
loading.set(true);
|
||||||
FileChooserBuilder builder = new FileChooserBuilder(this.getClass());
|
FileChooserBuilder builder = new FileChooserBuilder(this.getClass());
|
||||||
builder.setTitle("Select Model File");
|
builder.setTitle("Select Model File");
|
||||||
final File file = builder.showOpenDialog();
|
final File file = builder.showOpenDialog();
|
||||||
@ -323,6 +315,7 @@ public final class ModelImporterVisualPanel1 extends JPanel implements AssetEven
|
|||||||
handle.start();
|
handle.start();
|
||||||
loadModel(file);
|
loadModel(file);
|
||||||
handle.finish();
|
handle.finish();
|
||||||
|
loading.set(false);
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
@ -342,7 +335,22 @@ public final class ModelImporterVisualPanel1 extends JPanel implements AssetEven
|
|||||||
|
|
||||||
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
|
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
|
||||||
if (currentModelPath != null) {
|
if (currentModelPath != null) {
|
||||||
loadModel(new File(currentModelPath), mainKey);
|
if (loading.get()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
loading.set(true);
|
||||||
|
final String modelPath = currentModelPath;
|
||||||
|
final AssetKey key = mainKey;
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
ProgressHandle handle = ProgressHandleFactory.createHandle("Opening Model..");
|
||||||
|
handle.start();
|
||||||
|
loadModel(new File(modelPath), key);
|
||||||
|
handle.finish();
|
||||||
|
loading.set(false);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_jButton6ActionPerformed
|
}//GEN-LAST:event_jButton6ActionPerformed
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
Loading…
x
Reference in New Issue
Block a user