//{HEADER
/**
* This class is part of jnex 'Nexirius Application Framework for Java'
*
* Copyright (C) Nexirius GmbH, CH-4450 Sissach, Switzerland (www.nexirius.ch)
*
* <p>This library is free software; you can redistribute it and/or<br>
* modify it under the terms of the GNU Lesser General Public<br>
* License as published by the Free Software Foundation; either<br>
* version 2.1 of the License, or (at your option) any later version.</p>
*
* <p>This library is distributed in the hope that it will be useful,<br>
* but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU<br>
* Lesser General Public License for more details.</p>
*
* <p>You should have received a copy of the GNU Lesser General Public<br>
* License along with this library; if not, write to the Free Software<br>
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>
* </blockquote>
*
* <p>
* Nexirius GmbH, hereby disclaims all copyright interest in<br>
* the library jnex' 'Nexirius Application Framework for Java' written<br>
* by Marcel Baumann.</p>
*/
//}HEADER
package com.nexirius.framework.dataeditor;
import com.nexirius.framework.datamodel.DataModel;
import com.nexirius.framework.datamodel.DataModelCommand;
import com.nexirius.framework.datamodel.DataModelCommandVector;
import com.nexirius.framework.datamodel.StructModel;
import com.nexirius.framework.dataviewer.StructViewer;
import com.nexirius.framework.dataviewer.ViewerFactory;
import javax.swing.*;
/**
* This viewer is designed to edit StructModel data. The default component
* is a single vertical column of all the children editors with titled borders (filed names)
*
* @author Marcel Baumann
*/
public class StructEditor extends StructViewer {
public static final String editorName = "StructEditor";
/**
* Creates an instance and initialises its associated data model
*/
public StructEditor(StructModel model) {
super(model);
}
/**
* Returns true
*/
public boolean isEditor() {
return true;
}
/**
* Creates a field value component (data model editor for a specific child)
*
* @param dm The child data model which will be used to create an editor component.
*/
public JComponent createFieldValue(DataModel dm)
throws Exception {
JComponent ret = getFactory().createDefaultEditor(dm).getJComponent();
ret.setName(dm.getFieldName());
return ret;
}
/**
* Only for debugging
*/
public String getViewerName() {
return editorName;
}
/**
* Calls super.update() and attaches a button panel to the struct panel which contains
* all the methods which are defined for the associated data model
*/
public void update() {
super.update();
// eventually add the buttons for the methods
if (getLayout() == null && getDataModel().hasMethods()) {
DataModelCommandVector v = getDataModel().getMethods();
/*
ArrayPanel button_panel = new ArrayPanel(true);
for (DataModelCommand m = v.firstItem(); m != null; m = v.nextItem()) {
try {
button_panel.add(getFactory().createDefaultEditor(m).getJComponent());
}
catch (Exception ex)
{
//FIX
ex.printStackTrace();
}
}
*/
JPanel button_panel = createButtonPanel(getFactory(), v, true);
add(button_panel);
}
}
public static JPanel createButtonPanel(ViewerFactory factory, DataModelCommandVector v, boolean horizontal) {
JPanel button_panel = new JPanel();
button_panel.setOpaque(false);
button_panel.setLayout(new BoxLayout(button_panel, (horizontal ? BoxLayout.X_AXIS : BoxLayout.Y_AXIS)));
if (horizontal) {
button_panel.add(Box.createHorizontalGlue());
}
for (DataModelCommand m = v.firstItem(); m != null; m = v.nextItem()) {
try {
button_panel.add(factory.createDefaultEditor(m).getJComponent());
if (horizontal) {
button_panel.add(Box.createHorizontalGlue());
}
} catch (Exception ex) {
//FIX
ex.printStackTrace();
}
}
return button_panel;
}
}