1 | 1150245 | |
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | |
|
19 | |
|
20 | |
|
21 | |
|
22 | |
|
23 | |
|
24 | |
package org.cesilko.rachota.gui; |
25 | |
|
26 | |
import java.awt.Color; |
27 | |
import java.awt.Dimension; |
28 | |
import java.awt.Font; |
29 | |
import java.awt.event.KeyEvent; |
30 | |
import java.text.SimpleDateFormat; |
31 | |
import java.util.Calendar; |
32 | |
import java.util.Date; |
33 | |
import javax.swing.JLabel; |
34 | |
import javax.swing.SpinnerDateModel; |
35 | |
import org.cesilko.rachota.core.Day; |
36 | |
import org.cesilko.rachota.core.Plan; |
37 | |
import org.cesilko.rachota.core.Translator; |
38 | |
|
39 | |
|
40 | |
|
41 | |
|
42 | |
public class DateDialog extends javax.swing.JDialog { |
43 | |
|
44 | |
|
45 | |
public static final int TYPE_SWITCH_DATE = 0; |
46 | |
|
47 | |
public static final int TYPE_COPY_TASK = 1; |
48 | |
|
49 | |
private int type; |
50 | |
|
51 | |
|
52 | 1150245 | public DateDialog(java.awt.Frame parent, Date date, int type) { |
53 | 1150245 | initComponents(); |
54 | 1150245 | this.type = type; |
55 | 1150245 | switch (type) { |
56 | |
case TYPE_SWITCH_DATE: |
57 | 173142 | lbSelectDate.setText(Translator.getTranslation("DATEDIALOG.SELECT_DATE")); |
58 | 173142 | break; |
59 | |
default: |
60 | 977103 | lbSelectDate.setText(Translator.getTranslation("DATEDIALOG.COPY_TASK")); |
61 | |
} |
62 | 1150245 | setLocationRelativeTo(parent); |
63 | 1150245 | Calendar calendar = Calendar.getInstance(); |
64 | 1150245 | SimpleDateFormat sdf = new SimpleDateFormat("MMMMMMMMMMMMMMMMM"); |
65 | 14953185 | for (int i = 0; i < 12; i++) { |
66 | 13802940 | calendar.set(Calendar.MONTH, i); |
67 | 13802940 | cmbMonth.addItem(sdf.format(calendar.getTime())); |
68 | |
} |
69 | 1150245 | calendar.setTime(date); |
70 | 1150245 | spYear.setValue(date); |
71 | 1150245 | spYear.setEditor(new javax.swing.JSpinner.DateEditor(spYear, "yyyy")); |
72 | 1150245 | cmbMonth.setSelectedIndex(calendar.get(Calendar.MONTH)); |
73 | 1150245 | this.date = date; |
74 | 1150245 | updateDays(); |
75 | 1150245 | pack(); |
76 | 1150245 | } |
77 | |
|
78 | |
private void updateDays() { |
79 | 7267327 | pnDays.removeAll(); |
80 | 7267327 | String dateFormat = Translator.getTranslation("FORMAT.DATE"); |
81 | 7267327 | SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); |
82 | 7267327 | txtDate.setText(sdf.format(date)); |
83 | 7267327 | Calendar calendar = Calendar.getInstance(); |
84 | 7267327 | calendar.setTime(date); |
85 | 7267327 | int dayNumber = calendar.get(Calendar.DAY_OF_MONTH); |
86 | 7267327 | int numberOfDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); |
87 | 7267327 | Font font = getFont(); |
88 | 7267327 | JLabel specimen = new JLabel("31"); |
89 | 7267327 | specimen.setFont(font); |
90 | 7267327 | specimen.setBorder(javax.swing.BorderFactory.createEtchedBorder()); |
91 | 7267327 | Dimension size = specimen.getPreferredSize(); |
92 | 7267327 | size.setSize(size.getWidth() + 2, size.getHeight() + 2); |
93 | 227706099 | for (int i = 0; i < numberOfDays; i++) { |
94 | 220438772 | calendar.set(Calendar.DAY_OF_MONTH, i+1); |
95 | 220438772 | JLabel day = new JLabel(new Integer(i+1).toString()); |
96 | 220438772 | day.setPreferredSize(size); |
97 | 220438772 | day.setHorizontalAlignment(JLabel.CENTER); |
98 | 220438772 | int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); |
99 | 220438772 | if ((dayOfWeek == Calendar.SATURDAY) | (dayOfWeek == Calendar.SUNDAY)) day.setFont(font.deriveFont(Font.BOLD)); |
100 | 156447709 | else day.setFont(font); |
101 | 220438772 | if (dayNumber == i+1) { |
102 | 7267327 | day.setForeground(Color.BLUE); |
103 | 7267327 | day.setBorder(javax.swing.BorderFactory.createEtchedBorder()); |
104 | 7267327 | day.setFont(font.deriveFont(Font.BOLD)); |
105 | |
} |
106 | 220438772 | java.awt.GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); |
107 | 220438772 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
108 | 220438772 | gridBagConstraints.gridx = i % 7; |
109 | 220438772 | gridBagConstraints.gridy = i / 7; |
110 | 220438772 | day.addMouseListener(new java.awt.event.MouseAdapter() { |
111 | |
public void mouseClicked(java.awt.event.MouseEvent evt) { |
112 | 0 | lbDayMouseClicked(evt); |
113 | 0 | } |
114 | |
}); |
115 | 220438772 | pnDays.add(day, gridBagConstraints); |
116 | |
} |
117 | 7267327 | previousYear = (Date) spYear.getValue(); |
118 | 7267327 | repaint(); |
119 | 7267327 | pack(); |
120 | 7267327 | } |
121 | |
|
122 | |
|
123 | |
|
124 | |
|
125 | |
|
126 | |
public java.awt.Font getFont() { |
127 | 88960425 | return Tools.getFont(); |
128 | |
} |
129 | |
|
130 | |
|
131 | |
|
132 | |
|
133 | |
|
134 | |
|
135 | |
|
136 | |
private void initComponents() { |
137 | |
java.awt.GridBagConstraints gridBagConstraints; |
138 | |
|
139 | 1150245 | lbSelectDate = new javax.swing.JLabel(); |
140 | 1150245 | cmbMonth = new javax.swing.JComboBox(); |
141 | 1150245 | spYear = new javax.swing.JSpinner(); |
142 | 1150245 | pnDays = new javax.swing.JPanel(); |
143 | 1150245 | txtDate = new javax.swing.JTextField(); |
144 | 1150245 | btOK = new javax.swing.JButton(); |
145 | 1150245 | btCancel = new javax.swing.JButton(); |
146 | |
|
147 | 1150245 | setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); |
148 | 1150245 | setTitle(Translator.getTranslation("DATEDIALOG.TITLE")); |
149 | 1150245 | addMouseListener(new java.awt.event.MouseAdapter() { |
150 | |
public void mouseEntered(java.awt.event.MouseEvent evt) { |
151 | 1280585 | formMouseEntered(evt); |
152 | 1280585 | } |
153 | |
}); |
154 | 1150245 | getContentPane().setLayout(new java.awt.GridBagLayout()); |
155 | |
|
156 | 1150245 | lbSelectDate.setFont(getFont()); |
157 | 1150245 | lbSelectDate.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); |
158 | 1150245 | lbSelectDate.setLabelFor(cmbMonth); |
159 | 1150245 | lbSelectDate.setText(Translator.getTranslation("DATEDIALOG.SELECT_DATE")); |
160 | 1150245 | gridBagConstraints = new java.awt.GridBagConstraints(); |
161 | 1150245 | gridBagConstraints.gridwidth = 2; |
162 | 1150245 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
163 | 1150245 | getContentPane().add(lbSelectDate, gridBagConstraints); |
164 | |
|
165 | 1150245 | cmbMonth.setFont(getFont()); |
166 | 1150245 | cmbMonth.addActionListener(new java.awt.event.ActionListener() { |
167 | |
public void actionPerformed(java.awt.event.ActionEvent evt) { |
168 | 2300490 | cmbMonthActionPerformed(evt); |
169 | 2300490 | } |
170 | |
}); |
171 | 1150245 | cmbMonth.addKeyListener(new java.awt.event.KeyAdapter() { |
172 | |
public void keyPressed(java.awt.event.KeyEvent evt) { |
173 | 0 | cmbMonthKeyPressed(evt); |
174 | 0 | } |
175 | |
}); |
176 | 1150245 | gridBagConstraints = new java.awt.GridBagConstraints(); |
177 | 1150245 | gridBagConstraints.gridy = 1; |
178 | 1150245 | gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; |
179 | 1150245 | gridBagConstraints.weightx = 1.0; |
180 | 1150245 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
181 | 1150245 | getContentPane().add(cmbMonth, gridBagConstraints); |
182 | |
|
183 | 1150245 | spYear.setFont(getFont()); |
184 | 1150245 | spYear.setModel(new SpinnerDateModel()); |
185 | 1150245 | spYear.addChangeListener(new javax.swing.event.ChangeListener() { |
186 | |
public void stateChanged(javax.swing.event.ChangeEvent evt) { |
187 | 3816592 | spYearStateChanged(evt); |
188 | 3816592 | } |
189 | |
}); |
190 | 1150245 | gridBagConstraints = new java.awt.GridBagConstraints(); |
191 | 1150245 | gridBagConstraints.gridy = 1; |
192 | 1150245 | gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; |
193 | 1150245 | gridBagConstraints.weightx = 1.0; |
194 | 1150245 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
195 | 1150245 | getContentPane().add(spYear, gridBagConstraints); |
196 | |
|
197 | 1150245 | pnDays.setBorder(javax.swing.BorderFactory.createEtchedBorder()); |
198 | 1150245 | pnDays.addKeyListener(new java.awt.event.KeyAdapter() { |
199 | |
public void keyPressed(java.awt.event.KeyEvent evt) { |
200 | 0 | pnDaysKeyPressed(evt); |
201 | 0 | } |
202 | |
}); |
203 | 1150245 | pnDays.setLayout(new java.awt.GridBagLayout()); |
204 | 1150245 | gridBagConstraints = new java.awt.GridBagConstraints(); |
205 | 1150245 | gridBagConstraints.gridy = 2; |
206 | 1150245 | gridBagConstraints.gridwidth = 2; |
207 | 1150245 | gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; |
208 | 1150245 | gridBagConstraints.weighty = 1.0; |
209 | 1150245 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
210 | 1150245 | getContentPane().add(pnDays, gridBagConstraints); |
211 | |
|
212 | 1150245 | txtDate.setEditable(false); |
213 | 1150245 | txtDate.setFont(getFont()); |
214 | 1150245 | txtDate.setHorizontalAlignment(javax.swing.JTextField.CENTER); |
215 | 1150245 | txtDate.setToolTipText(Translator.getTranslation("DATEDIALOG.TXT_DATE_TOOLTIP")); |
216 | 1150245 | txtDate.addMouseListener(new java.awt.event.MouseAdapter() { |
217 | |
public void mouseClicked(java.awt.event.MouseEvent evt) { |
218 | 0 | txtDateMouseClicked(evt); |
219 | 0 | } |
220 | |
}); |
221 | 1150245 | gridBagConstraints = new java.awt.GridBagConstraints(); |
222 | 1150245 | gridBagConstraints.gridy = 3; |
223 | 1150245 | gridBagConstraints.gridwidth = 2; |
224 | 1150245 | gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
225 | 1150245 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
226 | 1150245 | getContentPane().add(txtDate, gridBagConstraints); |
227 | |
|
228 | 1150245 | btOK.setFont(getFont()); |
229 | 1150245 | btOK.setMnemonic(Translator.getMnemonic("DATEDIALOG.BT_OK")); |
230 | 1150245 | btOK.setText(Translator.getTranslation("DATEDIALOG.BT_OK")); |
231 | 1150245 | btOK.setToolTipText(Translator.getTranslation("DATEDIALOG.BT_OK_TOOLTIP")); |
232 | 1150245 | btOK.addActionListener(new java.awt.event.ActionListener() { |
233 | |
public void actionPerformed(java.awt.event.ActionEvent evt) { |
234 | 838344 | btOKActionPerformed(evt); |
235 | 838344 | } |
236 | |
}); |
237 | 1150245 | gridBagConstraints = new java.awt.GridBagConstraints(); |
238 | 1150245 | gridBagConstraints.gridy = 4; |
239 | 1150245 | gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; |
240 | 1150245 | gridBagConstraints.weightx = 1.0; |
241 | 1150245 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
242 | 1150245 | getContentPane().add(btOK, gridBagConstraints); |
243 | |
|
244 | 1150245 | btCancel.setFont(getFont()); |
245 | 1150245 | btCancel.setMnemonic(Translator.getMnemonic("DATEDIALOG.BT_CANCEL")); |
246 | 1150245 | btCancel.setText(Translator.getTranslation("DATEDIALOG.BT_CANCEL")); |
247 | 1150245 | btCancel.setToolTipText(Translator.getTranslation("DATEDIALOG.BT_CANCEL_TOOLTIP")); |
248 | 1150245 | btCancel.addActionListener(new java.awt.event.ActionListener() { |
249 | |
public void actionPerformed(java.awt.event.ActionEvent evt) { |
250 | 55160 | btCancelActionPerformed(evt); |
251 | 55160 | } |
252 | |
}); |
253 | 1150245 | gridBagConstraints = new java.awt.GridBagConstraints(); |
254 | 1150245 | gridBagConstraints.gridy = 4; |
255 | 1150245 | gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; |
256 | 1150245 | gridBagConstraints.weightx = 1.0; |
257 | 1150245 | gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); |
258 | 1150245 | getContentPane().add(btCancel, gridBagConstraints); |
259 | |
|
260 | 1150245 | pack(); |
261 | 1150245 | } |
262 | |
|
263 | 0 | private void pnDaysKeyPressed(java.awt.event.KeyEvent evt) { |
264 | 0 | if (evt.getKeyCode() == KeyEvent.VK_ENTER) |
265 | 0 | btOKActionPerformed(null); |
266 | 0 | if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) |
267 | 0 | btCancelActionPerformed(null); |
268 | 0 | } |
269 | |
|
270 | 0 | private void cmbMonthKeyPressed(java.awt.event.KeyEvent evt) { |
271 | 0 | if (evt.getKeyCode() == KeyEvent.VK_ENTER) |
272 | 0 | btOKActionPerformed(null); |
273 | 0 | if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) |
274 | 0 | btCancelActionPerformed(null); |
275 | 0 | } |
276 | |
|
277 | 0 | private void txtDateMouseClicked(java.awt.event.MouseEvent evt) { |
278 | 0 | Calendar calendar = Calendar.getInstance(); |
279 | 0 | calendar.setTime(new Date()); |
280 | 0 | spYear.setValue(new Date()); |
281 | 0 | cmbMonth.setSelectedIndex(calendar.get(Calendar.MONTH)); |
282 | 0 | date = new Date(); |
283 | 0 | updateDays(); |
284 | 0 | } |
285 | |
|
286 | 0 | private void lbDayMouseClicked(java.awt.event.MouseEvent evt) { |
287 | 0 | JLabel selectedDay = (JLabel) evt.getComponent(); |
288 | 0 | Calendar calendar = Calendar.getInstance(); |
289 | 0 | calendar.setTime(date); |
290 | 0 | calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(selectedDay.getText())); |
291 | 0 | if (type==TYPE_COPY_TASK) { |
292 | 0 | Plan plan = Plan.getDefault(); |
293 | 0 | Day day = plan.getDay(calendar.getTime()); |
294 | 0 | boolean today = plan.isToday(day); |
295 | 0 | boolean future = plan.isFuture(day); |
296 | 0 | if (!(today | future)) return; |
297 | |
} |
298 | 0 | date = calendar.getTime(); |
299 | 0 | updateDays(); |
300 | 0 | } |
301 | |
|
302 | 3816592 | private void spYearStateChanged(javax.swing.event.ChangeEvent evt) { |
303 | 3816592 | Calendar calendar = Calendar.getInstance(); |
304 | 3816592 | calendar.setTime((Date) spYear.getValue()); |
305 | 3816592 | int year = calendar.get(Calendar.YEAR); |
306 | 3816592 | if (year < 1970) spYear.setValue(previousYear); |
307 | |
else { |
308 | 3816592 | calendar = Calendar.getInstance(); |
309 | 3816592 | calendar.set(Calendar.YEAR, year); |
310 | 3816592 | calendar.set(Calendar.MONTH, cmbMonth.getSelectedIndex()); |
311 | 3816592 | calendar.set(Calendar.DAY_OF_MONTH, 1); |
312 | 3816592 | date = calendar.getTime(); |
313 | 3816592 | updateDays(); |
314 | |
} |
315 | 3816592 | } |
316 | |
|
317 | 2300490 | private void cmbMonthActionPerformed(java.awt.event.ActionEvent evt) { |
318 | 2300490 | Calendar calendar = Calendar.getInstance(); |
319 | 2300490 | calendar.setTime((Date) spYear.getValue()); |
320 | 2300490 | calendar.set(Calendar.MONTH, cmbMonth.getSelectedIndex()); |
321 | 2300490 | calendar.set(Calendar.DAY_OF_MONTH, 1); |
322 | 2300490 | date = calendar.getTime(); |
323 | 2300490 | updateDays(); |
324 | 2300490 | } |
325 | |
|
326 | 55160 | private void btCancelActionPerformed(java.awt.event.ActionEvent evt) { |
327 | 55160 | setVisible(false); |
328 | 55160 | } |
329 | |
|
330 | 838344 | private void btOKActionPerformed(java.awt.event.ActionEvent evt) { |
331 | 838344 | switch (type) { |
332 | |
case TYPE_SWITCH_DATE: |
333 | 127156 | firePropertyChange("date_selected_switch", null, date); |
334 | 127156 | break; |
335 | |
default: |
336 | 711188 | firePropertyChange("date_selected_copy_task", null, date); |
337 | |
} |
338 | 838344 | setVisible(false); |
339 | 838344 | } |
340 | |
|
341 | 1280585 | private void formMouseEntered(java.awt.event.MouseEvent evt) { |
342 | 1280585 | Tools.recordActivity(); |
343 | 1280585 | } |
344 | |
|
345 | |
|
346 | |
private javax.swing.JButton btCancel; |
347 | |
private javax.swing.JButton btOK; |
348 | |
private javax.swing.JComboBox cmbMonth; |
349 | |
private javax.swing.JLabel lbSelectDate; |
350 | |
private javax.swing.JPanel pnDays; |
351 | |
private javax.swing.JSpinner spYear; |
352 | |
private javax.swing.JTextField txtDate; |
353 | |
|
354 | 1150245 | private Date date = new Date(); |
355 | 1150245 | private Date previousYear = new Date(); |
356 | |
} |