/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo 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 3 of the License, or * (at your option) any later version. * * OpenFlexo 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 OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.ie.view.palette; import java.awt.Color; import java.util.Comparator; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.SwingConstants; import org.openflexo.foundation.FlexoModelObject; import org.openflexo.foundation.ie.IEObject; import org.openflexo.foundation.ie.IObject; import org.openflexo.foundation.ie.cl.ComponentDefinition; import org.openflexo.foundation.ie.palette.FlexoIEPalette; import org.openflexo.foundation.ie.palette.FlexoIEPalette.FlexoIEPaletteWidget; import org.openflexo.foundation.ie.widget.IEAbstractWidget; import org.openflexo.foundation.ie.widget.IEWidget; import org.openflexo.foundation.rm.FlexoProject; import org.openflexo.foundation.rm.XMLStorageResourceData; import org.openflexo.foundation.utils.FlexoCSS; import org.openflexo.foundation.validation.ValidationModel; import org.openflexo.foundation.validation.ValidationReport; import org.openflexo.foundation.xml.FlexoComponentBuilder; import org.openflexo.selection.SelectableView; import org.openflexo.swing.ImageUtils; import org.openflexo.view.palette.PaletteElement; /** * Represents a widget in the palette. This widget has no parent nor woComponent * * @author bmangez */ public class IEDSWidget extends IEAbstractWidget implements PaletteElement { public static final String TARGET_CLASS_MODEL = "target.class.model"; private static final Logger logger = Logger.getLogger(IEDSWidget.class.getPackage().getName()); private FlexoIEPalette<? extends FlexoIEPaletteWidget>.FlexoIEPaletteWidget paletteWidget; private boolean resizeScreenshot = true; private transient JLabel _label; public IEDSWidget(FlexoComponentBuilder builder) { super(null); } public IEDSWidget(FlexoIEPalette.FlexoIEPaletteWidget widget, boolean resizeScreenshot, FlexoCSS css) { super(null); this.paletteWidget = widget; this.resizeScreenshot = resizeScreenshot; setName(widget.getName()); _label = new JLabel(); _label.setBackground(Color.WHITE); _label.setHorizontalAlignment(SwingConstants.CENTER); _label.setName(widget.getName()); } @Override public void delete() { if (paletteWidget.canDeleteWidget()) { paletteWidget.deleteWidget(); } else if (logger.isLoggable(Level.WARNING)) { logger.warning("Cannot delete these kind of widgets"); } } // ========================================================================== // ============================= Instance Methods // =========================== // ========================================================================== @Override public IEObject getParent() { return null; } public void refresh(FlexoCSS css) { if (paletteWidget.getScreenshotFile(css) != null && paletteWidget.getScreenshotFile(css).exists()) { _label.setPreferredSize(null); if (resizeScreenshot) { _label.setIcon(ImageUtils.getThumbnail(new ImageIcon(paletteWidget.getScreenshotFile(css).getAbsolutePath()), 85)); } else { _label.setIcon(new ImageIcon(paletteWidget.getScreenshotFile(css).getAbsolutePath())); } } else { if (_label.getIcon() == null) { _label.setText(paletteWidget.getName()); } } } /** * Returns reference to the main object in which this XML-serializable object is contained relating to storing scheme: here it's null * since there is no parent component * * @return null */ @Override public XMLStorageResourceData getXMLResourceData() { return null; } @Override public FlexoProject getProject() { return _project; } private FlexoProject _project; private ComponentDefinition component; public void setProject(FlexoProject prj) { _project = prj; } public JLabel getLabel() { return _label; } public IEWidget getPaletteWidget() { try { FlexoComponentBuilder builder = (FlexoComponentBuilder) component.getWOComponent().instanciateNewBuilder(); return paletteWidget.getWidget(builder); } catch (Exception e) { e.printStackTrace(); return null; } } public IEWidget getWidget(FlexoProject project) { setComponent(null); setProject(project); return getPaletteWidget(); } /** * Return a Vector of embedded IEObjects at this level. NOTE that this is NOT a recursive method * * @return a Vector of IEObject instances */ @Override public Vector<IObject> getEmbeddedIEObjects() { Vector<IObject> answer = new Vector<IObject>(); answer.add(getPaletteWidget()); return answer; } @Override public String getFullyQualifiedName() { return "IE_DS_WIDGET." + getName(); } public static class DSWidgetComparator implements Comparator { @Override public int compare(Object arg0, Object arg1) { if (arg0 instanceof IEDSWidget && arg1 instanceof IEDSWidget) { return ((IEDSWidget) arg0).getName().compareToIgnoreCase(((IEDSWidget) arg1).getName()); } return 0; } } @Override public boolean isEdited() { return false; } @Override public void edit() { logger.warning("Not implemented yet"); } @Override public void closeEdition() { logger.warning("Not implemented yet"); } @Override public void save() { logger.warning("Not implemented yet"); } @Override public FlexoModelObject getObject() { return this; } @Override public SelectableView getView() { logger.warning("Implement me !"); return null; } /** * Overrides getClassNameKey * * @see org.openflexo.foundation.FlexoModelObject#getClassNameKey() */ @Override public String getClassNameKey() { return "ds_widget"; } public IEWidget getWidget(ComponentDefinition aComponent) { setComponent(aComponent); setProject(aComponent.getProject()); return getPaletteWidget(); } public ComponentDefinition getComponent() { return component; } public void setComponent(ComponentDefinition aComponent) { this.component = aComponent; } @Override public boolean isValid() { return true; } @Override public boolean isValid(ValidationModel validationModel) { return true; } @Override public ValidationReport validate() { return null; } @Override public ValidationReport validate(ValidationModel validationModel) { return null; } @Override public void validate(ValidationReport report) { } @Override public void validate(ValidationReport report, ValidationModel validationModel) { } public boolean isTopComponent() { return paletteWidget.isTopComponent(); } public Class<?> getTargetClassModel() { return paletteWidget.getTargetClass(); } }