/******************************************************************************* * See the NOTICE file distributed with this work for additional information * regarding copyright ownership. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package hr.fer.zemris.vhdllab.applets.simulations; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Insets; import java.awt.LayoutManager; /** * Custom layout manager * * Manager je namjenski, pretpostavlja sve potrebne komponente i nece raditi ako * se izostave neke od komponenata. Iskljucico je napravljen zbog * jednostavnosti raspodjele komponenata po containeru. * * @author Boris Ozegovic */ class WaveLayoutManager implements LayoutManager { private static final String TOOLBAR = "toolbar"; // private final String TEXTFIELD = "textField"; private static final String CURSOR_PANEL = "cursorPanel"; private static final String SEARCH = "search"; private static final String INTERVAL = "interval"; private static final String SIGNAL_NAMES = "signalNames"; private static final String SIGNAL_NAMES_SCROLLBAR = "signalNamesScrollbar"; private static final String DIVIDER1 = "divider1"; private static final String DIVIDER2 = "divider2"; private static final String SIGNAL_VALUES = "signalValues"; private static final String VALUES_SCROLLBAR = "valuesScrollbar"; private static final String WAVES = "waves"; private static final String SCALE = "scale"; private static final String VERTICAL_SCROLLBAR = "verticalScrollbar"; private static final String HORIZONTAL_SCROLLBAR = "horizontalScrollbar"; private Component toolbar; //private Component textField; private Component cursorPanel; private Component search; private Component interval; private Component signalNames; private Component divider1; private Component divider2; private Component signalNamesScrollbar; private Component signalValues; private Component valuesScrollbar; private Component waves; private Component scale; private Component verticalScrollbar; private Component horizontalScrollbar; public void addLayoutComponent (String name, Component component) { if (TOOLBAR.equals(name)) { toolbar = component; } //else if (TEXTFIELD.equals(name)) //{ // textField = component; //} else if (CURSOR_PANEL.equals(name)) { cursorPanel = component; } else if (SEARCH.equals(name)) { search = component; } else if (INTERVAL.equals(name)) { interval = component; } else if (SIGNAL_NAMES.equals(name)) { signalNames = component; } else if (DIVIDER1.equals(name)) { divider1 = component; } else if (DIVIDER2.equals(name)) { divider2 = component; } else if (SIGNAL_NAMES_SCROLLBAR.equals(name)) { signalNamesScrollbar = component; } else if (SIGNAL_VALUES.equals(name)) { signalValues = component; } else if (VALUES_SCROLLBAR.equals(name)) { valuesScrollbar = component; } else if (WAVES.equals(name)) { waves = component; } else if (SCALE.equals(name)) { scale = component; } else if (VERTICAL_SCROLLBAR.equals(name)) { verticalScrollbar = component; } else if (HORIZONTAL_SCROLLBAR.equals(name)) { horizontalScrollbar = component; } else { throw new IllegalArgumentException("cannot add to layout: unknown constraint: " + name); } } public void removeLayoutComponent (Component component) { if (component == toolbar) { toolbar = null; } //else if (component == textField) //{ // textField = null; //} else if (component == cursorPanel) { cursorPanel = null; } else if (component == search) { search = null; } else if (component == interval) { interval = null; } else if (component == signalNames) { signalNames = null; } else if (component == divider1) { divider1 = null; } else if (component == divider2) { divider2 = null; } else if (component == signalNamesScrollbar) { signalNamesScrollbar = null; } else if (component == signalValues) { signalValues = null; } else if (component == valuesScrollbar) { valuesScrollbar = null; } else if (component == waves) { waves = null; } else if (component == scale) { scale = null; } else if (component == verticalScrollbar) { verticalScrollbar = null; } else if (component == horizontalScrollbar) { horizontalScrollbar = null; } } public Dimension minimumLayoutSize (Container parent) { return preferredLayoutSize (parent); } public Dimension preferredLayoutSize(Container parent) { Dimension dim = new Dimension(0, 0); int width = 0; int height = 0; if ((signalNames != null) && signalNames.isVisible()) { width = signalNames.getPreferredSize().width; height = signalNames.getPreferredSize().height; } if ((waves != null) && waves.isVisible()) { width += waves.getPreferredSize().width; height += waves.getPreferredSize().height; } if ((verticalScrollbar != null) && verticalScrollbar.isVisible()) { width += verticalScrollbar.getPreferredSize().width; } if ((toolbar != null) && toolbar.isVisible()) { height += toolbar.getPreferredSize().height; } if ((horizontalScrollbar != null) && horizontalScrollbar.isVisible()) { height += horizontalScrollbar.getPreferredSize().height; } if ((scale != null) && scale.isVisible()) { height += scale.getPreferredSize().height; } dim.width = width; dim.height = height + 10; Insets insets = parent.getInsets(); dim.width += insets.left + insets.right; dim.height += insets.top + insets.bottom; return dim; } public void layoutContainer(Container target) { Insets insets = target.getInsets(); int north = insets.top; int south = target.getSize().height - insets.bottom; int west = insets.left; int east = target.getSize().width - insets.right; int width; int height; /* prilikom resizea ne mijenjaju svoju duljinu */ int widthToolbar = toolbar.getPreferredSize().width; int heightCursorPanel = cursorPanel.getPreferredSize().height; int widthDivider1 = divider1.getPreferredSize().width; int widthDivider2 = divider2.getPreferredSize().width; /* * ako bi imena signala bila predugacka tada se korisno fiksno 450 piksela * duljine i to je maksimalna moguca vrijednost. Zato maximumSize() */ int widthSignalNames = signalNames.getMaximumSize().width; int widthSignalValues = signalValues.getMaximumSize().width; int widthVerticalScrollbar = verticalScrollbar.getPreferredSize().width; int heightToolbar = toolbar.getPreferredSize().height; int heightScale = scale.getPreferredSize().height; int heightHorizontalScrollbar = horizontalScrollbar.getPreferredSize().height; if ((toolbar != null) && toolbar.isVisible()) { width = toolbar.getPreferredSize().width; height = toolbar.getPreferredSize().height; toolbar.setSize(width, height); toolbar.setBounds ( west, north + 10, width, height ); } //if ((textField != null) && textField.isVisible()) //{ // width = textField.getPreferredSize().width; // height = textField.getPreferredSize().height; // textField.setSize(width, height); // textField.setBounds // ( // west + widthToolbar + 50, // north + 10, // width, // height // ); //} if ((interval != null) && interval.isVisible()) { width = interval.getPreferredSize().width; height = interval.getPreferredSize().height; interval.setSize(width, height); interval.setBounds ( west + widthToolbar + 5 + /*textField.getPreferredSize().width*/ + 20, north + 10, width, height ); } if ((search != null) && search.isVisible()) { width = search.getPreferredSize().width; height = search.getPreferredSize().height; search.setSize(width, height); search.setBounds ( west + widthToolbar + 5 + /*textField.getPreferredSize().width*/ + 20 + 20 + interval.getPreferredSize().width, north + 10, width, height ); } if ((cursorPanel != null) && cursorPanel.isVisible()) { width = cursorPanel.getPreferredSize().width; height = cursorPanel.getPreferredSize().height; cursorPanel.setSize(width, height); cursorPanel.setBounds ( west + widthSignalNames + widthSignalValues + widthDivider2 + widthDivider1, north + 10 + heightToolbar + 10, east - widthVerticalScrollbar - (west + widthSignalNames + widthSignalValues + widthDivider1 + widthDivider2), height ); } if ((signalNames != null) && signalNames.isVisible()) { width = signalNames.getMaximumSize().width; height = signalNames.getPreferredSize().height; signalNames.setSize(width, height); signalNames.setBounds ( west, north + 10 + heightToolbar + 10 + heightCursorPanel, width, south - (heightHorizontalScrollbar + heightScale) - (north + 10 + heightToolbar + 10 + heightCursorPanel) ); } if ((divider1 != null) && divider1.isVisible()) { width = divider1.getPreferredSize().width; height = divider1.getPreferredSize().height; divider1.setSize(width, height); divider1.setBounds ( west + widthSignalNames, north + 10 + heightToolbar + 10 + heightCursorPanel, width, south - (heightHorizontalScrollbar + heightScale) - (north + 10 + heightToolbar + 10 + heightCursorPanel) ); } if ((signalNamesScrollbar != null) && signalNamesScrollbar.isVisible()) { width = signalNamesScrollbar.getPreferredSize().width; height = signalNamesScrollbar.getPreferredSize().height; signalNamesScrollbar.setSize(width, height); signalNamesScrollbar.setBounds ( west, south - heightHorizontalScrollbar - heightScale, widthSignalNames + widthDivider1, height ); } if ((signalValues != null) && signalValues.isVisible()) { width = signalValues.getMaximumSize().width; height = signalValues.getPreferredSize().height; signalValues.setSize(width, height); signalValues.setBounds ( west + widthSignalNames + widthDivider1, north + 10 + heightToolbar + 10 + heightCursorPanel, width, south - (heightHorizontalScrollbar + heightScale) - (north + 10 + heightToolbar + 10 + heightCursorPanel) ); } if ((divider2 != null) && divider2.isVisible()) { width = divider2.getPreferredSize().width; height = divider2.getPreferredSize().height; divider2.setSize(width, height); divider2.setBounds ( west + widthSignalNames + widthSignalValues + widthDivider1, north + 10 + heightToolbar + 10 + heightCursorPanel, width, south - (heightHorizontalScrollbar + heightScale) - (north + 10 + heightToolbar + 10 + heightCursorPanel) ); } if ((valuesScrollbar != null) && valuesScrollbar.isVisible()) { width = valuesScrollbar.getPreferredSize().width; height = valuesScrollbar.getPreferredSize().height; valuesScrollbar.setSize(width, height); valuesScrollbar.setBounds ( west + widthSignalNames + widthDivider1, south - heightHorizontalScrollbar - heightScale, widthSignalValues, height ); } if ((waves != null) && waves.isVisible()) { width = waves.getPreferredSize().width; height = waves.getPreferredSize().height; waves.setSize(width, height); waves.setBounds ( west + widthSignalNames + widthSignalValues + widthDivider1 + widthDivider2, north + 10 + heightToolbar + 10 + heightCursorPanel, east - widthVerticalScrollbar - (west + widthSignalNames + widthSignalValues + widthDivider1 + widthDivider2), south - (heightHorizontalScrollbar + heightScale) - (north + 10 + heightToolbar + 10 + heightCursorPanel) ); } if ((scale != null) && scale.isVisible()) { width = scale.getPreferredSize().width; height = scale.getPreferredSize().height; scale.setSize(width, height); scale.setBounds ( west + widthSignalNames + widthSignalValues + widthDivider1 + widthDivider2, south - heightHorizontalScrollbar - heightScale, east - widthVerticalScrollbar - (west + widthSignalNames + widthSignalValues + widthDivider1 + widthDivider2), heightScale ); } if ((verticalScrollbar != null) && verticalScrollbar.isVisible()) { width = verticalScrollbar.getPreferredSize().width; height = verticalScrollbar.getPreferredSize().height; verticalScrollbar.setSize(width, height); verticalScrollbar.setBounds ( east - width, north + 10 + heightToolbar + 10 + heightCursorPanel, width, south - (heightHorizontalScrollbar + heightScale) - (north + 10 + heightToolbar + 10 + heightCursorPanel) ); } if ((horizontalScrollbar != null) && horizontalScrollbar.isVisible()) { width = horizontalScrollbar.getPreferredSize().width; height = horizontalScrollbar.getPreferredSize().height; horizontalScrollbar.setSize(width, height); horizontalScrollbar.setBounds ( west + widthSignalNames + widthSignalValues + widthDivider1 + widthDivider2, south - height, east - widthVerticalScrollbar - (west + widthSignalNames + widthSignalValues + widthDivider1 + widthDivider2), height ); } } }