/*
* Created on 15. March 2007, 16:10
*/
package net.java.nboglpack.glslcompiler.options;
import com.mbien.engine.glsl.GLSLShader.TYPE;
import com.mbien.engine.util.GLRunnable;
import com.mbien.engine.util.GLWorker;
import java.util.prefs.Preferences;
import java.util.regex.Pattern;
import javax.media.opengl.GL;
import javax.media.opengl.GLContext;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jdesktop.layout.GroupLayout;
import org.jdesktop.layout.LayoutStyle;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
/**
* Created on 15. March 2007, 16:10
* GLSL compiler IDE options.
* @author Michael Bien
*/
final class GlslCompilerOptionsPanel extends JPanel {
private final GlslCompilerOptionsPanelController controller;
GlslCompilerOptionsPanel(GlslCompilerOptionsPanelController controller) {
this.controller = controller;
initComponents();
}
void load() {
final String[] buffer = new String[2];
GLWorker worker = Lookup.getDefault().lookup(GLWorker.class);
worker.addWork(new GLRunnable() {
@Override
public void run(GLContext context) {
GL gl = context.getGL();
buffer[0] = gl.glGetString(GL.GL_VERSION);
buffer[1] = gl.glGetString(GL.GL_VENDOR);
}
});
worker.work();
glVersionLabel.setText(buffer[0]);
vendorLabel.setText(buffer[1]);
Preferences preferences = NbPreferences.forModule(GlslCompilerOptionsPanel.class);
patternTextField.setText(preferences.get("GlslCompilerLogPattern", ""));
joglVersionLabel.setText(Package.getPackage("javax.media.opengl").getImplementationVersion());
vertexShaderSupport.setText(getShaderSupportedString(TYPE.VERTEX));
fragmentShaderSupport.setText(getShaderSupportedString(TYPE.FRAGMENT));
geometryShaderSupport.setText(getShaderSupportedString(TYPE.GEOMETRY));
}
void store() {
if (valid()) {
NbPreferences.forModule(GlslCompilerOptionsPanel.class).put("GlslCompilerLogPattern", patternTextField.getText());
}
}
boolean valid() {
String pattern = patternTextField.getText();
if (pattern == null || pattern.trim().isEmpty()) {
return false;
}
try {
Pattern.compile(pattern);
return true;
} catch (Exception ex) {
return false;
}
}
private String getShaderSupportedString(TYPE shaderType) {
return shaderType.isSupported() ? "supported" : "<html><font color=#FF0000>not supported</font>";
}
/** 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() {
JPanel optionsPanel = new JPanel();
JLabel patternLabel = new JLabel();
patternTextField = new JTextField();
JPanel runtimePanel = new JPanel();
JLabel glVersion = new JLabel();
glVersionLabel = new JLabel();
JLabel gpuVendor = new JLabel();
vendorLabel = new JLabel();
JLabel joglVersion = new JLabel();
joglVersionLabel = new JLabel();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
vertexShaderSupport = new JLabel();
fragmentShaderSupport = new JLabel();
geometryShaderSupport = new JLabel();
logoLabel = new JLabel();
optionsPanel.setBackground(getBackground());
optionsPanel.setBorder(BorderFactory.createTitledBorder(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_OptionsPanelTitle"))); // NOI18N
patternLabel.setText(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_ErrorParserPatternLabel")); // NOI18N
GroupLayout optionsPanelLayout = new GroupLayout(optionsPanel);
optionsPanel.setLayout(optionsPanelLayout);
optionsPanelLayout.setHorizontalGroup(
optionsPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(optionsPanelLayout.createSequentialGroup()
.addContainerGap()
.add(patternLabel)
.addPreferredGap(LayoutStyle.RELATED)
.add(patternTextField, GroupLayout.DEFAULT_SIZE, 350, Short.MAX_VALUE)
.addContainerGap())
);
optionsPanelLayout.setVerticalGroup(
optionsPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(optionsPanelLayout.createSequentialGroup()
.add(optionsPanelLayout.createParallelGroup(GroupLayout.BASELINE)
.add(patternLabel)
.add(patternTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
runtimePanel.setBackground(getBackground());
runtimePanel.setBorder(BorderFactory.createTitledBorder(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_RuntimePanelTitle"))); // NOI18N
glVersion.setText(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_OpenGLVersionLabel")); // NOI18N
glVersionLabel.setText("jLabel2");
gpuVendor.setText(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_GPU_VendorLabel")); // NOI18N
vendorLabel.setText("jLabel4");
joglVersion.setText(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_JOGL_VersionLabel")); // NOI18N
joglVersionLabel.setText("jLabel6");
jLabel1.setText(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_VertexShaderLabel")); // NOI18N
jLabel2.setText(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_FragmentShaderLabel")); // NOI18N
jLabel3.setText(NbBundle.getMessage(GlslCompilerOptionsPanel.class, "GlslCompilerPanel_GeometryShaderLabel")); // NOI18N
vertexShaderSupport.setText("jLabel4");
fragmentShaderSupport.setText("jLabel5");
geometryShaderSupport.setText("jLabel6");
logoLabel.setIcon(new ImageIcon(getClass().getResource("/net/java/nboglpack/glslcompiler/options/NetBeansOpenGLPack.png"))); // NOI18N
GroupLayout runtimePanelLayout = new GroupLayout(runtimePanel);
runtimePanel.setLayout(runtimePanelLayout);
runtimePanelLayout.setHorizontalGroup(
runtimePanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(runtimePanelLayout.createSequentialGroup()
.addContainerGap()
.add(logoLabel)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(runtimePanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(glVersion)
.add(gpuVendor)
.add(joglVersion))
.addPreferredGap(LayoutStyle.RELATED)
.add(runtimePanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(joglVersionLabel, GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE)
.add(vendorLabel, GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE)
.add(glVersionLabel, GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE))
.addPreferredGap(LayoutStyle.RELATED)
.add(runtimePanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(jLabel1)
.add(jLabel2)
.add(jLabel3))
.addPreferredGap(LayoutStyle.RELATED)
.add(runtimePanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(vertexShaderSupport, GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE)
.add(fragmentShaderSupport, GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE)
.add(geometryShaderSupport, GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE))
.addContainerGap())
);
runtimePanelLayout.setVerticalGroup(
runtimePanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(runtimePanelLayout.createSequentialGroup()
.add(runtimePanelLayout.createParallelGroup(GroupLayout.CENTER)
.add(runtimePanelLayout.createSequentialGroup()
.add(glVersion)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(gpuVendor)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(joglVersion))
.add(runtimePanelLayout.createSequentialGroup()
.add(glVersionLabel)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(vendorLabel)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(joglVersionLabel))
.add(runtimePanelLayout.createSequentialGroup()
.add(jLabel1)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(jLabel2)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(jLabel3))
.add(runtimePanelLayout.createSequentialGroup()
.add(vertexShaderSupport)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(fragmentShaderSupport)
.addPreferredGap(LayoutStyle.UNRELATED)
.add(geometryShaderSupport))
.add(logoLabel))
.addContainerGap(12, Short.MAX_VALUE))
);
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.LEADING)
.add(GroupLayout.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.add(layout.createParallelGroup(GroupLayout.TRAILING)
.add(GroupLayout.LEADING, optionsPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(GroupLayout.LEADING, runtimePanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(runtimePanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.RELATED)
.add(optionsPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private JLabel fragmentShaderSupport;
private JLabel geometryShaderSupport;
private JLabel glVersionLabel;
private JLabel joglVersionLabel;
private JLabel logoLabel;
private JTextField patternTextField;
private JLabel vendorLabel;
private JLabel vertexShaderSupport;
// End of variables declaration//GEN-END:variables
}