/** * * @author pquiring * * Created : Sept 7, 2013 */ import java.awt.*; import java.util.*; public class CameraPanel extends javax.swing.JPanel { /** * Creates new form CameraPanel */ public CameraPanel(ProjectPanel project) { initComponents(); this.project = project; list.add(new CameraKey()); } /** * 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() { addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { formMousePressed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 605, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 68, Short.MAX_VALUE) ); }// </editor-fold>//GEN-END:initComponents private void formMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMousePressed project.selectTrack(this); selectedOffset = project.offset + evt.getX() / 16 * project.scale; repaint(); }//GEN-LAST:event_formMousePressed // Variables declaration - do not modify//GEN-BEGIN:variables // End of variables declaration//GEN-END:variables private ProjectPanel project; public ArrayList<CameraKey> list = new ArrayList<CameraKey>(); public boolean selected; private int selectedOffset; public void paint(Graphics g) { g.setColor(Color.GRAY); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(Color.RED); int offset = project.offset; int width = getWidth(); int px = 0; CameraKey keys[] = list.toArray(new CameraKey[0]); while (px < width) { if (selectedOffset >= offset && selectedOffset <= (offset + project.scale-1)) { g.drawRect(px,0,15,15); } g.drawLine(px, 8, px+16, 8); for(int a=0;a<keys.length;a++) { if (keys[a].offset >= offset && keys[a].offset <= (offset + project.scale-1)) { //draw a square (key point) g.fillRect(px+4,4,8,8); } } px += 16; offset += project.scale; } } public Dimension getPreferredSize() { return new Dimension(project.getTracksWidth(), 16); } public void addKey() { CameraKey keys[] = list.toArray(new CameraKey[0]); int bestpos = -1; for(int a=0;a<keys.length;a++) { if (keys[a].offset == selectedOffset) return; //already created if (keys[a].offset < selectedOffset) { bestpos = a+1; } } if (bestpos == -1) bestpos = 1; CameraKey key = new CameraKey(); key.offset = selectedOffset; list.add(bestpos, key); repaint(); } public void editKey() { CameraKey keys[] = list.toArray(new CameraKey[0]); for(int a=0;a<keys.length;a++) { if (keys[a].offset == selectedOffset) { Element e = new Element(); e.type = Element.TYPE_CAMERA; e.use3d = true; e.tx = keys[a].tx; e.ty = keys[a].ty; e.tz = keys[a].tz; e.rx = keys[a].rx; e.ry = keys[a].ry; e.rz = keys[a].rz; EditElementProperties dialog = new EditElementProperties(null, true, e, keys[a].fov); dialog.setVisible(true); if (dialog.saved) { keys[a].tx = e.tx; keys[a].ty = e.ty; keys[a].tz = e.tz; keys[a].rx = e.rx; keys[a].ry = e.ry; keys[a].rz = e.rz; keys[a].fov = dialog.fov; } return; } } } public void deleteKey() { if (selectedOffset == 0) return; //do not delete root key CameraKey keys[] = list.toArray(new CameraKey[0]); for(int a=0;a<keys.length;a++) { if (keys[a].offset == selectedOffset) { list.remove(a); repaint(); return; } } } }