/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* WebcamStudio.java
*
* Created on 4-Apr-2012, 3:48:07 PM
*/
package webcamstudio;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Frame;
import java.awt.HeadlessException;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.image.BufferedImage;
import java.beans.PropertyVetoException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.plaf.ColorUIResource;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLStreamException;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathExpressionException;
import org.xml.sax.SAXException;
import webcamstudio.channels.MasterChannels;
import webcamstudio.components.BottomPanel;
import webcamstudio.components.ChannelPanel;
import webcamstudio.components.MasterPanel;
import static webcamstudio.components.MasterPanel.spinFPS;
import static webcamstudio.components.MasterPanel.spinHeight;
import static webcamstudio.components.MasterPanel.spinWidth;
import webcamstudio.components.OutputPanel;
import static webcamstudio.components.OutputPanel.execPACTL;
import webcamstudio.components.ResourceMonitor;
import webcamstudio.components.ResourceMonitorLabel;
import webcamstudio.components.SourceControls;
import webcamstudio.components.StreamDesktop;
import webcamstudio.components.VideoDeviceInfo;
import webcamstudio.exporter.vloopback.VideoDevice;
import webcamstudio.externals.ProcessRenderer;
import webcamstudio.mixers.MasterMixer;
import webcamstudio.mixers.PrePlayer;
import webcamstudio.mixers.PreviewMixer;
import webcamstudio.mixers.SystemPlayer;
import webcamstudio.streams.SourceAudioSource;
import webcamstudio.streams.SourceChannel;
import webcamstudio.streams.SourceCustom;
import webcamstudio.streams.SourceDV;
import webcamstudio.streams.SourceHDV;
import webcamstudio.streams.SourceDVB;
import webcamstudio.streams.SourceDesktop;
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.studio.Studio;
import webcamstudio.util.Screen;
import webcamstudio.util.Tools;
import webcamstudio.util.Tools.OS;
/**
*
* @author patrick (modified by karl)
*/
public final class WebcamStudio extends JFrame implements StreamDesktop.Listener {
public static Preferences prefs = null;
public static Properties animations = new Properties();
public static Properties facesW = new Properties();
// FF = 0 ; AV = 1 ; GS = 2
public static int outFMEbe = 1;
private final static String userHomeDir = Tools.getUserHome();
BottomPanel bottomPanel = new BottomPanel();
OutputPanel recorder = new OutputPanel(bottomPanel);
Frame about = new Frame();
Frame vDevInfo = new Frame();
Stream stream = null;
private static File cmdFile = null;
private static String cmdOut = null;
private static boolean cmdAutoStart = false;
private static boolean cmdRemote = false;
public static int audioFreq = 22050;
public static String theme = "Classic";
ArrayList<Stream> streamS = MasterChannels.getInstance().getStreams();
private File lastFolder = null;
boolean ffmpeg = Screen.ffmpegDetected();
boolean avconv = Screen.avconvDetected();
public static boolean gsNLE = Screen.nleDetected();
boolean firstRun = true;
static boolean autoAR = false;
private int numCameras = 0;
private int numVideos = 0;
private int numMusics = 0;
private int numPictures = 0;
private int numDVBs = 0;
private int numURLs = 0;
private int numDesktops = 0;
private int numTexts = 0;
private int numAudioIns = 0;
private int tabCount = 0;
private JLabel lblCamera = new JLabel("Cameras(0)");
private JLabel lblVideo = new JLabel("Videos(0)");
private JLabel lblMusic = new JLabel("Musics(0)");
private JLabel lblPicture = new JLabel("Pictures(0)");
private JLabel lblDVB = new JLabel("DVBs(0)");
private JLabel lblURL = new JLabel("URLs(0)");
private JLabel lblDesktop = new JLabel("Desktops(0)");
private JLabel lblText = new JLabel("Texts(0)");
private JLabel lblAudioIn = new JLabel("AudioIns(0)");
private Color busyTab = Color.red;
private Color resetTab = Color.black;
ArrayList<JDesktopPane> tabs = new ArrayList<>();
@SuppressWarnings("unchecked")
private void initFaceDetection() throws IOException {
File dir = new File(System.getProperty("user.home"), ".webcamstudio/faces");
if (!dir.exists()) {
dir.mkdir();
}
facesW.load(getClass().getResourceAsStream("/webcamstudio/resources/faces/Faces.properties"));
ArrayList faceNames = new ArrayList();
String faceL = null;
for (Object o : facesW.keySet()) {
faceNames.add(o);
}
for (int i=0 ; i < faceNames.size(); i++){
faceL = faceNames.get(i).toString();
// System.out.println(faceL);
File destination = new File(System.getProperty("user.home")+"/.webcamstudio/faces/"+faceL+".png");
try (InputStream is = getClass().getResourceAsStream("/webcamstudio/resources/faces/"+faceL+".png"); OutputStream os = new FileOutputStream(destination)) {
byte[] buffer = new byte[4096];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
}
}
faceNames.clear();
File destination = new File(System.getProperty("user.home")+"/.webcamstudio/faces/haarcascade_frontalface_alt2.xml");
InputStream is = getClass().getResourceAsStream("/webcamstudio/resources/haarcascade_frontalface_alt2.xml");
OutputStream os = new FileOutputStream(destination);
byte[] buffer = new byte[4096];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.close();
is.close();
destination = new File(System.getProperty("user.home")+"/.webcamstudio/faces/lbpcascade_frontalface.xml");
is = getClass().getResourceAsStream("/webcamstudio/resources/lbpcascade_frontalface.xml");
os = new FileOutputStream(destination);
buffer = new byte[4096];
int length2;
while ((length2 = is.read(buffer)) > 0) {
os.write(buffer, 0, length2);
}
os.close();
is.close();
}
@Override
public void closeSource() {
lblSourceSelected.setText("");
int tabIndex = tabSources.getSelectedIndex();
System.out.println("TabIndex="+tabIndex);
String tabTitle = tabSources.getTitleAt(tabIndex);
if (tabTitle.contains("Cameras")) {
numCameras -= 1;
if (numCameras > 0) {
lblCamera.setText("Cameras("+numCameras+")");
} else {
lblCamera.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
}
} else if (tabTitle.contains("Videos")) {
numVideos -= 1;
if (numVideos > 0) {
lblVideo.setText("Videos("+numVideos+")");
} else {
lblVideo.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblVideo.setFont(font);
lblVideo.setText("Videos("+numVideos+")");
}
} else if (tabTitle.contains("Musics")) {
numMusics -= 1;
if (numMusics > 0) {
lblMusic.setText("Musics("+numMusics+")");
} else {
lblMusic.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblMusic.setFont(font);
lblMusic.setText("Musics("+numMusics+")");
}
} else if (tabTitle.contains("Pictures")) {
numPictures -= 1;
if (numPictures > 0) {
lblPicture.setText("Pictures("+numPictures+")");
} else {
lblPicture.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblPicture.setFont(font);
lblPicture.setText("Pictures("+numPictures+")");
}
} else if (tabTitle.contains("DVBs")) {
numDVBs -= 1;
if (numDVBs > 0) {
lblDVB.setText("DVBs("+numDVBs+")");
} else {
lblDVB.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblDVB.setFont(font);
lblDVB.setText("DVBs("+numDVBs+")");
}
} else if (tabTitle.contains("URLs")) {
numURLs -= 1;
if (numURLs > 0) {
lblURL.setText("URLs("+numURLs+")");
} else {
lblURL.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblURL.setFont(font);
lblURL.setText("URLs("+numURLs+")");
}
} else if (tabTitle.contains("Desktops")) {
numDesktops -= 1;
if (numDesktops > 0) {
lblDesktop.setText("Desktops("+numDesktops+")");
} else {
lblDesktop.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblDesktop.setFont(font);
lblDesktop.setText("Desktops("+numCameras+")");
}
} else if (tabTitle.contains("Texts")) {
numTexts -= 1;
if (numTexts > 0) {
lblText.setText("Texts("+numTexts+")");
} else {
lblText.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblText.setFont(font);
lblText.setText("Texts("+numTexts+")");
}
} else if (tabTitle.contains("AudioIns")) {
numAudioIns -= 1;
if (numAudioIns > 0) {
lblAudioIn.setText("AudioIns("+numAudioIns+")");
} else {
lblAudioIn.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblAudioIn.setFont(font);
lblAudioIn.setText("AudioIns("+numAudioIns+")");
}
}
}
public interface Listener {
public void stopChTime(java.awt.event.ActionEvent evt);
public void resetBtnStates(java.awt.event.ActionEvent evt);
public void resetAutoPLBtnState(java.awt.event.ActionEvent evt);
public void resetSinks(java.awt.event.ActionEvent evt);
public void addLoadingChannel(String name);
public void removeChannels(String removeSc, int a);
public void setRemoteOn();
}
static Listener listenerCP = null;
public static void setListenerCP(Listener l) {
listenerCP = l;
}
static Listener listenerOP = null;
public static void setListenerOP(Listener l) {
listenerOP = l;
}
/**
* Creates new form WebcamStudio
* @throws java.io.IOException
*/
public WebcamStudio() throws IOException {
initComponents();
setTitle("WebcamStudio " + Version.version);
ImageIcon icon = new ImageIcon(this.getClass().getResource("/webcamstudio/resources/icon.png"));
this.setIconImage(icon.getImage());
System.out.println("NLE="+gsNLE);
tabs.add(cameraDesktop);
tabs.add(videoDesktop);
tabs.add(musicDesktop);
tabs.add(pictureDesktop);
tabs.add(dvbDesktop);
tabs.add(urlDesktop);
tabs.add(desktopDesktop);
tabs.add(textDesktop);
tabs.add(audioInDesktop);
tabSources.setDropTarget(new DropTarget() {
@Override
public synchronized void drop(DropTargetDropEvent evt) {
try {
String fileName = "";
evt.acceptDrop(DnDConstants.ACTION_REFERENCE);
boolean success = false;
DataFlavor dataFlavor = null;
if (evt.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dataFlavor = DataFlavor.javaFileListFlavor;
} else if (evt.isDataFlavorSupported(DataFlavor.stringFlavor)) {
dataFlavor = DataFlavor.stringFlavor;
} else {
for (DataFlavor d : evt.getTransferable().getTransferDataFlavors()) {
if (evt.getTransferable().isDataFlavorSupported(d)) {
System.out.println("Supported: " + d.getDefaultRepresentationClassAsString());
dataFlavor = d;
break;
}
}
}
Object data = evt.getTransferable().getTransferData(dataFlavor);
String files = "";
if (data instanceof Reader) {
char[] text = new char[65536];
files = new String(text).trim();
} else if (data instanceof InputStream) {
char[] text = new char[65536];
files = new String(text).trim();
} else if (data instanceof String) {
files = data.toString().trim();
} else {
List list = (List) data;
for (Object o : list) {
files += new File(o.toString()).toURI().toURL().toString() + "\n";
}
}
if (files.length() > 0) {
String[] lines = files.split("\n");
for (String line : lines) {
File file = new File(new URL(line.trim()).toURI());
if (file.exists()) {
fileName = file.getName();
Stream stream = Stream.getInstance(file);
if (stream != null) {
if (stream instanceof SourceMovie || stream instanceof SourceMusic || stream instanceof SourceImage || stream instanceof SourceImageU || stream instanceof SourceImageGif) {
getVideoParams(stream, file, null);
}
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
stream.addChannel(SourceChannel.getChannel(sc, stream));
}
StreamDesktop frame = getNewStreamDesktop(stream);
if (stream instanceof SourceMovie) {
numVideos += 1;
videoDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblVideo.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblVideo.setFont(font);
lblVideo.setText("Videos("+numVideos+")");
} else if (stream instanceof SourceMusic) {
numMusics += 1;
musicDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblMusic.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblMusic.setFont(font);
lblMusic.setText("Musics("+numMusics+")");
} else if (stream instanceof SourceImage || stream instanceof SourceImageU || stream instanceof SourceImageGif) {
numPictures += 1;
pictureDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblPicture.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblPicture.setFont(font);
lblPicture.setText("Pictures("+numPictures+")");
}
frame.setLocation(evt.getLocation());
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
success = true;
}
}
}
}
evt.dropComplete(success);
if (!success) {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis() + 5000, "Unsupported file: " + fileName);
ResourceMonitor.getInstance().addMessage(label);
}
} catch (UnsupportedFlavorException | IOException | URISyntaxException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
prefs = Preferences.userNodeForPackage(this.getClass());
loadPrefs();
if (theme.equals("Dark")) {
// setting WS Dark Theme
UIManager.put("text", Color.WHITE);
UIManager.put("control", Color.darkGray);
UIManager.put("nimbusBlueGrey", Color.darkGray);
UIManager.put("nimbusBase", Color.darkGray);
UIManager.put("nimbusLightBackground", new Color(134,137,143));
UIManager.put("info", new Color(195,160,0));
UIManager.put("nimbusDisabledText", Color.black);
UIManager.put("nimbusSelectionBackground", Color.yellow);
UIManager.put("nimbusSelectedText", Color.blue);
UIManager.put("nimbusSelectionBackground", new Color(255,220,35));
ColorUIResource colorResource = new ColorUIResource(Color.red.darker().darker());
UIManager.put("nimbusOrange",colorResource);
busyTab = Color.red.darker();
resetTab = Color.WHITE;
}
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblCamera.setFont(font);
lblVideo.setFont(font);
lblMusic.setFont(font);
lblPicture.setFont(font);
lblDVB.setFont(font);
lblURL.setFont(font);
lblDesktop.setFont(font);
lblText.setFont(font);
lblAudioIn.setFont(font);
tabSources.setTabComponentAt(0, lblCamera);
tabSources.setTabComponentAt(1, lblVideo);
tabSources.setTabComponentAt(2, lblMusic);
tabSources.setTabComponentAt(3, lblPicture);
tabSources.setTabComponentAt(4, lblDVB);
tabSources.setTabComponentAt(5, lblURL);
tabSources.setTabComponentAt(6, lblDesktop);
tabSources.setTabComponentAt(7, lblText);
tabSources.setTabComponentAt(8, lblAudioIn);
// if (theme.equals("Green")) {
// // setting WS Green Theme
// UIManager.put("text", Color.WHITE);
// UIManager.put("control", new Color(0,80,1));
// UIManager.put("nimbusBlueGrey", new Color(0,80,30));
// UIManager.put("nimbusBase", new Color(10,110,10));
// UIManager.put("nimbusLightBackground", new Color(0,150,1));
// UIManager.put("info", new Color(195,160,0));
// UIManager.put("nimbusDisabledText", Color.black);
// UIManager.put("nimbusSelectionBackground", Color.yellow);
// UIManager.put("nimbusSelectedText", Color.blue);
// UIManager.put("nimbusSelectionBackground", new Color(255,220,35));
// }
MasterMixer.getInstance().start();
PreviewMixer.getInstance().start();
panMaster.add(new MasterPanel(), BorderLayout.CENTER);
ChannelPanel trkPanel = new ChannelPanel();
ResourceMonitor resMon = ResourceMonitor.getInstance();
trkPanel.PanelResource.add(resMon, BorderLayout.CENTER);
resMon.setVisible(true);
bottomPanel.mainHorizontalSplit.setLeftComponent(trkPanel);
bottomPanel.mainHorizontalSplit.setRightComponent(recorder);
mainVerticalSplit.setBottomComponent(bottomPanel);
masterPanelSplit.setEnabled(false);
initAnimations();
initFaceDetection();
initWebcam();
initAudioMainSW();
initThemeMainSW();
initMainOutBE();
tglAutoAR.setSelected(autoAR);
listenerOP.resetSinks(null);
loadCustomSources();
if (cmdFile != null){
loadAtStart(cmdFile,null);
btnMinimizeAllActionPerformed(null);
}
if (cmdOut != null) {
listenerOP.addLoadingChannel(cmdOut); // used addLoadingChannel to activate Output from command line.
}
if (cmdAutoStart) {
listenerCP.resetSinks(null); // used resetSinks to AutoPlay from command line.
}
if (cmdRemote) {
listenerCP.setRemoteOn();
}
firstRun = false;
tabCount = tabSources.getTabCount();
System.out.println("Tabs="+tabCount);
}
private StreamDesktop getNewStreamDesktop(Stream s) {
return new StreamDesktop(s, this);
}
private void loadCustomSources() {
File userSettings = new File(userHomeDir + "/.webcamstudio");
if (userSettings.exists() && userSettings.isDirectory()) {
File sources = new File(userSettings, "sources");
if (sources.exists() && sources.isDirectory()) {
File[] custom = sources.listFiles();
for (File f : custom) {
if (f.getName().toLowerCase().endsWith(".wss")) {
SourceCustom streamCST;
streamCST = new SourceCustom(f);
StreamDesktop frame = new StreamDesktop(streamCST, this);
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
frame.setClosable(false);
try {
frame.setIcon(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
}
@SuppressWarnings("unchecked")
private void initAnimations() {
try {
animations.load(getClass().getResourceAsStream("/webcamstudio/resources/animations/animations.properties"));
DefaultComboBoxModel model = new DefaultComboBoxModel();
for (Object o : animations.keySet()) {
model.addElement(o);
}
cboAnimations.setModel(model);
} catch (IOException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
@SuppressWarnings("unchecked")
private void initWebcam() {
DefaultComboBoxModel model = new DefaultComboBoxModel();
if (Tools.getOS() == OS.LINUX) {
for (VideoDevice d : VideoDevice.getOutputDevices()) {
model.addElement(d.getName());
}
}
cboWebcam.setModel(model);
}
@SuppressWarnings("unchecked")
private void initAudioMainSW() {
DefaultComboBoxModel model = new DefaultComboBoxModel();
model.addElement("22050Hz");
model.addElement("44100Hz");
cboAudioHz.setModel(model);
if (audioFreq == 22050) {
cboAudioHz.setSelectedItem("22050Hz");
} else {
cboAudioHz.setSelectedItem("44100Hz");
}
}
@SuppressWarnings("unchecked")
private void initThemeMainSW() {
DefaultComboBoxModel model = new DefaultComboBoxModel();
model.addElement("Classic");
model.addElement("Dark");
cboTheme.setModel(model);
if (theme.equals("Classic")) {
cboTheme.setSelectedItem("Classic");
} else {
cboTheme.setSelectedItem("Dark");
}
}
private void initMainOutBE() {
// FF = 0 ; AV = 1 ; GS = 2
if (ffmpeg && !avconv){
if (outFMEbe == 0 || outFMEbe == 1) {
outFMEbe = 0;
tglFFmpeg.setSelected(true);
tglAVconv.setEnabled(false);
tglGst.setEnabled(true);
} else if (outFMEbe == 2) {
tglFFmpeg.setSelected(false);
tglFFmpeg.setEnabled(true);
tglAVconv.setEnabled(false);
tglGst.setSelected(true);
}
} else if (ffmpeg && avconv) {
switch (outFMEbe) {
case 0:
tglFFmpeg.setSelected(true);
tglAVconv.setEnabled(true);
tglGst.setEnabled(true);
break;
case 1:
tglFFmpeg.setEnabled(true);
tglAVconv.setSelected(true);
tglGst.setEnabled(true);
break;
case 2:
tglFFmpeg.setEnabled(true);
tglAVconv.setEnabled(true);
tglGst.setSelected(true);
break;
}
} else if (!ffmpeg && avconv){
if (outFMEbe == 1 || outFMEbe == 0) {
outFMEbe = 1;
tglAVconv.setSelected(true);
tglFFmpeg.setEnabled(false);
tglGst.setEnabled(true);
} else if (outFMEbe == 2) {
tglFFmpeg.setEnabled(false);
tglAVconv.setEnabled(true);
tglGst.setSelected(true);
}
}
// System.out.println("OutFMEbe: "+outFMEbe);
}
private void loadPrefs() {
int x = prefs.getInt("main-x", 100);
int y = prefs.getInt("main-y", 100);
int w = prefs.getInt("main-w", 800);
int h = prefs.getInt("main-h", 400);
MasterMixer.getInstance().setWidth(prefs.getInt("mastermixer-w", MasterMixer.getInstance().getWidth()));
MasterMixer.getInstance().setHeight(prefs.getInt("mastermixer-h", MasterMixer.getInstance().getHeight()));
MasterMixer.getInstance().setRate(prefs.getInt("mastermixer-r", MasterMixer.getInstance().getRate()));
PreviewMixer.getInstance().setWidth(prefs.getInt("mastermixer-w", MasterMixer.getInstance().getWidth()));
PreviewMixer.getInstance().setHeight(prefs.getInt("mastermixer-h", MasterMixer.getInstance().getHeight()));
// PreviewMixer.getInstance().setRate(prefs.getInt("mastermixer-r", MasterMixer.getInstance().getRate()));
PreviewMixer.getInstance().setRate(5);
mainSplit.setDividerLocation(prefs.getInt("split-x", mainSplit.getDividerLocation()));
mainSplit.setDividerLocation(prefs.getInt("split-last-x", mainSplit.getLastDividerLocation()));
mainVerticalSplit.setDividerLocation(prefs.getInt("split-y", mainVerticalSplit.getDividerLocation()));
mainVerticalSplit.setDividerLocation(prefs.getInt("split-last-y", mainVerticalSplit.getLastDividerLocation()));
bottomPanel.mainHorizontalSplit.setDividerLocation(prefs.getInt("split-x-bottom", bottomPanel.mainHorizontalSplit.getDividerLocation()));
bottomPanel.mainHorizontalSplit.setDividerLocation(prefs.getInt("split-last-x-bottom", bottomPanel.mainHorizontalSplit.getLastDividerLocation()));
lastFolder = new File(prefs.get("lastfolder", "."));
audioFreq = prefs.getInt("audio-freq", audioFreq);
theme = prefs.get("theme", theme);
outFMEbe = prefs.getInt("out-FME", outFMEbe);
autoAR = prefs.getBoolean("autoar", autoAR);
this.setLocation(x, y);
this.setSize(w, h);
recorder.loadPrefs(prefs);
}
private void savePrefs() {
prefs.putInt("main-x", this.getX());
prefs.putInt("main-y", this.getY());
prefs.putInt("main-w", this.getWidth());
prefs.putInt("main-h", this.getHeight());
prefs.putInt("mastermixer-w", MasterMixer.getInstance().getWidth());
prefs.putInt("mastermixer-h", MasterMixer.getInstance().getHeight());
prefs.putInt("mastermixer-r", MasterMixer.getInstance().getRate());
prefs.putInt("split-x", mainSplit.getDividerLocation());
prefs.putInt("split-last-x", mainSplit.getLastDividerLocation());
prefs.putInt("split-y", mainVerticalSplit.getDividerLocation());
prefs.putInt("split-last-y", mainVerticalSplit.getLastDividerLocation());
prefs.putInt("split-x-bottom", bottomPanel.mainHorizontalSplit.getDividerLocation());
prefs.putInt("split-last-x-bottom", bottomPanel.mainHorizontalSplit.getLastDividerLocation());
if (lastFolder != null) {
prefs.put("lastfolder", lastFolder.getAbsolutePath());
}
prefs.putInt("audio-freq", audioFreq);
prefs.put("theme", theme);
// System.out.println("Theme:"+theme);
prefs.putInt("out-FME", outFMEbe);
prefs.putBoolean("autoar", autoAR);
recorder.savePrefs(prefs);
try {
prefs.flush();
} catch (BackingStoreException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* 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() {
mainToolbar = new javax.swing.JToolBar();
btnNewStudio = new javax.swing.JButton();
btnImportStudio = new javax.swing.JButton();
btnSaveStudio = new javax.swing.JButton();
WCSAbout = new javax.swing.JButton();
jSeparator16 = new javax.swing.JToolBar.Separator();
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(3, 0), new java.awt.Dimension(0, 0));
cboWebcam = new javax.swing.JComboBox();
btnAddWebcams = new javax.swing.JButton();
btnRefreshWebcam = new javax.swing.JButton();
btnVideoDevInfo = new javax.swing.JButton();
jSeparator17 = new javax.swing.JToolBar.Separator();
jLabel2 = new javax.swing.JLabel();
cboAudioHz = new javax.swing.JComboBox();
filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(2, 0), new java.awt.Dimension(0, 0));
jSeparator10 = new javax.swing.JToolBar.Separator();
jLabel3 = new javax.swing.JLabel();
cboTheme = new javax.swing.JComboBox();
filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(2, 0), new java.awt.Dimension(0, 0));
jSeparator7 = new javax.swing.JToolBar.Separator();
btnSysGC = new javax.swing.JButton();
lblClrRam = new javax.swing.JLabel();
filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(2, 0), new java.awt.Dimension(0, 0));
jSeparator12 = new javax.swing.JToolBar.Separator();
filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(3, 0), new java.awt.Dimension(0, 0));
filler7 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0));
lblFFmpeg3 = new javax.swing.JLabel();
tglFFmpeg = new javax.swing.JToggleButton();
lblFFmpeg = new javax.swing.JLabel();
tglAVconv = new javax.swing.JToggleButton();
lblAVconv = new javax.swing.JLabel();
tglGst = new javax.swing.JToggleButton();
lblGst = new javax.swing.JLabel();
filler6 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(3, 0), new java.awt.Dimension(0, 0));
jSeparator13 = new javax.swing.JToolBar.Separator();
mainVerticalSplit = new javax.swing.JSplitPane();
masterPanelSplit = new javax.swing.JSplitPane();
panMaster = new javax.swing.JPanel();
mainSplit = new javax.swing.JSplitPane();
panSources = new javax.swing.JPanel();
toolbar = new javax.swing.JToolBar();
btnAddFile = new javax.swing.JButton();
btnAddFolder = new javax.swing.JButton();
tglAutoAR = new javax.swing.JToggleButton();
jSeparator3 = new javax.swing.JToolBar.Separator();
btnAddDVB = new javax.swing.JButton();
btnAddURL = new javax.swing.JButton();
btnAddIPCam = new javax.swing.JButton();
btnAddDVCam = new javax.swing.JButton();
btnAddHDVCam = new javax.swing.JButton();
btnAddDesktop = new javax.swing.JButton();
btnAddText = new javax.swing.JButton();
btnAddAudioSrc = new javax.swing.JButton();
jSeparator1 = new javax.swing.JToolBar.Separator();
cboAnimations = new javax.swing.JComboBox();
btnAddAnimation = new javax.swing.JButton();
jSeparator2 = new javax.swing.JToolBar.Separator();
btnMinimizeTab = new javax.swing.JButton();
btnMinimizeAll = new javax.swing.JButton();
tabSources = new javax.swing.JTabbedPane();
cameraDesktop = new javax.swing.JDesktopPane();
videoDesktop = new javax.swing.JDesktopPane();
musicDesktop = new javax.swing.JDesktopPane();
pictureDesktop = new javax.swing.JDesktopPane();
dvbDesktop = new javax.swing.JDesktopPane();
urlDesktop = new javax.swing.JDesktopPane();
desktopDesktop = new javax.swing.JDesktopPane();
textDesktop = new javax.swing.JDesktopPane();
audioInDesktop = new javax.swing.JDesktopPane();
panControls = new javax.swing.JPanel();
tabControls = new javax.swing.JTabbedPane();
lblSourceSelected = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("WebcamStudio");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
mainToolbar.setFloatable(false);
mainToolbar.setMargin(new java.awt.Insets(0, 0, 0, 50));
mainToolbar.setName("mainToolbar"); // NOI18N
btnNewStudio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/document-new.png"))); // NOI18N
btnNewStudio.setToolTipText("New Studio");
btnNewStudio.setFocusable(false);
btnNewStudio.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnNewStudio.setMaximumSize(new java.awt.Dimension(29, 28));
btnNewStudio.setMinimumSize(new java.awt.Dimension(25, 25));
btnNewStudio.setName("btnNewStudio"); // NOI18N
btnNewStudio.setPreferredSize(new java.awt.Dimension(28, 28));
btnNewStudio.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnNewStudio.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnNewStudioActionPerformed(evt);
}
});
mainToolbar.add(btnNewStudio);
btnLoadStudio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/document-open.png"))); // NOI18N
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("webcamstudio/Languages"); // NOI18N
btnLoadStudio.setToolTipText(bundle.getString("LOAD")); // NOI18N
btnLoadStudio.setFocusable(false);
btnLoadStudio.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnLoadStudio.setMaximumSize(new java.awt.Dimension(29, 28));
btnLoadStudio.setMinimumSize(new java.awt.Dimension(25, 25));
btnLoadStudio.setName("btnLoadStudio"); // NOI18N
btnLoadStudio.setPreferredSize(new java.awt.Dimension(28, 28));
btnLoadStudio.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnLoadStudio.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLoadStudioActionPerformed(evt);
}
});
mainToolbar.add(btnLoadStudio);
btnImportStudio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/chan-add.png"))); // NOI18N
btnImportStudio.setToolTipText("Import Studio");
btnImportStudio.setFocusable(false);
btnImportStudio.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnImportStudio.setMaximumSize(new java.awt.Dimension(29, 28));
btnImportStudio.setMinimumSize(new java.awt.Dimension(25, 25));
btnImportStudio.setName("btnImportStudio"); // NOI18N
btnImportStudio.setPreferredSize(new java.awt.Dimension(28, 28));
btnImportStudio.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnImportStudio.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnImportStudioActionPerformed(evt);
}
});
mainToolbar.add(btnImportStudio);
btnSaveStudio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/document-save.png"))); // NOI18N
btnSaveStudio.setToolTipText(bundle.getString("SAVE")); // NOI18N
btnSaveStudio.setFocusable(false);
btnSaveStudio.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnSaveStudio.setMaximumSize(new java.awt.Dimension(29, 28));
btnSaveStudio.setMinimumSize(new java.awt.Dimension(25, 25));
btnSaveStudio.setName("btnSaveStudio"); // NOI18N
btnSaveStudio.setPreferredSize(new java.awt.Dimension(28, 28));
btnSaveStudio.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnSaveStudio.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSaveStudioActionPerformed(evt);
}
});
mainToolbar.add(btnSaveStudio);
WCSAbout.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/user-info.png"))); // NOI18N
WCSAbout.setToolTipText("About");
WCSAbout.setFocusable(false);
WCSAbout.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
WCSAbout.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
WCSAbout.setMaximumSize(new java.awt.Dimension(29, 28));
WCSAbout.setMinimumSize(new java.awt.Dimension(25, 25));
WCSAbout.setName("WCSAbout"); // NOI18N
WCSAbout.setPreferredSize(new java.awt.Dimension(28, 28));
WCSAbout.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
WCSAbout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
WCSAboutActionPerformed(evt);
}
});
mainToolbar.add(WCSAbout);
jSeparator16.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jSeparator16.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator16.setName("jSeparator16"); // NOI18N
jSeparator16.setOpaque(true);
jSeparator16.setSeparatorSize(new java.awt.Dimension(3, 10));
mainToolbar.add(jSeparator16);
filler1.setName("filler1"); // NOI18N
mainToolbar.add(filler1);
cboWebcam.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cboWebcam.setToolTipText("Detected Video Devices");
cboWebcam.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
cboWebcam.setName("cboWebcam"); // NOI18N
mainToolbar.add(cboWebcam);
btnAddWebcams.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/camera-video.png"))); // NOI18N
btnAddWebcams.setToolTipText("Add Selected Device");
btnAddWebcams.setFocusable(false);
btnAddWebcams.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddWebcams.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddWebcams.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddWebcams.setName("btnAddWebcams"); // NOI18N
btnAddWebcams.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddWebcams.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddWebcams.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddWebcamsActionPerformed(evt);
}
});
mainToolbar.add(btnAddWebcams);
btnRefreshWebcam.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/view-refresh.png"))); // NOI18N
btnRefreshWebcam.setToolTipText("Refresh Video Devices Detection");
btnRefreshWebcam.setFocusable(false);
btnRefreshWebcam.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnRefreshWebcam.setMaximumSize(new java.awt.Dimension(29, 28));
btnRefreshWebcam.setMinimumSize(new java.awt.Dimension(25, 25));
btnRefreshWebcam.setName("btnRefreshWebcam"); // NOI18N
btnRefreshWebcam.setPreferredSize(new java.awt.Dimension(28, 28));
btnRefreshWebcam.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnRefreshWebcam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnRefreshWebcamActionPerformed(evt);
}
});
mainToolbar.add(btnRefreshWebcam);
btnVideoDevInfo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/camera-info.png"))); // NOI18N
btnVideoDevInfo.setToolTipText(bundle.getString("VIDEO_DEVICE_INFO")); // NOI18N
btnVideoDevInfo.setFocusable(false);
btnVideoDevInfo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnVideoDevInfo.setMaximumSize(new java.awt.Dimension(29, 28));
btnVideoDevInfo.setMinimumSize(new java.awt.Dimension(25, 25));
btnVideoDevInfo.setName("btnVideoDevInfo"); // NOI18N
btnVideoDevInfo.setPreferredSize(new java.awt.Dimension(28, 28));
btnVideoDevInfo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnVideoDevInfo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnVideoDevInfoActionPerformed(evt);
}
});
mainToolbar.add(btnVideoDevInfo);
jSeparator17.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jSeparator17.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator17.setName("jSeparator17"); // NOI18N
jSeparator17.setOpaque(true);
jSeparator17.setSeparatorSize(new java.awt.Dimension(5, 10));
mainToolbar.add(jSeparator17);
jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/audio-Hz.png"))); // NOI18N
jLabel2.setToolTipText("Master Audio Sample Rate");
jLabel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 5, 1, 1));
jLabel2.setName("jLabel2"); // NOI18N
mainToolbar.add(jLabel2);
cboAudioHz.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cboAudioHz.setToolTipText("Choose Default Audio Output Quality.");
cboAudioHz.setName("cboAudioHz"); // NOI18N
cboAudioHz.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cboAudioHzActionPerformed(evt);
}
});
mainToolbar.add(cboAudioHz);
filler2.setName("filler2"); // NOI18N
mainToolbar.add(filler2);
jSeparator10.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jSeparator10.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator10.setName("jSeparator10"); // NOI18N
jSeparator10.setOpaque(true);
jSeparator10.setSeparatorSize(new java.awt.Dimension(5, 10));
mainToolbar.add(jSeparator10);
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/image-x-generic.png"))); // NOI18N
jLabel3.setToolTipText("Master Theme Selector");
jLabel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 5, 1, 1));
jLabel3.setName("jLabel3"); // NOI18N
mainToolbar.add(jLabel3);
cboTheme.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cboTheme.setToolTipText("Choose Default WS Theme.");
cboTheme.setName("cboTheme"); // NOI18N
cboTheme.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cboThemeActionPerformed(evt);
}
});
mainToolbar.add(cboTheme);
filler3.setName("filler3"); // NOI18N
mainToolbar.add(filler3);
jSeparator7.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jSeparator7.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator7.setName("jSeparator7"); // NOI18N
jSeparator7.setOpaque(true);
jSeparator7.setSeparatorSize(new java.awt.Dimension(5, 10));
mainToolbar.add(jSeparator7);
btnSysGC.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/button-small-clear.png"))); // NOI18N
btnSysGC.setToolTipText("Try to Clean Up some memory");
btnSysGC.setFocusable(false);
btnSysGC.setName("btnSysGC"); // NOI18N
btnSysGC.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnSysGC.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSysGCActionPerformed(evt);
}
});
mainToolbar.add(btnSysGC);
lblClrRam.setFont(new java.awt.Font("Ubuntu Condensed", 0, 12)); // NOI18N
lblClrRam.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lblClrRam.setText("RAM");
lblClrRam.setToolTipText("Try to Clean Up some memory");
lblClrRam.setName("lblClrRam"); // NOI18N
mainToolbar.add(lblClrRam);
filler5.setName("filler5"); // NOI18N
mainToolbar.add(filler5);
jSeparator12.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jSeparator12.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator12.setName("jSeparator12"); // NOI18N
jSeparator12.setOpaque(true);
jSeparator12.setSeparatorSize(new java.awt.Dimension(5, 10));
mainToolbar.add(jSeparator12);
filler4.setName("filler4"); // NOI18N
mainToolbar.add(filler4);
filler7.setName("filler7"); // NOI18N
mainToolbar.add(filler7);
lblFFmpeg3.setBackground(new java.awt.Color(102, 102, 102));
lblFFmpeg3.setFont(new java.awt.Font("Ubuntu Condensed", 1, 14)); // NOI18N
lblFFmpeg3.setText("OUT BackEnd: ");
lblFFmpeg3.setToolTipText("Select Available Outputs Back-Ends");
lblFFmpeg3.setName("lblFFmpeg3"); // NOI18N
mainToolbar.add(lblFFmpeg3);
tglFFmpeg.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/FFmpeg.png"))); // NOI18N
tglFFmpeg.setToolTipText("Use FFmpeg Output Backend.");
tglFFmpeg.setFocusable(false);
tglFFmpeg.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tglFFmpeg.setMaximumSize(new java.awt.Dimension(29, 28));
tglFFmpeg.setMinimumSize(new java.awt.Dimension(25, 25));
tglFFmpeg.setName("tglFFmpeg"); // NOI18N
tglFFmpeg.setPreferredSize(new java.awt.Dimension(28, 29));
tglFFmpeg.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/FFmpeg.png"))); // NOI18N
tglFFmpeg.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/FFmpegSelected.png"))); // NOI18N
tglFFmpeg.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
tglFFmpeg.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tglFFmpegActionPerformed(evt);
}
});
mainToolbar.add(tglFFmpeg);
lblFFmpeg.setFont(new java.awt.Font("Ubuntu Condensed", 0, 12)); // NOI18N
lblFFmpeg.setText("FFmpeg ");
lblFFmpeg.setName("lblFFmpeg"); // NOI18N
mainToolbar.add(lblFFmpeg);
tglAVconv.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/FFmpeg.png"))); // NOI18N
tglAVconv.setToolTipText("Use Libav Output Backend.");
tglAVconv.setFocusable(false);
tglAVconv.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tglAVconv.setMaximumSize(new java.awt.Dimension(29, 28));
tglAVconv.setMinimumSize(new java.awt.Dimension(25, 25));
tglAVconv.setName("tglAVconv"); // NOI18N
tglAVconv.setPreferredSize(new java.awt.Dimension(28, 29));
tglAVconv.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/FFmpeg.png"))); // NOI18N
tglAVconv.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/FFmpegSelected.png"))); // NOI18N
tglAVconv.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
tglAVconv.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tglAVconvActionPerformed(evt);
}
});
mainToolbar.add(tglAVconv);
lblAVconv.setFont(new java.awt.Font("Ubuntu Condensed", 0, 12)); // NOI18N
lblAVconv.setText("Libav ");
lblAVconv.setName("lblAVconv"); // NOI18N
mainToolbar.add(lblAVconv);
tglGst.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/gstreamer.png"))); // NOI18N
tglGst.setToolTipText("Use GStreamer Output Backend.");
tglGst.setFocusable(false);
tglGst.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tglGst.setMaximumSize(new java.awt.Dimension(29, 28));
tglGst.setMinimumSize(new java.awt.Dimension(25, 25));
tglGst.setName("tglGst"); // NOI18N
tglGst.setPreferredSize(new java.awt.Dimension(28, 29));
tglGst.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/gstreamer.png"))); // NOI18N
tglGst.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/gstreamerSelected.png"))); // NOI18N
tglGst.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
tglGst.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tglGstActionPerformed(evt);
}
});
mainToolbar.add(tglGst);
lblGst.setFont(new java.awt.Font("Ubuntu Condensed", 0, 12)); // NOI18N
lblGst.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
lblGst.setText("GStreamer");
lblGst.setName("lblGst"); // NOI18N
mainToolbar.add(lblGst);
filler6.setName("filler6"); // NOI18N
mainToolbar.add(filler6);
jSeparator13.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jSeparator13.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator13.setName("jSeparator13"); // NOI18N
jSeparator13.setOpaque(true);
jSeparator13.setSeparatorSize(new java.awt.Dimension(5, 10));
mainToolbar.add(jSeparator13);
getContentPane().add(mainToolbar, java.awt.BorderLayout.PAGE_START);
mainVerticalSplit.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
mainVerticalSplit.setName("mainVerticalSplit"); // NOI18N
mainVerticalSplit.setOneTouchExpandable(true);
masterPanelSplit.setDividerSize(0);
masterPanelSplit.setName("masterPanelSplit"); // NOI18N
panMaster.setName("panMaster"); // NOI18N
panMaster.setLayout(new java.awt.BorderLayout());
masterPanelSplit.setLeftComponent(panMaster);
mainSplit.setDividerLocation(500);
mainSplit.setName("mainSplit"); // NOI18N
mainSplit.setOneTouchExpandable(true);
panSources.setName("panSources"); // NOI18N
toolbar.setFloatable(false);
toolbar.setRollover(true);
toolbar.setMinimumSize(new java.awt.Dimension(200, 34));
toolbar.setName("toolbar"); // NOI18N
btnAddFile.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/studio-add.png"))); // NOI18N
btnAddFile.setToolTipText("Load Media");
btnAddFile.setFocusable(false);
btnAddFile.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddFile.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddFile.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddFile.setName("btnAddFile"); // NOI18N
btnAddFile.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddFile.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddFileActionPerformed(evt);
}
});
toolbar.add(btnAddFile);
btnAddFolder.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/media-add-folder.png"))); // NOI18N
btnAddFolder.setToolTipText("Load Media Folder");
btnAddFolder.setFocusable(false);
btnAddFolder.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddFolder.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddFolder.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddFolder.setName("btnAddFolder"); // NOI18N
btnAddFolder.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddFolder.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddFolder.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddFolderActionPerformed(evt);
}
});
toolbar.add(btnAddFolder);
tglAutoAR.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/ar_button.png"))); // NOI18N
tglAutoAR.setToolTipText("Automatic A/R detection Switch.");
tglAutoAR.setFocusable(false);
tglAutoAR.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
tglAutoAR.setMaximumSize(new java.awt.Dimension(29, 28));
tglAutoAR.setMinimumSize(new java.awt.Dimension(25, 25));
tglAutoAR.setName("tglAutoAR"); // NOI18N
tglAutoAR.setPreferredSize(new java.awt.Dimension(28, 29));
tglAutoAR.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/ar_button.png"))); // NOI18N
tglAutoAR.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/ar_button_selected.png"))); // NOI18N
tglAutoAR.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
tglAutoAR.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tglAutoARActionPerformed(evt);
}
});
toolbar.add(tglAutoAR);
jSeparator3.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator3.setName("jSeparator3"); // NOI18N
jSeparator3.setOpaque(true);
toolbar.add(jSeparator3);
btnAddDVB.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/dvb.png"))); // NOI18N
btnAddDVB.setToolTipText("Add DVB-T Stream");
btnAddDVB.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
btnAddDVB.setFocusable(false);
btnAddDVB.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddDVB.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddDVB.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddDVB.setName("btnAddDVB"); // NOI18N
btnAddDVB.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddDVB.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddDVB.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddDVBActionPerformed(evt);
}
});
toolbar.add(btnAddDVB);
btnAddURL.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/url5.png"))); // NOI18N
btnAddURL.setToolTipText("Add URL Stream");
btnAddURL.setFocusable(false);
btnAddURL.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddURL.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddURL.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddURL.setName("btnAddURL"); // NOI18N
btnAddURL.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddURL.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddURL.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddURLActionPerformed(evt);
}
});
toolbar.add(btnAddURL);
btnAddIPCam.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/ip-cam-2.png"))); // NOI18N
btnAddIPCam.setToolTipText("Add IPCam Stream");
btnAddIPCam.setFocusable(false);
btnAddIPCam.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddIPCam.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddIPCam.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddIPCam.setName("btnAddIPCam"); // NOI18N
btnAddIPCam.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddIPCam.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddIPCam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddIPCamActionPerformed(evt);
}
});
toolbar.add(btnAddIPCam);
btnAddDVCam.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/Firewire.png"))); // NOI18N
btnAddDVCam.setToolTipText("Add DVCam Stream");
btnAddDVCam.setFocusable(false);
btnAddDVCam.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddDVCam.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddDVCam.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddDVCam.setName("btnAddDVCam"); // NOI18N
btnAddDVCam.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddDVCam.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddDVCam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddDVCamActionPerformed(evt);
}
});
toolbar.add(btnAddDVCam);
btnAddHDVCam.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/HDV2.png"))); // NOI18N
btnAddHDVCam.setToolTipText("Add Firewire HDV Stream");
btnAddHDVCam.setFocusable(false);
btnAddHDVCam.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddHDVCam.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddHDVCam.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddHDVCam.setName("btnAddHDVCam"); // NOI18N
btnAddHDVCam.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddHDVCam.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddHDVCam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddHDVCamActionPerformed(evt);
}
});
toolbar.add(btnAddHDVCam);
btnAddDesktop.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/user-desktop.png"))); // NOI18N
btnAddDesktop.setToolTipText(bundle.getString("DESKTOP")); // NOI18N
btnAddDesktop.setFocusable(false);
btnAddDesktop.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddDesktop.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddDesktop.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddDesktop.setName("btnAddDesktop"); // NOI18N
btnAddDesktop.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddDesktop.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddDesktop.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddDesktopActionPerformed(evt);
}
});
toolbar.add(btnAddDesktop);
btnAddText.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/accessories-text-editor.png"))); // NOI18N
btnAddText.setToolTipText("Text/QRCode");
btnAddText.setFocusable(false);
btnAddText.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddText.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddText.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddText.setName("btnAddText"); // NOI18N
btnAddText.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddText.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddText.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddTextActionPerformed(evt);
}
});
toolbar.add(btnAddText);
btnAddAudioSrc.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/audio-volume-high.png"))); // NOI18N
btnAddAudioSrc.setToolTipText("AudioSource");
btnAddAudioSrc.setFocusable(false);
btnAddAudioSrc.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddAudioSrc.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddAudioSrc.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddAudioSrc.setName("btnAddAudioSrc"); // NOI18N
btnAddAudioSrc.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddAudioSrc.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddAudioSrc.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddAudioSrcActionPerformed(evt);
}
});
toolbar.add(btnAddAudioSrc);
jSeparator1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jSeparator1.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator1.setName("jSeparator1"); // NOI18N
jSeparator1.setOpaque(true);
toolbar.add(jSeparator1);
cboAnimations.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cboAnimations.setToolTipText(bundle.getString("ANIMATIONS")); // NOI18N
cboAnimations.setName("cboAnimations"); // NOI18N
toolbar.add(cboAnimations);
btnAddAnimation.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/Anim-add.png"))); // NOI18N
btnAddAnimation.setToolTipText(bundle.getString("ADD_ANIMATION")); // NOI18N
btnAddAnimation.setFocusable(false);
btnAddAnimation.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnAddAnimation.setMaximumSize(new java.awt.Dimension(29, 28));
btnAddAnimation.setMinimumSize(new java.awt.Dimension(25, 25));
btnAddAnimation.setName("btnAddAnimation"); // NOI18N
btnAddAnimation.setPreferredSize(new java.awt.Dimension(28, 28));
btnAddAnimation.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnAddAnimation.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddAnimationActionPerformed(evt);
}
});
toolbar.add(btnAddAnimation);
jSeparator2.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
jSeparator2.setName("jSeparator2"); // NOI18N
jSeparator2.setOpaque(true);
toolbar.add(jSeparator2);
btnMinimizeTab.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/go-down.png"))); // NOI18N
btnMinimizeTab.setToolTipText(bundle.getString("ICON_TAB")); // NOI18N
btnMinimizeTab.setFocusable(false);
btnMinimizeTab.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnMinimizeTab.setMaximumSize(new java.awt.Dimension(29, 28));
btnMinimizeTab.setMinimumSize(new java.awt.Dimension(25, 25));
btnMinimizeTab.setName("btnMinimizeTab"); // NOI18N
btnMinimizeTab.setPreferredSize(new java.awt.Dimension(28, 28));
btnMinimizeTab.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnMinimizeTab.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnMinimizeTabActionPerformed(evt);
}
});
toolbar.add(btnMinimizeTab);
btnMinimizeAll.setIcon(new javax.swing.ImageIcon(getClass().getResource("/webcamstudio/resources/tango/minimize-all.png"))); // NOI18N
btnMinimizeAll.setToolTipText(bundle.getString("ICON_ALL")); // NOI18N
btnMinimizeAll.setFocusable(false);
btnMinimizeAll.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnMinimizeAll.setMaximumSize(new java.awt.Dimension(29, 28));
btnMinimizeAll.setMinimumSize(new java.awt.Dimension(25, 25));
btnMinimizeAll.setName("btnMinimizeAll"); // NOI18N
btnMinimizeAll.setPreferredSize(new java.awt.Dimension(28, 28));
btnMinimizeAll.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnMinimizeAll.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnMinimizeAllActionPerformed(evt);
}
});
toolbar.add(btnMinimizeAll);
tabSources.setFont(new java.awt.Font("Noto Sans", 0, 11)); // NOI18N
tabSources.setName("tabSources"); // NOI18N
tabSources.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tabSourcesMouseClicked(evt);
}
});
cameraDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_CAMERAS"))); // NOI18N
cameraDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
cameraDesktop.setAutoscrolls(true);
cameraDesktop.setName("cameraDesktop"); // NOI18N
tabSources.addTab("Cameras(0)", cameraDesktop);
videoDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_VIDEOS"))); // NOI18N
videoDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
videoDesktop.setAutoscrolls(true);
videoDesktop.setName("videoDesktop"); // NOI18N
tabSources.addTab("Videos(0)", videoDesktop);
musicDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_MUSICS"))); // NOI18N
musicDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
musicDesktop.setAutoscrolls(true);
musicDesktop.setName("musicDesktop"); // NOI18N
tabSources.addTab("Musics(0)", musicDesktop);
pictureDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_PICTURES"))); // NOI18N
pictureDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
pictureDesktop.setAutoscrolls(true);
pictureDesktop.setName("pictureDesktop"); // NOI18N
tabSources.addTab("Pictures(0)", pictureDesktop);
dvbDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_DVBS"))); // NOI18N
dvbDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
dvbDesktop.setAutoscrolls(true);
dvbDesktop.setName("dvbDesktop"); // NOI18N
tabSources.addTab("DVBs(0)", dvbDesktop);
urlDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_URLS"))); // NOI18N
urlDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
urlDesktop.setAutoscrolls(true);
urlDesktop.setName("urlDesktop"); // NOI18N
tabSources.addTab("URLs(0)", urlDesktop);
desktopDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_DESKTOPS"))); // NOI18N
desktopDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
desktopDesktop.setAutoscrolls(true);
desktopDesktop.setName("desktopDesktop"); // NOI18N
tabSources.addTab("Desktops(0)", desktopDesktop);
textDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCES_TEXTS"))); // NOI18N
textDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
textDesktop.setAutoscrolls(true);
textDesktop.setName("textDesktop"); // NOI18N
tabSources.addTab("Texts(0)", textDesktop);
audioInDesktop.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("SOURCE_AUDIOINS"))); // NOI18N
audioInDesktop.setToolTipText(bundle.getString("DROP_SOURCSE")); // NOI18N
audioInDesktop.setAutoscrolls(true);
audioInDesktop.setName("audioInDesktop"); // NOI18N
tabSources.addTab("AudioIns(0)", audioInDesktop);
javax.swing.GroupLayout panSourcesLayout = new javax.swing.GroupLayout(panSources);
panSources.setLayout(panSourcesLayout);
panSourcesLayout.setHorizontalGroup(
panSourcesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panSourcesLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panSourcesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(toolbar, javax.swing.GroupLayout.DEFAULT_SIZE, 488, Short.MAX_VALUE)
.addComponent(tabSources)))
);
panSourcesLayout.setVerticalGroup(
panSourcesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panSourcesLayout.createSequentialGroup()
.addComponent(toolbar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabSources, javax.swing.GroupLayout.DEFAULT_SIZE, 402, Short.MAX_VALUE)
.addContainerGap())
);
mainSplit.setLeftComponent(panSources);
panControls.setName("panControls"); // NOI18N
panControls.setPreferredSize(new java.awt.Dimension(200, 455));
panControls.setLayout(new java.awt.BorderLayout());
tabControls.setBorder(javax.swing.BorderFactory.createTitledBorder("Source Properties"));
tabControls.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT);
tabControls.setName("tabControls"); // NOI18N
tabControls.setPreferredSize(new java.awt.Dimension(200, 455));
panControls.add(tabControls, java.awt.BorderLayout.CENTER);
lblSourceSelected.setName("lblSourceSelected"); // NOI18N
panControls.add(lblSourceSelected, java.awt.BorderLayout.SOUTH);
mainSplit.setRightComponent(panControls);
masterPanelSplit.setRightComponent(mainSplit);
mainVerticalSplit.setLeftComponent(masterPanelSplit);
getContentPane().add(mainVerticalSplit, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>//GEN-END:initComponents
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
boolean close = true;
ArrayList<Stream> streamzI = MasterChannels.getInstance().getStreams();
ArrayList<String> sourceChI = MasterChannels.getInstance().getChannels();
if (streamzI.size()>0 || sourceChI.size()>0) {
int result = JOptionPane.showConfirmDialog(this,"Really Close WebcamStudio ?","Save Studio Remainder",JOptionPane.YES_NO_CANCEL_OPTION);
switch(result){
case JOptionPane.YES_OPTION:
close = true;
break;
case JOptionPane.NO_OPTION:
close = false;
break;
case JOptionPane.CANCEL_OPTION:
close = false;
break;
case JOptionPane.CLOSED_OPTION:
close = false;
break;
}
if (close) {
savePrefs();
SystemPlayer.getInstance(null).stop();
Tools.sleep(10);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().endAllStream();
Tools.sleep(10);
MasterMixer.getInstance().stop();
PreviewMixer.getInstance().stop();
try {
execPACTL("pactl unload-module module-null-sink");
} catch (IOException | InterruptedException ex) {
Logger.getLogger(OutputPanel.class.getName()).log(Level.SEVERE, null, ex);
}
Tools.sleep(100);
listenerOP.resetBtnStates(null);
listenerOP.resetSinks(null);
tabControls.removeAll();
tabControls.repaint();
Tools.sleep(300);
cameraDesktop.removeAll();
Tools.sleep(10);
System.out.println("Cleaning up ...");
File directory = new File(userHomeDir+"/.webcamstudio");
for(File f: directory.listFiles()) {
if(f.getName().startsWith("WSU") || f.getName().startsWith("WSC")) {
f.delete();
}
}
System.out.println("Thanks for using WebcamStudio ...");
System.out.println("GoodBye!");
System.exit(0);
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "WebcamStudio Quit Action Cancelled.");
ResourceMonitor.getInstance().addMessage(label);
}
} else {
savePrefs();
SystemPlayer.getInstance(null).stop();
Tools.sleep(10);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().endAllStream();
Tools.sleep(10);
MasterMixer.getInstance().stop();
PreviewMixer.getInstance().stop();
System.out.println("Thanks for using WebcamStudio ...");
System.out.println("GoodBye!");
System.exit(0);
}
}//GEN-LAST:event_formWindowClosing
private void btnAddDesktopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddDesktopActionPerformed
SourceDesktop streamDesk;
streamDesk = new SourceDesktop();
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
streamDesk.addChannel(SourceChannel.getChannel(sc, streamDesk));
}
StreamDesktop frame = new StreamDesktop(streamDesk, this);
numDesktops += 1;
desktopDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblDesktop.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblDesktop.setFont(font);
lblDesktop.setText("Desktops("+numDesktops+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddDesktopActionPerformed
private void btnAddTextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddTextActionPerformed
SourceText streamTXT;
streamTXT = new SourceText("ws");
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
streamTXT.addChannel(SourceChannel.getChannel(sc, streamTXT));
}
StreamDesktop frame = new StreamDesktop(streamTXT, this);
numTexts += 1;
textDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblText.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblText.setFont(font);
lblText.setText("Texts("+numTexts+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddTextActionPerformed
private void btnAddFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddFileActionPerformed
JFileChooser chooser = new JFileChooser(lastFolder);
FileNameExtensionFilter mediaFilter = new FileNameExtensionFilter("Supported Media files", "avi", "ogg", "jpeg", "ogv", "mp4", "m4v", "mpg", "divx", "wmv", "flv", "mov", "mkv", "vob", "jpg", "bmp", "png", "gif", "mp3", "wav", "wma", "m4a", ".mp2");
chooser.setFileFilter(mediaFilter);
chooser.setMultiSelectionEnabled(false);
chooser.setDialogTitle("Add Media file ...");
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int retVal = chooser.showOpenDialog(this);
if (retVal == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
if (file != null) {
lastFolder = file.getParentFile();
String FileName = file.getName();
System.out.println("Name: " + FileName);
}
if (file != null) {
Stream s = Stream.getInstance(file);
if (s != null) {
if (s instanceof SourceMovie || s instanceof SourceMusic || s instanceof SourceImage || s instanceof SourceImageU || s instanceof SourceImageGif) {
getVideoParams(s, file, null);
}
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
s.addChannel(SourceChannel.getChannel(sc, s));
}
StreamDesktop frame = new StreamDesktop(s, this);
if (s instanceof SourceMovie) {
numVideos += 1;
videoDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblVideo.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblVideo.setFont(font);
lblVideo.setText("Videos("+numVideos+")");
} else if (s instanceof SourceMusic) {
numMusics += 1;
musicDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblMusic.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblMusic.setFont(font);
lblMusic.setText("Musics("+numMusics+")");
} else if (s instanceof SourceImage || s instanceof SourceImageU || s instanceof SourceImageGif) {
numPictures += 1;
pictureDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblPicture.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblPicture.setFont(font);
lblPicture.setText("Pictures("+numPictures+")");
}
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "No File Selected!");
ResourceMonitor.getInstance().addMessage(label);
}
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Loading Cancelled!");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_btnAddFileActionPerformed
private void btnAddAnimationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddAnimationActionPerformed
try {
String key = cboAnimations.getSelectedItem().toString();
String res = animations.getProperty(key);
URL url = getClass().getResource("/webcamstudio/resources/animations/" + res);
Stream streamAnm;
streamAnm = new SourceImageGif(key, url);
BufferedImage gifImage = ImageIO.read(url);
getVideoParams(streamAnm, null, gifImage);
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
streamAnm.addChannel(SourceChannel.getChannel(sc, streamAnm));
}
StreamDesktop frame = new StreamDesktop(streamAnm, this);
numPictures += 1;
pictureDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblPicture.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblPicture.setFont(font);
lblPicture.setText("Pictures("+numPictures+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddAnimationActionPerformed
private void btnMinimizeTabActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMinimizeTabActionPerformed
JDesktopPane selectedDesktop = null;
int tabIndex = tabSources.getSelectedIndex();
if (tabIndex == 0) {
selectedDesktop = cameraDesktop;
} else if (tabIndex == 1) {
selectedDesktop = videoDesktop;
} else if (tabIndex == 2) {
selectedDesktop = musicDesktop;
} else if (tabIndex == 3) {
selectedDesktop = pictureDesktop;
} else if (tabIndex == 4) {
selectedDesktop = dvbDesktop;
} else if (tabIndex == 5) {
selectedDesktop = urlDesktop;
} else if (tabIndex == 6) {
selectedDesktop = desktopDesktop;
} else if (tabIndex == 7) {
selectedDesktop = textDesktop;
} else if (tabIndex == 8) {
selectedDesktop = audioInDesktop;
}
for (Component c : selectedDesktop.getComponents()) {
if (c instanceof StreamDesktop) {
StreamDesktop d = (StreamDesktop) c;
try {
Tools.sleep(20);
d.setIcon(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}//GEN-LAST:event_btnMinimizeTabActionPerformed
private void btnSaveStudioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveStudioActionPerformed
final java.awt.event.ActionEvent sEvt = evt;
try {
File file;
boolean overWrite = true;
ArrayList<Stream> streamzI = MasterChannels.getInstance().getStreams();
ArrayList<String> sourceChI = MasterChannels.getInstance().getChannels();
if (streamzI.size()>0 || sourceChI.size()>0) {
Object[] options = {"OK"};
JOptionPane.showOptionDialog(this,
"All Playing Streams will be Stopped !!!","Attention",
JOptionPane.PLAIN_MESSAGE,
JOptionPane.INFORMATION_MESSAGE,
null,
options,
options[0]);
}
JFileChooser chooser = new JFileChooser(lastFolder);
FileNameExtensionFilter studioFilter = new FileNameExtensionFilter("Studio files (*.studio)", "studio");
chooser.setFileFilter(studioFilter);
chooser.setDialogTitle("Save a Studio ...");
chooser.setDialogType(JFileChooser.SAVE_DIALOG);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int retval = chooser.showSaveDialog(this);
file = chooser.getSelectedFile();
if (retval == JFileChooser.APPROVE_OPTION && file!=null && file.exists()) {
int result = JOptionPane.showConfirmDialog(this,"File exists, overwrite?","Attention",JOptionPane.YES_NO_CANCEL_OPTION);
switch(result){
case JOptionPane.YES_OPTION:
overWrite = true;
break;
case JOptionPane.NO_OPTION:
overWrite = false;
break;
case JOptionPane.CANCEL_OPTION:
overWrite = false;
break;
case JOptionPane.CLOSED_OPTION:
overWrite = false;
break;
}
}
if (retval == JFileChooser.APPROVE_OPTION && overWrite) {
final WaitingDialog waitingD = new WaitingDialog(this);
final File fileF = file;
lblSourceSelected.setText("");
waitingD.setModal(true);
SwingWorker<?,?> worker = new SwingWorker<Void,Integer>(){
@Override
protected Void doInBackground() throws InterruptedException{
if (fileF!=null){
File fileS = fileF;
lastFolder = fileS.getParentFile();
SystemPlayer.getInstance(null).stop();
Tools.sleep(100);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(100);
MasterChannels.getInstance().stopAllStream();
Tools.sleep(100);
listenerCP.stopChTime(sEvt);
for (Stream s : MasterChannels.getInstance().getStreams()){
s.updateStatus();
}
if (!fileS.getName().endsWith(".studio")){
fileS = new File(fileS.getParent(),fileS.getName()+".studio");
}
try {
Studio.save(fileS);
} catch (IOException | XMLStreamException | IllegalArgumentException | IllegalAccessException | TransformerException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Studio is saved!");
ResourceMonitor.getInstance().addMessage(label);
// String build = new Version().getBuild();
setTitle("WebcamStudio " + Version.version + " ("+fileS.getName()+")");
}
return null;
}
@Override
protected void done(){
Tools.sleep(10);
waitingD.dispose();
}
};
worker.execute();
waitingD.toFront();
waitingD.setVisible(true);
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Saving Cancelled!");
ResourceMonitor.getInstance().addMessage(label);
}
} catch (HeadlessException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Error: " + ex.getMessage());
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_btnSaveStudioActionPerformed
public static class WaitingDialog extends JDialog {
private final JLabel workingLabel = new JLabel();
public WaitingDialog(JFrame owner) {
workingLabel.setBorder(BorderFactory.createLineBorder(Color.black));
workingLabel.setIcon(new ImageIcon(getClass().getResource("/webcamstudio/resources/tango/working-4.png"))); // NOI18N
workingLabel.setText(" Working... ");
this.setUndecorated(true);
this.add(workingLabel);
this.pack();
// move window to center of owner
int x = owner.getX()
+ (owner.getWidth() - this.getPreferredSize().width) / 2;
int y = owner.getY()
+ (owner.getHeight() - this.getPreferredSize().height) / 2;
this.setLocation(x, y);
this.repaint();
}
}
public static void getWebcamParams(Stream stream, VideoDevice d) {
String infoCmd;
Runtime rt = Runtime.getRuntime();
infoCmd = "v4l2-ctl --get-fmt-video --device " + d.getFile();
// System.out.println("infoCmd: "+infoCmd);
File fileD = new File(userHomeDir+"/.webcamstudio/"+"dSize.sh");
FileOutputStream fosD;
Writer dosD = null;
try {
fosD = new FileOutputStream(fileD);
dosD= new OutputStreamWriter(fosD);
} catch (FileNotFoundException ex) {
Logger.getLogger(ProcessRenderer.class.getName()).log(Level.SEVERE, null, ex);
}
try {
if (dosD != null) {
dosD.write("#!/bin/bash\n");
dosD.write(infoCmd+"\n");
dosD.close();
}
} catch (IOException ex) {
Logger.getLogger(ProcessRenderer.class.getName()).log(Level.SEVERE, null, ex);
}
fileD.setExecutable(true);
String batchWCComm = userHomeDir+"/.webcamstudio/"+"dSize.sh";
try {
Process infoP = rt.exec(batchWCComm);
Tools.sleep(10);
infoP.waitFor(); //Author spoonybard896
InputStream lsOut = infoP.getInputStream();
InputStreamReader isr = new InputStreamReader(lsOut);
BufferedReader in = new BufferedReader(isr);
String lineR;
while ((lineR = in.readLine()) != null) {
// System.out.println("lineR: "+lineR);
if(lineR.contains("Width")) {
lineR = lineR.trim();
String[] temp;
temp = lineR.split(":");
// System.out.println("Split:"+temp[0]+" Split:"+temp[1]);
String Res = temp[1].replaceAll(" ", "");
String[] wh;
wh = Res.split("/");
int w = Integer.parseInt(wh[0]);
int h = Integer.parseInt(wh[1]);
// System.out.println("W:"+w+" H:"+h);
int mixerW = MasterMixer.getInstance().getWidth();
int mixerH = MasterMixer.getInstance().getHeight();
int hAR = (mixerW*h)/w;
int wAR = (mixerH*w)/h;
if (hAR > mixerH) {
hAR = mixerH;
int xPos = (mixerW - wAR)/2;
stream.setX(xPos);
stream.setWidth(wAR);
}
if (w > mixerW) {
int yPos = (mixerH- hAR)/2;
stream.setY(yPos);
stream.setHeight(hAR);
} else {
if (h < mixerH) {
int yPos = (mixerH- hAR)/2;
stream.setY(yPos);
} else {
hAR = mixerH;
}
}
stream.setHeight(hAR);
}
}
} catch (IOException | InterruptedException | NumberFormatException e) {
}
}
public static void getVideoParams(Stream stream, File file, BufferedImage image) {
if (image != null) {
if (autoAR) {
int w = image.getWidth();
int h = image.getHeight();
int mixerW = MasterMixer.getInstance().getWidth();
int mixerH = MasterMixer.getInstance().getHeight();
int hAR = (mixerW*h)/w;
int wAR = (mixerH*w)/h;
if (hAR > mixerH) {
hAR = mixerH;
int xPos = (mixerW - wAR)/2;
stream.setX(xPos);
stream.setWidth(wAR);
}
if (w > mixerW) {
int yPos = (mixerH- hAR)/2;
stream.setY(yPos);
stream.setHeight(hAR);
} else {
if (h < mixerH) {
int yPos = (mixerH- hAR)/2;
stream.setY(yPos);
} else {
hAR = mixerH;
}
}
stream.setHeight(hAR);
}
} else {
String infoCmd;
Runtime rt = Runtime.getRuntime();
if (Screen.avconvDetected()){
infoCmd = "avconv -i " + "\"" + file.getAbsolutePath() + "\"";
} else {
infoCmd = "ffmpeg -i " + "\"" + file.getAbsolutePath() + "\"";
}
// System.out.println(infoCmd);
File fileD = new File(userHomeDir+"/.webcamstudio/"+"DCalc.sh");
FileOutputStream fosD;
Writer dosD = null;
try {
fosD = new FileOutputStream(fileD);
dosD = new OutputStreamWriter(fosD);
} catch (FileNotFoundException ex) {
Logger.getLogger(ProcessRenderer.class.getName()).log(Level.SEVERE, null, ex);
}
try {
if (dosD != null) {
dosD.write("#!/bin/bash\n");
dosD.write(infoCmd+"\n");
dosD.close();
}
} catch (IOException ex) {
Logger.getLogger(ProcessRenderer.class.getName()).log(Level.SEVERE, null, ex);
}
fileD.setExecutable(true);
String batchDurationComm = userHomeDir+"/.webcamstudio/"+"DCalc.sh";
try {
Process duration = rt.exec(batchDurationComm);
boolean audiofind = false;
Tools.sleep(10);
duration.waitFor(); //Author spoonybard896
InputStream lsOut = duration.getErrorStream();
InputStreamReader isr = new InputStreamReader(lsOut);
BufferedReader in = new BufferedReader(isr);
String lineR;
while ((lineR = in.readLine()) != null) {
if(lineR.contains("Duration:")) {
lineR = lineR.replaceFirst("Duration: ", "");
lineR = lineR.trim();
String resu = lineR.substring(0, 8);
String[] temp;
temp = resu.split(":");
int hours = Integer.parseInt(temp[0]);
int minutes = Integer.parseInt(temp[1]);
int seconds = Integer.parseInt(temp[2]);
int totalTime = hours*3600 + minutes*60 + seconds;
String strDuration = Integer.toString(totalTime);
stream.setStreamTime(strDuration+"s");
}
if (lineR.contains("Audio:")) {
audiofind = !lineR.contains("0 channels");
}
if (autoAR) {
if (lineR.contains("Video:")) {
String [] lineRParts = lineR.split(",");
String [] tempNativeSize = lineRParts[2].split(" ");
String [] videoNativeSize = tempNativeSize[1].split("x");
int w = Integer.parseInt(videoNativeSize[0]);
int h = Integer.parseInt(videoNativeSize[1]);
int mixerW = MasterMixer.getInstance().getWidth();
int mixerH = MasterMixer.getInstance().getHeight();
int hAR = (mixerW*h)/w;
int wAR = (mixerH*w)/h;
if (hAR > mixerH) {
hAR = mixerH;
int xPos = (mixerW - wAR)/2;
stream.setX(xPos);
stream.setWidth(wAR);
}
if (w > mixerW) {
int yPos = (mixerH- hAR)/2;
stream.setY(yPos);
stream.setHeight(hAR);
} else {
if (h < mixerH) {
int yPos = (mixerH- hAR)/2;
stream.setY(yPos);
} else {
hAR = mixerH;
}
}
stream.setHeight(hAR);
}
}
}
// System.out.println(audiofind);
stream.setOnlyVideo(!audiofind);
stream.setAudio(audiofind);
} catch (IOException | InterruptedException | NumberFormatException e) {
}
}
}
public static String wsDistroWatch() {
String distro = null;
Runtime rt = Runtime.getRuntime();
String distroCmd = "uname -a";
try {
Process distroProc = rt.exec(distroCmd);
Tools.sleep(10);
distroProc.waitFor();
BufferedReader buf = new BufferedReader(new InputStreamReader(
distroProc.getInputStream()));
String lineR;
while ((lineR = buf.readLine()) != null) {
if(lineR.toLowerCase().contains("ubuntu")) {
distro = "ubuntu";
} else {
distro = "others";
}
}
} catch (IOException | InterruptedException | NumberFormatException e) {
}
return distro;
}
@SuppressWarnings("unchecked")
private void btnLoadStudioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLoadStudioActionPerformed
final java.awt.event.ActionEvent fEvt = evt;
ArrayList<Stream> streamzI = MasterChannels.getInstance().getStreams();
ArrayList<String> sourceChI = MasterChannels.getInstance().getChannels();
int sinkStream = 0;
for (Stream s : streamzI) {
if (s.getClass().toString().contains("Sink")) {
sinkStream ++;
}
}
if (streamzI.size() - sinkStream > 0 || sourceChI.size() > 0) {
Object[] options = {"OK"};
JOptionPane.showOptionDialog(this,
"Current Studio will be closed !!!","Attention",
JOptionPane.PLAIN_MESSAGE,
JOptionPane.INFORMATION_MESSAGE,
null,
options,
options[0]);
}
JFileChooser chooser = new JFileChooser(lastFolder);
FileNameExtensionFilter studioFilter = new FileNameExtensionFilter("Studio files (*.studio)", "studio");
chooser.setFileFilter(studioFilter);
chooser.setMultiSelectionEnabled(false);
chooser.setDialogTitle("Load a Studio ...");
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int retval = chooser.showOpenDialog(this);
final File file = chooser.getSelectedFile();
if (retval == JFileChooser.APPROVE_OPTION) {
final WaitingDialog waitingD = new WaitingDialog(this);
waitingD.setModal(true);
SwingWorker<?,?> worker = new SwingWorker<Void,Integer>(){
@Override
protected Void doInBackground() throws InterruptedException{
if (file != null) {
lastFolder = file.getParentFile();
SystemPlayer.getInstance(null).stop();
Tools.sleep(10);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().endAllStream();
for (Stream s : MasterChannels.getInstance().getStreams()){
s.updateStatus();
}
ArrayList<Stream> streamz = MasterChannels.getInstance().getStreams();
ArrayList<String> sourceCh = MasterChannels.getInstance().getChannels();
do {
for (int l=0; l< streamz.size(); l++) {
Stream removeS = streamz.get(l);
Tools.sleep(20);
removeS.destroy();
removeS = null;
}
for (int a=0; a< sourceCh.size(); a++) {
String removeSc = sourceCh.get(a);
MasterChannels.getInstance().removeChannel(removeSc);
Tools.sleep(20);
listenerCP.removeChannels(removeSc, a);
}
} while (streamz.size()>0 || sourceCh.size()>0);
SystemPlayer.getInstance(null).stop();
Tools.sleep(10);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().endAllStream();
listenerCP.stopChTime(fEvt);
listenerCP.resetBtnStates(fEvt);
listenerOP.resetBtnStates(fEvt);
tabControls.removeAll();
lblSourceSelected.setText("");
tabControls.repaint();
Tools.sleep(300);
cleanDesktops();
Tools.sleep(50);
try {
Studio.LText = new ArrayList<>();
Studio.extstream = new ArrayList<>();
Studio.ImgMovMus = new ArrayList<>();
Studio.load(file, "load");
Studio.main();
spinWidth.setValue(MasterMixer.getInstance().getWidth());
spinHeight.setValue(MasterMixer.getInstance().getHeight());
spinFPS.setValue(MasterMixer.getInstance().getRate());
int mW = (Integer) spinWidth.getValue();
int mH = (Integer) spinHeight.getValue();
MasterMixer.getInstance().stop();
MasterMixer.getInstance().setWidth(mW);
MasterMixer.getInstance().setHeight(mH);
MasterMixer.getInstance().setRate((Integer) spinFPS.getValue());
MasterMixer.getInstance().start();
PreviewMixer.getInstance().stop();
PreviewMixer.getInstance().setWidth(mW);
PreviewMixer.getInstance().setHeight(mH);
// PreviewMixer.getInstance().setRate((Integer) spinFPS.getValue());
PreviewMixer.getInstance().start();
} catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
// loading studio streams
for (int u = 0; u < Studio.ImgMovMus.size(); u++) {
Stream s = Studio.extstream.get(u);
if (s != null) {
StreamDesktop frame = new StreamDesktop(s, WebcamStudio.this);
frame.setLocation(s.getPanelX(), s.getPanelY());
if (s instanceof SourceWebcam || s instanceof SourceIPCam || s instanceof SourceDV) {
numCameras += 1;
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblCamera.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
} else if (s instanceof SourceMovie) {
numVideos += 1;
videoDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblVideo.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblVideo.setFont(font);
lblVideo.setText("Videos("+numVideos+")");
} else if (s instanceof SourceMusic) {
numMusics += 1;
musicDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblMusic.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblMusic.setFont(font);
lblMusic.setText("Musics("+numMusics+")");
} else if (s instanceof SourceImage || s instanceof SourceImageU || s instanceof SourceImageGif) {
numPictures += 1;
pictureDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblPicture.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblPicture.setFont(font);
lblPicture.setText("Pictures("+numPictures+")");
} else if (s instanceof SourceDVB) {
numDVBs += 1;
dvbDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblDVB.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblDVB.setFont(font);
lblDVB.setText("DVBs("+numDVBs+")");
} else if (s instanceof SourceURL) {
numURLs += 1;
urlDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblURL.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblURL.setFont(font);
lblURL.setText("URLs("+numURLs+")");
} else if (s instanceof SourceDesktop) {
numDesktops += 1;
desktopDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblDesktop.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblDesktop.setFont(font);
lblDesktop.setText("Desktops("+numDesktops+")");
} else if (s instanceof SourceAudioSource) {
numAudioIns += 1;
audioInDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblAudioIn.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblAudioIn.setFont(font);
lblAudioIn.setText("AudioIns("+numAudioIns+")");
}
s.setLoaded(false);
}
System.out.println("Adding Source: "+s.getName());
}
Studio.extstream.clear();
Studio.extstream = null;
Studio.ImgMovMus.clear();
Studio.ImgMovMus = null;
for (SourceText text : Studio.LText) {
if (text != null) {
StreamDesktop frame = new StreamDesktop(text, WebcamStudio.this);
frame.setLocation(text.getPanelX(), text.getPanelY());
numTexts += 1;
textDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblText.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblText.setFont(font);
lblText.setText("Texts("+numTexts+")");
text.setLoaded(false);
}
System.out.println("Adding Source: "+text.getName());
}
Studio.LText.clear();
Studio.LText = null;
Tools.sleep(300);
// loading studio channels
for (String chsc : MasterChannels.getInstance().getChannels()) {
Tools.sleep(10);
listenerCP.addLoadingChannel(chsc);
}
Studio.chanLoad.clear();
listenerOP.resetSinks(fEvt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Studio is loaded!");
ResourceMonitor.getInstance().addMessage(label);
setTitle("WebcamStudio " + Version.version + " ("+file.getName()+")");
}
return null;
}
@Override
protected void done(){
waitingD.dispose();
}
};
worker.execute();
waitingD.toFront();
waitingD.setVisible(true);
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Loading Cancelled!");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_btnLoadStudioActionPerformed
private void WCSAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_WCSAboutActionPerformed
About TAbout = new About(about, true);
TAbout.setLocationRelativeTo(WebcamStudio.cboAnimations);
TAbout.setVisible(true);
}//GEN-LAST:event_WCSAboutActionPerformed
private void btnAddWebcamsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddWebcamsActionPerformed
final String wCam = cboWebcam.getSelectedItem().toString();
if (Tools.getOS() == OS.LINUX) {
for (VideoDevice d : VideoDevice.getOutputDevices()) {
if (d.getName().equals(wCam)){
Stream webcam = new SourceWebcam(d.getFile());
webcam.setName(d.getName());
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
webcam.addChannel(SourceChannel.getChannel(sc, webcam));
}
getWebcamParams(webcam, d);
StreamDesktop frame = new StreamDesktop(webcam, this);
numCameras += 1;
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblCamera.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}//GEN-LAST:event_btnAddWebcamsActionPerformed
private void btnNewStudioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNewStudioActionPerformed
boolean doNew = true;
ArrayList<Stream> streamzI = MasterChannels.getInstance().getStreams();
int sinkStream = 0;
for (Stream s : streamzI) {
// System.out.println("Stream: "+s);
if (s.getClass().toString().contains("Sink")) {
sinkStream ++;
}
}
ArrayList<String> sourceChI = MasterChannels.getInstance().getChannels();
if (streamzI.size() - sinkStream > 0 || sourceChI.size() > 0) {
int result = JOptionPane.showConfirmDialog(this,"Current Studio will be closed !!!","Attention",JOptionPane.YES_NO_CANCEL_OPTION);
switch(result){
case JOptionPane.YES_OPTION:
doNew = true;
break;
case JOptionPane.NO_OPTION:
doNew = false;
break;
case JOptionPane.CANCEL_OPTION:
doNew = false;
break;
case JOptionPane.CLOSED_OPTION:
doNew = false;
break;
}
}
if (doNew) {
SystemPlayer.getInstance(null).stop();
Tools.sleep(10);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().endAllStream();
for (Stream s : MasterChannels.getInstance().getStreams()){
s.updateStatus();
}
ArrayList<Stream> streamz = MasterChannels.getInstance().getStreams();
ArrayList<String> sourceCh = MasterChannels.getInstance().getChannels();
do {
for (int l=0; l< streamz.size(); l++) {
Stream removeS = streamz.get(l);
removeS.destroy();
removeS = null;
}
for (int a=0; a< sourceCh.size(); a++) {
String removeSc = sourceCh.get(a);
MasterChannels.getInstance().removeChannel(removeSc);
listenerCP.removeChannels(removeSc, a);
}
} while (streamz.size()>0 || sourceCh.size()>0);
listenerCP.stopChTime(evt);
listenerCP.resetBtnStates(evt);
listenerOP.resetBtnStates(evt);
listenerOP.resetSinks(evt);
tabControls.removeAll();
lblSourceSelected.setText("");
tabControls.repaint();
Tools.sleep(300);
cleanDesktops();
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "New Studio Created.");
ResourceMonitor.getInstance().addMessage(label);
setTitle("WebcamStudio " + Version.version);
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "New Studio Action Cancelled.");
ResourceMonitor.getInstance().addMessage(label);
}
System.gc();
}//GEN-LAST:event_btnNewStudioActionPerformed
private void cleanDesktops() {
numCameras = 0;
lblCamera.setForeground(resetTab);
Font font = new Font("Ubuntu", Font.PLAIN, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
cameraDesktop.removeAll();
cameraDesktop.repaint();
numVideos = 0;
lblVideo.setForeground(resetTab);
lblVideo.setFont(font);
lblVideo.setText("Videos("+numVideos+")");
videoDesktop.removeAll();
videoDesktop.repaint();
numMusics = 0;
lblMusic.setForeground(resetTab);
lblMusic.setFont(font);
lblMusic.setText("Musics("+numMusics+")");
musicDesktop.removeAll();
musicDesktop.repaint();
numPictures = 0;
lblPicture.setForeground(resetTab);
lblPicture.setFont(font);
lblPicture.setText("Pictures("+numPictures+")");
pictureDesktop.removeAll();
pictureDesktop.repaint();
numDVBs = 0;
lblDVB.setForeground(resetTab);
lblDVB.setFont(font);
lblDVB.setText("DVBs("+numDVBs+")");
dvbDesktop.removeAll();
dvbDesktop.repaint();
numURLs = 0;
lblURL.setForeground(resetTab);
lblURL.setFont(font);
lblURL.setText("URLs("+numURLs+")");
urlDesktop.removeAll();
urlDesktop.repaint();
numDesktops = 0;
lblDesktop.setForeground(resetTab);
lblDesktop.setFont(font);
lblDesktop.setText("Desktops("+numDesktops+")");
desktopDesktop.removeAll();
desktopDesktop.repaint();
numTexts = 0;
lblText.setForeground(resetTab);
lblText.setFont(font);
lblText.setText("Texts("+numTexts+")");
textDesktop.removeAll();
textDesktop.repaint();
numAudioIns = 0;
lblAudioIn.setForeground(resetTab);
lblAudioIn.setFont(font);
lblAudioIn.setText("AudioIns("+numAudioIns+")");
audioInDesktop.removeAll();
audioInDesktop.repaint();
}
private void btnAddDVBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddDVBActionPerformed
SourceDVB streamDVB;
streamDVB = new SourceDVB();
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
streamDVB.addChannel(SourceChannel.getChannel(sc, streamDVB));
}
StreamDesktop frame = new StreamDesktop(streamDVB, this);
numDVBs += 1;
dvbDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblDVB.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblDVB.setFont(font);
lblDVB.setText("DVBs("+numDVBs+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddDVBActionPerformed
private void btnAddURLActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddURLActionPerformed
SourceURL streamURL;
streamURL = new SourceURL();
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
streamURL.addChannel(SourceChannel.getChannel(sc, streamURL));
}
StreamDesktop frame = new StreamDesktop(streamURL, this);
numURLs += 1;
urlDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblURL.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblURL.setFont(font);
lblURL.setText("URLs("+numURLs+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddURLActionPerformed
private void btnVideoDevInfoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVideoDevInfoActionPerformed
VideoDeviceInfo vDevsI = new VideoDeviceInfo(vDevInfo, true);
vDevsI.setLocationRelativeTo(WebcamStudio.cboAnimations);
vDevsI.setVisible(true);
}//GEN-LAST:event_btnVideoDevInfoActionPerformed
private void btnRefreshWebcamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRefreshWebcamActionPerformed
initWebcam();
}//GEN-LAST:event_btnRefreshWebcamActionPerformed
private void btnAddAudioSrcActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddAudioSrcActionPerformed
SourceAudioSource source = new SourceAudioSource();
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
source.addChannel(SourceChannel.getChannel(sc, source));
}
StreamDesktop frame = new StreamDesktop(source, this);
numAudioIns += 1;
audioInDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblAudioIn.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblAudioIn.setFont(font);
lblAudioIn.setText("AudioIns("+numAudioIns+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddAudioSrcActionPerformed
private void cboAudioHzActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboAudioHzActionPerformed
final String audioHz = cboAudioHz.getSelectedItem().toString();
if (audioHz.equals("22050Hz")) {
audioFreq = 22050;
} else {
audioFreq = 44100;
}
MasterMixer.getInstance().stop();
PreviewMixer.getInstance().stop();
Tools.sleep(100);
SystemPlayer.getInstance(null).stop();
Tools.sleep(30);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(30);
MasterChannels.getInstance().stopAllStream();
for (Stream s : streamS){
s.updateStatus();
}
MasterMixer.getInstance().start();
PreviewMixer.getInstance().start();
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Overall Audio Output set to: "+audioFreq+"Hz");
ResourceMonitor.getInstance().addMessage(label);
}//GEN-LAST:event_cboAudioHzActionPerformed
@SuppressWarnings("unchecked")
private void btnImportStudioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImportStudioActionPerformed
JFileChooser chooser = new JFileChooser(lastFolder);
FileNameExtensionFilter studioFilter = new FileNameExtensionFilter("Studio files (*.studio)", "studio");
chooser.setFileFilter(studioFilter);
chooser.setMultiSelectionEnabled(false);
chooser.setDialogTitle("Import a Studio ...");
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int retval = chooser.showOpenDialog(this);
final File file = chooser.getSelectedFile();
if (retval == JFileChooser.APPROVE_OPTION) {
final WaitingDialog waitingD = new WaitingDialog(this);
waitingD.setModal(true);
SwingWorker<?,?> worker = new SwingWorker<Void,Integer>(){
@Override
protected Void doInBackground() throws InterruptedException{
if (file != null) {
lastFolder = file.getParentFile();
try {
Studio.LText = new ArrayList<>();
Studio.extstream = new ArrayList<>();
Studio.ImgMovMus = new ArrayList<>();
Studio.load(file, "add");
Studio.main();
} catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
for (int u = 0; u < Studio.ImgMovMus.size(); u++) {
Tools.sleep(10);
Stream s = Studio.extstream.get(u);
if (s != null) {
// System.out.println("Stream Ch: "+s.getChannels());
// to fix 0 channels .studio import
if (s.getChannels().isEmpty()) {
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
// System.out.println("Current Studio Ch: "+scn+" added.");
}
for (String sc : allChan){
s.addChannel(SourceChannel.getChannel(sc, s));
}
}
StreamDesktop frame = new StreamDesktop(s, WebcamStudio.this);
frame.setLocation(s.getPanelX(), s.getPanelY());
if (s instanceof SourceWebcam || s instanceof SourceIPCam || s instanceof SourceDV) {
numCameras += 1;
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblCamera.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
} else if (s instanceof SourceMovie) {
numVideos += 1;
videoDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblVideo.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblVideo.setFont(font);
lblVideo.setText("Videos("+numVideos+")");
} else if (s instanceof SourceMusic) {
numMusics += 1;
musicDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblMusic.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblMusic.setFont(font);
lblMusic.setText("Musics("+numMusics+")");
} else if (s instanceof SourceImage || s instanceof SourceImageU || s instanceof SourceImageGif) {
numPictures += 1;
pictureDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblPicture.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblPicture.setFont(font);
lblPicture.setText("Pictures("+numPictures+")");
} else if (s instanceof SourceDVB) {
numDVBs += 1;
dvbDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblDVB.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblDVB.setFont(font);
lblDVB.setText("DVBs("+numDVBs+")");
} else if (s instanceof SourceURL) {
numURLs += 1;
urlDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblURL.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblURL.setFont(font);
lblURL.setText("URLs("+numURLs+")");
} else if (s instanceof SourceDesktop) {
numDesktops += 1;
desktopDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblDesktop.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblDesktop.setFont(font);
lblDesktop.setText("Desktops("+numDesktops+")");
} else if (s instanceof SourceAudioSource) {
numAudioIns += 1;
audioInDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblAudioIn.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblAudioIn.setFont(font);
lblAudioIn.setText("AudioIns("+numAudioIns+")");
}
}
}
Studio.extstream.clear();
Studio.extstream = null;
Studio.ImgMovMus.clear();
Studio.ImgMovMus = null;
for (int t = 0; t < Studio.LText.size(); t++) {
SourceText text = Studio.LText.get(t);
// to fix 0 channels .studio import
if (text.getChannels().isEmpty()) {
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
// System.out.println("Current Studio Ch: "+scn+" added.");
}
for (String sc : allChan){
text.addChannel(SourceChannel.getChannel(sc, text));
}
}
StreamDesktop frame = new StreamDesktop(text, WebcamStudio.this);
frame.setLocation(text.getPanelX(), text.getPanelY());
numTexts += 1;
textDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblText.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblText.setFont(font);
lblText.setText("Texts("+numTexts+")");
}
Studio.LText.clear();
Studio.LText = null;
Tools.sleep(300);
MasterChannels master = MasterChannels.getInstance(); //
ArrayList<String> chNameL = new ArrayList<>();
for (SourceChannel chsct : Studio.chanLoad) {
chNameL.add(chsct.getName());
}
LinkedHashSet<String> hs = new LinkedHashSet<>(chNameL);
chNameL.clear();
chNameL.addAll(hs);
for (String chsct : chNameL) {
listenerCP.addLoadingChannel(chsct);
master.insertStudio(chsct);
}
Studio.chanLoad.clear();
}
return null;
}
@Override
protected void done(){
waitingD.dispose();
}
};
worker.execute();
waitingD.toFront();
waitingD.setVisible(true);
if (file!=null){
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Studio is Imported!");
ResourceMonitor.getInstance().addMessage(label);
}
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Studio Import Cancelled!");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_btnImportStudioActionPerformed
private void btnAddIPCamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddIPCamActionPerformed
SourceIPCam streamIPCam;
streamIPCam = new SourceIPCam();
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
streamIPCam.addChannel(SourceChannel.getChannel(sc, streamIPCam));
}
StreamDesktop frame = new StreamDesktop(streamIPCam, this);
numCameras += 1;
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblCamera.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddIPCamActionPerformed
private void tglFFmpegActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tglFFmpegActionPerformed
if (tglFFmpeg.isSelected()){
tglAVconv.setSelected(false);
tglGst.setSelected(false);
outFMEbe = 0;
listenerOP.resetSinks(evt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Output Backend Switched to FFmpeg.");
ResourceMonitor.getInstance().addMessage(label);
} else {
outFMEbe = 2;
tglAVconv.setEnabled(avconv);
tglGst.setEnabled(true);
tglGst.setSelected(true);
listenerOP.resetSinks(evt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Output Backend Switched to GStreamer.");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_tglFFmpegActionPerformed
private void btnAddFolderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddFolderActionPerformed
final java.awt.event.ActionEvent fEvt = evt;
JFileChooser chooser = new JFileChooser(lastFolder);
FileNameExtensionFilter mediaFilter = new FileNameExtensionFilter("Supported Media files", "avi", "ogg", "jpeg", "ogv", "mp4", "m4v", "mpg", "divx", "wmv", "flv", "mov", "mkv", "vob", "jpg", "bmp", "png", "gif", "mp3", "wav", "wma", "m4a", ".mp2");
chooser.setFileFilter(mediaFilter);
chooser.setMultiSelectionEnabled(false);
chooser.setDialogTitle("Add Media Folder ...");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int retVal = chooser.showOpenDialog(this);
if (retVal == JFileChooser.APPROVE_OPTION) {
final File dir = chooser.getSelectedFile();
// System.out.println("Dir: "+dir);
final WaitingDialog waitingD = new WaitingDialog(this);
waitingD.setModal(true);
SwingWorker<?,?> worker = new SwingWorker<Void,Integer>(){
@Override
protected Void doInBackground() throws InterruptedException {
boolean noStreams = false;
ArrayList<Stream> allStreams = MasterChannels.getInstance().getStreams();
for (Stream str : allStreams) {
// System.out.println("NoStreams Check: "+str.getClass().toString());
if (!str.getClass().toString().contains("Sink")) {
noStreams = false;
break;
} else {
noStreams = true;
}
}
File[] contents = null;
if (dir != null) {
lastFolder = dir.getAbsoluteFile();
contents = dir.listFiles();
// for ( File f : contents) {
// String fileName = f.getName();
// System.out.println("Name: " + fileName);
// }
}
if (dir != null) {
for ( File file : contents) {
Stream s = Stream.getInstance(file);
if (s != null) {
if (s instanceof SourceMovie || s instanceof SourceMusic || s instanceof SourceImage || s instanceof SourceImageU || stream instanceof SourceImageGif) {
getVideoParams(s, file, null);
}
StreamDesktop frame = new StreamDesktop(s, WebcamStudio.this);
if (s instanceof SourceMovie) {
numVideos += 1;
videoDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblVideo.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblVideo.setFont(font);
lblVideo.setText("Videos("+numVideos+")");
} else if (s instanceof SourceMusic) {
numMusics += 1;
musicDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblMusic.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblMusic.setFont(font);
lblMusic.setText("Musics("+numMusics+")");
}
}
}
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Media Folder Imported!");
ResourceMonitor.getInstance().addMessage(label);
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "No Directory Selected!");
ResourceMonitor.getInstance().addMessage(label);
}
if (noStreams) {
listenerCP.resetAutoPLBtnState(fEvt);
}
return null;
}
@Override
protected void done(){
waitingD.dispose();
}
};
worker.execute();
waitingD.toFront();
waitingD.setVisible(true);
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Loading Cancelled!");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_btnAddFolderActionPerformed
private void btnAddDVCamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddDVCamActionPerformed
SourceDV streamDV;
streamDV = new SourceDV();
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()){
allChan.add(scn);
}
for (String sc : allChan){
streamDV.addChannel(SourceChannel.getChannel(sc, streamDV));
}
StreamDesktop frame = new StreamDesktop(streamDV, this);
numCameras += 1;
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblCamera.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddDVCamActionPerformed
private void tglAVconvActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tglAVconvActionPerformed
if (tglAVconv.isSelected()){
tglFFmpeg.setSelected(false);
tglGst.setSelected(false);
outFMEbe = 1;
listenerOP.resetSinks(evt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Output Backend Switched to Libav.");
ResourceMonitor.getInstance().addMessage(label);
} else {
outFMEbe = 2;
tglFFmpeg.setEnabled(ffmpeg);
tglGst.setEnabled(true);
tglGst.setSelected(true);
listenerOP.resetSinks(evt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Output Backend Switched to Gstreamer.");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_tglAVconvActionPerformed
private void tglGstActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tglGstActionPerformed
if (tglGst.isSelected()){
tglFFmpeg.setSelected(false);
tglAVconv.setSelected(false);
outFMEbe = 2;
listenerOP.resetSinks(evt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Output Backend Switched to GStreamer.");
ResourceMonitor.getInstance().addMessage(label);
} else {
if (ffmpeg && !avconv){
outFMEbe = 0;
tglFFmpeg.setSelected(true);
tglAVconv.setEnabled(false);
tglGst.setEnabled(true);
} else if (ffmpeg && avconv) {
outFMEbe = 1;
tglFFmpeg.setEnabled(true);
tglAVconv.setSelected(true);
tglGst.setEnabled(true);
} else {
outFMEbe = 1;
tglFFmpeg.setEnabled(false);
tglAVconv.setSelected(true);
tglGst.setEnabled(true);
}
listenerOP.resetSinks(evt);
if (outFMEbe == 1) {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Output Backend Switched to Libav.");
ResourceMonitor.getInstance().addMessage(label);
} else {
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Output Backend Switched to FFmpeg.");
ResourceMonitor.getInstance().addMessage(label);
}
}
}//GEN-LAST:event_tglGstActionPerformed
private void btnSysGCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSysGCActionPerformed
System.gc();
}//GEN-LAST:event_btnSysGCActionPerformed
private void cboThemeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboThemeActionPerformed
final String themeSW = cboTheme.getSelectedItem().toString();
if (themeSW.equals("Classic")) {
theme = "Classic";
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Master Theme set to \""+theme+"\"");
ResourceMonitor.getInstance().addMessage(label);
} else {
theme = "Dark";
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Master Theme set to \""+theme+"\"");
ResourceMonitor.getInstance().addMessage(label);
}
Thread wsRestart = new Thread(new Runnable() {
@Override
public void run() {
restartDialog();
}
});
if (!firstRun) {
wsRestart.start();
}
}//GEN-LAST:event_cboThemeActionPerformed
private void tglAutoARActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tglAutoARActionPerformed
if (tglAutoAR.isSelected()) {
autoAR = true;
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Automatic Aspect Ratio detection \"On\"");
ResourceMonitor.getInstance().addMessage(label);
} else {
autoAR = false;
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Automatic Aspect Ratio detection \"Off\"");
ResourceMonitor.getInstance().addMessage(label);
}
}//GEN-LAST:event_tglAutoARActionPerformed
private void btnMinimizeAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMinimizeAllActionPerformed
for (JDesktopPane desktop : tabs) {
for (Component c : desktop.getComponents()) {
if (c instanceof StreamDesktop) {
StreamDesktop d = (StreamDesktop) c;
try {
Tools.sleep(20);
d.setIcon(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}//GEN-LAST:event_btnMinimizeAllActionPerformed
private void btnAddHDVCamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddHDVCamActionPerformed
SourceHDV streamHDV;
streamHDV = new SourceHDV();
ArrayList<String> allChan = new ArrayList<>();
for (String scn : MasterChannels.getInstance().getChannels()) {
allChan.add(scn);
}
for (String sc : allChan) {
streamHDV.addChannel(SourceChannel.getChannel(sc, streamHDV));
}
StreamDesktop frame = new StreamDesktop(streamHDV, this);
numCameras += 1;
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
lblCamera.setForeground(busyTab);
Font font = new Font("Ubuntu", Font.BOLD, 11);
lblCamera.setFont(font);
lblCamera.setText("Cameras("+numCameras+")");
try {
frame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_btnAddHDVCamActionPerformed
private void tabSourcesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabSourcesMouseClicked
deactivateTabsComp();
}//GEN-LAST:event_tabSourcesMouseClicked
public void deactivateTabsComp() {
// System.out.println("Deactivating tabs components !!!");
for (JDesktopPane desktop : tabs) {
for (Component c : desktop.getComponents()) {
if (c instanceof StreamDesktop) {
StreamDesktop d = (StreamDesktop) c;
try {
Tools.sleep(20);
d.setSelected(false);
} catch (PropertyVetoException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
/**
*
*/
public void restartDialog(){
Object[] options = {"OK"};
JOptionPane.showOptionDialog(this,
"You need to restart WebcamStudio for the changes to take effect.","Information",
JOptionPane.PLAIN_MESSAGE,
JOptionPane.INFORMATION_MESSAGE,
null,
options,
options[0]);
}
/**
* @param args the command line arguments
* @throws java.io.IOException
*/
public static void main(String args[]) throws IOException {
if (System.getProperty("jna.nosys") == null) {
System.setProperty("jna.nosys", "true");
}
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true"); // Java 8 Drag'n'Drop Fix
File dir = new File(userHomeDir, ".webcamstudio");
if (!dir.exists()) {
dir.mkdir();
}
System.out.println("Welcome to WebcamStudio "+Version.version + " build "+ new Version().getBuild()+" ...");
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
new WebcamStudio().setVisible(true);
} catch (IOException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
if (args != null){
int c = 0;
for (String arg : args){
System.out.println("Argument: "+arg);
if (arg.endsWith("studio")){
cmdFile = new File(arg);
}
if (arg.equals("-o")) {
cmdOut = args[c+1];
}
if (arg.equals("-autoplay")) {
cmdAutoStart = true;
}
if (arg.equals("-remote")) {
cmdRemote = true;
}
c++;
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton WCSAbout;
private javax.swing.JDesktopPane audioInDesktop;
private javax.swing.JButton btnAddAnimation;
private javax.swing.JButton btnAddAudioSrc;
private javax.swing.JButton btnAddDVB;
private javax.swing.JButton btnAddDVCam;
private javax.swing.JButton btnAddDesktop;
private javax.swing.JButton btnAddFile;
private javax.swing.JButton btnAddFolder;
private javax.swing.JButton btnAddHDVCam;
private javax.swing.JButton btnAddIPCam;
private javax.swing.JButton btnAddText;
private javax.swing.JButton btnAddURL;
private javax.swing.JButton btnAddWebcams;
private javax.swing.JButton btnImportStudio;
private final javax.swing.JButton btnLoadStudio = new javax.swing.JButton();
private javax.swing.JButton btnMinimizeAll;
private javax.swing.JButton btnMinimizeTab;
private javax.swing.JButton btnNewStudio;
private javax.swing.JButton btnRefreshWebcam;
private javax.swing.JButton btnSaveStudio;
private javax.swing.JButton btnSysGC;
private javax.swing.JButton btnVideoDevInfo;
private javax.swing.JDesktopPane cameraDesktop;
public static javax.swing.JComboBox cboAnimations;
private javax.swing.JComboBox cboAudioHz;
private javax.swing.JComboBox cboTheme;
private javax.swing.JComboBox cboWebcam;
private javax.swing.JDesktopPane desktopDesktop;
private javax.swing.JDesktopPane dvbDesktop;
private javax.swing.Box.Filler filler1;
private javax.swing.Box.Filler filler2;
private javax.swing.Box.Filler filler3;
private javax.swing.Box.Filler filler4;
private javax.swing.Box.Filler filler5;
private javax.swing.Box.Filler filler6;
private javax.swing.Box.Filler filler7;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JToolBar.Separator jSeparator1;
private javax.swing.JToolBar.Separator jSeparator10;
private javax.swing.JToolBar.Separator jSeparator12;
private javax.swing.JToolBar.Separator jSeparator13;
private javax.swing.JToolBar.Separator jSeparator16;
private javax.swing.JToolBar.Separator jSeparator17;
private javax.swing.JToolBar.Separator jSeparator2;
private javax.swing.JToolBar.Separator jSeparator3;
private javax.swing.JToolBar.Separator jSeparator7;
private javax.swing.JLabel lblAVconv;
private javax.swing.JLabel lblClrRam;
private javax.swing.JLabel lblFFmpeg;
private javax.swing.JLabel lblFFmpeg3;
private javax.swing.JLabel lblGst;
private javax.swing.JLabel lblSourceSelected;
private javax.swing.JSplitPane mainSplit;
private javax.swing.JToolBar mainToolbar;
private javax.swing.JSplitPane mainVerticalSplit;
private javax.swing.JSplitPane masterPanelSplit;
private javax.swing.JDesktopPane musicDesktop;
private javax.swing.JPanel panControls;
private javax.swing.JPanel panMaster;
private javax.swing.JPanel panSources;
private javax.swing.JDesktopPane pictureDesktop;
public static javax.swing.JTabbedPane tabControls;
private javax.swing.JTabbedPane tabSources;
private javax.swing.JDesktopPane textDesktop;
private javax.swing.JToggleButton tglAVconv;
private javax.swing.JToggleButton tglAutoAR;
private javax.swing.JToggleButton tglFFmpeg;
private javax.swing.JToggleButton tglGst;
private javax.swing.JToolBar toolbar;
private javax.swing.JDesktopPane urlDesktop;
private javax.swing.JDesktopPane videoDesktop;
// End of variables declaration//GEN-END:variables
@Override
public void selectedSource(Stream source) {
String sourceName = source.getName();
String shortName = "";
if (sourceName.length() > 30) {
shortName = source.getName().substring(0, 30)+" ...";
} else {
shortName = sourceName;
}
lblSourceSelected.setText(shortName);
lblSourceSelected.setToolTipText(source.getName());
tabControls.removeAll();
tabControls.repaint();
ArrayList<Component> comps = SourceControls.getControls(source);
for (Component c : comps) {
String cName = c.getName();
tabControls.add(cName, c);
}
}
public void loadAtStart(final File file, final java.awt.event.ActionEvent fEvt){
final WaitingDialog waitingD = new WaitingDialog(this);
waitingD.setModal(true);
SwingWorker<?,?> worker = new SwingWorker<Void,Integer>(){
@Override
protected Void doInBackground() throws InterruptedException{
if (file != null) {
lastFolder = file.getParentFile();
SystemPlayer.getInstance(null).stop();
Tools.sleep(10);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().endAllStream();
for (Stream s : MasterChannels.getInstance().getStreams()){
s.updateStatus();
}
ArrayList<Stream> streamz = MasterChannels.getInstance().getStreams();
ArrayList<String> sourceCh = MasterChannels.getInstance().getChannels();
do {
for (int l=0; l< streamz.size(); l++) {
Stream removeS = streamz.get(l);
Tools.sleep(20);
removeS.destroy();
removeS = null;
}
for (int a=0; a< sourceCh.size(); a++) {
String removeSc = sourceCh.get(a);
MasterChannels.getInstance().removeChannel(removeSc);
Tools.sleep(20);
listenerCP.removeChannels(removeSc, a);
}
} while (streamz.size()>0 || sourceCh.size()>0);
SystemPlayer.getInstance(null).stop();
Tools.sleep(10);
PrePlayer.getPreInstance(null).stop();
Tools.sleep(10);
MasterChannels.getInstance().endAllStream();
listenerCP.stopChTime(fEvt);
listenerCP.resetBtnStates(fEvt);
listenerOP.resetBtnStates(fEvt);
tabControls.removeAll();
tabControls.repaint();
Tools.sleep(300);
cameraDesktop.removeAll();
cameraDesktop.repaint();
Tools.sleep(50);
try {
Studio.LText = new ArrayList<>();
Studio.extstream = new ArrayList<>();
Studio.ImgMovMus = new ArrayList<>();
Studio.load(file, "load");
Studio.main();
spinWidth.setValue(MasterMixer.getInstance().getWidth());
spinHeight.setValue(MasterMixer.getInstance().getHeight());
spinFPS.setValue(MasterMixer.getInstance().getRate());
int mW = (Integer) spinWidth.getValue();
int mH = (Integer) spinHeight.getValue();
MasterMixer.getInstance().stop();
MasterMixer.getInstance().setWidth(mW);
MasterMixer.getInstance().setHeight(mH);
MasterMixer.getInstance().setRate((Integer) spinFPS.getValue());
MasterMixer.getInstance().start();
PreviewMixer.getInstance().stop();
PreviewMixer.getInstance().setWidth(mW);
PreviewMixer.getInstance().setHeight(mH);
// PreviewMixer.getInstance().setRate((Integer) spinFPS.getValue());
PreviewMixer.getInstance().start();
} catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException ex) {
Logger.getLogger(WebcamStudio.class.getName()).log(Level.SEVERE, null, ex);
}
// loading studio streams
for (int u = 0; u < Studio.ImgMovMus.size(); u++) {
Stream s = Studio.extstream.get(u);
if (s != null) {
StreamDesktop frame = new StreamDesktop(s, WebcamStudio.this);
frame.setLocation(s.getPanelX(), s.getPanelY());
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
}
System.out.println("Adding Source: "+s.getName());
}
Studio.extstream.clear();
Studio.extstream = null;
Studio.ImgMovMus.clear();
Studio.ImgMovMus = null;
for (SourceText text : Studio.LText) {
if (text != null) {
StreamDesktop frame = new StreamDesktop(text, WebcamStudio.this);
frame.setLocation(text.getPanelX(), text.getPanelY());
cameraDesktop.add(frame, javax.swing.JLayeredPane.DEFAULT_LAYER);
}
System.out.println("Adding Source: "+text.getName());
}
Studio.LText.clear();
Studio.LText = null;
Tools.sleep(300);
// loading studio channels
for (String chsc : MasterChannels.getInstance().getChannels()) {
Tools.sleep(10);
listenerCP.addLoadingChannel(chsc);
}
Studio.chanLoad.clear();
listenerOP.resetSinks(fEvt);
ResourceMonitorLabel label = new ResourceMonitorLabel(System.currentTimeMillis()+10000, "Studio is loaded!");
ResourceMonitor.getInstance().addMessage(label);
setTitle("WebcamStudio " + Version.version + " ("+file.getName()+")");
}
return null;
}
@Override
protected void done(){
waitingD.dispose();
}
};
worker.execute();
waitingD.toFront();
waitingD.setVisible(true);
}
}