/*
* @(#)ProcessWindow
*
* Copyright (c) 2005-2008 by dvb.matt, All Rights Reserved.
*
* This file is part of ProjectX, a free Java based demux utility.
* By the authors, ProjectX is intended for educational purposes only,
* as a non-commercial test project.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package net.sourceforge.dvb.projectx.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.KeyEvent;
import java.io.StringWriter;
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JTextArea;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.UIManager;
import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import javax.swing.JRadioButton;
import javax.swing.JProgressBar;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.KeyStroke;
import javax.swing.ButtonGroup;
import net.sourceforge.dvb.projectx.gui.UISwitchListener;
import net.sourceforge.dvb.projectx.gui.ColumnLayout;
import net.sourceforge.dvb.projectx.gui.CommonGui;
import net.sourceforge.dvb.projectx.common.Keys;
import net.sourceforge.dvb.projectx.common.Resource;
import net.sourceforge.dvb.projectx.common.Common;
import net.sourceforge.dvb.projectx.parser.CommonParsing;
import net.sourceforge.dvb.projectx.gui.CheckBoxListener;
import net.sourceforge.dvb.projectx.gui.BitrateMonitor;
/**
*
*/
public class ProcessWindow extends JFrame {
private String title = Resource.getString("ProcessWindow.Title");
private JLabel ttxheaderLabel;
private JLabel ttxvpsLabel;
private JLabel OffsetLabel;
private JLabel StatusLabel;
private JTextArea TextArea;
private JViewport viewport;
private JComboBox extractComboBox;
private JProgressBar Progressbar;
private String SplitPart;
private BitrateMonitor Monitor;
private CheckBoxListener _CheckBoxListener = new CheckBoxListener();
ActionListener _BoxListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
String actName = e.getActionCommand();
JCheckBoxMenuItem box = (JCheckBoxMenuItem) e.getSource();
Common.getSettings().setBooleanProperty(actName, box.getState());
}
};
/**
* Constructor
*/
public ProcessWindow()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
close();
}
});
JPanel container = new JPanel();
container.setLayout(new BorderLayout());
setBounds(200, 100, 740, 480);
buildMenu();
container.add(buildHeadPanel(), BorderLayout.NORTH);
container.add(buildLogWindowPanel(), BorderLayout.CENTER);
container.add(buildProgressPanel(), BorderLayout.SOUTH);
getContentPane().add(container);
setTitle(title);
UIManager.addPropertyChangeListener(new UISwitchListener(getRootPane()));
}
/**
*
*/
public void close()
{
focusToText();
dispose();
}
/**
*
*/
public void iconify()
{
focusToText();
setState(ICONIFIED);
}
/**
*
*/
private void focusToText()
{
TextArea.requestFocus();
}
/**
*
*/
private void saveLog()
{
String str = CommonGui.getUserInput(this, "save log", "save logfile", Common.getSettings().getProperty(Keys.KEY_OutputDirectory) + System.getProperty("file.separator") + "pjx_log.txt");
if (str != null && str.length() > 0)
{
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(str));
pw.print(getLogContent());
pw.close();
} catch (IOException e) {
Common.setExceptionMessage(e);
}
}
toFront();
}
/**
*
*/
private String getLogContent()
{
return TextArea.getText();
}
/**
*
*/
protected void buildMenu()
{
JMenuBar menuBar = new JMenuBar();
menuBar.add(buildFileMenu());
menuBar.add(buildEditMenu());
menuBar.add(buildMessageMenu());
menuBar.add(buildPreferencesMenu());
setJMenuBar(menuBar);
}
/**
*
*/
protected JMenu buildFileMenu()
{
JMenu fileMenu = new JMenu();
CommonGui.localize(fileMenu, "Common.File");
String[][] objects = {
Keys.KEY_DebugLog,
Keys.KEY_NormalLog
};
for (int i = 0; i < objects.length; i++)
{
JCheckBoxMenuItem box = new JCheckBoxMenuItem(Resource.getString(objects[i][0]));
box.setToolTipText(Resource.getString(objects[i][0] + Keys.KEY_Tip));
box.setActionCommand(objects[i][0]);
box.setState(Common.getSettings().getBooleanProperty(objects[i]));
box.addActionListener(_BoxListener);
fileMenu.add(box);
}
fileMenu.addSeparator();
JCheckBoxMenuItem closeOnEnd = new JCheckBoxMenuItem(Resource.getString(Keys.KEY_closeOnEnd[0]));
closeOnEnd.setToolTipText(Resource.getString(Keys.KEY_closeOnEnd[0] + Keys.KEY_Tip));
closeOnEnd.setActionCommand(Keys.KEY_closeOnEnd[0]);
closeOnEnd.setState(Common.getSettings().getBooleanProperty(Keys.KEY_closeOnEnd));
closeOnEnd.addActionListener(_BoxListener);
fileMenu.add(closeOnEnd);
fileMenu.addSeparator();
JMenuItem kill = new JMenuItem();
CommonGui.localize(kill, "Common.KillProcess");
kill.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.ALT_MASK));
kill.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
Common.killMainProcess();
}
});
fileMenu.add(kill);
fileMenu.addSeparator();
JMenuItem save = new JMenuItem();
CommonGui.localize(save, "Common.SaveAs");
save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.ALT_MASK));
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
saveLog();
}
});
fileMenu.add(save);
fileMenu.addSeparator();
JMenuItem close = new JMenuItem();
CommonGui.localize(close, "Common.Close");
close.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK));
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
close();
}
});
fileMenu.add(close);
return fileMenu;
}
/**
*
*/
protected JMenu buildEditMenu()
{
JMenu editMenu = new JMenu();
CommonGui.localize(editMenu, "Common.Edit");
String[][] objects = {
Keys.KEY_minimizeMainFrame,
Keys.KEY_hideProcessWindow,
Keys.KEY_showSubpictureWindow,
Keys.KEY_useAllCollections,
Keys.KEY_ExportPanel_createSubDirNumber,
Keys.KEY_ExportPanel_createSubDirName,
Keys.KEY_ExportPanel_createSubDirVdr,
Keys.KEY_enablePostProcessing,
Keys.KEY_simpleMPG,
Keys.KEY_enhancedPES,
Keys.KEY_useGOPEditor
};
for (int i = 0, sep_offs = 3; i < objects.length; i++)
{
JCheckBoxMenuItem box = new JCheckBoxMenuItem(Resource.getString(objects[i][0]));
box.setToolTipText(Resource.getString(objects[i][0] + Keys.KEY_Tip));
box.setActionCommand(objects[i][0]);
box.setState(Common.getSettings().getBooleanProperty(objects[i]));
box.addActionListener(_BoxListener);
if (i == sep_offs || i == sep_offs + 1 || i == sep_offs + 4 || i == sep_offs + 5 || i == sep_offs + 7)
editMenu.addSeparator();
editMenu.add(box);
}
return editMenu;
}
/**
*
*/
protected JMenu buildMessageMenu()
{
JMenu messageMenu = new JMenu();
CommonGui.localize(messageMenu, "Common.Messages");
String[][] objects = {
Keys.KEY_MessagePanel_Msg1,
Keys.KEY_MessagePanel_Msg2,
Keys.KEY_MessagePanel_Msg3,
Keys.KEY_MessagePanel_Msg8,
Keys.KEY_MessagePanel_Msg5,
Keys.KEY_MessagePanel_Msg6,
Keys.KEY_MessagePanel_Msg7,
Keys.KEY_MessagePanel_Msg4
};
for (int i = 0; i < objects.length; i++)
{
JCheckBoxMenuItem box = new JCheckBoxMenuItem(Resource.getString(objects[i][0]));
box.setToolTipText(Resource.getString(objects[i][0] + Keys.KEY_Tip));
box.setActionCommand(objects[i][0]);
box.setState(Common.getSettings().getBooleanProperty(objects[i]));
box.addActionListener(_BoxListener);
if (i == 3 || i == 4 || i == 7)
messageMenu.addSeparator();
messageMenu.add(box);
}
return messageMenu;
}
/**
*
*/
protected JMenu buildPreferencesMenu()
{
JMenu preferencesMenu = new JMenu();
CommonGui.localize(preferencesMenu, "Common.Preferences");
JMenuItem preferences = new JMenuItem();
preferences.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
CommonGui.localize(preferences, "Common.Preferences");
preferences.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
Common.getGuiInterface().showPreSettings();
}
});
preferencesMenu.add(preferences);
JMenuItem coll_preferences = new JMenuItem();
coll_preferences.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
CommonGui.localize(coll_preferences, "General.CollectionProperties");
coll_preferences.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
CommonGui.getCollectionProperties().open(Common.getCollection(), Common.getActiveCollection());
}
});
preferencesMenu.add(coll_preferences);
preferencesMenu.addSeparator();
JCheckBoxMenuItem priority = new JCheckBoxMenuItem(Resource.getString(Keys.KEY_ConversionModePriority[0]));
priority.setToolTipText(Resource.getString(Keys.KEY_ConversionModePriority[0] + Keys.KEY_Tip));
priority.setActionCommand(Keys.KEY_ConversionModePriority[0]);
priority.setState(Common.getSettings().getBooleanProperty(Keys.KEY_ConversionModePriority));
priority.addActionListener(_BoxListener);
preferencesMenu.add(priority);
return preferencesMenu;
}
/**
*
*/
protected JPanel buildHeadPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(buildProcessPanel(), BorderLayout.NORTH);
panel.add(buildActionPanel(), BorderLayout.SOUTH);
return panel;
}
/**
*
*/
protected JPanel buildProcessPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Resource.getString("MainPanel.Process")));
JButton doitButton = new JButton(CommonGui.loadIcon("start.gif"));
doitButton.setMnemonic('s');
doitButton.setMaximumSize(new Dimension(60, 36));
doitButton.setPreferredSize(new Dimension(60, 36));
doitButton.setToolTipText(Resource.getString("button.go.Tip"));
doitButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (!Common.isRunningProcess())
{
if (Common.isCollectionListEmpty())
return;
Common.setRunningProcess(true);
extractComboBox.removeAllItems();
CommonParsing.setPvaPidToExtract(-1);
Common.startMainProcess();
}
else
{
if (!CommonParsing.isProcessPausing())
Common.setMessage(Resource.getString("golistener.msg.paused"), true, 0xFFFFE0);
else
Common.setMessage(Resource.getString("golistener.msg.resumed"), true, 0xFFFFFF);
CommonParsing.setProcessPausing(!CommonParsing.isProcessPausing());
}
focusToText();
}
});
panel.add(doitButton);
panel.add(Box.createRigidArea(new Dimension(4, 1)));
JButton breakButton = new JButton(CommonGui.loadIcon("stop.gif"));
breakButton.setMnemonic('c');
breakButton.setMaximumSize(new Dimension(36, 36));
breakButton.setPreferredSize(new Dimension(36, 36));
breakButton.setToolTipText(Resource.getString("button.c.Tip"));
breakButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
Common.breakMainProcess();
}
});
panel.add(breakButton);
panel.add(Box.createRigidArea(new Dimension(10, 1)));
JButton scanButton = new JButton(CommonGui.loadIcon("scan.gif"));
scanButton.setMnemonic('i');
scanButton.setMaximumSize(new Dimension(36, 36));
scanButton.setPreferredSize(new Dimension(36, 36));
scanButton.setToolTipText(Resource.getString("button.i.Tip"));
scanButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (!Common.startProcess())
return;
extractComboBox.removeAllItems();
CommonParsing.setInfoScan(true);
Common.startMainProcess();
}
});
panel.add(scanButton);
panel.add(Box.createRigidArea(new Dimension(4, 1)));
JButton extractButton = new JButton(CommonGui.loadIcon("extract.gif"));
extractButton.setMnemonic('e');
extractButton.setMaximumSize(new Dimension(36, 36));
extractButton.setPreferredSize(new Dimension(36, 36));
extractButton.setToolTipText(Resource.getString("button.e.Tip"));
extractButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if (Common.isRunningProcess())
return;
if (extractComboBox.getItemCount() == 0)
return;
Common.setRunningProcess(true);
CommonParsing.setPvaPidExtraction(true);
CommonParsing.setPvaPidToExtract(Integer.parseInt(extractComboBox.getSelectedItem().toString(), 16));
Common.setMessage(Resource.getString("golistener.msg.extracting") + extractComboBox.getSelectedItem().toString() + "...");
Common.startMainProcess();
}
});
panel.add(extractButton);
panel.add(Box.createRigidArea(new Dimension(4, 1)));
extractComboBox = new JComboBox();
extractComboBox.setMaximumSize(new Dimension(44, 26));
extractComboBox.setPreferredSize(new Dimension(44, 26));
extractComboBox.setMaximumRowCount(5);
panel.add(extractComboBox);
panel.add(Box.createRigidArea(new Dimension(10, 1)));
panel.add(buildStatusPanel());
return panel;
}
/**
*
*/
protected JPanel buildStatusPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
Monitor = new BitrateMonitor();
Monitor.setToolTipText(Resource.getString("MainPanel.BitrateMonitor.Tip"));
panel.add(Monitor);
JPanel status_7 = new JPanel(new BorderLayout());
status_7.setBorder(BorderFactory.createLoweredBevelBorder());
status_7.add(Monitor);
status_7.setPreferredSize(new Dimension(114, 36));
status_7.setMaximumSize(new Dimension(114, 36));
panel.add(status_7);
final JLabel troughput = new JLabel();
final JLabel collLabel = new JLabel();
final JLabel FpsLabel = new JLabel();
final JLabel outSize = new JLabel();
outSize.setToolTipText(Resource.getString("MainPanel.writtenMB.Tip"));
/**
*
*/
JPanel status_3 = new JPanel(new BorderLayout());
status_3.setBorder(BorderFactory.createLoweredBevelBorder());
status_3.setPreferredSize(new Dimension(100, 18));
status_3.setMaximumSize(new Dimension(100, 18));
status_3.setBackground(new Color(225, 225, 250));
status_3.add(collLabel);
JPanel status_4 = new JPanel(new BorderLayout());
status_4.setBorder(BorderFactory.createLoweredBevelBorder());
status_4.setPreferredSize(new Dimension(100, 18));
status_4.setMaximumSize(new Dimension(100, 18));
status_4.add(outSize);
JPanel panel_2 = new JPanel();
panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.Y_AXIS));
panel_2.add(status_3);
panel_2.add(status_4);
panel.add(panel_2);
/**
*
*/
JPanel status_1 = new JPanel(new BorderLayout());
status_1.setBorder(BorderFactory.createLoweredBevelBorder());
status_1.setPreferredSize(new Dimension(100, 18));
status_1.setMaximumSize(new Dimension(100, 18));
status_1.add(troughput);
JPanel status_2 = new JPanel(new BorderLayout());
status_2.setBorder(BorderFactory.createLoweredBevelBorder());
status_2.setPreferredSize(new Dimension(100, 18));
status_2.setMaximumSize(new Dimension(100, 18));
status_2.add(FpsLabel);
JPanel panel_1 = new JPanel();
panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));
panel_1.add(status_1);
panel_1.add(status_2);
panel.add(panel_1);
/**
*
*/
OffsetLabel = new JLabel(Resource.getString("MainPanel.AudioVideoOffset"));
OffsetLabel.setToolTipText(Resource.getString("MainPanel.AudioVideoOffset.Tip"));
StatusLabel = new JLabel(Resource.getString("MainPanel.nonVideoExportStatus"));
StatusLabel.setToolTipText(Resource.getString("MainPanel.nonVideoExportStatus.Tip"));
JPanel status_5 = new JPanel(new BorderLayout());
status_5.setBorder(BorderFactory.createLoweredBevelBorder());
status_5.setPreferredSize(new Dimension(100, 18));
status_5.setMaximumSize(new Dimension(100, 18));
status_5.add(OffsetLabel);
JPanel status_6 = new JPanel(new BorderLayout());
status_6.setBorder(BorderFactory.createLoweredBevelBorder());
status_6.setPreferredSize(new Dimension(100, 18));
status_6.setMaximumSize(new Dimension(100, 18));
status_6.add(StatusLabel);
JPanel panel_3 = new JPanel();
panel_3.setLayout(new BoxLayout(panel_3, BoxLayout.Y_AXIS));
panel_3.add(status_5);
panel_3.add(status_6);
panel.add(panel_3);
/**
*
*/
final JLabel TimeLabel = new JLabel();
TimeLabel.setToolTipText("process time elapsed");
final JLabel ErrorLabel = new JLabel();
ErrorLabel.setToolTipText("warnings/error counter");
JPanel status_8 = new JPanel(new BorderLayout());
status_8.setBorder(BorderFactory.createLoweredBevelBorder());
status_8.setPreferredSize(new Dimension(60, 18));
status_8.setMaximumSize(new Dimension(60, 18));
status_8.add(TimeLabel);
JPanel status_9 = new JPanel(new BorderLayout());
status_9.setBorder(BorderFactory.createLoweredBevelBorder());
status_9.setPreferredSize(new Dimension(60, 18));
status_9.setMaximumSize(new Dimension(60, 18));
status_9.add(ErrorLabel);
JPanel panel_4 = new JPanel();
panel_4.setLayout(new BoxLayout(panel_4, BoxLayout.Y_AXIS));
panel_4.add(status_8);
panel_4.add(status_9);
panel.add(panel_4);
class Clock implements Runnable {
private Thread clockThread = null;
private String last_value = "";
private String last_exp = "";
private String last_fps = "";
private int last_coll = 0;
public void start()
{
if (clockThread == null)
{
clockThread = new Thread(this, "Clock_2");
clockThread.setPriority(Thread.MIN_PRIORITY);
clockThread.start();
}
}
public void run()
{
Thread myThread = Thread.currentThread();
while (clockThread == myThread)
{
update();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
private void update()
{
updateFpsLabel();
updateDataTroughputLabel();
updateExportedSizeLabel();
updateCollectionLabel();
updateTimeLabel();
}
private void updateFpsLabel()
{
String str = Common.getFps();
if (!last_fps.equals(str))
FpsLabel.setText(str + " fps");
last_fps = str;
}
private void updateDataTroughputLabel()
{
String str = Common.getDataTroughput();
if (!last_value.equals(str))
troughput.setText(str + " kB/s");
last_value = str;
}
private void updateExportedSizeLabel()
{
String str = Common.getExportedSize();
if (!last_exp.equals(str))
outSize.setText(str);
last_exp = str;
}
private void updateCollectionLabel()
{
int val = Common.isRunningProcess() ? Common.getProcessedCollection() : Common.getActiveCollection();
if (last_coll != val)
collLabel.setText("Collection: " + (val < 0 ? "-" : String.valueOf(val) + "/" + String.valueOf(Common.getCollectionListSize() - 1)));
last_coll = val;
}
private void updateTimeLabel()
{
TimeLabel.setText(Common.formatTime_4(Common.getProcessTime()));
ErrorLabel.setText(String.valueOf(Common.getErrorCount()));
}
public void stop()
{
clockThread = null;
}
}
new Clock().start();
return panel;
}
/**
*
*/
protected JPanel buildActionPanel()
{
final Object[] objects = Keys.ITEMS_ConversionMode;
int index = Common.getSettings().getIntProperty(Keys.KEY_ConversionMode);
ActionListener _BoxListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
JCheckBox box = (JCheckBox) e.getSource();
String str = box.getActionCommand();
for (int i = 0; i < objects.length; i++)
{
if (!str.equals(objects[i].toString()))
continue;
Common.getSettings().setProperty(Keys.KEY_ConversionMode[0], String.valueOf(i));
}
}
};
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.setBorder(BorderFactory.createEtchedBorder());
panel.add(new JLabel(Resource.getString("ProcessWindowPanel.Action")));
panel.setToolTipText(Resource.getString("MainPanel.Process.Tip"));
panel.add(Box.createRigidArea(new Dimension(10, 1)));
ButtonGroup group = new ButtonGroup();
for (int i = 0; i < objects.length; i++)
{
JCheckBox action = new JCheckBox(objects[i].toString());
action.setActionCommand(objects[i].toString());
action.setSelected(i == index);
action.addActionListener(_BoxListener);
group.add(action);
panel.add(action);
}
panel.add(Box.createRigidArea(new Dimension(10, 1)));
return panel;
}
/**
*
*/
protected JPanel buildLogWindowPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JPanel main5 = new JPanel();
main5.setLayout(new BorderLayout());
JPanel panel_2 = new JPanel();
panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS));
JLabel icon = new JLabel(CommonGui.loadIcon("_teletext.gif"));
panel_2.add(icon);
panel_2.add(Box.createRigidArea(new Dimension(4, 1)));
JCheckBox box = new JCheckBox();
box.setToolTipText(Resource.getString(Keys.KEY_showTtxHeader[0] + Keys.KEY_Tip));
box.setActionCommand(Keys.KEY_showTtxHeader[0]);
box.setSelected(Common.getSettings().getBooleanProperty(Keys.KEY_showTtxHeader));
box.addActionListener(_CheckBoxListener);
panel_2.add(box);
main5.add(panel_2, BorderLayout.WEST);
ttxheaderLabel = new JLabel("");
ttxheaderLabel.setToolTipText(Resource.getString("LogwindowPanel.showTtxHeader.Tip1"));
main5.add(ttxheaderLabel, BorderLayout.CENTER);
ttxvpsLabel = new JLabel("");
ttxvpsLabel.setToolTipText(Resource.getString("LogwindowPanel.showVpsLabel.Tip"));
main5.add(ttxvpsLabel, BorderLayout.EAST);
JPanel main6 = new JPanel();
main6.setLayout(new GridLayout(1, 1));
main6.add(main5);
TextArea = new JTextArea();
TextArea.setEditable(true);
TextArea.setRows(16);
TextArea.setTabSize(12);
TextArea.setFont(new Font("Tahoma", Font.PLAIN, 12));
JScrollPane scrolltext = new JScrollPane();
scrolltext.setViewportView(TextArea);
viewport = scrolltext.getViewport();
//viewport.setScrollMode(JViewport.BLIT_SCROLL_MODE); //enable for >= JDK1.3
//viewport.setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE); //alternative, enable for >= JDK1.3
//viewport.setBackingStoreEnabled(true); // enable for < JDK1.3
JPanel control04 = new JPanel(new BorderLayout());
control04.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Resource.getString("ProcessWindowPanel.Title")));
control04.setAlignmentX(CENTER_ALIGNMENT);
control04.add(main6, BorderLayout.NORTH);
control04.add(scrolltext, BorderLayout.CENTER);
panel.add(control04);
return panel;
}
/**
*
*/
protected JPanel buildProgressPanel()
{
JPanel progress = new JPanel();
progress.setLayout(new BoxLayout(progress, BoxLayout.X_AXIS));
Progressbar = new JProgressBar();
Progressbar.setString(Resource.getString("run.status"));
Progressbar.setStringPainted(true);
/**
* bei cli nicht nutzbar
*/
Progressbar.addChangeListener(new ChangeListener()
{
int _val = 0;
public void stateChanged(ChangeEvent e)
{
if (Common.isRunningCLI())
{
// System.out.print("\r" + (int)(Progressbar.getPercentComplete() * 100) + "% ");
// System.out.print("" + Progressbar.getString());
}
else
{
Common.setFrameTitle("" + (int)(Progressbar.getPercentComplete() * 100) + "% (" + Common.getProcessedCollection() + ") " + Common.getVersionName() + "/" + Common.getVersionDate());
/**
* disabled, colorchange by percent, slows down
*
int val = (int)(128 * Progressbar.getPercentComplete());
if (val != _val)
Progressbar.setForeground(new Color(192 - val, 64 + val, 0));
_val = val;
**/
}
}
});
progress.add(Progressbar);
return progress;
}
/**
* messages of interest, also with current systems time_index
*
* @param1 - the msg
* @param2 - force windows visibility
* @param3 - background
*/
public void setMessage(String msg, boolean tofront, int background)
{
if (background != -1)
TextArea.setBackground(new Color(background));
/**
* ensure Logmsg is visible in GUI mode
*/
if (tofront)
show();
if (msg == null)
{
TextArea.setText(null);
return;
}
TextArea.append(Common.getLineSeparator() + msg);
// handle a crash
try {
viewport.setViewPosition(new Point(0, TextArea.getHeight()));
} catch (Exception e) {}
}
/**
*
*/
public void updateTtxHeader(String str)
{
ttxheaderLabel.setText(str);
}
/**
*
*/
public void updateVpsLabel(String str)
{
ttxvpsLabel.setText(str);
}
/**
*
*/
public void addPidToExtract(Object obj)
{
extractComboBox.addItem(obj);
}
/**
*
*/
public void showExportStatus(String str)
{
StatusLabel.setText(str);
}
/**
*
*/
public void showExportStatus(String str, int value)
{
StatusLabel.setText(str + " " + value);
}
/**
*
*/
public void showAVOffset(String str)
{
OffsetLabel.setText(str);
}
/**
*
*/
public void resetBitrateMonitor()
{
Monitor.reset();
}
/**
*
*/
public void updateBitrateMonitor(int value, byte[] array, String str)
{
Monitor.update(value, array, str);
}
/**
* progress
*
* @param1 - the msg
*/
public void updateProgressBar(int percent)
{
Progressbar.setValue(percent);
}
/**
* progress
*
* @param1 - the msg
*/
public void updateProgressBar(String str)
{
Progressbar.setString(str);
Progressbar.setStringPainted(true);
}
}