/** * Created : July 4, 2012 * * @author pquiring */ import java.io.*; import javax.swing.*; import javaforce.*; import javaforce.gl.*; public class MainPanel extends javax.swing.JPanel { /** * Creates new form MainPanel */ public MainPanel() { initComponents(); Element.init(); newProject(); gl = new GLWindow(); gl.init(); gl.create(0,"jfVideo",1,1,null); //invisible window GL.glInit(); } /** * 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") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { tabs = new javax.swing.JTabbedPane(); panel = new javax.swing.JPanel(); status = new javax.swing.JLabel(); canvas = new java.awt.Canvas(); status.setText("Status : Ready"); javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel); panel.setLayout(panelLayout); panelLayout.setHorizontalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelLayout.createSequentialGroup() .addComponent(status, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(canvas, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)) ); panelLayout.setVerticalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(status, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(canvas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 586, Short.MAX_VALUE) .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 663, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, 13, javax.swing.GroupLayout.PREFERRED_SIZE)) ); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private java.awt.Canvas canvas; private javax.swing.JPanel panel; private javax.swing.JLabel status; private javax.swing.JTabbedPane tabs; // End of variables declaration//GEN-END:variables public static GLWindow gl; public void newProject() { tabs.add("New Project", new ProjectPanel(null)); } private void saveAs() { ProjectPanel project = (ProjectPanel)tabs.getSelectedComponent(); JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setMultiSelectionEnabled(false); chooser.setCurrentDirectory(new File(JF.getUserPath() + "/Videos")); javax.swing.filechooser.FileFilter vproj = new javax.swing.filechooser.FileFilter() { public boolean accept(File file) { if (file.isDirectory()) return true; return file.getName().endsWith(".vproj"); } public String getDescription() { return "Video Project (*.vproj)"; } }; chooser.addChoosableFileFilter(vproj); chooser.setFileFilter(vproj); if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) return; project.projectFile = chooser.getSelectedFile().getAbsolutePath(); if (!project.projectFile.endsWith(".vproj")) project.projectFile += ".vproj"; project.saveConfig(); int idx = tabs.getSelectedIndex(); String title = project.projectFile; int i1 = title.lastIndexOf("/"); int i2 = title.lastIndexOf("."); tabs.setTitleAt(idx, title.substring(i1+1, i2)); } public void open() { JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setMultiSelectionEnabled(false); chooser.setCurrentDirectory(new File(JF.getUserPath() + "/Videos")); javax.swing.filechooser.FileFilter vproj = new javax.swing.filechooser.FileFilter() { public boolean accept(File file) { if (file.isDirectory()) return true; return file.getName().endsWith(".vproj"); } public String getDescription() { return "Video Project (*.vproj)"; } }; chooser.addChoosableFileFilter(vproj); chooser.setFileFilter(vproj); if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) return; String fn = chooser.getSelectedFile().getAbsolutePath(); tabs.add(new ProjectPanel(fn)); int idx = tabs.getTabCount(); int i1 = fn.lastIndexOf("/"); int i2 = fn.lastIndexOf("."); tabs.setTitleAt(idx-1, fn.substring(i1+1, i2)); } public void save() { ProjectPanel project = (ProjectPanel)tabs.getSelectedComponent(); if (project.projectFile == null) {saveAs(); return;} project.saveConfig(); } public void close() { int idx = tabs.getSelectedIndex(); tabs.remove(idx); if (tabs.getTabCount() == 0) { newProject(); } } public void render() { ProjectPanel project = (ProjectPanel)tabs.getSelectedComponent(); project.render(); } public void props() { ProjectPanel project = (ProjectPanel)tabs.getSelectedComponent(); project.props(); } public void addFolder() { ProjectPanel project = (ProjectPanel)tabs.getSelectedComponent(); project.addFolder(); } public void reScan() { ProjectPanel project = (ProjectPanel)tabs.getSelectedComponent(); project.reScan(); } public void setStatus(String msg) { status.setText(msg); } /** Runs a runnable for OpenGL on the EDT */ public static void runGL(Runnable run) { try { java.awt.EventQueue.invokeAndWait(run); } catch (Exception e) { e.printStackTrace(); } } }