Manage style and control

Added a import action fro style and controls , also nifty-editor library
is updated with the last style&control handling feuture
experimental
relu91 11 years ago
parent 4506397b9c
commit cc010862a9
  1. 2
      sdk/jme3-gui/manifest.mf
  2. 2
      sdk/jme3-gui/nbproject/project.properties
  3. BIN
      sdk/jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar
  4. 3
      sdk/jme3-gui/src/com/jme3/gde/gui/Bundle.properties
  5. 21
      sdk/jme3-gui/src/com/jme3/gde/gui/examples/01-button.xml
  6. 30
      sdk/jme3-gui/src/com/jme3/gde/gui/examples/buttonstyle.xml
  7. 0
      sdk/jme3-gui/src/com/jme3/gde/gui/multiview/icons/GScrollPanel.png
  8. BIN
      sdk/jme3-gui/src/com/jme3/gde/gui/multiview/icons/control.png
  9. BIN
      sdk/jme3-gui/src/com/jme3/gde/gui/multiview/icons/style.png
  10. 29
      sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GElementNode.java
  11. 90
      sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GUINode.java
  12. 20
      sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GUseControlsNode.java
  13. 55
      sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GUseStyleNode.java
  14. 40
      sdk/jme3-gui/src/com/jme3/gde/gui/nodes/ScreenChildFactory.java
  15. 7
      sdk/jme3-gui/src/com/jme3/gde/gui/package-info.java
  16. 8
      sdk/jme3-gui/src/com/jme3/gde/gui/templates/EmptyControl.xml
  17. 7
      sdk/jme3-gui/src/com/jme3/gde/gui/templates/EmptyStyle.xml
  18. 9
      sdk/jme3-gui/src/com/jme3/gde/gui/view/Navigator.java
  19. 5
      sdk/jme3-gui/src/com/jme3/gde/gui/view/NiftyGuiVisualElement.java

@ -1,5 +1,5 @@
Manifest-Version: 1.0
OpenIDE-Module: com.jme3.gde.gui/1
OpenIDE-Module: com.jme3.gde.gui/3
OpenIDE-Module-Implementation-Version: 0
OpenIDE-Module-Layer: com/jme3/gde/gui/layer.xml
OpenIDE-Module-Localizing-Bundle: com/jme3/gde/gui/Bundle.properties

@ -6,4 +6,4 @@ license.file=../license-jme.txt
nbm.homepage=http://www.jmonkeyengine.com
nbm.module.author=Normen Hansen,Cristiano Aguzzi
nbm.needs.restart=true
spec.version.base=3.2
spec.version.base=3.3

@ -1,7 +1,8 @@
LBL_NiftyGui_loader_name=NiftyGui Files
OpenIDE-Module-Display-Category=jMonkeyEngine
OpenIDE-Module-Long-Description=\
This plugin adds NiftyGUI XML file support , with and easy visual desing interface .
This plugin adds NiftyGUI XML file support , with and easy visual desing interface . \
Icon pack provided by http://p.yusukekamiyamane.com/ Licensed under a Creative Commons Attribution 3.0 License.
OpenIDE-Module-Name=NiftyGUI Support
OpenIDE-Module-Short-Description=Provides NiftyGUI Support
Services/MIMEResolver/NiftyGuiResolver.xml=NiftyGui Files

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<nifty xmlns="http://nifty-gui.sourceforge.net/nifty-1.3.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://nifty-gui.sourceforge.net/nifty-1.3.xsd http://nifty-gui.sourceforge.net/nifty-1.3.xsd">
<useStyles filename="nifty-default-styles.xml" />
<useControls filename="nifty-default-controls.xml" />
<screen id="start">
<layer childLayout="center">
<panel width="25%" height="25%" align="center" valign="center" childLayout="vertical" backgroundColor="#55a5" padding="10">
<panel height="*" backgroundColor="#55aa" padding="10">
<!-- add your content here -->
</panel>
<panel height="10px" />
<panel height="21px" childLayout="horizontal">
<control id="buttonOk" name="button" label="OK" />
<panel width="*" />
<control id="buttonCancel" name="button" label="Cancel" />
</panel>
</panel>
</layer>
</screen>
</nifty>

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<nifty-styles xmlns="http://nifty-gui.lessvoid.com/nifty-gui">
<!-- +++++++++++++++++++++++++++++++++++++ -->
<!-- style for the button background panel -->
<!-- +++++++++++++++++++++++++++++++++++++ -->
<style id="nifty-button#panel">
<attributes backgroundImage="button/button.png" imageMode="sprite-resize:100,23,0,2,96,2,2,2,96,2,19,2,96,2,2"
paddingLeft="7px" paddingRight="7px" width="100px" height="23px" childLayout="center"
visibleToMouse="true"/>
<effect>
<onHover name="border" color="#822f" post="true"/>
<onFocus name="imageOverlay" filename="button/button.png"
imageMode="sprite-resize:100,23,1,2,96,2,2,2,96,2,19,2,96,2,2" post="true"/>
<onEnabled name="renderQuad" startColor="#2228" endColor="#2220" post="true" length="150"/>
<onDisabled name="renderQuad" startColor="#2220" endColor="#2228" post="true" length="150"/>
</effect>
</style>
<!-- +++++++++++++++++++++++++++++++++++++ -->
<!-- style for the button text -->
<!-- +++++++++++++++++++++++++++++++++++++ -->
<style id="nifty-button#text" base="button-font">
<attributes align="center" valign="center" textHAlign="center" textVAlign="center" visibleToMouse="false"/>
<effect>
<onEnabled name="textColorAnimated" startColor="#8886" endColor="#eeef" post="false" length="150"/>
<onDisabled name="textColorAnimated" startColor="#eeef" endColor="#8886" post="false" length="150"/>
</effect>
</style>
</nifty-styles>

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

@ -8,10 +8,14 @@ import com.jme3.gde.gui.propertyeditors.ResourceEditor;
import com.jme3.gde.gui.propertyeditors.SizeEditor;
import jada.ngeditor.controller.CommandProcessor;
import jada.ngeditor.controller.commands.EditAttributeCommand;
import jada.ngeditor.controller.commands.VisibilityCommand;
import jada.ngeditor.model.elements.GElement;
import java.awt.event.ActionEvent;
import java.beans.PropertyEditor;
import java.lang.reflect.InvocationTargetException;
import java.util.Map.Entry;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
@ -42,6 +46,14 @@ public class GElementNode extends AbstractNode{
public GElement getGelement(){
return element;
}
@Override
public Action[] getActions(boolean context) {
if(!context){
return new Action[]{new Visibility("Show", true),new Visibility("Hide", false)};
}else
return super.getActions(context);
}
public void updateChildren(){
@ -68,7 +80,7 @@ public class GElementNode extends AbstractNode{
private void pickEditor(Entry<String, String> pair, final ElementAttributeProperty elementAttributeProperty) {
if(pair.getKey().equals("width")||pair.getKey().equals("height") || pair.getKey().equals("x") || pair.getKey().equals("y") ){
elementAttributeProperty.setPropertyEditor(new SizeEditor());
}else if(pair.getKey().equals("filename")){
}else if(pair.getKey().equals("filename") || pair.getKey().equals("backgroundImage")){
elementAttributeProperty.setPropertyEditor(new ResourceEditor());
}
@ -128,4 +140,19 @@ public class GElementNode extends AbstractNode{
}
};
private class Visibility extends AbstractAction {
private final boolean param;
public Visibility(String name ,boolean param) {
super(name);
this.param = param;
}
@Override
public void actionPerformed(ActionEvent e) {
VisibilityCommand command = CommandProcessor.getInstance().getCommand(VisibilityCommand.class);
command.setVisibility(param);
}
}
}

@ -5,6 +5,15 @@
package com.jme3.gde.gui.nodes;
import jada.ngeditor.model.GUI;
import jada.ngeditor.model.elements.specials.GUseControls;
import jada.ngeditor.model.elements.specials.GUseStyle;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
@ -19,6 +28,7 @@ public class GUINode extends AbstractNode{
super(Children.create(new ScreenChildFactory(gui),false));
this.gui = gui;
this.setIconBaseWithExtension(basePath+"/"+"game-monitor"+".png");
}
/**
@ -28,10 +38,88 @@ public class GUINode extends AbstractNode{
return gui;
}
@Override
public Action[] getActions(boolean context) {
if(true){
return new Action[]{new AddStyleAction(),new AddControlAction()}; //To change body of generated methods, choose Tools | Templates.
}else
return super.getActions();
}
@Override
public String getName() {
return super.getName()+" "+this.gui; //To change body of generated methods, choose Tools | Templates.
}
private class AddStyleAction extends AbstractAction {
public AddStyleAction() {
super("Add style");
}
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser(gui.getAssetFolder());
int result = chooser.showSaveDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
GUseStyle style = new GUseStyle();
style.setFilename(createReletive(chooser.getSelectedFile()));
gui.addLoadUseStyle(style);
}
}
}
private class AddControlAction extends AbstractAction {
public AddControlAction() {
super("Add Control");
}
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser(gui.getAssetFolder());
int result = chooser.showSaveDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
GUseControls controls = new GUseControls();
controls.setFilename(createReletive(chooser.getSelectedFile()));
gui.addLoadUseControls(controls);
}
}
}
private String createReletive(File selected) {
File assets = gui.getAssetFolder();
String res = "";
String parentPath = selected.getParent();
String absAssets = assets.getAbsolutePath();
if (!parentPath.contains(absAssets)) {
try {
absAssets = assets.getCanonicalPath();
if (!parentPath.contains(absAssets)) {
JOptionPane.showMessageDialog(null, "Sorry you can't relativize this file. Tip : the file must be inside the assets folder");
} else {
res = assets.toURI().relativize(selected.toURI()).getPath();
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "Sorry you can't relativize this file");
}
} else {
res = assets.toURI().relativize(selected.toURI()).getPath();
}
return res;
}
}

@ -0,0 +1,20 @@
package com.jme3.gde.gui.nodes;
import jada.ngeditor.model.GUI;
import jada.ngeditor.model.elements.specials.GUseControls;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
public class GUseControlsNode extends AbstractNode {
private static final String basePath="com/jme3/gde/gui/multiview/icons";
private final GUseControls controls;
public GUseControlsNode(GUI gui,GUseControls controls) {
super(Children.LEAF);
this.setIconBaseWithExtension(basePath+"/"+"control"+".png");
this.controls = controls;
this.setName(controls.getFilename());
}
}

@ -0,0 +1,55 @@
package com.jme3.gde.gui.nodes;
import jada.ngeditor.model.GUI;
import jada.ngeditor.model.elements.specials.GUseStyle;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
public class GUseStyleNode extends AbstractNode {
private static final String basePath="com/jme3/gde/gui/multiview/icons";
private final GUI gui;
private final GUseStyle style;
public GUseStyleNode(GUI gui,GUseStyle style) {
super(Children.LEAF);
this.setIconBaseWithExtension(basePath+"/"+"style"+".png");
this.gui = gui;
this.style = style;
this.setName(style.getFilename());
}
@Override
public Action[] getActions(boolean context) {
return new Action[]{new Refresh(),new Delete()};
}
private class Refresh extends AbstractAction {
public Refresh() {
super("Refresh");
}
@Override
public void actionPerformed(ActionEvent e) {
gui.reoloadStyles(style.getFilename());
}
}
private class Delete extends AbstractAction {
public Delete() {
super("Delete");
}
@Override
public void actionPerformed(ActionEvent e) {
gui.removeStyle(style);
}
}
}

@ -1,31 +1,55 @@
package com.jme3.gde.gui.nodes;
import com.google.common.base.Predicate;
import jada.ngeditor.listeners.events.ElementEvent;
import jada.ngeditor.model.GUI;
import jada.ngeditor.model.elements.GControl;
import jada.ngeditor.model.elements.GElement;
import jada.ngeditor.model.elements.GScreen;
import jada.ngeditor.model.elements.specials.GUseControls;
import jada.ngeditor.model.elements.specials.GUseStyle;
import java.util.List;
import org.openide.nodes.AbstractNode;
import java.util.Observable;
import java.util.Observer;
import org.openide.nodes.ChildFactory;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
public class ScreenChildFactory extends ChildFactory<GElement> {
public class ScreenChildFactory extends ChildFactory<Object> implements Observer{
private final GUI gui;
public ScreenChildFactory(GUI gui){
this.gui = gui;
this.gui.addObserver(ScreenChildFactory.this);
}
@Override
protected boolean createKeys(List<GElement> list) {
protected boolean createKeys(List<Object> list) {
list.addAll(gui.getUseStyles());
list.addAll(gui.getUseControls());
list.addAll(gui.getScreens());
return true;
}
@Override
protected Node createNodeForKey(GElement screen) {
return new GElementNode(screen);
protected Node createNodeForKey(Object node) {
if(node instanceof GElement){
return new GElementNode((GElement)node);
}else if (node instanceof GUseStyle){
return new GUseStyleNode(gui, (GUseStyle)node);
}else
return new GUseControlsNode(gui,(GUseControls)node);
}
@Override
public void update(Observable o, Object arg) {
if(arg == null){
this.refresh(true);
}else{
ElementEvent e = (ElementEvent) arg;
if(e.getElement() instanceof GScreen){
this.refresh(true);
}
}
}
}

@ -2,8 +2,11 @@
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
@TemplateRegistrations(value = {@TemplateRegistration(folder = "GUI", displayName = "Empty Gui",content = "templates/EmptyNiftyGui.xml"),
@TemplateRegistration(folder = "GUI", displayName = "HelloJme",content = "templates/NiftyGui.xml")})
@TemplateRegistrations(value = {@TemplateRegistration(folder = "GUI", displayName = "Empty Gui",content = "templates/EmptyNiftyGui.xml",iconBase = "com/jme3/gde/gui/multiview/icons/gui-icon.png"),
@TemplateRegistration(folder = "GUI", displayName = "HelloJme",content = "templates/NiftyGui.xml",iconBase = "com/jme3/gde/gui/multiview/icons/game-monitor.png"),
@TemplateRegistration(folder = "GUI", displayName = "Empty Style",content = "templates/EmptyStyle.xml",iconBase = "com/jme3/gde/gui/multiview/icons/style.png"),
@TemplateRegistration(folder = "GUI", displayName = "Empty Control",content = "templates/EmptyControl.xml",iconBase = "com/jme3/gde/gui/multiview/icons/control.png"),
@TemplateRegistration(folder = "GUI/Control Styles", displayName = "Button Style",content = "examples/buttonstyle.xml",iconBase = "com/jme3/gde/gui/multiview/icons/style.png")})
package com.jme3.gde.gui;
import org.netbeans.api.templates.TemplateRegistration;

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<nifty-controls xmlns="http://nifty-gui.lessvoid.com/nifty-gui">
<controlDefinition style="your-style" name="empty-control">
<panel style="#panel" >
</panel>
</controlDefinition>
</nifty-controls>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<nifty-styles xmlns="http://nifty-gui.lessvoid.com/nifty-gui">
<style id="empty">
<attributes backgroundColor="#AA05"/>
</style>
</nifty-styles>

@ -145,10 +145,15 @@ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,Expl
}
Node result = mgr.getRootContext();
for(int i=path.size()-1;i>=0;i--){
result = result.getChildren().findChild(path.get(i));
if(result!=null){
result = result.getChildren().findChild(path.get(i));
}
}
try {
mgr.setSelectedNodes(new Node[]{result});
if(result!=null){
mgr.setSelectedNodes(new Node[]{result});
}
} catch (PropertyVetoException ex) {
Exceptions.printStackTrace(ex);
}

@ -314,8 +314,9 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
}
private void loadGui() {
ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file");
try {
ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file");
InputStream is = this.obj.getPrimaryFile().getInputStream();
handle.start();
ProjectAssetManager mgr = this.obj.getLookup().lookup(ProjectAssetManager.class);
@ -346,6 +347,8 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
Exceptions.printStackTrace(ex);
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
}finally{
handle.finish();
}

Loading…
Cancel
Save