aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java')
-rw-r--r--src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java908
1 files changed, 454 insertions, 454 deletions
diff --git a/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java b/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java
index 1c5bf93..9bacb4c 100644
--- a/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java
+++ b/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java
@@ -1,4 +1,4 @@
-/*
+/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
@@ -15,456 +15,456 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package net.java.sip.communicator.impl.neomedia;
-
-import java.beans.*;
-import java.util.*;
-
-import javax.media.*;
-import javax.swing.*;
-import javax.swing.event.*;
-
-import org.jitsi.impl.neomedia.device.*;
-import org.jitsi.service.neomedia.*;
-
-/**
- * Implements <tt>ComboBoxModel</tt> for a specific <tt>DeviceConfiguration</tt>
- * so that the latter may be displayed and manipulated in the user interface as
- * a combo box.
- *
- * @author Lyubomir Marinov
- * @author Damian Minkov
- */
-public class DeviceConfigurationComboBoxModel
- implements ComboBoxModel,
- ListModel,
- PropertyChangeListener
-{
- /**
- * Type of the model - audio.
- */
- public static final int AUDIO = 1;
-
- /**
- * Audio Capture Device.
- */
- public static final int AUDIO_CAPTURE = 3;
-
- /**
- * Audio device for notification sounds.
- */
- public static final int AUDIO_NOTIFY = 5;
-
- /**
- * Audio playback device.
- */
- public static final int AUDIO_PLAYBACK = 4;
-
- /**
- * Type of the model - video.
- */
- public static final int VIDEO = 2;
-
- private AudioSystem[] audioSystems;
-
- /**
- * The current device configuration.
- */
- private final DeviceConfiguration deviceConfiguration;
-
- /**
- * All the devices.
- */
- private CaptureDevice[] devices;
-
- /**
- * The <tt>ListDataListener</tt>s registered with this instance.
- */
- private final List<ListDataListener> listeners
- = new ArrayList<ListDataListener>();
-
- /**
- * The type of the media for this combo.
- */
- private final int type;
-
- /**
- * Creates device combobox model
- * @param parent the parent component
- * @param deviceConfiguration the current device configuration
- * @param type the device - audio/video
- */
- public DeviceConfigurationComboBoxModel(
- DeviceConfiguration deviceConfiguration,
- int type)
- {
- if (deviceConfiguration == null)
- throw new IllegalArgumentException("deviceConfiguration");
- if ((type != AUDIO)
- && (type != AUDIO_CAPTURE)
- && (type != AUDIO_NOTIFY)
- && (type != AUDIO_PLAYBACK)
- && (type != VIDEO))
- throw new IllegalArgumentException("type");
-
- this.deviceConfiguration = deviceConfiguration;
- this.type = type;
-
- if (type == AUDIO
- || type == AUDIO_CAPTURE
- || type == AUDIO_NOTIFY
- || type == AUDIO_PLAYBACK)
- {
- deviceConfiguration.addPropertyChangeListener(this);
- }
- }
-
- public void addListDataListener(ListDataListener listener)
- {
- if (listener == null)
- throw new IllegalArgumentException("listener");
-
- if (!listeners.contains(listener))
- listeners.add(listener);
- }
-
- /**
- * Change of the content.
- * @param index0 from index.
- * @param index1 to index.
- */
- protected void fireContentsChanged(int index0, int index1)
- {
- ListDataListener[] listeners
- = this.listeners.toArray(
- new ListDataListener[this.listeners.size()]);
- ListDataEvent event
- = new ListDataEvent(
- this,
- ListDataEvent.CONTENTS_CHANGED,
- index0,
- index1);
-
- for (ListDataListener listener : listeners)
- listener.contentsChanged(event);
- }
-
- private AudioSystem[] getAudioSystems()
- {
- if (type != AUDIO)
- throw new IllegalStateException("type");
-
- audioSystems = deviceConfiguration.getAvailableAudioSystems();
- return audioSystems;
- }
-
- /**
- * Extracts the devices for the current type.
- * @return the devices.
- */
- private CaptureDevice[] getDevices()
- {
- if (type == AUDIO)
- throw new IllegalStateException("type");
-
- if (devices != null)
- return devices;
-
- AudioSystem audioSystem;
- List<? extends CaptureDeviceInfo> infos = null;
-
- switch (type)
- {
- case AUDIO_CAPTURE:
- audioSystem = deviceConfiguration.getAudioSystem();
- infos = (audioSystem == null)
- ? null
- : audioSystem.getDevices(AudioSystem.DataFlow.CAPTURE);
- break;
- case AUDIO_NOTIFY:
- audioSystem = deviceConfiguration.getAudioSystem();
- infos = (audioSystem == null)
- ? null
- : audioSystem.getDevices(AudioSystem.DataFlow.NOTIFY);
- break;
- case AUDIO_PLAYBACK:
- audioSystem = deviceConfiguration.getAudioSystem();
- infos = (audioSystem == null)
- ? null
- : audioSystem.getDevices(AudioSystem.DataFlow.PLAYBACK);
- break;
- case VIDEO:
- infos = deviceConfiguration.getAvailableVideoCaptureDevices(
- MediaUseCase.CALL);
- break;
- default:
- throw new IllegalStateException("type");
- }
-
- final int deviceCount = (infos == null) ? 0 : infos.size();
- devices = new CaptureDevice[deviceCount + 1];
-
- if (deviceCount > 0)
- {
- for (int i = 0; i < deviceCount; i++)
- devices[i] = new CaptureDevice(infos.get(i));
- }
- devices[deviceCount] = new CaptureDevice(null);
-
- return devices;
- }
-
- public Object getElementAt(int index)
- {
- if (type == AUDIO)
- return getAudioSystems()[index];
- else
- return getDevices()[index];
- }
-
- /**
- * Extracts the devices selected by the configuration.
- * @return <tt>CaptureDevice</tt> selected
- */
- private CaptureDevice getSelectedDevice()
- {
- AudioSystem audioSystem;
- CaptureDeviceInfo info;
-
- switch (type)
- {
- case AUDIO_CAPTURE:
- audioSystem = deviceConfiguration.getAudioSystem();
- info = (audioSystem == null)
- ? null
- : audioSystem.getSelectedDevice(AudioSystem.DataFlow.CAPTURE);
- break;
- case AUDIO_NOTIFY:
- audioSystem = deviceConfiguration.getAudioSystem();
- info = (audioSystem == null)
- ? null
- : audioSystem.getSelectedDevice(AudioSystem.DataFlow.NOTIFY);
- break;
- case AUDIO_PLAYBACK:
- audioSystem = deviceConfiguration.getAudioSystem();
- info = (audioSystem == null)
- ? null
- : audioSystem.getSelectedDevice(AudioSystem.DataFlow.PLAYBACK);
- break;
- case VIDEO:
- info = deviceConfiguration.getVideoCaptureDevice(MediaUseCase.ANY);
- break;
- default:
- throw new IllegalStateException("type");
- }
-
- for (CaptureDevice device : getDevices())
- {
- if (device.equals(info))
- return device;
- }
- return null;
- }
-
- public Object getSelectedItem()
- {
- if (type == AUDIO)
- return deviceConfiguration.getAudioSystem();
- else
- return getSelectedDevice();
- }
-
- public int getSize()
- {
- if (type == AUDIO)
- return getAudioSystems().length;
- else
- return getDevices().length;
- }
-
- /**
- * Notifies this instance about changes in the values of the properties of
- * {@link #deviceConfiguration} so that this instance keeps itself
- * up-to-date with respect to the list of devices.
- *
- * @param ev a <tt>PropertyChangeEvent</tt> which describes the name of the
- * property whose value has changed and the old and new values of that
- * property
- */
- public void propertyChange(final PropertyChangeEvent ev)
- {
- if (DeviceConfiguration.PROP_AUDIO_SYSTEM_DEVICES.equals(
- ev.getPropertyName()))
- {
- if (SwingUtilities.isEventDispatchThread())
- {
- audioSystems = null;
- devices = null;
- fireContentsChanged(0, getSize() - 1);
- }
- else
- {
- SwingUtilities.invokeLater(
- new Runnable()
- {
- public void run()
- {
- propertyChange(ev);
- }
- });
- }
- }
- }
-
- public void removeListDataListener(ListDataListener listener)
- {
- if (listener == null)
- throw new IllegalArgumentException("listener");
-
- listeners.remove(listener);
- }
-
- /**
- * Selects and saves the new choice.
- * @param device the device we choose.
- */
- private void setSelectedDevice(CaptureDevice device)
- {
- // We cannot clear the selection of DeviceConfiguration.
- if (device == null)
- return;
-
- CaptureDevice selectedDevice = getSelectedDevice();
-
- if (selectedDevice != device)
- {
- AudioSystem audioSystem;
-
- switch (type)
- {
- case AUDIO_CAPTURE:
- audioSystem = deviceConfiguration.getAudioSystem();
- if (audioSystem != null)
- {
- audioSystem.setDevice(
- AudioSystem.DataFlow.CAPTURE,
- ((CaptureDeviceInfo2) device.info),
- true);
- }
- break;
- case AUDIO_NOTIFY:
- audioSystem = deviceConfiguration.getAudioSystem();
- if (audioSystem != null)
- {
- audioSystem.setDevice(
- AudioSystem.DataFlow.NOTIFY,
- ((CaptureDeviceInfo2) device.info),
- true);
- }
- break;
- case AUDIO_PLAYBACK:
- audioSystem = deviceConfiguration.getAudioSystem();
- if (audioSystem != null)
- {
- audioSystem.setDevice(
- AudioSystem.DataFlow.PLAYBACK,
- ((CaptureDeviceInfo2) device.info),
- true);
- }
- break;
- case VIDEO:
- deviceConfiguration.setVideoCaptureDevice(device.info, true);
- break;
- }
-
- fireContentsChanged(-1, -1);
- }
- }
-
- public void setSelectedItem(Object item)
- {
- if (type == AUDIO)
- {
- AudioSystem audioSystem = (AudioSystem) item;
-
- if(!audioSystem.equals(deviceConfiguration.getAudioSystem()))
- {
- deviceConfiguration.setAudioSystem(audioSystem, true);
- fireContentsChanged(-1, -1);
- }
- }
- else
- setSelectedDevice((CaptureDevice) item);
- }
-
- /**
- * Encapsulates a <tt>CaptureDeviceInfo</tt> for the purposes of its display
- * in the user interface.
- */
- public static class CaptureDevice
- {
- /**
- * The encapsulated info.
- */
- public final CaptureDeviceInfo info;
-
- /**
- * Creates the wrapper.
- * @param info the info object we wrap.
- */
- public CaptureDevice(CaptureDeviceInfo info)
- {
- this.info = info;
- }
-
- /**
- * Determines whether the <tt>CaptureDeviceInfo</tt> encapsulated by
- * this instance is equal (by value) to a specific
- * <tt>CaptureDeviceInfo</tt>.
- *
- * @param cdi the <tt>CaptureDeviceInfo</tt> to be determined whether it
- * is equal (by value) to the <tt>CaptureDeviceInfo</tt> encapsulated by
- * this instance
- * @return <tt>true</tt> if the <tt>CaptureDeviceInfo</tt> encapsulated
- * by this instance is equal (by value) to the specified <tt>cdi</tt>;
- * otherwise, <tt>false</tt>
- */
- public boolean equals(CaptureDeviceInfo cdi)
- {
- return (info == null) ? (cdi == null) : info.equals(cdi);
- }
-
- /**
- * Gets a human-readable <tt>String</tt> representation of this
- * instance.
- *
- * @return a <tt>String</tt> value which is a human-readable
- * representation of this instance
- */
- @Override
- public String toString()
- {
- String s;
-
- if(info == null)
- {
- s
- = NeomediaActivator.getResources().getI18NString(
- "impl.media.configform.NO_DEVICE");
- }
- else
- {
- s = info.getName();
- if(info instanceof CaptureDeviceInfo2)
- {
- String transportType
- = ((CaptureDeviceInfo2) info).getTransportType();
-
- if(transportType != null)
- s += " (" + transportType + ")";
- }
- }
- return s;
- }
- }
-}
+package net.java.sip.communicator.impl.neomedia;
+
+import java.beans.*;
+import java.util.*;
+
+import javax.media.*;
+import javax.swing.*;
+import javax.swing.event.*;
+
+import org.jitsi.impl.neomedia.device.*;
+import org.jitsi.service.neomedia.*;
+
+/**
+ * Implements <tt>ComboBoxModel</tt> for a specific <tt>DeviceConfiguration</tt>
+ * so that the latter may be displayed and manipulated in the user interface as
+ * a combo box.
+ *
+ * @author Lyubomir Marinov
+ * @author Damian Minkov
+ */
+public class DeviceConfigurationComboBoxModel
+ implements ComboBoxModel,
+ ListModel,
+ PropertyChangeListener
+{
+ /**
+ * Type of the model - audio.
+ */
+ public static final int AUDIO = 1;
+
+ /**
+ * Audio Capture Device.
+ */
+ public static final int AUDIO_CAPTURE = 3;
+
+ /**
+ * Audio device for notification sounds.
+ */
+ public static final int AUDIO_NOTIFY = 5;
+
+ /**
+ * Audio playback device.
+ */
+ public static final int AUDIO_PLAYBACK = 4;
+
+ /**
+ * Type of the model - video.
+ */
+ public static final int VIDEO = 2;
+
+ private AudioSystem[] audioSystems;
+
+ /**
+ * The current device configuration.
+ */
+ private final DeviceConfiguration deviceConfiguration;
+
+ /**
+ * All the devices.
+ */
+ private CaptureDevice[] devices;
+
+ /**
+ * The <tt>ListDataListener</tt>s registered with this instance.
+ */
+ private final List<ListDataListener> listeners
+ = new ArrayList<ListDataListener>();
+
+ /**
+ * The type of the media for this combo.
+ */
+ private final int type;
+
+ /**
+ * Creates device combobox model
+ * @param parent the parent component
+ * @param deviceConfiguration the current device configuration
+ * @param type the device - audio/video
+ */
+ public DeviceConfigurationComboBoxModel(
+ DeviceConfiguration deviceConfiguration,
+ int type)
+ {
+ if (deviceConfiguration == null)
+ throw new IllegalArgumentException("deviceConfiguration");
+ if ((type != AUDIO)
+ && (type != AUDIO_CAPTURE)
+ && (type != AUDIO_NOTIFY)
+ && (type != AUDIO_PLAYBACK)
+ && (type != VIDEO))
+ throw new IllegalArgumentException("type");
+
+ this.deviceConfiguration = deviceConfiguration;
+ this.type = type;
+
+ if (type == AUDIO
+ || type == AUDIO_CAPTURE
+ || type == AUDIO_NOTIFY
+ || type == AUDIO_PLAYBACK)
+ {
+ deviceConfiguration.addPropertyChangeListener(this);
+ }
+ }
+
+ public void addListDataListener(ListDataListener listener)
+ {
+ if (listener == null)
+ throw new IllegalArgumentException("listener");
+
+ if (!listeners.contains(listener))
+ listeners.add(listener);
+ }
+
+ /**
+ * Change of the content.
+ * @param index0 from index.
+ * @param index1 to index.
+ */
+ protected void fireContentsChanged(int index0, int index1)
+ {
+ ListDataListener[] listeners
+ = this.listeners.toArray(
+ new ListDataListener[this.listeners.size()]);
+ ListDataEvent event
+ = new ListDataEvent(
+ this,
+ ListDataEvent.CONTENTS_CHANGED,
+ index0,
+ index1);
+
+ for (ListDataListener listener : listeners)
+ listener.contentsChanged(event);
+ }
+
+ private AudioSystem[] getAudioSystems()
+ {
+ if (type != AUDIO)
+ throw new IllegalStateException("type");
+
+ audioSystems = deviceConfiguration.getAvailableAudioSystems();
+ return audioSystems;
+ }
+
+ /**
+ * Extracts the devices for the current type.
+ * @return the devices.
+ */
+ private CaptureDevice[] getDevices()
+ {
+ if (type == AUDIO)
+ throw new IllegalStateException("type");
+
+ if (devices != null)
+ return devices;
+
+ AudioSystem audioSystem;
+ List<? extends CaptureDeviceInfo> infos = null;
+
+ switch (type)
+ {
+ case AUDIO_CAPTURE:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ infos = (audioSystem == null)
+ ? null
+ : audioSystem.getDevices(AudioSystem.DataFlow.CAPTURE);
+ break;
+ case AUDIO_NOTIFY:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ infos = (audioSystem == null)
+ ? null
+ : audioSystem.getDevices(AudioSystem.DataFlow.NOTIFY);
+ break;
+ case AUDIO_PLAYBACK:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ infos = (audioSystem == null)
+ ? null
+ : audioSystem.getDevices(AudioSystem.DataFlow.PLAYBACK);
+ break;
+ case VIDEO:
+ infos = deviceConfiguration.getAvailableVideoCaptureDevices(
+ MediaUseCase.CALL);
+ break;
+ default:
+ throw new IllegalStateException("type");
+ }
+
+ final int deviceCount = (infos == null) ? 0 : infos.size();
+ devices = new CaptureDevice[deviceCount + 1];
+
+ if (deviceCount > 0)
+ {
+ for (int i = 0; i < deviceCount; i++)
+ devices[i] = new CaptureDevice(infos.get(i));
+ }
+ devices[deviceCount] = new CaptureDevice(null);
+
+ return devices;
+ }
+
+ public Object getElementAt(int index)
+ {
+ if (type == AUDIO)
+ return getAudioSystems()[index];
+ else
+ return getDevices()[index];
+ }
+
+ /**
+ * Extracts the devices selected by the configuration.
+ * @return <tt>CaptureDevice</tt> selected
+ */
+ private CaptureDevice getSelectedDevice()
+ {
+ AudioSystem audioSystem;
+ CaptureDeviceInfo info;
+
+ switch (type)
+ {
+ case AUDIO_CAPTURE:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ info = (audioSystem == null)
+ ? null
+ : audioSystem.getSelectedDevice(AudioSystem.DataFlow.CAPTURE);
+ break;
+ case AUDIO_NOTIFY:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ info = (audioSystem == null)
+ ? null
+ : audioSystem.getSelectedDevice(AudioSystem.DataFlow.NOTIFY);
+ break;
+ case AUDIO_PLAYBACK:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ info = (audioSystem == null)
+ ? null
+ : audioSystem.getSelectedDevice(AudioSystem.DataFlow.PLAYBACK);
+ break;
+ case VIDEO:
+ info = deviceConfiguration.getVideoCaptureDevice(MediaUseCase.ANY);
+ break;
+ default:
+ throw new IllegalStateException("type");
+ }
+
+ for (CaptureDevice device : getDevices())
+ {
+ if (device.equals(info))
+ return device;
+ }
+ return null;
+ }
+
+ public Object getSelectedItem()
+ {
+ if (type == AUDIO)
+ return deviceConfiguration.getAudioSystem();
+ else
+ return getSelectedDevice();
+ }
+
+ public int getSize()
+ {
+ if (type == AUDIO)
+ return getAudioSystems().length;
+ else
+ return getDevices().length;
+ }
+
+ /**
+ * Notifies this instance about changes in the values of the properties of
+ * {@link #deviceConfiguration} so that this instance keeps itself
+ * up-to-date with respect to the list of devices.
+ *
+ * @param ev a <tt>PropertyChangeEvent</tt> which describes the name of the
+ * property whose value has changed and the old and new values of that
+ * property
+ */
+ public void propertyChange(final PropertyChangeEvent ev)
+ {
+ if (DeviceConfiguration.PROP_AUDIO_SYSTEM_DEVICES.equals(
+ ev.getPropertyName()))
+ {
+ if (SwingUtilities.isEventDispatchThread())
+ {
+ audioSystems = null;
+ devices = null;
+ fireContentsChanged(0, getSize() - 1);
+ }
+ else
+ {
+ SwingUtilities.invokeLater(
+ new Runnable()
+ {
+ public void run()
+ {
+ propertyChange(ev);
+ }
+ });
+ }
+ }
+ }
+
+ public void removeListDataListener(ListDataListener listener)
+ {
+ if (listener == null)
+ throw new IllegalArgumentException("listener");
+
+ listeners.remove(listener);
+ }
+
+ /**
+ * Selects and saves the new choice.
+ * @param device the device we choose.
+ */
+ private void setSelectedDevice(CaptureDevice device)
+ {
+ // We cannot clear the selection of DeviceConfiguration.
+ if (device == null)
+ return;
+
+ CaptureDevice selectedDevice = getSelectedDevice();
+
+ if (selectedDevice != device)
+ {
+ AudioSystem audioSystem;
+
+ switch (type)
+ {
+ case AUDIO_CAPTURE:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ if (audioSystem != null)
+ {
+ audioSystem.setDevice(
+ AudioSystem.DataFlow.CAPTURE,
+ ((CaptureDeviceInfo2) device.info),
+ true);
+ }
+ break;
+ case AUDIO_NOTIFY:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ if (audioSystem != null)
+ {
+ audioSystem.setDevice(
+ AudioSystem.DataFlow.NOTIFY,
+ ((CaptureDeviceInfo2) device.info),
+ true);
+ }
+ break;
+ case AUDIO_PLAYBACK:
+ audioSystem = deviceConfiguration.getAudioSystem();
+ if (audioSystem != null)
+ {
+ audioSystem.setDevice(
+ AudioSystem.DataFlow.PLAYBACK,
+ ((CaptureDeviceInfo2) device.info),
+ true);
+ }
+ break;
+ case VIDEO:
+ deviceConfiguration.setVideoCaptureDevice(device.info, true);
+ break;
+ }
+
+ fireContentsChanged(-1, -1);
+ }
+ }
+
+ public void setSelectedItem(Object item)
+ {
+ if (type == AUDIO)
+ {
+ AudioSystem audioSystem = (AudioSystem) item;
+
+ if(!audioSystem.equals(deviceConfiguration.getAudioSystem()))
+ {
+ deviceConfiguration.setAudioSystem(audioSystem, true);
+ fireContentsChanged(-1, -1);
+ }
+ }
+ else
+ setSelectedDevice((CaptureDevice) item);
+ }
+
+ /**
+ * Encapsulates a <tt>CaptureDeviceInfo</tt> for the purposes of its display
+ * in the user interface.
+ */
+ public static class CaptureDevice
+ {
+ /**
+ * The encapsulated info.
+ */
+ public final CaptureDeviceInfo info;
+
+ /**
+ * Creates the wrapper.
+ * @param info the info object we wrap.
+ */
+ public CaptureDevice(CaptureDeviceInfo info)
+ {
+ this.info = info;
+ }
+
+ /**
+ * Determines whether the <tt>CaptureDeviceInfo</tt> encapsulated by
+ * this instance is equal (by value) to a specific
+ * <tt>CaptureDeviceInfo</tt>.
+ *
+ * @param cdi the <tt>CaptureDeviceInfo</tt> to be determined whether it
+ * is equal (by value) to the <tt>CaptureDeviceInfo</tt> encapsulated by
+ * this instance
+ * @return <tt>true</tt> if the <tt>CaptureDeviceInfo</tt> encapsulated
+ * by this instance is equal (by value) to the specified <tt>cdi</tt>;
+ * otherwise, <tt>false</tt>
+ */
+ public boolean equals(CaptureDeviceInfo cdi)
+ {
+ return (info == null) ? (cdi == null) : info.equals(cdi);
+ }
+
+ /**
+ * Gets a human-readable <tt>String</tt> representation of this
+ * instance.
+ *
+ * @return a <tt>String</tt> value which is a human-readable
+ * representation of this instance
+ */
+ @Override
+ public String toString()
+ {
+ String s;
+
+ if(info == null)
+ {
+ s
+ = NeomediaActivator.getResources().getI18NString(
+ "impl.media.configform.NO_DEVICE");
+ }
+ else
+ {
+ s = info.getName();
+ if(info instanceof CaptureDeviceInfo2)
+ {
+ String transportType
+ = ((CaptureDeviceInfo2) info).getTransportType();
+
+ if(transportType != null)
+ s += " (" + transportType + ")";
+ }
+ }
+ return s;
+ }
+ }
+}