Hello All,
I wish to expand the standard 'Learn Word' action in Oxygen Author 20.1 . I would like to include some additional steps, while still having the original behaviour as well. For example: when the user selects a word for learning, a custom dictionary/wordlist is updated (with this word). This dictionary/wordlist is probably not present on a local machine but on the server.
Is it possible to create a wrapper around this action? And if so, how?
Thanks,
Geri
XML Author - Custom 'Learn Word' feature
-
- Posts: 810
- Joined: Wed Nov 16, 2005 11:11 am
Re: XML Author - Custom 'Learn Word' feature
Hi Geri,
You can use an AuthorActionsProvider to intercept the "Learn word" action. It can be used from the framework level API as well as from the plugin level API.
1. From a framework
From within an ro.sync.ecss.extensions.api.AuthorExtensionStateListener you can do this:
2. From within a plugin, more precisely from a Workspace Access plugin
Best regards,
Alex
You can use an AuthorActionsProvider to intercept the "Learn word" action. It can be used from the framework level API as well as from the plugin level API.
1. From a framework
From within an ro.sync.ecss.extensions.api.AuthorExtensionStateListener you can do this:
Code: Select all
public abstract class AuthorExtensionStateAdapter implements AuthorExtensionStateListener {
private ActionPerformedListener listener = new ActionPerformedListener() {
@Override
public boolean beforeActionPerformed(Object actionEvent) {
return true;
};
@Override
public void afterActionPerformed(Object actionEvent) {
// TODO Perform the required action. The authorAccess instance can be used to detect the word at caret.
int[] wordAtCaret = authorAccess.getEditorAccess().getWordAtCaret();
try {
String word = authorAccess.getDocumentController().getText(wordAtCaret[0], wordAtCaret[1]);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
};
private AuthorAccess authorAccess;
/**
* @see ro.sync.ecss.extensions.api.AuthorExtensionStateListener#activated(ro.sync.ecss.extensions.api.AuthorAccess)
*/
@Override
public void activated(AuthorAccess authorAccess) {
this.authorAccess = authorAccess;
AuthorActionsProvider actionsProvider = authorAccess.getEditorAccess().getActionsProvider();
Action object = (Action) actionsProvider.getAuthorCommonActions().get("Spell_Check/Learn_word");
actionsProvider.addActionPerformedListener(object, listener);
}
/**
* @see ro.sync.ecss.extensions.api.AuthorExtensionStateListener#deactivated(ro.sync.ecss.extensions.api.AuthorAccess)
*/
@Override
public void deactivated(AuthorAccess authorAccess) {
AuthorActionsProvider actionsProvider = authorAccess.getEditorAccess().getActionsProvider();
Action object = (Action) actionsProvider.getAuthorCommonActions().get("Spell_Check/Learn_word");
actionsProvider.removeActionPerformedListener(object, listener);
}
/**
* @see ro.sync.ecss.extensions.api.Extension#getDescription()
*/
@Override
public String getDescription() {
return "Author extension state adapter implementation";
}
}
Code: Select all
/**
* Plugin extension - workspace access extension.
*/
public class CustomWorkspaceAccessPluginExtension implements WorkspaceAccessPluginExtension {
/**
* @see ro.sync.exml.plugin.workspace.WorkspaceAccessPluginExtension#applicationStarted(ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace)
*/
public void applicationStarted(final StandalonePluginWorkspace pluginWorkspaceAccess) {
pluginWorkspaceAccess.addEditorChangeListener(new WSEditorChangeListener() {
@Override
public void editorOpened(URL editorLocation) {
WSEditor editorAccess = pluginWorkspaceAccess.getEditorAccess(editorLocation, PluginWorkspace.MAIN_EDITING_AREA);
WSEditorPage currentPage = editorAccess.getCurrentPage();
if (currentPage instanceof WSAuthorEditorPage) {
AuthorActionsProvider actionsProvider = ((WSAuthorEditorPage) currentPage).getActionsProvider();
Action object = (Action) actionsProvider.getAuthorCommonActions().get("Spell_Check/Learn_word");
actionsProvider.addActionPerformedListener(object, new ActionPerformedListener() {
@Override
public boolean beforeActionPerformed(Object actionEvent) {
// TODO Custom code.
return true;
}
});
} else {
// TODO You could add a listener to detect when the user switches to author page and run your code there.
editorAccess.addEditorListener(new WSEditorListener() {
@Override
public void editorPageChanged() {
// Add the listener on the action, if it wasn't added already!
}
});
}
}
}, PluginWorkspace.MAIN_EDITING_AREA);
}
/**
* @see ro.sync.exml.plugin.workspace.WorkspaceAccessPluginExtension#applicationClosing()
*/
public boolean applicationClosing() {
//You can reject the application closing here
return true;
}
}
Alex