Procházet zdrojové kódy

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 před 14 roky
rodič
revize
eb13f5902b

+ 40
- 4
src/com/dmdirc/addons/ui_swing/framemanager/buttonbar/ButtonBar.java Zobrazit soubor

@@ -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
 }

Načítá se…
Zrušit
Uložit