diff --git a/plugins/copyright/src/com/maddyhome/idea/copyright/ui/ProjectSettingsPanel.java b/plugins/copyright/src/com/maddyhome/idea/copyright/ui/ProjectSettingsPanel.java index cc97904830c9..146f517d5d56 100644 --- a/plugins/copyright/src/com/maddyhome/idea/copyright/ui/ProjectSettingsPanel.java +++ b/plugins/copyright/src/com/maddyhome/idea/copyright/ui/ProjectSettingsPanel.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.maddyhome.idea.copyright.ui; import com.intellij.ide.DataManager; +import com.intellij.ide.ui.ListCellRendererWrapper; import com.intellij.ide.util.scopeChooser.PackageSetChooserCombo; import com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.options.newEditor.OptionsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; @@ -27,6 +28,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.packageDependencies.DefaultScopesProvider; import com.intellij.packageDependencies.DependencyValidationManager; import com.intellij.psi.search.scope.packageSet.NamedScope; +import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.ui.HyperlinkLabel; import com.intellij.ui.PanelWithButtons; import com.intellij.ui.ScrollPaneFactory; @@ -55,412 +57,413 @@ import java.util.*; import java.util.List; public class ProjectSettingsPanel extends PanelWithButtons { - private final Project myProject; + private final Project myProject; private final CopyrightProfilesPanel myProfilesModel; private final CopyrightManager myManager; - private final TableView myScopeMappingTable; - private final ListTableModel myScopeMappingModel; - private final JComboBox myProfilesComboBox = new JComboBox(); + private final TableView myScopeMappingTable; + private final ListTableModel myScopeMappingModel; + private final JComboBox myProfilesComboBox = new JComboBox(); - private JButton myAddButton; - private JButton myRemoveButton; - private JButton myMoveUpButton; - private JButton myMoveDownButton; + private JButton myAddButton; + private JButton myRemoveButton; + private JButton myMoveUpButton; + private JButton myMoveDownButton; - private final HyperlinkLabel myScopesLink = new HyperlinkLabel(); + private final HyperlinkLabel myScopesLink = new HyperlinkLabel(); - public ProjectSettingsPanel(Project project, CopyrightProfilesPanel profilesModel) { - myProject = project; - myProfilesModel = profilesModel; - myProfilesModel.addItemsChangeListener(new Runnable(){ - public void run() { - final Object selectedItem = myProfilesComboBox.getSelectedItem(); - fillCopyrightProfiles(); - myProfilesComboBox.setSelectedItem(selectedItem); - final ArrayList toRemove = new ArrayList(); - for (ScopeSetting setting : myScopeMappingModel.getItems()) { - if (setting.getProfile() == null) { - toRemove.add(setting); - } - } - for (ScopeSetting setting : toRemove) { - myScopeMappingModel.removeRow(myScopeMappingModel.indexOf(setting)); - } - updateButtons(); + public ProjectSettingsPanel(Project project, CopyrightProfilesPanel profilesModel) { + myProject = project; + myProfilesModel = profilesModel; + myProfilesModel.addItemsChangeListener(new Runnable() { + public void run() { + final Object selectedItem = myProfilesComboBox.getSelectedItem(); + fillCopyrightProfiles(); + myProfilesComboBox.setSelectedItem(selectedItem); + final ArrayList toRemove = new ArrayList(); + for (ScopeSetting setting : myScopeMappingModel.getItems()) { + if (setting.getProfile() == null) { + toRemove.add(setting); } - }); - myManager = CopyrightManager.getInstance(project); + } + for (ScopeSetting setting : toRemove) { + myScopeMappingModel.removeRow(myScopeMappingModel.indexOf(setting)); + } + updateButtons(); + } + }); + myManager = CopyrightManager.getInstance(project); - myScopeMappingModel = new ListTableModel(new ColumnInfo[]{SCOPE, SETTING}, new ArrayList(), 0); - myScopeMappingTable = new TableView(myScopeMappingModel); + ColumnInfo[] columns = {new ScopeColumn(), new SettingColumn()}; + myScopeMappingModel = new ListTableModel(columns, new ArrayList(), 0); + myScopeMappingTable = new TableView(myScopeMappingModel); - fillCopyrightProfiles(); - myProfilesComboBox.setRenderer(new DefaultListCellRenderer() { - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - final Component rendererComponent = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (value == null) { - setText("No copyright"); - } else { - setText(((CopyrightProfile) value).getName()); - } - return rendererComponent; - } - }); - - myScopeMappingTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - public void valueChanged(final ListSelectionEvent e) { - updateButtons(); - } - }); - initPanel(); - - myScopesLink.setVisible(!myProject.isDefault()); - myScopesLink.setHyperlinkText("Select Scopes to add new scopes or modify existing ones"); - myScopesLink.addHyperlinkListener(new HyperlinkListener() { - public void hyperlinkUpdate(final HyperlinkEvent e) { - if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { - final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(DataManager.getInstance().getDataContext()); - if (optionsEditor != null) { - optionsEditor.select(ScopeChooserConfigurable.class); - } - } - } - }); - } - - private void updateButtons() { - myAddButton.setEnabled(!myProfilesModel.getAllProfiles().isEmpty()); - int index = myScopeMappingTable.getSelectedRow(); - if (0 <= index && index < myScopeMappingModel.getRowCount()) { - myRemoveButton.setEnabled(true); - myMoveUpButton.setEnabled(index > 0); - myMoveDownButton.setEnabled(index < myScopeMappingModel.getRowCount() - 1); + fillCopyrightProfiles(); + myProfilesComboBox.setRenderer(new ListCellRendererWrapper(myProfilesComboBox.getRenderer()) { + @Override + public void customize(JList list, CopyrightProfile value, int index, boolean selected, boolean hasFocus) { + if (value == null) { + setText("No copyright"); } else { - myRemoveButton.setEnabled(false); - myMoveUpButton.setEnabled(false); - myMoveDownButton.setEnabled(false); + setText(value.getName()); } - } + } + }); - @Nullable - protected String getLabelText() { - return null; - } - - protected JButton[] createButtons() { - myAddButton = new JButton("Add"); - myAddButton.setMnemonic('d'); - myAddButton.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent e) { - TableUtil.stopEditing(myScopeMappingTable); - List newList = new ArrayList(myScopeMappingModel.getItems()); - newList.add(new ScopeSetting(DefaultScopesProvider.getAllScope(), - myProfilesModel.getAllProfiles().values().iterator().next())); - myScopeMappingModel.setItems(newList); - TableUtil.editCellAt(myScopeMappingTable, myScopeMappingModel.getRowCount() - 1, 0); - } - }); - myRemoveButton = new JButton("Remove"); - myRemoveButton.setMnemonic('R'); - myRemoveButton.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent e) { - TableUtil.stopEditing(myScopeMappingTable); - int index = myScopeMappingTable.getSelectedRow(); - if (0 <= index && index < myScopeMappingModel.getRowCount()) { - myScopeMappingModel.removeRow(index); - if (index < myScopeMappingModel.getRowCount()) { - myScopeMappingTable.setRowSelectionInterval(index, index); - } else { - if (index > 0) { - myScopeMappingTable.setRowSelectionInterval(index - 1, index - 1); - } - } - updateButtons(); - } - myScopeMappingTable.requestFocus(); - } - }); - - myMoveUpButton = new JButton("Move Up"); - myMoveUpButton.setMnemonic('U'); - myMoveUpButton.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent e) { - TableUtil.moveSelectedItemsUp(myScopeMappingTable); - } - } - ); - - myMoveDownButton = new JButton("Move Down"); - myMoveDownButton.setMnemonic('D'); - myMoveDownButton.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent e) { - TableUtil.moveSelectedItemsDown(myScopeMappingTable); - } - } - ); - - return new JButton[]{myAddButton, myRemoveButton, myMoveUpButton, myMoveDownButton}; - } - - private void fillCopyrightProfiles() { - final DefaultComboBoxModel boxModel = (DefaultComboBoxModel) myProfilesComboBox.getModel(); - boxModel.removeAllElements(); - boxModel.addElement(null); - for (CopyrightProfile profile : myProfilesModel.getAllProfiles().values()) { - boxModel.addElement(profile); - } - } - - - protected JComponent createMainComponent() { - return ScrollPaneFactory.createScrollPane(myScopeMappingTable); - } - - public JComponent getMainComponent() { - final JPanel panel = new JPanel(new BorderLayout(0, 10)); - final LabeledComponent component = new LabeledComponent(); - component.setText("Default &project copyright:"); - component.setLabelLocation(BorderLayout.WEST); - component.setComponent(myProfilesComboBox); - panel.add(component, BorderLayout.NORTH); - panel.add(this, BorderLayout.CENTER); - panel.add(myScopesLink, BorderLayout.SOUTH); - return panel; - } - - public boolean isModified() { - final CopyrightProfile defaultCopyright = myManager.getDefaultCopyright(); - final Object selected = myProfilesComboBox.getSelectedItem(); - if (defaultCopyright != selected) { - if (selected == null) return true; - if (defaultCopyright == null) return true; - if (!defaultCopyright.equals(selected)) return true; - } - final Map map = myManager.getCopyrightsMapping(); - if (map.size() != myScopeMappingModel.getItems().size()) return true; - final Iterator iterator = map.keySet().iterator(); - for (ScopeSetting setting : myScopeMappingModel.getItems()) { - final NamedScope scope = setting.getScope(); - if (!iterator.hasNext()) return true; - final String scopeName = iterator.next(); - if (!Comparing.strEqual(scopeName, scope.getName())) return true; - final String profileName = map.get(scope.getName()); - if (profileName == null) return true; - if (!profileName.equals(setting.getProfileName())) return true; - } - return false; - } - - public void apply() { - Collection profiles = new ArrayList(myManager.getCopyrights()); - myManager.clearCopyrights(); - for (CopyrightProfile profile : profiles) { - myManager.addCopyright(profile); - } - final List settingList = myScopeMappingModel.getItems(); - for (ScopeSetting scopeSetting : settingList) { - myManager.mapCopyright(scopeSetting.getScope().getName(), scopeSetting.getProfileName()); - } - myManager.setDefaultCopyright((CopyrightProfile) myProfilesComboBox.getSelectedItem()); - } - - public void reset() { - myProfilesComboBox.setSelectedItem(myManager.getDefaultCopyright()); - final List mappings = new ArrayList(); - final Map copyrights = myManager.getCopyrightsMapping(); - final DependencyValidationManager manager = DependencyValidationManager.getInstance(myProject); - for (final String scopeName : copyrights.keySet()) { - final NamedScope scope = manager.getScope(scopeName); - if (scope != null) { - mappings.add(new ScopeSetting(scope, copyrights.get(scopeName))); - } else { - myManager.unmapCopyright(scopeName); - } - } - myScopeMappingModel.setItems(mappings); + myScopeMappingTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + public void valueChanged(final ListSelectionEvent e) { updateButtons(); - } - - - private class ScopeSetting { - private NamedScope myScope; - private CopyrightProfile myProfile; - private String myProfileName; - - private ScopeSetting(NamedScope scope, CopyrightProfile profile) { - myScope = scope; - myProfile = profile; - if (myProfile != null) { - myProfileName = myProfile.getName(); - } - } - - public ScopeSetting(NamedScope scope, String profile) { - myScope = scope; - myProfileName = profile; } + }); + initPanel(); - public CopyrightProfile getProfile() { - if (myProfileName != null) { - myProfile = myProfilesModel.getAllProfiles().get(getProfileName()); - } - return myProfile; - } - - public void setProfile(@NotNull CopyrightProfile profile) { - myProfile = profile; - myProfileName = profile.getName(); - } - - public NamedScope getScope() { - return myScope; - } - - public void setScope(NamedScope scope) { - myScope = scope; - } - - public String getProfileName() { - return myProfile != null ? myProfile.getName() : myProfileName; - } - } - - - private final ColumnInfo SETTING = new ColumnInfo("Copyright") { - public CopyrightProfile valueOf(final ScopeSetting object) { - return object.getProfile(); - } - - public boolean isCellEditable(final ScopeSetting o) { - return true; - } - - - public TableCellRenderer getRenderer(final ScopeSetting scopeSetting) { - return new DefaultTableCellRenderer() { - // implements javax.swing.table.TableCellRenderer - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - final Component rendererComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - if (!isSelected) - setForeground(myProfilesModel.getAllProfiles().get(scopeSetting.getProfileName()) == null ? Color.red : UIUtil.getTableForeground()); - setText(scopeSetting.getProfileName()); - return rendererComponent; - } - }; - } - - public TableCellEditor getEditor(final ScopeSetting scopeSetting) { - return new AbstractTableCellEditor() { - private ComboBox myProfilesCombo; - - public Object getCellEditorValue() { - return myProfilesCombo.getSelectedItem(); - } - - public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, int row, int column) { - final List copyrights = new ArrayList(myProfilesModel.getAllProfiles().values()); - Collections.sort(copyrights, new Comparator() { - @Override - public int compare(CopyrightProfile o1, CopyrightProfile o2) { - return o1.getName().compareToIgnoreCase(o2.getName()); - } - }); - myProfilesCombo = new ComboBox(copyrights.toArray(new CopyrightProfile[copyrights.size()]), 60); - myProfilesCombo.setBorder(null); - myProfilesCombo.setSelectedItem(scopeSetting.getProfile()); - myProfilesCombo.addItemListener(new ItemListener() { - public void itemStateChanged(final ItemEvent e) { - if (table.isEditing()) { - stopCellEditing(); - } - } - }); - myProfilesCombo.setRenderer(new DefaultListCellRenderer() { - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - Component rendererComponent = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - setText(((CopyrightProfile) value).getName()); - return rendererComponent; - } - }); - return myProfilesCombo; - } - }; - } - - public void setValue(ScopeSetting scopeSetting, CopyrightProfile copyrightProfile) { - if (copyrightProfile != null) { - scopeSetting.setProfile(copyrightProfile); + myScopesLink.setVisible(!myProject.isDefault()); + myScopesLink.setHyperlinkText("Select Scopes to add new scopes or modify existing ones"); + myScopesLink.addHyperlinkListener(new HyperlinkListener() { + public void hyperlinkUpdate(final HyperlinkEvent e) { + if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { + final DataContext dataContext = DataManager.getInstance().getDataContextFromFocus().getResult(); + final OptionsEditor optionsEditor = OptionsEditor.KEY.getData(dataContext); + if (optionsEditor != null) { + optionsEditor.select(ScopeChooserConfigurable.class); } } - }; + } + }); + } - private final ColumnInfo SCOPE = new ColumnInfo("Scope") { + private void updateButtons() { + myAddButton.setEnabled(!myProfilesModel.getAllProfiles().isEmpty()); + int index = myScopeMappingTable.getSelectedRow(); + if (0 <= index && index < myScopeMappingModel.getRowCount()) { + myRemoveButton.setEnabled(true); + myMoveUpButton.setEnabled(index > 0); + myMoveDownButton.setEnabled(index < myScopeMappingModel.getRowCount() - 1); + } + else { + myRemoveButton.setEnabled(false); + myMoveUpButton.setEnabled(false); + myMoveDownButton.setEnabled(false); + } + } - public boolean isCellEditable(ScopeSetting mapping) { - return true; + @Nullable + protected String getLabelText() { + return null; + } + + protected JButton[] createButtons() { + myAddButton = new JButton("Add"); + myAddButton.setMnemonic('d'); + myAddButton.addActionListener(new ActionListener() { + public void actionPerformed(final ActionEvent e) { + TableUtil.stopEditing(myScopeMappingTable); + List newList = new ArrayList(myScopeMappingModel.getItems()); + newList.add(new ScopeSetting(DefaultScopesProvider.getAllScope(), + myProfilesModel.getAllProfiles().values().iterator().next())); + myScopeMappingModel.setItems(newList); + TableUtil.editCellAt(myScopeMappingTable, myScopeMappingModel.getRowCount() - 1, 0); + } + }); + myRemoveButton = new JButton("Remove"); + myRemoveButton.setMnemonic('R'); + myRemoveButton.addActionListener(new ActionListener() { + public void actionPerformed(final ActionEvent e) { + TableUtil.stopEditing(myScopeMappingTable); + int index = myScopeMappingTable.getSelectedRow(); + if (0 <= index && index < myScopeMappingModel.getRowCount()) { + myScopeMappingModel.removeRow(index); + if (index < myScopeMappingModel.getRowCount()) { + myScopeMappingTable.setRowSelectionInterval(index, index); + } + else { + if (index > 0) { + myScopeMappingTable.setRowSelectionInterval(index - 1, index - 1); + } + } + updateButtons(); + } + myScopeMappingTable.requestFocus(); + } + }); + + myMoveUpButton = new JButton("Move Up"); + myMoveUpButton.setMnemonic('U'); + myMoveUpButton.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + TableUtil.moveSelectedItemsUp(myScopeMappingTable); + } + } + ); + + myMoveDownButton = new JButton("Move Down"); + myMoveDownButton.setMnemonic('D'); + myMoveDownButton.addActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent e) { + TableUtil.moveSelectedItemsDown(myScopeMappingTable); + } + } + ); + + return new JButton[]{myAddButton, myRemoveButton, myMoveUpButton, myMoveDownButton}; + } + + private void fillCopyrightProfiles() { + final DefaultComboBoxModel boxModel = (DefaultComboBoxModel)myProfilesComboBox.getModel(); + boxModel.removeAllElements(); + boxModel.addElement(null); + for (CopyrightProfile profile : myProfilesModel.getAllProfiles().values()) { + boxModel.addElement(profile); + } + } + + protected JComponent createMainComponent() { + return ScrollPaneFactory.createScrollPane(myScopeMappingTable); + } + + public JComponent getMainComponent() { + final JPanel panel = new JPanel(new BorderLayout(0, 10)); + final LabeledComponent component = new LabeledComponent(); + component.setText("Default &project copyright:"); + component.setLabelLocation(BorderLayout.WEST); + component.setComponent(myProfilesComboBox); + panel.add(component, BorderLayout.NORTH); + panel.add(this, BorderLayout.CENTER); + panel.add(myScopesLink, BorderLayout.SOUTH); + return panel; + } + + public boolean isModified() { + final CopyrightProfile defaultCopyright = myManager.getDefaultCopyright(); + final Object selected = myProfilesComboBox.getSelectedItem(); + if (defaultCopyright != selected) { + if (selected == null) return true; + if (defaultCopyright == null) return true; + if (!defaultCopyright.equals(selected)) return true; + } + final Map map = myManager.getCopyrightsMapping(); + if (map.size() != myScopeMappingModel.getItems().size()) return true; + final Iterator iterator = map.keySet().iterator(); + for (ScopeSetting setting : myScopeMappingModel.getItems()) { + final NamedScope scope = setting.getScope(); + if (!iterator.hasNext()) return true; + final String scopeName = iterator.next(); + if (!Comparing.strEqual(scopeName, scope.getName())) return true; + final String profileName = map.get(scope.getName()); + if (profileName == null) return true; + if (!profileName.equals(setting.getProfileName())) return true; + } + return false; + } + + public void apply() { + Collection profiles = new ArrayList(myManager.getCopyrights()); + myManager.clearCopyrights(); + for (CopyrightProfile profile : profiles) { + myManager.addCopyright(profile); + } + final List settingList = myScopeMappingModel.getItems(); + for (ScopeSetting scopeSetting : settingList) { + myManager.mapCopyright(scopeSetting.getScope().getName(), scopeSetting.getProfileName()); + } + myManager.setDefaultCopyright((CopyrightProfile)myProfilesComboBox.getSelectedItem()); + } + + public void reset() { + myProfilesComboBox.setSelectedItem(myManager.getDefaultCopyright()); + final List mappings = new ArrayList(); + final Map copyrights = myManager.getCopyrightsMapping(); + final DependencyValidationManager manager = DependencyValidationManager.getInstance(myProject); + for (final String scopeName : copyrights.keySet()) { + final NamedScope scope = manager.getScope(scopeName); + if (scope != null) { + mappings.add(new ScopeSetting(scope, copyrights.get(scopeName))); + } + else { + myManager.unmapCopyright(scopeName); + } + } + myScopeMappingModel.setItems(mappings); + updateButtons(); + } + + + private class ScopeSetting { + private NamedScope myScope; + private CopyrightProfile myProfile; + private String myProfileName; + + private ScopeSetting(NamedScope scope, CopyrightProfile profile) { + myScope = scope; + myProfile = profile; + if (myProfile != null) { + myProfileName = myProfile.getName(); + } + } + + public ScopeSetting(NamedScope scope, String profile) { + myScope = scope; + myProfileName = profile; + } + + public CopyrightProfile getProfile() { + if (myProfileName != null) { + myProfile = myProfilesModel.getAllProfiles().get(getProfileName()); + } + return myProfile; + } + + public void setProfile(@NotNull CopyrightProfile profile) { + myProfile = profile; + myProfileName = profile.getName(); + } + + public NamedScope getScope() { + return myScope; + } + + public void setScope(NamedScope scope) { + myScope = scope; + } + + public String getProfileName() { + return myProfile != null ? myProfile.getName() : myProfileName; + } + } + + private class SettingColumn extends ColumnInfo { + private SettingColumn() { + super(("Copyright")); + } + + public CopyrightProfile valueOf(final ScopeSetting object) { + return object.getProfile(); + } + + public boolean isCellEditable(final ScopeSetting o) { + return true; + } + + public TableCellRenderer getRenderer(final ScopeSetting scopeSetting) { + return new DefaultTableCellRenderer() { + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + final Component rendererComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (!isSelected) { + setForeground(myProfilesModel.getAllProfiles().get(scopeSetting.getProfileName()) == null ? Color.red : UIUtil.getTableForeground()); + } + setText(scopeSetting.getProfileName()); + return rendererComponent; + } + }; + } + + public TableCellEditor getEditor(final ScopeSetting scopeSetting) { + return new AbstractTableCellEditor() { + private ComboBox myProfilesCombo; + + public Object getCellEditorValue() { + return myProfilesCombo.getSelectedItem(); } - public TableCellRenderer getRenderer(ScopeSetting mapping) { - return new DefaultTableCellRenderer() { - public Component getTableCellRendererComponent(JTable table, - Object value, - boolean isSelected, - boolean hasFocus, - int row, - int column) { - super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - if (value == null) { - setText(""); - } - else { - final String scopeName = ((NamedScope)value).getName(); - if (!isSelected) { - final NamedScope scope = DependencyValidationManager.getScope(myProject, scopeName); - if (scope == null) { - setForeground(Color.red); - } - } - setText(scopeName); - } - return this; - } - }; + public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, int row, int column) { + final List copyrights = new ArrayList(myProfilesModel.getAllProfiles().values()); + Collections.sort(copyrights, new Comparator() { + @Override + public int compare(CopyrightProfile o1, CopyrightProfile o2) { + return o1.getName().compareToIgnoreCase(o2.getName()); + } + }); + myProfilesCombo = new ComboBox(copyrights.toArray(new CopyrightProfile[copyrights.size()]), 60); + myProfilesCombo.setBorder(null); + myProfilesCombo.setSelectedItem(scopeSetting.getProfile()); + myProfilesCombo.addItemListener(new ItemListener() { + public void itemStateChanged(final ItemEvent e) { + if (table.isEditing()) { + stopCellEditing(); + } + } + }); + myProfilesCombo.setRenderer(new DefaultListCellRenderer() { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + Component rendererComponent = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + setText(((CopyrightProfile)value).getName()); + return rendererComponent; + } + }); + return myProfilesCombo; + } + }; + } + + public void setValue(ScopeSetting scopeSetting, CopyrightProfile copyrightProfile) { + if (copyrightProfile != null) { + scopeSetting.setProfile(copyrightProfile); + } + } + } + + private class ScopeColumn extends ColumnInfo { + private ScopeColumn() { + super(("Scope")); + } + + public boolean isCellEditable(ScopeSetting mapping) { + return true; + } + + public TableCellRenderer getRenderer(ScopeSetting mapping) { + return new DefaultTableCellRenderer() { + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if (value == null) { + setText(""); + } + else { + final String scopeName = ((NamedScope)value).getName(); + if (!isSelected) { + final NamedScope scope = NamedScopesHolder.getScope(myProject, scopeName); + if (scope == null) { + setForeground(Color.red); + } + } + setText(scopeName); + } + return this; + } + }; + } + + public TableCellEditor getEditor(ScopeSetting mapping) { + return new AbstractTableCellEditor() { + private PackageSetChooserCombo myCombo; + + public Object getCellEditorValue() { + return myCombo.getSelectedScope(); } - public TableCellEditor getEditor(ScopeSetting mapping) { - return new AbstractTableCellEditor() { - private PackageSetChooserCombo myCombo; - - public Object getCellEditorValue() { - return myCombo.getSelectedScope(); - } - - public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, int row, int column) { - myCombo = new PackageSetChooserCombo(myProject, value == null ? null : ((NamedScope) value).getName(), false); - myCombo.getComboBox().addItemListener(new ItemListener() { - public void itemStateChanged(final ItemEvent e) { - if (table.isEditing()) { - stopCellEditing(); - } - } - }); - return new CellEditorComponentWithBrowseButton(myCombo, this); - } - }; + public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, int row, int column) { + myCombo = new PackageSetChooserCombo(myProject, value == null ? null : ((NamedScope)value).getName(), false); + myCombo.getComboBox().addItemListener(new ItemListener() { + public void itemStateChanged(final ItemEvent e) { + if (table.isEditing()) { + stopCellEditing(); + } + } + }); + return new CellEditorComponentWithBrowseButton(myCombo, this); } + }; + } + public NamedScope valueOf(ScopeSetting mapping) { + return mapping.getScope(); + } - public NamedScope valueOf(ScopeSetting mapping) { - return mapping.getScope(); - } - - public void setValue(ScopeSetting mapping, NamedScope set) { - mapping.setScope(set); - } - }; - + public void setValue(ScopeSetting mapping, NamedScope set) { + mapping.setScope(set); + } + } }