/* This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program; if not, see http://www.gnu.org/licenses or write to the Free Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */ package com.servoy.j2db.server.headlessclient.dataui; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import com.servoy.j2db.dataprocessing.IDisplayData; import com.servoy.j2db.dataprocessing.IRecordInternal; import com.servoy.j2db.ui.IEventExecutor; import com.servoy.j2db.util.ScopesUtils; /** * Behavior for focus gained events. * * @author acostescu */ public class StartEditOnFocusGainedEventBehavior extends ServoyAjaxEventBehavior { private static final long serialVersionUID = 1L; /** * Creates a new focus gained behavior that will call startEditing when focus is received on the component it is added to. * */ public StartEditOnFocusGainedEventBehavior() { super("onfocus"); //$NON-NLS-1$ } @Override protected void onEvent(AjaxRequestTarget target) { startEditing(getComponent(), target); } @Override protected boolean blockRequest() { return false; } /** * Add a focus gained behavior when it is not there yet. * * @param component * @return added */ public static boolean addNewBehaviour(Component component) { List behaviors = component.getBehaviors(); if (behaviors != null) { for (Object behavior : behaviors) { if (StartEditOnFocusGainedEventBehavior.class.isAssignableFrom(behavior.getClass())) { return false; } } } component.add(new StartEditOnFocusGainedEventBehavior()); return true; } public static boolean startEditing(Component component, int modifiers, AjaxRequestTarget target) { if (component instanceof IDisplayData && ((IDisplayData)component).getDataProviderID() != null && !ScopesUtils.isVariableScope(((IDisplayData)component).getDataProviderID()) && !((IDisplayData)component).isReadOnly()) { Object record = component.getInnermostModel().getObject(); if (record instanceof IRecordInternal) { return WebEventExecutor.setSelectedIndex(component, target, modifiers) && ((IRecordInternal)record).startEditing(); // TODO what to do if startEdit == false, do a blur? } } return true; } public static boolean startEditing(Component component, AjaxRequestTarget target) { return startEditing(component, IEventExecutor.MODIFIERS_UNSPECIFIED, target); } }