You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
9.1 KiB
239 lines
9.1 KiB
package com.fr.design.widget.ui; |
|
|
|
import com.formdev.flatlaf.util.ScaledEmptyBorder; |
|
import com.fr.base.FRContext; |
|
import com.fr.data.core.FormatField; |
|
import com.fr.design.border.UIRoundedBorder; |
|
import com.fr.design.constants.UIConstants; |
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
|
import com.fr.design.gui.icombobox.UIComboBox; |
|
import com.fr.design.gui.ilable.UILabel; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.widget.component.DateValuePane; |
|
import com.fr.design.widget.component.UIComboBoxNoArrow; |
|
import com.fr.design.widget.ui.designer.date.DateFormatCheckManager; |
|
import com.fr.design.widget.ui.designer.date.DateFormatCheckResult; |
|
import com.fr.form.ui.DateEditor; |
|
|
|
import com.fr.stable.ArrayUtils; |
|
|
|
import javax.swing.BorderFactory; |
|
import javax.swing.JPanel; |
|
import javax.swing.SwingConstants; |
|
import javax.swing.border.TitledBorder; |
|
import javax.swing.event.ChangeEvent; |
|
import javax.swing.event.ChangeListener; |
|
import java.awt.*; |
|
import java.awt.event.ActionEvent; |
|
import java.awt.event.ActionListener; |
|
import java.text.SimpleDateFormat; |
|
import java.util.Date; |
|
|
|
import static com.fine.swing.ui.layout.Layouts.column; |
|
import static com.fine.swing.ui.layout.Layouts.row; |
|
import static com.fine.swing.ui.layout.Layouts.cell; |
|
import static com.fr.design.constants.LayoutConstants.LEFT_WEIGHT; |
|
import static com.fr.design.constants.LayoutConstants.RIGHT_WEIGHT; |
|
|
|
public class DateEditorDefinePane extends DirectWriteEditorDefinePane<DateEditor> { |
|
private UIButtonGroup returnTypeComboBox; |
|
|
|
private DateValuePane startDv; |
|
private DateValuePane endDv; |
|
|
|
private UIComboBox currentFormatComboBox; |
|
private UILabel currentSamplelabel; |
|
private UIButtonGroup fomatHeadGroup; |
|
private static final int SAMPLE_LABEL_PADDING = 4; |
|
|
|
|
|
public DateEditorDefinePane() { |
|
} |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return "Date"; |
|
} |
|
|
|
@Override |
|
protected JPanel setSecondContentPane() { |
|
returnTypeComboBox = new UIButtonGroup<>(new String[] {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Date") , com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_String")}); |
|
JPanel formatHead = createFormatHead(); |
|
startDv = new DateValuePane(); |
|
endDv = new DateValuePane(); |
|
UILabel formatLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Format")); |
|
formatLabel.setVerticalAlignment(SwingConstants.TOP); |
|
UILabel startDateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_FS_Start_Date")); |
|
startDateLabel.setVerticalAlignment(SwingConstants.TOP); |
|
UILabel endDateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_FS_End_Date")); |
|
endDateLabel.setVerticalAlignment(SwingConstants.TOP); |
|
UILabel returnLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Date_Selector_Return_Type")); |
|
JPanel panel = new JPanel(FRGUIPaneFactory.createBorderLayout()); |
|
panel.add(column(10, |
|
row(cell(formatLabel).weight(LEFT_WEIGHT), cell(formatHead).weight(RIGHT_WEIGHT)), |
|
row(cell(startDateLabel).weight(LEFT_WEIGHT), cell(startDv).weight(RIGHT_WEIGHT)), |
|
row(cell(endDateLabel).weight(LEFT_WEIGHT), cell(endDv).weight(RIGHT_WEIGHT)), |
|
cell(waterMarkDictPane), |
|
cell(extraPane), |
|
row(cell(returnLabel).weight(LEFT_WEIGHT), cell(returnTypeComboBox).weight(RIGHT_WEIGHT)) |
|
).getComponent()); |
|
|
|
return panel; |
|
} |
|
|
|
@Override |
|
protected void refreshExtraAdvancedPane() { |
|
refreshExtraAdvancedPane(DateEditor.class); |
|
} |
|
|
|
private JPanel createFormatPane(UIComboBox formatComboBox, UILabel sampleLabel){ |
|
|
|
JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
TitledBorder titledBorder = new TitledBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_StyleFormat_Sample"), 4, 2, this.getFont(), UIConstants.LINE_COLOR); |
|
previewPane.setBorder(titledBorder); |
|
|
|
JPanel sampleLabelWrapper = new JPanel(new BorderLayout()); |
|
sampleLabelWrapper.setBorder(BorderFactory.createEmptyBorder(0, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING, SAMPLE_LABEL_PADDING)); |
|
sampleLabelWrapper.add(sampleLabel, BorderLayout.CENTER); |
|
|
|
previewPane.add(sampleLabelWrapper, BorderLayout.CENTER); |
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
jPanel.add(previewPane, BorderLayout.NORTH); |
|
jPanel.add(formatComboBox, BorderLayout.CENTER); |
|
return jPanel; |
|
} |
|
|
|
private UILabel createSamplePane(){ |
|
UILabel sampleLabel = new UILabel("") { |
|
@Override |
|
public void setText(String text) { |
|
// 加上<html>可以自动换行 |
|
super.setText("<html>" + text + "</html>"); |
|
} |
|
}; |
|
sampleLabel.setHorizontalAlignment(SwingConstants.CENTER); |
|
sampleLabel.setFont(FRContext.getDefaultValues().getFRFont()); |
|
return sampleLabel; |
|
} |
|
|
|
private JPanel createFormatHead(){ |
|
String[] dateArray = FormatField.getInstance().getFormatArray(FormatField.FormatContents.DATE); |
|
String[] timeArray = FormatField.getInstance().getFormatArray(FormatField.FormatContents.TIME); |
|
final UIComboBox dateFormatComboBox = new UIComboBoxNoArrow(dateArray); |
|
final UIComboBox timeFormatComboBox = new UIComboBoxNoArrow(timeArray); |
|
dateFormatComboBox.addActionListener(new ActionListener(){ |
|
public void actionPerformed(ActionEvent e){ |
|
refreshPreviewLabel(); |
|
} |
|
}); |
|
timeFormatComboBox.addActionListener(new ActionListener(){ |
|
public void actionPerformed(ActionEvent e){ |
|
refreshPreviewLabel(); |
|
} |
|
}); |
|
final UILabel dateSampleLabel = createSamplePane(); |
|
final UILabel timeSampleLabel = createSamplePane(); |
|
JPanel formatHeadPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
formatHeadPane.setBorder(new ScaledEmptyBorder(5, 0, 5, 0)); |
|
final CardLayout cardLayout = new CardLayout(); |
|
final JPanel customPane = new JPanel(cardLayout); |
|
JPanel dateFormatPane = createFormatPane(dateFormatComboBox, dateSampleLabel); |
|
JPanel timeFormatPane = createFormatPane(timeFormatComboBox, timeSampleLabel); |
|
customPane.add(dateFormatPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_StyleFormat_Date")); |
|
customPane.add(timeFormatPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_StyleFormat_Time")); |
|
final String[] tabTitles = new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_StyleFormat_Date"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_StyleFormat_Time")}; |
|
fomatHeadGroup = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_StyleFormat_Date"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_StyleFormat_Time")}); |
|
fomatHeadGroup.addChangeListener(new ChangeListener() { |
|
@Override |
|
public void stateChanged(ChangeEvent e) { |
|
int newSelectedIndex = fomatHeadGroup.getSelectedIndex(); |
|
cardLayout.show(customPane, tabTitles[newSelectedIndex]); |
|
if(newSelectedIndex == 0){ |
|
currentFormatComboBox = dateFormatComboBox; |
|
currentSamplelabel = dateSampleLabel; |
|
}else{ |
|
currentFormatComboBox = timeFormatComboBox; |
|
currentSamplelabel = timeSampleLabel; |
|
} |
|
refreshPreviewLabel(); |
|
} |
|
}); |
|
formatHeadPane.add(fomatHeadGroup, BorderLayout.NORTH); |
|
formatHeadPane.add(customPane, BorderLayout.CENTER); |
|
return formatHeadPane; |
|
} |
|
|
|
|
|
|
|
private void refreshPreviewLabel() { |
|
String text = (String) currentFormatComboBox.getSelectedItem(); |
|
if (text != null && text.length() > 0) { |
|
try { |
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(text); |
|
String sample = simpleDateFormat.format(new Date()); |
|
DateFormatCheckResult result = DateFormatCheckManager.check(sample, text); |
|
currentSamplelabel.setText(result.getSample()); |
|
currentSamplelabel.setForeground(result.getColor()); |
|
} catch (Exception exp) { |
|
currentSamplelabel.setForeground(Color.red); |
|
currentSamplelabel.setText(exp.getMessage()); |
|
} |
|
} else { |
|
currentSamplelabel.setText(new Date().toString()); |
|
} |
|
} |
|
|
|
private int getDateType(DateEditor e){ |
|
String[] timeArray = FormatField.getInstance().getFormatArray(FormatField.FormatContents.TIME); |
|
if(e == null){ |
|
return 0; |
|
} |
|
String formatText = e.getFormatText(); |
|
if(ArrayUtils.contains(timeArray, formatText)){ |
|
return 1; |
|
} |
|
return 0; |
|
} |
|
|
|
|
|
@Override |
|
protected void populateSubDirectWriteEditorBean(DateEditor e) { |
|
String formatText = e.getFormatText(); |
|
fomatHeadGroup.setSelectedIndex(getDateType(e)); |
|
fomatHeadGroup.populateBean(); |
|
currentFormatComboBox.setSelectedItem(formatText); |
|
|
|
returnTypeComboBox.setSelectedIndex(e.isReturnDate() ? 0 : 1); |
|
startDv.populate(e.getStartDate()); |
|
endDv.populate(e.getEndDate()); |
|
} |
|
|
|
@Override |
|
protected DateEditor updateSubDirectWriteEditorBean() { |
|
DateEditor ob = new DateEditor(); |
|
ob.setFormatText(this.getSimpleDateFormat().toPattern()); |
|
ob.setReturnDate(returnTypeComboBox.getSelectedIndex() == 0); |
|
ob.setStartDate(startDv.update()); |
|
ob.setEndDate(endDv.update()); |
|
|
|
return ob; |
|
} |
|
|
|
private SimpleDateFormat getSimpleDateFormat() { |
|
String text = (String) currentFormatComboBox.getSelectedItem(); |
|
SimpleDateFormat simpleDateFormat; |
|
if (text != null && text.length() > 0) { |
|
try { |
|
simpleDateFormat = new SimpleDateFormat(text); |
|
} catch (Exception exp) { |
|
simpleDateFormat = new SimpleDateFormat(""); |
|
} |
|
} else { |
|
simpleDateFormat = new SimpleDateFormat(""); |
|
} |
|
|
|
return simpleDateFormat; |
|
|
|
} |
|
|
|
}
|
|
|