/* * @(#)CutPanel * * Copyright (c) 2006-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.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.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.image.MemoryImageSource; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.Comparator; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.BorderFactory; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; // import javax.swing.JSlider; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import net.sourceforge.dvb.projectx.common.Keys; import net.sourceforge.dvb.projectx.common.Common; import net.sourceforge.dvb.projectx.common.Resource; import net.sourceforge.dvb.projectx.common.JobCollection; import net.sourceforge.dvb.projectx.parser.CommonParsing; import net.sourceforge.dvb.projectx.video.Preview; import net.sourceforge.dvb.projectx.video.PreviewObject; import net.sourceforge.dvb.projectx.xinput.XInputFile; import net.sourceforge.dvb.projectx.gui.ComboBoxIndexListener; /** * */ public class CutPanel extends JPanel { private int active_collection = 0; private int loadSizeForward = 2560000; private long lastPosition = 0; private long divisor = 16L; private boolean matchingPoint = false; private boolean cut_top = true; private boolean cut_bottom = false; private boolean cut_match = false; private boolean action = false; private String file = " "; private String navigation[] = { "leftsteparrow1x.gif", "leftarrow3x.gif", "leftarrow2x.gif", "rightarrow2x.gif", "rightarrow3x.gif", "rightsteparrow1x.gif", "leftarrowstep1x.gif", "rightarrowstep1x.gif" }; private JComboBox cutIndexList; private JComboBox chapterIndexList; private JComboBox cutmode_combobox; private JTextField includeField; private JTextField positionField; private JTextField estimatedSizeField; private JTextField chapterCountField; private JTextField chapterIndexField; private JTextField cutCountField; private JTextField cutIndexField; private JButton cutAdd; private JButton cutDelete; private JButton chapterAdd; private JButton chapterDelete; private JButton[] jump; private JSlider slider; private X_JFileChooser chooser; private DNDListener2 dnd2 = new DNDListener2(); private JumpListener jumpAction = new JumpListener(); private CutListener cutAction = new CutListener(); private JobCollection collection; private CutView cutview; private Preview Preview = new Preview(loadSizeForward); private List previewList = new ArrayList(); private ComboBoxIndexListener _ComboBoxIndexListener = new ComboBoxIndexListener(); private SlideShow cl = new SlideShow(); private CutMatrix cm = new CutMatrix(); private boolean slideshow = false; private JPanel sliderPanel; /** * */ private class DNDListener2 implements 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(); List li = (List) tr.getTransferData(df[0]); // see note about mac os x Object[] val = li.toArray(); if (val.length > 0) loadCutList(val[0].toString()); e.dropComplete(true); } catch (Exception eee) { e.dropComplete(false); Common.setExceptionMessage(eee); } } public void dragEnter(DropTargetDragEvent e) {} public void dragExit(DropTargetEvent e) {} public void dragOver(DropTargetDragEvent e) {} public void dropActionChanged(DropTargetDragEvent e) {} } /** * */ private class CutListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (collection == null) return; if (!action) return; action = false; String actName = e.getActionCommand(); if (actName.equals("delpoint")) { if (cutIndexList.getItemCount() > 0) removeCutpoint(cutIndexList.getSelectedIndex()); } else if (actName.equals("cutnumber") || actName.equals("addpoint")) { String value = positionField.getText(); if (!value.equals("") && addCutpoint(value)) { if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE) collection.setCutImage(value, Common.getMpvDecoderClass().getCutImage()); } } else if (actName.equals("delchapter")) { if (chapterIndexList.getItemCount() > 0) removeChapterpoint(chapterIndexList.getSelectedIndex()); } else if (actName.equals("addchapter")) { String value = positionField.getText(); if (!value.equals("") && addChapterpoint(value)) {} } else if (actName.equals("movecutleft")) { if (cutIndexList.getItemCount() > 0) { int index = cutIndexList.getSelectedIndex(); action = true; jump[6].doClick(); action = false; removeCutpoint(index); addCutpoint(positionField.getText()); } } else if (actName.equals("movecutright")) { if (cutIndexList.getItemCount() > 0) { int index = cutIndexList.getSelectedIndex(); action = true; jump[7].doClick(); action = false; removeCutpoint(index); addCutpoint(positionField.getText()); } } else if (actName.equals("movechapterleft")) { if (chapterIndexList.getItemCount() > 0) { int index = chapterIndexList.getSelectedIndex(); action = true; jump[6].doClick(); action = false; removeChapterpoint(index); addChapterpoint(positionField.getText()); } } else if (actName.equals("movechapterright")) { if (chapterIndexList.getItemCount() > 0) { int index = chapterIndexList.getSelectedIndex(); action = true; jump[7].doClick(); action = false; removeChapterpoint(index); addChapterpoint(positionField.getText()); } } /** * stuff completion for add and del cutpoints */ if (cutIndexList.getItemCount() > 0) { Object[] obj = collection.getCutpoints(); int index = cutIndexList.getSelectedIndex(); setCutIndexField(index + 1); showCutInfo((index & 1) == 0, obj, previewList); //Common.getGuiInterface().showCutIcon((index & 1) == 0, obj, previewList); if (actName.equals("cutbox") || actName.equals("delpoint")) { if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE) preview(Long.parseLong(obj[index].toString())); } if (actName.equals("addpoint")) updateCutView(String.valueOf(lastPosition)); } else { showCutInfo(true, null, previewList); //Common.getGuiInterface().showCutIcon(true, null, previewList); setCutIndexField(-1); updateCutView(String.valueOf(lastPosition)); } /** * stuff completion for add and del chapterpoints */ if (chapterIndexList.getItemCount() > 0) { Object[] obj = collection.getChapterpoints(); int index = chapterIndexList.getSelectedIndex(); setChapterIndexField(index + 1); Common.getGuiInterface().showChapterIcon(obj, previewList); if (actName.equals("chapterbox")) { if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE) preview(Long.parseLong(obj[index].toString())); } } else { Common.getGuiInterface().showChapterIcon(null, previewList); setChapterIndexField(-1); } /** * */ if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE) slider.requestFocus(); getExpectedSize(); updatePositionField(); if (actName.startsWith("move")) updateCutView(String.valueOf(lastPosition)); action = true; } } /** * */ private class JumpListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (collection == null) return; if (!action) return; String actName = e.getActionCommand(); int val = slider.getValue(); /** * prev. cut point pos. */ if (actName.equals(navigation[0])) { int i = 0; int ic = cutIndexList.getItemCount(); if (ic > 0) { i = ic - 1; if (lastPosition > Long.parseLong(cutIndexList.getItemAt(0).toString())) while (lastPosition <= Long.parseLong(cutIndexList.getItemAt(i).toString())) i--; cutIndexList.setSelectedIndex(i); } } else if (actName.equals(navigation[1])) slider.setValue(val - 3125000); else if (actName.equals(navigation[2])) slider.setValue(val - 312500); else if (actName.equals(navigation[6])) slider.setValue(val - 2); else if (actName.equals(navigation[7])) slider.setValue(val + 2); else if (actName.equals(navigation[3])) slider.setValue(val + 312500); else if (actName.equals(navigation[4])) slider.setValue(val + 3125000); /** * next cut point pos. */ else if (actName.equals(navigation[5])) { int i = 0; int ic = cutIndexList.getItemCount(); if (ic > 0) { if (lastPosition < Long.parseLong(cutIndexList.getItemAt(ic - 1).toString())) while (lastPosition >= Long.parseLong(cutIndexList.getItemAt(i).toString())) i++; cutIndexList.setSelectedIndex(i); } } else if (actName.equals("load_cutlist")) loadCutList(); else if (actName.equals("save_cutlist")) saveCutList(); else if (actName.equals("load_chapterlist")) loadChapterList(); else if (actName.equals("save_chapterlist")) saveChapterList(); else if (actName.equals("cut_scan")) restartMatrix(); //+ // changes will be saved immediately else if (actName.equals("cut_split")) { try { int NumOfPts = 0; if ((NumOfPts = cutIndexList.getItemCount()) > 2) //2cutpoints are not enough { for (int b = 2; b < NumOfPts; b += 2) { JobCollection new_collection = Common.addCollection(collection.getNewInstance()); new_collection.clearCutpoints(); for (int c = 0; c < 2 && b + c < NumOfPts; c++) new_collection.addCutpoint( collection.removeCutpoint(2)); new_collection.determinePrimaryFileSegments(); } entry(Common.getActiveCollection()); } } catch (Exception e2) { Common.setExceptionMessage(e2); } action = true; return; } //+ } } /** * class to control play of slideshow */ private class SlideShow implements Runnable { private Thread clockThread = null; private long value = 0; private long skip = 50; private Object[] cutpoints = null; /** * */ public void start(long _value) { if (clockThread == null) { clockThread = new Thread(this, "SlideShow"); // clockThread.setPriority(Thread.MIN_PRIORITY); clockThread.setPriority(Thread.NORM_PRIORITY); value = _value; //skip = getLoadSize()>>>5; skip = getLoadSize()>>>6; getCutPoints(); clockThread.start(); } } /** * */ private void getCutPoints() { cutpoints = collection == null ? null : collection.getCutpoints(); } /** * */ public void run() { Thread myThread = Thread.currentThread(); while (clockThread == myThread) { try { for (long val;; ) { val = update(value); Thread.sleep(5); CommonGui.getPlayerFrame().repaintPicture(1); if (!slideshow || val < value) break; value = skipArea(val); if (value < val) break; } stop(); } catch (InterruptedException e) {} } } /** * */ private long update(long val) { return preview(val); } /** * */ private long skipArea(long val) { // next gop if (cutpoints == null || cutpoints.length == 0) return (val + skip); int index = getCutIndex(cutpoints, String.valueOf(val)); // area among cutpoints if (index < 0) { // next gop "in" area if ((index & 1) == 0) return (val + skip); // stop if (-index > cutpoints.length) return (val - skip); // jump to next export area (-index - 1) return Long.parseLong(cutpoints[index + 1].toString()); } // exact cut point "in" area if ((index & 1) == 0) return (val + skip); // stop if (index + 1 >= cutpoints.length) return (val - skip); // jump to next exported area return Long.parseLong(cutpoints[index + 1].toString()); } /** * */ public void stop() { clockThread = null; } } /** * class to control matrix preview */ private class CutMatrix implements Runnable { private Thread clockThread = null; private boolean stopit = false; private long tmp = 0; private long value = 0; private long start_value = 0; private int scale = 1; /** * */ public void restart(long value_1) { start(value_1); scale = 1; } /** * */ public void start(long value_1) { breakLoop(); if (clockThread == null) { clockThread = new Thread(this, "CutMatrix"); clockThread.setPriority(Thread.MIN_PRIORITY); start_value = value_1; stopit = false; clockThread.start(); } } /** * */ public void breakLoop() { stopit = true; } /** * */ public void run() { Thread myThread = Thread.currentThread(); while (clockThread == myThread) { try { if (!previewList.isEmpty()) { int[][] matrix_index = CommonGui.getPicturePanel().getMatrixTable(); long end = ((PreviewObject) previewList.get(previewList.size() - 1)).getEnd(); long div = end / matrix_index.length; String str; div /= scale; scale <<= 1; CommonGui.getPicturePanel().resetMatrixPositions(end); for (int i = 0; !stopit && i < matrix_index.length; i++) { tmp = start_value + (i * div); if (tmp > end) break; value = update(tmp, i); str = Common.getMpvDecoderClass().getInfo_2(); str = str.substring(0, str.indexOf(",")); CommonGui.getPicturePanel().setMatrixIndexPosition(i, value, str); Thread.sleep(5); } } stop(); } catch (InterruptedException e) {} } } /** * */ private long update(long val, int index) { return previewMatrix(val, index); } /** * */ public void stop() { clockThread = null; } } /** * */ public CutPanel() { chooser = CommonGui.getMainFileChooser(); // setLayout(new BorderLayout()); sliderPanel = buildSliderPanel(); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); panel.add(buildPointPanel()); panel.add(buildNavigationPanel()); panel.add(cutview = new CutView()); //cut-preview pic handling cutview.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() < 2) return; try { if (e.getX() < cutview.getBottom() - 20 && e.getY() < 104) { if (cutview.getTopIndex() != null) preview(Long.parseLong(cutview.getTopIndex().toString())); } else if (e.getX() > cutview.getBottom() && e.getY() < 104) { if (cutview.getBottomIndex() != null) preview(Long.parseLong(cutview.getBottomIndex().toString())); } } catch (Exception exc) {} } }); cutview.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { if (e.getY() > 104) { cutview.setSlider(e.getX()); if (collection == null) return; CommonGui.getPicturePanel().setMixedPreviewPixel(collection.getCutImage(cutview.getPreviewPosition()), cutview.getTransparencyValue()); CommonGui.getPicturePanel().repaint(); } } public void mouseMoved(MouseEvent e) { } }); add(panel); setVisible(true); } /** * */ protected JPanel buildSliderPanel() { slider = new JSlider(0, (int)(10240000L / divisor), 0); slider.setPreferredSize(new Dimension(860, 30)); slider.setMaximumSize(new Dimension(860, 30)); slider.setMaximum(1); slider.setMajorTickSpacing(1); slider.setMinorTickSpacing(1); slider.setPaintTicks(true); slider.setValue(0); slider.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (slideshow || previewList.isEmpty() || Common.getSettings().getIntProperty(Keys.KEY_CutMode) != CommonParsing.CUTMODE_BYTE) { slideshow = false; return; } if (e.getClickCount() < 2) return; slideshow = true; cl.start(lastPosition); } }); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { if (collection == null) return; if (!action) return; if (slider.getValueIsAdjusting() && !Common.getSettings().getBooleanProperty(Keys.KEY_Preview_LiveUpdate)) return; long val = (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE ? divisor : 1L) * slider.getValue(); if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE && val != (lastPosition & ~15)) preview(val); else if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) != CommonParsing.CUTMODE_BYTE) { Common.getMpvDecoderClass().resetProcessedPosition(); Common.getMpvDecoderClass().setPidAndFileInfo(Resource.getString("CollectionPanel.Preview.offline")); } getType(); } }); slider.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (collection == null) return; int i = 0; int ic = 0; int offs = 0; int keyval=e.getKeyCode(); switch(e.getKeyChar()) { case 'p': ic=cutIndexList.getItemCount(); if (ic > 0) { i = ic - 1; if (lastPosition>Long.parseLong(cutIndexList.getItemAt(0).toString())) while (lastPosition <= Long.parseLong(cutIndexList.getItemAt(i).toString())) i--; cutIndexList.setSelectedIndex(i); } return; case 'n': ic=cutIndexList.getItemCount(); if (ic > 0) { if (lastPosition<Long.parseLong(cutIndexList.getItemAt(ic - 1).toString())) while (lastPosition >= Long.parseLong(cutIndexList.getItemAt(i).toString())) i++; cutIndexList.setSelectedIndex(i); } return; case 'a': cutAdd.doClick(); return; case 'd': cutDelete.doClick(); return; } if (e.isShiftDown()) offs = 62500; else if (e.isControlDown()) offs = 312500; else if (e.isAltDown()) offs = 3125000; else return; switch (keyval) { case KeyEvent.VK_RIGHT: slider.setValue(slider.getValue() + offs); break; case KeyEvent.VK_LEFT: slider.setValue(slider.getValue() - offs); } } }); JPanel panel = new JPanel(new BorderLayout()); if (!Common.getSettings().getBooleanProperty(Keys.KEY_Preview_SliderWidth)) { panel.add(Box.createRigidArea(new Dimension(145, 20)), BorderLayout.WEST); panel.add(slider, BorderLayout.CENTER); panel.add(Box.createRigidArea(new Dimension(194, 20)), BorderLayout.EAST); } else panel.add(slider, BorderLayout.CENTER); return panel; } /** * */ protected void setComponentColor(JComponent comp, Color c) { comp.setBackground(c); comp.setForeground(c); } /** * */ protected JPanel buildNavigationPanel() { JPanel panel_1 = new JPanel(); panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS)); JPanel panel_2 = new JPanel(); panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS)); jump = new JButton[navigation.length]; for (int i = 0; i < jump.length; i++) { jump[i] = new JButton(CommonGui.loadIcon(navigation[i])); jump[i].setPreferredSize(new Dimension(34, 24)); jump[i].setMaximumSize(new Dimension(34, 24)); jump[i].setActionCommand(navigation[i]); jump[i].addActionListener(jumpAction); if (i < 6) panel_1.add(jump[i]); else panel_2.add(jump[i]); } positionField = new JTextField(""); positionField.setPreferredSize(new Dimension(136, 24)); positionField.setMaximumSize(new Dimension(136, 24)); positionField.setToolTipText(Resource.getString("CollectionPanel.CutPanel.Tip4")); positionField.setActionCommand("cutnumber"); positionField.addActionListener(cutAction); panel_2.add(positionField); cutmode_combobox = new JComboBox(Keys.ITEMS_CutMode); cutmode_combobox.setPreferredSize(new Dimension(204, 24)); cutmode_combobox.setMaximumSize(new Dimension(204, 24)); cutmode_combobox.setActionCommand(Keys.KEY_CutMode[0]); cutmode_combobox.setSelectedIndex(Common.getSettings().getIntProperty(Keys.KEY_CutMode)); cutmode_combobox.addActionListener(_ComboBoxIndexListener); JPanel panel_3 = new JPanel(); panel_3.setLayout(new BoxLayout(panel_3, BoxLayout.X_AXIS)); estimatedSizeField = new JTextField(""); //estimatedSizeField.setToolTipText(Resource.getString("CollectionPanel.NumberOfPoints.Tip")); estimatedSizeField.setBackground(new java.awt.Color(230, 230, 230)); estimatedSizeField.setEditable(false); estimatedSizeField.setPreferredSize(new Dimension(150, 24)); estimatedSizeField.setMaximumSize(new Dimension(150, 24)); estimatedSizeField.setMinimumSize(new Dimension(150, 24)); panel_3.add(estimatedSizeField); JButton play = new JButton(CommonGui.loadIcon("slidestart.gif")); play.setToolTipText("start SlideShow"); play.setPreferredSize(new Dimension(27, 24)); play.setMaximumSize(new Dimension(27, 24)); play.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (slideshow || previewList.isEmpty() || Common.getSettings().getIntProperty(Keys.KEY_CutMode) != CommonParsing.CUTMODE_BYTE) { slideshow = false; return; } slideshow = true; cl.start(lastPosition); } }); panel_3.add(play); JButton stop = new JButton(CommonGui.loadIcon("slidestop.gif")); stop.setToolTipText("stop SlideShow"); stop.setPreferredSize(new Dimension(27, 24)); stop.setMaximumSize(new Dimension(27, 24)); stop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { slideshow = false; } }); panel_3.add(stop); /** * */ JPanel panel = new JPanel(); panel.setLayout(new ColumnLayout()); panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Navigation")); panel.add(panel_1); panel.add(panel_2); panel.add(panel_3); panel.add(cutmode_combobox); return panel; } /** * */ protected JPanel buildPointPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); panel.add(buildChapterPointPanel()); panel.add(buildCutPointPanel()); return panel; } /** * */ protected JPanel buildCutPointPanel() { /** * row 1 */ cutIndexField = new JTextField(); cutIndexField.setBackground(new Color(230, 230, 230)); cutIndexField.setPreferredSize(new Dimension(48, 24)); cutIndexField.setMaximumSize(new Dimension(48, 24)); cutIndexField.setEditable(false); cutIndexField.setHorizontalAlignment(JTextField.CENTER); JButton cutMoveLeft = new JButton(CommonGui.loadIcon("leftcut.gif")); cutMoveLeft.setActionCommand("movecutleft"); cutMoveLeft.setPreferredSize(new Dimension(36, 24)); cutMoveLeft.setMaximumSize(new Dimension(36, 24)); cutMoveLeft.addActionListener(cutAction); JButton cutMoveRight = new JButton(CommonGui.loadIcon("rightcut.gif")); cutMoveRight.setActionCommand("movecutright"); cutMoveRight.setPreferredSize(new Dimension(36, 24)); cutMoveRight.setMaximumSize(new Dimension(36, 24)); cutMoveRight.addActionListener(cutAction); JPanel panel_1 = new JPanel(); panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS)); panel_1.add(cutMoveLeft); panel_1.add(cutMoveRight); panel_1.add(cutIndexField); /** * row 2 */ cutAdd = new JButton(CommonGui.loadIcon("addcut.gif")); cutAdd.setActionCommand("addpoint"); cutAdd.setPreferredSize(new Dimension(36, 24)); cutAdd.setMaximumSize(new Dimension(36, 24)); cutAdd.addActionListener(cutAction); DropTarget dropTarget_4 = new DropTarget(cutAdd, dnd2); cutDelete = new JButton(CommonGui.loadIcon("remcut.gif")); cutDelete.setActionCommand("delpoint"); cutDelete.setPreferredSize(new Dimension(36, 24)); cutDelete.setMaximumSize(new Dimension(36, 24)); cutDelete.addActionListener(cutAction); cutCountField = new JTextField(); cutCountField.setToolTipText(Resource.getString("CollectionPanel.NumberOfPoints.Tip")); cutCountField.setBackground(new Color(230, 230, 230)); cutCountField.setPreferredSize(new Dimension(48, 24)); cutCountField.setMaximumSize(new Dimension(48, 24)); cutCountField.setHorizontalAlignment(JTextField.CENTER); cutCountField.setEditable(false); JPanel panel_2 = new JPanel(); panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS)); panel_2.add(cutAdd); panel_2.add(cutDelete); panel_2.add(cutCountField); /** * row 3 */ cutIndexList = new JComboBox(); cutIndexList.setMaximumRowCount(5); cutIndexList.setPreferredSize(new Dimension(120, 24)); cutIndexList.setMaximumSize(new Dimension(120, 24)); cutIndexList.setActionCommand("cutbox"); cutIndexList.addActionListener(cutAction); JPanel panel_3 = new JPanel(); panel_3.setLayout(new BoxLayout(panel_3, BoxLayout.X_AXIS)); panel_3.add(cutIndexList); /** * row 4 */ JButton cut_loadlist = new JButton(CommonGui.loadIcon("open.gif")); cut_loadlist.setPreferredSize(new Dimension(30, 24)); cut_loadlist.setMaximumSize(new Dimension(30, 24)); cut_loadlist.setToolTipText(Resource.getString("CollectionPanel.loadCutpointList.Tip")); //DM18022004 081.6 int17 new cut_loadlist.setActionCommand("load_cutlist"); cut_loadlist.addActionListener(jumpAction); JButton cut_savelist = new JButton(CommonGui.loadIcon("save.gif")); cut_savelist.setPreferredSize(new Dimension(30, 24)); cut_savelist.setMaximumSize(new Dimension(30, 24)); cut_savelist.setActionCommand("save_cutlist"); cut_savelist.addActionListener(jumpAction); JButton cut_split = new JButton(CommonGui.loadIcon("split.gif")); cut_split.setPreferredSize(new Dimension(30, 24)); cut_split.setMaximumSize(new Dimension(30, 24)); cut_split.setActionCommand("cut_split"); cut_split.addActionListener(jumpAction); cut_split.setEnabled(true); JButton cut_scan = new JButton(CommonGui.loadIcon("matrix.gif")); cut_scan.setPreferredSize(new Dimension(30, 24)); cut_scan.setMaximumSize(new Dimension(30, 24)); cut_scan.setActionCommand("cut_scan"); cut_scan.addActionListener(jumpAction); cut_scan.setEnabled(true); JPanel panel_4 = new JPanel(); panel_4.setLayout(new BoxLayout(panel_4, BoxLayout.X_AXIS)); panel_4.add(cut_loadlist); panel_4.add(cut_savelist); panel_4.add(cut_split); panel_4.add(cut_scan); /** * */ JPanel panel = new JPanel(); panel.setLayout(new ColumnLayout()); panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Resource.getString("CollectionPanel.NumberOfPoints"))); panel.add(panel_2); panel.add(panel_1); panel.add(panel_3); panel.add(panel_4); Color c = new Color(212, 175, 212); //new Color(200, 150, 200); // setComponentColor(cutAdd, c); // setComponentColor(cutDelete, c); setComponentColor(panel, c); setComponentColor(panel_4, c); return panel; } /** * */ protected JPanel buildChapterPointPanel() { /** * row 1 */ chapterIndexField = new JTextField(); chapterIndexField.setBackground(new Color(230, 230, 230)); chapterIndexField.setPreferredSize(new Dimension(48, 24)); chapterIndexField.setMaximumSize(new Dimension(48, 24)); chapterIndexField.setEditable(false); chapterIndexField.setHorizontalAlignment(JTextField.CENTER); JButton chapterMoveLeft = new JButton(CommonGui.loadIcon("leftchap.gif")); chapterMoveLeft.setActionCommand("movechapterleft"); chapterMoveLeft.setPreferredSize(new Dimension(36, 24)); chapterMoveLeft.setMaximumSize(new Dimension(36, 24)); chapterMoveLeft.addActionListener(cutAction); JButton chapterMoveRight = new JButton(CommonGui.loadIcon("rightchap.gif")); chapterMoveRight.setActionCommand("movechapterright"); chapterMoveRight.setPreferredSize(new Dimension(36, 24)); chapterMoveRight.setMaximumSize(new Dimension(36, 24)); chapterMoveRight.addActionListener(cutAction); JPanel panel_1 = new JPanel(); panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS)); panel_1.add(chapterMoveLeft); panel_1.add(chapterMoveRight); panel_1.add(chapterIndexField); /** * row 2 */ chapterAdd = new JButton(CommonGui.loadIcon("addchap.gif")); chapterAdd.setActionCommand("addchapter"); chapterAdd.setPreferredSize(new Dimension(36, 24)); chapterAdd.setMaximumSize(new Dimension(36, 24)); chapterAdd.addActionListener(cutAction); chapterDelete = new JButton(CommonGui.loadIcon("remchap.gif")); chapterDelete.setActionCommand("delchapter"); chapterDelete.setPreferredSize(new Dimension(36, 24)); chapterDelete.setMaximumSize(new Dimension(36, 24)); chapterDelete.addActionListener(cutAction); chapterCountField = new JTextField(); chapterCountField.setToolTipText(Resource.getString("CollectionPanel.NumberOfChapters.Tip")); chapterCountField.setBackground(new Color(230, 230, 230)); chapterCountField.setPreferredSize(new Dimension(48, 24)); chapterCountField.setMaximumSize(new Dimension(48, 24)); chapterCountField.setEditable(false); chapterCountField.setHorizontalAlignment(JTextField.CENTER); chapterCountField.addActionListener(cutAction); JPanel panel_2 = new JPanel(); panel_2.setLayout(new BoxLayout(panel_2, BoxLayout.X_AXIS)); panel_2.add(chapterAdd); panel_2.add(chapterDelete); panel_2.add(chapterCountField); /** * row 3 */ chapterIndexList = new JComboBox(); chapterIndexList.setMaximumRowCount(5); chapterIndexList.setPreferredSize(new Dimension(120, 24)); chapterIndexList.setMaximumSize(new Dimension(120, 24)); chapterIndexList.setActionCommand("chapterbox"); chapterIndexList.addActionListener(cutAction); JPanel panel_3 = new JPanel(); panel_3.setLayout(new BoxLayout(panel_3, BoxLayout.X_AXIS)); panel_3.add(chapterIndexList); /** * row 4 */ JButton chapter_loadlist = new JButton(CommonGui.loadIcon("open.gif")); chapter_loadlist.setPreferredSize(new Dimension(32, 24)); chapter_loadlist.setMaximumSize(new Dimension(32, 24)); chapter_loadlist.setToolTipText(Resource.getString("CollectionPanel.loadCutpointList.Tip")); //DM18022004 081.6 int17 new chapter_loadlist.setActionCommand("load_chapterlist"); chapter_loadlist.addActionListener(jumpAction); // JButton chapter_savelist = new JButton("save"); JButton chapter_savelist = new JButton(CommonGui.loadIcon("save.gif")); chapter_savelist.setPreferredSize(new Dimension(32, 24)); chapter_savelist.setMaximumSize(new Dimension(32, 24)); chapter_savelist.setActionCommand("save_chapterlist"); chapter_savelist.addActionListener(jumpAction); // JButton chapter_scan = new JButton("scan"); JButton chapter_scan = new JButton(CommonGui.loadIcon("scan2.gif")); chapter_scan.setPreferredSize(new Dimension(50, 24)); chapter_scan.setMaximumSize(new Dimension(50, 24)); chapter_scan.setActionCommand("chapter_scan"); chapter_scan.addActionListener(jumpAction); chapter_scan.setEnabled(false); JPanel panel_4 = new JPanel(); panel_4.setLayout(new BoxLayout(panel_4, BoxLayout.X_AXIS)); panel_4.add(chapter_loadlist); panel_4.add(chapter_savelist); panel_4.add(Box.createRigidArea(new Dimension(6, 1))); panel_4.add(chapter_scan); /** * */ JPanel panel = new JPanel(); panel.setLayout(new ColumnLayout()); panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Resource.getString("CollectionPanel.NumberOfChapters"))); panel.add(panel_2); panel.add(panel_1); panel.add(panel_3); panel.add(panel_4); Color c = new Color(210, 217, 255); //new Color(195, 205, 255); // setComponentColor(chapterAdd, c); // setComponentColor(chapterDelete, c); setComponentColor(panel, c); setComponentColor(panel_4, c); return panel; } /** * */ public JPanel getSliderPanel() { return sliderPanel; } /** * */ private void saveCutList() { Object[] object = collection.getCutpoints(); if (object.length == 0) return; String newfile = file + "(" + active_collection + ").Xcl"; chooser.setSelectedFile(new File(newfile)); chooser.rescanCurrentDirectory(); int retval = chooser.showSaveDialog(this); if (retval == JFileChooser.APPROVE_OPTION) { File theFile = chooser.getSelectedFile(); if (theFile != null && !theFile.isDirectory()) { newfile = theFile.getAbsolutePath(); if (theFile.exists() && !CommonGui.getUserConfirmation(Resource.getString("msg.overwrite", newfile))) return; } else return; } else return; try { BufferedWriter listwriter = new BufferedWriter(new FileWriter(newfile)); listwriter.write(Keys.KEY_CutMode[0] + "=" + Common.getSettings().getProperty(Keys.KEY_CutMode)); listwriter.newLine(); for (int i = 0; i < object.length; i++) { listwriter.write(object[i].toString()); listwriter.newLine(); } listwriter.close(); } catch (IOException e) { Common.setMessage(Resource.getString("CollectionPanel.FileAccessError") + " " + file); } } /** * */ private void loadCutList() { loadCutList(""); } /** * */ private void loadCutList(String newfile) { List pointlist = new ArrayList(); String point = ""; if (!(new File(newfile).exists())) { chooser.rescanCurrentDirectory(); int retval = chooser.showOpenDialog(this); if(retval == JFileChooser.APPROVE_OPTION) { File theFile = chooser.getSelectedFile(); if(theFile != null && !theFile.isDirectory()) newfile = theFile.getAbsolutePath(); } else return; } try { BufferedReader listreader = new BufferedReader(new FileReader(newfile)); while (true) { point = listreader.readLine(); if (point == null) break; if (point.trim().equals("")) continue; if (point.startsWith(Keys.KEY_CutMode[0])) { cutmode_combobox.setSelectedIndex(Integer.parseInt(point.substring(point.indexOf("=") + 1).trim())); continue; } if (point.startsWith("(")) continue; pointlist.add(point); } listreader.close(); } catch (IOException e5) { Common.setMessage(Resource.getString("CollectionPanel.loadCutpointList.Error") + " " + file); } Object[] obj = pointlist.toArray(); if (obj.length > 0) { long[] cutPoints = new long[obj.length]; for (int i = 0; i < cutPoints.length; i++) cutPoints[i] = CommonParsing.parseCutValue(obj[i].toString(), false); Arrays.sort(cutPoints); for (int i = 0; i < cutPoints.length; i++) collection.addCutpoint(CommonParsing.parseCutValue(cutPoints[i])); action = false; reloadCutpoints(); cutIndexList.setSelectedIndex(cutIndexList.getItemCount() - 1); } getExpectedSize(); getType(); action = true; } /** * */ private void saveChapterList() { Object[] object = collection.getChapterpoints(); if (object.length == 0) return; String newfile = file + "[" + active_collection + "].Xcp"; chooser.setSelectedFile(new File(newfile)); chooser.rescanCurrentDirectory(); int retval = chooser.showSaveDialog(this); if(retval == JFileChooser.APPROVE_OPTION) { File theFile = chooser.getSelectedFile(); if (theFile != null && !theFile.isDirectory()) { newfile = theFile.getAbsolutePath(); if (theFile.exists() && !CommonGui.getUserConfirmation(Resource.getString("msg.overwrite", newfile))) return; } else return; } else return; if (!CommonGui.getUserConfirmation(Resource.getString("msg.overwrite", newfile))) return; try { BufferedWriter listwriter = new BufferedWriter(new FileWriter(newfile)); listwriter.write(Keys.KEY_CutMode[0] + "=" + Common.getSettings().getProperty(Keys.KEY_CutMode)); listwriter.newLine(); for (int i = 0; i < object.length; i++) { listwriter.write(object[i].toString()); listwriter.newLine(); } listwriter.close(); } catch (IOException e) { Common.setMessage(Resource.getString("CollectionPanel.FileAccessError") + " " + file); } } /** * */ private void loadChapterList() { loadChapterList(""); } /** * */ private void loadChapterList(String newfile) { List pointlist = new ArrayList(); String point = ""; if (!(new File(newfile).exists())) { chooser.rescanCurrentDirectory(); int retval = chooser.showOpenDialog(this); if(retval == JFileChooser.APPROVE_OPTION) { File theFile = chooser.getSelectedFile(); if(theFile != null && !theFile.isDirectory()) newfile = theFile.getAbsolutePath(); } else return; } try { BufferedReader listreader = new BufferedReader(new FileReader(newfile)); while (true) { point = listreader.readLine(); if (point == null) break; if (point.trim().equals("")) continue; if (point.startsWith(Keys.KEY_CutMode[0])) { cutmode_combobox.setSelectedIndex(Integer.parseInt(point.substring(point.indexOf("=") + 1).trim())); continue; } if (point.startsWith("(")) continue; pointlist.add(point); } listreader.close(); } catch (IOException e5) { Common.setMessage(Resource.getString("CollectionPanel.loadCutpointList.Error") + " " + file); } Object[] obj = pointlist.toArray(); if (obj.length > 0) { long[] chpPoints = new long[obj.length]; for (int i = 0; i < chpPoints.length; i++) chpPoints[i] = CommonParsing.parseCutValue(obj[i].toString(), false); Arrays.sort(chpPoints); for (int i = 0; i < chpPoints.length; i++) collection.addChapterpoint(CommonParsing.parseCutValue(chpPoints[i])); action = false; reloadChapterpoints(); chapterIndexList.setSelectedIndex(chapterIndexList.getItemCount() - 1); } getExpectedSize(); getType(); action = true; } /** * */ private void getExpectedSize() { if (previewList.isEmpty()) { estimatedSizeField.setText(" "); return; } Object[] object = collection.getCutpoints(); long newSize[] = new long[object.length]; long start = 0; long diff = 0; long end = 0; if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE) { for (int i = 0; i < newSize.length; i++) newSize[i] = Long.parseLong(object[i].toString()); if (newSize.length == 0 || (newSize.length & 1) == 1) end = ((PreviewObject) previewList.get(previewList.size() - 1)).getEnd(); else end = newSize[newSize.length - 1]; for (int i = 0; i < newSize.length; i += 2) { diff += newSize[i] - start; start = i + 1 < newSize.length ? newSize[i + 1] : start; } } String length = Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE ? (Resource.getString("CollectionPanel.expectedSize") + " " + ((end - diff) / 1048576L) + "MB") : ""; estimatedSizeField.setText(length); chapterCountField.setText(String.valueOf(chapterIndexList.getItemCount())); cutCountField.setText(String.valueOf(cutIndexList.getItemCount())); } /** * */ private void getType() { /** * cuts */ Object[] obj = collection != null ? collection.getCutpoints() : new Object[0]; int index; if (obj.length > 0) { index = getCutIndex(obj, String.valueOf(lastPosition)); showCutInfo((index & 1) == 0, obj, previewList); //Common.getGuiInterface().showCutIcon((index & 1) == 0, obj, previewList); } else showCutInfo(true, null, previewList); //Common.getGuiInterface().showCutIcon(true, null, previewList); /** * chapters */ obj = collection != null ? collection.getChapterpoints() : new Object[0]; if (obj.length > 0) Common.getGuiInterface().showChapterIcon(obj, previewList); else Common.getGuiInterface().showChapterIcon(null, previewList); } /** * */ private int getCutIndex(Object[] obj, String value) { class MyComparator implements Comparator { public int compare(Object o1, Object o2) { if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_TIME) return Long.toString(CommonParsing.parseCutValue(o1.toString(), false)).compareTo(Long.toString(CommonParsing.parseCutValue(o2.toString(), false))); else return Long.valueOf(o1.toString()).compareTo(Long.valueOf(o2.toString())); } } /** * handle wrong numbers */ if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE) if (CommonParsing.parseCutValue(value, false) < 0) return 0; return Arrays.binarySearch(obj, value, new MyComparator()); // is already sorted } /** * */ public long preview(long position) { boolean backward = false; try { CommonGui.getPicturePanel().disableMatrix(); if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) != CommonParsing.CUTMODE_BYTE || previewList.isEmpty()) { Common.getMpvDecoderClass().resetProcessedPosition(); Common.getMpvDecoderClass().setPidAndFileInfo(Resource.getString("CollectionPanel.Preview.offline")); return lastPosition; } action = false; int loadSize = getLoadSize(); // bytes for searching the next I-frame ;changed for X0.81 if (position / divisor >= (long)slider.getMaximum()) // last { position = position > loadSize ? position - loadSize : 0; backward = true; } else if (position > 0 && position < lastPosition && ((lastPosition / divisor) - (position / divisor)) < 3L ) { if (lastPosition - position < 50) position = lastPosition; position = position > loadSize ? position - loadSize : 0; backward = true; } position = Preview.load(position, ((backward && position == 0) ? (int)lastPosition : loadSize), previewList, backward, Common.getSettings().getBooleanProperty(Keys.KEY_Preview_AllGops), Common.getSettings().getBooleanProperty(Keys.KEY_Preview_fastDecode), Common.getSettings().getIntProperty(Keys.KEY_Preview_YGain), collection.getPIDs(), active_collection); String str = Preview.getProcessedFile(); if (str.length() > 32) { int i = str.indexOf('-'); String _str = str.substring(0, i + 2); str = _str + "..." + str.substring(i + 2 + (str.length() - 34 - i), str.length()); } lastPosition = position; slider.setValue((int)(lastPosition / divisor)); setPositionField(lastPosition); slider.requestFocus(); } catch (Exception e6) { Common.setExceptionMessage(e6); } getExpectedSize(); updateCutView(String.valueOf(lastPosition)); action = true; return lastPosition; } /** * */ public void startMatrix(long from_position) { cm.start(from_position); } /** * */ public void restartMatrix() { cm.restart(0); } /** * */ public void stopMatrix() { cm.breakLoop(); } /** * */ private long previewMatrix(long position, int matrix_index) { if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) != CommonParsing.CUTMODE_BYTE || previewList.isEmpty()) return position; action = false; position = Preview.silentload(position, getLoadSize(), previewList, false, Common.getSettings().getBooleanProperty(Keys.KEY_Preview_AllGops), Common.getSettings().getBooleanProperty(Keys.KEY_Preview_fastDecode), Common.getSettings().getIntProperty(Keys.KEY_Preview_YGain), collection.getPIDs(), active_collection); CommonGui.getPicturePanel().setMatrixPreviewPixel(matrix_index); CommonGui.getPicturePanel().repaint(); action = true; return position; } /** * updates last and next cutpoint view */ private void updateCutView(String value) { if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) != CommonParsing.CUTMODE_BYTE) { cutview.clearViews(); return; } Object[] listData = collection == null ? null : collection.getCutpoints(); if (listData == null || listData.length == 0) { cutview.clearViews(); return; } int index = getCutIndex(listData, value); if (index < 0) { int i = -index - 1; cutview.setMatchingPoint(false, listData, index); cutview.setImage(i < listData.length ? collection.getCutImage(listData[i]) : null, listData, i, cutview.getBottom()); cutview.setImage(i - 1 >= 0 && i - 1 < listData.length ? collection.getCutImage(listData[i - 1]) : null, listData, i - 1, cutview.getTop()); } else { if (collection.getCutImage(listData[index]) == null) collection.setCutImage(value, Common.getMpvDecoderClass().getCutImage()); cutview.setMatchingPoint(true, listData, index); cutview.setImage(index + 1 < listData.length ? collection.getCutImage(listData[index + 1]) : null, listData, index + 1, cutview.getBottom()); cutview.setImage(index - 1 >= 0 ? collection.getCutImage(listData[index - 1]) : null, listData, index - 1, cutview.getTop()); } } /** * */ private int getLoadSize() { try { int val = Common.getPreviewBufferValue(); return val; } catch (Exception e) { Common.setMessage("!> wrong preview_buffer field entry", true); } return loadSizeForward; } /** * */ private boolean checkActiveCollection() { if (active_collection >= 0) return true; collection = null; action = false; previewList.clear(); reloadCutpoints(); reloadChapterpoints(); showCutInfo(true, null, previewList); //Common.getGuiInterface().showCutIcon(true, null, previewList); Common.getGuiInterface().showChapterIcon(null, previewList); slider.setMaximum(1); Common.setOSDMessage(Resource.getString("CollectionPanel.Preview.offline")); action = true; return false; } /** * */ public void entry(int _active_collection) { if (active_collection != _active_collection) cutview.clearViews(); active_collection = _active_collection; Common.getMpvDecoderClass().clearPreviewPixel(); Common.getMpvDecoderClass().resetProcessedPosition(); Common.getMpvDecoderClass().setPidAndFileInfo(Resource.getString("CollectionPanel.Preview.offline")); /** * */ if (!checkActiveCollection()) return; CommonGui.getPicturePanel().showCollectionNumber(active_collection); cutmode_combobox.setSelectedIndex(Common.getSettings().getIntProperty(Keys.KEY_CutMode)); collection = Common.getCollection(active_collection); List input_files = collection.getInputFilesAsList(); previewList.clear(); file = !input_files.isEmpty() ? input_files.get(0).toString() : ""; /** * determine primary file segments, scan only if changed (date modified) or not scanned */ long start = 0; long end = 0; long maximum; int size = input_files.size(); int primaryFilesCount = 1; if (Common.getSettings().getBooleanProperty(Keys.KEY_Preview_disable)) size = 0; filesearch: for (int a = 0, b = -1, type = -1; a < size; a++) { XInputFile xInputFile = ((XInputFile) input_files.get(a)).getNewInstance(); if (xInputFile == null) continue; if (xInputFile.getStreamInfo() == null) Common.getScanClass().getStreamInfo(xInputFile); //note: is a new instance type = xInputFile.getStreamInfo().getStreamType(); if (b != -1 && b != type) { primaryFilesCount = a; break filesearch; } switch (type) { 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: b = type; start = end; end += xInputFile.length(); previewList.add(new PreviewObject(start, end, type, xInputFile)); break; default: break filesearch; } } action = false; // reduce slider maximum, fit int requirements for (divisor = 16L; ; divisor += 16L) { maximum = end / divisor; if (maximum < 0x7FFFFFFFL) break; } if (maximum > divisor) { slider.setMaximum((int) maximum); slider.setMajorTickSpacing((int) (maximum / 10)); slider.setMinorTickSpacing((int) (maximum / 100)); slider.setPaintTicks(true); } else { slider.setMaximum(1); slider.setMajorTickSpacing(1); slider.setMinorTickSpacing(1); slider.setPaintTicks(true); } action = true; Common.setLastPreviewBitrate(CommonParsing.MAX_SD_BITRATE_VALUE); if (Common.getSettings().getIntProperty(Keys.KEY_CutMode) == CommonParsing.CUTMODE_BYTE && !previewList.isEmpty()) preview(0); else { Common.getMpvDecoderClass().clearPreviewPixel(); Common.setOSDMessage(Resource.getString("CollectionPanel.Preview.offline")); } action = false; reloadCutpoints(); reloadChapterpoints(); cutIndexList.setSelectedIndex(cutIndexList.getItemCount() - 1); getExpectedSize(); getType(); action = true; } /** * */ private boolean addChapterpoint(String value) { int index = 0; index = getCutIndex(collection.getChapterpoints(), value); if (index >= 0) return false; collection.addChapterpoint(-index - 1, value); reloadChapterpoints(); chapterIndexList.setSelectedItem(value); return true; } /** * */ private Object removeChapterpoint(int index) { Object obj = collection.removeChapterpoint(index); reloadChapterpoints(); Object[] objects = collection.getChapterpoints(); if (objects.length > 0) { int _index = -getCutIndex(collection.getChapterpoints(), obj.toString()) - 1; if (_index >= objects.length) _index = objects.length - 1; chapterIndexList.setSelectedIndex(_index); } return obj; } /** * */ private void reloadChapterpoints() { chapterIndexList.removeAllItems(); Object[] object = collection != null ? collection.getChapterpoints() : new Object[0]; for (int i = 0; i < object.length; i++) chapterIndexList.addItem(object[i]); } /** * */ private boolean addCutpoint(String value) { int index = 0; index = getCutIndex(collection.getCutpoints(), value); if (index >= 0) return false; collection.addCutpoint(-index - 1, value); reloadCutpoints(); cutIndexList.setSelectedItem(value); return true; } /** * */ private Object removeCutpoint(int index) { Object obj = collection.removeCutpoint(index); reloadCutpoints(); Object[] objects = collection.getCutpoints(); if (objects.length > 0) { int _index = -getCutIndex(collection.getCutpoints(), obj.toString()) - 1; if (_index >= objects.length) _index = objects.length - 1; cutIndexList.setSelectedIndex(_index); } return obj; } /** * */ private void reloadCutpoints() { cutIndexList.removeAllItems(); Object[] object = collection != null ? collection.getCutpoints() : new Object[0]; for (int i = 0; i < object.length; i++) cutIndexList.addItem(object[i]); } /** * */ private void setCutIndexField(int value) { Object[] obj = collection != null ? collection.getCutpoints() : null; cutIndexField.setText(obj == null || value < 0 ? "" : String.valueOf(value) + "/" + String.valueOf(obj.length)); } /** * */ private void setChapterIndexField(int value) { Object[] obj = collection != null ? collection.getChapterpoints() : null; chapterIndexField.setText(obj == null || value < 0 ? "" : String.valueOf(value) + "/" + String.valueOf(obj.length)); } /** * */ private void setPositionField(long value) { updatePositionField(String.valueOf(value)); } /** * */ private void updatePositionField() { updatePositionField(positionField.getText()); } /** * */ private void updatePositionField(String str) { boolean b = action; List list_1 = collection.getCutpointList(); List list_2 = collection.getChapterpointList(); action = false; if (list_1.contains(str)) positionField.setBackground(new Color(225, 200, 225)); else if (list_2.contains(str)) positionField.setBackground(new Color(225, 230, 255)); else positionField.setBackground(Color.white); positionField.setText(str); action = b; } /** * */ private void showCutInfo(boolean b, Object[] obj, Object list) { boolean b1 = false; if (!((List) list).isEmpty()) { if (collection.getSettings().getBooleanProperty(Keys.KEY_OptionDAR) && collection.getSettings().getIntProperty(Keys.KEY_ExportDAR) + 1 != Common.getMpvDecoderClass().getAspectRatio()) b1 = true; else if (collection.getSettings().getBooleanProperty(Keys.KEY_OptionHorizontalResolution) && collection.getSettings().getIntProperty(Keys.KEY_ExportHorizontalResolution) != Common.getMpvDecoderClass().getWidth()) b1 = true; } CommonGui.getPicturePanel().setFilterStatus(b1); Common.getGuiInterface().showCutIcon(b, obj, list); } }