/* * 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 }