/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* ChannelPanel.java
*
* Created on 23-Apr-2012, 12:17:31 AM
*/
package webcamstudio.components;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import java.util.prefs.Preferences;
import javax.swing.AbstractAction;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JSpinner;
import javax.swing.JToggleButton;
import webcamstudio.WebcamStudio;
import static webcamstudio.WebcamStudio.theme;
import webcamstudio.channels.MasterChannels;
import webcamstudio.mixers.PrePlayer;
import webcamstudio.mixers.SystemPlayer;
import webcamstudio.remote.Listener;
import webcamstudio.remote.WebRemote;
import webcamstudio.streams.SourceChannel;
import webcamstudio.streams.Stream;
import webcamstudio.studio.Studio;
import webcamstudio.util.Tools;
/**
*
* @author patrick (modified by karl)
*/
public class ChannelPanel extends javax.swing.JPanel implements WebcamStudio.Listener, Studio.Listener, Listener {
MasterChannels master = MasterChannels.getInstance();
private final DefaultListModel model = new DefaultListModel();
private final DefaultComboBoxModel aModel = new DefaultComboBoxModel();
private final ArrayList<String> CHCurrNext = new ArrayList<>();
private final ArrayList<Integer> CHTimers = new ArrayList<>();
private final ArrayList<String> ListChannels = new ArrayList<>();
private final WebRemote remote;
ArrayList<Stream> streamS = MasterChannels.getInstance().getStreams();
String selectChannel=null;
int CHon =0;
String CHNxName = null;
int CHNextTime =0;
public static int timeToTimer = 0;
public static int totalToTimer = 0;
int CHTimer = 0;
private Timer CHt=new Timer();
String CHptS= null;
private Boolean StopCHpt=false;
private static boolean inTimer=false;
JPopupMenu remotePopup = new JPopupMenu();
private static String remUser = "webcamstudio";
private static String remPsw = "webcamstudio";
private static int remPort = 8000;
Preferences preferences = Preferences.userNodeForPackage(this.getClass());
@Override
public void resetAutoPLBtnState(ActionEvent evt) {
btnAutoPlayList.setEnabled(true);
}
@Override
public void requestStart() {
btnSelect.doClick();
listenerCPOP.requestStart();
}
@Override
public void requestStop() {
btnStopOnlyStream.doClick();
listenerCPOP.requestStop();
}
@Override
public void listening(String localURL) {
}
@Override
public void requestReset() {
listenerCPMP.requestReset();
listenerCPOP.requestReset();
}
@Override
public void resetSinks(ActionEvent evt) { // used resetSinks to AutoPlay from command line.
btnSelect.doClick();
}
@Override
public String requestlogin(String login) {
String res = "";
String [] loginSplit = login.split("\\?");
String userPsw = loginSplit[1].replace("j_username=", "");
userPsw = userPsw.replace("j_password=", "");
userPsw = userPsw.replace(" HTTP/1.1", "");
// System.out.println("userPsw: "+userPsw);
if (!userPsw.equals("&")) {
String [] userPswSplit = userPsw.split("&");
if (!userPsw.equals("&")) {
if (userPswSplit[0].equals(remUser) && userPswSplit[1].equals(remPsw)) {
boolean play = false;
for (Stream stream : streamS) {
if (!stream.getClass().toString().contains("Sink")) {
if (stream.isPlaying()){
play = true;
}
}
}
if (play) {
res = "/run";
} else {
res = "/stop";
}
} else {
res = "/error";
}
}
} else {
res = "/login";
}
return res;
}
@Override
public void setRemoteOn() {
tglRemote.doClick();
}
public interface Listener {
public void resetButtonsStates(ActionEvent evt);
public void requestReset();
public void requestStop();
public void requestStart();
}
static Listener listenerCPOP = null;
public static void setListenerCPOPanel(Listener l) {
listenerCPOP = l;
}
static Listener listenerCPMP = null;
public static void setListenerCPMPanel(Listener l) {
listenerCPMP = l;
}
/**
* Creates new form ChannelPanel
*/
@SuppressWarnings("unchecked")
public ChannelPanel() {
initComponents();
remoteInitPopUp();
final ChannelPanel instanceChPnl = this;
lstChannels.setModel(model);
lstNextChannel.setModel(aModel);
WebcamStudio.setListenerCP(instanceChPnl);
Studio.setListener(this);
remote = new WebRemote(this);
loadPrefs();
((JSpinner.DefaultEditor)ChDuration.getEditor()).getTextField().addKeyListener(new KeyListener(){
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
// System.out.println("PRESSED!");
String inputN = ((JSpinner.DefaultEditor)ChDuration.getEditor()).getTextField().getText();
if (inputN != null) {
try {
CHTimer = Integer.parseInt(inputN) * 1000;
} catch(NumberFormatException ex){
// System.out.println("Characters Are Not Allowed !!!");
}
// CHTimer = ChDuration.getValue().hashCode()* 1000;
if (lstChannels.getSelectedIndex() != -1) {
int ChIndex = lstChannels.getSelectedIndex();
CHTimers.set(ChIndex, CHTimer);
}
}
}
@Override
public void keyTyped(KeyEvent e) {
}
});
}
private void loadPrefs() {
remUser = preferences.get("remoteuser", "webcamstudio");
remPsw = preferences.get("remotepsw", "webcamstudio");
remPort = preferences.getInt("remoteport", 8000);
remote.setPort(remPort);
}
public void savePrefs() {
preferences.put("remoteuser", remUser);
preferences.put("remotepsw", remPsw);
preferences.putInt("remoteport", remPort);
}
public static void setRemPsw (String psw) {
remPsw = psw;
}
public static String getRemPsw () {
return remPsw;
}
public static void setRemUsr (String usr) {
remUser = usr;
}
public static String getRemUsr () {
return remUser;
}
public static void setRemPort (int port) {
remPort = port;
}
public static int getRemPort () {
return remPort;
}
public static void setInTimer (boolean inT) {
inTimer = inT;
}
public static boolean getInTimer () {
return inTimer;
}
/**
* 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() {
lstChannelsScroll = new javax.swing.JScrollPane();
lstChannels = new javax.swing.JList();
lblChName = new javax.swing.JLabel();
txtName = new javax.swing.JTextField();
btnAdd = new javax.swing.JButton();
btnRemove = new javax.swing.JButton();
btnSelect = new javax.swing.JButton();
btnUpdate = new javax.swing.JButton();
lstNextChannel = new javax.swing.JComboBox();
ChDuration = new javax.swing.JSpinner();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
StopCHTimer = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
CHProgressTime = new javax.swing.JProgressBar();
btnStopAllStream = new javax.swing.JButton();
btnRenameCh = new javax.swing.JButton();
btnAutoPlayList = new javax.swing.JButton();
btnUp = new javax.swing.JButton();
btnDown = new javax.swing.JButton();
btnClearAllCh = new javax.swing.JButton();
tglRemote = new javax.swing.JToggleButton();
btnStopOnlyStream = new javax.swing.JButton();
PanelResource = new javax.swing.JPanel();
lblOnAir = new javax.swing.JLabel();
lstChannelsScroll.setName("lstChannelsScroll"); // NOI18N
lstChannels.setFont(new java.awt.Font("Noto Sans", 0, 18)); // NOI18N
lstChannels.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]; }
});
lstChannels.setToolTipText("Double Click to play selected channel");
lstChannels.setMinimumSize(new java.awt.Dimension(65, 100));
lstChannels.setName("lstChannels"); // NOI18N
lstChannels.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
lstChannelsMouseClicked(evt);
}
});
lstChannels.addContainerListener(new java.awt.event.ContainerAdapter() {
public void componentAdded(java.awt.event.ContainerEvent evt) {
lstChannelsComponentAdded(evt);
}
});
lstChannels.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
lstChannelsValueChanged(evt);
}
});
lstChannelsScroll.setViewportView(lstChannels);
lblChName.setFont(new java.awt.Font("Monospaced", 0, 12)); // NOI18N
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("webcamstudio/Languages"); // NOI18N
lblChName.setText(bundle.getString("Name")); // NOI18N
lblChName.setName("lblChName"); // NOI18N
txtName.setName("txtName"); // NOI18N
btnAdd.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/list-add.png"))); // NOI18N
btnAdd.setToolTipText(bundle.getString("ADD_CHANNEL")); // NOI18N
btnAdd.setName("btnAdd"); // NOI18N
btnAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddActionPerformed(evt);
}
});
btnRemove.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/process-stop.png"))); // NOI18N
btnRemove.setToolTipText(bundle.getString("REMOVE_CHANNEL")); // NOI18N
btnRemove.setEnabled(false);
btnRemove.setName("btnRemove"); // NOI18N
btnRemove.setPreferredSize(new java.awt.Dimension(32, 30));
btnRemove.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnRemoveActionPerformed(evt);
}
});
btnSelect.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/media-playback-start.png"))); // NOI18N
btnSelect.setToolTipText(bundle.getString("APPLY_CHANNEL")); // NOI18N
btnSelect.setEnabled(false);
btnSelect.setMinimumSize(new java.awt.Dimension(32, 30));
btnSelect.setName("btnSelect"); // NOI18N
btnSelect.setPreferredSize(new java.awt.Dimension(32, 30));
btnSelect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSelectActionPerformed(evt);
}
});
btnUpdate.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/view-refresh.png"))); // NOI18N
btnUpdate.setToolTipText(bundle.getString("UPDATE_CHANNEL")); // NOI18N
btnUpdate.setEnabled(false);
btnUpdate.setMinimumSize(new java.awt.Dimension(32, 25));
btnUpdate.setName("btnUpdate"); // NOI18N
btnUpdate.setPreferredSize(new java.awt.Dimension(32, 30));
btnUpdate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnUpdateActionPerformed(evt);
}
});
lstNextChannel.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
lstNextChannel.setName("lstNextChannel"); // NOI18N
lstNextChannel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lstNextChannelActionPerformed(evt);
}
});
ChDuration.setModel(new javax.swing.SpinnerNumberModel());
ChDuration.setToolTipText("0 = Infinite");
ChDuration.setName("ChDuration"); // NOI18N
ChDuration.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
ChDurationStateChanged(evt);
}
});
jLabel2.setText(bundle.getString("NEXT_CHANNEL")); // NOI18N
jLabel2.setName("jLabel2"); // NOI18N
jLabel3.setText(bundle.getString("DURATION")); // NOI18N
jLabel3.setName("jLabel3"); // NOI18N
StopCHTimer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/media-playback-stop-bk.png"))); // NOI18N
StopCHTimer.setText(bundle.getString("STOP_CHANNEL_TIMER")); // NOI18N
StopCHTimer.setToolTipText("Stop Timer Only");
StopCHTimer.setEnabled(false);
StopCHTimer.setName("StopCHTimer"); // NOI18N
StopCHTimer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
StopCHTimerActionPerformed(evt);
}
});
jLabel4.setFont(new java.awt.Font("Ubuntu", 1, 14)); // NOI18N
jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel4.setText(bundle.getString("CURRENT_CHANNEL_TIMER")); // NOI18N
jLabel4.setName("jLabel4"); // NOI18N
CHProgressTime.setFont(new java.awt.Font("Noto Sans", 0, 18)); // NOI18N
CHProgressTime.setMinimumSize(new java.awt.Dimension(10, 40));
CHProgressTime.setName("CHProgressTime"); // NOI18N
btnStopAllStream.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/media-playback-stop-bk.png"))); // NOI18N
btnStopAllStream.setText(bundle.getString("STOP_ALL")); // NOI18N
btnStopAllStream.setToolTipText("Stop All");
btnStopAllStream.setName("btnStopAllStream"); // NOI18N
btnStopAllStream.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnStopAllStreamActionPerformed(evt);
}
});
btnRenameCh.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/edit.png"))); // NOI18N
btnRenameCh.setToolTipText(bundle.getString("RENAME_CHANNEL")); // NOI18N
btnRenameCh.setEnabled(false);
btnRenameCh.setName("btnRenameCh"); // NOI18N
btnRenameCh.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnRenameChActionPerformed(evt);
}
});
btnAutoPlayList.setText("Auto Play-List");
btnAutoPlayList.setToolTipText("Do an Automatic PlayList. Works Only with \"Load Media Folder\".");
btnAutoPlayList.setEnabled(false);
btnAutoPlayList.setName("btnAutoPlayList"); // NOI18N
btnAutoPlayList.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAutoPlayListActionPerformed(evt);
}
});
btnUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/go-up.png"))); // NOI18N
btnUp.setToolTipText("Move Channel UP");
btnUp.setEnabled(false);
btnUp.setName("btnUp"); // NOI18N
btnUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnUpActionPerformed(evt);
}
});
btnDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/go-down.png"))); // NOI18N
btnDown.setToolTipText("Move Channel DOWN");
btnDown.setEnabled(false);
btnDown.setName("btnDown"); // NOI18N
btnDown.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnDownActionPerformed(evt);
}
});
btnClearAllCh.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/button-small-clear.png"))); // NOI18N
btnClearAllCh.setToolTipText("Remove All Channels");
btnClearAllCh.setEnabled(false);
btnClearAllCh.setName("btnClearAllCh"); // NOI18N
btnClearAllCh.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnClearAllChActionPerformed(evt);
}
});
tglRemote.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/rss.png"))); // NOI18N
tglRemote.setToolTipText("Remote Control (Beta) - Right Click for Settings");
tglRemote.setEnabled(false);
tglRemote.setFocusable(false);
tglRemote.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tglRemote.setMaximumSize(new java.awt.Dimension(29, 28));
tglRemote.setMinimumSize(new java.awt.Dimension(25, 25));
tglRemote.setName("tglRemote"); // NOI18N
tglRemote.setPreferredSize(new java.awt.Dimension(28, 29));
tglRemote.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/rss.png"))); // NOI18N
tglRemote.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/rss_selected.png"))); // NOI18N
tglRemote.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
tglRemote.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tglRemoteActionPerformed(evt);
}
});
tglRemote.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mousePressed(java.awt.event.MouseEvent evt) {
JToggleButton button = ((JToggleButton) evt.getSource());
if (!button.isSelected()) {
remoteRightMousePressed(evt);
}
}
});
btnStopOnlyStream.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/media-playback-stop-bk.png"))); // NOI18N
btnStopOnlyStream.setText(bundle.getString("STREAMS")); // NOI18N
btnStopOnlyStream.setToolTipText("Stop Streams Only");
btnStopOnlyStream.setName("btnStopOnlyStream"); // NOI18N
btnStopOnlyStream.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnStopOnlyStreamActionPerformed(evt);
}
});
PanelResource.setName("PanelResource"); // NOI18N
PanelResource.setLayout(new java.awt.BorderLayout());
lblOnAir.setFont(new java.awt.Font("Ubuntu", 1, 18)); // NOI18N
lblOnAir.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblOnAir.setText("ON AIR");
lblOnAir.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
lblOnAir.setName("lblOnAir"); // NOI18N
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)
.addGroup(layout.createSequentialGroup()
.addComponent(PanelResource, javax.swing.GroupLayout.PREFERRED_SIZE, 700, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblOnAir, javax.swing.GroupLayout.DEFAULT_SIZE, 446, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(lblChName)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtName)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnUp, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(1, 1, 1)
.addComponent(btnDown, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnRenameCh, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnUpdate, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnRemove, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnClearAllCh, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0))
.addComponent(lstChannelsScroll))
.addGap(12, 12, 12)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addGap(29, 29, 29)
.addComponent(ChDuration))
.addComponent(CHProgressTime, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(btnStopAllStream)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnStopOnlyStream, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(StopCHTimer))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lstNextChannel, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(btnAutoPlayList, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tglRemote, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(btnSelect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(btnAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnRenameCh, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tglRemote, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addComponent(btnAutoPlayList, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblChName))
.addComponent(btnDown, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnUp, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnClearAllCh, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnUpdate, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnRemove, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(lstNextChannel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(ChDuration, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4)
.addGap(3, 3, 3)
.addComponent(CHProgressTime, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnStopAllStream)
.addComponent(btnStopOnlyStream)
.addComponent(StopCHTimer))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnSelect, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(lstChannelsScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(PanelResource, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblOnAir, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
btnStopAllStream.getAccessibleContext().setAccessibleParent(StopCHTimer);
}// </editor-fold>//GEN-END:initComponents
private void lstChannelsValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstChannelsValueChanged
if (lstChannels.getSelectedIndex() != -1) {
selectChannel = lstChannels.getSelectedValue().toString();
int SelectCHIndex = lstChannels.getSelectedIndex();
lstNextChannel.setSelectedItem(CHCurrNext.get(SelectCHIndex));
ChDuration.setValue(CHTimers.get(SelectCHIndex)/1000);
btnRemove.setEnabled(!inTimer);
btnUp.setEnabled(!inTimer);
btnDown.setEnabled(!inTimer);
btnSelect.setEnabled(!inTimer);
btnRenameCh.setEnabled(!inTimer);
btnAdd.setEnabled(!inTimer);
btnClearAllCh.setEnabled(!inTimer);
StopCHTimer.setEnabled(inTimer);
btnUpdate.setEnabled(true);
tglRemote.setEnabled(true);
} else {
btnRemove.setEnabled(false);
btnSelect.setEnabled(false);
btnUpdate.setEnabled(false);
btnClearAllCh.setEnabled(false);
tglRemote.setEnabled(false);
}
}//GEN-LAST:event_lstChannelsValueChanged
@SuppressWarnings("unchecked")
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddActionPerformed
String name = txtName.getText();
boolean noDuplicateCh = true;
for (String chName : ListChannels){
if (name.equals(chName)){
noDuplicateCh = false;
break;
}
}
if (name.length() > 0 && noDuplicateCh) {
master.addChannel(name);
master.addChTransitions(name);
model.addElement(name);
aModel.addElement(name);
CHCurrNext.add(name);
CHTimers.add(CHTimer);
ListChannels.add(name);
lstChannels.revalidate();
lstNextChannel.revalidate();
lstChannels.setSelectedValue(name, true);
} else {
if (!noDuplicateCh){
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Channel "+name+" Duplicated !!!");
ResourceMonitor.getInstance().addMessage(label);
}
}
}//GEN-LAST:event_btnAddActionPerformed
private void btnRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemoveActionPerformed
String name = lstChannels.getSelectedValue().toString();
int SelectCHIndex = lstChannels.getSelectedIndex();
master.removeChannel(name);
model.removeElement(name);
aModel.removeElement(name);
CHCurrNext.remove(name);
CHTimers.remove(SelectCHIndex);
ChDuration.setValue(0);
ListChannels.remove(name);
lstChannels.revalidate();
lstNextChannel.revalidate();
btnRenameCh.setEnabled(false);
btnUp.setEnabled(false);
btnDown.setEnabled(false);
btnRemove.setEnabled(false);
StopCHTimer.setEnabled(inTimer);
}//GEN-LAST:event_btnRemoveActionPerformed
@Override
public ArrayList<String> getCHCurrNext () {
return CHCurrNext;
}
@Override
public ArrayList<Integer> getCHTimers () {
return CHTimers;
}
private void remoteInitPopUp(){
JMenuItem remoteSettings = new JMenuItem (new AbstractAction("Remote Settings") {
@Override
public void actionPerformed(ActionEvent e) {
savePrefs();
RemoteSettings remoteSet = new RemoteSettings();
remoteSet.setLocationRelativeTo(WebcamStudio.cboAnimations);
remoteSet.setAlwaysOnTop(true);
remoteSet.setVisible(true);
}
});
remoteSettings.setIcon(new ImageIcon(getClass().getResource("/webcamstudio/resources/tango/working-4.png"))); // NOI18N
remotePopup.add(remoteSettings);
}
private void remoteRightMousePressed(java.awt.event.MouseEvent evt) {
if (evt.isPopupTrigger()) {
remotePopup.show(evt.getComponent(), evt.getX(), evt.getY());
}
}
@Override
public void removeChannels(String removeSc, int a) {
model.removeElement(removeSc);
aModel.removeElement(removeSc);
CHCurrNext.remove(removeSc);
CHTimers.remove(a);
ListChannels.remove(removeSc);
}
@SuppressWarnings("unchecked")
@Override
public void addLoadingChannel(String name) {
if (name.length() > 0) {
model.addElement(name);
aModel.addElement(name);
ListChannels.add(name);
lstChannels.revalidate();
}
lstChannels.setSelectedValue(ListChannels.get(0), true);
}
@Override
public void stopChTime(ActionEvent evt) {
RemoteStopCHTimerActionPerformed();
}
@Override
public void resetBtnStates(ActionEvent evt) {
btnRenameCh.setEnabled(false);
btnClearAllCh.setEnabled(false);
btnUp.setEnabled(false);
btnDown.setEnabled(false);
btnRemove.setEnabled(false);
btnSelect.setEnabled(false);
txtName.setText("");
CHCurrNext.clear();
CHTimers.clear();
StopCHTimer.setEnabled(false);
ChDuration.setValue(0);
if (theme.equals("Dark")) {
lblOnAir.setForeground(Color.WHITE);
} else {
lblOnAir.setForeground(Color.BLACK);
}
}
class UpdateCHtUITask extends TimerTask {
@Override
public void run() {
CHptS=null;
int CHpTemptime = CHNextTime/1000;
CHProgressTime.setValue(0);
CHProgressTime.setStringPainted(true);
CHProgressTime.setMaximum(CHpTemptime);
while (CHpTemptime>0 && StopCHpt==false){
timeToTimer = CHpTemptime;
CHptS = Integer.toString(CHpTemptime);
CHProgressTime.setValue(CHpTemptime);
CHProgressTime.setString(CHptS);
Tools.sleep(1000);
CHpTemptime --;
}
UpdateCHtUITask.this.stop();
}
public void stop() {
StopCHpt=true;
}
}
class TSelectActionPerformed extends TimerTask {
@Override
public void run(){
CHon = lstChannels.getSelectedIndex();
CHNxName = CHCurrNext.get(CHon);
int n =0;
for (String h : ListChannels) {
if (h.equals(CHNxName)) {
CHNextTime = CHTimers.get(n);
}
n += 1;
}
totalToTimer = CHNextTime/1000;
lstChannels.setSelectedValue(CHNxName, true);
master.selectChannel(CHNxName);
String name = lstChannels.getSelectedValue().toString();
System.out.println("Apply Select: "+name);
// master.stopTextCDown();
if (CHNextTime != 0) {
CHt=new Timer();
CHt.schedule(new TSelectActionPerformed(),CHNextTime);
CHNextTime = CHTimers.get(lstChannels.getSelectedIndex());
StopCHpt=false;
CHProgressTime.setValue(0);
CHt.schedule(new UpdateCHtUITask(), 0);
} else {
CHt.cancel();
CHt.purge();
StopCHpt=true;
lstChannels.setEnabled(true);
ChDuration.setEnabled(true);
btnStopAllStream.setEnabled(true);
btnStopOnlyStream.setEnabled(true);
btnSelect.setEnabled(true);
btnRenameCh.setEnabled(true);
btnUp.setEnabled(true);
btnDown.setEnabled(true);
btnRemove.setEnabled(true);
btnAdd.setEnabled(true);
inTimer=false;
CHProgressTime.setValue(0);
CHProgressTime.setString("0");
StopCHTimer.setEnabled(inTimer);
}
}
}
public static String getSelectedChannel() {
return (lstChannels.getSelectedValue().toString());
}
private void btnSelectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSelectActionPerformed
String name = lstChannels.getSelectedValue().toString();
master.selectChannel(lstChannels.getSelectedValue().toString());
savePrefs();
System.out.println("Apply Select: "+name);
tglRemote.setEnabled(true);
if (CHTimers.get(lstChannels.getSelectedIndex()) != 0) {
inTimer=true;
btnRenameCh.setEnabled(false);
btnClearAllCh.setEnabled(false);
btnUp.setEnabled(false);
btnDown.setEnabled(false);
btnRemove.setEnabled(false);
btnAdd.setEnabled(false);
lstChannels.setEnabled(false);
ChDuration.setEnabled(false);
StopCHTimer.setEnabled(inTimer);
btnStopAllStream.setEnabled(false);
btnSelect.setEnabled(false);
CHt=new Timer();
CHt.schedule(new TSelectActionPerformed(),CHTimers.get(lstChannels.getSelectedIndex()));
CHNextTime = CHTimers.get(lstChannels.getSelectedIndex());
totalToTimer = CHNextTime/1000;
StopCHpt=false;
CHt.schedule(new UpdateCHtUITask(), 0);
}
}//GEN-LAST:event_btnSelectActionPerformed
private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUpdateActionPerformed
String name = lstChannels.getSelectedValue().toString();
master.updateChannel(name);
master.addChTransitions(name);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Channel "+name+" Updated");
ResourceMonitor.getInstance().addMessage(label);
}//GEN-LAST:event_btnUpdateActionPerformed
private void lstNextChannelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lstNextChannelActionPerformed
if (lstChannels.getSelectedIndex() != -1) {
String nextChannel = lstNextChannel.getSelectedItem().toString();
int ChIndex = lstChannels.getSelectedIndex();
CHCurrNext.set(ChIndex, nextChannel);
}
}//GEN-LAST:event_lstNextChannelActionPerformed
private void RemoteStopCHTimerActionPerformed() {
CHt.cancel();
CHt.purge();
StopCHpt=true;
lstChannels.setEnabled(true);
ChDuration.setEnabled(true);
btnStopAllStream.setEnabled(true);
btnStopOnlyStream.setEnabled(true);
btnSelect.setEnabled(true);
btnRenameCh.setEnabled(true);
btnClearAllCh.setEnabled(true);
btnUp.setEnabled(true);
btnDown.setEnabled(true);
btnRemove.setEnabled(true);
btnAdd.setEnabled(true);
inTimer=false;
CHProgressTime.setValue(0);
CHProgressTime.setString("0");
StopCHTimer.setEnabled(inTimer);
}
public void RemoteStopCHTimerOnlyActionPerformed() {
CHt.cancel();
CHt.purge();
StopCHpt=true;
inTimer=false;
CHProgressTime.setValue(0);
CHProgressTime.setString("0");
StopCHTimer.setEnabled(inTimer);
}
private void StopCHTimerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_StopCHTimerActionPerformed
RemoteStopCHTimerActionPerformed();
master.stopTextCDown();
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Channel Timer Stopped.");
ResourceMonitor.getInstance().addMessage(label);
}//GEN-LAST:event_StopCHTimerActionPerformed
private void btnStopAllStreamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnStopAllStreamActionPerformed
SystemPlayer.getInstance(null).stop();
Tools.sleep(30);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().stopAllStream();
for (Stream s : streamS){
s.updateStatus();
}
Tools.sleep(30);
listenerCPOP.resetButtonsStates(evt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "All Stopped.");
ResourceMonitor.getInstance().addMessage(label);
System.gc();
}//GEN-LAST:event_btnStopAllStreamActionPerformed
@SuppressWarnings("unchecked")
private void btnRenameChActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRenameChActionPerformed
if (lstChannels != null && txtName.getText().length() > 0) {
String rnName = txtName.getText();
String chName = lstChannels.getSelectedValue().toString();
int selectCHIndex = lstChannels.getSelectedIndex();
for (Stream stream : streamS){
for (SourceChannel sc : stream.getChannels()) {
if (sc.getName().equals(chName)){
sc.setName(rnName);
}
}
}
int coun = 0;
for (String chCurNx : CHCurrNext){
if (chCurNx.equals(chName)){
CHCurrNext.set(coun, rnName);
}
coun++;
}
lstNextChannel.revalidate();
master.addChannelAt(rnName, selectCHIndex);
master.removeChannelAt(chName);
model.removeElement(chName);
aModel.removeElement(chName);
CHTimers.remove(selectCHIndex);
ListChannels.remove(chName);
lstChannels.revalidate();
model.insertElementAt(rnName, selectCHIndex);
aModel.insertElementAt(rnName, selectCHIndex);
CHTimers.add(selectCHIndex, CHTimer);
ListChannels.add(selectCHIndex, rnName);
lstChannels.revalidate();
lstNextChannel.revalidate();
btnRenameCh.setEnabled(false);
btnUp.setEnabled(false);
btnDown.setEnabled(false);
}
}//GEN-LAST:event_btnRenameChActionPerformed
@SuppressWarnings("unchecked")
private void btnAutoPlayListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAutoPlayListActionPerformed
ArrayList<Stream> allStreams = MasterChannels.getInstance().getStreams();
for (Stream s : allStreams) {
if (!s.getClass().toString().contains("Sink")) {
String sourceName = s.getName();
// System.out.println("Source: "+sourceName);
String shortName = "";
if (sourceName.length() > 30) {
shortName = s.getName().substring(0, 30)+" ...";
} else {
shortName = sourceName;
}
if (shortName.length() > 0) {
s.setIsPlaying(true);
master.addChannel(shortName);
model.addElement(shortName);
aModel.addElement(shortName);
CHCurrNext.add(shortName);
CHTimers.add(CHTimer);
ListChannels.add(shortName);
lstChannels.revalidate();
lstNextChannel.revalidate();
s.setIsPlaying(false);
}
}
}
int index = 0;
int lastItemIndex = ListChannels.size()-1;
// System.out.println("LastItemIndex: " + lastItemIndex);
for (Stream s : allStreams) {
if (!s.getClass().toString().contains("Sink")) {
if (!"N/A".equals(s.getStreamTime())) {
String sPrepTime = s.getStreamTime().replaceAll("s", "");
int sDuration = Integer.parseInt(sPrepTime);
CHTimer = sDuration * 1000;
CHTimers.set(index, CHTimer);
} else {
CHTimers.set(index, 0);
}
if (index < lastItemIndex) {
String nextChannel = ListChannels.get(index+1);
CHCurrNext.set(index, nextChannel);
} else {
String nextChannel = ListChannels.get(0);
CHCurrNext.set(index, nextChannel);
}
// System.out.println("Name: "+s.getName()+" Duration: "+CHTimer);
index++;
}
}
btnAutoPlayList.setEnabled(false);
}//GEN-LAST:event_btnAutoPlayListActionPerformed
@SuppressWarnings("unchecked")
private void btnDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDownActionPerformed
int selectedCHIndex = lstChannels.getSelectedIndex();
String selectedChName = ListChannels.get(selectedCHIndex);
int selectedCHTimer = CHTimers.get(selectedCHIndex);
int nextCHIndex;
String nextChName;
int nextCHTimer;
// System.out.println("List Next Channels: "+CHCurrNext);
// System.out.println("List Channels Timers: "+CHTimers);
if (lstChannels != null && selectedCHIndex < ListChannels.size() - 1) {
if (selectedCHIndex == ListChannels.size() - 2) {
nextCHIndex = selectedCHIndex + 1;
nextChName = ListChannels.get(nextCHIndex);
nextCHTimer = CHTimers.get(nextCHIndex);
// System.out.println("Master Channels Before:"+master.getChannels());
// Update Master Channels
master.removeChannelAt(selectedChName);
master.removeChannelAt(nextChName);
master.addToChannels(nextChName);
master.addToChannels(selectedChName);
// Update Streams Channels
for (Stream stream : streamS){
String streamName =stream.getClass().getName();
if (!streamName.contains("Sink")){
SourceChannel tempSelSC = null;
SourceChannel tempNextSC = null;
for (SourceChannel sc : stream.getChannels()) {
if (sc.getName().equals(selectedChName)){
tempSelSC = sc;
}
if (sc.getName().equals(nextChName)){
tempNextSC = sc;
}
}
stream.addChannelAt(tempSelSC, nextCHIndex);
stream.addChannelAt(tempNextSC, selectedCHIndex);
}
}
// System.out.println("Master Channels After:"+master.getChannels());
// Update UI lists and WS lists Channels
model.removeElement(selectedChName);
model.removeElement(nextChName);
aModel.removeElement(selectedChName);
aModel.removeElement(nextChName);
CHCurrNext.remove(selectedChName);
CHTimers.remove(selectedCHIndex);
CHTimers.remove(selectedCHIndex);
ListChannels.remove(selectedChName);
ListChannels.remove(nextChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
// System.out.println("List Next Channels Remove: "+CHCurrNext);
model.addElement(nextChName);
model.addElement(selectedChName);
aModel.addElement(nextChName);
aModel.addElement(selectedChName);
CHCurrNext.add(selectedCHIndex, selectedChName);
CHTimers.add(nextCHTimer);
CHTimers.add(selectedCHTimer);
ListChannels.add(nextChName);
ListChannels.add(selectedChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
lstChannels.setSelectedIndex(nextCHIndex);
// System.out.println("List Next Channels Insert: "+CHCurrNext);
} else {
nextCHIndex = selectedCHIndex + 1;
nextChName = ListChannels.get(nextCHIndex);
nextCHTimer = CHTimers.get(nextCHIndex);
// System.out.println("Master Channels Before:"+master.getChannels());
// Update Master Channels
master.removeChannelAt(selectedChName);
master.removeChannelAt(nextChName);
master.addChannelAt(nextChName, selectedCHIndex);
master.addChannelAt(selectedChName, nextCHIndex);
// Update Streams Channels
for (Stream stream : streamS){
String streamName =stream.getClass().getName();
if (!streamName.contains("Sink")){
SourceChannel tempSelSC = null;
SourceChannel tempNextSC = null;
for (SourceChannel sc : stream.getChannels()) {
if (sc.getName().equals(selectedChName)){
tempSelSC = sc;
}
if (sc.getName().equals(nextChName)){
tempNextSC = sc;
}
}
stream.addChannelAt(tempSelSC, nextCHIndex);
stream.addChannelAt(tempNextSC, selectedCHIndex);
}
}
// System.out.println("Master Channels After:"+master.getChannels());
// Update UI Channels lists and WS lists
model.removeElement(selectedChName);
model.removeElement(nextChName);
aModel.removeElement(selectedChName);
aModel.removeElement(nextChName);
if (selectedCHIndex == 0) {
CHCurrNext.remove(selectedChName);
CHCurrNext.remove(nextChName);
} else {
CHCurrNext.remove(selectedChName);
}
CHTimers.remove(selectedCHIndex);
CHTimers.remove(selectedCHIndex);
// System.out.println("List Channels Timers Removed: "+CHTimers);
ListChannels.remove(selectedChName);
ListChannels.remove(nextChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
// System.out.println("List Next Channels Remove: "+CHCurrNext);
model.insertElementAt(nextChName, selectedCHIndex);
model.insertElementAt(selectedChName, nextCHIndex);
aModel.insertElementAt(nextChName, selectedCHIndex);
aModel.insertElementAt(selectedChName, nextCHIndex);
if (selectedCHIndex == 0) {
CHCurrNext.add(selectedCHIndex, selectedChName);
CHCurrNext.add(nextChName);
} else {
CHCurrNext.add(selectedCHIndex, selectedChName);
}
CHTimers.add(selectedCHIndex, nextCHTimer);
CHTimers.add(nextCHIndex, selectedCHTimer);
// System.out.println("List Channels Timers After: "+CHTimers);
ListChannels.add(selectedCHIndex, nextChName);
ListChannels.add(nextCHIndex, selectedChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
lstChannels.setSelectedIndex(nextCHIndex);
// System.out.println("List Next Channels Insert: "+CHCurrNext);
}
}
}//GEN-LAST:event_btnDownActionPerformed
@SuppressWarnings("unchecked")
private void btnUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUpActionPerformed
int selectedCHIndex = lstChannels.getSelectedIndex();
String selectedChName = ListChannels.get(selectedCHIndex);
int selectedCHTimer = CHTimers.get(selectedCHIndex);
int previousCHIndex;
String previousChName;
int previousCHTimer;
int previous2CHIndex;
// System.out.println("List Next Channels: "+CHCurrNext);
// System.out.println("List Channels Timers: "+CHTimers);
if (lstChannels != null && selectedCHIndex > 0) {
if (selectedCHIndex == 1) {
previousCHIndex = selectedCHIndex - 1;
previousChName = ListChannels.get(previousCHIndex);
previousCHTimer = CHTimers.get(previousCHIndex);
// System.out.println("Master Channels Before:"+master.getChannels());
// Update Master Channels
master.removeChannelAt(selectedChName);
master.removeChannelAt(previousChName);
master.addChannelAt(selectedChName, previousCHIndex);
master.addChannelAt(previousChName, selectedCHIndex);
// Update Streams Channels
for (Stream stream : streamS){
String streamName =stream.getClass().getName();
if (!streamName.contains("Sink")){
SourceChannel tempSelSC = null;
SourceChannel tempPrevSC = null;
for (SourceChannel sc : stream.getChannels()) {
if (sc.getName().equals(selectedChName)){
tempSelSC = sc;
}
if (sc.getName().equals(previousChName)){
tempPrevSC = sc;
}
}
stream.addChannelAt(tempSelSC, previousCHIndex);
stream.addChannelAt(tempPrevSC, selectedCHIndex);
}
}
// System.out.println("Master Channels After:"+master.getChannels());
// Update UI lists and WS lists Channels
model.removeElement(selectedChName);
model.removeElement(previousChName);
aModel.removeElement(selectedChName);
aModel.removeElement(previousChName);
CHCurrNext.remove(selectedChName);
CHTimers.remove(selectedCHIndex);
CHTimers.remove(previousCHIndex);
ListChannels.remove(selectedChName);
ListChannels.remove(previousChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
// System.out.println("List Next Channels Remove: "+CHCurrNext);
model.insertElementAt(selectedChName, previousCHIndex);
model.insertElementAt(previousChName, selectedCHIndex);
aModel.insertElementAt(selectedChName, previousCHIndex);
aModel.insertElementAt(previousChName, selectedCHIndex);
CHCurrNext.add(previousCHIndex, previousChName);
CHTimers.add(previousCHIndex, selectedCHTimer);
CHTimers.add(selectedCHIndex, previousCHTimer);
ListChannels.add(previousCHIndex, selectedChName);
ListChannels.add(selectedCHIndex, previousChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
CHCurrNext.remove(ListChannels.size()-1);
lstNextChannel.revalidate();
CHCurrNext.add(ListChannels.size()-1, selectedChName);
lstNextChannel.revalidate();
lstChannels.setSelectedIndex(previousCHIndex);
// System.out.println("List Next Channels Insert: "+CHCurrNext);
} else {
previous2CHIndex = selectedCHIndex - 2;
previousCHIndex = selectedCHIndex - 1;
previousChName = ListChannels.get(previousCHIndex);
previousCHTimer = CHTimers.get(previousCHIndex);
// System.out.println("Master Channels Before:"+master.getChannels());
// Update Master Channels
master.removeChannelAt(selectedChName);
master.removeChannelAt(previousChName);
master.addChannelAt(selectedChName, previousCHIndex);
master.addChannelAt(previousChName, selectedCHIndex);
// Update Streams Channels
for (Stream stream : streamS){
String streamName =stream.getClass().getName();
if (!streamName.contains("Sink")){
SourceChannel tempSelSC = null;
SourceChannel tempPrevSC = null;
for (SourceChannel sc : stream.getChannels()) {
if (sc.getName().equals(selectedChName)){
tempSelSC = sc;
}
if (sc.getName().equals(previousChName)){
tempPrevSC = sc;
}
}
stream.addChannelAt(tempSelSC, previousCHIndex);
stream.addChannelAt(tempPrevSC, selectedCHIndex);
}
}
// System.out.println("Master Channels After:"+master.getChannels());
// Update UI Channels lists and WS lists
model.removeElement(selectedChName);
model.removeElement(previousChName);
aModel.removeElement(selectedChName);
aModel.removeElement(previousChName);
CHCurrNext.remove(selectedChName);
CHTimers.remove(selectedCHIndex);
CHTimers.remove(previousCHIndex);
ListChannels.remove(selectedChName);
ListChannels.remove(previousChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
// System.out.println("List Next Channels Remove: "+CHCurrNext);
model.insertElementAt(selectedChName, previousCHIndex);
model.insertElementAt(previousChName, selectedCHIndex);
aModel.insertElementAt(selectedChName, previousCHIndex);
aModel.insertElementAt(previousChName, selectedCHIndex);
CHCurrNext.add(previousCHIndex, previousChName);
CHTimers.add(previousCHIndex, selectedCHTimer);
CHTimers.add(selectedCHIndex, previousCHTimer);
ListChannels.add(previousCHIndex, selectedChName);
ListChannels.add(selectedCHIndex, previousChName);
lstChannels.revalidate();
lstNextChannel.revalidate();
lstChannels.setSelectedIndex(previousCHIndex);
// System.out.println("List Next Channels Insert: "+CHCurrNext);
CHCurrNext.remove(previous2CHIndex);
lstNextChannel.revalidate();
CHCurrNext.add(previous2CHIndex, selectedChName);
lstNextChannel.revalidate();
}
}
}//GEN-LAST:event_btnUpActionPerformed
private void btnClearAllChActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearAllChActionPerformed
int result = JOptionPane.showConfirmDialog(this,"All Channels will be Deleted !!!","Attention",JOptionPane.YES_NO_CANCEL_OPTION);
if (result == JFileChooser.APPROVE_OPTION) {
ArrayList<String> sourceChI = MasterChannels.getInstance().getChannels();
if (sourceChI.size()>0) {
do {
for (int a=0; a< sourceChI.size(); a++) {
String removeSc = sourceChI.get(a);
MasterChannels.getInstance().removeChannel(removeSc);
removeChannels(removeSc, a);
}
} while (sourceChI.size()>0);
resetBtnStates(evt);
}
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Delete All Channels Cancelled!");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_btnClearAllChActionPerformed
private void lstChannelsComponentAdded(java.awt.event.ContainerEvent evt) {//GEN-FIRST:event_lstChannelsComponentAdded
if (lstChannels.getSelectedIndex() != -1) {
btnClearAllCh.setEnabled(true);
}
}//GEN-LAST:event_lstChannelsComponentAdded
private void tglRemoteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tglRemoteActionPerformed
if (tglRemote.isSelected()) {
remote.setPort(remPort);
remote.start();
} else {
remote.stop();
}
}//GEN-LAST:event_tglRemoteActionPerformed
private void btnStopOnlyStreamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnStopOnlyStreamActionPerformed
MasterChannels.getInstance().stopOnlyStream();
for (Stream s : streamS){
s.updateStatus();
}
Tools.sleep(30);
if (inTimer){
RemoteStopCHTimerActionPerformed();
} else {
RemoteStopCHTimerOnlyActionPerformed();
}
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Streams Stopped.");
ResourceMonitor.getInstance().addMessage(label);
System.gc();
}//GEN-LAST:event_btnStopOnlyStreamActionPerformed
private void lstChannelsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstChannelsMouseClicked
if (evt.getClickCount() == 2 && !evt.isConsumed()) {
evt.consume();
if (lstChannels.isEnabled()){
btnSelect.doClick();
}
}
}//GEN-LAST:event_lstChannelsMouseClicked
private void ChDurationStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_ChDurationStateChanged
CHTimer = ChDuration.getValue().hashCode()* 1000;
if (lstChannels.getSelectedIndex() != -1) {
int ChIndex = lstChannels.getSelectedIndex();
CHTimers.set(ChIndex, CHTimer);
}
}//GEN-LAST:event_ChDurationStateChanged
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JProgressBar CHProgressTime;
private javax.swing.JSpinner ChDuration;
public javax.swing.JPanel PanelResource;
private javax.swing.JButton StopCHTimer;
private javax.swing.JButton btnAdd;
private javax.swing.JButton btnAutoPlayList;
private javax.swing.JButton btnClearAllCh;
private javax.swing.JButton btnDown;
private javax.swing.JButton btnRemove;
private javax.swing.JButton btnRenameCh;
private javax.swing.JButton btnSelect;
private javax.swing.JButton btnStopAllStream;
public static javax.swing.JButton btnStopOnlyStream;
private javax.swing.JButton btnUp;
private javax.swing.JButton btnUpdate;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel lblChName;
public static javax.swing.JLabel lblOnAir;
private static javax.swing.JList lstChannels;
private javax.swing.JScrollPane lstChannelsScroll;
private javax.swing.JComboBox lstNextChannel;
private javax.swing.JToggleButton tglRemote;
private javax.swing.JTextField txtName;
// End of variables declaration//GEN-END:variables
}