From 0c26029a5251352263f14f294b0538f93f61b99f Mon Sep 17 00:00:00 2001 From: Amandine Tournay <amandine.tournay@pasteur.fr> Date: Tue, 9 Mar 2021 19:28:11 +0100 Subject: [PATCH] Added project --- .gitignore | 6 + pom.xml | 86 + .../workspaceeditor/PropertiesDialog$1.class | Bin 0 -> 875 bytes .../workspaceeditor/PropertiesDialog$2.class | Bin 0 -> 838 bytes .../workspaceeditor/PropertiesDialog$3.class | Bin 0 -> 930 bytes .../workspaceeditor/PropertiesDialog.class | Bin 0 -> 4907 bytes .../workspaceeditor/PropertiesDialog.java | 149 ++ .../workspaceeditor/TextFieldFilter.class | Bin 0 -> 1841 bytes .../workspaceeditor/TextFieldFilter.java | 44 + .../workspaceeditor/TitledPopupMenu.class | Bin 0 -> 1014 bytes .../workspaceeditor/TitledPopupMenu.java | 27 + .../WorkspaceEditorPlugin$1.class | Bin 0 -> 1523 bytes .../WorkspaceEditorPlugin$10.class | Bin 0 -> 968 bytes .../WorkspaceEditorPlugin$11.class | Bin 0 -> 1552 bytes .../WorkspaceEditorPlugin$12$1.class | Bin 0 -> 4730 bytes .../WorkspaceEditorPlugin$12$2.class | Bin 0 -> 4303 bytes .../WorkspaceEditorPlugin$12$3.class | Bin 0 -> 4303 bytes .../WorkspaceEditorPlugin$12$4.class | Bin 0 -> 2824 bytes .../WorkspaceEditorPlugin$12.class | Bin 0 -> 5053 bytes .../WorkspaceEditorPlugin$13.class | Bin 0 -> 1559 bytes .../WorkspaceEditorPlugin$2.class | Bin 0 -> 1134 bytes .../WorkspaceEditorPlugin$3.class | Bin 0 -> 2214 bytes .../WorkspaceEditorPlugin$4$1.class | Bin 0 -> 994 bytes .../WorkspaceEditorPlugin$4.class | Bin 0 -> 3535 bytes .../WorkspaceEditorPlugin$5.class | Bin 0 -> 1804 bytes .../WorkspaceEditorPlugin$6.class | Bin 0 -> 5616 bytes .../WorkspaceEditorPlugin$7.class | Bin 0 -> 1494 bytes .../WorkspaceEditorPlugin$8.class | Bin 0 -> 2316 bytes .../WorkspaceEditorPlugin$9.class | Bin 0 -> 1433 bytes .../WorkspaceEditorPlugin$MainPanel.class | Bin 0 -> 8338 bytes ...orkspaceEditorPlugin$PDBMouseAdapter.class | Bin 0 -> 3884 bytes ...ceEditorPlugin$PluginActionAdapter$1.class | Bin 0 -> 3356 bytes ...ceEditorPlugin$PluginActionAdapter$2.class | Bin 0 -> 3356 bytes ...ceEditorPlugin$PluginActionAdapter$3.class | Bin 0 -> 2535 bytes ...ceEditorPlugin$PluginActionAdapter$4.class | Bin 0 -> 2623 bytes ...paceEditorPlugin$PluginActionAdapter.class | Bin 0 -> 6194 bytes ...eEditorPlugin$PluginDescriptorButton.class | Bin 0 -> 5981 bytes .../WorkspaceEditorPlugin$SizeButton.class | Bin 0 -> 2973 bytes .../WorkspaceEditorPlugin.class | Bin 0 -> 18457 bytes .../WorkspaceEditorPlugin.java | 1587 +++++++++++++++++ .../workspaceeditor/images/WE_Help.png | Bin 0 -> 36988 bytes .../workspaceeditor/images/minusWorkspace.png | Bin 0 -> 721 bytes .../workspaceeditor/images/plusBand.png | Bin 0 -> 514 bytes .../workspaceeditor/images/plusWorkspace.png | Bin 0 -> 743 bytes .../workspaceeditor/images/sqBtnLarge.jpg | Bin 0 -> 1199 bytes .../workspaceeditor/images/sqBtnMedium.jpg | Bin 0 -> 966 bytes .../workspaceeditor/images/sqBtnSmall.jpg | Bin 0 -> 1338 bytes 47 files changed, 1899 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$1.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$2.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$3.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog.java create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/TextFieldFilter.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/TextFieldFilter.java create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/TitledPopupMenu.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/TitledPopupMenu.java create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$1.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$10.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$11.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$1.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$2.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$3.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$4.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$13.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$2.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$3.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$4$1.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$4.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$5.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$6.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$7.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$8.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$9.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$MainPanel.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PDBMouseAdapter.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$1.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$2.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$3.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$4.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginDescriptorButton.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$SizeButton.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin.class create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin.java create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/images/WE_Help.png create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/images/minusWorkspace.png create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/images/plusBand.png create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/images/plusWorkspace.png create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnLarge.jpg create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnMedium.jpg create mode 100644 src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnSmall.jpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d47f98 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idea/ +target/ +.settings/ +*.iml +.project +.classpath \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e684fe9 --- /dev/null +++ b/pom.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <!-- Inherited Icy Parent POM --> + <parent> + <groupId>org.bioimageanalysis.icy</groupId> + <artifactId>parent-pom-plugin</artifactId> + <version>1.0.3</version> + </parent> + + <!-- Project Information --> + <artifactId>workspace-editor</artifactId> + <version>1.3.2</version> + + <packaging>jar</packaging> + + <name>Workspace Editor</name> + <description> + Edit the workspaces with a simple drag’n drop system. + Requires Icy 1.2 at least. + </description> + <url>http://icy.bioimageanalysis.org/plugin/workspace-editor/</url> + <inceptionYear>2020</inceptionYear> + + <organization> + <name>Institut Pasteur</name> + <url>https://pasteur.fr</url> + </organization> + + <licenses> + <license> + <name>GNU GPLv3</name> + <url>https://www.gnu.org/licenses/gpl-3.0.en.html</url> + <distribution>repo</distribution> + </license> + </licenses> + + <developers> + <developer> + <id>sdallongeville</id> + <name>Stéphane Dallongeville</name> + <url>https://research.pasteur.fr/fr/member/stephane-dallongeville/</url> + <roles> + <role>founder</role> + <role>lead</role> + <role>architect</role> + <role>developer</role> + <role>debugger</role> + <role>tester</role> + <role>maintainer</role> + <role>support</role> + </roles> + </developer> + </developers> + + <!-- Project properties --> + <properties> + + </properties> + + <!-- Project build configuration --> + <build> + + </build> + + <!-- List of project's dependencies --> + <dependencies> + <!-- The core of Icy --> + <dependency> + <groupId>org.bioimageanalysis.icy</groupId> + <artifactId>icy-kernel</artifactId> + </dependency> + </dependencies> + + <!-- Icy Maven repository (to find parent POM) --> + <repositories> + <repository> + <id>icy</id> + <name>Icy's Nexus</name> + <url>https://icy-nexus.pasteur.fr/repository/Icy/</url> + </repository> + </repositories> +</project> \ No newline at end of file diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$1.class b/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$1.class new file mode 100644 index 0000000000000000000000000000000000000000..8067b43a77262f7de967af705db5b842e1494e75 GIT binary patch literal 875 zcmbVKO>Yx16dWgM(=1yO0xb{<<s+apNGye_99oc~v`9rMss!Y~&DlIs!`6;$C*f}) z@gZ^G2k@g1&r2jE4oIyJ_M7$d?9A9de|`S};4$u%Q4rV~XOofAF7ab)rp7p*%#8iu z#xf-uDsOCZWX+hYSLF7T%*?2{Sw=~q@m@~l$HdK)9wnWD^H!$5lX_*eK+Tcm<~~`+ z_|3tdfOsLW+%?*HseNB&6Ix&$VF-amf2>^dA?xX#UeFGo-&I=qX97=JXCc_=3zWKM zNENX57!l4zD54%C#zlc*D>PJlO4G~9$$;!@Imk$$-ZLqilx&sp{9`Ft5!gP1j^-v? zsd9{**%8@y#-7knV7=7~StoMl6Pl9t$)A|_L%p-nk8lmw%UBb5bo%gO+`zg(<jD7x zQ@O8F>uoSB*y7s%e$B^TnTbv5xe9Tt{QFWK1ljCpU#FRI{7w$Z9~*WQA81Xsn@Q)$ z;U<S(<aba&0}EJWRL;>-trl(~ufaF5%sb~9ZE<IT*QkB}3##pJxbP|Oxx{lg4QykD z=Qyt;tl}~wfh)K=XXwlsD(%mx7QdqLmmtcicd>-0Imv2{D{~T{!g6mhO%b=5w17Kk S@>=36sN*hI5$^>FJbnY|Yuv8@ literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$2.class b/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$2.class new file mode 100644 index 0000000000000000000000000000000000000000..8b9bc8cdaea9f277b3c81fda31b695d09ff97d49 GIT binary patch literal 838 zcmbVKU279T6g`uTS$ADctXjWXYil0T2(HAU4;7)*3c{*|N*)9sCYx(IbvqMgCh6}I z`~V;P0sbiQ&Jqwrgmz(O?!DYO_nfoy^Vjzu03P99jE2D0w3<zncDbKgGdITh{KVLg zZYoQnvGT^|`_@d!dPVNJl9ics2Qiugog+Dyc_sBEe=|Cw(#L2CtkzX|;&Yml_W4ff zmC=QAo-|p3mOoUk`;Z40r=Psd_n#`Q{4;?ky|Vyp4h5RKW=shLE@p^vK1GCfh6Ejf zs23XAh0^qTc03~cR*otXSSm~@tD&?i<cnf6ND+8^1|Ho3OKHp6n|-n$j6J5Yz*?{P zr+s_D%I(cziW|5U<EFsi^yX!_jTM2^ksm6jYF*9VyC7Jw#FhVz=4%ILW=ndZf*sfX zei9D?ZC13W%gQ*VC$GpK8dj9O)co6bE9o3L+-1`vUgsb>o!~t`#0IYfDOWFWw8eR- zr2YF}koCXe(x<xTGVd+!0p4SY_pFXnT)|b&m=Ts22s;aer2iRN^cC0t0Higv<gud~ jWVz0h1xTQ=iaQJwVU0l>On05nCY#>I21kKppupd6F&)>T literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$3.class b/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog$3.class new file mode 100644 index 0000000000000000000000000000000000000000..4c202fa4017cc95287a9b40415dccf523b951916 GIT binary patch literal 930 zcmbVKZEF)j5Pmjy=9=?tE>-JWYg>()M)1TG6)J+%3PP#{B_H~2b6JzEm))?tNq?8% z8-DNy_@l(xGa!fv&B5-@%*{UY>@)M@=eO?wI=B;|!mu+brbDT0<|anZw6-og(dNCK z@LY(2blPNxMo)xsQrPE`7kb$2L<kwuV?N_q!PPK(-9Hw&i%?})FQfd#Wnw0j%bw*< zYSoq22_+0e)s3WW-lxLd(^uZ5`%k2j?kU5g)*=AgJ%(^k4@3<N=MqF%iV>impoWwo zX!(SCS1R#pI_?YemiG(6u+r5zFM8Za@6Uswe+t9H1$Z<&^prX;wK){#oi<}JVAyDN z|0&<TmvVQz7vnOnM!3T8;Pm1pxP~=`C7$QPmMwU^kc3CSd0bDhflY?k3fGfXmO6zk z`pdvbvbFy`g|5BPQ<IAq(#w1C?-9G_Wgvz2RbFT-)$l;LktT(bmx{({ui(}Si%n`` zK<f-xn)+VSU{`3>5L5IlSv%zWNZh{r2}%14mOqp^4ce=e1B|djds5ml&f@}k#0aZ% zgo8Okqx}&{_!XD@8GOe2AE0F-0Tfhzj1;N_TrJBs=72y0Tev}x0d7)m1x?(dGo*&r Mahohp*wdl!7gK`s#{d8T literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog.class b/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog.class new file mode 100644 index 0000000000000000000000000000000000000000..4313250bc45f2610af5f3a30826213695704da17 GIT binary patch literal 4907 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 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog.java b/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog.java new file mode 100644 index 0000000..0576bf1 --- /dev/null +++ b/src/main/java/plugins/tprovoost/workspaceeditor/PropertiesDialog.java @@ -0,0 +1,149 @@ +package plugins.tprovoost.workspaceeditor; + +import icy.main.Icy; +import icy.preferences.WorkspaceLocalPreferences; +import icy.workspace.Workspace; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.AbstractAction; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JRootPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.border.EmptyBorder; + +public class PropertiesDialog extends JDialog { + + private static PropertiesDialog singleton = new PropertiesDialog(); + + /** Default serial UID */ + private static final long serialVersionUID = 1L; + + /** {@link JTextField} containing the name of the workspace. */ + private JTextField tfWorkspaceName; + + /** {@link JTextArea} containing the description of the workspace. */ + private JTextField tfWorkspaceDesc; + + private JCheckBox cboxEnabled; + + /** result of the dialog */ + private boolean changed = false; + + private PropertiesDialog() { + super(Icy.getMainInterface().getMainFrame(), "Properties", ModalityType.APPLICATION_MODAL); + + getContentPane().setLayout(new BorderLayout()); + + JPanel panel = new JPanel(); + JRootPane root = getRootPane(); + root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "quit"); + root.getActionMap().put("quit", new AbstractAction() { + /** */ + private static final long serialVersionUID = 1L; + + @Override + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + panel.setBorder(new EmptyBorder(4, 4, 4, 4)); + getContentPane().add(panel); + panel.setLayout(new GridLayout(6, 1)); + + JLabel lblWorkspaceName = new JLabel("<html><b>Name:</b></html>"); + panel.add(lblWorkspaceName); + + tfWorkspaceName = new JTextField(""); + panel.add(tfWorkspaceName); + tfWorkspaceName.setColumns(10); + + JLabel lblWorkspaceDescription = new JLabel("<html><b>Description:</b></html>"); + panel.add(lblWorkspaceDescription); + + tfWorkspaceDesc = new JTextField(""); + panel.add(tfWorkspaceDesc); + + JPanel panelEnabled = new JPanel(); + panelEnabled.setLayout(new BoxLayout(panelEnabled, BoxLayout.X_AXIS)); + cboxEnabled = new JCheckBox("Enabled"); + panelEnabled.add(Box.createHorizontalGlue()); + panelEnabled.add(cboxEnabled); + panelEnabled.add(Box.createHorizontalGlue()); + panel.add(panelEnabled); + + JPanel panelButtons = new JPanel(); + panelButtons.setBorder(new EmptyBorder(4, 10, 4, 10)); + panel.add(panelButtons); + + JButton btnCancel = new JButton("Cancel"); + btnCancel.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + panelButtons.setLayout(new BoxLayout(panelButtons, BoxLayout.X_AXIS)); + panelButtons.add(btnCancel); + + JButton btnOk = new JButton("OK"); + btnOk.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + changed = true; + setVisible(false); + } + }); + + Component horizontalGlue = Box.createHorizontalGlue(); + panelButtons.add(horizontalGlue); + panelButtons.add(Box.createHorizontalStrut(10)); + Component horizontalGlue2 = Box.createHorizontalGlue(); + panelButtons.add(horizontalGlue2); + panelButtons.add(btnOk); + + pack(); + } + + public boolean changed() { + return changed; + } + + public String getWkName() { + return tfWorkspaceName.getText(); + } + + public String getWkDescription() { + return tfWorkspaceDesc.getText(); + } + + public boolean isWorkspaceEnabled() { + return cboxEnabled.isSelected(); + } + + public static PropertiesDialog getInstance() { + return singleton; + } + + public void initGUI(Workspace currentWorkspace) { + tfWorkspaceName.setText(currentWorkspace.getName()); + tfWorkspaceDesc.setText(currentWorkspace.getDescription()); + cboxEnabled.setSelected(WorkspaceLocalPreferences.isWorkspaceEnable(currentWorkspace.getName())); + repaint(); + } +} diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/TextFieldFilter.class b/src/main/java/plugins/tprovoost/workspaceeditor/TextFieldFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..0f3259c1765342d294cead6ec54bdc0056eadacb GIT binary patch literal 1841 zcmb7EYggMw5WQ;z21mT?m;fnh9<;TM8#R#7hf@+`UJ8z#f-z0{pt8J`m)MezB%t(P zmD4&o`OwqP`B6QYm5pse^PxINEA3<M+&eQnZ~uMsH-II)3?syFuUS8`gzag5({+v= z$Mdxl$9?HF4U_Y#@Eunx@!$Ln!RyrxQTMqUhQe?|n5UX`Bs9}$G##7UzNVX}-IELx z9(RRNFLT!uj=iU^F|a2LqdCX+e8cw3M*WBn5)t_@h5^yA$SQwm92=T(LU0Yk;u(ga zhr$;A3Y|zK%M41+sqzR0Frh-l=rE$R_PgUWBDjjFFyag|lAFst=g2j=w$u69^F>|7 zHB2+aEbeFP&6=T`j-B-aPYm;kw)47STiUMg3fsyg-{&&|hFKL6Twxf`3!4{?8WrxA zj7ps|MDvbGnhjD;^Uk8;*M!Hgl>gt6CiU_EB2||9Z%O^P-#byP9CFjo1c9=RMnEZu zXul|iv8EwxKX;xwhN+Gl8Td`tXx4=35sLJaQ1J;qjUa_|7z+%O-3*-{RPj0PQld<k z8$P*=C;Gy6ekc>h7ZmwR#*1qa3hAOs1$m!gm@>03s(vj<w=TDqReUM8Mrdn`3#;aj z;A;@vHw@Rha68<tQo-5Q776oIJjAzDP220w53+@lp3UpoUA?f$FxN}yMU(k$ewvZU zk5oKHmU3Cn=J(cn<_E=sOmHunomfYpA*W&u>p{``7hp+QUt}+Ad4b2vc*(M4v8iH9 zN|=-q^g?NU=UFkIE$PLA+<l^ATXMYK=6GTMU{%lU(W^XKT3U*rfM;P8`$H8}evo@l z_*}(z*kQOr(ba>SX;KE~68c784li0{q~el_J<xSjJ>IS(iA7%e)OKA2g{0wo70>a4 z5?OVPlg^!c(09Il;dOd?ITEr7v|B;3LLKFpyP4z*N#I8nKVg(1Toqo^@yIu${t@e$ zb_<UoWGzxvUfx<<qZ`If=+)_^nv3iPJ%joj;a%-^vv%LRD^pL3b=&4{u5Nf9_regA zg%4DrOfc0kjkraHJV1>ugjoz?h-TqnHcTV+5*i0+jrtjlV>EkACmDUmQm-(cicY>p z>@UpxK`S9#m+Jvq913D&Glh?6O>J9X4mW5f(LU~=ZIe}q*2Yr{uW<8&a5F?LM$oeX z+*I4714qWVgLwi}WIN~pza<&6hnFPqXA3PP|AF>2)xy0M8Xhbw=`(zFhLsjp>2Ko< zy8Ii8=3nD!3%lvmpO~48E7jq+G7+f;18ZS_Ki$F)J+UbY5lGY^2^z&sL@Aup#N{?I zNfVc4BvGXPw2Os+`TaJhF7pz8#sM)N#U_4%LAs(?MFl1Wahf_smHrf3<>V!VUt!T# McAgsDv_oa&9b;j(5C8xG literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/TextFieldFilter.java b/src/main/java/plugins/tprovoost/workspaceeditor/TextFieldFilter.java new file mode 100644 index 0000000..7251a35 --- /dev/null +++ b/src/main/java/plugins/tprovoost/workspaceeditor/TextFieldFilter.java @@ -0,0 +1,44 @@ +package plugins.tprovoost.workspaceeditor; + +import icy.gui.component.IcyTextField; +import icy.resource.ResourceUtil; + +import java.awt.AlphaComposite; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.RenderingHints; + +public class TextFieldFilter extends IcyTextField { + + /** + * + */ + private static final long serialVersionUID = 1L; + + Image img = ResourceUtil.getAlphaIconAsImage("zoom"); + + public TextFieldFilter() { + } + + public TextFieldFilter(String name) { + super(name); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g.create(); + int w = getWidth(); + int h = getHeight(); + + // set rendering presets + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC); + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f)); + + // draw images + g2.drawImage(img, w - h, 5, h - 10, h - 10, null); + g2.dispose(); + } +} diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/TitledPopupMenu.class b/src/main/java/plugins/tprovoost/workspaceeditor/TitledPopupMenu.class new file mode 100644 index 0000000000000000000000000000000000000000..4f2a3af23cd25a8dffdd9561dd72bbde7d013f9f GIT binary patch literal 1014 zcmb7@TTc@~6vzKldXci+DHjn%Mdc<7<*|mODTswqjFd)SY=(AH2A7%5&J^@h_*vvZ zq7TMr62Fpqb|K{!A8gW@&YV5J|2hA&J^TIr2Y_WPrx0UU^1W75D&tx|&_`Mu>mKXi zgYkJ?h=#N}a4XV!qVZb$Eq_a>Rtj;3;RAleKf2~vs;0ZqjxqEZ5lHS;MPQ^>yTw%o zw!zR{(8^e@Y?XU0k@(j9bM}7m^Dl<v3#p`CVaQCELZ<6+BJS9Lz`2<!L%g6HB8?98 zI7p+5p|>QJD7OyxL{Q;-o?sX#={iYr5~lOTW!&yd!?0ZX?*?-us`z09zEu)KkI$vD z1%2piC6pyEE-L58)?E*{zc1^CN>5>wVK4$*jbv9laToVe7-tx1N8bq5Amdc?6|s$j z3EU@3HrL+ODr;{mwS2i!%$JJ!onm>NVdC7Wka|6DYEyj5h4@Ja5Alcus`=9H+6_i+ zyBvCU+1mErfvDSD8Y7r;@B~kzG1_ZvhU}F#uZ2t`dz&{?4aYX^AcJ9g3!3D{W#Mh3 z7-G#V^?Ey$U8PB+cXTVLi<dGS^w5o0aUtx1!6_;wf`Z455hjHthVg$G8&=BDK`Z$~ zKj@FZ$gTvEw5RA4!yWpPEV^iQ=w^k^G1`-}bEoM35<SyPYdX5^r`!Sb(Ruj%DfH7h z{3J1mA!5YC_Agj9QVcaSb3ZY%HGhJ!6Fm5e$FuXNcy@^%prjC(pn>#alrUqF#N>H$ hTOxxQ%n~|5(K*aVg+8au7#85to~GC$wU>=|{snRM`CI@1 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/TitledPopupMenu.java b/src/main/java/plugins/tprovoost/workspaceeditor/TitledPopupMenu.java new file mode 100644 index 0000000..cbee625 --- /dev/null +++ b/src/main/java/plugins/tprovoost/workspaceeditor/TitledPopupMenu.java @@ -0,0 +1,27 @@ +package plugins.tprovoost.workspaceeditor; + +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; + +import javax.swing.JPopupMenu; + +public class TitledPopupMenu extends JPopupMenu { + + /** + * + */ + private static final long serialVersionUID = -5086816009462968371L; + + public TitledPopupMenu(String name) { + super(name); + } + + @Override + protected void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + super.paintComponent(g2); + } + +} diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$1.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$1.class new file mode 100644 index 0000000000000000000000000000000000000000..d01c1b3ee4c6cba9531a32610b614a26853a4f02 GIT binary patch literal 1523 zcmbtU?M@R>5IwgoUAnAN3o4>i)K%LeEcFYqh%pT$m<l8iO!&9mUfYYyZnJw^;4%E= z$6J^v5`XvrK9q6pQbEOlDNS}eGdnY9X70K3{m0jD0Pf+bh8V+i({0s-7h19z_-)@0 zrM2Y;ufwM8a9$JA53HBJ^tni1jsnc0h6F=;!*1J_YkPHTsk*@(sUgWw6wZ!SZwbrs zH=Dl4J!vgCJF9$K&I|6=OeK{Y6vQhcl-%P1LsB+GXiic^l`cyvQIZ+q2|3F!lj}N5 zevKhf_G>%^hBF2<^y-MC-#`j!hImdn^jCz(7h9WE9<16`mosE4zGJ&<b|94AF(y<~ z45e<1F^kkxpF9{>jls-Sj-PI6J-?=72*VmKF-&ziOaqs3g`wAW93F<|G=q1Fk^V>j z2ke*^uH->UM;4<Rt`eJ0ZsD(B1J`h!L927AzAy~t@|8oTuE;=mbwU_|Y2YSqF{C<u z7KwmMr)gB7Y+K<L0a(wMZI8QzlS4s6o;Y&!tAR1as#L%?{WgE*x~i&i0~4@*tE$Mb z*nL$;TUQiLhJGt>h`FOD5sGNgwp~%PC3&-T3Vjuwks|$(sWRv*QDQnrav%QZ_Lxv% zbc^OZ$Mr*+)e9~ge$Bw+=!yj`kHJ{*Xfc#sI}CZK;R!?bc;Ztz>a_n{EEuI*9H*xT zES*-DnU-ISo)mPl_K|d-bY;;CW1nFZzToV~$mblrljH-uL5AK&B<mQ!AZZNeaiNnT zp!fvYvV~7D_Hc0*Ba8duja}SU()b?k9A?c#-fs#09c6is5qyXc3j0|)2$T<#C`PDR q+@+Nrqlf{j_W^Yj$3sGlVG57vKS8XSMv0^h*?KU8*`(TE(eEdZv$Z7v literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$10.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$10.class new file mode 100644 index 0000000000000000000000000000000000000000..18d6d736dc2fed590588759c5b56a348fb1c68df GIT binary patch literal 968 zcmbVLU2hUW6g?M^g>`KawQBvUEh^BaTce3l8ea%T6RIXPZPK@48DZ)&Lw1MikMhL_ zHSxh8;EyuiS@46XFKjY9_ukxd?#J2v_WjFO0Qa!vAxC&Ljwb`9)6k9+b7D+t!?z}R zla56sWnWp7goi)<PUgSN0JXb29twoYu{aT7Ec76J(L0ur^-v_NWKm_pCn}a&j3nPy zCWN9Ls<gI4c-URAaEnQHl~(pKVYj|8OXGl0Xq&z)gK#E*hmwyxmIIVgA>`{WVY#cc zd_EcVWb#V%Vo9iWO(fz2ktpZSf(17ece7|Syh}Hgh$1<*gpGRl&-JyYUbf<Wn<zbK zHI7QS#Qkr-8^u0Wan-|>IVq-j0j}XXp(J%bJydo`xG<xhCu649tP^2rzA%A!tm@zO z3I4vBB$1PqVXOcALblxyyu*%;Vv};)d(sX~-@_fkg9XJ8&_I**ijC<1D*B(XSij(z z)-q|wB28tAHC8&$=M<<?af0)2kmFN^&(YIt-DlrL{O0CI1kKM_`jF+E<#&;DkZYsL zcHnGAox^#)xjt5A3?0VjIp%FuFMh)1_iX0y8~!wduT4{Ca8AaJtT|`h#Ck@tks)ii R#diU>QO71*u2EN-pC9DT`)dFI literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$11.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$11.class new file mode 100644 index 0000000000000000000000000000000000000000..26258c8617a6f3172797623bbc842409d37ecf96 GIT binary patch literal 1552 zcmbtUT~8B16g{)8U0N0>l@A3`)Pik6mI{hc6tQB0DM(U-@kyuK30>Uoklm#aAN)@y zfW!ymvp>psXIly+@=`b1ote9L?zwZ%x%2zakDmbMu&P62SlV;;cWl=;gFR0+r1S&x zKzg73J#Gn6wFBvy@6Xn2;d(3Fkk03IL>ZF1yunR}yF2FF%C4{i9WjQ{(8>=2Q#6Dd znCpS4mux=}uJ9OQLCyBlvkZ%+4$%t?gAMMatxB;*Ig56R48tXbeQ5dzHs$oDDC-sZ zQXbNd*s|@~!E=UkreoYIf@ilGqD5I1aWM25(9xx4{RZMlBoM)M1Kk*4h-8#&U&(gG z=6<~*ym!3f2!>QiTHM*@o~_m`V^r0NVY$<6i6c68(x&2<10INCjc5{8hOta|4)ZcW zYl^Bub~}MvxUFN1YW&Yq8n}aTI>e3$%EBSaMOE?3Fp$YM<6e+MLC3vIDk%pZ5tBd~ zlR73C7CMxGfd|Mi#JOb&-%sZsF>L-PuT2>@6AbH+M$W(#rWv|gF!KywJ4eZO%;W~Q z-7W44r;xx5W_6ehs~uJ@-413T52~B4n6$r;42RAbRLXc|*M;lb(hV`^4LrsZa`w-h zhcBq;+*j#4t|S+BKEue>Qe#Mz<-TW$*S6|`k#-kfyl7^W21#veuH{Idq_ZJ{nyeal z25RLVNAhZWA1St#Q>ef;lMKeXOIJ_P;l3}ZrQ+=pV4V6iLhm(b$)svrAemBaOP8cZ zZ#NA3+e5QOT1RN?%S|1lH#dEZWbQjs-$KVh`o_o++6N5LTx}v(4C4lk3^y^-3R9sl zD)40Ph@u=Jd4kbjxO<BG%5aKoYdFEf6U?1Q?^WR1NAzo-Fro1fWvCgcg+ej0fTx5L dp=4G1ODND7rDj{k3e8evQ+cUphO953{RN#*y&nJo literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$1.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$1.class new file mode 100644 index 0000000000000000000000000000000000000000..617bd7f0952057b9dea682f32a8e6303fa632db3 GIT binary patch literal 4730 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 bOyGZ`>L)n*JHO)`{e#~G_tl@mJOBO%B7TxG literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$2.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$2.class new file mode 100644 index 0000000000000000000000000000000000000000..2f235a0d371fc5ef453855599eff712f18934dcc GIT binary patch literal 4303 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 U`T^T{O3$+G;=KA(6y)Fk0E+Gs@Bjb+ literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$3.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$3.class new file mode 100644 index 0000000000000000000000000000000000000000..61dee7834265a88d7ab403ce455f59af6d2fa326 GIT binary patch literal 4303 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 IMM3`k4=2b59{>OV literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$4.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12$4.class new file mode 100644 index 0000000000000000000000000000000000000000..99417a66f90ead21161a429763fb944dd4b833d9 GIT binary patch literal 2824 zcmbtWU2_vv7=8|0yCEzz#?lHDy427nr8JZlL4w5+iWbsRZ7tfWc)B@Bmu~ii-A!Zg zgFBtkU%-tw{sLwscD!)B^1{F5jN^MYNz)H-Iwdok^PaQsdC&Xtoaf!Y|NZ?B0ONR~ z;}FC3vQsJAuAdIdp4^bq57JfXt@~we36Zx0>80<t=F{PPKHQKPyOfyF(ZLXV$TxV} z;chW~Z}p+D0v(+Ur^8iV4boymxIuc#3T)}-Y(EgL@EAISHQP^&kpsDddyrv>Y;Y$L zaDSa4nX|20+xxcPiA8#UOB8I^R!+2bt#UWdaAlvn5;sYGhmp?f%HSl!&&gMbVV~z` z_Nlkq&(sn_M^@&=VKBUIKu1JLZx}d?sFIEwI07RI4ZQ}A;!OrEsWx@xY*)-xN~^+K z<g1Qgi07omoh9zsYTjJzP=#cee1#MwCa5G`JVeO6@Cwo^393wgGWS9dO)EfUQcF>o z7|?N+;o89=WZ*3%2u9qpgzqOVGE`rwnyG{4Arr+Qk~)S6k_QaOKnla{SjHI^4;)J- z^)kGXqazsAae<-tB^S;>8k9-BD1td&BII-@Q;k}NG_eqPwp+|ZaEY+y*Ze3Z@V1W2 zJGi8wWZ(*}G90y}OT-aOKdNwt&~~Z`jnG_nje85?QAN0x$fTAdxJE$Fa@UoCxhl-O za6};T5nN~R7T1KS?!9lyf~k;eZn2$d?cOqKDs|~PHM1;z-zLzT4V0R+F`##zC`lq9 zWvp2<v*5{6c!W9Nit4~<6q9&Q#|?%)m91jMPUmgz$YOey0LP2sRyZ>-g_{gfe@#{! zD-1*1qiiN^ZyHle5!|8_DSm1MOB@%$ZHD0~Pnb1XG5tzYsB$+j1KG?;BLONMH=_6e zcXZ6`^)f5ng6)-BUfxBH3QOfsi~DwQIf^;V>$t}-_!7+QB54C3;v>pOm|>w}qieoj zhTp@1bp8ky4SWp6hCbgQOcKk{@*qAj@Tp?GE>Ad;=eN3@+OlHcGki{0ijb_D2tlv6 z1?5U$JLxIU<2BXQ=vF)c*YPD$YsgwVUmIA3MQ4&7V%+4+_Uq8-nq*)O!a$*Qo{E{S z#sjPwu<=m&Z9i`KJrjikR|gd!rP5jUL_v58|9-pcg=9V7eq%tQOeF4$U@OLHx54Z^ zFF@L|Y66T7?E60&Cg3du+*+UI<z_>OF35^!iQBen87JFEZTol_RT-j;PrH^Qed2;y z5v<9)fv-?wFiNuGi>zZ?>#7Z$+0zDQ)%#W#ApIGaJ}I&e_kBSHI<~Xh>-d)8^8P@# z3pZp-6`|eqso_u!>3I!WET&p15R0ou8jjRP>C5U6Jx6hjw7N)|q<II8-NWafBQ`wp z9P!}`&uRJ_dY*;aC+NSEw4wFmB*})7(T!8+qmjO(aHe64#mJVj{?qWUh;5>O6X)tU zA0Mk@{3(va--%~7@$R#DHa@+H_n)FbYH@nH>zKX2eak{?R!2(;O)dY0v)lESwK~4| z6LWRs>nL{oLSAn_Slh(93PFPk;SS;?p2Kl%2)$YoCur=`QaG)hN53|Lvot1X9MVQH zuB9=hUBq2&3@h3t)U*kFuU*CuH2$bv4b#xm2(_683L1~#Q6hXgONVy)AFRaa=zyk& kP{9U`9aNtx9+Nac@*LgYuW7?KBz;GtN$cvTvP-}J00Rv<G5`Po literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$12.class new file mode 100644 index 0000000000000000000000000000000000000000..77734e5ddd08972ea2a7f292b608f8ff1e1dcd3c GIT binary patch literal 5053 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 J!g|_Y{|9V+`JMm( literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$13.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$13.class new file mode 100644 index 0000000000000000000000000000000000000000..cb4acd15a3298732e92d360754df85b466064bc0 GIT binary patch literal 1559 zcmbVM(M}UV6g|_eU0T+*qM(8z;;L;y7DOZnF+r%tq!=Ou^>Nsau(HfHJKLf!{*#G~ z#s@#Zk22m_)>aZAX8X{&GxyAynS1WpU%!9+1Tc?96B&jlEx*0zN##VXFz5t<ikzb$ zJWws}3eohUAavgRo!8^}X1u|kn>UeV82i9G+~G%&BRWDx&PLEyVztRzkq8-b(Y~kb zS%#%X%5#<(20Glgce!jbEH*s%Q~!eftJ&LJ9juG@p7bIwkoGfz_oqaXThXbf462g) zDk%@I?l5H6f~LrW;i82L$mytL!NfoT1}<61V~D}1XlSY7N%5+ExGTbKzUvEyp+?|x ze}{*jo+pc0U0Q~fw67rnsVvr^)~hZ_EkX4iuQX26v#zCGuI>~tiW?@zNQjhjTDXaE zl9aoyP|AM9@HxF6)zoj_;GW#%QuxbxOkmQ)ZHCp9PqKSt7VcnxVbE=dAr(ybAVVRp zaBL28%Q@wxjmKhq^dhZAVJm2du6XY078pI%gfm(!>X^E8{XltgZ$m`;LDRw%rm5BZ zfH!;l7={yZeJ=N$ttccsX-YltQc4l7`CKWXOgIep{?BD5<`}M?fn_M3^rQ(=d*KZ9 z`TixYlZIx<_o_|;l6B~lmMNFDw}A4Hb{4JZ)jSH6AEamrnRumCo9e=<O?OeOeM9++ z-ipigpCcfQ2Ch(S=@=ypV}wR}CaxtkF9@B{x!PA)-*KIWVi&jiGzFbDUZZGi#Z)85 z@PtZ}+PF((ROcS)dO~U?r0f*Nw-_|u{ljSW7_EfSz<s({1{G9k%#vGcctFu4#WR@2 ULppPwqJ{W$O3-hDP>+%M1N2n2ZU6uP literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$2.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$2.class new file mode 100644 index 0000000000000000000000000000000000000000..0d5db33f694991d04f7e9bac1f0b6a51fbd78162 GIT binary patch literal 1134 zcmbVL(M}UV6g@*LTb9+<s#FnV)hca47EohMiN+u#Bt?lBNO*GC4rO3F)9g+`KE=P# zL;-#91N<oCouv{Uj1S#pXYReZ_sp4d@BI4x<0pW}c<Nw);dv+Owxmh|(~0$g)`<xY zb-bT+cql|u8XX6lfBmJ@UrP(h^A55Mg*|@2gNUnE@OFDogvP-j!+09yhb9mQLYd%I zXrxvRnHZr&%rIznWm2A{(;IyrUnh_Ssib+quu$n6rMkh8UDQo61cu8V9OPVNkoPcz z0z;-^6Y>qI#G7t=Tg31Ab|e^z4IT1mgU8bPy<pZ}ilN>wnesecD$i4?)<nFc<F;rr zOjH{GRCCEHTd!`oxQS5*w-}!FsilY8_Okg{M4C6xyPd;0!|*$i7#<scB|OSuf?<vf zUnYJ_OV#p?_T#gJX}_ucBi;26xiU5$YGtJAikB|#;=Y4>3}Z4p3R+zmG$oI8D_GQO zN5<{fspp}L2Mi9?*&xGY@8aojt(%z6tDi}6F;d-fF^Q^!3WI0y+gz%ENP4JYin=R4 zN<&*^tGdO&sCi@m)03uP-SBXKm3Mk=b=P$_4#l#xjUPQ%=i*zKu?->tmsA+(gm|tB zv#XmPJu*8)aaR$y6-A@J81W<#349v24E>kD3I#iL^dbl7AA(EKVX~f(ZzFDP>KnY; z39fuebFR`lNIAe~6lwKR+r>3pCy(I<MtTSzdI+W3S9r%L6~~HqPT_w-E_;fHn-(qu z3s*#z)?=b^LjEZMd{3cAQUawOG*H4c9ufFVTFFMJJRoxbvzVhjOM^I1yooa<S%&oe E0pSoWvj6}9 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$3.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$3.class new file mode 100644 index 0000000000000000000000000000000000000000..69456d1fd626693cb28b6f4752243ad9fb76d0ab GIT binary patch literal 2214 zcmbtVZBrXn6n-v=YzRxCv9*dV-D;$~Z<W@*1X0S1rY3+Uf}&M#c5lL#&E2@Wf$~%Q z1%B>~QuISVX_;w#8~=v?!09-iy9p2~I2}x8@7}jP_nhZE=edvm{^0?Daja@+W4K;( z>lH@^W?1vRb<YbzbHnr3f*QAku$|EJ&E?(kY&2esK1h#ih%@xu;p^OVxvZEAr8~k3 zHMBFFi)Q&oXo__qLvzXs9Z%+*AQV#g4DI2n6QnQE>A7PbpCKa?j&#CFhKYe=TNzwp zh);XA=m0~P4h@MUV(8Y<fgXm~fZEWVbEKHBS4+Y#@{%hUQaR7!?h^MMHEvGERZt9> z<2sWbr=Yrd1l6MO%bs5qHpBUW+@WaBDr7T*OG&(lUJWlXTs<b1I$p+Eh6J}P5d`UR zhT{J~H0M~G`xM$IPbP^z7#hwqoH=5Pjth8&L92*xo>vLyQv-vI;3I++Lf?^<Oaf`j zOt2Xw(T@QQ7Z0$ou}Q}uhKM5Kt2%cnDW{ttwh%QlxRSsKLuX-=XjwJNjw=!vW0)#Z z9;2ZVta^3VHl!CCC1F%O+bKK39y79`L0f2bLmE6VxHQCFUah&p@T9vrmc%8zq2YCg zvntX`-7#&4yI#f26TrM8W}=Z!MR=JZsq8dn7%sLt+6?&L5U8xbiEA3JGU)1vDtDxr zwKjEJ#|^@R5X{q5R)$0*s$_;ff^yfHX!n8jOeZEVso^b#-lKQvcpLA~iB0Qsew3u% z!z@Q@l&YHy#;o$f2v>z6=>x+nH~M13C~;}uFcO%d;=4(GW7-#7NktNKcu&K-#1%#U zyJoOKsW)#e)YR%CmqJGtx2Rqecv)Gihr0;oTk2)ntJXZJ>ZAq3hEBE4G;z)zLN-O( zoQ^!^iI?2Am6r^+pDjyAl|s76gS8n^R{BNZq?OVAVN@uKIzGUMBu)Wer|gjst*AmT z>i9?rQ@1Z%kK237Of+r?N2IsJyZ_P*0((#58+Ddyfu{)u>47f-LNB1>y9yz<*7Cg8 zl)7ZWtNWIiqmm)Q?0M08Ka8ook)yNHa=n0(mlxrxXY2Sf5>~%1iAY&V*TJ;QgFplt zEQWqXzCGvm#p5Z&7)~67P(zvF%Cmj^6x?L%ApS7uE{M_d99U0}x)SKRY@??GNt*4X z-enrAndH#$chHCK<HWsa&q-?AX%FxKDQfkopTzSxMI(|SywJ4pC*t%6ibLN*-^Q6O zoXd}-UfsfLU!yBEoEqJR`3<gZ<I4A-Yaun2nr`35?EL5s;`f^0jErvK{pCFa3sH9q z1?5W&%9lxWQ~M+N{1bWbkWSwr5<Min-yvQ<BK>@fVS1bRnY8E^itATQ;Wy;)I|}$C zieaeXXEO%!7)w}=qR8T7d_p*wNMnV1F?>p=okZ*j`ZV-E!D(v$qJv`ij27B(8=uoV ZPA+@_PQ6}QDbc!3<^=UB^j6@}?;l3Zd5-`9 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$4$1.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$4$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f65cae498a3d113c1b99028d1295bcd1690fcbc4 GIT binary patch literal 994 zcmbtTUuzRV5dUrN%$f8wXKJg~*4BE~B#KASml739ji97jsHEWA=CY<+ueafLllZj+ ztKfqlz^~(zK8UktM3CS^T-cqN-I?F~-7h~reFkt34G#r|)-V|jWU3=G%+y#ZZK8?F z-smBZh3HG8vgq))+|K3w+#tLkHa)lu!7(56DB<ZKdeJ);vGGu3Sj%tu#6)5&QWNdO zMyj+UwGpYv7>edd>aa=vJ97unV(`X13H!-_VX0$1zK!%mQY6nFOP;6!X%rvGRGLQ& z2etq3G!wkuWpH;@UzEU5@!{dD<u3Rrp<IT8MIQ^e$l%nhYNaDn@qBdB6WL4NO9Vr; zqhg+Pc_ytqy>xA57#_|aZP=u|D?G3GzQ|sy>_qe#)@ykd(cevJ+Xl7j-7;2j&BGeQ z;*3)ISjPrKSqsyZTITV)wO2MVMyag+3!BUi)F_L^6KT_4nK@8*ty7A-oyLjM)Wkhu zj#S^nEr#v6XT--9tT6abQyRP7gljD{HmFMu?K3C@fo&TQRBhAfUleFBz^B)9#BG!8 z5Un(BpW=Mu&MAV%M^xYCic54BNfG#pWjd`9sp1kY6J^%(6lRBDEO4pu9)a@#SN{N% u^M`K~!}lCy`Iq7pgiLT9n*`(F1_2Zh;wDiSTd1K<T$S#&h}vb{)A|WBn*;;^ literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$4.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$4.class new file mode 100644 index 0000000000000000000000000000000000000000..835a694ad30cc0d121b2beb9d5941ebd50b6af5c GIT binary patch literal 3535 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 KV#&`+^z(nIqy91g literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$5.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$5.class new file mode 100644 index 0000000000000000000000000000000000000000..ead353dfd78c1a1164a126c1200469f9831a1253 GIT binary patch literal 1804 zcmbtUQBxCF6#fp0Y*<!^DIyZlwZ@u2%L+=Z4XskZ78;Ni#3|F4%jObRH+$3F4H<rl zzo5^~RGaBTUpvzu<@DUmqPAkElV)af?>T$+-t&FuJLk_=zx@v279JTGAlz;F?S>ab zPTUIBky26YbX52>Y6(}$x)-a^d3<88CiYhHL21E2mXLoUj)dcjpy52+e<I!3z#w5N z@rq9D$RioV&XOB@DyVr;ECU%52IE67D&6GUYkgi{<wF*|z>B{mESCE|rLs%NE~~m6 z0^zI$1342Jj9M5%o{%Z)fYF*4$jx?hUxqtk-<O0!O}WC~6``l?)S1<w2-SX*DJ?Ll zQISx!CBp+1Hf5b~rCd9e%~j28wX$ns0+R+V67KZLrG+9c5pu$HWfYZe5qACuqczVx zej}kb;;EXr4BNmJ!iD#QSh$K02}VQ4o1)1)kCiJu@QJ{-<IoEl)f`G(ndmq&@e#@f zZv0J!y&ww}OtVDfPi^6IQO>6%z9rOZWiN-12_q}gms*~-3_}&>FiR-za4BssmQC9g zL7-xLU)psYC+j9|V&1?U;gW{YXnRiG6TWIV8_b?)$d$yhxWjG}%;->cdLF`!x3fsm zyo;~0o5QDEj+4A{_>A!5QYh_X)wZK{y6K1@wqup1Woz--uRHgi{R78#Jm0s|?6pvJ zcsr=8Ua)G(P-x(@CO*fa0hZrCAuX%mzzdrvkiG!7o8k7H{~6DouKaxqOS-suE^g92 z4?JH6TxAo>ST(RhIH&nMV7H^+J&HZw!UKHGW$aN;7(a!;y$YW{fi(;3_?9q~s(5am zu-U(iPb&*yxYwP@P-C+Gtuc9=Y{$ZVx*=NWd@#3FJ9MSSMwmQxsLtw6=OM5fxW0;5 z>>DyZRCNp6$utVv0l``ec!n<fB8p@Lo99-BpEIC*UXL#x?F0M_!DR0+?{2fLJ?8Yx z3s}>?V&r)ebB_N9IR-R>0`D!o=dV7%7_Zzi7*9`lk)E(V{R^xvF8qP)^K|<XQ-y0U zas3(27G?^cbm9Dr>xG5Foi6S^L-BRgy-XKhJ=SL7S{L8w3^LFe%=5jVF_?57!!(X5 zn&9@n$W1+o3KcQK>nyKxG==+g8Ea%G*^Vce*3)dkwXb1=^WEe#&mc2gyvi3mWMcqZ T_>R{sYvg<E@J<t>q4Mu9Wv=#l literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$6.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$6.class new file mode 100644 index 0000000000000000000000000000000000000000..68db5f0d331b70e287cac5a2660bca911726cd22 GIT binary patch literal 5616 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 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$7.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$7.class new file mode 100644 index 0000000000000000000000000000000000000000..c974977686519dd0ceb9f4aef9302ab412695501 GIT binary patch literal 1494 zcmbtUT~8B16g^W4OP9qW2x>tAty+q*sA$C^Nd-(Wg)~v?tHXAL)n&JtnFW3E@A#+~ zLF0ozz#nD2vs5vJr)3^??wyZ2_nbZV{`&pnCxE+Hw2)z#ZwK+FA1YV3WwaATO1ry} ze5=~r6QbqoNV+fo`YVawNG=pB7P1V5H++Y`bJeaNZo0J%r6u=t&C`AqG7KmoeI7K0 zROG){U1nfU8Tyx^P-!0OCJ$oKP05(S7<%-UuZpvjR6S)@RSL4;hrV89SSY2AGSy_r zE=4Vo1EFwWqt8Yc1|2vUV(2QF1NpiiiuHJVL&)cRBM=OO^~fW*oIsP`S<D(x4Ar#B z6e|QOPplG!4Iy7ga$B?*#!GcWy~}sCD|SSv-9y$_j9r~-+8D(p3u6qGlw3NvjB$ou z?s-C~;vB<=Q!ttu{u=kg1`kD0&0!K(EnH!!rG!-c7tBEs*BEjES304LVe~kmYf-Gk zA)kiL8xBgCIwFL0+Bgj%$?uD`AGkFs`TM%Bbk)W*Zdtg=Fm%GUgBc^gZZ8mA+Qi1J zgWG1slA=vCX{s-h;n;B?|0{#Reip^j6Hk02*}{p%J!2jx)vbhH5Gg9{HKDhnmV*b0 z{AEnV?W~5OkV{0M5~T0kKWZ&3Fs!HjLye@nEDPmHzfIleajdoJB_k(qV1g>Ni`qv9 z1$3i_JS*{f2L?>pCN`*S`)TJ4d2@6!L$h6;-bcRt4QKa~Gw0}QZi9WqFxif=DZ&WO z)68%I7dsJNbs|iZzasw~1-6fldHn$8&f)>wqqu{}QixCJW1lh1_Nc19ByWr)nM`!v p0Aaa9ec9ldqc=0Shx;^VNqZH{lU1M{la(2hwEB?FRB3*M%pYwbtlt0t literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$8.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$8.class new file mode 100644 index 0000000000000000000000000000000000000000..2e7f99f0558ba4a534117d46a649eeb8f8603799 GIT binary patch literal 2316 zcmbtVU31%15Ixs+qFBgn66(-6rIcd8NvPG*Kx`5UiQ__wow#-D(gF{+@*P)1l{Au^ zkQZin;7{-`m}$~Znc)Y(6JIZUz5p-4UtriP%O5T2ixW?*)zxax+1<12ul{}TC4lqz zKtYV5=vwWTY5RKMdd{}v_<_FTcw4^94I!Fl;CTA=?tMADuZ1sU3knhpGavG8uJfHh z7u&)P^s3YL#Y&UAf$$hcgWIN`JxeH+Az_v%$g*jh!3Bop+|W^G8w`n((-cWCJfUF( zqblM^X;5&4A)b>CM=Pc+HrjV?3GXVuWeJAKieqrA!97#nM~4ZS6vNW6WU>WHO1mQq zRr7@JizdU#T;-rbmSs(sW*aJ|a9qJt#K<&u^>$!ddid-bSsJF1VMv*N$*}{^vDTa& z`=F5Pw%ZP(kT+GFz)1y9Gb|3-8V%3j6vG%d49Y@wxps&Kb@C50Tk$-;TQU7$NyTYo z6+FlAWLTbuA8UACHgCkR1ovb<FKWnPwohq+;p4+l8nQ6iDmU#Kw}llZFfT>+62o-V z<1mSmV_CuoOvk47CXvTk1v<mZp&>P#!^;HbdScrojaj>OA(2G0)){n$^kZthfL9f~ zLhn9SiW(MCpk}m0ASXl8-?Zz7Cj<#@GB?{7am_JFxiYcWG%R76L3QQPs-R`VF#f0~ z1EYDH=^qcQla6Fb;q`zUTUG8xgP00u=nAFBX^14&s)mxp8Vj+?c2lLpvWAONCyFOr zYD~}_zLI4cTY_9pU|qu{yu*-;w0w@lym=Vq$O?X>`#YxH(l2$TP(@k61{Lc6PrIDf zJl<+aPI+9`u!&<-x4P5z3~|wv3n_EpF3!t<w7<%>VL3iwRz+~zX=-TTI;}g);RDT& zRA_OcRu4S#CIu4yx@`-uWN}(ZwB3?D4J&w$VPjZbc0{)(e8V$c`Y~B;2Z2KZm^%0Y zPSJjj)6WwdAD2s-tP%QGFh=J|vKA1d51`J?@6p#iXrI$v3`gmElzhOx#yHuUw4q`G zlXNA?;#d^nQzXI&h57qPe}>fDU8wglvyW#x)(c<Y^o{879_IFNCOV(r$N4=JC0;zl zo08nvH&EEOm|)-0=J_6r?1vD4s)G^X0|mT}3&h}!@NG6h=9@iApOCXmsu&^N#hE@G z)@MLw*M-cL$a^1a{TgIs&Df7fv7d09{Y<O#7v$NmG_}7C@GACr6(e2@Z}sS0CUTNa zI;ujC%iH^?^r4Q(MzP<avOh?te-4CC_rj-p;YrI;0~%4bnTP7y&4#L6dlcg@8sEP$ u&Hfp{$n-EW5k?$Wh;$5fT%~J*#`+rGB`ZTbr5NO2o=$I&&rQ0%kJx|VByn2+ literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$9.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$9.class new file mode 100644 index 0000000000000000000000000000000000000000..1f778d193d9a492a4d64ae9646f6fa1c39647048 GIT binary patch literal 1433 zcmbtUZBG+H5PtSrI9gAsEuuhqQLC1soG6O5Xo84|ra}`8eluCFD=Z$j&EB@?&oWUY ze((qQql~lHs=*LGluPz@c6N8>nVDzy=dbTS0NlqD7Y;+U6}ER|6#J&7RY$4V_y<aV zh+8}mqA88i{@Xw6wPf8$E|jV+(hRvh-r;`8qaA-^drt($#UR6EqU8t17ab89e<d(d zMRge)5edyOXm({>x=Y^ceY&rak!2Z4^ORw^+_#n4Er#@}YKjaP&U<h%ltl`|9x})= zq{{Zda9u`Xy}iFJ^c%h%3Wj`L1w7p1TH19_nYKYO)cOTes!~wHJV{kU==VzRizdT# zxqf0c*KB5Mvs+nQ!MKYthNV7p>0tszh9MpVB2LQEI73FeXxm1H{)*Q8ldXC!iz&>w zm}V#>!5rWAaMfmeAP5E5HlFJqO1Qz0=|Nf`s%)GU(?>r(ki^qh4IYV*Al<^Oi!xQy zLOQ<dp<)qbwAfc2u@Z(uxXl2IZQg?q!t)o~0>gU$*t+RT8fepK!bc@#U_`RwX?17F zZmPBp#0zN&Ieub~&fCC<Q)^KWs+erQ7G_s9JuKl7!?{rLX1AG%wwHP|`yYw-GNP7U z4S5`k*acB^y-%8zy1t%^IMA|156iQ*F)CshJ$VB&)RQS117NwFZB2T%92yy_1HmV0 zk=9m|t;~IeSNVnupOZ5e=|4zk;1rN2*|Rd;Dqw_W3KpY13-5XsrYc|H9pUmJCcDzL zL)^4de(nf&{#nf<O;*Q{b;dE`OkmO}CLTr;98*0HAi6K$9{EVoLu*kl;sMQR;?F}= QNy?MXVzS?3(k{dK4K2TzKL7v# literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$MainPanel.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$MainPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..00ab3f73b10cc9f6dd89a9cd5c749138ed781820 GIT binary patch literal 8338 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 NxsE=MvQ44l{{aDY%vb;b literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PDBMouseAdapter.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PDBMouseAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..568931a0307f2e59ac0d1fed7b9d6b43b1d2be24 GIT binary patch literal 3884 zcmb_eOK==l6+Le>&m)aG8riXo^$i5Y*3TIdTQat6#roM6=oiV69f=UPX4<2+#yykn z9$7NM1Y$@?>;#+-*a1R;Q>tPIWsL(=0mULzQRNLQiVfMZfCUQ{sWL>I*WL56QL<1_ zm1f@e-gD1A_rCe#hrjv_fW5dLK}g_OHl0hEmJ@fgc4jG)aoqU%jJ@b&^@L$0O*do5 zPZs9G-h9%#&^kFZFqX+VMt@Szx`rJ=SfKH&zNE+X^KRT&GAuV<en6lio17Pz9Nn}> z&+(AqBy2NFU;{bV%~-txTigZHY5knQfz8@hMh=;l>Gla+Zrik#&0cKvIsKo|+Ghm9 zgPEjJ1%dlCL{J$;1!5YiP)kDF+Go_xHVqP61Y)D6WsK*}%^UU!eLih)XEc-0(=)nl zs(G*&R&)uBY##01sV8~bIVFWj+i)BsDbUh3x{(rwl_+}KXQF68Qv{6y<NseRXlO=@ zK(%AI(?;4zxC%_TZC1JbG#-rLGo-{!ti*G!nT~sKp5REsXVFT6O=mD;xppQ!lsRv0 z6vc>@&ACAovr+6qTLilW_HQx@4ejU<sMHe)64$y<;Ns@B*S_g=j_IZ~sar<6H-avK z`@Ph84E5W#zA|b$u8Q?x4RNr@3UE1`{3LKUaMK$_CmvPm-YZZah{!`Sm`SUAnyh!F z`EKlwphuv8lgzgkW7hC_9H6tTZ7i7-aeAeo9KR-6D0RM=?`DKhdvQ2|L%jQuTG!Br z$H-{Pa8)5H_!HK2!Zr-bYg=1;sY)g@CQCyF)~{gzg96d4S{g9eoCRv{Jt-hq-i@W@ zvWDvmlzN_a^~B<so(<~WFVZ1fPo<2cay6pi3(8fc=W5vU7DqLVVOXFltvkNfqdYpH z;TU!jl~?FvnI$8ss(4DnwCY3=+sINyE}eP@rdWMCTY(~JM#D**;tp9DOq+?t!Awq_ zWcM0THfA-<DH}CzCY4GX1^Sf~p3?ATJWcbaGkh-Vu6UPNc)idy%&VPh)0ti{&$y~$ z)s2|?Ff^P|9>b1#!B7he8cdw!Z9-r^+eQNB)4G+4Pt2dCvOMXr6PyF-uF#Wg9Cd*J z%TKk_dnd9Qo`Fr`Oul?NpCW-Bg=~5<841>VtKniPf*jLb(tBZ7!+9(dre!P>*7kyh za)0Xn1r1;ESXj`VaUN9&zN+D(B26Ypw5`hXISpSgFV9ERvF9~h!Z#IxR?=9WIP(!f zF%R9CQXemBIN{~lOfC=RY?}?6QXAph!i7;PqL3c0nv_GrKQpObc3)q^7GqcXYQT3i zd>2<KB~KF*O9puovrL*dA6_PVq&YgB$=M0xsHq;Th7EsgJgm5*gAvOz>_H0CF<6&X z#UduWdwz~EA%6Yd`=;_8V1D@nD8zrhnm}!>dRIA%aHk4UepYif!4v9StfO-cTE{Ka zbabs@>(99q!u|Z*hA=I3Ldp(Q$u88$J=o6m9iHhJ>Nrw=G0#niW<Q0Uf$`^gR{`kh zxQVUdJnB2&#RJ#S&Z+h;9{M#ppY(@&ZsCzN><iXA^EkMMBML)>hhYb8Lq3X1xfe0n zgWYmJy5)f~96d!GJs83;{U7yii*62C(nUZa4^VgD=_dBQhwXQ{J-$i`e0*f&i-lnx z<M-m}!+r8Gw8(z6%K_|@gJpQSi+H-r@Q{rbMf_wD&=JlQLzVQiHIK(jyhqi#JdTJQ zDYIKyv|Ab26-vo|conC}H&ZR%CxcJ?NG$nA3moV1rR!pjTc@vy>L4x>@CWn;6P1r! zNR$%6U4Ls&@Rdh0oXjKjJ2d36cv7YFIu72Q$2>CQtJt>Zm!NogaIC9>ndg*!?fUxP zi<X}CM_=O?Bmc(X(o|`Ku6ZrRjlQPlw{gSYEiBWll2cRj4aAz7Pxm!9B@gqzuc;@z zid})FIv!C-56XI}oV<goda15m3X8gM^N-j6vWn5bu3*rgI2wi#aIJ8@hrSZ%Jc4i^ zQl3gqkCcYTgJB-uT19;@VYXf<9Z_m5sKl>~U!aRBnV?D@XJt;IQJ%nqat3jE3P<FV zNXa=^@+n-APva`T-;z4skqO+CN!*qO{v=cQn_R#@<XQYvF5+J@jSr-S4`o)w<TGNY zv_*@w#BRAHI^>GzmKVe!`K*|e7sY9QoANo~$V=jad{Mk0UlOm&m&M!iviO<2BG%+9 z;<xfu@q2ky+?KD2Kg&17U*(&gnx|AN67Lt(%#mNUS6Jz)U4?KH4!(_-IJ%8lyv$Jr z?l9WR9EC-U{pJeKNikQvag=p5gV-IU*3pPC`&@)iXoOD-YS!7uLct3DgDD~Y&AShT zK0xI<UzLwJyyXs#)v>-_DO4FoiAmLLt;$At4X>7E#qXIls-?=e*sp%Te)U5yV!vP3 z79vJ%v3_6M*fP6;GF(9irLN#x{t5H_Q(C_9v6e%4ohU<i18?%Xftb1(>i4)J`2Brv JZ5OT~^j{BU;3WV6 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$1.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$1.class new file mode 100644 index 0000000000000000000000000000000000000000..28d3069e4cee62fd14d4bf1a349286bab6312d80 GIT binary patch literal 3356 zcmc&$TXz#x6#h<|bRZ10mQtZ|@e&~omjMwGT7=%vNLnJTMesVEoVL?WX5!2wZM`ds z_@F<)Kj4cmu4N<o;Nsa=pS&z}slP+~&LpKN6qhSzEwk3->~qdO`|QiN_u1e5_06{c zj^ZN?EdrxOr!-@`fe{vcuk3k2Xe@aCd{8tkDf4#d`NqYS`A9U+MF*1AVZaJ)&mG8{ z#ZdamBN}1?9dl;cG#t~NG0soTNh{RQCa^17H5WodmZcjS)stB}2&F51fwpkg4w6Tx zQMQRH^$Bb&n@-XWWg!sQmW{M1g|=f1_`bQM?k7)|;;|gtnwR+uSu<{4E((Z@K>KZ5 z0%x<fwY2J`RsSR>%wT?4PTQ`nypkL=-F)3t30|G@*0z4d`GmmdsixYzu92DMXx%$0 z5F7IHaw7z`>d>%3QQLHEL_$&b>evKbQ9E>O#+C$Hai5NM>=bBCspIWg+m&Ob!j$wU z%qd3-bY?xvbS6#TR`c3oOaVgRd^25>JVLj(n-OSp(x3MHg3Jr-NmX5TJ32=cQu}%* z6G&pOhKB{tH4&RS_8}#(!L%$H1j)k!SDTB2-o`@Smp~c^H0&2R))3Nl98}ScTaGmS z1Prh)(7LVb<erX4aFm(g%Ys)X61Jr>z13LM)ekCU;FylbaGV%2^Nd(`Dsv~B3Y38p zI!=ON-oTvqO%^c4T@xB5KJzeI@7sh^IIV#R*tx3O%C3$x7$DYNxfrrQtVpO=OT&=B za6>Lit}O-$3}QsbSv)DA&&Y7dF@s>tEYKrsZypbQ+nu39lE~<I8s}E=!_v9%|KKMA z%&3krrM^b>mF5ZLa6!W}0(<|Rhjff%g6A1u<s1R0mX(pqYlhbay|&UI$Zrb(O~_$V z$3;9xkFtW-bhx~Z4o$mp5SMj4j~4_s(P=r~_Ix{B5;#q;dH#%1ECsWScF|sxPGC$s zW`Q%$FpIX~+f!4XYg~wi5l0qSs8$5fmO;Fv<7K=;$w9s3GpYY1xOY;e%#;ob%t39| z4924DU|qkgAUUmL2D7V>WM*G$HY6J?z;wzS91ZgV#~T!(j3X>38n&qKuE?Qw9$wW@ z<okJ-Y|-H>r^f=b%-otosH3E+Y`ZTV&&=Oy(%7}IYV7={2aTw(O1@9XR1>YEHmj>T zop&ahz~=GLwB|?6V)R05cvGNf-L5WrHw6;oUdgxQSzEpFJ-0NhZzB(>^E6__wHz-X zyhmj?>*aO4hbt_F1+Nsyp=w_yu=|c@dQ|PNywc>)xa=h(GbCGwEo=KRF0AdyxUjYi z^Nq?y-R+vT7WcE6Y2_D3tfND9JU~aM>UW}%-A**J*I{4X!mk}2<i3a0Fz0cOJ?Z_+ z=u972Mpt^*GP=_{V$0Z`{t7)`L}zyKzl~=Q{~o(Z>xxDX_V8|yegF?vC5r9TL`nQ4 z{UtiD<Dm+ANp<n-uHewc6*`tDwY`Ez)j|c2k9~$y2fs$YzzqzJ9;jgWWQ<#s@Kkl6 zpzMxV1?QCrwX7!3lJQanFY+XV^y$qT)jfF~b_H&YQ&tctD_WtfIK=J`@gI<g|A_AR zPuLg#8U68JFc|+8m*T&{;k*?89arLi;N$q8k+o^Wltndb6;;Lp?d`{5EYhnjtY>K~ z;WhHTPR=g0++^Pn(;zgw!GN3sPVoM>xYvTW@eaor%h9`dpH!Ou$}zn@pu{w(s~nZQ P4>=~8NY}`tyv^U=63PXf literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$2.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$2.class new file mode 100644 index 0000000000000000000000000000000000000000..b5339ddd3074928a83ae7f3df4e19e0f7ce411c0 GIT binary patch literal 3356 zcmc&$S#ujj5dOy2dShi08^<<@$-yBKSxLN!LkNi-5?=uk*%q;}iMcXfjqSBpyJB}G z+uRTc;Q@XCe}ETWsKO%fK;@aA!V^aU1ym7wR&pdCp(vp$RJEF(nVz0LzV7Mo{`%%y z0H^Sgjs}L&oSmPy9N!3Xo?CETKQNYEZ^_RIQ_74LxSlb+J|79^>F_|TGz^%5<vIfy zkqe|3>(voqXk8QqVc5c%H^yfdr5WgGVmJ`4isitN1?dDv>14|C1L;VQp($9f{Mbp- zC{;(5`WTuE!j4&i%=!!+sZfi2VA;li=ZRHyKk>9H9@DnWC7DSQYtqTc6$X}MXxX&I za4BV(s}(O*{1clL{?f3Vvm8r#B{nFWOx08gu1x9HrhdiwB*W+Ny4t+0k;(dK-95z+ z8FDkS84P<kbnH-62S+oain^a;C%B^aaqPnGC>rqqM+^2dG{)8OmXzhlv3zz`dXr+- zmJDqv*A(`Y@GLbiFGds~7{=@AnpiKny+wqeO-pai^|CU<a424K*=BT(D5UmvPel>K zVI7Y$T&^QFIgTLCutS)p^!?Zgh8y+8L3eE-?~5XVV>*s9oURG!9LH6(HPe>Di^9N3 z9c0~}ZE}yJ7pEu_JehS1goKWGvbz+Es`^0+892@HIL;7;M1~^P8BcCyQ-LyYmg5{K z%sVLOJwXLbahHXLiBEYLuJ`T4d0fyz3D{OqZGD&HA_fTSj$8?-K&(rsR!hea!*ES5 zift?gQ4C^);}V`?;PWyVvW4%Di7a_!<INL+XF2oakQkC2&){+eKU6xG{~!E>fEnc& zQ|jxazS2C3G_L4)mf`Tf^AN`bCh0uIS2>5lE@x%v^0MJoK`*b=2=Yw<AQRG<;+V$s z<WZ{NWgTX=(V=cP4q}Gm1-!_xlbn|JEZ4JwRfY=$HrJasa(RD&qMfr=r0pAXw#d@V zHAK!bJZpB=b&M<FFk;Ir6{>XsWXm94=6D6yNU~oo`C|M(3GSX!DKpDqf^tw_5dK)0 z9aPt66eQ<3=CM$LBxUx^dPB0t0!&U>gso$V;Y^JplyL;h$(k+dyC-r;I~T9&$kF?G zk8I)al+z==C{S)KBH+lYD%;{o+ZCC+O&WDAR5kYh(}PB+F!P>AkSQfvYk5{xb=tNj z8pE!MK$uITA{V~UI^JaH+P13;-%W<-gq!zFdC5|5eAitKtJ}yPb)JkEaZKCw3ErbJ zSa35O@8LR?!mOM3<xr_FV>r0wnI2X9>#sENCmre~Lo+0`4!bw@W3;fbBcp|lWtiTm zblBZ)XlwBxH8YL$X^6D8s*VR}ZBzYDI8wJ0j@0W=U)?}o3tEZ$KB9(cuF=?)IJ$<m z#IZHBCl0KkGqEqShP{ce(Dg-l<^cUS(HUsp;~>#o(dfb<x*J44gojHK*<R8_N&F=7 zCE9M`ks`W@YNxNWh@R<nI&zJuy+u5x7K(Uc>@%D{{x$j;ZewutSP{eLBD6&ko-Pd} zD77zA#JCcnmeu4rV!T?!OLUTg^y!`3r9F8IRuN8_Qx@SXD;lA!=%MZp+7F0oKcZ9n z2}iV_(Xai2LG4#u)qaCb^St&uu4{kbW9`q-+5{rXqO!G$DqxxH?Z*kMkXIY1o+Yq~ z*NE?R;%rC59qJn*I+%_(C?My7vvmJkwAX;Q@eYj<Do5|)eWDWNuQa9C2P82;)D0Sy Rybo!NQ6k+W9_4NN{SD|Q2Ce`A literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$3.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$3.class new file mode 100644 index 0000000000000000000000000000000000000000..8a0839f72430fc0fb608f8afb04be866e8378738 GIT binary patch literal 2535 zcmb_e>r&fR5dMy#k}(PwhbA-uq7pY?(%=w>q^Z-S#E_O^11%Jq^m;5EY=NxfNHQK? zpwm}K-y$;&W%{EJkcaAYk7NQ2kjXH3Mn1c%)oL%_?&{5d|NILek1ZVuhH}GgRvj<M zg$-YBOBsZ@mh`uR2DgN;olyF@^?iOW;+LZbGVw8Eg^u)QY~BckpULa!Wa!)E+dSuT zubNw`YziyXp)m|cQr-%4Vq17&E`GA)1flSR&!B}hC&)~ZN2POgsX&GwI-V0gVptwO zSIgNohR&k2MHd(@7|@YSp#!}Jy3ohaF|HJPOO7WNoArwDS9!%14C#`zxVy%ENAYc8 zrwX27={z0G<SF=G9u;U=_#4u%3!CBEc<IDS%&DprvTG>};);%s7#7a44hF7bh#|=> zO9VkC&+x}NSL3XyE2J<2Q^z%i`)3ST1@|$->X{=dWJ`{<bI^DPEl1v6$0s^643|$) zF>nK840=_Bi@Z(<8yL^VC5~EfCG;JyT1X;Gm<)D;6mH^{j!%#DX{=;m5;?-MB|U1& zaPCEuyM)TCZNx<8iZ$-9h!;)aS)!1AuFx`N;0~yw`^CM@@cWrlanf8lJw2IK9&F8u z4b|Z^hcZvNXCJVXylIuZdkoX3B=6k@lK700wkTRje9q8c<en!(vm#7exFQsG5)T<h zmOOXIY{(#RsG-f46V}WM`C*QFqBT01!XtdC<1xdK@}b&va<;==S<RKH6L?k3Mx22e zJYh%$HQ9<K3}c5A->&2F%4XM+m}TgR2eRply4>b&5>FWlGrll)WYY|qZKB1!&<tg) zB}_GT%oz3NhA-=}KzaW-g|G3Aj``z$7p1r1`1O6i7f>Sf5oVO|y`7GbvuI!m%LmB0 z!@$oQIS0$Aok0bP?+mP9mC_w$OU#FYJpb^7bSs2k$C`n4{6OPA;M>$-G}=i#g69T) zRHMGv7p~;?+davU5ERPLy9O<_*-FT*tuk-4cR*@IHhoJxb<~!)^48elr8}vDq4&*s zmMa5l>#_)I(l%g$Cc9CW%|H}g$J$bZe&pDoFRT0ebDs3)J=(lQmj{6ebW|B`ykD0P z*pBuc366Fi!^IemN4^hW(x&X7>jSX9KD99ELnJ|07g8kcCh9KnN|Ktm`5MN=-{^T2 z>GadTMmo?ENE2-+nx49d0XnI6xYV}rrftEV_zT7!F7IJ@7o+L%T}-^ha4fvNi@WLj zB>5BF=?Ce;9=>>$E~e-9@YPG)YU{*Dc^BWVA2#*<KDUc!%C`<E-zJs!S`uSg3X@tl za@qw<X+6l(d5_KqS|1j)emv9Cu(W|FhD%YTb~^^Z#!vW}qWFdEbs~|=lkH!LPT)82 gNH&NH1W}`Oe}iyYBkgIT96ARHkehT*<%NF#1F*&S8UO$Q literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$4.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter$4.class new file mode 100644 index 0000000000000000000000000000000000000000..ec27fb5b63c8afee724a9020899cca30af863c54 GIT binary patch literal 2623 zcmc&${ZbQG6#reIyCJTE@dHG_Eu@-6CAMI##%eL3wI+Z-p{1WUyEn<oW^dfxkl_V7 zeFY!G8H-H+=mYej9M9c^kAQR>hM8t&bMHO(+_S%P&hOl_|GxYC9{`i6>gZx9*4;+M z@q%nv_vMC^L6~hye?6#kO9<NurJr5hS<go6h3G)CHB4KfBfV*x*F)har*!l%^uOR6 zJnM3=lASNT5LT!|V;G5~ycuT2hVa5{>tw+RLg5LYK?|!+ko=qw6;2RRjtt*-JSTj> zu#h@Y%jp${p1ib0FBnc6&=HHH8+`_P(a+GGQVM+q#}jjnT1oiJyyOaoL_u2IUE#i? z)@@;ra-L!SBmpL;$oW1VC1^qTW$D+1&2S}E_+TbxRaSE8l{f}5q~j99vlGmNfy)?X zh;hpjL6Dqe`16Fbaoo`5;uwXg;|jx_V>+yy`;=k%*dFE51;^UlE4;muBXr~VOh=Mo z;0P51S8<I&uZVDt*N9=~Q|VTUqY_*SeaEZhVn`DwgUuk0>$s`oMn|2tlnhKDOI)_3 zM@1RVzHD%pSb4e4n8;kd%KatrvLQT6<kD*~P{p3jbI+5ZSrVo#ToDR82FkF%Toq=C zdv;*TvZ)wu?p`gXb@0f9snn(CZklx&1P&F4*&?q=2SeKPMNMvSR~c(3$}Ib`7QMn8 z^F(uOB97a*qvK14VHK@P!^zqXcV#78B--(cn2A;fzQSFGcu<wimW1KjelOcWI~>OJ zN(@w1ryr49EobTai{WdA%(O4eP1!JmMtjoaUTB809g|i7R5%{S@etEGzB!CCFTJwk z*LF}oLY@*!=}^LthPb9mc-FvUJlU%_N>lUL{QS^me>7*4%RE@05oLAlQgn#IgLrD- zJ3QNibBp1R{|8P|rLF^A5%W6c7_J^sU<dp$uz=@8o`{Y@S!1}DI;wyV96tE=G$m^s zO9qzlJ++g7Z%_eK>mczcRt@~1T1lTTT*>X-KFq*KYxuwJaiZu_$gTAvueV!Fd`UKZ zOFVW|6B^pJwZErNsK!9AoAoSL26Sr_MOc-#f!{%5qb3`H$h(fUuKLL6p*~Vn`#Wuf z^q+dv*z+zA0ztRPnNC*dAQ-nlF5(A*Mz%V0$Z&2U`Y7r68i7fDxtpF(!20`Dd#2Bx zE_!+qC+R7gP0?CO;+gAz!N|PDnb(odS^C#V2ig!4G&j_oPMyPf8W}F&V%x%-wuQya z8yMRd*v7~f#uBM5WM1J^;#T5|ZA`sR+)Lcw#)DV5*;1Qn4c~5|u)6=?;?8OdD+)<B z6p{?R8JdX;+8743aa^KtSW99=ql;fl;jWg(6D@=1+KmY9#mJ|{Hd<g2KVpsW{zSHV s&^0nic7LXM7k<I7k!%pZp+vJW+Ak6xEz-7WR;F=~h*+UL6#@Fa2XvkuY5)KL literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginActionAdapter.class new file mode 100644 index 0000000000000000000000000000000000000000..7e2a3987d56bce0e1bb7655bb7b446262d3a0566 GIT binary patch literal 6194 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 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginDescriptorButton.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$PluginDescriptorButton.class new file mode 100644 index 0000000000000000000000000000000000000000..a6a5d45cd754b6545ee9d50538129398df487306 GIT binary patch literal 5981 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 SSx7%7wu<@GC+N8VdH(|{|8hnE literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$SizeButton.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin$SizeButton.class new file mode 100644 index 0000000000000000000000000000000000000000..aa94a0cd77de14907896b9843d38d21e0a94abd7 GIT binary patch literal 2973 zcmb_eS##4?6#lLwMTt=$3xN<45UEQYLs8h50D&xkQ-`G31VW+Z#=c2JWXYA}EOakj z=<+|9>03KsI_*rKJN*a!6P@WcZC_~5m7T<)q|*s_M%F!dIrsa{svjPG^BsVL_*_GT zp}$}kr!B`fgM#PIxvn3W^R74R7kE~PoE5m9d1Xl+3gxlzKrC(D7X8H_a2*W_L(45b z#}`b0-g2hR;iZLIhEBO)^7+6NbHWMCv)RCMos{JV!Vw-rqc1#*+vCFXY5sC@kbw;| zGz_?oA8;oa=XO!3gjoI<gAyzj1no&O)L21|;atkfF0O!Hfg8(ke|AtzS&k*IjP-LT zS0yF`kzWye8ES(W%a8Ri98ay&C{oEudEIG-JMndEc{YTS-Q#4f0XHY=!LUU~BbuV9 zL7R?dY$NN%yT|3qb{#qz<fv1}Mr?}GXr~SXyBIWI1k%wAYCK5_<=S&PV)A@6JHwr6 zk<7Y|oZhYD1;iPecrN$2kGtZj|BQlO33XG-a>T`Aeo}ZDK55gP%_%oak-;fGNUlsO z(n}13>$PrG;F7yG@h}|6gg51Sc|qZ{a}BIRGI|MUJ$i6J!+wTd*PAvAMSq4uzF;i~ z+c&3do+rsQdBHM0YjV<c%uC^G$QF50Fy>jVX9bHoCEy|QL2C30!>QC$XzGpP2##qu zN;Y{GiJ;>+PB3gB&o6;xI1_&=h-Ist)Nx9Zt{oW~OkN(5hV0XECbUClbS#Q~3~Cr) zIJ(aC(=mi|40Sx46}}%k$dFlo5_YeZg=Fvx7}h`qXzLmV*YOfklzcv)qcEmKyG8={ zrm41cJUJ7}(M4r19q{bz2rq=uE=}^Xj!Q_dusXtU>1kM1*Xd-QmlK#cF<jO$4hlz^ z^fId%TFbexRMzDrWk4M!D9uM5d(q&ApXau1Sd}91ijM2J!LX53WL($IScQyO2$nUO zHkAxB9e9)^q)GC7O~=h@en;yt$*?QEtk<BjZ8$tH40p;1W`t3W4tX}GLsXwVR)=Xi zn<7(-5YrlG>tSJ5!!7DQVO=VtTBMeg*I^@1K68r_b=g^#Yf>sW0pS)r->bnT*H;}3 z>GT&ZJ14w4yiUFnp67bT2_p&zzO1)5<fy1)4)c@%yigDh)tZiYvb%gmm0c=|$R!S_ zPTa;Dq%d&HMq}6<|MwBv`xf5O@OGsSo2wD)cvm__D@YPH`8Aq$i(Xcovt*TRe`0^% zC;2hxNr$@hfX#hh_!>T>I=@EDKh|w223EIU4R;w1|G&eJwQAC}x_8sW>h3KmEq{+t z>mmozqe4MDG}O_!p1vL;h|)hbJNYRgTOH8YDBB`Qa(^>g=zlXwcS%<0ok;9?fY!uA zY)#ZWKzpK7{_TB$jzpu;Xq2#nmbwy&5}yB(c1O@n|GVW~$}dorpHZ*;gpJCtXi<Jc zoANsh<qyP^KhdrHg#_(2=pMQSd$5<@awJhj!jZ%&QN4(L6;$67Cb^bNBqr{oUAcLU z;M5i*CKA7p3eXq+ODw>4dgAmPrsa;WV3u(BUbvTp-cV>Lubd_!WO5&^U*l{E=dVaU zH6fpbw3_k=P0HWsQ6o5^*5H(?;=EdmVYLn!bpx)dI<jg*$Z1O%<1(ilMsSfBjFQG$ zC_TDfPdn%nqQdG&V#R1}ZiNJ{k}Q9cMF%}S^b96w1Hl_BA(LpnTEew^%X6=Wb3B~u zsqD*!b5r3Q5uW)L&O~$JAv}3c2|)=9CA_)9^8iH#)Fv3}X6#X0v0vSSLuwoP)NL42 z+i^kdKw9m@gt`OQRRcw}E99$}(O39NmKs!}rKP2f;J-&=1n=Vxy}O9$2h=-0q5~h( S=o5M$q0y)GrVnv^hR8pUjxAIG literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin.class b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..7654e0fbaac9fa5f5d3bd1a1298cb8d2036499d8 GIT binary patch literal 18457 zcmcIr34B!5)j#LFByTdjKu7=`7aTPT36KCPN`feaEf^LFi-A&{BttSVnHgtcaYdzW zb*&aFb+1a@6=i}(skYVDrTy%xetxxTYg^meR$G@Ah3|jfd$S}&#pKudLGFF`-Fxo6 zXFuoO_xzs6cM;JsMv+OvbbKtFY7a#cHOW{!x-J?`Bx}}3<7*SKKx;7A7D`6rHOn&3 zGwtVv_5hO#n2rjyZme+t)C5`*$#|eOxvIwLFs(Hiibeu0;UH64ED#BXo%Te1Fp><$ znT9p439Jijs7b63McQlTF4Qh{OoQ#d**TetI|HGJ{g$b|(V6W_FSlY|1_-7oZB51F zSVi6>zDC_jcIUZ0qkG}%c%T!zIMD9Xo(k324K)p|8)xYog}5pa3<q12!8Ui3OvCN% z)ufW4aLu%MJg~7blt`j$aZ{*05=f@vfY{zwpDF#`qciu6V4^i1ih**|Q^{mBQa2T| z4hv)UhDahA2#50)S<)Gb%*Pg-ksy?_pl|>bX-dXH7>pg1=)@=o7}Ehg$kxyqXb(2D zViqQ=6AY8;%yb+S4#eAonWw>+DV4~>c&Rg0V12U21_A&c5H~SB5NTs7(Q00AGt}8W zCm4<ae~DN)lvI9Diu7Qirpz0_DrreZ7RIBoU_2QLCNkv6a+`}9%$Zz0D-^aF@|gWV z{Nmt-<g8FI+~y3zL=6>9%NiEf&snv2+VsYm714NmMJ$!*0P13)4Z(1tVs$uxy|+gz z0<lm<Jk-(>jZ`eMi<#kIC)jXdJQR(Gk{g+1MFUgOlu#s;oXTX3u3XAgP#<jzddZ+F zi;kvICXEG|dTiU44KIzMs$ycQv8a%Wv^K#alOW~CFiitG`y=H!vGLMGI!;$GiD}B{ z{lHX~c==kRu5zia>;#KERBTc$Q@L)Xmy~#Eva^>HEgDQibi_#(mC+CnO=BW`uD7V1 zhM6=Il+8y*mLEMdd%u)hNEtX$lQ?5~GSZ}cUcDyP?!^oZ7R{woAlmK0qz!dZFcD3~ zTfue{NAD{pl{t2{LDo!9tzI3B2ixqibzYi5^Avsav1NC7j`ba^EVO7ijquPSAn1$f zmA~+Lw&3Z?6*r45IzZuodG<rQ=fi1KiOqmH&7uPp%yOo>{a#K_DX)%2>=k{*A|D;( zp|3I>x8I=9(N+c-Ag5b&umWjes{K+xvYeQK)Mn8k3TZXdvHJ~a+00d{fHE*TEIO19 zGHH#=!o4($hr&$WoC5Mvh$2e=C>XXc_Oa#S42%49IMa~EP$W1%)!7n^FLo_xW3)98 zUK)sp^x17JNOpvv+9vl~8lhw2sYo$xpfgQ^{;|{us<~C$X3<%6Hj}w77*D{GtHIXS zt<lcTXryMT(^_ZJxzI=ZzVOf{jGa(Dq59bB@m@NIBKqe-i#F5OAXK5m?07H$wYwlb z^Ndsg$U0zjU*Id3d+1`AAgsslPU)db!Ptwjb-zPAe`hL@^tS~4*o!|EX$!{v?wbAX z{Qf}F9}Wf*$!afsovtwHa;8Ic&1%fsLV<9!y=Go8k$@_gVLw@PC0zvqCOV?)off81 zeUPmWJ+RcIYh0yNqY^$n8pnzn0~@2Mq?fLyD%I52DJy)F>EJw7;B=W6h+q|QC`yyA z@2%+@11-U@hi+gRnziNrg^p_X(iX+>7`oA-o9JecHqZt`T9r3LeY7(cjlkm6<!P&2 zqnB=_+fBNS$(OHEoej)_YZr}!DZWE@VER^@dNVs?$&Jo?ro%@!;O9WjNJERgc^3yz zf@A0|i?-2s)r<#|nUN!%HTFG75pfTU*%u3HFWc;;y9vC_biYMM(2*uR2vPZBC|PZh zZ?`HYc<BK;PC;(B=n;Ap6b5>A#`+F8OF?z+f)RCVCpmnqoCQ&F@U7yMU0ub#qd;vn zIcbZ!R6z_1M*|s0(xk^A8~OB@+teD5hQn(0y|k0Mm6e{b<;OOq%5yoID&U>8%cAem zQ;=ZTGDuM}1YP1lnI6EB4;tN*YVHhp2a<iCerVDUm`3!m2K2D#8G0514RS7l+tLsL zXQ)#H$7OUw<x&s*7#@w|@+<kDSLS?ysj^SD%oC>tEo<OU12G=@33xfNF`*dxAB$d6 z43#K`vXnCE=e^v3>Cp`tiTfG-QZe)^c#A#ej3lAwAZS>mF6?ECUQvluzI29~^uJ6; zWVA$%mMykdtt54vNR$2#5~Ka%u7^+)f<vqw)G_wZ>rm+NXmV95(i)Dou2l=-rPt^U zUDlgGth=myr`ulCtMohV@_Qx-$Y;X0QS=AsszpIXiXYQ@=~eoZMeiu424g>qqtWo< zP)zyGq`wS63MP8#&ngA4(%&rlJN*NS08-#YdN~O=A`j2Ob>M}Xo;_@Ce~sSP&HWQh znb+NMmTbQH0LHmK9BN(bPe%QYy7346k>GlN3nB#n>S)}b><IeZP|m+T6Qr8-(ExUM zjF<2>{q1h;+9o}I|w0r#%jq)!Gg-LYQUO~;wEcK|Rzk3E3F2<H2(-X?h&u9-S1 zfAew?drUULwD}SbiL$tuy`Yyvj5&x|&Wu8e!n4CEIK?AeC1M-BoB~pCmc=DJ7$Vwx zBtpy-G{phX6gl^~=h#w<hw7|eXROZU;c^7!^P}-(hlhtVEt%4h><mwx(lWIn;<pWs zvP@@SZO|WxZ1lI<3fjLelnB9f8tZS1`XkY#G7z+(_Kar*r+P|F%hV|~HaO@_J^(Dr z2SU2@STwgh7`vq=AGD8Z%tWDH_VFPK;ZUZrqZ|6#VP9=_Fu;ddG?ETe5QkfQgsNDT z<QbuLA$Su_p)-T}s>0%<_-J^bcvTNtAjFQQ5{~*(1-!g+Y0*i4SZ)8bf0e~!cq}N3 z{s?CPWmz!P-eD{28PJ31Qf+aKb}7rvrmm;vax?^dS^qrmVZ@Y$P4H+s@XW_qJc*Bo z-O^Ag5=$lL1rVtFGE~jj^~|d}FHhz=lWTh^?Nfpq!4T24L5rvGiSR}NF59NQQg81f z`?Ai%Cn1ziMVu^*m#1;P$<x8B`7E57-{KjJxY58ul`u99GHc9%bVy?><*Y5z&Ca%X z4kJw0)j4|2-EB`Bntg?hB8u#{WFGJ3xsXhr&kIdn&<kVPNpwr6=B#S|s(WnD82|-r zaufJgjmp0HEDtY%LC;!OKY~lReqLV0%aof>%gIB&$y$z|!@A2YvZzG+BksG2o-i44 zpPjO>b;FDh`~!_Byu6YT)E&(MFq0A&47i9}EpB7z6B7)meBRTu$qrT{g5K>GchD#- zSG}<)QeSJ6(U|QT;pG~O*XqlnRv4k6y@O7RBPuaoKws);1duY8m!8yjwu7aO*lG{_ z<@sJn{TyhI%OYx7DA|#by&?9i1xP>HqLYAQfrOM}qM0gebKcWM?Cn+nz86F02iH3p zu_4Ywb~d2YhS(Wh7tCuc3AcnH+Q~pX2~PkL&~yEE1figj%Sd)C)P1XWqDmm=R^qk2 z{6&s#D7GIOgR3DfB~8gd>soNU9fF#C{s36}1TSw=*51q)nfx`-S=rHX(A^wzBOIDw z+~SM*66_=^a2f);QIB$mYdd;nTD>%xFSGdTj9AYT0{H`A;yg2DcW-dp>jv?ae6`6} zWf--`TZ^yZZ$O_$;6Py=nF;fy%;f8!q4wE8E*I<NYk7;s*Ymf)+SrL^U3<fFGp=6V z$~T()ZE&^i(dS8-#WyK{LCI)ibbT;hA4tFsY~@=lzLjsoKH+bwTMKr}M3(ko#3=Em z;2Ei4q%~Mqxm<^Q$KpF&P)lN9(+sG)EZ)Y5&x&9+<I}KRb>r)G#61?@%lF|;I2dV9 zc0hrSu52**0g#~gGN-3PVGz#4522Ue@AvZkh)wx^e#GKOc?VzwFsJ5u4;fwWk}q$U z?r_+N`?<^Fow`m>GU}iQaV|e@aW^C8QK_E?i<cLE9iC^Z9p|%02iy1D!n-W~9wQ(c zkpVC-sunKi!)Ahgji&Oz^z3Hq(eGzirbpoA<sb61CO-obXOyhXQnOQ`B{&hV_(zPu z$ZCNRZVM({IUF;3g=2MkfO3QNjD>O!N=$y9X?}mhSx0(u-04IzUVe^WRE3O)tGWL< zUR$~KkmKA$HvT6w;<%gmC0H|;TKS?>xm<<u=NA8he+gOX2qfm)atC%>?%`j<+gTJ` zjZmw@&3yQkY8p_%L3x#5)%7EA8=nu^6|Bz<qD)2@*KadD*~_n~6aHH_9cWv++3`@D z8;0`hd^*BRe#_$DsY&w2gX;p}P#aQU+WfY~f6!(#9*jYLA$CQp-BSspHHJsq;|R1S zkt%BpCZV;^R1f~`Oofx7Cj0EE2mc<LW28Lxoz@nJVJ!5|c!elDd{;n_-Rs6)$H zp?D&hncSn!qw~5L7AMne#M)Yz7WOwGS<yFNx~9-2JLJtaNDj}sjVAvaI?vWay+qdC zvsyXZ&(GRQq=xtti@Y?*%X@f>$q2%16SO`PO6E=hO<_o@4L%gD!P!sHBL-}GwyReN z{3j$umYB-7MZpbV%Y-%+TjJHGL7~KqP#jqe<k3vA_A8B@U2V^7)OfE9g6RbCA(oWN zP|zxj>6pg3Z11j8Dde71Rl2$*PtVqQrCf%aGOVYi*@#qDrzIog0PHZJN0+V97+i@= zDluPJ-KeHVlZNl&!;-2ubcSI$<X}q<5d=XVsQiR_NxcN$6;InR$zhiG<#0{Jr1V4? zCueH3Gp>J4{_;&ZvX?_V7tvWu6tSvTj*z3E3Ix91h>TjzUnSf}bQx_)rBpcqkt0Po zu)*$oEifAZm@;-CWSiiXF;cC|s$psxfQD60%o>Euo>jMEPZKPeD2UI7z_#gLaz@R+ zk8R9<Z>#1pa-1cTR23B?j|bOsS~#o<s?{Tt;kRZZ?fMQ}6$s|CF8P5o7fGEZQ#9f) zccS)e&QariNSitXd*mcbPFBax19xa~Ah8x1zR5D(l6qV3hZ1&nS=(k>GD~K|l|V<O zOeR~9Pft@2lO3(LHY<}k@vTtsGlHx2U=?c86hvfpXy_a~;<ROLu+26jGDqfFGC#8{ zb-f|Oa|LH}M++jXOeVlK=JiO!LYx87M*UpA%#_8*qwL=*DinDBqHtc9J(Ot8rj8dz zV<|hL345i9w|HfVDw-v-+>#aY6(<hOUT#ok?-_??+yy}lwjal4pP_FidS#_(tR?}b zmj=kVy^&tm&__6w+jgD(_KT_73!nQt45Txqbs)$&#w#rnROGB?N(=xw{o)&&^_ED7 zB_WkKO-p1`R9=3XA6M~x9K0jY>5&X$tKi%67PI6G_38`Mpd(o)2}_cag8Fbo7cpR{ zZ5mE{a{6BlY+f9m^E9&a)|s-NX-2>HQ=v=CiG^3z$wo`g)EL0tTR4zNXz+w>$=Q~i zqqzc2jm?8_ccwZuWuP|aJWDpo`FfUuW4{I*3T{{c>S!?2V9JF|r#Mc{m%m8lxF}8{ z#q}+`a)EqJ>3<Q^3;%Wc?=NHbDGxn!4*5dXJBG8(!4^3i$1ZZIMHO<HqOWpAgHq&j zORkVBos3`Z`pQYrJ;<uo^tk_0lezy=gZnQv&i$8~KJUN49l2V*VG52<>jnVEl53Tr zO=N;YkwDm#Z!%5qFSV7O+~7#Alk1hpV8jdm>qPEFyk0`#9$Lv(OTMkP+LMhXU>I() z<YsMz2MRyA%_Fx$m~C6?&uVv-klQW!jwTICG--eYnSBlqoe+{cEx9X`B%5hp;cL@e z+gs?HRl|<&pL<r<7J}#~1K0b6-(H9?Mz3F$_u+klMy)OLaJwmtU?!x8$}NstkzFPn zavR{jt`1nw4g#D3;LIc}Jd<-ymR;m$dH`5iaSM=RD+afosJFe`5zZED1D|sYFrYvO z;O0R;%@L3T|057qtM5*0#A3*kkNkY=2epT8c^1A*J$*fEcKnBMFbNGfGN*;};=PRP zht&_wjIz@q3vfXK{!}Q54bAG`hI+GPh9ZuB1WsF3Q#)+pb;M8AHawJ`S6Md3GS^ua z^ojW?{aYSxJ(_Z#DbK;F>MJbFpa#MdXl=#akBadKT>CHAeJ3Gv&?n@o6PXqabfT<8 z*r_AXH?s>k{)-0!{4;EJ-VDbwojZ^j`m2hwB9OP1<Cx|RWG(v`y&NKO&vDT}L1(CB zA8Wg}WHW@qd0D1<LavG+D>9H-zZkjMdnj&R0FvqozywG@whn%s-~WX;lAIr_>s8h) za7aM54u(CY{}Z`lr!J{;cK}%(c?<3e9i`sH?=5*-{s3DD1DR4gbTT}c0r@D!fchs( z-jP2;e>N^y#&qI<;r-Q;cNJdIyqPl^mdw*B{%*-X>?sy6SZK=oxTBL})%nq;RBMNQ z3wdTd9*vuH6cUO!jm70uO--S5)`I4zjj9y{%t=E8#-m=fb1-4b$GBUiLf_LfZ20^O zOQzt0#K_MdhCJQAH=SSwd&c5uaO_wnI7dUz2mrj26@AlSrrBT2<bCeHV&RPGw)M-U z1ovqvUufT^>*3zRWI3(5G`8asD%P|9AsvqUNd~^GC@0Yy*r<u#zqU)<cD73-8|@P3 zqjrhg%@|c`*N37%?l|{&#vNz-9qt9&CGPdwB`)ULC2rN)B`(I=C9bvFC9bC0C9V+I zC2p14CGNoym3mb?@H`B2;YvCFjwa$ttQxng>E5a?s;ug!G0j~xZU<H8s^d|e*o@c5 z?x5pQpNt-LJ7`L-I<>0o<Q+5}4Ktdn%4Vf$P8T)qpapKjshNf*w_!=9VOdpGSu-AX z&<fO6+O<`v1?*ZYYC*f!j)9@(vb9~*xr1U4+nb8x?{XU<3#ovX0)@@k{t9fZohDER zO~JL6=@g;a6s376n<z%7(HZnrlx-Bp+XUXkDMd*-4}UMEb#yJQ$I<m!bPp}WTf%|1 zjT-bw;fc}1MO)$VxXM15$e6pG)_2o6&1L6x(fMh*U@HwOyQu7vopjm5ipy@g8rb?q z7hT&prkl1jmwl^?wx;RZ%c>rwY7@VmbW57<#MAh^r*68tx$NXFx_1ZNhgbJ?(*uhC zhtl*gFx^Evx@l*#Lg=E$=Z#I%lcl9;dV0**vLB`CxvH`kyXdDqC!g=qwYI=l&`m#U z_7xai^oun8+E?Jg&sjt_y^8g|)?D_R(gVBbw_WsBZK1EQ?CmuD(O1|_f7T`ZHBIkk z`e6a9wC8);v&dIe_Al*O)J-31&yRcdY|ZvGeP-FewWrxlyS3-1J$tUm_VoBX-LwZ? za7U8f#dNW5W_>i$jE(H%LdB%7z-Kz8XD1JGTRi);6z$XEj?RtJ8Ju1&=y5xFh>g>6 zcs0J9%Ya^`VmS{38EcC(SoQk6IqLbmzG8)<G#XbrtaM}-kEk8w!^#{o^`uO#<+FSR z4rtT{+0$j<miS6s22xU$U=jDZJxj(owC-kKbAhkKXLa$xJ9uQ(qdc;-D9wJY6r}k` zEr;=_G*@P8x|icKV0pYg={vyV3HsnGF6W7Ey)ezkmL6>E<P*wyYMM{h_i3Jmhi;y$ zlxR%zysB<q1e7c;z^{v!?f{7%)&JUcg;u+HW%E$kG?d@y;#FyG(Y7?Nc8ZV|SZY|M z+JHO~Po)K@pAWToAwD4345_}1DshARc)FZs(iM>8tLb#Q2GV;o<nmVZybV2WN6TGw zJ?`q>1^IoD?xkIHA3aa^)9bjz`!+p9@8iO(ho0miw2KeH)zFFbYo1Im^DNv``wFsX zAwGgP@Os>C*ua<aMjYLriR1XQ_)b0>N7CnT7oUss<MVJ_x(TP0=i}sXGrx^14F5oS z?Oz!25z0^aGAZP*<80<~9EMyaBl&7M0_7;aMkesJGL5f88v2_^7+)_d`CG`|-GH>) zRwT4;lq>iq*}^x=&3ub|mv5Ere49MQx64oXJMt>uDSza<;2hj3@A5W7IBg8$F5@uX zX&l3k8MXYlF^#*827bcUTvs~U$<<ty#^D@=QDQnDp;3&_fYG^2?%+7u40=$$%?Z>B z=yeHml2cU39+}STP%Gkzav*S$A`>|J8!(e14|X{p_&Jk`vDcY=7RGw9!y|#GGiVU@ zSj^|3&61V$E}x5937=<Emk+|kxa^FD!1fpu@d}oaFELImJqaweNm=TGT1fVVX}+|! zXd6B4D|(EtVBBK9R+UkjzgY|Yk>(r5;D4HL-b(0nqqf`*rEupYk5=!VR6M*G{5Kud zJE*wIXTmrgI^1&$%^dETssh~2_k&{}?Ba(HP4o6Nr&XLG#Xd0NV@~lT08|$|$xk;M zK5x@b{(;K$X2A`F=bEd0g<bqYt+%f(Xq)QurunDZSy%rvrmcJHRB4v;uN?i_#V>d9 zE45InwzXB|nWsOXL7}0GG8(!lqvwjSf7N%{hQe-sO)>TxXvb|dTvabD4D5q#VKDt6 zrQSRC{zX^W&965fQg}M#^9`sHZSmO(QEO>_(<y$R6+sBrDA45@d@A}ZnBfH)!tdjN z{a-YWKcFf6A)Uk@(OmwRPUU~oO8yVE@~0Hyy%ffQ=taVGg$P|I27Olw=w2zJE-~o^ z@zAfNm|g*_x5T24qy#6@gV~ZHe6W;q1%zg-l<{#=&eP>Eo{96o#VA+eye}#hyitzg zO*q-RSVq|_zFEB~zQkp5)cB9KZzFsW|B2rLrxo&r{Ad0PSbPZB^{@OcSo~<(4mSQf zyq<A%FaHB0OnmWmCBKJ$9y%4DoxG2+#dHze>wkj9z2MiwA>JRL_7T4E_z(h62(RE0 zV4w)%p^UwT%)QW3rb%q#$_)N|3~{-VXfIqYPhP9Z*P<PLh(4twnRnCdy)?GZf#Dvl zCcSFnx;hQTj{lQ!LTEnrs18awbm;D9X>gU6Y5o-UKS#>J>Yhq9nNmY#GCt3*DR)qp zk<Btd!!>(HHqGt82E0w<;%=ela*-}6fU6;eH;@;FXDbyvJhoc~f&Zi=EraKe+w~-G ztt}X5z_%E;Yp0YMlM1)dSYN^L!inW_U|J5kfezLuy9K?_4*4|O(lWAXb0O=CUAOK1 zdAA$^_oPcIY756aOU1szF=-hE|3k*uVkhI$qBd)MT8`C1Wkt&Z$DgsA)ZEaP(kW_f z1g0)4WW5B-Hsx}HD=%5OQW#n381D$3wv`s`lv<TQtg8%0Z%^}>E;(@r@7_k9DqL^c zZBs!GwTU28(=u(Vl)4W_T4p>Yb81avlBZkdHbYHGW0x$bErzooi)sgL<5zrx991Vx zwcg>LNmjQkX@(||WnFSwEnI=LG}jLH4bEwbZdnPO6c4xH0C;_7m#nHC(k(4$^L9yF zZK<yW)3*DDq-Bk7uoi3GmQtq$#aiEB8!3Zb{ONq*v_!YkL3jg1!hsnEJnodZ?tB{$ zb9z8Kmu;hueP!;F*VPWq;JMsaZi6h(D6pYv*-$$StqN|64K6KbDe`^8e8Wns({gUX z>AqoL2C#xE;^DsG-Esl8VPab)zF}RmS=I7z8$g>2;9_67Z@8@w%UuPzQ!epguCJ%% zs_J_n6-0~iU*$vNvwHlm!T*D?5V;P(hZ<e7#oiQ+&bEQ^+%{dX)34BN0}jjW39)Hg zsTcSLr{xBlT}t$Y);uncD7kLj>|rIUcHUC~4Xqs<rn|*uI<&-Gp)GqcEw|l3rm>9* z3es{1nwy^`*cdoVvQ6c=!1j)6A@(FwVP{VwpG>2Jq@G5}JgS!Ybb>6Psd6ec$|7n* zJt|A-Oj$<f%4xJ&n(10;r>)XK_e+SLk~Q?4tff~ZOn;J2dQT#>TcTVjF)ouhkB|f( z1>dAf*6~!?!1Lv7J{5k-Dmj-^vI*+=e5m3J_)46sZN(Yb14bi!kQMxl@fCj2SjjIN zU**@0)A?N^z#ki}Vi|2R#8@Mvjj&8GI^|>|BD0OCEHh%V!Z<@BC=*6pE-@1FEh8zn z8Y#KkSSK$T8|6*oO!>WWwtQfmBOe>*8O6p0#!zF8aj>!3@EaEyRmR1}B;yjJ&bZW= zD(4z=jLVHvjH`^5#x=$U;~N-pEqYyN>%L#&b6cpjjM*?QmhakTV-VoqE%!hPjxtV{ zd*wc`O|{W1_oG%ob#$ye0K-s7XBs8)pge@ybFxbwwvE7i{*P>zN1*gi<&Wf1^z-m4 zen)mlnu<Ba&q00eBrlB6Gx8YT>fP2Zd0e{T8C}T_$rFGw7<VeKmM3KwjMd}3S-yu_ zsf?y~<SBWYhROtbL%xrG<uaR|mmgrw!z4jB%MW3shRZYH4@9f(tWcb))nV`s_=J2W zjPf3Q3MW6pKhSh9zJtXF;%ck#%4s&`2%=BuR#=&Wy)>1qec$7iDRbDAxf$bjCk_3) zZl*NB+F`&Fd+3i%`LUWre8c@^N4duI5gPF&N1C!u4K7xWz2Z|zDlaeH3ya_16%6jz zjt|{GbmGJPKDP(6kFOy^dqLvQ=m763#HFPkd0t*{>^Cw!I9|huLa3N251}HeJ-|QO z*ltS#*aAad>~qM}-a|U_hWtc++Q%&8dk<;O8}dK$(!N7@ckdxz%^UJF`T4#>==k14 zR^$!&h5WLQA=7&g(bSJ3M7RGd`E?&d7W5tx$s6)=pF^5@4~gXsd8N-G%X$xq=M8yP z{<n{X-Pe1_*?B`=>ys|ky@xE#8}fhh8+VqYfe@gCimJvS!=&~mk7M`;d1GGhdyMUK z=8cibd1HPnZ}hR7_TEcdpBtig58NR)Kou+7p157!giS1XXxUEr-L5CRr&Mj1Kf>G> zEr88jhKIl4p)m9CH#`(L56zFrn-2j<De?)2$b0yP|7fa2Sw+XtB$RgE!Icds^9M}W ze(^{$=a}-(y~yuEk^NKuyho>G|B%SP6jSnne28*8jgXJz-?F=?7@BgAe1c<%CR{H2 z6y-Y9_Fx+ipdWs?$?25v>h*_M*(qC`5}#Z;KZUEm-A(~bZvT)GcgneLxydbGb4q-$ b#nAMK!H5m)MlL|956_`2z>2R!SxEB#A>HN? literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin.java b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin.java new file mode 100644 index 0000000..3af615c --- /dev/null +++ b/src/main/java/plugins/tprovoost/workspaceeditor/WorkspaceEditorPlugin.java @@ -0,0 +1,1587 @@ +package plugins.tprovoost.workspaceeditor; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GradientPaint; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.Paint; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FilenameFilter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; + +import javax.swing.AbstractAction; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.KeyStroke; +import javax.swing.border.Border; +import javax.swing.border.TitledBorder; + +import org.pushingpixels.flamingo.api.ribbon.RibbonElementPriority; +import org.pushingpixels.substance.api.ComponentState; +import org.pushingpixels.substance.api.SubstanceColorScheme; +import org.pushingpixels.substance.internal.utils.SubstanceColorSchemeUtilities; + +import icy.common.Version; +import icy.file.FileUtil; +import icy.gui.component.IcyTextField; +import icy.gui.component.IcyTextField.TextChangeListener; +import icy.gui.component.PopupPanel; +import icy.gui.component.button.IcyButton; +import icy.gui.dialog.ConfirmDialog; +import icy.gui.dialog.MessageDialog; +import icy.gui.frame.IcyFrame; +import icy.gui.util.ComponentUtil; +import icy.gui.util.GuiUtil; +import icy.main.Icy; +import icy.plugin.PluginDescriptor; +import icy.plugin.PluginLoader; +import icy.plugin.abstract_.PluginActionable; +import icy.preferences.WorkspaceLocalPreferences; +import icy.resource.icon.IcyIcon; +import icy.util.EventUtil; +import icy.workspace.Workspace; +import icy.workspace.Workspace.TaskDefinition; +import icy.workspace.Workspace.TaskDefinition.BandDefinition; +import icy.workspace.Workspace.TaskDefinition.BandDefinition.ItemDefinition; + +public class WorkspaceEditorPlugin extends PluginActionable +{ + + // ----- + // GUI + // ----- + private JPanel panelPluginsCenter = new JPanel(); + + /** Panel containing the combo boxes and the {@link PopupPanel}s. */ + private JPanel panelWorkspace = new JPanel(); + /** Contains the method for the drag'n drop */ + private MainPanel mainPanel = new MainPanel(); + + /** Current workspace in use. */ + private Workspace currentWorkspace; + + /** Reference to the IcyFrame. */ + private IcyFrame frame; + + // PREFERENCES + // private XMLPreferences prefs = IcyPreferences.pluginRoot(this); + + /** Used for the drag'n drop: contains all the selected plugins. */ + private ArrayList<PluginDescriptorButton> _selectedPlugins = new ArrayList<WorkspaceEditorPlugin.PluginDescriptorButton>(); + private ArrayList<PluginDescriptorButton> listInstalledPlugins = new ArrayList<PluginDescriptorButton>(); + private String minNamePlugin = ""; + + // ----------------- + // IMAGES RESOURCES + // ----------------- + private ImageIcon smallButton = new ImageIcon( + getImageResource("plugins/tprovoost/workspaceeditor/images/sqBtnSmall.jpg")); + private ImageIcon mediumButton = new ImageIcon( + getImageResource("plugins/tprovoost/workspaceeditor/images/sqBtnMedium.jpg")); + private ImageIcon largeButton = new ImageIcon( + getImageResource("plugins/tprovoost/workspaceeditor/images/sqBtnLarge.jpg")); + private Image minusWorkspace = getImageResource("plugins/tprovoost/workspaceeditor/images/minusWorkspace.png"); + private Image plusBand = getImageResource("plugins/tprovoost/workspaceeditor/images/plusBand.png"); + private Image plusWorkspace = getImageResource("plugins/tprovoost/workspaceeditor/images/plusWorkspace.png"); + private Image imgHelp = getImageResource("plugins/tprovoost/workspaceeditor/images/WE_Help.png"); + + private JSplitPane splitPane; + + private JButton btnProperties = new JButton("Properties"); + private TextFieldFilter tfFilter; + + @Override + public void run() + { + if (!Icy.version.isGreaterOrEqual(new Version("1.1.4.0"))) + { + MessageDialog.showDialog("Icy Version", "This plugin must be run under version 1.1.4.0 at least."); + return; + } + + // ------------- + // PANEL PLUGINS + // ------------- + final JPanel panelPlugins = new JPanel(new BorderLayout()); + panelPlugins.add(new JLabel("Installed Plugins")); + panelPluginsCenter.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + panelWorkspace.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + + // filter bar + tfFilter = new TextFieldFilter(""); + tfFilter.addTextChangeListener(new TextChangeListener() + { + + @Override + public void textChanged(IcyTextField source, boolean validate) + { + String filter = tfFilter.getText(); + panelPluginsCenter.removeAll(); + loadPlugins(filter); + } + }); + + // plugins in a container separated by letters + loadPlugins(""); + + JScrollPane scrollpane = new JScrollPane(panelPluginsCenter); + scrollpane.getVerticalScrollBar().setUnitIncrement(16); + panelPlugins.add(scrollpane, BorderLayout.CENTER); + // --------------- + // PANEL WORKSPACE + // --------------- + loadWorkspace("sys"); + + // PANEL RIGHT + JPanel panelWorkspaceWithLayout = new JPanel(new BorderLayout()); + JPanel panelOperations = new JPanel(); + panelOperations.setLayout(new BoxLayout(panelOperations, BoxLayout.X_AXIS)); + panelOperations.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + IcyButton btnReload = new IcyButton(new IcyIcon("rot_unclock.png", 24)); + btnReload.setToolTipText("Reload Icy"); + + btnReload.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + reloadWorkspace(); + if (ConfirmDialog.confirm("Restart Icy", "Icy is going to restart, do you want to continue?")) + Icy.exit(true); + } + }); + + final IcyButton btnNewBand = new IcyButton(new IcyIcon(plusBand, 24)); + btnNewBand.setToolTipText("Click to create a new band for the current workspace"); + btnNewBand.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent actionevent) + { + String workspaceName = currentWorkspace.getName(); + if (workspaceName.equals("sys")) + MessageDialog.showDialog("System file", + "This file should not be modified. It is shown as an example only."); + else + { + String response = JOptionPane.showInputDialog(Icy.getMainInterface().getMainFrame(), + "Enter the name of the new band: ", "Band Creation", JOptionPane.QUESTION_MESSAGE); + if (response == null) + return; + currentWorkspace.addBand(workspaceName, response); + currentWorkspace.save(); + reloadWorkspace(); + } + } + }); + + final IcyButton btnNewWorkspace = new IcyButton(new IcyIcon(plusWorkspace, 24)); + btnNewWorkspace.setToolTipText("Click to create a new workspace here."); + btnNewWorkspace.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent actionevent) + { + String response = JOptionPane.showInputDialog(Icy.getMainInterface().getMainFrame(), + "Enter the name of the Workspace: ", "Workspace Creation", JOptionPane.QUESTION_MESSAGE); + if (response == null) + return; + Workspace ws = new Workspace(); + ws.setName(response); + ws.addTask(response); + ws.save(); + loadWorkspace(response); + + // Create info dialog + final JDialog dlg = new JDialog(Icy.getMainInterface().getMainFrame()); + dlg.setLayout(new BorderLayout()); + + // label used as image + JLabel lbl = new JLabel(new ImageIcon(imgHelp)); + JPanel panelImg = new JPanel(new GridLayout()); + panelImg.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + panelImg.add(lbl); + + // south button "OK" + JButton okbtn = new JButton("OK"); + okbtn.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + dlg.setVisible(false); + } + }); + + // setup everything + JPanel panelSouth = new JPanel(); + panelSouth.setLayout(new BoxLayout(panelSouth, BoxLayout.X_AXIS)); + panelSouth.add(Box.createHorizontalGlue()); + panelSouth.add(okbtn); + panelSouth.add(Box.createHorizontalGlue()); + panelSouth.setBorder(BorderFactory.createEmptyBorder(8, 4, 8, 4)); + + dlg.add(panelImg, BorderLayout.CENTER); + dlg.add(panelSouth, BorderLayout.SOUTH); + dlg.pack(); + dlg.setLocationRelativeTo(Icy.getMainInterface().getMainFrame()); + dlg.setVisible(true); + } + }); + + final IcyButton btnRemoveWorkspace = new IcyButton(new IcyIcon(minusWorkspace, 24)); + btnRemoveWorkspace.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent actionevent) + { + if (currentWorkspace == null) + return; + if (currentWorkspace.getName().equals("sys")) + { + MessageDialog.showDialog("Deletion error", "This item cannot be deleted"); + } + else if (ConfirmDialog.confirm("Deletion", + "Are you sure you want to delete this workspace? You will not be able to undo this operation.")) + { + FileUtil.delete(currentWorkspace.getLocalFilename(), false); + loadWorkspace("sys"); + } + } + }); + btnProperties.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + PropertiesDialog dlg = PropertiesDialog.getInstance(); + dlg.initGUI(currentWorkspace); + ComponentUtil.center((Component) dlg); + dlg.setVisible(true); + if (dlg.changed() && !currentWorkspace.getName().contentEquals("sys")) + { + String currentName = currentWorkspace.getName(); + if (currentName.contentEquals(dlg.getWkName())) + { + currentWorkspace.setDescription(dlg.getWkDescription()); + currentWorkspace.save(); + boolean enableWorkspace = dlg.isWorkspaceEnabled(); + if (enableWorkspace && (currentWorkspace.getTasks() == null + || currentWorkspace.getTasks().get(0).getBands().isEmpty())) + { + MessageDialog.showDialog("Empty Workspace", "Impossible to enable an empty workspace."); + } + else + { + WorkspaceLocalPreferences.setWorkspaceEnable(currentName, enableWorkspace); + } + } + else + { + HashMap<BandDefinition, ArrayList<ItemDefinition>> hashmap = new HashMap<BandDefinition, ArrayList<ItemDefinition>>(); + String localFilename = currentWorkspace.getLocalFilename(); + TaskDefinition task = currentWorkspace.getTasks().get(0); + for (BandDefinition currentBand : task.getBands()) + { + hashmap.put(currentBand, currentBand.getItems()); + task.removeBand(currentBand.getName()); + } + currentWorkspace.addTask(dlg.getWkName()); + TaskDefinition taskNew = currentWorkspace.findTask(dlg.getWkName()); + for (BandDefinition bd : hashmap.keySet()) + { + taskNew.addBand(bd.getName()); + BandDefinition bdNew = taskNew.findBand(bd.getName()); + for (ItemDefinition def : hashmap.get(bd)) + { + bdNew.addItem(def.getClassName(), def.getPriority()); + } + } + currentWorkspace.setName(dlg.getWkName()); + currentWorkspace.setDescription(dlg.getWkDescription()); + currentWorkspace.save(); + File f = new File(localFilename); + + // Make sure the file or directory exists and isn't + // write protected + if (!f.exists()) + throw new IllegalArgumentException("Delete: no such file or directory: " + localFilename); + + if (!f.canWrite()) + throw new IllegalArgumentException("Delete: write protected: " + localFilename); + + // If it is a directory, make sure it is empty + if (f.isDirectory()) + { + String[] files = f.list(); + if (files.length > 0) + throw new IllegalArgumentException("Delete: directory not empty: " + localFilename); + } + + // Attempt to delete it + boolean success = f.delete(); + + if (!success) + throw new IllegalArgumentException("Delete: deletion failed"); + + reloadWorkspace(); + WorkspaceLocalPreferences.setWorkspaceEnable(currentWorkspace.getName(), + dlg.isWorkspaceEnabled()); + } + } + } + }); + + // Add the buttons to the south panel + panelOperations.add(Box.createHorizontalGlue()); + panelOperations.add(btnNewWorkspace); + panelOperations.add(Box.createHorizontalStrut(5)); + panelOperations.add(btnRemoveWorkspace); + panelOperations.add(Box.createHorizontalStrut(5)); + panelOperations.add(btnNewBand); + panelOperations.add(Box.createHorizontalStrut(5)); + panelOperations.add(btnReload); + panelOperations.add(Box.createHorizontalStrut(5)); + panelOperations.add(btnProperties); + panelOperations.add(Box.createHorizontalGlue()); + + // add the components to the right panel + panelWorkspaceWithLayout.add(Box.createGlue(), BorderLayout.CENTER); + panelWorkspaceWithLayout.add(panelWorkspace, BorderLayout.NORTH); + + // Restart info. + JLabel lblRestartIcy = new JLabel( + "<html><b>In order to make any change visible, do not forget to reload Icy.</b></html>"); + JPanel southPanel = new JPanel(); + southPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + southPanel.add(lblRestartIcy); + + // set the main panel + JScrollPane rightScrollPane = new JScrollPane(panelWorkspaceWithLayout, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + rightScrollPane.getVerticalScrollBar().setUnitIncrement(16); + + JPanel panelRight = new JPanel(new BorderLayout()); + panelRight.add(panelOperations, BorderLayout.NORTH); + panelRight.add(rightScrollPane, BorderLayout.CENTER); + + JPanel panelLeft = new JPanel(); + panelLeft.setLayout(new BorderLayout()); + panelLeft.add(tfFilter, BorderLayout.NORTH); + panelLeft.add(panelPlugins, BorderLayout.CENTER); + + splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelLeft, panelRight); + splitPane.setDividerSize(6); + splitPane.setContinuousLayout(true); + splitPane.setResizeWeight(0.7); + splitPane.setDividerLocation(0.7); + mainPanel.setLayout(new BorderLayout()); + mainPanel.add(splitPane, BorderLayout.CENTER); + mainPanel.add(lblRestartIcy, BorderLayout.SOUTH); + // mainPanel.add(panelNorth, BorderLayout.NORTH); + mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), + "unselect"); + mainPanel.getActionMap().put("unselect", new AbstractAction() + { + /** */ + private static final long serialVersionUID = 1L; + + @Override + public void actionPerformed(ActionEvent e) + { + mainPanel.lastEvent = null; + _selectedPlugins.clear(); + mainPanel.repaint(); + } + }); + + // set the frame + frame = new IcyFrame("Workspace editor", true, true, true, true); + frame.add(mainPanel); + frame.setSize(new Dimension(640, 480)); + frame.addToDesktopPane(); + frame.center(); + frame.setVisible(true); + } + + /** + * Load all the actionable plugins in Icy into the {@link #panelPluginsCenter}; + * + * @see {@link PluginLoader#getActionablePlugins()} + */ + private void loadPlugins(final String filter) + { + int cpt = 0; + char actualLetter = '?'; + + // ---------------------------- + // Listener for multi selection + // ---------------------------- + MouseAdapter multiSelectionListener = new MouseAdapter() + { + + @Override + public void mousePressed(MouseEvent e) + { + if (!EventUtil.isControlDown(e)) + _selectedPlugins.clear(); + mainPanel.previouslySelectedPlugins = new ArrayList<PluginDescriptorButton>(_selectedPlugins); + mainPanel.pointBegin = e.getLocationOnScreen(); + } + + @Override + public void mouseReleased(MouseEvent e) + { + mainPanel.previouslySelectedPlugins.clear(); + mainPanel.previouslySelectedPlugins = null; + mainPanel.pointBegin = null; + mainPanel.pointEnd = null; + mainPanel.repaint(); + } + + @Override + public void mouseClicked(MouseEvent e) + { + _selectedPlugins.clear(); + panelPluginsCenter.repaint(); + }; + + @Override + public void mouseDragged(MouseEvent e) + { + mainPanel.pointEnd = e.getLocationOnScreen(); + mainPanel.mouseDragged(e); + } + }; + + // Create GUI + // Create an item for every plugin descriptor + for (PluginDescriptor pd : PluginLoader.getActionablePlugins()) + { + String name = pd.getName(); + if (!name.toLowerCase().contains(filter.toLowerCase())) + continue; + char pluginFirstLetter = name.toUpperCase().charAt(0); + int sizename = name.length(); + if (sizename > minNamePlugin.length()) + minNamePlugin = name; + + // if the first letter is different, the new letter is written + if (actualLetter != pluginFirstLetter) + { + actualLetter = pluginFirstLetter; + JLabel lblLetter = new JLabel(" " + actualLetter); + lblLetter.addMouseListener(multiSelectionListener); + lblLetter.addMouseMotionListener(multiSelectionListener); + panelPluginsCenter.add(GuiUtil.besidesPanel(lblLetter)); + ++cpt; + } + PluginDescriptorButton pdb = new PluginDescriptorButton(pd); + panelPluginsCenter.add(GuiUtil.besidesPanel(pdb)); + listInstalledPlugins.add(pdb); + ++cpt; + } + // Add the refresh button + IcyButton btnRefresh = new IcyButton("Refresh Plugin List", new IcyIcon("rot_unclock.png")); + JPanel panelButtonRefresh = new JPanel(); + panelButtonRefresh.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + panelButtonRefresh.setLayout(new BoxLayout(panelButtonRefresh, BoxLayout.X_AXIS)); + panelButtonRefresh.add(Box.createHorizontalGlue()); + panelButtonRefresh.add(btnRefresh); + panelButtonRefresh.add(Box.createHorizontalGlue()); + btnRefresh.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + _selectedPlugins.clear(); + panelPluginsCenter.removeAll(); + loadPlugins(""); + } + }); + // add space in case there is a too big space below + for (; cpt <= 10; ++cpt) + { + panelButtonRefresh.add(new JLabel("")); + } + panelPluginsCenter.setLayout(new GridLayout(cpt + 2, 1)); + panelPluginsCenter.add(panelButtonRefresh); + panelPluginsCenter.revalidate(); + panelPluginsCenter.repaint(); + } + + /** + * Reload the current workspace. + */ + void reloadWorkspace() + { + if (currentWorkspace != null) + loadWorkspace(currentWorkspace.getName()); + } + + /** + * Load the workspace <code>workspacename</code> + * + * @param workspacename + * : name of the {@link Workspace}. Can contain the .xml + * extension. + */ + private void loadWorkspace(String workspacename) + { + // ------------------- + // Create the ComboBox + // ------------------- + File workspacesDir = new File("workspace"); + if (!workspacesDir.exists() || !workspacesDir.isDirectory()) + { + return; + } + String[] files = workspacesDir.list(new FilenameFilter() + { + @Override + public boolean accept(File file, String s) + { + return s.endsWith(".xml"); + } + }); + + // Create the list used as model for the combo box + String[] cbModel = new String[files.length]; + System.arraycopy(files, 0, cbModel, 0, files.length); + for (int i = 0; i < cbModel.length; ++i) + { + if (cbModel[i].endsWith(".xml")) + cbModel[i] = cbModel[i].substring(0, cbModel[i].length() - 4); + } + + // creation of the combo box + listener + final JComboBox cbChooseWorkspace = new JComboBox(cbModel); + if (workspacename != null) + cbChooseWorkspace.setSelectedItem(workspacename); + cbChooseWorkspace.addItemListener(new ItemListener() + { + + @Override + public void itemStateChanged(ItemEvent itemevent) + { + loadWorkspace((String) cbChooseWorkspace.getSelectedItem()); + mainPanel.setSize(mainPanel.getSize()); + } + }); + + // ------------------ + // DRAW THE COMPONENT + // ------------------ + panelWorkspace.removeAll(); + panelWorkspace.setLayout(new BoxLayout(panelWorkspace, BoxLayout.Y_AXIS)); + panelWorkspace.setSize(new Dimension(150, 60)); + JPanel panelChoose = new JPanel(); + panelChoose.setLayout(new BoxLayout(panelChoose, BoxLayout.X_AXIS)); + panelChoose.add(new JLabel("<html><b>Choose workspace</b></html>")); + panelChoose.add(Box.createHorizontalGlue()); + panelWorkspace.add(panelChoose); + panelWorkspace.add(cbChooseWorkspace); + panelWorkspace.add(Box.createVerticalStrut(6)); + + if (workspacename != null) + currentWorkspace = new Workspace(workspacename); + else + currentWorkspace = null; + if (currentWorkspace != null && !currentWorkspace.getTasks().isEmpty()) + { + final TaskDefinition task = currentWorkspace.getTasks().get(0); + // ------------ + // POPUP PANELS + // ------------ + int bandIndex = 0; + final LinkedList<BandDefinition> bandsCopy = new LinkedList<BandDefinition>(task.getBands()); + for (final BandDefinition band : bandsCopy) + { + final int finalBandIndex = bandIndex; + final PopupPanel ppp = new PopupPanel(band.getName()); + final JPanel pppMainPanel = ppp.getMainPanel(); + pppMainPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + + // listener for deletion + MouseListener listenerBandDelete = new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + if (e.getButton() == MouseEvent.BUTTON3) + { + TitledPopupMenu popup = new TitledPopupMenu( + "Band: " + bandsCopy.get(finalBandIndex).getName()); + Border titleUnderline = BorderFactory.createMatteBorder(1, 0, 0, 0, popup.getForeground()); + TitledBorder labelBorder = BorderFactory.createTitledBorder(titleUnderline, + popup.getLabel(), TitledBorder.CENTER, TitledBorder.ABOVE_TOP, + ppp.getFont().deriveFont(Font.BOLD), popup.getForeground()); + popup.setBorder(BorderFactory.createCompoundBorder(popup.getBorder(), labelBorder)); + popup.setLocation(e.getLocationOnScreen()); + + JMenuItem itemRenameBand = new JMenuItem("Rename Band"); + itemRenameBand.addActionListener(new ActionListener() + { + // TODO + @Override + public void actionPerformed(ActionEvent e) + { + if (currentWorkspace.getName().contentEquals("sys")) + { + MessageDialog.showDialog("Cannot be modified", + "The bands of this workspace cannot be moved. The only possible action is the removal of plugins from band \"new\"."); + return; + } + String response = (String) JOptionPane.showInputDialog( + Icy.getMainInterface().getMainFrame(), "Enter the name of the new band: ", + "Band Creation", JOptionPane.QUESTION_MESSAGE, null, null, band.getName()); + if (response == null) + return; + HashMap<String, ArrayList<ItemDefinition>> hashmap = new HashMap<String, ArrayList<ItemDefinition>>(); + + // get a copy of every band in the task + // and delete it from the task + for (BandDefinition currentBand : bandsCopy) + { + if (currentBand == band) + hashmap.put(response, currentBand.getItems()); + else + hashmap.put(currentBand.getName(), currentBand.getItems()); + task.removeBand(currentBand.getName()); + } + + // Reconstruct in the right order + for (String bandName : hashmap.keySet()) + { + task.addBand(bandName); + for (ItemDefinition item : hashmap.get(bandName)) + { + task.addItem(bandName, item.getClassName()); + task.findItem(item.getClassName()).setPriority(item.getPriority()); + } + } + currentWorkspace.save(); + reloadWorkspace(); + } + }); + popup.add(itemRenameBand); + + // Move the band up + JMenuItem itemMoveUp = new JMenuItem("Move Up"); + itemMoveUp.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + if (currentWorkspace.getName().contentEquals("sys")) + { + MessageDialog.showDialog("Cannot be modified", + "The bands of this workspace cannot be moved. The only possible action is the removal of plugins from band \"new\"."); + return; + } + HashMap<BandDefinition, ArrayList<ItemDefinition>> hashmap = new HashMap<BandDefinition, ArrayList<ItemDefinition>>(); + + bandsCopy.remove(band); + bandsCopy.add(finalBandIndex - 1, band); + + // get a copy of every band in the task + // and delete it from the task + for (BandDefinition currentBand : bandsCopy) + { + hashmap.put(currentBand, currentBand.getItems()); + task.removeBand(currentBand.getName()); + } + + // Reconstruct in the right order + for (BandDefinition currentBand : bandsCopy) + { + String bandName = currentBand.getName(); + task.addBand(bandName); + for (ItemDefinition item : hashmap.get(currentBand)) + { + task.addItem(bandName, item.getClassName()); + task.findItem(item.getClassName()).setPriority(item.getPriority()); + } + } + currentWorkspace.save(); + reloadWorkspace(); + } + }); + popup.add(itemMoveUp); + + // Move the band down + JMenuItem itemMoveDown = new JMenuItem("Move Down"); + itemMoveDown.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + if (currentWorkspace.getName().contentEquals("sys")) + { + MessageDialog.showDialog("Cannot be modified", + "The bands of this workspace cannot be moved. The only possible action is the removal of plugins from band \"new\"."); + return; + } + HashMap<BandDefinition, ArrayList<ItemDefinition>> hashmap = new HashMap<BandDefinition, ArrayList<ItemDefinition>>(); + + bandsCopy.remove(band); + bandsCopy.add(finalBandIndex + 1, band); + + // get a copy of every band in the task + // and delete it from the task + for (BandDefinition currentBand : bandsCopy) + { + hashmap.put(currentBand, currentBand.getItems()); + task.removeBand(currentBand.getName()); + } + + // Reconstruct in the right order + for (BandDefinition currentBand : bandsCopy) + { + String bandName = currentBand.getName(); + task.addBand(bandName); + for (ItemDefinition item : hashmap.get(currentBand)) + { + task.addItem(bandName, item.getClassName()); + task.findItem(item.getClassName()).setPriority(item.getPriority()); + } + } + currentWorkspace.save(); + reloadWorkspace(); + } + }); + popup.add(itemMoveDown); + + // Remove Band Item + JMenuItem itemDeleteBand = new JMenuItem("Remove Band"); + itemDeleteBand.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + if (currentWorkspace.getName().contentEquals("sys")) + { + MessageDialog.showDialog("Cannot be deleted", + "The bands of this workspace cannot be deleted. The only possible action is the removal of plugins from band \"new\"."); + return; + } + else if (ConfirmDialog.confirm("Band deletion", + "Are you sure you want to delete this band?")) + { + task.removeBand(band); + currentWorkspace.save(); + reloadWorkspace(); + if (currentWorkspace.getTasks() == null + || currentWorkspace.getTasks().get(0).getBands().size() <= 1) + { + WorkspaceLocalPreferences.setWorkspaceEnable(currentWorkspace.getName(), + false); + } + } + } + }); + popup.add(itemDeleteBand); + + // Display + if (finalBandIndex < 1) + { + itemMoveUp.setEnabled(false); + } + else if (finalBandIndex >= bandsCopy.size() - 1) + { + itemMoveDown.setEnabled(false); + } + popup.show(e.getComponent(), e.getX(), e.getY()); + } + } + }; + + // listener for mouse over + // (used by mainpanel to know where to drop items) + MouseListener listenerMouseOver = new MouseAdapter() + { + + @Override + public void mouseEntered(MouseEvent mouseevent) + { + mainPanel.currentBand = band; + } + + @Override + public void mouseExited(MouseEvent mouseevent) + { + mainPanel.currentBand = null; + } + }; + ppp.getComponent(0).addMouseListener(listenerBandDelete); + pppMainPanel.addMouseListener(listenerBandDelete); + ppp.getComponent(0).addMouseListener(listenerMouseOver); + pppMainPanel.addMouseListener(listenerMouseOver); + + pppMainPanel.setLayout(new BoxLayout(pppMainPanel, BoxLayout.Y_AXIS)); + if (band.getItems().size() == 0) + { + pppMainPanel.add(Box.createRigidArea(new Dimension(20, 20))); + } + else + { + // ------- + // Create every item based on itemdefinition + // ------ + for (final ItemDefinition itd : band.getItems()) + { + JPanel panelPlugin = new JPanel(); + panelPlugin.setLayout(new BoxLayout(panelPlugin, BoxLayout.X_AXIS)); + final String classname = itd.getClassName(); + panelPlugin.setMinimumSize(new Dimension(60, 20)); + JLabel pluginName = new JLabel( + classname.substring(classname.lastIndexOf('.') + 1, classname.length())); + pluginName.addMouseListener(new PluginActionAdapter(task, band, ppp, classname)); + pluginName.setMinimumSize(new Dimension(100, 20)); + panelPlugin.add(pluginName); + panelPlugin.add(Box.createHorizontalGlue()); + switch (itd.getPriority()) + { + case LOW: + panelPlugin.add(new SizeButton(itd, 0)); + break; + case MEDIUM: + panelPlugin.add(new SizeButton(itd, 1)); + break; + case TOP: + panelPlugin.add(new SizeButton(itd, 2)); + break; + } + pppMainPanel.add(panelPlugin); + } + pppMainPanel.validate(); + } + panelWorkspace.add(ppp); + panelWorkspace.add(Box.createVerticalStrut(5)); + ppp.expand(); + ++bandIndex; + } + + } + else + { + panelWorkspace.add(new JLabel("Empty Workspace")); + } + btnProperties.setEnabled(!currentWorkspace.getName().contentEquals("sys")); + if (frame != null) + frame.revalidate(); + } + + /** + * Class used for the Drag'n Drop functionalities. + * + * @author thomasprovoost + */ + private class MainPanel extends JPanel implements MouseListener, MouseMotionListener + { + + protected Point pointEnd; + protected Point pointBegin; + protected BandDefinition currentBand; + protected Rectangle selectionRectangle = new Rectangle(0, 0, 0, 0); + protected ArrayList<PluginDescriptorButton> previouslySelectedPlugins; + protected MouseEvent lastEvent; + + public MainPanel() + { + } + + /** + * + */ + private static final long serialVersionUID = 1462696193771472039L; + + @Override + public void mouseDragged(MouseEvent e) + { + if (previouslySelectedPlugins != null) + { + _selectedPlugins.clear(); // clear the list of selected plugins + // the previouslySelectedPlugins + // list already contains all needed + // information + // this step is only for display + // purpose + + // rectangle of selection + if (!isShowing()) + return; + Point location = getLocationOnScreen(); + Point pStart = new Point(pointBegin.x < pointEnd.x ? pointBegin.x : pointEnd.x, + pointBegin.y < pointEnd.y ? pointBegin.y : pointEnd.y); + int w = (pStart.x == pointBegin.x ? pointEnd.x - pointBegin.x : pointBegin.x - pointEnd.x); + int h = (pStart.y == pointBegin.y ? pointEnd.y - pointBegin.y : pointBegin.y - pointEnd.y); + selectionRectangle.setBounds(pStart.x - location.x, pStart.y - location.y, w, h); + + // add selected plugins in the list + for (PluginDescriptorButton pdb : listInstalledPlugins) + { + if (!pdb.isShowing()) + return; + Rectangle bounds = pdb.getBounds(); + bounds.x = pdb.getLocationOnScreen().x - location.x; + bounds.y = pdb.getLocationOnScreen().y - location.y; + if (selectionRectangle.intersects(bounds)) + { + pdb.setSelected(true); + } + } + for (PluginDescriptorButton pdb : previouslySelectedPlugins) + { + pdb.setSelected(true); + } + } + else if (!_selectedPlugins.isEmpty()) + { + lastEvent = e; + } + repaint(); + } + + @Override + public void mouseMoved(MouseEvent e) + { + } + + @Override + public void paintComponent(Graphics g) + { + super.paintComponent(g); + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + if (lastEvent != null) + { + // DRAW THE SELECTED PLUGINS IN + // TRANSPARENT + if (!isShowing()) + return; + Point actual = getLocationOnScreen(); + for (PluginDescriptorButton pdb : new ArrayList<PluginDescriptorButton>(_selectedPlugins)) + { + if (!pdb.isShowing()) + continue; + Point objectLocation = pdb.getLocationOnScreen(); + int w = pdb.imgRenderer.getWidth(); + int h = pdb.imgRenderer.getHeight(); + int[] data = new int[w * h]; + pdb.imgRenderer.getRGB(0, 0, w, h, data, 0, w); + for (int i = 0; i < data.length; ++i) + { + data[i] &= 0xFFFFFF; + data[i] |= 80 << 24; + } + BufferedImage img2 = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); + img2.setRGB(0, 0, w, h, data, 0, w); + g2.drawImage(img2, objectLocation.x - actual.x + lastEvent.getX(), + objectLocation.y - actual.y + lastEvent.getY(), null); + } + } + if (pointBegin != null && pointEnd != null) + { + g2.setColor(Color.GRAY); + g2.draw(selectionRectangle); + } + } + + @Override + public void mouseReleased(MouseEvent e) + { + if (lastEvent != null) + { + if (panelWorkspace != null && panelWorkspace.isShowing()) + { + + Point pW = panelWorkspace.getLocationOnScreen(); + Point pE = e.getLocationOnScreen(); + // tests if mouse release is in the panelWorkspace + if (pE.x >= pW.x && pE.x <= pW.x + panelWorkspace.getWidth() && pE.y >= pW.y + && pE.y <= pE.y + panelWorkspace.getHeight()) + { + // if null, ask for a band creation + if (currentBand == null) + { + if (currentWorkspace.getName().equals("sys") + || currentWorkspace.getName().equals("sys.xml")) + MessageDialog.showDialog("System file", + "This file should not be modified. It is shown as an example only."); + else + { + String response = JOptionPane.showInputDialog(Icy.getMainInterface().getMainFrame(), + "Enter the name of the new band: ", "Band Creation", + JOptionPane.QUESTION_MESSAGE); + if (response != null) + { + currentWorkspace.addBand(currentWorkspace.getName(), response); + currentBand = currentWorkspace.findBand(currentWorkspace.getName(), response); + } + } + } + // if still null, do nothing + if (currentBand != null) + { + for (PluginDescriptorButton pdb : new ArrayList<PluginDescriptorButton>(_selectedPlugins)) + { + String className = pdb.pd.getClassName(); + if (currentBand != null && currentBand.findItem(className) == null) + { + currentBand.addItem(className); + for (ItemDefinition itd : currentBand.getItems()) + { + if (itd.getClassName() == className) + itd.setPriority(RibbonElementPriority.MEDIUM); + } + } + } + currentWorkspace.save(); + reloadWorkspace(); + } + _selectedPlugins.clear(); + } + mainPanel.repaint(); + } + currentBand = null; + } + } + + @Override + public void mouseClicked(MouseEvent mouseevent) + { + } + + @Override + public void mouseEntered(MouseEvent mouseevent) + { + } + + @Override + public void mouseExited(MouseEvent mouseevent) + { + } + + @Override + public void mousePressed(MouseEvent mouseevent) + { + } + } + + /** + * JLabel modified to contain the {@link PluginDescriptor}. + * + * @author thomasprovoost + */ + private class PluginDescriptorButton extends JLabel + { + + PluginDescriptor pd; + boolean preferredSizeSet = false; + boolean mouseOver = false; + BufferedImage imgRenderer; + + /** + * Default serial version UID + */ + private static final long serialVersionUID = 1L; + + public PluginDescriptorButton(PluginDescriptor pd) + { + this.pd = pd; + setText(pd.getName()); + setToolTipText(pd.getClassName()); + MouseAdapter mouseadapter = new PDBMouseAdapter(this); + addMouseMotionListener(mouseadapter); + addMouseListener(mouseadapter); + } + + @Override + public void paintComponent(Graphics g) + { + // test if preferred size already set + if (!preferredSizeSet) + { + setPreferredSize(new Dimension( + g.getFontMetrics().charsWidth(minNamePlugin.toCharArray(), 0, minNamePlugin.length()) + 26, + 40)); + preferredSizeSet = true; + } + + // initialize variables + int w = getWidth(); + int h = getHeight(); + String text = getText(); + imgRenderer = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); + Graphics2D gb = (Graphics2D) imgRenderer.getGraphics(); + gb.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + gb.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + gb.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + + // drawing + gb.setFont(new Font("Arial", Font.BOLD, 12)); + SubstanceColorScheme cs; + if (isSelected()) + { + cs = SubstanceColorSchemeUtilities.getColorScheme(new JButton(), ComponentState.ROLLOVER_SELECTED); + } + else if (mouseOver) + { + cs = SubstanceColorSchemeUtilities.getColorScheme(new JButton(), ComponentState.SELECTED); + } + else + { + cs = SubstanceColorSchemeUtilities.getColorScheme(new JButton(), ComponentState.ENABLED); + } + Color background = cs.getSelectionBackgroundColor(); + Color foreground = cs.getForegroundColor(); + Paint defaultPaint = gb.getPaint(); + if (isSelected()) + { + gb.setPaint(new GradientPaint(w / 2, 0, background, w / 2, h / 2, background.darker(), true)); + } + else + { + gb.setPaint(new GradientPaint(w / 2, 0, background, w / 2, h / 2, background.brighter(), true)); + } + gb.fillRoundRect(1, 1, w - 1, h - 1, 10, 10); + gb.setPaint(defaultPaint); + gb.setColor(foreground); + gb.drawRoundRect(1, 1, w - 2, h - 2, 10, 10); + gb.drawString(text, 10 + w / 2 - gb.getFontMetrics().charsWidth(text.toCharArray(), 0, text.length()) / 2, + h / 2 + gb.getFontMetrics().getHeight() / 2); + gb.drawImage(pd.getIconAsImage(), 5, 5, h - 10, h - 10, null); + g.drawImage(imgRenderer, 0, 0, w, h, null); + gb.dispose(); + } + + /** + * Toggle the {@link #isSelected()} value. + */ + void toggleSelected() + { + if (isSelected()) + setSelected(false); + else + setSelected(true); + } + + /** + * Return if the current plugin is selected. + * + * @see #toggleSelected(), {@link #setSelected(boolean)} + */ + public boolean isSelected() + { + for (PluginDescriptorButton pdb : _selectedPlugins) + { + if (pdb.equals(this)) + { + return true; + } + } + return false; + } + + /** + * Set the selected flag to <code>selected</code> value. + * + * @param selected + */ + public void setSelected(boolean selected) + { + if (selected) + _selectedPlugins.add(this); + else if (!selected) + _selectedPlugins.remove(this); + repaint(); + } + + @Override + public String toString() + { + return getText(); + } + } + + /** + * Specific button created to change the size of the plugin in the + * workspace. + * + * @author thomasprovoost + */ + private class SizeButton extends JButton implements ActionListener + { + + /** */ + private static final long serialVersionUID = 1L; + int type = 0; + ItemDefinition itd; + + public SizeButton(ItemDefinition itd, int type) + { + this.type = type; + this.itd = itd; + setSize(32, 32); + // setPreferredSize(new Dimension(32, 32)); + changeIcon(); + addActionListener(this); + } + + @Override + public void actionPerformed(ActionEvent arg0) + { + type = ++type % 3; + switch (type) + { + case 0: + itd.setPriority(RibbonElementPriority.LOW); + break; + case 1: + itd.setPriority(RibbonElementPriority.MEDIUM); + break; + case 2: + itd.setPriority(RibbonElementPriority.TOP); + break; + } + changeIcon(); + currentWorkspace.save(); + } + + private void changeIcon() + { + switch (type) + { + case 0: + setIcon(smallButton); + setToolTipText("Only a small icon"); + break; + case 1: + setIcon(mediumButton); + setToolTipText("Small icon and name of the plugin"); + break; + case 2: + setIcon(largeButton); + setToolTipText("Large icon and name of the plugin"); + break; + default: + System.out.println("error : " + type); + } + } + } + + class PDBMouseAdapter extends MouseAdapter + { + + PluginDescriptorButton pdb; + + public PDBMouseAdapter(PluginDescriptorButton pdb) + { + this.pdb = pdb; + } + + @Override + public void mousePressed(MouseEvent e) + { + pdb.setSelected(true); + if (EventUtil.isControlDown(e)) + { + // starts multi selection + mainPanel.previouslySelectedPlugins = new ArrayList<PluginDescriptorButton>(_selectedPlugins); + mainPanel.pointBegin = e.getLocationOnScreen(); + } + } + + @Override + public void mouseDragged(MouseEvent e) + { + if (mainPanel.previouslySelectedPlugins != null) + mainPanel.pointEnd = e.getLocationOnScreen(); + else + mainPanel.lastEvent = e; + mainPanel.mouseDragged(e); + } + + @Override + public void mouseMoved(MouseEvent e) + { + pdb.repaint(); + } + + @Override + public void mouseReleased(MouseEvent e) + { + // equivalent of MouseClicked + if (e.getClickCount() > 0) + { + pdb.toggleSelected(); + if (!_selectedPlugins.isEmpty()) + { + if (e.isShiftDown()) + { + if (mainPanel.previouslySelectedPlugins == null) + { + mainPanel.previouslySelectedPlugins = new ArrayList<PluginDescriptorButton>(); + mainPanel.previouslySelectedPlugins.add(_selectedPlugins.get(_selectedPlugins.size() - 1)); + } + if (!EventUtil.isControlDown(e)) + { + for (PluginDescriptorButton pdb : new ArrayList<PluginDescriptorButton>(_selectedPlugins)) + { + pdb.setSelected(false); + } + _selectedPlugins.clear(); + } + int idxCurrent = listInstalledPlugins.indexOf(pdb); + int idxLastSelected = listInstalledPlugins.indexOf(mainPanel.previouslySelectedPlugins.get(0)); + if (idxCurrent != idxLastSelected) + { + mainPanel.previouslySelectedPlugins.get(0).setSelected(true); + if (idxCurrent > idxLastSelected) + { + idxLastSelected = idxCurrent + idxLastSelected; + idxCurrent = idxLastSelected - idxCurrent; + idxLastSelected = idxLastSelected - idxCurrent; + } + for (int i = idxCurrent; i != idxLastSelected; i++) + { + PluginDescriptorButton currentPdb = listInstalledPlugins.get(i); + if (currentPdb != this.pdb) + currentPdb.setSelected(true); + } + } + + } + else + { + mainPanel.previouslySelectedPlugins = null; + if (!EventUtil.isControlDown(e)) + { + for (PluginDescriptorButton pdb : new ArrayList<PluginDescriptorButton>(_selectedPlugins)) + { + pdb.setSelected(false); + } + _selectedPlugins.clear(); + } + } + } + pdb.toggleSelected(); + } + + // normal MousePressed + if (mainPanel.previouslySelectedPlugins != null) + { + mainPanel.previouslySelectedPlugins.clear(); + mainPanel.previouslySelectedPlugins = null; + mainPanel.pointBegin = null; + mainPanel.pointEnd = null; + mainPanel.repaint(); + } + else + { + mainPanel.mouseReleased(e); + mainPanel.lastEvent = null; + } + pdb.repaint(); + } + + @Override + public void mouseEntered(MouseEvent e) + { + pdb.mouseOver = true; + pdb.repaint(); + } + + @Override + public void mouseExited(MouseEvent e) + { + pdb.repaint(); + pdb.mouseOver = false; + } + } + + class PluginActionAdapter extends MouseAdapter + { + + private TaskDefinition task; + private String className; + private BandDefinition band; + private PopupPanel ppp; + + public PluginActionAdapter(TaskDefinition task, BandDefinition band, PopupPanel ppp, String className) + { + this.task = task; + this.band = band; + this.ppp = ppp; + this.className = className; + } + + @Override + public void mouseClicked(final MouseEvent e) + { + + // Display a popup panel when user presses Mouse + // Button 3 + if (e.getButton() == MouseEvent.BUTTON3) + { + + final ItemDefinition clickedItem = task.findItem(className); + final ArrayList<ItemDefinition> items = band.getItems(); // copy + // of + // items + final int clickedItemIndex = items.indexOf(clickedItem); + TitledPopupMenu popup; + Border titleUnderline; + TitledBorder labelBorder; + + // Create popup menu + popup = new TitledPopupMenu("Plugin: " + className.substring(className.lastIndexOf(".") + 1)); + titleUnderline = BorderFactory.createMatteBorder(1, 0, 0, 0, popup.getForeground()); + labelBorder = BorderFactory.createTitledBorder(titleUnderline, popup.getLabel(), TitledBorder.CENTER, + TitledBorder.ABOVE_TOP, ppp.getFont().deriveFont(Font.BOLD), popup.getForeground()); + popup.setBorder(BorderFactory.createCompoundBorder(popup.getBorder(), labelBorder)); + popup.setLocation(e.getLocationOnScreen()); + + // Create items in popup + JMenuItem itemMoveUp = new JMenuItem("Move Up"); + itemMoveUp.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + band.clear(); + items.remove(clickedItemIndex); + items.add(clickedItemIndex - 1, clickedItem); + for (ItemDefinition currentItem : items) + { + String currentClassName = currentItem.getClassName(); + task.addItem(band.getName(), currentClassName); + task.findItem(currentClassName).setPriority(currentItem.getPriority()); + } + currentWorkspace.save(); + reloadWorkspace(); + } + }); + itemMoveUp.setEnabled(clickedItemIndex > 0); + popup.add(itemMoveUp); + + JMenuItem itemMoveDown = new JMenuItem("Move Down"); + itemMoveDown.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + band.clear(); + items.remove(clickedItemIndex); + items.add(clickedItemIndex + 1, clickedItem); + for (ItemDefinition currentItem : items) + { + String currentClassName = currentItem.getClassName(); + task.addItem(band.getName(), currentClassName); + task.findItem(currentClassName).setPriority(currentItem.getPriority()); + } + currentWorkspace.save(); + reloadWorkspace(); + } + }); + itemMoveDown.setEnabled(clickedItemIndex < items.size() - 1); + popup.add(itemMoveDown); + + // item delete plugin + JMenuItem itemDeletePlugin = new JMenuItem("Remove Plugin from band"); + itemDeletePlugin.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e2) + { + if (currentWorkspace.getName().contentEquals("sys") && !band.getName().contentEquals("New")) + { + MessageDialog.showDialog("Cannot be deleted", "Only possible with band \"new\"."); + return; + } + if (ConfirmDialog.confirm("Plugin removal", + "Are you sure you want to remove this plugin from this band?")) + { + band.removeItem(className); + currentWorkspace.save(); + reloadWorkspace(); + } + } + }); + popup.add(itemDeletePlugin); + + // item delete band + JMenuItem itemDeleteBand = new JMenuItem("Remove Band"); + itemDeleteBand.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + if (currentWorkspace.getName().contentEquals("sys")) + { + MessageDialog.showDialog("Cannot be deleted", + "The bands of this workspace cannot be deleted. The only possible action is the removal of plugins from band \"new\"."); + return; + } + if (ConfirmDialog.confirm("Band deletion", "Are you sure you want to delete this band?")) + { + task.removeBand(band); + currentWorkspace.save(); + reloadWorkspace(); + } + } + }); + popup.add(itemDeleteBand); + popup.show(e.getComponent(), e.getX(), e.getY()); + } + } + } +} diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/images/WE_Help.png b/src/main/java/plugins/tprovoost/workspaceeditor/images/WE_Help.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5a5a4552bc25bb519cebd650ed457efe7e47e4 GIT binary patch literal 36988 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�hRYQfx*MGy z>{uxP%-jbASdRA^ExMs$JjYE^378pXF`Nqc&G%T*p3Oz_c2{FTA#jfiTbZ+fjM=HK zq~IeCi-4;^TGT{THCVZN+V3iJENU<SD|vS8aN^=K8dEcX3%?d-x^m5N5KJ(=CMwmW zaA%7j@X#jLNb_XIf-4%<bAWT2z~xnYJsO`c)HhLLF-yq<?h)3SCe8=c4h$xccDom# zD*#TUhdB$JVENFbP!Zr}`Ov7PA(#as{bZM?NQZ;~i{gwT=b0>xCGsW=pI)W_CqjXn pjbGju1yb<S6`<>>Rvh@x&mbuu_xodl-w6gF@O1TaS?83{1OO@Qh4%me literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/images/minusWorkspace.png b/src/main/java/plugins/tprovoost/workspaceeditor/images/minusWorkspace.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7081422193fffa845c2ade82b9437f27300d74 GIT binary patch literal 721 zcmV;?0xtcDP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0007*Nkl<Zc-rk( zPl%0C6dz-HsOSBg*Lyv$SFcyIz{ZSeVj*@UyHPeMgrUqzP09j0QdY{mEKn9oVu@00 zBqJFmNj9=j7Mdc)pX(moSHDj8PUrS<FLh7->id4@*SY8S-gm$6+`hgPDN>|Jks?Kk z6#sv8IvwSUcDt=wt(Iywo2t=hs9LS2s@1A0m&>YHEdI_(Yv~piWimj`_&{QScxk=N z2B;AqNDL4st(W-`q9%MGF;K79#q}~9pay&(F+lgydYKK-Vm^=<plfNp%m!#NA4m*T zDiv|P%m!#tA4m+8N+of<%m!#dA4m)o3I%b!%m(uL{Kh{GZD3NWO{2tLjKdno40bv+ z>p?@9aOg&vE=b(fPzLWDnk%3oeA8HJ(VYX$mrw>yv*rdZnpaFiSZC4QgZ$%A26nK< zHnIGmrFp^;ORW!(zYxm65Nm9b<+nNvTxPlzEWbaL0UDF%VBw1_f6`=DR|`H_%s zqWiG$BbK`jIn@2oSPr@=$bHqwg*1R~k53x?@b7$t+;-ErZNFRvekSy{U>E!QhYY_G zxStv&jalH1LXGFZPlq<Jni&{3{2t(58m<f6HN)l1x1q-$2yI}o#%E~YgyE-wyJWb% zz`Zft8ukOMjWJR@ga&RH?ip~s@nMza!?!!;2JXdqXyP>uz#89y8#cOrwy`&BoQ3-* zv4*;RY{PD2Z>9mz-hte4cHfO<V3<7`H{tpL)1HFdEsghZe=wGToOyn6;_O|YSzx@F zW5!2go(*OkW5c*`z?;`t64OA}(O6SBVn2<2I-9UG^;USuu?>R3W6aXj^#zWiTze?C zfn{v-@_7ei#A0CVUpVB?vZgjTbOUVsn0K6$Q$&qlL^y+War2#c00000NkvXXu0mjf De{xf4 literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/images/plusBand.png b/src/main/java/plugins/tprovoost/workspaceeditor/images/plusBand.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5cc9a1313f4a7137ea17fd499e2417242496ed GIT binary patch literal 514 zcmV+d0{#7oP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0005WNkl<Zc-rlk zJxjzu5I`eZ#(WVHVu*x@g}vBV*ojs)){24_7NTV;vGWT5f{kdWjlHN~<4+L5)=mTw zL1mqR4TQzhS@uqLxgB_LmkhJ}F1gIaaRxYsIA%swRje#aRul!x^PFW_#*!pqaU8QS z44Loy%yr#4D_{kzfEBO;R=^4jgaB?xmcIn>9JQA6T!ovFfg*s%sr8fva3eBM1n?NO zp7Je(n~;GbkftfQp0WULKn98cey7$`7Qn@1pa|e+YCUBETucUvKomvfdddR0s0<W= zAPC6ylm&1>87Kmt=aK6v3t-ojfhe#|t!GDxe-y}o`WJS9bzlMTbQG8Y7?BU40}Pug z(9khm;0xzXT?IDy|6&Xn2PS}7;9AJ5bro3dvP8sx`6lnkGy#nJR^EYW0*P=17EKbE z1TI=RZ$0k`JrsBao;fdkv+eWmz`RaPT=p?qJDP>80A7Jjods@yW6mjX4&455D;?@8 z(CsNS1w06IQDKq*#+Hz~W}3jXkh^D^z>1K&YmxxYLU%&$l8yqGd{ApR;a&Ji$iqfA zYGNN~*f+J2A!mJgt?YxqCvRXl6FmY~z$!4}*w8e-0ke!_1g`2vssI2007*qoM6N<$ Ef|P35g#Z8m literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/images/plusWorkspace.png b/src/main/java/plugins/tprovoost/workspaceeditor/images/plusWorkspace.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7624a65e8a5f4d11190fc8269475db46bf04c3 GIT binary patch literal 743 zcmV<D0vP>?P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00086Nkl<Zc-rll zJ7`ov6oz9AtATZ2S$0{Mg=Hay+L#AHi=dq%b`fk;P*G#RRDuX8G@T+?31+cS!9ozx zQUyU95hG#*5fK})5G*91Xnc%wU>1H3Gv<s}=PH?jAMX9<aOQl;ojd1lSJx6A%Z&cd z(Q36+v)NRQMnl!>bycg?RHaf;<#JgSi$#^s=T$bF-4p>LKm>>Y5g-CYfF%Jy1^H?* z0GgBLO59gbF+P$2kT1=b7=Q}#kpzG|X}-jd5EbDg2|%@473WI~Kn3_n0zmiDe2D>Q zF&{|)=vtaDF#s**BMCsMR1)V)3_y$eNCHqO6vX)w1JHs#k^tm#IdQ(k0CZ~lNC+?~ z%@<pVzX&j)b=+u|Bi%-bA&ooYhFM$?fIC{s=&d8&Wr!ht)mmwZI}0(NLjjy(#r0Xz zy<{<@4VJjOF#jkNz)n`!W|peYQatI1W!d*Ie?AmIKPzmKrP}5IxWwXCv-ty|0H{r# zhlMY&R3{w(&sp47Ha{5hHF^&ge#lbYf;o))uC)r{j=|g)txQM&e0zM<>V{vqKfv4$ zQ@CxvTmgSJ^g*_p{rmfkzXrS?S_Q2+@Q%Wg&%mDv4X};@j2V9~crT3C2JfozGUjaP z_y<ED+{?8-K>;U>KLg%H<Lv|Qwei-oKfq8L-Nyqc;JWdig4byu)>;m}J%4lq|K>Oc zMZBU0SnC^j117GUZR{;tXW;&ETK(UCwqdukH&YM9-iEm;cHd45V1PXuH{kj{i=BqK zn_BPS{!m%~8T0&N$Jx0){fqWuo`Dai`57_mXdA|a4c>y*iZlV*j>77~7W+xsA9CZC zqTUEUa%_!Y@G)X3>Y5{V!V-HpZGc|3d3nEsW6%OH@-O@zFvp4-b;R|s_G7{Eog7E1 Z<0lQ&l25$3d07Ae002ovPDHLkV1gDmN}d1! literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnLarge.jpg b/src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnLarge.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12c88da42c5ab7ebf5fbb6e9eaa2f1979974a397 GIT binary patch literal 1199 zcmex=<NpH&0WUXCHwH#V1_nkTWcYuZp#{hrVDSF{gCGZk0D}NCqaXv5AS1IN<NqU! zi-2xqg}96X3K*G~Sy<WFIXJnv1sIqZnVFebm|0m_Sb!>PfpQEif~-P{hK_8)fr;!& zg(60c6BlwQJ8e8D8g%i4ig8j=6DOCLxP+vXs+zinrk07RnYo3fm9vYho4bdnS8zyZ zSa?KaRB}pcT6#uiR&hybS$RceRdY*gTYE=m*QCi)rcRqaW9F<yi<c~2wtU6PRhu?% z*}84}j-9&>9X@jO*zpr5PhGlv<?6NTH*Vf~_~`MIr_Y|hc=_t%r_W!$e*6C8=PyPE zW_UnDJcQ&QpvM`RSXh`@*g^hbWGV+@W<eHKMME|r$3XVPLSZGNMh+3Di3>L#<Wx2e z`XHKAbdgI;#pI#tN067mJ|fOTO=S59?jg8;{@-HYVP*tI7_%UQJ;T3=`*Zqly^j4m zW$XMK=MUZI`@{d?`cbiZ`G2M_=JVMUudI0Qakcbq*m=*ZU+uZ0<Fjtb{++gS>8|YD zzq_lo&aYm#K5dhGp53A3-p7-_-)H%wd7{SaluhUv<27aZ&1(<r5$%2yvraNLM^vj~ zO)igKYMe<iYxjZ2s=-`Oo0lz>vH5VdGSxcF_vrDbJNj*oru^vXn<h6+Zb`Atv3Y#E z*Gf$)Sgv`od#aw-mP>P2SzE3=_Og2S{V&c(C;ce$=YMr6>Sa~j>=jX&-^+KUEl*6( zPOM&@6*j@MFtIwbJeSAlu<h0>g<eYx-H%V#+T-)$exrO)ozs7YgZ}lY{I|p(wf<*# zv+_~@&C?I}*o&6tH_ew){n7czp8M=a_5<@6f7|ZsFMN2`>(IsbHN}r?*(~IPcU@B3 zSZVU2lzX+z-$mJGjuMl9Eq`(LcntF)i+a(bdA5(z5B=~neenG744Imun#WdCvK~F0 z@o=MPa@#3`h?DoZy~U+YS#%~oj9i~Cwes%qhd)m1p80tB#OtRsTzghdPm_;c>G{au zN6KU0OLLUZcdYiU{<Q3Ih31ZTkMF;Fe{*rj-{t=_miIpRyWBqATmI&aO!vc@54yAc z`|8+!9QkKGIoRsQN0vJGruBKVT_+!Yo4kNyazMbXjn`+taooQ-Z{tt>P8rjO^ZDzO z>yKD{)Y{)sAM@|xzZ>7~sLm<a|IPjCzr}y&pZ>d6;&1hD=i86hf35x-{>uB-e}+B5 zwr}Q3&q?~X@$cFx&RXB<PQUuI<By&7Yngl3Z{5FPf45pMs$Ty1Tig4M^Z(xj07Z}Z AUjP6A literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnMedium.jpg b/src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnMedium.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5df28f83a6b91e431ef2f9101607c5810fc5207a GIT binary patch literal 966 zcmex=<NpH&0WUXCHwH#V1_nkTWcYuZp#{hrVDSF{gCGZk0D}NCqaXv5AS1IN<NqU! zi-2xqg}96X3K*G~Sy<WFIXJnv1sIqZnVFebm|0m_Sb!>PfpQEif~-P{hK_8)fr;!& zg(60c6BlwQJ8e8D8g%i4ig8j=6DOCLxP+vXs+zinrk07RnYo3fm9vYho4bdnS8zyZ zSa?KaRB}pcT6#uiR&hybS$RceRdY*gTYE=m*QCi)rcRqaW9F<yi<c~2wtU6PRhu?% z*}84}j-9&>9X@jO*zpr5PhGlv<?6NTH*Vf~_~`MIr_Y|hc=_t%r_W!$e*6C8=PyPE zW_UnDJcQ&QpvM`RSXh`@*g^hbWGV+@W<eHKMME|r$3XVPLSZGNMh+3Di3>L#<Wx2e z`XHKAbdgI;#pI#tN067mJ|fOTO=S59?jg8;{@-HYVP*tI7_%UQJ;T3=`?L6eXy(5; z`<v@e%HOU!hCk6C?DkjvXV~W7QRDxxm-|uc()RYP@thURVHdW>w@Wcxv(tEW>)t}K z^~sBWG#`x@wJ}_Bbj_`U_32Ab7TO+L^)0O6*cnFoH|hTwSoQzT`OolR(YE<pW9pe| zgdfTC-KaaWUvSxv>hzDyQJ4N$FNyr|?&X%Z-Vq<xADQ3wT}t=wxuyRZIHqk+Uw$k5 zp4{GRikJ1i$|?t5Ubp1(5%C}w2Fv%imH%;Ce>nW@&X21fq>smo*F<L)e%Swz{c!xP z_J`@cb=-F{&7JZ)W|hB{e|Vnd1>2|F$G+JaT-d7LzH5HNyFa4&YhQl8kzsZA@3*C< zbFOW_#d>VI=+y&im+mfobvFOT;eVXH57yt<eB6G^zl{&#<zL=f-|(LyLteB-^-7KK zhy8vR_<H#d)${yO`Qf{uM&-l%rrfP*AL~2T*%Zk8T+r3a{pxA5p6^cd%4qRTdrPuk MGVFS{@ALng0FT#qB>(^b literal 0 HcmV?d00001 diff --git a/src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnSmall.jpg b/src/main/java/plugins/tprovoost/workspaceeditor/images/sqBtnSmall.jpg new file mode 100644 index 0000000000000000000000000000000000000000..beb0c25c28804d55d2fcd035cc29deebccba5b55 GIT binary patch literal 1338 zcmex=<NpH&0WUXCHwH#V1_nkTWcYuZp#{hrVDSF{gCGZk0D}NCqaXv5AS1IN<NqU! zi-2xqg}96X3K*G~Sy<WFIXJnv1sIqZnVFebm|0m_Sb!>PfpQEif~-P{hK_8)fr;!& zg(60c6BlwQJ8e8D8g%i4ig8j=6DOCLxP+vXs+zinrk07RnYo3fm9vYho4bdnS8zyZ zSa?KaRB}pcT6#uiR&hybS$RceRdY*gTYE=m*QCi)rcRqaW9F<yi<c~2wtU6PRhu?% z*}84}j-9&>9X@jO*zpr5PhGlv<?6NTH*Vf~_~`MIr_Y|hc=_t%r_W!$e*6C8=PyPE zW_UnDJcQ&QpvM`RSXh`@*g^hbWGV+@W<eHKMME|r$3XVPLSZGNMh+3Di3>L#<Wx2e z`XHKAbdgI;#pI#tN067mJ|fOTO=S59?jg8;{@-HYVP*tI7_%UQJ;T5K|5R&oewh9? z|D){RG0*Pug2{)kO|O%=te4-~H*@9vxa>Net2tX{YnJk69}zc;3Y(d0w|s@$^<VEh zx89X^xU}~B*%eu3Wgpj8R-P+tI<dj{OyQ?F1s_&Bbr%HwQ&U=_aVco7=jFw2e8n+e zH;QIlST22PsmJ2?HD(_kch-bG+GEaMFjvMl=dp0(S!0RAf>z%mY-Z~pNvn7ncsOCh zk2~iLj~wT2TluwSyT<9yGMA;pr}go(#^s%^cly!%V18FTSMHzshkMx$J9dX(GWCr< ze0|#YI`%91Z}hgD?tWo%H|+3{`Fu5wkM?uNY2S@Fz9Qo8i#YYGYnE@FCbDB<O7?1t zT}FR$ZH}`$OS|crtUeahR9dk0?~QW-L7^KWdg8>Eq@O;^8F(bLyE{B9=3<<=_=jWW z%@+M84||Sn(SE#X)|QM%%X#+Ootm^ZoZDGgEBN$|#cB`#{AXZ~=70OQO{pz)@`G%r zy;gI!Ja@l&ZROcNK7Z#c|CspDdq0QsNA9Ec{Fl6cyi?ovVe0!fyE`s&HNh{XmUTb& z=l`+(u++MV)iUSBmM?x?C$n$c9F99W!LB?f=cP~o&ye{rPW*Mn8qw#HRyX`td*!;C zybM|1b2#b4))iNRvX*MysG2Zo^QK9@Wd-&UdhF*{K40IyiBGNM!`Bt=dXL2C1sx8a z8yP&u@P<u3@ADe#c~5uF6DnD3BbPWWUBbsz((>r3l2swgt>iiF)8@1P5&Mz9;E(o) zzRjhT5AO;+kK3`i>)(F{uW8@D2YmGJEUg!P^{KYmapNVE45`nt*GoCqZh0&0a=GNR z#L}+QzL($TDzu68%-1^fWM(bTX0~S^epDu@iwEB<K2@>CHzzjJ)NQJiLD2fRC5!!f zr9xI7T~+e(kYG>PJ>`nVc@+zfS+1A<D0Rr){OpRS7Fkz5=u7LE>X^AtdV0rxT41Zs odD)rIB02+4eOe={wPVk5!{ccZr!K7QI`-(J#H_1X=l|aX08q;+o&W#< literal 0 HcmV?d00001 -- GitLab