View Javadoc
1   /*******************************************************************************
2    * Copyhacked (H) 2012-2025.
3    * This program and the accompanying materials
4    * are made available under no term at all, use it like
5    * you want, but share and discuss it
6    * every time possible with every body.
7    *
8    * Contributors:
9    *      ron190 at ymail dot com - initial implementation
10   *******************************************************************************/
11  package com.jsql.view.swing.tab;
12  
13  import com.jsql.util.I18nUtil;
14  import com.jsql.view.swing.text.JToolTipI18n;
15  import com.jsql.view.swing.util.I18nViewUtil;
16  import com.jsql.view.swing.util.MediatorHelper;
17  import com.jsql.view.swing.util.ModelSvgIcon;
18  import com.jsql.view.swing.util.UiUtil;
19  
20  import javax.swing.*;
21  import java.awt.*;
22  import java.awt.event.MouseAdapter;
23  import java.awt.event.MouseEvent;
24  import java.util.Arrays;
25  import java.util.List;
26  import java.util.concurrent.atomic.AtomicInteger;
27  import java.util.concurrent.atomic.AtomicReference;
28  
29  /**
30   * Panel on the left with functionalities like webshell, file reading and admin page finder.
31   */
32  public class TabManagers extends TabbedPaneWheeled {
33  
34      public static final String TAB_MANAGERS = "tabManagers";
35  
36      private final transient List<ModelSvgIcon> iconsTabs = Arrays.asList(
37          UiUtil.DATABASE_BOLD, UiUtil.ADMIN, UiUtil.DOWNLOAD, UiUtil.TERMINAL, UiUtil.LOCK, UiUtil.TEXTFIELD, UiUtil.BATCH
38      );
39  
40      /**
41       * Create manager panel.
42       */
43      public TabManagers() {
44          this.setName(TabManagers.TAB_MANAGERS);
45          this.setMaximumSize(new Dimension(this.getMaximumSize().width, 35));
46          this.setPreferredSize(new Dimension(this.getPreferredSize().width, 35));
47  
48          AtomicInteger indexTab = new AtomicInteger();
49          this.iconsTabs.forEach(modelSvgIcon -> this.buildI18nTab(modelSvgIcon, indexTab.getAndIncrement()));
50          this.addChangeListener(e -> {
51              CardLayout cardLayout = (CardLayout) MediatorHelper.tabManagersCards().getLayout();
52              cardLayout.show(MediatorHelper.tabManagersCards(), this.getTabComponentAt(this.getSelectedIndex()).getName());
53          });
54      }
55      
56      private void buildI18nTab(ModelSvgIcon modelSvgIcon, int index) {
57          Icon icon = modelSvgIcon.getIcon();
58          String keyLabel = modelSvgIcon.getKeyLabel();
59          String keyTooltip = modelSvgIcon.getKeyTooltip();
60          AtomicReference<JToolTipI18n> tooltipAtomic = new AtomicReference<>(new JToolTipI18n(I18nUtil.valueByKey(keyTooltip)));
61          JLabel labelTab = new JLabel(I18nUtil.valueByKey(keyLabel), icon, SwingConstants.CENTER) {
62              @Override
63              public JToolTip createToolTip() {
64                  tooltipAtomic.set(new JToolTipI18n(I18nUtil.valueByKey(keyTooltip)));
65                  return tooltipAtomic.get();
66              }
67          };
68          
69          labelTab.setName(keyLabel);
70          labelTab.addMouseListener(new MouseAdapter() {
71              @Override
72              public void mousePressed(MouseEvent e) {
73                  CardLayout cardLayout = (CardLayout) MediatorHelper.tabManagersCards().getLayout();
74                  cardLayout.show(MediatorHelper.tabManagersCards(), TabManagers.this.getTabComponentAt(index).getName());
75                  TabManagers.this.setSelectedIndex(index);
76              }
77          });
78  
79          this.addTab(I18nUtil.valueByKey(keyLabel), icon, null);  // Required for i18n to work
80          this.setTabComponentAt(  // TODO Break focus, should not be used
81              this.indexOfTab(I18nUtil.valueByKey(keyLabel)),
82              labelTab
83          );
84  
85          I18nViewUtil.addComponentForKey(keyLabel, labelTab);
86          I18nViewUtil.addComponentForKey(keyTooltip, tooltipAtomic.get());
87          
88          labelTab.setToolTipText(I18nUtil.valueByKey(keyTooltip));
89      }
90  
91      public List<ModelSvgIcon> getIconsTabs() {
92          return this.iconsTabs;
93      }
94  }