From b5f68bd6a1ca1c8c419d7737bbc444318035c33d Mon Sep 17 00:00:00 2001 From: Tobias Pietzsch <tobias.pietzsch@gmail.com> Date: Wed, 26 Feb 2014 15:38:10 +0100 Subject: [PATCH] Added "current" and "active in fused" buttons for groups in VisibilityAndGroupingDialog. --- .../tools/VisibilityAndGroupingDialog.java | 112 ++++++++++++++++-- 1 file changed, 101 insertions(+), 11 deletions(-) diff --git a/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java b/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java index 9e97be91..3741726b 100644 --- a/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java +++ b/src/main/java/bdv/tools/VisibilityAndGroupingDialog.java @@ -1,7 +1,9 @@ package bdv.tools; +import static bdv.viewer.VisibilityAndGrouping.Event.CURRENT_GROUP_CHANGED; import static bdv.viewer.VisibilityAndGrouping.Event.CURRENT_SOURCE_CHANGED; import static bdv.viewer.VisibilityAndGrouping.Event.DISPLAY_MODE_CHANGED; +import static bdv.viewer.VisibilityAndGrouping.Event.GROUP_ACTIVITY_CHANGED; import static bdv.viewer.VisibilityAndGrouping.Event.GROUP_NAME_CHANGED; import static bdv.viewer.VisibilityAndGrouping.Event.NUM_SOURCES_CHANGED; import static bdv.viewer.VisibilityAndGrouping.Event.SOURCE_ACTVITY_CHANGED; @@ -24,7 +26,6 @@ import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.BorderFactory; -import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.InputMap; import javax.swing.JCheckBox; @@ -257,10 +258,16 @@ public class VisibilityAndGroupingDialog extends JDialog private final ArrayList< JTextField > nameFields; + private final ArrayList< JRadioButton > currentButtons; + + private final ArrayList< JCheckBox > fusedBoxes; + private final ArrayList< JCheckBox > assignBoxes; private JCheckBox groupingBox; + private JCheckBox fusedModeBox; + private int numSources; private int numGroups; @@ -270,16 +277,21 @@ public class VisibilityAndGroupingDialog extends JDialog super( new GridBagLayout() ); this.visibility = visibilityAndGrouping; nameFields = new ArrayList< JTextField >(); + currentButtons = new ArrayList< JRadioButton >(); + fusedBoxes = new ArrayList< JCheckBox >(); assignBoxes = new ArrayList< JCheckBox >(); numSources = visibilityAndGrouping.numSources(); numGroups = visibilityAndGrouping.numGroups(); recreateContent(); + update(); } protected void recreateContent() { removeAll(); nameFields.clear(); + currentButtons.clear(); + fusedBoxes.clear(); assignBoxes.clear(); numSources = visibility.numSources(); @@ -341,9 +353,56 @@ public class VisibilityAndGroupingDialog extends JDialog add( tf, c ); } - // setup-to-group assignments + // "current" radio-buttons + c.anchor = GridBagConstraints.CENTER; c.gridx = 2; c.gridy = 0; + add( new JLabel( "current" ), c ); + c.gridy = GridBagConstraints.RELATIVE; + final ButtonGroup currentButtonGroup = new ButtonGroup(); + for ( int g = 0; g < numGroups; ++g ) + { + final JRadioButton b = new JRadioButton(); + final int groupIndex = g; + b.addActionListener( new ActionListener() + { + @Override + public void actionPerformed( final ActionEvent e ) + { + if ( b.isSelected() ) + visibility.setCurrentGroup( groupIndex ); + } + } ); + currentButtons.add( b ); + currentButtonGroup.add( b ); + add( b, c ); + } + + // "active in fused" check-boxes + c.gridx = 3; + c.gridy = 0; + c.anchor = GridBagConstraints.CENTER; + add( new JLabel( "active in fused" ), c ); + c.gridy = GridBagConstraints.RELATIVE; + for ( int g = 0; g < numGroups; ++g ) + { + final JCheckBox b = new JCheckBox(); + final int groupIndex = g; + b.addActionListener( new ActionListener() + { + @Override + public void actionPerformed( final ActionEvent e ) + { + visibility.setGroupActive( groupIndex, b.isSelected() ); + } + } ); + fusedBoxes.add( b ); + add( b, c ); + } + + // setup-to-group assignments + c.gridx = 4; + c.gridy = 0; c.gridwidth = numSources; c.anchor = GridBagConstraints.CENTER; add( new JLabel( "assigned sources" ), c ); @@ -352,13 +411,12 @@ public class VisibilityAndGroupingDialog extends JDialog for ( int s = 0; s < numSources; ++s ) { final int sourceIndex = s; - c.gridx = sourceIndex + 2; + c.gridx = sourceIndex + 4; for ( int g = 0; g < numGroups; ++g ) { final int groupIndex = g; c.gridy = g + 1; final JCheckBox b = new JCheckBox(); - b.setSelected( groups.get( g ).getSourceIds().contains( s ) ); b.addActionListener( new ActionListener() { @Override @@ -375,10 +433,10 @@ public class VisibilityAndGroupingDialog extends JDialog } } - final JPanel panel = new JPanel(); - panel.setLayout( new BoxLayout( panel, BoxLayout.LINE_AXIS ) ); + final JPanel modepanel = new JPanel( new GridBagLayout() ); + c.gridwidth = 1; + c.anchor = GridBagConstraints.LINE_START; groupingBox = new JCheckBox(); - groupingBox.setSelected( visibility.isGroupingEnabled() ); groupingBox.addActionListener( new ActionListener() { @Override @@ -387,14 +445,32 @@ public class VisibilityAndGroupingDialog extends JDialog visibility.setGroupingEnabled( groupingBox.isSelected() ); } } ); - panel.add( groupingBox ); - panel.add( new JLabel("enable grouping") ); + c.gridx = 0; + c.gridy = 0; + modepanel.add( groupingBox, c ); + c.gridx = 1; + modepanel.add( new JLabel("enable grouping"), c ); + + fusedModeBox = new JCheckBox(); + fusedModeBox.addActionListener( new ActionListener() + { + @Override + public void actionPerformed( final ActionEvent e ) + { + visibility.setFusedEnabled( fusedModeBox.isSelected() ); + } + } ); + c.gridx = 0; + c.gridy = 1; + modepanel.add( fusedModeBox, c ); + c.gridx = 1; + modepanel.add( new JLabel("enable fused mode"), c ); c.gridx = 0; c.gridy = numGroups + 1; - c.gridwidth = 2 + numSources; + c.gridwidth = 5 + numSources; c.anchor = GridBagConstraints.CENTER; - add( panel, c ); + add( modepanel, c ); invalidate(); final Window frame = SwingUtilities.getWindowAncestor( this ); @@ -410,6 +486,12 @@ public class VisibilityAndGroupingDialog extends JDialog recreateContent(); groupingBox.setSelected( visibility.isGroupingEnabled() ); + fusedModeBox.setSelected( visibility.isFusedEnabled() ); + + currentButtons.get( visibility.getCurrentGroup() ).setSelected( true ); + for ( int g = 0; g < numGroups; ++g ) + fusedBoxes.get( g ).setSelected( visibility.isGroupActive( g ) ); + updateGroupNames(); updateGroupAssignments(); } @@ -447,6 +529,14 @@ public class VisibilityAndGroupingDialog extends JDialog { case DISPLAY_MODE_CHANGED: groupingBox.setSelected( visibility.isGroupingEnabled() ); + fusedModeBox.setSelected( visibility.isFusedEnabled() ); + break; + case CURRENT_GROUP_CHANGED: + currentButtons.get( visibility.getCurrentGroup() ).setSelected( true ); + break; + case GROUP_ACTIVITY_CHANGED: + for ( int g = 0; g < numGroups; ++g ) + fusedBoxes.get( g ).setSelected( visibility.isGroupActive( g ) ); break; case SOURCE_TO_GROUP_ASSIGNMENT_CHANGED: updateGroupAssignments(); -- GitLab