/* * #%L * carewebframework * %% * Copyright (C) 2008 - 2016 Regenstrief Institute, Inc. * %% * 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. * * This Source Code Form is also subject to the terms of the Health-Related * Additional Disclaimer of Warranty and Limitation of Liability available at * * http://www.carewebframework.org/licensing/disclaimer. * * #L% */ package org.carewebframework.shell.designer; import org.carewebframework.shell.layout.UIElementZKBase; import org.carewebframework.ui.zk.ZKUtil; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Menupopup; /** * Implements the mask that covers components when design mode is active. */ public class DesignMask implements EventListener<Event> { public enum MaskMode { AUTO, ENABLE, DISABLE }; private final UIElementZKBase element; private MaskMode mode = MaskMode.AUTO; private Event maskEvent; private boolean visible; public DesignMask(UIElementZKBase element) { this.element = element; } public MaskMode getMode() { return mode; } public void setMode(MaskMode mode) { mode = mode == null ? MaskMode.DISABLE : mode; if (this.mode != mode) { this.mode = mode; update(); } } private boolean shouldShow() { if (!element.isDesignMode()) { return false; } if (mode == MaskMode.AUTO) { return element.getChildCount() == 0; } return mode == MaskMode.ENABLE; } /** * Show or hide the design mode mask. */ public void update() { boolean shouldShow = shouldShow(); if (visible != shouldShow) { visible = shouldShow; Component target = element.getMaskTarget(); if (visible) { target.addEventListener("onMask", this); maskEvent = new Event("onMask", target); } else { maskEvent = null; target.removeEventListener("onMask", this); ZKUtil.removeMask(target); } } if (maskEvent != null && element.isActivated()) { Events.postEvent(-9999, maskEvent); } } @Override public void onEvent(Event event) throws Exception { Component target = element.getMaskTarget(); Menupopup contextMenu = UIElementZKBase.getDesignContextMenu(target); String displayName = element.getDisplayName(); ZKUtil.addMask(target, displayName, contextMenu, displayName); } }