Add new menu in CSSAlternativesToolbar
Post here questions and problems related to oXygen frameworks/document types.
-
- Posts: 171
- Joined: Fri Jan 20, 2017 1:11 pm
Add new menu in CSSAlternativesToolbar
Hello,
We use oxygen sdk 27.1.0.1.
We want to add two JCheckBoxMenuItem into the JToolBar provided from createCSSAlternativesToolbar.
We use this code :
in the exf file we have this :
The 2 new options are displayed in the Styles menu, and worked well.
But when we use other menu options like + Show non-breaking space then we have this issue :
How can we add properly new options to CSSAlternativesToolbar ?
Thanks,
Regards,
Isabelle
We use oxygen sdk 27.1.0.1.
We want to add two JCheckBoxMenuItem into the JToolBar provided from createCSSAlternativesToolbar.
We use this code :
Code: Select all
public class CSSAlternativesToolBar extends ToolBar {
private JCheckBoxMenuItem showTabNbspEolEof;
private JCheckBoxMenuItem showTabNbspEolEofSpace;
public CSSAlternativesToolBar(String key, String title, DefaultDockableBarDockableHolder defaultDockableBarDockableHolder) {
super(key, title, defaultDockableBarDockableHolder);
showTabNbspEolEof = new JCheckBoxMenuItem("+ Show TAB/NBSP/EOL/EOF", true);
showTabNbspEolEofSpace = new JCheckBoxMenuItem("+ Show TAB/NBSP/EOL/EOF & Space", false);
}
private void addCSSAlternativesToolbar(OxygenComponent oxygenComponent) {
JToolBar cssAlternativesToolBar = ((WSAuthorComponentEditorPage) oxygenComponent.getAuthorComponentProvider().getWSEditorAccess().getCurrentPage()).createCSSAlternativesToolbar();
JMenu cssMBP = (JMenu) cssAlternativesToolBar.getComponent(0);
cssMBP.setFont((Font) UIManager.getLookAndFeelDefaults().get("defaultFont"));
JPopupMenu popupMenu = cssMBP.getPopupMenu();
popupMenu.add(showTabNbspEolEof);
popupMenu.add(showTabNbspEolEofSpace);
add(cssMBP);
}
}
Code: Select all
<css selectMultipleAlternateCSS="true" mergeDocument="false">
<addCss path="${frameworks}/default/proced.author-desktop.css" alternate="false"/>
<addCss path="${frameworks}/default/comment-hide.css" title="Default" alternate="false"/>
<addCss path="${frameworks}/default/comment-show.css" title="+ Show comments" alternate="true"/>
<addCss path="${frameworks}/default/non-breaking-space.css" title="+ Show non-breaking space" alternate="true"/>
</css>
But when we use other menu options like + Show non-breaking space then we have this issue :
Do you know why we get this issue ?java.lang.NullPointerException: Cannot read field "zxg" because "<local4>" is null
at ro.sync.exml.editor.xmleditor.pageauthor.w.xgn(Unknown Source)
at ro.sync.exml.editor.xmleditor.pageauthor.w.rgn(Unknown Source)
at ro.sync.exml.editor.xmleditor.pageauthor.w$1.run(Unknown Source)
at ro.sync.ui.we$_b.run(Unknown Source)
at ro.sync.ui.we.x(Unknown Source)
at ro.sync.ui.we.l(Unknown Source)
at ro.sync.exml.editor.xmleditor.pageauthor.w.dhn(Unknown Source)
at ro.sync.exml.editor.xmleditor.pageauthor.w$_b.actionPerformed(Unknown Source)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at java.desktop/javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
at java.desktop/javax.swing.AbstractButton.doClick(Unknown Source)
at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.desktop/java.awt.Component.processEvent(Unknown Source)
at java.desktop/java.awt.Container.processEvent(Unknown Source)
at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
at ro.sync.ui.we.g(Unknown Source)
at ro.sync.ui.we.x(Unknown Source)
at ro.sync.ui.we.l(Unknown Source)
at ro.sync.exml.editor.xmleditor.pageauthor.w.dhn(Unknown Source)
at ro.sync.exml.editor.xmleditor.pageauthor.w$_b.actionPerformed(Unknown Source)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at java.desktop/javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
at java.desktop/javax.swing.AbstractButton.doClick(Unknown Source)
at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at java.desktop/javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.desktop/java.awt.Component.processEvent(Unknown Source)
at java.desktop/java.awt.Container.processEvent(Unknown Source)
at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
How can we add properly new options to CSSAlternativesToolbar ?
Thanks,
Regards,
Isabelle
-
- Posts: 9489
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Add new menu in CSSAlternativesToolbar
Hi Isabella,
The CSS drop down button itself is not public API, inside it has its own custom code which at times iterates the components and considers that for example all menu items inside it contain actions of a certain Oxygen specific class. It encounters one of your JCheckBoxMenuItem's and attempts to retrieve an action from it and casts it to an internal class, this makes the class cast occur. I can try to make the code more robust for a future version but it will still not be public API, maybe you can create your own separate drop down styles panel for the additional styles for which you want to dynamically add actions..
You can use the "ro.sync.exml.workspace.api.standalone.ui.OxygenUIComponentsFactory.createSplitMenuButton(String, Icon, boolean, boolean, boolean, boolean)" API to create a drop down menu-like button.
Regards,
Radu
The CSS drop down button itself is not public API, inside it has its own custom code which at times iterates the components and considers that for example all menu items inside it contain actions of a certain Oxygen specific class. It encounters one of your JCheckBoxMenuItem's and attempts to retrieve an action from it and casts it to an internal class, this makes the class cast occur. I can try to make the code more robust for a future version but it will still not be public API, maybe you can create your own separate drop down styles panel for the additional styles for which you want to dynamically add actions..
You can use the "ro.sync.exml.workspace.api.standalone.ui.OxygenUIComponentsFactory.createSplitMenuButton(String, Icon, boolean, boolean, boolean, boolean)" API to create a drop down menu-like button.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
Return to “SDK-API, Frameworks - Document Types”
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ Artificial Intelligence (AI Positron Assistant add-on)
- ↳ 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