📄 syncmanager.java
字号:
// the current master gets the master time label that is alive // the others get a static label that shows their offset if (player == playerInFocus) { playPanel.add(viewerManager.getTimePanel(), gbc); } else { JLabel offsetLabel = new JLabel(); offsetLabel.setText(TimeFormatter.toString(player.getOffset())); playPanel.add(offsetLabel, gbc); } gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.CENTER; panel.add(playPanel, gbc); gbc.gridx = 0; gbc.gridy = 1; gbc.anchor = GridBagConstraints.CENTER; JLabel fileLabel = new JLabel(); fileLabel.setFont(Constants.SMALLFONT); if (player.getMediaDescriptor() != null) { fileLabel.setText(FileUtility.fileNameFromPath( player.getMediaDescriptor().mediaURL)); } else { fileLabel.setText("-"); } panel.add(fileLabel, gbc); gbc.gridx = 0; gbc.gridy = 2; gbc.anchor = GridBagConstraints.CENTER; if (player instanceof MultiSourcePlayer) { JComboBox box = new JComboBox(); String[] sources = ((MultiSourcePlayer) player).getDescriptorStrings(); for (int i = 0; i < sources.length; i++) { box.addItem(sources[i]); if (i == 0) { fileLabel.setText(sources[i]); } } box.addItemListener(this); panel.add(box, gbc); } return panel; } /** * Returns whether or not the media players currently are connected * to the controlles. * * @return the connected state */ public boolean connectedPlayers() { return connected; } /** * Update the offset for the current player in focus */ private void setOffset() { if (playerInFocus != null) { viewerManager.setOffset(playerInFocus, playerInFocus.getMediaTime()); } } /** * only keep the relative offsets * */ private void setRelativeOffsets() { // if (relative) { // return; // } // find smallest offset minOffset = Long.MAX_VALUE; Enumeration en = playerForName.elements(); while (en.hasMoreElements()) { ElanMediaPlayer player = (ElanMediaPlayer) en.nextElement(); if (player.getOffset() < minOffset) { minOffset = player.getOffset(); } } // correct all offsets en = playerForName.elements(); while (en.hasMoreElements()) { ElanMediaPlayer player = (ElanMediaPlayer) en.nextElement(); long offset = player.getOffset(); viewerManager.setOffset(player, offset - minOffset); // player.setOffset(offset - minOffset); } // keep the image as it is viewerManager.getMasterMediaPlayer().setMediaTime(minOffset); relative = true; } /** * Use absolute offsets * */ private void setAbsoluteOffsets() { // if (!relative) { // return; // } // correct all offsets Enumeration en = playerForName.elements(); while (en.hasMoreElements()) { ElanMediaPlayer player = (ElanMediaPlayer) en.nextElement(); long offset = player.getOffset(); // why should the minOffset be added here? viewerManager.setOffset(player, offset /*+ minOffset*/); // player.setOffset(offset + minOffset); } // keep the image as it is viewerManager.getMasterMediaPlayer().setMediaTime(0); relative = false; } /** * Connects all players. */ public void reconnect() { setOffset(); playerInFocus = null; if (layoutManager.getMasterMediaPlayer() != null) { viewerManager.setMasterMediaPlayer(layoutManager.getMasterMediaPlayer()); viewerManager.enableDisabledMediaPlayers(); } connected = true; allPlayersRB.removeItemListener(this); allPlayersRB.setSelected(true); allPlayersRB.addItemListener(this); } /** * Sets the player that has the focus, i.e. the player of which the offset * can be manipulated with the player control buttons. * @param elanPlayer the focussed player */ private void setFocussedPlayer(ElanMediaPlayer elanPlayer) { if (elanPlayer == null) { return; } setOffset(); playerInFocus = elanPlayer; viewerManager.setMasterMediaPlayer(playerInFocus); viewerManager.disableSlaveMediaPlayers(); long offset = playerInFocus.getOffset(); playerInFocus.setOffset(0); playerInFocus.setMediaTime(offset); connected = false; layoutManager.doLayout(); } /** * Sets the source for a MultiSourcePlayer, the offset for that player * and ui elements of the player labelpanel. * * @param sourceComponent the source selection ComboBox connected to the player */ private void updateMultiPlayer(JComboBox sourceComponent) { Iterator playIt = labelForPlayer.keySet().iterator(); Object playerObj = null; JPanel panel = null;labelloop: while (playIt.hasNext()) { playerObj = playIt.next(); panel = (JPanel) labelForPlayer.get(playerObj); Component[] comps = panel.getComponents(); for (int i = 0; i < comps.length; i++) { if (comps[i] == sourceComponent) { break labelloop; } } panel = null; playerObj = null; } if ((panel != null) && playerObj instanceof MultiSourcePlayer) { MultiSourcePlayer player = (MultiSourcePlayer) playerObj; String source = (String) sourceComponent.getSelectedItem(); if (source != null) { // this sets the offset of the player player.setCurrentSource(source); layoutManager.doLayout(); } } } /** * Handles the action events * * @param event the action event */ public void actionPerformed(ActionEvent event) { if (event.getSource() == applyButton) { // this will cause an item event on the "all players radio button" allPlayersRB.setSelected(true); } } /** * Handling of changes in radio buttons selection states. * * @param e the item selection event */ public void itemStateChanged(ItemEvent e) { // ignore deselect events if (e.getStateChange() == ItemEvent.SELECTED) { if (e.getSource() instanceof JComboBox) { updateMultiPlayer((JComboBox) e.getSource()); } else if (e.getSource() == absOffsetRB) { relative = false; if (!allPlayersRB.isSelected()) { allPlayersRB.setSelected(true); } else { setAbsoluteOffsets(); } } else if (e.getSource() == relOffsetRB) { relative = true; if (!allPlayersRB.isSelected()) { allPlayersRB.setEnabled(true); } else { setRelativeOffsets(); } } else if (e.getSource() == allPlayersRB) { reconnect(); if (relative) { setRelativeOffsets(); } else { setAbsoluteOffsets(); } layoutManager.doLayout(); } else { // it is a player's radio button if (playerButtons.containsValue(e.getSource())) { Enumeration en = playerButtons.keys(); Object player; while (en.hasMoreElements()) { player = en.nextElement(); if (playerButtons.get(player) == e.getSource()) { setFocussedPlayer((ElanMediaPlayer) player); break; } } } } } } /** * Update the labels, border titles and button texts. * Called by the ElanLayoutManager. */ public void updateLocale() { offsetPanel.setBorder(new TitledBorder(ElanLocale.getString( "SyncMode.Label.Offset"))); absOffsetRB.setText(ElanLocale.getString("SyncMode.Label.Absolute")); relOffsetRB.setText(ElanLocale.getString("SyncMode.Label.Relative")); applyButton.setText(ElanLocale.getString("SyncMode.Button.Apply")); playerPanel.setBorder(new TitledBorder(ElanLocale.getString( "SyncMode.Label.Player"))); allPlayersRB.setText(ElanLocale.getString("SyncMode.Label.AllPlayers")); //update player radiobuttons and player labels Enumeration en = nameForPlayer.keys(); Object player; JRadioButton b; JPanel p; JLabel l; while (en.hasMoreElements()) { player = en.nextElement(); b = (JRadioButton) playerButtons.get(player); b.setText(ElanLocale.getString("SyncMode.Label.Player") + " " + nameForPlayer.get(player)); p = (JPanel) labelForPlayer.get(player); try { l = (JLabel) p.getComponent(0); String name = ElanLocale.getString("SyncMode.Label.Player") + " " + (String) nameForPlayer.get(player) + " " + ElanLocale.getString("SyncMode.Label.Offset") + ": "; l.setText(name); } catch (Exception e) { // just catch any exception, NullPointer, ArrayIndexOutOfBounds or // ClassCast } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -