From f9a9aefc7227f96aad95f048bb4c35480f151754 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Tue, 7 Apr 2020 18:09:17 +0200 Subject: [PATCH] GUI working --- .../example/comp/StarterProjectImpl.java | 50 +++- .../metadata/CustomDocumentProperty.java | 21 ++ .../libreoffice/metadata/Document.java | 180 ++++++++++++ .../metadata/resources/clock128.gif | Bin 0 -> 7713 bytes .../libreoffice/metadata/resources/cura.png | Bin 0 -> 10802 bytes .../metadata/resources/eclipse.png | Bin 0 -> 14781 bytes .../libreoffice/metadata/resources/webcam.png | Bin 0 -> 30877 bytes .../libreoffice/metadata/views/EditorGUI.java | 273 ++++++++++++++++++ 8 files changed, 514 insertions(+), 10 deletions(-) create mode 100644 source/pro/litvinovg/libreoffice/metadata/CustomDocumentProperty.java create mode 100644 source/pro/litvinovg/libreoffice/metadata/Document.java create mode 100644 source/pro/litvinovg/libreoffice/metadata/resources/clock128.gif create mode 100644 source/pro/litvinovg/libreoffice/metadata/resources/cura.png create mode 100644 source/pro/litvinovg/libreoffice/metadata/resources/eclipse.png create mode 100644 source/pro/litvinovg/libreoffice/metadata/resources/webcam.png create mode 100644 source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java diff --git a/source/org/libreoffice/example/comp/StarterProjectImpl.java b/source/org/libreoffice/example/comp/StarterProjectImpl.java index 912c44c..de058c8 100644 --- a/source/org/libreoffice/example/comp/StarterProjectImpl.java +++ b/source/org/libreoffice/example/comp/StarterProjectImpl.java @@ -1,11 +1,29 @@ package org.libreoffice.example.comp; +import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; + +import pro.litvinovg.libreoffice.metadata.Document; +import pro.litvinovg.libreoffice.metadata.views.EditorGUI; + import com.sun.star.lib.uno.helper.Factory; +import java.util.Arrays; +import java.util.Comparator; + import org.libreoffice.example.dialog.ActionOneDialog; import org.libreoffice.example.helper.DialogHelper; +import com.sun.star.beans.Property; +import com.sun.star.beans.XPropertyContainer; +import com.sun.star.beans.XPropertySet; +import com.sun.star.beans.XPropertySetInfo; +import com.sun.star.document.XDocumentProperties; +import com.sun.star.document.XDocumentPropertiesSupplier; +import com.sun.star.frame.XDesktop; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XSingleComponentFactory; import com.sun.star.registry.XRegistryKey; import com.sun.star.lib.uno.helper.WeakBase; @@ -15,16 +33,20 @@ public final class StarterProjectImpl extends WeakBase implements com.sun.star.lang.XServiceInfo, com.sun.star.task.XJobExecutor { - private final XComponentContext m_xContext; + private final XComponentContext context; + private XDesktop xDesktop; + private XMultiComponentFactory multiComponentFactory; + private XComponent currentDocument; + private XDocumentProperties documentProperties; + private XDocumentPropertiesSupplier documentPropertiesSupplier; private static final String m_implementationName = StarterProjectImpl.class.getName(); - private static final String[] m_serviceNames = { - "org.libreoffice.example.StarterProject" }; + private static final String[] m_serviceNames = { "org.libreoffice.example.StarterProject" }; - public StarterProjectImpl( XComponentContext context ) - { - m_xContext = context; - }; + public StarterProjectImpl(XComponentContext componentContext) { + context = componentContext; + + }; public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) { XSingleComponentFactory xFactory = null; @@ -64,13 +86,21 @@ public final class StarterProjectImpl extends WeakBase { switch (action) { case "actionOne": - ActionOneDialog actionOneDialog = new ActionOneDialog(m_xContext); - actionOneDialog.show(); + //ActionOneDialog actionOneDialog = new ActionOneDialog(m_xContext); + //actionOneDialog.show(); + + Document doc = new Document(context); + EditorGUI.runGUI(doc); break; default: - DialogHelper.showErrorMessage(m_xContext, null, "Unknown action: " + action); + DialogHelper.showErrorMessage(context, null, "Unknown action: " + action); } } + + + + + } diff --git a/source/pro/litvinovg/libreoffice/metadata/CustomDocumentProperty.java b/source/pro/litvinovg/libreoffice/metadata/CustomDocumentProperty.java new file mode 100644 index 0000000..b2efd3b --- /dev/null +++ b/source/pro/litvinovg/libreoffice/metadata/CustomDocumentProperty.java @@ -0,0 +1,21 @@ +package pro.litvinovg.libreoffice.metadata; + +public class CustomDocumentProperty { + private String name; + private String value; + private String type; + public CustomDocumentProperty(String name, String value, String type) { + this.name = name; + this.value = value; + this.type = type; + } + public String getType() { + return type; + } + public String getName() { + return name; + } + public String getValue() { + return value; + } +} diff --git a/source/pro/litvinovg/libreoffice/metadata/Document.java b/source/pro/litvinovg/libreoffice/metadata/Document.java new file mode 100644 index 0000000..ab9cc25 --- /dev/null +++ b/source/pro/litvinovg/libreoffice/metadata/Document.java @@ -0,0 +1,180 @@ +package pro.litvinovg.libreoffice.metadata; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; +import org.libreoffice.example.comp.MetadataInaccessableException; + +import com.sun.org.apache.bcel.internal.generic.NEW; +import com.sun.star.beans.Property; +import com.sun.star.beans.XPropertyContainer; +import com.sun.star.beans.XPropertySet; +import com.sun.star.beans.XPropertySetInfo; +import com.sun.star.document.XDocumentProperties; +import com.sun.star.document.XDocumentPropertiesSupplier; +import com.sun.star.frame.XDesktop; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +public class Document { + + private static final String DOC_AUTHOR = "Document author"; + private static final String DOC_TITLE = "Document title"; + private static final String DOC_SUBJECT = "Document subject"; + private static final String DOC_DESCRIPTION = "Document description"; + private static final String DOC_KEYWORDS = "Document keywords"; + + + private XComponentContext context; + private XDesktop xDesktop; + private XMultiComponentFactory multiComponentFactory; + private XComponent currentDocument; + private XDocumentProperties documentProperties; + private XDocumentPropertiesSupplier documentPropertiesSupplier; + + public Document(XComponentContext componentContext) { + context = componentContext; + multiComponentFactory = context.getServiceManager(); + try { + Object oDesktop = multiComponentFactory.createInstanceWithContext("com.sun.star.frame.Desktop", context); + xDesktop = UnoRuntime.queryInterface(XDesktop.class, oDesktop); + getCurrentDocument(); + } catch (Exception e) { + System.out.println("xDesktop inaccessible. Can not proceed."); + e.printStackTrace(); + System.exit(1); + } + logProperties(); + } + + private void getCurrentDocument() throws MetadataInaccessableException { + currentDocument = xDesktop.getCurrentComponent(); + if (currentDocument == null) { + throw new MetadataInaccessableException("Could not access current document."); + } + } + + public void logProperties() { + logDocumentProperties(); + logDocumentCustomProperties(); + } + + public ArrayList getDocumentCustomProperties() { + ArrayList customProps = new ArrayList(); + documentPropertiesSupplier = UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, currentDocument); + documentProperties = documentPropertiesSupplier.getDocumentProperties(); + XPropertyContainer userDifinedProperties = documentProperties.getUserDefinedProperties(); + XPropertySet propertySet = UnoRuntime.queryInterface(XPropertySet.class, userDifinedProperties); + if (propertySet != null) { + XPropertySetInfo propertySetInfo = propertySet.getPropertySetInfo(); + if (propertySetInfo != null) { + Property[] props = propertySetInfo.getProperties(); + Arrays.sort(props, new Comparator() { + public int compare(Property p1, Property p2) { + return (p1.Name).compareTo(p2.Name); + } + }); + + for (Property prop : props) { + Object propValue = getProperty(propertySet, prop.Name); + if (prop.Type.getTypeName().equals("string")){ + customProps.add(new CustomDocumentProperty(prop.Name, propValue.toString(), prop.Type.getTypeName())); + } + } + } + } + return customProps; + } + + public Map getDocumentProperties() { + documentPropertiesSupplier = UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, currentDocument); + documentProperties = documentPropertiesSupplier.getDocumentProperties(); + Map docProps = new HashMap(); + docProps.put(DOC_AUTHOR, documentProperties.getAuthor()); + docProps.put(DOC_TITLE, documentProperties.getTitle()); + docProps.put(DOC_SUBJECT, documentProperties.getSubject()); + docProps.put(DOC_DESCRIPTION, documentProperties.getDescription()); + String[] keywords = documentProperties.getKeywords(); + StringBuilder keys = new StringBuilder(); + for (int i = 0; i < keywords.length; i++) { + if (i > 0) { + keys.append(","); + } + keys.append(keywords[i]); + } + docProps.put(DOC_KEYWORDS, keys.toString()); + + return docProps; + } + + public void setDocumentProperties(Map docProps) { + documentPropertiesSupplier = UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, currentDocument); + documentProperties = documentPropertiesSupplier.getDocumentProperties(); + if (docProps.containsKey(DOC_AUTHOR)) { + documentProperties.setAuthor(docProps.get(DOC_AUTHOR)); + System.out.println("set author" + docProps.get(DOC_AUTHOR)); + } + if (docProps.containsKey(DOC_TITLE)) { + documentProperties.setTitle(docProps.get(DOC_TITLE)); + } + if (docProps.containsKey(DOC_SUBJECT)) { + documentProperties.setSubject(docProps.get(DOC_SUBJECT)); + } + if (docProps.containsKey(DOC_DESCRIPTION)) { + documentProperties.setDescription(docProps.get(DOC_DESCRIPTION)); + } + if (docProps.containsKey(DOC_KEYWORDS)) { + documentProperties.setKeywords(docProps.get(DOC_KEYWORDS).split(",")); + } + } + + private void updateDocProperty(String propertyName, Map docProps) { + + } + + private void logDocumentProperties() { + documentPropertiesSupplier = UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, currentDocument); + documentProperties = documentPropertiesSupplier.getDocumentProperties(); + System.out.println(" Author: " + documentProperties.getAuthor()); + System.out.println(" Title: " + documentProperties.getTitle()); + System.out.println(" Subject: " + documentProperties.getSubject()); + System.out.println(" Description: " + documentProperties.getDescription()); + } + + private void logDocumentCustomProperties() { + documentPropertiesSupplier = UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, currentDocument); + documentProperties = documentPropertiesSupplier.getDocumentProperties(); + XPropertyContainer userDifinedProperties = documentProperties.getUserDefinedProperties(); + XPropertySet propertySet = UnoRuntime.queryInterface(XPropertySet.class, userDifinedProperties); + if (propertySet != null) { + XPropertySetInfo propertySetInfo = propertySet.getPropertySetInfo(); + if (propertySetInfo != null) { + Property[] props = propertySetInfo.getProperties(); + Arrays.sort(props, new Comparator() { + public int compare(Property p1, Property p2) { + return (p1.Name).compareTo(p2.Name); + } + }); + + for (Property prop : props) { + Object propValue = getProperty(propertySet, prop.Name); + System.out.println(" " + prop.Name + ": " + prop.Type.getTypeName() + " == " + propValue); + } + } + } + } + + private static Object getProperty(XPropertySet xProps, String propName) { + Object value = null; + try { + value = xProps.getPropertyValue(propName); + } catch (Exception e) { + System.out.println("Could not get property " + propName); + } + return value; + } +} diff --git a/source/pro/litvinovg/libreoffice/metadata/resources/clock128.gif b/source/pro/litvinovg/libreoffice/metadata/resources/clock128.gif new file mode 100644 index 0000000000000000000000000000000000000000..73d35051ab1d3dddf01d594f196133d8c3bd6492 GIT binary patch literal 7713 zcmW-G`#;l<XJzAeQ|VD(FY|9R zH!Cvz23u1%Hhwk~`>n36EiEl&W@gUM&wu{9^!xX3PNciOp8nKWgCE_wtn%XeuRjIF zXTy(1TrCRy{rAtKdu4zA{9*Vq<`x$B?x6<-GNS@%Zzd)Z6B47NqgPk|o1LBg^!fAe zUw<6z9hw@O-oJnU?c2AtAM1;Yi=G~yoBto08*mT+oB$)>fB1iz0OY3ND$CPIc9BJmP0lKyS%PsWr;Kyi{E}Js zrL^v}_DpLtxXSgx6ONQ~r4<2J?p`%XPBueHJpLpLbpHQwu}~1&)2xaHEkPj7nC+RaqpWs5 z1{QW(Avm;<1k}*7n`OOq_z@k~kX1~BG-0Vn+(yifbg?9bZq zy>V}*M=`#d0E-<9xzCO+DPPndD=iyUG=pY&v>I66J*m)Hb_JM)&NZh_0yOQ#h%0rL z7zu$h3M;31B1wgz?0>)5gd`qraA6YU#UE8N)YE$}pR%p4cZrAN z_$nxnWs^bpj*$nVJ~#2H(T^&`_a$ukR2P_)EZfC(-4-a3`c2F7NdMBJPvWS;*REkL zYfCuTtu|a_>c>adUP{|ElBQ*pBAKN|@gsBq?e^160);CgxVQ#|1G1R4x`_;|P5_sK zJiKJ_p-f?k2WVMl&Erw*8QcY$LnMD7NqPO~K_z1&ArLeC#};zM&i>XMfD6o;on`b(Sj?x#TuW3m}P_2GssJ zGF!QeI={D1Qcr@}3c)c-n-i{0dq2)W7A!gyYoAD8Y_nL;QA{+qKnpt@g#G`h*sdVP zkfbcFfzzbPHRF~sf>Tnl|8kvv z%$V~-(IW5L8Hc%7)T8I8cvoedGTQr}z8}Rs20dOKO1Q81yb;9AV|@jheZ`eDz($@& zJ;7eV4b%@d@@WDNwT><0^V)kLZY?Qj_zmkMxl29nt+5>frOJm?dvH|kPzLqyW)>c*UTkB2rR}e#XBSSHy%&ks`u%zu`+J+;+;1fZ zAPWE$(VRmT%x;1a8>UJZ0LQ7B(zPb`WdzSG#WomyWCqy~Ooe0OIddZ-C_QMqtzx#5 z#tHyu?5vhLIN=QQBqi&ys3?lL0wEv>)aLo^P{i?_1pSAHxP!7kW-}#9Hx1KCHWv@?g72LpZc1rO0KlapkT{S$#`dvfQ7MU{0hnX4;-rm+ylZ$Rm-1PY0`wIx z-{kmgkWFqz&=fQwHtppNt|nIi!{q^J27rW-_DM_esH#E$Nfb^1QlwgKtUy{t=rZd^ z&$K%tvKf#I`|Qmp=(M(9$eayEYp^^4h5!)l?1Sc3t>p^O13YD25TX>JZvf`!dd6h+ zJTfpVZiunxAD*(fl=(%`(eFWI1b<`ui6}X+W95^z0XIW#mIPB3&{7t*LPfTQ6`GQ+ zGP}tL!b+>^k7j48=02ci=Sjqq%E`mt%=2vgO4240!84MLcz93+fT0^f(4AYIRK$ea zG=ggJw`EKwK;&LJCm1r5&YdVZq51ecs`O}kP7}K>Erz^u(_lR7Ul=Xn%6%nT^L$5YzwGRQ;hitMc)>%ip5c#64AY4igPZYNw@Rb+kptvcIP^_^YB zpoAwC(%@2~PLw=E6g~n!z1Y+Q-#kD(w(5h8&i1=&F7HvFWWxT*2#(Xt$PjIux$T(P zG{-~(Fp_t#3?G0SiVsOt@gOpTCYhX@N#K~K*p+H4uh0W@R9_`*nb;mEn~fU(ul$xi z(|~ybVpQ~7RkznQDXB$r7K(!|>}aXLEs zzuEp!ec>B;OT~S^r9SrIl&MyCQ-p16odlr}T)N1{q7&s0?qng=M#mF$g=%>F+mH4* zUQ<0z}2fjk!ST%D2wf72#OJPwn#FI+a=pLVPHK;(;zXS*)- zq_NADlQaDO1t9rGb|#q(!c&3v>@6J0+n*PA?e9f92tholaSTtU_WWL?0n4M1_1!#N z6jJWvT!BGpRcU>0D>gu#J^gGIV8$sbn-IOOsU%3nq7b{yp%f0 zv{j~?P#R8VLaw2}M~MmQvggu9);8YEr|rid-;LSayK_oYAb=$@*+hR4%+!V|p>Dhh z`d?u}a{4t;uyDEj(o|w9aQ{jn{|2K9p`|uQJ#0hCP@K@y$~i8z-PR+%Q1s8a9!^5 zV8gGDKDo3qg>9+N6=XKz_lOWk8vuH9B1D!!h0D7l4KS$T~MSG)Tj6#&HdtH7Qd zsj_7zKf@{BglG6~`>wzTbjdiUskS{WMtA3#aBmS(k1s&G3MPo&B)BQvADg=w`(ZN< zjuly*u%c(7fB!np`V5m|yJ^#bpQnNkC?>WeW&K^jdq_Zn0xGhPZ=TUh`QQ#wQ$I?6fM?(6Yz0%emaFFgD&mzk5m2gXT=2Tdk zWq7k*%!J2ryLCU$54%d&K)hUvXx3SQZZ}0fqQwSo)uxyVvrqu2B?iB^X6#?zPZn#Z z@U&fpsTq_5mYM7W-kIs03bk7;G#G41u(PeQ z_HGq;J&`5-ngj7cS>*y(<>F)yXJ-mv_6o8YhLTpTTaZy&5ByeaqV{J)oKFd$Pl$a| zPVIj1o)u`;6m_*CuQRT2Q%=CtU;}s@snLbXzxz__;ohaNG zphihP+jt=@JC1We&a7IYu=2vRJNP~<+G%c=DHDXa=RvQu!}3X*jai*9$`(*%{=;c_ zTxob#dC~(cY#MOJ1+kC`YW%}q9)-S@fWcaVd_v_?PRfnY5Q&dmGfALWH}JSuES_m* zjl6hDzkDhjbWSQ4=@)F-Ti}e_66oSFT1R#Mbn;tx_OznhpRh~T1ld4~2)J@Ia|1YB zUin%-up1RP903f(S3%;am<_OYzG^6^oJcAVX-b=s;P_d~hW27d5%i4XMwUNRLWsg} z0U5i(&2%3-tGXx|?v)4n5Uuf)fjAt!2I&b-DN>TcUgmwbO;TGAf9h5G=V0kyO=(>c zJe3#v@C6{tg@FP)jNw_1Wtg9Als^4ZdY3}?T6Xn({ zX4fr-`W&|`zT9Z^TC%mYGdEN;t)uEyAz^c_KRk@4Qf;AmMNX+!-e$*wHJCneXxP?* zzQA1^&L=U8Run7K^TDnI{s(_T@m{&#=#cR!aZCscvO^pABA$l2+hn;g&XMhfY6ETC z)0Jv*Qnen|;qr`Hp=ULc1VlD@>gYw3B&3i?5zC!rAI$4?K6BM`PvHSaZ5DbnfL^*Q z2Inkv7qyk>h`_fb;uiBw63U-)^$qGgg6;e{YC! z&OO4K$LY;GWhw$H>ut^WU<#?gW4_TzV7`2RtEHyYmp689J(A`v0 zn5(-UtVikm$T=Gi5Lh`H;_IgqVaGR|HCV7hB*@G;g(CsleAHJJ7{3B1W@3{`{}`Q= zbik=d3jjkFDhStMPVD$|>_Fapy{utv_x!PJ54&5XP(pY9x0jr$1F=d!OXS#qJT8L( ziY1JeQ+E&(ruEKFly#ZsHtDF#EXBr9kg0wE{`vD7+Z@ zw!OsJ3q@2=N-_8+cp>9dXwARt1wQqDR}HTeM#LC>0(HclmPbNx^gQ)-CRyoPXI#jG z9%gZQzSPS@DsLMGtdfj^Zjo6L=WqocuOahM@A^)pHdSWO^3MHjwbi%Tk|I!_-l9%D z#Ux)Pv#M(t&1huAnh!L%5l&+I{~@$ZopHlH2;Vdn5dKs)ILn?-JjU6w^7GNY%}LcWQcN7riI*!WTQU04 zcP2jW_@$2b5i$FRfc1h4I+O=W^aopkNYP*#=F_2>3y{qnhBXP&qqi3Ngp8Y+?6K*^ zDi`c&L6i;ogC779i0oX4<+vb)BE8KFWj{w!|KIIrwO2=+RQSGLhptEssq>(bfCsXC z*fut1Dmet>e!gq_T`dxn4~MQzp52?${60A)`+9U3J(u!h@QM$yT5!>cSNbBJn9&3K z{<+oL^^Sk!CAMYl<&--sy$Yj+kM8?D0KPs_24GmPn^R z4B*LU@PfTHo-@jSKVDv~x=()el>7TxkkNR^Y5iPh(wO)2H})py${No4RjfeHmznbvss)Q;G_$)||xLUPX4uA>nj^xL}u zbT9wa-#^b?Sl}W;)lL9-;+NBS=UV3pc<(}!| zfMVn69Ie@&*lBxLn0PNBP`ew`!ddr9I_uuB#|AuC@6$Fy2oqoHq$j99PInV0RksJI z3Ew=PRT|24JK7v~{M|_4pBHA*oxu*%C3oM>o&KDN)eui-YO)IL7ZYO^6O|sOy~2QG zo)0ldcatVdIl@N$y_@PPjAy-Q&q$IR3OQi~!gK*hGsex)C*I&-!c~ z;!r6px9a-&i_vX$1F7-ac3W}bvFvfg*RdxPK|9B19Tv)OlNzuZGy4HMC*Y5Mp!#SU z^W~w!GeRx;m;ZS053?1!>2GMD$b)iX_abCV7h#y9L~9%$P%s}@2JU_Oi5_~MCf>aE zPQUKouZ>r}+oe-s{1j~GCAA%m+K!-Dgc9Sn++9Ky{`b+I3qL!af#$g`m*~+@$9{)r<9{4+Y&5SOI(A_t zUDP_FB0pRT_Z;%JVf%Xa%m3sA6EU#fTI89l1a6IKoMQlVY&dcB|k}pJ4X@pHQ70KFNM2 z(NLO|?KW!%AHUq4eu@MwtyIP0GIM5QZF_2KS$j+OZ4<$ug+*f8LB`98H=>!j#s8L( zYZqaENs7qBR*E_@)&a@Eiar6Y)=@_O$v*M+W7d*U?%HUA#lAXblwTb4G=AmAu@fUUBQ0C;Oz_Uuy^PGHMulIjd zUU6RnFbCVT0GOGhJ9~}>9EJ>{PE7s$amM%QRb+wm<@1aB9ktubuQc+5GToF5@VCTA zX8iKhKe(2yEIi08RIl+HX{24tlu;yxdp`JIJYVQmSCk)d>uRmMdVINGbM%Kk2Z5CU ze6CYzdBxiG?ugckrP`u$*Nfd0TeZ7~duP7N45uhQ#x)eH8kC@>U5 zMCO9m&P3(jNz&+791Sked=*@%lMn)Yk8@Nd_8YdJ3m4QK3}EhoeIvoeg9n1ZMpM|gP#}xb3C*o zVhnFkUQ>s5jK7{9i}$0GI1&sSA?iP>1aEipP<~lCGLeoqwH8SLCC9>#>-*$h^xVDI z$U`hds4A|z1jV`R9Ck%Yd;c)a%(Q+S2`FG+1s9ow zdhQ($497*k#r(hr&P`5soI6>PJo0v9%s6wWj?zfWJ11$r#>@mzKhBnz&Di!405KMH zwqEUx11kI8^YV}0LEPj;VZ)u}e8hJU0dPhI3q-B>>i&%wO}`jRMcND5m_;2`b7dF5 z?MyBxesn-}2NwQXPwUq2({_hsg`gBt%S>>bbrr*|OvV5wNN+S;A1Hc?l>7kC} z4oF@s#Sq_7k=O^-`;59FJh>6hXdnFUF0}h)Nkfv1X6oW`Snb*tgc%7)WYuThj0CJC z`$1Kf5K@&70}>`SgOxVhbL(uV&Nkin)@0sIMDFhB^ZD=6f~j|{@ehv~NTGEWw`Qnj z<)A>qyKfUGF>2W7^BOsi%eFrsD<<3f|C7!;NX^8 zLur&?47vX@AGCJ7mFvg`KaZ9?qBHtsL7TI@I}?suicV$LGQ;aAF+D+Tr_QUB1Tl>Z zMLmA~Zry!bCJPfxP(Xu(61?U8i1W^V=M@OFdBTW*qWy7AEy)mzLpcE8HO z6utW}_#A%w#Gan1uUXj8)quHTrJLmvZb=1Sto25y;Kuj=Qf#MT*u)*ZA4uO$x4m_I zwh%=ERK;K_SXGRk75Hm4nS>5C`+v3LWZ3PBVrv#+H9|=!xPT^k?U~;f$85JkErI?f OF-Z38`du0TZ2LcWxBlt? literal 0 HcmV?d00001 diff --git a/source/pro/litvinovg/libreoffice/metadata/resources/cura.png b/source/pro/litvinovg/libreoffice/metadata/resources/cura.png new file mode 100644 index 0000000000000000000000000000000000000000..c311b868ee70bf3007682dcf3c3f7314e78e45f3 GIT binary patch literal 10802 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 OlY#DqbA@N@LjDgw+L_G& literal 0 HcmV?d00001 diff --git a/source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java b/source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java new file mode 100644 index 0000000..5e807c4 --- /dev/null +++ b/source/pro/litvinovg/libreoffice/metadata/views/EditorGUI.java @@ -0,0 +1,273 @@ +package pro.litvinovg.libreoffice.metadata.views; + +import java.awt.BorderLayout; +import java.awt.EventQueue; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import java.awt.GridBagLayout; +import javax.swing.JCheckBox; +import java.awt.GridBagConstraints; +import javax.swing.JButton; +import java.awt.Insets; +import javax.swing.BoxLayout; +import javax.swing.UIManager; +import java.awt.Toolkit; +import javax.swing.JTabbedPane; +import java.awt.GridLayout; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JMenu; +import javax.swing.JTable; +import javax.swing.GroupLayout; +import javax.swing.GroupLayout.Alignment; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableModel; + +import pro.litvinovg.libreoffice.metadata.CustomDocumentProperty; +import pro.litvinovg.libreoffice.metadata.Document; + +import javax.swing.JScrollPane; +import javax.swing.JPopupMenu; +import java.awt.Component; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Vector; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +public class EditorGUI extends JFrame { + //Components + private JTable tableDocProps; + private JTable tableDocCustomProps; + + + //Component models + private DefaultTableModel docPropertiesModel; + private DefaultTableModel docCustomPropsModel; + + + private Map docProps; + private ArrayList docCustomProps; + private Document document = null; + private JButton btnNewButton; + + + /** + * Launch the application. + */ + public static void main(String[] args) { + testGUI(); + } + + public static void runGUI(Document doc) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Throwable e) { + e.printStackTrace(); + } + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + EditorGUI frame = new EditorGUI(doc); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + private static void testGUI() { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Throwable e) { + e.printStackTrace(); + } + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + EditorGUI frame = new EditorGUI(); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + public EditorGUI(Document doc) { + this.document = doc; + docProps = document.getDocumentProperties(); + docCustomProps = document.getDocumentCustomProperties(); + initComponents(); + createEvents(); + } + + public EditorGUI() { + initComponents(); + createEvents(); + } + + private void createEvents() { + btnNewButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + updateDocProps(); + document.setDocumentProperties(docProps); + } + }); + } + private void updateDocProps() { + System.out.println("updateDocProps"); + Vector dataVector = docPropertiesModel.getDataVector(); + Enumeration elements = dataVector.elements(); + docProps.clear(); + while (elements.hasMoreElements()) { + Vector row = (Vector) elements.nextElement(); + String name = (String) row.get(0); + String value = (String) row.get(1); + docProps.put(name, value); + } + } + private void initComponents() { + setIconImage(Toolkit.getDefaultToolkit().getImage(EditorGUI.class.getResource("/pro/litvinovg/libreoffice/metadata/resources/webcam.png"))); + setTitle("Редактор метаданных"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setBounds(100, 100, 1064, 733); + getContentPane().setLayout(null); + getContentPane().setLayout(new GridLayout(0, 1, 0, 0)); + + JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT, JTabbedPane.SCROLL_TAB_LAYOUT); + tabbedPane.setBounds(125, 138, 913, 546); + getContentPane().add(tabbedPane); + + JPanel panel = new JPanel(); + tabbedPane.addTab("Документ", null, panel, null); + tabbedPane.setEnabledAt(0, true); + + + createDocPropsModel(); + createCustomDocPropsModel(); + + + tableDocProps = new JTable(); + tableDocProps.setCellSelectionEnabled(true); + tableDocProps.setFillsViewportHeight(true); + tableDocProps.setModel(docPropertiesModel); + + tableDocCustomProps = new JTable(); + tableDocCustomProps.setFillsViewportHeight(true); + tableDocCustomProps.setCellSelectionEnabled(true); + tableDocCustomProps.setModel(docCustomPropsModel); + + btnNewButton = new JButton("Save"); + + GroupLayout gl_panel = new GroupLayout(panel); + gl_panel.setHorizontalGroup( + gl_panel.createParallelGroup(Alignment.TRAILING) + .addGroup(Alignment.LEADING, gl_panel.createSequentialGroup() + .addContainerGap() + .addGroup(gl_panel.createParallelGroup(Alignment.LEADING) + .addGroup(gl_panel.createSequentialGroup() + .addComponent(tableDocProps, GroupLayout.DEFAULT_SIZE, 940, Short.MAX_VALUE) + .addContainerGap()) + .addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup() + .addComponent(btnNewButton) + .addGap(58)) + .addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup() + .addComponent(tableDocCustomProps, GroupLayout.DEFAULT_SIZE, 940, Short.MAX_VALUE) + .addContainerGap()))) + ); + gl_panel.setVerticalGroup( + gl_panel.createParallelGroup(Alignment.LEADING) + .addGroup(gl_panel.createSequentialGroup() + .addGap(86) + .addComponent(tableDocProps, GroupLayout.PREFERRED_SIZE, 81, GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(tableDocCustomProps, GroupLayout.DEFAULT_SIZE, 368, Short.MAX_VALUE) + .addGap(75) + .addComponent(btnNewButton) + .addGap(27)) + ); + panel.setLayout(gl_panel); + + + JMenuBar menuBar = new JMenuBar(); + setJMenuBar(menuBar); + + JMenu mnFile = new JMenu("Файл"); + menuBar.add(mnFile); + + JMenu mnEdit = new JMenu("Edit"); + menuBar.add(mnEdit); + } + + private void createDocPropsModel() { + Object[][] tableArray = new Object[][] { + {null, null}, + {null, null}, + {null, null}, + {null, null}, + {null, null}, + }; + if (docProps != null) { + Object[] arrayOfEntries = docProps.entrySet().toArray(); + tableArray = new Object[docProps.size()][2]; + for (int i = 0; i < tableArray.length; i++) { + Entry entry = (Entry) arrayOfEntries[i]; + tableArray[i][0] = entry.getKey(); + tableArray[i][1] = entry.getValue(); + } + } + docPropertiesModel = new DefaultTableModel( + tableArray, + new String[] { + "Metadata name", "Metadata value" + }); + } + + private void createCustomDocPropsModel() { + Object[][] tableArray = new Object[][] { + {null, null}, + {null, null}, + {null, null}, + {null, null}, + }; + if (docCustomProps != null) { + tableArray = new Object[docCustomProps.size()][2]; + for (int i = 0; i < tableArray.length; i++) { + CustomDocumentProperty curProp = docCustomProps.get(i); + tableArray[i][0] = curProp.getName(); + tableArray[i][1] = curProp.getValue(); + } + } + docCustomPropsModel = new DefaultTableModel( + tableArray, + new String[] { + "Metadata name", "Metadata value" + }); + } + + + private static void addPopup(Component component, final JPopupMenu popup) { + component.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent e) { + if (e.isPopupTrigger()) { + showMenu(e); + } + } + public void mouseReleased(MouseEvent e) { + if (e.isPopupTrigger()) { + showMenu(e); + } + } + private void showMenu(MouseEvent e) { + popup.show(e.getComponent(), e.getX(), e.getY()); + } + }); + } +}