/** Image Layers * * Created : Jan 25, 2015 * * @author pquiring */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LayersWindow extends javax.swing.JFrame implements ActionListener { /** * Creates new form ImageLayers */ public LayersWindow(MainPanel mainPanel) { this.mainPanel = mainPanel; // setUndecorated(true); initComponents(); setAlwaysOnTop(true); } /** * 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() { panel = new javax.swing.JPanel(); jToolBar1 = new javax.swing.JToolBar(); bAdd = new javax.swing.JButton(); bDel = new javax.swing.JButton(); bDup = new javax.swing.JButton(); bMerge = new javax.swing.JButton(); bUp = new javax.swing.JButton(); bDown = new javax.swing.JButton(); bEdit = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Image Layers"); setFocusable(false); setFocusableWindowState(false); setResizable(false); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosed(java.awt.event.WindowEvent evt) { formWindowClosed(evt); } }); javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel); panel.setLayout(panelLayout); panelLayout.setHorizontalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 0, Short.MAX_VALUE) ); panelLayout.setVerticalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 279, Short.MAX_VALUE) ); jToolBar1.setFloatable(false); jToolBar1.setRollover(true); bAdd.setIcon(new javax.swing.ImageIcon(getClass().getResource("/addlayer.png"))); // NOI18N bAdd.setToolTipText("Add Layer"); bAdd.setFocusable(false); bAdd.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); bAdd.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); bAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bAddActionPerformed(evt); } }); jToolBar1.add(bAdd); bDel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dellayer.png"))); // NOI18N bDel.setToolTipText("Delete Layer"); bDel.setFocusable(false); bDel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); bDel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); bDel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bDelActionPerformed(evt); } }); jToolBar1.add(bDel); bDup.setIcon(new javax.swing.ImageIcon(getClass().getResource("/duplayer.png"))); // NOI18N bDup.setToolTipText("Duplicate Layer"); bDup.setFocusable(false); bDup.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); bDup.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); bDup.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bDupActionPerformed(evt); } }); jToolBar1.add(bDup); bMerge.setIcon(new javax.swing.ImageIcon(getClass().getResource("/mergelayer.png"))); // NOI18N bMerge.setToolTipText("Merge Layer Up"); bMerge.setFocusable(false); bMerge.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); bMerge.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); bMerge.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bMergeActionPerformed(evt); } }); jToolBar1.add(bMerge); bUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/movelayerup.png"))); // NOI18N bUp.setToolTipText("Move Layer Up"); bUp.setFocusable(false); bUp.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); bUp.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); bUp.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bUpActionPerformed(evt); } }); jToolBar1.add(bUp); bDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/movelayerdown.png"))); // NOI18N bDown.setToolTipText("Move Layer Down"); bDown.setFocusable(false); bDown.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); bDown.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); bDown.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bDownActionPerformed(evt); } }); jToolBar1.add(bDown); bEdit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/editlayer.png"))); // NOI18N bEdit.setToolTipText("Edit Layer Properties"); bEdit.setFocusable(false); bEdit.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); bEdit.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); bEdit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bEditActionPerformed(evt); } }); jToolBar1.add(bEdit); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jToolBar1, 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(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed mainPanel.layers = null; }//GEN-LAST:event_formWindowClosed private void bAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bAddActionPerformed mainPanel.addLayer(); setup(pc); }//GEN-LAST:event_bAddActionPerformed private void bDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bDelActionPerformed mainPanel.delLayer(); setup(pc); }//GEN-LAST:event_bDelActionPerformed private void bEditActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bEditActionPerformed mainPanel.editLayer(); setup(pc); }//GEN-LAST:event_bEditActionPerformed private void bDupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bDupActionPerformed mainPanel.dupLayer(); setup(pc); }//GEN-LAST:event_bDupActionPerformed private void bMergeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bMergeActionPerformed mainPanel.mergeLayer(); setup(pc); }//GEN-LAST:event_bMergeActionPerformed private void bUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bUpActionPerformed mainPanel.moveLayerUp(); setup(pc); }//GEN-LAST:event_bUpActionPerformed private void bDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bDownActionPerformed mainPanel.moveLayerDown(); setup(pc); }//GEN-LAST:event_bDownActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton bAdd; private javax.swing.JButton bDel; private javax.swing.JButton bDown; private javax.swing.JButton bDup; private javax.swing.JButton bEdit; private javax.swing.JButton bMerge; private javax.swing.JButton bUp; private javax.swing.JToolBar jToolBar1; private javax.swing.JPanel panel; // End of variables declaration//GEN-END:variables private MainPanel mainPanel; private ButtonGroup group; private PaintCanvas pc; private JRadioButton actives[]; private JCheckBox shows[]; public void setup(PaintCanvas pc) { this.pc = pc; group = new ButtonGroup(); panel.removeAll(); int cnt = pc.getImageLayers(); panel.setLayout(new GridLayout(cnt, 2)); Insets zero = new Insets(0,0,0,0); actives = new JRadioButton[cnt]; shows = new JCheckBox[cnt]; for(int a=0;a<cnt;a++) { JRadioButton active = new JRadioButton(pc.name[a]); active.setMargin(zero); active.putClientProperty("idx", a); active.putClientProperty("type", "active"); active.addActionListener(this); active.setSelected(pc.getImageLayer() == a); actives[a] = active; panel.add(active); group.add(active); JCheckBox show = new JCheckBox(); show.setMargin(zero); show.putClientProperty("idx", a); show.putClientProperty("type", "show"); show.addActionListener(this); show.setSelected(pc.show[a]); active.putClientProperty("show", show); shows[a] = show; panel.add(show); } pack(); } public void actionPerformed(ActionEvent e) { JComponent c = (JComponent)e.getSource(); Integer idx = (Integer)c.getClientProperty("idx"); String type = (String)c.getClientProperty("type"); if (type.equals("active")) { if (pc.getImageLayer() == idx) return; pc.setImageLayer(idx); if (!pc.show[idx]) { JCheckBox cb = (JCheckBox)c.getClientProperty("show"); cb.setSelected(true); pc.show[idx] = true; } } else if (type.equals("show")) { JCheckBox cb = (JCheckBox)c; int cidx = pc.getImageLayer(); if (cidx == idx) { //can not hide active image cb.setSelected(true); return; } pc.show[idx] = cb.isSelected(); } pc.repaint(); } }