From aa1cc3372ebc3402296e116180cb6fb7043d2b48 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Tue, 12 Jan 2016 19:02:06 +0100 Subject: [PATCH 1/6] started implementation of preferences --- plugin/Raven.SQDev/feature.xml | 5 +- plugin/RavenSQDev.Preferences/.classpath | 7 + plugin/RavenSQDev.Preferences/.project | 28 +++ .../.settings/org.eclipse.jdt.core.prefs | 7 + .../META-INF/MANIFEST.MF | 13 ++ .../preferences/activator/Activator.class | Bin 0 -> 927 bytes .../SQDevPreferenceInitializer.class | Bin 0 -> 1044 bytes .../pages/SQDevGeneralPreferancePage.class | Bin 0 -> 1355 bytes .../pages/SQDevPreferencePage.class | Bin 0 -> 4442 bytes .../SQDevDirectoryPreferenceEditor.class | Bin 0 -> 1895 bytes .../util/SQDevPreferenceConstants.class | Bin 0 -> 563 bytes .../util/SQDevPreferenceUtil.class | Bin 0 -> 1273 bytes .../RavenSQDev.Preferences/build.properties | 5 + plugin/RavenSQDev.Preferences/plugin.xml | 19 ++ .../preferences/activator/Activator.java | 50 +++++ .../SQDevPreferenceInitializer.java | 26 +++ .../pages/SQDevGeneralPreferancePage.java | 31 +++ .../pages/SQDevPreferencePage.java | 198 ++++++++++++++++++ .../SQDevDirectoryPreferenceEditor.java | 42 ++++ .../util/SQDevPreferenceConstants.java | 16 ++ .../preferences/util/SQDevPreferenceUtil.java | 40 ++++ plugin/SQDev/artifacts.jar | Bin 639 -> 643 bytes plugin/SQDev/content.jar | Bin 1499 -> 2206 bytes plugin/SQDev/features/raven.sqdev_0.1.0.jar | Bin 587 -> 1238 bytes .../raven.sqdev.editors.sqfeditor_0.1.0.jar | Bin 10975 -> 10975 bytes .../plugins/raven.sqdev.editors_0.1.0.jar | Bin 19559 -> 19559 bytes .../SQDev/plugins/raven.sqdev.util_0.1.0.jar | Bin 14159 -> 15852 bytes .../plugins/raven.sqdev.wizards_0.1.0.jar | Bin 10877 -> 20724 bytes 28 files changed, 485 insertions(+), 2 deletions(-) create mode 100644 plugin/RavenSQDev.Preferences/.classpath create mode 100644 plugin/RavenSQDev.Preferences/.project create mode 100644 plugin/RavenSQDev.Preferences/.settings/org.eclipse.jdt.core.prefs create mode 100644 plugin/RavenSQDev.Preferences/META-INF/MANIFEST.MF create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/activator/Activator.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferancePage.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/SQDevDirectoryPreferenceEditor.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceConstants.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceUtil.class create mode 100644 plugin/RavenSQDev.Preferences/build.properties create mode 100644 plugin/RavenSQDev.Preferences/plugin.xml create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferancePage.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/SQDevDirectoryPreferenceEditor.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java diff --git a/plugin/Raven.SQDev/feature.xml b/plugin/Raven.SQDev/feature.xml index 6add4c03..467d7fbe 100644 --- a/plugin/Raven.SQDev/feature.xml +++ b/plugin/Raven.SQDev/feature.xml @@ -2,11 +2,12 @@ - SQDev provides a set of features to facilitate the development of scripts for ArmA. + SQDev provides a set of features to facilitate the development +of scripts for the ArmA series. diff --git a/plugin/RavenSQDev.Preferences/.classpath b/plugin/RavenSQDev.Preferences/.classpath new file mode 100644 index 00000000..eca7bdba --- /dev/null +++ b/plugin/RavenSQDev.Preferences/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugin/RavenSQDev.Preferences/.project b/plugin/RavenSQDev.Preferences/.project new file mode 100644 index 00000000..bd01d9f1 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/.project @@ -0,0 +1,28 @@ + + + RavenSQDev.Preferences + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/plugin/RavenSQDev.Preferences/.settings/org.eclipse.jdt.core.prefs b/plugin/RavenSQDev.Preferences/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..0c68a61d --- /dev/null +++ b/plugin/RavenSQDev.Preferences/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/plugin/RavenSQDev.Preferences/META-INF/MANIFEST.MF b/plugin/RavenSQDev.Preferences/META-INF/MANIFEST.MF new file mode 100644 index 00000000..f296615e --- /dev/null +++ b/plugin/RavenSQDev.Preferences/META-INF/MANIFEST.MF @@ -0,0 +1,13 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Preferences +Bundle-SymbolicName: raven.sqdev.preferences;singleton:=true +Bundle-Version: 0.1.0 +Bundle-Activator: raven.sqdev.preferences.activator.Activator +Bundle-Vendor: Raven +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.swt, + org.eclipse.osgi +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ActivationPolicy: lazy diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/activator/Activator.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/activator/Activator.class new file mode 100644 index 0000000000000000000000000000000000000000..4092671dccf010d546268d4e25a0989057d5c7de GIT binary patch literal 927 zcmb7CT~8B16g|^!yL4TOf~_K;g0_|tnFoEtm>`I0vLPfuU(IwoT}PMQIy+nWS$;f_ z_}~xlM;Y&I5sZl%_F?Yak2&Yull}hV>o)*T(RNW{*wA7k6P~>v$_XE9Ig(l?q0G1l zjhYCPYQFvJ=E7lUr#j*?jMX@kJXd@i=aEYI_8>Ew-W>N1iULFJAUJ;2+kf5LWtb1% ziizN{NFsh{v`V5ahS{Ao$&5%$U&OhbL5-nVs42v3{w9W@I;CNF99%&#kyM|lM49Id z<<5Ga!P!ZN(nA^7efXGVmAaVxp&T1Ui@LbYuyAR^MaQbS+YyYRBy)u)IEz+uwduR}IB+afIi99B`yt95q+q}ax*P+}~){*+fAFyfl zW0iE4=^rX#5fxM^bBk<-q?35MJ5(ck>8w-sgd(F@>7HTkQ!#pjPLBXUdpl@go^Jkh z2nz)SvyRY2lR6geRspp~75mETZk%DU`vpsvc=bZmGD%uN4R;I7=5+cT({ip*$I2m> z{*KNF*fQMz6TL-R+Jye-pXfEL;Q?{j<2Z(pftWxH31NvH3%8KC8ATW@q(~MDGV+N_dt5dh%@TTMEWuxK zVLR{vd=#Q);>1IU4-uE@uBBhqtE&F>`^QfJPtmlH6WBLuO1=y~jA$y44UNf=?@%bU zuOqEo{fUh1zv!hlH=;*kfakBk|y>e?a^O=onaUmy3dx;bkzQGV)lipok@b)t>h0b?gnvyj4S&1ngemD0iTYPV||v5WUx-!1Lb! z@oEdy<{jwLSjBFp^016+uq~_!G#4des(PxTz{t+&t%B>gAyA%BG=mh7^~S?GvDxhL%sZVPOuJX+}@v^vJ?9GYNal-JdU z97g_FLXF4bDebS|F19Uf2|T`3q6+R|hv|nI`n&bsk(w&$Dt{vTkEQ@cPhJZX!(WK+1#eh?dnUg>1nwif?^RziTO@#^x&0&;xg zm1SwMCixV67WclQ^f`5xStf3vf|XRJ0jynNP2lR;<97_1V_WSTR=;4q*R*fho8NIK skEVU!ewg0om^KO=yUuB=SmO=Z#72r=J;9jaTO6^AdRkV4<8#>i1Ac@g6aWAK literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferancePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferancePage.class new file mode 100644 index 0000000000000000000000000000000000000000..96b02a7cb8f0fc4bb88540f699524ce873fd731d GIT binary patch literal 1355 zcmbVMTTc@~6#fP(UD}mPk(+W^P_ZrA72&~9qaie+Nn3OGu!1-0|}B%=FH5weP_=3_V=HkzW{7uD~%zBmx_0UXNO;FqGJb2)P)kB zBSJgi4O$OARzzn{ctUY^Kh|>6?vpN!6vM_1y!&oCsCHu*c_lp=y=EBB7mgTGyM9e% zFpNj5A~%C3qzEl-~{*HuKfbyu)pmdky;_ zQqpUb3sqk=Y~i>v2!$PXBfBeW4H1QQ>{K=|$YG?Rw7SA|wbbEizSC|AFG|z}jeW|*Jxnu9 z_OVw)=qMTJqzs?(*TUWPTY(?SNR?;!c&U~Znvk_~#WuruReIt>yLBSe zAwO|x0&`XBxO>Ev)aT?f6*XnZuwA{uNMA{aGK0ZYixU=#vwUq+`!h&`uW7)rH292d zX}>@A)t3_@OtV}#GO$ihu84 z!R!o~1LA`t-b(#!%h&%5N}7XMAuz-AZvlpAM`WfoO{Z^2(G8F<{(w=;WqL5H#r51o z54mHKGr74Q?(5xB&eFT@afDS`i^$MwlK&X8n7|Z$vqYtNl8cz3jI(%1@(Jchf_8Bp zJi=o-WyxlZbd0_{3JIDwWTUOp#ayw6rx(dG@$~}1Uc3}6odhEXJjX^H>;<_GVe>DC CZ+kNU literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class new file mode 100644 index 0000000000000000000000000000000000000000..638a4dc99cc4e3221c4c096ea248db03bafd8d2b GIT binary patch literal 4442 zcmbVPU3*hi7Jhdd6BohFWRdEYQC}%vqDDJb?qLpqtVaFL}kz zWG%0h9Cz|Xr(}E9s6hCrU9i0|f%d_nd4bTlld+;`N2h@fL?hTHuqr{IxBx|!Sz(4jjdQ}A3TH!5@AYv6wD6X+;e zUR9=nO}Rf8B@G7*Jb;6wLqnXfmd$d`JK@@ylzG)DQ}cnrsb(ZOwV15$Q&l+z*Pv3Z=LAkR;@r41o9S$h7Qyiiy0b~{D4s%R2Okp#p1~wp zER^%(POh9Uu)M{TTsmoBN-i0B)6Lq2la`%b@#Mm@22yfit6o^JGu}!BGXi^WZ}&jl z3DYy9n8vK^_2)QMSeB}A<_w(09|byD0J@^&R)HOZsY~Xnnar7mZ1VKdB`fV|#nLPt zUxBa=u+d-(gw|f!$6Gc1CtRmoWB~;O%z3U|$d0zASQ(8*@cbR7n%X1vzG&bGSl;Jx zw|tlemXOvpe%5-Kb=iL%{}%Mx$lKbXC)y zYU!2Iu3hwOryy`{Gga3NpfyRgiY8I?-*Wt?%q5HCKQHOYgJN&ZSOHw!fnRDXORHt7 zY6HdX_Y<^TR*K_Zt)Ghmx!;%Q?@j#*8@lB=Q@ad2ld*}@zavaE!`ACjtm3NdnQH>4 zHmKNUj4hd}t0Oya6|We0RZh@w#z{G5hUZ+d25!d8bDVbMq)_^OyP3(wp8SQ=m(``|98U}Xi+>=OBKWJoSgWF_A7Sq8SH`K@>E=dp zL*AEe;BN*#mBQ_=+xc9+mEE|{_nYVLHhvq5{TF@173^7% zFR@Ss`zsjmKgKFJ%)f`_&+oZe2kIjv@P^fa{n&v6d^^Ys(;*eGPdoJk(mft!Qat|f z7#{aSKdL+dqK-YxCGfH%F>4p1=0e~PctW}0-Nbh>%ze_L$;E?#w5u+JJUD#AM~F`v zcEn^(6&$Unr7=7aaM0mnV3pyR@8F+gF+>MrQi@?I!t^?xq99MtBtkbao@l>`6Y_B? zo*Bu!^#(Z+4ytU1f<~DkWV*!6sHMNLyKIUt*leIw*=NF0QLN{@|FfFmY822U5XoT%h z2(17@E%$lW*Yntp3q*GjF}$b{-LL)D5XG^KETeW|4_06+vU!*Gab)>h)u_+dbbJ>X zi%Z7j<5W}7%SM?0>Qgx4w0o22?}JdAf0rV$;ZhH1o? zM*dg(5-Dk;WlV|GPP;8|Q6eq@4`m;xOAiv~&KPAmdL*=t)x~(CKeUFIEBJGNsE$Q9 z`llQhpRxbG2*j^8x@>vfck=Bu6<@wx=UY4NdK3~F|8>0K$8Xt{|4;#%yYfxEMN{eG zZQsQ)!k79sb>+7K-Kt$F8@P&5kj=N0Ztsv!ty@bx-?hLa>rLW$uQnw{)Ndfnnty+x zK5e251^kXr# q!^ahTLKJ_mgU~AeNP}B!m!AUew$*@qu?ZkQ2P~^V1in;ozxow$MnH~E6# zgCF2WIqs8m+CW?7!RbtL&dJ_u?aMm5zkdJt31Ag_5;_>(+G>@Xit{PYt4i7C1#WXw z<4$0`o!4EK_#1PuD z@;r)8L}YZKo1s6en|!}gI_CDFdTelpSk}^1<4Co2v9BG5+!NiQShD}CE@_IzR7)OT zQ+f;$Lp|okA^+@BCCVxlpBA&(e<#TxIo$Of<1H$eJc@#0NX9Tm82YG0!gk9tUE4Ak zrV`1vB*HKq#VE!lj4_P23r5(2!mE_pg%3V4Vj zC1s>A&oFR>ecx-^ATc+!EsRA5^gzLigk^@cw)q8^loqkcc!)yP7%R`N5L?OyEV9v6uf{NxxiHH0bwR$3+xh0 zUC5>geYJr;M3$gg(}^((Ym@?;ppi8hU>d10#i$&QYfMk-OzXrbm_o6IYy;IV%M78; z29QEEB$4{l8q!)FY11nSFnEDyB4SaAbG*95W+$#A&r#_T9U@saE8j}r+2?;L&Nj#BZ8F9$6tFw>9&+=sA!4L4G zjJ+EbV&cV1XR4>Ws;1`s$0E=kl(-X0*rsqb-;_v_$k)w*PW_m|C6UAqSRHWgkCx+bx8KYgjY1Uf(-drn# z9K*qH8pARDnIQ8EM5zmDOYf2)et0xsNK~D%$Rdu_9P(IUC^V!kTK;S#RG*J55x&AP zxi#QQhWM+Q@b0C{aMt)&m=r^{=lIGLS2C2?`78BG7$EjRcIgLWC?km!p>%{YgtH5H rnQkaxtWYh`gce~SdHjOnbF@;T8WMmg)~M#9a}w*=AjGgqHHNKE_1}?= literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceUtil.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..8de4214cd1842c8f948fbe297a9e406955dc160a GIT binary patch literal 1273 zcmb7^TT|0O6vzKtF6m7!MFB6^AOfXI7a5)`;|wCsIM#?$~H^jPJaFV@e{xX)(xZt)|A~LUxp`5>d0e72c*b%D3p$j@^Vi6d-a0Aw1^9+9A(S4-y)lL_#cmJ@O z!ClN5xW{r{ihm)8A8MN)zwQLbl*fG(1=6pq`rekcy(6%Z$apnL622Yynm*}j4)a(r z@Zj1E{n2?m#G-(~s#si30@kI9UX3+Cpfr{RR`(9cRCE$isHti81Th`kH~m1Hjo2Rs zUWc0VS*+lZfwDmHQcbtQkd)5jF;=-C+|UZN6?vY(azB2zajFAKgxe?A!{91-dQIgA zTu~rf4>R1d7aRGER{bEnpIh=Quf}QDJs)sx`JLJoy8EvtgM4 literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/build.properties b/plugin/RavenSQDev.Preferences/build.properties new file mode 100644 index 00000000..e9863e28 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/build.properties @@ -0,0 +1,5 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml diff --git a/plugin/RavenSQDev.Preferences/plugin.xml b/plugin/RavenSQDev.Preferences/plugin.xml new file mode 100644 index 00000000..516ba28b --- /dev/null +++ b/plugin/RavenSQDev.Preferences/plugin.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java new file mode 100644 index 00000000..c280ff0d --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/activator/Activator.java @@ -0,0 +1,50 @@ +package raven.sqdev.preferences.activator; + +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class Activator extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "ravensqdev.preferences"; //$NON-NLS-1$ + + // The shared instance + private static Activator plugin; + + /** + * The constructor + */ + public Activator() { + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java new file mode 100644 index 00000000..7c50e82f --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java @@ -0,0 +1,26 @@ +package raven.sqdev.preferences.initializer; + +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.eclipse.jface.preference.IPreferenceStore; + +import raven.sqdev.preferences.activator.Activator; +import raven.sqdev.preferences.util.SQDevPreferenceConstants; + +/** + * Class used to initialize default preference values. + */ +public class SQDevPreferenceInitializer extends AbstractPreferenceInitializer { + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer# + * initializeDefaultPreferences() + */ + public void initializeDefaultPreferences() { + IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY, "main"); + store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, "documents"); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferancePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferancePage.java new file mode 100644 index 00000000..54edf8eb --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferancePage.java @@ -0,0 +1,31 @@ +package raven.sqdev.preferences.pages; + + +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.IWorkbench; + +import raven.sqdev.preferences.util.SQDevPreferenceConstants; + +public class SQDevGeneralPreferancePage extends SQDevPreferencePage { + + public SQDevGeneralPreferancePage() { + super(); + + Group armaDirs = createGroup("ArmA directories"); + + createDescription(armaDirs, "Here the location of your ArmA folders are specified " + + "(The program folder as well as the document folder)"); + + createDirectoryPreference(armaDirs, SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY, + "&Program:"); + + createDirectoryPreference(armaDirs, SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, + "&Documents:"); + } + + @Override + public void init(IWorkbench workbench) { + setDescription("General SQDev preferences"); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java new file mode 100644 index 00000000..c7e71572 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java @@ -0,0 +1,198 @@ +package raven.sqdev.preferences.pages; + + +import org.eclipse.jface.preference.FieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +import raven.sqdev.preferences.initializer.SQDevPreferenceInitializer; +import raven.sqdev.preferences.preferenceEditors.SQDevDirectoryPreferenceEditor; + +public class SQDevPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { + + private Composite SQDevPreferencePageParent; + + public SQDevPreferencePage() { + // create the main page with a dummy parent + SQDevPreferencePageParent = new Composite(new Shell(), SWT.NULL); + } + + @Override + protected Control createContents(Composite parent) { + SQDevPreferencePageParent.setParent(parent); + + SQDevPreferencePageParent.setLayout(createDefaultGridLayout(1)); + SQDevPreferencePageParent.setFont(parent.getFont()); + + initialize(); + + return SQDevPreferencePageParent; + } + + @Override + public void init(IWorkbench workbench) { + } + + public void initialize() { + + } + + /** + * Creates a composite for the use as the container for a component that + * should be added to the preference page + * + * @return + */ + public Composite createContainer() { + return createDefaultComposite(SQDevPreferencePageParent); + } + + /** + * Creates a default composite with preset GridLayout + * + * @param parent + * The parent of the composite ot create + * @return + */ + public Composite createDefaultComposite(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + + GridLayout layout = new GridLayout(); + layout.numColumns = 1; + layout.marginHeight = 0; + layout.marginWidth = 0; + + container.setLayout(layout); + container.setFont(parent.getFont()); + + container.setLayoutData(new GridData(GridData.FILL_BOTH)); + + return container; + } + + /** + * Creates a group for use to add a group of components to this page + * + * @param text + * The text the group should display on top + * @return The created group + */ + public Group createGroup(String text) { + Group group = new Group(createContainer(), SWT.SHADOW_ETCHED_IN); + group.setText(text); + group.setLayout(createDefaultGridLayout(1)); + group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + return group; + } + + /** + * Creates a default GridLayout with the given amount of + * columns + * + * @param columns + * @return + */ + public GridLayout createDefaultGridLayout(int columns) { + GridLayout layout = new GridLayout(); + layout.numColumns = columns; + layout.marginHeight = 0; + layout.marginWidth = 0; + + return layout; + } + + /** + * Creates a container with a label on it for providing a description + * + * @param parent + * The parent of the conatainer + * @param description + * The description text + * @return The container with the label on top of it + */ + public Composite createDescription(Composite parent, String description) { + Composite container = new Composite(parent, SWT.NULL); + + container.setLayout(createDefaultGridLayout(1)); + container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + Label descriptionLabel = new Label(container, SWT.NULL); + + descriptionLabel.setText(description); + + return container; + } + + /** + * Creates a DirectoryFieldEditor and packs it into a container + * @param parent The parent of the container + * @param preferenceName the name of the preference this editor should work on + * @param labelName The text of the label that is displayed in front of the editor + * @return The container with the editor packed onto it + */ + public Composite createDirectoryPreference(Composite parent, String preferenceName, + String labelName) { + Composite container = createDefaultComposite(parent); + + new SQDevDirectoryPreferenceEditor(preferenceName, labelName, container).doLoad(); + + return container; + } + + /** + * Adds an FieldEditor to this site and registers it + * @param prefEditor The editor to be added and registered + */ + public void addPreferenceEditor(FieldEditor prefEditor) { + // TODO: register preference editor + add respectively + } + + /** + * Adds an FieldEditor to the given parent and registers the editor + * @param prefEditor The editor to be added and registered + * @param prefEditor The parent the editor will be attached to + */ + public void addPreferenceEditor(Composite parent, FieldEditor prefEditor) { + + } + + public void addGroup(Group group) { + // TODO: add group and register Preference editors + } + + //TODO: implement mehtods + + @Override + public void performApply() { + performOk(); + } + + @Override + public boolean performOk() { + return true; + } + + @Override + protected void performDefaults() { + new SQDevPreferenceInitializer().initializeDefaultPreferences(); + + updateApplyButton(); + } + + @Override + public boolean isValid() { + return true; + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/SQDevDirectoryPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/SQDevDirectoryPreferenceEditor.java new file mode 100644 index 00000000..a7c6e60d --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/SQDevDirectoryPreferenceEditor.java @@ -0,0 +1,42 @@ +package raven.sqdev.preferences.preferenceEditors; + +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.preference.DirectoryFieldEditor; +import org.eclipse.swt.widgets.Composite; + +import raven.sqdev.preferences.util.SQDevPreferenceUtil; + +public class SQDevDirectoryPreferenceEditor extends DirectoryFieldEditor{ + + public SQDevDirectoryPreferenceEditor(String name, String labelText, Composite parent){ + super(name, labelText, parent); + } + + /** + * Sets the text of the editors textControl + * @param text The new text + */ + public void setText(String text) { + getTextControl().setText(text); + } + + @Override + public void doLoad() { + // load path from preference + String path = Platform.getPreferencesService(). + getString("raven.sqdev.preferences", getPreferenceName(), "", null); + + setText(path); + } + + @Override + public void doLoadDefault() { + String test = ""; + } + + @Override + public void doStore() { + SQDevPreferenceUtil.getPreferences().put(getPreferenceName(), getTextControl().getText()); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java new file mode 100644 index 00000000..cdc8a4ee --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java @@ -0,0 +1,16 @@ +package raven.sqdev.preferences.util; + +/** + * Constant definitions for the names of SQDev plug-in preferences + * @author Raven + */ +public class SQDevPreferenceConstants { + + /** + * The name of the preference holding the location to the ArmA folder on the local disk + */ + public static final String SQDEV_ARMA_MAIN_DIRECTORY = "raven.sqdev.ArmAProgramDirectory"; + + public static final String SQDEV_ARMA_DOCUMENTS_DIRECTORY = "raven.sqdev.ArmADocumentsDirectory"; + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java new file mode 100644 index 00000000..ab66f570 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java @@ -0,0 +1,40 @@ +package raven.sqdev.preferences.util; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.InstanceScope; +import org.osgi.framework.Bundle; + +/** + * This class provides functions for dealing with SQDev preferences + * + * @author Raven + * + */ +public class SQDevPreferenceUtil { + + /** + * Gets the Bundle of the raven.sqdev.preferences plugin + * + * @return + */ + public static Bundle getPreferenceBundle() { + return Platform.getBundle("raven.sqdev.preferences"); + } + + /** + * Gets the preferences for the SQDev plugin + * @return + */ + public static IEclipsePreferences getPreferences() { + IEclipsePreferences preferences = InstanceScope.INSTANCE + .getNode("raven.sqdev.preferences"); + + //check that preferences have been found + Assert.isNotNull(preferences, "The requested preference can not be resolved!"); + + return preferences; + } + +} diff --git a/plugin/SQDev/artifacts.jar b/plugin/SQDev/artifacts.jar index 2ca719efc1e91a5e1ee66504439598fd2cc72b1a..ca845f85b0a6417ba83799b2a9b17bb79fc1b468 100644 GIT binary patch delta 572 zcmV-C0>l0P1cL<)P)h>@6aWYa2mts>Dv=E%f0a#d8Zi)t@0I!=d_Z+_s24W74X8`G z^#`=cIdawmn#yZC{vZLwf3FwVkBX4CQCe}sGoE>89$tBi*;6IS60Ae5rgX%Hlz=L= zK((0C+ncW+$8`4P{kvkut;abp{Wmb$q1SfRFRKf8_iUF|yn@)n2=0M=M-PP4H7X*wkEZt=uL?h6O5@3^pjX zcZ1D=$(H@#wp-zMI`^o!U7e8FCyx~VynFvo4m%I9IdC8Bsih9t7q=>shU)&5W8tWGO*0rIs&2G4~)~$%04Ov)6Fv=|j60ZT6gBS})gkTfbz($)}d!e{*F* zKPsuY__b`5kMp!wcjUD?)F{3lz$31?74AG4q{Hhp`}Yh$)X$8Ir}_TpdD0jSC)fFZ zqj9DTCV4)28wMwzsv{(ChN9i6)XIbMH}T8Zt`^@oi6!?@Ct0I;4V?69{8wzcV|}4W zx^Hki{sd4<2M8}v6)x`q001Tk8vp=MO928D02BZS2nYc9N-9V%P!%rk0RR9dlS2YF K1}*{s0000tCkUbd delta 568 zcmV-80>}M>1^)yMP)h>@6aWYa2mm3aCXo#ze^twF+b|Hk7wA9mV3f(Bl;v8nh067< zAJ8V}fDzZm78J?w;lwul@1#~TqbVCw0;<#k z)pAB}uD^bq()pM7?}|CM9v8gy-@s^xUfXpaRs)~**)FYk1+j(^+ynWJ9w_l^6GPfA ze;Je#jROYv0hNAaX2co>*41DRDwLo;xfcwI?hJvFdtowrg=(})6h~^#)5MoTCBGL4v-@0`q&35ZcJ3M>FQJ4l?@We z0;LB#qZc1yGoQ&tDY;Ye<9)Wk`f)f34TTg+gg_!D|d;JVTsBmgDr~P z?O=P*WXFDR+l}x$o;y_Bu1`?xlSd4HUcLX5!;=Tt0=N(M)KG`)i&GUzqw0RySf&v< zYejA{q}LMdDN6~88MS-`in)6MD;7M;p1p=oo<5X&(Pq#2rS)>XxAn_-m|wLDe?A8j z`awy}#jmh*oMw3scjUD?)G)qYfCt=gE8LlCFq}>%|6T(S^)=(-YO()3S2glU_TSVv zQw{R$txm@6aWYa2mts>Dv=E$f9r4CI1>MU!2J&d4p=vUE5~Vin@f`` zlvrtmb?mI{G#4E1gDlZDTS-(&DzCqOht$K8t=N|BIJq{9Vr!9{-@M3~;iE^N?|l#5 zV#Wy#j%!VAw}x=wP?rRw@JHwW7R1|9#iW^7utYmX!hAzl_nAtdcv zpljp^^DOi2Ih7klX(t^Xad5zKxnq(}6fqJne-7(ES@say8-FCBAPE2ie~%6tzRkh) z4Mpl;&4DUUutf$S{_{+Zo$zgzGYP z+ra~Z*u{Z>4unktC>bEie>=cQjuc~n;dChOY=&X5i(vXwhrnESkxQLOMtNIJ4Omd% zqjyrv-+n|?eCj1+@z;)G=VIGKBv7_U`_UcPn??e`Diw^Vc~OT!ju*)SChPWyPZC~| zTp2>;pNNAlQsO%Dq2?LNzp+vd5%drDgPbsB0nf;<9ZT&}Mc{+gB~K^97v%U8f6^-h|l>@ck~5tP?2H=t-~(!#X{O zPyNJfoBf+QIy3tniFpQ~I=a-YzIl4p)-7~-WnFfA2C#1de{9F>oLRudxG*|>4Y)!Z zGQPqG>YeNDwqm7Uf%KM=@3eb)W0_yh`{=yeZW+*cVt{1&N!y57fl{Y!-MpxymVTjs zF%(r7P%Jepk?#83P))#3hd-x%v)hqsoOU~X3qI?hrPa?!ug#uON4jP9q(RQCF2GB3 z0!3GW0A0t3e^I2VQNcGbM1EiOjEO8QLvI6CPZH+`YxzK&EQ4GOPGfCa*fwNkJGaWk zt}Nj>d=2BDb86i0G38q39#oOx>L= zi&p@2C`4cu1#&~XVd#jY9@;SQHz-}fH~3y;z#p`KX?rUHmrSUfxHFSz1##n=d2I{i z1&svps!I9IzO^;@`Q09sD}V1`wZDDZT}O>{KCicn$tzbqy8l0KWPCdyLnu0@w=yTn z8t;1#fBt|%M(luh4$)k*eBw~fd05ckP;E3-0hPdfjnz6t%3zz{A}yb!S5D0@o{)`1 zju%VEAD<;1KUWg2j=L}(l>jew5VRz4A>dWzvE{nqpTBtB@IgD!_I6)c<&X#FcVe3< zev66tE&b+<@ye5KdPYBDGzw=Nhce-hYeU=Pe|T{+o&sDiCC?j!yk2O+t6-H|$?ka3nN#j-U zS2_x)?s?2<#2j4x+@+%LVa+@@i#y7`4{+d&pOulCUK{7IU|ZWvbLjt`hgbRO_Oo#< ze-y0G$>@$e+RWXKDGRS2O8FHl&Y6b-^1tej1>&?c1D2Kj?%bWgR0$qLo;PQQ`*z#? zcH8}S+x>Ri{dU{^YHqt#(9z=U?$jZPw%dH~+D6(!9QSs&68P4EUioBn%h&5G9-nJo8S3jiP;tRrc-_LF31;Fx$M$+3z z|BD09FH`{}#&{)90OFsLLQaJApS8m0UrZ4L+k0Gd0Kq6ISsO9%h}007Ww9UcGx delta 1440 zcmV;R1z-A}5!(w5P)h>@6aWYa2mm3aCXo#ye_LU|{z_bDjvqn2uX<yK~nEVJ1F#l_rVBos=|A{ZDkwURiv{&)qr3`5EU7*hrk zjFz&XWL_q3Dnxi;+qZ1)kJ#LU6C$Q^1PQexP3$JJ)URg5#Vix@Nk=J%R0?wnf3Byc zap^C|MGv}>WF8`CwRj?}M8CSLW7)>KlF~=pu+jsnL+oRcxZY`u+3 z+j*^pndrqcL8UVdsmh2E(u#;te?B2=LX$&zqcUctVcJbhI(jEnT3-AKxWx}cYfi#Y zWxT?#0MPy|%(HV7^CI)lb0*tGZ5IO`ad5zKbzqV~AQ_3bKUe!d+4d?s+kYgfAV~lt zkB)2~aTR(yn(AQatK_YcNQ>zOPsBNoa1hFoNBC6j3mK^V0mKx85AQyMfA_JMT@|!I=hSnTyW~E=~qF znOw-eBwMMSGCwr{bf_X%e0y0*I zu;rTK_sAP3*AM=PDn|TMMdt#nb<1n6&Ke#TG`NT=z8`j^e=ObIG=Hntvk`-KPd8KOCe>OJstJ56dNs471=*SiYC*jwVww=K z34Wu)ym{m?r;<6?ymMk0d$nhFE#i){+Yt_&>DC2pI5u`uj{0vmvZ}ksJCj-{2zM#y zj?58r_v6aK^w_-7Al)$pG+Fe^|FO|4~fAqXHC&=e(9k8-^jp`K` z*L6#$0oduDIREq?=(?8xws7szu%wI%CP%HbN&I5QL2IU3ZZs>G+E+`p&JmS~rR|=p zaZ-wtY5N1xa#B7>tMZFh;<5B8D0MGqC3}zr{dc0rV|le>RY2ON>E^iK*lQd+ygg~zKiKm%Qo|O6 z>1!NYQnh(2V~=mj9MvV#<{kZns5NoMkz69hAN35q5YqoKP+$KCP)i30wnR3AO9cP` uCoup3P)h*<6aW+e2nYxOA*CirwnR3AO9cP`Coup3lV=Dq28aa!0002oq@Ym% diff --git a/plugin/SQDev/features/raven.sqdev_0.1.0.jar b/plugin/SQDev/features/raven.sqdev_0.1.0.jar index acf49d7dedf3c2ec04f26f101a0529963297c8c2..dc394a3ab3e5b378caf17e54b3c5d9613ef4db72 100644 GIT binary patch delta 1184 zcmV;R1Yi5h1l9=+P)h>@6aWYa2mts>Dv=Exe^ya%+cpq>H_-oZ(8G`bikxN`&~^3- z#g=2Cw&Y22vpmugZL^_7g{0ypzkWwbcARbl91IvL7_fP~`|i8%&ZGvPzLgvvsZ>l< zL+8DB=>V;AQLt(=be7rV;)C<)_jkR)niAbe`mP7|Va3pqh^li4j32lMxdJnIFfT9}28oC-3XaQ@IGtM;86!ew?)5Iv*rIN0mU?WMTY2m_JQfeg2w?uBJYZN2Z6V%vA3=k_#ScM~k+UA(Se|YLG z!YHxUJ0dAM7eJH}IYWgDC`8^EZHaB?nsIExnW^HZheqh%(k`rBo!fK;B^+2~Yu)d| z4z(1G25h31EH`K_I_11E1AEx!tYlp-6K(~tU2hcDVi>zn;*77&H?;+J61z|^1HEcA z8kI3xJzY~#AE!Z4&J6-iLR<9>}AveZUe-HB!M?zW`ZC7s0wB(QXku9la+X+wwAWPmC#7FrC?f7zx21;Qd@%DSF{rh^P;@u zs2pk1D~%(-Q2Sa)oA3KFJCckT33G`2rof4B{^X}rt; zeG@;*?jW9kAKk&{FdDlM{JBViG=(^UaK4y@0ouZ7G+U0t=mxGaE{bueL!4%W&tfpC zJE$;74cI(LMpIn+*WoP8?p&CJS!6IL2SiF!3CsKe>StJfBYq~Pb|Mtytqrkn`s8qcs35ucpV@!|9Td*sj#Tg%n#=- zjQzQP6WFL2Q4;IcvAdlH)`a#kB9YSxzG;qOB!qf;dNn(UI za$-bmK`<@~S`;HSyy^|QnDsIZUbu_{e}-782|jk-A8g&k9}YE1e;*o#f4IZ3G+?Ef z4XAmuVR)(wx$$VuS*@toFsFZ#V=i!#WP_tt(i1}(=283)2&tTxE9GbJgLid_w^m7X zz8yLniHAIuu?!v>!cRp0injsvH2tPuA^+-K{Wn~-(-3&f$bM=pifRa}tbLa}FjKe#;JV-=oLod46- zzr1bW(^NId?}yHsaMhB18#!F9+n+xs%|002-+0Rj{N6aWYa2mts>Do9eklL}4*008R>lNJIm28RRy0001YlP}o- delta 528 zcmV+r0`L9S3CjcxP)h>@6aWYa2mm3aCXo#te^uLV)G!czuhf6A{J!>5UJ6R+3sgdY z5KunAv1gNE9XmU=cdPw+yh%1qxk#yyQ2ms-opWY9R*IYZ*0McNK<`TaLaaFhr@cW} zm;C$P?dqD}yt%w6HlSi6xV&KfK~r*4dvGG`4D9*YZ&d}hj{o$u0CEE2%4~qxsWBwm`#k`Ybm#MY%4liQDbaUCD6;BO`b{z;NE5x zPeg zqBXy&!N9sySqu#rmRxR|#Rk}?_jl~$f50~?8rdf`1iOR;VZtl0?VIUrsxc4MQ!U1( zL_#hXC2CI~D7lC&EG$VVz+m(g_`{996xZTvotLInQ8y*8Deno;XL`3w$}U9yu~B(u z5$@w7MEg9I z9q_2g{Qui6R8Ta^hvVfJG;WpZQMtC1s-{xL1 zJqTl;ggrY*dXoYZ#6(u5FtENjr7kA0qh71ngK1q=6EK~kY6>=Qj;bM;zMyIjrn%H0 zPVrL<0P`2B*@NlFYMx+PUp*d7PgG9=)8Et+!E}@cguh>-6U_J4Oa;@MH6y_^zg7sC IPSdIc0PQw!y8r+H delta 315 zcmcZ~dOwsmz?+#xgn@&DgF#`b+D6_`MrI&AIhD~2L~owQC<_tT$7Bqa_`+lfrVW^# z!3xTl?U}#=J6IjT^dDAlu!I*|Ju8@ThMS)m%(%z5lLf5g47btdGs648`Zo89=|LF# zB<$Hi(wh{RASSXZg@N_ODRn^vUaQ!H_3Nsdfaw%fQ!qV8)euZyP&EhBTxt-f_^Abe z`3uz``W~x!g8BOD@nCwQdJ>rark)6@@kf%N1AMl&!ylkqF_Hz0o^lQEb+&SVLu znVB6y^k#Qv1r9JHi(7#i%;@Di$OvWx3K(#K7?ab?R5!1bDu77K$oaE?MGGucCwIE@ zZC~3r5UAdR0SRbL7GxHmJj+9D@?4EoV10oCs+;pQuQP$|@YG3T#?WI5 z(zE%xeh(X1O`6$GOmpSH=00V^x82mzZp`M8x2SU}8L0^%@3`(B7`2OZ0q zz@cL8Vh^TkT};6A78g^HmdS5i48gR5t2vmCa%~Fzw+M4W^g5MS^K2 z_dqZm<{ky6H@ioGX+DoIFrDrZ3a0maK-5cn27~#9o(W+3iYG+BhLMIbiyycOC#p?Wpkp delta 510 zcmaDpgYo$cM&1B#W)=|!4h{|mg{5j6c>@@kf%N1AMl&!ylkqEQezy(&DW~RD%rBne#T1L*F1uR-%p*p$Kop19( zB~!4#=9_A5jDkQjJs6OH)?`6u@yWA1#3s+xSOwM>D4@DIU-LQ>*fLL@G-eDvrXW3= zuj}`)fz_m$?Zh-!4s33;7uV!K3mLGo0*er^nUjxO`G5t)tR)~0Gqmr8*mlsd9HPY9 z#U7+&a;=LAnBL-I3Z~z<7=md9S935ONHERh9tftx z+@rwsX7>m%&F2vYrqew_!SsF)h&!dnecvDVe!uVD``vTTch2wEAHI53z`>f6OB?_O zg8@t{HIe`r$jP>32r!NVH-A~x67aVr!}g>6v6z@BKYy%NupcHIs}&K2_QqU7YX$}f zV42b68XIvRVV`F`FSYAPerUhIz!;3<+``_S=e(+)MSuT|F}bjvyZHqB>cbMKOI<;89fH~SHtz4o7PF|u;T5H#adn|1L4 zE9qw`YnFHAwS<~odPzH9h?-_qWpho*mI*|A7L;M)27y9spwXtXw}_B;Xu)2!je%?i zj(HzCqJ-5{lxJje@ub{CZ@`@C880%)kPJ!y(PcfNCgNRu>#UX8*_VAxiN8=VQRFca zsTM)5A=e=8Z-p>7%C_zAzYJ5WD5aKG6qQxz#UiT-sZ|e~n+uYglPi*wZ;{LH7Zu&4 z+@bUaM7m@fU1febuD48o?IQqiu;$?d#||xDw*~?L-av9H=cAuFcdXP1DoXGp>!qZB zWb>5F4=s64$(`c}Fjh4_0&uFcz$51p>=o$fMnwmXt8?}|Co=|3#8bWkDpS;CLizRh zI)J?IDTqg!KB8`22ogXFSXFbb)>4L2@9G;2QV7qZkT3=xZ7}oEB|AC8_|oE!{JXkx z-rGv>?_w`L*#v&&IZ@oN4>Q&Xoa`1CSX$Lzr^XYPn%A55nXGS%s=os#1=^GcypS#$ zrLDLqLrmqai)Yh2VkE7etV^R>f%8naOP-^5rECMA;Lw{TIapA;R0-h;%nuF)&g|TI z+5MY=QB2tC2Qxau6@4n#%hJ=%$uA)E${b^RB;W5zZude5WbI6p#e33}BM^s4ursyJ z*>dLOik1U%Ee=~7n1PS!7Kc&uDm1m+af?taDTudYsJOtb08Xp-7(=Eg_V_A()2o=j z81(R5gO3ZBT~Vvxgm!;#&QrXhZ{zc1i|>Wg+nP@H*uC)wdvS{HgOcr=*Lvfe!+v=cQmhW{uD+lNC!ej=8*S zQP4}b!iP)dQo6GGfUaJh+BwIs zgbnXuo$KqUE|?z;_Nno&NaIx8I-hLSe1*tTgzH4+vYt?YZ-)k|)G8@`Sf;fQ-68W# z*evS(s{=wzQABq1`y9%m8lEzJ=jNh-$IvFHYRJT0+Z?S4>w1{~yuoybMAvh)Wcl6R zn|`|Ge70SB3YeHJ)30%zrPoJfEn31QZxkb7TAA^ieKF}vFX*S@e{s>k-P54vFq$vE z4Wk`oxO*fX@H7<*&sx8Uu^ml>-v3Rr7XJ~6m$#sYH-$@(+x+7MV4F4lgCZB zzlI_q*Fumo8PmCaX^+?Y51=CUOE*V!ir#RX6#9;m8}1-w!-YFhvUA`%(XGx4h80Be ztgPj!GofSZWjLf_k2zC(`C%@W(>;O`@J(UU()_`}XQ9D_F=f&87F*eQR(iw9!5E7w zuNSR5{kvz+Z^5Wk37-^d^q~JqUt&>{W^=Ek_yy5LVcu<3QG>_~dmAxyK^OGR_sPYE z4i_+(H)XN2Z~f`({+=>(F`}8rjAiJhS!1(wEs+fq25w(8TPs3yA96bQSemlk7oNh| zoqeavYKGzo29OOQw2&`_JHIYz5U&hr$_n~viI#5(t82;&dYi{7RDbXYWtzvKd;PTR zpRY&3L@(t!)bxr)!OLH_XHR^1W`@ekOt{^u>alp`IQ&?s+0?ecrz<`fhp(rTjglN~ z2r55mWXa=BhnWP#hMS@LHc_I3nGWXWEoSGyWA!RRe+)>s>sQIA$__FVQ8r_8x9Jin zRO6jrrmVM(+IFO^FP(PUL``2eoEMTI$>fL`C-d*zU=z zT+uu$9=KHEn(xlEU^x?A(bZi*W%$#3|K+^S#w1c>22I@`_ZP=F3^jIvo2~W~U-Wbs zH`$Ia>D`e#c1mvK+hd`~BE*1BL`$`&BRO%c$~#&&ggvn0XEV0NlFnQkd~Z9bL9eu+ zxGrk%7w@$vH^>MFU;ObhWSYXGy~_{dYQt1CHo_voR{-^ovxXSTaV!}g)^H|g8?Jrc z#NVMcV1syKZ{`~@nRQEo4q^c-7rUp3inry43h_N&;vu6GJZC2GEJ@&+$iCB6YDy(; zKep+X)N0`Mx!6_X*1)#JF1yb>5}`Lt7}--cCD1oI&guMvd@9^5$?{Y3^?vDlDqo&I zEzdgOWAh%^gP>4H;06Fz_yKGl1agQ2{wq)jws4a}fkMcF@8}=ulOGfb037O*A1jUX z|Ed*2w5}$HG>A~7Yrx?OBFyTl9PuL`LIzr`%+B(?>>sZ6_m>Ze*90NMv8YV&Ku8}2 z$Fq+LDufLsD4`m`e+0F#p`b%Zg8)YI%d?Y? zVh)?~x!K*z|097Lc9=j&L&_XgUJjCwhynosf_wmg(mw(}suS9fx<^5OpXAT~2&z7D cRLx39MAE?;#2z*PAk5z8TmZmr{lnA00o<>jWB>pF delta 1009 zcmaD;eLjyjz?+#xgn@&DgF$hr+D2XuMrI(rS%R^GX|oFJR3&EFrD~J+s2hXnPwJLn zT2I3TL~kzDh++~1GCUZNfZ$|BZIQ`ev}C|agtZ?qf*Id*4zq$a?=dp2uMIk#ciBP2 z)?8ox;L?}My1CAmKV-?M>`4?)2gp|9$&>I-KGA#li{7CQ62rZ}p#dFM77TbJnkBm7uCW zbMD@7Yz(j#HGb&dD)-y{aImCGOZ_G0rJ>F)8#(U}2z3=Y~7sQFgxP z+l;Ez+JZeJ-nKW+kn8rCSusyXMOak0?DzlK3%v`P4X&PC=+V@f@~3Y1|MVq1H)GFK z?9~d}@GRl$deKd*x=XKc_FYo``Rs-2!hihddJ-=mHO={WE_mhflSkg=a9it1?eJSs zf8?dXHgg`|^U*3sFP3%NZsB;UaHTU~*7qAb?|e>BTGVLczmzZKy7fb|GnpmP3Cbep zdqiyZU3E3;scKp3sMHkR{^)DW-B$`eiyiF3)KeVMn=h5HWkvy&T-&+qkbSDvrC zQMb%)@t>2^R@Y3++0>(5vrDq!t>>Ny+-X6Qm$iVP|iGd-&n~_O`0iL)#f}eCGodl+o z!pW;GO+m?Q@?*=dlNGJyCV#Wyo9t_?$8>~wa;>$7IV?#5%>V;7C=H>c)fgCx63bHa z^pPz9rPDjs(l&u`+2X>K)G~B6;G_yOR~*IMUbV@#8j_QJYu7-#X znq4U72%?x{s5$wfjl2TL6Y2$h%2R=%!N$zMpn#&NNOST-E#b+g+Wh=zCQo*>m1YXn q21`rmiegxd9KuQ{W=b1^HQh536btZX1qT{G13$xWpyhVPAe8_!K~~KG diff --git a/plugin/SQDev/plugins/raven.sqdev.wizards_0.1.0.jar b/plugin/SQDev/plugins/raven.sqdev.wizards_0.1.0.jar index f76e8c8d90f36cc5584f02b61d39693bfeeca66d..1480200b94c50ba79a6d9172002a14bec4d13d96 100644 GIT binary patch delta 13402 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 delta 3881 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 Date: Sat, 16 Jan 2016 13:42:00 +0100 Subject: [PATCH 2/6] Implemented custom preference classes --- .../sqdev/preferences/pages/EStatus.class | Bin 0 -> 1506 bytes .../pages/ISQDevPreferencePage.class | Bin 0 -> 198 bytes .../pages/SQDevGeneralPreferencePage.class | Bin 0 -> 1676 bytes .../pages/SQDevPreferencePage.class | Bin 4442 -> 7806 bytes .../AbstractSQDevPreferenceEditor.class | Bin 0 -> 9009 bytes .../DirectorySQDevPreferenceEditor$1.class | Bin 0 -> 1958 bytes .../DirectorySQDevPreferenceEditor.class | Bin 0 -> 7626 bytes .../ISQDevPreferenceEditor.class | Bin 0 -> 1385 bytes .../util/ISQDevPreferenceEditorListener.class | Bin 0 -> 252 bytes .../preferences/util/SQDevChangeEvent.class | Bin 0 -> 807 bytes .../util/SQDevPreferenceComposite.class | Bin 0 -> 968 bytes plugin/RavenSQDev.Preferences/plugin.xml | 2 +- .../sqdev/preferences/pages/EStatus.java | 63 ++ .../pages/ISQDevPreferencePage.java | 13 + .../pages/SQDevGeneralPreferencePage.java | 35 ++ .../pages/SQDevPreferencePage.java | 206 +++++-- .../AbstractSQDevPreferenceEditor.java | 566 ++++++++++++++++++ .../DirectorySQDevPreferenceEditor.java | 359 +++++++++++ .../ISQDevPreferenceEditor.java | 183 ++++++ .../util/ISQDevPreferenceEditorListener.java | 15 + .../preferences/util/SQDevChangeEvent.java | 23 + .../util/SQDevPreferenceComposite.java | 71 +++ 22 files changed, 1481 insertions(+), 55 deletions(-) create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/EStatus.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/ISQDevPreferencePage.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/ISQDevPreferenceEditorListener.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevChangeEvent.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceComposite.class create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/EStatus.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/ISQDevPreferencePage.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevPreferenceEditorListener.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceComposite.java diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/EStatus.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/EStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..c749b4758030353ca473bd69ab10535aeb9005f2 GIT binary patch literal 1506 zcma)5ZBr6a6n-uX3*!0`DWYgup~7mSrIv!IIaH3QGm z$?0=Hs_ES87Bt!nANKA&_de%2&w05&e|^0IFok6=Tns~&R@KdT`FKaK#*Zw0SGRPt zpqJxET9MXt*4FGw*$X#A`@UAy;w8;2#?xlyfWft~$}o~?iXp+^NpEg$Y%+M?E^V%_ ztiNJ#?-{1e5XjV-v$kcJMMAfx*SFRpxuwijI?E7!-*gyXvQRQi!%i_s(O8b6EFbRZ zK6w0~Pzvs%i$P90kYMy?@ReAug|I;d9>_j;xzVe@%MBkl`W5&f^W8lKtxy;`GKQ(I zR}Qvy>y5Tu(s@#c1+A3REQ8zP&<_a#A09D)YZ+27j1j6wS+`${LUi9EMr2^`8D#<% z{{Xw9v753v=a_=W7^nR7fis?q4<&st|CmMqPC9WsJr=2F!pFONt1^uPL+p9P)W1Pb% zy{u6*>7`h7HQT_(U6V~}OeGd4sV@?}PS0X5pFM#7GeR*{dxn8e zMB>7ITJMnnPzXOdX$_zULG&Sn2>LNX5(Wj5qv>HeG8QNao<^HG+JAuuYT)5HB6Z4k zaTy`)!$dG5C=_z#VWJ{Sh8R?bEJxJ*F07KabBumO2kk;)=V2%6XT(qFS`uonsV7Lu z6Vf@|Kpl3dCk2)TiIZNR6C*`2Ty!C;qhAoOEA@-hdFn+!aa4k zW(dub51wKmzbdI$`6RFMniRgo)EJj~U09j$pl?u|fH>xma5z-L@LPX?sh3Fp0Qi2Vqt-a_I6Z7RB;P)fR%56zFHJC1ncC4lE7{&O z#tO^EJ7QZEZO7CX6dxOZ$pm=*MJUYDruUY2Ma2q>e>1Dkf-n^ZqLF-tq!y1bc>~C* BIl2G< literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.class new file mode 100644 index 0000000000000000000000000000000000000000..0854b9e8a5699764dc3693c37aadc0baaacba920 GIT binary patch literal 1676 zcma)+U2hXd6o%hP0x`znV@qg5N;0@K*lywlOj8=Cl@OtTs@zd z9XJ1|x4j8cEAMn3-isYNd`cl173_|7cX@9fa{~81;`HP(f%Drs)baNMvz6+;z}(}= zry^!?p@efdFL1e~L;7jZJ0SB?9Rwucv?5Oh`^xBKo-fYDU2O%nS|1@{>I0g5ccMgK zrP7K_$0aY&eM{~@yU$-m=GOxT(QQ`u3%Dw3k=5jjSx2!T&ZxQ0c6OP1mtvYyfX zSVy72Vx{#~9V$0aVaMHzjSf4h$4>>WJTkpU($|K(I5L`S;%KRa8(0>&=owNmJvGsw zFVL9gWkRzZ#_mx29g3}+9%>eFQ{e404yTN}Bm+j6NRm-o9z_Eq)7#ro;FGaZv6bzU zr`wu*S$W9^`X=fa)svZtR8|ft2$DW==SSY4M`4_ASEWqUua+QjOWhIlIT?-QD71Azwmd4Qql9>x=Oe!y zuHpNt7FeFhtI3iVC?pYLh5W&+P8g0u&FV~`xX1P6(GRSE&CmWZ>&Z`mTa15}KVV>n zNBrY)JI}KQ_k#O#wRb4|nQj-kEwUM~fH_>kMIMzhBkmV?#y<`&bDKE$gWJUMR?WF` z45#K?KgMT2*4CZRkFoNq_BYC}o!icuQ(1q9+A%h=m3vOZ`8r=Yxpg!3?y$IPJi3lW zEb+f|11ng@Z64pjO|0|mE>>}$YkrgG-}2KEg)&o-D`Y+R1`k=|0yfxYD}8p8?Pjq3 EKRg)XH~;_u literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class index 638a4dc99cc4e3221c4c096ea248db03bafd8d2b..df7bb9512f1e7ea021df3e4a52a317d293f4ac58 100644 GIT binary patch literal 7806 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 literal 4442 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 TT(8BLzPbRP8yS*-dei>{+^2qT literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor$1.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor$1.class new file mode 100644 index 0000000000000000000000000000000000000000..d3fa654ea1cc994c47044510be5f8cfd44d81e3e GIT binary patch literal 1958 zcmb_dZC4XV6n-vjSquxt7uwoteSu;U!L6;Wv=LiMu*N178;Hek!)8oIm!0kI67{F_ zXY`yl*m_Ps`oUk+57gtG1tAdXrz9u4Gk5OGbDz2Q=GE)J{{e6v4{Qt&?na_512_J) zA=_>k$%itMfhXgx^(&;Mk`|7mxPlQ?FqjwB4zfwLd&F0sPqlpkHo(peTt2M%L^Ya{Z))$FOG@~LdiJVCgW%RwNc1z*ImjB$Zy;~@X5P&R7@B(DbeXJeS<$9Of%dn3sd zuKdZ5EjYiYI>(JHJt4OH7g^prY-6M+aFXAIQ#ifr0s_RoS5F1bud5OL1}5`B}R;Nrh^|0ia{6@Qz_1E_WvL6 zw{eO=6o@cO7UpOO^E8YyWm1HN9Td9=84rJdOp)F|1y#;x4x?DYPwab{eUD*a8?!dX ew~@7RkEJ!14qyeV{I<9V>saGehJBda`SS+iL@D(E literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.class new file mode 100644 index 0000000000000000000000000000000000000000..9910b760eadd601a294face2ad1825c22274718b GIT binary patch literal 7626 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 literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.class new file mode 100644 index 0000000000000000000000000000000000000000..502bd0e1f8de03c9004c43e40ca987cacd6a9544 GIT binary patch literal 1385 zcmb7E+iuf95S=Y0Ati-eT5jP^Tbu$lMF<}HQYj50A`(SLec)|tPtuJXJ9yVA{2C8@ z03U@IPqw+ysPN+B*_|_UW_MS20A9mx9+m{`Cvu39tG@;~bO#A`Fu}-2J@wxV zl!+7Vw!BXVI6NHtjMnq8ETGhrL+OSx>bf6~d*~Yhxgho^w17)a{R^AzSO#n!30Mu{ z%sjx3OhfW6k~f;MnOFKqhKk%*aVW!78f-;_lpG5hjc24uwSaA>y->aEQVq?K=U$yM z7P=E+-Kqa0lLU-;?^Q$s)`&Z))-#EUx_bi3q-%0Chm>Bx+l%zgpJ+y7v1Lj+AMMSB zqR$N{pfVH8qq`(+yA&->x-R;m8fbKT9qHrLrMs<3ex^{3m6;lCpjXa+#>px-Da#;eoX|XBTWNz_=lL8?KOQ1SKHCtG_c;?y8(rq2iQ*Le z0*rJu>De$Gbj6F)#K(6kq`s=nH{s}&*vUpFCxA|l9v^@jJsOuG2ifD1hbxQ)iz^nd z+Wn%nSK%7_U565587hobSYup=8;m#M7UONW!&tL^ci|q}_u&EKLwLma7@jb0SbM|f h+qC{$mj4tS_N!Z6+whF-=N4bU4pk<=rSB5F`~wQXi0A+S literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/ISQDevPreferenceEditorListener.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/ISQDevPreferenceEditorListener.class new file mode 100644 index 0000000000000000000000000000000000000000..265cc3524415a4ace4608c6db70a199654b62f47 GIT binary patch literal 252 zcmaKnF$%&!6h!AoP1H)ff{ivVh+RsJAOutb_G|LhgplZFvxl?r03J%*C|IWX3^N1s z{_FjC0$5_;!6Eoc8ZJb2PuPf?;xj8QVy;B3(_Cz$!20J3mBxQ&8muY>*v!+K1u literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevChangeEvent.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevChangeEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..5fb89c1c2550f4652cdacf94e4a59d05e58caf73 GIT binary patch literal 807 zcmb7BO>fgc6r6QZCvn`bG%4S-r9C96z!z?yN>Sp%!D@w^`dV$AC3R(Nu-6tp3nWk_ z4*URq6ymKNQj4Crcz2%X&CJ{P>-UeJ0AAv#0gd5#!gCQ>>8H8Kt&fR#FA@>?BDFFZ zgqHhmBJ%MSj~2ovnrxuXuyxIIZiQ5|&S%%cmkc{Zw7pAjY` znFP_|6~p>Cj#9}Z>G3cVO|%%yTwP0>IYYM;bEl)}h5J{n36pxMQD*6i*{Rw(=c9=| zX=0P1T?jfcp9|7!_;Dn~XNsx64x&JwF!cI&qYXTU`Z%5o12yzaY-5+9)*pBV819>R zfDVI^3P}T$a+^*NiL>m(Oe9l23x%3E_Ic>>Bv5!+tjnt)Ww4z8dTM$qV^J~d_6K(} zwAO)lwaLpwi_{)bZMS6OF`f{jzCx9e+EeT; zH7zP1L?!#@7TW$V-&_+8oE~rqOXGJ Lt02!vMZ@7ADiZ46&p1t>+Gjs3%o4@}6tmBP~oWO@9>`_PRpH1q?IH6NYsM8=V zyGFI;(bs+I9S+dF=sb?JGUTElP>Pb4q()oCnxwuk@5E%0@jtK!* zld-l1Hp|a7GG0?1`qDi=q2xF`X*1VkEoy}AdYCAi_rZcWQ<`;#$~-tb`>t`wQ#Jx` zpYW^#MQwgrGos4Z!jUA*A$2xs3pFYxIHYfIPgf_K+=`G@lyUh#J;-POx@`#XEyuite-ALCP?jRSnEJsSzu@oGPx|0#{)1FaQ7m literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/plugin.xml b/plugin/RavenSQDev.Preferences/plugin.xml index 516ba28b..f5b74469 100644 --- a/plugin/RavenSQDev.Preferences/plugin.xml +++ b/plugin/RavenSQDev.Preferences/plugin.xml @@ -4,7 +4,7 @@ diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/EStatus.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/EStatus.java new file mode 100644 index 00000000..4f2460ba --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/EStatus.java @@ -0,0 +1,63 @@ +package raven.sqdev.preferences.pages; + +/** + * An enum containing different status types + * + * @author Raven + * @see #OK + * @see #ERROR + * @see #WARNING + * + */ +public enum EStatus { + /** + * A status indicating that everything is okay + */ + OK, + + /** + * A status indicating that there is something wrong.
+ * May contain a hint message + */ + ERROR, + + /** + * A status indicating that it's okay but it can be improved
+ * May contain a hint message + */ + WARNING; + + + /** + * A String containg a hint message on how to fix the current error/warning + */ + private String hint; + + private EStatus() { + // clear hint message on status change + setHint(""); + } + + /** + * Gets the stored hint-message. Will return null when the + * status is not EStatus.WARNING or EStatus.ERROR + * + * @return The hint describing how to fix that warning + */ + public String getHint() { + if(!(this.equals(EStatus.WARNING) || this.equals(EStatus.ERROR))) { + // when the state is not on warning there can't be + return null; + } + + return hint; + } + + /** + * Sets the hint message for describing how to fix the current warning + * @param hint The message + */ + public void setHint(String hint) { + this.hint = hint; + } +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/ISQDevPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/ISQDevPreferencePage.java new file mode 100644 index 00000000..82ad9f0c --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/ISQDevPreferencePage.java @@ -0,0 +1,13 @@ +package raven.sqdev.preferences.pages; + +import org.eclipse.ui.IWorkbenchPreferencePage; + +/** + * An interface for an SQDev preferencePage + * + * @author Raven + * + */ +public interface ISQDevPreferencePage extends IWorkbenchPreferencePage { + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java new file mode 100644 index 00000000..d6f7d882 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java @@ -0,0 +1,35 @@ +package raven.sqdev.preferences.pages; + + +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.IWorkbench; + +import raven.sqdev.preferences.preferenceEditors.DirectorySQDevPreferenceEditor; +import raven.sqdev.preferences.util.SQDevPreferenceConstants; + +public class SQDevGeneralPreferencePage extends SQDevPreferencePage { + + public SQDevGeneralPreferencePage() { + super(); + } + + @Override + public void init(IWorkbench workbench) { + setDescription("General SQDev preferences"); + + Group armaDirs = createGroup("ArmA directories"); + + createDescription(armaDirs, "Here the location of your ArmA folders are specified " + + "(The program folder as well as the document folder) "); + + addPreferenceEditor(new DirectorySQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY, "&Program:", + "The path to the directory in which your arma3.exe is located", armaDirs)); + + addPreferenceEditor(new DirectorySQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, "&Documents:", + "The path to the \"Arma 3\" or \"Arma 3 - Other Profiles\" directory in your Documents", + armaDirs)); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java index c7e71572..2bb99c0a 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java @@ -1,8 +1,8 @@ package raven.sqdev.preferences.pages; -import org.eclipse.jface.preference.FieldEditor; -import org.eclipse.jface.preference.FieldEditorPreferencePage; +import java.util.ArrayList; + import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; @@ -11,40 +11,91 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.PlatformUI; -import raven.sqdev.preferences.initializer.SQDevPreferenceInitializer; -import raven.sqdev.preferences.preferenceEditors.SQDevDirectoryPreferenceEditor; +import raven.sqdev.preferences.preferenceEditors.ISQDevPreferenceEditor; +import raven.sqdev.preferences.util.ISQDevPreferenceEditorListener; +import raven.sqdev.preferences.util.SQDevChangeEvent; +import raven.sqdev.preferences.util.SQDevPreferenceComposite; -public class SQDevPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - private Composite SQDevPreferencePageParent; +public class SQDevPreferencePage extends PreferencePage + implements ISQDevPreferencePage, ISQDevPreferenceEditorListener { + + private SQDevPreferenceComposite SQDevPreferencePageContainer; + private ArrayList editors; public SQDevPreferencePage() { // create the main page with a dummy parent - SQDevPreferencePageParent = new Composite(new Shell(), SWT.NULL); + SQDevPreferencePageContainer = new SQDevPreferenceComposite(new Shell(), SWT.NULL, this); + + setEditors(new ArrayList()); } @Override protected Control createContents(Composite parent) { - SQDevPreferencePageParent.setParent(parent); + SQDevPreferencePageContainer.setParent(parent); - SQDevPreferencePageParent.setLayout(createDefaultGridLayout(1)); - SQDevPreferencePageParent.setFont(parent.getFont()); + SQDevPreferencePageContainer.setLayout(createDefaultGridLayout(1)); + SQDevPreferencePageContainer.setFont(parent.getFont()); initialize(); - return SQDevPreferencePageParent; + return SQDevPreferencePageContainer; } @Override public void init(IWorkbench workbench) { } + /** + * Sets the page up + */ public void initialize() { - + // set this as the listener of the editors + for (ISQDevPreferenceEditor currentEditor : getEditors()) { + currentEditor.addChangeListener(this); + } + + ArrayList containerList = new ArrayList(); + int maxComponents = -1; + + // get all different containers + for (ISQDevPreferenceEditor currentEditor : getEditors()) { + Composite container = currentEditor.getContainer(); + + if (!containerList.contains(container)) { + containerList.add(container); + } + + if (currentEditor.getComponentCount() > maxComponents) { + // store the maximum amount of components + maxComponents = currentEditor.getComponentCount(); + } + } + + for (Composite current : containerList) { + // create the shared container + Composite sharedContainer = new Composite(current, SWT.NULL); + + for (ISQDevPreferenceEditor currentEditor : getEditors()) { + currentEditor.setContainer(sharedContainer); + + // make all editors fill out the later crated layout + currentEditor.matchComponentCount(maxComponents); + + // create the GUI components of this editor + currentEditor.createComponents(); + } + + GridLayout layout = new GridLayout(); + layout.numColumns = maxComponents; + + sharedContainer.setLayout(layout); + sharedContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + } } /** @@ -54,14 +105,14 @@ public void initialize() { * @return */ public Composite createContainer() { - return createDefaultComposite(SQDevPreferencePageParent); + return createDefaultComposite(SQDevPreferencePageContainer); } /** * Creates a default composite with preset GridLayout * * @param parent - * The parent of the composite ot create + * The parent to the composite ot create * @return */ public Composite createDefaultComposite(Composite parent) { @@ -135,64 +186,111 @@ public Composite createDescription(Composite parent, String description) { } /** - * Creates a DirectoryFieldEditor and packs it into a container - * @param parent The parent of the container - * @param preferenceName the name of the preference this editor should work on - * @param labelName The text of the label that is displayed in front of the editor - * @return The container with the editor packed onto it + * Adds an FieldEditor to this site and registers it + * + * @param prefEditor + * The editor to be added and registered */ - public Composite createDirectoryPreference(Composite parent, String preferenceName, - String labelName) { - Composite container = createDefaultComposite(parent); - - new SQDevDirectoryPreferenceEditor(preferenceName, labelName, container).doLoad(); - - return container; + public void addPreferenceEditor(ISQDevPreferenceEditor prefEditor) { + registerEditor(prefEditor); } - /** - * Adds an FieldEditor to this site and registers it - * @param prefEditor The editor to be added and registered - */ - public void addPreferenceEditor(FieldEditor prefEditor) { - // TODO: register preference editor + add respectively + @Override + public void performApply() { + save(); } /** - * Adds an FieldEditor to the given parent and registers the editor - * @param prefEditor The editor to be added and registered - * @param prefEditor The parent the editor will be attached to + * Saves all unsaved preferences (only when the page is in a valid state */ - public void addPreferenceEditor(Composite parent, FieldEditor prefEditor) { + public void save() { + if (!isValid()) { + return; + } + for (ISQDevPreferenceEditor currentEditor : getEditors()) { + if (currentEditor.needsSave()) { + if (!currentEditor.doSave()) { + return; + } + } + } } - public void addGroup(Group group) { - // TODO: add group and register Preference editors - } - - //TODO: implement mehtods - @Override - public void performApply() { - performOk(); + public boolean performOk() { + for (ISQDevPreferenceEditor currentEditor : getEditors()) { + if (currentEditor.needsSave()) { + + //TODO: add option to automatically save unsaved preferences on leaving via ok + + MessageBox messageBox = new MessageBox( + PlatformUI.getWorkbench().getDisplay().getActiveShell(), + SWT.ICON_WARNING | SWT.YES | SWT.NO); + + messageBox.setMessage( + "There are some unsaved preference changes. Do you want to save them now?"); + messageBox.setText("Unsaved Changes"); + int response = messageBox.open(); + if (response == SWT.YES) { + save(); + return true; + } else { + return false; + } + } + } + + return true; + } @Override - public boolean performOk() { + public boolean isValid() { + for (ISQDevPreferenceEditor currentEditor : getEditors()) { + if (!currentEditor.isValid()) { + setErrorMessage(currentEditor.getStatusHint()); + return false; + } + + setErrorMessage(null); + } + return true; } + public ArrayList getEditors() { + return editors; + } + + private void setEditors(ArrayList editors) { + this.editors = editors; + } + + /** + * Registers an editor + * + * @param editor + * The editor to be registered + */ + private void registerEditor(ISQDevPreferenceEditor editor) { + getEditors().add(editor); + } + @Override - protected void performDefaults() { - new SQDevPreferenceInitializer().initializeDefaultPreferences(); - - updateApplyButton(); - } + public void editorStateChanged(SQDevChangeEvent event) { + if (event.getContext().equals(SQDevChangeEvent.SQDEV_STATUS_CHANGED) + || event.getContext().equals(SQDevChangeEvent.SQDEV_VALUE_LOADED)) + // update the validation state of the site when an editor has + // changed it's value + setValid(isValid()); + } @Override - public boolean isValid() { - return true; + public void performDefaults() { + for (ISQDevPreferenceEditor currentEditor : getEditors()) { + currentEditor.doLoadDefault(); + } } } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java new file mode 100644 index 00000000..698c0287 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java @@ -0,0 +1,566 @@ +package raven.sqdev.preferences.preferenceEditors; + +import java.util.ArrayList; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +import raven.sqdev.preferences.activator.Activator; +import raven.sqdev.preferences.pages.EStatus; +import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.ISQDevPreferenceEditorListener; +import raven.sqdev.preferences.util.SQDevChangeEvent; +import raven.sqdev.preferences.util.SQDevPreferenceComposite; + +public abstract class AbstractSQDevPreferenceEditor + implements ISQDevPreferenceEditor, IPropertyChangeListener { + /** + * The status of this editor + */ + private EStatus status; + + /** + * The key (identifier) of the preference this editor is working on + */ + private String preferenceKey; + + /** + * The text displayed at the created label + */ + private String labelText; + + /** + * The container the GUI elements of this editor are created in + */ + private Composite container; + + /** + * The preferenceStore this editor works on + */ + private IPreferenceStore store; + + /** + * The ISQDevPreferencePage this editor is placed on. + */ + private ISQDevPreferencePage page; + + /** + * A list of registered editors + */ + private ArrayList listener; + + /** + * How many empty components hav to be created in order to match the gven + * component count + */ + private int emptyComponentsToCreate; + + private String tooltip; + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + * @param resolve + * Indicating whether or not the program should try to resolve + * the preferencePage itself + */ + protected AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, + Composite container, boolean resolve, String tooltip) { + // initialize the listener list + this.listener = new ArrayList(); + + // store the values + setPreferenceStore(Activator.getDefault().getPreferenceStore()); + setPreferenceKey(preferenceKey); + setLabelText(labelText); + setContainer(container); + setStatus(EStatus.OK); + setTooltip(tooltip); + + if (resolve) { + // try to find the preferencePage yourself + setPreferencePage(resolvePreferencePage()); + } + + // initialize the editor with some content to display + doLoad(); + + emptyComponentsToCreate = 0; + } + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + */ + public AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, + Composite container) { + this(preferenceKey, labelText, container, true, ""); + } + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + */ + public AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container) { + this(preferenceKey, labelText, container, true, tooltip); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, + Composite container, ISQDevPreferencePage page) { + + this(preferenceKey, labelText, container, false, ""); + + setPreferencePage(page); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container, ISQDevPreferencePage page) { + this(preferenceKey, labelText, container, false, tooltip); + + setPreferencePage(page); + } + + /** + * This method will load the current value of the preference this editor is + * working on and displays them in the GUI. Can be used to update the GUI. + *
+ * Will be called during construction of this editor. + */ + @Override + public abstract void doLoad(); + + /** + * This mehtods will load the default value for the preference this editor + * is working on in the GUI.
+ * It does not change the value of the preference itself + */ + @Override + public abstract void doLoadDefault(); + + /** + * This method will reset the preference this editor is working on to it's + * default value and updates the GUI afterwards. + */ + @Override + public void doSetDefault() { + getPreferenceStore().setToDefault(getPreferenceKey()); + } + + /** + * Checks if the editor is in a valid state (e.g. if the input is valid) + * + * @return The state of the editor + */ + @Override + public boolean isValid() { + // if the status is okay or a warning the editor is in a valid state + return (getStatus().equals(EStatus.OK) || getStatus().equals(EStatus.WARNING)); + } + + /** + * This method evaluates the input and changes the editor state accordingly + */ + @Override + public abstract void evaluateInput(); + + /** + * Defines the preferencePage this editor is working on + * + * @param page + * The page this editor should sent information to + */ + @Override + public void setPreferencePage(ISQDevPreferencePage page) { + this.page = page; + } + + /** + * Gets the preferencePage this editor is working on + * + * @return + */ + @Override + public ISQDevPreferencePage getPreferencePage() { + return page; + } + + /** + * Tries to get the ISQDevPreferencePage this editor is applied + * to according to the set container of this editor.
+ * Basically this method tries to find a parent Composite that + * is of the type SQDevPreferenceComposite. + * + * @return The ISQDevPreferencePage this editor is applied to. + *
+ * Returns null if it can't find a suitable Composite + */ + protected ISQDevPreferencePage resolvePreferencePage() { + Composite container = getContainer(); + ISQDevPreferencePage page = null; + + while (page == null && container != null) { + if (container.getClass().equals(SQDevPreferenceComposite.class)) { + page = ((SQDevPreferenceComposite) container).getPage(); + break; + } + + page = resolvePreferencePage(container, new ArrayList()); + + container = container.getParent(); + } + + // check that the preferencePage has been found + Assert.isNotNull(page, "Couldn't resolve the preferencePage"); + + return page; + } + + private ISQDevPreferencePage resolvePreferencePage(Composite container, + ArrayList inspected) { + + for (Control currentControl : container.getChildren()) { + if (inspected.contains(currentControl)) { + // Don't check them twice + continue; + } + + // add to the inspected list + inspected.add(currentControl); + + if (currentControl.getClass().equals(SQDevPreferenceComposite.class)) { + // if the composite + return ((SQDevPreferenceComposite) currentControl).getPage(); + } else { + if (currentControl instanceof Composite) { + if (((Composite) currentControl).getChildren().length > 0) { + // search recursively through all children + ISQDevPreferencePage page = resolvePreferencePage( + (Composite) currentControl, inspected); + + if (page != null) { + return page; + } + } + } + } + } + + return null; + } + + /** + * Gets the preferenceStore this editor is working on + * + * @return + */ + @Override + public IPreferenceStore getPreferenceStore() { + return store; + } + + /** + * Sets the preferenceStore this editor is working on + * + * @param store + * The new preferenceStore for this editor + */ + @Override + public void setPreferenceStore(IPreferenceStore store) { + Assert.isNotNull(store, "The preference store mustn't be null"); + + if (getPreferenceStore() != null) { + // unregister this as the listener of the old PreferenceStore + getPreferenceStore().removePropertyChangeListener(this); + } + + // register this editor as a listener to the preference store + store.addPropertyChangeListener(this); + + this.store = store; + } + + /** + * Gets the key (identifier) of the preference this editor is working on + * + * @return + */ + @Override + public String getPreferenceKey() { + return preferenceKey; + } + + /** + * Sets the key (identifier) of the preference this editor should work on + * + * @param key + */ + @Override + public void setPreferenceKey(String key) { + Assert.isTrue(getPreferenceStore().contains(key), + "The preference " + key + " does not exist"); + + preferenceKey = key; + } + + /** + * This method will get the container the GUI elements of this editor are + * displayed on + * + * @return The editor's container + */ + @Override + public Composite getContainer() { + return this.container; + } + + /** + * This method will set the container of the editor and can therefore be + * used to define the editor's position in the GUI + * + * @param container + * The new container this editor should be displayed on + */ + @Override + public void setContainer(Composite container) { + this.container = container; + } + + /** + * Returns the amount of GUI components this editor consists of + * + * @return + */ + @Override + public abstract int getComponentCount(); + + /** + * Adds as many empty components as necessary to match the given component + * count + * + * @param count + * The amount of components to match
+ * may not be smaller than getComponentCount() of + * this editor + * + * @see #getComponentCount() + */ + public void matchComponentCount(int count) { + if (count < getComponentCount()) { + throw new IllegalArgumentException( + "Component count to match is lower than the actual component count!"); + } else { + emptyComponentsToCreate = count - getComponentCount(); + } + } + + /** + * Creates a sufficient amount of empty components needed to fit in the + * Layout + */ + protected void createEmptyComponents() { + for (int i = 0; i < emptyComponentsToCreate; i++) { + // create a sufficient amount of empty components + Composite comp = new Composite(getContainer(), SWT.NULL); + comp.setEnabled(false); + + comp.setSize(0, 0); + } + } + + /** + * Sets the status of this editor + * + * @param status + * The new status + */ + @Override + public void setStatus(EStatus status) { + this.status = status; + + // notify about change + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_STATUS_CHANGED)); + } + + /** + * Gets the status of this editor + * + * @return + */ + @Override + public EStatus getStatus() { + return status; + } + + /** + * Gets the hint message stored in the status of the page.
+ * Returns null if the status is not + * EStatus.WARNING or EStatus.ERROR + */ + @Override + public String getStatusHint() { + return getStatus().getHint(); + } + + /** + * Creates the required components for this editor.
+ * Should call {@linkplain #createEmptyComponents()} in the end! + * + * @param container + * The container the components are created in + */ + @Override + public abstract void createComponents(Composite container); + + /** + * Creates the required components for this editor in the set container.
+ * Should call {@linkplain #createEmptyComponents()} in the end! + */ + public void createComponents() { + createComponents(getContainer()); + } + + /** + * Sets the text of the used label + * + * @param text + * The new text for this label + */ + @Override + public void setLabelText(String text) { + this.labelText = text; + } + + /** + * Gets the current text of the used label + */ + @Override + public String getLabelText() { + return labelText; + } + + /** + * Gets notified whenever the preference, this editor is working on, changes + * + * @param event + * The fired event + */ + @Override + public void propertyChange(PropertyChangeEvent event) { + if (event.getProperty().equals(getPreferenceKey())) { + // load the new value into the GUI + doLoad(); + } + } + + /** + * Registers the given listener if it is not already registered + * + * @param listener + * The Listener to register + */ + @Override + public void addChangeListener(ISQDevPreferenceEditorListener listener) { + if (!this.listener.contains(listener)) { + this.listener.add(listener); + } + } + + /** + * Unregisters the given listener + * + * @param listener + * The listener to unregister + */ + @Override + public void removeChangListener(ISQDevPreferenceEditorListener listener) { + this.listener.remove(listener); + } + + @Override + public void changed(SQDevChangeEvent event) { + for (ISQDevPreferenceEditorListener currentListener : this.listener) { + // notify about the change + currentListener.editorStateChanged(event); + } + } + + /** + * Sets the tooltip for this editor's value-field + * + * @param tooltip + * The tooltip to display + */ + public void setTooltip(String tooltip) { + this.tooltip = tooltip; + } + + /** + * Gets the tooltip of this editor's preference value-field + */ + public String getTooltip() { + return tooltip; + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java new file mode 100644 index 00000000..cfae8793 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java @@ -0,0 +1,359 @@ +package raven.sqdev.preferences.preferenceEditors; + +import java.io.File; + +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.VerifyEvent; +import org.eclipse.swt.events.VerifyListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.PlatformUI; + +import raven.sqdev.preferences.pages.EStatus; +import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.SQDevChangeEvent; + +public class DirectorySQDevPreferenceEditor extends AbstractSQDevPreferenceEditor + implements VerifyListener { + + /** + * The label used by this editor + */ + private Label label; + + /** + * The TextField used to show the current selected path to the user + */ + private Text pathText; + + /** + * The initial text of {@linkplain #pathText}.
+ * Initial value is empty. + */ + private String initialText; + + /** + * The button to open the FileDialog + */ + private Button browseButton; + + /** + * The text used on the created button. Default value is + * "Browse..." + */ + private String buttonText = "Browse..."; + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an instance + * of ISQDevPreferencePage or one of it's parents is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + */ + public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container) { + super(preferenceKey, labelText, tooltip, container); + } + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an instance + * of ISQDevPreferencePage or one of it's parents is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + */ + public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, + Composite container) { + super(preferenceKey, labelText, "", container); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, + Composite container, String tooltip, ISQDevPreferencePage page) { + super(preferenceKey, labelText, tooltip, container, page); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, + Composite container, ISQDevPreferencePage page) { + super(preferenceKey, labelText, "", container, page); + } + + @Override + public boolean doSave() { + if (isValid()) { + getPreferenceStore().setValue(getPreferenceKey(), pathText.getText()); + + // update save status + updateSaveStatus(); + + return true; + } else { + MessageDialog.open(MessageDialog.ERROR, + PlatformUI.getWorkbench().getDisplay().getActiveShell(), + "Failed at saving " + getLabelText().substring(1, getLabelText().length() - 1), + "Couldn't save " + getLabelText().substring(1, getLabelText().length() - 1) + + " because it is in an invalid state!", + SWT.NULL); + + return false; + } + } + + @Override + public void doLoad() { + // get the stored path + load(getPreferenceStore().getString(getPreferenceKey())); + } + + /** + * Loads the given text in the UI.
+ * If you want to load the value from the preference use + * {@linkplain #doLoad()} + * + * @param text + * The text to display
+ */ + public void load(String text) { + if (pathText == null) { + setInitialText(text); + } else { + if (pathText.isDisposed()) { + return; + } + + pathText.setText(text); + // evaluate the new input + evaluateInput(); + updateSaveStatus(); + } + + // notify about change + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_LOADED)); + } + + @Override + public void doLoadDefault() { + load(getPreferenceStore().getDefaultString(getPreferenceKey())); + } + + @Override + public void evaluateInput() { + String input = pathText.getText(); + File inputFile = new File(input); + EStatus status = EStatus.OK; + + // check if the directory exists + if (!inputFile.exists()) { + status = EStatus.ERROR; + status.setHint("The given directory does not exist!"); + setStatus(status); + return; + } + + // check if given file is a directory + if (!inputFile.isDirectory()) { + status = EStatus.ERROR; + status.setHint("The given path is no directory!"); + return; + } + + setStatus(status); + } + + @Override + public int getComponentCount() { + return 3; + } + + @Override + public void setLabelText(String text) { + super.setLabelText(text); + + if (label != null) { + // update label if it has already been created + label.setText(text); + + label.pack(true); + } + }; + + @Override + public void createComponents(Composite container) { + label = new Label(container, SWT.BOLD); + label.setText(getLabelText()); + + // check that initialText is not null + if (getInitialText() == null) { + setInitialText(""); + } + + pathText = new Text(container, SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER); + pathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + pathText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); + pathText.setToolTipText(getTooltip()); + pathText.addVerifyListener(this); + load(initialText); + + browseButton = new Button(container, SWT.PUSH); + browseButton.setText(getButtonText()); + browseButton.addMouseListener(new MouseAdapter() { + + @Override + public void mouseUp(MouseEvent e) { + DirectoryDialog chooser = new DirectoryDialog( + PlatformUI.getWorkbench().getDisplay().getActiveShell()); + + // start chooser on the typed in path if it exists + if (new File(pathText.getText()).exists()) { + chooser.setFilterPath(pathText.getText()); + } + + String path = chooser.open(); + + if (path != null) { + // display selected path + load(path); + } + } + }); + + createEmptyComponents(); + } + + public String getButtonText() { + return buttonText; + } + + public void setButtonText(String buttonText) { + this.buttonText = buttonText; + + if (browseButton != null) { + browseButton.setText(buttonText); + + browseButton.pack(); + } + } + + public String getInitialText() { + return initialText; + } + + public void setInitialText(String initialText) { + this.initialText = initialText; + } + + @Override + public boolean needsSave() { + return willNeedSave(pathText.getText()); + } + + /** + * Checks if the editor needs to be saved when it will change to this + * content + * + * @param content + * The new content + * @return + */ + public boolean willNeedSave(String content) { + if (content.equals(getPreferenceStore().getString(getPreferenceKey()))) { + return false; + } else { + return true; + } + } + + /** + * Indicates graphically whether the editor has a value that differs from + * the value of the preference this editor is working on + * + * @param newText + * The text that represents the value of this editor and that + * will be compared to the preference's value + */ + public void updateSaveStatus(String newText) { + // mark the editor if it needs to be saved + String labelText = getLabelText(); + + if (willNeedSave(newText)) { + if (!labelText.endsWith("*")) { + labelText += "*"; + } + } else { + if (labelText.endsWith("*")) { + labelText = labelText.substring(0, labelText.length() - 1); + } + } + + setLabelText(labelText); + } + + /** + * Indicates graphically whether the editor has a value that differs from + * the value of the preference this editor is working on + */ + public void updateSaveStatus() { + updateSaveStatus(pathText.getText()); + } + + @Override + public void verifyText(VerifyEvent e) { + updateSaveStatus(e.text); + + // evaluate the new value + evaluateInput(); + + // notify about change + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_CHANGED)); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java new file mode 100644 index 00000000..05a49928 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java @@ -0,0 +1,183 @@ +package raven.sqdev.preferences.preferenceEditors; + +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.swt.widgets.Composite; + +import raven.sqdev.preferences.pages.EStatus; +import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.ISQDevPreferenceEditorListener; +import raven.sqdev.preferences.util.SQDevChangeEvent; + +/** + * An interface for all SQDev preferences + * + * @author Raven + * + */ +public interface ISQDevPreferenceEditor { + /** + * This method will save the value for the preference this editor is working + * on + */ + public boolean doSave(); + + /** + * This method will load the current value of the preference this editor is + * working on and displays them in the GUI. Can be used to update the GUI + */ + public void doLoad(); + + /** + * This mehtods will load the default value for the preference this editor + * is working on in the GUI.
+ * It does not change the value of the preference itself + */ + public void doLoadDefault(); + + /** + * This method will reset the preference this editor is working on to it's + * default value and updates the GUI afterwards. + */ + public void doSetDefault(); + + /** + * Checks if the editor is in a valid state (e.g. if the input is valid) + * @return The state of the editor + */ + public boolean isValid(); + + /** + * This method evaluates the input and changes the editor state accordingly + */ + public void evaluateInput(); + + /** + * Sets the status of this editor + * @param status The new status + */ + public void setStatus(EStatus status); + + /** + * Gets the status of this editor + * @return + */ + public EStatus getStatus(); + + /** + * Gets the hint message stored in the status of the page.
+ * Returns null if the status is not + * EStatus.WARNING or EStatus.ERROR + */ + public String getStatusHint(); + + /** + * Defines the preferencePage this editor is working on + * @param page The page this editor should sent information to + */ + public void setPreferencePage(ISQDevPreferencePage page); + + /** + * Gets the preferencePage this editor is working on + * @return + */ + public ISQDevPreferencePage getPreferencePage(); + + /** + * Gets the preferenceStore this editor is working on + * @return + */ + public IPreferenceStore getPreferenceStore(); + + /** + * Sets the preferenceStore this editor is working on + * @param store The new preferenceStore for this editor + */ + public void setPreferenceStore(IPreferenceStore store); + + /** + * Gets the key (identifier) of the preference this editor is working on + * @return + */ + public String getPreferenceKey(); + + /** + * Sets the key (identifier) of the preference this editor should work on + * @param key + */ + public void setPreferenceKey(String key); + + /** + * This method will get the container the GUI elements of this editor are + * displayed on + * + * @return The editor's container + */ + public Composite getContainer(); + + /** + * This method will set the container of the editor and can therefore be + * used to define the editor's position in the GUI + * + * @param container + * The new container this editor should be displayed on + */ + public void setContainer(Composite container); + + /** + * Returns the amount of GUI components this editor consists of + * @return + */ + public int getComponentCount(); + + /** + * Creates the required components for this editor + * @param container The container the components are created in + */ + public void createComponents(Composite container); + + /** + * Creates the required components for this editor in the set container + */ + public void createComponents(); + + /** + * Sets the text of the used label + * @param text The new text for this label + */ + public void setLabelText(String text); + + /** + * Gets the current text of the used label + */ + public String getLabelText(); + + /** + * Adds as many empty components as necessary to match the given component count + * @param count The amount of components to match
+ * may not be smaller than getComponentCount() of this editor + * + * @see #getComponentCount() + */ + public void matchComponentCount(int count); + + /** + * Checks if the preference this editor is working on needs to be saved + * @return + */ + public boolean needsSave(); + + /** + * Adds a listener to this editor that get notified whenever this editor changes + */ + public void addChangeListener(ISQDevPreferenceEditorListener listener); + + /** + * Removes the given listener + */ + public void removeChangListener(ISQDevPreferenceEditorListener listener); + + /** + * Notifies all registered listeners that the editor has changed + */ + public void changed(SQDevChangeEvent event); +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevPreferenceEditorListener.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevPreferenceEditorListener.java new file mode 100644 index 00000000..de2272c6 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevPreferenceEditorListener.java @@ -0,0 +1,15 @@ +package raven.sqdev.preferences.util; + +/** + * An interface for defing an ISQDevPreferenceEditorListener that + * will get notified about every change int the value of the respective editor + * + * @author Raven + * + */ +public interface ISQDevPreferenceEditorListener { + /** + * Gets notified after an editor has changed his state + */ + public void editorStateChanged(SQDevChangeEvent event); +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java new file mode 100644 index 00000000..afe4235f --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java @@ -0,0 +1,23 @@ +package raven.sqdev.preferences.util; + +public class SQDevChangeEvent { + + public static final String SQDEV_VALUE_CHANGED = "valueChanged"; + public static final String SQDEV_STATUS_CHANGED = "statusChanged"; + public static final String SQDEV_VALUE_LOADED = "valueLoaded"; + + private String context; + + public SQDevChangeEvent(String context) { + setContext(context); + } + + public String getContext() { + return context; + } + + private void setContext(String context) { + this.context = context; + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceComposite.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceComposite.java new file mode 100644 index 00000000..df7322fb --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceComposite.java @@ -0,0 +1,71 @@ +package raven.sqdev.preferences.util; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTException; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Widget; + +import raven.sqdev.preferences.pages.ISQDevPreferencePage; + +public class SQDevPreferenceComposite extends Composite { + + private ISQDevPreferencePage page; + + /** + * Constructs a new instance of this class given its parent and a style + * value describing its behavior and appearance. + *

+ * The style value is either one of the style constants defined in class + * SWT which is applicable to instances of this class, or must + * be built by bitwise OR'ing together (that is, using the + * int "|" operator) two or more of those SWT + * style constants. The class description lists the style constants that are + * applicable to the class. Style bits are also inherited from superclasses. + *

+ * + * @param parent + * a widget which will be the parent of the new instance (cannot + * be null) + * @param style + * the style of widget to construct + * @param page + * The ISQDevPreferencePage this composite belongs + * to + * + * @exception IllegalArgumentException + *
    + *
  • ERROR_NULL_ARGUMENT - if the parent is null
  • + *
+ * @exception SWTException + *
    + *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the + * thread that created the parent
  • + *
+ * + * @see SWT#NO_BACKGROUND + * @see SWT#NO_FOCUS + * @see SWT#NO_MERGE_PAINTS + * @see SWT#NO_REDRAW_RESIZE + * @see SWT#NO_RADIO_GROUP + * @see SWT#EMBEDDED + * @see SWT#DOUBLE_BUFFERED + * @see Widget#getStyle + */ + public SQDevPreferenceComposite(Composite parent, int style, ISQDevPreferencePage page) { + super(parent, style); + setPage(page); + } + + /** + * Gets the ISQDevPreferencePage this composite belongs to + * @return + */ + public ISQDevPreferencePage getPage() { + return page; + } + + private void setPage(ISQDevPreferencePage page) { + this.page = page; + } + +} From af2b3738f9e9c32186c0d1604f6476478d26fc03 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Sun, 17 Jan 2016 16:44:03 +0100 Subject: [PATCH 3/6] added new preference type; implemented new preference for closing behaviour of the preference dialog --- .../raven/sqdev/editors/BasicTextEditor.class | Bin 4674 -> 4676 bytes .../raven/sqdev/editors/BasicTextEditor.java | 2 +- .../SQDevPreferenceInitializer.class | Bin 1044 -> 2186 bytes .../pages/SQDevGeneralPreferencePage.class | Bin 1676 -> 2110 bytes .../pages/SQDevPreferencePage.class | Bin 7806 -> 8105 bytes .../AbstractSQDevPreferenceEditor.class | Bin 9009 -> 10369 bytes .../BooleanSQDevPreferenceEditor$1.class | Bin 0 -> 1440 bytes .../BooleanSQDevPreferenceEditor.class | Bin 0 -> 4868 bytes .../DirectorySQDevPreferenceEditor$1.class | Bin 1958 -> 1984 bytes .../DirectorySQDevPreferenceEditor.class | Bin 7626 -> 6788 bytes .../util/SQDevPreferenceConstants.class | Bin 563 -> 641 bytes .../util/SQDevPreferenceUtil.class | Bin 1273 -> 1742 bytes .../SQDevPreferenceInitializer.java | 48 +++- .../pages/SQDevGeneralPreferencePage.java | 13 ++ .../pages/SQDevPreferencePage.java | 59 +++-- .../AbstractSQDevPreferenceEditor.java | 75 +++++- .../BooleanSQDevPreferenceEditor.java | 219 ++++++++++++++++++ .../DirectorySQDevPreferenceEditor.java | 98 +++----- .../util/SQDevPreferenceConstants.java | 2 + .../preferences/util/SQDevPreferenceUtil.java | 32 ++- 20 files changed, 451 insertions(+), 97 deletions(-) create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.class create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextEditor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextEditor.class index ceeda87dd6cf818c987d66c28c4d726d4bbacbaf..f62d405167c17cc9b7e1f20d1743253369137cf2 100644 GIT binary patch delta 189 zcmX@4aztgr4R&z}jc8||ti-ZJ{hY+Sbp7CxqRhN>>!{7|*x5NaH5gcdkb$9T@;`ok zMwZFC0{Qg@4DJjj3|0af@h WOk$YKzzj6gm|+UT)Xma@>Wlz6h$ZL% delta 186 zcmXBN%L+kp6vg46TZa)QjLc3k@>dMhNhygC$|bkSF*%WlFfqUjxE{R}Z{ZQx zW%RY%tF>PGQ@_8pP&n4lRmSGpR1(%bXr7`fS9VeB#oY`gfy9$R#TrIN~5C`4eZH SvQ*`QjY~{&<@SgKqmCcVDJ63N diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java index 10d57c7a..cbed608d 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java @@ -69,7 +69,7 @@ protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupp char[] matchChars = { '(', ')', '[', ']', '{', '}' }; // which brackets // to match ICharacterPairMatcher matcher = new DefaultCharacterPairMatcher(matchChars, - IDocumentExtension3.DEFAULT_PARTITIONING); + IDocumentExtension3.DEFAULT_PARTITIONING, true); support.setCharacterPairMatcher(matcher); support.setMatchingCharacterPainterPreferenceKeys(EDITOR_MATCHING_BRACKETS_KEY, diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.class index 1167e1bd9a1200f8abd709497ed1fa5939fc2613..f8dfa59177c528864d03e40ff453237d7c544998 100644 GIT binary patch literal 2186 zcmbtVZBrXn7(JIjH%+&;O`OMg0<}&iDiTO^)NaVM_vp(T-p4%iepRbI$X&fBya39{}FPmVpj|Nnh5KYX#qL zsG3#rRYCd6wN+p_t`j=4)s_wq=bA?bIt6Atzi27D*`BW~zv_lg zSsgJry&iPfY{uKZ_my`%(^ z^PVkB%hGrBKKj@hZaRU$)cpU`l@sV~dSF%+WVO`7JV@Xok_IjbWKIL3RHr6G&$p&u zu1s9U6@f%ig^@`CE0sQ#Ya0_ejofYG8eXRdXsGGVJhAAOaT;t5$W}qxt&y(2;En0Nzy0@q4(eW-X%E=b2cyd!Xh=v%TT zt&(($RzCC{x0pMJ0Sp?rDKPd*%uKwAx9G2+#a|<-llD)3NiWASEHHRn)U0P$%gPOd zL&{oK%0ybr>TSw8c`=R*ZyYgL+LpUPo&~h%KH70YEptqB&I)w5p}DFPyDK;dll96$ zdWYT}svJb6;FMG_G?3c4dncV>G2b!pp1{Qx&+i7IDw}v8cUfD^6Xn(fhTE`e6E6cF zFvcy$8eyENI;9QeCvXpw2JRn)YuqsL08;`+O_r)^v2YA;aea%Klxu^RzyxM=oj(+~ z+KwWl`ADE|EgvdbUZXNumX%7dW_#tb=dS5I9JsBmd}!h$%uz9qmAk=&YiI66zC_Yk zTod@j#Jo<1c<3FZuYo55X2TnfXFaCp6Ij5E9-f-`6nVm_9VZCcci6mEQ~S=CvQ z;ihg=#~sP$ay}nQ`@02MX|$~bR~_`D6hbCX{xNp}P+y#!=)Z z3IeM&?^S(UXTr~f*#S}JbRQ8E6HfKIO1={XwQS)A!bbdByI{wo(9NO080UbYWAM@M7N@fp>bu9gYuFUh~v*&ymYv}E!OQ?g&GK3!^bQYroX~K_1 z@MkcBWqeN9FZd!3@fSu7mTHG?Z4sHDBQm72QpY!S*hdHz{xhK*$=#>f2e^ePQkrQY TG#(L3oFtUhgakH8umjFNc!56M delta 209 zcmeAYoWdb+>ff$?3=9k=4BG4rOpFY6lLHwgCNZjQ^n1-H#K9oL$iR}Dn3>1TAjhD< z&LBUzhRKLokwIzlMkY%}mC3J}RQWj=)EF5!Q}UBbb5rw5iYM1GTTPB zk!SKzHu>}z24)5(pe-^x82Gm_i27&?NeW5tWRPWM&=yh_QU$X%0_B+)xPYV(0}GH8 tWngCzV-REzXOL!)VBiLdh(XL?;9=ke^4NhY)EP7w7=cg|$Y)~E0szPNA$$M; diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.class index 0854b9e8a5699764dc3693c37aadc0baaacba920..e30d0dbb3edb1532763f337ac8529b3e7a1ed9d7 100644 GIT binary patch delta 560 zcmY*WT~8B16g^va?TS`$O${o-*npbFZHyt>f=XKpR0&|yhX#0Bcc<-yWp>?ba=7Q&lKV-dV?{yz3dDktcX-I9!z1SMj*vojS={673-8%|;U^*UI}@PQ ztnEIK6m~uBmskHQ)EREz_o&Khg1C!E9*vxhzIsUEVKNy@7okwFudj z>)%AIqoN@H^b%$f;mnte6SJbDrr@yM<76OYi5!#e6^l{NPdt}(dCcr2_K)mXIJV~< zPv*F6u-xO4Ii7G1$M-1gZWY)-#MDH37WhFDFgu!X9Y16up28}Y(!c7SrXJB#rJpsf z-G+)g>6tcv;}5b_0|)7Et$bn{Z$_BeF)gD!!d%<@iPb&hov~(AtsnR>f;A**22&LG zai8KnT&JAF4Dxt{hnU429%F&(XPCzeFucSQyg~u5XcSxJBc~>wsF;K_8ACY+#dYROpxnRo4jpNQw+T{Re&4ivR!s delta 174 zcmXAiI|{;36hu#AOz;y4qJm0H1i?l@L^O$73U0u{+7-AD8+n_sO<`k^1=zVEafn

={1+LsY}=R z(l#y~xgK5m40I!gOysA8%#;>HEQ!?*Ng317SNtc^EE!_6A;D6btCMNLVp}flemh|m AdH?_b diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevPreferencePage.class index df7bb9512f1e7ea021df3e4a52a317d293f4ac58..00a52e5ece1083d088375238940654def9e6406a 100644 GIT binary patch delta 2859 zcmZWr3wV>&8GgSc&7b`F)1>#NO$#jr+BBi9TvypZK%K5d9vF`59yPVGl$C-cMR1qm zZFWw%?92(>MVS{wx(yK0mO2K?z&V_QO}q@mZET_<%5ZZ|X7~Pog2nmt>AC&qe3$oo z&wKLm)XmfU&wadWH-HIJtHCCyQ-_>|>()BAjXR``*U^bvG%OeR7e$vxYuck7tuz&S-nwg9W(Nz}N8&<#tVVe#<}?R;e$!${e>FxI-;<j>TF|_;^?y0wvI2x+FBPTOjkcM@N=wInx{#gR8dbw-cAFLAf{tGmYGezfdTAN zJ)R2Jc1$o=?pOOg&&aR2x!BhbZH~3;*k|tDhkmugc+~kj125p9y53ti?GFb22*1D) zk1nT4!4U&5Au7T3@A{Q%%0c$tUo!fg$W-nc}fTV=Nwzw#Hl{0^j@&GvStzGZ&IPvAB*C=w~Ai zLo(DcUxVieQxuOOhIrKkf3?$Rh@U9O{0YfXulfhv0V&p`NDyJpk!uYJikE&!p_xlM z60sEtmy`;;@kBJy8Bcj>(PbowD`lS|?!3gZwvJYpj1qX3N83AN4NIaeu@=@sMjJ9l z#;S|5n;l_8B5Hm17Vii+P=-Q`;$MZDlXF8>CEN%h57iin2r5vc_U6ox3CfXMtxUUc`sH;C@0KHO99+yt++ya(N;;oweuH;@rfpkKoi-0Esk*QbwqI%%{Ye}$%7VgqgA?mRET^mlF^tW zHE72ex?Kv7i4w-5lCwN$G`WGdAtHA4z~HEctob2U!^SYGtgm*4RE8hnQe-fQ_4qMI zcJ}w-C)V0lS~jgX>E4b9@erI0AUHBL#6~(Y4X0fEl%t2avH^w~mw(g5x*>w#)F2v4 z`9DR&Jhp)69NZeZhfs`+^j8Kuk0%9>s4e+{(4$*9v00Ehxd@7-nW5Vzb%whRKID;p!wNC-IB0RXfek+Oc%uVe?~X4p;>pw<8;Opa6F= z=(`BY-E`TFakz)IyjQgsly#Xf*|;lgWp8INTd|F87A@RL2H4rt(e|cL56fnI$jc3$@h2@v6i45NgB0GqEO%Zz^_SZWCj&KqOBEwJ@kwu`)>lkE`PZ8qX zgmMqVe_CmQvMZkD+{UkF;wB5j^!OV*M_>iN#lduvU*H}a?Knf#eR$rydMTdh*6Kk5 z`MkP0P~iT(#eKmcwJwl1`EGHLq?qddxMe~iXn<3&G?TFyVmXTvOBz75oqH=<|@F8S~cn$9&j4!FJ#Z`skrtHHPsvZ#C1R~Sk8xnTvOmSceZRF8cDP^rv zNIvmWCMi>VDL-4lJQSTTpqdf9q$10@`!)1r3R6aChhz`)-BK>eRhxokRk_y2Ib=hc zyE`S@q+|+di@Q>Y3<;<+!IFZF{F2f-C-csvahvsHXLLzbS2^4=>VnX8q|^}5B`?K! z$(I72F=c6S+T*C|q!i{zNm54iz@M6wbFu-R5E<}dQYwbS$u{dFW8sxb6iGF44u9gX z41BZCdmJT|QbkWDn;ozfk;oEKr%OUotpcUR-daLihhn}-6*693Qd*#;*{`lIE!4*G Iluc^>2MFj$9RL6T delta 2670 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 literal 9009 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 TT(8BLzPbRP8yS*-dei>{+^2qT diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor$1.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor$1.class new file mode 100644 index 0000000000000000000000000000000000000000..396ede47232cadd5fe19bb982c03bc35f26a34e5 GIT binary patch literal 1440 zcmb_cTTj$L6#fQQ3$@6)3V2136?eH65U-0UAVhTWl2sCUEA3&oTH3XpF8(bO1f$Uh zV>Izc8PAkekXwA9Njo!V&hCayuzW^A+q=p882ccCX-;CZkR5Pm~EmKIoP0_af zjN{56jLfMZ@W}E@&+b$0>0iyw+w6#jlt51qmQAufw;GWdtxA*Fxs1&DAdYC#v8s|n zfupkGM%iHwUOb%W1@<}a`mUT1c$7OVr}+he)O6rbGX#zqID(@(8qs1v!*PMeoKk2l zx;{OQSC%MzZY_BvkSPYXUGgwp~>&GKT}lsY=va8^NZPM|GUd}Y-v(_?+JBtzFP za~K^La8X02!0djpwutsW$tWRC&SjjSB~)w9r%uZ{7B-pZ~Cmq0|q$TTO6?ww^_dd1&s5W Q;^y7KJ>Kbjr!wT{H^eBCJpcdz literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.class new file mode 100644 index 0000000000000000000000000000000000000000..4715de0f1c5d42989d2c44358437affc0f6ca019 GIT binary patch literal 4868 zcmbVP3wKmk75+{#VTR%IXv#xOTZVzsWCDyJK58fhLV%R;a$+>0)!xjUgbSCs!_1u| zpjM<>tJPXsZB4YLwNh-wDz(gnrcYm3UAlZN*YdaMa{29hr!$jehNiFPvpSvBxvFtj%5t4-F22)oY;C3! zhj;0bLuE^UHHd)1p1J$lF_?3+X40+cOd*s!s*}feI%5iv9w$2-*Gb#Tc&T{ z)Ub9LPu_K%bccdrr7hPo?SyN(T0spc%-bq++Z66;?Kx(Sm~q=o562U3)=Cd|)R?J< z(dnGXI62GJ9c_IIfleo-!)U}p1M?A9SlnZ!^@03}L7nY22W^5k_c%$@?lZHN{4Pxf z+@n@bVQA? z6>h6nalZu^_!!o*4GG8J|@4eUY}edIGKHZQ4*bg?|U#j+Z> z(u5Y$AbEVhnJG1w`Dv|FIoT-=yA9lfeI#Slvh4$0@k?FP*+2;UsdP7+=hnM$(7+)a zratt^ylKyj;NajfGTYI{O$mjjAzJ7lKBEw=q~C4Zdf2pgWQX%7blUA2OX`diBZ$u` ztf<)eeRyZyvQs)6LchY=uCWZ=>r^Bv;Y1@&HWKwPqLIP88yR-oNHmN-91#(B$>=@< zpT`#%u9?Z`bc%(pMc6EXl~6lEFnLvYK9dGgBGHiR_>qOtizA|-VFO2n%`l}^>d36C zv{I(W4QV}Ex^#G`dK{Bc@K8}33TXol*wX^GHyxk^q4CKL3xqdT-Q3S7gfItDwkMWUl89_xV5?i zR9p7Q{TRlhI47!lT;YzncR%Ro-uG~d(4 zWG+6<&~v2l3j@EzWuM&6%4_HL8P`^|04h=m<5##6#H$Lc>#3z|Y@mQ5pHyBEPdRz& zGOg1B14x$P~+_hhY-e6BS>SV3cl8T+km`T1}*|NGN)VB=0 zjdvJ>rx!nlHM7}z@2Ol0K|0eUej|lsXPD<>*Ln}mii%faIN{{8Nxj>WXYT6jy-znv zr)M3y)2w2rZRT=1ht*VhBmeMdKtL{cZ^YKd?}c39Ynq=6_^X%e0e**K?dvxbVO;hs z7x6R9z2N&Kh!_@g6!Yz{1UK;)cc2+J(~FFjawOIvEW>i*3c`vK!u`Z=;#yb`RtAdr z&`gYNw7%QJ*y3B3F~Vhxa2X?v4--vt3wvk*53Qvh+ATBD4iW9}2SD>P613Z}iX2F8 zkrJ9sW`$eB&uwK>5vyn7Y4SYe;cfG6%h?&_?2K}DMmam9lpVc$$W6rLyRn3v@mK~n z#EQ6m9CySD-v9R4tB4n{=_)?nh*;^zB(@f?GjOT#5<_i-6nD8t^f4CqI9hOmWp>bx ztQV$12s$o>x!c>L+BvzWjDCpK7Ncd;Aoh-E1<0d`Iz9 zH2DUDllmswn|lg4FoCxA=1+Tr$P{|}r_k5m{JA0q+6%b1`F?&BFj$0s%QqiKFmMrp z#=CBLkCUqyYG7NR9$VBq3};w^vt;8zW`7oOJcMm{7zgo9O5_nQ-iRMcxo8Pkp6s`= zJjdvx0m4uifw-|<{TDa0Wsp<5l*)GQ7NVMC(}F4D#7vo-BTJ80G1Oc_R5*EEZ`lUa z@b)CVJypY7gS?VTv7M)w<wnOwtySj!dUFCyxzW^^2Z%Q9>!;538(a;(MIQEUol z`kT)d@wEcJE?M}Bijf0gf{J>Yf_;YA=dlvcQqIpK%KK~`Ucg4Yhz`8u#kJhWF7vvT zoQD{hu*vc-4vQxEq$&m5&S@c1Rd}1{O}t!{C2uw6Er#D>^?Wg{=eKNZXcF}|cR9*Z7j)ff*C*B-`-fnV^{Em6!NJ8CP>W_96nvZvs~ZY-@YVL#Pe4W z7tZ{JpU7|u7y5ZdFBb5U9F{zb#nqP!c;y{Tj$>8n$J?0PzkW&R3SN_m^##0n5o=0o z*RXO5ll?{fnkGxDOe*Z}_VO;WxldA;R}sM!*?t{&@-XeiyZlSzPq+_%=JWb5NaL>< z!Qc44{X2F44>I*noWsBPRQk8ah~MZZ%9WY$8j<4OMffd#M-Cq;kEB}j(C{CeTE+R_ SdkkO0ANVa7%mse)-~R!G=EfKR literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor$1.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor$1.class index d3fa654ea1cc994c47044510be5f8cfd44d81e3e..ef2f485d11c1dbd0646ec1d5c3d7de4a19519f79 100644 GIT binary patch delta 302 zcmXAjF-t;W6o#MgUiGF@*Qkhwq9KArvp`4+11YG~EYr+vkc)^FA(0aOhK7c|DQIqL z5#$yPQAY;(^PI!WxiTM2-}BGiJrHKcKoi7eTVHPEr*+|$r+UGA zXw`SK<&(N#M2@C`KBlOll#`O6*{o0l~AUBv{$XnP2}XT z^GsyqwX>k-*_LkCxp$oHx|m^=6q?$1v&OngN~??>v}hET5R7o7=2*#H0l delta 275 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 G{`((?P@-G_ literal 7626 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 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceConstants.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceConstants.class index 0d20f6238f30c5a4034834e1884c473de760031d..9611d364a68b33ef648f5d041573b88db015e2bc 100644 GIT binary patch delta 190 zcmdnY(#Xnn>ff$?3=9k=4AL99m>F#(g9BY$!{Qx%!W|=nff$?3=9k=3=$i;m>K2RY%=pQOY9gKm^C!R7#Ucc^HWl}7?>FZc^G&Z z_$FsE&SPYn%)zAS!N|Y}5&@F@K<)ZKnh{8|YHeo_*a&1WF$e)kHn1Q&gD{ZI15v;r P!XOIdF*1mORfz)t>D>>W diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceUtil.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceUtil.class index 8de4214cd1842c8f948fbe297a9e406955dc160a..61058b61805af290ef5044e1b2fb13b6b93b20e6 100644 GIT binary patch delta 545 zcmZvYy-or_6otda3Gk?E-ou-#WNV*z}i9^ zgBCu3g|A_0ZDYKyXpAz+%$($&@1D8y=6N1gp57lG0VJ_=tGqZ5{WWPFn6fHOsaIsl zGEB)34@ZiIS>v*z)f-L8kE^00dE>{%cmE)11qm#=kz|No`T|i=vFa^B&3N`(saV1? zgF<v}C6 zDR*9-2{zCPxn`Nav**f;2jQhpcF^`9fC+l2n{=Ub<(g`bz)3npj%kb{Y&%tQcrk<+ zxXsYmJ!XdP&*ko7;SMV|Bpp!b9JCAZUqP!#_n@d94S2g)^Jng{;lTAb80?XmACjS9 H7q>qEK>~X~ delta 115 zcmX@d`;(LF)W2Q(7#J8#7>qV@J!hVrz-q|IJb4nU79;=Uy{xw4;tbqCStcOnWRPHx zWME`q2eN%93$m#gi!rbQ+42m`33vmwj diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java index 7c50e82f..11fda1ff 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java @@ -1,5 +1,9 @@ package raven.sqdev.preferences.initializer; +import java.io.File; + +import javax.swing.filechooser.FileSystemView; + import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.jface.preference.IPreferenceStore; @@ -19,8 +23,48 @@ public class SQDevPreferenceInitializer extends AbstractPreferenceInitializer { */ public void initializeDefaultPreferences() { IPreferenceStore store = Activator.getDefault().getPreferenceStore(); - store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY, "main"); - store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, "documents"); + store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY, + locateArmaMainDirectory()); + store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, + locateArmaDocumentsDirectory()); + store.setDefault(SQDevPreferenceConstants.SQDEV_ALWAYS_SAVE_ON_EXIT, false); + } + + /** + * Finds the Arma 3 directory in the programs folder + * + * @return The path of the directory or an empty string if the directory + * couldn't be found + */ + private String locateArmaMainDirectory() { + // navigate to the desired folder through the Steam folder + String path = System.getenv("%programfiles% (x86)"); + + path += "\\Steam\\steamapps\\common\\Arma 3"; + + if (new File(path).exists()) { + return path; + } else { + return ""; + } + } + + /** + * Finds the Arma 3 directory in the documents folder + * + * @return The path of the directory or an empty string if the directory + * couldn't be found + */ + private String locateArmaDocumentsDirectory() { + String path = FileSystemView.getFileSystemView().getDefaultDirectory().getPath(); + + path += "\\Arma 3"; + + if (new File(path).exists()) { + return path; + } else { + return ""; + } } } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java index d6f7d882..5ed457d0 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java @@ -4,6 +4,7 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.ui.IWorkbench; +import raven.sqdev.preferences.preferenceEditors.BooleanSQDevPreferenceEditor; import raven.sqdev.preferences.preferenceEditors.DirectorySQDevPreferenceEditor; import raven.sqdev.preferences.util.SQDevPreferenceConstants; @@ -17,6 +18,7 @@ public SQDevGeneralPreferencePage() { public void init(IWorkbench workbench) { setDescription("General SQDev preferences"); + // preferences concerning the ArmA directories Group armaDirs = createGroup("ArmA directories"); createDescription(armaDirs, "Here the location of your ArmA folders are specified " @@ -30,6 +32,17 @@ public void init(IWorkbench workbench) { SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, "&Documents:", "The path to the \"Arma 3\" or \"Arma 3 - Other Profiles\" directory in your Documents", armaDirs)); + + // miscellaneous preferences + Group misc = createGroup("Miscellaneous"); + + createDescription(misc, + "Miscellaneous preferences defining the behaviour of the SQDev-plugin"); + + addPreferenceEditor(new BooleanSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_ALWAYS_SAVE_ON_EXIT, "&Always save on exit:", + "Whether unsaved preferences should get automatically saved when clicking \"OK\" without a popup asking for it", + misc)); } } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java index 2bb99c0a..20cdbd38 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java @@ -20,6 +20,7 @@ import raven.sqdev.preferences.util.ISQDevPreferenceEditorListener; import raven.sqdev.preferences.util.SQDevChangeEvent; import raven.sqdev.preferences.util.SQDevPreferenceComposite; +import raven.sqdev.preferences.util.SQDevPreferenceUtil; public class SQDevPreferencePage extends PreferencePage implements ISQDevPreferencePage, ISQDevPreferenceEditorListener { @@ -81,16 +82,24 @@ public void initialize() { Composite sharedContainer = new Composite(current, SWT.NULL); for (ISQDevPreferenceEditor currentEditor : getEditors()) { - currentEditor.setContainer(sharedContainer); - - // make all editors fill out the later crated layout - currentEditor.matchComponentCount(maxComponents); - - // create the GUI components of this editor - currentEditor.createComponents(); + if (currentEditor.getContainer().equals(current)) { + // put all editors that have the same container on one new sharedContainer + currentEditor.setContainer(sharedContainer); + // make all editors fill out the later crated layout + currentEditor.matchComponentCount(maxComponents); + // create the GUI components of this editor + currentEditor.createComponents(); + } + } + + GridLayout layout; + + if(sharedContainer.getLayout() == null || !(sharedContainer.getLayout() instanceof GridLayout)) { + layout = new GridLayout(); + }else { + layout = (GridLayout) sharedContainer.getLayout(); } - GridLayout layout = new GridLayout(); layout.numColumns = maxComponents; sharedContainer.setLayout(layout); @@ -220,23 +229,27 @@ public void save() { @Override public boolean performOk() { for (ISQDevPreferenceEditor currentEditor : getEditors()) { - if (currentEditor.needsSave()) { - - //TODO: add option to automatically save unsaved preferences on leaving via ok - - MessageBox messageBox = new MessageBox( - PlatformUI.getWorkbench().getDisplay().getActiveShell(), - SWT.ICON_WARNING | SWT.YES | SWT.NO); - - messageBox.setMessage( - "There are some unsaved preference changes. Do you want to save them now?"); - messageBox.setText("Unsaved Changes"); - int response = messageBox.open(); - if (response == SWT.YES) { + if (currentEditor.needsSave()) { + if (!SQDevPreferenceUtil.alwaysSaveOnExit()) { + MessageBox messageBox = new MessageBox( + PlatformUI.getWorkbench().getDisplay().getActiveShell(), + SWT.ICON_WARNING | SWT.YES | SWT.NO); + messageBox.setMessage( + "There are some unsaved preference changes. Do you want to save them now?"); + messageBox.setText("Unsaved Changes"); + int response = messageBox.open(); + if (response == SWT.YES) { + // save and then exit + save(); + return true; + } else { + // exit without saving + return true; + } + }else { + // save unpromted save(); return true; - } else { - return false; } } } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java index 698c0287..f60c1a96 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java @@ -3,12 +3,15 @@ import java.util.ArrayList; import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.PlatformUI; import raven.sqdev.preferences.activator.Activator; import raven.sqdev.preferences.pages.EStatus; @@ -60,8 +63,16 @@ public abstract class AbstractSQDevPreferenceEditor */ private int emptyComponentsToCreate; + /** + * The tooltip that belongs to this editor + */ private String tooltip; + /** + * The label used by this editor + */ + protected Label label; + /** * Creates a new SQDevPreferenceEditor * @@ -75,7 +86,7 @@ public abstract class AbstractSQDevPreferenceEditor * Indicating whether or not the program should try to resolve * the preferencePage itself */ - protected AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, + private AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, Composite container, boolean resolve, String tooltip) { // initialize the listener list this.listener = new ArrayList(); @@ -182,6 +193,22 @@ public AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, Str setPreferencePage(page); } + @Override + public boolean doSave() { + if(!isValid()) { + MessageDialog.open(MessageDialog.ERROR, + PlatformUI.getWorkbench().getDisplay().getActiveShell(), + "Failed at saving " + getLabelText().substring(1, getLabelText().length() - 1), + "Couldn't save " + getLabelText().substring(1, getLabelText().length() - 1) + + " because it is in an invalid state!", + SWT.NULL); + + return false; + } + + return true; + } + /** * This method will load the current value of the preference this editor is * working on and displays them in the GUI. Can be used to update the GUI. @@ -482,7 +509,8 @@ public void createComponents() { } /** - * Sets the text of the used label + * Sets the text of the used label.
+ * If the label has already been created it will update ot's text. * * @param text * The new text for this label @@ -490,6 +518,13 @@ public void createComponents() { @Override public void setLabelText(String text) { this.labelText = text; + + if (label != null) { + // update label if it has already been created + label.setText(text); + + label.pack(true); + } } /** @@ -563,4 +598,40 @@ public String getTooltip() { return tooltip; } + /** + * Checks if the editor needs to be saved when it will change to this + * content + * + * @param content + * The new content + * @return + */ + public abstract boolean willNeedSave(String content); + + /** + * Indicates graphically whether the editor has a value that differs from + * the value of the preference this editor is working on + * + * @param newText + * The text that represents the value of this editor and that + * will be compared to the preference's value + */ + protected void updateSaveStatus(String newText) { + // mark the editor if it needs to be saved + String labelText = getLabelText(); + + if (willNeedSave(newText)) { + if (!labelText.endsWith("*")) { + labelText += "*"; + } + } else { + if (labelText.endsWith("*")) { + labelText = labelText.substring(0, labelText.length() - 1); + } + } + + setLabelText(labelText); + getContainer().layout(true); + } + } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java new file mode 100644 index 00000000..140e1ee0 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java @@ -0,0 +1,219 @@ +package raven.sqdev.preferences.preferenceEditors; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.SQDevChangeEvent; + +public class BooleanSQDevPreferenceEditor extends AbstractSQDevPreferenceEditor { + + /** + * The checkbox button + */ + protected Button checkBox; + + /** + * The initial state of the checkBox + */ + private boolean initialState; + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + */ + public BooleanSQDevPreferenceEditor(String preferenceKey, String labelText, + Composite container) { + super(preferenceKey, labelText, container); + } + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + */ + public BooleanSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container) { + super(preferenceKey, labelText, tooltip, container); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public BooleanSQDevPreferenceEditor(String preferenceKey, String labelText, Composite container, + ISQDevPreferencePage page) { + super(preferenceKey, labelText, container, page); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public BooleanSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container, ISQDevPreferencePage page) { + super(preferenceKey, labelText, tooltip, container, page); + } + + @Override + public boolean doSave() { + if (super.doSave()) { + getPreferenceStore().setValue(getPreferenceKey(), checkBox.getSelection()); + + updateSaveStatus(String.valueOf(checkBox.getSelection())); + + return true; + } + + return false; + } + + @Override + public boolean needsSave() { + if (willNeedSave(String.valueOf(checkBox.getSelection()))) { + return true; + } else { + return false; + } + } + + @Override + public boolean willNeedSave(String content) { + if (!content.equals("true") && !content.equals("false")) { + // has to be one of the two + throw new IllegalArgumentException( + "Expected \"true\" or \"false\" but got \"" + content + "\""); + } + + boolean newState = (content.equals("true")) ? true : false; + + if (newState != getPreferenceStore().getBoolean(getPreferenceKey())) { + return true; + } else { + return false; + } + } + + @Override + public void doLoad() { + load(getPreferenceStore().getBoolean(getPreferenceKey())); + } + + @Override + public void doLoadDefault() { + load(getPreferenceStore().getDefaultBoolean(getPreferenceKey())); + } + + private void load(boolean state) { + if (checkBox == null) { + // if the checkBox has not yet been created store the state and + // initialize with it + initialState = state; + } else { + if (checkBox.isDisposed()) { + return; + } + + checkBox.setSelection(state); + + evaluateInput(); + updateSaveStatus(String.valueOf(state)); + } + + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_LOADED)); + } + + @Override + public void evaluateInput() { + } + + @Override + public int getComponentCount() { + return 2; + } + + @Override + public void createComponents(Composite container) { + label = new Label(container, SWT.NULL); + setLabelText(getLabelText()); + label.setToolTipText(getTooltip()); + + checkBox = new Button(container, SWT.CHECK); + checkBox.setToolTipText(getTooltip()); + checkBox.addMouseListener(new MouseAdapter() { + + @Override + public void mouseUp(MouseEvent e) { + // fire change event + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_CHANGED)); + + evaluateInput(); + + updateSaveStatus(String.valueOf(checkBox.getSelection())); + } + }); + load(initialState); + + if (getContainer().getLayout() instanceof GridLayout) { + // make the layout's gaps a little wider + GridLayout layout = (GridLayout) getContainer().getLayout(); + layout.horizontalSpacing = 8; + + getContainer().setLayout(layout); + }else { + if(getContainer().getLayout() == null) { + GridLayout layout = new GridLayout(); + layout.horizontalSpacing = 20; + + getContainer().setLayout(layout); + } + } + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java index cfae8793..ed322041 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java @@ -2,12 +2,12 @@ import java.io.File; -import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; @@ -23,16 +23,11 @@ public class DirectorySQDevPreferenceEditor extends AbstractSQDevPreferenceEditor implements VerifyListener { - - /** - * The label used by this editor - */ - private Label label; /** * The TextField used to show the current selected path to the user */ - private Text pathText; + protected Text pathText; /** * The initial text of {@linkplain #pathText}.
@@ -43,7 +38,7 @@ public class DirectorySQDevPreferenceEditor extends AbstractSQDevPreferenceEdito /** * The button to open the FileDialog */ - private Button browseButton; + protected Button browseButton; /** * The text used on the created button. Default value is @@ -129,23 +124,16 @@ public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, @Override public boolean doSave() { - if (isValid()) { + if (super.doSave()) { getPreferenceStore().setValue(getPreferenceKey(), pathText.getText()); // update save status updateSaveStatus(); return true; - } else { - MessageDialog.open(MessageDialog.ERROR, - PlatformUI.getWorkbench().getDisplay().getActiveShell(), - "Failed at saving " + getLabelText().substring(1, getLabelText().length() - 1), - "Couldn't save " + getLabelText().substring(1, getLabelText().length() - 1) - + " because it is in an invalid state!", - SWT.NULL); - - return false; } + + return false; } @Override @@ -162,7 +150,7 @@ public void doLoad() { * @param text * The text to display
*/ - public void load(String text) { + private void load(String text) { if (pathText == null) { setInitialText(text); } else { @@ -191,6 +179,13 @@ public void evaluateInput() { File inputFile = new File(input); EStatus status = EStatus.OK; + if(input.isEmpty()) { + status = EStatus.ERROR; + status.setHint("No path specified!"); + setStatus(status); + return; + } + // check if the directory exists if (!inputFile.exists()) { status = EStatus.ERROR; @@ -214,22 +209,11 @@ public int getComponentCount() { return 3; } - @Override - public void setLabelText(String text) { - super.setLabelText(text); - - if (label != null) { - // update label if it has already been created - label.setText(text); - - label.pack(true); - } - }; - @Override public void createComponents(Composite container) { label = new Label(container, SWT.BOLD); - label.setText(getLabelText()); + setLabelText(getLabelText()); + label.setToolTipText(getTooltip()); // check that initialText is not null if (getInitialText() == null) { @@ -296,14 +280,7 @@ public boolean needsSave() { return willNeedSave(pathText.getText()); } - /** - * Checks if the editor needs to be saved when it will change to this - * content - * - * @param content - * The new content - * @return - */ + @Override public boolean willNeedSave(String content) { if (content.equals(getPreferenceStore().getString(getPreferenceKey()))) { return false; @@ -312,31 +289,6 @@ public boolean willNeedSave(String content) { } } - /** - * Indicates graphically whether the editor has a value that differs from - * the value of the preference this editor is working on - * - * @param newText - * The text that represents the value of this editor and that - * will be compared to the preference's value - */ - public void updateSaveStatus(String newText) { - // mark the editor if it needs to be saved - String labelText = getLabelText(); - - if (willNeedSave(newText)) { - if (!labelText.endsWith("*")) { - labelText += "*"; - } - } else { - if (labelText.endsWith("*")) { - labelText = labelText.substring(0, labelText.length() - 1); - } - } - - setLabelText(labelText); - } - /** * Indicates graphically whether the editor has a value that differs from * the value of the preference this editor is working on @@ -356,4 +308,20 @@ public void verifyText(VerifyEvent e) { changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_CHANGED)); } + @Override + public void setStatus(EStatus status) { + super.setStatus(status); + + if(pathText == null) { + return; + } + + // indicate an error via red backgroundColor + if(status == EStatus.ERROR) { + pathText.setBackground(new Color(Display.getCurrent(), 255, 153, 153)); + }else { + pathText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); + } + } + } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java index cdc8a4ee..b78cfc61 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java @@ -13,4 +13,6 @@ public class SQDevPreferenceConstants { public static final String SQDEV_ARMA_DOCUMENTS_DIRECTORY = "raven.sqdev.ArmADocumentsDirectory"; + public static final String SQDEV_ALWAYS_SAVE_ON_EXIT = "raven.sqdev.AlwaysSaveOnExit"; + } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java index ab66f570..bf842f16 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java @@ -4,13 +4,16 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jface.preference.IPreferenceStore; import org.osgi.framework.Bundle; +import raven.sqdev.preferences.activator.Activator; + /** * This class provides functions for dealing with SQDev preferences * * @author Raven - * + * */ public class SQDevPreferenceUtil { @@ -25,16 +28,37 @@ public static Bundle getPreferenceBundle() { /** * Gets the preferences for the SQDev plugin + * * @return */ public static IEclipsePreferences getPreferences() { - IEclipsePreferences preferences = InstanceScope.INSTANCE - .getNode("raven.sqdev.preferences"); + IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode("raven.sqdev.preferences"); - //check that preferences have been found + // check that preferences have been found Assert.isNotNull(preferences, "The requested preference can not be resolved!"); return preferences; } + /** + * Gets the preference store + * + * @return + */ + public static IPreferenceStore getPreferenceStore() { + return Activator.getDefault().getPreferenceStore(); + } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_ALWAYS_SAVE_ON_EXIT + * preference taht indicates whether the preference page shall prompt for + * save when clicking OK + * + * @return + */ + public static boolean alwaysSaveOnExit() { + return getPreferenceStore().getBoolean(SQDevPreferenceConstants.SQDEV_ALWAYS_SAVE_ON_EXIT); + } + } From 52f80f2bd363a71f2d2c8b04c382d34b571800c7 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Thu, 21 Jan 2016 20:16:23 +0100 Subject: [PATCH 4/6] added editor preferences; added new preferenceEditors --- .../Raven.SQDev.Editors/META-INF/MANIFEST.MF | 6 +- .../raven/sqdev/editors/BasicTextEditor.class | Bin 4676 -> 4361 bytes .../sqdev/editors/activator/Activator.class | Bin 912 -> 1109 bytes .../raven/sqdev/editors/BasicTextEditor.java | 43 ++-- .../sqdev/editors/activator/Activator.java | 33 ++- .../META-INF/MANIFEST.MF | 7 +- .../bin/raven/sqdev/activator/Activator.class | Bin 880 -> 1077 bytes .../editors/sqfeditor/SQFConfiguration.class | Bin 3263 -> 3272 bytes .../src/raven/sqdev/activator/Activator.java | 13 + .../editors/sqfeditor/SQFConfiguration.java | 2 +- plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF | 3 +- .../IllegalRGBSyntaxException.class | Bin 0 -> 1075 bytes .../bin/raven/sqdev/util/ColorUtils.class | Bin 0 -> 1835 bytes .../exceptions/IllegalRGBSyntaxException.java | 34 +++ .../src/raven/sqdev/util/ColorUtils.java | 58 +++++ .../Raven.SQDev.Wizards/META-INF/MANIFEST.MF | 4 +- plugin/Raven.SQDev/feature.xml | 4 +- .../META-INF/MANIFEST.MF | 4 +- .../SQDevPreferenceInitializer.class | Bin 2186 -> 2679 bytes .../pages/SQDevEditorPreferencePage.class | Bin 0 -> 2608 bytes .../pages/SQDevGeneralPreferencePage.class | Bin 2110 -> 2270 bytes .../pages/SQDevPreferencePage.class | Bin 8105 -> 8125 bytes .../AbstractSQDevPreferenceEditor.class | Bin 10369 -> 10781 bytes .../BooleanSQDevPreferenceEditor$1.class | Bin 1440 -> 1446 bytes .../BooleanSQDevPreferenceEditor.class | Bin 4868 -> 4887 bytes .../ColorSQDevPreferenceEditor$1.class | Bin 0 -> 2045 bytes .../ColorSQDevPreferenceEditor.class | Bin 0 -> 5877 bytes .../DirectorySQDevPreferenceEditor$1.class | Bin 1984 -> 1984 bytes .../DirectorySQDevPreferenceEditor.class | Bin 6788 -> 7713 bytes .../ISQDevPreferenceEditor.class | Bin 1385 -> 1383 bytes .../sqdev/preferences/util/EStatus.class | Bin 0 -> 1500 bytes .../util/ISQDevColorConstants.class | Bin 0 -> 649 bytes .../preferences/util/SQDevChangeEvent.class | Bin 807 -> 821 bytes .../util/SQDevPreferenceConstants.class | Bin 641 -> 1032 bytes .../util/SQDevPreferenceUtil.class | Bin 1742 -> 2090 bytes plugin/RavenSQDev.Preferences/plugin.xml | 8 +- .../SQDevPreferenceInitializer.java | 18 ++ .../pages/SQDevEditorPreferencePage.java | 59 +++++ .../pages/SQDevGeneralPreferencePage.java | 9 +- .../pages/SQDevPreferencePage.java | 4 +- .../AbstractSQDevPreferenceEditor.java | 47 +++- .../BooleanSQDevPreferenceEditor.java | 10 +- .../ColorSQDevPreferenceEditor.java | 231 ++++++++++++++++++ .../DirectorySQDevPreferenceEditor.java | 74 ++++-- .../ISQDevPreferenceEditor.java | 2 +- .../raven/sqdev/preferences/util/EStatus.java | 63 +++++ .../util/ISQDevColorConstants.java | 12 + .../preferences/util/SQDevChangeEvent.java | 2 +- .../util/SQDevPreferenceConstants.java | 32 ++- .../preferences/util/SQDevPreferenceUtil.java | 28 ++- 50 files changed, 733 insertions(+), 77 deletions(-) create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/exceptions/IllegalRGBSyntaxException.class create mode 100644 plugin/Raven.SQDev.Util/bin/raven/sqdev/util/ColorUtils.class create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/exceptions/IllegalRGBSyntaxException.java create mode 100644 plugin/Raven.SQDev.Util/src/raven/sqdev/util/ColorUtils.java create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor$1.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/EStatus.class create mode 100644 plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/ISQDevColorConstants.class create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/EStatus.java create mode 100644 plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevColorConstants.java diff --git a/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF index da6aae14..508e65a3 100644 --- a/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF @@ -2,16 +2,18 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Editors Bundle-SymbolicName: raven.sqdev.editors;singleton:=true -Bundle-Version: 0.1.0 +Bundle-Version: 0.1.1 Bundle-Activator: raven.sqdev.editors.activator.Activator Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.ui.editors;bundle-version="3.8.200", org.eclipse.jface.text;bundle-version="3.9.2", org.eclipse.swt, - raven.sqdev.util;bundle-version="0.1.0" + raven.sqdev.util;bundle-version="0.1.0", + raven.sqdev.preferences;bundle-version="0.1.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: raven.sqdev.editors, raven.sqdev.editors.exceptions Bundle-Vendor: Raven +Import-Package: raven.sqdev.preferences.util diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextEditor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextEditor.class index f62d405167c17cc9b7e1f20d1743253369137cf2..b9954cd2095a80e8a9762eee979d05a55493b454 100644 GIT binary patch literal 4361 zcmb7HYgZfR5q=gVgyqFx9D{M=B*v~SBw!68iEUg`5G0l@z#v4cP=~Cg1=bc?d3ObN z?rCnlH|agS-!I?No>sJVPfz=$AM%@ediuP(D`^F5lN=7(%RBGPGc(W3JNwc9{{Bw@ zWB5Y^EfP+d>XuegtlI@`OVJ9tZJ3rarCNG^NxNguI4>dyNjPJe>xz~y>Saq)DtcYk zrkK)@l_2MhqG8UeC3RghCG@9*EF^t0;}VXzmal4eXNbmLsAv^U!a(3w7gLicHMCvQ zOS(NFp*1$JEFqLM3R)Dc=#X&$(Fi&vJhmT@C=Q_`3JKjZj^H5)ot9?%kxKYqV+g|$j7muO;rMK&M9sLUXYSZq$0V{=D&uD~iWm<~$|iJT8zq z^fQ1B1aY5G2M81YQH;yDgwIHbl8W_89{xD=^Q1|@gBZcnGCqq*LBMiZD-{@5eeEtw zH?3QAS>$VIZ@%&s%QiNZJ;Kz{T? zIWML7u;sC9Xg@VgOkg2w*4khquymT^UyGfDj*PA5Z_TP@r~V?CyFZU=4)`szTj!0^ zn!a8!o62Ka%NwR@lWCbsxonsW-3mbEXtV2wFs6ZT(}R_ zJ&4oVnp!E^O^s+)weuUA*$$@m$m(ig%`UDo!?rF!>ZSE4GWfh`;W-J%Vk^n?O?69E zifU76HKIW1ARsmWNwI-7)3n68lDa!E9J zQ(MzmBzcXMMh2ga?Ty;rHv+0&J0v}*8~XZ2k^gqGVv4F0hebPXNr?Hu<{OKbYa58Y zj(Jl?Nnq|5(XE)4VG2DwhJwIGtQs>fG}YQCNG1=Us1raD82aC`l5{H3VVZ;|n)H6$ zOp1eNOGX6k5!|T-VAt5>PekpAjba-e2k;VJiQwg0mLIfF#;bUZt$cbuJC&YUUC7Qa zO)jP8=T>JY7q4bS-wQe)noP5WZ{rOaU&NbqoM*o{^4SxD`*-u!fn@>qZ5i)4C^D(J zXZNBIB43j6Wg&8CaXvdYy*jlxnY=o)lo3l`mGL#P)R|exPA<+gt$jnrH=S+C>|#1s zUlNDT`!c?TZ%a6OTa178)>xla;=%Y+yCt1-;$Yc7=EV08nrDXOIqc3A*Vu-VM#(mf zq7yrRYY9GXL?>#+2Qt2g?+d>CNXCy*X8Er@u#rabQ~W%FpGi39Pi?tg#+FjC^`eql znAWx$#hv9l8Na|UISKLHZ!Bau!*h@u;hFEp>@vNfRY~pILfWk0*D`*C-;y?Z$+FcV zT^|iRWnc$N!BU9PwDq^%2Z|FSaKt0L&?BtGPe z76@Q%j)612&EfiHes6f2C!B~-I-d9o5)BAZz6auTF5zhCah}^e4MMw!qHuzvr>E;f z20=u2G@ckdu><8|s4w(yjC_ET_wYD__r%38-F>nzT*bw{(7!O!7ycV2TF@5~s9PP> z#~lp{Gctn17-cx0WB|_7$#DnAglnOWV-!cQ9OfZsqX*=a2YA0I?jT> zf~&-wrer&$|3ZmimMfelJoF!NHN@2`@x%@my4wB`&b4;Mvbj*#KsFcdTFK_xx~^w) zk*=4rx%RGCva|P)$qjaALp%7~TwlkrfAjXSCd5H)oct1&8Q<$T~JpGvE%7Wv0+(lRS{0a<|i9JS=+=fZd$4Em9 zw!>gf=$>DGdQ^7PBj>1gdD@@{KMcLiP4uWV9CGP#oen+kXxK{+QCxx^{3P^ry+w$E zRAcwBO*Y(3C;o&Nt9YH4x7^FS?&T})mXvk^boz^A?g(={{hSAhyOu`xcn7Asp40{sLRT3C-yJW h-IrO^uhQu2J|n&Lob-BZ6f9#O>7kw9@wNrO|3A~jl_~%L literal 4676 zcmb7H`CA*;6+Ht2ftUa$j$^zv#+#6ArolK4#>E98gMvUoLbS5u(y=taI6{(VM%b?H zBzDt%-%_XhzAuiOh`99Y*Z$hSsb9aIHzULdh7kXNhBtHHz31M0?tSr>!VjPPdANsf?M-4Ums%DuIdbZUZNyKT9`dc7NcxLm~NHJeDBs^E$ zKM@eW1h-W4xq)%=`l=we-c>9dw}(({<7^P6gk$?)fNvs5&h z012mMR^l02THGAVqe1Tk*9BAL*6+-lYT*Ph;xH#F<08h%9Qx_O z27=fo)E>gbe*`fZFJV$bfK;qia^Huc-+E2=&b8qJresVbAqZG1X@wl)sxRDP>Be=F zE{lAf+M2Iy*|dtw$`)agnsr`MMaN=WuS<$|o+UIHB83wA>ZDz1@J>1HnAWYlM$Sty zE>^1SI<=FUIwr6Xme<>0*t2x%GU@#nE8DnYYPMa8Xi%U-+3G~&}TuHaLCT$M1m4b`g< z$Fv2toVV&4(Udp>HKPSN9s=|8xdkgf&kS3-0Lh~<02K?Og)j2V30{tDJz6h`R;S}t zKdwnQ>qhVdzR1X9nKTvs-rXmw@FcugA0`h1dF``9q@yUKgzKzqyPBLc-z{DcUD?nU zG%`D@u{=n-6Tz*nZhhnUZpyHP{vH9pY?wtubanRmt%^lQUXgJFH`zbgEjG-iI2W<~ zKhI9#4x-~}sfJF8ZQ3%_hR@)RAGcY{Pqb0SUA*SBm?|^az&yNWf?M$h?)!01LeQ%@ z#!@q5+KPQ_tWQ}C$!GDV1i3nz*`u0-Lv_B1rm<+Kr6oOUD#`Ity7C4-FXIdNB8MbK zhwtoh%^WeEK~6${JrTC3=-rwm5uh&%Z?6kKzAEEu0$H1DGGn7K*9&s64&oDVnCEW5 z9t#Dv$e@PH5xW7|1t#H4o!$>iV0KV8V?hkXWB&)yLY&m!m+=ht`0@5OiE|gh`b-kQ z1MF|bkMI*eek|dzSHkP|$@nRLM(T_u(xdU{{7gDAJ2D$fOmjR>PNu{`v7-u}c@OXl z8NbA@7%~n^Vn$*U^*-?Gth2-g*x$(bt&JkZ`@mKdLge={{vbr!lZo{7SnbXrKK)6? zpT(z+)J%FL8Lj*FR~ZlOZRATlQ~M-N=|?jDhIe@zxGv`9+F4Q??n2)9W1A)IgSD;X zo(n@e2d!#G(9St0F6v@_+`VZW>=TzEj?WQxQD}^y_eMDQ}B!vK7YHp%Fv3$=SM=T*cV#Efy^onRk&Qk5&nCug5#kILhslL zPVsjS;Q;&KA>S_wTi@}F{(EtHV#0UtvHaFEa^Kw$%JWS~ZAsq_8hrta9 z0sCzqol|TLdmO2%2BBRXlwW{kOgV0P}{h{#5gRA)1IbXN$-?;EL4zFQ^!Hb-0 zqPt_=O%+UZ`~HOs-A#`XZ$P(Cpl-BL@3S?WW>(H%7hYgE&ylF-Y4?JSW7x4!!_kkI zF+=;biX>7t%6`luO?|EC#T-6CRQuRQKFQoR;SwcVApIALAD8)sqlbfD3i7K+<^522 z74x0V|7glIb_UZKUuSPR)6{u6ooVj8lFs-$Z>KXYop;kyYfv*MyRyDjXw%_S6)c6j zTDsaQD1^J(yLMGz(AlzxL060KF>W=|&#tydc>R5R?lHb(FWYM$c0IyZ)<0}y;gZeJ z2ysPuwHs%ICP<}mUWi`8ASM}?IEMKgK>}lp#6>=1j6#AD$S?+1=zo^aC9VwmzCxex z@Oclf*wGwtJg!CaKE94`Fdjk5d=uYdGzU0;e;eOnG!r-L&w??Z9nXxx<>ii=%iAVIIDx89GtfPB{!z S1J^7 diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/activator/Activator.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/activator/Activator.class index d6de0780dc7e68fa2b6531fa0e41d78096e94e91..0d22669fb4b7e93c6f8b0ea94020d688186e2960 100644 GIT binary patch delta 288 zcmbQhewBmk)W2Q(7#J8#7<4vr@iNs5rKgqz6s4x67NzDTrv{hg7o{>X7;0$xLUs{rx zqaPgTl3Iq)9LfO{?fg~GP%mJ)} T2O`fP%)kwlVPwz(tI`GlTOc`!VSNT6pb1Ps%*dbuW~l-IzVZ+g diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java index cbed608d..ce81b903 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java @@ -1,6 +1,5 @@ package raven.sqdev.editors; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.IDocumentExtension3; import org.eclipse.jface.text.ITextViewerExtension; import org.eclipse.jface.text.source.DefaultCharacterPairMatcher; @@ -11,14 +10,11 @@ import org.eclipse.ui.editors.text.TextEditor; import org.eclipse.ui.texteditor.SourceViewerDecorationSupport; +import raven.sqdev.preferences.util.SQDevPreferenceConstants; +import raven.sqdev.preferences.util.SQDevPreferenceUtil; + public class BasicTextEditor extends TextEditor { - public static final String EDITOR_MATCHING_BRACKETS_KEY = "matchingBrackets"; - public static final String EDITOR_MATCHING_BRACKETS_COLOR_KEY = "matchingBracketsColor"; - public static final String EDITOR_HIGHLIGHT_CURRENTLINE_KEY = "highlightCurrentLine"; - public static final String EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY = "highlighCurrentLineColor"; - - private ColorManager colorManager; private EditorKeyEventQueue editorKeyEventQueue; @@ -71,24 +67,17 @@ protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupp ICharacterPairMatcher matcher = new DefaultCharacterPairMatcher(matchChars, IDocumentExtension3.DEFAULT_PARTITIONING, true); + // character pair matching support.setCharacterPairMatcher(matcher); - support.setMatchingCharacterPainterPreferenceKeys(EDITOR_MATCHING_BRACKETS_KEY, - EDITOR_MATCHING_BRACKETS_COLOR_KEY); - + support.setMatchingCharacterPainterPreferenceKeys( + SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_KEY, + SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY); + // newLine highlighting - support.setCursorLinePainterPreferenceKeys(EDITOR_HIGHLIGHT_CURRENTLINE_KEY, - EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY); + support.setCursorLinePainterPreferenceKeys( + SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY, + SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY); - // Enable bracket highlighting in the preference store - IPreferenceStore store = getPreferenceStore(); - store.setDefault(EDITOR_MATCHING_BRACKETS_KEY, true); - store.setDefault(EDITOR_MATCHING_BRACKETS_COLOR_KEY, - ISQDevColorConstants.getRGBValuesAsString(ISQDevColorConstants.BRACKETMATCH)); - - //enable currentLine highlighting - store.setDefault(EDITOR_HIGHLIGHT_CURRENTLINE_KEY, true); - store.setDefault(EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY, - ISQDevColorConstants.getRGBValuesAsString(ISQDevColorConstants.CURRENTLINE)); } /** @@ -128,4 +117,14 @@ public void addCharacterPairHandler() { getEditorKeyEventQueue().queueEditorKeyHandler(pairHandler); } + @Override + public void createPartControl(Composite parent) { + super.createPartControl(parent); + + if (fSourceViewerDecorationSupport != null) { + // set the plugin's shared preference store instead of the default one + fSourceViewerDecorationSupport.install(SQDevPreferenceUtil.getPreferenceStore()); + } + } + } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java index 9665e7f7..de966b93 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/activator/Activator.java @@ -1,16 +1,19 @@ package raven.sqdev.editors.activator; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; +import raven.sqdev.preferences.util.SQDevPreferenceUtil; + /** * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin { - + // The plug-in ID public static final String PLUGIN_ID = "Raven.SQDev.Editors"; //$NON-NLS-1$ - + // The shared instance private static Activator plugin; @@ -19,25 +22,29 @@ public class Activator extends AbstractUIPlugin { */ public Activator() { } - + /* * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework. + * BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } - + /* * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework. + * BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } - + /** * Returns the shared instance * @@ -46,5 +53,15 @@ public void stop(BundleContext context) throws Exception { public static Activator getDefault() { return plugin; } - + + /** + * This will return the preference store of + * raven.sqdev.preferences as this is where all SQDev + * preference are stored + */ + @Override + public IPreferenceStore getPreferenceStore() { + return SQDevPreferenceUtil.getPreferenceStore(); + } + } diff --git a/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF index b1bbf23a..f64cc031 100644 --- a/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.SQFEditor/META-INF/MANIFEST.MF @@ -2,16 +2,17 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: SQFEditor Bundle-SymbolicName: raven.sqdev.editors.sqfeditor;singleton:=true -Bundle-Version: 0.1.0 +Bundle-Version: 0.1.1 Bundle-Activator: raven.sqdev.activator.Activator Bundle-Vendor: Raven Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.ui.editors, org.eclipse.jface.text;bundle-version="3.9.2", - raven.sqdev.editors;bundle-version="0.1.0", org.eclipse.osgi, - raven.sqdev.util;bundle-version="0.1.0" + raven.sqdev.util;bundle-version="0.1.0", + raven.sqdev.editors;bundle-version="0.1.1", + raven.sqdev.preferences Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Import-Package: raven.sqdev.exceptions diff --git a/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/activator/Activator.class b/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/activator/Activator.class index 5efa31124443589ab906535182966f656478127b..537bb16ef1712473fa902ef66b6c6d37e7f1c61c 100644 GIT binary patch delta 288 zcmeyswv~hH)W2Q(7#J8#7<4vry=ANyN>42bC`wIBElSNxP7N-}FG^)(Fx1fW$uCOR zPfgCrEGSOZ&q_;7PSr1fE7SKx(_+oVpw6Jl&Y;1_U{I7;mYSzuT$qwthNPufzqBMX zM?W~wCAAEpIg|q^$itw*pgQ?0qa!2hWOF7hR&fRv28qdOOx~RG46Fgm@&Va;K$;Oqv+Q6{+W?jq1d?oEF&nTB T9*8`HFatMGhLJ%FtV$aIx!OVW delta 91 zcmdnW@qvx&)W2Q(7#J8#7}Pd$y=9!-z+}(JGWh_L7OMyY3xnw7_e|cLG7PK?vJ9LI na+4P_%T7*Uw%}9+%BcZG)PW+d!ukwCKogjNn2|vR%u)paCu$LJ diff --git a/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFConfiguration.class b/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFConfiguration.class index 0049fe10ff0b1fc2cc979b93e7cbf943cf701c3c..ace90eb51a0704b98ee2f883839d38e9417edb68 100644 GIT binary patch delta 42 xcmdllc|vl7DT}OOQDRwYo_=v*N@|&YK~ZX2YEf!la%!=DX-Q_zW>1zf4ggV54~qZ* delta 18 ZcmX>hxnFXFDGQ^<raven.sqdev.preferences as this is where all SQDev + * preference are stored + */ + @Override + public IPreferenceStore getPreferenceStore() { + return SQDevPreferenceUtil.getPreferenceStore(); + } } diff --git a/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFConfiguration.java b/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFConfiguration.java index 7bbe3209..a67cb750 100644 --- a/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFConfiguration.java +++ b/plugin/Raven.SQDev.SQFEditor/src/raven/sqdev/editors/sqfeditor/SQFConfiguration.java @@ -9,9 +9,9 @@ import org.eclipse.jface.text.source.SourceViewerConfiguration; import raven.sqdev.editors.ColorManager; -import raven.sqdev.editors.ISQDevColorConstants; import raven.sqdev.editors.KeywordScanner; import raven.sqdev.editors.NonRuleBasedDamagerRepairer; +import raven.sqdev.preferences.util.ISQDevColorConstants; public final class SQFConfiguration extends SourceViewerConfiguration { diff --git a/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF index 274770c3..b24b77e9 100644 --- a/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Util/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Util Bundle-SymbolicName: raven.sqdev.util -Bundle-Version: 0.1.0 +Bundle-Version: 0.2.0 Bundle-Activator: raven.sqdev.util.Activator Bundle-Vendor: Raven Require-Bundle: org.eclipse.core.runtime @@ -10,3 +10,4 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: raven.sqdev.exceptions, raven.sqdev.util +Import-Package: org.eclipse.swt.graphics diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/exceptions/IllegalRGBSyntaxException.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/exceptions/IllegalRGBSyntaxException.class new file mode 100644 index 0000000000000000000000000000000000000000..f081cb3c2ec1e310f9c724eb405c8c1ac7972a0c GIT binary patch literal 1075 zcma))&vFt$5XQeI3#%Iv5)gtUBt(r8k`haEijs)R>D@M|(dmm2as4g!} zIrOc8apcm{t;oJy4xjajlrojuz=+>3@j2dEz6NFgYy&V zcEpJ-3E9@by5m4|luDL|&Q5 z5%hEEd7>W{|3^wFP6Ik;?%+Z>iy0-wC=!yU2s|d_r;7d65^B?s*u|C7$l8{|mI?d+ zo7U?^iMLc@g|I3e<+2?Nhc3U4hsBfXaeFUZ%MWjSVZQIU!erA%dl0y$d}gTuY|d@w zebpRngQv+q9HE3HQoQRNC2)-+Mq!cHG@m@;op?{y##s6sN;13}ECrUKA%hkEN=G8B zBFm8iOY-Y+_80jd3a~HrTeZSc$Q3*+i1D24l;4ZH(<%@)oYM iS~cw;QclRmglxoQ)#%%}6FM-k!(STLxy!i;-1`kwh0$&R literal 0 HcmV?d00001 diff --git a/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/ColorUtils.class b/plugin/Raven.SQDev.Util/bin/raven/sqdev/util/ColorUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..1d76370768cb9faa658a9b1521f67ec1ef25a0e6 GIT binary patch literal 1835 zcma)6-%}e^6#gz**bo+>0orPzU1*j3f^E}UtAQw`Ka7TAn=}?J%FX7IY~60c?gnvu z(HVVk{3CqywVf$}kr{pWAM(XGdKk{R zd{a1vw^0+DM%%Y+W3g#B-G_AYR45F?PxvM`Z0^*JbkDcne<1cP*#RkWCbuZru>3ZM8gMcwhTQ-Q}%@WqJlZ&n1h8#6zE)ic<_{UNzrr zTXs#j{TRWRicyB~lj3SPjWd+FD{2g^5X0*@r{ay5bPC}#jAMd9-ITNBr7q@A+KVd(mU2>A?KjgHN1}x7&NolcKjvon+-v& zIo(CwW8&tL1r@~i^3nKW%M>l&YC4`#ux(N2Hsw_M#_{>q?Src*ZV_U+A#^Y3X?-e+ zI}DjAy}>=5JGvEm>R#ZduQy#i(1-e8rxz4)GKK|QkWE<7@DVs0&xar;COtab2t`1ZPz z9^XbhJ+Y1H^q8`ZnO_lI%5<=ren!*=@I8K@ibn#m@+1gwiLBEYLxOrDiCNmS$lw;8 z9%BZpr1S=^V3Vxh;wt%H!;h5iPq-0CkSED0O{{^_K7j86F&O#J%Q;P=tr7ywJHp(c lfkopB3Pn&*g-N$H@)|red,green,blue according to the + * given RGB + * + * @param rgb + * The RGB whose values should be used + * @return The newly created String + */ + public static String getRGBValuesAsString(RGB rgb) { + return (String) (rgb.red + "," + rgb.green + "," + rgb.blue); + } + + /** + * Decodes a string into a RGB. + * + * @param str + * The string of the syntax "red,green,blue" whereas + * red, green and blue are integer values. + * @return + */ + public static RGB decodeRGB(String str) { + RGB rgb = new RGB(0, 0, 0); + + try { + if (StringUtils.countMatches(str, ",") != 2) { + throw new IllegalRGBSyntaxException( + "The string \"" + str + "\" has an illegal syntax for decoding as RGB!"); + } + + int red = Integer.parseInt(str.substring(0, str.indexOf(",")).trim()); + int green = Integer + .parseInt(str.substring(str.indexOf(",") + 1, str.lastIndexOf(",")).trim()); + int blue = Integer.parseInt(str.substring(str.lastIndexOf(",") + 1).trim()); + + rgb.red = red; + rgb.green = green; + rgb.blue = blue; + } catch (IllegalRGBSyntaxException e) { + e.printStackTrace(); + } + + return rgb; + } +} diff --git a/plugin/Raven.SQDev.Wizards/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Wizards/META-INF/MANIFEST.MF index 571a904c..a4459b80 100644 --- a/plugin/Raven.SQDev.Wizards/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Wizards/META-INF/MANIFEST.MF @@ -9,11 +9,11 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources, org.eclipse.ui, org.eclipse.ui.ide, - raven.sqdev.editors, org.eclipse.ui.workbench, org.eclipse.ui.editors, raven.sqdev.util;bundle-version="0.1.0", org.eclipse.swt, - org.eclipse.jface + org.eclipse.jface, + raven.sqdev.editors;bundle-version="0.1.1" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy diff --git a/plugin/Raven.SQDev/feature.xml b/plugin/Raven.SQDev/feature.xml index 467d7fbe..80cef441 100644 --- a/plugin/Raven.SQDev/feature.xml +++ b/plugin/Raven.SQDev/feature.xml @@ -31,11 +31,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES - + @@ -43,7 +43,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES id="raven.sqdev.editors" download-size="0" install-size="0" - version="0.1.0" + version="0.1.1" unpack="false"/> -VW@~N6r~jeDcF_*;(Khb?dUKqGt>IEx^?MY znHUrQ19eeA6L)U(Z*i>)V>}%}YfOxbxi|OBIp6m?_ns$BUz#_6{QmYmfCG3e!NV{l zQf&KE*7bU-&pRulkD=YtD%|X~7jwMQ%T4W?!DE(|y~&+P&B+#I>}S~3n6pq1>t=p6 z%Z?X~qP3134oVnch}IpdWk)yE@#)klUUC1&i>B>preiBOgu@I8Gk$%_wtw*q(MQqGi}0{CUH$c7VQkOQ~Y_Y5;#4k z3!xX)QQhD{b;Dv|gdQN-}gsYK|>RZ7+FCwAn z8}u*Z$O<~@rxR=8;Wvn{gj6uZ&`jDc17SUF$Cz+O?Kv1xOP7;zNe_C9Xc2vifaVGH&$@$1K(n~lO zx=_QV8Z?UK<|9kEUPJyF{E=6oo3E(U>$0`b%K(E2&{VgQYZxcVJ=S2=vuYK<9xT8F zLy;0uJ-cC{RRoYZ7)ljM7?jINr{u^VGkj|1=3j2_z3&=EJL{~9_e`EC4 MF&L_Vk7yqK0K3By6951J delta 749 zcma)(O-~b16o%j1GIOWHsI`+RO53!f!G&RO z+{j(|FG^wx(Zs~9|HFS^!p0a+YZoPM+`Q+^opavzxig2}cPHK7e}Dc8U<{ia4u)y5 z!cOn9;l1UEQw&OzvC9nJp-Qz}s2W@AR?(~toeONoCW0!hOmK`dxHpa0M!0B{3gOI~ znr&`rxQdwgAdMxiF`VjnYgesOA^FNG=FO^#NlbH09o=tDXqdt5t~}lyM^b}?Ifh>G z&Cw$TR~5{QHTi-!j++{8;WmS8R4QgE&k$;kh`QuSw-XX7;#kzM1V4jfmoqJMj%5a| z1!a}P3v?qDDI}Y+qTwDgWNB_&HM_>(3ZgkTJ*1$+5s>i4@9EVKGsecP698`niy%Jd5 zqs{@9bQmtuKAP#L=QFg?j~)!bhe7HFa29?9NSp4yzYcA8j`Ij3B2uoto#+9sEPX*d zs~;e-kL#Wr4J^WaMl``v{bP2vMh~5XFpQ1d)!YP&-P- zMXcf>U1g0n6tG_y;q+@AwC$%;@xyguC)>cY23{V)SpRQ~1R+h4*$ggWmOzpn7|}L{ Q`Y*<46N6y`=pq{H4+`Rl5C8xG diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.class new file mode 100644 index 0000000000000000000000000000000000000000..ce6af552eb6587f32d55b8f8db82e27937e1f5f2 GIT binary patch literal 2608 zcmb7GZByGu5PlA9tT-kwYH8vofOv^(6hI*)A=qh?fO%^TA%&Wz%@-jb_7x+!k__pW zcBcQRUtp%4=?}<{>U4FounmSGaX`3L$ihKTlf+ zfiMhZi;i0{xK$H%j~fkPtnE1N{w~2#%}1Pq`T8 z)-x6yr^ZcN^0k$$a8c2qXB31N=z9{zcD)G6$dSiu-12!j^eF5Ou8iVgK>taG_g!*(9>Fe> zb`Ez>#6&5e)N~349uYasa``M!3`^OI3+f!^YhBTnOnyvt)ebn9s4lpswa@)^)3>S$ zo-hnXaPNjIXOVu!uy!S+4+57#O-7FDrf@y217-!!sr@WEHOKW7UYV zI)N7qg{u=%?$Z?@1=Rhr?dUW)60mSJVkR9%x=`?n;a;Xm)UJG7V8|8t9$AMpl;Hzmz9g#1 z|Cx-L)Synwh?l7$9!1TVVCZNZot>IAPrDeyaEE4lJ%sI$VJxI%6W6oQhmC__^%KhB zvKBM;2ce!F4<& z-Gxi71`>P|Ob3@5MySd3(iaBMLvM7a)0m*yEIk=LFGXcP2z&OtgeRQ zgq}{2xE1=JbTa}fg*8CI-k~u~Kf18#H;DTfrcoowIEFAmxJ+S`dhZx!NHU8D^bIzG zd1UYsI#w`=O-y5(G)j1cA4%&y%}qQ;g*5l^6bE<)2XpXf{sGVNJ6Q*ieILTogp2^f zxA=}g>xYXX)(PNo{EQ8}p}fpvnf7@@aIcVux3n6kJ%-4~7M+-)xZHg1Xjzuo?Bmvk~m9n)Ugr*|6&j%gz6f?o{0F znELHGK4d-UfJP&3>mt;G&_!*s#0Z|y?ap~!H=Dr_wjzS4 zOe!ZVF7K59PcT^gh0C+vMXPh&&6uz%-<9L36oajD-aTuz+ozq@Wv^>OMyA!Wvd&Pv z8_miGHNrOKyXs*%`KdZtURn)TEGuseO&K%Z_VEQH6tdA2+&%yod}aVgMTEF(0C!Ei z!dvG)?&rbK6T|@87>V%}p8QAn8d0i39@)szFD0t6^X_El!~iXs6Iht1jF$gv5mbL&8cIBx7i*rWPXux{~-0B;Q8Z z85YLGh0jSa(WMJ_E?n^s+_-gRz0;y5W|Fzzx%YhM+&S~2^RW~A^6SGV02kQS;3AgP zSKs8p6W_B&JQ@U<2s6nDG0{^q@q5gugZPPWn!3hwYCX}qUT}uNUe{XL9$4LnmY=gk zWXCeC-JO+N=AhTz3bKR;8p}lNj=5(x`_gT0Sod!adVbCkp*^#|+g;r@w}dN})i7%` z)M?_Try1t?x68@nKuB|;sQT?1Q>@S>PlQUk+t zH!AWj!VgeGnttdEpvoW&!EHuynG@(RfjQx2#6aXRkE+zPJWp{5;#g1~?jb^OYl1aw z0QwLqN0itXajarZZbyXaVhVAoP3cmq*LcVDD`zlT#^*Gd85xGhgfl}IN+|yo$&N(U z1v^XmjQV?~U(0FyNkON}9K6g!JnNdP(x9r88j@^1}2bm$FyS8QT z?JjOvopx(e;}twoIZedwTl-dhTe9^P`{BJ#JIFi{-nX{*TFo76Q@9{!Bb;Nw`E6|Y zD-l-Tuf>l--4iJAiNBksizOGgmS3Sz>ERCX1*^?+k0Ig^7frcogv$%QW0Mkuvo4kX z5C5@r`!FkK1}Z=m2?mj22t{fz8AV-kHyFd5a3(}g)KEZCVxo%_Uf=-4k-!>!eT3mt z1*=#A`ZCi)Dpp6>f37O5CYEJjRC*Qa&?VL-ONnFV2O4j^!oXX=OLBbRAu=R*9-Lok zy)-^(ye&-6Tfi)Tr14H}!>u$g%Ou7)=`=EH-5f&9pW8(n?E+{_3|1j0cu6!oI}b)v z^JSOGIMXh(hlmY9PQU@erab+3moxt)4fsW}fGCSdv5XumXM)o}{!B5?B1@v=J)R#* mN}h_QQ_Y&CGI9DvKmQ-xkRO`I6dRb~Rp&|ex>}Qdh4sHBe`crv diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.class index 974224a188b00971b92cf03a7f1710fafb8abc47..befe772844aa03ebd3d6b57e1b773675e575d38d 100644 GIT binary patch literal 10781 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 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor$1.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor$1.class index 396ede47232cadd5fe19bb982c03bc35f26a34e5..7a5d390559e75623320f4f5cb016b09dfe14533c 100644 GIT binary patch delta 32 ncmZ3$y^MQ_u AdH?_b delta 140 zcmbQP)}ppyw;-n;11keF0|UdX$wvfZ_~o^>F|6Chu;~E94qqJsj>#567R+u8f|HAd zG{f>3E-;iaTx6(ZxWv%RaG9Z-;R?e$eiHJnt3f*yD@nozb?G%)+qUwX9Xsy4|Yd@P^w2)$$QBmCyt}jC^9Q`bI1VP8z zsi>wF%N`G75iuN&8&c0+CfDUb_+BE!n=+8`ErwEdFp#+#L#m)WF#?8B8;5W>jbR+M zVPTA6IBOJ+m1Q8-np>M9dc-$LMC`}n}ZDTY&>xJ~J-`#gT4qOFaRjng>8 zV3X}*6+PXgZfP)_&E~qOkV)yyp?Qy4oR|B&{FY_ylH#wTKg( zsowl{8JYBE@TrYk_>87hg(6^>>{G%nD-+hTjoT@&>H&7Qu zt~WkY=oK5QxI;{Q#XW{hzckRcIF#%{YU!>q*}o*)6HD3fl6hn}-=n_QY#n1u=^NF; z7j7)PB!}mEthyp$I9iRl`?SKtWJy_AXE<|E@HCfI)r?%RD$Sys`2SbICDT!~99II@ zSDHGiBI1VfY;1tCFz!Zz$D*LNLKT>IL*E_tHbhd>G8VMMXycTEKtu(fYb`V;X)_Pg zdyI{boApemA^KW4Lh=zh-JrXXr1KYlr=ORwe@%3b8Cmj#YJ%@EPIsGZjPxBGr+`HfCNTSDDZMhV%~RcW`AJH|Do-b8X=j#*B1f2cK`F zXgm(Xc$_9)z;nX-f$q=A!;iG?USJMCA&;MN4ZkEz@@;RsOvo?pqLeV2!56qkyyr-- pj0)kd5#lJ=KW1Dr7VeYi0f~n25LNn5QExuNV>+b?zywI2{{T{jOo9La literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor.class new file mode 100644 index 0000000000000000000000000000000000000000..a35d18eca847a9d14b5ba6ac5baa12d0ea6c157a GIT binary patch literal 5877 zcmb_g3wso26@DkX%O=avhDa%);hI2mqbn3|giA?)xHM2o(r9S0Om>H4=(4-)%t9%> zsI6$NSk%@+jkKj!w4$Y!Y=BrSR$IktYrRnGU90{F_3`mN-weCSW;dif=6SL+J9EDC zp38gA`My2>-!o?cEX6;ADATYeZR|D^VS881+#OD(&FyB|Ohiq4#QoZsN0CX(t%T*Q)UdvO?CT;= zN@2DocczlI<(MrE-5UID$(R{}4^wnhAf(~S4l7}9%^q4Oq<#&)=qOvb-r24I>Hy~8bHtXm_7d1rFrs0@sab%~etJeBa94Mk-G)YDY zC>=zIpj*dB@KHBip61$dG`kC>8Z>OtaVu6ZY36R`ndU_jsf;6Uw(9tpgt;=4it)M7 zn~8NYb`aZ0r&7&2<5=;qYAkL296IJ&PE@BHy&Oz}UzRhgy0@(UsjswD2#aS!g*5KuEw!<>>HDLWN^Kd$2w(sRU6^;AZwcyPat2ZSLy zyTqs$`*nO;R)n~s%bjXs@Pj%&EAm%RULJQ@DOXhldxgdi2Jw0B14=O~Kh`h339DNi z!T}tV2z^0Aq%@n}jZ!rmBlwbzNAM^aV#Hz_k{R3Vux!UvTZ)FU3^9fOc6gMaQuG)O z2XRQlyh|oe$K&{l+b%ndy~zwYTCDY4WQi-&62w=FD32=z;r6r@bLA>9fG2c3iKjG7 z?N6qyyJUwH?@Sp{ZWc9Ykq{ok(>lI}XJ~^;wQEC>7E@q?w3q=LlPs{sOmeY{ZM?=< zMeDy+q+#c}t7>5(d>hXN@g35*R1Bq)Q@M^4c;4k>TPDp-JwsSKPN8|rNdIT?f|!4@ zX!YmJ;W5C9nk^AlSrAzb*A&{5lWcDbVGyT8=jlu6OdES-m#oM#h+!Sy!;5Th%s?yW zYhRk(ik-4Z7II)})OhQ^uj3`0llDlxn>ohVoMlTMtdHob^K7tZ0DvYCnIlO z(ebL}Fc@=3BRfb`&Lvur6G;I)MM(>X?R`?eY4!Cp^a0Bqe`8NGxwY<$(oohHWiuVq zrE+rZZA{WH@XH|HWJMP4e{}o`zb3G`D`Ujjl}GIrZtC5^Fto__EhxtVvLcAL#$%m| zX9#cO_d)!QSsvM`)L2piw{Qa5I{tt^vR-0ll&7N2?X7C2724M_&Uohv|Vxu1A743$qym@okQW z7H4E7wz}(Ebzlf{3-S6HXG`I&bY*ki={fK8oOgQ8JKgh++7)tunDbHVAz#mUOYAEe z8&9Gxi-pJer3{j|N$SN;1*yA29;7CxDo??!DosF5;}Dt-V|rs2i}=4-)SbrreDELl ziB6x=S*4PnCK+tZfPY^4)X~^=ub^HoS$z0$%$7UB*^tG}S=_?A9xp(*H4fwU zo+@Jq(JV}Xc0HR-pTNyo0QZx!4`2cIqk&tm#oTAD#6!xQ=`Lh0ajTe6p}yzuV&3i; z*WWve`ui~bJy_IV9w$71n`oTmS<45@&F`Zl7P4!rqSTN;(p%Wft1K)F6f)!Rh?Qlz zl_~6US8AIW3n{M?j99vdA#{90xN{KuB(V2o@ks`GA8$XE#b+oIQ6iP)LwIPA!7oUF zd{v^KlQ+XS&_ljGoW&PKZx&xZhk?VG<9&Gv0~?wvrw!tWJZR41=rJ^V?_S0HVGQ&P z;p-ckPvS`Bw4ITk!%DHi!&axDTh8 z`P0n$875;Ghwvhv!dV={IXuTvo^O38a```@N|VPA*2XvRO|s(`UMd!-pRe;5;3FjgJ3} zWd1pp;B~CR8$9#BsT^`UQG3pzcCPse4fIjsJl!v&hSm5f@A%sqe}H+7di>N@M_sRz z9-92H<2kgIGE$K$-< delta 53 zcmX@We}I3(7B(h^7n8TKH7GH>VPIi+%fJt$g&96DXfb?buweMYV9W50!I9wygD1nU I$r0=s0NV}`4*&oF diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.class index 52c2bcb150dff13de642b87f6843e83f3d055a16..43955e8869f7bc5b12a3104730a77a485a9ab8a4 100644 GIT binary patch literal 7713 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 G{`((?P@-G_ diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.class index 502bd0e1f8de03c9004c43e40ca987cacd6a9544..fe673e74808a1bd4e886209a1c3b4b3a969db6c4 100644 GIT binary patch delta 28 kcmaFK^_*+MX-3V-axC%_-$*cPXlPEBXOY{i#^}rf0FQSFL;wH) delta 60 zcmaFP^^$ACX=W`ApNRsJiizo|#rm$nC5a`a#nzf(j0~LVsU;9DBZH=fCP)zrNYQ3x HMi&+US8@^{ diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/EStatus.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/EStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..126e025d8e50f8bb5bbf9343d5d6c791b6fa158a GIT binary patch literal 1500 zcma)5+fEZv6kVs&8)djyp%e;;TA>|~f&wBfg-WUt3M7owRG)@2l)*BBC(1*=w)8_T~Ki_4NwC6qbB&F+?q`rkjb%(Y9Vo99sI0Zs}%G zuOzCrQBGu4TeGVbAKVP>ds9c>VBkqgRHH8-8x|%kaa?{|05WLT2d58K%Bg z-QUu!H`-QN=QSM^wQ^pw3~r0V03-zcc*p>*<&lhGj8Ho&y8T-8q5B_VL|4uZ~VNBInYi_H_|MXwMr$~koymBy$-(Vw2lGwplTKMmj)lM?A(fR z4x{Q+qh!)8vB)*sz{W#U%}Gor7bj^b65UJBVlQ7jfWEYI;!EpB9v7b&(AmeAj%+Wj zVH?^hu7j*&xakdKzJV2jozeyFoS|D7J#Jxyh0*5`M#TG_aMCHd)q?vJVYT2nMMOQr zz$YSc;U2vQNdPEC0G;#>q6Z=LA&e;cF+viC1d^laRyi^js0dz0n=;yef%{7E!8xLJ z%68$5lJ;RD7!edQh4M5pQ6+626o)KN)Z7?UfO`p;| zb+~2-&5IA6VxX`hDOZIQ@A9e?xx~~MmwMe;FX2JYkT?Nx%pvJ;D1_nOK#(byNc{l& Pf1C>of?*LE@qO_d&2%+T literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/ISQDevColorConstants.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/ISQDevColorConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..585948f59555234260b1395aae6e4c98295484c5 GIT binary patch literal 649 zcmaJ;%Wl&^6g^WHyG;#oN_nJ|QeINaqN56SRG`Fhi&ZBPjuX@sa@--fGInY^VcE~% zI}i&bkPvIWfo}osjLQyTjeH)OxpRE{d;~cbxUcj*FW%-1Q zD2b9NJKRTK+5wWJsqma@lq$~<4i9*UjNaeu9Wx^|@ zKG13TL|;)q)->%i8lP}YiUz({OIbH6>t_SBek-dfE$dvfhDzR2^0{?xy;l0R(vP&i n+wXj&YZh>q-s>ueP9Y3zQJlwATbl~=sj7QwmyCH|u?K$uW$uM0 literal 0 HcmV?d00001 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevChangeEvent.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevChangeEvent.class index 5fb89c1c2550f4652cdacf94e4a59d05e58caf73..c65ee36fdc67e0c69a36b4e39a1100b6cb333702 100644 GIT binary patch delta 62 zcmZ3^wv}x{sEl-Qpo?o*e3+w8sB65VlYeMPe29O%vxlRfyX(YEEn%Uu#GKMpN2mPK Rl8}7ojKsY3)Qt<;nE-De6zKo} delta 48 zcmdnWww!H3sEBZIpo?o*e3+w8sB65lhohgntINbfEnc3o#GKMp=ZwU>^wgA%>)M$B Da%>P0 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceConstants.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceConstants.class index 9611d364a68b33ef648f5d041573b88db015e2bc..b8e77941340a9cd44a90e3115e9d547c6e7da708 100644 GIT binary patch delta 527 zcmajc%TB^T6b9gbK%f#9-W4whsEEd3Ok5fhC=G2W5KAR-)l`^3BbHbyTjI_=d*6YT zi3=aVhcX^2#%fGl%$fNY^PMx9htQ)CeS3d-1#pV}aWv0{>H0-cY8X;c(QBGf$?Kx5 zR7*xd%Zp`6uN!6QO27g`!Z8Qj&h_tFe30X|dEMm&$86qkw_>`@4ny`INUW*Uz~hz~ zQd4f|dAAe7vfER!FZQ}UhavNWl$DaK($Wp_Qq!cWt}0dO6I^3R`seFd?M|1LE8aT} zw_Vk;Im6K(T>H1@8*_smLZ%p;CPUtXfT;>)X)5cc1_lNb2I-Alj*OEhF-fqA@GuB42u|L>G>?&avOlw-2O|R`NCZd< v0hQ_lX+|K;sj#$o&d8vqfox_Z#852uFfxckofc4(pI(%h3wIa?gFhpK0=f&(RZWg#HD+Yr zJPAnFb27LxxG^v?ume4A%)kUB85p>CFxUvW?_}^~V%PxWGBI!gNj?T + + diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java index 11fda1ff..9ee46d40 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java @@ -8,7 +8,9 @@ import org.eclipse.jface.preference.IPreferenceStore; import raven.sqdev.preferences.activator.Activator; +import raven.sqdev.preferences.util.ISQDevColorConstants; import raven.sqdev.preferences.util.SQDevPreferenceConstants; +import raven.sqdev.util.ColorUtils; /** * Class used to initialize default preference values. @@ -23,11 +25,27 @@ public class SQDevPreferenceInitializer extends AbstractPreferenceInitializer { */ public void initializeDefaultPreferences() { IPreferenceStore store = Activator.getDefault().getPreferenceStore(); + + // find the ArmA directory in programs folder store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY, locateArmaMainDirectory()); + + // find ArmA directory in documents folder store.setDefault(SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, locateArmaDocumentsDirectory()); + + // let the preference page always ask for saving store.setDefault(SQDevPreferenceConstants.SQDEV_ALWAYS_SAVE_ON_EXIT, false); + + // enable matching brackets highlighting + store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_KEY, true); + store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY, + ColorUtils.getRGBValuesAsString(ISQDevColorConstants.BRACKETMATCH)); + + // enable currentLine highlighting + store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY, true); + store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY, + ColorUtils.getRGBValuesAsString(ISQDevColorConstants.CURRENTLINE)); } /** diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java new file mode 100644 index 00000000..af0fcd58 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java @@ -0,0 +1,59 @@ +package raven.sqdev.preferences.pages; + +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.IWorkbench; + +import raven.sqdev.preferences.preferenceEditors.BooleanSQDevPreferenceEditor; +import raven.sqdev.preferences.preferenceEditors.ColorSQDevPreferenceEditor; +import raven.sqdev.preferences.util.SQDevPreferenceConstants; + +public class SQDevEditorPreferencePage extends SQDevPreferencePage { + + public SQDevEditorPreferencePage() { + super(); + } + + @Override + public void init(IWorkbench workbench) { + setDescription("Preferences changing the appearance of the editor"); + + // preferences for the behaviour + Group behaviour = createGroup("Behaviour"); + + createDescription(behaviour, "Here you can change the behaviour of the editor"); + + BooleanSQDevPreferenceEditor enableCurrentLineHighlightingEditor = new BooleanSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY, + "&Enable current line highlighting:", + "Enables/Disables the highlighting of the current selected line in the editor", + behaviour); + addPreferenceEditor(enableCurrentLineHighlightingEditor); + + + BooleanSQDevPreferenceEditor enableBracketMatchEditor = new BooleanSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_KEY, + "&Enable bracket highlighting:", + "Enables/Disables the highlighting of matching bracket pairs in the editor", + behaviour); + addPreferenceEditor(enableBracketMatchEditor); + + + // preferences for the coloring + Group colors = createGroup("Colors"); + + createDescription(colors, "Here you can change the colors of the editor"); + + ColorSQDevPreferenceEditor currentLineHighlightingColorEditor = new ColorSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY, + "&Current line highlighting:", + "Defines the color in which the current line is highlighted", colors); + addPreferenceEditor(currentLineHighlightingColorEditor); + + ColorSQDevPreferenceEditor matchingBracketHighlightingColorEditor = new ColorSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY, + "&Matching bracket pair highlighting:", + "Defines the color in which matching bracket pairs are highlighted", colors); + addPreferenceEditor(matchingBracketHighlightingColorEditor); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java index 5ed457d0..169b4921 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevGeneralPreferencePage.java @@ -24,10 +24,14 @@ public void init(IWorkbench workbench) { createDescription(armaDirs, "Here the location of your ArmA folders are specified " + "(The program folder as well as the document folder) "); - addPreferenceEditor(new DirectorySQDevPreferenceEditor( + DirectorySQDevPreferenceEditor dirEditor = new DirectorySQDevPreferenceEditor( SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY, "&Program:", - "The path to the directory in which your arma3.exe is located", armaDirs)); + "The path to the directory in which your arma3.exe is located", armaDirs); + + dirEditor.addFileToMatch("arma3.exe"); + addPreferenceEditor(dirEditor); + addPreferenceEditor(new DirectorySQDevPreferenceEditor( SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY, "&Documents:", "The path to the \"Arma 3\" or \"Arma 3 - Other Profiles\" directory in your Documents", @@ -44,5 +48,4 @@ public void init(IWorkbench workbench) { "Whether unsaved preferences should get automatically saved when clicking \"OK\" without a popup asking for it", misc)); } - } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java index 20cdbd38..b353dc14 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java @@ -265,7 +265,9 @@ public boolean isValid() { setErrorMessage(currentEditor.getStatusHint()); return false; } - + } + + if(getErrorMessage() != null) { setErrorMessage(null); } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java index f60c1a96..485f2695 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/AbstractSQDevPreferenceEditor.java @@ -14,8 +14,8 @@ import org.eclipse.ui.PlatformUI; import raven.sqdev.preferences.activator.Activator; -import raven.sqdev.preferences.pages.EStatus; import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.EStatus; import raven.sqdev.preferences.util.ISQDevPreferenceEditorListener; import raven.sqdev.preferences.util.SQDevChangeEvent; import raven.sqdev.preferences.util.SQDevPreferenceComposite; @@ -73,6 +73,11 @@ public abstract class AbstractSQDevPreferenceEditor */ protected Label label; + /** + * The ID of this editor + */ + private String ID; + /** * Creates a new SQDevPreferenceEditor * @@ -98,6 +103,7 @@ private AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, setContainer(container); setStatus(EStatus.OK); setTooltip(tooltip); + setID(preferenceKey); if (resolve) { // try to find the preferencePage yourself @@ -195,7 +201,7 @@ public AbstractSQDevPreferenceEditor(String preferenceKey, String labelText, Str @Override public boolean doSave() { - if(!isValid()) { + if (!isValid()) { MessageDialog.open(MessageDialog.ERROR, PlatformUI.getWorkbench().getDisplay().getActiveShell(), "Failed at saving " + getLabelText().substring(1, getLabelText().length() - 1), @@ -634,4 +640,41 @@ protected void updateSaveStatus(String newText) { getContainer().layout(true); } + /** + * Gets the unique ID of this editor + * + * @return + */ + public String getID() { + return ID; + } + + public void setID(String iD) { + ID = iD; + } + + /** + * Compares the two editors. They are considered equal when they are an + * instance of the same class and if they have the same ID. + */ + @Override + public boolean equals(Object obj) { + if (obj instanceof AbstractSQDevPreferenceEditor) { + AbstractSQDevPreferenceEditor editor = (AbstractSQDevPreferenceEditor) obj; + + if (!editor.getClass().equals(this.getClass())) { + return false; + } + + if (!editor.getID().equals(this.getID())) { + return false; + } + + return true; + + } else { + return false; + } + } + } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java index 140e1ee0..eb67e8f5 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/BooleanSQDevPreferenceEditor.java @@ -191,7 +191,7 @@ public void createComponents(Composite container) { @Override public void mouseUp(MouseEvent e) { // fire change event - changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_CHANGED)); + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_ABOUT_TO_CHANGE)); evaluateInput(); @@ -203,11 +203,13 @@ public void mouseUp(MouseEvent e) { if (getContainer().getLayout() instanceof GridLayout) { // make the layout's gaps a little wider GridLayout layout = (GridLayout) getContainer().getLayout(); - layout.horizontalSpacing = 8; + if (layout.horizontalSpacing < 20) { + layout.horizontalSpacing = 20; + } getContainer().setLayout(layout); - }else { - if(getContainer().getLayout() == null) { + } else { + if (getContainer().getLayout() == null) { GridLayout layout = new GridLayout(); layout.horizontalSpacing = 20; diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor.java new file mode 100644 index 00000000..3845447e --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ColorSQDevPreferenceEditor.java @@ -0,0 +1,231 @@ +package raven.sqdev.preferences.preferenceEditors; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseAdapter; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.ColorDialog; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.PlatformUI; + +import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.SQDevChangeEvent; +import raven.sqdev.util.ColorUtils; + +public class ColorSQDevPreferenceEditor extends AbstractSQDevPreferenceEditor { + + /** + * The button to display and choose the color + */ + protected Button colorButton; + private String chosenColor; + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + */ + public ColorSQDevPreferenceEditor(String preferenceKey, String labelText, Composite container) { + super(preferenceKey, labelText, container); + } + + /** + * Creates a new SQDevPreferenceEditor
+ * This constructor can only be used if the given container is an + * instance of ISQDevPreferenceComposite or one of it's parents + * is. + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + */ + public ColorSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container) { + super(preferenceKey, labelText, tooltip, container); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public ColorSQDevPreferenceEditor(String preferenceKey, String labelText, Composite container, + ISQDevPreferencePage page) { + super(preferenceKey, labelText, container, page); + } + + /** + * Creates a new SQDevPreferenceEditor + * + * @param preferenceKey + * The key of the preference to work on + * @param labelText + * The text of the label + * @param tooltip + * The tooltip that will be displayed on the editor's preference + * value-field + * @param container + * The container the GUI elements should be placed in + * @param page + * The ISQDevPreferencePage this editor is apllied + * to + */ + public ColorSQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, + Composite container, ISQDevPreferencePage page) { + super(preferenceKey, labelText, tooltip, container, page); + } + + @Override + public boolean needsSave() { + return willNeedSave(chosenColor); + } + + @Override + public boolean doSave() { + if(super.doSave()) { + getPreferenceStore().setValue(getPreferenceKey(), chosenColor); + return true; + }else { + return false; + } + } + + @Override + public void doLoad() { + load(getPreferenceStore().getString(getPreferenceKey())); + } + + public void load(String str) { + // store current selection + chosenColor = str; + + if (colorButton != null && !colorButton.isDisposed()) { + colorButton.setImage(createColorImage(getSelectedColor())); + + evaluateInput(); + updateSaveStatus(chosenColor); + } + + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_LOADED)); + } + + @Override + public void doLoadDefault() { + load(getPreferenceStore().getDefaultString(getPreferenceKey())); + } + + @Override + public void evaluateInput() { + // There can't be wrong input + } + + @Override + public int getComponentCount() { + return 2; + } + + @Override + public void createComponents(Composite container) { + label = new Label(getContainer(), SWT.NULL); + setLabelText(getLabelText()); + label.setToolTipText(getTooltip()); + + colorButton = new Button(getContainer(), SWT.PUSH); + colorButton.setImage(createColorImage(getSelectedColor())); + colorButton.setToolTipText(getTooltip()); + colorButton.addMouseListener(new MouseAdapter() { + @Override + public void mouseUp(MouseEvent event) { + ColorDialog dialog = new ColorDialog( + PlatformUI.getWorkbench().getDisplay().getActiveShell()); + dialog.setRGB(ColorUtils.decodeRGB(chosenColor)); + RGB selectedRGB = dialog.open(); + + if (selectedRGB != null) { + load(ColorUtils.getRGBValuesAsString(selectedRGB)); + } + } + }); + + if (getContainer().getLayout() instanceof GridLayout) { + // make the layout's gaps a little wider + GridLayout layout = (GridLayout) getContainer().getLayout(); + layout.horizontalSpacing = 20; + + getContainer().setLayout(layout); + }else { + if(getContainer().getLayout() == null) { + GridLayout layout = new GridLayout(); + + if (layout.horizontalSpacing < 20) { + layout.horizontalSpacing = 20; + } + + getContainer().setLayout(layout); + } + } + } + + protected Image createColorImage(Color color) { + int width = 50; + int height = 13; + + Image image = new Image(Display.getCurrent(), width + 1, height + 1); + + GC gc = new GC(image); + gc.setBackground(color); + gc.drawRectangle(0, 0, width, height); + gc.fillRectangle(1, 1, width - 1, height - 1); + gc.dispose(); + + return image; + } + + @Override + public boolean willNeedSave(String content) { + if(content.equals(getPreferenceStore().getString(getPreferenceKey()))) { + return false; + }else { + return true; + } + } + + /** + * Gets the color the user has currently chosen + * + * @return The chosen color + */ + protected Color getSelectedColor() { + return new Color(Display.getCurrent(), ColorUtils.decodeRGB(chosenColor)); + } + +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java index ed322041..78776b0d 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/DirectorySQDevPreferenceEditor.java @@ -1,6 +1,7 @@ package raven.sqdev.preferences.preferenceEditors; import java.io.File; +import java.util.ArrayList; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; @@ -17,13 +18,13 @@ import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; -import raven.sqdev.preferences.pages.EStatus; import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.EStatus; import raven.sqdev.preferences.util.SQDevChangeEvent; public class DirectorySQDevPreferenceEditor extends AbstractSQDevPreferenceEditor implements VerifyListener { - + /** * The TextField used to show the current selected path to the user */ @@ -46,10 +47,16 @@ public class DirectorySQDevPreferenceEditor extends AbstractSQDevPreferenceEdito */ private String buttonText = "Browse..."; + /** + * An array of files that have to exist in the selected directory + */ + protected ArrayList filesToMatch; + /** * Creates a new SQDevPreferenceEditor
- * This constructor can only be used if the given container is an instance - * of ISQDevPreferencePage or one of it's parents is. + * This constructor can only be used if the given container is an + * instance of ISQDevPreferencePage or one of it's parents + * is. * * @param preferenceKey * The key of the preference to work on @@ -64,12 +71,15 @@ public class DirectorySQDevPreferenceEditor extends AbstractSQDevPreferenceEdito public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, String tooltip, Composite container) { super(preferenceKey, labelText, tooltip, container); + + filesToMatch = new ArrayList(); } /** * Creates a new SQDevPreferenceEditor
- * This constructor can only be used if the given container is an instance - * of ISQDevPreferencePage or one of it's parents is. + * This constructor can only be used if the given container is an + * instance of ISQDevPreferencePage or one of it's parents + * is. * * @param preferenceKey * The key of the preference to work on @@ -81,6 +91,8 @@ public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, St public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, Composite container) { super(preferenceKey, labelText, "", container); + + filesToMatch = new ArrayList(); } /** @@ -102,6 +114,8 @@ public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, Composite container, String tooltip, ISQDevPreferencePage page) { super(preferenceKey, labelText, tooltip, container, page); + + filesToMatch = new ArrayList(); } /** @@ -120,6 +134,8 @@ public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, public DirectorySQDevPreferenceEditor(String preferenceKey, String labelText, Composite container, ISQDevPreferencePage page) { super(preferenceKey, labelText, "", container, page); + + filesToMatch = new ArrayList(); } @Override @@ -150,7 +166,7 @@ public void doLoad() { * @param text * The text to display
*/ - private void load(String text) { + private void load(String text) { if (pathText == null) { setInitialText(text); } else { @@ -175,11 +191,14 @@ public void doLoadDefault() { @Override public void evaluateInput() { - String input = pathText.getText(); + evaluateInput(pathText.getText()); + } + + public void evaluateInput(String input) { File inputFile = new File(input); EStatus status = EStatus.OK; - if(input.isEmpty()) { + if (input.isEmpty()) { status = EStatus.ERROR; status.setHint("No path specified!"); setStatus(status); @@ -198,9 +217,21 @@ public void evaluateInput() { if (!inputFile.isDirectory()) { status = EStatus.ERROR; status.setHint("The given path is no directory!"); + setStatus(status); return; } + // check for the files that have to be present + for (String currentFile : filesToMatch) { + if (!new File(input + "\\" + currentFile).exists()) { + status = EStatus.ERROR; + status.setHint( + "Can't find the file \"" + currentFile + "\" in the specified directory!"); + setStatus(status); + return; + } + } + setStatus(status); } @@ -298,30 +329,35 @@ public void updateSaveStatus() { } @Override - public void verifyText(VerifyEvent e) { - updateSaveStatus(e.text); - - // evaluate the new value - evaluateInput(); - + public void verifyText(VerifyEvent e) { // notify about change - changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_CHANGED)); + changed(new SQDevChangeEvent(SQDevChangeEvent.SQDEV_VALUE_ABOUT_TO_CHANGE)); } @Override public void setStatus(EStatus status) { super.setStatus(status); - if(pathText == null) { + if (pathText == null) { return; } // indicate an error via red backgroundColor - if(status == EStatus.ERROR) { + if (status == EStatus.ERROR) { pathText.setBackground(new Color(Display.getCurrent(), 255, 153, 153)); - }else { + } else { pathText.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); } } + /** + * Adds a file that has to present in the directory specified by this editor + * in order to get the valid state + * + * @param fileName The name of the file to match + */ + public void addFileToMatch(String fileName) { + filesToMatch.add(fileName); + } + } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java index 05a49928..e7884995 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/preferenceEditors/ISQDevPreferenceEditor.java @@ -3,8 +3,8 @@ import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Composite; -import raven.sqdev.preferences.pages.EStatus; import raven.sqdev.preferences.pages.ISQDevPreferencePage; +import raven.sqdev.preferences.util.EStatus; import raven.sqdev.preferences.util.ISQDevPreferenceEditorListener; import raven.sqdev.preferences.util.SQDevChangeEvent; diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/EStatus.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/EStatus.java new file mode 100644 index 00000000..7f56a466 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/EStatus.java @@ -0,0 +1,63 @@ +package raven.sqdev.preferences.util; + +/** + * An enum containing different status types + * + * @author Raven + * @see #OK + * @see #ERROR + * @see #WARNING + * + */ +public enum EStatus { + /** + * A status indicating that everything is okay + */ + OK, + + /** + * A status indicating that there is something wrong.
+ * May contain a hint message + */ + ERROR, + + /** + * A status indicating that it's okay but it can be improved
+ * May contain a hint message + */ + WARNING; + + + /** + * A String containg a hint message on how to fix the current error/warning + */ + private String hint; + + private EStatus() { + // clear hint message on status change + setHint(""); + } + + /** + * Gets the stored hint-message. Will return null when the + * status is not EStatus.WARNING or EStatus.ERROR + * + * @return The hint describing how to fix that warning + */ + public String getHint() { + if(!(this.equals(EStatus.WARNING) || this.equals(EStatus.ERROR))) { + // when the state is not on warning there can't be + return null; + } + + return hint; + } + + /** + * Sets the hint message for describing how to fix the current warning + * @param hint The message + */ + public void setHint(String hint) { + this.hint = hint; + } +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevColorConstants.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevColorConstants.java new file mode 100644 index 00000000..508710f4 --- /dev/null +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/ISQDevColorConstants.java @@ -0,0 +1,12 @@ +package raven.sqdev.preferences.util; + +import org.eclipse.swt.graphics.RGB; + +public interface ISQDevColorConstants { + public static final RGB DEFAULT = new RGB(0, 0, 0); + public static final RGB BRACKETMATCH = new RGB(192, 192, 192); + public static final RGB CURRENTLINE = new RGB(220, 220, 255); + public static final RGB KEYWORD = new RGB(127, 0, 85); + public static final RGB COMMENT = new RGB(63, 127, 95); + public static final RGB STRING = new RGB(42, 0, 255); +} diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java index afe4235f..ea7b83ca 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevChangeEvent.java @@ -2,7 +2,7 @@ public class SQDevChangeEvent { - public static final String SQDEV_VALUE_CHANGED = "valueChanged"; + public static final String SQDEV_VALUE_ABOUT_TO_CHANGE = "valueABoutToChange"; public static final String SQDEV_STATUS_CHANGED = "statusChanged"; public static final String SQDEV_VALUE_LOADED = "valueLoaded"; diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java index b78cfc61..94d6229d 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java @@ -2,17 +2,47 @@ /** * Constant definitions for the names of SQDev plug-in preferences + * * @author Raven */ public class SQDevPreferenceConstants { /** - * The name of the preference holding the location to the ArmA folder on the local disk + * The name of the preference holding the location to the ArmA folder on the + * local disk */ public static final String SQDEV_ARMA_MAIN_DIRECTORY = "raven.sqdev.ArmAProgramDirectory"; + /** + * The name of the preference holding the location of the ArmA folder in the + * documents directory on the local disk + */ public static final String SQDEV_ARMA_DOCUMENTS_DIRECTORY = "raven.sqdev.ArmADocumentsDirectory"; + /** + * The name of the preference indicating whether the preference page should + * ask to save unsaved preferences when clicking OK + */ public static final String SQDEV_ALWAYS_SAVE_ON_EXIT = "raven.sqdev.AlwaysSaveOnExit"; + /** + * The name of the preference indicating whether matching brackets should get highlighted + */ + public static final String SQDEV_EDITOR_MATCHING_BRACKETS_KEY = "raven.sqdev.enableBracketMatch"; + + /** + * The name of the preference indicating the color of the highlight of a matching bracket + */ + public static final String SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY = "raven.sqdev.matchingBracketsColor"; + + /** + * The name of the preference indicating whether the current line should get highlighted + */ + public static final String SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY = "raven.sqdev.highlightCurrentLine"; + + /** + * The preferences indicating the color of the current line highlighting + */ + public static final String SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY = "raven.sqdev.currentLineHighlightingColor"; + } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java index bf842f16..b5c68174 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java @@ -52,13 +52,37 @@ public static IPreferenceStore getPreferenceStore() { /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_ALWAYS_SAVE_ON_EXIT - * preference taht indicates whether the preference page shall prompt for + * preference that indicates whether the preference page shall prompt for * save when clicking OK * - * @return + * @see {@linkplain SQDevPreferenceConstants} */ public static boolean alwaysSaveOnExit() { return getPreferenceStore().getBoolean(SQDevPreferenceConstants.SQDEV_ALWAYS_SAVE_ON_EXIT); } + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY + * preference that holds the path to the ArmA folder in the documents directory + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static String getArmaDocumentsDirectory() { + return getPreferenceStore() + .getString(SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY); + } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY + * preference that holds the path to the ArmA folder in the programs directory + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static String getArmaProgramDirectory() { + return getPreferenceStore() + .getString(SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY); + } + } From d5079136375038e2379a0c3f138f58d8fd8f44db Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Fri, 22 Jan 2016 19:40:09 +0100 Subject: [PATCH 5/6] fixed layout problems in preference page; editor now adapts to respective preferences --- .../Raven.SQDev.Editors/META-INF/MANIFEST.MF | 3 +- .../raven/sqdev/editors/BasicTextEditor.class | Bin 4361 -> 4557 bytes .../raven/sqdev/editors/KeywordScanner.class | Bin 1690 -> 3726 bytes .../raven/sqdev/editors/BasicTextEditor.java | 6 ++ .../raven/sqdev/editors/KeywordScanner.java | 65 +++++++++++++++--- .../editors/sqfeditor/SQFConfiguration.class | Bin 3272 -> 3465 bytes .../sqdev/editors/sqfeditor/SQF_Editor.class | Bin 788 -> 826 bytes .../editors/sqfeditor/SQFConfiguration.java | 12 ++-- .../sqdev/editors/sqfeditor/SQF_Editor.java | 2 +- .../META-INF/MANIFEST.MF | 3 +- .../SQDevPreferenceInitializer.class | Bin 2679 -> 2766 bytes .../pages/SQDevEditorPreferencePage.class | Bin 2608 -> 2822 bytes .../pages/SQDevPreferencePage.class | Bin 8125 -> 8936 bytes .../util/SQDevPreferenceConstants.class | Bin 1032 -> 1133 bytes .../util/SQDevPreferenceUtil.class | Bin 2090 -> 3011 bytes .../SQDevPreferenceInitializer.java | 4 ++ .../pages/SQDevEditorPreferencePage.java | 6 ++ .../pages/SQDevPreferencePage.java | 60 ++++++++++++++-- .../util/SQDevPreferenceConstants.java | 5 ++ .../preferences/util/SQDevPreferenceUtil.java | 62 ++++++++++++++++- 20 files changed, 202 insertions(+), 26 deletions(-) diff --git a/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF b/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF index 508e65a3..db133afd 100644 --- a/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF +++ b/plugin/Raven.SQDev.Editors/META-INF/MANIFEST.MF @@ -9,8 +9,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.ui.editors;bundle-version="3.8.200", org.eclipse.jface.text;bundle-version="3.9.2", org.eclipse.swt, - raven.sqdev.util;bundle-version="0.1.0", - raven.sqdev.preferences;bundle-version="0.1.0" + raven.sqdev.util;bundle-version="0.1.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Export-Package: raven.sqdev.editors, diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextEditor.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/BasicTextEditor.class index b9954cd2095a80e8a9762eee979d05a55493b454..6f9afe2d9c773b91c3cf75e8a8dc8ddd8b8d33a7 100644 GIT binary patch delta 207 zcmeBFI;$*j>ff$?3=9k=3>(=Qm>3z9Cp$8VY*caL(PS$vNJ%V7qA5hH`XhNjQtLT2&F7g$9!thpI{8P@VJtYhF}WRS|tD@)AD z1Q`*MT2T^ElvW1Qu_Q@!UZBEr2v5kml0b#;{^1!x~10 pjX)j~gFHwKNHZ|BF>o@pGbjLAJP?%(iVR9X9wWngAj!nA0RS;DE$jdQ delta 46 zcmX@B+^HmR>ff$?3=9k=3@h0gm>3z9Cp$8VY*caLnf!#umXT|-5^n+vD+2=)!wLXH Cz6-(t diff --git a/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/KeywordScanner.class b/plugin/Raven.SQDev.Editors/bin/raven/sqdev/editors/KeywordScanner.class index a5ad89227a9a52d4a4b8e51fda56ac1679b52e24..e64e92ca564323d4b52bd687f1f48fede60caed6 100644 GIT binary patch literal 3726 zcma)9TXz&y8r>(UPK8c^7>L@!XhebTrb7v696NyKCbWhKBs2!RRk{zMpwrz{Rd--U zXGX^novY4x!^@1GA%S73^W?+)6<>XGEp?x&4t=Y{c}R8DsqZ^ye|vwI%KyIq z&zAu1!M}8L2yAhzsw|rBxxB2JGH-h&$2A|37ZyrRekx}bi_+1d2@I5+IaB5ecG;EY znNwCynw~uGnNFo3UGpffBbF=cE?ojU+g&Q2T`)6;ol;pk-i6WAR&h>F*sdpejKJEm zBTq?37ITsa1bQdVSXIj`(8`?h9J@F-B+y-UN>w|r?6*yXfzQ;?^Az8XK3zdz0$W2p zh}_OiGn#Qfe&w*&F52FHfv4l49&Kl|BMtRyJt>hD&_+vn8AT^PBZO6#3ftzs)$(xg2{lye@l>)osiHUYq>boj!mL>3A zhI()-HtX0FngOdg8u%G*6IeqOfpnBB-p*2@eJP55Y|(Lt!1`AC4cv*l1a#XSpD%mN z5K?tQ$2O*M-854u$T_Pp?95f>WzicypOaWR|h5jv3Y)49|Ga%3x76tX%4%5Kh*u~_r%4J#1ld&+Tbk94-6e+0=G5hle^%VbBa?s3YQ|K&8J12*l2yZe_nRv~LSwtB8D zYTjwvB@dyUwRvQ*h4nIX-V{$GJ+SWOuqs*iavuv3h0_!*j8>Xm$8AiBY1 zi-zx<>mpt;@GAbw zBxGw>uLaT}eJg~Y#(kG-O~-3L)o?N@K2_6i7PiCN%CKd7b==@T#fV$`W{ov?V;Y zgp=v6WUOluPk!#hn&mZ3U_gSPlZ2PTW(=^#cj8|D-j7`v!5$poe-IN~IfDBz%hf7B zK%T)~`xi0CHI2J$!fDu~txEqhIEyY6Xc{^lmhi{P)J$6cad oAZhvlA2J@L+GeHNHgx-{eWc?PoqbSH!B2qojQyXq>AMG6!gOCOY0rUhDgSg~Mvv}%ZoQ4rIGkrr!HAjRNdj2kwt zP2lcKT)1*++|VeIxb_eDA6&Z@&#*ElIp^H(p7Wi@z3-y$gWW&>emey)joSh~LQ+mp zpZukD9ZpVJ1Z}R>Zn-7GvdohsdqjLNvrbUTyU!XX{4gx2FbRGqvo2sAnF;w>6-pN& zB@@O#WUcYqU3A^OR(;>)gdn=Tgb<J2m`TO;) z#-=-)Sr4Ee7X=19&IwAX7HnLSe{_ciWz@(jF+$?J>!(InCP0yDA{$R6;HK`bgX z)`AbitW8Fn*$(s*1ga+pR>w%`;6evIE2Cc#CKQzuMEE9J?I7MkqNv(RwP>6cbbmp7 zLfAIKVzQ{&s;!M5WB9G0un6lP&weZ4F;ey0>S|HT+S>5}GGDlsALFdE=XK*ykl@`W z5km?&jGzn$ci2ASy=-vgb4GI<{}8&@C-S($*7GJX$y0dV6n`Bbvpm366qrATWn9Ay zbLViKrN|SPp)X+;b3FP64}AkA_U1V~3EvsRrT_`_3oHmM2~-5XATd$_LR{u1NBVH< EA470+0RR91 diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java index ce81b903..9e58bf24 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/BasicTextEditor.java @@ -127,4 +127,10 @@ public void createPartControl(Composite parent) { } } + /** + * Updates the editor + */ + public void update() { + this.getSourceViewer().invalidateTextPresentation(); + } } diff --git a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java index 6267d355..ed3ac3ce 100644 --- a/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java +++ b/plugin/Raven.SQDev.Editors/src/raven/sqdev/editors/KeywordScanner.java @@ -6,17 +6,27 @@ import org.eclipse.jface.text.rules.RuleBasedScanner; import org.eclipse.jface.text.rules.Token; import org.eclipse.jface.text.rules.WordRule; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.widgets.Display; + +import raven.sqdev.preferences.util.SQDevPreferenceUtil; +import raven.sqdev.util.ColorUtils; /** * A scanner that scans for keywords and colors them with the * ISQDevColorConstants.KEYWORD color * * @author Raven - * + * */ -public class KeywordScanner extends RuleBasedScanner { +public class KeywordScanner extends RuleBasedScanner implements IPropertyChangeListener { + + protected String preferenceKey; + protected IKeywordProvider provider; + protected BasicTextEditor editor; /** * Creates an instance of this scanner @@ -24,25 +34,64 @@ public class KeywordScanner extends RuleBasedScanner { * @param provider * An IKeyowrdProvider that will supply this method * with keywords - * @param color - * The color in which these keywords should be highlighted (they - * are bold in all cases) + * @param colorPreferenceKey + * The key of the preference describing the color of the + * highlighting of the keywords */ - public KeywordScanner(IKeywordProvider provider, Color color) { + public KeywordScanner(IKeywordProvider provider, String colorPreferenceKey, BasicTextEditor editor) { + String strColor = SQDevPreferenceUtil.getPreferenceStore().getString(colorPreferenceKey); + + if (strColor == null || strColor.isEmpty()) { + throw new IllegalArgumentException( + "Invalid preference key \"" + colorPreferenceKey + "\""); + } + + SQDevPreferenceUtil.getPreferenceStore().addPropertyChangeListener(this); + + preferenceKey = colorPreferenceKey; + this.provider = provider; + this.editor = editor; + + Color color = new Color(Display.getCurrent(), ColorUtils.decodeRGB(strColor)); + IToken keyword = new Token(new TextAttribute(color, null, SWT.BOLD)); + setToken(keyword); + } + + @Override + public void propertyChange(PropertyChangeEvent event) { + if (event.getProperty().equals(preferenceKey)) { + // if the changed property is the one for the color this scanner + // depends on + if(event.getNewValue() != null) { + Color color = new Color(Display.getCurrent(), ColorUtils.decodeRGB((String) event.getNewValue())); + IToken token = new Token(new TextAttribute(color, null, SWT.BOLD)); + + setToken(token); + } + } + } + + /** + * Sets the token for this scanner.
+ * Will apply the newly created rule immediately + * @param token + */ + protected void setToken(IToken token) { String[] keywords = provider.getKeywords(); WordRule keywordRule = new WordRule(new WordDetector()); // add keywords for (String currentKeyword : keywords) { - keywordRule.addWord(currentKeyword, keyword); + keywordRule.addWord(currentKeyword, token); } IRule[] rules = { keywordRule }; this.setRules(rules); + + editor.update(); } - } diff --git a/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFConfiguration.class b/plugin/Raven.SQDev.SQFEditor/bin/raven/sqdev/editors/sqfeditor/SQFConfiguration.class index ace90eb51a0704b98ee2f883839d38e9417edb68..f50cb84c8c651a7e2286e773979118ff0625f37c 100644 GIT binary patch delta 1435 zcmZ8gTT@$A6#jP3$vG$K3887Y3)nW$B%}!fLJg1_?i504L$T2+9Lc4rn3N@f0&~fc^VuDO2d+p0w-}=_K*7>dP^MTIa|9SZffGK>U z!p0Ehr;_(e*~MQl*JV(oTS&BC}N&r-zxl$-E;LarCA|`>wi-4to<8#fg#EtC_Vgd#l^>!UL_8< ziejMn zx3xz|i_{t3ulZd`e8fx#*n>YI z+{Uw5222-lEH{I%dx>A)W=(cCHh7HTyZy-s09;Jj*Kj57j z-ml}Jj%-v8^-)V|Rq`}9xa68|yV^s2)Hs1@+54fk<}sQgV3r1Vo)nJJY~7_fh+`BB zR8JgpSfp=q37c5KHdbMf&0-A&tm7CPNQe=QS=F?ZK56z`!*d+sW9o|+X$mQleslDD Vjw2edERB4Lc6L&wOei)~{sr_Y>7W1r delta 1284 zcmY+C%TE(g6vn?hGo2SxsI?#kl}CNFL!oLBv_MgLiy%@(M^UWu5XB;osJpIB+?e|p z=t>h8zMzSXZZ)nn#)T{6zv04o?o30mO?oPgyj{p!6-z&Y6(mw_u=>L5{|zOfUp2?10HowKlijx4g8x zI+o347v@&^clLwT@fT8oHS(-n&6@cGxq0V425V+!ZDoEYv%b2RThMWUzm&(A&Hu=Q zR+|M4x`smx&90Q|N`M{VE6UO8!|;oCM=cyg)IcYWYdFS#Y90O*x)`+40q5e`$$nn1 zM~oiyYDhCQx{ND&rF;S>`I0_SkwBl&-_J0@e<@Mkpoe8r%~QT-$_PV>f0K6cX(Li$ zViSFfva-Ru%BU&fqxHO~-> z@~=`Y4;Vqc6SpiZqU)_~)Uvz;2|lPaOG#KrQ6t3$gzgG@8l=2L(X@GZ z^jk?|1*)N-hED9lPI{{Gsu7~R_?VPYiN)xBZHd`QQ849TIRA>G1VIy3K>ap~yhV{I zznk7O?7?3870M>4ub_m~4`^`YU{l6Xf{~2l3+~U9sh-A01kgm}#%=VFpyvrdh%G$r zNC}^C+W|iN9b#pkr*gl`v8aR!N-CMy=hERcDHGaMyJZ8hvSX&3jnNs~Q)&uS#7NMSl81gzZi#m(dcv!?Rbvr#)#Hd3p#|k(*9&ZgcZDP_3 zQ$<`RP1BBW>kY2Cg0cn7rj&S?#v%&6_zFa}lzMg|53 z1+DE299p{>xFWT-G4NX@^>T;d^Cb zWLEwcU`#Jm6)7F@;e<)tsK!TatPz(Gp(D zS;o9Zn9KGnS9@1fuyZ!qpXbM`eU54HwgbYWtI8 zk1G&W(d`L$oj<}&jW~wDt!FYuDlTX)J+W6^zL715E-w)h8ne_2R4W}WH&>VwXk{of z-O?*3@?tVo3KBd;TDCL_X3ok9oQ;7=l?A&(X?5o*DBQNYl%R8oJGQBGt9kBe+~Z-AXzY?Vg(>P0#M-#Ugi$EbqX0{NEU(5-BX3ML0&3kZk^U;?^w;@4pzK5{BR@R7jd< FzX3@Et49C; delta 680 zcma)(+fGwK6o$X)Vb7*)608)AiG;*ZDHWO~Xo!d>lH!5GE+E)?+)61$pwMm+JfZOc zG)}zm1-yov(r9AvQcds~d<3t&F~(_a48$96*34S7*80EvvlIH!)cE<=yAMDQ&m5Hz(f74q4FvoMpJ&lKC+I#zp+M*>`8STZDNoO4#3*u1lt zjg7Ar-OPf;2%~Dp-{VUPTGThAr7gfXmn9Q>yWK)=F>5i&lj{Gv8IJ*8Hajiw2!ZZ2dln(A7h< z>Qn0KdTmoz@O+tzL+`Ou(K2IOTnSz+alM42YtyOd7BeNXZ}3Mqf_FFcptma6tZjon z4Ej09X*xJVC+p{S>37xi4UVwDqSnpp5fkx~PN{##L*y^b^BPUO%uSpTLPBD}&d2cq#Pvv6+?#W9PkuS~wk+p$zkNJD18Bpt42OUYUQ?*#1IuD*oo(!z zR!eF-Ztk|EGFIBy=U1Y)qFkH$HtJepbuCGgPFSltL%)DlzA5?C4KuU1Wye#hVVi#; zGhT!snivN7vDjQ67U0uDJGO0FX*HR!{w05K5dr!aj=zi51q?%6ku+h1_elX^>~39Z z739j_Qa+~e7dhgnUEyxo%Ntk;cd;AiH6%FcvkU&p4*X9DMm>X`Vb7={J|LvCMupv@ zIZpuxifCU#vXrJVF<8=*B5@oS_Hj=!J_?u^%LgQ9_R37{>$zawnL?6tVoU tF^w4%pc6}&B~^$p#xO@$5eC{Zk0@2!M->)G$;6kjNQx0BCK1$urB5GkT_OMg delta 229 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 literal 8125 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 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceConstants.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceConstants.class index b8e77941340a9cd44a90e3115e9d547c6e7da708..66ce5b3017d4147b06aa2703e4378ce7dd3cc864 100644 GIT binary patch delta 196 zcmeC+c+0_c>ff$?3=9k=3|bqxI+&a^g9BY$!{S|CJVX40;)5goLL4JJJl#EffH=g{ z&pqDR-v=n+?Hb9!Ajim{T$EUrnx|J>n37tiS6rD_l2|dho=KZcnTJ81L1FR+rg@AU zll_?sBP1DQ7}yvX8Q6h#F)_#jS&SeRKvEGXq7UXXFtBQEXHeP*R-ytVK^hnsI2crc WBoCO)%Am%e4&*U1XaGqj22B9n!Xy3w delta 113 zcmaFM(ZRuW>ff$?3=9k=4C))XI+!LuXOdu3;9-zqke$rRJdcrm@)G7k4@L$?kO+{J v11i-A(u_cwRckwg{6-*yi9r!avVjFT7?gl)9*6=4Wd;=>kC8zYtV#_4+>H+3 diff --git a/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceUtil.class b/plugin/RavenSQDev.Preferences/bin/raven/sqdev/preferences/util/SQDevPreferenceUtil.class index 51057f839280a5c4b5ff02def27facc678b5613b..c5bdd254ebf1fd01908a27cd946c7894596cbd78 100644 GIT binary patch delta 1035 zcmaKq%Wl&^6o&r^!cLqBK_x^apruqo36*LfT?C~-lvZ4%RDzaX0u*rVsXf%SgY70_ zWgeicEWtY<7O)}(sT+3ec?@0wapI<}8>O){qq+R&oBy2S&u4#KP=5dWu?Jup&2P#L zDa>mgpVtE25{_B(G<}l?{-Wi!oir90Mm?>?ohkpV!CO<@(bjF=6U8wMdEw7)dmeX! zx^VbIVOlngfE#HnFV(|E&BE1X=cIo=XFubeFC!ivjOp`*-?^)_zGP3lS-TMUI{ruu+i z;h=|6St_w?WJ}lC`RJ2$hh2{TNY%_WWKqO9Oh%*fT{a!9$z@iJKFZ~>I!<983hJZ) zQZzEOzYhkP)|1g+`BEs+4rnA4k5TCszDj`W)W2Q(7#J8#7=ku(8L&;>%VEgKKKVU|7NgK)DNb8PsmT$X4xGvi+ze_A zf(#my7joJ$8cu$|X~AeaS(3{_+=GFc!IOcD!2_s*fq@B#IT?Hz+$JyN5}91XC7{R$ WlxJWF0g|CWRUvRyj0^!_^??A>-xnbO diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java index 9ee46d40..e756a93c 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/initializer/SQDevPreferenceInitializer.java @@ -46,6 +46,10 @@ public void initializeDefaultPreferences() { store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY, true); store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY, ColorUtils.getRGBValuesAsString(ISQDevColorConstants.CURRENTLINE)); + + // set syntax highlighting + store.setDefault(SQDevPreferenceConstants.SQDEV_EDITOR_SYNTAXHIGHLIGHTING_COLOR_KEY, + ColorUtils.getRGBValuesAsString(ISQDevColorConstants.KEYWORD)); } /** diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java index af0fcd58..e7d591c0 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevEditorPreferencePage.java @@ -43,6 +43,12 @@ public void init(IWorkbench workbench) { createDescription(colors, "Here you can change the colors of the editor"); + ColorSQDevPreferenceEditor syntaxHighlightingColorEditor = new ColorSQDevPreferenceEditor( + SQDevPreferenceConstants.SQDEV_EDITOR_SYNTAXHIGHLIGHTING_COLOR_KEY, + "&Syntax highlighting:", + "Defines the color in which keywords are highlighted", colors); + addPreferenceEditor(syntaxHighlightingColorEditor); + ColorSQDevPreferenceEditor currentLineHighlightingColorEditor = new ColorSQDevPreferenceEditor( SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY, "&Current line highlighting:", diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java index b353dc14..b84003b1 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/pages/SQDevPreferencePage.java @@ -16,6 +16,7 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; +import raven.sqdev.exceptions.SQDevException; import raven.sqdev.preferences.preferenceEditors.ISQDevPreferenceEditor; import raven.sqdev.preferences.util.ISQDevPreferenceEditorListener; import raven.sqdev.preferences.util.SQDevChangeEvent; @@ -40,10 +41,14 @@ protected Control createContents(Composite parent) { SQDevPreferencePageContainer.setParent(parent); SQDevPreferencePageContainer.setLayout(createDefaultGridLayout(1)); + SQDevPreferencePageContainer.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); SQDevPreferencePageContainer.setFont(parent.getFont()); initialize(); + Composite spacer = new Composite(SQDevPreferencePageContainer, SWT.NULL); + spacer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + return SQDevPreferencePageContainer; } @@ -67,6 +72,8 @@ public void initialize() { for (ISQDevPreferenceEditor currentEditor : getEditors()) { Composite container = currentEditor.getContainer(); + container.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + if (!containerList.contains(container)) { containerList.add(container); } @@ -77,13 +84,50 @@ public void initialize() { } } + // create an underlying component that will hold all of the added + // components + Composite mainContainer = new Composite(SQDevPreferencePageContainer, SWT.NULL); + GridLayout mainContainerLayout = new GridLayout(); + mainContainerLayout.verticalSpacing = 25; + mainContainer.setLayout(mainContainerLayout); + mainContainer.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false)); + for (Composite current : containerList) { + // put current on the mainContainer + if (current instanceof SQDevPreferenceComposite) { + current.setParent(mainContainer); + } else { + Composite previousContainer = current; + Composite underlyingContainer = current.getParent(); + + while (underlyingContainer != null) { + if (underlyingContainer instanceof SQDevPreferenceComposite) { + previousContainer.setParent(mainContainer); + break; + } else { + previousContainer = underlyingContainer; + underlyingContainer = underlyingContainer.getParent(); + } + } + + if (underlyingContainer == null) { + // indicate that a problem occured + try { + throw new SQDevException("Failed at finding the underlying container!"); + } catch (SQDevException e) { + e.printStackTrace(); + } + } + } + + // create the shared container Composite sharedContainer = new Composite(current, SWT.NULL); for (ISQDevPreferenceEditor currentEditor : getEditors()) { if (currentEditor.getContainer().equals(current)) { - // put all editors that have the same container on one new sharedContainer + // put all editors that have the same container on one new + // sharedContainer currentEditor.setContainer(sharedContainer); // make all editors fill out the later crated layout currentEditor.matchComponentCount(maxComponents); @@ -94,9 +138,10 @@ public void initialize() { GridLayout layout; - if(sharedContainer.getLayout() == null || !(sharedContainer.getLayout() instanceof GridLayout)) { + if (sharedContainer.getLayout() == null + || !(sharedContainer.getLayout() instanceof GridLayout)) { layout = new GridLayout(); - }else { + } else { layout = (GridLayout) sharedContainer.getLayout(); } @@ -161,6 +206,7 @@ public Group createGroup(String text) { * columns * * @param columns + * The amount of columns to use * @return */ public GridLayout createDefaultGridLayout(int columns) { @@ -229,7 +275,7 @@ public void save() { @Override public boolean performOk() { for (ISQDevPreferenceEditor currentEditor : getEditors()) { - if (currentEditor.needsSave()) { + if (currentEditor.needsSave()) { if (!SQDevPreferenceUtil.alwaysSaveOnExit()) { MessageBox messageBox = new MessageBox( PlatformUI.getWorkbench().getDisplay().getActiveShell(), @@ -245,8 +291,8 @@ public boolean performOk() { } else { // exit without saving return true; - } - }else { + } + } else { // save unpromted save(); return true; @@ -267,7 +313,7 @@ public boolean isValid() { } } - if(getErrorMessage() != null) { + if (getErrorMessage() != null) { setErrorMessage(null); } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java index 94d6229d..62f4175c 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceConstants.java @@ -45,4 +45,9 @@ public class SQDevPreferenceConstants { */ public static final String SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY = "raven.sqdev.currentLineHighlightingColor"; + /** + * The preferences indicating the color of the syntax highlighting + */ + public static final String SQDEV_EDITOR_SYNTAXHIGHLIGHTING_COLOR_KEY = "raven.sqdev.syntaxHighlightingColor"; + } diff --git a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java index b5c68174..ffa636ba 100644 --- a/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java +++ b/plugin/RavenSQDev.Preferences/src/raven/sqdev/preferences/util/SQDevPreferenceUtil.java @@ -5,9 +5,12 @@ import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.widgets.Display; import org.osgi.framework.Bundle; import raven.sqdev.preferences.activator.Activator; +import raven.sqdev.util.ColorUtils; /** * This class provides functions for dealing with SQDev preferences @@ -64,7 +67,8 @@ public static boolean alwaysSaveOnExit() { /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_ARMA_DOCUMENTS_DIRECTORY - * preference that holds the path to the ArmA folder in the documents directory + * preference that holds the path to the ArmA folder in the documents + * directory * * @see {@linkplain SQDevPreferenceConstants} */ @@ -76,13 +80,65 @@ public static String getArmaDocumentsDirectory() { /** * Gets the value of the * SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY - * preference that holds the path to the ArmA folder in the programs directory + * preference that holds the path to the ArmA folder in the programs + * directory * * @see {@linkplain SQDevPreferenceConstants} */ public static String getArmaProgramDirectory() { + return getPreferenceStore().getString(SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY); + } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_KEY + * preference that holds the path to the ArmA folder in the programs + * directory + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static boolean areMatchingBracketsShown() { + return getPreferenceStore() + .getBoolean(SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_KEY); + } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY + * preference that holds the path to the ArmA folder in the programs + * directory + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static boolean isCurrentLineHighlighted() { return getPreferenceStore() - .getString(SQDevPreferenceConstants.SQDEV_ARMA_MAIN_DIRECTORY); + .getBoolean(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_KEY); + } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY + * preference that holds the path to the ArmA folder in the programs + * directory + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static Color getMatchingBracketHighlightingColor() { + return new Color(Display.getCurrent(), ColorUtils.decodeRGB(getPreferenceStore() + .getString(SQDevPreferenceConstants.SQDEV_EDITOR_MATCHING_BRACKETS_COLOR_KEY))); + } + + /** + * Gets the value of the + * SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY + * preference that holds the path to the ArmA folder in the programs + * directory + * + * @see {@linkplain SQDevPreferenceConstants} + */ + public static Color getCurrentLineHighlightingColor() { + return new Color(Display.getCurrent(), ColorUtils.decodeRGB(getPreferenceStore() + .getString(SQDevPreferenceConstants.SQDEV_EDITOR_HIGHLIGHT_CURRENTLINE_COLOR_KEY))); } } From 7e84c5213e34fc9fb4596e26ab2642bed351c1f9 Mon Sep 17 00:00:00 2001 From: Krzmbrzl Date: Fri, 22 Jan 2016 19:55:35 +0100 Subject: [PATCH 6/6] final tweaks for release --- plugin/Raven.SQDev/feature.xml | 13 ++++++++++--- plugin/SQDev/SQDev_0.2.0.zip | Bin 0 -> 63454 bytes plugin/SQDev/SQDev_0.3.0.zip | Bin 0 -> 95428 bytes plugin/SQDev/artifacts.jar | Bin 643 -> 668 bytes plugin/SQDev/content.jar | Bin 2206 -> 2348 bytes plugin/SQDev/features/raven.sqdev_0.3.0.jar | Bin 0 -> 1261 bytes .../raven.sqdev.editors.sqfeditor_0.1.1.jar | Bin 0 -> 11151 bytes .../plugins/raven.sqdev.editors_0.1.1.jar | Bin 0 -> 19620 bytes .../plugins/raven.sqdev.preferences_0.1.0.jar | Bin 0 -> 34253 bytes .../SQDev/plugins/raven.sqdev.util_0.2.0.jar | Bin 0 -> 17759 bytes .../plugins/raven.sqdev.wizards_0.1.0.jar | Bin 20724 -> 20728 bytes plugin/SQDev/site.xml | 2 +- 12 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 plugin/SQDev/SQDev_0.2.0.zip create mode 100644 plugin/SQDev/SQDev_0.3.0.zip create mode 100644 plugin/SQDev/features/raven.sqdev_0.3.0.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.editors.sqfeditor_0.1.1.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.editors_0.1.1.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.preferences_0.1.0.jar create mode 100644 plugin/SQDev/plugins/raven.sqdev.util_0.2.0.jar diff --git a/plugin/Raven.SQDev/feature.xml b/plugin/Raven.SQDev/feature.xml index 80cef441..5515bb01 100644 --- a/plugin/Raven.SQDev/feature.xml +++ b/plugin/Raven.SQDev/feature.xml @@ -31,11 +31,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES + - @@ -50,14 +50,14 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES id="raven.sqdev.editors.sqfeditor" download-size="0" install-size="0" - version="0.1.0" + version="0.1.1" unpack="false"/> + + diff --git a/plugin/SQDev/SQDev_0.2.0.zip b/plugin/SQDev/SQDev_0.2.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..dc2a9ede60ca485ce5f07ce5b419eac2018c8ac4 GIT binary patch literal 63454 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 literal 0 HcmV?d00001 diff --git a/plugin/SQDev/SQDev_0.3.0.zip b/plugin/SQDev/SQDev_0.3.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..0ebb3d0b4a81983afa9d37f665ca2114b68e5a6f GIT binary patch literal 95428 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 literal 0 HcmV?d00001 diff --git a/plugin/SQDev/artifacts.jar b/plugin/SQDev/artifacts.jar index ca845f85b0a6417ba83799b2a9b17bb79fc1b468..f312a30d2a21c01850c1f98a57c141fa9b286ee6 100644 GIT binary patch delta 598 zcmV-c0;&Cj1)K#9P)h>@6aWYa2mnQ%Hjxb@f0oH^+b|G@?*;k}JQ!tiD7AP;<@(kK zXp?imh$DjqMKWBR*oNP|lx;1pLg;KfiyM&8cy`pt<`BT3POtS#`szz}-F5x+N_kfCcl&FV~vz4N5P?`Q8mWWUn@DS$d}&JA_&zBpAD)l~P#S~4}{ zQ3JX5piWD;Llz^>X4udrNMautEXgBZQ^RaWVewAZhm0>O?K#Oba<1++k{QI)e^CSR zxiF?4rBIX|ho$j2opj<(ZD`z<)n2m$~AE(w!J0yPFl0ssI20D|fWX#fBK delta 573 zcmV-D0>b^A1%m|*P)h>@6aWYa2mts>Dv=E%f0a#d8Zi)t@0I!=d_Z+_s24W74X8`G z^#`=cIdawmn#yZC{vZLwf3FwVkBX4CQCe}sGoE>89$tBi*;6IS60Ae5rgX%Hlz=L= zK((0C+ncW+$8`4P{kvkut;abp{Wmb$q1SfRFRKf8_iUF|yn@)n2=0M=M-PP4H7X*wkEZt=uL?h6O5@3^pjX zcZ1D=$(H@#wp-zMI`^o!U7e8FCyx~VynFvo4m%I9IdC8Bsih9t7q=>shU)&5W8tWGO*0rIs&2G4~)~$%04Ov)6Fv=|j60ZT6gBS})gkTfbz($)}d!e{*F* zKPsuY__b`5kMp!wcjUD?)F{3lz$31?74AG4q{Hhp`}Yh$)X$8Ir}_TpdD0jSC)fFZ zqj9DTCV4)28wMwzsv{(ChN9i6)XIbMH}T8Zt`^@oi6!?@Ct0I;4V?69{8wzcV|}4W zx^Hki{sd4<2M8}v6)x`q001Tk8~^}NO928D02BZS2nYc9N-9V%P!%rk0RR9d2$Nv~ LH3lvM00000WXA|* diff --git a/plugin/SQDev/content.jar b/plugin/SQDev/content.jar index c00d50af3f542f6a24ee8b38b8a8a72767a781e8..7899cfd2003a33245306222a2909487aaea96112 100644 GIT binary patch delta 2295 zcmV@6aWYa2mnQ%Hjxb>e_ZQt+c*;ce!%??1Qu8~fGa=J>}AvB z3MEz=VIA8iJIw`${UA%U%~ldsipuM+zab^rlKhlkN!zqVV)5~t2g#Yy4BgXDkFJC6 zF$)Ow&Pp|fs7<`#S?Q*C`Tn@{>EHkS$LS{*bJI4tX<(lQgj4pEo+c*Bact7< zf0-@@3?F7;)Fm935P$NaiL#-BEr<94R`B>fx9mTIJ2`Oa)rZlN#I@eP? zlu}HTfIdQ}KBGQnoZtWj?y%_8{aF~7QzMa zG>AT?#H@m@Ysqv05b1XX2xfXip#8t90)NXA=b(fF4A6u>0rFVdg<71Yj#(=TDiWPz z<#hjZsYRSriX*|OdtzfYMl*!0X@>LqPQb;qM25q>45HJPlmp+i=94F3Ddw-(e=_AI zou(HIiP8@}+rhh{Fk7OeNu0=pa>7U294OVilBGf?O-z8Yv5No9s5tIiCUTm`kc@X~ zHAj9uK#MZ0u+S4neap}xNmgjfz+VS2O5ymCkAV-BKb88%z@mE#yr%bP$cdAJtZe~u zTB%c8eGOEw)&tDIyWzsi_0_yLe--%n%^c2V_|d{Xhch!D`LvRplu45b<_cDN>=tU7 z!;|zP%Q1t13#_V2$v zsvl#RFOgU$NGdGDQ6l=l7#cfUSbWS89iUja z0C9?7&k=`k5ufl8Mj$(OsPAHr%N2pq5pIA6l*u6~b5%fMAhog~r%K42F}EYm{gX=N z8+&&9?AcLgsMVgt~3Xusl`0W5t*PK5x+wM#JF*-V*}b6~F}A=O*#MrGk~WfRY%= zM*tJh0e>(VhQT(1?N2QNd)-DhwL)R#O}RDTK*1Wl6H@;Ee?6r9V>g}_Jsn7LHZ~nZ zJgJMMA3cD+X~+?rQqG9n7iAb^IiV;@jJqA;l9-m5E)^mDPZ)qKg5xrBsZ9prHgD{5mbDkS{^G)(tQ|FH!BG!YY;Lo zT6G~V1?5SKe_t^e4`>m?2h?%sgAmQ49)vRD9Gqk~f!U|`SjrTww?{d!9I+yn#GkBl z+!c(#+Mzy<6$kV|&1On0CfER*2rnV920mrcna_!AyHyPh>0Q(@+F$gB z)`*u^?LuSpv5ao@-c|dihhVIswt9D{eTmf89r{aee>KWT`)|k4x?R*Zkbd21>Ke4^ zt&8SOLvMXX=P<9;hE1=-ZU^{Y8wt`el&*CJ*tKR{T*0Gyt~d4GT^U{Ky_Ued1W*-q zRHLU~+%#1Kb#9DKyQ=~D2EexT)};Ydv}>)^Q-CV8A?*u1pzf90Y)Vq<4RCKr{w~^` zJ463`f7L@*?Pf!R#&ZogQ_q`PL<)quXsY^k88y^v^|K~twE@MD!(#4kuQb^N^i=qF z(bL;4A;v|!)idC+3{o1s@zh(rtCf*z=v|?ZOQQ|&LY*+9EkR&jON&s1s!?WbV2F6W z>1q>R8k*V!tge`x9;~DdaeNF?HaM}ht4Fz+e;jM(<)peieKjjVn@V9-_nE@#qVZy&j!)lS}z_g=AfJ}9M- zm2*PXz2$_YBT%BOOirmv_2|8IclbmXC4{zc4`a=QkT8;p1&(_dUA&pP^AbtDf?um` zf9}^-Qez>TU0ZIm*U8BY84dk(ICCh&8Tk445<`(YonGk7cYFmBkTFBK3qDS7+9@Hqy|zwa z$-SMLQj6~G{Jk4mvo8kkjB4if3kcO^h)~Z4LE9koK%Pxz=TsTzkG4%~PQGeq^fG0> znE_??m1?RoCjJz!jzw;83Tzy*+FOfa-^x30<(;?k&Rcost-SL}%R5ua_xgINe}jBD zP))*teU^A`1QS2Y73G;LvuROhJc^Zh~v4WWrSm5cfwD;G0gvx?UEXS|=iNPYh{=Hq9%0y=L&Hgy5(DR=03>@XglU-j!G{JGt5SZ};K;mm8j6C<2I;@k*{U zL?6Wru@RF0iUS`14^T@72)G<1G@J+k08T^z08mQ-0u%rg00;;O07afQNVps%G@J+k R08T`cWe76{*$4mt006TRPon?; delta 2152 zcmV-u2$%P)5}pwaP)h>@6aWYa2mts>Dv=E#e_QKs+c*;ce!%??1P)j?fGfvodYem= zE0kDigmvt!>@*h~?t?7RHd{$lNh+_ueuvbs35(vx!+tb25EoG%mz_d1XZ0}-5 zhFVUD8t_NxC}cFmOc2ZwCy&5xFYcIhrJ?~VL43@G?S}wldl57?_do9KH~07U4i0|b zuQi?~b*LXQ%sF;5TEQZmkQ_B8a>NZ$e?UYk((jo_vK0~cxW?>T9BBN9i*L0dwnfCS z_RVHF1$UK|6T&h@_a~jR5|GV&LS8B`db3s$VMCs zM29F*jw3zxVge-y}(4gQ0PoGtEV!C`4Hay*-JG9;MI*KsNs%+)Ys zJ!um(a>gNrc&d<|@EGMIGRHMJlorI>QpKd1Smel+RH}J#2>Om6j%$x33?W_?Mj<5a zTcB&?2=grS?KzbjMQJA;9&vEMak*oXP82Z`FMkf}KUww=+Z%r*p&$tWe*=#W8otfJ z^$kVpV9kfn4?$!N@`5Geh)FmKqk%{G7}iA;K>SdF@51b(b}X`rjZ^>Y7l)vC@Ub)L zKBeIUBcriE@0=a9x7+-PR4|&1xWvpSTuuim!5A|@!P^EO$}I3 z;G=g^%in%PRD9|sWbxOIV&`JpLnKhPNc+(p*qcTI!73GusCiL`L5>&60w(MBh))t; zl3W==<)4UyE>hw;@}cG#%D=HvFmXX0xkN$_A_0wDHY)qprA7_Ne@PsBotYjzy6!2`7F|y7(BP9U9=oaKInTZ0FQsQVfWRfgs?6kg|BqPpPZr ze?4?*b-$V|qm{T)Y@7X?Iyy7^9f^4cpgOwLt-g7B)z&R^d1YO8dj_y?e*tXA?3`J^#kep!eGRxm z8#2Da2kM>c?Y3g2UxDuUERpW|+)z!xPlrFJeY4wcMj29vwY%E&UskS;81NeRRNX2e2vvQM9N^B-y$uaq*qSOFP@N% zM2;6r#~+_19Y0qRu8zAf9+dzubr7^9a3SDT<+0_u;h(>F-S9y>(Drs;S>=!i=67P7 zDSnHI_$~eBjPc5oZhA&PVl)b89EURDk84BQf8%&@GM)llFD1_;w6|-f*L}^jG?Gkr z*`%Af(u^nX5*1JLd2X!AS3{-z+x)mV0WT75&2(G^ey!wOO^-EFbrnWyBGrd6 ze=QWO&&lYHJlf3NjwuVT9!mKYE6$mR0`kA=j|JkiGy|5E{qEeIz*GqyM4mTihx>Nh z{dU{^cH8}S+x>Ri{c3KzRnXDm?e5eeiMHE(@7#QNpz|JdZs0b0#htd=2|5tHM)4!t z7u^glWyWgz!1cF*OC7J2)-&s-`XvsKf8rW${d1$~TJS|~aIT~fKg;z^sb|)`yIBpi z%0=>~?`~!!evP*^OGJqcT&`^64q(9q`Gqb3q$OV2X@9m4u6o5@vVne)0DYav@w2>m zd&(i}hUwLDw;cC&w-Wf)fnND!bj#Q4D;};^ecrYqQCB~t-Qo+vb>GizDoD}vk!=nL005dhlk*5O21^J40001Z2py#W diff --git a/plugin/SQDev/features/raven.sqdev_0.3.0.jar b/plugin/SQDev/features/raven.sqdev_0.3.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..75e2f15fdabc096bb0f17eaf34809ab1ed331c5d GIT binary patch literal 1261 zcmVH_-oZ(8G`dj_jl;&~^3-#g=2Cj^s&lvpmugWwW6~g{0ypzkWwbcARbx2^I`9 z4A?y0efQmWCsLy?KS~bwR4OK_v2*4Q9iUYva#n4|&MKXqesaG2{;oGFDAA3i?|NWA zEFU|P+|$ZccR9Ux_I6Izl#iX{kLi)|06%m;V1m85mg1h}RGwC(q+=&Ga1Q3O`=gwy zOtM;IAT$y&w_4Yq2ZLMrSgz$GcQ;ILo3+ctz-Akm&=%OP_wWh`D5^me(AA(o3n)m& zIMYN^&|3;v1LdMFX{CGU*``)d2x+%HS$c>f8C7meZ*au#z?rj*R*F9HRY?2s6d%Y!m92HZ4?EOSG#appTC&Wb_0cKgjTzX(HfJU4a+z=|fbDvtuolC( z4<*icVScGCu#>nCIWy4fMx#*~qt&x-DjMK4D9X7(z)5JUeqv{ROqSY6t2?o5-rZJ| z&nrQ(ibhs#S53JB#j_c|(@YzSaW4etVrNRrM3pmBk^0;=o2wY9YUt%OFZEd|qx z`l-L&mf8~JzNVdEm>10oApt1eihwC7nN2?UjH}=Bx2BH~w;SGEZ!f7A;KbNteBoM_ATrC%YkG3G3ELPJX zyo3vk3nLur0H+z@(+EuJ4l3{y19s)dlQ}NEi(nC?H+`4|X=pHK27TT6i%m zSMf4Rd`v$@*f0oZF=p|v{4jMfE84*Sh6_mM-eO@>c`IZeTYi&hc@qbh^AzUMV(O#u z!bfJ_#lmk>VNsKX7hLsW>Rox4zKx0yCAMxIyX(1cO_;t1i5oEQ;V5R41`7R5*n&w7I{X1z-MCoWUpTOd|qf{&f|2U|Ds zheJ)$yN2NdcQ}?ttTeL$HE%WyPjw+TF3mWr6?Gft3|{1z37jO^;HZ`Kg&_@dDLw;2 zD(C4+`QUzX&xd$xl|*OTv9pnQ$Ws|f|E?kYg~;FWHlVJiKlC%?U)}S6hpTq_g`Prf zUZ)&YqLCR@FV_z5!k0VmguGqjg|vN*f_vZ5;Am!AOB=IC`uhvSp|eLWx!6@)ko;7! zM|?jR9`CUV&neFTY3t~1;vNwd+6zb&(KclajE zcI=VJ{LQ=jHsoqa3w-^l%+vH=6C4e?mr`8)1yD-|2rZ9WUu6UU0E`O&08mQ-0u%rg z00;;O07RZPNG*?BUu6UU0E`O&01E&B0000000000000000001HWnpx6a%C=fZER3W X1qJ{B000310RTAw005o@00000EwDk6 literal 0 HcmV?d00001 diff --git a/plugin/SQDev/plugins/raven.sqdev.editors.sqfeditor_0.1.1.jar b/plugin/SQDev/plugins/raven.sqdev.editors.sqfeditor_0.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..5bd1980d59f2c73acb948d5175a83487f1506b65 GIT binary patch literal 11151 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 literal 0 HcmV?d00001 diff --git a/plugin/SQDev/plugins/raven.sqdev.editors_0.1.1.jar b/plugin/SQDev/plugins/raven.sqdev.editors_0.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..3877f6c07b8f71c133b35912b51ab1ea66b092c7 GIT binary patch literal 19620 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ⅈ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 L4g<}u-@pAoBMIdO literal 0 HcmV?d00001 diff --git a/plugin/SQDev/plugins/raven.sqdev.util_0.2.0.jar b/plugin/SQDev/plugins/raven.sqdev.util_0.2.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..9c5b4948df88ac01bec1749c69ced987a8b5ed19 GIT binary patch literal 17759 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 literal 0 HcmV?d00001 diff --git a/plugin/SQDev/plugins/raven.sqdev.wizards_0.1.0.jar b/plugin/SQDev/plugins/raven.sqdev.wizards_0.1.0.jar index 1480200b94c50ba79a6d9172002a14bec4d13d96..864433d005ac39fdce52a49d03bc62e74fe0a2df 100644 GIT binary patch delta 1285 zcmeyeknzVtM&1B#W)=|!4h{|mmw9FrdDZJr`W-e9aCrZ-YejmJ>70O7at^0hS8{9> znj>2s#U?YmZ~BBfTh7Q8cVeEO-E*@n=CRtF&{xXvW9FZigiE;{1Ja=dD9#XWdZdDZjby-@8p+BHIcBpL{;S>auU+=|x8I zzT(pPDyQWI?y|T|w^ERdZ7y^Db%xn~O5{1YMfXcO*Z);Lep@N@&n30}0p9E!afjR2 zb1*V6_%Sgspaj(9U`8`$V1RAzVXR^VF(z{|8-ra@dXx9N0t3c`g@J(!$s-I5%|OwDoYM5n zJiUtCoB(e|CJ_dB`kKt|C2h*U%)n5TSeBZnk0uKa5@1M!0S}6)W|QN+q`~f}^^#^P zVxFAHCN_D47Y|ryKTv2JM99vYYw{ncFt@if6AKGirJc8`0xZm77RaMm@QW3wP*Dfn zMYC@CaZ3Yrcmw_EgrdQd4XD8dLjy<+%mzgi4OciO8~Q0@Xpm<;JpVe#voZ_}#wZ$8 zIYAmGCvXa3XkvNbgC&ZlSTUd`)5)s7Lg1jW@|9*fBncF%$J*@=*8FU^7;i7ps`TP&|9$noy`nzsC3Zg@UY{tCTAv`fmnBSU@>@~9HyhRS z7acJ9x1@W+sjo+CW1qN9ezQPS)o91&Lqe<86~680m#STSt3rAMKi@yqp1AsH^SmDR z?tRU4F}YqsD&H5Iz2QNS2@O@leeaotMtKyC;7v%%I**P9CdiAj| zGBB7kF)*M6(&TVPGiG35ZJxkb#Ry_d=4Cbp)6UG6V7i{!5lkOu_6E_L1zA2r6tc7V zfCa+XI+(yJ9&-2z0#$f0AOYja7n#K;_lxmP-sU5;xs3B84_Hr@SQ0asabD6IqWQd} z=jJe(QV6F|Q+@ISU&YCJer%g%F*7g} zC6=Y;=@%EKq?YNU89%wvOPVQ!2WzVPG&u(V)l))L=UK1k_}f2R^Rwty$bU7x^^@n(54N$ny04Qv$jUM9%uU^bN4@`|afQiNt#VzY58wLb` gQ?>oVUiNQX3=CIA85rzQ)V!IzARvg%-xDMV0McxFd;kCd diff --git a/plugin/SQDev/site.xml b/plugin/SQDev/site.xml index 00ba7ead..4f72c016 100644 --- a/plugin/SQDev/site.xml +++ b/plugin/SQDev/site.xml @@ -1,6 +1,6 @@ - +