package gem.kevin.provider; import java.util.HashSet; public class ClipSourceProvider extends MutualSourceProvider { public static final float CLIP_TYPE_CUT_SOURCE = ACTION_TYPE_WRITE_SOURCE + .1f; public static final float CLIP_TYPE_DELETE_SOURCE = ACTION_TYPE_WRITE_SOURCE + .2f; public static final float CLIP_TYPE_RENAME_SINGLE_SOURCE = ACTION_TYPE_WRITE_SOURCE + .3f; public static final float CLIP_TYPE_BATCH_RENAME_SOURCE = ACTION_TYPE_WRITE_SOURCE + .31f; public static final float CLIP_TYPE_COPY_SOURCE = ACTION_TYPE_READ_SOURCE + .1f; public static final float CLIP_TYPE_UNKNOWN = ACTION_TYPE_UNKNOWN - .1f; // Container for mutual clip source providers private static final HashSet<MutualSourceProvider> sClipSourceProviderPool = new HashSet<MutualSourceProvider>(); private float mClipType; public static int getActionTypeFromClipType(float clipType) { return (int) clipType; } public interface ClipSourceCallback { public void onClipSourceChanged(ClipSourceProvider provider); } public ClipSourceProvider(float clipType) { super(getActionTypeFromClipType(clipType), sClipSourceProviderPool); mClipType = clipType; } public float getClipType() { return mClipType; } private final HashSet<ClipSourceCallback> mClipSourceCallbacks = new HashSet<ClipSourceCallback>(); @Override public float removeMutualSource(Object source) { float result = super.removeMutualSource(source); onClipSourceChanged(); return result; } @Override protected void addMutualSource(Object source) { super.addMutualSource(source); onClipSourceChanged(); } @Override public void clearMutualSources() { super.clearMutualSources(); onClipSourceChanged(); } public void registerClipSourceCallbacks(ClipSourceCallback... callbacks) { if (!mClipSourceCallbacks.isEmpty()) mClipSourceCallbacks.clear(); for (int i = 0; i < callbacks.length; i++) { mClipSourceCallbacks.add(callbacks[i]); } } protected void onClipSourceChanged() { for (ClipSourceCallback callback : mClipSourceCallbacks) { if (callback != null) { callback.onClipSourceChanged(this); } } } }