/*
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.smart.cmd;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import javax.swing.KeyStroke;
import javax.swing.undo.UndoableEdit;
import com.servoy.j2db.FormController;
import com.servoy.j2db.FormManager;
import com.servoy.j2db.IForm;
import com.servoy.j2db.ISmartClientApplication;
import com.servoy.j2db.dataprocessing.IFoundSet;
/**
* @author jblok
*/
public class CmdPerformFind extends AbstractCmd
{
/*
* _____________________________________________________________ Declaration of attributes
*/
/*
* _____________________________________________________________ Declaration and definition of constructors
*/
public CmdPerformFind(ISmartClientApplication app)
{
super(
app,
"CmdPerformFind", app.getI18NMessage("servoy.menuitem.search"), "servoy.menuitem.search", app.getI18NMessage("servoy.menuitem.search.mnemonic").charAt(0), app.loadImage("find_next.gif")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
setActionCommand("search"); //$NON-NLS-1$
setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
}
/*
* _____________________________________________________________ The methods below override methods from superclass AbstractCmd
*/
@Override
public UndoableEdit doIt(java.util.EventObject ae)
{
FormManager fm = (FormManager)application.getFormManager();
IForm[] rootFindModeForms = fm.getVisibleRootFormsInFind();
if (rootFindModeForms.length > 0)
{
HashSet<IFoundSet> processedFounsets = new HashSet<IFoundSet>(); // if you have 2 visible forms in find that use the same foundset (paren + child tab on the same table)
// if you call performFind() on both of them you might get the "no results, modify last find" dialog twice...
for (IForm f : rootFindModeForms)
{
// check for each form if it is still in find mode (as onSearchCmd on one form might stop find mode on others as well and we do not want to trigger onSearchCmd on the others
IFoundSet foundSet = f.getFoundSet();
boolean shouldPerform = f.isInFindMode() && (foundSet == null || !processedFounsets.contains(foundSet));
if (shouldPerform && f instanceof FormController && ((FormController)f).getForm() != null &&
((FormController)f).getForm().getOnSearchCmdMethodID() < 0) shouldPerform = false;
if (shouldPerform)
{
processedFounsets.add(foundSet);
f.performFind(true, true, true);
// if performFind failed (either because of a problem or because the custom onSearchCmd intentionally
// wants to continue find) then don't try to perform search any more find mode forms
if (f.isInFindMode()) break;
}
}
}
return null;
}
/*
* _____________________________________________________________ The methods below belong to interface <interfacename>
*/
/*
* _____________________________________________________________ The methods below belong to this class
*/
}