/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package webcamstudio.components; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; import webcamstudio.sources.effects.Effect; import webcamstudio.sources.effects.Stretch; import webcamstudio.streams.SourceImage; import webcamstudio.streams.SourceText; import webcamstudio.streams.Stream; /** * * @author Patrick Balleux */ public class SourceControlEffects extends javax.swing.JPanel { private DefaultListModel listModel = new DefaultListModel(); private Stream stream; /** * Creates new form SourceControlEffects * @param s */ @SuppressWarnings("unchecked") public SourceControlEffects(Stream s) { initComponents(); stream = s; boolean found = false; DefaultComboBoxModel model = new DefaultComboBoxModel(); for (Effect e : Effect.getEffects().values()) { found=false; for (Effect se : stream.getEffects()){ if (se.getName().equals(e.getName())){ listModel.addElement(se); model.addElement(se); found=true; break; } } if(!found){ model.addElement(e); } } cboEffects.setModel(model); lstEffects.setModel(listModel); } /** * 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() { jScrollPane1 = new javax.swing.JScrollPane(); lstEffects = new javax.swing.JList(); jScrollPane2 = new javax.swing.JScrollPane(); panSettings = new javax.swing.JPanel(); cboEffects = new javax.swing.JComboBox(); btnAddEffect = new javax.swing.JButton(); btnDeleteEffect = new javax.swing.JButton(); btnMoveUp = new javax.swing.JButton(); btnMoveDown = new javax.swing.JButton(); setPreferredSize(new java.awt.Dimension(395, 200)); lstEffects.setModel(new javax.swing.AbstractListModel() { String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); lstEffects.setVisibleRowCount(4); lstEffects.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { lstEffectsValueChanged(evt); } }); jScrollPane1.setViewportView(lstEffects); jScrollPane2.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("webcamstudio/Languages"); // NOI18N panSettings.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SETTINGS"))); // NOI18N panSettings.setLayout(new java.awt.BorderLayout()); jScrollPane2.setViewportView(panSettings); panSettings.getAccessibleContext().setAccessibleName(bundle.getString("SETTINGS")); // NOI18N cboEffects.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); btnAddEffect.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/list-add.png"))); // NOI18N btnAddEffect.setToolTipText("Add Effect"); btnAddEffect.setAlignmentY(0.0F); btnAddEffect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnAddEffectActionPerformed(evt); } }); btnDeleteEffect.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/list-remove.png"))); // NOI18N btnDeleteEffect.setToolTipText("Remove Effect"); btnDeleteEffect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnDeleteEffectActionPerformed(evt); } }); btnMoveUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/go-up.png"))); // NOI18N btnMoveUp.setToolTipText("Move Effect Up"); btnMoveUp.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnMoveUpActionPerformed(evt); } }); btnMoveDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/go-down.png"))); // NOI18N btnMoveDown.setToolTipText("Move Effect Down"); btnMoveDown.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnMoveDownActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1) .addComponent(cboEffects, 0, 371, Short.MAX_VALUE) .addComponent(jScrollPane2) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(btnAddEffect, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnDeleteEffect, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnMoveUp, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnMoveDown, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(cboEffects, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(2, 2, 2) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(btnAddEffect, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnDeleteEffect, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnMoveUp, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnMoveDown, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(2, 2, 2) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE) .addGap(26, 26, 26)) ); }// </editor-fold>//GEN-END:initComponents @SuppressWarnings("unchecked") private void btnAddEffectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddEffectActionPerformed listModel.addElement(cboEffects.getSelectedItem()); Effect fx = (Effect) cboEffects.getSelectedItem(); if (fx instanceof Stretch && (stream instanceof SourceText || stream instanceof SourceImage)) { ((Stretch) fx).setWidth(stream.getWidth()); ((Stretch) fx).setHeight(stream.getHeight()); } stream.addEffect(fx); lstEffects.revalidate(); lstEffects.setSelectedValue(cboEffects.getSelectedItem(), true); }//GEN-LAST:event_btnAddEffectActionPerformed private void lstEffectsValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstEffectsValueChanged panSettings.removeAll(); if (lstEffects.getSelectedValue() != null) { Effect e = (Effect)lstEffects.getSelectedValue(); if (e.getControl()!=null) { panSettings.add(e.getControl()); } } panSettings.revalidate(); panSettings.repaint(); }//GEN-LAST:event_lstEffectsValueChanged private void btnDeleteEffectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDeleteEffectActionPerformed if (lstEffects.getSelectedValue()!=null){ Effect e = (Effect)lstEffects.getSelectedValue(); e.resetFX(); listModel.removeElement(e); stream.removeEffect(e); lstEffects.revalidate(); } }//GEN-LAST:event_btnDeleteEffectActionPerformed @SuppressWarnings("unchecked") private void btnMoveUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoveUpActionPerformed if (lstEffects.getSelectedValue()!=null){ int indexSelected = lstEffects.getSelectedIndex(); if (indexSelected>0){ int indexPrevious = indexSelected-1; Effect previous = (Effect)listModel.getElementAt(indexPrevious); Effect selected = (Effect)listModel.getElementAt(indexSelected); listModel.setElementAt(selected, indexPrevious); listModel.setElementAt(previous, indexSelected); stream.getEffects().set(indexSelected,previous); stream.getEffects().set(indexPrevious,selected); lstEffects.setSelectedIndex(indexPrevious); } lstEffects.revalidate(); } }//GEN-LAST:event_btnMoveUpActionPerformed @SuppressWarnings("unchecked") private void btnMoveDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoveDownActionPerformed if (lstEffects.getSelectedValue()!=null){ int indexSelected = lstEffects.getSelectedIndex(); if (indexSelected != -1 && indexSelected<(listModel.size()-1)){ int indexNext = indexSelected+1; Effect next = (Effect)listModel.getElementAt(indexNext); Effect selected = (Effect)listModel.getElementAt(indexSelected); listModel.setElementAt(selected, indexNext); listModel.setElementAt(next, indexSelected); stream.getEffects().set(indexSelected,next); stream.getEffects().set(indexNext,selected); lstEffects.setSelectedIndex(indexNext); } lstEffects.revalidate(); } }//GEN-LAST:event_btnMoveDownActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnAddEffect; private javax.swing.JButton btnDeleteEffect; private javax.swing.JButton btnMoveDown; private javax.swing.JButton btnMoveUp; private javax.swing.JComboBox cboEffects; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JList lstEffects; private javax.swing.JPanel panSettings; // End of variables declaration//GEN-END:variables }