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.
95 lines
3.4 KiB
95 lines
3.4 KiB
package com.fr.design.dialog; |
|
|
|
import com.formdev.flatlaf.util.ScaledEmptyBorder; |
|
import com.fr.design.gui.icombobox.UIComboBox; |
|
import com.fr.design.gui.ilable.UILabel; |
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
|
|
import javax.swing.JPanel; |
|
import java.awt.BorderLayout; |
|
import java.awt.event.ItemEvent; |
|
import java.awt.event.ItemListener; |
|
|
|
import static com.fine.swing.ui.layout.Layouts.cell; |
|
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.flex; |
|
import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX; |
|
import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE; |
|
|
|
/** |
|
* 封装了"为该模版单独设置、采用服务器设置"选项功能的设置面板 |
|
* Created by plough on 2018/11/7. |
|
*/ |
|
public abstract class AbstractTemplateServerSettingPane extends BasicPane { |
|
private static final String[] CHOOSEITEM = new String[] { |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_I_Want_To_Set_Single"), |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Using_Server_Report_View_Settings") |
|
}; |
|
|
|
protected static final int SINGLE_SET = 0; |
|
protected static final int SERVER_SET = 1; |
|
|
|
protected UIComboBox chooseComboBox; |
|
protected JPanel buttonPane; |
|
private JPanel contentPane; |
|
|
|
protected AbstractTemplateServerSettingPane() { |
|
initComponents(); |
|
} |
|
|
|
private void initComponents() { |
|
chooseComboBox = new UIComboBox(CHOOSEITEM); |
|
chooseComboBox.addItemListener(itemListener); |
|
chooseComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX); |
|
//以下设置,部分面板通用 |
|
UILabel belowSetLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Blow_Set")); |
|
buttonPane = row(32, cell(belowSetLabel), cell(chooseComboBox), flex()).getComponent(); |
|
this.setLayout(new BorderLayout()); |
|
this.contentPane = getContentPane(); |
|
this.add(column(cell(buttonPane), cell(contentPane).weight(1)).getComponent()); |
|
} |
|
|
|
/** |
|
* 包含设置项的主面板 |
|
*/ |
|
protected abstract JPanel getContentPane(); |
|
|
|
private ItemListener itemListener = new ItemListener() { |
|
@Override |
|
public void itemStateChanged(ItemEvent e) { |
|
if (e.getStateChange() == ItemEvent.SELECTED) { |
|
if (isUsingServerSettings()) { |
|
populateServerSettings(); |
|
setSettingPaneEnabled(false); |
|
} else { |
|
setSettingPaneEnabled(true); |
|
} |
|
} |
|
} |
|
}; |
|
|
|
private void setSettingPaneEnabled(boolean enabled) { |
|
// GUICoreUtils.setEnabled 会遍历所有 Component。所以要先设置外层,如果是生效的,再设置内层 |
|
GUICoreUtils.setEnabled(contentPane, enabled); |
|
if (enabled) { |
|
checkContentPaneEnabled(); |
|
} |
|
} |
|
|
|
protected boolean isUsingServerSettings() { |
|
return chooseComboBox.getSelectedIndex() == SERVER_SET; |
|
} |
|
|
|
/** |
|
* 整个配置面板设置为可用后,可能还需要检测面板中部分区域的可用性 |
|
*/ |
|
protected void checkContentPaneEnabled() { |
|
// do nothing |
|
} |
|
|
|
/** |
|
* 读取服务器配置并 populate 到主面板中 |
|
*/ |
|
protected abstract void populateServerSettings(); |
|
}
|
|
|