Browse Source

Implements button sorting according to UI Sort settings

fixes issue 4040

Change-Id: Iee0dbde098f0870624112f77fddeee44c266191f
Reviewed-on: http://gerrit.dmdirc.com/1194
Reviewed-by: Gregory Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Local Commits <dmdirc@googlemail.com>
tags/0.6.4
Simon Mott 14 years ago
parent
commit
eb13f5902b

+ 40
- 4
src/com/dmdirc/addons/ui_swing/framemanager/buttonbar/ButtonBar.java View File

23
 package com.dmdirc.addons.ui_swing.framemanager.buttonbar;
23
 package com.dmdirc.addons.ui_swing.framemanager.buttonbar;
24
 
24
 
25
 import com.dmdirc.FrameContainer;
25
 import com.dmdirc.FrameContainer;
26
+import com.dmdirc.FrameContainerComparator;
26
 import com.dmdirc.addons.ui_swing.SwingController;
27
 import com.dmdirc.addons.ui_swing.SwingController;
27
 import com.dmdirc.addons.ui_swing.SwingWindowFactory;
28
 import com.dmdirc.addons.ui_swing.SwingWindowFactory;
28
 import com.dmdirc.addons.ui_swing.UIUtilities;
29
 import com.dmdirc.addons.ui_swing.UIUtilities;
35
 import com.dmdirc.ui.IconManager;
36
 import com.dmdirc.ui.IconManager;
36
 import com.dmdirc.addons.ui_swing.framemanager.FrameManager;
37
 import com.dmdirc.addons.ui_swing.framemanager.FrameManager;
37
 import com.dmdirc.addons.ui_swing.framemanager.FramemanagerPosition;
38
 import com.dmdirc.addons.ui_swing.framemanager.FramemanagerPosition;
39
+import com.dmdirc.interfaces.ConfigChangeListener;
38
 import com.dmdirc.ui.WindowManager;
40
 import com.dmdirc.ui.WindowManager;
39
 import com.dmdirc.ui.interfaces.UIController;
41
 import com.dmdirc.ui.interfaces.UIController;
40
 import com.dmdirc.ui.interfaces.Window;
42
 import com.dmdirc.ui.interfaces.Window;
49
 import java.awt.event.MouseEvent;
51
 import java.awt.event.MouseEvent;
50
 import java.awt.event.MouseListener;
52
 import java.awt.event.MouseListener;
51
 import java.io.Serializable;
53
 import java.io.Serializable;
54
+import java.util.ArrayList;
52
 import java.util.Collection;
55
 import java.util.Collection;
53
 import java.util.Collections;
56
 import java.util.Collections;
54
 
57
 
72
  */
75
  */
73
 public final class ButtonBar implements FrameManager, ActionListener,
76
 public final class ButtonBar implements FrameManager, ActionListener,
74
         ComponentListener, Serializable, NotificationListener,
77
         ComponentListener, Serializable, NotificationListener,
75
-        SelectionListener, FrameInfoListener, MouseListener {
78
+        SelectionListener, FrameInfoListener, MouseListener, ConfigChangeListener {
76
 
79
 
77
     /**
80
     /**
78
      * A version number for this class. It should be changed whenever the class
81
      * A version number for this class. It should be changed whenever the class
102
     private int buttonWidth = 0;
105
     private int buttonWidth = 0;
103
     /** The height of buttons. */
106
     /** The height of buttons. */
104
     private int buttonHeight = 25;
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
     /** UI Controller. */
114
     /** UI Controller. */
106
     private SwingWindowFactory controller;
115
     private SwingWindowFactory controller;
107
 
116
 
120
         position = FramemanagerPosition.getPosition(
129
         position = FramemanagerPosition.getPosition(
121
                 IdentityManager.getGlobalConfig().getOption("ui",
130
                 IdentityManager.getGlobalConfig().getOption("ui",
122
                 "framemanagerPosition"));
131
                 "framemanagerPosition"));
123
-
132
+        IdentityManager.getGlobalConfig().addChangeListener("ui",
133
+                        "sortrootwindows", this);
134
+        IdentityManager.getGlobalConfig().addChangeListener("ui",
135
+                        "sortchildwindows", this);
124
         if (position.isHorizontal()) {
136
         if (position.isHorizontal()) {
125
             buttonPanel = new ButtonPanel(new MigLayout("ins rel, fill, flowx"),
137
             buttonPanel = new ButtonPanel(new MigLayout("ins rel, fill, flowx"),
126
                     this);
138
                     this);
207
                             buttonWidth, buttonHeight));
219
                             buttonWidth, buttonHeight));
208
                 buttonPanel.add(button);
220
                 buttonPanel.add(button);
209
                 if (!window.getChildren().isEmpty()) {
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
     private void relayout() {
236
     private void relayout() {
220
         buttonPanel.setVisible(false);
237
         buttonPanel.setVisible(false);
221
         buttonPanel.removeAll();
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
         buttonPanel.setVisible(true);
247
         buttonPanel.setVisible(true);
224
     }
248
     }
225
 
249
 
509
     public void mouseExited(MouseEvent e) {
533
     public void mouseExited(MouseEvent e) {
510
         //Do nothing
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
 }

Loading…
Cancel
Save