1 package org.woehlke.computer.kurzweil.tabs.mandelbrot2julia.config; 2 3 4 import lombok.Getter; 5 import lombok.extern.java.Log; 6 import org.woehlke.computer.kurzweil.application.ComputerKurzweilContext; 7 import org.woehlke.computer.kurzweil.commons.tabs.TabContext; 8 import org.woehlke.computer.kurzweil.tabs.mandelbrot2julia.control.MandelbrotController; 9 import org.woehlke.computer.kurzweil.tabs.mandelbrot2julia.model.MandelbrotModel; 10 import org.woehlke.computer.kurzweil.tabs.mandelbrot2julia.MandelbrotTab; 11 import org.woehlke.computer.kurzweil.tabs.mandelbrot2julia.canvas.MandelbrotCanvas; 12 13 14 import java.util.concurrent.ForkJoinTask; 15 16 import static java.lang.Thread.State.NEW; 17 18 @Log 19 @Getter 20 public class MandelbrotContext extends ForkJoinTask<Void> implements TabContext, Mandelbrot { 21 22 private static final long serialVersionUID = 7526471155622776147L; 23 24 private final ComputerKurzweilContext ctx; 25 private final MandelbrotTab tab; 26 private final MandelbrotModel tabModel; 27 private final MandelbrotCanvas canvas; 28 29 private volatile MandelbrotController controller; 30 31 public MandelbrotContext(MandelbrotTab tab, ComputerKurzweilContext ctx) { 32 this.tab = tab; 33 this.ctx = ctx; 34 this.tabModel = new MandelbrotModel(this.ctx.getProperties(), this.tab ); 35 this.canvas = new MandelbrotCanvas(this); 36 this.controller = new MandelbrotController(this.tabModel, this.tab ); 37 } 38 39 @Override 40 public void stopController() { 41 this.controller.exit(); 42 this.controller = null; 43 this.controller = new MandelbrotController(this.tabModel, this.tab ); 44 } 45 46 @Override 47 public void startController() { 48 if (this.controller == null) { 49 this.controller = new MandelbrotController(this.tabModel, this.tab ); 50 } else { 51 if (this.controller.getState() != NEW) { 52 this.stopController(); 53 } 54 } 55 } 56 57 @Override 58 public Void getRawResult() { 59 return null; 60 } 61 62 @Override 63 protected void setRawResult(Void value) { 64 65 } 66 67 @Override 68 protected boolean exec() { 69 this.tab.repaint(); 70 return true; 71 } 72 } 73 74