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