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.tools; samer@0: samer@0: import java.awt.*; samer@0: import java.util.*; samer@0: import samer.core.*; samer@0: import samer.core.util.*; samer@0: samer@0: public abstract class ImageTraceBase extends ImageViewer samer@0: { samer@0: int sx, sy; samer@0: int scrollStep=1; samer@0: boolean sc; samer@0: boolean stretch=false; samer@0: boolean scroll=false; samer@0: samer@0: samer@0: ImageTraceBase( ImageSourceBase i, Observable o) samer@0: { samer@0: super(i,o); samer@0: samer@0: setScroll(Shell.getBoolean("scroll",false)); samer@0: setStretch(Shell.getBoolean("stretch",false)); samer@0: setScrollStep(1); samer@0: setCellSize(cx,cy); samer@0: } samer@0: samer@0: public void setScrollStep(int st) { scrollStep=st; } samer@0: public void setScroll(boolean f) { scroll=f; } samer@0: public void setStretch(boolean f) { samer@0: stretch = f; samer@0: sc = stretch || (cx!=1) || (cy!=1); samer@0: } samer@0: samer@0: public void setCellSize( int a, int b) samer@0: { samer@0: super.setCellSize(a,b); samer@0: sc = stretch || (cx!=1) || (cy!=1); samer@0: sx = cx*ip.getWidth(); samer@0: sy = cy*ip.getHeight(); samer@0: } samer@0: samer@0: public void update( Graphics g) { clear(g); } samer@0: public void paint( Graphics g) { clear(g); } samer@0: samer@0: public void getCommands(Agent.Registry r) { samer@0: super.getCommands(r); r.group(); samer@0: r.add("scroll",scroll).add("stretch",stretch).add("cell.size"); samer@0: } samer@0: samer@0: public void execute(String cmd, Environment env) throws Exception samer@0: { samer@0: if (cmd.equals("scroll")) { samer@0: setScroll(X._bool(env.datum(),!scroll)); samer@0: } else if (cmd.equals("stretch")) { samer@0: setStretch(X._bool(env.datum(),!stretch)); samer@0: } else if (cmd.equals("cell.size")) { samer@0: setCellSize( samer@0: X._int(env.datum("cell.width"),cx), samer@0: X._int(env.datum("cell.height"),cy) samer@0: ); samer@0: } else super.execute(cmd,env); samer@0: } samer@0: samer@0: public abstract void next(); samer@0: samer@0: public void update(Observable o, Object oo) { samer@0: if (o==obs && oo!=Viewable.DISPOSING) next(); samer@0: else super.update(o,oo); samer@0: } samer@0: }