/******************************************************************************* * 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.schema2.gui.toolbars.selectcomponent; import hr.fer.zemris.vhdllab.applets.editor.schema2.enums.ECanvasState; import hr.fer.zemris.vhdllab.applets.editor.schema2.enums.EPropertyChange; import hr.fer.zemris.vhdllab.applets.editor.schema2.interfaces.ILocalGuiController; import hr.fer.zemris.vhdllab.applets.editor.schema2.interfaces.ISchemaComponent; import hr.fer.zemris.vhdllab.applets.editor.schema2.interfaces.ISchemaController; import hr.fer.zemris.vhdllab.applets.editor.schema2.interfaces.ISchemaInfo; import hr.fer.zemris.vhdllab.applets.editor.schema2.misc.Caseless; import hr.fer.zemris.vhdllab.applets.schema2.gui.canvas.CanvasToolbarLocalGUIController; import java.awt.BorderLayout; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Map; import javax.swing.AbstractListModel; import javax.swing.DefaultListModel; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * Toolbar za odabir postojecih komponenti koje se mogu iscrtavati * * @author Garfield * */ public class ComponentToAddToolbar extends JPanel implements PropertyChangeListener, ListSelectionListener { private static final long serialVersionUID = -4549154212847889157L; /** * Debug/retail mode */ public static final boolean DEBUG_MODE = true; /** * Schema controller */ private ISchemaController schemaController = null; /** * List box */ JList list = null; /** * Local controller za komunikaciju medju toolbarima */ private ILocalGuiController localController; /** * Constructor * * @param schemaController * schema controller * @param localController * local GUI controller */ public ComponentToAddToolbar(ISchemaController schemaController, ILocalGuiController localController) { if (schemaController == null) { throw new NullPointerException("Schema controller cannot be null!"); } if (localController == null) { throw new NullPointerException( "Local GUI controller cannot be null!"); } this.schemaController = schemaController; this.localController = localController; initToolbar(); } /** * Init Toolbar GUI */ private void initToolbar() { setLayout(new BorderLayout()); initList(); add(new JLabel("Components:"), BorderLayout.NORTH); add(list, BorderLayout.CENTER); } private void initList() { AbstractListModel listModel = null; listModel = getListBoxModel(); list = new JList(listModel); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setLayoutOrientation(JList.VERTICAL); list.addListSelectionListener(this); if (localController.getState() == ECanvasState.ADD_COMPONENT_STATE) { setFirstComponent(); } } /** * Creates a new list box model filled wiht available components * * @return */ private AbstractListModel getListBoxModel() { ISchemaInfo si = schemaController.getSchemaInfo(); Map<Caseless, ISchemaComponent> prototypes = si.getPrototypes(); DefaultListModel listModel = new DefaultListModel(); if (DEBUG_MODE) { System.out.println("ComponentToAddToolbar: numberOfPrototypes=" + prototypes.size()); } for (Map.Entry<Caseless, ISchemaComponent> elem : prototypes.entrySet()) { listModel.addElement(elem.getKey().toString()); if (DEBUG_MODE) { System.out.println("ComponentToAddToolbar: addedComponent=" + elem.getKey().toString()); } } return listModel; } private void setFirstComponent() { if (list.getModel().getSize() > 0) { localController.setComponentToAdd(new Caseless(list.getModel() .getElementAt(0).toString())); list.setSelectedIndex(0); } } public void refreshList() { if (DEBUG_MODE) { System.out .println("ComponentToAddToolbar: propertyChangeEvent-refreshing list"); } remove(list); initList(); add(list, BorderLayout.CENTER); } /* * (non-Javadoc) * * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent evt) { if (DEBUG_MODE) { System.out .println("ComponentToAddToolbar: propertyChangeEvent, eventName=" + evt.getPropertyName()); } if (evt.getPropertyName().equals( CanvasToolbarLocalGUIController.PROPERTY_CHANGE_STATE)) { if (localController.getComponentToAdd() == null) { if (ComponentToAddToolbar.DEBUG_MODE) { System.out .println("ComponentToAddToolbar: settingFirstComponent"); } setFirstComponent(); return; } } else if (evt.getPropertyName().equals( EPropertyChange.PROTOTYPES_CHANGE.toString())) { refreshList(); } } /* * (non-Javadoc) * * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent) */ public void valueChanged(ListSelectionEvent e) { localController.setComponentToAdd(new Caseless(list.getSelectedValue() .toString())); if (ComponentToAddToolbar.DEBUG_MODE) { System.out.println("ComponentToAddToolbar: selectedItem=" + list.getSelectedValue().toString()); } localController.setState(ECanvasState.ADD_COMPONENT_STATE); } }