use of CCDD.CcddConstants.ModifiableSpacingInfo in project CCDD by nasa.
the class CcddPreferencesDialog method addSpacingTab.
/**
********************************************************************************************
* Add the spacing update tab to the tabbed pane
********************************************************************************************
*/
private void addSpacingTab() {
// Set the initial layout manager characteristics
GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(ModifiableSpacingInfo.LABEL_VERTICAL_SPACING.getSpacing(), ModifiableSpacingInfo.LABEL_HORIZONTAL_SPACING.getSpacing() / 2, ModifiableSpacingInfo.LABEL_VERTICAL_SPACING.getSpacing(), ModifiableSpacingInfo.LABEL_HORIZONTAL_SPACING.getSpacing() / 2), 0, 0);
// Create a border for the input fields
Border border = BorderFactory.createCompoundBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED, Color.LIGHT_GRAY, Color.GRAY), BorderFactory.createEmptyBorder(ModifiableSpacingInfo.INPUT_FIELD_PADDING.getSpacing(), ModifiableSpacingInfo.INPUT_FIELD_PADDING.getSpacing(), ModifiableSpacingInfo.INPUT_FIELD_PADDING.getSpacing(), ModifiableSpacingInfo.INPUT_FIELD_PADDING.getSpacing()));
// Create storage for the description and input field representing each modifiable spacing
JLabel[] spacingLbl = new JLabel[ModifiableSpacingInfo.values().length];
JButton[] spacingBtn = new JButton[ModifiableSpacingInfo.values().length];
spacingFld = new JTextField[ModifiableSpacingInfo.values().length];
// Create a panel to contain the spacing components
JPanel innerSpacingPnl = new JPanel(new GridBagLayout());
innerSpacingPnl.setBorder(emptyBorder);
// Use an outer panel so that the components can be forced to the top of the tab area
JPanel spacingPnl = new JPanel(new BorderLayout());
spacingPnl.setBorder(emptyBorder);
spacingPnl.add(innerSpacingPnl, BorderLayout.PAGE_START);
// Create a scroll pane in which to display the spacing labels and fields
JScrollPane spacingScrollPane = new JScrollPane(spacingPnl);
spacingScrollPane.setBorder(emptyBorder);
spacingScrollPane.setViewportBorder(emptyBorder);
// Add the note to the panel
JLabel noteLbl = new JLabel("<html><i>Note: Open windows must be closed and " + "reopened for spacing changes to take effect");
noteLbl.setFont(ModifiableFontInfo.LABEL_BOLD.getFont());
noteLbl.setForeground(ModifiableColorInfo.SPECIAL_LABEL_TEXT.getColor());
noteLbl.setBorder(BorderFactory.createEmptyBorder(ModifiableSpacingInfo.LABEL_VERTICAL_SPACING.getSpacing() * 2, ModifiableSpacingInfo.LABEL_HORIZONTAL_SPACING.getSpacing() / 2, ModifiableSpacingInfo.LABEL_VERTICAL_SPACING.getSpacing(), ModifiableSpacingInfo.LABEL_HORIZONTAL_SPACING.getSpacing()));
// Create a panel to contain the scroll pane and a note with fixed position at the bottom
// of the panel
JPanel scrollAndNotePnl = new JPanel(new BorderLayout());
scrollAndNotePnl.add(spacingScrollPane, BorderLayout.CENTER);
scrollAndNotePnl.add(noteLbl, BorderLayout.PAGE_END);
// Add the spacing update tab to the tabbed pane
tabbedPane.addTab(SPACING, null, scrollAndNotePnl, "Change program spacing values");
// Create a listener for the default spacing buttons
ActionListener defaultListener = new ActionListener() {
/**
************************************************************************************
* Update the spacing to the default value
************************************************************************************
*/
@Override
public void actionPerformed(ActionEvent ae) {
// Get the index of the spacing field array, which is stored as the button's name
int index = Integer.valueOf(((JButton) ae.getSource()).getName());
// Set the spacing to its default value
spacingFld[index].setText(String.valueOf(ModifiableSpacingInfo.values()[index].getDefault()));
}
};
int index = 0;
// Step through each modifiable spacing
for (final ModifiableSpacingInfo modSpacing : ModifiableSpacingInfo.values()) {
// Create the spacing label and input field
spacingLbl[index] = new JLabel(modSpacing.getName() + " (" + modSpacing.getMinimum() + ", " + modSpacing.getMaximum() + ")");
spacingLbl[index].setFont(ModifiableFontInfo.LABEL_BOLD.getFont());
spacingLbl[index].setToolTipText(CcddUtilities.wrapText(modSpacing.getDescription(), ModifiableSizeInfo.MAX_TOOL_TIP_LENGTH.getSize()));
innerSpacingPnl.add(spacingLbl[index], gbc);
spacingFld[index] = new JTextField(String.valueOf(modSpacing.getSpacing()), 3);
spacingFld[index].setFont(ModifiableFontInfo.INPUT_TEXT.getFont());
spacingFld[index].setForeground(ModifiableColorInfo.INPUT_TEXT.getColor());
spacingFld[index].setBackground(ModifiableColorInfo.INPUT_BACK.getColor());
spacingFld[index].setBorder(border);
spacingFld[index].setName(modSpacing.getPreferenceKey());
spacingFld[index].setToolTipText(CcddUtilities.wrapText(modSpacing.getDescription(), ModifiableSizeInfo.MAX_TOOL_TIP_LENGTH.getSize()));
// Create an input verifier to keep the spacing value within its specified limits
spacingFld[index].setInputVerifier(new InputVerifier() {
// Storage for the last valid value entered; used to restore the spacing value if
// an invalid value is entered
String lastValid = String.valueOf(modSpacing.getSpacing());
/**
********************************************************************************
* Verify the contents of a the spacing field
********************************************************************************
*/
@Override
public boolean verify(JComponent input) {
boolean isValid = true;
JTextField spacingFld = (JTextField) input;
try {
// Get the reference to the modifiable spacing information using its
// program preferences key, which is stored as the field's name
ModifiableSpacingInfo modSpacing = ModifiableSpacingInfo.getModifiableSpacingInfo(input.getName());
// Remove any leading or trailing white space characters
String spacing = spacingFld.getText().trim();
// Check if the spacing field is empty
if (spacing.isEmpty()) {
throw new CCDDException(modSpacing.getName() + "<b>' cannot be blank");
}
// Check if the spacing value isn't a positive integer
if (!spacing.matches(InputDataType.INT_POSITIVE.getInputMatch())) {
throw new CCDDException(modSpacing.getName() + "<b>' must be a positive integer value");
}
// Convert the text to an integer
int currentValue = Integer.valueOf(spacing);
// Check if the spacing value is outside of its specified limits
if (currentValue < modSpacing.getMinimum() || currentValue > modSpacing.getMaximum()) {
throw new CCDDException(modSpacing.getName() + "<b>' is outside allowable limits");
}
// Update the spacing field to the new (valid) value
spacingFld.setText(spacing);
// Store the new value as the last valid value
lastValid = spacingFld.getText();
} catch (CCDDException ce) {
// Inform the user that the input value is invalid
new CcddDialogHandler().showMessageDialog(CcddPreferencesDialog.this, "<html><b>The value for '</b>" + ce.getMessage(), "Missing/Invalid Input", JOptionPane.WARNING_MESSAGE, DialogOption.OK_OPTION);
// Restore the spacing field to the last valid value
spacingFld.setText(lastValid);
// Set the flag to indicate the spacing value is invalid
isValid = false;
// Toggle the controls enable status so that the buttons are redrawn
// correctly
CcddPreferencesDialog.this.setControlsEnabled(false);
CcddPreferencesDialog.this.setControlsEnabled(true);
}
return isValid;
}
});
// Add the spacing field to the spacing panel
gbc.gridx++;
innerSpacingPnl.add(spacingFld[index], gbc);
// Create a button for setting the spacing to its default value and add it to the
// spacing panel
spacingBtn[index] = new JButton("Default (" + modSpacing.getDefault() + ")");
spacingBtn[index].setFont(ModifiableFontInfo.DIALOG_BUTTON.getFont());
spacingBtn[index].setName(String.valueOf(index));
spacingBtn[index].addActionListener(defaultListener);
gbc.gridx++;
innerSpacingPnl.add(spacingBtn[index], gbc);
gbc.weightx = 1.0;
gbc.gridx++;
innerSpacingPnl.add(new JLabel(""), gbc);
gbc.weightx = 0.0;
gbc.gridx = 0;
gbc.gridy++;
index++;
}
// Set the scroll bar scroll increment
spacingScrollPane.getVerticalScrollBar().setUnitIncrement(spacingFld[0].getPreferredSize().height / 2 + ModifiableSpacingInfo.LABEL_VERTICAL_SPACING.getSpacing());
// Calculate the maximum required height of the panel containing the spacing labels and
// fields (= # of rows * row height)
maxScrollPaneHeight = Math.max(maxScrollPaneHeight, 10 * spacingScrollPane.getPreferredSize().height / spacingFld.length);
}
use of CCDD.CcddConstants.ModifiableSpacingInfo in project CCDD by nasa.
the class CcddPreferencesDialog method initialize.
/**
********************************************************************************************
* Create the preferences dialog
********************************************************************************************
*/
private void initialize() {
maxScrollPaneHeight = 0;
// Create an empty border for use with the dialog components
emptyBorder = BorderFactory.createEmptyBorder();
// Create a tabbed pane
tabbedPane = new DnDTabbedPane(SwingConstants.TOP);
tabbedPane.setFont(ModifiableFontInfo.LABEL_BOLD.getFont());
// Add the tabs to the tabbed pane
addLafTab();
addFontTab();
addColorTab();
addSizeTab();
addSpacingTab();
addPathTab();
addOtherTab();
// Create a panel for the preference dialog buttons
JPanel buttonPnl = new JPanel();
// Update button
final JButton btnUpdateAll = CcddButtonPanelHandler.createButton("Update", STORE_ICON, KeyEvent.VK_U, "Update the program preference values");
// Add a listener for the Update button
btnUpdateAll.addActionListener(new ActionListener() {
/**
************************************************************************************
* Update the program preference values
************************************************************************************
*/
@Override
public void actionPerformed(ActionEvent ae) {
int index = 0;
// Base the action on the name of the tab selected
switch(tabbedPane.getTitleAt(tabbedPane.getSelectedIndex())) {
case LAF:
case FONT:
case COLOR:
// preference value
break;
case SIZE:
// size
for (ModifiableSizeInfo modSize : ModifiableSizeInfo.values()) {
// Get the current value from the size text field
int currentValue = Integer.valueOf(sizeFld[index].getText());
// Check if the size has changed
if (modSize.getSize() != currentValue) {
// Update the size to the new value
modSize.setSize(currentValue, ccddMain.getProgPrefs());
}
index++;
}
break;
case SPACING:
// modifiable spacing
for (ModifiableSpacingInfo modSpacing : ModifiableSpacingInfo.values()) {
// Get the current value from the spacing text field
int currentValue = Integer.valueOf(spacingFld[index].getText());
// Check if the spacing has changed
if (modSpacing.getSpacing() != currentValue) {
// Update the spacing to the new value
modSpacing.setSpacing(currentValue, ccddMain.getProgPrefs());
}
index++;
}
break;
case PATH:
// Update the program path preference. Step through each modifiable path
for (ModifiablePathInfo modPath : ModifiablePathInfo.values()) {
// Get the current path from the path text field
String currentPath = pathFld[index].getText().trim();
// Check if the path has changed
if (!modPath.getPath().equals(currentPath)) {
// Store the path in the program preferences backing store
CcddFileIOHandler.storePath(ccddMain, currentPath, false, modPath);
}
index++;
}
break;
case OTHER:
// setting
for (ModifiableOtherSettingInfo modOther : ModifiableOtherSettingInfo.values()) {
// Get the current setting value from the other setting text field
String currentValue = otherFld[index].getText().trim();
// Check if the setting value has changed
if (!modOther.getValue().equals(currentValue)) {
// Update the other setting to the new value
modOther.setValue(currentValue, ccddMain.getProgPrefs());
}
index++;
}
break;
}
}
});
// Close button
JButton btnCloseDlg = CcddButtonPanelHandler.createButton("Close", CLOSE_ICON, KeyEvent.VK_C, "Close the program preferences dialog");
// Add a listener for the Close button
btnCloseDlg.addActionListener(new ActionListener() {
/**
************************************************************************************
* Close the program preferences dialog
************************************************************************************
*/
@Override
public void actionPerformed(ActionEvent ae) {
// Close the dialog
closeDialog();
}
});
// Listen for tab selection changes
tabbedPane.addChangeListener(new ChangeListener() {
/**
************************************************************************************
* Handle a tab selection change
************************************************************************************
*/
@Override
public void stateChanged(ChangeEvent ce) {
// Get the index of the selected tab
int tabIndex = tabbedPane.getSelectedIndex();
// Check if a tab is selected
if (tabIndex != -1) {
// Base the action of the name of the tab selected
switch(tabbedPane.getTitleAt(tabIndex)) {
case LAF:
case FONT:
case COLOR:
// Hide the update button
btnUpdateAll.setVisible(false);
break;
case SIZE:
case SPACING:
case PATH:
case OTHER:
// Show the update button
btnUpdateAll.setVisible(true);
break;
}
}
}
});
// Add the buttons to the dialog panel
buttonPnl.add(btnUpdateAll);
buttonPnl.add(btnCloseDlg);
// Toggle the tab selection so that the first tab is selected and the Update button
// visibility is set accordingly
tabbedPane.setSelectedIndex(-1);
tabbedPane.setSelectedIndex(0);
// Set the initial size of the preferences dialog based on the individual panes' contents
tabbedPane.setPreferredSize(new Dimension(tabbedPane.getPreferredSize().width + LAF_SCROLL_BAR_WIDTH, maxScrollPaneHeight));
// Display the Preferences dialog
showOptionsDialog(ccddMain.getMainFrame(), tabbedPane, buttonPnl, btnCloseDlg, "Preferences", true);
}
Aggregations