1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.log4j.chainsaw;
23
24 import com.thoughtworks.xstream.XStream;
25 import com.thoughtworks.xstream.io.xml.DomDriver;
26 import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
27 import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
28 import org.apache.log4j.chainsaw.prefs.SettingsListener;
29 import org.apache.log4j.chainsaw.prefs.SettingsManager;
30
31 import javax.swing.*;
32 import java.awt.*;
33 import java.io.File;
34 import java.io.FileReader;
35 import java.io.FileWriter;
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 class ChainsawTabbedPane extends JTabbedPane implements SettingsListener {
58 public SavableTabSetting tabSetting;
59 public static final String WELCOME_TAB = "Welcome";
60 public static final String ZEROCONF = "Zeroconf";
61
62
63
64
65 public ChainsawTabbedPane() {
66 super();
67 }
68
69
70
71
72
73
74
75 boolean containsWelcomePanel() {
76 return indexOfTab("Welcome") > -1;
77 }
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 public void addANewTab(String name, JComponent component, Icon icon) {
93 super.insertTab(name, icon, component, null, getTabCount());
94
95 super.fireStateChanged();
96 if (!"chainsaw-log".equals(name)) {
97 EventQueue.invokeLater(() -> setSelectedTab(getTabCount() - 1));
98 }
99 }
100
101 public void setSelectedTab(int index) {
102 if (getTabCount() >= index) {
103 setSelectedIndex(index);
104 }
105
106 getSelectedComponent().setVisible(true);
107 getSelectedComponent().validate();
108 super.fireStateChanged();
109 }
110
111 public void addANewTab(
112 String name, JComponent component, Icon icon, String tooltip) {
113 super.insertTab(name, icon, component, tooltip, getTabCount());
114 super.fireStateChanged();
115 }
116
117 public void remove(Component component) {
118 super.remove(component);
119 super.fireStateChanged();
120 }
121
122
123
124
125
126
127
128
129 public void saveSettings(SaveSettingsEvent event) {
130 File file = new File(SettingsManager.getInstance().getSettingsDirectory(), "tab-settings.xml");
131 XStream stream = new XStream(new DomDriver());
132 try {
133 FileWriter writer = new FileWriter(file);
134 int count = super.getTabCount();
135 String title;
136 SavableTabSetting setting = new SavableTabSetting();
137 for (int i = 0; i < count; i++) {
138 title = super.getTitleAt(i);
139 switch (title) {
140 case WELCOME_TAB:
141 setting.setWelcome(true);
142 break;
143 case "chainsaw-log":
144 setting.setChainsawLog(true);
145 break;
146 case ZEROCONF:
147 setting.setZeroconf(true);
148 break;
149 }
150 }
151
152 stream.toXML(setting, writer);
153 writer.close();
154
155 } catch (Exception e) {
156 file.delete();
157 e.printStackTrace();
158 }
159 }
160
161
162
163
164
165
166
167 public void loadSettings(LoadSettingsEvent event) {
168 File file = new File(SettingsManager.getInstance().getSettingsDirectory(), "tab-settings.xml");
169 XStream stream = new XStream(new DomDriver());
170 try {
171 if (file.exists()) {
172 FileReader reader = new FileReader(file);
173 tabSetting = (SavableTabSetting) stream.fromXML(reader);
174 reader.close();
175 } else {
176 tabSetting = new SavableTabSetting();
177 tabSetting.setWelcome(true);
178 tabSetting.setChainsawLog(true);
179 tabSetting.setZeroconf(true);
180 }
181 } catch (Exception e) {
182 e.printStackTrace();
183 file.delete();
184 }
185 }
186 }