/** * 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.scribe.ui.views; import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.part.ViewPart; import cc.warlock.core.script.IScriptInfo; import cc.warlock.core.script.IScriptProvider; import cc.warlock.core.script.ScriptEngineRegistry; import cc.warlock.scribe.ui.ScribeSharedImages; public class ScriptsView extends ViewPart { public static final String VIEW_ID = "cc.warlock.scribe.ui.views.ScriptsView"; protected TableViewer scriptList; @Override public void createPartControl(Composite parent) { scriptList = new TableViewer(parent, SWT.SINGLE | SWT.FULL_SELECTION); scriptList.setContentProvider(new ArrayContentProvider()); scriptList.setLabelProvider(new ITableLabelProvider () { public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) return ScribeSharedImages.getImage(ScribeSharedImages.IMG_SCRIPT); return null; } public String getColumnText(Object element, int columnIndex) { if (columnIndex == 1) { return ((IScriptInfo)element).getScriptName(); } return ""; } public void addListener(ILabelProviderListener listener) {} public void dispose() { } public boolean isLabelProperty(Object element, String property) { return true; } public void removeListener(ILabelProviderListener listener) {} }); scriptList.setSorter(new ViewerSorter() { @Override public int compare(Viewer viewer, Object e1, Object e2) { return ((IScriptInfo)e1).getScriptName().compareTo(((IScriptInfo)e2).getScriptName()); } }); scriptList.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { openScript((IStructuredSelection) scriptList.getSelection()); } }); TableColumn image = new TableColumn(scriptList.getTable(), SWT.NONE, 0); image.setWidth(16); TableColumn name = new TableColumn(scriptList.getTable(), SWT.NONE, 1); name.setWidth(200); // for (IWarlockClient client : WarlockClientRegistry.getActiveClients()) // { // if (client instanceof IStormFrontClient) // { // serverSettingsLoaded(((IStormFrontClient)client).getServerSettings()); // } // } // WarlockClientRegistry.addWarlockClientListener(new WarlockClientAdapter() { // public void clientConnected(IWarlockClient client) { // addListener(client); // } // }); } public void serverSettingsLoaded() { Display.getDefault().syncExec(new Runnable() { public void run() { ArrayList<IScriptInfo> scripts = new ArrayList<IScriptInfo>(); for (IScriptProvider provider : ScriptEngineRegistry.getScriptProviders()) { scripts.addAll(provider.getScriptInfos()); } scriptList.setInput(scripts); } }); } protected String readerToString (Reader reader) { try { StringBuffer string = new StringBuffer(); char[] bytes = new char[1024]; int size = 0; while (size != -1) { size = reader.read(bytes); if (size != -1) string.append(bytes, 0, size); } reader.close(); return string.toString(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } protected void openScript (IStructuredSelection selection) { IScriptInfo scriptInfo = (IScriptInfo) selection.getFirstElement(); Shell shell = new Shell(); shell.setText(scriptInfo.getScriptName()); shell.setImage(ScribeSharedImages.getImage(ScribeSharedImages.IMG_SCRIPT)); shell.setLayout(new GridLayout()); Composite main = new Composite(shell, SWT.NONE); StyledText text = new StyledText(main, SWT.READ_ONLY | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); // if (scriptInfo instanceof IServerScriptInfo) // { // IServerScriptInfo info = (IServerScriptInfo) scriptInfo; // IStormFrontClient client = info.getClient(); // // text.setBackground(ColorUtil.warlockColorToColor(client.getServerSettings().getMainWindowSettings().getBackgroundColor())); // text.setForeground(ColorUtil.warlockColorToColor(client.getServerSettings().getMainWindowSettings().getForegroundColor())); // } Reader reader = scriptInfo.openReader(); text.setText(readerToString(reader)); try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } text.setSize(640, 480); shell.pack(); shell.layout(); shell.open(); } @Override public void setFocus() { } }