| /******************************************************************************* |
| * Copyright (c) 2007, 2012 IBM Corporation 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: |
| * Hisashi MIYASHITA - initial API and implementation |
| * Kentarou FUKUDA - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.actf.model.dom.dombycom.impl.object; |
| |
| import org.eclipse.actf.model.dom.dombycom.INodeExSound; |
| import org.eclipse.actf.model.dom.dombycom.impl.Helper; |
| import org.eclipse.actf.model.dom.dombycom.impl.NodeImpl; |
| import org.eclipse.actf.util.win32.comclutch.DispatchException; |
| import org.eclipse.actf.util.win32.comclutch.IDispatch; |
| |
| @SuppressWarnings("nls") |
| class WMPNodeImpl extends MediaObjectImpl { |
| private final IDispatch controls; |
| private final IDispatch settings; |
| |
| WMPNodeImpl(NodeImpl baseNode, IDispatch idisp, IDispatch controls) { |
| super(baseNode, idisp); |
| this.controls = controls; |
| Object o = Helper.get(idisp, "settings"); |
| if (o instanceof IDispatch) { |
| this.settings = (IDispatch) o; |
| } else { |
| this.settings = null; |
| } |
| } |
| |
| private boolean execControls(String cmd) { |
| try { |
| controls.invoke0(cmd); |
| return true; |
| } catch (DispatchException e) { |
| } |
| return false; |
| } |
| |
| private boolean putSettings(String prop, Object val) { |
| if (settings == null) |
| return false; |
| try { |
| settings.put(prop, val); |
| return true; |
| } catch (DispatchException e) { |
| } |
| return false; |
| } |
| |
| private Object getSettings(String prop) { |
| if (settings == null) |
| return null; |
| return Helper.get(settings, prop); |
| } |
| |
| public boolean fastForward() { |
| return execControls("fastForward"); |
| } |
| |
| public boolean fastReverse() { |
| return execControls("fastReverse"); |
| } |
| |
| public double getCurrentPosition() { |
| Object o = Helper.get(controls, "currentPosition"); |
| if (o instanceof Double) { |
| return ((Double) o).doubleValue(); |
| } else if (o instanceof Float) { |
| return ((Float) o).floatValue(); |
| } else if (o instanceof Integer) { |
| return ((Integer) o).intValue(); |
| } |
| return 0; |
| } |
| |
| public boolean setCurrentPosition(double pos) { |
| Object o = Helper.get(inode, "currentPosition"); |
| if (o instanceof Double) { |
| return putSettings("currentPosition", new Double(pos)); |
| } else if (o instanceof Float) { |
| return putSettings("currentPosition", new Float((float)pos)); |
| } else if (o instanceof Integer) { |
| return putSettings("currentPosition", new Integer((int)pos)); |
| } |
| return false; |
| } |
| |
| public double getTotalLength() { |
| Object o = Helper.get(inode, "Duration"); |
| if (o instanceof Double) { |
| return ((Double) o).doubleValue(); |
| } else if (o instanceof Float) { |
| return ((Float) o).floatValue(); |
| } else if (o instanceof Integer) { |
| return ((Integer) o).intValue(); |
| } |
| return 0; |
| } |
| |
| public boolean nextTrack() { |
| return execControls("next"); |
| } |
| |
| public boolean pauseMedia() { |
| return execControls("pause"); |
| } |
| |
| public boolean playMedia() { |
| return execControls("play"); |
| } |
| |
| public boolean previousTrack() { |
| return execControls("previous"); |
| } |
| |
| public boolean stopMedia() { |
| return execControls("stop"); |
| } |
| |
| public int getVolume() { |
| Object o = getSettings("volume"); |
| if (!(o instanceof Integer)) |
| return -1; |
| int vol = ((Integer) o).intValue(); |
| return ((vol * ((INodeExSound.VOLUME_MAX - INodeExSound.VOLUME_MIN) / 100)) + INodeExSound.VOLUME_MIN); |
| } |
| |
| public boolean muteMedia(boolean flag) { |
| return putSettings("mute", flag); |
| } |
| |
| public boolean setVolume(int val) { |
| val = (((val - INodeExSound.VOLUME_MIN) * 100) / (INodeExSound.VOLUME_MAX - INodeExSound.VOLUME_MIN)); |
| return putSettings("volume", Integer.valueOf(val)); |
| } |
| |
| public VideoState getCurrentState() { |
| Object o = Helper.get(inode, "playState"); |
| if (o instanceof Integer) { |
| int wmpst = (Integer) o; |
| switch (wmpst) { |
| case 0: |
| return VideoState.STATE_UNKNOWN; |
| case 1: |
| return VideoState.STATE_STOP; |
| case 2: |
| return VideoState.STATE_PAUSE; |
| case 3: |
| return VideoState.STATE_PLAY; |
| case 4: |
| return VideoState.STATE_FASTFORWARD; |
| case 5: |
| return VideoState.STATE_FASTREVERSE; |
| case 6: |
| case 7: |
| return VideoState.STATE_WAITING; |
| default: |
| return VideoState.STATE_STOP; |
| } |
| } else { |
| return VideoState.STATE_UNKNOWN; |
| } |
| } |
| |
| public boolean getMuteState() { |
| Object o = getSettings("mute"); |
| if (!(o instanceof Boolean)) |
| return false; |
| return ((Boolean) o).booleanValue(); |
| } |
| |
| public String getVideoURL() { |
| Object url = Helper.get(inode, "FileName"); |
| if(url instanceof String){ |
| return (String)url; |
| } |
| return null; |
| } |
| } |