From b1498964fa5d958ddb924d7c3f55138b71ed90d3 Mon Sep 17 00:00:00 2001
From: Philipp Spohr <spohr.philipp@web.de>
Date: Fri, 1 Sep 2017 15:17:16 +0200
Subject: [PATCH] Work on layout / style / graphics

---
 .../yoshikoWrapper/core/GraphicsLoader.java   |  25 ++++-
 .../gui/ComfortCollapsiblePanel.java          |  20 ----
 .../ba/yoshikoWrapper/gui/EditCostPanel.java  |  33 ++++--
 .../yoshikoWrapper/gui/LanguageSwitcher.java  |   1 +
 .../gui/LanguageSwitcherPanel.java            |  47 ++++++++
 .../ba/yoshikoWrapper/gui/LibStatusPanel.java |   4 +-
 .../ba/yoshikoWrapper/gui/LibraryPanel.java   |  34 ++++--
 .../hhu/ba/yoshikoWrapper/gui/MainPanel.java  | 106 +++++++++++-------
 .../gui/OperationModePanel.java               |  52 +++++++--
 .../gui/ReductionRulesChooser.java            |  39 ++++++-
 .../ba/yoshikoWrapper/gui/ResultPanel.java    |  46 +++++++-
 .../yoshikoWrapper/gui/TimeLimitSetter.java   |  16 +--
 .../ba/yoshikoWrapper/gui/YoshikoHeader.java  |   6 +-
 .../ba/yoshikoWrapper/gui/package-info.java   |   1 +
 src/main/resources/YoshikoStrings.properties  |   2 +-
 .../resources/graphics/YoshikoAlphaLogo.png   | Bin 3620 -> 0 bytes
 .../resources/graphics/YoshikoAlphaText.png   | Bin 10911 -> 0 bytes
 src/main/resources/graphics/YoshikoLogo.png   | Bin 0 -> 4555 bytes
 src/main/resources/graphics/YoshikoSolved.png | Bin 0 -> 18506 bytes
 src/main/resources/graphics/YoshikoText.png   | Bin 0 -> 6526 bytes
 src/main/resources/graphics/flags/deDE.svg    |   5 +
 src/main/resources/graphics/flags/enUS.svg    |  18 +++
 22 files changed, 345 insertions(+), 110 deletions(-)
 delete mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java
 create mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcherPanel.java
 delete mode 100644 src/main/resources/graphics/YoshikoAlphaLogo.png
 delete mode 100644 src/main/resources/graphics/YoshikoAlphaText.png
 create mode 100644 src/main/resources/graphics/YoshikoLogo.png
 create mode 100644 src/main/resources/graphics/YoshikoSolved.png
 create mode 100644 src/main/resources/graphics/YoshikoText.png
 create mode 100644 src/main/resources/graphics/flags/deDE.svg
 create mode 100644 src/main/resources/graphics/flags/enUS.svg

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 3590a50..2edb56c 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/GraphicsLoader.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/GraphicsLoader.java
@@ -21,6 +21,7 @@
  ******************************************************************************/
 package de.hhu.ba.yoshikoWrapper.core;
 
+import java.awt.Color;
 import java.awt.Image;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
@@ -30,15 +31,18 @@ import javax.swing.ImageIcon;
 
 public class GraphicsLoader {
 	private static BufferedImage yoshikoLogo;
+	private static BufferedImage yoshikoLogo_solved;
 	private static BufferedImage yoshikoText;
 	
+	public final static Color yoshikoGreen = new Color(0,128,0);
+	
 	private final static ClassLoader classLoader = GraphicsLoader.class.getClassLoader();
 	
 	public static ImageIcon getLogo(int size) {
 		if (yoshikoLogo == null) {
 			try {
 				yoshikoLogo = ImageIO.read(
-						classLoader.getResource("graphics/YoshikoAlphaLogo.png")
+						classLoader.getResource("graphics/YoshikoLogo.png")
 				);
 			} catch (IOException e) {
 				e.printStackTrace();
@@ -47,16 +51,31 @@ public class GraphicsLoader {
 		return new ImageIcon(yoshikoLogo.getScaledInstance(size, size, Image.SCALE_SMOOTH));
 	}
 	
+	public static ImageIcon getSolvedLogo(int size) {
+		if (yoshikoLogo_solved == null) {
+			try {
+				yoshikoLogo_solved = ImageIO.read(
+						classLoader.getResource("graphics/YoshikoSolved.png")
+				);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return new ImageIcon(yoshikoLogo_solved.getScaledInstance(size, size, Image.SCALE_SMOOTH));
+	}
+	
+	
 	public static ImageIcon getText(int height) {
+		//Default dimension is 258x48
 		if (yoshikoText == null) {
 			try {
 				yoshikoText = ImageIO.read(
-						classLoader.getResource("graphics/YoshikoAlphaText.png")
+						classLoader.getResource("graphics/YoshikoText.png")
 				);
 			} catch (IOException e) {
 				e.printStackTrace();
 			}		
 		}
-		return new ImageIcon(yoshikoText.getScaledInstance(height*4, height, Image.SCALE_SMOOTH));
+		return new ImageIcon(yoshikoText.getScaledInstance((int)(height*258/48), height, Image.SCALE_SMOOTH));
 	}
 }
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java
deleted file mode 100644
index 9292f72..0000000
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ComfortCollapsiblePanel.java
+++ /dev/null
@@ -1,20 +0,0 @@
-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/EditCostPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java
index 0277bcd..8a134bb 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java
@@ -21,11 +21,11 @@
  ******************************************************************************/
 package de.hhu.ba.yoshikoWrapper.gui;
 
-import java.awt.FlowLayout;
 
-import javax.swing.BoxLayout;
+import javax.swing.GroupLayout;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.GroupLayout.Alignment;
 
 import org.cytoscape.model.CyColumn;
 import org.cytoscape.util.swing.BasicCollapsiblePanel;
@@ -49,8 +49,7 @@ public class EditCostPanel extends BasicCollapsiblePanel {
 	
 	public EditCostPanel() {
 		super(LocalizationManager.get("editingCostPanel"));
-		//Define Layout
-		this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
+
 		//Initialize components
 		columnMapper = new ColumnMapper();
 		
@@ -66,18 +65,30 @@ public class EditCostPanel extends BasicCollapsiblePanel {
 		//Group the labels with their text fields
 		groupIC = new JPanel();
 		groupDC = new JPanel();
-		
-		groupIC.setLayout(new FlowLayout());
-		groupDC.setLayout(new FlowLayout());
 
 		SwingUtil.addAll(groupIC,icLabel,icField);
 		SwingUtil.addAll(groupDC,dcLabel,dcField);
 		
 		SwingUtil.addAll(this,columnMapper,groupIC,groupDC);
 
-		//Decoration/Visual
-		//Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
-		//this.setBorder(border);
+		
+		//Layout
+		GroupLayout layout = new GroupLayout(this.getContentPane());
+		
+		layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true)
+				.addComponent(columnMapper)
+				.addComponent(groupIC)
+				.addComponent(groupDC)
+		);
+		
+		layout.setVerticalGroup(layout.createSequentialGroup()
+				.addComponent(columnMapper)
+				.addComponent(groupIC)
+				.addComponent(groupDC)
+		);
+		
+		this.getContentPane().setLayout(layout);
+		
 	}
 	
 	//SETTER / GETTER
@@ -105,7 +116,5 @@ public class EditCostPanel extends BasicCollapsiblePanel {
 	public ColumnMapper getColumnMapper() {
 		return columnMapper;
 	}
-
-
 	
 }
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 6773d7a..942ae8f 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcher.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcher.java
@@ -49,6 +49,7 @@ public class LanguageSwitcher extends JComboBox<Locale>{
 			}
 			
 		});
+				
 	}
 	
 
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcherPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcherPanel.java
new file mode 100644
index 0000000..aa8c5a7
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LanguageSwitcherPanel.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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 org.cytoscape.util.swing.BasicCollapsiblePanel;
+
+import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
+
+@SuppressWarnings("serial")
+public class LanguageSwitcherPanel extends BasicCollapsiblePanel{
+	
+	private final LanguageSwitcher switcher;
+	
+	public LanguageSwitcherPanel() {
+		super(LocalizationManager.get("switchLanguage"));
+		this.getContentPane().setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));
+		//SWING COMPONENTS INIT
+		switcher = new LanguageSwitcher();
+		
+		SwingUtil.addAll(this,
+				switcher
+		);
+	}
+
+}
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 a24bfdc..f1690c0 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibStatusPanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibStatusPanel.java
@@ -25,6 +25,8 @@ import java.awt.Color;
 
 import javax.swing.JLabel;
 
+import de.hhu.ba.yoshikoWrapper.core.GraphicsLoader;
+
 public class LibStatusPanel extends JLabel {
 
 	/**
@@ -35,7 +37,7 @@ public class LibStatusPanel extends JLabel {
 	public void setStyle(boolean libraryLoaded) {
 		if(libraryLoaded) {
 			this.setText("YOSHIKO LIBRARY READY!");
-			this.setForeground(Color.GREEN);
+			this.setForeground(GraphicsLoader.yoshikoGreen);
 		}
 		else {
 			this.setText("YOSHIKO LIBRARY NOT LOADED :(");
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 bdb7f21..6267c16 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibraryPanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/LibraryPanel.java
@@ -24,12 +24,12 @@ package de.hhu.ba.yoshikoWrapper.gui;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
+import javax.swing.GroupLayout;
 import javax.swing.JButton;
 import javax.swing.JFileChooser;
 import javax.swing.JLabel;
-import javax.swing.border.EtchedBorder;
+import javax.swing.GroupLayout.Alignment;
+
 
 import org.cytoscape.util.swing.BasicCollapsiblePanel;
 
@@ -38,7 +38,7 @@ import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
 import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface;
 
 @SuppressWarnings("serial")
-public class LibraryPanel extends ComfortCollapsiblePanel {
+public class LibraryPanel extends BasicCollapsiblePanel {
 	
 	//SYMBOLIC LINKS
 	private LibraryPanel self = this;
@@ -50,7 +50,6 @@ public class LibraryPanel extends ComfortCollapsiblePanel {
 	
 	public LibraryPanel() {
 		super(LocalizationManager.get("libraryPanel"));
-		this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
 		//SWING COMPONENT INITIALIZATION
 		libStatusPanel = new LibStatusPanel();
 		searchLibButton = new JButton(LocalizationManager.get("resolveLibPath"));
@@ -63,7 +62,6 @@ public class LibraryPanel extends ComfortCollapsiblePanel {
 			searchLibButton.setEnabled(false);
 		}
 		
-
 		searchLibButton.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -78,7 +76,29 @@ public class LibraryPanel extends ComfortCollapsiblePanel {
 			}
 		});
 		
-		SwingUtil.addAll(this,libStatusPanel,yoshikoVersionLabel,searchLibButton);
+		SwingUtil.addAll(this,
+				libStatusPanel,
+				yoshikoVersionLabel,
+				searchLibButton
+		);
+		
+		//Layout
+		GroupLayout layout = new GroupLayout(this.getContentPane());
+		
+		layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true)
+				.addComponent(libStatusPanel)
+				.addComponent(yoshikoVersionLabel)
+				.addComponent(searchLibButton)
+		);
+		
+		layout.setVerticalGroup(layout.createSequentialGroup()
+				.addComponent(libStatusPanel)
+				.addComponent(yoshikoVersionLabel)
+				.addComponent(searchLibButton)
+		);
+		
+		
+		this.getContentPane().setLayout(layout);
 
 	}
 }
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 23480f3..cbfa232 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java
@@ -21,22 +21,21 @@
  ******************************************************************************/
 package de.hhu.ba.yoshikoWrapper.gui;
 
+import static javax.swing.GroupLayout.DEFAULT_SIZE;
+import static javax.swing.GroupLayout.PREFERRED_SIZE;
+
 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;
 
@@ -61,19 +60,14 @@ public class MainPanel extends JPanel implements CytoPanelComponent {
 	
 	private final YoshikoHeader header;
 	
-	/**
-	 * Swing is a bit special sometimes, so a panel is used to wrap the lang-switcher.
-	 * This prevents stretching of the component
-	 */
-	private final JPanel langSwitcherWrapper;
-	private final LanguageSwitcher langSwitcher;
+	private final JCheckBox showAdvancedOptions;
+	private final ArrayList<JComponent> advancedOptions;
+
+	private final LanguageSwitcherPanel langPanel;
 	private final LibraryPanel libraryPanel;
 	private final EditCostPanel ecPanel;
 	private final ReductionRulesChooser reductionRulesChooser;
-	private final OperationModePanel opModePanel;
-	
-	//OTHER
-	
+	private final OperationModePanel opModePanel;	
 	
 	/**
 	 * Main constructor, creates a new Panel and initializes subcomponents
@@ -86,19 +80,18 @@ public class MainPanel extends JPanel implements CytoPanelComponent {
 		//Initialize Swing components
 		header = new YoshikoHeader();
 		
-		langSwitcherWrapper = new JPanel();
-		langSwitcher = new LanguageSwitcher();
-		langSwitcherWrapper.add(new JLabel(LocalizationManager.get("switchLanguage")));
-		langSwitcherWrapper.add(langSwitcher);
-		langSwitcherWrapper.setLayout(new FlowLayout());
+		showAdvancedOptions = new JCheckBox(LocalizationManager.get("showAdvanced"));
+		showAdvancedOptions.addActionListener(toggleAdvancedOptionsListener);
+		
+		langPanel = new LanguageSwitcherPanel();
 		
 		libraryPanel = new LibraryPanel();
+		//If no library is loaded yet the obvious panel should be showing up
 		if (!YoshikoLoader.isLibraryLoaded()) {
 			libraryPanel.setCollapsed(false);
 		}
 		
 		ecPanel = new EditCostPanel();
-		ecPanel.setCollapsed(false);
 		
 		opModePanel = new OperationModePanel();
 		
@@ -107,44 +100,79 @@ public class MainPanel extends JPanel implements CytoPanelComponent {
 		JButton runButton = new JButton(LocalizationManager.get("run"));
 		runButton.addActionListener(buttonListener);
 
+		//Add components to main panel
+
 		
 		SwingUtil.addAll(this,
 				header,
-				langSwitcherWrapper,
+				showAdvancedOptions,
+				langPanel,
 				libraryPanel,
 				ecPanel,
 				reductionRulesChooser,
 				opModePanel,
 				runButton
-				);
-	
+		);
+		
+		//Manage all advanced components separately to enable toggling
+		advancedOptions = new ArrayList<JComponent>();
+		advancedOptions.addAll(
+				Arrays.asList(
+						opModePanel,
+						reductionRulesChooser
+						)
+		);
+		
+		showAdvancedOptions(false);
 		
 		//Layout
 		GroupLayout layout = new GroupLayout(this);
+		layout.setAutoCreateGaps(true);
+		layout.setAutoCreateContainerGaps(true);
 		
-		layout.setHorizontalGroup(layout.createParallelGroup()
-				.addComponent(header)
-				.addComponent(langSwitcherWrapper)
-				.addComponent(libraryPanel)
-				.addComponent(ecPanel)
-				.addComponent(reductionRulesChooser)
-				.addComponent(opModePanel)
-				.addComponent(runButton)
+		layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true)
+				.addGap(30)
+				.addComponent(header,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(showAdvancedOptions,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(langPanel,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(libraryPanel,PREFERRED_SIZE, PREFERRED_SIZE, Short.MAX_VALUE)
+				.addComponent(ecPanel,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(reductionRulesChooser,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(opModePanel,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(runButton,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
 		);
 		
 		layout.setVerticalGroup(layout.createSequentialGroup()
-				.addComponent(header)
-				.addComponent(langSwitcherWrapper)
-				.addComponent(libraryPanel)
-				.addComponent(ecPanel)
-				.addComponent(reductionRulesChooser)
-				.addComponent(opModePanel)
-				.addComponent(runButton)	
+				.addComponent(header,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)
+				.addComponent(showAdvancedOptions,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)
+				.addComponent(langPanel,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)
+				.addComponent(libraryPanel,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)
+				.addComponent(ecPanel,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)
+				.addComponent(reductionRulesChooser,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)
+				.addComponent(opModePanel,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)
+				.addComponent(runButton,PREFERRED_SIZE,PREFERRED_SIZE,PREFERRED_SIZE)	
 		);
 		
 		this.setLayout(layout);
+		
+		
+	}
+	
+	private ActionListener toggleAdvancedOptionsListener = new ActionListener() {
 
-		this.setVisible(true);
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			showAdvancedOptions(showAdvancedOptions.isSelected());
+		}
+		
+	};
+	
+	private void showAdvancedOptions(boolean show) {
+		for (JComponent j : advancedOptions) {
+			j.setVisible(show);
+		}
+		setPreferredSize(getPreferredSize()); // <<< Swing at its finest
+		revalidate();
 	}
 
 	/**
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 f0fa03c..e3d38c7 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/OperationModePanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/OperationModePanel.java
@@ -24,20 +24,24 @@ package de.hhu.ba.yoshikoWrapper.gui;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
+import static javax.swing.GroupLayout.DEFAULT_SIZE;
+
 import javax.swing.ButtonGroup;
+import javax.swing.GroupLayout;
 import javax.swing.JCheckBox;
 import javax.swing.JRadioButton;
-import javax.swing.border.Border;
-import javax.swing.border.EtchedBorder;
 
 import org.cytoscape.util.swing.BasicCollapsiblePanel;
 
+import javax.swing.GroupLayout.Alignment;
+
+
 import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
 
 @SuppressWarnings("serial")
-public class OperationModePanel extends ComfortCollapsiblePanel{
+public class OperationModePanel extends BasicCollapsiblePanel{
+	
+	//SWING COMPONENTS
 	private final JRadioButton useHeuristic;
 	private final JRadioButton useILP;
 	private final TimeLimitSetter timeLimitSetter;
@@ -48,8 +52,8 @@ public class OperationModePanel extends ComfortCollapsiblePanel{
 	private final ButtonGroup heuristicGroup;
 
 	public OperationModePanel() {
+
 		super(LocalizationManager.get("operationMode"));
-		this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
 		
 		heuristicGroup = new ButtonGroup();
 		useILP = new JRadioButton("Use Integer Linear Programming");
@@ -61,7 +65,6 @@ public class OperationModePanel extends ComfortCollapsiblePanel{
 		
 		solutionNumberChooser = new SolutionNumberChooser();
 		
-
 		timeLimitSetter = new TimeLimitSetter();
 				
 		useTriangleCutsBox = new JCheckBox("Use Triangle Cuts");
@@ -70,10 +73,41 @@ public class OperationModePanel extends ComfortCollapsiblePanel{
 		//Link time limit option to ILP
 		useILP.addActionListener(ilpHeuristicSwitch);
 		useHeuristic.addActionListener(ilpHeuristicSwitch);
-		
 
-		SwingUtil.addAll(this,useILP,useHeuristic,solutionNumberChooser,timeLimitSetter,useTriangleCutsBox,usePartitionCutsBox);
+		SwingUtil.addAll(this,
+				useILP,
+				useHeuristic,
+				solutionNumberChooser,
+				timeLimitSetter,
+				useTriangleCutsBox,
+				usePartitionCutsBox
+		);
 
+		//Layout
+		GroupLayout layout = new GroupLayout(this.getContentPane());
+		
+		layout.setAutoCreateContainerGaps(true);
+		
+		layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true)
+				.addComponent(useILP, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(useHeuristic, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(solutionNumberChooser, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(timeLimitSetter, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(useTriangleCutsBox, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+				.addComponent(usePartitionCutsBox, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+		);
+		
+		layout.setVerticalGroup(layout.createSequentialGroup()
+				.addComponent(useILP)
+				.addComponent(useHeuristic)
+				.addComponent(solutionNumberChooser)
+				.addComponent(timeLimitSetter)
+				.addComponent(useTriangleCutsBox)
+				.addComponent(usePartitionCutsBox)
+		);
+		
+		this.getContentPane().setLayout(layout);
+		
 	}
 	
 	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 074cd34..00dc45c 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java
@@ -21,19 +21,24 @@
  ******************************************************************************/
 package de.hhu.ba.yoshikoWrapper.gui;
 
+import static javax.swing.GroupLayout.DEFAULT_SIZE;
+
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
 import javax.swing.BoxLayout;
+import javax.swing.GroupLayout;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.GroupLayout.Alignment;
 
+import org.cytoscape.util.swing.BasicCollapsiblePanel;
 
 import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
 
 @SuppressWarnings("serial")
-public class ReductionRulesChooser extends ComfortCollapsiblePanel{
+public class ReductionRulesChooser extends BasicCollapsiblePanel{
 
 	private final JCheckBox useCRule;
 	private final JCheckBox useCCRule;
@@ -48,8 +53,8 @@ public class ReductionRulesChooser extends ComfortCollapsiblePanel{
 
 	
 	public ReductionRulesChooser() {
+		
 		super(LocalizationManager.get("redRuleChooserTitle"));
-		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 		//Initialize subcomponents
 		useCRule = new JCheckBox("Use Clique Rule");
 		useCCRule = new JCheckBox("Use Critical-Clique Rule");
@@ -60,7 +65,7 @@ public class ReductionRulesChooser extends ComfortCollapsiblePanel{
 		multFactor = new DoubleInputField(1, Double.POSITIVE_INFINITY);
 		multFactor.setText("1.0");
 		SNPanel = new JPanel();
-		
+		SNPanel.setLayout(new BoxLayout(SNPanel,BoxLayout.X_AXIS));
 		SwingUtil.addAll(SNPanel,new JLabel(LocalizationManager.get("multFactor")),multFactor);
 		
 		useSNRule.setSelected(true);
@@ -92,6 +97,34 @@ public class ReductionRulesChooser extends ComfortCollapsiblePanel{
 				useSNRule,
 				SNPanel
 				);
+		
+		//Layout
+		GroupLayout layout = new GroupLayout(this.getContentPane());
+		
+		layout.setAutoCreateGaps(true);
+		
+		layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true)
+			.addComponent(useCRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(useCCRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)	
+			.addComponent(useACRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(useHERule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(usePDRRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(useSNRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(SNPanel, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)		
+		);
+		
+		layout.setVerticalGroup(layout.createSequentialGroup()
+			.addComponent(useCRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(useCCRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(useACRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(useHERule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(usePDRRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(useSNRule, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
+			.addComponent(SNPanel, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)						
+		);
+		
+		this.getContentPane().setLayout(layout);
+		
 	}
 	
 	
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 a6515d3..de3ab6f 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java
@@ -25,7 +25,7 @@ import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
-import javax.swing.BoxLayout;
+import javax.swing.GroupLayout;
 import javax.swing.Icon;
 import javax.swing.JButton;
 import javax.swing.JLabel;
@@ -51,21 +51,25 @@ public class ResultPanel extends JPanel implements CytoPanelComponent{
 	private final JTabbedPane solutionTabs;
 	private final JLabel costLabel;
 	private final JButton destroyButton;
+	private final JLabel optimalLabel;
 	
 	private final YoshikoResult result;
 		
 	public ResultPanel(YoshikoResult result) {
 				
 		this.result = result;
-		
-		setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
-		
+				
 		//Init subcomponents
 		solutionTabs = new JTabbedPane();
 		for (YoshikoSolution s : result.solutions) {
 			addSolutionTab(s);
 		}
 
+		
+		//TODO
+		optimalLabel = new JLabel("Optimal");
+		optimalLabel.setForeground(GraphicsLoader.yoshikoGreen);
+		
 		costLabel = new JLabel();
 		setCost(result.editingCost);
 		
@@ -79,7 +83,33 @@ public class ResultPanel extends JPanel implements CytoPanelComponent{
 			
 		});
 		
-		SwingUtil.addAll(this,costLabel,solutionTabs,destroyButton);
+		SwingUtil.addAll(this,optimalLabel,costLabel,solutionTabs,destroyButton);
+		
+		//Layout
+		GroupLayout layout = new GroupLayout(this);
+		
+		layout.setAutoCreateGaps(true);
+		layout.setAutoCreateContainerGaps(true);
+		
+		layout.setVerticalGroup(layout.createSequentialGroup()
+				.addComponent(costLabel)
+				.addComponent(optimalLabel)
+				.addComponent(solutionTabs)
+				.addComponent(destroyButton)
+			);
+			
+			
+
+		
+		layout.setHorizontalGroup(layout.createParallelGroup()
+			.addComponent(costLabel)
+			.addComponent(optimalLabel)
+			.addComponent(solutionTabs)
+			.addComponent(destroyButton)
+		);
+		
+		
+		this.setLayout(layout);
 	}
 	
 	public void deleteSolution() {
@@ -129,7 +159,11 @@ public class ResultPanel extends JPanel implements CytoPanelComponent{
 
 	@Override
 	public Icon getIcon() {
-		return GraphicsLoader.getLogo(16);
+		return GraphicsLoader.getSolvedLogo(16);
+	}
+
+	public YoshikoResult getResult() {
+		return result;
 	}
 
 }
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 81afa9b..576e6de 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/TimeLimitSetter.java
@@ -24,6 +24,7 @@ package de.hhu.ba.yoshikoWrapper.gui;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
+import javax.swing.BoxLayout;
 import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 
@@ -36,20 +37,21 @@ public class TimeLimitSetter extends JPanel{
 	private IntegerInputField numberField;
 	
 	public TimeLimitSetter() {
+		this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
 		checkBox = new JCheckBox(LocalizationManager.get("timeLimitILP"));
 		numberField = new IntegerInputField();
 		numberField.setText("60");
 		numberField.setEnabled(false); //By default time limit is turned off
 		checkBox.addActionListener(
-				new ActionListener() {
+			new ActionListener() {
 
-					@Override
-					public void actionPerformed(ActionEvent e) {
-						numberField.setEnabled(checkBox.isSelected());
-					}
-					
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					numberField.setEnabled(checkBox.isSelected());
 				}
-				);
+				
+			}
+		);
 		//REGISTER COMPONENTS
 		SwingUtil.addAll(this,checkBox,numberField);
 	}
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 889a03b..4684644 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHeader.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHeader.java
@@ -22,6 +22,7 @@
 package de.hhu.ba.yoshikoWrapper.gui;
 
 
+import javax.swing.Box;
 import javax.swing.BoxLayout;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -40,7 +41,8 @@ public class YoshikoHeader extends JPanel {
 		logo = new JLabel(GraphicsLoader.getLogo(32));
 		text = new JLabel(GraphicsLoader.getText(32));
 		
-		SwingUtil.addAll(this,logo,text);
-		
+		this.add(logo);
+		this.add(Box.createHorizontalStrut(4));
+		this.add(text);		
 	}
 }
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 602043f..e0d4d45 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
@@ -19,6 +19,7 @@
  * 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)
  *
  */
diff --git a/src/main/resources/YoshikoStrings.properties b/src/main/resources/YoshikoStrings.properties
index 1ecfdc7..fa80efd 100644
--- a/src/main/resources/YoshikoStrings.properties
+++ b/src/main/resources/YoshikoStrings.properties
@@ -48,7 +48,7 @@ editingCostPanel = Editing Costs
 libraryPanel = Library
 defaultInsertion = Default insertion cost:
 defaultDeletion = Default deletion cost:
-switchLanguage = Plugin language:
+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
 run = Perform Algorithm
diff --git a/src/main/resources/graphics/YoshikoAlphaLogo.png b/src/main/resources/graphics/YoshikoAlphaLogo.png
deleted file mode 100644
index f13dc35cf24becfe8be3f416884073b36b04f8ea..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3620
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
V^g88xbqov)44$rjF6*2UngCRs0>c0R

diff --git a/src/main/resources/graphics/YoshikoAlphaText.png b/src/main/resources/graphics/YoshikoAlphaText.png
deleted file mode 100644
index 5d9b127ace12d72208f05f4d3633ee0ed0f0472c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10911
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

diff --git a/src/main/resources/graphics/YoshikoLogo.png b/src/main/resources/graphics/YoshikoLogo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f71daaa2bec19e27195c3d5d229a50e607761bf0
GIT binary patch
literal 4555
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
Qfq{X+)78&qol`;+09fA2sQ>@~

literal 0
HcmV?d00001

diff --git a/src/main/resources/graphics/YoshikoSolved.png b/src/main/resources/graphics/YoshikoSolved.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1631b52749f39c677cc1db46262a9f1227a8090
GIT binary patch
literal 18506
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
Z5&iJUx0z4RFfcGMc)I$ztaD0e0svW1MsNTC

literal 0
HcmV?d00001

diff --git a/src/main/resources/graphics/YoshikoText.png b/src/main/resources/graphics/YoshikoText.png
new file mode 100644
index 0000000000000000000000000000000000000000..b6b0025ed2f9031f564425f0100530ba6e12f083
GIT binary patch
literal 6526
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
Ax&QzG

literal 0
HcmV?d00001

diff --git a/src/main/resources/graphics/flags/deDE.svg b/src/main/resources/graphics/flags/deDE.svg
new file mode 100644
index 0000000..7af71b9
--- /dev/null
+++ b/src/main/resources/graphics/flags/deDE.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="512" width="512" viewBox="0 0 512 512">
+  <path fill="#ffce00" d="M0 341.338h512.005v170.67H0z"/>
+  <path d="M0 0h512.005v170.67H0z"/>
+  <path fill="#d00" d="M0 170.67h512.005v170.668H0z"/>
+</svg>
diff --git a/src/main/resources/graphics/flags/enUS.svg b/src/main/resources/graphics/flags/enUS.svg
new file mode 100644
index 0000000..15d50af
--- /dev/null
+++ b/src/main/resources/graphics/flags/enUS.svg
@@ -0,0 +1,18 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="512" width="512" viewBox="0 0 512 512">
+  <g fill-rule="evenodd" transform="scale(3.9385)">
+    <g stroke-width="1pt">
+      <path d="M0 0h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0z" fill="#bd3d44"/>
+      <path d="M0 10h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0zm0 20h247v10H0z" fill="#fff"/>
+    </g>
+    <path fill="#192f5d" d="M0 0h98.8v70H0z"/>
+    <g fill="#fff">
+      <path d="M8.233 2.996l.9 2.767h2.908l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766L24.7 8.53l-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766L74.1 8.53l-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zM16.467 9.996l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zM8.233 16.996l.9 2.767h2.908l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zM16.467 23.996l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zM8.233 30.996l.9 2.767h2.908l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zM16.467 37.996l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909z"/>
+      <g>
+        <path d="M8.233 44.996l.9 2.767h2.908l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zM16.467 51.996l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909z"/>
+      </g>
+      <g>
+        <path d="M8.233 58.996l.9 2.767h2.908l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.353 1.71.898 2.766-2.353-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.466 0l.899 2.767h2.909l-2.353 1.71.899 2.766-2.354-1.71-2.353 1.71.899-2.766-2.354-1.71h2.91zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909zm16.467 0l.899 2.767h2.909l-2.354 1.71.9 2.766-2.354-1.71-2.353 1.71.898-2.766-2.353-1.71h2.909z"/>
+      </g>
+    </g>
+  </g>
+</svg>
-- 
GitLab