diff --git a/git/src/org/netbeans/modules/git/ui/selectors/Bundle.properties b/git/src/org/netbeans/modules/git/ui/selectors/Bundle.properties --- a/git/src/org/netbeans/modules/git/ui/selectors/Bundle.properties +++ b/git/src/org/netbeans/modules/git/ui/selectors/Bundle.properties @@ -40,3 +40,5 @@ # Portions Copyrighted 2011 Sun Microsystems, Inc. ItemsPanel.titleLabel.text=title +ItemsPanel.btnSelectAll.text=Select &All +ItemsPanel.btnSelectNone.text=Select &None diff --git a/git/src/org/netbeans/modules/git/ui/selectors/ItemSelector.java b/git/src/org/netbeans/modules/git/ui/selectors/ItemSelector.java --- a/git/src/org/netbeans/modules/git/ui/selectors/ItemSelector.java +++ b/git/src/org/netbeans/modules/git/ui/selectors/ItemSelector.java @@ -42,6 +42,8 @@ package org.netbeans.modules.git.ui.selectors; import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -57,6 +59,7 @@ import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; +import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -98,6 +101,8 @@ model.addElement(i); } panel.list.setModel(model); + //inform listeners like select all/none buttons + changeSupport.fireChange(); } @SuppressWarnings("unchecked") @@ -130,6 +135,20 @@ return panel.list.getModel().getSize() == 0; } + /** + * Selects all or deselects all items in the list of items. + * + * @param newState true, if select all, false if select none + */ + private void selectAll(boolean newState) { + for (int i = 0; i < panel.list.getModel().getSize(); i++) { + Item item = (Item) panel.list.getModel().getElementAt(i); + item.isSelected = newState; + } + panel.list.repaint(); + changeSupport.fireChange(); + } + private void attachListeners () { panel.list.addMouseListener(new MouseAdapter() { @Override @@ -145,6 +164,39 @@ } } }); + + panel.btnSelectAll.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + selectAll(true); + } + }); + panel.btnSelectNone.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + selectAll(false); + } + }); + + changeSupport.addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + int selectedItemsCount = 0; + int maxItemsCount = panel.list.getModel().getSize(); + for (int i = 0; i < maxItemsCount; i++) { + Item item = (Item) panel.list.getModel().getElementAt(i); + if (item.isSelected) { + selectedItemsCount++; + } + } + //sync the buttons + panel.btnSelectAll.setEnabled(selectedItemsCount0); + } + }); }; private void switchSelection(int index) { diff --git a/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.form b/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.form --- a/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.form +++ b/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.form @@ -1,11 +1,11 @@ - +
- + @@ -16,11 +16,21 @@ - - + + - + + + + + + + + + + + @@ -29,11 +39,16 @@ - + - - - + + + + + + + + @@ -72,5 +87,27 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.java b/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.java --- a/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.java +++ b/git/src/org/netbeans/modules/git/ui/selectors/ItemsPanel.java @@ -70,14 +70,22 @@ private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); + btnSelectNone = new javax.swing.JButton(); + btnSelectAll = new javax.swing.JButton(); - titleLabel.setText(org.openide.util.NbBundle.getMessage(ItemsPanel.class, "ItemsPanel.titleLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(titleLabel, org.openide.util.NbBundle.getMessage(ItemsPanel.class, "ItemsPanel.titleLabel.text")); // NOI18N titleLabel.setToolTipText(org.openide.util.NbBundle.getMessage(ItemsPanel.class, "ItemsPanel.titleLabel.toolTipText")); // NOI18N list.setModel(new DefaultListModel()); list.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jScrollPane1.setViewportView(list); + org.openide.awt.Mnemonics.setLocalizedText(btnSelectNone, org.openide.util.NbBundle.getMessage(ItemsPanel.class, "ItemsPanel.btnSelectNone.text")); // NOI18N + btnSelectNone.setEnabled(false); + + org.openide.awt.Mnemonics.setLocalizedText(btnSelectAll, org.openide.util.NbBundle.getMessage(ItemsPanel.class, "ItemsPanel.btnSelectAll.text")); // NOI18N + btnSelectAll.setEnabled(false); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -86,7 +94,14 @@ .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE) - .addComponent(titleLabel)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(titleLabel) + .addGroup(layout.createSequentialGroup() + .addComponent(btnSelectAll) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnSelectNone))) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( @@ -95,11 +110,17 @@ .addContainerGap() .addComponent(titleLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 216, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(btnSelectNone) + .addComponent(btnSelectAll)) .addContainerGap()) ); }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables + javax.swing.JButton btnSelectAll; + javax.swing.JButton btnSelectNone; private javax.swing.JScrollPane jScrollPane1; final javax.swing.JList list = new javax.swing.JList(); final javax.swing.JLabel titleLabel = new javax.swing.JLabel();