package cn.fantasticmao.ycy.intellij.plugin.config; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.ui.ComboBox; import com.intellij.ui.AnActionButton; import com.intellij.ui.ToolbarDecorator; import javax.swing.*; import java.util.List; /** * 插件设置页面的表单对象 * * <p>表单对象的实例化由插件 {@code UI Designer} 根据 {@code PluginSettingForm.form} 配置文件生成</p> * * @author maomao * @version 1.2 * @see PluginSettingPage#createComponent() * @since 2019-04-13 */ public class PluginSettingForm { private JPanel pluginSettingPanel; private PluginSettingTable pluginSettingTable; private JComboBox<String> remindTypeOptions; private JPanel imageUrlList; private JTextField periodMinutes; private JTextField notifyTitle; private JTextField notifyContent; private JTextField notifyAction; public JPanel getPluginSettingPanel() { return this.pluginSettingPanel; } private void createUIComponents() { // place custom component creation code here this.remindTypeOptions = new ComboBox<>(); for (ConfigState.RemindTypeEnum remindType : ConfigState.RemindTypeEnum.values()) { this.remindTypeOptions.addItem(remindType.description); } ConfigState configState = ConfigService.getInstance().getState(); List<String> remindImages = configState.getRemindImages(); this.pluginSettingTable = new PluginSettingTable(remindImages); this.imageUrlList = ToolbarDecorator.createDecorator(pluginSettingTable) /* * at version 1.5 fix a bug: 2020.1 版本 AllIcons.Actions.Reset_to_default 过时问题 * see https://github.com/fantasticmao/ycy-intellij-plugin/issues/27 */ .addExtraAction(new AnActionButton("Reset", AllIcons.Actions.Rollback) { @Override public void actionPerformed(AnActionEvent e) { pluginSettingTable.resetTableList(); } @Override public boolean isDumbAware() { return true; // 使用「后台更新」模式 } }) .createPanel(); } /** * 获取提醒方式 * * @return {@code cn.fantasticmao.ycy.intellij.plugin.config.ConfigState.RemindTypeEnum} */ public int getRemindTypeOption() { return this.remindTypeOptions.getSelectedIndex(); } /** * 设置提醒方式 * * <p>optionIndex 参数值:</p> * <ul> * <li>0. 消息通知 -> 打开图片</li> * <li>1. 打开图片</li> * </ul> * * @param optionIndex 0 或 1 */ public void setRemindTypeOption(int optionIndex) { optionIndex = Math.max(optionIndex, 0); optionIndex = Math.min(optionIndex, 1); this.remindTypeOptions.setSelectedIndex(optionIndex); } /** * 获取提醒图片列表 */ public List<String> getImageUrlList() { return this.pluginSettingTable.getTableList(); } /** * 设置提醒图片列表 */ public void setImageUrlList(List<String> imageList) { this.pluginSettingTable.setTableList(imageList); } /** * 获取提醒间隔时间,单位分钟 */ public int getPeriodMinutes() { try { return Integer.parseInt(this.periodMinutes.getText()); } catch (NumberFormatException e) { return DefaultConfig.PERIOD_MINUTES; } } /** * 设置提醒间隔时间,单位分钟 */ public void setPeriodMinutes(int periodMinutes) { this.periodMinutes.setText(String.valueOf(periodMinutes)); } /** * 获取通知文案的标题 */ public String getNotifyTitle() { return this.notifyTitle.getText(); } /** * 设置通知文案的标题 */ public void setNotifyTitle(String notifyTitle) { this.notifyTitle.setText(notifyTitle); } /** * 获取通知文案的内容 */ public String getNotifyContent() { return this.notifyContent.getText(); } /** * 设置通知文案的内容 */ public void setNotifyContent(String notifyContent) { this.notifyContent.setText(notifyContent); } /** * 获取通知文案的按钮 */ public String getNotifyAction() { return this.notifyAction.getText(); } /** * 设置通知文案的按钮 */ public void setNotifyAction(String notifyAction) { this.notifyAction.setText(notifyAction); } }