Browse Source

Merge remote-tracking branch 'origin/release/11.0' into release/11.0

bugfix/11.0
pengda 3 years ago
parent
commit
bc9ce4fb3e
  1. 45
      designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java
  2. 4
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TableDataSearchRemindPane.java
  3. 13
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TreeSearchToolbarPane.java
  4. 2
      designer-base/src/main/java/com/fr/design/data/datapane/management/search/view/TreeSearchRendererHelper.java
  5. 2
      designer-base/src/main/java/com/fr/design/data/tabledata/paste/TableDataFollowingPasteUtils.java
  6. 162
      designer-base/src/main/java/com/fr/design/gui/ilist/CheckBoxListWithPartialSelect.java
  7. 19
      designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java
  8. 5
      designer-base/src/main/resources/com/fr/design/images/control/batch_esd_off_disabled.svg
  9. 3
      designer-base/src/main/resources/com/fr/design/images/control/batch_esd_off_normal.svg
  10. 5
      designer-base/src/main/resources/com/fr/design/images/control/batch_esd_on_disabled.svg
  11. 3
      designer-base/src/main/resources/com/fr/design/images/control/batch_esd_on_normal.svg

45
designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java

@ -31,7 +31,8 @@ import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.fun.TableDataPaneProcessor; import com.fr.design.fun.TableDataPaneProcessor;
import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.gui.ibutton.UIHeadGroup;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilist.CheckBoxList; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ilist.CheckBoxListWithPartialSelect;
import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.gui.itoolbar.UIToolbar;
@ -53,7 +54,6 @@ import com.fr.esd.event.StrategyEventsNotifier;
import com.fr.esd.query.StrategicTableData; import com.fr.esd.query.StrategicTableData;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.IOUtils;
import com.fr.general.NameObject; import com.fr.general.NameObject;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginContext;
@ -115,6 +115,20 @@ public class TableDataTreePane extends BasicTableDataTreePane {
return singleton; return singleton;
} }
/**
* 获取不必每次都refreshDockingView的数据集树面板
* 不会主动替换DesignModelAdapter需要保证使用时没有跨模板动作谨慎使用
* @param tc
* @return
*/
public synchronized static BasicTableDataTreePane getInstanceWithoutRefreshEverytime(DesignModelAdapter<?, ?> tc) {
TableDataPaneProcessor treePaneProcessor = ExtraDesignClassManager.getInstance().getSingle(TableDataPaneProcessor.XML_TAG);
if (treePaneProcessor != null) {
return treePaneProcessor.createTableDataTreePane(tc);
}
return singleton.tc == null ? getInstance(tc) : singleton;
}
private TableDataSourceOP op; private TableDataSourceOP op;
private TableDataTree tableDataTree; private TableDataTree tableDataTree;
private UIPopupMenu popupMenu; private UIPopupMenu popupMenu;
@ -210,7 +224,7 @@ public class TableDataTreePane extends BasicTableDataTreePane {
private TreeSearchToolbarPane initToolBarPane() { private TreeSearchToolbarPane initToolBarPane() {
// toolbar // toolbar
addMenuDef = new MenuDef(Toolkit.i18nText("Fine-Design_Basic_Action_Add")); addMenuDef = new MenuDef(Toolkit.i18nText("Fine-Design_Basic_Action_Add"));
addMenuDef.setIconPath(IconPathConstants.ADD_POPMENU_ICON_PATH); addMenuDef.setIconPath("/com/fr/design/images/control/addPopup");
createAddMenuDef(); createAddMenuDef();
// 创建插件监听 // 创建插件监听
createPluginListener(); createPluginListener();
@ -842,8 +856,8 @@ public class TableDataTreePane extends BasicTableDataTreePane {
} }
@Override @Override
public Icon getIcon() { public String getIconResource() {
return IOUtils.readIcon("/com/fr/design/images/control/batch_esd_on.png"); return "/com/fr/design/images/control/batch_esd_on";
} }
@Override @Override
@ -889,8 +903,8 @@ public class TableDataTreePane extends BasicTableDataTreePane {
} }
@Override @Override
public Icon getIcon() { public String getIconResource() {
return IOUtils.readIcon("/com/fr/design/images/control/batch_esd_off.png"); return "/com/fr/design/images/control/batch_esd_off";
} }
@Override @Override
@ -911,14 +925,14 @@ public class TableDataTreePane extends BasicTableDataTreePane {
public abstract String getName(); public abstract String getName();
public abstract Icon getIcon(); public abstract String getIconResource();
public abstract void doWithTableDataWrapper(TableDataWrapper tableDataWrapper); public abstract void doWithTableDataWrapper(TableDataWrapper tableDataWrapper);
public AbstractESDAction() { public AbstractESDAction() {
this.setName(getName()); this.setName(getName());
this.setMnemonic('R'); this.setMnemonic('R');
this.setSmallIcon(getIcon()); this.setSmallIcon(getIconResource());
} }
@Override @Override
@ -984,7 +998,7 @@ public class TableDataTreePane extends BasicTableDataTreePane {
public EditAction() { public EditAction() {
this.setName(Toolkit.i18nText("Fine-Design_Basic_Edit")); this.setName(Toolkit.i18nText("Fine-Design_Basic_Edit"));
this.setMnemonic('E'); this.setMnemonic('E');
this.setSmallIcon(IOUtils.readIcon(IconPathConstants.TD_EDIT_ICON_PATH)); this.setSmallIcon("/com/fr/design/images/control/edit");
} }
@Override @Override
@ -1011,7 +1025,7 @@ public class TableDataTreePane extends BasicTableDataTreePane {
public RemoveAction() { public RemoveAction() {
this.setName(Toolkit.i18nText("Fine-Design_Basic_Remove")); this.setName(Toolkit.i18nText("Fine-Design_Basic_Remove"));
this.setMnemonic('R'); this.setMnemonic('R');
this.setSmallIcon(IOUtils.readIcon(IconPathConstants.TD_REMOVE_ICON_PATH)); this.setSmallIcon("/com/fr/design/images/control/remove");
} }
@Override @Override
@ -1021,8 +1035,10 @@ public class TableDataTreePane extends BasicTableDataTreePane {
FineLoggerFactory.getLogger().error("Table Data to remove is null or not selected"); FineLoggerFactory.getLogger().error("Table Data to remove is null or not selected");
return; return;
} }
CheckBoxList checkBoxList = new CheckBoxList(selectedNameObjects, CheckBoxList.SelectedState.ALL, Toolkit.i18nText("Fine-Design_Basic_Remove_All_Selected")); // 可以半选的CheckBoxList
UIScrollPane scrollPane = new UIScrollPane(checkBoxList); CheckBoxListWithPartialSelect tableDataCheckBoxPane = new CheckBoxListWithPartialSelect(selectedNameObjects);
UIScrollPane scrollPane = new UIScrollPane(tableDataCheckBoxPane);
UILabel tips = new UILabel("Fine-Design_Basic_Select_Source_To_Remove");
BasicPane basicPane = new BasicPane() { BasicPane basicPane = new BasicPane() {
@Override @Override
protected String title4PopupWindow() { protected String title4PopupWindow() {
@ -1030,11 +1046,12 @@ public class TableDataTreePane extends BasicTableDataTreePane {
} }
}; };
basicPane.setLayout(new BorderLayout()); basicPane.setLayout(new BorderLayout());
basicPane.add(tips, BorderLayout.NORTH);
basicPane.add(scrollPane, BorderLayout.CENTER); basicPane.add(scrollPane, BorderLayout.CENTER);
BasicDialog basicDialog = basicPane.showSmallWindow(SwingUtilities.getWindowAncestor(TableDataTreePane.this), new DialogActionAdapter() { BasicDialog basicDialog = basicPane.showSmallWindow(SwingUtilities.getWindowAncestor(TableDataTreePane.this), new DialogActionAdapter() {
@Override @Override
public void doOk() { public void doOk() {
Object[] selectedValues = checkBoxList.getSelectedValues(); List selectedValues = tableDataCheckBoxPane.getSelectedObjects();
// 删除时如果正在搜索,跳回原树 // 删除时如果正在搜索,跳回原树
if (TableDataTreeSearchManager.getInstance().isInSearchMode()) { if (TableDataTreeSearchManager.getInstance().isInSearchMode()) {
TableDataTreeSearchManager.getInstance().outOfSearchMode(); TableDataTreeSearchManager.getInstance().outOfSearchMode();

4
designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TableDataSearchRemindPane.java

@ -190,7 +190,7 @@ public class TableDataSearchRemindPane extends JPanel implements TreeSearchStatu
@Override @Override
public void onInSearching() { public void onInSearching() {
this.textLabel.setText(IN_SEARCHING); this.textLabel.setVisible(false);
this.stopLabel.setText(STOP_SEARCHING); this.stopLabel.setText(STOP_SEARCHING);
this.stopLabel.setVisible(true); this.stopLabel.setVisible(true);
this.setVisible(true); this.setVisible(true);
@ -199,6 +199,7 @@ public class TableDataSearchRemindPane extends JPanel implements TreeSearchStatu
@Override @Override
public void onStoppedSearching() { public void onStoppedSearching() {
this.textLabel.setText(SEARCHING_STOPPED); this.textLabel.setText(SEARCHING_STOPPED);
this.textLabel.setVisible(true);
this.stopLabel.setVisible(false); this.stopLabel.setVisible(false);
this.setVisible(true); this.setVisible(true);
} }
@ -206,6 +207,7 @@ public class TableDataSearchRemindPane extends JPanel implements TreeSearchStatu
@Override @Override
public void onDoneSearching(boolean matchSetsEmpty) { public void onDoneSearching(boolean matchSetsEmpty) {
this.textLabel.setText(DONE_SEARCHING); this.textLabel.setText(DONE_SEARCHING);
this.textLabel.setVisible(true);
this.stopLabel.setVisible(false); this.stopLabel.setVisible(false);
this.setVisible(true); this.setVisible(true);
} }

13
designer-base/src/main/java/com/fr/design/data/datapane/management/search/pane/TreeSearchToolbarPane.java

@ -16,6 +16,7 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
@ -23,6 +24,7 @@ import java.awt.BorderLayout;
import java.awt.CardLayout; import java.awt.CardLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
import java.awt.event.FocusListener; import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
@ -103,7 +105,7 @@ public class TreeSearchToolbarPane extends JPanel implements TreeSearchStatusCha
searchPane.setBackground(Color.WHITE); searchPane.setBackground(Color.WHITE);
// 左侧搜索图标 // 左侧搜索图标
UILabel searchLabel = new UILabel(IconUtils.readIcon("/com/fr/design/images/data/search")); UILabel searchLabel = new UILabel(IconUtils.readIcon("/com/fr/design/images/data/search"));
searchLabel.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 0)); searchLabel.setBorder(BorderFactory.createEmptyBorder(0, 12, 0, 0));
searchLabel.addMouseListener(new MouseAdapter() { searchLabel.addMouseListener(new MouseAdapter() {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
@ -111,7 +113,12 @@ public class TreeSearchToolbarPane extends JPanel implements TreeSearchStatusCha
} }
}); });
// 中间输入框 // 中间输入框
searchTextField = new UITextField(); searchTextField = new UITextField(){
@Override
public Insets getInsets() {
return new Insets(2, 4, 0, 4);
}
};
searchTextField.setBorderPainted(false); searchTextField.setBorderPainted(false);
searchTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Tree_Search_Press_Enter_For_Search")); searchTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Tree_Search_Press_Enter_For_Search"));
searchTextField.addFocusListener(new FocusListener() { searchTextField.addFocusListener(new FocusListener() {
@ -145,7 +152,7 @@ public class TreeSearchToolbarPane extends JPanel implements TreeSearchStatusCha
// 右侧返回图标 // 右侧返回图标
UILabel returnLabel = new UILabel(IconUtils.readIcon("/com/fr/design/images/data/clear")); UILabel returnLabel = new UILabel(IconUtils.readIcon("/com/fr/design/images/data/clear"));
returnLabel.setToolTipText(Toolkit.i18nText("Fine-Design_Tree_Search_Return")); returnLabel.setToolTipText(Toolkit.i18nText("Fine-Design_Tree_Search_Return"));
returnLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); returnLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 11));
returnLabel.addMouseListener(new MouseAdapter() { returnLabel.addMouseListener(new MouseAdapter() {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {

2
designer-base/src/main/java/com/fr/design/data/datapane/management/search/view/TreeSearchRendererHelper.java

@ -67,7 +67,7 @@ public class TreeSearchRendererHelper {
} }
private String getHighlightText(String text, String textToHighlight) { private String getHighlightText(String text, String textToHighlight) {
String highLightTemplate = "<font color=\"blue\">$1</font>"; String highLightTemplate = "<font color=\"#419BF9\">$1</font>";
if (textToHighlight.length() == 0) { if (textToHighlight.length() == 0) {
return text; return text;
} }

2
designer-base/src/main/java/com/fr/design/data/tabledata/paste/TableDataFollowingPasteUtils.java

@ -54,7 +54,7 @@ public class TableDataFollowingPasteUtils {
} }
// 获取当前的TableDataTreePane // 获取当前的TableDataTreePane
DesignModelAdapter<?, ?> currentModelAdapter = DesignModelAdapter.getCurrentModelAdapter(); DesignModelAdapter<?, ?> currentModelAdapter = DesignModelAdapter.getCurrentModelAdapter();
TableDataTreePane tableDataTreePane = (TableDataTreePane) TableDataTreePane.getInstance(currentModelAdapter); TableDataTreePane tableDataTreePane = (TableDataTreePane) TableDataTreePane.getInstanceWithoutRefreshEverytime(currentModelAdapter);
// 粘贴(添加)数据集 // 粘贴(添加)数据集
for (Map.Entry<String, TableData> dataWrapperEntry : tableDataWrapperMap.entrySet()) { for (Map.Entry<String, TableData> dataWrapperEntry : tableDataWrapperMap.entrySet()) {
String dsName = dataWrapperEntry.getKey(); String dsName = dataWrapperEntry.getKey();

162
designer-base/src/main/java/com/fr/design/gui/ilist/CheckBoxListWithPartialSelect.java

@ -0,0 +1,162 @@
package com.fr.design.gui.ilist;
import com.fr.design.event.StateChangeListener;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.itree.checkboxtree.TristateCheckBox;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import javax.swing.AbstractListModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;
/**
* 支持全选全不选半选的CheckBoxList面板
* @author Yvan
*/
public class CheckBoxListWithPartialSelect extends JPanel {
private UICheckBox[] dataCheckBoxes;
private TristateCheckBox chooseAllCheckBox;
private UIList dataList;
public CheckBoxListWithPartialSelect (Object[] data) {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
init(data);
this.add(chooseAllCheckBox, BorderLayout.NORTH);
this.add(dataList, BorderLayout.CENTER);
}
private void init(Object[] data) {
// 复选框组
dataCheckBoxes = new UICheckBox[data.length];
for (int i = 0; i < dataCheckBoxes.length; i++) {
dataCheckBoxes[i] = new UICheckBox(transferDataValue2Show(data[i]));
dataCheckBoxes[i].setSelected(true);
}
// UIList
dataList = new UIList(dataCheckBoxes);
dataList.setModel(getListModel());
dataList.setCellRenderer(getListCellRenderer());
// 全选框
chooseAllCheckBox = new TristateCheckBox(Toolkit.i18nText("Fine-Design_Basic_Remove_All_Selected"));
chooseAllCheckBox.setState(TristateCheckBox.SELECTED);
chooseAllCheckBox.setFocusable(false);
chooseAllCheckBox.addStateChangeListener(getChooseAllCheckBoxStateChangeListener());
dataList.addMouseListener(getDataListMouseListener());
}
public List<Object> getSelectedObjects() {
return dataList.getSelectedValuesList();
}
protected MouseListener getDataListMouseListener() {
return new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
int index = dataList.getSelectedIndex();
if (index < 0) {
return;
}
UICheckBox checkBox = (UICheckBox) dataList.getModel().getElementAt(index);
checkBox.setSelected(!checkBox.isSelected());
//根据CheckBoxes中的选择情况来更新全选框的状态
int selectedCount = calculateSelectedNum();
if (selectedCount == 0) {
chooseAllCheckBox.setState(TristateCheckBox.NOT_SELECTED);
} else if (selectedCount == dataCheckBoxes.length) {
chooseAllCheckBox.setState(TristateCheckBox.SELECTED);
} else {
chooseAllCheckBox.setState(TristateCheckBox.DO_NOT_CARE);
}
dataList.repaint();
}
};
}
/**
* 获取全选框状态改变监听
* @return
*/
protected StateChangeListener getChooseAllCheckBoxStateChangeListener() {
return () -> {
if (chooseAllCheckBox.getState() == TristateCheckBox.DO_NOT_CARE) {
return;
}
boolean isSelected = chooseAllCheckBox.isSelected();
for (int i = 0; i < dataList.getModel().getSize(); i++) {
UICheckBox checkBox = (UICheckBox) dataList.getModel().getElementAt(i);
checkBox.setSelected(isSelected);
}
dataList.repaint();
};
}
/**
* 计算CheckBox的选中情况用来更新全选框的状态
* @return
*/
protected int calculateSelectedNum() {
int count = 0;
for (UICheckBox dataCheckBox : dataCheckBoxes) {
if (dataCheckBox.isSelected()) {
count++;
}
}
return count;
}
/**
* 将传入的Object转化为字符串展示默认调用toString方法
* @param object
* @return
*/
protected String transferDataValue2Show(Object object) {
return object.toString();
}
protected AbstractListModel getListModel() {
return new SelectedListDataModel();
}
protected ListCellRenderer getListCellRenderer() {
return new SelectedListCellRender();
}
private class SelectedListCellRender extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, final boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
dataCheckBoxes[index] = (UICheckBox) value;
dataCheckBoxes[index].setBackground(list.getBackground());
return dataCheckBoxes[index];
}
}
private class SelectedListDataModel extends AbstractListModel {
@Override
public int getSize() {
return dataCheckBoxes.length;
}
@Override
public Object getElementAt(int index) {
return (index > getSize() - 1 || index < 0) ? null : dataCheckBoxes[index];
}
}
}

19
designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java

@ -32,23 +32,14 @@ public class UpmShowPane extends BasicPane {
UpmShowPane() { UpmShowPane() {
setLayout(new BorderLayout()); setLayout(new BorderLayout());
modernUIPane = ModernUIPaneFactory.modernUIPaneBuilder() modernUIPane = new ModernUIPane.Builder<>()
.prepareForV6(new ScriptContextAdapter() { .prepare(new ScriptContextAdapter() {
@Override @Override
public void onScriptContextCreated(ScriptContextEvent event) { public void onScriptContextCreated(ScriptContextEvent event) {
// 6.x
JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window");
window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser()));
} }
}) })
.prepareForV7(params -> {
// 7.x
JsObject window = params.frame().executeJavaScript("window");
if (window != null) {
window.putProperty("PluginHelper", NewUpmBridge.getBridge(window));
}
return InjectJsCallback.Response.proceed();
})
.withURL(UpmFinder.getMainResourcePath(), UpmUtils.renderMap()) .withURL(UpmFinder.getMainResourcePath(), UpmUtils.renderMap())
.build(); .build();
EventDispatcher.listen(DownloadEvent.UPDATE, new Listener<String>() { EventDispatcher.listen(DownloadEvent.UPDATE, new Listener<String>() {
@ -57,6 +48,12 @@ public class UpmShowPane extends BasicPane {
modernUIPane.redirect(UpmFinder.getMainResourcePath(), UpmUtils.renderMap()); modernUIPane.redirect(UpmFinder.getMainResourcePath(), UpmUtils.renderMap());
} }
}); });
EventDispatcher.listen(DownloadEvent.UPDATE, new Listener<String>() {
@Override
public void on(Event event, String param) {
modernUIPane.redirect(UpmFinder.getMainResourcePath(), UpmUtils.renderMap());
}
});
add(modernUIPane, BorderLayout.CENTER); add(modernUIPane, BorderLayout.CENTER);
} }
} }

5
designer-base/src/main/resources/com/fr/design/images/control/batch_esd_off_disabled.svg

@ -0,0 +1,5 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.3">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 3.33333C14 4.622 11.3137 5.66667 8 5.66667C4.68629 5.66667 2 4.622 2 3.33333C2 2.04467 4.68629 1 8 1C11.3137 1 14 2.04467 14 3.33333ZM8 6.83333C11.3137 6.83333 14 5.78866 14 4.5V7.75777C15.206 8.56504 16 9.93979 16 11.5C16 13.9853 13.9853 16 11.5 16C10.4205 16 9.42985 15.6199 8.65446 14.9863C8.43951 14.9953 8.22115 15 8 15C4.68629 15 2 13.9553 2 12.6667V9.16667C2 10.3228 4.16235 11.2826 7.00012 11.4677C7.00293 11.0674 7.058 10.6796 7.15887 10.3106C4.24338 10.1515 2 9.17765 2 8V4.5C2 5.78866 4.68629 6.83333 8 6.83333ZM11.5 8C12.3224 8 13.0785 8.28364 13.6759 8.75842C14.4827 9.3996 15 10.3894 15 11.5C15 13.433 13.433 15 11.5 15C11.1026 15 10.7208 14.9338 10.3648 14.8118C8.98898 14.3403 8 13.0356 8 11.5C8 11.0905 8.07035 10.6973 8.19961 10.3321C8.68044 8.97334 9.97655 8 11.5 8ZM12.9142 9.37868L13.6213 10.0858L12.2071 11.5L13.6213 12.9142L12.9142 13.6213L11.5 12.2071L10.0858 13.6213L9.37868 12.9142L10.7929 11.5L9.37868 10.0858L10.0858 9.37868L11.5 10.7929L12.9142 9.37868Z" fill="#333334"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

3
designer-base/src/main/resources/com/fr/design/images/control/batch_esd_off_normal.svg

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 3.33333C14 4.622 11.3137 5.66667 8 5.66667C4.68629 5.66667 2 4.622 2 3.33333C2 2.04467 4.68629 1 8 1C11.3137 1 14 2.04467 14 3.33333ZM8 6.83333C11.3137 6.83333 14 5.78866 14 4.5V7.75777C15.206 8.56504 16 9.93979 16 11.5C16 13.9853 13.9853 16 11.5 16C10.4205 16 9.42985 15.6199 8.65446 14.9863C8.43951 14.9953 8.22115 15 8 15C4.68629 15 2 13.9553 2 12.6667V9.16667C2 10.3228 4.16235 11.2826 7.00012 11.4677C7.00293 11.0674 7.058 10.6796 7.15887 10.3106C4.24338 10.1515 2 9.17765 2 8V4.5C2 5.78866 4.68629 6.83333 8 6.83333ZM11.5 8C12.3224 8 13.0785 8.28364 13.6759 8.75842C14.4827 9.3996 15 10.3894 15 11.5C15 13.433 13.433 15 11.5 15C11.1026 15 10.7208 14.9338 10.3648 14.8118C8.98898 14.3403 8 13.0356 8 11.5C8 11.0905 8.07035 10.6973 8.19961 10.3321C8.68044 8.97334 9.97655 8 11.5 8ZM12.9142 9.37868L13.6213 10.0858L12.2071 11.5L13.6213 12.9142L12.9142 13.6213L11.5 12.2071L10.0858 13.6213L9.37868 12.9142L10.7929 11.5L9.37868 10.0858L10.0858 9.37868L11.5 10.7929L12.9142 9.37868Z" fill="#333334"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

5
designer-base/src/main/resources/com/fr/design/images/control/batch_esd_on_disabled.svg

@ -0,0 +1,5 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.3">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 3.33333C14 4.622 11.3137 5.66667 8 5.66667C4.68629 5.66667 2 4.622 2 3.33333C2 2.04467 4.68629 1 8 1C11.3137 1 14 2.04467 14 3.33333ZM8 6.83333C11.3137 6.83333 14 5.78866 14 4.5V7.75777C15.206 8.56504 16 9.93979 16 11.5C16 13.9853 13.9853 16 11.5 16C10.4205 16 9.42985 15.6199 8.65446 14.9863C8.43951 14.9953 8.22115 15 8 15C4.68629 15 2 13.9553 2 12.6667V9.16667C2 10.3228 4.16235 11.2826 7.00012 11.4677C7.00293 11.0674 7.058 10.6796 7.15887 10.3106C4.24338 10.1515 2 9.17765 2 8V4.5C2 5.78866 4.68629 6.83333 8 6.83333ZM11.5 8C12.3224 8 13.0785 8.28364 13.6759 8.75842C14.4827 9.3996 15 10.3894 15 11.5C15 13.433 13.433 15 11.5 15C11.1026 15 10.7208 14.9338 10.3648 14.8118C8.98898 14.3403 8 13.0356 8 11.5C8 11.0905 8.07035 10.6973 8.19961 10.3321C8.68044 8.97334 9.97655 8 11.5 8ZM10.6482 13.5372L13.4434 11.5L10.6482 9.53723V13.5372Z" fill="#333334"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

3
designer-base/src/main/resources/com/fr/design/images/control/batch_esd_on_normal.svg

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 3.33333C14 4.622 11.3137 5.66667 8 5.66667C4.68629 5.66667 2 4.622 2 3.33333C2 2.04467 4.68629 1 8 1C11.3137 1 14 2.04467 14 3.33333ZM8 6.83333C11.3137 6.83333 14 5.78866 14 4.5V7.75777C15.206 8.56504 16 9.93979 16 11.5C16 13.9853 13.9853 16 11.5 16C10.4205 16 9.42985 15.6199 8.65446 14.9863C8.43951 14.9953 8.22115 15 8 15C4.68629 15 2 13.9553 2 12.6667V9.16667C2 10.3228 4.16235 11.2826 7.00012 11.4677C7.00293 11.0674 7.058 10.6796 7.15887 10.3106C4.24338 10.1515 2 9.17765 2 8V4.5C2 5.78866 4.68629 6.83333 8 6.83333ZM11.5 8C12.3224 8 13.0785 8.28364 13.6759 8.75842C14.4827 9.3996 15 10.3894 15 11.5C15 13.433 13.433 15 11.5 15C11.1026 15 10.7208 14.9338 10.3648 14.8118C8.98898 14.3403 8 13.0356 8 11.5C8 11.0905 8.07035 10.6973 8.19961 10.3321C8.68044 8.97334 9.97655 8 11.5 8ZM10.6482 13.5372L13.4434 11.5L10.6482 9.53723V13.5372Z" fill="#333334"/>
</svg>

After

Width:  |  Height:  |  Size: 1014 B

Loading…
Cancel
Save