|
@@ -23,6 +23,7 @@
|
23
|
23
|
package com.dmdirc.addons.ui_swing.framemanager.buttonbar;
|
24
|
24
|
|
25
|
25
|
import com.dmdirc.FrameContainer;
|
|
26
|
+import com.dmdirc.FrameContainerComparator;
|
26
|
27
|
import com.dmdirc.addons.ui_swing.SwingController;
|
27
|
28
|
import com.dmdirc.addons.ui_swing.SwingWindowFactory;
|
28
|
29
|
import com.dmdirc.addons.ui_swing.UIUtilities;
|
|
@@ -35,6 +36,7 @@ import com.dmdirc.interfaces.SelectionListener;
|
35
|
36
|
import com.dmdirc.ui.IconManager;
|
36
|
37
|
import com.dmdirc.addons.ui_swing.framemanager.FrameManager;
|
37
|
38
|
import com.dmdirc.addons.ui_swing.framemanager.FramemanagerPosition;
|
|
39
|
+import com.dmdirc.interfaces.ConfigChangeListener;
|
38
|
40
|
import com.dmdirc.ui.WindowManager;
|
39
|
41
|
import com.dmdirc.ui.interfaces.UIController;
|
40
|
42
|
import com.dmdirc.ui.interfaces.Window;
|
|
@@ -49,6 +51,7 @@ import java.awt.event.ComponentListener;
|
49
|
51
|
import java.awt.event.MouseEvent;
|
50
|
52
|
import java.awt.event.MouseListener;
|
51
|
53
|
import java.io.Serializable;
|
|
54
|
+import java.util.ArrayList;
|
52
|
55
|
import java.util.Collection;
|
53
|
56
|
import java.util.Collections;
|
54
|
57
|
|
|
@@ -72,7 +75,7 @@ import net.miginfocom.swing.MigLayout;
|
72
|
75
|
*/
|
73
|
76
|
public final class ButtonBar implements FrameManager, ActionListener,
|
74
|
77
|
ComponentListener, Serializable, NotificationListener,
|
75
|
|
- SelectionListener, FrameInfoListener, MouseListener {
|
|
78
|
+ SelectionListener, FrameInfoListener, MouseListener, ConfigChangeListener {
|
76
|
79
|
|
77
|
80
|
/**
|
78
|
81
|
* A version number for this class. It should be changed whenever the class
|
|
@@ -102,6 +105,12 @@ public final class ButtonBar implements FrameManager, ActionListener,
|
102
|
105
|
private int buttonWidth = 0;
|
103
|
106
|
/** The height of buttons. */
|
104
|
107
|
private int buttonHeight = 25;
|
|
108
|
+ /** Sort root windows */
|
|
109
|
+ private boolean sortRootWindows = IdentityManager.getGlobalConfig()
|
|
110
|
+ .getOptionBool("ui", "sortrootwindows");
|
|
111
|
+ /** Sort child windows */
|
|
112
|
+ private boolean sortChildWindows = IdentityManager.getGlobalConfig()
|
|
113
|
+ .getOptionBool("ui", "sortchildwindows");
|
105
|
114
|
/** UI Controller. */
|
106
|
115
|
private SwingWindowFactory controller;
|
107
|
116
|
|
|
@@ -120,7 +129,10 @@ public final class ButtonBar implements FrameManager, ActionListener,
|
120
|
129
|
position = FramemanagerPosition.getPosition(
|
121
|
130
|
IdentityManager.getGlobalConfig().getOption("ui",
|
122
|
131
|
"framemanagerPosition"));
|
123
|
|
-
|
|
132
|
+ IdentityManager.getGlobalConfig().addChangeListener("ui",
|
|
133
|
+ "sortrootwindows", this);
|
|
134
|
+ IdentityManager.getGlobalConfig().addChangeListener("ui",
|
|
135
|
+ "sortchildwindows", this);
|
124
|
136
|
if (position.isHorizontal()) {
|
125
|
137
|
buttonPanel = new ButtonPanel(new MigLayout("ins rel, fill, flowx"),
|
126
|
138
|
this);
|
|
@@ -207,7 +219,12 @@ public final class ButtonBar implements FrameManager, ActionListener,
|
207
|
219
|
buttonWidth, buttonHeight));
|
208
|
220
|
buttonPanel.add(button);
|
209
|
221
|
if (!window.getChildren().isEmpty()) {
|
210
|
|
- insertButtons(window.getChildren());
|
|
222
|
+ final ArrayList childList = new ArrayList<FrameContainer<?>>(
|
|
223
|
+ window.getChildren());
|
|
224
|
+ if (sortChildWindows) {
|
|
225
|
+ Collections.sort(childList, new FrameContainerComparator());
|
|
226
|
+ }
|
|
227
|
+ insertButtons(childList);
|
211
|
228
|
}
|
212
|
229
|
}
|
213
|
230
|
}
|
|
@@ -219,7 +236,14 @@ public final class ButtonBar implements FrameManager, ActionListener,
|
219
|
236
|
private void relayout() {
|
220
|
237
|
buttonPanel.setVisible(false);
|
221
|
238
|
buttonPanel.removeAll();
|
222
|
|
- insertButtons(WindowManager.getRootWindows());
|
|
239
|
+
|
|
240
|
+ final ArrayList windowList = new ArrayList<FrameContainer<?>>(
|
|
241
|
+ WindowManager.getRootWindows());
|
|
242
|
+ if (sortRootWindows) {
|
|
243
|
+ Collections.sort(windowList, new FrameContainerComparator());
|
|
244
|
+ }
|
|
245
|
+
|
|
246
|
+ insertButtons(windowList);
|
223
|
247
|
buttonPanel.setVisible(true);
|
224
|
248
|
}
|
225
|
249
|
|
|
@@ -509,4 +533,16 @@ public final class ButtonBar implements FrameManager, ActionListener,
|
509
|
533
|
public void mouseExited(MouseEvent e) {
|
510
|
534
|
//Do nothing
|
511
|
535
|
}
|
|
536
|
+
|
|
537
|
+ @Override
|
|
538
|
+ public void configChanged(String domain, String key) {
|
|
539
|
+ if ("sortrootwindows".equals(key)) {
|
|
540
|
+ sortRootWindows = IdentityManager.getGlobalConfig()
|
|
541
|
+ .getOptionBool("ui", "sortrootwindows");
|
|
542
|
+ } else if ("sortchildwindows".equals(key)) {
|
|
543
|
+ sortChildWindows = IdentityManager.getGlobalConfig()
|
|
544
|
+ .getOptionBool("ui", "sortrootwindows");
|
|
545
|
+ }
|
|
546
|
+ relayout();
|
|
547
|
+ }
|
512
|
548
|
}
|