/******************************************************************************* * Copyright (c) 2007, 2012 Nokia and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nokia - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.debug.ui.breakpointactions; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; public class SoundActionComposite extends Composite { private static final String[] soundFileExtensions = new String[] { "*.wav", "*.mid", "*.au", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ "*.aiff" }; //$NON-NLS-1$ private Combo combo_1; private ModifyListener comboModifyListener = null; private File selectedSoundFile = null; private SoundActionPage soundActionPage; private Label soundFilePathLabel; private Button tryItButton; /** * Create the composite * * @param parent * @param style * @param page */ public SoundActionComposite(Composite parent, int style, SoundActionPage page) { super(parent, style); soundActionPage = page; final GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; setLayout(gridLayout); final Label playSoundLabel = new Label(this, SWT.NONE); playSoundLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); playSoundLabel.setText(Messages.getString("SoundActionComposite.4")); //$NON-NLS-1$ combo_1 = new Combo(this, SWT.READ_ONLY); final GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false); combo_1.setLayoutData(gridData); comboModifyListener = new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if (combo_1.getText().length() > 0) { String filePath = combo_1.getText(); File soundFile = new File(filePath); if (soundFile.exists()) { soundFilePathLabel.setText(filePath); tryItButton.setEnabled(true); selectedSoundFile = soundFile; } else { soundFilePathLabel.setText(Messages.getString("SoundActionComposite.9")); //$NON-NLS-1$ tryItButton.setEnabled(false); } } } }; rebuildRecentSoundsCombo(); combo_1.addModifyListener(comboModifyListener); final String mediaPath = page.getMediaPath(); final Button browseButton = new Button(this, SWT.NONE); browseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.NONE); dialog.setText(Messages.getString("SoundActionComposite.5")); //$NON-NLS-1$ dialog.setFilterExtensions(soundFileExtensions); if (mediaPath.length() > 0) dialog.setFilterPath(mediaPath); String res = dialog.open(); if (res != null) { setSoundFile(res); } } }); browseButton.setText(Messages.getString("SoundActionComposite.6")); //$NON-NLS-1$ tryItButton = new Button(this, SWT.NONE); tryItButton.setLayoutData(new GridData()); tryItButton.setText(Messages.getString("SoundActionComposite.7")); //$NON-NLS-1$ tryItButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { File soundFile = new File(soundFilePathLabel.getText()); playSoundFile(soundFile); } }); soundFilePathLabel = new Label(this, SWT.NONE); final GridData gridData_1 = new GridData(GridData.FILL_HORIZONTAL); gridData_1.horizontalSpan = 2; soundFilePathLabel.setLayoutData(gridData_1); soundFilePathLabel.setText(""); //$NON-NLS-1$ // if (soundActionPage.getSoundAction().getSoundFile() != null) setSoundFile(soundActionPage.getSoundAction().getSoundFile().getAbsolutePath()); } private void addRecentSound(File soundFile) { soundActionPage.addRecentSound(soundFile); rebuildRecentSoundsCombo(); } @Override protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } @Override public void dispose() { super.dispose(); } public File getSoundFile() { return selectedSoundFile; } protected void playSoundFile(File soundFile) { SoundAction.playSoundFile(soundFile); } private void rebuildRecentSoundsCombo() { combo_1.removeAll(); ArrayList<File> sortedSounds = new ArrayList<File>(soundActionPage.getRecentSounds()); Collections.sort(sortedSounds); for (Iterator<File> iter = sortedSounds.iterator(); iter.hasNext();) { File element = iter.next(); combo_1.add(element.getAbsolutePath()); } } private void setSoundFile(String filePath) { combo_1.removeModifyListener(comboModifyListener); File soundFile = new File(filePath); if (soundFile.exists()) { addRecentSound(soundFile); combo_1.setText(soundFile.getAbsolutePath()); soundFilePathLabel.setText(filePath); tryItButton.setEnabled(true); selectedSoundFile = soundFile; } else { soundFilePathLabel.setText(Messages.getString("SoundActionComposite.9")); //$NON-NLS-1$ tryItButton.setEnabled(false); } combo_1.addModifyListener(comboModifyListener); } }