1 package org.woehlke.computer.kurzweil.application;
2
3 import lombok.Getter;
4 import lombok.ToString;
5 import lombok.extern.log4j.Log4j2;
6 import org.woehlke.computer.kurzweil.commons.Startable;
7 import org.woehlke.computer.kurzweil.commons.model.LatticePoint;
8 import org.woehlke.computer.kurzweil.tabs.simulatedevolution.model.CellCore;
9 import org.woehlke.computer.kurzweil.tabs.simulatedevolution.model.LifeCycle;
10
11 import javax.swing.*;
12 import javax.swing.border.Border;
13 import javax.swing.border.CompoundBorder;
14 import java.util.Date;
15 import java.util.Random;
16
17 @Log4j2
18 @Getter
19 @ToString(exclude={"random","frame"},callSuper=true)
20 public class ComputerKurzweilContext implements Startable {
21
22 private final Random random;
23 private final ComputerKurzweilProperties properties;
24
25 public ComputerKurzweilContext(
26 ComputerKurzweilProperties computerKurzweilProperties
27 ) {
28 this.properties = computerKurzweilProperties;
29 long seed = new Date().getTime();
30 this.random = new Random(seed);
31 }
32
33 public CompoundBorder getTabbedPaneBorder() {
34 return getBorder();
35 }
36
37 public CompoundBorder getFrameBorder(){
38 return getBorder();
39 }
40
41 public CompoundBorder getBorder(){
42 int left = this.getProperties().getAllinone().getView().getBorderPaddingX();
43 int right = this.getProperties().getAllinone().getView().getBorderPaddingX();
44 int top = this.getProperties().getAllinone().getView().getBorderPaddingY();
45 int bottom = this.getProperties().getAllinone().getView().getBorderPaddingY();
46 return BorderFactory.createCompoundBorder(
47 BorderFactory.createEmptyBorder(),
48 BorderFactory.createEmptyBorder(left,right,top,bottom)
49 );
50 }
51
52 public CompoundBorder getBorder(String label){
53 int top = this.getProperties().getAllinone().getView().getBorderPaddingY();
54 int left = this.getProperties().getAllinone().getView().getBorderPaddingX();
55 int bottom = this.getProperties().getAllinone().getView().getBorderPaddingY();
56 int right = this.getProperties().getAllinone().getView().getBorderPaddingX();
57 return BorderFactory.createCompoundBorder(
58 BorderFactory.createTitledBorder(label),
59 BorderFactory.createEmptyBorder(top,left,bottom,right)
60 );
61 }
62
63 private CompoundBorder getDoubleBorder(){
64 int left = this.getProperties().getAllinone().getView().getBorderPaddingX();
65 int right = this.getProperties().getAllinone().getView().getBorderPaddingX();
66 int top = this.getProperties().getAllinone().getView().getBorderPaddingY();
67 int bottom = this.getProperties().getAllinone().getView().getBorderPaddingY();
68 return BorderFactory.createCompoundBorder(
69 BorderFactory.createEmptyBorder(left,right,top,bottom),
70 BorderFactory.createEmptyBorder(left,right,top,bottom)
71 );
72 }
73
74 private CompoundBorder getDoubleBorder(String label){
75 int left = this.getProperties().getAllinone().getView().getBorderPaddingX();
76 int right = this.getProperties().getAllinone().getView().getBorderPaddingX();
77 int top = this.getProperties().getAllinone().getView().getBorderPaddingY();
78 int bottom = this.getProperties().getAllinone().getView().getBorderPaddingY();
79 return BorderFactory.createCompoundBorder(
80 BorderFactory.createEmptyBorder(left,right,top,bottom),
81 BorderFactory.createEmptyBorder(left,right,top,bottom)
82 );
83 }
84
85 public CompoundBorder getBottomButtonsPanelBorder(){
86 return getDoubleBorder();
87 }
88
89 public CompoundBorder getBottomButtonsPanelBorder(String label){
90 return getDoubleBorder(label);
91 }
92
93 private Border getZeroBorder() {
94 int top = 0;
95 int left = 0;
96 int bottom = 0;
97 int right = 0;
98 return BorderFactory.createEmptyBorder(top,left,bottom,right);
99 }
100
101 public Border getTabBorder() {
102 return getZeroBorder();
103 }
104
105 public Border getCanvasBorder() {
106 return getZeroBorder();
107 }
108
109 public LatticePoint getWorldDimensions(){
110 int x = this.properties.getAllinone().getLattice().getWidth();
111 int y = this.properties.getAllinone().getLattice().getHeight();
112 return new LatticePoint(x,y);
113 }
114
115 public LatticePoint getNextRandomLatticePoint() {
116 int x = this.properties.getAllinone().getLattice().getWidth();
117 int y = this.properties.getAllinone().getLattice().getHeight();
118 int nextX = this.getRandom().nextInt(x);
119 int nextY = this.getRandom().nextInt(y);
120 LatticePointeil/commons/model/LatticePoint.html#LatticePoint">LatticePoint p = new LatticePoint(nextX,nextY);
121 p.normalize(this.getWorldDimensions());
122 p.absoluteValue();
123 return p;
124 }
125
126 public LifeCycle getNewCellLifeCycle() {
127 return new LifeCycle(this.properties.getSimulatedevolution().getCellConf().getFatAtBirth());
128 }
129
130 public CellCore getNewCellCore() {
131 return new CellCore(this.random);
132 }
133
134 public void start(){ }
135
136 public void stop() { }
137
138 }