/**
* 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.
*/
/* $Id: Art2EditorPanel.java 13865 2010-12-14 17:13:37Z francoisfouquet $
* License : EPL
* Copyright : IRISA / INRIA / Universite de Rennes 1 */
package org.kevoree.tools.ui.editor.panel;
import com.explodingpixels.macwidgets.IAppWidgetFactory;
import com.explodingpixels.macwidgets.SourceListItem;
import com.explodingpixels.macwidgets.SourceListSelectionListener;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.painter.CompoundPainter;
import org.jdesktop.swingx.painter.MattePainter;
import org.kevoree.MBinding;
import org.kevoree.tools.ui.editor.KevoreeUIKernel;
import org.kevoree.tools.ui.editor.TypeDefinitionSourceList;
import org.kevoree.tools.ui.editor.command.KevScriptCommand;
import org.kevoree.tools.ui.editor.property.BindingPropertyEditor;
import org.kevoree.tools.ui.editor.property.GroupBindingPropertyEditor;
import org.kevoree.tools.ui.editor.property.InstancePropertyEditor;
import org.kevoree.tools.ui.editor.property.NodePropertyEditor;
import org.kevoree.tools.ui.editor.widget.TempGroupBinding;
import org.kevoree.tools.ui.framework.elements.*;
import scala.io.Source;
import javax.swing.*;
import java.awt.*;
/**
* @author ffouquet
*/
public class KevoreeEditorPanel extends JPanel {
private KevoreeUIKernel kernel = new KevoreeUIKernel();
public KevoreeUIKernel getKernel() {
return kernel;
}
public void load(String file){
if(file.endsWith("kevs")){
KevScriptCommand cmd = new KevScriptCommand();
cmd.setKernel(kernel);
cmd.execute(Source.fromFile(file, "UTF-8").getLines().mkString("\n"));
}
}
private SourceListSelectionListener previousListener = new SourceListSelectionListener() {
@Override
public void sourceListItemSelected(SourceListItem sourceListItem) {
int divider = splitPane.getDividerLocation() ;
splitPane.setDividerLocation(divider);
}
};
public void setTypeEditor() {
editableModelPanel.undisplayProperties();
palette.sourceList().addSourceListSelectionListener(previousListener);
}
public void unsetTypeEditor() {
palette.sourceList().removeSourceListSelectionListener(previousListener);
splitPane.setBottomComponent(editableModelPanel);
}
private JXPanel leftpanel = new JXPanel();
//private JXPanel southpanel = new JXPanel();
private TypeDefinitionSourceList palette = null;
private EditableModelPanel editableModelPanel = null;
private JSplitPane splitPane = null;
public JSplitPane getSplitPane(){
return splitPane;
}
public TypeDefinitionSourceList getPalette() {
return palette;
}
//private CommandPanel commandPanel;
public KevoreeEditorPanel() {
kernel.setEditorPanel(this);
leftpanel.setOpaque(false);
//southpanel.setOpaque(false);
leftpanel.setLayout(new BorderLayout());
GradientPaint grad = new GradientPaint(new Point(0, 0), new Color(60, 60, 60), new Point(0, getHeight()), new Color(51, 51, 51));
MattePainter matte = new MattePainter(grad);
CompoundPainter p = new CompoundPainter(matte);
leftpanel.setBackgroundPainter(p);
this.setLayout(new BorderLayout());
JScrollPane scrollpane = new JScrollPane();
IAppWidgetFactory.makeIAppScrollPane(scrollpane);
editableModelPanel = new EditableModelPanel(scrollpane);
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
leftpanel, editableModelPanel);
palette = new TypeDefinitionSourceList(splitPane, kernel);
// splitPane.setResizeWeight(1);
splitPane.setOneTouchExpandable(true);
splitPane.setContinuousLayout(true);
splitPane.setDividerSize(0);
splitPane.setDividerLocation(180);
splitPane.setResizeWeight(0.0);
splitPane.setBorder(null);
scrollpane.setOpaque(false);
//scrollpane.setPreferredSize(new Dimension(200, 400));
//scrollpane.setLayout(new ScrollPaneLayout());
scrollpane.getViewport().add(kernel.getModelPanel());
//scrollpane.setAutoscrolls(true);
// this.add(editableModelPanel, BorderLayout.CENTER);
/* LEFT BAR GENERATION */
//commandPanel = new CommandPanel(kernel);
//TrashPanel trash = new TrashPanel();
leftpanel.add(palette.getComponent(), BorderLayout.CENTER);
//leftpanel.add(commandPanel, BorderLayout.NORTH);
//leftpanel.add(trash);
// this.add(leftpanel, BorderLayout.WEST);
//this.add(southpanel, BorderLayout.SOUTH);
//southpanel.setVisible(false);
/*
List children =
Arrays.asList(new MultiSplitLayout.Leaf("left"),
new MultiSplitLayout.Divider(),
new MultiSplitLayout.Leaf("right"));
MultiSplitLayout.Split modelRoot = new MultiSplitLayout.Split();
modelRoot.setChildren(children);
JXMultiSplitPane multiSplitPane = new JXMultiSplitPane();
multiSplitPane.getMultiSplitLayout().setModel(modelRoot);
multiSplitPane.add(leftpanel, "left");
multiSplitPane.add(editableModelPanel, "right");
*/
this.add(splitPane, BorderLayout.CENTER);
}
/*
public void loadLib(String uri) {
ContainerRoot nroot = Art2XmiHelper.load(uri);
kernel.getModelHandler().merge(nroot);
palette.clear();
for (org.kevoree.ComponentTypeLibrary ctl : kernel.getModelHandler().getActualModel().getLibrariy()) {
for (org.kevoree.ComponentType ct : ctl.getSubComponentTypes()) {
ComponentTypePanel ctp = kernel.getUifactory().createComponentTypeUI(ct);
palette.addComponentTypePanel(ctp, ctl.getName());
}
}
this.doLayout();
repaint();
revalidate();
//TODO CLEAN PALETTE
//Art2XmiHelper.save("/Users/ffouquet/NetBeansProjects/Entimid/org.entimid.fakeStuff/art2Merged.xmi", kernel.getModelHandler().getActualModel());
}*/
public void showPropertyFor(Object p) {
if (p instanceof NodePanel) {
org.kevoree.ContainerNode elem = (org.kevoree.ContainerNode) kernel.getUifactory().getMapping().get(p);
NodePropertyEditor prop = new NodePropertyEditor(elem, kernel);
editableModelPanel.displayProperties(prop);
}
if (p instanceof ComponentPanel || p instanceof ChannelPanel || p instanceof GroupPanel) {
org.kevoree.Instance elem = (org.kevoree.Instance) kernel.getUifactory().getMapping().get(p);
InstancePropertyEditor prop = new InstancePropertyEditor(elem, kernel);
editableModelPanel.displayProperties(prop);
}
if (p instanceof Binding) {
Object obj = kernel.getUifactory().getMapping().get(p);
if(obj instanceof MBinding){
MBinding elem = (MBinding) obj;
BindingPropertyEditor prop = new BindingPropertyEditor(elem, kernel);
editableModelPanel.displayProperties(prop);
}
if(obj instanceof TempGroupBinding){
TempGroupBinding elem = (TempGroupBinding) obj;
GroupBindingPropertyEditor prop = new GroupBindingPropertyEditor(elem, kernel);
editableModelPanel.displayProperties(prop);
}
}
this.invalidate();
}
public void unshowPropertyEditor() {
editableModelPanel.undisplayProperties();
}
}