|
@@ -23,6 +23,7 @@
|
23
|
23
|
package com.dmdirc.addons.ui_swing.components.desktopPane;
|
24
|
24
|
|
25
|
25
|
import com.dmdirc.FrameContainer;
|
|
26
|
+import com.dmdirc.addons.ui_swing.BackgroundOption;
|
26
|
27
|
import com.dmdirc.addons.ui_swing.MainFrame;
|
27
|
28
|
import com.dmdirc.addons.ui_swing.UIUtilities;
|
28
|
29
|
import com.dmdirc.addons.ui_swing.components.TreeScroller;
|
|
@@ -30,6 +31,8 @@ import com.dmdirc.addons.ui_swing.components.frames.InputTextFrame;
|
30
|
31
|
import com.dmdirc.addons.ui_swing.components.frames.TextFrame;
|
31
|
32
|
import com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel;
|
32
|
33
|
import com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode;
|
|
34
|
+import com.dmdirc.config.IdentityManager;
|
|
35
|
+import com.dmdirc.interfaces.ConfigChangeListener;
|
33
|
36
|
import com.dmdirc.interfaces.SelectionListener;
|
34
|
37
|
import com.dmdirc.logger.ErrorLevel;
|
35
|
38
|
import com.dmdirc.logger.Logger;
|
|
@@ -37,15 +40,21 @@ import com.dmdirc.ui.WindowManager;
|
37
|
40
|
import com.dmdirc.ui.interfaces.Window;
|
38
|
41
|
import com.dmdirc.ui.interfaces.FrameListener;
|
39
|
42
|
import com.dmdirc.util.ReturnableThread;
|
|
43
|
+import com.dmdirc.util.URLBuilder;
|
40
|
44
|
|
41
|
45
|
import java.awt.Color;
|
|
46
|
+import java.awt.Graphics;
|
|
47
|
+import java.awt.Graphics2D;
|
|
48
|
+import java.awt.Image;
|
42
|
49
|
import java.beans.PropertyChangeEvent;
|
43
|
50
|
import java.beans.PropertyChangeListener;
|
|
51
|
+import java.io.IOException;
|
44
|
52
|
import java.util.Arrays;
|
45
|
53
|
import java.util.HashMap;
|
46
|
54
|
import java.util.Map;
|
47
|
55
|
import java.util.Stack;
|
48
|
56
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
57
|
+import javax.imageio.ImageIO;
|
49
|
58
|
|
50
|
59
|
import javax.swing.BorderFactory;
|
51
|
60
|
import javax.swing.JComponent;
|
|
@@ -61,7 +70,7 @@ import javax.swing.tree.TreeSelectionModel;
|
61
|
70
|
* DMDirc Extentions to JDesktopPane.
|
62
|
71
|
*/
|
63
|
72
|
public class DMDircDesktopPane extends JDesktopPane implements FrameListener,
|
64
|
|
- SelectionListener, PropertyChangeListener {
|
|
73
|
+ SelectionListener, PropertyChangeListener, ConfigChangeListener {
|
65
|
74
|
|
66
|
75
|
/** Logger to use. */
|
67
|
76
|
private static final java.util.logging.Logger LOGGER =
|
|
@@ -96,16 +105,24 @@ public class DMDircDesktopPane extends JDesktopPane implements FrameListener,
|
96
|
105
|
private AtomicBoolean changing = new AtomicBoolean(false);
|
97
|
106
|
/** Main Frame. */
|
98
|
107
|
private MainFrame mainFrame;
|
|
108
|
+ /** Background image. */
|
|
109
|
+ private Image backgroundImage;
|
|
110
|
+ /** Background image option. */
|
|
111
|
+ private BackgroundOption backgroundOption;
|
|
112
|
+ /** Config domain. */
|
|
113
|
+ private String domain;
|
99
|
114
|
|
100
|
115
|
/**
|
101
|
116
|
* Initialises the DMDirc desktop pane.
|
102
|
117
|
*
|
103
|
118
|
* @param mainFrame Main frame
|
|
119
|
+ * @param domain Config domain
|
104
|
120
|
*/
|
105
|
|
- public DMDircDesktopPane(final MainFrame mainFrame) {
|
|
121
|
+ public DMDircDesktopPane(final MainFrame mainFrame, final String domain) {
|
106
|
122
|
super();
|
107
|
123
|
|
108
|
124
|
this.mainFrame = mainFrame;
|
|
125
|
+ this.domain = domain;
|
109
|
126
|
setBackground(new Color(238, 238, 238));
|
110
|
127
|
setBorder(BorderFactory.createEtchedBorder());
|
111
|
128
|
setUI(new ProxyDesktopPaneUI(getUI(), this));
|
|
@@ -125,6 +142,23 @@ public class DMDircDesktopPane extends JDesktopPane implements FrameListener,
|
125
|
142
|
};
|
126
|
143
|
|
127
|
144
|
WindowManager.addFrameListener(this);
|
|
145
|
+ IdentityManager.getGlobalConfig().addChangeListener(domain,
|
|
146
|
+ "desktopbackground", this);
|
|
147
|
+ IdentityManager.getGlobalConfig().addChangeListener(domain,
|
|
148
|
+ "desktopbackgroundoption", this);
|
|
149
|
+
|
|
150
|
+ updateCachedSettings();
|
|
151
|
+ }
|
|
152
|
+
|
|
153
|
+ /** {@inheritDoc} */
|
|
154
|
+ @Override
|
|
155
|
+ public void paintComponent(final Graphics g) {
|
|
156
|
+ if (backgroundImage == null) {
|
|
157
|
+ super.paintComponent(g);
|
|
158
|
+ } else {
|
|
159
|
+ UIUtilities.paintBackground((Graphics2D) g, getBounds(),
|
|
160
|
+ backgroundImage, backgroundOption);
|
|
161
|
+ }
|
128
|
162
|
}
|
129
|
163
|
|
130
|
164
|
/** {@inheritDoc} */
|
|
@@ -227,8 +261,8 @@ public class DMDircDesktopPane extends JDesktopPane implements FrameListener,
|
227
|
261
|
final TreeViewNode node = nodes.get(window);
|
228
|
262
|
if (node.getLevel() == 0) {
|
229
|
263
|
Logger.appError(ErrorLevel.MEDIUM,
|
230
|
|
- "delServer triggered for root node" +
|
231
|
|
- node.toString(),
|
|
264
|
+ "delServer triggered for root node"
|
|
265
|
+ + node.toString(),
|
232
|
266
|
new IllegalArgumentException());
|
233
|
267
|
} else {
|
234
|
268
|
model.removeNodeFromParent(nodes.get(window));
|
|
@@ -354,4 +388,35 @@ public class DMDircDesktopPane extends JDesktopPane implements FrameListener,
|
354
|
388
|
}
|
355
|
389
|
changing.set(false);
|
356
|
390
|
}
|
|
391
|
+
|
|
392
|
+ private void updateCachedSettings() {
|
|
393
|
+ final String backgroundPath = IdentityManager.getGlobalConfig().
|
|
394
|
+ getOption(domain, "desktopbackground");
|
|
395
|
+ UIUtilities.invokeAndWait(new Runnable() {
|
|
396
|
+
|
|
397
|
+ /** {@inheritDoc} */
|
|
398
|
+ @Override
|
|
399
|
+ public void run() {
|
|
400
|
+ try {
|
|
401
|
+ backgroundImage = ImageIO.read(URLBuilder.buildURL(
|
|
402
|
+ backgroundPath));
|
|
403
|
+ } catch (IOException ex) {
|
|
404
|
+ backgroundImage = null;
|
|
405
|
+ }
|
|
406
|
+ }
|
|
407
|
+ });
|
|
408
|
+ try {
|
|
409
|
+ backgroundOption = BackgroundOption.valueOf(IdentityManager.
|
|
410
|
+ getGlobalConfig().getOption(domain,
|
|
411
|
+ "desktopbackgroundoption"));
|
|
412
|
+ } catch (IllegalArgumentException ex) {
|
|
413
|
+ backgroundOption = BackgroundOption.CENTER;
|
|
414
|
+ }
|
|
415
|
+ }
|
|
416
|
+
|
|
417
|
+ /** {@inheritDoc} */
|
|
418
|
+ @Override
|
|
419
|
+ public void configChanged(final String domain, final String key) {
|
|
420
|
+ updateCachedSettings();
|
|
421
|
+ }
|
357
|
422
|
}
|