View Javadoc
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   * https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/concurrent/ThreadPoolExecutor.html
24   * https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/concurrent/Executor.html
25   * TODO: https://github.com/Computer-Kurzweil/computer_kurzweil/issues/18
26   * TODO: https://github.com/Computer-Kurzweil/computer_kurzweil/issues/19
27   * http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_14_004.htm
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          //TODO: change tab lister:
73          //this.addAncestorListener(this);
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 }