/* * @(#)MainFrame.java - holds main gui * * Copyright (c) 2001-2009 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.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Insets; import java.awt.LayoutManager; import java.awt.Point; import java.awt.Rectangle; import java.awt.Font; import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; import java.util.List; import java.text.DateFormat; import java.util.Comparator; import java.util.ArrayList; import java.util.Arrays; import java.util.StringTokenizer; import java.util.Locale; import java.util.Calendar; import java.util.Collections; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JRadioButton; import javax.swing.JRadioButtonMenuItem; import javax.swing.JCheckBoxMenuItem; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.JTextArea; import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.KeyStroke; import javax.swing.MenuElement; import javax.swing.JTable; import javax.swing.table.TableModel; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; import java.net.URL; import java.net.URLDecoder; import net.sourceforge.dvb.projectx.net.X_URLDecoder; import net.sourceforge.dvb.projectx.parser.CommonParsing; import net.sourceforge.dvb.projectx.parser.MainProcess; import net.sourceforge.dvb.projectx.parser.HpFix; import net.sourceforge.dvb.projectx.parser.StripAudio; import net.sourceforge.dvb.projectx.parser.StripRelook; import net.sourceforge.dvb.projectx.parser.StripMedion; import net.sourceforge.dvb.projectx.xinput.DirType; import net.sourceforge.dvb.projectx.xinput.XInputDirectory; import net.sourceforge.dvb.projectx.xinput.XInputFile; import net.sourceforge.dvb.projectx.video.Preview; import net.sourceforge.dvb.projectx.gui.FtpChooser; import net.sourceforge.dvb.projectx.common.JobCollection; import net.sourceforge.dvb.projectx.common.JobProcessing; import net.sourceforge.dvb.projectx.common.Common; import net.sourceforge.dvb.projectx.common.Resource; import net.sourceforge.dvb.projectx.common.Keys; import net.sourceforge.dvb.projectx.gui.AboutBox; import net.sourceforge.dvb.projectx.gui.HexViewer; import net.sourceforge.dvb.projectx.gui.Html; import net.sourceforge.dvb.projectx.gui.StartUp; import net.sourceforge.dvb.projectx.gui.UISwitchListener; import net.sourceforge.dvb.projectx.gui.CommonGui; import net.sourceforge.dvb.projectx.gui.PatchDialog; import net.sourceforge.dvb.projectx.gui.ColumnLayout; import net.sourceforge.dvb.projectx.gui.MemoryMonitor; import net.sourceforge.dvb.projectx.gui.CollectionPanel; import net.sourceforge.dvb.projectx.gui.ComboBoxIndexListener; import net.sourceforge.dvb.projectx.gui.ComboBoxItemListener; import net.sourceforge.dvb.projectx.gui.CheckBoxListener; import net.sourceforge.dvb.projectx.gui.TextFieldListener; import net.sourceforge.dvb.projectx.gui.CommonGui; import net.sourceforge.dvb.projectx.gui.GOPEditor; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.ClipboardOwner; import java.io.FilenameFilter; //import org.apache.oro.io.RegexFilenameFilter; /** * */ public class MainFrame extends JPanel { private static String frametitle = ""; private static int GlobalReturnCode = 0; private static boolean SilentAction = true; //create empty table private static Object[][] FileObjectTable = new Object[10][12]; private static JFrame frame = new JFrame(); // static { // frame.setIconImage(Resource.loadImage("pjx_icon.gif")); // } // global boxes private static JComboBox comboBox_0; /** * radio buttons for look and feels in general menu */ private JRadioButtonMenuItem lf_item[] = null; private JTable tableView; private JList list1; private JViewport viewport; private JTextField outfield; private JPopupMenu popup; private JFrame autoload; private PatchDialog patch_panel; private int loadSizeForward = 1024000; private Preview Preview = new Preview(loadSizeForward); private static GOPEditor gop_editor; /** * copy fileinfo to clipboard, see popup, menulistener */ private static ClipboardOwner defaultClipboardOwner = new ClipboardObserver(); static class ClipboardObserver implements ClipboardOwner { public void lostOwnership(Clipboard clipboard, Transferable contents) {} } private DropTargetListener dnd1Listener = new DropTargetListener() { public void drop(DropTargetDropEvent e) { try { int dropaction = e.getDropAction(); // 1=copy, 2=move if (dropaction == 0 || dropaction > 2) { e.rejectDrop(); return; } e.acceptDrop(dropaction); Transferable tr = e.getTransferable(); DataFlavor[] df = tr.getTransferDataFlavors(); // Get list with one or more File objects List list = new ArrayList(); Object obj = df.length == 0 ? new Object() : tr.getTransferData(df[0]); String eyetvCollectionName = null; if (obj instanceof java.util.List) { list = (java.util.List) obj; Collections.sort(list); // Replace dropped File objects by XInputFile objects ArrayList tempList = new ArrayList(); for (int i = 0; i < list.size(); i++) tempList.add(new XInputFile((File)list.get(i))); list = tempList; } else if (obj instanceof URL) { // MacOsX tiger returns one Url instead of a file list, works only without host specification of the file URL url = (URL) obj; String protocol = url.getProtocol(); if (protocol.equals("file")) { //File f = new File(URLDecoder.decode(url.getFile())); File f = new File(X_URLDecoder.decode(url.getFile(), "UTF-8")); if (f.isDirectory() && f.getName().endsWith(".eyetv")) { // handle EyeTV recording directory // output filename will be the directory name // filename is to be found inside the directory as ".mpg" String name = f.getName(); name = name.substring(0, name.lastIndexOf(".eyetv")); File[] theMPGFile = new File[1]; theMPGFile = f.listFiles(new FilenameFilter() { public boolean accept(File f, String s) { return s.toUpperCase().endsWith(".MPG"); } }); if(theMPGFile.length != 0) { list.add( new XInputFile(theMPGFile[0].getAbsoluteFile())); eyetvCollectionName = name + ".mpg"; } } else if (f.exists()) { list.add(new XInputFile(f)); eyetvCollectionName = null; } else Common.setOSDErrorMessage("dropped File Object(s) not accessible.. : " + url.toString()); } else if (protocol.equals("ftp")) { XInputDirectory xid = new XInputDirectory(url); XInputFile[] xif = xid.getFiles(); int i = 0; for (; i < xif.length; i++) if ( new URL(xif[i].toString()).getFile().equals(url.getFile()) ) { list.add(xif[i]); break; } if (i >= xif.length) Common.setOSDErrorMessage("File Object not accessible: " + url.toString()); } } else { e.dropComplete(true); tableView.setBackground(Color.white); Common.setOSDErrorMessage("can't drop Object(s) to Collection.. : " + obj.getClass().getName()); return; } if (dropaction == 1) // copy = new coll each { Object[] val = list.toArray(); /** * create new collection for each file */ for (int i = 0; i < val.length; i++) { JobCollection collection = Common.addCollection(); collection.addInputFile(val[i]); if(eyetvCollectionName != null) collection.setOutputName(eyetvCollectionName); updateCollectionTable(collection.getCollectionAsTable()); updateOutputField(collection); } } else if (dropaction == 2) // move = one coll { Object[] val = list.toArray(); if (val.length > 0) { Common.addCollection(false); JobCollection collection = Common.getCollection(comboBox_0.getSelectedIndex()); collection.addInputFile(val); if(eyetvCollectionName != null) collection.setOutputName(eyetvCollectionName); updateCollectionTable(collection.getCollectionAsTable()); updateOutputField(collection); } } e.dropComplete(true); if (list.size() > 0) updateCollectionPanel(Common.getActiveCollection()); } catch (Exception eee) { e.dropComplete(false); Common.setExceptionMessage(eee); } tableView.setBackground(Color.white); } public void dragEnter(DropTargetDragEvent e) { tableView.setBackground(Color.green); } public void dragExit(DropTargetEvent e) { tableView.setBackground(Color.white); } public void dragOver(DropTargetDragEvent e) {} public void dropActionChanged(DropTargetDragEvent e) {} }; /** * */ private ActionListener _BoxListener = new ActionListener() { public void actionPerformed(ActionEvent e) { String actName = e.getActionCommand(); JCheckBoxMenuItem box = (JCheckBoxMenuItem) e.getSource(); Common.getSettings().setBooleanProperty(actName, box.getState()); } }; /** * */ private ActionListener _MenuListener = new ActionListener() { public void actionPerformed(ActionEvent e) { String actName = e.getActionCommand(); /** * */ if (actName.equals("sendTo3")) { if (Common.isCollectionListEmpty()) return; int index = tableView.getSelectedRow(); if (index < 0) return; try { String str = Common.getSettings().getProperty(Keys.KEY_PostCommands_Cmd3); if (str.trim().length() > 0) Common.performCommand(str + " \"" + Common.getCollection().getInputFile(index).toString() + "\""); } catch (Exception ex) { Common.setExceptionMessage(ex); } } /** * */ else if (actName.equals("add")) { CommonGui.getMainFileChooser().rescanCurrentDirectory(); CommonGui.getMainFileChooser().setDialogType(JFileChooser.OPEN_DIALOG); CommonGui.getMainFileChooser().setMultiSelectionEnabled(true); int retval = CommonGui.getMainFileChooser().showDialog(frame, null); if (retval == JFileChooser.APPROVE_OPTION) { File theFiles[] = CommonGui.getMainFileChooser().getSelectedFiles(); if (theFiles == null) return; /** * adaption, if multiselection doesnt work */ if (theFiles.length == 0) { theFiles = new File[1]; theFiles[0] = CommonGui.getMainFileChooser().getSelectedFile(); } if (theFiles != null) { Common.addCollection(false); JobCollection collection = Common.getCollection(); /** * must use getAbsolutFile to ensure right ClassType, * sometimes the returned Object.getClass * from selection is NOT of java.io.File!! */ for (int i = 0; i < theFiles.length; i++) { if (theFiles[i].isFile()) collection.addInputFile( new XInputFile(theFiles[i].getAbsoluteFile())); else if (theFiles[i].isDirectory() && theFiles[i].getName().endsWith(".eyetv")) { // handle EyeTV recording directory // output filename will be the directory name // filename is to be found inside the directory as ".mpg" String name = theFiles[i].getName(); name = name.substring(0, name.lastIndexOf(".eyetv")); File[] theMPGFile = new File[1]; theMPGFile = theFiles[i].listFiles(new FilenameFilter() { public boolean accept(File f, String s) { return s.toUpperCase().endsWith(".MPG"); } }); if(theMPGFile.length != 0) { collection.addInputFile( new XInputFile(theMPGFile[0].getAbsoluteFile())); collection.setOutputName(name + ".mpg"); } } else Common.setOSDErrorMessage("File Object not accessible.. : " + theFiles[i].toString()); } updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); updateOutputField(collection); } return; } } /** * */ else if (actName.equals("newOutName")) { int index = tableView.getSelectedRow(); JobCollection collection = Common.getCollection(); if (index < 0 || index >= collection.getInputFilesCount()) return; String name = ((XInputFile) collection.getInputFiles()[0]).getName(); String newoutname = CommonGui.getUserInput( name, Resource.getString("popup.newOutName") + " " + name, collection.getOutputName()); if (newoutname != null) { collection.setOutputName(newoutname); updateOutputField(collection); updateCollectionTable(collection.getCollectionAsTable()); } } /** * */ else if (actName.equals("remove")) { int[] indices = tableView.getSelectedRows(); if (indices.length > 0) { JobCollection collection = Common.getCollection(); if (collection == null) return; collection.removeInputFile(indices); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); tableView.clearSelection(); } } /** * */ else if (actName.equals("rename")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); try { if (((XInputFile) collection.getInputFile(index)).rename()) reloadInputDirectories(); } catch (IOException ioe) {} updateCollectionTable(collection.getCollectionAsTable()); } /** * */ else if (actName.equals("changeTimestamp")) { int[] indices = tableView.getSelectedRows(); if (indices.length == 0) return; JobCollection collection = Common.getCollection(); for (int i = 0; i < indices.length; i++) { if (tableView.getValueAt(i, 0) == null) continue; XInputFile xInputFile = (XInputFile) collection.getInputFile(i); if (CommonGui.getUserConfirmation("really update the timestamp of '" + xInputFile.getName() + "' ?")) xInputFile.setLastModified(); } updateCollectionTable(collection.getCollectionAsTable()); } /** * */ else if (actName.equals("viewAsHex")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = ((XInputFile) collection.getInputFile(index)).getNewInstance(); if (xInputFile != null && xInputFile.exists()) new HexViewer().view(xInputFile); } /** * */ else if (actName.equals("viewInSupViewer")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = ((XInputFile) collection.getInputFile(index)).getNewInstance(); if (xInputFile != null && xInputFile.exists() && xInputFile.getStreamInfo().getStreamType() == CommonParsing.ES_SUP_TYPE) CommonGui.getSubpictureFrame().loadPreview(xInputFile); } /** * */ else if (actName.equals("fixHpAc3")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = ((XInputFile) collection.getInputFile(index)).getNewInstance(); if (xInputFile != null && xInputFile.exists() && CommonGui.getUserConfirmation("really process '" + xInputFile.getName() + "' ?")) { HpFix hpfix = new HpFix(); Common.setOSDMessage("fixing wrong Hp Ac3 File..."); xInputFile = hpfix.process(xInputFile); collection.removeInputFile(index); if (xInputFile != null) collection.addInputFile(index, xInputFile); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); tableView.clearSelection(); } } /** * */ else if (actName.equals("stripAudio")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = ((XInputFile) collection.getInputFile(index)).getNewInstance(); if (xInputFile != null && xInputFile.exists() && xInputFile.getStreamInfo().getStreamType() == CommonParsing.ES_RIFF_TYPE && CommonGui.getUserConfirmation("really process '" + xInputFile.getName() + "' ?")) { StripAudio stripAudio = new StripAudio(); Common.setOSDMessage("strip audio data..."); xInputFile = stripAudio.process(xInputFile); collection.removeInputFile(index); if (xInputFile != null) collection.addInputFile(index, xInputFile); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); tableView.clearSelection(); } } /** * */ else if (actName.equals("FileProperties")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = (XInputFile) collection.getInputFile(index); if (xInputFile != null && xInputFile.exists()) { CommonGui.getFileProperties().open(xInputFile, Common.getActiveCollection(), index); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); tableView.clearSelection(); } } /** * */ else if (actName.equals("CollectionProperties")) { if (Common.isCollectionListEmpty()) return; CommonGui.getCollectionProperties().open(Common.getCollection(), Common.getActiveCollection()); } /** * */ else if (actName.equals("stripRelook")) { stripRelook(0); } /** * */ else if (actName.equals("stripRelook1")) { stripRelook(1); } /** * */ else if (actName.equals("stripMedion")) { stripMedion(); } /** * */ else if (actName.equals("editBasics")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = (XInputFile) collection.getInputFile(index); if (patch_panel == null) patch_panel = new PatchDialog(frame); if (patch_panel.entry(xInputFile)) { getScanInfo(xInputFile, xInputFile.getStreamInfo().getStreamType()); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); } } /** * */ else if (actName.equals("clipboard")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = (XInputFile) collection.getInputFile(index); try { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); if (clipboard != null) { String srcData = xInputFile.getStreamInfo().getFullInfo(); StringSelection contents = new StringSelection(srcData); clipboard.setContents(contents, defaultClipboardOwner); } } catch (Exception er) { //just return } } /** * */ else if (actName.equals("applyAction")) { Object[] items = Keys.ITEMS_ConversionMode; String str = ((JMenuItem) e.getSource()).getText(); int val = -1; for (int i = 0; i < items.length; i++) { if (str.equals(items[i].toString())) { val = i; break; } } Common.getCollection().setActionType(val); } /** * */ else if (actName.equals("assignStreamtype")) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = (XInputFile) collection.getInputFile(index); Object[] items = Keys.ITEMS_FileTypes; String str = ((JMenuItem) e.getSource()).getText(); for (int i = 0; i < items.length; i++) { if (str.equals(items[i].toString())) { if (xInputFile.getStreamInfo() == null) getScanInfo(xInputFile); xInputFile.getStreamInfo().setStreamType(i); getScanInfo(xInputFile, i); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); return; } } xInputFile.setStreamInfo(null); getScanInfo(xInputFile); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); } /** * */ else if (actName.equals("exit")) Common.exitApplication(0); /** * shall support manual loading of supported URLs */ else if (actName.equals("url")) { String value = null; XInputFile inputValue = null; URL url = null; loop: while (true) { value = CommonGui.getUserInput(Resource.getString("dialog.input.url")); if (value == null) return; try { url = new URL(value); String protocol = url.getProtocol(); if (protocol.equals("ftp")) { XInputDirectory xid = new XInputDirectory(url); XInputFile[] xif = xid.getFiles(); for (int i = 0; i < xif.length; i++) { if ( new URL(xif[i].toString()).getFile().equals(url.getFile()) ) { inputValue = xif[i]; break loop; } } Common.setMessage("!> URL incorrect or not accessible: " + url.toString(), true); continue loop; } else if (protocol.equals("file")) { File f = new File(url.getHost() + url.getFile()); if (!f.exists()) f = new File(url.getFile()); if (f.exists()) inputValue = new XInputFile(f); break; } else Common.setMessage("!> Protocol not yet supported: " + protocol, true); return; } catch (Exception u1) { Common.setMessage("!> URL Exc: (" + value + ")"); Common.setExceptionMessage(u1); } } if (inputValue == null) return; Common.addCollection(false); JobCollection collection = Common.getCollection(); collection.addInputFile(inputValue); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); return; } } /** * */ private void stripRelook(int type) { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = ((XInputFile) collection.getInputFile(index)).getNewInstance(); if (xInputFile != null && xInputFile.exists() && xInputFile.getStreamInfo().getStreamType() == CommonParsing.PES_AV_TYPE && CommonGui.getUserConfirmation("really process '" + xInputFile.getName() + "' ?")) { StripRelook stripRelook = new StripRelook(type); Common.setOSDMessage("strip Relook� data, type " + type + "..."); XInputFile[] xif = stripRelook.process(xInputFile, collection.getOutputDirectory()); collection.removeInputFile(index); if (xif != null) { for (int i = 0, j = index; i < xif.length; i++) { if (xif[i] != null) collection.addInputFile(j++, xif[i]); } } updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); tableView.clearSelection(); } } /** * */ private void stripMedion() { int index = tableView.getSelectedRow(); if (index < 0 || tableView.getValueAt(index, 0) == null) return; JobCollection collection = Common.getCollection(); XInputFile xInputFile = ((XInputFile) collection.getInputFile(index)).getNewInstance(); if (xInputFile != null && xInputFile.exists() && xInputFile.getStreamInfo().getStreamType() == CommonParsing.PES_AV_TYPE && CommonGui.getUserConfirmation("really process '" + xInputFile.getName() + "' ?")) { StripMedion stripMedion = new StripMedion(); Common.setOSDMessage("strip Medion� data..."); XInputFile[] xif = stripMedion.process(xInputFile, collection.getOutputDirectory()); collection.removeInputFile(index); if (xif != null) { for (int i = 0, j = index; i < xif.length; i++) { if (xif[i] != null) collection.addInputFile(j++, xif[i]); } } updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); tableView.clearSelection(); } } }; /** * Constructor of X. */ public MainFrame(StartUp startup) { frame.setBackground(new Color(200, 200, 200)); CommonGui.setMainFrame(frame); initialize(startup); } /** * */ public static void addCollectionAtEnd() { SilentAction = true; comboBox_0.addItem(String.valueOf(comboBox_0.getItemCount())); comboBox_0.setSelectedIndex(comboBox_0.getItemCount() - 1); SilentAction = false; } /** * */ private void updateOutputField(JobCollection collection) { outfield.setText(collection.getOutputDirectory()); String str; if ( (str = collection.getOutputName()).length() > 0) { outfield.setText(outfield.getText() + " {" + str + "}"); outfield.setBackground(new Color(255, 225, 255)); } else outfield.setBackground(new Color(225, 255, 225)); } /** * updates GUI JList collection list view * * param1 - array of file objects */ private void updateCollectionTable(Object[][] objects) { FileObjectTable = objects == null ? new Object[10][12] : objects; tableView.clearSelection(); tableView.revalidate(); tableView.repaint(); } /** * updates GUI JList autoload list view * * param1 - array of file objects */ private void updateAutoloadList(Object[] objects) { list1.setListData(objects); } /** * */ private void buildGUI(StartUp startup) { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); showStartUpProgress(startup, 10, "Loading Menus..."); buildMenus(); showStartUpProgress(startup, 20, "Loading Popup Menus..."); buildPopupMenu(); showStartUpProgress(startup, 30, "Loading Quickload Panel..."); buildAutoloadPanel(); showStartUpProgress(startup, 40, "Loading Control Panel..."); /** * mid panel */ add(buildMainPanel()); showStartUpProgress(startup, 50, "Loading Status Panel..."); /** * south panel */ add(buildStatusPanel(), BorderLayout.SOUTH); add(Box.createRigidArea(new Dimension(1, 5))); } /** * */ protected void buildPopupMenu() { popup = new JPopupMenu(Resource.getString("popup.what")); JMenuItem menuitem_8 = popup.add(Resource.getString("popup.url")); menuitem_8.setActionCommand("url"); menuitem_8.addActionListener(_MenuListener); JMenuItem menuitem_2 = new JMenuItem(); CommonGui.localize(menuitem_2, "file.add"); menuitem_2.setActionCommand("add"); menuitem_2.addActionListener(_MenuListener); popup.add(menuitem_2); JMenuItem menuitem_3 = new JMenuItem(); CommonGui.localize(menuitem_3, "file.remove"); menuitem_3.setActionCommand("remove"); menuitem_3.addActionListener(_MenuListener); popup.add(menuitem_3); popup.addSeparator(); JMenuItem menuitem_5 = popup.add(Resource.getString("popup.openhex")); menuitem_5.setActionCommand("viewAsHex"); menuitem_5.addActionListener(_MenuListener); JMenuItem menuitem_6 = popup.add(Resource.getString("popup.opensup")); menuitem_6.setActionCommand("viewInSupViewer"); menuitem_6.addActionListener(_MenuListener); JMenuItem menuitem_7 = popup.add(Resource.getString("popup.sendtocl3")); menuitem_7.setActionCommand("sendTo3"); menuitem_7.addActionListener(_MenuListener); JMenuItem menuitem_11 = popup.add(Resource.getString("popup.copyInfoToClipboard")); menuitem_11.setActionCommand("clipboard"); menuitem_11.addActionListener(_MenuListener); popup.addSeparator(); JMenuItem menuitem_17 = popup.add(Resource.getString("General.FileProperties") + ".."); menuitem_17.setActionCommand("FileProperties"); menuitem_17.addActionListener(_MenuListener); popup.addSeparator(); JMenuItem menuitem_9 = popup.add(Resource.getString("popup.newOutName")); menuitem_9.setActionCommand("newOutName"); menuitem_9.addActionListener(_MenuListener); /** * */ Object[] objects = Keys.ITEMS_ConversionMode; JMenu action = new JMenu(Resource.getString("popup.assignActionType")); for (int i = -1; i < objects.length; i++) { JMenuItem item = new JMenuItem(i < 0 ? Resource.getString("popup.unspecified") : objects[i].toString()); item.setActionCommand("applyAction"); item.addActionListener(_MenuListener); if (i == 0) action.addSeparator(); action.add(item); } popup.add(action); popup.addSeparator(); //coll properties JMenuItem menuitem_18 = popup.add(Resource.getString("General.CollectionProperties") + ".."); menuitem_18.setActionCommand("CollectionProperties"); menuitem_18.addActionListener(_MenuListener); popup.pack(); UIManager.addPropertyChangeListener(new UISwitchListener(popup)); } /** * */ protected void buildMenus() { JMenuBar menuBar = new JMenuBar(); menuBar.add(buildFileMenu()); menuBar.add(buildViewerMenu()); menuBar.add(buildGeneralMenu()); menuBar.add(buildPreferencesMenu()); menuBar.add(buildLanguageMenu()); menuBar.add(buildAddonMenu()); menuBar.add(buildHelpMenu()); frame.setJMenuBar(menuBar); } /** * */ protected JMenu buildFileMenu() { JMenu file = new JMenu(); CommonGui.localize(file, "Common.File"); JMenuItem add = new JMenuItem(); CommonGui.localize(add, "file.add"); add.setActionCommand("add"); add.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); JMenuItem url = new JMenuItem(); CommonGui.localize(url, "file.url"); url.setActionCommand("url"); url.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.CTRL_MASK)); JMenuItem remove = new JMenuItem(); CommonGui.localize(remove, "file.remove"); remove.setActionCommand("remove"); remove.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.CTRL_MASK)); JMenuItem rename = new JMenuItem(); CommonGui.localize(rename, "file.rename"); rename.setActionCommand("rename"); rename.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, ActionEvent.CTRL_MASK)); JMenuItem exit = new JMenuItem(); CommonGui.localize(exit, "Common.Exit"); exit.setActionCommand("exit"); exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK)); file.add(add); file.add(url); file.add(remove); file.addSeparator(); file.add(rename); file.addSeparator(); file.add(exit); url.addActionListener(_MenuListener); add.addActionListener(_MenuListener); remove.addActionListener(_MenuListener); rename.addActionListener(_MenuListener); exit.addActionListener(_MenuListener); return file; } /** * */ protected JMenu buildSettingsMenu() { JMenu setting = new JMenu(); CommonGui.localize(setting, "settings.menu"); JMenuItem open = new JMenuItem(); CommonGui.localize(open, "settings.settings"); setting.add(open); return setting; } /** * */ protected JMenu buildPreferencesMenu() { JMenu preferencesMenu = new JMenu(); CommonGui.localize(preferencesMenu, "Common.Preferences"); JMenuItem preferences = new JMenuItem(); CommonGui.localize(preferences, "Common.Preferences"); preferences.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); preferences.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Common.getGuiInterface().showPreSettings(); } }); preferencesMenu.add(preferences); preferencesMenu.addSeparator(); JCheckBoxMenuItem save = new JCheckBoxMenuItem(Resource.getString(Keys.KEY_SaveSettingsOnExit[0])); save.setActionCommand(Keys.KEY_SaveSettingsOnExit[0]); save.setState(Common.getSettings().getBooleanProperty(Keys.KEY_SaveSettingsOnExit)); save.addActionListener(_BoxListener); preferencesMenu.add(save); return preferencesMenu; } /** * */ protected JMenu buildGeneralMenu() { JMenu general = new JMenu(); CommonGui.localize(general, "general.menu"); UIManager.LookAndFeelInfo[] lf_info = UIManager.getInstalledLookAndFeels(); lf_item = new JRadioButtonMenuItem[lf_info.length]; ButtonGroup lfgroup = new ButtonGroup(); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent e) { String lnfName = e.getActionCommand(); Common.getSettings().setProperty(Keys.KEY_LookAndFeel[0], lnfName); setLookAndFeel(lnfName); } }; for (int a = 0; a < lf_item.length; a++) { lf_item[a] = new JRadioButtonMenuItem(lf_info[a].getClassName()); general.add(lf_item[a]); lfgroup.add(lf_item[a]); lf_item[a].addActionListener(al); } setLookAndFeel(Common.getSettings().getProperty(Keys.KEY_LookAndFeel)); return general; } /** * sets the new look and feel. * * @param lnfName */ private void setLookAndFeel(String lnfName) { if (lnfName != null && !lnfName.equals("")) { JRadioButtonMenuItem selectedRadio = null; try { // update radio menu items for (int a=0; a < lf_item.length; a++) { if (lf_item[a].getActionCommand().equals(lnfName)) { lf_item[a].setSelected(true); selectedRadio = lf_item[a]; } } // now update the components UIManager.setLookAndFeel(lnfName); SwingUtilities.updateComponentTreeUI(frame); if(CommonGui.getMainFileChooser() != null) SwingUtilities.updateComponentTreeUI(CommonGui.getMainFileChooser()); } catch (Exception exc) { selectedRadio.getParent().remove(selectedRadio); System.err.println("!> Could not load LookAndFeel: " + lnfName); Common.setErrorMessage("!> Could not load LookAndFeel: " + lnfName); } } } /** * */ protected JMenu buildViewerMenu() { JMenu preview = new JMenu(); CommonGui.localize(preview, "options.menu"); JMenuItem hex = new JMenuItem(); CommonGui.localize(hex, "options.openhexview"); hex.setActionCommand("viewAsHex"); hex.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.CTRL_MASK)); preview.add(hex); preview.addSeparator(); JMenuItem basic = new JMenuItem(); CommonGui.localize(basic, "options.pachtbasics"); basic.setActionCommand("editBasics"); basic.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK)); preview.add(basic); preview.addSeparator(); JMenuItem subtitle = new JMenuItem(); CommonGui.localize(subtitle, "options.subtitlepreview"); subtitle.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Common.getGuiInterface().showSubpicture(); } }); subtitle.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK)); preview.add(subtitle); preview.addSeparator(); JMenuItem pagematrix = new JMenuItem(); CommonGui.localize(pagematrix, "options.teletext"); pagematrix.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Common.getGuiInterface().showTtxPageMatrix(); } }); pagematrix.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, ActionEvent.CTRL_MASK)); preview.add(pagematrix); hex.addActionListener(_MenuListener); basic.addActionListener(_MenuListener); return preview; } /** * Builds the Language Menu. * * @return JMenu */ protected JMenu buildLanguageMenu() { ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent event) { String action = event.getActionCommand(); if (action.equals("check")) { new Html("http://project-x.sourceforge.net/optional/resources/").show(); return; } if (action.equals("system")) Resource.setChosenLanguage(null); else Resource.setChosenLanguage(action); CommonGui.showMessageDialog(Resource.getString("msg.new.language"), Resource.getString("msg.infomessage")); } }; JMenu langMenu = new JMenu(); CommonGui.localize(langMenu, "language.menu"); JMenuItem item_check = new JMenuItem(); CommonGui.localize(item_check, "language.check"); item_check.addActionListener(listener); item_check.setActionCommand("check"); langMenu.add(item_check); langMenu.addSeparator(); ButtonGroup group = new ButtonGroup(); JRadioButtonMenuItem item_sys = new JRadioButtonMenuItem(); CommonGui.localize(item_sys, "language.system"); item_sys.addActionListener(listener); item_sys.setSelected(Resource.getChosenLanguage() == null); item_sys.setActionCommand("system"); langMenu.add(item_sys); group.add(item_sys); langMenu.addSeparator(); Locale[] locales = Resource.getAvailableLocales(); for (int i = 0; i < locales.length; i++) { Locale item = locales[i]; JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(item.getLanguage()); menuItem.addActionListener(listener); if (Resource.getChosenLanguage() != null) menuItem.setSelected(item.getLanguage().equals(Resource.getChosenLanguage())); menuItem.setActionCommand(item.getLanguage()); langMenu.add(menuItem); group.add(menuItem); } return langMenu; } /** * */ protected JMenu buildAddonMenu() { JMenu menu = new JMenu(); CommonGui.localize(menu, "Common.Addons"); menu.add(new JMenuItem("available components:")); menu.addSeparator(); // change: read table or list from common. if (Common.canAccessFtp()) menu.add(new JMenuItem("commons-net library (FTP access)")); if (Common.canAccessRawRead()) menu.add(new JMenuItem("rawread dll (ext. disk access)")); if (Common.getMpvDecoderClass().isAccelerated()) menu.add(new JMenuItem("accelerated preview (ext. IDCT)")); if (Common.canAccessColorTable()) menu.add(new JMenuItem("color tables (DVB subpicture)")); if (Common.canAccessSilentAC3()) menu.add(new JMenuItem("silent AC3 frames (replacements)")); return menu; } /** * */ protected JMenu buildHelpMenu() { JMenu help = new JMenu(); CommonGui.localize(help, "help.menu"); JMenuItem about = new JMenuItem(); CommonGui.localize(about, "help.about"); about.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new AboutBox(frame); } }); JMenuItem openHtml = new JMenuItem(); CommonGui.localize(openHtml, "help.help"); openHtml.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new Html().show(); } }); openHtml.setAccelerator(KeyStroke.getKeyStroke("F1")); JMenuItem version = new JMenuItem(); CommonGui.localize(version, "help.version"); version.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Common.checkVersion(); } }); help.add(about); help.addSeparator(); help.add(openHtml); help.addSeparator(); help.add(version); return help; } /** * */ protected JScrollPane createTable() { JScrollPane scrollpane; // final final String[] names = { "ID", Resource.getString("CollectionTable.Source"), "#", Resource.getString("CollectionTable.FileName"), Resource.getString("CollectionTable.FileLocation"), Resource.getString("CollectionTable.Size"), Resource.getString("CollectionTable.lastModified"), Resource.getString("ScanInfo.Video").substring(0, 1), Resource.getString("ScanInfo.Audio").substring(0, 1), Resource.getString("ScanInfo.Teletext").substring(0, 1), Resource.getString("ScanInfo.Subpicture").substring(0, 1), Resource.getString("CollectionTable.Streamtype") }; // Create a model of the data. TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return names.length; } public int getRowCount() { return FileObjectTable.length; } public Object getValueAt(int row, int col) { return FileObjectTable[row][col]; } public String getColumnName(int column) { return names[column]; } public Class getColumnClass(int c) { Object obj = getValueAt(0, c); if (obj == null) return String.class; return obj.getClass(); } public boolean isCellEditable(int row, int col) { return false; //return getColumnClass(col) == String.class; } public void setValueAt(Object aValue, int row, int column) { FileObjectTable[row][column] = aValue; } }; // Create the table tableView = new JTable(dataModel); // Show colors by rendering them in their own color. DefaultTableCellRenderer renderer_1 = new DefaultTableCellRenderer(); DefaultTableCellRenderer renderer_2 = new DefaultTableCellRenderer(); renderer_1.setHorizontalAlignment(JLabel.RIGHT); renderer_2.setHorizontalAlignment(JLabel.CENTER); tableView.setRowHeight(15); tableView.setGridColor(new Color(220, 220, 220)); tableView.removeEditor(); tableView.setToolTipText(Resource.getString("FilePanel.DragDrop.Tip")); tableView.setSelectionMode(2); tableView.setSelectionBackground(new Color(220, 220, 255)); tableView.setSelectionForeground(Color.black); tableView.getColumn(names[2]).setCellRenderer(renderer_2); tableView.getColumn(names[2]).setMaxWidth(25); tableView.getColumn(names[0]).setCellRenderer(renderer_2); tableView.getColumn(names[0]).setMaxWidth(25); tableView.getColumn(names[1]).setCellRenderer(renderer_2); tableView.getColumn(names[1]).setMinWidth(32); tableView.getColumn(names[1]).setMaxWidth(32); tableView.getColumn(names[3]).setMinWidth(165); //200 tableView.getColumn(names[4]).setMinWidth(160); tableView.getColumn(names[5]).setCellRenderer(renderer_1); tableView.getColumn(names[5]).setMinWidth(62); tableView.getColumn(names[5]).setMaxWidth(62); tableView.getColumn(names[6]).setCellRenderer(renderer_2); tableView.getColumn(names[6]).setMinWidth(100); tableView.getColumn(names[6]).setMaxWidth(100); for (int i = 7; i < 11; i++) { tableView.getColumn(names[i]).setCellRenderer(renderer_2); tableView.getColumn(names[i]).setMinWidth(16); tableView.getColumn(names[i]).setMaxWidth(16); } tableView.getColumn(names[11]).setMinWidth(90); tableView.sizeColumnsToFit(JTable.AUTO_RESIZE_LAST_COLUMN); tableView.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() < 1) return; int row = tableView.getSelectedRow(); // empty row if (row >= 0 && tableView.getValueAt(row, 0) == null) row = -1; int index = Common.getActiveCollection(); if (e.getModifiers() == MouseEvent.BUTTON3_MASK) { MenuElement[] elements = popup.getSubElements(); if (elements == null) return; for (int i = 3; i < 8; i++) elements[i].getComponent().setEnabled(row >= 0); for (int i = 8; i < elements.length; i++) elements[i].getComponent().setEnabled(index >= 0); popup.show(tableView, e.getX(), e.getY() - popup.getHeight()); } else if (row >= 0) getScanInfo((XInputFile) Common.getCollection(index).getInputFile(row)); if (e.getClickCount() >= 2 && e.getModifiers() == MouseEvent.BUTTON1_MASK && !Common.isCollectionListEmpty() && row >= 0) CommonGui.getFileProperties().open((XInputFile) Common.getCollection(index).getInputFile(row), Common.getActiveCollection(), row); } }); DropTarget dropTarget_2 = new DropTarget(tableView, dnd1Listener); scrollpane = new JScrollPane(tableView); return scrollpane; } /** * */ protected JPanel buildFilePanel() { JPanel panel_1 = new JPanel(); panel_1.setLayout(new ColumnLayout()); /** * autoload */ JButton open_autoload = new JButton(CommonGui.loadIcon("openmulti.gif")); open_autoload.setPreferredSize(new Dimension(30, 22)); open_autoload.setMaximumSize(new Dimension(30, 22)); open_autoload.setToolTipText(Resource.getString("FilePanel.openAutoloadPanel.Tip")); open_autoload.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { autoload.setState(0); autoload.show(); } }); panel_1.add(open_autoload); /** * add */ JButton file_add = new JButton(CommonGui.loadIcon("open.gif")); file_add.setPreferredSize(new Dimension(30, 22)); file_add.setMaximumSize(new Dimension(30, 22)); file_add.setToolTipText(Resource.getString("FilePanel.FileAdd.Tip")); file_add.setActionCommand("add"); file_add.addActionListener(_MenuListener); panel_1.add(file_add); /** * remove */ JButton file_remove = new JButton(CommonGui.loadIcon("remove.gif")); file_remove.setPreferredSize(new Dimension(30, 22)); file_remove.setMaximumSize(new Dimension(30, 22)); file_remove.setToolTipText(Resource.getString("FilePanel.FileRemove.Tip")); file_remove.setActionCommand("remove"); file_remove.addActionListener(_MenuListener); panel_1.add(file_remove); /** * up */ JButton file_up = new JButton(CommonGui.loadIcon("up2.gif")); // JButton file_up = new JButton(CommonGui.loadIcon("up.gif")); file_up.setPreferredSize(new Dimension(30, 22)); file_up.setMaximumSize(new Dimension(30, 22)); file_up.setToolTipText(Resource.getString("FilePanel.FileUp.Tip")); file_up.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int[] indices = tableView.getSelectedRows(); if (indices.length > 0) { JobCollection collection = Common.getCollection(comboBox_0.getSelectedIndex()); if (collection == null) return; for (int i = 0; i < indices.length; i++) { int index = indices[i]; if (index > 0 && tableView.getValueAt(index, 0) != null) { Object object = collection.removeInputFile(index); collection.addInputFile(index - 1, object); indices[i] = index - 1; } } updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); } } }); panel_1.add(file_up); /** * down */ JButton file_down = new JButton(CommonGui.loadIcon("down.gif")); // JButton file_down = new JButton(CommonGui.loadIcon("dn.gif")); file_down.setPreferredSize(new Dimension(30, 22)); file_down.setMaximumSize(new Dimension(30, 22)); file_down.setToolTipText(Resource.getString("FilePanel.FileDown.Tip")); file_down.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int[] indices = tableView.getSelectedRows(); if (indices.length > 0) { JobCollection collection = Common.getCollection(comboBox_0.getSelectedIndex()); if (collection == null) return; for (int i = indices.length - 1; i >= 0; i--) { int index = indices[i]; if (index < collection.getInputFilesCount() - 1 && tableView.getValueAt(index, 0) != null) { Object object = collection.removeInputFile(index); collection.addInputFile(index + 1, object); indices[i] = index + 1; } } updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); } } }); panel_1.add(file_down); /** * */ JPanel panel_2 = new JPanel(); panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS)); panel_2.add(new JLabel(Resource.getString("FilePanel.OutputDirectory"))); panel_2.add(Box.createRigidArea(new Dimension(6, 1))); outfield = new JTextField(); outfield.setBackground(new Color(225, 255, 225)); outfield.setMaximumSize(new Dimension(280, 20)); outfield.setMinimumSize(new Dimension(280, 20)); outfield.setEditable(false); outfield.setToolTipText(Resource.getString("FilePanel.OutputDirectory.Tip")); panel_2.add(outfield); panel_2.add(Box.createRigidArea(new Dimension(6, 1))); panel_2.add(new JLabel(Resource.getString("FilePanel.recentOutputDirectories"))); panel_2.add(Box.createRigidArea(new Dimension(6, 1))); /** * */ // recent output final JComboBox comboBox_13 = new JComboBox(Common.getSettings().getOutputDirectories().toArray()); comboBox_13.setMinimumSize(new Dimension(280, 20)); comboBox_13.setMaximumSize(new Dimension(280, 20)); comboBox_13.setMaximumRowCount(8); comboBox_13.insertItemAt(Resource.getString("working.output.std"), 0); comboBox_13.setSelectedItem(Common.getSettings().getProperty(Keys.KEY_OutputDirectory)); comboBox_13.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (comboBox_13.getItemCount() > 1) Common.getSettings().setProperty(Keys.KEY_OutputDirectory[0], comboBox_13.getSelectedItem()); if (comboBox_0.getItemCount() == 0) return; Common.setActiveCollection(comboBox_0.getSelectedIndex()); JobCollection collection = Common.getCollection(); collection.setOutputDirectory(Common.getSettings().getProperty(Keys.KEY_OutputDirectory)); updateOutputField(collection); updateCollectionTable(collection.getCollectionAsTable()); } }); /** * */ JButton add_output = new JButton(CommonGui.loadIcon("open.gif")); add_output.setMinimumSize(new Dimension(24, 20)); add_output.setMaximumSize(new Dimension(24, 20)); add_output.setToolTipText(Resource.getString("FilePanel.addRecentOutputDirectory.Tip")); add_output.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CommonGui.getMainFileChooser().rescanCurrentDirectory(); CommonGui.getMainFileChooser().setDialogType(JFileChooser.OPEN_DIALOG); CommonGui.getMainFileChooser().setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int retval = CommonGui.getMainFileChooser().showDialog(frame, null); if (retval == JFileChooser.APPROVE_OPTION) { File theFile = CommonGui.getMainFileChooser().getSelectedFile(); String file = ""; if (theFile != null) { if (theFile.isFile()) file = theFile.getParent(); else if (theFile.isDirectory()) file = theFile.getAbsolutePath(); // do not list duplicates for (int i = 0; i < comboBox_13.getItemCount(); i++) if (file.equalsIgnoreCase(comboBox_13.getItemAt(i).toString())) return; Common.getSettings().addOutputDirectory(file); comboBox_13.addItem(file); comboBox_13.setSelectedItem(file); } } } }); /** * */ JButton remove_output = new JButton(CommonGui.loadIcon("remove.gif")); remove_output.setMinimumSize(new Dimension(24, 20)); remove_output.setMaximumSize(new Dimension(24, 20)); remove_output.setToolTipText(Resource.getString("FilePanel.removeRecentOutputDirectory.Tip")); remove_output.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (comboBox_13.getItemCount() > 1) { int index = comboBox_13.getSelectedIndex(); if (index > 0) { Common.getSettings().removeOutputDirectory(index - 1); comboBox_13.removeItemAt(index); } else Common.setOSDErrorMessage("Eintrag kann nicht entfernt werden.."); } if (comboBox_13.getItemCount() <= 1) Common.getSettings().remove(Keys.KEY_OutputDirectory[0]); } }); panel_2.add(add_output); panel_2.add(remove_output); panel_2.add(comboBox_13); /** * table + output dir's */ JPanel control_1 = new JPanel(new BorderLayout()); control_1.setAlignmentX(CENTER_ALIGNMENT); control_1.add(createTable(), BorderLayout.CENTER); control_1.add(panel_2, BorderLayout.SOUTH); /** * file panel at all */ JPanel control_2 = new JPanel(new BorderLayout()); control_2.setAlignmentX(CENTER_ALIGNMENT); control_2.add(control_1, BorderLayout.CENTER); control_2.add(panel_1, BorderLayout.WEST); /** * panel */ JPanel panel = new JPanel(); panel.setLayout( new GridLayout(1, 1) ); panel.setBorder(BorderFactory.createEtchedBorder()); panel.add(control_2); panel.setPreferredSize(new Dimension(860, 114)); panel.setMaximumSize(new Dimension(860, 114)); panel.setMinimumSize(new Dimension(860, 114)); return panel; } /** * */ private void closeAutoloadPanel() { autoload.dispose(); } /** * */ protected void buildAutoloadPanel() { autoload = new JFrame(Resource.getString("autoload.title")); autoload.addWindowListener ( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeAutoloadPanel(); } }); JMenu fileMenu = new JMenu(); CommonGui.localize(fileMenu, "Common.File"); JMenuItem closemenu = new JMenuItem(); CommonGui.localize(closemenu, "Common.Close"); closemenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK)); closemenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { closeAutoloadPanel(); } }); fileMenu.add(closemenu); JMenu editMenu = new JMenu(); CommonGui.localize(editMenu, "Common.Edit"); JCheckBoxMenuItem subdir = new JCheckBoxMenuItem(Resource.getString(Keys.KEY_InputDirectoriesDepth[0])); subdir.setToolTipText(Resource.getString(Keys.KEY_InputDirectoriesDepth[0] + Keys.KEY_Tip)); subdir.setActionCommand(Keys.KEY_InputDirectoriesDepth[0]); subdir.setState(Common.getSettings().getBooleanProperty(Keys.KEY_InputDirectoriesDepth)); subdir.addActionListener(_BoxListener); editMenu.add(subdir); /** * */ JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); menuBar.add(editMenu); autoload.setJMenuBar(menuBar); JPanel bb = new JPanel(); bb.setLayout( new ColumnLayout() ); /** * */ final JComboBox comboBox_12 = new JComboBox(Common.getSettings().getListProperty(Keys.KEY_InputDirectories).toArray()); // recent input comboBox_12.setMaximumRowCount(8); comboBox_12.setPreferredSize(new Dimension(400, 24)); /** * */ JButton remove_input = new JButton(CommonGui.loadIcon("remove.gif")); remove_input.setPreferredSize(new Dimension(50,28)); remove_input.setMaximumSize(new Dimension(50,28)); remove_input.setToolTipText(Resource.getString("autoload.dir.remove.tip")); remove_input.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (comboBox_12.getItemCount() > 0) { int index = comboBox_12.getSelectedIndex(); Common.getSettings().removeInputDirectory(index); Common.getSettings().updateInputDirectories(); comboBox_12.removeItemAt(index); } reloadInputDirectories(); } }); bb.add(remove_input); /** * */ JButton add_input = new JButton(CommonGui.loadIcon("open.gif")); add_input.setPreferredSize(new Dimension(50,28)); add_input.setMaximumSize(new Dimension(50,24)); add_input.setToolTipText(Resource.getString("autoload.dir.add.tip")); add_input.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CommonGui.getMainFileChooser().rescanCurrentDirectory(); CommonGui.getMainFileChooser().setDialogType(JFileChooser.OPEN_DIALOG); CommonGui.getMainFileChooser().setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); int retval = CommonGui.getMainFileChooser().showDialog(frame, null); if (retval == JFileChooser.APPROVE_OPTION) { File theFile = CommonGui.getMainFileChooser().getSelectedFile(); if (theFile != null) { if (theFile.isFile()) theFile = theFile.getParentFile(); /** * must use getAbsolutFile to ensure right ClassType, * sometimes the returned Object.getClass * from selection is NOT of java.io.File!! */ String str = Common.getSettings().addInputDirectory(theFile.getAbsoluteFile()); if (str != null) { Common.getSettings().updateInputDirectories(); comboBox_12.addItem(str); comboBox_12.setSelectedItem(str); } reloadInputDirectories(); } autoload.toFront(); return; } autoload.toFront(); } }); bb.add(add_input); // Button to add a ftp server directory to the autoload list JButton add_inputftp = new JButton(CommonGui.loadIcon("openftp.gif")); add_inputftp.setPreferredSize(new Dimension(50,28)); add_inputftp.setMaximumSize(new Dimension(50,24)); add_inputftp.setToolTipText(Resource.getString("autoload.ftp.add.tip")); add_inputftp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Add ftp server directory to autoload list FtpChooser ftpChooser = new FtpChooser(); ftpChooser.pack(); ftpChooser.show(); XInputDirectory xInputDirectory = ftpChooser.getXInputDirectory(); if (ftpChooser.isTested() && xInputDirectory != null) { String str = Common.getSettings().addInputDirectory(xInputDirectory); if (str != null) { Common.getSettings().updateInputDirectories(); comboBox_12.addItem(str); comboBox_12.setSelectedItem(str); } reloadInputDirectories(); } autoload.setState(0); autoload.toFront(); } }); bb.add(add_inputftp); /** * */ JButton refresh_list = new JButton(CommonGui.loadIcon("refresh.gif")); refresh_list.setPreferredSize(new Dimension(50,28)); refresh_list.setMaximumSize(new Dimension(50,28)); refresh_list.setToolTipText(Resource.getString("autoload.dir.refresh.tip")); refresh_list.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { reloadInputDirectories(); } }); bb.add(refresh_list); bb.add(new JLabel(" ")); /** * */ JButton add_coll_and_1file = new JButton(CommonGui.loadIcon("addcollfile.gif")); add_coll_and_1file.setPreferredSize(new Dimension(50,28)); add_coll_and_1file.setMaximumSize(new Dimension(50,28)); add_coll_and_1file.setToolTipText(Resource.getString("autoload.add.coll.tip")); add_coll_and_1file.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object[] val = list1.getSelectedValues(); /** * create new collection for each file */ for (int i = 0; i < val.length; i++) { JobCollection collection = Common.addCollection(); collection.addInputFile(val[i]); updateCollectionTable(collection.getCollectionAsTable()); } if (val.length > 0) updateCollectionPanel(Common.getActiveCollection()); autoload.toFront(); } }); bb.add(add_coll_and_1file); /** * */ JButton add_coll_and_files = new JButton(CommonGui.loadIcon("addcollfiles.gif")); add_coll_and_files.setPreferredSize(new Dimension(50,28)); add_coll_and_files.setMaximumSize(new Dimension(50,28)); add_coll_and_files.setToolTipText(Resource.getString("autoload.add.coll2.tip")); add_coll_and_files.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object[] val = list1.getSelectedValues(); if (val.length == 0) return; /** * create new collection add all selected files */ JobCollection collection = Common.addCollection(); collection.addInputFile(val); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); autoload.toFront(); } }); bb.add(add_coll_and_files); /** * */ JButton add_files = new JButton(CommonGui.loadIcon("addfile.gif")); add_files.setPreferredSize(new Dimension(50, 28)); add_files.setMaximumSize(new Dimension(50, 28)); add_files.setToolTipText(Resource.getString("autoload.add.file.tip")); add_files.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object[] val = list1.getSelectedValues(); if (val.length > 0) // one or more files { Common.addCollection(false); JobCollection collection = Common.getCollection(comboBox_0.getSelectedIndex()); collection.addInputFile(val); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); autoload.toFront(); } } }); bb.add(add_files); bb.add(new JLabel(" ")); /** * */ JButton close = new JButton(CommonGui.loadIcon("close.gif")); close.setPreferredSize(new Dimension(50,28)); close.setMaximumSize(new Dimension(50,28)); close.setToolTipText(Resource.getString("autoload.close")); close.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { closeAutoloadPanel(); } }); bb.add(close); // in list list1 = new JList(new Object[0]); list1.setName("inl"); list1.setVisibleRowCount(8); list1.setSelectionMode(2); list1.setToolTipText(Resource.getString("autoload.rename.tip")); list1.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { int index = list1.locationToIndex( e.getPoint()); if (e.getClickCount() > 1) { if (e.getModifiers() == MouseEvent.BUTTON3_MASK && index > -1) // rename file { try { if (((XInputFile)list1.getSelectedValue()).rename()) reloadInputDirectories(); } catch (IOException ioe) {} autoload.toFront(); } else if (e.getModifiers() == MouseEvent.BUTTON1_MASK && index > -1) // add file to coll { Common.addCollection(false); Object[] val = list1.getSelectedValues(); if (val.length > 0) // one or more files { JobCollection collection = Common.getCollection(comboBox_0.getSelectedIndex()); collection.addInputFile(val); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); } autoload.toFront(); } } else if (e.getClickCount() == 1) { if (list1.getSelectedValue() != null ) getScanInfo( (XInputFile) list1.getSelectedValue()); } } }); list1.addKeyListener( new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_ENTER) { Common.addCollection(false); Object[] val = list1.getSelectedValues(); if (val.length > 0) // one or more files { JobCollection collection = Common.getCollection(comboBox_0.getSelectedIndex()); collection.addInputFile(val); updateCollectionTable(collection.getCollectionAsTable()); updateCollectionPanel(Common.getActiveCollection()); } autoload.toFront(); } } }); JScrollPane scrolltext = new JScrollPane(); scrolltext.setViewportView(list1); /** * */ JPanel control_1 = new JPanel(new BorderLayout()); control_1.setAlignmentX(CENTER_ALIGNMENT); control_1.add(scrolltext, BorderLayout.CENTER); control_1.add(comboBox_12, BorderLayout.NORTH); JPanel control_2 = new JPanel(new BorderLayout()); control_2.setAlignmentX(CENTER_ALIGNMENT); control_2.add(control_1, BorderLayout.CENTER); control_2.add(bb, BorderLayout.WEST); autoload.getContentPane().add(control_2); UIManager.addPropertyChangeListener(new UISwitchListener(control_2)); autoload.setBounds(200, 200, 700, 350); } /** * */ protected JPanel buildMainPanel() { /** * */ JPanel panel_1 = new JPanel(); // panel_1.setLayout(new ColumnLayout()); panel_1.setLayout(new BorderLayout()); MemoryMonitor memo = new MemoryMonitor(); if (Common.showGUI()) memo.surf.start(); panel_1.add(memo, BorderLayout.NORTH); JPanel panel_3 = new JPanel(); panel_3.setLayout(new ColumnLayout()); panel_3.add(buildProcessControlPanel()); panel_3.add(buildCollectionControlPanel()); panel_1.add(panel_3, BorderLayout.SOUTH); //panel_1.setPreferredSize(new Dimension(115, 362)); //panel_1.setMaximumSize(new Dimension(115, 362)); //panel_1.setMinimumSize(new Dimension(115, 362)); /** * */ JPanel panel_2 = new JPanel(); // panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS)); panel_2.setLayout(new BorderLayout()); panel_2.add(panel_1, BorderLayout.WEST); panel_2.add(new CollectionPanel(), BorderLayout.CENTER); //panel_2.setPreferredSize(new Dimension(860, 362)); //panel_2.setMaximumSize(new Dimension(860, 362)); //panel_2.setMinimumSize(new Dimension(860, 362)); /** * */ JPanel panel = new JPanel(); // panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setLayout(new BorderLayout()); panel.add(panel_2, BorderLayout.CENTER); panel.add(buildFilePanel1(), BorderLayout.SOUTH); return panel; } /** * */ protected JPanel buildFilePanel1() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.setTabPlacement(SwingConstants.BOTTOM); tabbedPane.addTab(Resource.getString("General.FileTable"), buildFilePanel()); tabbedPane.addTab(Resource.getString("General.CutControl"), CommonGui.getCutPanel()); tabbedPane.addTab(Resource.getString("General.FilterControl"), new FilterPanel()); panel.add(CommonGui.getCutPanel().getSliderPanel(), BorderLayout.NORTH); panel.add(tabbedPane); return panel; } /** * */ protected JPanel buildProcessControlPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setBorder(BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), Resource.getString("MainPanel.Process"))); /** * */ JButton process = new JButton(Resource.getString("MainPanel.QuickStart")); process.setToolTipText(Resource.getString("MainPanel.QuickStart.Tip")); process.setMnemonic('q'); process.setPreferredSize(new Dimension(120, 24)); process.setMaximumSize(new Dimension(120, 24)); process.setMinimumSize(new Dimension(120, 24)); process.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (Common.startProcess()) Common.startMainProcess(); } }); panel.add(process); panel.add(Box.createRigidArea(new Dimension(1, 5))); /** * process window open */ JButton processwindow = new JButton(Resource.getString("ProcessWindowPanel.Button")); processwindow.setPreferredSize(new Dimension(120, 24)); processwindow.setMaximumSize(new Dimension(120, 24)); processwindow.setMinimumSize(new Dimension(120, 24)); processwindow.setToolTipText(Resource.getString("MainPanel.Process") + " " + Resource.getString("ProcessWindowPanel.Button")); processwindow.setMnemonic('p'); processwindow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Common.getGuiInterface().showLogWindow(); } }); panel.add(processwindow); return panel; } /** * */ protected JPanel buildCollectionControlPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setBorder(BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), Resource.getString("MainPanel.Collection"))); final Color idle_color = new Color(230, 230, 230); final Color running_color = new Color(245, 215, 215); final Color settings_color = new Color(245, 245, 215); /** * info field */ final JTextArea textarea = new JTextArea(); textarea.setToolTipText(Resource.getString("FilePanel.Textfield.Tip")); textarea.setBackground(idle_color); textarea.setFont(new Font("Tahoma", Font.PLAIN, 11)); textarea.setEditable(false); DropTarget dropTarget_1 = new DropTarget(textarea, dnd1Listener); JPanel panel_2 = new JPanel(); panel_2.setLayout(new GridLayout(1,1)); panel_2.setBorder(BorderFactory.createLoweredBevelBorder()); panel_2.setPreferredSize(new Dimension(120, 138)); panel_2.setMaximumSize(new Dimension(120, 138)); panel_2.setMinimumSize(new Dimension(120, 138)); panel_2.add(textarea); panel.add(panel_2); /** * collection label */ JLabel coll_label = new JLabel(Resource.getString("FilePanel.CollectionNumber")); coll_label.setPreferredSize(new Dimension(60, 24)); coll_label.setMaximumSize(new Dimension(60, 24)); coll_label.setHorizontalAlignment(SwingConstants.CENTER); coll_label.setToolTipText(Resource.getString("FilePanel.CollectionNumber.Tip")); /** * number of act. coll. */ comboBox_0 = new JComboBox(); comboBox_0.setPreferredSize(new Dimension(60, 24)); comboBox_0.setMaximumSize(new Dimension(60, 24)); comboBox_0.setMinimumSize(new Dimension(60, 24)); comboBox_0.setMaximumRowCount(6); comboBox_0.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (comboBox_0.getItemCount() > 0) { Common.setActiveCollection(comboBox_0.getSelectedIndex()); JobCollection collection = Common.getCollection(); updateOutputField(collection); updateCollectionTable(collection.getCollectionAsTable()); if (!SilentAction) updateCollectionPanel(Common.getActiveCollection()); } else { Common.setActiveCollection(-1); outfield.setText(""); updateCollectionTable(null); } } }); /** * remove collection */ JButton remove_coll = new JButton(CommonGui.loadIcon("remcoll.gif")); remove_coll.setPreferredSize(new Dimension(60, 24)); remove_coll.setMaximumSize(new Dimension(60, 24)); remove_coll.setToolTipText(Resource.getString("FilePanel.removeCollection.Tip")); remove_coll.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (Common.isCollectionListEmpty()) return; int index = comboBox_0.getSelectedIndex(); if (!Common.removeCollection(index)) return; comboBox_0.removeAllItems(); for (int i = 0; i < Common.getCollectionListSize(); i++) comboBox_0.addItem(String.valueOf(i)); if (index < comboBox_0.getItemCount()) comboBox_0.setSelectedIndex(index); if (!Common.isCollectionListEmpty() && index >= comboBox_0.getItemCount()) comboBox_0.setSelectedIndex(comboBox_0.getItemCount() - 1); if (Common.isCollectionListEmpty()) updateCollectionPanel(-1); } }); /** * add collection */ JButton add_coll = new JButton(CommonGui.loadIcon("addcoll.gif")); add_coll.setPreferredSize(new Dimension(60, 24)); add_coll.setMaximumSize(new Dimension(60, 24)); add_coll.setToolTipText(Resource.getString("FilePanel.addCollection.Tip")); add_coll.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Common.addCollection(); updateCollectionPanel(Common.getActiveCollection()); } }); JPanel panel_0 = new JPanel(); panel_0.setLayout(new BoxLayout(panel_0, BoxLayout.X_AXIS)); panel_0.add(add_coll); panel_0.add(coll_label); panel.add(panel_0); JPanel panel_1 = new JPanel(); panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS)); panel_1.add(remove_coll); panel_1.add(comboBox_0); panel.add(panel_1); /** * watch on changes */ class Clock implements Runnable { private Thread clockThread = null; private String text = ""; public void start() { if (clockThread == null) { clockThread = new Thread(this, "Clock_3"); 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() { JobCollection collection = Common.getCollection(); String str = collection == null ? Resource.getString("JobCollection.NoInfo") : collection.getShortSummary(); if (text.equals(str)) return; text = str; textarea.setText(text); if (collection != null && collection.isActive()) textarea.setBackground(running_color); else if (collection != null && collection.hasSettings()) textarea.setBackground(settings_color); else textarea.setBackground(idle_color); } public void stop() { clockThread = null; } } new Clock().start(); return panel; } /** * */ protected JPanel buildStatusPanel() { final JLabel status = new JLabel(Resource.getString("run.status")); status.setToolTipText("status of processing"); final JLabel settings = new JLabel(CommonGui.loadIcon("save_yes.gif")); settings.setToolTipText("do or don't save settings on exit"); settings.setEnabled(false); final JLabel date = new JLabel(); final JLabel time = new JLabel(); final JLabel onlineIcon = new JLabel("OFF"); onlineIcon.setToolTipText("WebIF online status"); final DateFormat date_format = DateFormat.getDateInstance(DateFormat.LONG); final DateFormat time_format = DateFormat.getTimeInstance(DateFormat.LONG); class Clock implements Runnable { private Thread clockThread = null; private String StatusString = ""; private String DateString = ""; private boolean SaveSettings = false; private boolean WebIFisOnline = false; public void start() { if (clockThread == null) { clockThread = new Thread(this, "Clock_1"); 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() { updateStatusLabel(); updateWebIFLabel(); updateSettingsLabel(); updateDateLabel(); updateTimeLabel(); } private void updateStatusLabel() { String str = Common.getStatusString(); if (str.equals(StatusString)) return; StatusString = str; status.setText(StatusString); } private void updateWebIFLabel() { boolean b = Common.isWebServerOnline(); if (b == WebIFisOnline) return; WebIFisOnline = b; onlineIcon.setText(WebIFisOnline ? "ON" : "OFF"); } private void updateSettingsLabel() { boolean b = Common.getSettings().getBooleanProperty(Keys.KEY_SaveSettingsOnExit); if (b == SaveSettings) return; SaveSettings = b; settings.setEnabled(SaveSettings); // settings.setIcon(CommonGui.loadIcon(SaveSettings ? "save_yes.gif" : "save_no.gif")); } private void updateDateLabel() { String str = date_format.format(new Date()); if (str.equals(DateString)) return; DateString = str; date.setText(DateString); } private void updateTimeLabel() { time.setText(time_format.format(new Date())); } public void stop() { clockThread = null; } } new Clock().start(); JPanel status_1 = new JPanel(new BorderLayout()); status_1.setBorder(BorderFactory.createLoweredBevelBorder()); status_1.setPreferredSize(new Dimension(580, 22)); status_1.setMaximumSize(new Dimension(580, 22)); status_1.add(status); JPanel status_2 = new JPanel(new BorderLayout()); status_2.setBorder(BorderFactory.createLoweredBevelBorder()); status_2.setPreferredSize(new Dimension(30, 22)); status_2.setMaximumSize(new Dimension(30, 22)); status_2.add(onlineIcon); JPanel status_3 = new JPanel(new BorderLayout()); status_3.setBorder(BorderFactory.createLoweredBevelBorder()); status_3.setPreferredSize(new Dimension(30, 22)); status_3.setMaximumSize(new Dimension(30, 22)); status_3.add(settings); JPanel status_4 = new JPanel(new BorderLayout()); status_4.setBorder(BorderFactory.createLoweredBevelBorder()); status_4.setPreferredSize(new Dimension(130, 22)); status_4.setMaximumSize(new Dimension(130, 22)); status_4.add(date); JPanel status_5 = new JPanel(new BorderLayout()); status_5.setBorder(BorderFactory.createLoweredBevelBorder()); status_5.setPreferredSize(new Dimension(130, 22)); status_5.setMaximumSize(new Dimension(130, 22)); status_5.add(time); JPanel mainStatusPanel = new JPanel(); mainStatusPanel.setLayout(new BoxLayout(mainStatusPanel, BoxLayout.X_AXIS)); mainStatusPanel.add(status_1); mainStatusPanel.add(status_2); mainStatusPanel.add(status_3); mainStatusPanel.add(status_4); mainStatusPanel.add(status_5); return mainStatusPanel; } /** * show ScanInfos */ public void getScanInfo(XInputFile aXInputFile) { getScanInfo(aXInputFile, -1); } /** * show ScanInfos, only directly called from manual stream assignment */ public void getScanInfo(XInputFile aXInputFile, int streamtype) { if (aXInputFile.getStreamInfo() == null || streamtype > -1) Common.getScanClass().getStreamInfo(aXInputFile, 0, streamtype); if (aXInputFile.getStreamInfo().getThumbnail() == null) { switch (aXInputFile.getStreamInfo().getStreamType()) { case CommonParsing.PES_AV_TYPE: case CommonParsing.MPEG1PS_TYPE: case CommonParsing.MPEG2PS_TYPE: case CommonParsing.PVA_TYPE: case CommonParsing.TS_TYPE: case CommonParsing.ES_MPV_TYPE: Preview.previewFile(aXInputFile, 0, loadSizeForward, Common.getSettings().getBooleanProperty(Keys.KEY_Preview_AllGops), Common.getSettings().getBooleanProperty(Keys.KEY_Preview_fastDecode), Common.getSettings().getIntProperty(Keys.KEY_Preview_YGain)); aXInputFile.getStreamInfo().setThumbnail(Common.getMpvDecoderClass().getScaledCutImage()); break; default: aXInputFile.getStreamInfo().setThumbnail(new int[0]); } } CommonGui.getPicturePanel().setStreamInfo(aXInputFile.getStreamInfo()); } /** * refresh inputfileslist */ public void reloadInputDirectories() { updateAutoloadList(Common.reloadInputDirectories()); } /** * main */ private void showStartUpProgress(StartUp startup, int value, String str) { if (startup == null) System.out.println(str); else startup.setProgress(value, str); } /** * main */ private void initialize(StartUp startup) { String[] version = Common.getVersion(); //StartUp startup = new StartUp(); try { //startup.show(); showStartUpProgress(startup, 0, "Loading GUI..."); buildGUI(startup); showStartUpProgress(startup, 70, "Loading Input Directories..."); reloadInputDirectories(); /** * loading GUI */ showStartUpProgress(startup, 80, "Loading Main Frame..."); frame.addWindowListener (new WindowAdapter() { public void windowClosing(WindowEvent e) { Common.exitApplication(0); } }); frame.addComponentListener(new ComponentListener() { public void componentHidden(ComponentEvent e) {} public void componentMoved(ComponentEvent e) {} public void componentShown(ComponentEvent e) {} public void componentResized(ComponentEvent e) { int w = Integer.parseInt(Keys.KEY_WindowPositionMain_Width[1]); int h = Integer.parseInt(Keys.KEY_WindowPositionMain_Height[1]); Component c = e.getComponent(); Dimension preferred = new Dimension(w, h), current = c.getSize(); double newHeight = (preferred.getHeight() > current.getHeight()) ? preferred.getHeight() : current.getHeight(); double newWidth = (preferred.getWidth() > current.getWidth()) ? preferred.getWidth() : current.getWidth(); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); if (newHeight > preferred.getHeight()) newWidth = (newHeight - 344) * 16 / 9 + 340; if (newWidth > screen.getWidth()) { newWidth = screen.getWidth(); newHeight = (newWidth - 340) * 9 / 16 + 344; } else if (newWidth > preferred.getWidth()) newHeight = (newWidth - 340) * 9 / 16 + 344; c.setSize(new Dimension((int)newWidth, (int)newHeight)); } }); frame.getContentPane().add(this); frame.setLocation(Common.getSettings().getIntProperty(Keys.KEY_WindowPositionMain_X), Common.getSettings().getIntProperty(Keys.KEY_WindowPositionMain_Y)); frame.setSize(new Dimension(Common.getSettings().getIntProperty(Keys.KEY_WindowPositionMain_Width), Common.getSettings().getIntProperty(Keys.KEY_WindowPositionMain_Height))); setFrameTitle(frametitle = version[0] + "/" + version[1] + " " + version[2] + " " + version[3]); showStartUpProgress(startup, 90, "Printing Environment Settings..."); Common.setMessage(null, false); Object[] obj = Common.getJavaEV(Common.getSettings().getInifile()); Common.setMessage(obj); Common.setMessage(""); // to OSD CommonGui.getPicturePanel().setOSDMessage(obj, true); showStartUpProgress(startup, 100, "Showing Main Frame..."); if (startup != null) { startup.set(Common.getSettings().getBooleanProperty(Keys.KEY_Agreement)); if (startup.get()) { setVisible0(true); startup.close(); startup = null; } } else setVisible0(true); /** * catch all other unhandled exception */ } catch(Exception e) { /** * in GUI mode clean GUI and show GUI message */ if (Common.showGUI()) { /** * close startup */ if (startup != null) { startup.close(); startup = null; } /** * close main frame */ if (frame != null) { frame.setVisible(false); } /** * show exception messge */ StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); CommonGui.showErrorMessageDialog(Resource.getString("startup.error") + "\n\n" + sw.toString(), Resource.getString("startup.error.title")); } /** * in CLI mode simply show stackTrace */ else { e.printStackTrace(); } Common.exitApplication(1); } } /** * */ public static void setVisible0(boolean b) { SwingUtilities.updateComponentTreeUI(frame); // update selecte L&F frame.setVisible(b); } /** * geht nicht.. */ public static void closeProgram(boolean b) { if (Common.isRunningProcess() && !CommonGui.getUserConfirmation("process is running, really stop'em ?")) return; Common.exitApplication(GlobalReturnCode); } /** * */ public static void setFrameTitle(String str) { frame.setTitle(str); } /** * */ public static void resetFrameTitle() { setFrameTitle(frametitle); } /** * */ public static Rectangle getFrameBounds() { return frame.getBounds(); } /** * */ public static void showFrame(boolean b) { frame.setState(b ? frame.NORMAL : frame.ICONIFIED); } /** * */ public static void showActiveCollection(int index) { if (index >= 0 && index < Common.getCollectionListSize()) comboBox_0.setSelectedIndex(index); if (Common.isCollectionListEmpty()) { Common.setActiveCollection(-1); comboBox_0.removeAllItems(); updateCollectionPanel(-1); } } /** * */ public static void updateCollectionPanel(int index) { CommonGui.getCutPanel().entry(index); } /** * */ public static byte[] editGOP(byte[] data, long[][] pts_indices) { if (gop_editor == null) gop_editor = new GOPEditor(frame); return gop_editor.editGOP(data, pts_indices); } }