/* ** This file is part of Filius, a network construction and simulation software. ** ** Originally created at the University of Siegen, Institute "Didactics of ** Informatics and E-Learning" by a students' project group: ** members (2006-2007): ** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding, ** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer ** supervisors: ** Stefan Freischlad (maintainer until 2009), Peer Stechert ** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de> ** and Stefan Freischlad ** Filius is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 2 of the License, or ** (at your option) version 3. ** ** Filius is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See the GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Filius. If not, see <http://www.gnu.org/licenses/>. */ package filius.gui.netzwerksicht; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.util.HashMap; import java.util.regex.Pattern; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.event.MouseInputAdapter; import filius.Main; import filius.gui.JBackgroundPanel; import filius.gui.JMainFrame; import filius.hardware.Hardware; import filius.hardware.knoten.Host; import filius.hardware.knoten.Modem; import filius.hardware.knoten.Switch; import filius.hardware.knoten.Vermittlungsrechner; import filius.rahmenprogramm.EingabenUeberpruefung; public class JKonfiguration extends JBackgroundPanel { private static final long serialVersionUID = 1L; /** * Panel mit den spezifischen Attributen der Komponenten zur Anzeige und * Konfiguration */ private JBackgroundPanel attributPanel; private JLabel minimierenButton; private Hardware hardware; protected static HashMap<Hardware, JKonfiguration> instances = new HashMap<Hardware, JKonfiguration>(); /** unveraenderbare Hoehe des Konfigurations-Panels (konfigPanel) */ private static final int HOEHE = 250; protected JKonfiguration(Hardware hardware) { this.hardware = hardware; initKonfigPanel(); if (hardware != null) { initAttributPanel(); updateAttribute(); } minimieren(); } public static JKonfiguration getInstance(Hardware hardware) { JKonfiguration newInstance; if (!instances.containsKey(hardware)) { if (hardware == null) { newInstance = new JKonfiguration(null); } else if (hardware instanceof Host) { newInstance = new JHostKonfiguration(hardware); } else if (hardware instanceof Modem) { newInstance = new JModemKonfiguration(hardware); } else if (hardware instanceof Switch) { newInstance = new JSwitchKonfiguration(hardware); } else if (hardware instanceof Vermittlungsrechner) { newInstance = new JVermittlungsrechnerKonfiguration(hardware); } else { newInstance = new JKonfiguration(null); } instances.put(hardware, newInstance); } return instances.get(hardware); } public Hardware holeHardware() { return hardware; } /** * Zur Initialisierung des Konfigurations-Panels (konfigPanel), das * ausgeblendet werden kann */ private void initKonfigPanel() { Container c = JMainFrame.getJMainFrame().getContentPane(); final JKonfiguration konfigPanel = this; this.setLayout(null); this.setBounds(0, 0, c.getWidth(), 100); // WAR 300 this.setEnabled(false); this.setBackgroundImage("gfx/allgemein/konfigPanel_hg.png"); this.setPreferredSize(new Dimension(100, HOEHE)); this.setLayout(new BorderLayout()); attributPanel = new JBackgroundPanel(); attributPanel.setBackgroundImage("gfx/allgemein/konfigPanel_hg.png"); attributPanel.setOpaque(false); attributPanel.setVisible(true); attributPanel.setBounds(0, 0, c.getWidth(), 300); this.add(new JScrollPane(attributPanel), BorderLayout.CENTER); minimierenButton = new JLabel(new ImageIcon(getClass().getResource("/gfx/allgemein/minimieren.png"))); minimierenButton.setBounds(0, 0, minimierenButton.getIcon().getIconWidth(), minimierenButton.getIcon() .getIconHeight()); minimierenButton.addMouseListener(new MouseInputAdapter() { public void mousePressed(MouseEvent e) { { if (konfigPanel.getHeight() > 20) { konfigPanel.minimieren(); } else { konfigPanel.maximieren(); } } } }); this.add(minimierenButton, BorderLayout.NORTH); } /** * Zur Initialisierung des Attribut-Panels. Hierin wird die in den * Unterklassen implementierte Methode initAttributEingabeBox() aufgerufen. * */ private void initAttributPanel() { Box hauptBox; Box tempBox; attributPanel.removeAll(); attributPanel.updateUI(); attributPanel.setLayout(new BorderLayout()); hauptBox = Box.createVerticalBox(); hauptBox.add(Box.createHorizontalGlue()); hauptBox.setOpaque(true); hauptBox.setAlignmentX(JComponent.LEFT_ALIGNMENT); hauptBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); initAttributEingabeBox(hauptBox); tempBox = Box.createHorizontalBox(); tempBox.setAlignmentX(JComponent.LEFT_ALIGNMENT); tempBox.setOpaque(true); attributPanel.add(hauptBox); attributPanel.updateUI(); attributPanel.invalidate(); attributPanel.validate(); } // manually re-start initiation process (in case of significant changes) public void reInit() { initAttributPanel(); } public void minimieren() { this.setPreferredSize(new Dimension(this.getWidth(), 20)); minimierenButton.setIcon(new ImageIcon(getClass().getResource("/gfx/allgemein/maximieren.png"))); attributPanel.setVisible(false); this.updateUI(); } // method for conducting specific updates (also in sub-classes) public void updateSettings() { } // method for doing postprocessing prior to being unselected (also in // sub-classes) public void doUnselectAction() { } public void maximieren() { // Main.debug.println("JKonfiguration: Hoehe: " + this.getHeight()); this.setPreferredSize(new Dimension(this.getWidth(), HOEHE)); minimierenButton.setIcon(new ImageIcon(getClass().getResource("/gfx/allgemein/minimieren.png"))); updateSettings(); attributPanel.setVisible(true); this.updateUI(); // Main.debug.println("JKonfiguration: Panel wurde maximiert"); } public boolean isMaximiert() { return attributPanel.isVisible(); } /** * Diese Methode wird vom JAendernButton aufgerufen und muss durch die * Unterklassen fuer die jeweilige Hardware-Komponente spezifisch * implementiert werden. * */ public void aenderungenAnnehmen() { Main.debug.println("INVOKED (" + this.hashCode() + ") " + getClass() + " (JKonfiguration), aenderungenAnnehmen()"); } /** * Mit dieser Methode werden die hardwarespezifischen Eingabe- und * Anzeigekomponenten initialisiert. */ protected void initAttributEingabeBox(Box box) { } /** * Mit dieser Methode wird die Anzeige entsprechend der Attributwerte der * Hardwarekomponente aktualisiert. * */ public void updateAttribute() { } /** * Funktion die waehrend der Eingabe ueberprueft ob die bisherige Eingabe * einen korrekten Wert darstellt. * * @author Johannes Bade & Thomas Gerding * @param pruefRegel * @param feld */ public boolean ueberpruefen(Pattern pruefRegel, JTextField feld) { if (EingabenUeberpruefung.isGueltig(feld.getText(), pruefRegel)) { feld.setForeground(EingabenUeberpruefung.farbeRichtig); JTextField test = new JTextField(); feld.setBorder(test.getBorder()); return true; } else { feld.setForeground(EingabenUeberpruefung.farbeFalsch); feld.setForeground(EingabenUeberpruefung.farbeFalsch); feld.setBorder(BorderFactory.createLineBorder(EingabenUeberpruefung.farbeFalsch, 1)); return false; } } }