//----------------------------------------------------------------------------
// COMPONENT NAME: LPEX Editor
//
// © Copyright IBM Corporation 2004, 2007
// All Rights Reserved.
//
// DESCRIPTION:
// FindNextDefaultAction - sample user-defined action (findNextDefault)
//----------------------------------------------------------------------------
package com.ibm.lpex.samples;
import com.ibm.lpex.core.LpexAction;
import com.ibm.lpex.core.LpexView;
/**
* Sample action <b>findNextDefault</b> - find next default text occurrence.
* This action is similar to the <b>findNext</b> built-in editor action, but will find
* the next occurrence of the global-scoped find text (<b>default.findText.findText</b>),
* rather than the current view-scoped find text. The global find text is usually set
* to the text lately searched from the live-find dialog of <i>any</i> view.
*
* <p>Here is the FindNextDefaultAction
* <a href="doc-files/FindNextDefaultAction.java.html">source code</a>.</p>
*
* <p>To run this sample:
* <ul>
* <li>Define this user action via an editor preference page, where available,
* or from the editor command line:
* <pre>set actionClass.findNextDefault com.ibm.lpex.samples.FindNextDefaultAction</pre></li>
* <li>Run it from the editor command line:
* <pre>action findNextDefault</pre>
* or associate it with a key (here, <b>Ctrl+N</b> in all window contexts):
* <pre>set keyAction.c-n.t.c.p findNextDefault</pre></li>
* </ul></p>
*
* @see com.ibm.lpex.samples All the samples
*/
public class FindNextDefaultAction implements LpexAction
{
/**
* Runs the action.
* Finds the next occurrence of the default find text.
*/
public void doAction(LpexView lpexView)
{
// get the default text to find and its associated regular-expression setting
String findText = LpexView.globalQuery("current.findText.findText");
if (findText == null || findText.length() == 0)
{
return; // nothing to find.
}
String regex = LpexView.globalQuery("current.findText.regularExpression");
// built-in "findNext" editor action uses the "actionRepeat" argument
int repeat = lpexView.queryInt("actionRepeat");
boolean reverse = repeat < 0;
if (reverse)
{
repeat = -repeat;
}
// build the "findText" command string
StringBuilder findTextCommand = new StringBuilder(32);
findTextCommand.append("findText ");
if (reverse)
{
findTextCommand.append("up ");
}
// 1.- view-scoped settings
if (lpexView.queryOn("current.findText.mark"))
{
findTextCommand.append("mark ");
}
if (lpexView.queryOn("current.findText.columns"))
{
findTextCommand.append("columns ")
.append(lpexView.query("current.findText.startColumn")).append(' ')
.append(lpexView.query("current.findText.endColumn")).append(' ');
}
if (lpexView.queryOn("current.findText.block"))
{
findTextCommand.append("block ");
}
if (lpexView.queryOn("current.findText.wholeWord"))
{
findTextCommand.append("wholeWord ");
}
if (!lpexView.queryOn("current.findText.wrap"))
{
findTextCommand.append("noWrap ");
}
if (lpexView.queryOn("current.findText.asis"))
{
findTextCommand.append("asis ");
}
if (!lpexView.queryOn("current.findText.emphasis"))
{
findTextCommand.append("noEmphasis ");
}
// 2.- global text & regular expression settings
if ("on".equals(regex))
{
findTextCommand.append("regularExpression ");
}
findTextCommand.append(findText);
String findTextCommandString = findTextCommand.toString();
// finally, do the find
for (int i = 0; i < repeat; i++)
{
lpexView.doCommand(findTextCommandString);
}
}
/**
* Returns the availability of this action.
* This action is enabled whenever there is text to find.
*/
public boolean available(LpexView lpexView)
{
String findText = LpexView.globalQuery("current.findText.findText");
return findText != null && findText.length() != 0;
}
}