1 /******************************************************************************* 2 * JDateButton: Java Swing Date Button 3 * Copyright 2012,2014 Tony Washer 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * ------------------------------------------------------------ 17 * SubVersion Revision Information: 18 * $URL: https://svn.code.sf.net/p/jdatebutton/code/tags/v2.1.0-b3/jdatebutton-swing/src/main/java/net/sourceforge/jdatebutton/swing/JDateConfig.java $ 19 * $Revision: 34 $ 20 * $Author: tonywasher $ 21 * $Date: 2015-12-01 16:21:13 +0000 (Tue, 01 Dec 2015) $ 22 ******************************************************************************/ 23 package net.sourceforge.jdatebutton.swing; 24 25 import java.time.LocalDate; 26 27 import net.sourceforge.jdatebutton.JDateBaseConfig; 28 import net.sourceforge.jdatebutton.JDateFormatter; 29 30 /** 31 * Provides Date Management support for {@link JDateButton}. 32 */ 33 public class JDateConfig 34 extends JDateBaseConfig<JDateButton> { 35 /** 36 * The maximum day name length. 37 */ 38 public static final int MAX_DAY_NAME_LEN = 3; 39 40 /** 41 * Maximum length of weekday name (e.g. for Wednesday, 3 = Wed, 2 = We, 1 = W). 42 */ 43 private int theMaxDayLen = MAX_DAY_NAME_LEN; 44 45 /** 46 * Shrink long weekday names from right(true) or left(false). 47 */ 48 private boolean doShrinkFromRight = true; 49 50 /** 51 * Make Weekday names pretty (Capitalise first char, and lower-case the rest). 52 */ 53 private boolean doPretty = true; 54 55 /** 56 * Fire selection event on date selection by function call. 57 */ 58 private boolean fireOnAllDateChanges = true; 59 60 /** 61 * The selected Date. 62 */ 63 private LocalDate theSelected = null; 64 65 /** 66 * Constructor. 67 */ 68 protected JDateConfig() { 69 /* Set default locale and format */ 70 super(); 71 } 72 73 /** 74 * Constructor. 75 * @param pFormatter the date formatter 76 */ 77 public JDateConfig(final JDateFormatter pFormatter) { 78 /* Set formatter */ 79 super(pFormatter); 80 } 81 82 @Override 83 public final LocalDate getSelectedDate() { 84 return theSelected; 85 } 86 87 /** 88 * Do we make weekday names pretty (Capitalise first char, and lower-case the rest). 89 * @return true/false 90 */ 91 public boolean doPretty() { 92 return doPretty; 93 } 94 95 /** 96 * Maximum length of weekday name (e.g. for Wednesday, 3 = Wed, 2 = We, 1 = W). 97 * @return the maximum length 98 */ 99 public int getMaxDayLen() { 100 return theMaxDayLen; 101 } 102 103 /** 104 * Shrink long weekday names from right(true) or left(false). 105 * @return true/false 106 */ 107 public boolean doShrinkFromRight() { 108 return doShrinkFromRight; 109 } 110 111 /** 112 * Do we Fire Property Change events on all date changes. 113 * @return true/false 114 */ 115 public boolean fireOnAllDateChanges() { 116 return fireOnAllDateChanges; 117 } 118 119 /** 120 * Set the format options. 121 * @param pMaxDayLen the maximum string length for the weekday 122 * @param bShrinkFromRight remove excess weekday characters from right 123 * @param bPretty capitalise the first character of weekday/month 124 */ 125 public void setFormatOptions(final int pMaxDayLen, 126 final boolean bShrinkFromRight, 127 final boolean bPretty) { 128 /* Store options */ 129 theMaxDayLen = pMaxDayLen; 130 doShrinkFromRight = bShrinkFromRight; 131 doPretty = bPretty; 132 133 /* Request rebuild of names */ 134 rebuildNames(); 135 } 136 137 /** 138 * Set/Clear fire on all Date change flag. If this flag is not set then only changes made by the 139 * dialog will result in PropertyChange events being sent to listeners. Explicit Changes made by 140 * the application will not result in events. 141 * @param pFireOnAllDateChanges true/false 142 */ 143 public void setFireOnAllDateChanges(final boolean pFireOnAllDateChanges) { 144 fireOnAllDateChanges = pFireOnAllDateChanges; 145 } 146 147 @Override 148 public final void storeSelectedDate(final LocalDate pDate) { 149 /* Store the date */ 150 LocalDate myOld = theSelected; 151 theSelected = pDate; 152 153 /* Fire property change */ 154 JDateButton myOwner = getOwner(); 155 if (myOwner != null) { 156 myOwner.fireDatePropertyChange(myOld, pDate); 157 } 158 } 159 160 @Override 161 public final void storeExplicitDate(final LocalDate pDate) { 162 /* Store the date */ 163 LocalDate myOld = theSelected; 164 theSelected = pDate; 165 166 /* Fire a Property change if required */ 167 JDateButton myOwner = getOwner(); 168 if ((myOwner != null) 169 && (fireOnAllDateChanges)) { 170 myOwner.fireDatePropertyChange(myOld, pDate); 171 } 172 } 173 174 @Override 175 protected LocalDate getInitialDate() { 176 return (theSelected == null) 177 ? currentDate() 178 : theSelected; 179 } 180 }