package org.korsakow.ide.ui.resources; import java.awt.Color; import java.awt.Dimension; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JLabel; import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.korsakow.ide.ui.components.NewMediaPanel; import org.korsakow.ide.ui.laf.KorsakowSliderUI; import org.korsakow.ide.util.UIHelper; public class NonTimedMediaResourceView extends MediaResourceView { protected boolean durationUpdating; protected long durationValue; protected JSlider durationSlider; protected JTextField durationField; @Override protected void initUI() { super.initUI(); mediaPanel.add(UIHelper.createHorizontalFlowLayoutPanel( new JLabel("Duration"), durationSlider = new JSlider(0, 3600*1000, 30*1000), Box.createHorizontalStrut(10), durationField = new JTextField("5.0") )); durationField.setBorder(BorderFactory.createLineBorder(Color.gray)); durationField.setEditable(true); durationField.addFocusListener( new FocusListener() { @Override public void focusLost(FocusEvent e) { Long time = NewMediaPanel.parseTime( durationField.getText() ); if ( time != null ) { durationValue = time; } durationUpdating = true; durationSlider.setValue( (int)durationValue ); durationUpdating = false; durationField.setText( NewMediaPanel.formatTime( durationValue ) ); } @Override public void focusGained(FocusEvent e) { } } ); durationField.setPreferredSize(new Dimension(70, 15)); durationSlider.setPaintLabels(true); durationSlider.putClientProperty( KorsakowSliderUI.SCROLL_INCREMENT, 1000 ); durationSlider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent event) { if ( durationUpdating ) return; durationValue = durationSlider.getValue(); durationField.setText( NewMediaPanel.formatTime( durationValue ) ); } }); } public long getDuration() { return durationValue; } public void setDuration(long duration) { durationValue = duration; durationUpdating = true; durationSlider.setValue((int)duration); durationUpdating = false; durationField.setText( NewMediaPanel.formatTime( durationValue ) ); } }