/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * StreamDesktop.java * * Created on 15-Apr-2012, 12:29:14 AM */ package webcamstudio.components; import java.awt.BorderLayout; import java.awt.Dimension; import java.io.IOException; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Box; import javax.swing.JCheckBoxMenuItem; import static webcamstudio.WebcamStudio.wsDistroWatch; import webcamstudio.mixers.MasterFrameBuilder; import webcamstudio.mixers.MasterMixer; import webcamstudio.mixers.PreviewFrameBuilder; import webcamstudio.streams.SourceAudioSource; import webcamstudio.streams.SourceCustom; import webcamstudio.streams.SourceDV; import webcamstudio.streams.SourceHDV; import webcamstudio.streams.SourceDVB; import webcamstudio.streams.SourceIPCam; import webcamstudio.streams.SourceImage; import webcamstudio.streams.SourceImageGif; import webcamstudio.streams.SourceImageU; import webcamstudio.streams.SourceMovie; import webcamstudio.streams.SourceMusic; import webcamstudio.streams.SourceText; import webcamstudio.streams.SourceURL; import webcamstudio.streams.SourceWebcam; import webcamstudio.streams.Stream; import webcamstudio.util.AudioSource; import webcamstudio.util.FindFires; import webcamstudio.util.FireDevices; import webcamstudio.util.PaCTL; import webcamstudio.util.Screen; import webcamstudio.util.Tools; /** * * @author patrick (modified by karl) */ public class StreamDesktop extends javax.swing.JInternalFrame { StreamPanel panel = null; StreamPanelDVB panelDVB = null; StreamPanelURL panelURL = null; StreamPanelIPCam panelIPCam = null; StreamPanelText panelText = null; Stream stream = null; Listener listener = null; private boolean runMe = true; private int speed = 1; // + is faster - is slower AudioSource[] sourcesAudio; FireDevices[] fireDevices; String distro = wsDistroWatch(); public interface Listener{ public void selectedSource(Stream source); public void closeSource(); } /** Creates new form StreamDesktop * @param s * @param l */ public StreamDesktop(final Stream s,Listener l) { listener = l; stream = s; initComponents(); jCBAVConv.setVisible(Screen.avconvDetected()); jCBFFmpeg.setVisible(Screen.ffmpegDetected()); // FIXME: This input dialog setup behavior should be farmed out to the individual source modules if (s instanceof SourceText) { StreamPanelText p = new StreamPanelText((Stream)s); this.setLayout(new BorderLayout()); this.add(p, BorderLayout.CENTER); this.setTitle(s.getName()); this.setVisible(true); jMControls.setVisible(false); jMBackEnd.setVisible(false); jMAudioSource.setVisible(false); jMFireDevice.setVisible(false); jMLoop.setVisible(false); panelText = p; s.setPanelType("PanelText"); } else if (s instanceof SourceDVB) { StreamPanelDVB p = new StreamPanelDVB(s); this.setLayout(new BorderLayout()); this.add(p, BorderLayout.CENTER); this.setTitle(s.getName()); this.setVisible(true); jMBackEnd.setVisible(false); jMIPCBrand.setVisible(false); jMAudioSource.setVisible(false); jMFireDevice.setVisible(false); jMLoop.setVisible(false); stream.setComm("GS"); panelDVB = p; s.setPanelType("PanelDVB"); } else if (s instanceof SourceDV || s instanceof SourceHDV) { final ArrayList<JCheckBoxMenuItem> aSMenuItem = new ArrayList<>(); try { fireDevices = FindFires.getSources(); } catch (IOException ex) { Logger.getLogger(StreamDesktop.class.getName()).log(Level.SEVERE, null, ex); } for (FireDevices fireDevice : fireDevices){ final JCheckBoxMenuItem jCBMenuItem = new JCheckBoxMenuItem(); jCBMenuItem.setText(fireDevice.description); jCBMenuItem.setName(fireDevice.guid); // System.out.println("Desktop Name: "+fireDevice.description); // System.out.println("Desktop Guid: "+fireDevice.guid); jCBMenuItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { s.setGuid(jCBMenuItem.getName()); for (JCheckBoxMenuItem jCb : aSMenuItem) { if (!jCb.getName().equals(s.getGuid())) { jCb.setSelected(false); } } } }); jMFireDevice.add(jCBMenuItem); aSMenuItem.add(jCBMenuItem); if (s.getLoaded()){ for (JCheckBoxMenuItem jCb : aSMenuItem) { if (jCb.getName().equals(s.getGuid())) { jCb.setSelected(true); } } } else { JCheckBoxMenuItem initJCb = aSMenuItem.get(0); initJCb.setSelected(true); s.setGuid(initJCb.getName()); } } StreamPanel p = new StreamPanel(s); this.setLayout(new BorderLayout()); this.add(p, BorderLayout.CENTER); this.setTitle(s.getName()); this.setVisible(true); jMBackEnd.setVisible(false); jMIPCBrand.setVisible(false); jMAudioSource.setVisible(false); jMFireDevice.setVisible(true); jMLoop.setVisible(false); stream.setComm("GS"); panel = p; s.setPanelType("Panel"); } else if (s instanceof SourceURL) { StreamPanelURL p = new StreamPanelURL(s); this.setLayout(new BorderLayout()); this.add(p, BorderLayout.CENTER); this.setTitle(s.getName()); this.setVisible(true); if (stream.getLoaded()){ switch (stream.getComm()) { case "AV": jCBAVConv.setSelected(true); stream.setComm("AV"); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(false); break; case "GS": jCBGStreamer.setSelected(true); stream.setComm("GS"); jCBAVConv.setSelected(false); jCBFFmpeg.setSelected(false); break; case "FF": jCBFFmpeg.setSelected(true); stream.setComm("FF"); jCBAVConv.setSelected(false); jCBGStreamer.setSelected(false); break; } } else { if (distro.toLowerCase().equals("ubuntu")){ jCBAVConv.setSelected(true); stream.setComm("AV"); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(false); } else { jCBAVConv.setSelected(false); stream.setComm("FF"); stream.setBackFF(true); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(true); } } jMBackEnd.setEnabled(true); panelURL = p; s.setPanelType("PanelURL"); jCBShowSliders.setVisible(false); jMIPCBrand.setVisible(false); jMAudioSource.setVisible(false); jMFireDevice.setVisible(false); jMLoop.setVisible(true); jCBLoop.setSelected(s.getLoop()); } else if (s instanceof SourceIPCam) { StreamPanelIPCam p = new StreamPanelIPCam(s); this.setLayout(new BorderLayout()); this.add(p, BorderLayout.CENTER); this.setTitle(s.getName()); this.setVisible(true); if (stream.getLoaded()){ switch (stream.getComm()) { case "AV": jCBAVConv.setSelected(true); stream.setComm("AV"); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(false); break; case "GS": jCBGStreamer.setSelected(true); stream.setComm("GS"); jCBAVConv.setSelected(false); jCBFFmpeg.setSelected(false); break; case "FF": jCBFFmpeg.setSelected(true); stream.setComm("FF"); stream.setBackFF(true); jCBAVConv.setSelected(false); jCBGStreamer.setSelected(false); break; } switch (stream.getPtzBrand()) { case "foscam": jCBoxFosCamPtz.setSelected(true); stream.setPtzBrand("foscam"); jCBoxAxisPtz.setSelected(false); jCBoxWansCamPtz.setSelected(false); break; case "axis": jCBoxAxisPtz.setSelected(true); stream.setPtzBrand("axis"); jCBoxFosCamPtz.setSelected(false); jCBoxWansCamPtz.setSelected(false); break; case "wanscam": jCBoxWansCamPtz.setSelected(true); stream.setPtzBrand("wanscam"); jCBoxFosCamPtz.setSelected(false); jCBoxAxisPtz.setSelected(false); break; } } else { jCBAVConv.setSelected(false); jCBFFmpeg.setSelected(false); stream.setComm("GS"); jCBGStreamer.setSelected(true); jCBoxFosCamPtz.setSelected(true); stream.setPtzBrand("foscam"); jCBoxAxisPtz.setSelected(false); } jMBackEnd.setVisible(false); panelIPCam = p; s.setPanelType("PanelIPCam"); jCBShowSliders.setVisible(false); jMAudioSource.setVisible(false); jMFireDevice.setVisible(false); jMLoop.setVisible(false); } else { if (s instanceof SourceAudioSource) { final ArrayList<JCheckBoxMenuItem> aSMenuItem = new ArrayList<>(); try { sourcesAudio = PaCTL.getSources(); } catch (IOException ex) { Logger.getLogger(StreamDesktop.class.getName()).log(Level.SEVERE, null, ex); } for (AudioSource audioSource : sourcesAudio){ final JCheckBoxMenuItem jCBMenuItem = new JCheckBoxMenuItem(); jCBMenuItem.setText(audioSource.description); jCBMenuItem.setName(audioSource.device); // NOI18N jCBMenuItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { s.setAudioSource(jCBMenuItem.getName()); for (JCheckBoxMenuItem jCb : aSMenuItem) { if (!jCb.getName().equals(s.getAudioSource())) { jCb.setSelected(false); } } } }); jMAudioSource.add(jCBMenuItem); aSMenuItem.add(jCBMenuItem); if (s.getLoaded()){ for (JCheckBoxMenuItem jCb : aSMenuItem) { if (jCb.getName().equals(s.getAudioSource())) { jCb.setSelected(true); } } } else { JCheckBoxMenuItem initJCb = aSMenuItem.get(0); initJCb.setSelected(true); s.setAudioSource(initJCb.getName()); } } } StreamPanel p = new StreamPanel(s); this.setLayout(new BorderLayout()); this.add(p, BorderLayout.CENTER); this.setTitle(s.getName()); this.setVisible(true); if (stream.getLoaded()){ switch (stream.getComm()) { case "AV": jCBAVConv.setSelected(true); stream.setComm("AV"); jCBGStreamer.setSelected(false); break; case "GS": jCBGStreamer.setSelected(true); stream.setComm("GS"); jCBAVConv.setSelected(false); break; case "FF": jCBFFmpeg.setSelected(true); stream.setComm("FF"); stream.setBackFF(true); jCBAVConv.setSelected(false); jCBGStreamer.setSelected(false); break; default: if (stream instanceof SourceWebcam || stream instanceof SourceAudioSource ||stream instanceof SourceImageU) { jCBGStreamer.setSelected(true); stream.setComm("GS"); jCBAVConv.setSelected(false); jCBFFmpeg.setSelected(false); } else { jCBAVConv.setSelected(true); stream.setComm("AV"); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(false); } break; } } else { if (stream instanceof SourceWebcam || stream instanceof SourceAudioSource ||stream instanceof SourceImageU) { jCBGStreamer.setSelected(true); stream.setComm("GS"); jCBAVConv.setSelected(false); jCBFFmpeg.setSelected(false); } else { if (distro.toLowerCase().equals("ubuntu")){ jCBAVConv.setSelected(true); stream.setComm("AV"); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(false); } else { jCBAVConv.setSelected(false); stream.setComm("FF"); stream.setBackFF(true); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(true); } } jMLoop.setVisible(false); } if (stream instanceof SourceImageGif || stream instanceof SourceImage){ jMBackEnd.setVisible(false); jMLoop.setVisible(false); } panel = p; s.setPanelType("Panel"); jCBMoreOptions.setEnabled(true); jMIPCBrand.setVisible(false); jMFireDevice.setVisible(false); if (s instanceof SourceAudioSource) { jMAudioSource.setVisible(true); jMLoop.setVisible(false); } else { jMAudioSource.setVisible(false); } if (s instanceof SourceCustom) { jMBackEnd.setVisible(false); } if (s instanceof SourceMovie || s instanceof SourceMusic) { jMLoop.setVisible(true); jCBLoop.setSelected(s.getLoop()); } } this.setVisible(true); this.setDesktopIcon(new DesktopIcon(this,s)); this.setClosable(true); this.setToolTipText(stream.getName()); pack(); if (stream.getMore()){ jCBMoreOptions.doClick(); } if (stream.getSliders()) { jCBShowSliders.doClick(); } } /** 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() { jMBOptions = new javax.swing.JMenuBar(); jMControls = new javax.swing.JMenu(); jMIPCBrand = new javax.swing.JMenu(); jCBoxFosCamPtz = new javax.swing.JCheckBoxMenuItem(); jCBoxAxisPtz = new javax.swing.JCheckBoxMenuItem(); jCBoxWansCamPtz = new javax.swing.JCheckBoxMenuItem(); jCBShowSliders = new javax.swing.JCheckBoxMenuItem(); jCBMoreOptions = new javax.swing.JCheckBoxMenuItem(); jMScroll = new javax.swing.JMenu(); jCBRightToLeft = new javax.swing.JCheckBoxMenuItem(); jCBLeftToRight = new javax.swing.JCheckBoxMenuItem(); jCBBottomToTop = new javax.swing.JCheckBoxMenuItem(); jCBTopToBottom = new javax.swing.JCheckBoxMenuItem(); jCBHBouncing = new javax.swing.JCheckBoxMenuItem(); jMSpeed = new javax.swing.JMenu(); radioSpeed1 = new javax.swing.JRadioButtonMenuItem(); radioSpeed2 = new javax.swing.JRadioButtonMenuItem(); radioSpeed3 = new javax.swing.JRadioButtonMenuItem(); radioSpeed4 = new javax.swing.JRadioButtonMenuItem(); radioSpeed5 = new javax.swing.JRadioButtonMenuItem(); jMLoop = new javax.swing.JMenu(); jCBLoop = new javax.swing.JCheckBoxMenuItem(); jMRefresh = new javax.swing.JMenu(); jMAudioSource = new javax.swing.JMenu(); jMFireDevice = new javax.swing.JMenu(); jMBackEnd = new javax.swing.JMenu(); jCBGStreamer = new javax.swing.JCheckBoxMenuItem(); jCBAVConv = new javax.swing.JCheckBoxMenuItem(); jCBFFmpeg = new javax.swing.JCheckBoxMenuItem(); setClosable(true); setIconifiable(true); setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/user-desktop.png"))); // NOI18N setVisible(true); addInternalFrameListener(new javax.swing.event.InternalFrameListener() { public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) { } public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) { formInternalFrameClosing(evt); } public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) { } public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) { formInternalFrameIconified(evt); } public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) { formInternalFrameDeiconified(evt); } public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) { formInternalFrameActivated(evt); } public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) { } }); addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { formFocusGained(evt); } }); addAncestorListener(new javax.swing.event.AncestorListener() { public void ancestorAdded(javax.swing.event.AncestorEvent evt) { } public void ancestorRemoved(javax.swing.event.AncestorEvent evt) { } public void ancestorMoved(javax.swing.event.AncestorEvent evt) { formAncestorMoved(evt); } }); jMBOptions.setName("jMBOptions"); // NOI18N jMBOptions.setPreferredSize(new java.awt.Dimension(74, 17)); jMControls.setForeground(new java.awt.Color(74, 7, 1)); jMControls.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/settings2-button-small.png"))); // NOI18N jMControls.setToolTipText("Settings"); jMControls.setFont(new java.awt.Font("Ubuntu", 0, 12)); // NOI18N jMControls.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); jMControls.setName("jMControls"); // NOI18N jMIPCBrand.setText("IPCam PTZ"); jMIPCBrand.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); jMIPCBrand.setName("jMIPCBrand"); // NOI18N jCBoxFosCamPtz.setText("FosCam"); jCBoxFosCamPtz.setName("jCBoxFosCamPtz"); // NOI18N jCBoxFosCamPtz.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBoxFosCamPtzActionPerformed(evt); } }); jMIPCBrand.add(jCBoxFosCamPtz); jCBoxAxisPtz.setText("Axis"); jCBoxAxisPtz.setName("jCBoxAxisPtz"); // NOI18N jCBoxAxisPtz.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBoxAxisPtzActionPerformed(evt); } }); jMIPCBrand.add(jCBoxAxisPtz); jCBoxWansCamPtz.setText("WansCam"); jCBoxWansCamPtz.setName("jCBoxWansCamPtz"); // NOI18N jCBoxWansCamPtz.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBoxWansCamPtzActionPerformed(evt); } }); jMIPCBrand.add(jCBoxWansCamPtz); jMControls.add(jMIPCBrand); jCBShowSliders.setText("Show Control Sliders"); jCBShowSliders.setName("jCBShowSliders"); // NOI18N jCBShowSliders.setPreferredSize(new java.awt.Dimension(177, 15)); jCBShowSliders.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBShowSlidersActionPerformed(evt); } }); jMControls.add(jCBShowSliders); jCBShowSliders.getAccessibleContext().setAccessibleParent(jMControls); jCBMoreOptions.setText("Show more Options"); jCBMoreOptions.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); jCBMoreOptions.setName("jCBMoreOptions"); // NOI18N jCBMoreOptions.setPreferredSize(new java.awt.Dimension(169, 15)); jCBMoreOptions.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBMoreOptionsActionPerformed(evt); } }); jMControls.add(jCBMoreOptions); jCBMoreOptions.getAccessibleContext().setAccessibleParent(jMControls); jMBOptions.add(jMControls); jMScroll.setForeground(new java.awt.Color(74, 7, 1)); jMScroll.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/cruz-small-2.png"))); // NOI18N jMScroll.setToolTipText("Scroll"); jMScroll.setFont(new java.awt.Font("Ubuntu", 0, 12)); // NOI18N jMScroll.setName("jMScroll"); // NOI18N jCBRightToLeft.setText("RightToLeft"); jCBRightToLeft.setName("jCBRightToLeft"); // NOI18N jCBRightToLeft.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBRightToLeftActionPerformed(evt); } }); jMScroll.add(jCBRightToLeft); jCBLeftToRight.setText("LeftToRight"); jCBLeftToRight.setName("jCBLeftToRight"); // NOI18N jCBLeftToRight.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBLeftToRightActionPerformed(evt); } }); jMScroll.add(jCBLeftToRight); jCBBottomToTop.setText("BottomToTop"); jCBBottomToTop.setName("jCBBottomToTop"); // NOI18N jCBBottomToTop.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBBottomToTopActionPerformed(evt); } }); jMScroll.add(jCBBottomToTop); jCBTopToBottom.setText("TopToBottom"); jCBTopToBottom.setName("jCBTopToBottom"); // NOI18N jCBTopToBottom.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBTopToBottomActionPerformed(evt); } }); jMScroll.add(jCBTopToBottom); jCBHBouncing.setText("H-Bouncing"); jCBHBouncing.setName("jCBHBouncing"); // NOI18N jCBHBouncing.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBHBouncingActionPerformed(evt); } }); jMScroll.add(jCBHBouncing); jMSpeed.setText("Speed"); jMSpeed.setName("jMSpeed"); // NOI18N radioSpeed1.setSelected(true); radioSpeed1.setText("1"); radioSpeed1.setName("radioSpeed1"); // NOI18N radioSpeed1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioSpeed1ActionPerformed(evt); } }); jMSpeed.add(radioSpeed1); radioSpeed2.setText("2"); radioSpeed2.setName("radioSpeed2"); // NOI18N radioSpeed2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioSpeed2ActionPerformed(evt); } }); jMSpeed.add(radioSpeed2); radioSpeed3.setText("3"); radioSpeed3.setName("radioSpeed3"); // NOI18N radioSpeed3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioSpeed3ActionPerformed(evt); } }); jMSpeed.add(radioSpeed3); radioSpeed4.setText("4"); radioSpeed4.setName("radioSpeed4"); // NOI18N radioSpeed4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioSpeed4ActionPerformed(evt); } }); jMSpeed.add(radioSpeed4); radioSpeed5.setText("5"); radioSpeed5.setName("radioSpeed5"); // NOI18N radioSpeed5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioSpeed5ActionPerformed(evt); } }); jMSpeed.add(radioSpeed5); jMScroll.add(jMSpeed); //jMBOptions.add(Box.createHorizontalGlue()); jMBOptions.add(jMScroll); jMLoop.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/loop4-small.png"))); // NOI18N jMLoop.setToolTipText("Loop Source"); jMLoop.setName("jMLoop"); // NOI18N jCBLoop.setText("On"); jCBLoop.setName("jCBLoop"); // NOI18N jCBLoop.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBLoopActionPerformed(evt); } }); jMLoop.add(jCBLoop); jMBOptions.add(jMLoop); jMRefresh.setForeground(new java.awt.Color(1, 188, 3)); jMRefresh.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/view-refresh-small.png"))); // NOI18N jMRefresh.setToolTipText("Refresh Properties"); jMRefresh.setFont(new java.awt.Font("Ubuntu Condensed", 1, 8)); // NOI18N jMRefresh.setName("jMRefresh"); // NOI18N jMRefresh.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jMRefreshMouseClicked(evt); } }); jMBOptions.add(jMRefresh); jMAudioSource.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/audiosource.png"))); // NOI18N jMAudioSource.setToolTipText("Audio Source Selector"); jMAudioSource.setName("jMAudioSource"); // NOI18N jMBOptions.add(jMAudioSource); jMFireDevice.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/firewire_small.png"))); // NOI18N jMFireDevice.setToolTipText("FireWire Devices"); jMFireDevice.setName("jMFireDevice"); // NOI18N jMBOptions.add(jMFireDevice); jMBackEnd.setForeground(new java.awt.Color(74, 7, 1)); jMBackEnd.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/bkend-switch5-button-small.png"))); // NOI18N jMBackEnd.setToolTipText("Back-End Switch"); jMBackEnd.setBorderPainted(true); jMBackEnd.setFont(new java.awt.Font("Ubuntu", 0, 12)); // NOI18N jMBackEnd.setName("jMBackEnd"); // NOI18N jCBGStreamer.setText("GStreamer"); jCBGStreamer.setName("jCBGStreamer"); // NOI18N jCBGStreamer.setPreferredSize(new java.awt.Dimension(107, 15)); jCBGStreamer.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBGStreamerActionPerformed(evt); } }); jMBackEnd.add(jCBGStreamer); jCBAVConv.setText("AVConv"); jCBAVConv.setName("jCBAVConv"); // NOI18N jCBAVConv.setPreferredSize(new java.awt.Dimension(107, 15)); jCBAVConv.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBAVConvActionPerformed(evt); } }); jMBackEnd.add(jCBAVConv); jCBFFmpeg.setText("FFmpeg"); jCBFFmpeg.setName("jCBFFmpeg"); // NOI18N jCBFFmpeg.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jCBFFmpegActionPerformed(evt); } }); jMBackEnd.add(jCBFFmpeg); jMBOptions.add(Box.createHorizontalGlue()); jMBOptions.add(jMBackEnd); setJMenuBar(jMBOptions); jMBOptions.getAccessibleContext().setAccessibleParent(this); pack(); }// </editor-fold>//GEN-END:initComponents private void formInternalFrameIconified(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameIconified if (panel!=null){ this.setFrameIcon(panel.getIcon()); } }//GEN-LAST:event_formInternalFrameIconified private void formInternalFrameClosing(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameClosing listener.closeSource(); stream.setLoop(false); PreviewFrameBuilder.unregister(stream); MasterFrameBuilder.unregister(stream); stream.destroy(); stream = null; panel = null; webcamstudio.WebcamStudio.tabControls.removeAll(); webcamstudio.WebcamStudio.tabControls.repaint(); }//GEN-LAST:event_formInternalFrameClosing private void formFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_formFocusGained }//GEN-LAST:event_formFocusGained private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameActivated if (listener!=null){ new Thread(new Runnable(){ @Override public void run() { listener.selectedSource(stream); } }).start(); } }//GEN-LAST:event_formInternalFrameActivated private void jCBMoreOptionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBMoreOptionsActionPerformed switch (stream.getPanelType()) { case "Panel": if (jCBMoreOptions.isSelected()){ if (stream.needSeekCTRL()) { this.setSize(new Dimension(this.getWidth(),443)); this.revalidate(); this.repaint(); } else { this.setSize(new Dimension(this.getWidth(),423)); this.revalidate(); this.repaint(); } stream.setMore(true); } else { this.setSize(new Dimension(this.getWidth(),338)); this.revalidate(); this.repaint(); stream.setMore(false); } break; case "PanelDVB": if (jCBMoreOptions.isSelected()){ this.setSize(new Dimension(this.getWidth(),533)); this.revalidate(); this.repaint(); stream.setMore(true); } else { this.setSize(new Dimension(this.getWidth(),448)); this.revalidate(); this.repaint(); stream.setMore(false); } break; case "PanelURL": if (jCBMoreOptions.isSelected()){ this.setSize(new Dimension(this.getWidth(),463)); this.revalidate(); this.repaint(); stream.setMore(true); } else { this.setSize(new Dimension(this.getWidth(),378)); this.revalidate(); this.repaint(); stream.setMore(false); } break; case "PanelIPCam": if (jCBMoreOptions.isSelected()){ this.setSize(new Dimension(this.getWidth(),463)); this.revalidate(); this.repaint(); stream.setMore(true); } else { this.setSize(new Dimension(this.getWidth(),378)); this.revalidate(); this.repaint(); stream.setMore(false); } break; } }//GEN-LAST:event_jCBMoreOptionsActionPerformed private void jCBGStreamerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBGStreamerActionPerformed if (jCBGStreamer.isSelected()){ stream.setComm("GS"); stream.setBackFF(false); jCBAVConv.setSelected(false); jCBFFmpeg.setSelected(false); if (listener!=null){ new Thread(new Runnable(){ @Override public void run() { listener.selectedSource(stream); } }).start(); } } else { jCBAVConv.setSelected(true); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(false); stream.setBackFF(false); stream.setComm("AV"); } }//GEN-LAST:event_jCBGStreamerActionPerformed private void jCBAVConvActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBAVConvActionPerformed if (jCBAVConv.isSelected()){ stream.setComm("AV"); stream.setBackFF(false); jCBGStreamer.setSelected(false); jCBFFmpeg.setSelected(false); if (listener!=null){ new Thread(new Runnable(){ @Override public void run() { listener.selectedSource(stream); } }).start(); } } else { jCBGStreamer.setSelected(true); jCBAVConv.setSelected(false); jCBFFmpeg.setSelected(false); stream.setComm("GS"); stream.setBackFF(false); } }//GEN-LAST:event_jCBAVConvActionPerformed private void jCBShowSlidersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBShowSlidersActionPerformed if (jCBShowSliders.isSelected()){ this.setSize(new Dimension(298,this.getHeight())); this.revalidate(); this.repaint(); stream.setSliders(true); } else { this.setSize(new Dimension(136,this.getHeight())); this.revalidate(); this.repaint(); stream.setSliders(false); } }//GEN-LAST:event_jCBShowSlidersActionPerformed private void jCBoxFosCamPtzActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBoxFosCamPtzActionPerformed if (jCBoxFosCamPtz.isSelected()){ stream.setPtzBrand("foscam"); jCBoxAxisPtz.setSelected(false); jCBoxWansCamPtz.setSelected(false); } else { jCBoxAxisPtz.setSelected(true); jCBoxFosCamPtz.setSelected(false); jCBoxWansCamPtz.setSelected(false); stream.setPtzBrand("axis"); } }//GEN-LAST:event_jCBoxFosCamPtzActionPerformed private void jCBoxAxisPtzActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBoxAxisPtzActionPerformed if (jCBoxAxisPtz.isSelected()){ stream.setPtzBrand("axis"); jCBoxFosCamPtz.setSelected(false); jCBoxWansCamPtz.setSelected(false); } else { jCBoxFosCamPtz.setSelected(true); jCBoxAxisPtz.setSelected(false); jCBoxWansCamPtz.setSelected(false); stream.setPtzBrand("foscam"); } }//GEN-LAST:event_jCBoxAxisPtzActionPerformed private void jCBRightToLeftActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBRightToLeftActionPerformed final int oldBkX = stream.getX(); runMe = true; if (jCBRightToLeft.isSelected()) { jCBLeftToRight.setEnabled(false); jCBBottomToTop.setEnabled(false); jCBTopToBottom.setEnabled(false); jCBHBouncing.setEnabled(false); Thread scrollRtL = new Thread(new Runnable() { int deltaX = 0; @Override public void run() { int startX = stream.getX(); while (runMe && stream.isPlaying()){ final int mixerW = MasterMixer.getInstance().getWidth(); final int streamW = stream.getWidth(); // System.out.println("deltax="+(startX+streamW)); if ((startX+streamW) <= 0) { stream.setX(mixerW); } final int rate = stream.getRate(); for (int i = 0; i<rate;i++){ if (runMe) { startX = stream.getX(); stream.setX(startX - speed); Tools.sleep(1000/rate); } else { stream.setX(oldBkX); break; } } } stream.setX(oldBkX); } }); scrollRtL.setPriority(Thread.MIN_PRIORITY); scrollRtL.start(); } else { runMe = false; stream.setX(oldBkX); jCBLeftToRight.setEnabled(true); jCBBottomToTop.setEnabled(true); jCBTopToBottom.setEnabled(true); jCBHBouncing.setEnabled(true); } }//GEN-LAST:event_jCBRightToLeftActionPerformed private void jCBLeftToRightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBLeftToRightActionPerformed final int oldBkX = stream.getX(); runMe = true; if (jCBLeftToRight.isSelected()) { jCBRightToLeft.setEnabled(false); jCBBottomToTop.setEnabled(false); jCBTopToBottom.setEnabled(false); jCBHBouncing.setEnabled(false); Thread scrollRtL = new Thread(new Runnable() { @Override public void run() { int startX = stream.getX(); while (runMe && stream.isPlaying()){ final int mixerW = MasterMixer.getInstance().getWidth(); final int streamW = stream.getWidth(); // System.out.println("deltax="+(startX+streamW)); if ((startX) >= mixerW) { stream.setX(-streamW); } final int rate = stream.getRate(); for (int i = 0; i<rate;i++){ if (runMe) { startX = stream.getX(); stream.setX(startX + speed); Tools.sleep(1000/rate); } else { stream.setX(oldBkX); break; } } } stream.setX(oldBkX); } }); scrollRtL.setPriority(Thread.MIN_PRIORITY); scrollRtL.start(); } else { runMe = false; stream.setX(oldBkX); jCBRightToLeft.setEnabled(true); jCBBottomToTop.setEnabled(true); jCBTopToBottom.setEnabled(true); jCBHBouncing.setEnabled(true); } }//GEN-LAST:event_jCBLeftToRightActionPerformed private void jCBBottomToTopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBBottomToTopActionPerformed final int oldBkY = stream.getY(); runMe = true; if (jCBBottomToTop.isSelected()) { jCBLeftToRight.setEnabled(false); jCBRightToLeft.setEnabled(false); jCBTopToBottom.setEnabled(false); jCBHBouncing.setEnabled(false); Thread scrollRtL = new Thread(new Runnable() { int deltaY = 0; @Override public void run() { int startY = stream.getY(); while (runMe && stream.isPlaying()){ final int mixerH = MasterMixer.getInstance().getHeight(); final int streamH = stream.getHeight(); // System.out.println("deltax="+(startX+streamW)); if ((startY+streamH) <= 0) { stream.setY(mixerH); } final int rate = stream.getRate(); for (int i = 0; i<rate;i++){ if (runMe) { startY = stream.getY(); stream.setY(startY - speed); Tools.sleep(1000/rate); } else { stream.setY(oldBkY); break; } } } stream.setY(oldBkY); } }); scrollRtL.setPriority(Thread.MIN_PRIORITY); scrollRtL.start(); } else { runMe = false; stream.setY(oldBkY); jCBLeftToRight.setEnabled(true); jCBRightToLeft.setEnabled(true); jCBTopToBottom.setEnabled(true); jCBHBouncing.setEnabled(true); } }//GEN-LAST:event_jCBBottomToTopActionPerformed private void jCBTopToBottomActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBTopToBottomActionPerformed final int oldBkY = stream.getY(); runMe = true; if (jCBTopToBottom.isSelected()) { jCBLeftToRight.setEnabled(false); jCBBottomToTop.setEnabled(false); jCBRightToLeft.setEnabled(false); jCBHBouncing.setEnabled(false); Thread scrollRtL = new Thread(new Runnable() { @Override public void run() { int startY = stream.getY(); while (runMe && stream.isPlaying()){ final int mixerH = MasterMixer.getInstance().getHeight(); final int streamH = stream.getHeight(); // System.out.println("deltax="+(startX+streamW)); if ((startY) >= mixerH) { stream.setY(-streamH); } final int rate = stream.getRate(); for (int i = 0; i < rate; i++){ if (runMe) { startY = stream.getY(); stream.setY(startY + speed); Tools.sleep(1000/rate); } else { stream.setY(oldBkY); break; } } } stream.setY(oldBkY); } }); scrollRtL.setPriority(Thread.MIN_PRIORITY); scrollRtL.start(); } else { runMe = false; stream.setY(oldBkY); jCBLeftToRight.setEnabled(true); jCBBottomToTop.setEnabled(true); jCBRightToLeft.setEnabled(true); jCBHBouncing.setEnabled(true); } }//GEN-LAST:event_jCBTopToBottomActionPerformed private void jCBHBouncingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBHBouncingActionPerformed final int oldBkX = stream.getX(); runMe = true; if (jCBHBouncing.isSelected()) { jCBLeftToRight.setEnabled(false); jCBBottomToTop.setEnabled(false); jCBTopToBottom.setEnabled(false); jCBRightToLeft.setEnabled(false); Thread scrollRtL = new Thread(new Runnable() { int deltaX = 0; @Override public void run() { int startX = stream.getX(); boolean oneWay = true; boolean toLeft = true; final int rate = stream.getRate(); final int mixerW = MasterMixer.getInstance().getWidth(); while (runMe && stream.isPlaying()){ int streamW = stream.getWidth(); for (int i = 0; i<rate;i++){ if (runMe) { startX = stream.getX(); if (startX > 0 && oneWay) { toLeft = true; stream.setX(startX - speed); } if (startX <= 0 || !oneWay) { toLeft = false; oneWay = false; stream.setX(startX + speed); if ((startX+streamW) >= mixerW) { oneWay = true; } } Tools.sleep(1000/rate); } else { stream.setX(oldBkX); break; } } oneWay = !((startX+streamW) < mixerW && !toLeft); } stream.setX(oldBkX); } }); scrollRtL.setPriority(Thread.MIN_PRIORITY); scrollRtL.start(); } else { runMe = false; stream.setX(oldBkX); jCBLeftToRight.setEnabled(true); jCBBottomToTop.setEnabled(true); jCBTopToBottom.setEnabled(true); jCBRightToLeft.setEnabled(true); } }//GEN-LAST:event_jCBHBouncingActionPerformed private void jCBoxWansCamPtzActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBoxWansCamPtzActionPerformed if (jCBoxWansCamPtz.isSelected()){ stream.setPtzBrand("wanscam"); jCBoxFosCamPtz.setSelected(false); jCBoxAxisPtz.setSelected(false); } else { jCBoxFosCamPtz.setSelected(true); jCBoxAxisPtz.setSelected(false); stream.setPtzBrand("foscam"); } }//GEN-LAST:event_jCBoxWansCamPtzActionPerformed private void jCBFFmpegActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBFFmpegActionPerformed if (jCBFFmpeg.isSelected()){ stream.setComm("FF"); stream.setBackFF(true); jCBAVConv.setSelected(false); jCBGStreamer.setSelected(false); if (listener!=null){ new Thread(new Runnable(){ @Override public void run() { listener.selectedSource(stream); } }).start(); } } else { stream.setComm("AV"); stream.setBackFF(false); jCBAVConv.setSelected(true); jCBGStreamer.setSelected(false); } }//GEN-LAST:event_jCBFFmpegActionPerformed private void jMRefreshMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMRefreshMouseClicked if (listener!=null){ new Thread(new Runnable(){ @Override public void run() { listener.selectedSource(stream); } }).start(); } }//GEN-LAST:event_jMRefreshMouseClicked private void jCBLoopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBLoopActionPerformed if (jCBLoop.isSelected()){ stream.setLoop(true); } else { stream.setLoop(false); } }//GEN-LAST:event_jCBLoopActionPerformed private void radioSpeed1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioSpeed1ActionPerformed speed = 1; radioSpeed2.setSelected(false); radioSpeed3.setSelected(false); radioSpeed4.setSelected(false); radioSpeed5.setSelected(false); }//GEN-LAST:event_radioSpeed1ActionPerformed private void radioSpeed2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioSpeed2ActionPerformed speed = 3; radioSpeed1.setSelected(false); radioSpeed3.setSelected(false); radioSpeed4.setSelected(false); radioSpeed5.setSelected(false); }//GEN-LAST:event_radioSpeed2ActionPerformed private void radioSpeed3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioSpeed3ActionPerformed speed = 5; radioSpeed1.setSelected(false); radioSpeed2.setSelected(false); radioSpeed4.setSelected(false); radioSpeed5.setSelected(false); }//GEN-LAST:event_radioSpeed3ActionPerformed private void radioSpeed4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioSpeed4ActionPerformed speed = 7; radioSpeed1.setSelected(false); radioSpeed2.setSelected(false); radioSpeed3.setSelected(false); radioSpeed5.setSelected(false); }//GEN-LAST:event_radioSpeed4ActionPerformed private void radioSpeed5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_radioSpeed5ActionPerformed speed = 9; radioSpeed1.setSelected(false); radioSpeed2.setSelected(false); radioSpeed3.setSelected(false); radioSpeed4.setSelected(false); }//GEN-LAST:event_radioSpeed5ActionPerformed private void formAncestorMoved(javax.swing.event.AncestorEvent evt) {//GEN-FIRST:event_formAncestorMoved stream.setPanelX(this.getX()); stream.setPanelY(this.getY()); stream.setMore(jCBMoreOptions.isSelected()); stream.setSliders(jCBShowSliders.isSelected()); }//GEN-LAST:event_formAncestorMoved private void formInternalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameDeiconified if (listener!=null){ new Thread(new Runnable(){ @Override public void run() { listener.selectedSource(stream); } }).start(); } }//GEN-LAST:event_formInternalFrameDeiconified // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JCheckBoxMenuItem jCBAVConv; private javax.swing.JCheckBoxMenuItem jCBBottomToTop; private javax.swing.JCheckBoxMenuItem jCBFFmpeg; private javax.swing.JCheckBoxMenuItem jCBGStreamer; private javax.swing.JCheckBoxMenuItem jCBHBouncing; private javax.swing.JCheckBoxMenuItem jCBLeftToRight; private javax.swing.JCheckBoxMenuItem jCBLoop; private javax.swing.JCheckBoxMenuItem jCBMoreOptions; private javax.swing.JCheckBoxMenuItem jCBRightToLeft; private javax.swing.JCheckBoxMenuItem jCBShowSliders; private javax.swing.JCheckBoxMenuItem jCBTopToBottom; private javax.swing.JCheckBoxMenuItem jCBoxAxisPtz; private javax.swing.JCheckBoxMenuItem jCBoxFosCamPtz; private javax.swing.JCheckBoxMenuItem jCBoxWansCamPtz; private javax.swing.JMenu jMAudioSource; private javax.swing.JMenuBar jMBOptions; private javax.swing.JMenu jMBackEnd; private javax.swing.JMenu jMControls; private javax.swing.JMenu jMFireDevice; private javax.swing.JMenu jMIPCBrand; private javax.swing.JMenu jMLoop; private javax.swing.JMenu jMRefresh; private javax.swing.JMenu jMScroll; private javax.swing.JMenu jMSpeed; private javax.swing.JRadioButtonMenuItem radioSpeed1; private javax.swing.JRadioButtonMenuItem radioSpeed2; private javax.swing.JRadioButtonMenuItem radioSpeed3; private javax.swing.JRadioButtonMenuItem radioSpeed4; private javax.swing.JRadioButtonMenuItem radioSpeed5; // End of variables declaration//GEN-END:variables }