samer@0: /* samer@0: * MatrixAgent.java samer@0: * samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.maths; samer@0: samer@0: import samer.core.*; samer@0: import samer.core.Agent.*; samer@0: samer@0: /** samer@0: Provides a load of useful commands for dealing with samer@0: a matrix. samer@0: */ samer@0: samer@0: public class MatrixAgent extends Saver samer@0: { samer@0: private Matrix M; samer@0: samer@0: public MatrixAgent(Matrix m) { super(m,m.getNode()); M=m; } samer@0: samer@0: public void getCommands(Registry r) samer@0: { samer@0: r.add("zeros").add("identity").add("multiply"); samer@0: r.group(); super.getCommands(r); r.group(); samer@0: r.add("image").add("editor"); samer@0: r.add("rowcolumn"); samer@0: } samer@0: samer@0: public String toString() { return "MatrixAgent("+M+")"; } samer@0: samer@0: public void execute(String cmd, Environment env) throws Exception samer@0: { samer@0: if (cmd.equals("identity")) { M.identity(); M.changed(); } samer@0: else if (cmd.equals("zeros")) { M.zero(); M.changed(); } samer@0: else if (cmd.equals("multiply")) { samer@0: double K=X._double(env.datum("factor"),1); samer@0: M.timesEquals(K); samer@0: M.changed(); samer@0: } else if (cmd.equals("rowcolumn")) { samer@0: new RowColumn(M); samer@0: samer@0: } else if (cmd.equals("plotter")) { samer@0: samer@0: pushNode("plotter"); samer@0: Viewer vwr = new MatrixPlotter(M); samer@0: Shell.expose(vwr, "window"); samer@0: Shell.pop(); samer@0: samer@0: } else if (cmd.equals("image")) { samer@0: samer@0: pushNode("image"); samer@0: samer@0: Viewer vwr = new MatrixImage(M); samer@0: Shell.expose(vwr, "window"); samer@0: Shell.pop(); samer@0: samer@0: } else if(cmd.equals("editor")) { samer@0: samer@0: pushNode("editor"); samer@0: Shell.expose((Viewer)(new MatrixImageEditor(M)),"window"); samer@0: Shell.pop(); samer@0: } else super.execute(cmd,env); samer@0: } samer@0: samer@0: private void pushNode(String nm) { Shell.push(new Node(nm,M.getNode())); } samer@0: } samer@0: samer@0: class MatrixImageEditor extends MatrixImage samer@0: { samer@0: MatEditor editor; samer@0: samer@0: public MatrixImageEditor(Matrix A) { samer@0: super(A); samer@0: editor = new MatEditor(A,this,A.observable(),this); samer@0: } samer@0: samer@0: public void detach() samer@0: { samer@0: editor.detach(); samer@0: super.detach(); samer@0: } samer@0: }