1
2
3
4
5
6
7
8
9
10
11 package com.jsql.view.swing.panel.split;
12
13 import com.jsql.view.swing.util.JSplitPaneWithZeroSizeDivider;
14 import com.jsql.model.InjectionModel;
15 import com.jsql.util.I18nUtil;
16 import com.jsql.util.PreferencesUtil;
17 import com.jsql.view.swing.panel.PanelConsoles;
18 import com.jsql.view.swing.tab.TabManagersCards;
19 import com.jsql.view.swing.tab.TabResults;
20 import com.jsql.view.swing.util.MediatorHelper;
21 import com.jsql.view.swing.util.UiUtil;
22
23 import javax.swing.*;
24 import java.awt.*;
25 import java.awt.event.MouseAdapter;
26 import java.awt.event.MouseEvent;
27 import java.util.prefs.Preferences;
28
29
30
31
32 public class SplitNS extends JSplitPaneWithZeroSizeDivider {
33
34 public static final String BUTTON_SHOW_CONSOLES_HIDDEN = "buttonShowConsolesHidden";
35
36
37
38
39 private final JSplitPane splitEW = new JSplitPaneWithZeroSizeDivider(JSplitPane.HORIZONTAL_SPLIT);
40
41 private static final JPanel PANEL_HIDDEN_CONSOLES = new JPanel();
42
43
44
45
46
47 private static final ActionHideShowConsole ACTION_HIDE_SHOW_CONSOLE = new ActionHideShowConsole(SplitNS.PANEL_HIDDEN_CONSOLES);
48 private static final ActionHideShowResult ACTION_HIDE_SHOW_RESULT= new ActionHideShowResult();
49
50
51
52
53
54 public SplitNS() {
55 super(JSplitPane.VERTICAL_SPLIT);
56 var preferences = Preferences.userRoot().node(InjectionModel.class.getName());
57 var tabManagersProxy = new TabManagersCards();
58 new TabResults();
59
60
61 this.splitEW.setLeftComponent(tabManagersProxy);
62 JLabel labelApp = new JLabel(UiUtil.APP_BIG.getIcon());
63 labelApp.setMinimumSize(new Dimension(100, 0));
64 this.splitEW.setRightComponent(labelApp);
65 var verticalLeftRightSplitter = preferences.getDouble(PreferencesUtil.EW_SPLIT, 0.33);
66 this.splitEW.setDividerLocation(Math.clamp(verticalLeftRightSplitter, 0.0, 1.0));
67
68 JLabel labelShowConsoles = new JLabel(UiUtil.ARROW_UP.getIcon());
69 labelShowConsoles.setBorder(BorderFactory.createEmptyBorder());
70 labelShowConsoles.addMouseListener(new MouseAdapter() {
71 @Override
72 public void mouseClicked(MouseEvent e) {
73 SplitNS.ACTION_HIDE_SHOW_CONSOLE.actionPerformed(null);
74 }
75 });
76 labelShowConsoles.setName(SplitNS.BUTTON_SHOW_CONSOLES_HIDDEN);
77 SplitNS.PANEL_HIDDEN_CONSOLES.setLayout(new BorderLayout());
78 SplitNS.PANEL_HIDDEN_CONSOLES.add(labelShowConsoles, BorderLayout.LINE_END);
79 SplitNS.PANEL_HIDDEN_CONSOLES.setVisible(false);
80 SplitNS.PANEL_HIDDEN_CONSOLES.addMouseListener(new MouseAdapter() {
81 @Override
82 public void mousePressed(MouseEvent e) {
83 if (e.getButton() == MouseEvent.BUTTON2) {
84 SplitNS.ACTION_HIDE_SHOW_CONSOLE.actionPerformed(null);
85 }
86 }
87 });
88
89 var panelManagerResult = new JPanel(new BorderLayout());
90 panelManagerResult.add(this.splitEW, BorderLayout.CENTER);
91 panelManagerResult.add(SplitNS.PANEL_HIDDEN_CONSOLES, BorderLayout.SOUTH);
92 this.setTopComponent(panelManagerResult);
93
94 var panelConsoles = new PanelConsoles();
95 MediatorHelper.register(panelConsoles);
96 this.setBottomComponent(panelConsoles);
97
98 this.setResizeWeight(1);
99 }
100
101
102
103
104 public void initSplitOrientation() {
105 if (MediatorHelper.tabResults().getTabCount() == 0) {
106 int dividerLocation = this.splitEW.getDividerLocation();
107 if (ComponentOrientation.RIGHT_TO_LEFT.equals(ComponentOrientation.getOrientation(I18nUtil.getCurrentLocale()))) {
108 this.splitEW.setLeftComponent(MediatorHelper.tabResults());
109 } else {
110 this.splitEW.setRightComponent(MediatorHelper.tabResults());
111 }
112 SwingUtilities.invokeLater(() -> this.splitEW.setDividerLocation(dividerLocation));
113 }
114 }
115
116 public void invokeLaterWithSplitOrientation(Runnable runnable) {
117 SwingUtilities.invokeLater(() -> {
118 this.initSplitOrientation();
119 runnable.run();
120 });
121 }
122
123
124
125
126 public JSplitPane getSplitEW() {
127 return this.splitEW;
128 }
129
130 public static ActionHideShowConsole getActionHideShowConsole() {
131 return SplitNS.ACTION_HIDE_SHOW_CONSOLE;
132 }
133
134 public static ActionHideShowResult getActionHideShowResult() {
135 return SplitNS.ACTION_HIDE_SHOW_RESULT;
136 }
137 }