libbluray | branch: master | hpi1 <[email protected]> | Wed Feb 6 12:01:48 2013 +0200| [2f9ec89e473748a7827c819624d2e76017fe7923] | committer: hpi1
Implement UOMaskTableControlImpl listener interface > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=2f9ec89e473748a7827c819624d2e76017fe7923 --- .../content/playlist/UOMaskTableControlImpl.java | 69 ++++++++++++++++++-- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/src/libbluray/bdj/java/org/videolan/media/content/playlist/UOMaskTableControlImpl.java b/src/libbluray/bdj/java/org/videolan/media/content/playlist/UOMaskTableControlImpl.java index 60596d0..c324acc 100644 --- a/src/libbluray/bdj/java/org/videolan/media/content/playlist/UOMaskTableControlImpl.java +++ b/src/libbluray/bdj/java/org/videolan/media/content/playlist/UOMaskTableControlImpl.java @@ -1,6 +1,7 @@ /* * This file is part of libbluray * Copyright (C) 2010 William Hahne + * Copyright (C) 2012 Petri Hintukainen <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,12 +21,17 @@ package org.videolan.media.content.playlist; import java.awt.Component; +import java.util.LinkedList; import org.bluray.media.UOMaskTableControl; import org.bluray.media.UOMaskTableListener; +import org.bluray.media.UOMaskTableChangedEvent; +import org.bluray.media.UOMaskedEvent; + +import org.videolan.BDJAction; +import org.videolan.BDJActionManager; import org.videolan.PlaylistInfo; -// TODO: don't know what this is for public class UOMaskTableControlImpl implements UOMaskTableControl { protected UOMaskTableControlImpl(Handler player) { this.player = player; @@ -36,22 +42,71 @@ public class UOMaskTableControlImpl implements UOMaskTableControl { } public void addUOMaskTableEventListener(UOMaskTableListener listener) { - throw new Error("Not implemented"); // TODO: Not implemented + synchronized(listeners) { + listeners.add(listener); + } } public void removeUOMaskTableEventListener(UOMaskTableListener listener) { - throw new Error("Not implemented"); // TODO: Not implemented + synchronized(listeners) { + listeners.remove(listener); + } } public boolean[] getMaskedUOTable() { - PlaylistInfo pi = player.getPlaylistInfo(); - if (pi == null) - return new boolean[0]; + org.videolan.Logger.unimplemented("UOMaskTableControlImpl", "getMaskedUOTable"); + // TODO: set masks + boolean[] table = new boolean[64]; for (int i = 0; i < 64; i++) - table[i] = false; + table[i] = false; + return table; } + protected void onUOMasked(int position) { + // TODO: this method is not called + notifyListeners(new UOMaskedEvent(this, position)); + } + + protected void onPlayItemReach(int param) { + // TODO: check if masked UO table actually changed + notifyListeners(new UOMaskTableChangedEvent(this)); + } + + private void notifyListeners(Object event) { + synchronized (listeners) { + if (!listeners.isEmpty()) + BDJActionManager.getInstance().putCallback( + new UOMaskTableCallback(this, event)); + } + } + + private class UOMaskTableCallback extends BDJAction { + private UOMaskTableCallback(UOMaskTableControlImpl control, Object event) { + this.control = control; + this.event = event; + } + + protected void doAction() { + LinkedList list; + synchronized (control.listeners) { + list = (LinkedList)control.listeners.clone(); + } + if (event instanceof UOMaskTableChangedEvent) { + for (int i = 0; i < list.size(); i++) + ((UOMaskTableListener)list.get(i)).receiveUOMaskTableChangedEvent((UOMaskTableChangedEvent)event); + } + else if (event instanceof UOMaskedEvent) { + for (int i = 0; i < list.size(); i++) + ((UOMaskTableListener)list.get(i)).receiveUOMaskedEvent((UOMaskedEvent)event); + } + } + + private UOMaskTableControlImpl control; + private Object event; + } + + private LinkedList listeners = new LinkedList(); private Handler player; } _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
