/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.stunner.core.client.components.palette; import org.kie.workbench.common.stunner.core.client.api.ShapeManager; import org.kie.workbench.common.stunner.core.client.components.palette.model.HasPaletteItems; public abstract class AbstractPalette<D extends HasPaletteItems> implements Palette<D> { protected final ShapeManager shapeManager; protected CloseCallback closeCallback; protected ItemHoverCallback itemHoverCallback; protected ItemOutCallback itemOutCallback; protected ItemMouseDownCallback itemMouseDownCallback; protected ItemClickCallback itemClickCallback; protected D paletteDefinition; protected AbstractPalette() { this(null); } protected AbstractPalette(final ShapeManager shapeManager) { this.shapeManager = shapeManager; } protected abstract AbstractPalette<D> bind(); protected abstract void doDestroy(); protected abstract String getPaletteItemId(final int index); @Override @SuppressWarnings("unchecked") public AbstractPalette<D> bind(final D paletteDefinition) { this.paletteDefinition = paletteDefinition; beforeBind(); bind(); afterBind(); return this; } protected void beforeBind() { } protected void afterBind() { } @Override @SuppressWarnings("unchecked") public AbstractPalette<D> onClose(final CloseCallback callback) { this.closeCallback = callback; return this; } @Override @SuppressWarnings("unchecked") public AbstractPalette<D> onItemHover(final ItemHoverCallback callback) { this.itemHoverCallback = callback; return this; } @Override @SuppressWarnings("unchecked") public AbstractPalette<D> onItemOut(final ItemOutCallback callback) { this.itemOutCallback = callback; return this; } @Override @SuppressWarnings("unchecked") public AbstractPalette<D> onItemMouseDown(final ItemMouseDownCallback callback) { this.itemMouseDownCallback = callback; return this; } @Override @SuppressWarnings("unchecked") public AbstractPalette<D> onItemClick(final ItemClickCallback callback) { this.itemClickCallback = callback; return this; } public boolean onClose() { doClose(); if (null != closeCallback) { return closeCallback.onClose(); } return true; } protected void doClose() { } public boolean onItemHover(final int index, final double mouseX, final double mouseY, final double itemX, final double itemY) { final String id = getPaletteItemId(index); doItemHover(id, mouseX, mouseY, itemX, itemY); if (null != itemHoverCallback) { return itemHoverCallback.onItemHover(getPaletteItemId(index), mouseX, mouseY, itemX, itemY); } return true; } protected void doItemHover(final String id, final double mouseX, final double mouseY, final double itemX, final double itemY) { } public boolean onItemOut(final int index) { if (null != itemOutCallback) { return itemOutCallback.onItemOut(getPaletteItemId(index)); } return true; } public boolean onItemMouseDown(final int index, final double mouseX, final double mouseY, final double itemX, final double itemY) { if (null != itemMouseDownCallback) { final String id = getPaletteItemId(index); return this.onItemMouseDown(id, mouseX, mouseY, itemX, itemY); } return true; } public boolean onItemMouseDown(final String id, final double mouseX, final double mouseY, final double itemX, final double itemY) { if (null != itemMouseDownCallback) { return itemMouseDownCallback.onItemMouseDown(id, mouseX, mouseY, itemX, itemY); } return true; } public boolean onItemClick(final int index, final double mouseX, final double mouseY, final double itemX, final double itemY) { if (null != itemClickCallback) { final String id = getPaletteItemId(index); return itemClickCallback.onItemClick(id, mouseX, mouseY, itemX, itemY); } return true; } public boolean onItemClick(final String id, final double mouseX, final double mouseY, final double itemX, final double itemY) { if (null != itemClickCallback) { return itemClickCallback.onItemClick(id, mouseX, mouseY, itemX, itemY); } return true; } @Override public D getDefinition() { return paletteDefinition; } @Override public void destroy() { doDestroy(); this.closeCallback = null; this.itemHoverCallback = null; this.itemOutCallback = null; this.itemMouseDownCallback = null; this.itemClickCallback = null; this.paletteDefinition = null; } }