XML Author - Custom 'Learn Word' feature
Post here questions and problems related to oXygen frameworks/document types.
-
- Posts: 1
- Joined: Mon Apr 15, 2019 12:56 pm
XML Author - Custom 'Learn Word' feature
Post by gergokozma »
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
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
-
- Posts: 1016
- Joined: Wed Nov 16, 2005 11:11 am
Re: XML Author - Custom 'Learn Word' feature
Post by alex_jitianu »
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
Return to “SDK-API, Frameworks - Document Types”
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service