/* CropDBCropInfo.java - created: March 15, 2007
* Copyright (C) 2007, 2008 Clayton Carter
*
* This file is part of the project "Crop Planning Software". For more
* information:
* website: https://github.com/claytonrcarter/cropplanning
* email: cropplanning@gmail.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package CPS.Core.CropDB;
import CPS.Data.*;
import CPS.Module.CPSGlobalSettings;
import CPS.UI.Modules.*;
import CPS.UI.Swing.*;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.swing.*;
import net.miginfocom.swing.MigLayout;
public class CropDBCropInfo extends CPSDetailView implements ItemListener {
private CPSTextField tfldCropName, tfldVarName, tfldFamName, tfldMatDays;
private CPSCheckBox chkDS, chkTP;
private JLabel lblMatDays, lblDSMat, lblDSRowsPB, lblDSSpace, lblDSNotes, lblKeywords;
private CPSTextField tfldDSMatAdjust, tfldDSRowsPerBed, tfldDSSpaceBetRows;
private JLabel lblTPMat, lblTPRows, lblTPSpace, lblTPSpaceRow, lblTPFlat, lblTPWeeks, lblTPNotes;
private CPSTextField tfldTPMatAdjust, tfldTPRowsPerBed, tfldTPSpaceInRow, tfldTPSpaceBetRows;
private CPSTextField tfldTPFlatSize, tfldTPWeeksToTP;
private CPSTextArea tfldDSPlantNotes, tfldTPPlantNotes;
private CPSTextArea tareDesc, tareGroups, tareKeywords, tareOtherReq, tareNotes;
private CPSTextField tfldYieldPerWeek, tfldYieldWeeks, tfldYieldPerFoot, tfldYieldUnits, tfldYieldUnitValue;
private CPSTextField tfldSeedsPerUnit, tfldSeedsPerDS, tfldSeedsPerTP;
private CPSComboBox cmbSeedUnit;
private JLabel lblSeedDS, lblSeedTP;
private ArrayList<JLabel> anonLabels;
private CPSCardPanel columnFour;
private CPSCrop displayedCrop;
CropDBCropInfo( CPSMasterDetailModule mdm ) {
super( mdm, "Crop Info" );
}
/** this constructor does nothing and is meant for testing purposes only */
private CropDBCropInfo() {}
public CPSRecord getDisplayedRecord() { return displayedCrop; }
public void displayRecord( CPSRecord r ) { displayRecord( (CPSCrop) r ); }
public void displayRecord( CPSCrop crop ) {
displayedCrop = crop;
if ( ! isMainPanelBuilt() ) {
setMainPanelBuilt();
rebuildMainPanel();
updateAutocompletionComponents();
}
if ( displayedCrop == null ) {
displayedCrop = new CPSCrop();
setRecordDisplayed(false);
}
else
setRecordDisplayed( true );
tfldCropName.setInitialText( displayedCrop.getCropName() );
tfldVarName.setInitialText( displayedCrop.getVarietyName() );
tfldFamName.setInitialText( displayedCrop.getFamilyName(),
displayedCrop.getFamilyNameState() );
tfldMatDays.setInitialText( displayedCrop.getMaturityDaysString(),
displayedCrop.getMaturityDaysState() );
tfldDSMatAdjust.setInitialText( displayedCrop.getDSMaturityAdjustString(),
displayedCrop.getDSMaturityAdjustState() );
tfldDSRowsPerBed.setInitialText( displayedCrop.getDSRowsPerBedString(),
displayedCrop.getDSRowsPerBedState() );
tfldDSSpaceBetRows.setInitialText( displayedCrop.getDSSpaceBetweenRowString(),
displayedCrop.getDSSpaceBetweenRowState() );
tfldDSPlantNotes.setInitialText( displayedCrop.getDSPlantNotes(),
displayedCrop.getDSPlantNotesState() );
tfldTPMatAdjust.setInitialText( displayedCrop.getTPMaturityAdjustString(),
displayedCrop.getTPMaturityAdjustState() );
tfldTPRowsPerBed.setInitialText( displayedCrop.getTPRowsPerBedString(),
displayedCrop.getTPRowsPerBedState() );
tfldTPSpaceInRow.setInitialText( displayedCrop.getTPSpaceInRowString(),
displayedCrop.getTPSpaceInRowState() );
tfldTPSpaceBetRows.setInitialText( displayedCrop.getTPSpaceBetweenRowString(),
displayedCrop.getTPSpaceBetweenRowState() );
tfldTPFlatSize.setInitialText( displayedCrop.getTPFlatSize(),
displayedCrop.getTPFlatSizeState() );
tfldTPWeeksToTP.setInitialText( displayedCrop.getTPTimeInGHString(),
displayedCrop.getTPTimeInGHState() );
tfldTPPlantNotes.setInitialText( displayedCrop.getTPPlantNotes(),
displayedCrop.getTPPlantNotesState() );
tfldYieldPerWeek.setInitialText( displayedCrop.getYieldPerWeekString(),
displayedCrop.getYieldPerWeekState() );
tfldYieldWeeks.setInitialText( displayedCrop.getYieldNumWeeksString(),
displayedCrop.getYieldNumWeeksState() );
tfldYieldPerFoot.setInitialText( displayedCrop.getYieldPerFootString(),
displayedCrop.getYieldPerFootState() );
tfldYieldUnits.setInitialText( displayedCrop.getCropYieldUnit(),
displayedCrop.getCropYieldUnitState() );
tfldYieldUnitValue.setInitialText( displayedCrop.getCropUnitValueString(),
displayedCrop.getCropUnitValueState() );
tfldSeedsPerUnit.setInitialText( displayedCrop.getSeedsPerUnitString() ,
displayedCrop.getSeedsPerUnitState() );
cmbSeedUnit.setInitialSelection( displayedCrop.getSeedUnit() ,
displayedCrop.getSeedUnitState() );
tfldSeedsPerDS.setInitialText( displayedCrop.getSeedsPerDSString() ,
displayedCrop.getSeedsPerDSState() );
tfldSeedsPerTP.setInitialText( displayedCrop.getSeedsPerTPString() ,
displayedCrop.getSeedsPerTPState() );
tareDesc.setInitialText( displayedCrop.getCropDescription() );
tareGroups.setInitialText( displayedCrop.getGroups(),
displayedCrop.getGroupsState() );
tareOtherReq.setInitialText( displayedCrop.getOtherRequirements(),
displayedCrop.getOtherRequirementsState() );
tareKeywords.setInitialText( displayedCrop.getKeywords(),
displayedCrop.getKeywordsState() );
tareNotes.setInitialText( displayedCrop.getNotes() );
chkDS.setInitialState( displayedCrop.isDirectSeeded(),
displayedCrop.getDirectSeededState() );
setDSComponentsEnabled( displayedCrop.isDirectSeeded() );
chkTP.setInitialState( displayedCrop.isTransplanted(),
displayedCrop.getTransplantedState() );
setTPComponentsEnabled( displayedCrop.isTransplanted() );
setAllComponentsEnabled( isRecordDisplayed() );
setDSComponentsEnabled( displayedCrop.isDirectSeeded() );
setTPComponentsEnabled( displayedCrop.isTransplanted() );
}
@Override
public void setForEditting() {
tfldCropName.requestFocus();
}
private CPSCrop asCrop() {
CPSCrop changes = new CPSCrop();
changes.merge( displayedCrop );
changes.setID( displayedCrop.getID() );
if ( chkDS.hasChanged() )
changes.setDirectSeeded( chkDS.isSelected() );
// else
// crop.setDirectSeeded( null, true );
if ( chkTP.hasChanged() )
changes.setTransplanted( chkTP.isSelected() );
// else
// crop.setTransplanted( null, true );
if ( tfldCropName.hasChanged() ) changes.setCropName( tfldCropName.getText() );
if ( tfldVarName.hasChanged() ) changes.setVarietyName( tfldVarName.getText() );
if ( tfldFamName.hasChanged() ) changes.setFamilyName( tfldFamName.getText() );
try {
if ( tfldMatDays.hasChanged() ) changes.setMaturityDays( tfldMatDays.getText() );
if ( tfldDSMatAdjust.hasChanged() ) changes.setDSMaturityAdjust( tfldDSMatAdjust.getText() );
if ( tfldDSRowsPerBed.hasChanged() ) changes.setDSRowsPerBed( tfldDSRowsPerBed.getText() );
if ( tfldDSSpaceBetRows.hasChanged() ) changes.setDSSpaceBetweenRow( tfldDSSpaceBetRows.getText() );
if ( tfldDSPlantNotes.hasChanged() ) changes.setDSPlantNotes( tfldDSPlantNotes.getText() );
if ( tfldTPMatAdjust.hasChanged() ) changes.setTPMaturityAdjust( tfldTPMatAdjust.getText() );
if ( tfldTPRowsPerBed.hasChanged() ) changes.setTPRowsPerBed( tfldTPRowsPerBed.getText() );
if ( tfldTPSpaceInRow.hasChanged() ) changes.setTPSpaceInRow( tfldTPSpaceInRow.getText() );
if ( tfldTPSpaceBetRows.hasChanged() ) changes.setTPSpaceBetweenRow( tfldTPSpaceBetRows.getText() );
if ( tfldTPFlatSize.hasChanged() ) changes.setTPFlatSize( tfldTPFlatSize.getText() );
if ( tfldTPWeeksToTP.hasChanged() ) changes.setTPTimeInGH( tfldTPWeeksToTP.getText() );
if ( tfldTPPlantNotes.hasChanged() ) changes.setTPPlantNotes( tfldTPPlantNotes.getText() );
if ( tfldYieldPerWeek.hasChanged() ) changes.setYieldPerWeek( tfldYieldPerWeek.getText() );
if ( tfldYieldWeeks.hasChanged() ) changes.setYieldNumWeeks( tfldYieldWeeks.getText() );
if ( tfldYieldPerFoot.hasChanged() ) changes.setYieldPerFoot( tfldYieldPerFoot.getText() );
if ( tfldYieldUnits.hasChanged() ) changes.setCropYieldUnit( tfldYieldUnits.getText() );
if ( tfldYieldUnitValue.hasChanged() ) changes.setCropUnitValue( tfldYieldUnitValue.getText() );
if ( tfldSeedsPerUnit.hasChanged() ) changes.setSeedsPerUnit( tfldSeedsPerUnit.getText() );
if ( cmbSeedUnit.hasChanged() ) changes.setSeedUnit( cmbSeedUnit.getSelectedItem() );
if ( tfldSeedsPerDS.hasChanged() ) changes.setSeedsPerDS( tfldSeedsPerDS.getText() );
if ( tfldSeedsPerTP.hasChanged() ) changes.setSeedsPerTP( tfldSeedsPerTP.getText() );
} catch ( NumberFormatException e ) {
return null;
}
if ( tareDesc.hasChanged() ) changes.setCropDescription( tareDesc.getText() );
if ( tareGroups.hasChanged() ) changes.setGroups( tareGroups.getText() );
if ( tareOtherReq.hasChanged() ) changes.setOtherRequirements( tareOtherReq.getText() );
if ( tareKeywords.hasChanged() ) changes.setKeywords( tareKeywords.getText() );
if ( tareNotes.hasChanged() ) changes.setNotes( tareNotes.getText() );
return changes;
}
protected void buildDetailsPanel() {
JLabel tempLabel;
String migPanelDefaults = "gapy 0px!, insets 2px";
tfldCropName = new CPSTextField(10);
tfldVarName = new CPSTextField( 10 );
tfldMatDays = new CPSTextField( FIELD_LEN_SHORT );
ArrayList<String> families = new ArrayList<String>();
if ( isDataAvailable() )
families = new ArrayList<String>(getDataSource().getFamilyNameList());
tfldFamName = new CPSTextField( FIELD_LEN_WAY_LONG, families, CPSTextField.MATCH_PERMISSIVE );
chkDS = new CPSCheckBox( "By Direct Seed?", false );
chkTP = new CPSCheckBox( "By Transplant?", false );
chkDS.addItemListener( this );
chkTP.addItemListener( this );
tfldDSMatAdjust = new CPSTextField( FIELD_LEN_SHORT );
tfldDSRowsPerBed = new CPSTextField( FIELD_LEN_SHORT );
tfldDSSpaceBetRows = new CPSTextField( FIELD_LEN_SHORT );
tfldDSPlantNotes = new CPSTextArea( 6, 15 );
tfldTPMatAdjust = new CPSTextField( FIELD_LEN_SHORT );
tfldTPRowsPerBed = new CPSTextField( FIELD_LEN_SHORT );
tfldTPSpaceInRow = new CPSTextField( FIELD_LEN_SHORT );
tfldTPSpaceBetRows = new CPSTextField( FIELD_LEN_SHORT );
tfldTPFlatSize = new CPSTextField( FIELD_LEN_LONG );
tfldTPWeeksToTP = new CPSTextField( FIELD_LEN_SHORT );
tfldTPPlantNotes = new CPSTextArea( 6, 15 );
tfldYieldPerWeek = new CPSTextField( FIELD_LEN_MED );
tfldYieldWeeks = new CPSTextField( FIELD_LEN_SHORT );
tfldYieldPerFoot = new CPSTextField( FIELD_LEN_SHORT );
tfldYieldUnits = new CPSTextField( FIELD_LEN_MED );
tfldYieldUnitValue = new CPSTextField( FIELD_LEN_SHORT );
tfldSeedsPerUnit = new CPSTextField( FIELD_LEN_MED );
cmbSeedUnit = new CPSComboBox( CPSCrop.SEED_UNIT_STRINGS );
tfldSeedsPerDS = new CPSTextField( FIELD_LEN_MED );
tfldSeedsPerTP = new CPSTextField( FIELD_LEN_MED );
tareDesc = new CPSTextArea( 8, FIELD_LEN_WAY_LONG );
tareGroups = new CPSTextArea( 4, FIELD_LEN_WAY_LONG );
tareKeywords = new CPSTextArea( 4, FIELD_LEN_WAY_LONG );
tareOtherReq = new CPSTextArea( 4, FIELD_LEN_WAY_LONG );
tareNotes = new CPSTextArea( 12, 22 );
Font f = tareNotes.getFont();
f = new Font( f.getFamily(), f.getStyle(), f.getSize()-2 );
tareNotes.setFont(f);
tfldDSPlantNotes.setFont(f);
tfldTPPlantNotes.setFont(f);
/* ***********************************/
/* COLUMN ONE (really zero and one) */
/* ***********************************/
JPanel jplName = new JPanel( new MigLayout( migPanelDefaults ));
if ( anonLabels == null )
anonLabels = new ArrayList<JLabel>();
tempLabel = new JLabel("Crop Name:");
jplName.add( tempLabel, "right align" );
jplName.add( tfldCropName, "wrap" );
anonLabels.add( tempLabel );
tempLabel = new JLabel( "Variety:" );
jplName.add( tempLabel, "right align" );
jplName.add( tfldVarName, "wrap" );
anonLabels.add( tempLabel );
tempLabel = new JLabel( "Family:" );
jplName.add( tempLabel, "right align" );
jplName.add( tfldFamName, "wrap" );
anonLabels.add( tempLabel );
jplName.add( new JSeparator(), "growx, span 2, wrap" );
tempLabel = new JLabel( "Description:" );
jplName.add( tempLabel, "right align" );
jplName.add( new JScrollPane( tareDesc ), "wrap" );
anonLabels.add( tempLabel );
/* ***********************************/
/* COLUMN TWO
/* ***********************************/
JPanel jplPlanting = new JPanel( new MigLayout( migPanelDefaults ) );
jplPlanting.setBorder( BorderFactory.createTitledBorder( "Planting Info" ) );
lblMatDays = new JLabel( "Maturity Days:" );
lblMatDays.setDisplayedMnemonic( 'm' );
lblMatDays.setLabelFor( tfldMatDays );
jplPlanting.add( lblMatDays, "align center, split 2, span 5 " );
jplPlanting.add( tfldMatDays, "wrap" );
anonLabels.add( tempLabel );
jplPlanting.add( chkDS, "align center, span 2" );
jplPlanting.add( new JSeparator( JSeparator.VERTICAL ), "growy, spany" );
jplPlanting.add( chkTP, "align center, span 2, wrap" );
lblDSMat = new JLabel( "Adjust Mat." );
jplPlanting.add( lblDSMat, "align right " );
jplPlanting.add( tfldDSMatAdjust, "" );
lblTPMat = new JLabel( "Adjust Mat." );
jplPlanting.add( lblTPMat, "align right" );
jplPlanting.add( tfldTPMatAdjust, "wrap" );
lblDSRowsPB = new JLabel( "Rows/Bed" );
jplPlanting.add( lblDSRowsPB, "align right" );
jplPlanting.add( tfldDSRowsPerBed, "" );
lblTPRows = new JLabel( "Rows/Bed" );
jplPlanting.add( lblTPRows, "align right, skip 1" );
jplPlanting.add( tfldTPRowsPerBed, "wrap" );
lblDSSpace = new JLabel( "Row Spacing" );
lblDSSpace.setToolTipText("Spacing between rows");
jplPlanting.add( lblDSSpace, "align right" );
jplPlanting.add( tfldDSSpaceBetRows, "" );
lblTPSpaceRow = new JLabel( "Row Spacing" );
lblTPSpaceRow.setToolTipText("Spacing between rows");
jplPlanting.add( lblTPSpaceRow, "align right, skip 1" );
jplPlanting.add( tfldTPSpaceBetRows, "wrap" );
lblTPSpace = new JLabel( "Plant Spacing" );
lblTPSpace.setToolTipText( "Spacing between plants in the row (in. or cm.)" );
jplPlanting.add( lblTPSpace, "skip 2, align right" );
jplPlanting.add( tfldTPSpaceInRow, "wrap" );
jplPlanting.add( new JSeparator(), "skip 2, growx, span 2, wrap" );
lblTPFlat = new JLabel( "Flat Size" );
jplPlanting.add( lblTPFlat, "skip 2, align right" );
jplPlanting.add( tfldTPFlatSize, "wrap" );
lblTPWeeks = new JLabel( "Weeks to TP" );
jplPlanting.add( lblTPWeeks, "skip 2, align right" );
jplPlanting.add( tfldTPWeeksToTP, "wrap" );
// add all of the above labels to the label list
anonLabels.addAll( Arrays.asList( lblDSMat, lblDSRowsPB, lblDSSpace,
lblTPMat, lblTPRows, lblTPSpaceRow, lblTPSpace,
lblTPFlat, lblTPWeeks ) );
/**************************************/
/* COLUMN THREE
/**************************************/
/* Page 1
/**************************************/
JPanel jplYield = new JPanel( new MigLayout( migPanelDefaults ) );
/* unit, per foot, weeks, per week, value */
tempLabel = new JLabel( "Yield Units" );
tempLabel.setToolTipText( "e.g. bunches, heads, lbs, kgs, etc" );
jplYield.add( tempLabel, "align right" );
jplYield.add( tfldYieldUnits, "wrap" );
anonLabels.add( tempLabel );
if ( CPSGlobalSettings.useMetric() )
tempLabel = new JLabel( "Total Yield/Meter" );
else
tempLabel = new JLabel( "Total Yield/Ft" );
jplYield.add( tempLabel, "align right" );
jplYield.add( tfldYieldPerFoot, "wrap" );
anonLabels.add( tempLabel );
tempLabel = new JLabel( "Value/Unit" );
tempLabel.setToolTipText("How much is each unit worth?");
jplYield.add( tempLabel, "align right" );
jplYield.add( tfldYieldUnitValue, "wrap" );
anonLabels.add( tempLabel );
tempLabel = new JLabel( "Yields for (wks)" );
tempLabel.setToolTipText( "Approx. how many weeks do you expect to " +
"harvest a planting of this?" );
jplYield.add( tempLabel, "align right" );
jplYield.add( tfldYieldWeeks, "wrap" );
anonLabels.add( tempLabel );
/**************************************/
/* Page 2
/**************************************/
JPanel jplSeeds = new JPanel( new MigLayout( migPanelDefaults ) );
tempLabel = new JLabel( "Units" );
jplSeeds.add( tempLabel, "align right" );
tempLabel.setToolTipText("oz or g, for example");
jplSeeds.add( cmbSeedUnit, "wrap" );
tempLabel = new JLabel( "Seeds/Unit" );
jplSeeds.add( tempLabel, "align right" );
tempLabel.setToolTipText("Seeds/Oz or Seeds/g, for example");
jplSeeds.add( tfldSeedsPerUnit, "wrap" );
if ( CPSGlobalSettings.useMetric() )
lblSeedDS = new JLabel( "Seeds/Meter (DS)" );
else
lblSeedDS = new JLabel( "Seeds/Ft (DS)" );
jplSeeds.add( lblSeedDS, "align right" );
jplSeeds.add( tfldSeedsPerDS, "wrap" );
lblSeedTP = new JLabel( "Seeds/Plant (TP)" );
jplSeeds.add( lblSeedTP, "align right" );
jplSeeds.add( tfldSeedsPerTP, "wrap" );
/**************************************/
/* Page 3
/**************************************/
JPanel jplMisc = new JPanel( new MigLayout( migPanelDefaults ) );
tempLabel = new JLabel( "<html><body style='text-align:right'>Belongs to <br>Groups:" );
jplMisc.add( tempLabel, "align right top" );
jplMisc.add( new JScrollPane( tareGroups ), "wrap" );
tempLabel = new JLabel( "<html><body style='text-align:right'>Other <br>Requirements:" );
tempLabel.setToolTipText( "Other requirements for this crop or variety" );
jplMisc.add( tempLabel, "align right top" );
jplMisc.add( new JScrollPane( tareOtherReq ), "wrap" );
lblKeywords = new JLabel( "Keywords:" );
lblKeywords.setDisplayedMnemonic( 'k' );
lblKeywords.setLabelFor( tareKeywords );
jplMisc.add( lblKeywords, "align right top" );
jplMisc.add( new JScrollPane( tareKeywords ), "wrap" );
/**************************************/
/* Page 4
/**************************************/
JPanel jplNotes = new JPanel( new MigLayout( migPanelDefaults ) );
tempLabel = new JLabel( "<html><font size=\"-2\">" +
"about this specifc crop or variety" );
jplNotes.add( tempLabel, "align center, wrap" );
jplNotes.add( new JScrollPane( tareNotes ), "wrap" );
JButton btn = new JButton("Add Date");
btn.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
int p = tareNotes.getCaretPosition();
String s = ( p == 0 ? "" : "\n" ) +
"=== " +
CPSDateValidator.format( new Date(),
CPSDateValidator.DATE_FORMAT_MON_DAY_YEAR ) +
" ===\n";
tareNotes.insert( s, p );
tareNotes.setCaretPosition( p + s.length() );
tareNotes.requestFocusInWindow();
}
});
jplNotes.add( btn, "span 2, align right" );
/**************************************/
/* Page 5
/**************************************/
JPanel jplPlantingNotes = new JPanel( new MigLayout( migPanelDefaults ) );
tempLabel = new JLabel( "<html><font size=\"-2\">" +
"displayed on the planting list printouts" );
jplPlantingNotes.add( tempLabel, "align center, span 2, wrap" );
anonLabels.add( tempLabel );
lblDSNotes = new JLabel( "DS Notes:" );
jplPlantingNotes.add( lblDSNotes, "align right" );
jplPlantingNotes.add( new JScrollPane( tfldDSPlantNotes ), "wrap" );
lblTPNotes = new JLabel( "TP Notes:" );
jplPlantingNotes.add( lblTPNotes, "align right" );
jplPlantingNotes.add( new JScrollPane( tfldTPPlantNotes ), "wrap" );
columnFour = new CPSCardPanel( new String[] {
"Notes",
"Planting Notes",
"Yield Info",
"Seed Info",
"Keywords etc" },
new JPanel[] {
jplNotes,
jplPlantingNotes,
jplYield,
jplSeeds,
jplMisc } );
/* *************************************/
/* BOTTOW ROW */
/* *************************************/
jplDetails = new JPanel( new MigLayout( "gap 0px!, insets 2px" ) );
jplDetails.add( jplName, "aligny top" );
jplDetails.add( jplPlanting, "aligny top" );
jplDetails.add( columnFour, "aligny top, wrap" );
if ( uiManager != null )
uiManager.signalUIChanged();
}
// Implemented as per ItemListener
public void itemStateChanged ( ItemEvent arg0 ) {
Object source = arg0.getItemSelectable();
if ( source == chkDS )
setDSComponentsEnabled( chkDS.isSelected() );
else if ( source == chkTP )
setTPComponentsEnabled( chkTP.isSelected() );
}
private void setDSComponentsEnabled( boolean b ) {
setDSComponentsEnabled(b, true);
}
private void setDSComponentsEnabled( boolean b, boolean labelsToo ) {
if ( labelsToo ) {
lblDSMat.setEnabled( b );
lblDSRowsPB.setEnabled( b );
lblDSSpace.setEnabled( b );
lblDSNotes.setEnabled( b );
lblSeedDS.setEnabled(b);
}
tfldDSMatAdjust.setEnabled( b );
tfldDSRowsPerBed.setEnabled( b );
tfldDSSpaceBetRows.setEnabled( b );
tfldDSPlantNotes.setEnabled( b );
tfldSeedsPerDS.setEnabled(b);
}
private void setTPComponentsEnabled( boolean b ) {
setTPComponentsEnabled( b, true );
}
private void setTPComponentsEnabled( boolean b, boolean labelsToo ) {
if ( labelsToo ) {
lblTPMat.setEnabled( b );
lblTPRows.setEnabled( b );
lblTPSpace.setEnabled( b );
lblTPSpaceRow.setEnabled( b );
lblTPFlat.setEnabled( b );
lblTPWeeks.setEnabled( b );
lblTPNotes.setEnabled( b );
lblSeedTP.setEnabled(b);
}
tfldTPMatAdjust.setEnabled( b );
tfldTPRowsPerBed.setEnabled( b );
tfldTPSpaceInRow.setEnabled( b );
tfldTPSpaceBetRows.setEnabled( b );
tfldTPFlatSize.setEnabled( b );
tfldTPWeeksToTP.setEnabled( b );
tfldTPPlantNotes.setEnabled( b );
tfldSeedsPerTP.setEnabled(b);
}
@Override
protected void setAllComponentsEnabled( boolean b ) {
tfldCropName.setEnabled( b );
tfldVarName.setEnabled( b );
tfldFamName.setEnabled( b );
tfldMatDays.setEnabled( b );
// false because we'll do the labels later
setDSComponentsEnabled(b, false);
setTPComponentsEnabled(b, false);
tfldYieldPerWeek.setEnabled( b );
tfldYieldWeeks.setEnabled( b );
tfldYieldPerFoot.setEnabled( b );
tfldYieldUnits.setEnabled( b );
tfldYieldUnitValue.setEnabled( b );
tfldSeedsPerUnit.setEnabled( b );
cmbSeedUnit.setEnabled( b );
tareDesc.setEnabled( b );
tareGroups.setEnabled( b );
tareOtherReq.setEnabled( b );
tareKeywords.setEnabled( b );
tareNotes.setEnabled( b );
columnFour.setEnabled(b);
chkDS.setEnabled( b );
chkTP.setEnabled( b );
for ( JLabel jl : anonLabels )
jl.setEnabled( b );
}
protected void saveChangesToRecord() {
CPSCrop currentlyDisplayed = this.asCrop();
if ( currentlyDisplayed == null ) {
// currently the only reason asCrop returns null is for a
// NumberFormatException
new CPSNumberFormatErrorDialog( this.getMainPanel() ).setVisible( true );
return;
}
CPSCrop diff = (CPSCrop) displayedCrop.diff( currentlyDisplayed );
if ( diff.getID() == -1 ) {
displayRecord( displayedCrop );
return;
}
// update items in db
if ( ! displayedCrop.isSingleRecord() ) {
// multiple selection
List<Integer> ids = displayedCrop.getCommonIDs();
// this triggers an update of all of the lists
getDataSource().updateCrops( diff, ids );
selectRecordsInMasterView(ids);
}
else {
int id = displayedCrop.getID();
// single selection
// this triggers an update of all of the lists
getDataSource().updateCrop( currentlyDisplayed );
// reload the crop/var in case inheritance needs to be updated
// reusing diff
//diff = getDataSource().getCropInfo( diff.getID() );
//updateRecordInMasterView(diff);
// this automatically displays the record in the detail panel
selectRecordsInMasterView( Arrays.asList( id ));
}
}
@Override
protected void updateAutocompletionComponents() {
if ( ! isDataAvailable() )
return;
tfldCropName.updateAutocompletionList( getDataSource().getCropNameList(),
CPSTextField.MATCH_PERMISSIVE );
if ( displayedCrop != null )
tfldVarName.updateAutocompletionList( getDataSource().getVarietyNameList( displayedCrop.getCropName() ),
CPSTextField.MATCH_PERMISSIVE );
tfldFamName.updateAutocompletionList( getDataSource().getFamilyNameList(),
CPSTextField.MATCH_PERMISSIVE );
tfldTPFlatSize.updateAutocompletionList( getDataSource().getFlatSizeList(),
CPSTextField.MATCH_PERMISSIVE );
}
@Override
public void dataUpdated() {
if ( isRecordDisplayed() ) {
CPSCrop c = getDataSource().getCropInfo( getDisplayedRecord().getID() );
this.displayRecord( c );
updateAutocompletionComponents();
}
}
@Override
protected int saveState() {
throw new UnsupportedOperationException( "Not supported yet." );
}
/* for testing only */
public static void main( String[] args ) {
// "test" construtor
CropDBCropInfo ci = new CropDBCropInfo();
ci.buildDetailsPanel();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setContentPane( ci.getDetailsPanel() );
frame.setTitle( "CropDB Info Layout" );
frame.pack();
frame.setVisible(true);
}
}