From 7b20b12fc47d67c9ce93c92def725e448434bddd Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Wed, 22 Apr 2020 11:58:53 +0200 Subject: [PATCH 1/9] Update Extension for Libreoffice 6.4 This commit makes the extension run on LibreOffice 6.4. It does not change the actual checking code. The extension shows up as additional sidebar while the menubar button (still) doesn't do anything. - fix compile errors with newer API - fix sidebar visibility - define sidebarpanel in Sidebar.xcu instead of WriterWindowState.xcu - add icon for sidebar --- .gitignore | 5 +- .../docarch/accessodf/ooo/AccessODFAddOn.java | 9 +++ .../be/docarch/accessodf/ooo/UnoAwtUtils.java | 21 +++---- .../ooo/toolpanel/AccessibilityPanel.java | 17 ++++++ .../ooo/toolpanel/PanelUIElement.java | 29 +++------ .../ooo/toolpanel/ToolPanelFactory.java | 18 ++++-- accessodf-addon/src/main/oxt/Addons.xcu | 10 +-- .../src/main/oxt/META-INF/manifest.xml | 10 +-- .../src/main/oxt/WriterWindowState.xcu | 26 -------- accessodf-addon/src/main/oxt/description.xml | 10 +-- .../src/main/oxt/images/logo_24x24.png | Bin 0 -> 8410 bytes .../src/main/oxt/images/logo_64x64.png | Bin 0 -> 12314 bytes .../oxt/{ => registry}/ProtocolHandler.xcu | 0 .../org/openoffice/Office/UI}/Factories.xcu | 5 +- .../data/org/openoffice/Office/UI/Sidebar.xcu | 57 ++++++++++++++++++ pom.xml | 13 ++-- 16 files changed, 145 insertions(+), 85 deletions(-) delete mode 100644 accessodf-addon/src/main/oxt/WriterWindowState.xcu create mode 100644 accessodf-addon/src/main/oxt/images/logo_24x24.png create mode 100644 accessodf-addon/src/main/oxt/images/logo_64x64.png rename accessodf-addon/src/main/oxt/{ => registry}/ProtocolHandler.xcu (100%) rename accessodf-addon/src/main/oxt/{ => registry/data/org/openoffice/Office/UI}/Factories.xcu (83%) create mode 100644 accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu diff --git a/.gitignore b/.gitignore index 1de5659..be874a5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -target \ No newline at end of file +target +.settings +.project +.classpath \ No newline at end of file diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/AccessODFAddOn.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/AccessODFAddOn.java index bad0354..462f58a 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/AccessODFAddOn.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/AccessODFAddOn.java @@ -26,7 +26,11 @@ import java.util.logging.FileHandler; import java.util.logging.SimpleFormatter; +import com.sun.star.beans.Property; import com.sun.star.beans.XPropertySet; +import com.sun.star.container.XChild; +import com.sun.star.container.XEnumeration; +import com.sun.star.container.XEnumerationAccess; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; import com.sun.star.frame.XModel; @@ -38,6 +42,7 @@ import com.sun.star.lang.XSingleComponentFactory; import com.sun.star.registry.XRegistryKey; +import com.sun.star.ui.XUIElement; import com.sun.star.lib.uno.helper.WeakBase; import com.sun.star.lib.uno.helper.Factory; @@ -63,6 +68,10 @@ public final class AccessODFAddOn extends WeakBase private File logFile = null; private int counter = 0; + /** + * ProtocolHandler + * @param context + */ public AccessODFAddOn( XComponentContext context ) { m_xContext = context; diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/UnoAwtUtils.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/UnoAwtUtils.java index c8b24e6..a921a93 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/UnoAwtUtils.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/UnoAwtUtils.java @@ -20,6 +20,7 @@ package be.docarch.accessodf.ooo; import com.sun.star.awt.MessageBoxButtons; +import com.sun.star.awt.MessageBoxType; import com.sun.star.awt.Rectangle; import com.sun.star.awt.XMessageBox; import com.sun.star.awt.XMessageBoxFactory; @@ -103,7 +104,7 @@ public static String showSaveAsDialog(String filename, String filterName, String return sStorePath; } - public static short showMessageBox(XWindowPeer parentWindowPeer, String messageBoxType, int messageBoxButtons, String messageBoxTitle, String message) { + public static short showMessageBox(XWindowPeer parentWindowPeer, MessageBoxType messageBoxType, int messageBoxButtons, String messageBoxTitle, String message) { if (parentWindowPeer == null || messageBoxType == null || messageBoxTitle == null || message == null) { return 0; } @@ -111,9 +112,7 @@ public static short showMessageBox(XWindowPeer parentWindowPeer, String messageB // Initialize the message box factory XMessageBoxFactory messageBoxFactory = (XMessageBoxFactory) UnoRuntime.queryInterface(XMessageBoxFactory.class, parentWindowPeer.getToolkit()); - Rectangle messageBoxRectangle = new Rectangle(); - - XMessageBox box = messageBoxFactory.createMessageBox(parentWindowPeer, messageBoxRectangle, messageBoxType, messageBoxButtons, messageBoxTitle, message); + XMessageBox box = messageBoxFactory.createMessageBox(parentWindowPeer, messageBoxType, messageBoxButtons, messageBoxTitle, message); return box.execute(); } @@ -122,7 +121,7 @@ public static short showInfoMessageBox(XWindowPeer parentWindowPeer, String mess return 0; } - return showMessageBox(parentWindowPeer, "infobox", MessageBoxButtons.BUTTONS_OK, messageBoxTitle, message); + return showMessageBox(parentWindowPeer, MessageBoxType.INFOBOX, MessageBoxButtons.BUTTONS_OK, messageBoxTitle, message); } public static short showErrorMessageBox(XWindowPeer parentWindowPeer, String messageBoxTitle, String message) { @@ -130,7 +129,7 @@ public static short showErrorMessageBox(XWindowPeer parentWindowPeer, String mes return 0; } - return showMessageBox(parentWindowPeer, "errorbox", MessageBoxButtons.BUTTONS_OK, messageBoxTitle, message); + return showMessageBox(parentWindowPeer, MessageBoxType.ERRORBOX, MessageBoxButtons.BUTTONS_OK, messageBoxTitle, message); } public static short showYesNoWarningMessageBox(XWindowPeer parentWindowPeer, String messageBoxTitle, String message) { @@ -138,7 +137,7 @@ public static short showYesNoWarningMessageBox(XWindowPeer parentWindowPeer, Str return 0; } - return showMessageBox(parentWindowPeer, "warningbox", MessageBoxButtons.BUTTONS_YES_NO + MessageBoxButtons.DEFAULT_BUTTON_NO, messageBoxTitle, message); + return showMessageBox(parentWindowPeer, MessageBoxType.WARNINGBOX, MessageBoxButtons.BUTTONS_YES_NO + MessageBoxButtons.DEFAULT_BUTTON_NO, messageBoxTitle, message); } public static short showOkCancelWarningMessageBox(XWindowPeer parentWindowPeer, String messageBoxTitle, String message) { @@ -146,7 +145,7 @@ public static short showOkCancelWarningMessageBox(XWindowPeer parentWindowPeer, return 0; } - return showMessageBox(parentWindowPeer, "warningbox", MessageBoxButtons.BUTTONS_OK_CANCEL + MessageBoxButtons.DEFAULT_BUTTON_OK, messageBoxTitle, message); + return showMessageBox(parentWindowPeer, MessageBoxType.WARNINGBOX, MessageBoxButtons.BUTTONS_OK_CANCEL + MessageBoxButtons.DEFAULT_BUTTON_OK, messageBoxTitle, message); } public static short showQuestionMessageBox(XWindowPeer parentWindowPeer, String messageBoxTitle, String message) { @@ -154,7 +153,7 @@ public static short showQuestionMessageBox(XWindowPeer parentWindowPeer, String return 0; } - return showMessageBox(parentWindowPeer, "querybox", MessageBoxButtons.BUTTONS_YES_NO_CANCEL + MessageBoxButtons.DEFAULT_BUTTON_YES, messageBoxTitle, message); + return showMessageBox(parentWindowPeer, MessageBoxType.QUERYBOX, MessageBoxButtons.BUTTONS_YES_NO_CANCEL + MessageBoxButtons.DEFAULT_BUTTON_YES, messageBoxTitle, message); } public static short showAbortRetryIgnoreErrorMessageBox(XWindowPeer parentWindowPeer, String messageBoxTitle, String message) { @@ -162,7 +161,7 @@ public static short showAbortRetryIgnoreErrorMessageBox(XWindowPeer parentWindow return 0; } - return showMessageBox(parentWindowPeer, "errorbox", MessageBoxButtons.BUTTONS_ABORT_IGNORE_RETRY + MessageBoxButtons.DEFAULT_BUTTON_RETRY, messageBoxTitle, message); + return showMessageBox(parentWindowPeer, MessageBoxType.ERRORBOX, MessageBoxButtons.BUTTONS_ABORT_IGNORE_RETRY + MessageBoxButtons.DEFAULT_BUTTON_RETRY, messageBoxTitle, message); } public static short showRetryCancelErrorMessageBox(XWindowPeer parentWindowPeer, String messageBoxTitle, String message) { @@ -170,6 +169,6 @@ public static short showRetryCancelErrorMessageBox(XWindowPeer parentWindowPeer, return 0; } - return showMessageBox(parentWindowPeer, "errorbox", MessageBoxButtons.BUTTONS_RETRY_CANCEL + MessageBoxButtons.DEFAULT_BUTTON_CANCEL, messageBoxTitle, message); + return showMessageBox(parentWindowPeer, MessageBoxType.ERRORBOX, MessageBoxButtons.BUTTONS_RETRY_CANCEL + MessageBoxButtons.DEFAULT_BUTTON_CANCEL, messageBoxTitle, message); } } diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java index 1b990e0..3fcca8e 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java @@ -71,6 +71,8 @@ import com.sun.star.awt.tree.XTreeControl; import com.sun.star.awt.tree.XMutableTreeDataModel; import com.sun.star.awt.tree.XMutableTreeNode; +import com.sun.star.ui.LayoutSize; +import com.sun.star.ui.XSidebarPanel; import com.sun.star.ui.XToolPanel; import com.sun.star.deployment.PackageInformationProvider; import com.sun.star.deployment.XPackageInformationProvider; @@ -101,6 +103,7 @@ public class AccessibilityPanel extends ComponentBase XItemListener, XActionListener, XWindowListener, + XSidebarPanel, XAdjustmentListener, XSelectionChangeListener { @@ -231,6 +234,7 @@ public AccessibilityPanel(XComponentContext xContext, window = (XWindow)UnoRuntime.queryInterface(XWindow.class, windowPeer); if (window != null) { + window.setVisible(true); window.setPosSize(0, 0, panelAnchorSize.Width, panelAnchorSize.Height, PosSize.POSSIZE); @@ -1421,4 +1425,17 @@ private static String unoURLtoURL(String unoURL) { return null; } } + + @Override + public LayoutSize getHeightForWidth (final int nWidth) + { +// final int nMinHeight = 100; +// final int nMaxHeight = Math.max(nWidth, nMinHeight); + return new LayoutSize(100, 1000, 500); // min, max, preferred + } + + @Override + public int getMinimalWidth() { + return 300; + } } diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/PanelUIElement.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/PanelUIElement.java index f4b5fb1..47d0936 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/PanelUIElement.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/PanelUIElement.java @@ -21,44 +21,36 @@ import java.util.logging.Logger; -import com.sun.star.uno.XComponentContext; -import com.sun.star.uno.UnoRuntime; -import com.sun.star.awt.XWindow; import com.sun.star.frame.XFrame; -import com.sun.star.lang.XComponent; import com.sun.star.ui.XUIElement; import com.sun.star.ui.XToolPanel; import com.sun.star.ui.UIElementType; -import com.sun.star.lib.uno.helper.ComponentBase; import com.sun.star.lang.DisposedException; import be.docarch.accessodf.Constants; -public class PanelUIElement extends ComponentBase - implements XUIElement { +public class PanelUIElement implements XUIElement { private final String m_sResourceURL; private XToolPanel m_xToolPanel; + private XFrame m_xFrame; private static final Logger logger = Logger.getLogger(Constants.LOGGER_NAME); - public PanelUIElement(XComponentContext context, - XWindow i_rParentWindow, - String i_rResourceURL) { + public PanelUIElement(String i_rResourceURL, + XFrame xFrame, XToolPanel toolPanel) { logger.entering("PanelUIElement", ""); + m_xFrame = xFrame; + m_xToolPanel = toolPanel; m_sResourceURL = i_rResourceURL; - m_xToolPanel = new AccessibilityPanel(context, i_rParentWindow); - } - // XUIElement +// XUIElement public XFrame getFrame() { - - // TODO - return null; + return m_xFrame; } public String getResourceURL() { @@ -79,11 +71,6 @@ public Object getRealInterface() { return m_xToolPanel; } - public void disposing() { - - XComponent xPanelComponent = (XComponent)UnoRuntime.queryInterface(XComponent.class, m_xToolPanel); - xPanelComponent.dispose(); - } } diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/ToolPanelFactory.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/ToolPanelFactory.java index 2437c3f..2a063f4 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/ToolPanelFactory.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/ToolPanelFactory.java @@ -40,6 +40,7 @@ import com.sun.star.registry.XRegistryKey; import com.sun.star.container.NoSuchElementException; +import com.sun.star.frame.XFrame; import com.sun.star.lang.IllegalArgumentException; import be.docarch.accessodf.Constants; @@ -88,25 +89,30 @@ public XUIElement createUIElement(String i_rResourceURL, logger.entering("_ToolPanelFactory", "createUIElement"); - if (!i_rResourceURL.startsWith("private:resource/toolpanel/be.docarch.accessodf.ooo.toolpanel")) { - throw new NoSuchElementException(i_rResourceURL, this); + if (!i_rResourceURL.startsWith("private:resource/toolpanel/AccessODFPanelFactory/be.docarch.accessodf.ooo.toolpanel")) { + logger.severe("got wrong resource url: " + i_rResourceURL); + throw new NoSuchElementException(i_rResourceURL, this); } // retrieve the parent window XWindow xParentWindow = null; + XFrame xFrame = null; + for (int i=0; i ~Accessibility Evaluation… - ~Accesibilidad… - ~Toegankelijkheid… - ~Accessibilité… - ~Προσβασιμότητα… - ~Barrierefreiheit… + ~Accesibilidad… + ~Toegankelijkheid… + ~Accessibilité… + ~Προσβασιμότητα… + ~Barrierefreiheit… diff --git a/accessodf-addon/src/main/oxt/META-INF/manifest.xml b/accessodf-addon/src/main/oxt/META-INF/manifest.xml index fe9e76d..91448a0 100644 --- a/accessodf-addon/src/main/oxt/META-INF/manifest.xml +++ b/accessodf-addon/src/main/oxt/META-INF/manifest.xml @@ -3,13 +3,15 @@ - + manifest:full-path="registry/ProtocolHandler.xcu"/> + + + manifest:full-path="registry/data/org/openoffice/Office/UI/Sidebar.xcu"/> + - - - - - - - - Accessibility Evaluation - Accesibilidad - Toegankelijkheid - Accessibilité - Barrierefreiheit - Προσβασιμότητα - - - - - - diff --git a/accessodf-addon/src/main/oxt/description.xml b/accessodf-addon/src/main/oxt/description.xml index aadf8a6..260eb63 100644 --- a/accessodf-addon/src/main/oxt/description.xml +++ b/accessodf-addon/src/main/oxt/description.xml @@ -1,12 +1,14 @@ - + - - - + + + diff --git a/accessodf-addon/src/main/oxt/images/logo_24x24.png b/accessodf-addon/src/main/oxt/images/logo_24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2e380cacb63b1cb463365dd6db90353194a154 GIT binary patch literal 8410 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 literal 0 HcmV?d00001 diff --git a/accessodf-addon/src/main/oxt/images/logo_64x64.png b/accessodf-addon/src/main/oxt/images/logo_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..a9e8fb93cb9d2618c3ef49f1c98bdcb86d89bf25 GIT binary patch literal 12314 zcmV+#Fy+sQP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3*dk|a5fME~s+a|Gi~9*3*Q++dDBPeG5!rLwxE zOFF7D+{4_QMgj_j0_3y*?|;wpKm6qS#wVsybIbYVC$`vp=S_X@&wX`owBPmw<73v!%<^0Kmv~?7zs7&{?eD~Ei=~d|9sJRp$JWP1 zw_JC}ZF`+=GR5e(FT8p`vAeF-P<-<<$OSTgbjOz`w6H?OHxthVF8lAfID2l>^LSY0 z$;)x4cMOK-e*N$H{lY)}@0Wqj5#F48>$k0#mltZ7hCHX=+=WBj`Pej>ecf|k-rs-Z z*nkIEYJ+329f>X8=sZvlEj6(b2uxh2*k(i}%Gj>{#(n zXXZXcKk$G{Px6ad`WQmSIo0dge5W|O*C&53LoYZYg&Yd5X`$n+7*ou|TLnV>Ng>6Q zQcfk+)KbqO$DDG`C5xwe2_=?Paw(;jR(cIJ)>LyXwboX9^DRJQ>1nx@R$FVm^UxkU zV|DKDTo`_Y5l0$%lu<_;eFC2uXPSAIS!bJl`4tuv@T|Pbs;jNO-3CfK?zHnRyY9C8 z0c$6mc+$zIoO;^n-(LH8^;fU`?zw;MHTUtFH%IBd^22LfF6C{keo^;r4T(%oLYMkFFiY?wwp?L|xp!;ZY*6ogQ|!(%Xp{}!YO=}d(QOAZ9$qvPu;6O^9dXhL!nzbn7SERK*k zb3Ncv;}AlprZKyoMSL?tIdgb;4EuL@wHc1EbTm$RuyGD@1%!^Pz5pR1wfY$Lb z#KB12J^cnJX{2BcRyoJ~S`K!SC*HnmDS8aj1rw51u;s!h4fgq<@W})PgVqG#7J)!I zIWi}44i{XKnQ<#a9X>eBm*<7>6OJ{&c;=cBs3S>9KeOcI`kFv`&F*4y;v>lLzJ34x zH9Z9`fH2R9VQOfi>sK;fWaTj?Y->{?*1%=Wq|zQRS`0inx%s$Eo+gz>i~%vWlk;L? z8YM9>2$aMJQvkQ@FtSjhw2&607xo+=1s6SLjiav`v_!Ohls2KT+1xH8ljcV$OaXMD z>EBuw**`8klo8>j8a^HuK@2nrkY3k9np#`g(Hz^BV@3@;x5Gp-aD7Qv!~mItfU*Zi zOfn#Ui-d2acj#(hf$aO-v+_QX5rLTNv9XXt1b`r7Bqd!b0uzqg4*3EKa0!3cM>N)y_FaW zwjP}0m%ai>bD7JC@EEjgVI4ofDVQJqh_x(yo_`TP3cx~z$IT4U6O|(=6O~bkcU(zI zh`p}JvpeLkaDhhh{8JpIa^kXx|Jw+P%cC&bZW&jq5^3Elt@1$3g{94C@h6UvNmX<5+-VK+*3f`C^-z$K7omh zfc2^JI`JC7D38Me+wQPzU)lPwmP6FyohQ5rd| zm)Z9&$Tycf@j|w#CI&L9Y5?m&=@Q9ns7kz7!CfGN41}%DZ`BSrPFYiu-75Vn;F1Ci z7R3QxV~0eDgm=b>oB2*4B>^kRzaDlrw6Wq6Ub$dtMW!>;*!I*Ho#8)un&4#`1_H3L zl<&?;SZ*FyVDTx5bEzk82!FuYH5`O|G>u9UKBK6Lfd7?J8Wv&>#!X<`Pcbo{i%*&# zSLiGV863SRPwyzzW1$KG%$<}0(At?mDv|;ZwPlu+Us$u;VNGXY$|*7zuN{z$2?-sG z%RM7{(yN5+zHrF|g9*-v-ylx(GOTBub&)>6_KXgB3|dc28g4g96Hv4ZIK&dBP;d>4 zIUQk_vIDNSaJrJ5r9qH>`uKRIvQRPY43W=DBAsH0OPt4{qAzt)Eht@2$r@6^Mto6% zr>|<@0iCxT@V6WQIOH?e^|Yeo88lgR+88fBvd;A1>8yzm(2+4mJE1NP$l~D zTci>tt-w*mP?Fk(=L@&A=l67n7$!#G#6l$71o)k|O@JgU)z)zqQ*_^VOdkL2&m1p6 zC_>O@$QWEj#bW3s^NQuM51er)dc%Zm#^HZy^BcvKA+91?_6zF%)??!%Tr zh=f)K7cji4_=L2@S{~n^96jW}aMrMrWT+%`&=ZPeW+NQr)U_4y$#b^Sk+Ql+BETd{ zWgg)TvDIFOay2qBig&JC@ex|lcn9sRSWVNdQW4x#lO#PZrSQTLh;J*V9{y4El^P0s3sOkD5?H8S;NTKuzvCm3bBybkgzua6qWGft6nOCAXP_xeVcD0 z8~5-s=_l6ZVeRCI6IHb2LMdf4F{_l%Z|S+D!xrPFBxOjv5H%ETCaA5Yq4vN4J~C)S zb$VtxcdcYs2oQaYwA~bji>z~o14%HHC{r!=mXB4#`+3nhWRanXkc^Zp7K*JIX{)IK z!Kzf3LLu+@iS$58BTEn!F;csG3irCGj-qlc4(YQ~0yxqpBXkVyj$nVAK3TPLLaeU3 zkZQB@m@Kk^90zC^4{IVQ0bh?qJtWBh(4{Jfm&G!Xpw3J55(3x!>m%w!koC4@YJC`W zs0Tns1{^Ai71ujh@*+TpP+~2201@RPbsY$o7r#`5A@=%!8P4eQBG_09) zeLC_UHw>BVAO`*OEf7r>ZhIs+2+0 zxs+EM4oJ=T~6{|MUh3)D$claa|sSEHupT?+9ff~dAhI7B1htouoQ zcWKLP%>wlR+9GuF?!+-Lkn+GYAaUZVscPalYg>YbnkX5r@_0}zD}O0s70xAQRXD~0 zPTFHp8)N3JP`+C5-VVzU_TB(Mn#9%&9@i1M<7NVOo>*Jx(! z3raxgayCFqwM(2)&k*h)qLa9Riztp+-Bv|r!AP-)2&&5d#KY#N%GeOf} zL6Wu#9yHo~ced{1L(ClaH4h3)YHtjpvNK7D!Y^um4P#!l>M$+tLRC&{#xHB^v{0X& z4|zy=ZBc_o@oX8N&ML|ntNti(#*`{VP4L*NDE^`wA`pf|WFQN=TB#+z(J-{Wd{(9xlu$Y4TLhF!6q-?jEQ*^a`k+>+9R*w z3A7+S(MSYy7a_gD0jY;F|5#nR$*x&?P04tt+wdE(E4)#u(Wgl*aq-Beb4vRZfa(iO zVht(W$BU8D@Cv+6Ud+R$-%zUZgw*RfS`WHmag!QalIdGI$_mxTedIizg>9SCH#!4( z3ZD^qjmi`4NEOqADpi&FY7*YWhVoGTiHZZ+2tWv%RIXmr7N4uzv&e&siZ3K7z25q+;VfXJ5W<&emNO5q0y9K|?0B<&1&wZf>aC54-~rJ84;2>(W<^r$bt$s=NW zqY7!^GT|dYN25ZJ*xK9N4@}Q*Onc`a?=hf2W}hOM<;icP?5&!NPY$Lf={L)W zBxuq{RN;iDr>T?a5ptO9g)FATZ!qZ_tf@qT#4H2?nSnHdIwOWYxNeBcZ&*|Aw9~7} z9O8cE+Y$OS9`gZ5U7MoOXX=mE35l*&0lp||=PhI~IVMPdd<3GBFJXvyP?V`Hqv(9B zEA$nf;S-+4!gDz>*zI?#D=fce?T;b6Z$oQQm@|bAQs5(|+NRS6VD5g!8X%cW#snjz z#z8vw(MT9}?$O0oxw|`7TQVHvqJKm8&!OIDJ03Jlnh5nORr)DUp)UoZH$Trwj_8TpZIkBiy+$LSIhi!|aX zJWdd)V@WkPum{z5gSiH!wDrV*o*JQ}vG^0O-l0l9`JogF*I{avkjrf+gutOD?gXEz z#G_V^HFC!f&F^{()||z0SOGo)JI;11yET$bot5w4toWDtGfDu#Mn~r}2Iw?}HYwK>4x*qkyIz&%RtW6{f zpQ)W6^*4!S>$JDYVqghq3$7;NZg>)1s6b)`N^StMFmtF$oyTdG74e(Dz_F5vn0Jxn zK=y4l7Yf%gTaHbMlUz@TKSOOo_?;LWcqj%;M8!q^i4;LSN%N_FN5#E$YRXfQ_M~yu zsQGGP`~ElyG-_2cRd`t(I3yv*VFx~v?dFiRiKYf&WZ;YLwOu@GeSFf@5@%N!Nu4N} z1}eL|>h&6DDB=jj5tY90hEUOs(Av;h14^ybZ_4iL-P(PHW!6H@c(uvEZ13v$cWrIY zV3%I1sCOv}wHrd=S)9KG4YO;HZQT-r)&{Vn0V!9noyeg+2ZG8%FX@a$)5e`?2c5)F zL-}R_f?TIGUOs~K(JDdPsE9O3rKu@}BM>$}HwpjLBaFmDg8a3`Z2|trFy*<9A`EGs zZLbq`^%C_zid^d5<#~PncC*v=DyGQs?q28oy_0@7(&6mWz1MEjo944T^5c^&)eW^| zsa|OKu+MGDF7#4a!l*w}P1ynltaYo&-&k{px>l_NcaOjHqVrs}d`@M6D}}m9L7`*Y z>e>O*;Rdu2xq%p+l|AW5co<)BAZ9+02|pk+Rb#j}H=W^7 zdC+Igrb`Dkt@h|k($)*hDu_IvbrN7Hl+i5pr?+@Q>4j*&ZB=_H)o)fm34W07~B zj#?xfmz~R~Eg#2`ERAr+qrkxafSk4XdGXY$hLYMZjwqoAH0r07{uAV>&PnayS5!r%FjKpV{AqVvq;g@WP@*IP~y}BPo*&6U?EerIBeZup=p7;VtKW( zQ{1E79*X2%bedr(8#Rv+n>Ix7K}4LY)rb;pz6Q$XLTQA@sN5RB1}RhNiKV%VE2qt+ z@YCiJRi!F7JS=Imt4vK5_*4H;gNRGujSWLao@-}~#BT%H;IT@@`>G+uRqJz_%$m+? zsBxlnPf3Dijag?79GHg@{kj(U-?k}0Sn1tst>JH|_zoibA)cmit3uXyNhOFg_^094q|YaY`*Gz18r^h)E1378bv1|Mw~pD8l$S4 zDf7b>)S^$(;a&BJ)|=j-&S2p=)G6Q{t7+%Kb#?BsF;%o`Ru2qNX%t^lv`IbElpcjt zFdAd-CR*$`r)}_5L`WgXzU7pVYF4;1{=7PUrXvb*J;yMuX#d)%)dphap<8kVpQnfx zMaBRGQz`zBM@)W`H7W0zRpb_Hqn=;ds47{P&fh5gp%8=DLFj>WL8LxNkaolF=j~%V z#iM9RmPag&-*b?HP)35qN;m~X-U-^FaSwGD6(RAlsr9QmSxlZlIU7c$mWQ`;R` zI$4_tb&;x*4&K&XDIkBcY;s13H7da^_8JvJQYrbj#n^@DSBO{XB0SjiQ> zmgG^kFuZeVP#uAkS0~QwFacD+0@s~nBj1eiHUgE021o&btJ)JgtNeB?CJJniNdt=Q zRi-m5y@Bhg8;M-;QqMiJrgoJPtDTG10hW6%Iv%r`Y(&OOE^i&6Bn{q%gmmYv#J=z( zU+DzSIw?mrB_(KXO9*eL>;Ctz2Uq^V>wjY)J7@g-KkgIs)f9xW8vprjzIG}2l zk%&gbbY@lbzru%pbYT<|5;OH!axsOrv0B!&2#c+8*+5=37{9VOB6y;%VZLqH2^c zq+M1xZ*f*j71p>Xe_z=MgV6v000v@9M??Vs0RI60puMM)00009a7bBm z000tS000tS0mXe6r6$va1>=5o#000w3NklWtv15-ji)Vi`Z@t?&AAj8Y-n(yNPsUDCT9IoVzx&?2cklgv z-|t(_?;PNrW;G<|1s?^lle3;?iO^xsqb2uOaBSzW(weZRkB+jZ8) z4QtWXoPpL1FHrCTjZkZ_W-tID2$Bf4C1D#9QW6%HN;p4y3CB*J@yEs{EC_jwq5f?0 znFqfQfPd-$=zZSkga%KYBs;oar`GXVPU{)6iwjqf#OoBQt`-evc8cc4%SQ1KK%h>fM1r>lkwy8Mk9 zfaU}cF*7tXhzO1;(3CbYacK@C&+hZf#nKpoKJwZ#UwY{$4nXfcpSxF({QmmE^~N1{ z++s+>K%pFfIresf;-X6Xs^N(cs2R_77BB###B4v0|0n46jVm6pL>r}Co*PQUE{47~4iA7Y6A+`jV$W9!x}RPhx2 zKt*0n7);3+Uj~BKAu5F>_~jx(&jkqsBt)GF36FD)8g)Pd#mJWe%p_VJ zLVs5ptbEMQ%z~tZG^~bjs8$8dj6x;A+>(dMg$kx}6)cqk6v_cgZivBwwNRR9aenUp zrolUYP#8Tp{g&r|_S-+xoJyxp^!D}l-f+v!hSm(FaoGeXYAje5`^*TJrts;H-GZC0 z>#JS+m5X!u#v=!z>~;vlsu^GQ6z20DazziJx^n4n$(ZQtNa5Jwqw3PcYvZnu>*w}= zxv(0$#A*RZrBmO^q|+Vr2sRF9yV{^A)QpZ$1(5^tF=q4j`|OL5L(~A z<%U}*W5m%Yb^-gfNV*ojv!6>xSUk9;|}s@yb} z_uz$$tvB9kG4#j#-uKz}za;={+qT;xiEs9--^fkP%}`2%(b%~)uwYp;Qv-n+18ZAX zyjOG9!BQ!>*2;|O#R@XnCiJWuV!_6@Zoc_9%{L7|uA}s;2Fc!a8#jr1U0&9}@MUWG zG7y*nH(dE%<o7brY^Z0b$-_W5!Ek_Nih4Vps8-N0^f%>eYzZn&2~{apj= z2^2LUjh$QM-N5tUl?zZ>HGq(8Y#2bP65u;eokytj>pb_h@14f@+{$geRtjDz57z36 z-(d!dZiuel4Pb$Fy?2*Bu+lYG}9d^wkCY$#;(7)=ljg=*r;ILIwYIU<|KJmdM*Or zMc}zmz6%vb`61KRg_bpaR}LjNL}!bQmbNavG&l3>0G_z&K48P}ZYQMT;)bm^+iQDz zK%j=YE{I^60$=*nO)w?l%!O%;PcLG8dI@7wi|4&1zT0Q*nP;jjPgg)#~${siUENx-bF-awz&gf0#oE}A_g;o!7!yjQ_4ijmbi1rIsoe$uCb6W zM_|n4F*db`vFRo3J#qnaQ;UspNQD0G77Pw{;oa*ZLx=hzqdQvDmwmqV-I*1`#S1i= zS~|hZmRGWF2e9YrLVz%wYHA4#Q`!;hITkNs5I`ta0zB~T!?RhZ?E0 ziBzW9cgssZchvw8iQ7_5ZMGBytrM4rn$sq3+}MsAH@0EN zP&;h%@;SCCV`Jy09soV7tM54%Pad7b4}Lt3vDww>A6hdsGg2+>j$1C?cJ)b+u+>hb z>)E~@1C5Ft0fdMhB{#(WQ?od5dKQi;ux))CZrRj<8;07DvafF9S*(OOaC!!hAHIac zXXk4jWmQ63&7l;-cG3Xx)~f_yw_q;zTB%HAF9V?0gHTV3)dUHU00ao30*;-};rM6{ zuCK7JD}&E|bTc|yQdfN7Kxw@2$^xD^GKuHT%)t*d0FG28L5bc24ZX+}0bqumPD8Wq zj}tzxst@SgRnCARrD4{~U83$IR%RN+&6);~07L);Laq?t@VNynmAn-__UM68eDR-; zR3=Sf%mE91Gsxd3izD*e!80DIz$6xP#N}TJOp2)8QKp0WzIhC*(KxtI~ zC>ctEXb>d~iW(UqDDo^(&G0G9JvcT#ALg%}dXsu^HttEglMC{;Ix01^?!!F8GoM1Y8d`XfXXTcKts2BfGrPb&jZ zWdJ26QM7EnQ8k=EHT5{w92kJEvw;XT8yw5buNr{Y45!e?MOLh+O7$f5g-EJEsC9|; zP>9}po`Os;;*CPUkOERtgU1mYs}mtW4c?E=Nk^doQ3rwu2vrCGe7@~`arKj-k=-E) zu@JiD`ho^gt=u(a{n)VD=b{=8fFI~+*(*+7s||rD(It{y;=N3~7x6Vk{0z(A8&V)} zD4lQ#9LwAQ7`6`mR!( z@FYQk(Ui6tXKl;0fvjV!Sn}jDZ(o)L)pHqvUoPf-4L)+!00<$TEiNulwS-l_-5BR_ z0<6j5sDYuhZZKj)r$pMR15k1UJpBE04H^6TcXuOga-Gi04P8EJhS#f7^>f>hATY{H z3xbKCxoQAd7$aJRvRqiI8;r)LBQAibW=c^li2$@l!^7UXslDO)PrW#Uvy%m!9L+WK z7uWST4Ztmrd3hy|i)2?CEwvX5i_l67i^FHH8i0wX|7xCuI5;;op-owjW9E8QAd%<- zXBzH%`*oeQuvy9Dbp|Frk8_d~K+2L> zn3~W+$i1T@f3tW^l9<-|+jE!3LuQ5{McwFXE{OketwO}p1m*^h^|uk)6LWx(nCTA2#oouaivx8PuHvo`l0yuAPj@) z$#K}GjMo3Sy69OKltdyy0tDtp+V0rUT)$?Zu=mt_LxLPRxlsGNWl9Wo8VRp9GJwQ# zgYmkNO_`XUoIt3w=ZngJTr&W3`@dX(=C56N<&-A{U>el00z}}L5sizYh&>}HGVreL zbwOm`OS34sDvs}HoEgjG!linncEeC>LkLiU-VMMk8$^V(ZNM@K7tfyd2>PMfk#7{= z)Vcr*{dL!M)!4<0$T}uSAYo|4h-$wb5g;ncRnPUbNOX5(WA#^K|LI&~c@zW^0{c$Y zli?lPdSM&#b;e!EkDq*(p{6N zo;#aQ)b_?w2O{h}Re#>?1KC<;Z}9fARrl(Ki;QicHDluF3x@+0>NAtwqksR_tqzau z4q54sPK=KS=gyu-XOjadMJ?gQ*&tSl>Y~WnRttS=q6B#0rD-e_{AI=`>pF1kLLPIA zk>+>X*0r_CQ_b*YLVopg%Mj@4aB%jObC{Z#P@(2uzEbah&CBECd%kj(S^w7a&p)rH zrl--{=EQw_ys;^<$*GzsZ`#-v@AF|icP`)H!730*Ix7u~oS2Oj_guL>%VyFiKoL{E{DF36r>SJZPgXv zJ8xB+82=VGqlq2j5;j{^>x7x5xi8HTG;K`Baf{BSKGQ!*=>G1S-4ILC!$@VO(=#?DDBh&Pp zr6s?ut<6iNQvPF)Jr)26V-WP^K%h79yn$W2%-e#%Qc78+QpwhBZBF32c9Y6Df$iB+ zYbRv3&43&~-P!9}gTJ6;_Pw3$t-R~b8;zT`Z$w9H6Z}9SUk*`lLsYyFexMP?_0tdp z(-cVC5*gb-OU8s{2+ZaRICA1u96WR^oL|V14D)-O;KF}f<%LP#(4HxTtAub(&-Mzk zexOn@JtHfuvEJL9@G zXS25Nd5*zsnVKABNsG0%ea>`w&d@z+rtYp*bhb6YG7UI( z)KzM;wUNqb5N&$4Zo ziV*`KrI#)iy_S|1Pf8h#G&T8n^wD6M@x0m)phTjS01ONd8}C)hEEbDqrBbo{&Q6P5 z*UAQg$(*&}1ZEfn77>{W(zF%Kiruv#u)23DnY|vu*`PJIazar|CTs$;5MmM99TmE8 z-126QrM%gToL!(^?>HEHrvQ;o! zw%6ReR>R6NIhklHj$5*{mzTxD43Y0CwWux2(hFKEX&9j}45bW1rL|TnmkTY+3Qf~g zO-)U~2oPdqB$@D3wJBZ6@Hg8BU|GqLHL!+<1)7@)<+4B+62g#f^L?R|qI5bnmHrIdWgvNQ~XVHk{bS|guljEp4dT=lNLO#SD#x)FM#->xQ{ zR(n5Qh4=Uk-s9~C;O)F0m&* A=Kufz literal 0 HcmV?d00001 diff --git a/accessodf-addon/src/main/oxt/ProtocolHandler.xcu b/accessodf-addon/src/main/oxt/registry/ProtocolHandler.xcu similarity index 100% rename from accessodf-addon/src/main/oxt/ProtocolHandler.xcu rename to accessodf-addon/src/main/oxt/registry/ProtocolHandler.xcu diff --git a/accessodf-addon/src/main/oxt/Factories.xcu b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Factories.xcu similarity index 83% rename from accessodf-addon/src/main/oxt/Factories.xcu rename to accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Factories.xcu index 15c0d43..9a15b06 100644 --- a/accessodf-addon/src/main/oxt/Factories.xcu +++ b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Factories.xcu @@ -6,13 +6,14 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - + toolpanel - be.docarch.accessodf.ooo.toolpanel + + AccessODFPanelFactory diff --git a/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu new file mode 100644 index 0000000..6329408 --- /dev/null +++ b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu @@ -0,0 +1,57 @@ + + + + + + + Accessibility Evaluation + Accesibilidad + Toegankelijkheid + Accessibilité + Προσβασιμότητα + Barrierefreiheit + + + AccessibilityDeck + + + + WriterVariants, any, visible ; + + + + vnd.sun.star.extension://be.docarch.accessodf.ooo.accessodfaddon/images/logo_24x24.png + + + + + + + + + AccessibilityPanel + + + AccessibilityDeck + + + private:resource/toolpanel/AccessODFPanelFactory/be.docarch.accessodf.ooo.toolpanel + + + 100 + + + + WriterVariants, any, visible ; + + + + true + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index f51e97f..8d8c244 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ UTF-8 ${project.version} - 3.3.0 + 6.3.2 accessodf-api @@ -59,23 +59,26 @@ org.libreoffice juh - ${openoffice.version} + ${libreoffice.version} provided org.libreoffice jurt - ${openoffice.version} + ${libreoffice.version} + provided org.libreoffice ridl - ${openoffice.version} + ${libreoffice.version} + provided org.libreoffice unoil - ${openoffice.version} + ${libreoffice.version} + provided From 01e776f8eb8c028f6295e59c16489e3990c0e87c Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Wed, 22 Apr 2020 12:22:04 +0200 Subject: [PATCH 2/9] release version 0.2.0 --- accessodf-addon/pom.xml | 3 +-- accessodf-api/pom.xml | 3 +-- pom.xml | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/accessodf-addon/pom.xml b/accessodf-addon/pom.xml index 475f4de..abc7c97 100644 --- a/accessodf-addon/pom.xml +++ b/accessodf-addon/pom.xml @@ -6,11 +6,10 @@ be.docarch accessodf - 0.1.0-SNAPSHOT + 0.2.0 ../ accessodf-addon - 0.1.0-SNAPSHOT oxt accessodf :: Addon diff --git a/accessodf-api/pom.xml b/accessodf-api/pom.xml index 3a9488c..b570f04 100644 --- a/accessodf-api/pom.xml +++ b/accessodf-api/pom.xml @@ -6,11 +6,10 @@ be.docarch accessodf - 0.1.0-SNAPSHOT + 0.2.0 ../ accessodf-api - 0.1.0-SNAPSHOT jar accessodf :: API diff --git a/pom.xml b/pom.xml index 8d8c244..640e390 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 be.docarch accessodf - 0.1.0-SNAPSHOT + 0.2.0 pom accessodf AccessODF is an extension for LibreOffice Writer that helps authors evaluate and repair accessibility issues in OpenDocument Text. From 5df1a8bbc17c8f662aaf982c25a8121d5fe86093 Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Wed, 22 Apr 2020 12:25:32 +0200 Subject: [PATCH 3/9] Prepare for next snapshot 0.2.1-SNAPSHOT --- accessodf-addon/pom.xml | 2 +- accessodf-api/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/accessodf-addon/pom.xml b/accessodf-addon/pom.xml index abc7c97..bf1abe3 100644 --- a/accessodf-addon/pom.xml +++ b/accessodf-addon/pom.xml @@ -6,7 +6,7 @@ be.docarch accessodf - 0.2.0 + 0.2.1-SNAPSHOT ../ accessodf-addon diff --git a/accessodf-api/pom.xml b/accessodf-api/pom.xml index b570f04..e7c0a42 100644 --- a/accessodf-api/pom.xml +++ b/accessodf-api/pom.xml @@ -6,7 +6,7 @@ be.docarch accessodf - 0.2.0 + 0.2.1-SNAPSHOT ../ accessodf-api diff --git a/pom.xml b/pom.xml index 640e390..5907baa 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 be.docarch accessodf - 0.2.0 + 0.2.1-SNAPSHOT pom accessodf AccessODF is an extension for LibreOffice Writer that helps authors evaluate and repair accessibility issues in OpenDocument Text. From 5ebb503c84de1f456cd84f31da8a79258afbdcaa Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Thu, 23 Apr 2020 07:30:25 +0200 Subject: [PATCH 4/9] Remove commented code --- .../docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java | 2 -- .../oxt/registry/data/org/openoffice/Office/UI/Factories.xcu | 1 - .../oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu | 4 ---- 3 files changed, 7 deletions(-) diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java index 3fcca8e..4faf217 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java @@ -1429,8 +1429,6 @@ private static String unoURLtoURL(String unoURL) { @Override public LayoutSize getHeightForWidth (final int nWidth) { -// final int nMinHeight = 100; -// final int nMaxHeight = Math.max(nWidth, nMinHeight); return new LayoutSize(100, 1000, 500); // min, max, preferred } diff --git a/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Factories.xcu b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Factories.xcu index 9a15b06..ec0652b 100644 --- a/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Factories.xcu +++ b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Factories.xcu @@ -12,7 +12,6 @@ toolpanel - AccessODFPanelFactory diff --git a/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu index 6329408..cc59def 100644 --- a/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu +++ b/accessodf-addon/src/main/oxt/registry/data/org/openoffice/Office/UI/Sidebar.xcu @@ -27,10 +27,6 @@ - AccessibilityPanel From 02bb843b4783915a80c43f1d367356335332c7d0 Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Thu, 30 Apr 2020 08:12:23 +0200 Subject: [PATCH 5/9] change java compiler version to 1.8 --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index 5907baa..0ea1d37 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,8 @@ UTF-8 ${project.version} 6.3.2 + 1.8 + 1.8 accessodf-api From 1e702c43471f20d388006f50499c88618d78c826 Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Thu, 30 Apr 2020 09:05:44 +0200 Subject: [PATCH 6/9] Show error dialog if a check failed Previously, exceptions in checks were caught and logged, but not shown to the user. Instead, the "congratulations" message would appear suggesting successful checks when in reality something crashed. --- .../accessodf/ooo/ChecksFailedException.java | 25 +++++++ .../docarch/accessodf/ooo/IssueManager.java | 40 ++++++----- .../be/docarch/accessodf/ooo/MainChecker.java | 70 ++++++++----------- .../ooo/toolpanel/AccessibilityPanel.java | 20 ++---- .../be/docarch/accessodf/RunnableChecker.java | 3 +- 5 files changed, 88 insertions(+), 70 deletions(-) create mode 100644 accessodf-addon/src/main/java/be/docarch/accessodf/ooo/ChecksFailedException.java diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/ChecksFailedException.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/ChecksFailedException.java new file mode 100644 index 0000000..c69a044 --- /dev/null +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/ChecksFailedException.java @@ -0,0 +1,25 @@ +package be.docarch.accessodf.ooo; + +import java.util.List; + +public class ChecksFailedException extends Exception { + private static final long serialVersionUID = 7337389404514647563L; + private List exceptions; + + public ChecksFailedException(List exceptions) { + this.exceptions = exceptions; + } + + @Override + public String getMessage() { + StringBuilder sb = new StringBuilder(); + String delim = ""; + for (Exception exception : exceptions) { + String message = exception.getMessage(); + sb.append(message); + sb.append(delim); + delim = "\n"; + } + return sb.toString(); + } +} diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/IssueManager.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/IssueManager.java index 7d6e3ab..22b2c6d 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/IssueManager.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/IssueManager.java @@ -124,18 +124,14 @@ public IssueManager(Document document, } - public void refresh() throws IllegalArgumentException, - RepositoryException, - UnknownPropertyException, - NoSuchElementException, - WrappedTargetException, - PropertyVetoException, - ParseException, - IOException, - com.sun.star.uno.Exception { + public void refresh() throws IOException, + com.sun.star.uno.Exception, + ChecksFailedException { settings.loadData(); File odtFile = null; + + ArrayList exceptions = new ArrayList(); for (Checker checker : checkers.list()) { if (checker instanceof RemoteRunnableChecker) { @@ -150,20 +146,32 @@ public void refresh() throws IllegalArgumentException, } RemoteRunnableChecker remoteChecker = (RemoteRunnableChecker)checker; remoteChecker.setOdtFile(odtFile); - if (remoteChecker.run()) { - document.removeAccessibilityData(remoteChecker.getIdentifier()); - Report report = remoteChecker.getAccessibilityReport(); - if (report != null) { - document.importAccessibilityData(report.getFile(), remoteChecker.getIdentifier(), report.getName()); - } + + try { + remoteChecker.run(); + document.removeAccessibilityData(remoteChecker.getIdentifier()); + Report report = remoteChecker.getAccessibilityReport(); + if (report != null) { + document.importAccessibilityData(report.getFile(), remoteChecker.getIdentifier(), report.getName()); + } + } catch (Exception e) { + exceptions.add(e); } } else if (checker instanceof RunnableChecker) { - ((RunnableChecker)checker).run(); + try { + ((RunnableChecker)checker).run(); + } catch (Exception e) { + exceptions.add(e); + } } } // Load accessibility issues from metadata loadMetadata(); + + if (!exceptions.isEmpty()) { + throw new ChecksFailedException(exceptions); + } } public void clear() throws IllegalArgumentException, diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java index 4cab5e2..0fe7df1 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java @@ -171,7 +171,7 @@ public String toString() { return getIdentifier(); } - public boolean run(){ + public void run() throws Exception{ //document.removeAccessibilityData(getIdentifier()); @@ -179,53 +179,43 @@ public boolean run(){ reportName = MainChecker.class.getCanonicalName() + "/" + new SimpleDateFormat("yyyy-MM-dd'T'HH.mm.ss").format(new Date()) + ".rdf"; - try { - - settings.loadData(); - daisyChecks = settings.daisyChecks(); - detectedIssues.clear(); - detectedChecks.clear(); - textMetaMap.clear(); + settings.loadData(); + daisyChecks = settings.daisyChecks(); + detectedIssues.clear(); + detectedChecks.clear(); + textMetaMap.clear(); - // Traverse document - traverseDocument(); + // Traverse document + traverseDocument(); - // Save detected issues in RDF + // Save detected issues in RDF - XURI[] types = new XURI[]{ URI.create(document.xContext, getIdentifier()) }; - XURI graphURI = null; - try { - graphURI = document.xDMA.addMetadataFile(document.metaFolder + reportName, types); - } catch (ElementExistException e) { - graphURI = URI.create(document.xContext, document.metaFolderURI.getStringValue() + reportName); - } + XURI[] types = new XURI[]{ URI.create(document.xContext, getIdentifier()) }; + XURI graphURI = null; + try { + graphURI = document.xDMA.addMetadataFile(document.metaFolder + reportName, types); + } catch (ElementExistException e) { + graphURI = URI.create(document.xContext, document.metaFolderURI.getStringValue() + reportName); + } - XNamedGraph graph = document.xRepository.getGraph(graphURI); - Assertions assertions = new Assertions(graph, document); - if (detectedIssues.isEmpty()) { - // Create dummy assertion to indicate that the document is validated - assertions.create(new Issue(null, dummyCheck, this, date)).write(); - } - for (Issue i : detectedIssues) { - if (detectedChecks.get(i.getCheck()) <= 10) { - assertions.create(i).write(); - } + XNamedGraph graph = document.xRepository.getGraph(graphURI); + Assertions assertions = new Assertions(graph, document); + if (detectedIssues.isEmpty()) { + // Create dummy assertion to indicate that the document is validated + assertions.create(new Issue(null, dummyCheck, this, date)).write(); + } + for (Issue i : detectedIssues) { + if (detectedChecks.get(i.getCheck()) <= 10) { + assertions.create(i).write(); } - for (Check c : detectedChecks.keySet()) { - if (detectedChecks.get(c) > 10) { - assertions.create(new Issue(null, c, this, date, detectedChecks.get(c))).write(); - } + } + for (Check c : detectedChecks.keySet()) { + if (detectedChecks.get(c) > 10) { + assertions.create(new Issue(null, c, this, date, detectedChecks.get(c))).write(); } - - document.setModified(); - - return true; - - } catch (Exception e) { - logger.log(Level.SEVERE, null, e); } - return false; + document.setModified(); } private void traverseDocument() throws IllegalArgumentException, diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java index 4faf217..bc9513d 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/toolpanel/AccessibilityPanel.java @@ -34,7 +34,6 @@ import java.net.URLDecoder; import java.io.File; import java.io.FileFilter; - import com.sun.star.uno.XComponentContext; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.AnyConverter; @@ -593,21 +592,16 @@ public boolean accept(File file) { logger.exiting("AccessibilityPanel", "initialize"); } - private void refresh() throws IllegalArgumentException, - ElementExistException, - RepositoryException, - UnknownPropertyException, - NoSuchElementException, - WrappedTargetException, - PropertyVetoException, - ExpandVetoException, - java.text.ParseException, - java.io.IOException, + private void refresh() throws java.io.IOException, com.sun.star.uno.Exception { logger.entering("AccessibilityPanel", "refresh"); - manager.refresh(); + try { + manager.refresh(); + } catch (ChecksFailedException e) { + handleUnexpectedException(e); + } focusedIssue = null; Issue oldIssue = manager.selectedIssue(); @@ -1381,7 +1375,7 @@ private void setWindowPosSize(XWindow window, private void handleUnexpectedException(Exception ex) { logger.log(Level.SEVERE, null, ex); - UnoAwtUtils.showErrorMessageBox(docWindowPeer, "Unexpected exception","Unexpected exception"); + UnoAwtUtils.showErrorMessageBox(docWindowPeer, "Unexpected exception","Unexpected exception: " + ex.getMessage()); } diff --git a/accessodf-api/src/main/java/be/docarch/accessodf/RunnableChecker.java b/accessodf-api/src/main/java/be/docarch/accessodf/RunnableChecker.java index ece00ef..4963d31 100644 --- a/accessodf-api/src/main/java/be/docarch/accessodf/RunnableChecker.java +++ b/accessodf-api/src/main/java/be/docarch/accessodf/RunnableChecker.java @@ -27,7 +27,8 @@ public interface RunnableChecker extends Checker { /** * @return true if the check was successful + * @throws Exception */ - public boolean run(); + public void run() throws Exception; } From d7c3515015ba0ee1111b0d922244018326c60dd9 Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Thu, 30 Apr 2020 11:06:13 +0200 Subject: [PATCH 7/9] Fix graphic traversal --- .../java/be/docarch/accessodf/ooo/MainChecker.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java index 0fe7df1..27df232 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java @@ -968,6 +968,9 @@ private void traverseGraphicObjects(XIndexAccess graphicObjects) String url = null; String fileExtension = null; String mimeType = null; + XPropertySet xGraphicDescriptor = null; + boolean linked = false; + boolean animated = false; Collection graphicMetadata = new ArrayList(); @@ -975,10 +978,14 @@ private void traverseGraphicObjects(XIndexAccess graphicObjects) graphicObject = graphicObjects.getByIndex(i); properties = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, graphicObject); + graphic = (XGraphic) AnyConverter.toObject(XGraphic.class, properties.getPropertyValue("Graphic")); + xGraphicDescriptor = UnoRuntime.queryInterface(XPropertySet.class, graphic); title = AnyConverter.toString(properties.getPropertyValue("Title")); description = AnyConverter.toString(properties.getPropertyValue("Description")); - url = AnyConverter.toString(properties.getPropertyValue("GraphicURL")); + linked = AnyConverter.toBoolean(xGraphicDescriptor.getPropertyValue("Linked")); + url = AnyConverter.toString(xGraphicDescriptor.getPropertyValue("OriginURL")); + animated = AnyConverter.toBoolean(xGraphicDescriptor.getPropertyValue("Animated")); TextContentAnchorType anchorType = (TextContentAnchorType)AnyConverter.toObject( TextContentAnchorType.class, properties.getPropertyValue("AnchorType")); @@ -988,7 +995,8 @@ private void traverseGraphicObjects(XIndexAccess graphicObjects) if (title.length() == 0) { graphicMetadata.add(GeneralCheck.ID.A_ImageWithoutAlt.name()); } - if (url.startsWith("vnd.sun.star.GraphicObject:")) { + + if (!linked) { if (daisyChecks) { graphic = (XGraphic)AnyConverter.toObject( XGraphic.class, properties.getPropertyValue("Graphic")); From 6bc7d1f13b61a5897653f61b95a32d751ba0c528 Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Thu, 30 Apr 2020 14:36:19 +0200 Subject: [PATCH 8/9] Fix detection of forms --- .../java/be/docarch/accessodf/ooo/MainChecker.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java index 27df232..74df260 100644 --- a/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java +++ b/accessodf-addon/src/main/java/be/docarch/accessodf/ooo/MainChecker.java @@ -40,6 +40,7 @@ import com.sun.star.container.XEnumerationAccess; import com.sun.star.container.XEnumeration; import com.sun.star.container.XIndexAccess; +import com.sun.star.container.XNameContainer; import com.sun.star.container.XNamed; import com.sun.star.graphic.XGraphic; import com.sun.star.text.XTextFramesSupplier; @@ -67,6 +68,8 @@ import com.sun.star.rdf.XNamedGraph; import com.sun.star.drawing.XDrawPage; import com.sun.star.drawing.XDrawPageSupplier; +import com.sun.star.form.XForm; +import com.sun.star.form.XFormComponent; import com.sun.star.form.XFormsSupplier2; import com.sun.star.linguistic2.XLanguageGuessing; @@ -286,7 +289,7 @@ private void traverseDocument() throws IllegalArgumentException, if (daisyChecks) { if (document.docProperties.getTitle().length() == 0) { metadata.add(DaisyCheck.ID.A_EmptyTitleField.name()); } } - if (xSuppForms.hasForms()) { metadata.add(GeneralCheck.ID.A_HasForms.name()); } + if (xSuppForms.hasForms() && xSuppForms.getForms().getElementNames().length > 0) { metadata.add(GeneralCheck.ID.A_HasForms.name()); } if (numberOfTitles == 0) { metadata.add(GeneralCheck.ID.A_NoTitle.name()); } if (numberOfHeadings == 0) { metadata.add(GeneralCheck.ID.A_NoHeadings.name()); } if (metadata.size() > 0) { @@ -998,10 +1001,7 @@ private void traverseGraphicObjects(XIndexAccess graphicObjects) if (!linked) { if (daisyChecks) { - graphic = (XGraphic)AnyConverter.toObject( - XGraphic.class, properties.getPropertyValue("Graphic")); - mediaProperties = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, graphic); - mimeType = AnyConverter.toString(mediaProperties.getPropertyValue("MimeType")); + mimeType = AnyConverter.toString(xGraphicDescriptor.getPropertyValue("MimeType")); if (!mimeType.equals("image/jpeg") && !mimeType.equals("image/png") && !mimeType.equals("image/x-vclgraphic")) { From b1678095a27d558b081317af87a3ca2f11c91f1e Mon Sep 17 00:00:00 2001 From: Julian Kalinowski Date: Thu, 30 Apr 2020 14:46:29 +0200 Subject: [PATCH 9/9] Prepare for next snapshot 0.2.2-SNAPSHOT --- accessodf-addon/pom.xml | 2 +- accessodf-api/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/accessodf-addon/pom.xml b/accessodf-addon/pom.xml index bf1abe3..628638b 100644 --- a/accessodf-addon/pom.xml +++ b/accessodf-addon/pom.xml @@ -6,7 +6,7 @@ be.docarch accessodf - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT ../ accessodf-addon diff --git a/accessodf-api/pom.xml b/accessodf-api/pom.xml index e7c0a42..43f0c7e 100644 --- a/accessodf-api/pom.xml +++ b/accessodf-api/pom.xml @@ -6,7 +6,7 @@ be.docarch accessodf - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT ../ accessodf-api diff --git a/pom.xml b/pom.xml index 0ea1d37..59506bf 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 be.docarch accessodf - 0.2.1-SNAPSHOT + 0.2.2-SNAPSHOT pom accessodf AccessODF is an extension for LibreOffice Writer that helps authors evaluate and repair accessibility issues in OpenDocument Text.