timeseriesviewer.java

来自「编辑视频文件」· Java 代码 · 共 1,387 行 · 第 1/3 页

JAVA
1,387
字号
            ymin = ymax - panel.getHeight();            if ((ymax >= y) && (ymin <= y)) {                return panel;            }            ymax -= panel.getHeight();        }        return null;    }    /**     * Change the height of the trackpanels depending on the auto fit     * vertically flag.     */    private void adjustPanelHeight() {        int numPan = trackPanels.size();        if (numPan > 0) {            TSTrackPanelImpl panel;            if (autoFitVertical) {                trackPanelHeight = (getHeight() - rulerHeight) / numPan;            } else {                trackPanelHeight = DEF_PANEL_HEIGHT;            }            for (int i = 0; i < trackPanels.size(); i++) {                panel = (TSTrackPanelImpl) trackPanels.get(i);                panel.setHeight(trackPanelHeight);            }        } else {            if (autoFitVertical) {                trackPanelHeight = getHeight();            }        }    }    /**     * Create a wizard to extract data from a track to a tier, based on     * annotation intervals of a parent tier.     */    private void extractTrackData() {        // shows a modal dialog        new ExtractDataMultiStep(transcription, trackManager);    }    /**     * @see mpi.eudico.client.annotator.viewer.AbstractViewer#controllerUpdate(mpi.eudico.client.mediacontrol.ControllerEvent)     */    public void controllerUpdate(ControllerEvent event) {        super.controllerUpdate(event);    }    /**     * @see mpi.eudico.client.annotator.viewer.AbstractViewer#updateSelection()     */    public void updateSelection() {        selectionBeginPos = xAt(getSelectionBeginTime());        if (selectionBeginPos < vertRulerWidth) {            selectionBeginPos = vertRulerWidth;        }        selectionEndPos = xAt(getSelectionEndTime());        if (selectionEndPos < selectionBeginPos) {            selectionEndPos = selectionBeginPos;        }        repaint();    }    /**     * @see mpi.eudico.client.annotator.viewer.AbstractViewer#updateLocale()     */    public void updateLocale() {        super.updateLocale();        if (popup != null) {            fitVerticalMI.setText(ElanLocale.getString(                    "TimeSeriesViewer.TrackPanel.FitVertically"));            addPanelMI.setText(ElanLocale.getString(                    "TimeSeriesViewer.TrackPanel.AddPanel"));            removePanelMI.setText(ElanLocale.getString(                    "TimeSeriesViewer.TrackPanel.RemovePanel"));            trPanelMenu.setText(ElanLocale.getString(                    "TimeSeriesViewer.TrackPanel"));            setRangeMenu.setText(ElanLocale.getString(                    "TimeSeriesViewer.TrackPanel.SetRange"));            addTrackMenu.setText(ElanLocale.getString(                    "TimeSeriesViewer.Track.Add"));            removeTrackMenu.setText(ElanLocale.getString(                    "TimeSeriesViewer.Track.Remove"));            extractDataMI.setText(ElanLocale.getString(                    "TimeSeriesViewer.Extract"));            configureTrMI.setText(ElanLocale.getString(                    "TimeSeriesViewer.Tracks.Configure"));            // $sidgrid            addAllTrackMI.setText(ElanLocale.getString(                    "TimeSeriesViewer.Track.Addall"));            removeAllTrackMI.setText(ElanLocale.getString(                    "TimeSeriesViewer.Track.Removeall"));            // end $sidgrid        }    }    /**     * @see java.awt.event.ComponentListener#componentResized(java.awt.event.ComponentEvent)     */    public void componentResized(ComponentEvent e) {        TSTrackPanelImpl panel;        intervalWidth = getWidth() - vertRulerWidth - defBarWidth;        for (int i = 0; i < trackPanels.size(); i++) {            panel = (TSTrackPanelImpl) trackPanels.get(i);            panel.setWidth(getWidth() - defBarWidth);        }        adjustPanelHeight();        paintBuffer();        scrollBar.setBounds(getWidth() - defBarWidth, 0, defBarWidth,            getHeight());        scrollBar.revalidate();        updateScrollBar();    }    /**     * @see java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent)     */    public void componentShown(ComponentEvent e) {        paintBuffer();        scrollBar.setBounds(getWidth() - defBarWidth, 0, defBarWidth,            getHeight());        scrollBar.revalidate();        updateScrollBar();    }    /**     * Handle scrolling of the viewer image.     *     * @param e the event     */    public void adjustmentValueChanged(AdjustmentEvent e) {        int value = e.getValue();        setVerticalScrollOffset(value);    }    /**     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)     */    public void actionPerformed(ActionEvent e) {        if (e.getSource() == fitVerticalMI) {            autoFitVertical = fitVerticalMI.isSelected();            adjustPanelHeight();            paintBuffer();            updateScrollBar();            return;        }        if (e.getSource() == addPanelMI) {            addEmptyTrackPanel();            return;        }        if (e.getSource() == removePanelMI) {            if (selTrackPanel != null) {                removeTSTrackPanel(selTrackPanel);            }            return;        }        if (e.getSource() == configureTrMI) {            if (trackManager != null) {                trackManager.configureTracks(this);            }            return;        }        if (e.getSource() == extractDataMI) {            extractTrackData();            return;        }        //$sidgrid        if (e.getSource() == addAllTrackMI) {            if (selTrackPanel != null) {                ArrayList tracks = trackManager.getRegisteredTracks();                AbstractTSTrack tr;                for (int i = 0; i < tracks.size(); i++) {                    tr = (AbstractTSTrack) tracks.get(i);                    if (selTrackPanel.getTrack(tr.getName()) == null) {                        selTrackPanel.addTrack(tr);                        selTrackPanel.getRuler().setRange(tr.getRange());                        selTrackPanel.getRuler().setUnitString(tr.getUnitString());                    }                }                paintBuffer();            }            return;        }        if (e.getSource() == removeAllTrackMI) {            if (selTrackPanel != null) {                List tracks = selTrackPanel.getTracks();                for (int i = 0; i < tracks.size(); i++) {                    selTrackPanel.removeTrack((AbstractTSTrack) tracks.get(i));                }                paintBuffer();            }            return;        }        if (e.getSource() == addPanelForEachTrackMI) {            clearPanel();            ArrayList trs = trackManager.getRegisteredTracks();            int totPanels = 0;            if (trackPanels.isEmpty()) {                totPanels = trs.size();            }            // else            //  totPanels=trs.size()-trackPanels.size();            /*( for (int i = 0; i < totPanels; i++) {                 addEmptyTrackPanel();            }*/            for (int i = 0; i < totPanels; i++) {                addEmptyTrackPanel();                AbstractTSTrack tra = (AbstractTSTrack) trs.get(i);                TSTrackPanelImpl tsp = (TSTrackPanelImpl) trackPanels.get(i);                if ((tra != null) && !tsp.getTracks().contains(tra)) {                    tsp.addTrack(tra);                    tsp.getRuler().setRange(tra.getRange());                    tsp.getRuler().setUnitString(tra.getUnitString());                    selTrackPanel = tsp;                    paintBuffer();                }            }            return;        }        if (e.getSource() == removeAllPanelsMI) {            clearPanel();            return;        }        // end $sidgrid        String command = e.getActionCommand();        if ((command != null) && (command.indexOf(ADD_PR) > -1)) {            // add Track            String trackName = command.substring(4);            if ((trackManager != null) && (selTrackPanel != null)) {                AbstractTSTrack tr = trackManager.getTrack(trackName);                if (tr != null) {                    selTrackPanel.addTrack(tr);                    selTrackPanel.getRuler().setRange(tr.getRange());                    selTrackPanel.getRuler().setUnitString(tr.getUnitString());                    paintBuffer();                }            }            return;        } else if ((command != null) && (command.indexOf(REM_PR) > -1)) {            // remove track            String trackName = command.substring(4);            if (selTrackPanel != null) {                List tracks = selTrackPanel.getTracks();                AbstractTSTrack tr;                for (int i = 0; i < tracks.size(); i++) {                    tr = (AbstractTSTrack) tracks.get(i);                    if (trackName.equals(tr.getName())) {                        selTrackPanel.removeTrack(tr);                        paintBuffer();                    }                }            }            return;        } else if ((command != null) && (command.indexOf(RANGE) > -1)) {            // setRange and unit string            String trackName = command.substring(4);            if (selTrackPanel != null) {                List tracks = selTrackPanel.getTracks();                AbstractTSTrack tr;                for (int i = 0; i < tracks.size(); i++) {                    tr = (AbstractTSTrack) tracks.get(i);                    if (trackName.equals(tr.getName())) {                        selTrackPanel.getRuler().setRange(tr.getRange());                        selTrackPanel.getRuler().setUnitString(tr.getUnitString());                        paintBuffer();                    }                }            }            return;        }        // if we get here the super implementation (zoom) will be called        super.actionPerformed(e);    }    /**     * The use of a mousewheel needs Java 1.4!<br>     * The scroll amount of the mousewheel is the height of a tier.     *     * @param e the event     */    public void mouseWheelMoved(MouseWheelEvent e) {        if (e.getUnitsToScroll() > 0) {            scrollBar.setValue(scrollBar.getValue() + 25);        } else {            scrollBar.setValue(scrollBar.getValue() - 25);        }    }    //####################################################################################    // testing    private void testTrack() {        //String fileName = "D:\\MPI\\ELAN docs\\dataglove\\onno.log";        String fileName = System.getProperty("user.dir") + File.separator +            "glove.log";        mpi.eudico.client.annotator.timeseries.glove.DataGloveFileReader reader = new mpi.eudico.client.annotator.timeseries.glove.DataGloveFileReader(fileName);        try {            int sampleRate = reader.detectSampleFrequency();            float[] data = (float[]) reader.readTrack(10, 5);            mpi.eudico.client.annotator.timeseries.ContinuousRateTSTrack track = new mpi.eudico.client.annotator.timeseries.ContinuousRateTSTrack();            track.setType(mpi.eudico.client.annotator.timeseries.TimeSeriesTrack.VALUES_FLOAT_ARRAY);            track.setRange(new float[] { -180, 180 });            track.setColor(new Color(128, 0, 128));            track.setSampleRate(sampleRate);            track.setData(data);            float[] data2 = (float[]) reader.readTrack(14, 5);            mpi.eudico.client.annotator.timeseries.ContinuousRateTSTrack track2 = new mpi.eudico.client.annotator.timeseries.ContinuousRateTSTrack();            track2.setType(mpi.eudico.client.annotator.timeseries.TimeSeriesTrack.VALUES_FLOAT_ARRAY);            track2.setRange(new float[] { -180, 180 });            track2.setColor(new Color(0, 128, 0));            track2.setSampleRate(sampleRate);            track2.setData(data2);            if (trackPanels.size() > 0) {                TSTrackPanelImpl tsp = (TSTrackPanelImpl) trackPanels.get(0);                tsp.getRuler().setRange(track.getRange());                tsp.addTrack(track);                tsp.addTrack(track2);            }        } catch (IOException ioe) {            System.out.println("Read error: " + ioe.getMessage());        }    }    /**     * Notification of changes in tracks and / or track sources (files).     * Especially change and delete events should be handled here.     *     * @param event Dthe event     */    public void timeSeriesChanged(TimeSeriesChangeEvent event) {        if (event.getEditSourceType() == TimeSeriesChangeEvent.TRACK) {            if (event.getSource() instanceof TSTrackConfiguration ||                    event.getSource() instanceof AbstractTSTrack) {                AbstractTSTrack tr = null;                if (event.getSource() instanceof TSTrackConfiguration) {                    TSTrackConfiguration trc = (TSTrackConfiguration) event.getSource();                    tr = (AbstractTSTrack) trc.getObject(trc.getTrackName());                } else {                    tr = (AbstractTSTrack) event.getSource();                }                AbstractTSTrack tr2;                // find the panel                 TSTrackPanelImpl pan;                for (int i = 0; i < trackPanels.size(); i++) {                    pan = (TSTrackPanelImpl) trackPanels.get(i);                    List tracks = pan.getTracks();                    for (int j = 0; j < tracks.size(); j++) {                        tr2 = (AbstractTSTrack) tracks.get(j);                        if (tr2 == tr) {                            if (event.getEditType() == TimeSeriesChangeEvent.CHANGE) {                                // make it the active track ??                                pan.getRuler().setUnitString(tr.getUnitString());                                pan.getRuler().setRange(tr2.getRange());                                paintBuffer();                                break;                            } else if (event.getEditType() == TimeSeriesChangeEvent.DELETE) {                                // check                                boolean active = false;                                if ((pan.getRuler().getRange()[0] == tr.getRange()[0]) &&                                        (pan.getRuler().getRange()[1] == tr.getRange()[1]) &&                                        ((pan.getRuler().getUnitString() != null) &&                                        pan.getRuler().getUnitString().equals(tr.getUnitString()))) {                                    // assume it is the active track                                    active = true;                                }                                pan.removeTrack(tr2);                                if (active && (pan.getTracks().size() > 0)) {                                    pan.getRuler().setRange(((AbstractTSTrack) tracks.get(                                            0)).getRange());                                    pan.getRuler().setUnitString(((AbstractTSTrack) tracks.get(                                            0)).getUnitString());                                }                                paintBuffer();                                break;                            }                        }                    }                }            }        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?