From ae8474cb576949878be249fc921cc9d79e3af37e Mon Sep 17 00:00:00 2001 From: Nehon Date: Wed, 11 Feb 2015 22:19:39 +0100 Subject: [PATCH] Added some icons to edit and delete a node in the shader node editor --- .../editor/Bundle.properties | 3 + .../materialdefinition/editor/Diagram.java | 3 + .../materialdefinition/editor/NodePanel.java | 52 +++-- .../editor/NodeToolBar.form | 201 ++++++++++++++++++ .../editor/NodeToolBar.java | 147 +++++++++++++ .../gde/materialdefinition/icons/code.png | Bin 0 -> 1121 bytes .../materialdefinition/icons/codeHover.png | Bin 0 -> 1131 bytes .../materialdefinition/icons/deleteNode.png | Bin 0 -> 1271 bytes .../icons/deleteNodeHover.png | Bin 0 -> 1271 bytes .../materialdefinition/icons/previewIcons.psd | Bin 39288 -> 97172 bytes 10 files changed, 387 insertions(+), 19 deletions(-) create mode 100644 sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.form create mode 100644 sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.java create mode 100644 sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/code.png create mode 100644 sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/codeHover.png create mode 100644 sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/deleteNode.png create mode 100644 sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/deleteNodeHover.png diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Bundle.properties b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Bundle.properties index f2fb15a9f..c3c41f44a 100644 --- a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Bundle.properties +++ b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Bundle.properties @@ -9,3 +9,6 @@ BackdropPanel.quadButton.toolTipText=Quad BackdropPanel.reloadButton.toolTipText=Refresh BackdropPanel.boxButton.toolTipText=Cube BackdropPanel.bringToFrontButton.toolTipText=Toggle back/front +NodeToolBar.codeButton.toolTipText=Display code +NodeToolBar.deleteButton.toolTipText=Delete node +NodeToolBar.deleteButton.text= diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Diagram.java b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Diagram.java index e1ca87657..a6ff5a6d7 100644 --- a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Diagram.java +++ b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/Diagram.java @@ -294,6 +294,7 @@ public class Diagram extends JPanel implements MouseListener, MouseMotionListene } } + selectedNode.cleanup(); remove(selectedNode); selectedItem = null; repaint(); @@ -418,6 +419,8 @@ public class Diagram extends JPanel implements MouseListener, MouseMotionListene return doSelect(outBusPanel); } } + + return doSelect(null); } diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodePanel.java b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodePanel.java index 62b54428b..1ee7ffced 100644 --- a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodePanel.java +++ b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodePanel.java @@ -52,6 +52,7 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha private Color color; private String name; private String techName; + private NodeToolBar toolBar; protected List filePaths = new ArrayList(); // private List listeners = Collections.synchronizedList(new LinkedList()); @@ -112,6 +113,7 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha this.filePaths.addAll(def.getShadersPath()); String defPath = ((DefinitionBlock) node.getContents().get(0)).getPath(); this.filePaths.add(defPath); + toolBar = new NodeToolBar(this); } /** @@ -125,6 +127,7 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha this.type = type; init(new ArrayList(), outputs); addKeyListener(this); + toolBar = new NodeToolBar(this); } public final void refresh(ShaderNodeBlock node) { @@ -201,14 +204,18 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha } g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // Anti-alias! RenderingHints.VALUE_ANTIALIAS_ON); - // Color[] colors = {new Color(0, 0, 0, 0.7f), new Color(0, 0, 0, 0.15f)}; + // Color[] colors = {new Color(0, 0, 0, 0.7f), new Color(0, 0, 0, 0.15f)}; if (diagram.selectedItem == this) { Color[] colors = new Color[]{new Color(0.6f, 0.6f, 1.0f, 0.8f), new Color(0.6f, 0.6f, 1.0f, 0.5f)}; float[] factors = {0f, 1f}; g.setPaint(new RadialGradientPaint(getWidth() / 2, getHeight() / 2, getWidth() / 2, factors, colors)); g.fillRoundRect(8, 3, getWidth() - 10, getHeight() - 6, 15, 15); - } - + }else{ + if(toolBar.isVisible()){ + toolBar.setVisible(false); + } + } + g.setColor(new Color(170, 170, 170, 120)); g.fillRoundRect(5, 1, getWidth() - 9, getHeight() - 6, 15, 15); g.setColor(boderColor); @@ -253,6 +260,11 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha public void mousePressed(MouseEvent e) { super.mousePressed(e); diagram.select(this); + showToolBar(); + } + + private void showToolBar(){ + toolBar.display(); } public NodeType getType() { @@ -299,6 +311,16 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha color = type.getColor(); } + public void edit() { + if (type == NodeType.Fragment || type == NodeType.Vertex) { + diagram.showEdit(NodePanel.this); + } + } + + public void cleanup(){ + toolBar.getParent().remove(toolBar); + } + /** * 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 @@ -318,18 +340,6 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha header.addMouseMotionListener(labelMouseMotionListener); header.setHorizontalAlignment(SwingConstants.LEFT); header.setFont(new Font("Tahoma", Font.BOLD, 11)); - header.addMouseListener(new MouseAdapter() { - - @Override - public void mouseClicked(MouseEvent e) { - //if(e.getClickCount()==2){ - if (type == NodeType.Fragment || type == NodeType.Vertex) { - diagram.showEdit(NodePanel.this); - } - //} - } - - }); content = new JPanel(); content.setOpaque(false); @@ -423,10 +433,14 @@ public class NodePanel extends DraggablePanel implements Selectable, PropertyCha public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_DELETE) { - Diagram diag = getDiagram(); - if (diag.selectedItem == this) { - diag.removeSelectedNode(); - } + delete(); + } + } + + public void delete() { + Diagram diag = getDiagram(); + if (diag.selectedItem == this) { + diag.removeSelectedNode(); } } diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.form b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.form new file mode 100644 index 000000000..593a23893 --- /dev/null +++ b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.form @@ -0,0 +1,201 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.java b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.java new file mode 100644 index 000000000..4ed8228b9 --- /dev/null +++ b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/editor/NodeToolBar.java @@ -0,0 +1,147 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.jme3.gde.materialdefinition.editor; + +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +/** + * + * @author Nehon + */ +public class NodeToolBar extends javax.swing.JPanel implements ComponentListener, MouseListener { + + private final NodePanel node; + + /** + * Creates new form NodeToolBar + */ + @SuppressWarnings("LeakingThisInConstructor") + public NodeToolBar(NodePanel node) { + initComponents(); + this.node = node; + node.addComponentListener(this); + } + + /** + * 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. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + codeButton = new javax.swing.JButton(); + deleteButton = new javax.swing.JButton(); + + setOpaque(false); + java.awt.GridBagLayout layout = new java.awt.GridBagLayout(); + layout.rowHeights = new int[] {16}; + setLayout(layout); + + codeButton.setBackground(new java.awt.Color(255, 255, 255)); + codeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/materialdefinition/icons/code.png"))); // NOI18N + codeButton.setToolTipText(org.openide.util.NbBundle.getMessage(NodeToolBar.class, "NodeToolBar.codeButton.toolTipText")); // NOI18N + codeButton.setBorder(null); + codeButton.setBorderPainted(false); + codeButton.setContentAreaFilled(false); + codeButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + codeButton.setFocusable(false); + codeButton.setIconTextGap(0); + codeButton.setMaximumSize(new java.awt.Dimension(24, 24)); + codeButton.setMinimumSize(new java.awt.Dimension(24, 24)); + codeButton.setPreferredSize(new java.awt.Dimension(16, 16)); + codeButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/materialdefinition/icons/codeHover.png"))); // NOI18N + codeButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + codeButtonActionPerformed(evt); + } + }); + add(codeButton, new java.awt.GridBagConstraints()); + + deleteButton.setBackground(new java.awt.Color(255, 255, 255)); + deleteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/materialdefinition/icons/deleteNode.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(deleteButton, org.openide.util.NbBundle.getMessage(NodeToolBar.class, "NodeToolBar.deleteButton.text")); // NOI18N + deleteButton.setToolTipText(org.openide.util.NbBundle.getMessage(NodeToolBar.class, "NodeToolBar.deleteButton.toolTipText")); // NOI18N + deleteButton.setBorder(null); + deleteButton.setBorderPainted(false); + deleteButton.setContentAreaFilled(false); + deleteButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + deleteButton.setFocusable(false); + deleteButton.setIconTextGap(0); + deleteButton.setMaximumSize(new java.awt.Dimension(24, 24)); + deleteButton.setMinimumSize(new java.awt.Dimension(24, 24)); + deleteButton.setPreferredSize(new java.awt.Dimension(16, 16)); + deleteButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/materialdefinition/icons/deleteNodeHover.png"))); // NOI18N + deleteButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + deleteButtonActionPerformed(evt); + } + }); + add(deleteButton, new java.awt.GridBagConstraints()); + }// //GEN-END:initComponents + + private void codeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_codeButtonActionPerformed + node.edit(); + }//GEN-LAST:event_codeButtonActionPerformed + + private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed + node.delete(); + }//GEN-LAST:event_deleteButtonActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton codeButton; + private javax.swing.JButton deleteButton; + // End of variables declaration//GEN-END:variables + + public void display() { + if (getParent() == null) { + node.getParent().add(this); + } + setBounds(node.getLocation().x + 5, node.getLocation().y - 18, node.getWidth() - 10, 16); + node.getParent().setComponentZOrder(this, 0); + setVisible(true); + + } + + public void componentResized(ComponentEvent e) { + } + + public void componentMoved(ComponentEvent e) { + setLocation(node.getLocation().x + 5, node.getLocation().y - 18); + } + + public void componentShown(ComponentEvent e) { + } + + public void componentHidden(ComponentEvent e) { + } + + public void mouseClicked(MouseEvent e) { + e.consume(); + } + + public void mousePressed(MouseEvent e) { + e.consume(); + } + + public void mouseReleased(MouseEvent e) { + e.consume(); + } + + public void mouseEntered(MouseEvent e) { + + } + + public void mouseExited(MouseEvent e) { + + } + +} diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/code.png b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/code.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0e9cc1894e596e57bde546ced92c9e7441639f GIT binary patch literal 1121 zcmb7D&ui0A9FI(fhz0TB<`9e-9t4}bm!!)QR%g;AuCmP071ra@n4%eGW;TmmZw(Q)iCRHa=6-$n$gzQ6=9WtiaN-JT2Xk8qTH0Euds}Os z>T|QV*_lkE1R)|Wn}zF9s%2%a$E(qOel2ip&xEX%xkINK&LUgE31Uk;D0*NDuv3tS zlB_7oEmi~&2tX8|ScHlui5dWG|KX@w;;(8o)9!20Q<-ZM5^I9c?RNRD#N(tTKvh+9 z4pA&pi(EwXHM5&hqF$r+Q=8SF=cSxC|o*sq}#4-2KTBoFjj+{S{Kdo=ZNT{I{cM^|Qadq;T)agRGVLt}Vag#Mf zt7yCHDeC=j9PK`JK8W0P6MLNyMWkw$xlSkWHAOdcsGEven$j&1!f7ZOmZHlgRkB6Z z6bA&yfmDn4Db}<~7BE!N5G4SiC99HD(k);bmZVmUDPw@GMk#S459OjcHaNnTEkmdNgJ}cWrp@)S{(q-Spq>bMj~(l|!4+-fd^?;VdKk_iifG9aI$?k6 zp9!7LdsS1fXFr?!2M4nwHy-ak7=1mndC9!~>dVtNm#y!6dsn}$d_rKiIbC2UF7P9B wJI@c~jWd%sf6UH%+uL`Z?Y|9IxiRMKI1~LHFT8v-_97qps=gN4{?oI`GKtM9UPLRnV@HtET~vc~$+zpU3~hJy(PubAQK`3HrHZT8 zJXXl0`~&?2WC)4({?IIh#_upN;_QJn*- zswNzQkRcYCcs0OwHxtBDLk0uJPUMByLjj#I+BMY1Ifi(;AA%p2y?O)3Bk~{~B#Wet z>)Ig)Se}deHc5O#lw}={@cof>jLY!A`6Kz`%4!I?GK^6>a!3_drVdFRFO(P#V$du* zYC=-QqTPyN|A%F1_lfgfV7Cn9w0#)hl96NDZO_#dJ+A}ZPz*V%n*spSK+KzpF3GA` z6jVbP5*!8+E!HJiwNNmN1;xw@A^^aYbSVp_jl8KU)3T%kafmGiF}4E-CZY+}JHQ&p zVzoj9ZH%G{LakvpEi@2DaRY^PVNs@+yud}BI4Lw?CV?6-@*YFC7$KkT=UnrSP|s(J zrYQ5Opyvfs0zegIIWJ3+tnh-IHH*vu>;8ATIN}MH^w^=E8(xt{PPU^7B8Slo!hn=4 zA`@14_T(X%&PvJ9E8TCky5qlMlY6jau(|@#X0k-+Sxl zw>)ZhIh_17clYP+_Q{QnH@z+C!o=A2*wFT5+6HGJe!2dj^i#;T|yeMa2>9F+E}f9Qu~Cs z9Yb3sq;|X@9uP?I0-Hcu$J6#O27+}+z$BoP5QsgXZAhr%R<6=E#N{|kx;{*muwHA-|I`H)U0LBawVKxeolml8x#ypQGq2Ux(f9G~DsImOEW(Cv#MYQ8-#mo>eu zMNT=UhH+hH*=DnuY^IXPpI|vjk|GYCPY{blFymn}OnAXShe3mZcCtv?*wC!AToSN;%O;AigEEYb5w5#t9pEy&?)(k;gUU=D zvSk>chHsH7jt{Jp+E^$uY{wuQrauWu6?JnefUOUPAwNi*cRX`SLsr9u9xiG*rqOV0 zSyWVoQ#4UaXOsfZal5#bS`ZZ>Ev0l`()bR+dLYqC+61dhf+S{uqVg%gaRosYc%W)h zUdU^bu4_^UTl4~KdKQdCBdl{BD{Y9C^FA~&@+$~Ub-JlkLl^}$RHyT!X?l<2*{B&r zg(l1-P!0Od)6mv^Os0D%JBwZ+|ij+!$T`H$*I@8A5|2thQ z@q~?fY+cWFUXezQwrdka4r?Yi7TGoSDBE zLu$Mjf9K8kp__*6($zOk{M3K&U1y|s`UB^(`pO-f_I>v3UvnqY{rihs8B?G8=&_F<`Jvo( eYVWs02R2bh4rDWO&za-Vuc%lU(cV^{n)?rt&Z+PK literal 0 HcmV?d00001 diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/deleteNodeHover.png b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/deleteNodeHover.png new file mode 100644 index 0000000000000000000000000000000000000000..778b12422e2a487a0d910cbef492597d11cbd59a GIT binary patch literal 1271 zcmb7EZ)n_P9FDD3sjE(OquQZaT2$1#Y!FX*iD)JqK^7uh-0ga4Tf0tlZdEAoG2DSVNMD%CJaP2-`wuHei#J<$@{*^ z?|Giz-^}I5hI_gn>Lv)HCpV%N@VY&^@45p&AGvbfz{`V3E1_|33e}AO60+q@LNezV zWmtfQHFMxgI7ASgAKAqcD(U+r({tiRWD{>VK1LJ7P`cq8W)&iG5|(W@Mg4XDQ;M{$ z6g9!?jP7S(#U7ar;P~uV(VVTCqD7_ml0yv%6F3kVWW$+uL#dIXn!FO;N3Us$Y?`2I zin`%cNzaoRFMuQ;XJRIkWXL3l11=#5!c!#60ET8*8n7`SNE|CM4B5IUtQJ^PQbEnO zwD2iKRS@zeny%OD@j4gxf-((6QH(fPHij)?;f#xnM$8TS+YBlU&A|4N?YU&cXiR!F zl%lYwH$rgyf?cklaD&_pTgk#{qZ@`#gE&J6O`9mbHcHpGMmWxfb%+Y^rt`Pt4~sKC zqzf?gYJrKXIMu&NYHOj$uoZ)(8$lJ~DrSx85H>&Py7V-5-gb>?)iY}jbWu)CQMHbIdPJB!3 zo-JsLxt$*--|Q+9nP9cA)_3&c5BKxLg?Hwzq0@7h4v&7!u5}&Drysj#@yv&ojFQcjV{4Se<`VT0ea6_YZWQy0~6HS=w`V^=q3qp8VY1n?8H_ dkJ@v$_Y!M|*b56YE9awMQBE6EPb$wJ`VVOsrd0p{ literal 0 HcmV?d00001 diff --git a/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/previewIcons.psd b/sdk/jme3-materialeditor/src/com/jme3/gde/materialdefinition/icons/previewIcons.psd index 4c64777c04d5deb00cf2723fff2d5214a6292917..a65243271d72a7f5489787894a0b0f0545ab7065 100644 GIT binary patch literal 97172 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