//---------------------------------------------------------------------------- // COMPONENT NAME: LPEX Editor // // (C) Copyright IBM Corporation 1998, 2001 // All Rights Reserved. // // DESCRIPTION: // TestUserProfile - sample user profile. //---------------------------------------------------------------------------- package com.ibm.lpex.samples; import com.ibm.lpex.core.LpexAction; import com.ibm.lpex.core.LpexDocumentLocation; import com.ibm.lpex.core.LpexView; /** * This class is a sample user profile. It customizes the <b>lpex</b> base * editor profile by redefining several keys and settings. * * <p>The user profile is run during the processing of the <b>updateProfile</b> * command. The <b>updateProfile</b> command is normally run when a document * view is created, and it may be issued at any time to allow the document view * to reflect changes to the profile.</p> * * <p>Here is the <a href="doc-files/TestUserProfile.java.html">TestUserProfile * code</a>.</p> * * <p>To run this sample: * <ul> * <li>Compile the user-profile class: * <pre>javac TestUserProfile.java</pre> * <li>Set the user profile, by entering this on the editor command line: * <pre>set updateProfile.userProfile com.ibm.lpex.samples.TestUserProfile</pre> * <li>Run the <b>updateProfile</b> command from the editor command line, * by entering: * <pre>updateProfile</pre> * </ul></p> * * See the <b>updateProfile.userProfile</b> parameter. */ public class TestUserProfile { public static void userProfile(LpexView lpexView) { // if the current profile is different from "lpex" (or none), don't touch it String baseProfile = lpexView.query("baseProfile"); if (baseProfile != null && !baseProfile.equals("lpex")) { return; } // define a backSpace action restricted to the current line lpexView.defineAction("myBackSpace", new LpexAction() { public void doAction(LpexView view) { if (view.currentPosition() > 1) { view.doDefaultAction(view.actionId("backSpace")); } } public boolean available(LpexView view) { return true; } }); // define a delete action restricted to the current line lpexView.defineAction("myDelete", new LpexAction() { public void doAction(LpexView view) { if (view.currentPosition() <= view.queryInt("length")) { view.doDefaultAction(view.actionId("delete")); } } public boolean available(LpexView view) { return true; } }); // define an action to select the current line lpexView.defineAction("myBlockMarkElement", new LpexAction() { public void doAction(LpexView view) { view.doDefaultCommand("block clear"); view.doDefaultCommand("block set element"); } public boolean available(LpexView view) { return true; } }); // define a deleteLine action that preserves the cursor column position lpexView.defineAction("myDeleteLine", new LpexAction() { public void doAction(LpexView view) { int displayPosition = view.queryInt("displayPosition"); if (displayPosition > 0) { view.doDefaultAction(view.actionId("deleteLine")); view.doDefaultCommand("set displayPosition " + displayPosition); } } public boolean available(LpexView view) { return true; } }); // define a join action that keeps one and only one space between texts lpexView.defineAction("myJoin", new LpexAction() { public void doAction(LpexView view) { LpexDocumentLocation joinLocation = view.documentLocation(); if (joinLocation.element > 0) { // save cursor position, may be affected by deleteWhiteSpace / insertText int displayPosition = view.queryInt("displayPosition"); joinLocation.position = view.queryInt("length") + 1; view.doDefaultAction(view.actionId("join")); view.doDefaultCommand(joinLocation, "action deleteWhiteSpace"); view.doDefaultCommand(joinLocation, "insertText "); // restore original cursor position view.doDefaultCommand("set displayPosition " + displayPosition); } } public boolean available(LpexView view) { return true; } }); // set default selection to character (not stream) lpexView.doDefaultCommand("set block.defaultType character"); // set "Enter" key to go to the next line (not split) lpexView.doDefaultCommand("set keyAction.enter.t newLine"); // set "Delete" and "Backspace" keys to keep it inside the current line lpexView.doDefaultCommand("set keyAction.backSpace.t myBackSpace"); lpexView.doDefaultCommand("set keyAction.delete.t myDelete"); // set "Alt+J" to join next line's text with only one space in-between lpexView.doDefaultCommand("set keyAction.a-j.t myJoin"); // set mouse button 1 double-click to select the line (not word) lpexView.doDefaultCommand("set mouseAction.1-pressed.2 myBlockMarkElement"); // indicate this profile has run lpexView.doDefaultCommand("set messageText My settings (TestUserProfile) in effect."); } }