Put each client limit's count beside its "Limited" choice
The counts sat on a line of their own below the choices they belong to, which also made the Advanced tab the tallest of the four and so decided how much of the dialog the tab strip took. Each box now keeps its natural height, and the free space collects below them. Advanced went from 250px to 220px of preferred height, leaving the tab strip about a third of the dialog rather than half. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ import javax.swing.JRadioButton;
|
|||||||
import javax.swing.JSpinner;
|
import javax.swing.JSpinner;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.SpinnerNumberModel;
|
import javax.swing.SpinnerNumberModel;
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
import java.awt.GridBagLayout;
|
import java.awt.GridBagLayout;
|
||||||
@@ -76,6 +77,7 @@ final class ChannelAdvancedPanel extends JPanel implements ChannelDialog.Tab {
|
|||||||
|
|
||||||
JPanel other = otherSettings();
|
JPanel other = otherSettings();
|
||||||
other.setAlignmentX(0f);
|
other.setAlignmentX(0f);
|
||||||
|
fixHeight(other);
|
||||||
add(other);
|
add(other);
|
||||||
add(Box.createVerticalStrut(6));
|
add(Box.createVerticalStrut(6));
|
||||||
|
|
||||||
@@ -86,6 +88,7 @@ final class ChannelAdvancedPanel extends JPanel implements ChannelDialog.Tab {
|
|||||||
limits.add(limitBox("Family Max Users",
|
limits.add(limitBox("Family Max Users",
|
||||||
new JRadioButton[]{familyInherited, familyUnlimited, familyLimited}, familyMaxUsers));
|
new JRadioButton[]{familyInherited, familyUnlimited, familyLimited}, familyMaxUsers));
|
||||||
limits.setAlignmentX(0f);
|
limits.setAlignmentX(0f);
|
||||||
|
fixHeight(limits);
|
||||||
add(limits);
|
add(limits);
|
||||||
add(Box.createVerticalGlue());
|
add(Box.createVerticalGlue());
|
||||||
}
|
}
|
||||||
@@ -162,26 +165,36 @@ final class ChannelAdvancedPanel extends JPanel implements ChannelDialog.Tab {
|
|||||||
c.gridx = 1;
|
c.gridx = 1;
|
||||||
c.gridy = 2;
|
c.gridy = 2;
|
||||||
panel.add(encrypted, c);
|
panel.add(encrypted, c);
|
||||||
|
|
||||||
c.gridx = 0;
|
|
||||||
c.gridy = 3;
|
|
||||||
c.weighty = 1;
|
|
||||||
panel.add(Box.createGlue(), c);
|
|
||||||
return panel;
|
return panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A limit box: its choices stacked, with the count beside the last of them —
|
||||||
|
* "Limited", the only choice it belongs to.
|
||||||
|
*/
|
||||||
private JPanel limitBox(String title, JRadioButton[] choices, JSpinner spinner) {
|
private JPanel limitBox(String title, JRadioButton[] choices, JSpinner spinner) {
|
||||||
JPanel box = new JPanel();
|
JPanel box = new JPanel();
|
||||||
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
|
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
|
||||||
box.setBorder(BorderFactory.createTitledBorder(title));
|
box.setBorder(BorderFactory.createTitledBorder(title));
|
||||||
for (JRadioButton radio : choices) {
|
for (int i = 0; i < choices.length; i++) {
|
||||||
|
JRadioButton radio = choices[i];
|
||||||
radio.setAlignmentX(0f);
|
radio.setAlignmentX(0f);
|
||||||
box.add(radio);
|
if (i < choices.length - 1) {
|
||||||
|
box.add(radio);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
JPanel row = new JPanel(new FlowLayout(FlowLayout.LEFT, 6, 0));
|
||||||
|
row.setAlignmentX(0f);
|
||||||
|
row.add(radio);
|
||||||
|
row.add(spinner);
|
||||||
|
box.add(row);
|
||||||
}
|
}
|
||||||
spinner.setAlignmentX(0f);
|
|
||||||
box.add(Box.createVerticalStrut(4));
|
|
||||||
box.add(spinner);
|
|
||||||
box.add(Box.createVerticalGlue());
|
box.add(Box.createVerticalGlue());
|
||||||
return box;
|
return box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Keeps a section at its natural height, so the free space collects at the bottom. */
|
||||||
|
private static void fixHeight(JPanel panel) {
|
||||||
|
panel.setMaximumSize(new Dimension(Integer.MAX_VALUE, panel.getPreferredSize().height));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user