From f2194c905c33a9452385ccfcfc9a69db0e367b56 Mon Sep 17 00:00:00 2001 From: Philipp Spohr <spohr.philipp@web.de> Date: Thu, 31 Aug 2017 19:49:10 +0200 Subject: [PATCH] Swing is everything but fun --- LICENSE | 19 +++ pom.xml | 26 +++++ .../de/hhu/ba/yoshikoWrapper/CyActivator.java | 21 ++++ .../ba/yoshikoWrapper/core/AlgorithmTask.java | 21 ++++ .../core/ConfigurationManager.java | 21 ++++ .../de/hhu/ba/yoshikoWrapper/core/CyCore.java | 21 ++++ .../yoshikoWrapper/core/GraphicsLoader.java | 58 ++++++++-- .../core/LocalizationManager.java | 21 ++++ .../core/NetChangeListener.java | 21 ++++ .../ba/yoshikoWrapper/core/NetworkParser.java | 21 ++++ .../hhu/ba/yoshikoWrapper/core/NodeMap.java | 21 ++++ .../ba/yoshikoWrapper/core/YoshikoLoader.java | 21 ++++ .../ba/yoshikoWrapper/core/package-info.java | 23 +++- .../graphModel/YoshikoCluster.java | 21 ++++ .../graphModel/YoshikoResult.java | 21 ++++ .../graphModel/YoshikoSolution.java | 21 ++++ .../graphModel/package-info.java | 23 +++- .../ba/yoshikoWrapper/gui/ClusterView.java | 26 ++++- .../ba/yoshikoWrapper/gui/ColumnMapper.java | 44 +++++-- .../gui/ComfortCollapsiblePanel.java | 20 ++++ .../ba/yoshikoWrapper/gui/ComfortPanel.java | 23 ---- .../yoshikoWrapper/gui/DoubleInputField.java | 21 ++++ .../ba/yoshikoWrapper/gui/EditCostPanel.java | 51 +++++--- .../gui/EnableWhenSelectedListener.java | 21 ++++ .../ba/yoshikoWrapper/gui/FormatHelper.java | 21 ++++ .../yoshikoWrapper/gui/IntegerInputField.java | 21 ++++ .../yoshikoWrapper/gui/LanguageSwitcher.java | 21 ++++ .../ba/yoshikoWrapper/gui/LibStatusPanel.java | 21 ++++ .../ba/yoshikoWrapper/gui/LibraryPanel.java | 32 ++++- .../hhu/ba/yoshikoWrapper/gui/MainPanel.java | 109 ++++++++++-------- .../gui/OperationModePanel.java | 34 ++++-- .../gui/ReductionRulesChooser.java | 56 +++++---- .../ba/yoshikoWrapper/gui/ResultPanel.java | 30 ++++- .../gui/SolutionNumberChooser.java | 26 ++++- .../ba/yoshikoWrapper/gui/SolutionTab.java | 30 ++++- .../hhu/ba/yoshikoWrapper/gui/SwingUtil.java | 33 ++++++ .../yoshikoWrapper/gui/TimeLimitSetter.java | 26 ++++- .../ba/yoshikoWrapper/gui/YLibChooser.java | 21 ++++ .../ba/yoshikoWrapper/gui/YoshikoHeader.java | 32 ++++- .../yoshikoWrapper/gui/YoshikoHelpDialog.java | 21 ++++ .../yoshikoWrapper/gui/YoshikoHelpModel.java | 21 ++++ .../ba/yoshikoWrapper/gui/package-info.java | 23 +++- .../yoshikoWrapper/logging/YoshikoLogger.java | 21 ++++ .../yoshikoWrapper/logging/package-info.java | 23 +++- src/main/resources/YoshikoStrings.properties | 25 +++- .../resources/YoshikoStrings_de_DE.properties | 23 +++- .../resources/graphics/YoshikoAlphaLogo.png | Bin 6862 -> 3620 bytes .../resources/graphics/YoshikoAlphaText.png | Bin 7125 -> 10911 bytes src/main/resources/graphics/package-info.java | 23 +++- 49 files changed, 1138 insertions(+), 162 deletions(-) create mode 100644 LICENSE create mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java delete mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortPanel.java create mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/SwingUtil.java diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e79e5f8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2017 Philipp Spohr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pom.xml b/pom.xml index 1ef32a4..bc32d80 100644 --- a/pom.xml +++ b/pom.xml @@ -1,3 +1,24 @@ +<!-- + Copyright (C) 2017 Philipp Spohr + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +--> <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> @@ -131,6 +152,11 @@ <version>${cytoscape.api.version}</version> <type>bundle</type> </dependency> + <dependency> + <groupId>org.cytoscape</groupId> + <artifactId>swing-util-api</artifactId> + <version>${cytoscape.api.version}</version> + </dependency> </dependencies> <description>A Cytoscape plugin for graph-based clustering that wraps the yoshiko algorithm.</description> diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java index 1f4f60e..aff1010 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper; import java.util.Properties; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java index a07a2e9..77b7ca9 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import java.util.Properties; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/ConfigurationManager.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/ConfigurationManager.java index 3138cdd..1fbcaac 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/ConfigurationManager.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/ConfigurationManager.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import org.cytoscape.property.AbstractConfigDirPropsReader; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java index ef06d00..2bd7ce6 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import org.cytoscape.application.CyApplicationManager; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/GraphicsLoader.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/GraphicsLoader.java index 77ba436..3590a50 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/GraphicsLoader.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/GraphicsLoader.java @@ -1,22 +1,62 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.IOException; + +import javax.imageio.ImageIO; import javax.swing.ImageIcon; public class GraphicsLoader { - private static ImageIcon yoshikoLogo; - private static ImageIcon yoshikoText; + private static BufferedImage yoshikoLogo; + private static BufferedImage yoshikoText; + + private final static ClassLoader classLoader = GraphicsLoader.class.getClassLoader(); - public static ImageIcon getLogo() { + public static ImageIcon getLogo(int size) { if (yoshikoLogo == null) { - yoshikoLogo = new ImageIcon("/resources/graphics/YoshikoAlphaLogo.png"); + try { + yoshikoLogo = ImageIO.read( + classLoader.getResource("graphics/YoshikoAlphaLogo.png") + ); + } catch (IOException e) { + e.printStackTrace(); + } } - return yoshikoLogo; + return new ImageIcon(yoshikoLogo.getScaledInstance(size, size, Image.SCALE_SMOOTH)); } - public static ImageIcon getText() { - if (yoshikoLogo == null) { - yoshikoLogo = new ImageIcon("/graphics/YoshikoAlphaText.png"); + public static ImageIcon getText(int height) { + if (yoshikoText == null) { + try { + yoshikoText = ImageIO.read( + classLoader.getResource("graphics/YoshikoAlphaText.png") + ); + } catch (IOException e) { + e.printStackTrace(); + } } - return yoshikoText; + return new ImageIcon(yoshikoText.getScaledInstance(height*4, height, Image.SCALE_SMOOTH)); } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/LocalizationManager.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/LocalizationManager.java index 99807cb..ef548ff 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/LocalizationManager.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/LocalizationManager.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import java.util.Collection; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetChangeListener.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetChangeListener.java index 49da3d0..9a9e48c 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetChangeListener.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetChangeListener.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import org.cytoscape.application.events.SetCurrentNetworkEvent; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java index 62079e0..22e1a6a 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import java.util.List; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NodeMap.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NodeMap.java index 821b51a..83a2999 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NodeMap.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NodeMap.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import java.util.HashMap; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/YoshikoLoader.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/YoshikoLoader.java index 0934c7c..c8a8708 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/YoshikoLoader.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/YoshikoLoader.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.core; import java.io.File; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/package-info.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/package-info.java index 93b406c..b0e6662 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/package-info.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/package-info.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ /** * */ @@ -5,4 +26,4 @@ * @author Philipp Spohr, Aug 6, 2017 * */ -package de.hhu.ba.yoshikoWrapper.core; \ No newline at end of file +package de.hhu.ba.yoshikoWrapper.core; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoCluster.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoCluster.java index 86021ef..266fe60 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoCluster.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoCluster.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.graphModel; import java.util.ArrayList; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java index 455518d..e641e9f 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.graphModel; import java.util.ArrayList; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java index 3439447..2b1237c 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.graphModel; import java.util.ArrayList; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/package-info.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/package-info.java index 0c6ae2f..a828f2d 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/package-info.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/package-info.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ /** * */ @@ -5,4 +26,4 @@ * @author Philipp Spohr, Aug 27, 2017 * */ -package de.hhu.ba.yoshikoWrapper.graphModel; \ No newline at end of file +package de.hhu.ba.yoshikoWrapper.graphModel; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ClusterView.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ClusterView.java index 3dbb10f..328fa43 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ClusterView.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ClusterView.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.Color; @@ -9,6 +30,7 @@ import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.border.Border; import org.cytoscape.model.CyNode; @@ -18,7 +40,7 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoCluster; @SuppressWarnings("serial") -public class ClusterView extends ComfortPanel { +public class ClusterView extends JPanel { private final JLabel title; private final JLabel clusterSize; @@ -43,7 +65,7 @@ public class ClusterView extends ComfortPanel { title = new JLabel(LocalizationManager.get("cluster")+" "+(c.id+1)); clusterSize = new JLabel(LocalizationManager.get("clusterSize")+" "+c.nodes.size()); - this.addAll(title,clusterSize); + SwingUtil.addAll(this,title,clusterSize); this.add(Box.createVerticalStrut(4)); //Loop over nodes in the cluster and add them to the view diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java index 7d1c83b..a9837aa 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; @@ -6,6 +27,7 @@ import java.awt.FlowLayout; import javax.swing.BoxLayout; import javax.swing.JCheckBox; import javax.swing.JComboBox; +import javax.swing.JPanel; import org.cytoscape.model.CyColumn; import org.cytoscape.model.CyNetwork; @@ -13,7 +35,7 @@ import org.cytoscape.model.CyNetwork; import de.hhu.ba.yoshikoWrapper.core.CyCore; @SuppressWarnings("serial") //will never be serialized -public class ColumnMapper extends ComfortPanel{ +public class ColumnMapper extends JPanel{ //Swing components @@ -25,9 +47,9 @@ public class ColumnMapper extends ComfortPanel{ private final JCheckBox useMappingPerm; private final JCheckBox useMappingForb; - private final ComfortPanel costGroup; - private final ComfortPanel permGroup; - private final ComfortPanel forbGroup; + private final JPanel costGroup; + private final JPanel permGroup; + private final JPanel forbGroup; public ColumnMapper() { this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); @@ -58,20 +80,20 @@ public class ColumnMapper extends ComfortPanel{ new EnableWhenSelectedListener(useMappingForb, forbiddenMapper) ); - costGroup = new ComfortPanel(); - permGroup = new ComfortPanel(); - forbGroup = new ComfortPanel(); + costGroup = new JPanel(); + permGroup = new JPanel(); + forbGroup = new JPanel(); costGroup.setLayout(new FlowLayout()); permGroup.setLayout(new FlowLayout()); forbGroup.setLayout(new FlowLayout()); - costGroup.addAll(useMappingCost,editingCostMapper); - permGroup.addAll(useMappingPerm,permanentMapper); - forbGroup.addAll(useMappingForb,forbiddenMapper); + SwingUtil.addAll(costGroup,useMappingCost,editingCostMapper); + SwingUtil.addAll(permGroup,useMappingPerm,permanentMapper); + SwingUtil.addAll(forbGroup,useMappingForb,forbiddenMapper); - this.addAll(costGroup,permGroup,forbGroup); + SwingUtil.addAll(this,costGroup,permGroup,forbGroup); //Initial call to get table values updateValues(); diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java new file mode 100644 index 0000000..9292f72 --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java @@ -0,0 +1,20 @@ +package de.hhu.ba.yoshikoWrapper.gui; + +import org.cytoscape.util.swing.BasicCollapsiblePanel; + +@SuppressWarnings("serial") +public class ComfortCollapsiblePanel extends BasicCollapsiblePanel { + + public ComfortCollapsiblePanel(String text) { + super(text); + } + + @Override + public void setCollapsed(boolean collapse) { + super.setCollapsed(collapse); + //Force resize of parent + if (getParent() != null) { + getParent().revalidate(); + } + } +} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortPanel.java deleted file mode 100644 index dbe4b53..0000000 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortPanel.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.hhu.ba.yoshikoWrapper.gui; - -import javax.swing.JComponent; -import javax.swing.JPanel; - -/** - * Custom extension of the standard JPanel that provides some comfort functions - * - */ -@SuppressWarnings("serial") -public class ComfortPanel extends JPanel { - - /** - * Comfort Function - * @param components The components that are to be added to this panel - */ - protected void addAll(JComponent... components) { - for (JComponent c : components){ - this.add(c); - } - - } -} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/DoubleInputField.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/DoubleInputField.java index 80e89e2..0b9da46 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/DoubleInputField.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/DoubleInputField.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import javax.swing.JFormattedTextField; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java index e8b6192..0277bcd 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java @@ -1,19 +1,39 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.FlowLayout; -import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JLabel; -import javax.swing.border.Border; -import javax.swing.border.EtchedBorder; +import javax.swing.JPanel; import org.cytoscape.model.CyColumn; +import org.cytoscape.util.swing.BasicCollapsiblePanel; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; @SuppressWarnings("serial") //Will never be serialized -public class EditCostPanel extends ComfortPanel { +public class EditCostPanel extends BasicCollapsiblePanel { //SWING COMPONENTS private ColumnMapper columnMapper; @@ -24,10 +44,11 @@ public class EditCostPanel extends ComfortPanel { private JLabel icLabel; private JLabel dcLabel; - private ComfortPanel groupIC; - private ComfortPanel groupDC; + private JPanel groupIC; + private JPanel groupDC; public EditCostPanel() { + super(LocalizationManager.get("editingCostPanel")); //Define Layout this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); //Initialize components @@ -43,22 +64,20 @@ public class EditCostPanel extends ComfortPanel { icLabel = new JLabel(LocalizationManager.get("defaultInsertion")); dcLabel = new JLabel(LocalizationManager.get("defaultDeletion")); //Group the labels with their text fields - groupIC = new ComfortPanel(); - groupDC = new ComfortPanel(); + groupIC = new JPanel(); + groupDC = new JPanel(); groupIC.setLayout(new FlowLayout()); groupDC.setLayout(new FlowLayout()); - groupIC.addAll(icLabel,icField); - groupDC.addAll(dcLabel,dcField); + SwingUtil.addAll(groupIC,icLabel,icField); + SwingUtil.addAll(groupDC,dcLabel,dcField); - this.addAll(columnMapper,groupIC,groupDC); - - //Decoration/Visual - Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); - border = BorderFactory.createTitledBorder(border,LocalizationManager.get("editingCostPanel")); + SwingUtil.addAll(this,columnMapper,groupIC,groupDC); - this.setBorder(border); + //Decoration/Visual + //Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); + //this.setBorder(border); } //SETTER / GETTER diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EnableWhenSelectedListener.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EnableWhenSelectedListener.java index 1caa526..e021d4d 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EnableWhenSelectedListener.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EnableWhenSelectedListener.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.event.ActionEvent; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/FormatHelper.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/FormatHelper.java index e85294a..27549a3 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/FormatHelper.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/FormatHelper.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.text.DecimalFormat; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/IntegerInputField.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/IntegerInputField.java index 09d40d6..cc6049e 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/IntegerInputField.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/IntegerInputField.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import javax.swing.JFormattedTextField; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcher.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcher.java index 3bed26b..6773d7a 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcher.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcher.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.event.ActionEvent; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibStatusPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibStatusPanel.java index 0cc321a..a24bfdc 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibStatusPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibStatusPanel.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.Color; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibraryPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibraryPanel.java index 5b78ee1..bdb7f21 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibraryPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibraryPanel.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.event.ActionEvent; @@ -10,12 +31,14 @@ import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.border.EtchedBorder; +import org.cytoscape.util.swing.BasicCollapsiblePanel; + import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader; import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface; @SuppressWarnings("serial") -public class LibraryPanel extends ComfortPanel { +public class LibraryPanel extends ComfortCollapsiblePanel { //SYMBOLIC LINKS private LibraryPanel self = this; @@ -26,6 +49,7 @@ public class LibraryPanel extends ComfortPanel { public LibraryPanel() { + super(LocalizationManager.get("libraryPanel")); this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); //SWING COMPONENT INITIALIZATION libStatusPanel = new LibStatusPanel(); @@ -54,9 +78,7 @@ public class LibraryPanel extends ComfortPanel { } }); - this.addAll(libStatusPanel,yoshikoVersionLabel,searchLibButton); - - //Decoration/Visual - this.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); + SwingUtil.addAll(this,libStatusPanel,yoshikoVersionLabel,searchLibButton); + } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java index a328edf..23480f3 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java @@ -1,18 +1,44 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.Component; +import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; +import javax.swing.BoxLayout; +import javax.swing.GroupLayout; +import javax.swing.GroupLayout.Alignment; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; +import javax.swing.JPanel; import org.cytoscape.application.swing.CytoPanelComponent; import org.cytoscape.application.swing.CytoPanelName; @@ -26,11 +52,10 @@ import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader; /**This class describes the Swing Panel that the user interacts with in cytoscape - * @author Philipp Spohr, Aug 6, 2017 * */ @SuppressWarnings("serial") -public class MainPanel extends ComfortPanel implements CytoPanelComponent { +public class MainPanel extends JPanel implements CytoPanelComponent { //SWING COMPONENTS @@ -40,93 +65,87 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { * Swing is a bit special sometimes, so a panel is used to wrap the lang-switcher. * This prevents stretching of the component */ - private final ComfortPanel langSwitcherWrapper; + private final JPanel langSwitcherWrapper; private final LanguageSwitcher langSwitcher; - private final LibraryPanel libraryPanel; - private final EditCostPanel ecPanel; - - private final ReductionRulesChooser reductionRulesChooser; - private final OperationModePanel opModePanel; - private final JCheckBox showAdvancedOptions; + //OTHER + - - private final ArrayList<JComponent> advancedOptions; - /** * Main constructor, creates a new Panel and initializes subcomponents */ public MainPanel() { //SWING INIT - this.setLayout(new FlowLayout()); + //Initialize Swing components header = new YoshikoHeader(); - langSwitcherWrapper = new ComfortPanel(); + langSwitcherWrapper = new JPanel(); langSwitcher = new LanguageSwitcher(); - langSwitcherWrapper.addAll(new JLabel(LocalizationManager.get("switchLanguage")),langSwitcher); + langSwitcherWrapper.add(new JLabel(LocalizationManager.get("switchLanguage"))); + langSwitcherWrapper.add(langSwitcher); langSwitcherWrapper.setLayout(new FlowLayout()); libraryPanel = new LibraryPanel(); + if (!YoshikoLoader.isLibraryLoaded()) { + libraryPanel.setCollapsed(false); + } ecPanel = new EditCostPanel(); + ecPanel.setCollapsed(false); opModePanel = new OperationModePanel(); reductionRulesChooser = new ReductionRulesChooser(); - JButton runButton = new JButton("RUN"); + JButton runButton = new JButton(LocalizationManager.get("run")); runButton.addActionListener(buttonListener); - showAdvancedOptions = new JCheckBox(LocalizationManager.get("showAdvanced")); - showAdvancedOptions.addActionListener(toggleAdvancedOptionsListener); - - this.addAll( + SwingUtil.addAll(this, header, langSwitcherWrapper, - showAdvancedOptions, libraryPanel, ecPanel, reductionRulesChooser, opModePanel, runButton ); + + + //Layout + GroupLayout layout = new GroupLayout(this); - advancedOptions = new ArrayList<JComponent>(); - //Manage all advanced components separately to enable toggling - advancedOptions.addAll( - Arrays.asList( - opModePanel, - reductionRulesChooser - ) + layout.setHorizontalGroup(layout.createParallelGroup() + .addComponent(header) + .addComponent(langSwitcherWrapper) + .addComponent(libraryPanel) + .addComponent(ecPanel) + .addComponent(reductionRulesChooser) + .addComponent(opModePanel) + .addComponent(runButton) ); - showAdvancedOptions(false); + layout.setVerticalGroup(layout.createSequentialGroup() + .addComponent(header) + .addComponent(langSwitcherWrapper) + .addComponent(libraryPanel) + .addComponent(ecPanel) + .addComponent(reductionRulesChooser) + .addComponent(opModePanel) + .addComponent(runButton) + ); + + this.setLayout(layout); this.setVisible(true); } - - private ActionListener toggleAdvancedOptionsListener = new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - showAdvancedOptions(showAdvancedOptions.isSelected()); - } - - }; - - private void showAdvancedOptions(boolean show) { - for (JComponent j : advancedOptions) { - j.setVisible(show); - } - } /** * ButtonListener for the "Run" Button @@ -191,7 +210,7 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { } public Icon getIcon() { - return GraphicsLoader.getLogo(); + return GraphicsLoader.getLogo(16); } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/OperationModePanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/OperationModePanel.java index 133db24..f0fa03c 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/OperationModePanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/OperationModePanel.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.event.ActionEvent; @@ -11,10 +32,12 @@ import javax.swing.JRadioButton; import javax.swing.border.Border; import javax.swing.border.EtchedBorder; +import org.cytoscape.util.swing.BasicCollapsiblePanel; + import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; @SuppressWarnings("serial") -public class OperationModePanel extends ComfortPanel{ +public class OperationModePanel extends ComfortCollapsiblePanel{ private final JRadioButton useHeuristic; private final JRadioButton useILP; private final TimeLimitSetter timeLimitSetter; @@ -25,7 +48,7 @@ public class OperationModePanel extends ComfortPanel{ private final ButtonGroup heuristicGroup; public OperationModePanel() { - + super(LocalizationManager.get("operationMode")); this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); heuristicGroup = new ButtonGroup(); @@ -49,11 +72,8 @@ public class OperationModePanel extends ComfortPanel{ useHeuristic.addActionListener(ilpHeuristicSwitch); - this.addAll(useILP,useHeuristic,solutionNumberChooser,timeLimitSetter,useTriangleCutsBox,usePartitionCutsBox); - - Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); - border = BorderFactory.createTitledBorder(border,LocalizationManager.get("operationMode")); - this.setBorder(border); + SwingUtil.addAll(this,useILP,useHeuristic,solutionNumberChooser,timeLimitSetter,useTriangleCutsBox,usePartitionCutsBox); + } ActionListener ilpHeuristicSwitch = new ActionListener() { diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java index 20b1a2f..074cd34 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java @@ -1,20 +1,39 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; -import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JCheckBox; import javax.swing.JLabel; -import javax.swing.border.Border; -import javax.swing.border.EtchedBorder; +import javax.swing.JPanel; + import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; @SuppressWarnings("serial") -public class ReductionRulesChooser extends ComfortPanel{ +public class ReductionRulesChooser extends ComfortCollapsiblePanel{ private final JCheckBox useCRule; private final JCheckBox useCCRule; @@ -25,10 +44,11 @@ public class ReductionRulesChooser extends ComfortPanel{ private final DoubleInputField multFactor; - private final ComfortPanel SNPanel; + private final JPanel SNPanel; public ReductionRulesChooser() { + super(LocalizationManager.get("redRuleChooserTitle")); this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); //Initialize subcomponents useCRule = new JCheckBox("Use Clique Rule"); @@ -39,11 +59,17 @@ public class ReductionRulesChooser extends ComfortPanel{ useSNRule = new JCheckBox("Use Similar Neighborhood Rule"); multFactor = new DoubleInputField(1, Double.POSITIVE_INFINITY); multFactor.setText("1.0"); - SNPanel = new ComfortPanel(); + SNPanel = new JPanel(); + + SwingUtil.addAll(SNPanel,new JLabel(LocalizationManager.get("multFactor")),multFactor); - SNPanel.addAll(new JLabel(LocalizationManager.get("multFactor")),multFactor); useSNRule.setSelected(true); - + useCRule.setSelected(true); + useCCRule.setSelected(true); + useACRule.setSelected(true); + useHERule.setSelected(true); + usePDRRule.setSelected(true); + useSNRule.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -57,7 +83,7 @@ public class ReductionRulesChooser extends ComfortPanel{ }); - this.addAll( + SwingUtil.addAll(this, useCRule, useCCRule, useACRule, @@ -66,16 +92,6 @@ public class ReductionRulesChooser extends ComfortPanel{ useSNRule, SNPanel ); - //By default all reduction rules should be applied - for (Component c :this.getComponents()) { - if (c instanceof JCheckBox) { - ((JCheckBox)c).setSelected(true); - } - } - - //Create titled border - Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); - this.setBorder(BorderFactory.createTitledBorder(border, LocalizationManager.get("redRuleChooserTitle"))); } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java index b9a0754..a6515d3 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.Component; @@ -9,12 +30,14 @@ import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; +import javax.swing.JPanel; import javax.swing.JTabbedPane; import org.cytoscape.application.swing.CytoPanelComponent; import org.cytoscape.application.swing.CytoPanelName; import de.hhu.ba.yoshikoWrapper.core.CyCore; +import de.hhu.ba.yoshikoWrapper.core.GraphicsLoader; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult; import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution; @@ -23,7 +46,7 @@ import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution; * Conforms to CY 3.5 by being a CytoPanelComponent which is the norm for "result" panels */ @SuppressWarnings("serial")//Will never be serialized -public class ResultPanel extends ComfortPanel implements CytoPanelComponent{ +public class ResultPanel extends JPanel implements CytoPanelComponent{ private final JTabbedPane solutionTabs; private final JLabel costLabel; @@ -56,7 +79,7 @@ public class ResultPanel extends ComfortPanel implements CytoPanelComponent{ }); - addAll(costLabel,solutionTabs,destroyButton); + SwingUtil.addAll(this,costLabel,solutionTabs,destroyButton); } public void deleteSolution() { @@ -106,8 +129,7 @@ public class ResultPanel extends ComfortPanel implements CytoPanelComponent{ @Override public Icon getIcon() { - // TODO Auto-generated method stub - return null; + return GraphicsLoader.getLogo(16); } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionNumberChooser.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionNumberChooser.java index c75006a..6f7e860 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionNumberChooser.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionNumberChooser.java @@ -1,13 +1,35 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; @SuppressWarnings("serial") -public class SolutionNumberChooser extends ComfortPanel { +public class SolutionNumberChooser extends JPanel { private final JSpinner numSolutionsSetter; private final JLabel label; @@ -16,7 +38,7 @@ public class SolutionNumberChooser extends ComfortPanel { numSolutionsSetter = new JSpinner(); numSolutionsSetter.setModel(new SpinnerNumberModel(1,1,Integer.MAX_VALUE,1)); label = new JLabel(LocalizationManager.get("nrSolutions")); - this.addAll(label, numSolutionsSetter); + SwingUtil.addAll(this,label, numSolutionsSetter); } @Override diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionTab.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionTab.java index 8a71ad1..4ef005d 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionTab.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SolutionTab.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.Dimension; @@ -8,6 +29,7 @@ import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JScrollPane; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; @@ -15,10 +37,10 @@ import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoCluster; import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution; @SuppressWarnings("serial") -public class SolutionTab extends ComfortPanel { +public class SolutionTab extends JPanel { private final JScrollPane scrollPane; - private final ComfortPanel scrollPaneContent; + private final JPanel scrollPaneContent; private final JLabel clusterCount; private final JButton createMetaGraph; @@ -30,7 +52,7 @@ public class SolutionTab extends ComfortPanel { this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); //init swing components - scrollPaneContent = new ComfortPanel(); + scrollPaneContent = new JPanel(); scrollPaneContent.setLayout(new BoxLayout(scrollPaneContent,BoxLayout.Y_AXIS)); for (YoshikoCluster c: solution.cluster) { ClusterView clusterView = new ClusterView(c); @@ -52,7 +74,7 @@ public class SolutionTab extends ComfortPanel { } }); - this.addAll(clusterCount,scrollPane,createMetaGraph); + SwingUtil.addAll(this,clusterCount,scrollPane,createMetaGraph); } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SwingUtil.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SwingUtil.java new file mode 100644 index 0000000..2761282 --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/SwingUtil.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ +package de.hhu.ba.yoshikoWrapper.gui; + +import javax.swing.JComponent; +import javax.swing.JPanel; + +public class SwingUtil { + static void addAll(JPanel panel, JComponent ... components) { + for (JComponent c: components) { + panel.add(c); + } + } +} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java index abb2ea2..81afa9b 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java @@ -1,14 +1,36 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JCheckBox; +import javax.swing.JPanel; import de.hhu.ba.yoshikoWrapper.core.LocalizationManager; @SuppressWarnings("serial") -public class TimeLimitSetter extends ComfortPanel{ +public class TimeLimitSetter extends JPanel{ private JCheckBox checkBox; private IntegerInputField numberField; @@ -29,7 +51,7 @@ public class TimeLimitSetter extends ComfortPanel{ } ); //REGISTER COMPONENTS - this.addAll(checkBox,numberField); + SwingUtil.addAll(this,checkBox,numberField); } @Override diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YLibChooser.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YLibChooser.java index 176ec96..3beb2bd 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YLibChooser.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YLibChooser.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import java.io.File; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHeader.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHeader.java index 220ddcf..889a03b 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHeader.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHeader.java @@ -1,13 +1,35 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import javax.swing.BoxLayout; import javax.swing.JLabel; +import javax.swing.JPanel; import de.hhu.ba.yoshikoWrapper.core.GraphicsLoader; @SuppressWarnings("serial") -public class YoshikoHeader extends ComfortPanel { +public class YoshikoHeader extends JPanel { private JLabel logo; private JLabel text; @@ -15,10 +37,10 @@ public class YoshikoHeader extends ComfortPanel { public YoshikoHeader() { this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS)); - logo = new JLabel(GraphicsLoader.getLogo()); - text = new JLabel(GraphicsLoader.getText()); - - this.addAll(logo,text); + logo = new JLabel(GraphicsLoader.getLogo(32)); + text = new JLabel(GraphicsLoader.getText(32)); + + SwingUtil.addAll(this,logo,text); } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java index e30e48b..71ae6ea 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import javax.swing.JDialog; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java index 241ac67..907a23e 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.gui; import javax.swing.event.TreeModelListener; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/package-info.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/package-info.java index af1b4ba..602043f 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/package-info.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/package-info.java @@ -1,4 +1,25 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ /**This package contains all Swing extensions and components (frontend) * */ -package de.hhu.ba.yoshikoWrapper.gui; \ No newline at end of file +package de.hhu.ba.yoshikoWrapper.gui; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/logging/YoshikoLogger.java b/src/main/java/de/hhu/ba/yoshikoWrapper/logging/YoshikoLogger.java index 09df8c9..e208f49 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/logging/YoshikoLogger.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/logging/YoshikoLogger.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ package de.hhu.ba.yoshikoWrapper.logging; import org.slf4j.Logger; diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/logging/package-info.java b/src/main/java/de/hhu/ba/yoshikoWrapper/logging/package-info.java index 4e8e500..92f5ada 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/logging/package-info.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/logging/package-info.java @@ -1,4 +1,25 @@ +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ /** * */ -package de.hhu.ba.yoshikoWrapper.logging; \ No newline at end of file +package de.hhu.ba.yoshikoWrapper.logging; diff --git a/src/main/resources/YoshikoStrings.properties b/src/main/resources/YoshikoStrings.properties index bf621de..1ecfdc7 100644 --- a/src/main/resources/YoshikoStrings.properties +++ b/src/main/resources/YoshikoStrings.properties @@ -1,3 +1,24 @@ +#------------------------------------------------------------------------------- +# Copyright (C) 2017 Philipp Spohr +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +#------------------------------------------------------------------------------- resultsPanelTitle = Yoshiko Results yoshVersion = Yoshiko Version resolveLibPath = Resolve Yoshiko Library Path @@ -24,8 +45,10 @@ createMetaGraph = Create Meta-Graph metaGraph = Meta Graph showAdvanced = Show advanced options editingCostPanel = Editing Costs +libraryPanel = Library defaultInsertion = Default insertion cost: defaultDeletion = Default deletion cost: switchLanguage = Plugin language: icTooltip = This value is used to determine what the algorithm pays when inserting an edge. Existing mappings overwrite this value. A higher value means that the algorithm is less likely to insert edges in order to generate a cluster. -operationMode = Operation Mode \ No newline at end of file +operationMode = Operation Mode +run = Perform Algorithm diff --git a/src/main/resources/YoshikoStrings_de_DE.properties b/src/main/resources/YoshikoStrings_de_DE.properties index 92b28a9..aa89df1 100644 --- a/src/main/resources/YoshikoStrings_de_DE.properties +++ b/src/main/resources/YoshikoStrings_de_DE.properties @@ -1,5 +1,26 @@ +#------------------------------------------------------------------------------- +# Copyright (C) 2017 Philipp Spohr +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +#------------------------------------------------------------------------------- resultsPanelTitle = Yoshiko Ergebnisse resolveLibPath = Yoshiko Library suchen clusterSize = Cluster Gr��e: solution = L�sung -clustersFound = Gefundene Cluster: \ No newline at end of file +clustersFound = Gefundene Cluster: diff --git a/src/main/resources/graphics/YoshikoAlphaLogo.png b/src/main/resources/graphics/YoshikoAlphaLogo.png index 526809e194d1b5ba94fe2c78c0f0d884d409d30d..f13dc35cf24becfe8be3f416884073b36b04f8ea 100644 GIT binary patch delta 3571 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 delta 6839 zcmZ1?bIw$;Gr-TCmrII^fq{Y7)59f*fq|g`ggMw47#I%QC7zzBXv85WXs)6#tHont zw0gainWu|mNX4zUb59mUdzQ8BXVKGpCaGePy~u0TD!uTVeDC+X={4uG@7VjYW8R^> z=!>#_+x}YAaqGXy*na!zx=A6AG=z@WocGY5pw1c;v{HphX2I|DI}6;H9{l|LWTvo9 z#fJw6o7ws0a4_n@ayp_@zAIbsuiYwNz<At->jPueGfAe}rB^N}AJ9GS|HXgK{zvN{ z**`m8sKDgXXdqzZ^5LvNLQ>0p=2;HBE0}zjUio2GSNA+w^pF2ne`VdMm%L_0<vVw? zr8Jlb%vW?2_z<sffZ+v$=mVY#&N&%t{ig<n_A{7E?7y`CQ+?@6HLH>$R<6|tZpFUK zQ}@hcT;0ZC=*&>w#?ZuRu+O1^`GNI=mDj5HE%y4lA9i<asK4_6#rw<t(>2$dW#(O5 zksG!$@9zxx{HG`LTRGP=MsEIn*x2mAZ3D)rHkRWDwkZY(b!4pNpBg0F&v0G8;_Bk* znt@T-7jLZ!+8e#BX1Paw;dAYMw_?(3bzQSmJq$_{m+$AcQ%Ia=vmvQ(!V@0OZ+V9& zZrH-|W9PrhWj>W_J&Sj{z0K>q^jGQV@ANsj_74t5&8so<G!j#4;lH06r^Qo~)YsQ? zQAto?$=14cQ>;F76l^^fyT&>Fv8sOgt1IuPYT9cA?FnB}vD`5^xqEHQy!sjo?`bNY zN-iJvUw>AwZN?*cWHJY1-?dq@eVUdk9k~B$|JnJ4Wy}5kP8M3~?%K7Rm8<;s7xTwQ z!pm>+t}~3yymX{PP{H8*_6clu#>W;b-)p{BwPebw3YG|ge}4aCS9q5{Zkc>n?d<tm zTkPcxDkKz(%BSD0nUJ92)WX6Uv?L<Eey)fn6U(!$ztaU7<)pS3@{}}AySA%bnD=nB zf5ZLP_m^vhyqltFzbg3u9=Erj*?Qe|qpX?PID3yBRrQ!)kl4i1DWvK*hk?<gN-$qL z#lygaadF#6sd<$wGnBVnn|<J~;bZ^RA@w1PzeTp5YG&&_YxdS*x}LDwkB_(St_$#) zAyBV$WQL)v)sYTC6^r-V#o69TKD^$r>e{ZQQ>?yn6jUCxJ|LT1`~O7$|8AL`$0d!v zhew{>mT__6;R%YuY8q2S>-yz%qrSYjxYT>979-OVPyHqq$p?*{;!_%CUE8&GN>&xi zkAjE055ztwexUup`+?zxw}-_&4PtA5@yuj<BEltaSHJtQc8EsM66bb7<==ZZr##OU z=_>!gd3lZ_>x%5P`$N5aZJ74#|KRNQqn_!{%1S#{GkvzArnK0W?$aHDzOzg+E-cIS zd~n=<mdUxAdL6zE$s7e~CXFo<ZJGA8e>m(m_aDcP;s@s&+}(cIOX%qtCLQSvUg|Yj zO;qd02SJ5~X6O2*BYXBXFWJc6b%68olR#HZ(@z{94!6j&mNn}4eAsVfZT~;<TBL-f zmJ9b3&BqS}6dL&D4U;~r9h`MB?t6o{PcesUKf`;mx-%UAy*Iy3eZIct#djV71;05a znX^n@UR>-uTgmm$kB<+X7j_8l&YAJ!&uPE6jk3#5F1B4;`g2!qW4*L*gZMAkLq9Gn z{aN4hp?G@#H5ZS`%beTwV!fuU2zFmsQ1D^4sH)ZZ{wby`JJ@Z^k00FX#!+h?`eXmq z{k|d^HaVC7asA+4{L6lB`-h_sx`oxfr^#3fsW4<*TH-O$D0P;Jq`{2m$BP<E7c*{q z_BC>vAM>A}|3*PeD&Eg{tiL&>{{JJs@_!}{4-_v){JtZg<kBVL+}0yunCNtRjaKL) z7fzug2WLJHoM3wBK3mbUvIVaN4?K|nV!uOFt2}y3UCEh`^HWdOi7I{3@VB$fmycc8 zA(VRPh>*iV34;aB?P|VCE*t_1PAPFJ9TLA&@7DMloE5KN`LXri)>VPG*9HCE;!^+e zbnUnO9uscx3i<r{u<_8TJItm<=hkmX;=Hh=)9K<;?`F2TKV~&=9-VufdilVqmXog} z(>WJB5M+39;pVEK+L%ROo@y?SSM#hBQk%moxXG@n?~cvYjbFK1SnO(8I4>>F&u!uq z{`I9(Sly|`An^*jSV+Ib#ii1(FPxmBk;-r3QU7=Izx40#uiodk%VM&*=wHOj#eaIr zev3yhP8*+-Yvo+u$|<a#XIvqubfn|#-><4!D*{+Jm43F!*|PCuTwdlqT}0DlmchgC zN=fZ}xwp1t1TL3b8+ckwW6itG^R)xJVyBxID06&}{yRHj=BK|xOV9UN{`)lHuz&QH zZO$znLaM&?vt%s8BDc26bURE?u&ddT_Vc50TFyy>gabF$uyAI}*W}AE`!=(sp1QW% zKs$E91p8+e)79qw$>993{#X25qo;GVuDYkssVzM7@v+$2+ymjud^&|hwXUqZt#hyA z;-1G}pZ76yvS^AVALEg{Waxe6M+2kbW~Y{WQl@Kympe2nZ?5mNT;|fLbkt>Pmfzy= z$44gne-XYf{59p%MZpD*$%~zyKGa+uFH`vCrRMVTnPMR~IAXiSVt0LcX`FOq#>Yb( z3T=rk9k$O^Ev_t1-`pc><<dDxC9_{m{QAE2oWiqAGy@(qFwgruC*9_81M@kH#csN{ z7ERrE{_mL<&!EMJ9eyuXsy`t7S0$Ir%-;UlkI&3}atteP)*H`^-2CqLBjpsk>T}i> zEgTmOymOk(a;vv_Z=EP3E39^9#m7n0-)ua-z2<cAyiMorSh==jSTZtwEWLJ_nN9Pt zT%8Te5B0zPc~f8cO?>n?xzFDA!Gnhr9{zfre_^9)>?2N{1%2<=stA0QQz*!*Z{MD2 zoZv87t@anonMvQx6P@N-{eJUV_I@O9!4W~-C^elIYHU0~$;VD|PCntD%Dg3W{dA4D z^9nxQ6m;*GGTFA{!Wt<vZLcf4;*(ayii(_i_v)sMV~0TPuWK4IMk!}*T$A9F3|e}M zk^Rla<BaSw#W}6~1_=T$FM5A_xxDI2()D`9_Ux0ae|-My1TU*u@9=Q5u%BGN#NEQe z!{WUgr$iQRR&wDG+A~S{L2jAjER*at8&9f9=WIBoC24e|<EBF3{C!*hoVQr)F;Pf$ z)}Am<u{W1`c_oe<?^*nR*?-*)U!)$S|4LuwU9RhvQ{F!JxM9+F?U1n5A(@xcPF(o) zDD%>q4fRf4B7#aD4li~olr@Hk@k<&dILx=RttxqOBc^G}V%{^84qRewVdGJ%{k2hW z@ri~;Zl3A080t^PKXdCT+f^ceWyRgq0XH>*mN*?1E9!bEs^&Axgi~n8j_aE~-*;ot zw7i^A&Emng&`*}VoliDsNr#}a*OW)Ezsj$2R=>1ZT+Xnbt5;HgJKKxbbsId3H#<Lf zoct`W_f}e~*AkzZQl_`I%rw|ow`0zBPN5$kZps(6aG0|`QsPQ{y5iI0^aBl6rCK2? zf|j~=3oR}FUw`0$tPu~dM2niwoTX|F-Mi<h?w+msJLANMxVcsP&XshU>b{%DlKABO z6LzcDMR#3(e3+=x=~jPvx&LLIk5VFCLaNz1-(Kvrty;*)Tz(*-(zM~4)zK|d&kR3! zHXJDHi!t!L)E0HLD@?;=mg3>!^j8xUeP>x%lr6s-a-?(fp{}(SLedHz6GSv;rv$BV z=#RUQ(X{j$!|DUI%S=D<pLw4f>^AGmPN~0<OjlL}F87;n7rN@p%gYOs>$$D(UpKg7 zoE>P$YF{@=B{KQ!Gl3;yfi_H^D`k7jet&6pZack_(I+u|UZ(kZ*=3@e_GrE+z9?E! z`0=6hV$I-bIZ~ysmUv!X?mx>U@z8sbT_wz&=k=bKcTDJgbXHi=X^H3U>s<nh?tMn7 zt3Mv=VV078bAj{g3)bnO%u6alxwqG|+1t!jFa0G{Ki#<WTAqZln)|!8DlaZtf3L6l za&G7BOX?F;Jg2;f+3GaMf-ANBKbN-nTiNs@8Wsrx>w-$B_c26e%U`zI;Tt#Aaqs$% z9&>iwJs7)d+rs3OYb~7GYxbmxm%P|xsG$5Vt%XA~$n368v+}c*yeWK+Jra?dJT9-= zSYIyF%Ec$SOV;Y${@3;8|DyhW&6sK8aA(f<*J<C6+drA@A>!9!o9NWc7P{(NyXGtf zH=fo-zO#i?<33Gt-pnPkB5<+)eY1v?lbeoS+ZlI|XXef<rcUW2o%2`QmlVj@|6Ab1 zYHD?1*;@v0*M=U!e{C08<iE^PT65DcUf%BZ&EN&~2U<9jk9~QuFknkY;UUiRXR8i! z$9<Zl6<YP>!((-~p3tzBfs5VG%USE`c~0Us<kJ^8onEK5&S|G%(!ZsaOk1uoF5CKE zI_-P9-uE<FZzjv|*qGO9*H$dNxUFEZ<KbtI_CJ)K_xX-cLKt(%iin5apETXxu!sIR zqgrB6`^RT;Vpe@7$AK-HL09VkIbZ#MR8~bdT2D{W>B@?WOS7Bxo!h>=2wZf8JMKeI zdKmK=w@1f%Rt7Eg7H{1Yw%erpgv3m3Zml@yqP&YNCuZH<UwHHG|7DL4998w1A+oaA zb&l_>DH??*6szBCJa5-7vrnvT?pGl$krNXZx^zmJM%Qgy@$0a8Mtx)U!9yGgw|0i7 zU8%3SxBlUyTOm2q^<=F=R^H-?nX2WwS?m3ZojDg4cwU}1-}8f;(q!&qDK9w^SoWpe z*&kZrzU0{?mx97hp`!;E`p*ycdmA#r?r-_GAD#=JuZga7Jv9H=%4Nbw)t+7Vc5GN< z`TP3wmH+Oisx0%oywrQzo1IR)C+qe1{AHL|C2Ci*?bq?0iyU6|d{7Tx%PUs&Eo1Ft zW0r`gP79we@|>XHcui-edd2lfy@v^$ocbAU4`v&f)%`zUvwc2;kMrKh$4qHE9&Ood zGR33A+_j5G(&=*6XY)yJTaM;P-xAGi5WK9lVBycNQ{!wluJD&I(~IZYF)hj6^NUAl z{YACeEgX^liAOl>>#U76JTLWiO@4CuM^=g<(=Q+EmfzvF<{5!39G_l2YSlhp;K^5a zW(J4gwFqUW7GAR#muh<%5)ZX-MDiLWmE@hd)1(-F;maApg57%=ieCnGeE$9}hSOx0 zns0R7(twl`0*Z%b7%IDcIU{Ab>869HrFTi-r+S{!S1uiAs(sGP=C}|q#l$0N#mFSM zm{BR*l|gg=s-UGlGv#a#wd7iuJ2V(3M=#W75oq>boU4;~=7!p&Cw7e=9__jD^b*7W zqxG%ZZuYr#9&>6@;`4JTyS|9!{=($j+g@GCjj?w=R>d&s-qcG*miLd|kTzcC*sSEb zD&*ybg&r5{v)XiSZkL)k-R1n8|F(-c^UN9lHUH-j({w9-^2jhLFmPj#xBdEC{}i30 z#RHb-RewuK_nu|$+-6be&A|D|V`^WD*wUxbTO3=tc%`2AO_$l}I$^=-E$SQgiby5& z+b;JooS`o7HK8DNfpgD{wSOnO_460cI$rjmI63X)y6JPOkJYacSy_DRdG3?RXBJIJ zInp6zDrJ&WaH9P^`_%b+(|H!8x7>f)HQPz-DXYc(551d@&zr3Dv_pTMqVqhP*K3Ru z61dIp9X}v#u)y{7ysxFNzMYwNP50x^;3aQfY?qf4naLH=$7!f#U9uw3`ucPWbs?Vg zz6QJS2#!q#Og}zq%iH~zum90(?{q|5(P@&3_L>{3qy-}y4p_hbtvc=g@_cS5*B`OF zwyn|joFt;TI?*n~fsZe8)3&4?E+?-Em}M*o;E|l9;5g?;s&wd6p;Oa-R{b`0XlVHK zFj!daRrWqLpBrI!J#^=>WGuP)`Rv7s6W?y1tSGqo`Q9xl>Ynqsf1i`8k(WDC&oN0g zdv`-Rx98Fdmza|(C$B5DJu2!Fn|SAt^u6%zmm(jnE(ChLjP_?}y~NkYCvd@c)+#q% z_I5U2>6(crq9-j;ZAv(F#4PfZNBPS&6Pqq@3d_i>j$Gnw?p2bv_OYT<%E?=+5-atE zQYP6Q6I51mS)+b&d499+q(%{?lM7Z$UaG&|u&Hw0Q=!hC!Ux*@tu2x(Q_Mv)9y}0G z^_sRuG^*pm&TINFS%jwhvDm-f#>#nX?*2nunU}a<3Qbxj>M7z`73p<3wPuctxpUi= z^ss(8VKuWmI(N@$uMtqa_4w*u#?%>wmU+gEGIJ)%|2J?*c=4z&?e?P7ps+@!^f?pN zd>a_*bB!fkL;k(#6JIN6<UPrz=-Kg3{ZsbaIfU(|%Z6yo4xX@&MN(3E)*{z#yIPZ9 zF{^i1=v021Yw~iJV4bVx)o3oJA0PW==Oi{b+&?Her@!J$j^=mC^lM)8?>cU7UT|d7 z^mWmN>WkBA@0YA&6}TOzDXf;mdr``C=C9JcMKevBPt`v^Jt47~x4NW9^84|gXigzt z@$a|RO^$BiH7F_A#ph@4vEh3y;~Xy0Y8?xUZ5qyHci!|(*NT<AUKQH3|HDm>Nn3t0 zw{9{!CFuTU<8jU9XZUu1c&zR-L&oyemE4t*7vzoKmAx#Rr1IO_nZf?wJo$QSpB<8F zchaIBJeVA-@_gl$`s1e!I&MljC_0tdO-OmA()44WVrr(6ptMumXQN|D9Ri+{N?r&k zBs^!FTX0COI;8UNxs1%bsVpH44*6$x++B8eWw5;7WHyN%J7n3Hiz-|&WbE6}eAw!B z&Zd)M(K#CqN@bU^`1H&W-7%&5w5Xo^rrT$I;<6{67gBIJA@t7Kw6lJKSDKhfX3(-f zZVwM{dGV!1cw@Yqq7$$DzNqPW#tsRU%Ub_C{Z0B({P**;?r46&EEbLuA(cay>b9QN z<F7bi`)=b=G0UR$yit2{RQp`sEm^zA_jgSFzcqqC_c<=+6s|r#Vb1R){w?<npZP1z z2wk<7YwD)%=vSB4YOg!a5EG&yQE&gRY(j#m&yHQE^R%7SW~-kUi@sx?-7Xszsp{G# zuyAK8x3q~y;G%@EiH~;jB+l5-E5Bx=+x&n0T;AU0n_QGnPqBP@rLI2Hx_)|?(aqCY zlb@~ZuD-P>^r!e&{nMdhataqp3cUrDT7AvDv)AP2ZFqQQ)qk6x=581Dm~YNJE_1v7 zW{rMjCVK#*OXnoT!&a}qc}Zw8_Qz+$2#MZbn$2oIyJeD`^8vZ&-uH#id*2$$80&p| zIsePc`A0ji?{L#;Vc@#TBc$_gLvcla_3_y`dFwZBo27o9OFQM{zHf*3)r6(qlGbRO z@r6mQ&}HVP(DUN$CLXyB9Jh~d?NrZnpB}KKq@Mfa|A}EnimsEFeJ!}hlKlKi6N|sd ztJD?`MV}p8OIRuv&FiUOR3B7v=JDco8=D(xzw4&G$(prgZ+rT^jLXa1&hn+#9W$Qy zX^JzSX7IMd%WHnD2-w&tCAcp{#4{ymmZ!=V?f=)>&mU7@crBK-#aCIr@QW0ulFJgi zg%WBtLaM*&jeK@|;{M9Lw}i#uSlCm;et!9n8TS7FG#rx-AB^;9KGDKyTXkh+@RAdT z$7KqSD7LRZ`)szs!yaSpfWWVla;MZBn(@){d*CDCz(pz^H|no1OwJdWxLC#Ez&&4^ z#3b#>#ZOLI7P%Kb`fZq`&&;we^soLDhW(-YWo@pXKfmqfJ^p%u8|hZk8Hy|u&Lqy> zHutppb)!AJrLX1`I8At9`90W%b*02Koq1d4oxBlskwMmK+bWM1dF5kV+FLRfUfi)m z#iJ)^Nni4jdF>o~IfV88c>P_qdkYK0j>B`i<o_#PULEw_@U76PbH7Vf9;&>G3OX^l z+~nq&c`wDEv$Edb(4w(9)U`gy#7a8(!~{!oj#Eqa$M4$VFFPk+%_q*n;&grGmc?_n zUHjGYQg^2Ho?U9X1;TcFzObBNowRz*rgOV`c~6|1e&fjPm{3h?Vcm)9`RaW$CK~Iu z-unLV_cHhQ{jyfS?L+O~>ew>!oa<pbVVo=KEtzXz?qLyGw(`oS-ydq%i%sCUTW|F` z=Zwxw-#>O9lWfd6bH4Q{_S(rB{aNS!{<hfKzf7%4<}BRm4MD3`Z?#Lfr8h6t%2eeL z`@KJZpYcDu@gZ-LilostuN6P0aqlXAa;|l0x_V1(#??(N(<iG)8cnfrNj+1Mf8s-A z`?+qRrPJ#d|4aLHQQ*LY1uM4J<z1=2BcNbVufO<0|9!E}Cnq)@WE0gYIompCbKU~^ z{d2jt9p<~8v-u#K_8I~8x|fqmExCHwUNZhZu>C;rgBSaD-G9LLP-}Nt|IBUOo~I)i zew>-`=u(G}s%uy2wY7!I16nw5J52afH#Kzj^c}}-tKaD_V0|O-!~Q{iWBLJ2bDnTF zhNV{=viF{^-xBI0XMg$i1ASj6@#!L(Y&<zWaZ06|Zz(vn@JO27Olg;WS8%*->GPQ6 z0+v65KbjQ}?h9J=`J&K)2@BS4txJr%p1;@PMk-(UO7AVcZ<;I$!y;?5jWqJ7nM^n* z==wnVL4Cu0=JQj6RPz+p)!6I|TD5L#otg3<xy!SD_|J%2U01J}ui$rwtx!ni#N>Ki zS)K2HJ*_Ivt=gZ}^8fy`pJEj!d5><rBeiVGs?4?Xi}o2h{d!!s<A}q`n}S7!kG3hK zn28%i=bAjXY*6}hf9CV-2LYO<-#9*``F@xZzPFHf8LyD9u=<XWBL!wP+J&_rnN;!& z(nZeZ{g?eP-|g@F*zm3I>wDD?`1CxmynJuRGDU~8Hs5FT&FqeQ$E;U#?fj7ni~CXw z|DT)lTYpNBZl1-uzwZ(j%kgi$ChOd!6=0-yS$0{oTKKc4dgmm4AHVASaP-mrU@z01 ztO4dP&t|N3c6(6Xu-lFM&eK1>%H~hEtq5MG_|9I+{(m;-w>u?U>ytSRoLfxl*B?7` z&ou9m`T^%<+xt@1e|%fobE-bA<sbWE#yAGnrB_;_SxP70pR+U5=bcnl%DmXedZ!pp ztv;nwcJ^Y)36tGFw+4Pce`ekKV(x``zof53X)os8HshXE*?obe%QBqWKEl3%&+I37 z#aywvyyltUhV-&O#Sg3>glL*RndWqNnt4|Jo956s-UV^y@#bkB0_J8-Ph^yyRnCvq zJC<=)VoB)ZN1{B8-x`^fe@JbYd9`hCqH&wuQIp9#lKMLKC^{6my(s*g&bjQQdb|1k zGm49&ZX558ZHY7TzgaUi?A<G0zIQsNjCwM>h00&12$mdq^Jm4++O#$iM&+9OXBJnQ zuG(rVT;IMzLdfHO9dpKAw*CJWD;|jM<2Y$_YQ?RVpIY_LA78zyV;9$(K0R`;?q`#; zmjk_cBa&96{wsKPY1M+8e>cC9kMs4Ke<q{x;3n=n;F%np(>?Os|Kv~D?{T_hyS9me Qfq}u()z4*}QvzcX0C!5JCjbBd diff --git a/src/main/resources/graphics/YoshikoAlphaText.png b/src/main/resources/graphics/YoshikoAlphaText.png index eafac8c6726b9433584f17cc41eb11290e4cf5a0..5d9b127ace12d72208f05f4d3633ee0ed0f0472c 100644 GIT binary patch delta 10884 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 Pfq}u()z4*}Q$iB}7<c8% delta 7069 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 diff --git a/src/main/resources/graphics/package-info.java b/src/main/resources/graphics/package-info.java index 0a04afd..d4f1d0f 100644 --- a/src/main/resources/graphics/package-info.java +++ b/src/main/resources/graphics/package-info.java @@ -1 +1,22 @@ -package graphics; \ No newline at end of file +/******************************************************************************* + * Copyright (C) 2017 Philipp Spohr + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + ******************************************************************************/ +package graphics; -- GitLab