/**
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* 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.
*/
/**
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* 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.
*/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.kevoree.tools.ui.framework.elements;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Collection;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JViewport;
import javax.swing.Scrollable;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.painter.CompoundPainter;
import org.jdesktop.swingx.painter.ImagePainter;
import org.jdesktop.swingx.painter.MattePainter;
import org.kevoree.tools.ui.framework.BufferedElement;
import org.kevoree.tools.ui.framework.listener.DragDropLayout;
import org.kevoree.tools.ui.framework.listener.InstanceDragSourceListener;
/**
* @author ffouquet
*/
public class ModelPanel extends JLayeredPane implements BufferedElement {
// private JLayeredPane layeredPane;
private BindingPanel bindingPanel;
private JPanel dragPanel;
private JXPanel nodePanel;
public void update() {
bindingPanel.repaint();
bindingPanel.revalidate();
nodePanel.repaint();
nodePanel.revalidate();
}
public ModelPanel() {
nodePanel = new JXPanel();
nodePanel.setLayout(new DragDropLayout());
dragPanel = new JPanel();
dragPanel.setOpaque(false);
bindingPanel = new BindingPanel();
//layeredPane = new JLayeredPane();
setOpaque(false);
add(nodePanel, JLayeredPane.DEFAULT_LAYER);
add(dragPanel, JLayeredPane.DRAG_LAYER);
add(bindingPanel, JLayeredPane.PALETTE_LAYER);
GradientPaint grad = new GradientPaint(new Point(0, 0), new Color(63, 128, 187), new Point(0, getHeight()), new Color(51, 51, 51));
MattePainter matte = new MattePainter(grad);
CompoundPainter p = new CompoundPainter(matte);
ImagePainter background = new ImagePainter();
background.setHorizontalRepeat(true);
background.setVerticalRepeat(true);
try {
background.setImage(ImageIO.read(this.getClass().getClassLoader().getResource("TT16s.jpg")));
nodePanel.setBackgroundPainter(background);
} catch (IOException e) {
nodePanel.setBackgroundPainter(p);
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
nodePanel.setBounds(0, 0, getWidth(), getHeight());
bindingPanel.setBounds(0, 0, getWidth(), getHeight());
dragPanel.setBounds(0, 0, getWidth(), getHeight());
repaint();
revalidate();
}
});
}
public void addNode(JPanel p) {
nodePanel.add(p);
p.setBounds(50, 50, (int) p.getLayout().preferredLayoutSize(p).getWidth(), (int) p.getLayout().preferredLayoutSize(p).getHeight());
InstanceDragSourceListener listener = new InstanceDragSourceListener(p);
repaint();
revalidate();
}
public void addHub(JPanel p) {
nodePanel.add(p);
p.setBounds(50, 50, (int) p.getPreferredSize().getWidth(), (int) p.getPreferredSize().getHeight());
InstanceDragSourceListener listener = new InstanceDragSourceListener(p);
repaint();
revalidate();
}
public void addGroup(JPanel p) {
nodePanel.add(p);
p.setBounds(50, 50, (int) p.getPreferredSize().getWidth(), (int) p.getPreferredSize().getHeight());
InstanceDragSourceListener listener = new InstanceDragSourceListener(p);
repaint();
revalidate();
}
public void addBinding(Binding b) {
bindingPanel.addBinding(b);
repaint();
revalidate();
}
public void removeInstance(JPanel panel) {
nodePanel.remove(panel);
repaint();
revalidate();
}
public void removeBinding(Binding b) {
bindingPanel.removeBinding(b);
}
public Collection<Binding> getBindings() {
return bindingPanel.getBindings();
}
private JPanel flyPanel = null;
public void setFlightObject(JPanel fobject) {
dragPanel.add(fobject);
flyPanel = fobject;
}
public void unsetFlightObject(JPanel fobject) {
dragPanel.remove(fobject);
flyPanel = null;
}
public JPanel getFlightObject(){
return flyPanel;
}
@Override
public Dimension getPreferredSize() {
Dimension parentsize = this.getParent().getSize();
Dimension preferedDim = new Dimension(0, 0);
for (Component child : nodePanel.getComponents()) {
// preferedDim.width = Math.max(child.getMinimumSize().width, preferedDim.width);
preferedDim.height = Math.max(child.getLocation().y + child.getSize().height, preferedDim.height);
preferedDim.width = Math.max(child.getLocation().x + child.getSize().width, preferedDim.width);
}
return preferedDim;
}
public void clear() {
bindingPanel.clear();
nodePanel.removeAll();
}
@Override
public void clearBuffer() {
for(Component c : getComponents()){
if(c instanceof BufferedElement){
((BufferedElement)c).clearBuffer();
}
}
}
}