1 package org.woehlke.computer.kurzweil.tabs;
2
3 import lombok.EqualsAndHashCode;
4 import lombok.Getter;
5 import lombok.ToString;
6 import lombok.extern.log4j.Log4j2;
7 import org.woehlke.computer.kurzweil.application.ComputerKurzweilContext;
8 import org.woehlke.computer.kurzweil.commons.Startable;
9 import org.woehlke.computer.kurzweil.tabs.cca.CyclicCellularAutomatonTab;
10 import org.woehlke.computer.kurzweil.tabs.dla.DiffusionLimitedAggregationTab;
11 import org.woehlke.computer.kurzweil.tabs.mandelbrot2julia.MandelbrotTab;
12 import org.woehlke.computer.kurzweil.tabs.simulatedevolution.SimulatedEvolutionTab;
13 import org.woehlke.computer.kurzweil.tabs.randomwalk.RandomWalkTab;
14
15 import javax.swing.*;
16 import javax.swing.border.CompoundBorder;
17 import java.awt.*;
18 import java.util.ArrayList;
19 import java.util.List;
20
21
22
23
24
25
26
27
28
29 @Log4j2
30 @Getter
31 @ToString(exclude={"ctx","apps","border"},callSuper=true)
32 @EqualsAndHashCode(callSuper=true)
33 public class ComputerKurzweilTabbedPane extends JTabbedPane implements Startable {
34
35 private final CyclicCellularAutomatonTab cyclicCellularAutomatonTab;
36 private final RandomWalkTab randomWalkTab;
37 private final DiffusionLimitedAggregationTab diffusionLimitedAggregationTab;
38 private final MandelbrotTab mandelbrotTab;
39 private final SimulatedEvolutionTab simulatedEvolutionTab;
40
41 private final List<TabPanel> apps = new ArrayList<>();
42 private final CompoundBorder border;
43 private final ComputerKurzweilContext ctx;
44
45 public ComputerKurzweilTabbedPane(
46 ComputerKurzweilContext ctx
47 ) {
48 this.ctx = ctx;
49 this.border = ctx.getTabbedPaneBorder();
50 this.cyclicCellularAutomatonTab = new CyclicCellularAutomatonTab(this);
51 this.randomWalkTab = new RandomWalkTab(this);
52 this.diffusionLimitedAggregationTab = new DiffusionLimitedAggregationTab(this);
53 this.mandelbrotTab = new MandelbrotTab(this);
54 this.simulatedEvolutionTab = new SimulatedEvolutionTab(this);
55 TabPanel[] tabPanelAbstractPanels = {
56 this.cyclicCellularAutomatonTab,
57 this.simulatedEvolutionTab,
58 this.randomWalkTab,
59 this.diffusionLimitedAggregationTab,
60 this.mandelbrotTab
61 };
62 for(int i = 0; i<tabPanelAbstractPanels.length; i++){
63 this.apps.add(tabPanelAbstractPanels[i]);
64 this.addTab(
65 tabPanelAbstractPanels[i].getTitle(),
66 tabPanelAbstractPanels[i].getIcon(),
67 tabPanelAbstractPanels[i],
68 tabPanelAbstractPanels[i].getToolTipText());
69 this.setMnemonicAt(i,tabPanelAbstractPanels[i].getKeyEvent());
70 }
71 this.setBorder(border);
72
73
74 }
75
76 public Tab getActiveTab(){
77 Component c = this.getSelectedComponent();
78 if(c instanceof Tab){
79 return (Tab)c;
80 } else {
81 return null;
82 }
83 }
84
85 @Override
86 public void start(){
87 log.info("start");
88 for(TabPanel tabPanel:apps){
89 tabPanel.stop();
90 }
91 getActiveTab().start();
92 log.info("started");
93 }
94
95 @Override
96 public void stop() {
97 log.info("stop");
98 for(TabPanel tabPanel:apps){
99 tabPanel.stop();
100 }
101 log.info("stopped");
102 }
103
104 }