660 lines
24 KiB
Java
660 lines
24 KiB
Java
/*
|
|
* Copyright 2004-2007 IDCA. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
|
* following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and
|
|
* the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
|
* and the following disclaimer in the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY IDCA AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IDCA OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* The views and conclusions contained in the software and documentation are those of the authors and
|
|
* should not be interpreted as representing official policies, either expressed or implied, of IDCA.
|
|
*/
|
|
|
|
package com.idcanet.vasc.frontends.swt;
|
|
|
|
import java.io.FileOutputStream;
|
|
import java.io.OutputStream;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
import org.eclipse.jface.viewers.ILabelProviderListener;
|
|
import org.eclipse.jface.viewers.IStructuredContentProvider;
|
|
import org.eclipse.jface.viewers.ITableLabelProvider;
|
|
import org.eclipse.jface.viewers.TableViewer;
|
|
import org.eclipse.jface.viewers.Viewer;
|
|
import org.eclipse.swt.SWT;
|
|
import org.eclipse.swt.events.ControlEvent;
|
|
import org.eclipse.swt.events.ControlListener;
|
|
import org.eclipse.swt.events.ModifyEvent;
|
|
import org.eclipse.swt.events.ModifyListener;
|
|
import org.eclipse.swt.events.SelectionAdapter;
|
|
import org.eclipse.swt.events.SelectionEvent;
|
|
import org.eclipse.swt.events.SelectionListener;
|
|
import org.eclipse.swt.graphics.Color;
|
|
import org.eclipse.swt.graphics.Font;
|
|
import org.eclipse.swt.graphics.Image;
|
|
import org.eclipse.swt.graphics.Point;
|
|
import org.eclipse.swt.graphics.Rectangle;
|
|
import org.eclipse.swt.layout.FillLayout;
|
|
import org.eclipse.swt.layout.GridData;
|
|
import org.eclipse.swt.layout.GridLayout;
|
|
import org.eclipse.swt.widgets.Button;
|
|
import org.eclipse.swt.widgets.Composite;
|
|
import org.eclipse.swt.widgets.Display;
|
|
import org.eclipse.swt.widgets.Event;
|
|
import org.eclipse.swt.widgets.FileDialog;
|
|
import org.eclipse.swt.widgets.Label;
|
|
import org.eclipse.swt.widgets.Listener;
|
|
import org.eclipse.swt.widgets.MessageBox;
|
|
import org.eclipse.swt.widgets.Shell;
|
|
import org.eclipse.swt.widgets.Table;
|
|
import org.eclipse.swt.widgets.TableColumn;
|
|
import org.eclipse.swt.widgets.Text;
|
|
import org.eclipse.swt.widgets.ToolBar;
|
|
import org.eclipse.swt.widgets.ToolItem;
|
|
|
|
import com.idcanet.vasc.core.AbstractVascFrontend;
|
|
import com.idcanet.vasc.core.VascEntry;
|
|
import com.idcanet.vasc.core.VascEntryField;
|
|
import com.idcanet.vasc.core.VascException;
|
|
import com.idcanet.vasc.core.VascFrontendData;
|
|
import com.idcanet.vasc.core.actions.GlobalVascAction;
|
|
import com.idcanet.vasc.core.actions.RowVascAction;
|
|
import com.idcanet.vasc.core.entry.VascEntryFrontendEventListener;
|
|
import com.idcanet.vasc.core.entry.VascEntryExporter;
|
|
import com.idcanet.vasc.core.entry.VascEntryFrontendEventListener.VascFrontendEventType;
|
|
import com.idcanet.vasc.core.ui.VascOptionValueModelListener;
|
|
import com.idcanet.vasc.core.ui.VascUIComponent;
|
|
import com.idcanet.vasc.core.ui.VascValueModel;
|
|
import com.idcanet.vasc.core.ui.VascValueModelListener;
|
|
import com.idcanet.vasc.frontends.swt.ui.SwtBoolean;
|
|
import com.idcanet.vasc.frontends.swt.ui.SwtButton;
|
|
import com.idcanet.vasc.frontends.swt.ui.SwtLabel;
|
|
import com.idcanet.vasc.frontends.swt.ui.SwtList;
|
|
import com.idcanet.vasc.frontends.swt.ui.SwtText;
|
|
import com.idcanet.vasc.frontends.swt.ui.SwtTextArea;
|
|
|
|
/**
|
|
*
|
|
* @author Willem Cazander
|
|
* @version 1.0 Mar 21, 2007
|
|
*/
|
|
public class SwtVascFrontend extends AbstractVascFrontend {
|
|
|
|
private Logger logger = null;
|
|
private Composite parent = null;
|
|
private boolean renderGlobalActions = true;
|
|
|
|
public SwtVascFrontend(Composite parent) {
|
|
logger = Logger.getLogger(SwtVascFrontend.class.getName());
|
|
this.parent=parent;
|
|
}
|
|
|
|
/**
|
|
* Add swt implmented ui components
|
|
*/
|
|
protected void addUiComponents() {
|
|
VascFrontendData vfd = getVascEntry().getVascFrontendData();
|
|
|
|
// required UI components
|
|
vfd.putVascUIComponent(VascUIComponent.VASC_LABEL,SwtLabel.class.getName());
|
|
vfd.putVascUIComponent(VascUIComponent.VASC_TEXT, SwtText.class.getName());
|
|
vfd.putVascUIComponent(VascUIComponent.VASC_BUTTON, SwtButton.class.getName());
|
|
vfd.putVascUIComponent(VascUIComponent.VASC_LIST, SwtList.class.getName());
|
|
|
|
// optional UI components
|
|
vfd.putVascUIComponent(VascUIComponent.VASC_BOOLEAN , SwtBoolean.class.getName());
|
|
//vfd.putVascUIComponent(VascUIComponent.VASC_DATE , SwtDate.class.getName());
|
|
vfd.putVascUIComponent(VascUIComponent.VASC_TEXTAREA, SwtTextArea.class.getName());
|
|
//vfd.putVascUIComponent(VascUIComponent.VASC_COLOR, SwtColorChooser.class.getName());
|
|
}
|
|
|
|
/**
|
|
* @return the renderGlobalActions
|
|
*/
|
|
public boolean isRenderGlobalActions() {
|
|
return renderGlobalActions;
|
|
}
|
|
|
|
/**
|
|
* @param renderGlobalActions the renderGlobalActions to set
|
|
*/
|
|
public void setRenderGlobalActions(boolean renderGlobalActions) {
|
|
this.renderGlobalActions = renderGlobalActions;
|
|
}
|
|
|
|
|
|
@Override
|
|
protected Object i18nImage(String key) {
|
|
if (entry.getVascFrontendData().getVascEntryResourceImageResolver()==null) {
|
|
return null;
|
|
}
|
|
return entry.getVascFrontendData().getVascEntryResourceImageResolver().getImageValue(entry,key);
|
|
}
|
|
|
|
private static final String[] FILTER_NAMES = {
|
|
"All Files (*.*)",
|
|
"Comma Separated Values Files (*.csv)",
|
|
"Microsoft Excel Spreadsheet Files (*.xls)",
|
|
};
|
|
/** These filter extensions are used to filter which files are displayed. */
|
|
private static final String[] FILTER_EXTS = { "*.*","*.csv","*.xls" };
|
|
|
|
public void renderExport(VascEntryExporter exporter) throws Exception {
|
|
FileDialog dlg = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE);
|
|
dlg.setFilterNames(FILTER_NAMES);
|
|
dlg.setFilterExtensions(FILTER_EXTS);
|
|
dlg.setFileName(entry.getName()+".csv");
|
|
String fileName = dlg.open();
|
|
logger.fine("FileName: "+fileName);
|
|
if (fileName == null) {
|
|
return;
|
|
}
|
|
OutputStream out = new FileOutputStream(fileName);
|
|
try {
|
|
exporter.doExport(out, entry);
|
|
} catch (Exception e) {
|
|
//MessageDialog.openError(Display.getCurrent().getActiveShell(),crudTable.i18n("crud.event.export.error.title"),crudTable.i18n("crud.event.export.error.message"));
|
|
logger.log(Level.WARNING,"Error: "+e.getMessage(),e);
|
|
} finally {
|
|
if (out!=null) {
|
|
out.close();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void renderEdit() throws Exception {
|
|
logger.fine("Rending Edit View");
|
|
SwtVascEditDialog dialog = new SwtVascEditDialog(entry);
|
|
dialog.open();
|
|
}
|
|
|
|
public void renderDelete() throws Exception {
|
|
boolean del = askDelete( Display.getCurrent().getActiveShell() );
|
|
if (del==false) {
|
|
return;
|
|
}
|
|
// yes
|
|
entry.getVascFrontendData().getVascFrontendHelper().deleteObject(entry);
|
|
}
|
|
|
|
private boolean askDelete(Shell shell) {
|
|
logger.finest("Asking for delete");
|
|
MessageBox askDelete = new MessageBox(shell,SWT.ICON_QUESTION|SWT.YES|SWT.NO);
|
|
askDelete.setText(i18n("crud.event.delete.confim.title"));
|
|
askDelete.setMessage(i18n("crud.event.delete.confim.question"));
|
|
int state = askDelete.open();
|
|
if (state == SWT.YES) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void renderView() throws Exception {
|
|
GridLayout layout = new GridLayout();
|
|
layout.marginHeight = 0;
|
|
layout.marginWidth = 0;
|
|
parent.setLayout(layout);
|
|
|
|
Composite header = new Composite(parent, SWT.NONE);
|
|
GridLayout headerLayout = new GridLayout();
|
|
headerLayout.numColumns = 6;
|
|
header.setLayout(headerLayout);
|
|
header.setLayoutData(new GridData(SWT.NONE));
|
|
|
|
Composite body = new Composite(parent, SWT.NONE);
|
|
GridLayout bodyLayout = new GridLayout();
|
|
bodyLayout.numColumns = 1;
|
|
body.setLayout(bodyLayout);
|
|
body.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
|
|
Composite footer = new Composite(parent, SWT.NONE);
|
|
GridLayout footerLayout = new GridLayout();
|
|
footerLayout.numColumns = 6;
|
|
footer.setLayout(footerLayout);
|
|
footer.setLayoutData(new GridData(SWT.NONE));
|
|
|
|
createHeader(header);
|
|
createBody(body);
|
|
createFooter(footer);
|
|
}
|
|
|
|
|
|
public void createHeader(Composite header) {
|
|
logger.finest("Creating header");
|
|
Color c = header.getDisplay().getSystemColor(SWT.COLOR_WHITE);
|
|
|
|
GridLayout layout = new GridLayout();
|
|
layout.marginHeight = 0;
|
|
layout.marginWidth = 0;
|
|
layout.marginTop = 0;
|
|
header.setLayout(layout);
|
|
header.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
header.setBackground(c);
|
|
|
|
if (isRenderGlobalActions()) {
|
|
Composite headerBar = new Composite(header, SWT.NONE);
|
|
//GridLayout headerLayout = new GridLayout();
|
|
//headerLayout.numColumns = 1;
|
|
headerBar.setLayout(new FillLayout());
|
|
//headerBar.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
|
|
ToolBar toolBar = new ToolBar(headerBar, SWT.NONE);
|
|
for (GlobalVascAction action:entry.getGlobalActions()) {
|
|
if (entry.getVascFrontendData().getVascFrontendHelper().renderGlobalVascAction(action)==false) {
|
|
continue;
|
|
}
|
|
ToolItem item = new ToolItem(toolBar, SWT.PUSH);
|
|
item.setText(i18n(action.getName()));
|
|
item.setToolTipText(i18n(action.getDescription()));
|
|
item.setImage((Image)i18nImage(action.getImage()));
|
|
item.addSelectionListener(new GlobalActionListener(action));
|
|
}
|
|
}
|
|
|
|
Composite headerName = new Composite(header, SWT.NONE);
|
|
GridLayout bodyLayout = new GridLayout();
|
|
bodyLayout.numColumns = 2;
|
|
headerName.setLayout(bodyLayout);
|
|
headerName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
headerName.setBackground(c);
|
|
|
|
Label l = new Label(headerName, SWT.CENTER);
|
|
l.setImage((Image)i18nImage(entry.getListImage()));
|
|
l.setBackground(c);
|
|
|
|
Font headerFont = new Font(header.getDisplay(), "verdana", 16, SWT.BOLD);
|
|
l = new Label(headerName, SWT.CENTER);
|
|
l.setFont(headerFont);
|
|
l.setText(i18n(entry.getName()));
|
|
l.setBackground(c);
|
|
|
|
Composite headerText = new Composite(header, SWT.NONE);
|
|
bodyLayout = new GridLayout();
|
|
bodyLayout.numColumns = 1;
|
|
headerText.setLayout(bodyLayout);
|
|
headerText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
headerText.setBackground(c);
|
|
|
|
l = new Label(headerText, SWT.CENTER);
|
|
l.setText(i18n(entry.getListDescription()));
|
|
l.setBackground(c);
|
|
|
|
Composite headerSplit = new Composite(header, SWT.NONE);
|
|
GridLayout headerSplitLayout = new GridLayout();
|
|
headerSplitLayout.numColumns = 2;
|
|
headerSplit.setLayout(headerSplitLayout);
|
|
headerSplit.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
Composite headerOptions = new Composite(headerSplit, SWT.NONE);
|
|
GridLayout headerOptionsLayout = new GridLayout();
|
|
headerOptionsLayout.numColumns = 2;
|
|
headerOptions.setLayout(headerOptionsLayout);
|
|
headerOptions.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
try {
|
|
for (VascEntryField option:entry.getListOptions()) {
|
|
for (int i=0;i<option.getVascEntryFieldType().getUIComponentCount(option);i++) {
|
|
|
|
com.idcanet.vasc.core.ui.VascUIComponent label = option.getVascEntryFieldType().provideLabelUIComponent(i,option);
|
|
VascValueModel model = new VascValueModel();
|
|
model.setValue(i18n(option.getName()));
|
|
label.createComponent(entry,option,model,headerOptions);
|
|
|
|
com.idcanet.vasc.core.ui.VascUIComponent editor = option.getVascEntryFieldType().provideEditorUIComponent(i,option);
|
|
model = new VascValueModel(option.getVascEntryFieldType().provideEditorVascValueModel(i,option));
|
|
model.addListener(new VascOptionValueModelListener(option));
|
|
model.setValue(null);
|
|
model.addListener(new VascValueModelListener() {
|
|
public void valueUpdate(VascValueModel model) throws VascException {
|
|
entry.getVascFrontendData().getVascFrontendHelper().refreshData(entry);// mm
|
|
}
|
|
});
|
|
Object edit = editor.createComponent(entry,option,model,headerOptions);
|
|
|
|
// i==0 is for multi field editor support... which is stell very in progress
|
|
if (i==0) {
|
|
entry.getVascFrontendData().addFieldVascUIComponents(option, editor,edit);
|
|
}
|
|
}
|
|
}
|
|
|
|
Composite headerRightOptions = new Composite(headerSplit, SWT.NONE | SWT.RIGHT | SWT.TOP );
|
|
GridLayout headerRightOptionsLayout = new GridLayout();
|
|
headerRightOptionsLayout.numColumns = 2;
|
|
headerRightOptions.setLayout(headerRightOptionsLayout);
|
|
headerRightOptions.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
|
|
Label searchLabel = new Label(headerRightOptions, SWT.CENTER);
|
|
searchLabel.setText("Zoeken:");
|
|
|
|
final Text text = new Text(headerRightOptions, SWT.NONE | SWT.BORDER );
|
|
text.addModifyListener(new ModifyListener() {
|
|
public void modifyText(ModifyEvent e) {
|
|
String value = text.getText();
|
|
try {
|
|
entry.getVascFrontendData().getVascFrontendHelper().searchAction(entry, value);
|
|
} catch (Exception ee) {
|
|
entry.getVascFrontendData().getVascFrontendHelper().handleException(entry,ee);
|
|
}
|
|
}
|
|
});
|
|
|
|
entry.getVascFrontendData().getVascFrontendHelper().headerOptionsCreatedFillData(entry);
|
|
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
class GlobalActionListener extends SelectionAdapter {
|
|
|
|
private GlobalVascAction action = null;
|
|
|
|
public GlobalActionListener(GlobalVascAction action) {
|
|
this.action=action;
|
|
}
|
|
/**
|
|
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
|
*/
|
|
@Override
|
|
public void widgetSelected(SelectionEvent event) {
|
|
logger.fine("Global Action");
|
|
try {
|
|
action.doGlobalAction(entry);
|
|
} catch (Exception e) {
|
|
entry.getVascFrontendData().getVascFrontendHelper().handleException(entry,e);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void createBody(Composite body) {
|
|
logger.finer("Creating body");
|
|
|
|
|
|
|
|
// Create the table viewer to display the players
|
|
// SWT.CHECK
|
|
final TableViewer tableViewer = new TableViewer(body, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER );
|
|
final Table table2 = tableViewer.getTable();
|
|
table2.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
table2.setHeaderVisible(true);
|
|
table2.setLinesVisible(true);
|
|
|
|
body.addControlListener(new ResizeTableControlListener(body,table2));
|
|
|
|
table2.addSelectionListener(new SelectionListener() {
|
|
|
|
/**
|
|
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
|
|
*/
|
|
public void widgetDefaultSelected(SelectionEvent e) {
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
|
*/
|
|
public void widgetSelected(SelectionEvent e) {
|
|
Object data = e.item.getData();
|
|
logger.fine("Slecting data: "+data);
|
|
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(data);
|
|
}
|
|
|
|
});
|
|
|
|
// Set the content and label providers
|
|
tableViewer.setContentProvider(new ListConverterContentProvider());
|
|
tableViewer.setLabelProvider(new DefaultLabelProvider(entry));
|
|
//TODO: add renderer support
|
|
|
|
//Add sort indicator and sort data when column selected
|
|
Listener sortListener = new Listener() {
|
|
public void handleEvent(Event e) {
|
|
// determine new sort column and direction
|
|
TableColumn sortColumn = table2.getSortColumn();
|
|
TableColumn currentColumn = (TableColumn) e.widget;
|
|
int dir = table2.getSortDirection();
|
|
if (sortColumn == currentColumn) {
|
|
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
|
|
} else {
|
|
table2.setSortColumn(currentColumn);
|
|
dir = SWT.UP;
|
|
}
|
|
table2.setSortDirection(dir);
|
|
VascEntryField field = (VascEntryField)currentColumn.getData();
|
|
entry.getVascFrontendData().getVascFrontendHelper().sortAction(entry, field);
|
|
}
|
|
};
|
|
|
|
entry.getVascFrontendData().addVascEntryFrontendEventListener(new VascEntryFrontendEventListener() {
|
|
public VascFrontendEventType[] getEventTypes() {
|
|
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.DATA_LIST_UPDATE};
|
|
return result;
|
|
}
|
|
public void vascEvent(VascEntry entry,Object data) {
|
|
tableViewer.refresh();
|
|
table2.deselectAll();
|
|
}
|
|
});
|
|
|
|
|
|
for (VascEntryField c:entry.getVascEntryFields()) {
|
|
if (entry.getVascFrontendData().getVascFrontendHelper().renderList(c)==false) {
|
|
continue;
|
|
}
|
|
TableColumn tc = new TableColumn(table2, SWT.LEFT);
|
|
tc.setText(i18n(c.getName()));
|
|
tc.setData(c);
|
|
tc.setToolTipText(i18n(c.getDescription()));
|
|
tc.setImage((Image)i18nImage(c.getImage()));
|
|
tc.addListener(SWT.Selection, sortListener);
|
|
tc.setMoveable(true);
|
|
tc.setResizable(true);
|
|
}
|
|
|
|
int totalWidth = entry.getVascFrontendData().getVascFrontendHelper().getTotalColumnsWidth(entry);
|
|
logger.finer("Total size: "+totalWidth);
|
|
TableColumn[] columns = table2.getColumns();
|
|
for (int i = 0; i < columns.length; i++) {
|
|
VascEntryField c = (VascEntryField)columns[i].getData();
|
|
Integer cWidth = c.getSizeList();
|
|
if (cWidth!=null) {
|
|
//int w = (int)((double)totalSize/(double)totalSize)*cWidth;
|
|
columns[i].setWidth(cWidth);
|
|
//logger.finest("Setting column width: "+w+" total: "+totalSize+" c: "+cWidth+" of column: "+i);
|
|
} else {
|
|
columns[i].pack();
|
|
}
|
|
}
|
|
logger.fine("Table with columns created: "+table2.getColumnCount());
|
|
|
|
tableViewer.setInput(entry);
|
|
tableViewer.refresh();
|
|
}
|
|
|
|
class ResizeTableControlListener implements ControlListener {
|
|
Composite comp = null;
|
|
Table table = null;
|
|
public ResizeTableControlListener(Composite comp,Table table) {
|
|
this.comp=comp;
|
|
this.table=table;
|
|
}
|
|
public void controlResized(ControlEvent e) {
|
|
Rectangle area = comp.getClientArea();
|
|
Point preferredSize = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
|
|
int width = area.width - 2*table.getBorderWidth();
|
|
if (preferredSize.y > area.height + table.getHeaderHeight()) {
|
|
// Subtract the scrollbar width from the total column width
|
|
// if a vertical scrollbar will be required
|
|
Point vBarSize = table.getVerticalBar().getSize();
|
|
width -= vBarSize.x;
|
|
}
|
|
Point oldSize = table.getSize();
|
|
if (oldSize.x > area.width) {
|
|
// table is getting smaller so make the columns
|
|
// smaller first and then resize the table to
|
|
// match the client area width
|
|
table.setSize(area.width, area.height);
|
|
} else {
|
|
// table is getting bigger so make the table
|
|
// bigger first and then make the columns wider
|
|
// to match the client area width
|
|
table.setSize(area.width, area.height);
|
|
//column1.setWidth(width/3);
|
|
//column2.setWidth(width - column1.getWidth());
|
|
}
|
|
}
|
|
public void controlMoved(ControlEvent e) {
|
|
|
|
}
|
|
}
|
|
|
|
public void createFooter(Composite footer) {
|
|
logger.finest("Creating footer");
|
|
for( RowVascAction action:entry.getRowActions()) {
|
|
if (entry.getVascFrontendData().getVascFrontendHelper().renderRowVascAction(action)==false) {
|
|
continue;
|
|
}
|
|
Button actionButton = new Button(footer, SWT.NONE);
|
|
actionButton.setText(i18n(action.getName()));
|
|
actionButton.setToolTipText(i18n(action.getDescription()));
|
|
actionButton.setImage((Image)i18nImage(action.getImage()));
|
|
actionButton.addSelectionListener(new ActionListener(action));
|
|
}
|
|
}
|
|
|
|
class ActionListener extends SelectionAdapter {
|
|
private RowVascAction action = null;
|
|
|
|
public ActionListener(RowVascAction action) {
|
|
this.action=action;
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
|
|
*/
|
|
@Override
|
|
public void widgetSelected(SelectionEvent event) {
|
|
logger.fine("Row Action");
|
|
try {
|
|
action.doRowAction(entry, entry.getVascFrontendData().getVascEntryState().getEntryDataObject());
|
|
} catch (Exception e) {
|
|
entry.getVascFrontendData().getVascFrontendHelper().handleException(entry,e);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
class DefaultLabelProvider implements ITableLabelProvider {
|
|
|
|
private VascEntry entry = null;
|
|
|
|
public DefaultLabelProvider(VascEntry entry) {
|
|
this.entry=entry;
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
|
|
*/
|
|
public Image getColumnImage(Object arg0, int arg1) {
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
|
|
*/
|
|
public String getColumnText(Object bean, int columnNumber) {
|
|
|
|
int col=0;
|
|
VascEntryField vtc = null;
|
|
for (VascEntryField c:entry.getVascEntryFields()) {
|
|
if (entry.getVascFrontendData().getVascFrontendHelper().renderList(c)==false) {
|
|
continue;
|
|
}
|
|
if (col==columnNumber) {
|
|
vtc = c;
|
|
break;
|
|
}
|
|
col++;
|
|
}
|
|
if (vtc==null) {
|
|
// should not happen
|
|
vtc = entry.getVascEntryFields().get(columnNumber);
|
|
}
|
|
|
|
//if (vtc.getVascColumnRenderer()==null) {
|
|
try {
|
|
return vtc.getVascEntryFieldValue().getDisplayValue(vtc,bean);
|
|
} catch (Exception e) {
|
|
logger.log(Level.WARNING,"Error in get value: '"+vtc.getVascEntryFieldValue()+"' error: "+e.getMessage(),e);
|
|
return "Err";
|
|
}
|
|
//}
|
|
// see custem column renderer, so this code will never be called
|
|
//return "CUSTEM_RENDER";
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
|
|
*/
|
|
public void addListener(ILabelProviderListener arg0) {
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
|
|
*/
|
|
public void dispose() {
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
|
|
*/
|
|
public boolean isLabelProperty(Object arg0, String arg1) {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
|
|
*/
|
|
public void removeListener(ILabelProviderListener arg0) {
|
|
}
|
|
|
|
}
|
|
|
|
class ListConverterContentProvider implements IStructuredContentProvider {
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
|
|
*/
|
|
public Object[] getElements(Object obj) {
|
|
return ((VascEntry)obj).getVascFrontendData().getVascEntryState().getEntryDataList().toArray();
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
|
|
*/
|
|
public void dispose() {
|
|
}
|
|
|
|
/**
|
|
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
|
|
*/
|
|
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
|
|
}
|
|
|
|
}
|
|
} |