/**
* Warlock, the open-source cross-platform game client
*
* Copyright 2008, Warlock LLC, and individual contributors as indicated
* by the @authors tag.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package cc.warlock.rcp.views;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.part.ViewPart;
import cc.warlock.core.client.IWarlockClient;
import cc.warlock.core.client.IWarlockClientViewer;
import cc.warlock.core.script.IScript;
import cc.warlock.core.script.IScriptEngine;
import cc.warlock.core.script.IScriptInfo;
import cc.warlock.core.script.IScriptListener;
import cc.warlock.rcp.ui.WarlockSharedImages;
/**
* @author kassah
*
*/
public class ScriptManager extends ViewPart implements IGameViewFocusListener, IScriptListener {
protected Text entry;
protected TableViewer scriptsTable;
protected Composite main;
protected TableColumn nameColumn, playColumn, pauseColumn, stopColumn;
public static final String VIEW_ID = "cc.warlock.rcp.views.ScriptManager";
public ScriptManager()
{
// Listen for switch of Focus
GameView.addGameViewFocusListener(this);
}
/* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createPartControl(Composite parent) {
main = parent;
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.horizontalSpacing=0;
layout.marginBottom=0;
layout.marginHeight =0;
layout.marginLeft =0;
layout.marginRight=0;
layout.marginTop =0;
layout.marginWidth=0;
layout.verticalSpacing = 0;
parent.setLayout(layout);
scriptsTable = new TableViewer(parent, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.FILL );
scriptsTable.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
scriptsTable.setUseHashlookup(true);
scriptsTable.setColumnProperties(new String[] { "name", "pause", "stop" });
scriptsTable.getTable().setLinesVisible(true);
//scriptsTable.getTable().setHeaderVisible(true);
CellEditor editors[] = new CellEditor[] {
new TextCellEditor(scriptsTable.getTable()),
new CheckboxCellEditor(scriptsTable.getTable()),
new CheckboxCellEditor(scriptsTable.getTable())
};
scriptsTable.setCellEditors(editors);
scriptsTable.setCellModifier(new ICellModifier () {
public boolean canModify(Object element, String property) {
return false;
}
public Object getValue(Object element, String property) {
return ((ScriptRow)element).getName();
}
public void modify(Object element, String property, Object value) {
return;
}
});
nameColumn = new TableColumn(scriptsTable.getTable(), SWT.LEFT, 0);
nameColumn.setText("Name");
pauseColumn = new TableColumn(scriptsTable.getTable(), SWT.RIGHT, 1);
pauseColumn.setWidth(30);
pauseColumn.setText("Pause");
stopColumn = new TableColumn(scriptsTable.getTable(), SWT.RIGHT, 2);
stopColumn.setWidth(30);
stopColumn.setText("Stop");
scriptsTable.setLabelProvider(new ScriptsLabelProvider());
scriptsTable.setContentProvider(new ArrayContentProvider());
scriptsTable.setInput(new ScriptRow[] {
new ScriptRow("sfhunter.cmd",false),
new ScriptRow("train.cmd", true),
new ScriptRow("do.wiz", false),
new ScriptRow("go.wsl", true)
});
main.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
Rectangle area = main.getClientArea();
Table table = scriptsTable.getTable();
Point size = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
ScrollBar vBar = table.getVerticalBar();
int width = area.width - table.computeTrim(0,0,0,0).width - vBar.getSize().x;
if (size.y > area.height + table.getHeaderHeight()) {
// Subtract the scrollbar width from the total column width
// if a vertical scrollbar will be required
Point vBarSize = vBar.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
nameColumn.setWidth(width - 60);
stopColumn.setWidth(30);
pauseColumn.setWidth(30);
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);
nameColumn.setWidth(width - 60);
stopColumn.setWidth(30);
pauseColumn.setWidth(30);
}
}
});
}
/* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see cc.warlock.rcp.views.IGameViewFocusListener#gameViewFocused(cc.warlock.rcp.views.GameView)
*/
public void gameViewFocused(GameView gameView) {
// TODO Auto-generated method stub
}
public void scriptPaused(IScript script) {
// TODO Auto-generated method stub
}
public void scriptResumed(IScript script) {
// TODO Auto-generated method stub
}
public void scriptStarted(IScript script) {
// TODO Auto-generated method stub
}
public void scriptStopped(IScript script, boolean userStopped) {
// TODO Auto-generated method stub
}
class ScriptsLabelProvider
extends LabelProvider
implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
Image result = null;
IScript script = (IScript) element;
switch (columnIndex) {
case 0 :
break;
case 1 :
if (!script.isSuspended())
result = WarlockSharedImages.getImage(WarlockSharedImages.IMG_SCRIPT_SUSPEND);
else
result = WarlockSharedImages.getImage(WarlockSharedImages.IMG_SCRIPT_RESUME);
break;
case 2:
result = WarlockSharedImages.getImage(WarlockSharedImages.IMG_SCRIPT_STOP);
break;
}
return result;
}
public String getColumnText(Object element, int columnIndex) {
String result = "";
IScript script = (IScript) element;
switch (columnIndex) {
case 0:
result = script.getName();
break;
case 1 :
// result = script.getPaused()?"|>":"||";
break;
case 2 :
// result = "[]";
break;
default :
break;
}
return result;
}
}
class ScriptRow implements IScript {
protected String name;
protected Boolean suspended;
public ScriptRow(String name, Boolean suspended) {
this.name = name;
this.suspended = suspended;
}
public void addScriptListener(IScriptListener listener) {
// TODO Auto-generated method stub
}
public IWarlockClient getClient() {
// TODO Auto-generated method stub
return null;
}
public IWarlockClientViewer getViewer() {
// FIXME added to fix error, should this not be a stub?
return null;
}
public String getName() {
// TODO Auto-generated method stub
return name;
}
public IScriptEngine getScriptEngine() {
// TODO Auto-generated method stub
return null;
}
public IScriptInfo getScriptInfo() {
// TODO Auto-generated method stub
return null;
}
public boolean isRunning() {
// TODO Auto-generated method stub
return true;
}
public boolean isSuspended() {
// TODO Auto-generated method stub
return suspended;
}
public void removeScriptListener(IScriptListener listener) {
// TODO Auto-generated method stub
}
public void resume() {
suspended = false;
}
public void stop() {
// TODO Auto-generated method stub
suspended = true;
}
public void suspend() {
// TODO Auto-generated method stub
suspended = true;
}
}
}