//---------------------------------------------------------------------------- // COMPONENT NAME: LPEX Editor // // © Copyright IBM Corporation 2004, 2007 // All Rights Reserved. // // DESCRIPTION: // ZoomAction - sample user-defined action (zoom) //---------------------------------------------------------------------------- package com.ibm.lpex.samples; import com.ibm.lpex.core.LpexBaseAction; import com.ibm.lpex.core.LpexView; /** * Sample action <b>zoom</b> - zoom in / out a segment of the document. * This action lets you set a zoom-in segment to the current selection in the * document, and then zoom out / in this segment. * * <p>Here is the ZoomAction * <a href="doc-files/ZoomAction.java.html">source code</a>.</p> * * <p>To run this sample: * <ul> * <li>Define the action via an editor preference page, where available, or * from the editor command line: * <pre>set actionClass.zoom com.ibm.lpex.samples.ZoomAction</pre> * <li>Run it from the editor command line: * <pre>action zoom</pre> * or associate it with a key (here, <code>Alt+.</code>): * <pre>set keyAction.a-period zoom</pre> * </ul></p> * * @see com.ibm.lpex.samples.TestUserProfile * @see com.ibm.lpex.samples All the samples */ public class ZoomAction extends LpexBaseAction { /** * Zoom in / out. */ public void doAction(LpexView lpexView) { /*----------------------------------------------------------------------*/ /* 1.- if no selection in this view, toggle any previous zoom setting */ /*----------------------------------------------------------------------*/ if (!lpexView.queryOn("block.inView")) { // is there a previously-set zoom mark? int zoomMark = lpexView.queryInt("markId.@ZoomAction"); if (zoomMark > 0) { boolean wasZoomedIn = lpexView.queryOn("markIncluded.@ZoomAction"); // zoom out - restore original view's visibility of the expand/hide area if (wasZoomedIn) { restoreExpandHide(lpexView); // lpexView.doCommand("set mark.@ZoomAction clear"); } // zoom in - ensure the expand/hide area is hidden else { hideExpandHide(lpexView); } // toggle zoom in/out state lpexView.doCommand("set markIncluded.@ZoomAction " + (wasZoomedIn? "off" : "on")); } return; } /*------------------------------------------------------------------*/ /* 2.- [re]set our mark to zoom in on the currently selected text */ /*------------------------------------------------------------------*/ // zoom in onto the selection zoomIn(lpexView, lpexView.queryInt("block.topElement"), lpexView.queryInt("block.bottomElement")); // clear the zoom-defining selection lpexView.doCommand("block clear"); } public String getToolTipText(LpexView lpexView) { return "Zoom in / out a segment of the document"; } /** * Zooms in on the segment bounded by the given elements. */ static void zoomIn(LpexView lpexView, int topElement, int bottomElement) { // hide the expand/hide area for a crystal-clear zoomed-in view hideExpandHide(lpexView); // [re]define the zoom mark to the given segment, set it as included lpexView.doCommand("set mark.@ZoomAction sticky element " + topElement + ' ' + bottomElement); lpexView.doCommand("set markIncluded.@ZoomAction on"); } /** * Hides the expand/hide area, shows all filtered-out elements in the given view. */ static void hideExpandHide(LpexView lpexView) { // unless already zoomed in, remember original expand/hide area, // includedClasses, and excludedClasses settings if (!lpexView.queryOn("markIncluded.@ZoomAction")) { lpexView.doCommand("set userParameter.view.ZoomAction.expandHide " + lpexView.query("current.expandHide")); String classes = lpexView.query("includedClasses"); if (classes != null) { lpexView.doCommand("set userParameter.view.ZoomAction.includedClasses " + classes); } classes = lpexView.query("excludedClasses"); if (classes != null) { lpexView.doCommand("set userParameter.view.ZoomAction.excludedClasses " + classes); } } // hide expand/hide area, show entire zoomed-in segment lpexView.doCommand("set expandHide off"); lpexView.doAction(lpexView.actionId("showAll")); } /** * Restores the expand/hide area and view-filter classes in the given view * to the settings in effect prior to the last zoom in. */ static void restoreExpandHide(LpexView lpexView) { lpexView.doCommand("set expandHide " + lpexView.query("userParameter.view.ZoomAction.expandHide")); String classes = lpexView.query("userParameter.view.ZoomAction.includedClasses"); if (classes != null) { lpexView.doCommand("set includedClasses " + classes); } classes = lpexView.query("userParameter.view.ZoomAction.excludedClasses"); if (classes != null) { lpexView.doCommand("set excludedClasses " + classes); } } }