/*! Copyright (C) 2009-2012 Apertus, All Rights Reserved
*! Author : Apertus Team
-----------------------------------------------------------------------------**
*!
*! This program is free software: you can redistribute it and/or modify
*! it under the terms of the GNU General Public License as published by
*! the Free Software Foundation, either version 3 of the License, or
*! (at your option) any later version.
*!
*! This program is distributed in the hope that it will be useful,
*! but WITHOUT ANY WARRANTY; without even the implied warranty of
*! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*! GNU General Public License for more details.
*!
*! You should have received a copy of the GNU General Public License
*! along with this program. If not, see <http://www.gnu.org/licenses/>.
*!
-----------------------------------------------------------------------------**/
import java.awt.Color;
import java.awt.Component;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractListModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import net.miginfocom.swing.MigLayout;
public class PlaybackDialog extends javax.swing.JPanel {
private static final long serialVersionUID = -7433613978413247324L;
private class VideoFileListModel extends AbstractListModel {
private static final long serialVersionUID = -78906942360451820L;
private ArrayList<VideoFile> VideoFilesList;
VideoFileListModel() {
VideoFilesList = new ArrayList<VideoFile>();
}
public int getSize() {
return VideoFilesList.size();
}
public Object getElementAt(int i) {
return VideoFilesList.get(i).getName();
}
public Object getVideoFileAt(int i) {
return VideoFilesList.get(i);
}
private void clear() {
VideoFilesList.clear();
}
private void addElement(VideoFile file) {
VideoFilesList.add(file);
int index = VideoFilesList.indexOf(file);
fireContentsChanged(this, index, index);
}
}
class VideoListCellRenderer extends JLabel implements ListCellRenderer {
/**
*
*/
private static final long serialVersionUID = -1067784511398029588L;
protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
public VideoListCellRenderer() {
// Don't paint behind the component
setOpaque(true);
}
// Set the attributes of the
// class and return a reference
public Component getListCellRendererComponent(JList list, Object value, // value
// to
// display
int index, // cell index
boolean iss, // is selected
boolean chf) // cell has focus?
{
// JLabel renderer = (JLabel)
// defaultRenderer.getListCellRendererComponent(list, value, index,
// iss, chf);
// Set the text and
// background color for rendering
setText((String) value);
setBackground(Color.WHITE);
// Set a border if the
// list item is selected
if (iss) {
setBackground(new Color(186, 206, 244, 100));
} else {
setBackground(Color.WHITE);
}
return this;
}
}
ElphelVision Parent;
private VideoFileListModel videoFileListModel;
private VideoListCellRenderer CellRenderer;
private javax.swing.JList FilesList;
private EButton ListFiles;
private EButton SettingsCancelButton;
private javax.swing.JPanel VideoFrame;
private javax.swing.JPanel bg;
private EButton PlayButton;
private javax.swing.JScrollPane jScrollPane1;
private java.awt.Canvas vlcoverlay;
public PlaybackDialog(ElphelVision parent) {
Parent = parent;
videoFileListModel = new VideoFileListModel();
CellRenderer = new VideoListCellRenderer();
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
bg = new javax.swing.JPanel();
VideoFrame = new javax.swing.JPanel();
vlcoverlay = new java.awt.Canvas();
SettingsCancelButton = new EButton(Parent);
ListFiles = new EButton(Parent);
jScrollPane1 = new javax.swing.JScrollPane();
FilesList = new javax.swing.JList();
bg.setBackground(new java.awt.Color(0, 0, 0));
bg.setPreferredSize(new java.awt.Dimension(1024, 600));
//VideoFrame.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(100, 100, 100)));
vlcoverlay.setBackground(java.awt.Color.darkGray);
vlcoverlay.setForeground(new java.awt.Color(153, 65, 65));
SettingsCancelButton.setText("Close");
SettingsCancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
SettingsCancelButtonActionPerformed(evt);
}
});
ListFiles.setText("list");
ListFiles.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ListFilesActionPerformed(evt);
}
});
FilesList.setModel(videoFileListModel);
FilesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
FilesList.setCellRenderer(CellRenderer);
jScrollPane1.setViewportView(FilesList);
PlayButton = new EButton(Parent);
PlayButton.setText("Play");
PlayButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
PlayButtonActionPerformed(evt);
}
});
add(bg);
bg.setLayout(new MigLayout("", "[242px][80px][592px][80px]", "[535px][35px]"));
bg.add(ListFiles, "flowx,cell 0 1,growx,aligny top");
bg.add(jScrollPane1, "cell 0 0,grow");
bg.add(SettingsCancelButton, "cell 3 1,alignx left,aligny top");
bg.add(VideoFrame, "cell 1 0 3 1,alignx left,aligny top");
bg.add(PlayButton, "cell 0 1,alignx left,aligny top");
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void Load() {
Parent.VLCPlayer.SetCanvas(vlcoverlay);
}
private void SettingsCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_SettingsCancelButtonActionPerformed
Parent.StopVideoPlayer();
Parent.LoadMainCard();
}// GEN-LAST:event_SettingsCancelButtonActionPerformed
private void PlayButtonActionPerformed(java.awt.event.ActionEvent evt) {
if (Parent.Settings.GetVideoPlayer() == streamVideoPlayer.VLC) {
if (!((VideoFile) videoFileListModel.getVideoFileAt(FilesList.getSelectedIndex())).getPath().equalsIgnoreCase("")) {
Parent.WriteLogtoConsole("Playing Video Clip: " + "/hdd/"
+ ((VideoFile) videoFileListModel.getVideoFileAt(FilesList.getSelectedIndex())).getPath());
Parent.VLCPlayer.PlayVideoFile("/hdd/" + ((VideoFile) videoFileListModel.getVideoFileAt(FilesList.getSelectedIndex())).getPath());
}
}
}
private void UpdateFilesList() {
videoFileListModel.clear();
for (int i = 0; i < Parent.Camera.GetVideoFilesList().size(); i++) {
videoFileListModel.addElement(((VideoFile) (Parent.Camera.GetVideoFilesList().get(i))));
}
}
private void ListFilesActionPerformed(java.awt.event.ActionEvent evt) {
Parent.WriteLogtoConsole("Reading Video Clip List");
try {
Parent.Camera.ReadCameraFileList();
} catch (Exception ex) {
Logger.getLogger(PlaybackDialog.class.getName()).log(Level.SEVERE, null, ex);
}
UpdateFilesList();
}
}