Browse Source
* commit '408a1d5511222076aa6b0afdb5e5972599d55c57': (93 commits) REPORT-57128&REPORT-57657 优化代码冗余逻辑 REPORT-57128&REPORT-57657 修复参数面板中会显示间距线的问题&修复报表块图表块不显示间距线的问题 REPORT-57128 【FRM布局推荐】组件复用-关于悬浮hover组件的交互设计更新 REPORT-57520 报表块内图表超链不应该显示悬浮窗图表 REPORT-57658 处理odbc链接的共存关系 REPORT-57438 【回归测试】权限细粒度控制-参数面板控件,控件权限编辑栏无法正常显示 REPORT-53615 调整下combox的展示顺序 MOBILE-32704 11.0部分插件内置 REPORT-57317 修改间距提示文字的大小 REPORT-57333 还原代码 REPORT-57181 【FRM布局推荐】组件复用-自动间距目前么有把小数处理成整数 REPORT-57333 【FRM布局推荐】组件复用-现在还不能实现绝对画布块上重叠放置组件 REPORT-55468 内置启动时打开空文件 REPORT-57251 修复设计器无法打开环境之外cptx的问题 REPORT-56895 还是计算间距线相对位置的问题 REPORT-56926&REPORT-57238 解决因为修复这两个问题引起的新问题 REPORT-56049 组件复用-组件目录树选中控件,如果选中后不移动鼠标的话,控件没有出现工具栏 REPORT-57238 解决自动间距计算不正确的问题 REPORT-57326&EPORT-57324&REPORT-57330&REPORT-56895 布局推荐若干间距线的bug REPORT-56925 【FRM布局推荐】组件复用-手动间距输入框没有显示水印 ...fix-lag
Hoky.He
3 years ago
215 changed files with 10918 additions and 3745 deletions
@ -0,0 +1,24 @@ |
|||||||
|
package com.fr.design.base.clipboard; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class ClipboardHelper { |
||||||
|
public static String formatExcelString(List<List<Object>> table) { |
||||||
|
StringBuffer stringBuffer = new StringBuffer(); |
||||||
|
|
||||||
|
for (int row = 0; row < table.size(); row++) { |
||||||
|
List<Object> rowValue = table.get(row); |
||||||
|
for (int col = 0; col < rowValue.size(); col++) { |
||||||
|
Object cell = rowValue.get(col); |
||||||
|
stringBuffer.append(cell); |
||||||
|
if (col != rowValue.size() - 1) { |
||||||
|
stringBuffer.append("\t"); |
||||||
|
} |
||||||
|
} |
||||||
|
if (row != table.size() - 1) { |
||||||
|
stringBuffer.append("\n"); |
||||||
|
} |
||||||
|
} |
||||||
|
return stringBuffer.toString(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,303 @@ |
|||||||
|
package com.fr.design.data.datapane.preview; |
||||||
|
|
||||||
|
import com.fr.design.base.clipboard.ClipboardHelper; |
||||||
|
import com.fr.design.gui.itable.SortableJTable; |
||||||
|
import com.fr.design.gui.itable.TableSorter; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.os.OperatingSystem; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.table.DefaultTableCellRenderer; |
||||||
|
import javax.swing.table.JTableHeader; |
||||||
|
import javax.swing.table.TableCellRenderer; |
||||||
|
import javax.swing.table.TableColumnModel; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.datatransfer.Clipboard; |
||||||
|
import java.awt.datatransfer.StringSelection; |
||||||
|
import java.awt.datatransfer.Transferable; |
||||||
|
import java.awt.event.KeyAdapter; |
||||||
|
import java.awt.event.KeyEvent; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.Comparator; |
||||||
|
|
||||||
|
public class CopyableJTable extends SortableJTable { |
||||||
|
|
||||||
|
//区域选中用到的定位数据
|
||||||
|
public int startRow = -1; |
||||||
|
public int startCol = -1; |
||||||
|
public int endRow = -1; |
||||||
|
public int endCol = -1; |
||||||
|
//单元格不连续多选用到的定位数据
|
||||||
|
java.util.List<Point> pointList = new ArrayList<>(); |
||||||
|
//shift键是否被按下
|
||||||
|
public boolean isShiftDown = false; |
||||||
|
//control\command键是否被按下
|
||||||
|
public boolean isControlDown = false; |
||||||
|
//是否可以复制
|
||||||
|
public boolean isCopy = true; |
||||||
|
int ctrlKeyCode = 17; |
||||||
|
int cKeyCode = 67; |
||||||
|
int shiftKeyCode = 16; |
||||||
|
int commandKeyCode = 157; |
||||||
|
//选中单元格的背景色
|
||||||
|
Color selectBackGround = new Color(54, 133, 242, 63); |
||||||
|
Color headerBackGround = new Color(229, 229, 229); |
||||||
|
boolean mouseDrag = false; |
||||||
|
boolean headerSelect = false; |
||||||
|
|
||||||
|
DefaultTableCellRenderer tableHeaderCellRenderer = new DefaultTableCellRenderer() { |
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
||||||
|
JComponent comp = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); |
||||||
|
if (isChoose(row, column)) { |
||||||
|
comp.setBackground(selectBackGround); |
||||||
|
} else { |
||||||
|
comp.setBackground(headerBackGround); |
||||||
|
} |
||||||
|
return comp; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
public CopyableJTable(TableSorter tableModel) { |
||||||
|
super(tableModel); |
||||||
|
initListener(); |
||||||
|
this.getTableHeader().setDefaultRenderer(tableHeaderCellRenderer); |
||||||
|
} |
||||||
|
|
||||||
|
private void initListener() { |
||||||
|
CopyableJTable self = this; |
||||||
|
this.getTableHeader().addMouseListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
if (mouseDrag) { |
||||||
|
headerSelect = true; |
||||||
|
int column = getColumn(e); |
||||||
|
self.updateEndPoint(-1, column); |
||||||
|
self.getTableHeader().repaint(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
if (mouseDrag) { |
||||||
|
headerSelect = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
headerSelect = true; |
||||||
|
int column = getColumn(e); |
||||||
|
if (column != -1) { |
||||||
|
self.clearPoint(); |
||||||
|
self.addPoint(-1, column); |
||||||
|
self.updateStartPoint(-1, column); |
||||||
|
self.updateEndPoint(-1, column); |
||||||
|
self.refreshTable(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private int getColumn(MouseEvent e) { |
||||||
|
JTableHeader h = (JTableHeader) e.getSource(); |
||||||
|
TableColumnModel columnModel = h.getColumnModel(); |
||||||
|
int viewColumn = columnModel.getColumnIndexAtX(e.getX()); |
||||||
|
return viewColumn; |
||||||
|
} |
||||||
|
}); |
||||||
|
this.getTableHeader().addMouseMotionListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseMoved(MouseEvent e) { |
||||||
|
mouseDrag = false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseDragged(MouseEvent e) { |
||||||
|
self.clearPoint(); |
||||||
|
self.updateStartPoint(-1, -1); |
||||||
|
self.updateEndPoint(-1, -1); |
||||||
|
self.refreshTable(); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
this.addMouseMotionListener(new java.awt.event.MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseDragged(MouseEvent evt) { |
||||||
|
mouseDrag = true; |
||||||
|
int row = self.rowAtPoint(evt.getPoint()); |
||||||
|
int col = self.columnAtPoint(evt.getPoint()); |
||||||
|
if (self.updateEndPoint(row, col)) { |
||||||
|
self.refreshTable(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void mouseMoved(MouseEvent e) { |
||||||
|
mouseDrag = false; |
||||||
|
} |
||||||
|
}); |
||||||
|
this.addMouseListener(new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
headerSelect = false; |
||||||
|
int row = self.rowAtPoint(e.getPoint()); |
||||||
|
int col = self.columnAtPoint(e.getPoint()); |
||||||
|
if (!self.isControlDown) { |
||||||
|
self.clearPoint(); |
||||||
|
} |
||||||
|
if (self.isShiftDown) { |
||||||
|
self.clearPoint(); |
||||||
|
} else { |
||||||
|
self.updateStartPoint(row, col); |
||||||
|
} |
||||||
|
self.addPoint(row, col); |
||||||
|
self.updateEndPoint(row, col); |
||||||
|
|
||||||
|
self.refreshTable(); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
this.addKeyListener(new KeyAdapter() { |
||||||
|
@Override |
||||||
|
public void keyPressed(KeyEvent e) { |
||||||
|
if (isControlKey(e)) { |
||||||
|
isControlDown = true; |
||||||
|
} else if (e.getKeyCode() == shiftKeyCode) { |
||||||
|
isShiftDown = true; |
||||||
|
} else if (e.getKeyCode() == cKeyCode) { |
||||||
|
if (isControlDown && isCopy) { |
||||||
|
self.copy(); |
||||||
|
isCopy = false; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void keyReleased(KeyEvent e) { |
||||||
|
if (isControlKey(e)) { |
||||||
|
isControlDown = false; |
||||||
|
isCopy = true; |
||||||
|
} else if (e.getKeyCode() == shiftKeyCode) { |
||||||
|
isShiftDown = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isControlKey(KeyEvent e) { |
||||||
|
if (e.getKeyCode() == ctrlKeyCode) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
if (e.getKeyCode() == commandKeyCode && OperatingSystem.isMacos()) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { |
||||||
|
Component comp = super.prepareRenderer(renderer, row, column); |
||||||
|
if (isChoose(row, column)) { |
||||||
|
comp.setBackground(selectBackGround); |
||||||
|
} else { |
||||||
|
comp.setBackground(this.getBackground()); |
||||||
|
} |
||||||
|
return comp; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private boolean updateEndPoint(int row, int col) { |
||||||
|
if (headerSelect && row != -1) |
||||||
|
return false; |
||||||
|
if (endRow != row || endCol != col) { |
||||||
|
endRow = row; |
||||||
|
endCol = col; |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean updateStartPoint(int row, int col) { |
||||||
|
if (startRow != row || startCol != col) { |
||||||
|
startRow = row; |
||||||
|
startCol = col; |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
private void addPoint(int row, int col) { |
||||||
|
pointList.add(new Point(row, col)); |
||||||
|
} |
||||||
|
|
||||||
|
private void clearPoint() { |
||||||
|
pointList = new ArrayList<>(); |
||||||
|
} |
||||||
|
|
||||||
|
private void copy() { |
||||||
|
FineLoggerFactory.getLogger().info("copy cell value"); |
||||||
|
java.util.List<java.util.List<Object>> table = new ArrayList<>(); |
||||||
|
if ((startRow != endRow || startCol != endCol) && Math.min(startCol, endCol) > -1) { |
||||||
|
for (int i = Math.min(startRow, endRow); i <= Math.max(startRow, endRow); i++) { |
||||||
|
table.add(new ArrayList<>()); |
||||||
|
for (int j = Math.min(startCol, endCol); j <= Math.max(startCol, endCol); j++) { |
||||||
|
Object text = this.getTableValue(i, j); |
||||||
|
table.get(table.size() - 1).add(text); |
||||||
|
} |
||||||
|
} |
||||||
|
} else if (pointList.size() > 0) { |
||||||
|
Collections.sort(pointList, Comparator.comparing(Point::getX).thenComparing(Point::getY)); |
||||||
|
int startRow = pointList.get(0).x; |
||||||
|
int currentRow = startRow; |
||||||
|
table.add(new ArrayList<>()); |
||||||
|
for (Point point : pointList) { |
||||||
|
while (currentRow < point.x) { |
||||||
|
table.add(new ArrayList<>()); |
||||||
|
currentRow++; |
||||||
|
} |
||||||
|
Object text = this.getTableValue(point.x, point.y); |
||||||
|
table.get(table.size() - 1).add(text); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); |
||||||
|
Transferable tText = new StringSelection(ClipboardHelper.formatExcelString(table)); |
||||||
|
clip.setContents(tText, null); |
||||||
|
} |
||||||
|
|
||||||
|
private Object getTableValue(int row, int col) { |
||||||
|
Object value = null; |
||||||
|
if (col > -1) { |
||||||
|
if (row > -1) { |
||||||
|
value = this.getValueAt(row, col); |
||||||
|
} else if (row == -1) { |
||||||
|
col = columnModel.getColumn(col).getModelIndex(); |
||||||
|
value = this.getModel().getColumnName(col); |
||||||
|
} |
||||||
|
} |
||||||
|
return value; |
||||||
|
} |
||||||
|
|
||||||
|
private void refreshTable() { |
||||||
|
this.repaint(); |
||||||
|
this.getTableHeader().repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isChoose(int row, int col) { |
||||||
|
if (row >= Math.min(startRow, endRow) && row <= Math.max(startRow, endRow)) { |
||||||
|
if (col >= Math.min(startCol, endCol) && col <= Math.max(startCol, endCol)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
for (Point point : pointList) { |
||||||
|
if (point.x == row && point.y == col) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,251 @@ |
|||||||
|
package com.fr.design.dialog; |
||||||
|
|
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.design.dialog.link.MessageWithLink; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextarea.UITextArea; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.utils.DesignUtils; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dialog; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Frame; |
||||||
|
import java.awt.Point; |
||||||
|
import java.awt.Window; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.io.PrintWriter; |
||||||
|
import java.io.StringWriter; |
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
|
||||||
|
/** |
||||||
|
* 带链接的错误详情弹窗 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/2 |
||||||
|
*/ |
||||||
|
public class UIDetailErrorLinkDialog extends UIDialog { |
||||||
|
|
||||||
|
private static final Color LINK_COLOR = new Color(51, 152, 253); |
||||||
|
private static final int GAP_5 = 5; |
||||||
|
private static final int GAP_10 = 10; |
||||||
|
private static final String TAG_A_START = "<a>"; |
||||||
|
private static final String TAG_A_END = "</a>"; |
||||||
|
private static final double SCALE = 1.2; |
||||||
|
|
||||||
|
private final Dimension dimension = new Dimension(300, 180); |
||||||
|
|
||||||
|
public static Builder newBuilder() { |
||||||
|
return new Builder(); |
||||||
|
} |
||||||
|
|
||||||
|
private UIDetailErrorLinkDialog(Frame parent, Builder builder) { |
||||||
|
super(parent); |
||||||
|
init(builder); |
||||||
|
} |
||||||
|
|
||||||
|
private UIDetailErrorLinkDialog(Dialog parent, Builder builder) { |
||||||
|
super(parent); |
||||||
|
init(builder); |
||||||
|
} |
||||||
|
|
||||||
|
private void init(Builder builder) { |
||||||
|
this.setTitle(builder.title); |
||||||
|
// 顶部 图标和提示
|
||||||
|
UILabel errorIcon = new UILabel(IOUtils.readIcon("com/fr/design/images/lookandfeel/Information_Icon_Error_32x32.png")); |
||||||
|
UILabel errorInfo= new UILabel(builder.reason); |
||||||
|
JPanel topPane = new JPanel(new FlowLayout(FlowLayout.LEFT, GAP_10, GAP_5)); |
||||||
|
topPane.add(errorIcon); |
||||||
|
topPane.add(errorInfo); |
||||||
|
|
||||||
|
// 中部 详细内容
|
||||||
|
JPanel contentPane = new JPanel(new BorderLayout()); |
||||||
|
contentPane.setBorder(BorderFactory.createEmptyBorder(0, GAP_5,0,0)); |
||||||
|
UILabel errorCodeLabel = new UILabel(Toolkit.i18nText("Fine_Design_Basic_Error_Code", builder.errorCode)); |
||||||
|
UILabel link = new UILabel(Toolkit.i18nText("Fine_Design_Basic_Show_Error_Stack")); |
||||||
|
link.setForeground(LINK_COLOR); |
||||||
|
link.addMouseListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
StringWriter stackTraceWriter = new StringWriter(); |
||||||
|
builder.throwable.printStackTrace(new PrintWriter(stackTraceWriter)); |
||||||
|
StackPane stackPane = new StackPane(stackTraceWriter.toString()); |
||||||
|
BasicDialog dialog = stackPane.showLargeWindow(UIDetailErrorLinkDialog.this, null); |
||||||
|
dialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
contentPane.add(errorCodeLabel, BorderLayout.NORTH); |
||||||
|
contentPane.add(createComponent(builder), BorderLayout.CENTER); |
||||||
|
contentPane.add(link, BorderLayout.SOUTH); |
||||||
|
|
||||||
|
// 确定 + 取消
|
||||||
|
JPanel actionPane = new JPanel(new FlowLayout(FlowLayout.RIGHT, GAP_10, GAP_10)); |
||||||
|
actionPane.add(createButton(Toolkit.i18nText("Fine-Design_Report_OK"))); |
||||||
|
actionPane.add(createButton(Toolkit.i18nText("Fine-Design_Basic_Cancel"))); |
||||||
|
this.getContentPane().add(topPane, BorderLayout.NORTH); |
||||||
|
this.getContentPane().add(contentPane, BorderLayout.CENTER); |
||||||
|
this.getContentPane().add(actionPane, BorderLayout.SOUTH); |
||||||
|
this.setSize(dimension); |
||||||
|
this.setResizable(false); |
||||||
|
this.setModal(true); |
||||||
|
GUICoreUtils.centerWindow(this); |
||||||
|
} |
||||||
|
|
||||||
|
private UIButton createButton(String content) { |
||||||
|
UIButton button = new UIButton(content); |
||||||
|
button.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
UIDetailErrorLinkDialog.this.dispose(); |
||||||
|
} |
||||||
|
}); |
||||||
|
return button; |
||||||
|
} |
||||||
|
|
||||||
|
private JComponent createComponent(Builder builder) { |
||||||
|
JPanel panel = new JPanel(new BorderLayout()); |
||||||
|
boolean existDetailReason = StringUtils.isNotEmpty(builder.detailReason); |
||||||
|
int maxWidth = dimension.width; |
||||||
|
if (existDetailReason) { |
||||||
|
String message = Toolkit.i18nText("Fine_Design_Basic_Detail_Error_Info", builder.detailReason); |
||||||
|
UILabel label = new UILabel(message); |
||||||
|
maxWidth = Math.max(maxWidth, GraphHelper.getWidth(message, label.getFont())); |
||||||
|
panel.add(label, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
String solution = existDetailReason ? builder.solution : Toolkit.i18nText("Fine_Design_Basic_Detail_Error_Info", builder.solution); |
||||||
|
if (builder.solution.contains(TAG_A_START)) { |
||||||
|
String[] solutionP1 = solution.split(TAG_A_START); |
||||||
|
String[] solutionP2 = solutionP1[1].split(TAG_A_END); |
||||||
|
MessageWithLink messageWithLink; |
||||||
|
if (solutionP2.length == 2) { |
||||||
|
messageWithLink = new MessageWithLink(solutionP1[0], solutionP2[0], builder.link, solutionP2[1]); |
||||||
|
} else { |
||||||
|
messageWithLink = new MessageWithLink(solutionP1[0], solutionP2[0], builder.link); |
||||||
|
} |
||||||
|
|
||||||
|
panel.add(messageWithLink, BorderLayout.CENTER); |
||||||
|
} else { |
||||||
|
UILabel solutionLabel = new UILabel(solution); |
||||||
|
panel.add(solutionLabel, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
dimension.width = getMaxDimensionWidth(maxWidth, solution); |
||||||
|
return panel; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private int getMaxDimensionWidth(int width, String solution) { |
||||||
|
int maxWidth = GraphHelper.getWidth(solution, DesignUtils.getDefaultGUIFont()); |
||||||
|
if (maxWidth >= width) { |
||||||
|
maxWidth = (int) (SCALE * maxWidth); |
||||||
|
} else { |
||||||
|
maxWidth = width; |
||||||
|
} |
||||||
|
return maxWidth; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkValid() throws Exception { |
||||||
|
// do nothing
|
||||||
|
} |
||||||
|
|
||||||
|
class StackPane extends BasicPane { |
||||||
|
|
||||||
|
public StackPane(String stack) { |
||||||
|
setLayout(new BorderLayout()); |
||||||
|
UITextArea textArea = new UITextArea(); |
||||||
|
textArea.setEditable(false); |
||||||
|
textArea.setText(stack); |
||||||
|
UIScrollPane scrollPane = new UIScrollPane(textArea); |
||||||
|
add(scrollPane); |
||||||
|
// 滚动条默认在顶部
|
||||||
|
SwingUtilities.invokeLater(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
scrollPane.getViewport().setViewPosition(new Point(0, 0)); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine_Design_Basic_Error_Stack"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static class Builder { |
||||||
|
private Window window; |
||||||
|
private String title; |
||||||
|
private String reason; |
||||||
|
private String errorCode; |
||||||
|
private String detailReason; |
||||||
|
private String solution; |
||||||
|
private String link; |
||||||
|
private Throwable throwable; |
||||||
|
|
||||||
|
private Builder() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public Builder setTitle(String title) { |
||||||
|
this.title = title; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setReason(String reason) { |
||||||
|
this.reason = reason; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setErrorCode(String errorCode) { |
||||||
|
this.errorCode = errorCode; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setSolution(String solution) { |
||||||
|
this.solution = solution; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setDetailReason(String detailReason) { |
||||||
|
this.detailReason = detailReason; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setThrowable(Throwable throwable) { |
||||||
|
this.throwable = throwable; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setWindow(Window window) { |
||||||
|
this.window = window; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setLink(String link) { |
||||||
|
this.link = link; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public UIDetailErrorLinkDialog build() { |
||||||
|
if (this.window instanceof Frame) { |
||||||
|
return new UIDetailErrorLinkDialog((Frame) window, this); |
||||||
|
} else { |
||||||
|
return new UIDetailErrorLinkDialog((Dialog) window, this); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.fr.design.fun.impl; |
||||||
|
|
||||||
|
import com.fr.file.FILE; |
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by rinoux on 2016/12/16. |
||||||
|
*/ |
||||||
|
@EnableMetrics |
||||||
|
public class DesignerStartWithEmptyFile extends AbstractDesignerStartOpenFileProcessor { |
||||||
|
|
||||||
|
private static final DesignerStartWithEmptyFile INSTANCE = new DesignerStartWithEmptyFile(); |
||||||
|
|
||||||
|
private DesignerStartWithEmptyFile() { |
||||||
|
} |
||||||
|
|
||||||
|
public static DesignerStartWithEmptyFile getInstance() { |
||||||
|
return INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
@Focus(id = "com.fr.dzstartemptyfile", text = "Fine_Design_Start_Empty_File", source = Original.REPORT) |
||||||
|
public FILE fileToShow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.design.gui.chart; |
||||||
|
|
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
|
||||||
|
import java.util.EventListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author shine |
||||||
|
* @version 10.0 |
||||||
|
* Created by shine on 2021/5/26 |
||||||
|
*/ |
||||||
|
public interface ChartEditPaneActionListener extends EventListener { |
||||||
|
|
||||||
|
void attributeChange(ChartCollection chartCollection); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.fr.design.gui.ibutton; |
||||||
|
|
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.Icon; |
||||||
|
|
||||||
|
public class UIHead { |
||||||
|
private String text = StringUtils.EMPTY; |
||||||
|
private Icon icon = null; |
||||||
|
private boolean enable = true; |
||||||
|
private int index = 0; |
||||||
|
|
||||||
|
public UIHead(String text, int index) { |
||||||
|
this.text = text; |
||||||
|
this.index = index; |
||||||
|
} |
||||||
|
|
||||||
|
public UIHead(String text, int index, boolean enable) { |
||||||
|
this(text, index); |
||||||
|
this.enable = enable; |
||||||
|
} |
||||||
|
|
||||||
|
public UIHead(Icon icon, int index) { |
||||||
|
this.icon = icon; |
||||||
|
this.index = index; |
||||||
|
} |
||||||
|
|
||||||
|
public UIHead(Icon icon, int index, boolean enable) { |
||||||
|
this(icon, index); |
||||||
|
this.enable = enable; |
||||||
|
} |
||||||
|
|
||||||
|
public UIHead(String text, Icon icon, int index) { |
||||||
|
this.text = text; |
||||||
|
this.icon = icon; |
||||||
|
this.index = index; |
||||||
|
} |
||||||
|
|
||||||
|
public UIHead(String text, Icon icon, int index, boolean enable) { |
||||||
|
this(text, icon, index); |
||||||
|
this.enable = enable; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isOnlyText() { |
||||||
|
return StringUtils.isNotEmpty(text) && icon == null; |
||||||
|
} |
||||||
|
|
||||||
|
public String getText() { |
||||||
|
return text; |
||||||
|
} |
||||||
|
|
||||||
|
public Icon getIcon() { |
||||||
|
return icon; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isEnable() { |
||||||
|
return enable; |
||||||
|
} |
||||||
|
|
||||||
|
public int getIndex() { |
||||||
|
return index; |
||||||
|
} |
||||||
|
} |
@ -1,103 +0,0 @@ |
|||||||
package com.fr.design.gui.ifilechooser; |
|
||||||
|
|
||||||
import javax.swing.filechooser.FileFilter; |
|
||||||
import java.awt.*; |
|
||||||
import java.io.File; |
|
||||||
|
|
||||||
/** |
|
||||||
* @author hades |
|
||||||
* @version 10.0 |
|
||||||
* Created by hades on 2020/3/31 |
|
||||||
*/ |
|
||||||
public abstract class AbstractFileChooser { |
|
||||||
|
|
||||||
/** |
|
||||||
* 返回当前目录 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract File getCurrentDirectory(); |
|
||||||
|
|
||||||
/** |
|
||||||
* 返回当前的文件选择过滤器 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract FileFilter getFileFilter(); |
|
||||||
|
|
||||||
/** |
|
||||||
* 返回选择的文件 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract File getSelectedFile(); |
|
||||||
|
|
||||||
/** |
|
||||||
* 多文件选择模式下 返回选择的多个文件 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract File[] getSelectedFiles(); |
|
||||||
|
|
||||||
/** |
|
||||||
* 是否可以选择多个文件 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract boolean isMultiSelectionEnabled(); |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置当前选择的目录 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract void setCurrentDirectory(File dir); |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置左上角标题 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract void setDialogTitle(String title); |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置当前的文件过滤器 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract void setFileFilter(final FileFilter filter); |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置文件选择器模式 |
|
||||||
* |
|
||||||
* JFileChooser.FILES_ONLY |
|
||||||
* JFileChooser.DIRECTORIES_ONLY |
|
||||||
* JFileChooser.FILES_AND_DIRECTORIES |
|
||||||
*/ |
|
||||||
public abstract void setFileSelectionMode(int selectionMode); |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置是否允许选择多个文件 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract void setMultiSelectionEnabled(boolean multiple); |
|
||||||
|
|
||||||
/** |
|
||||||
* 设置选择的文件 用于showSaveDialog |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract void setSelectedFile(File file); |
|
||||||
|
|
||||||
/** |
|
||||||
* 弹出文件选择器 打开文件 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract int showOpenDialog(Component parent); |
|
||||||
|
|
||||||
/** |
|
||||||
* 弹出文件选择器 保存文件 |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract int showSaveDialog(Component parent); |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4031440
|
|
||||||
* |
|
||||||
* 设置文件名后缀 起到文件过滤的作用 形如 "*.jpg;*.jpeg" |
|
||||||
* |
|
||||||
*/ |
|
||||||
public abstract void setExtensionFilter(String file); |
|
||||||
} |
|
@ -0,0 +1,12 @@ |
|||||||
|
package com.fr.design.gui.ifilechooser; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.io.File; |
||||||
|
|
||||||
|
public interface FileChooserProvider { |
||||||
|
File[] getSelectedFiles(); |
||||||
|
|
||||||
|
File getSelectedFile(); |
||||||
|
|
||||||
|
int showDialog(Component parent); |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
package com.fr.design.gui.ifilechooser; |
||||||
|
|
||||||
|
public enum FileSelectionMode { |
||||||
|
FILE, MULTIPLE_FILE, DIR |
||||||
|
} |
@ -0,0 +1,225 @@ |
|||||||
|
package com.fr.design.gui.ifilechooser; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.sun.javafx.application.PlatformImpl; |
||||||
|
import javafx.application.Platform; |
||||||
|
import javafx.scene.Scene; |
||||||
|
import javafx.scene.control.Label; |
||||||
|
import javafx.scene.layout.Background; |
||||||
|
import javafx.scene.layout.BackgroundFill; |
||||||
|
import javafx.scene.paint.Color; |
||||||
|
import javafx.stage.DirectoryChooser; |
||||||
|
import javafx.stage.FileChooser; |
||||||
|
import javafx.stage.Modality; |
||||||
|
import javafx.stage.Stage; |
||||||
|
import javafx.stage.StageStyle; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.io.File; |
||||||
|
import java.util.List; |
||||||
|
import java.util.concurrent.CountDownLatch; |
||||||
|
|
||||||
|
public class JavaFxNativeFileChooser implements FileChooserProvider { |
||||||
|
private File[] selectedFiles = new File[0]; |
||||||
|
private FileSelectionMode fileSelectionMode = FileSelectionMode.FILE; |
||||||
|
private String title = Toolkit.i18nText("Fine-Design_Basic_Open"); |
||||||
|
private FileChooser.ExtensionFilter[] filters; |
||||||
|
private File currentDirectory; |
||||||
|
|
||||||
|
@Override |
||||||
|
public File[] getSelectedFiles() { |
||||||
|
return selectedFiles; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public File getSelectedFile() { |
||||||
|
if (selectedFiles.length > 0) { |
||||||
|
return selectedFiles[0]; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int showDialog(Component parent) { |
||||||
|
final CountDownLatch latch = new CountDownLatch(1); |
||||||
|
PlatformImpl.startup(() -> { |
||||||
|
}); |
||||||
|
Platform.setImplicitExit(false); |
||||||
|
Platform.runLater(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
Component fileChooserParent = parent; |
||||||
|
if (fileChooserParent == null) { |
||||||
|
fileChooserParent = DesignerContext.getDesignerFrame(); |
||||||
|
} |
||||||
|
Stage stage = showCoverStage(fileChooserParent); |
||||||
|
try { |
||||||
|
if (fileSelectionMode == FileSelectionMode.FILE || fileSelectionMode == FileSelectionMode.MULTIPLE_FILE) { |
||||||
|
FileChooser fileChooser = new FileChooser(); |
||||||
|
fileChooser.setTitle(title); |
||||||
|
fileChooser.getExtensionFilters().addAll(filters); |
||||||
|
fileChooser.setInitialDirectory(currentDirectory); |
||||||
|
if (fileSelectionMode == FileSelectionMode.FILE) { |
||||||
|
File file = fileChooser.showOpenDialog(stage); |
||||||
|
if (file != null) { |
||||||
|
selectedFiles = new File[]{file}; |
||||||
|
} |
||||||
|
} else if (fileSelectionMode == FileSelectionMode.MULTIPLE_FILE) { |
||||||
|
List<File> fileList = fileChooser.showOpenMultipleDialog(stage); |
||||||
|
if (fileList != null) { |
||||||
|
selectedFiles = new File[fileList.size()]; |
||||||
|
fileList.toArray(selectedFiles); |
||||||
|
} |
||||||
|
} |
||||||
|
} else if (fileSelectionMode == FileSelectionMode.DIR) { |
||||||
|
DirectoryChooser directoryChooser = new DirectoryChooser(); |
||||||
|
directoryChooser.setTitle(title); |
||||||
|
directoryChooser.setInitialDirectory(currentDirectory); |
||||||
|
File folder = directoryChooser.showDialog(stage); |
||||||
|
if (folder != null) { |
||||||
|
selectedFiles = new File[]{folder}; |
||||||
|
} |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e, e.getMessage()); |
||||||
|
} finally { |
||||||
|
latch.countDown(); |
||||||
|
closeCoverStage(stage); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void closeCoverStage(Stage stage) { |
||||||
|
if (stage != null) { |
||||||
|
stage.close(); |
||||||
|
closeCoverStage((Stage) stage.getOwner()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private Stage showCoverStage(Component component) { |
||||||
|
try { |
||||||
|
if (component == null) |
||||||
|
return null; |
||||||
|
Stage parentStage = showCoverStage(component.getParent()); |
||||||
|
if (component instanceof JDialog || component instanceof JFrame) { |
||||||
|
return createStage(component.getX(), component.getY(), component.getWidth(), component.getHeight(), parentStage); |
||||||
|
} else { |
||||||
|
return parentStage; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e, e.getMessage()); |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private Stage createStage(double x, double y, double w, double h, Stage parentStage) { |
||||||
|
try { |
||||||
|
Stage stage = new Stage(); |
||||||
|
stage.setX(x); |
||||||
|
stage.setY(y); |
||||||
|
stage.setWidth(w); |
||||||
|
stage.setHeight(h); |
||||||
|
stage.setOpacity(0.2); |
||||||
|
stage.setResizable(false); |
||||||
|
stage.initStyle(StageStyle.UNDECORATED); |
||||||
|
|
||||||
|
Label label = new Label(); |
||||||
|
label.setBackground( |
||||||
|
new Background(new BackgroundFill(Color.color(0.78, 0.78, 0.80, 0.5), null, null))); |
||||||
|
stage.setScene(new Scene(label)); |
||||||
|
|
||||||
|
|
||||||
|
if (parentStage != null) { |
||||||
|
stage.initOwner(parentStage); |
||||||
|
stage.initModality(Modality.WINDOW_MODAL); |
||||||
|
} |
||||||
|
stage.show(); |
||||||
|
return stage; |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e, e.getMessage()); |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
try { |
||||||
|
latch.await(); |
||||||
|
} catch (InterruptedException ignore) { |
||||||
|
} |
||||||
|
return selectedFiles.length > 0 ? JFileChooser.APPROVE_OPTION : JFileChooser.CANCEL_OPTION; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSelectionMode(FileSelectionMode fileSelectionMode) { |
||||||
|
this.fileSelectionMode = fileSelectionMode; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCurrentDirectory(File currentDirectory) { |
||||||
|
this.currentDirectory = currentDirectory; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static class Builder { |
||||||
|
private FileSelectionMode fileSelectionMode = FileSelectionMode.FILE; |
||||||
|
private String title = Toolkit.i18nText("Fine-Design_Basic_Open"); |
||||||
|
private FileChooser.ExtensionFilter[] filters = new FileChooser.ExtensionFilter[0]; |
||||||
|
private File currentDirectory; |
||||||
|
|
||||||
|
public Builder fileSelectionMode(FileSelectionMode fileSelectionMode) { |
||||||
|
this.fileSelectionMode = fileSelectionMode; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder title(String title) { |
||||||
|
this.title = title; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder filters(FileChooser.ExtensionFilter[] filters) { |
||||||
|
this.filters = filters; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder filter(String des, String... extensions) { |
||||||
|
if (extensions != null) { |
||||||
|
this.filters = new FileChooser.ExtensionFilter[]{new FileChooser.ExtensionFilter(des, extensions)}; |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public Builder currentDirectory(File currentDirectory) { |
||||||
|
if (currentDirectory != null) { |
||||||
|
if (!currentDirectory.isDirectory()) { |
||||||
|
currentDirectory = currentDirectory.getParentFile(); |
||||||
|
} |
||||||
|
if (currentDirectory != null && currentDirectory.isDirectory()) { |
||||||
|
this.currentDirectory = currentDirectory; |
||||||
|
} |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder currentDirectory(String path) { |
||||||
|
if (path != null) { |
||||||
|
return currentDirectory(new File(path)); |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public JavaFxNativeFileChooser build() { |
||||||
|
return new JavaFxNativeFileChooser(this); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private JavaFxNativeFileChooser(Builder builder) { |
||||||
|
this.fileSelectionMode = builder.fileSelectionMode; |
||||||
|
this.title = builder.title; |
||||||
|
this.filters = builder.filters; |
||||||
|
this.currentDirectory = builder.currentDirectory; |
||||||
|
} |
||||||
|
} |
@ -1,154 +0,0 @@ |
|||||||
package com.fr.design.gui.ifilechooser; |
|
||||||
|
|
||||||
import com.fr.design.gui.ifilechooser.AbstractFileChooser; |
|
||||||
import com.fr.design.mainframe.DesignerContext; |
|
||||||
import com.fr.stable.os.OperatingSystem; |
|
||||||
|
|
||||||
import javax.swing.*; |
|
||||||
import javax.swing.filechooser.FileFilter; |
|
||||||
import java.awt.*; |
|
||||||
import java.io.File; |
|
||||||
import java.io.FilenameFilter; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* 系统原生风格的文件选择器 |
|
||||||
* |
|
||||||
* jdk问题: |
|
||||||
* https://bugs.openjdk.java.net/browse/JDK-4811090 不支持文件扩展选择
|
|
||||||
* https://stackoverflow.com/questions/40713398/filter-not-working-in-filedialog windows下 setFilenameFilter不work
|
|
||||||
* |
|
||||||
* @author hades |
|
||||||
* @version 10.0 |
|
||||||
* Created by hades on 2020/3/31 |
|
||||||
*/ |
|
||||||
public class UINativeFileChooser extends AbstractFileChooser { |
|
||||||
|
|
||||||
private final FileDialog fileDialog; |
|
||||||
private FileFilter fileFilter; |
|
||||||
private int selectionMode; |
|
||||||
|
|
||||||
public UINativeFileChooser(File file) { |
|
||||||
fileDialog = new FileDialog(DesignerContext.getDesignerFrame()); |
|
||||||
if (file != null) { |
|
||||||
fileDialog.setDirectory(file.getAbsolutePath()); |
|
||||||
fileDialog.setFile(file.toString()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public UINativeFileChooser() { |
|
||||||
this(null); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public File getCurrentDirectory() { |
|
||||||
return new File(fileDialog.getDirectory()); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public FileFilter getFileFilter() { |
|
||||||
return fileFilter; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public File getSelectedFile() { |
|
||||||
return new File(fileDialog.getDirectory() + fileDialog.getFile()); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public File[] getSelectedFiles() { |
|
||||||
return fileDialog.getFiles(); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean isMultiSelectionEnabled() { |
|
||||||
return fileDialog.isMultipleMode(); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setCurrentDirectory(File f) { |
|
||||||
fileDialog.setDirectory(f.toString()); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setDialogTitle(String title) { |
|
||||||
fileDialog.setTitle(title); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setFileFilter(final FileFilter cff) { |
|
||||||
FilenameFilter filter = new FilenameFilter() { |
|
||||||
@Override |
|
||||||
public boolean accept(File Directory, String fileName) { |
|
||||||
return cff.accept(new File(Directory.getAbsolutePath() + fileName)); |
|
||||||
} |
|
||||||
}; |
|
||||||
fileDialog.setFilenameFilter(filter); |
|
||||||
fileFilter = cff; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setFileSelectionMode(int selectionMode) { |
|
||||||
this.selectionMode = selectionMode; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setMultiSelectionEnabled(boolean multiple) { |
|
||||||
fileDialog.setMultipleMode(multiple); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setSelectedFile(File file) { |
|
||||||
fileDialog.setDirectory(file.getAbsolutePath()); |
|
||||||
fileDialog.setFile(file.getName()); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public int showOpenDialog(Component parent) { |
|
||||||
boolean appleProperty = OperatingSystem.isMacos() && selectionMode == JFileChooser.DIRECTORIES_ONLY; |
|
||||||
if (appleProperty) { |
|
||||||
System.setProperty("apple.awt.fileDialogForDirectories", "true"); |
|
||||||
} |
|
||||||
try { |
|
||||||
fileDialog.setLocale(JComponent.getDefaultLocale()); |
|
||||||
fileDialog.setMode(FileDialog.LOAD); |
|
||||||
fileDialog.setVisible(true); |
|
||||||
return fileDialog.getFile() == null ? JFileChooser.CANCEL_OPTION : JFileChooser.APPROVE_OPTION; |
|
||||||
} finally { |
|
||||||
if (appleProperty) { |
|
||||||
System.setProperty("apple.awt.fileDialogForDirectories", "false"); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public int showSaveDialog(Component parent) { |
|
||||||
fileDialog.setLocale(JComponent.getDefaultLocale()); |
|
||||||
fileDialog.setMode(FileDialog.SAVE); |
|
||||||
fileDialog.setVisible(true); |
|
||||||
return fileDialog.getFile() == null ? JFileChooser.CANCEL_OPTION : JFileChooser.APPROVE_OPTION; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void setExtensionFilter(String file) { |
|
||||||
fileDialog.setFile(file); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 确认本地文件选择器是否支持选择模式 |
|
||||||
* @param selectionMode 选择模式 |
|
||||||
* @return 是否支持选择模式 |
|
||||||
*/ |
|
||||||
public static boolean supportsSelectionMode(int selectionMode) { |
|
||||||
switch (selectionMode) { |
|
||||||
case JFileChooser.FILES_AND_DIRECTORIES: |
|
||||||
return false; |
|
||||||
case JFileChooser.DIRECTORIES_ONLY: |
|
||||||
return OperatingSystem.isMacos(); |
|
||||||
case JFileChooser.FILES_ONLY: |
|
||||||
default: |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -0,0 +1,328 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.base.BaseFormula; |
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.Parameter; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.formula.TinyFormulaPane; |
||||||
|
import com.fr.design.gui.frpane.ReportletParameterViewPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.itableeditorpane.UITableEditAction; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.gui.itree.filetree.ReportletPane; |
||||||
|
import com.fr.design.hyperlink.AbstractHyperLinkPane; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.module.DesignModuleFactory; |
||||||
|
import com.fr.design.parameter.ParameterReader; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.js.MobilePopupHyperlink; |
||||||
|
import com.fr.stable.CommonUtils; |
||||||
|
import com.fr.stable.FormulaProvider; |
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
public class ContentSettingPane extends AbstractHyperLinkPane<MobilePopupHyperlink> { |
||||||
|
private JPanel popupTargetPane; |
||||||
|
private UIRadioButton templatePopupButton; |
||||||
|
private UIRadioButton textPopupButton; |
||||||
|
private ButtonGroup popupTargetButtons; |
||||||
|
|
||||||
|
private JPanel templateContentPane; |
||||||
|
private UITextField templatePathTextField; |
||||||
|
private UICheckBox extendParametersCheckBox; |
||||||
|
|
||||||
|
private JPanel textSettingPanel; |
||||||
|
private TinyFormulaPane textContentPane; |
||||||
|
private CustomFontPane fontPane; |
||||||
|
|
||||||
|
public ContentSettingPane() { |
||||||
|
super(); |
||||||
|
this.initCompoennt(); |
||||||
|
} |
||||||
|
|
||||||
|
public void addTargetRadioActionListener(ActionListener listener) { |
||||||
|
templatePopupButton.addActionListener(listener); |
||||||
|
textPopupButton.addActionListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
public String getTargetType() { |
||||||
|
if (templatePopupButton.isSelected()) { |
||||||
|
return MobilePopupConstants.Target_Template; |
||||||
|
} else { |
||||||
|
return MobilePopupConstants.Target_Text; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void initCompoennt() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); |
||||||
|
this.setBorder(GUICoreUtils.createTitledBorder(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Content"))); |
||||||
|
|
||||||
|
popupTargetPane = this.createPopupTargetPane(); |
||||||
|
this.add(popupTargetPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
templateContentPane= this.createTemplateContentPane(); |
||||||
|
textSettingPanel = this.createTextSettingPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createPopupTargetPane() { |
||||||
|
templatePopupButton = new UIRadioButton(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Template")); |
||||||
|
templatePopupButton.addActionListener(radioActionListener); |
||||||
|
|
||||||
|
textPopupButton = new UIRadioButton(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Text")); |
||||||
|
textPopupButton.addActionListener(radioActionListener); |
||||||
|
|
||||||
|
popupTargetButtons = new ButtonGroup(); |
||||||
|
popupTargetButtons.add(templatePopupButton); |
||||||
|
popupTargetButtons.add(textPopupButton); |
||||||
|
|
||||||
|
JPanel popupButtonsPanel = new JPanel(); |
||||||
|
popupButtonsPanel.setLayout( new FlowLayout(FlowLayout.LEFT, 10, 0)); |
||||||
|
popupButtonsPanel.add(templatePopupButton); |
||||||
|
popupButtonsPanel.add(textPopupButton); |
||||||
|
return MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Target"), popupButtonsPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private ActionListener radioActionListener = new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
if(templatePopupButton.isSelected()) { |
||||||
|
ContentSettingPane.this.add(templateContentPane); |
||||||
|
ContentSettingPane.this.remove(textSettingPanel); |
||||||
|
} else if (textPopupButton.isSelected()) { |
||||||
|
ContentSettingPane.this.add(textSettingPanel); |
||||||
|
ContentSettingPane.this.remove(templateContentPane); |
||||||
|
} |
||||||
|
ContentSettingPane.this.revalidate(); |
||||||
|
ContentSettingPane.this.repaint(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
private JPanel createTemplateContentPane() { |
||||||
|
JPanel templateContentPane = new JPanel(); |
||||||
|
templateContentPane.setLayout(new BorderLayout(0,8)); |
||||||
|
|
||||||
|
templateContentPane.add(this.createTemplateSelectPanel(), BorderLayout.NORTH); |
||||||
|
|
||||||
|
parameterViewPane = this.createReportletParameterViewPane(); |
||||||
|
templateContentPane.add(parameterViewPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
extendParametersCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Hyperlink_Extends_Report_Parameters")); |
||||||
|
templateContentPane.add(GUICoreUtils.createFlowPane(extendParametersCheckBox, FlowLayout.LEFT), BorderLayout.SOUTH); |
||||||
|
|
||||||
|
return templateContentPane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createTemplateSelectPanel() { |
||||||
|
JPanel templatePanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
// 路径输入框
|
||||||
|
templatePathTextField = new UITextField(20); |
||||||
|
templatePanel.add(templatePathTextField, BorderLayout.CENTER); |
||||||
|
|
||||||
|
// 选择路径按钮
|
||||||
|
UIButton templateSelectButton = new UIButton(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Select")); |
||||||
|
templateSelectButton.setPreferredSize(new Dimension(templateSelectButton.getPreferredSize().width, 20)); |
||||||
|
templatePanel.add(templateSelectButton, BorderLayout.EAST); |
||||||
|
templateSelectButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
final ReportletPane reportletPane = new ReportletPane(); |
||||||
|
reportletPane.setSelectedReportletPath(templatePathTextField.getText()); |
||||||
|
BasicDialog reportletDialog = reportletPane.showWindow(SwingUtilities.getWindowAncestor(ContentSettingPane.this)); |
||||||
|
|
||||||
|
reportletDialog.addDialogActionListener(new DialogActionAdapter() { |
||||||
|
@Override |
||||||
|
public void doOk() { |
||||||
|
templatePathTextField.setText(reportletPane.getSelectedReportletPath()); |
||||||
|
} |
||||||
|
}); |
||||||
|
reportletDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
return MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Template"), templatePanel); |
||||||
|
} |
||||||
|
|
||||||
|
private ReportletParameterViewPane createReportletParameterViewPane() { |
||||||
|
ReportletParameterViewPane templateParameterViewPane = new ReportletParameterViewPane( |
||||||
|
new UITableEditAction[]{ |
||||||
|
new HyperlinkParametersAction() |
||||||
|
}, |
||||||
|
getChartParaType(), |
||||||
|
getValueEditorPane(), |
||||||
|
getValueEditorPane() |
||||||
|
); |
||||||
|
templateParameterViewPane.setBorder(GUICoreUtils.createTitledBorder(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Parameter"), null)); |
||||||
|
templateParameterViewPane.setPreferredSize(new Dimension(this.getWidth(), 200)); |
||||||
|
return templateParameterViewPane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createTextSettingPane() { |
||||||
|
JPanel textSettingPanel = new JPanel(); |
||||||
|
textSettingPanel.setLayout(new BorderLayout(0,8)); |
||||||
|
|
||||||
|
textContentPane = new TinyFormulaPane(); |
||||||
|
textContentPane.getUITextField().setColumns(20); |
||||||
|
textSettingPanel.add( |
||||||
|
MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Text"), textContentPane), |
||||||
|
BorderLayout.CENTER); |
||||||
|
|
||||||
|
fontPane = new CustomFontPane(); |
||||||
|
textSettingPanel.add( |
||||||
|
MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Style"), fontPane), |
||||||
|
BorderLayout.SOUTH); |
||||||
|
return MobilePopupUIUtils.createTitleSplitLineContentPane("", textSettingPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private String getReportletName() { |
||||||
|
String text = this.templatePathTextField.getText(); |
||||||
|
return StringUtils.isBlank(text) ? StringUtils.EMPTY : text.substring(1); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobilePopupHyperlink link) { |
||||||
|
this.populatePopupTargetBean(link.getPopupTarget()); |
||||||
|
this.populateTemplateContentBean(link); |
||||||
|
this.populateTextContentBean(link); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobilePopupHyperlink updateBean() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(MobilePopupHyperlink link) { |
||||||
|
this.updatePopupTargetBean(link); |
||||||
|
this.updateTemplateContentBean(link); |
||||||
|
this.updateTextContentBean(link); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 自动添加模板参数的按钮操作 |
||||||
|
*/ |
||||||
|
private class HyperlinkParametersAction extends UITableEditAction { |
||||||
|
public HyperlinkParametersAction() { |
||||||
|
this.setName(Toolkit.i18nText("Fine-Design_Basic_Template_Parameter")); |
||||||
|
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif")); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
String tpl = getReportletName(); |
||||||
|
if (StringUtils.isBlank(tpl)) { |
||||||
|
JOptionPane.showMessageDialog( |
||||||
|
ContentSettingPane.this, |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Hyperlink_Please_Select_Reportlet") + ".", |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Message"), |
||||||
|
JOptionPane.WARNING_MESSAGE); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
//根据模板路径返回参数
|
||||||
|
//与当前模块、当前文件无关
|
||||||
|
Parameter[] parameters = new Parameter[0]; |
||||||
|
|
||||||
|
ParameterReader[] readers = DesignModuleFactory.getParameterReaders(); |
||||||
|
for (ParameterReader reader : readers) { |
||||||
|
Parameter[] ps = reader.readParameterFromPath(tpl); |
||||||
|
if (ps != null) { |
||||||
|
parameters = ps; |
||||||
|
} |
||||||
|
} |
||||||
|
parameterViewPane.populate(parameters); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkEnabled() { |
||||||
|
//do nothing
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void populatePopupTargetBean(String target) { |
||||||
|
if (StringUtils.equals(target, MobilePopupConstants.Target_Text)) { |
||||||
|
popupTargetButtons.setSelected(textPopupButton.getModel(), true); |
||||||
|
this.remove(templateContentPane); |
||||||
|
this.add(textSettingPanel, BorderLayout.CENTER); |
||||||
|
} else { |
||||||
|
popupTargetButtons.setSelected(templatePopupButton.getModel(), true); |
||||||
|
this.remove(textSettingPanel); |
||||||
|
this.add(templateContentPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void updatePopupTargetBean(MobilePopupHyperlink mobilePopupHyperlink) { |
||||||
|
if (templatePopupButton.isSelected()) { |
||||||
|
mobilePopupHyperlink.setPopupTarget(MobilePopupConstants.Target_Template); |
||||||
|
} else if (textPopupButton.isSelected()) { |
||||||
|
mobilePopupHyperlink.setPopupTarget(MobilePopupConstants.Target_Text); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void populateTemplateContentBean(MobilePopupHyperlink link) { |
||||||
|
// 模板路径
|
||||||
|
templatePathTextField.setText(link.getReportletPath()); |
||||||
|
|
||||||
|
// 参数面板
|
||||||
|
List<ParameterProvider> parameterList = this.parameterViewPane.update(); |
||||||
|
parameterList.clear(); |
||||||
|
ParameterProvider[] parameters =link.getParameters(); |
||||||
|
parameterViewPane.populate(parameters); |
||||||
|
|
||||||
|
// 继承参数
|
||||||
|
extendParametersCheckBox.setSelected(link.isExtendParameters()); |
||||||
|
} |
||||||
|
|
||||||
|
private void updateTemplateContentBean(MobilePopupHyperlink link) { |
||||||
|
link.setReportletPath(templatePathTextField.getText()); |
||||||
|
|
||||||
|
List<ParameterProvider> parameterList = this.parameterViewPane.update(); |
||||||
|
if (!parameterList.isEmpty()) { |
||||||
|
Parameter[] parameters = new Parameter[parameterList.size()]; |
||||||
|
parameterList.toArray(parameters); |
||||||
|
link.setParameters(parameters); |
||||||
|
} else { |
||||||
|
link.setParameters(null); |
||||||
|
} |
||||||
|
|
||||||
|
link.setExtendParameters(extendParametersCheckBox.isSelected()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void populateTextContentBean(MobilePopupHyperlink link) { |
||||||
|
Object text = link.getPopupText(); |
||||||
|
if (text instanceof FormulaProvider) { |
||||||
|
textContentPane.populateBean(((FormulaProvider) text).getContent()); |
||||||
|
} else { |
||||||
|
textContentPane.populateBean(text == null ? StringUtils.EMPTY : text.toString()); |
||||||
|
} |
||||||
|
fontPane.populateBean(link.getFRFont()); |
||||||
|
} |
||||||
|
private void updateTextContentBean(MobilePopupHyperlink link) { |
||||||
|
link.setPopupText(textContentPane.getUITextField().getText()); |
||||||
|
String text = textContentPane.updateBean(); |
||||||
|
if (CommonUtils.maybeFormula(text)) { |
||||||
|
link.setPopupText(BaseFormula.createFormulaBuilder().build(textContentPane.updateBean())); |
||||||
|
} else { |
||||||
|
link.setPopupText(text); |
||||||
|
} |
||||||
|
|
||||||
|
link.setFRFont(fontPane.updateBean()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,100 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.ibutton.UIToggleButton; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.util.Vector; |
||||||
|
|
||||||
|
public class CustomFontPane extends JPanel { |
||||||
|
private static final int MAX_FONT_SIZE = 100; |
||||||
|
private static final Dimension BUTTON_SIZE = new Dimension(20, 18); |
||||||
|
|
||||||
|
public static Vector<Integer> getFontSizes() { |
||||||
|
Vector<Integer> FONT_SIZES = new Vector<Integer>(); |
||||||
|
for (int i = 1; i < MAX_FONT_SIZE; i++) { |
||||||
|
FONT_SIZES.add(i); |
||||||
|
} |
||||||
|
return FONT_SIZES; |
||||||
|
} |
||||||
|
|
||||||
|
private UIComboBox fontSizeComboBox; |
||||||
|
private UIToggleButton bold; |
||||||
|
private UIToggleButton italic; |
||||||
|
private UIToggleButton underline; |
||||||
|
private UIColorButton colorSelectPane; |
||||||
|
|
||||||
|
public CustomFontPane() { |
||||||
|
this.initComponent(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponent() { |
||||||
|
|
||||||
|
fontSizeComboBox = new UIComboBox(getFontSizes()); |
||||||
|
fontSizeComboBox.setPreferredSize(new Dimension(60, 20)); |
||||||
|
fontSizeComboBox.setEditable(true); |
||||||
|
|
||||||
|
colorSelectPane = new UIColorButton(); |
||||||
|
bold = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png")); |
||||||
|
italic = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png")); |
||||||
|
underline = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/underline.png")); |
||||||
|
|
||||||
|
this.setButtonsTips(); |
||||||
|
this.setButtonsSize(BUTTON_SIZE); |
||||||
|
|
||||||
|
Component[] components_font = new Component[]{ |
||||||
|
fontSizeComboBox, colorSelectPane, bold, underline, italic |
||||||
|
}; |
||||||
|
|
||||||
|
JPanel buttonPane = new JPanel(new BorderLayout()); |
||||||
|
buttonPane.add(GUICoreUtils.createFlowPane(components_font, FlowLayout.LEFT, LayoutConstants.HGAP_SMALL)); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout(0,0)); |
||||||
|
this.add(buttonPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private void setButtonsTips() { |
||||||
|
colorSelectPane.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Foreground")); |
||||||
|
italic.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Italic")); |
||||||
|
bold.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Bold")); |
||||||
|
underline.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Underline")); |
||||||
|
} |
||||||
|
|
||||||
|
private void setButtonsSize(Dimension size) { |
||||||
|
colorSelectPane.setPreferredSize(size); |
||||||
|
bold.setPreferredSize(size); |
||||||
|
italic.setPreferredSize(size); |
||||||
|
underline.setPreferredSize(size); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void populateBean(FRFont frFont) { |
||||||
|
fontSizeComboBox.setSelectedItem(frFont.getSize()); |
||||||
|
colorSelectPane.setColor(frFont.getForeground()); |
||||||
|
bold.setSelected(frFont.isBold()); |
||||||
|
italic.setSelected(frFont.isItalic()); |
||||||
|
underline.setSelected(frFont.getUnderline() != Constants.LINE_NONE); |
||||||
|
} |
||||||
|
|
||||||
|
public FRFont updateBean() { |
||||||
|
int style = Font.PLAIN; |
||||||
|
style += this.bold.isSelected() ? Font.BOLD : Font.PLAIN; |
||||||
|
style += this.italic.isSelected() ? Font.ITALIC : Font.PLAIN; |
||||||
|
return FRFont.getInstance( |
||||||
|
FRFont.DEFAULT_FONTNAME, |
||||||
|
style, |
||||||
|
Float.parseFloat(fontSizeComboBox.getSelectedItem().toString()), |
||||||
|
colorSelectPane.getColor(), |
||||||
|
underline.isSelected() ? Constants.LINE_THIN : Constants.LINE_NONE |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
public interface MobilePopupConstants { |
||||||
|
int[] BORDER_LINE_STYLE_ARRAY = new int[]{ |
||||||
|
Constants.LINE_NONE, |
||||||
|
Constants.LINE_THIN, |
||||||
|
Constants.LINE_MEDIUM, |
||||||
|
Constants.LINE_THICK, |
||||||
|
}; |
||||||
|
|
||||||
|
String Target_Template= "template"; |
||||||
|
String Target_Text = "text"; |
||||||
|
String Regular_Custom = "custom"; |
||||||
|
String Regular_Auto_Height = "auto_height"; |
||||||
|
|
||||||
|
double Popup_Center_Default_Width = 95; |
||||||
|
double Popup_Center_Default_Height = 95; |
||||||
|
double Popup_Follow_Default_Width = 40; |
||||||
|
double Popup_Follow_Default_Height = 10; |
||||||
|
} |
@ -0,0 +1,81 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.design.beans.FurtherBasicBeanPane; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.js.MobilePopupHyperlink; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
public class MobilePopupPane extends FurtherBasicBeanPane<MobilePopupHyperlink> { |
||||||
|
private ContentSettingPane contentSettingPane; |
||||||
|
private StyleSettingPane styleSettingPane; |
||||||
|
|
||||||
|
public MobilePopupPane() { |
||||||
|
this.initComponents(); |
||||||
|
this.setDefaultBean(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
||||||
|
|
||||||
|
JPanel scrollContent = new JPanel(); |
||||||
|
scrollContent.setLayout(new BorderLayout(10, 10)); |
||||||
|
contentSettingPane = new ContentSettingPane(); |
||||||
|
scrollContent.add(contentSettingPane, BorderLayout.NORTH); |
||||||
|
styleSettingPane = new StyleSettingPane(); |
||||||
|
scrollContent.add(styleSettingPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
contentSettingPane.addTargetRadioActionListener(radioActionListener); |
||||||
|
|
||||||
|
UIScrollPane scrollPane= new UIScrollPane(scrollContent); |
||||||
|
scrollPane.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
|
||||||
|
JComponent scrollComponent = new JLayer<UIScrollPane>(scrollPane, new WheelScrollLayerUI()); |
||||||
|
|
||||||
|
this.add(scrollComponent, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private void setDefaultBean() { |
||||||
|
this.populateBean(new MobilePopupHyperlink()); |
||||||
|
} |
||||||
|
private ActionListener radioActionListener = new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
styleSettingPane.resetPane(contentSettingPane.getTargetType()); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobilePopupHyperlink mobilePopupHyperlink) { |
||||||
|
contentSettingPane.populateBean(mobilePopupHyperlink); |
||||||
|
styleSettingPane.populateBean(mobilePopupHyperlink); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobilePopupHyperlink updateBean() { |
||||||
|
MobilePopupHyperlink mobilePopupHyperlink = new MobilePopupHyperlink(); |
||||||
|
contentSettingPane.updateBean(mobilePopupHyperlink); |
||||||
|
styleSettingPane.updateBean(mobilePopupHyperlink); |
||||||
|
return mobilePopupHyperlink; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return ob instanceof MobilePopupHyperlink; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void reset() { |
||||||
|
this.setDefaultBean(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,157 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.VerticalFlowLayout; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
public class MobilePopupRegularPane extends BasicPane { |
||||||
|
private String label; |
||||||
|
|
||||||
|
private JPanel radiosPane; |
||||||
|
private UIRadioButton customRadio; |
||||||
|
private UIRadioButton autoRadio; |
||||||
|
private ButtonGroup radioButtons; |
||||||
|
|
||||||
|
private JPanel spinnerGroupPane; |
||||||
|
private UISpinner widthSpinner; |
||||||
|
private JPanel widthSpinnerPane; |
||||||
|
private UISpinner heightSpinner; |
||||||
|
private JPanel heightSpinnerPane; |
||||||
|
|
||||||
|
|
||||||
|
public MobilePopupRegularPane(String label) { |
||||||
|
this.label = label; |
||||||
|
this.initComponent(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponent() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(this.createRadioButtonGroupPane(), BorderLayout.NORTH); |
||||||
|
spinnerGroupPane = this.createSpinnerPane(); |
||||||
|
this.add(spinnerGroupPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createRadioButtonGroupPane() { |
||||||
|
radiosPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5)); |
||||||
|
|
||||||
|
customRadio = new UIRadioButton(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Custom")); |
||||||
|
customRadio.addActionListener(radioActionListener); |
||||||
|
autoRadio = new UIRadioButton(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Height_Adaptive")); |
||||||
|
autoRadio.addActionListener(radioActionListener); |
||||||
|
|
||||||
|
radioButtons = new ButtonGroup(); |
||||||
|
radioButtons.add(customRadio); |
||||||
|
radioButtons.add(autoRadio); |
||||||
|
|
||||||
|
radiosPane.add(customRadio); |
||||||
|
radiosPane.add(autoRadio); |
||||||
|
|
||||||
|
return MobilePopupUIUtils.createLeftTileRightContentPanel(this.label, radiosPane); |
||||||
|
} |
||||||
|
|
||||||
|
private ActionListener radioActionListener = new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
resetSpinnerGroupPane(customRadio.isSelected()); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
private JPanel createSpinnerPane() { |
||||||
|
JPanel spinnerPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 15, 5)); |
||||||
|
spinnerPane.setBorder(BorderFactory.createEmptyBorder(0, MobilePopupUIUtils.Left_Title_width, 0, 0)); |
||||||
|
widthSpinner = new UISpinner(0, 100, 1, 95); |
||||||
|
widthSpinnerPane = this.createSpinnerLabelPane(widthSpinner, Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Width")); |
||||||
|
heightSpinner = new UISpinner(0, 100, 1, 95); |
||||||
|
heightSpinnerPane = this.createSpinnerLabelPane(heightSpinner, Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Height")); |
||||||
|
|
||||||
|
spinnerPane.add(widthSpinnerPane); |
||||||
|
spinnerPane.add(heightSpinnerPane); |
||||||
|
|
||||||
|
return spinnerPane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createSpinnerLabelPane(UISpinner spinner, String labelText) { |
||||||
|
JPanel spinnerLabelPane = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 5)); |
||||||
|
|
||||||
|
JPanel spinnerPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 2,0)); |
||||||
|
Dimension dimension = new Dimension(60, 20); |
||||||
|
spinner.setPreferredSize(dimension); |
||||||
|
UILabel percent = new UILabel("%"); |
||||||
|
spinnerPane.add(spinner); |
||||||
|
spinnerPane.add(percent); |
||||||
|
|
||||||
|
UILabel label = new UILabel(labelText); |
||||||
|
label.setPreferredSize(dimension); |
||||||
|
label.setHorizontalAlignment(SwingConstants.CENTER); |
||||||
|
|
||||||
|
spinnerLabelPane.add(spinnerPane); |
||||||
|
spinnerLabelPane.add(label); |
||||||
|
|
||||||
|
return spinnerLabelPane; |
||||||
|
} |
||||||
|
|
||||||
|
private void resetSpinnerGroupPane(boolean showHeightSpinnerPane) { |
||||||
|
spinnerGroupPane.removeAll(); |
||||||
|
spinnerGroupPane.add(widthSpinnerPane); |
||||||
|
if(showHeightSpinnerPane) { |
||||||
|
spinnerGroupPane.add(heightSpinnerPane); |
||||||
|
} |
||||||
|
spinnerGroupPane.revalidate(); |
||||||
|
spinnerGroupPane.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
|
||||||
|
public void setRegularType(String regularType) { |
||||||
|
if (StringUtils.equals(regularType, MobilePopupConstants.Regular_Auto_Height)) { |
||||||
|
radioButtons.setSelected(autoRadio.getModel(), true); |
||||||
|
} else { |
||||||
|
radioButtons.setSelected(customRadio.getModel(), true); |
||||||
|
} |
||||||
|
resetSpinnerGroupPane(customRadio.isSelected()); |
||||||
|
} |
||||||
|
|
||||||
|
public String getRegularType() { |
||||||
|
if (autoRadio.isSelected()) { |
||||||
|
return MobilePopupConstants.Regular_Auto_Height; |
||||||
|
} else { |
||||||
|
return MobilePopupConstants.Regular_Custom; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void setWidthSpinnerValue(double width) { |
||||||
|
widthSpinner.setValue(width); |
||||||
|
} |
||||||
|
|
||||||
|
public double getWidthSpinnerValue() { |
||||||
|
return widthSpinner.getValue(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setHeightSpinnerValue(double height) { |
||||||
|
heightSpinner.setValue(height); |
||||||
|
} |
||||||
|
|
||||||
|
public double getHeightSpinnerValue() { |
||||||
|
return heightSpinner.getValue(); |
||||||
|
} |
||||||
|
|
||||||
|
public void resetPane(String regularType, double width, double height) { |
||||||
|
this.setRegularType(regularType); |
||||||
|
this.setWidthSpinnerValue(width); |
||||||
|
this.setHeightSpinnerValue(height); |
||||||
|
resetSpinnerGroupPane(StringUtils.equals(regularType, MobilePopupConstants.Regular_Custom)); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class MobilePopupUIUtils { |
||||||
|
static public int Line_Height = 20; |
||||||
|
static public int SplitLineWidth = 520; |
||||||
|
static public int Left_Title_width = 80; |
||||||
|
|
||||||
|
static public JPanel createLeftTileRightContentPanel(String title, JComponent contentPanel) { |
||||||
|
JPanel jp = new JPanel(); |
||||||
|
jp.setBorder(BorderFactory.createEmptyBorder(0,0,0, 30)); |
||||||
|
jp.setLayout(new BorderLayout(10,0)); |
||||||
|
UILabel titleLabel = new UILabel(title + ":"); |
||||||
|
titleLabel.setPreferredSize(new Dimension(MobilePopupUIUtils.Left_Title_width, Line_Height)); |
||||||
|
titleLabel.setHorizontalAlignment(SwingConstants.RIGHT); |
||||||
|
jp.add(titleLabel, BorderLayout.WEST); |
||||||
|
jp.add(contentPanel, BorderLayout.CENTER); |
||||||
|
return jp; |
||||||
|
} |
||||||
|
|
||||||
|
static public JPanel createTitleSplitLineContentPane(String title, JComponent contentPanel) { |
||||||
|
JPanel jp = new JPanel(); |
||||||
|
jp.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
||||||
|
jp.setLayout(new BorderLayout(0, 10)); |
||||||
|
UITitleSplitLine titleLine = new UITitleSplitLine(title, SplitLineWidth); |
||||||
|
titleLine.setPreferredSize(new Dimension(SplitLineWidth, Line_Height)); |
||||||
|
jp.add(titleLine, BorderLayout.NORTH); |
||||||
|
jp.add(contentPanel, BorderLayout.CENTER); |
||||||
|
return jp; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,205 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.gui.frpane.UINumberDragPane; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.VerticalFlowLayout; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.js.MobilePopupHyperlink; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class StyleSettingPane extends BasicBeanPane<MobilePopupHyperlink> { |
||||||
|
private double maxNumber = 100; |
||||||
|
private double maxBorderRadius = 24; |
||||||
|
|
||||||
|
JPanel typePane; |
||||||
|
UILabel popupTypeLabel; |
||||||
|
|
||||||
|
JPanel stylePane; |
||||||
|
LineComboBox borderType; |
||||||
|
NewColorSelectBox borderColor; |
||||||
|
UISpinner borderRadiusSpinner; |
||||||
|
|
||||||
|
NewColorSelectBox bgColor; |
||||||
|
//透明度
|
||||||
|
UINumberDragPane numberDragPane; |
||||||
|
|
||||||
|
MobilePopupRegularPane mobileRegularPane; |
||||||
|
MobilePopupRegularPane padRegularPane; |
||||||
|
|
||||||
|
public StyleSettingPane() { |
||||||
|
this.initComponent(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponent() { |
||||||
|
this.setLayout(new BorderLayout(0, 10)); |
||||||
|
this.setBorder(GUICoreUtils.createTitledBorder(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Style"))); |
||||||
|
|
||||||
|
typePane = this.createTypePane(); |
||||||
|
this.add(typePane, BorderLayout.NORTH); |
||||||
|
stylePane = this.createStylePane(); |
||||||
|
this.add(stylePane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createTypePane() { |
||||||
|
JPanel typePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
popupTypeLabel = new UILabel(""); |
||||||
|
typePane.add(popupTypeLabel, BorderLayout.CENTER); |
||||||
|
return MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Type"), typePane); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createStylePane() { |
||||||
|
JPanel stylePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
stylePane.add(this.createBorderSettingPane(), BorderLayout.NORTH); |
||||||
|
stylePane.add(this.createBackgroundSettingPane(), BorderLayout.CENTER); |
||||||
|
stylePane.add(this.createPopupSizePane(), BorderLayout.SOUTH); |
||||||
|
return stylePane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createBorderSettingPane() { |
||||||
|
JPanel borderPane = new JPanel(); |
||||||
|
VerticalFlowLayout layout = new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 10); |
||||||
|
layout.setAlignLeft(true); |
||||||
|
borderPane.setLayout(layout); |
||||||
|
|
||||||
|
borderType = new LineComboBox(MobilePopupConstants.BORDER_LINE_STYLE_ARRAY); |
||||||
|
borderType.setPreferredSize(new Dimension(115, 20)); |
||||||
|
borderPane.add(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Line"), borderType)); |
||||||
|
borderColor = new NewColorSelectBox(100); |
||||||
|
borderPane.add(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Colors"), borderColor)); |
||||||
|
borderRadiusSpinner = new UISpinner(0, maxBorderRadius, 1, 20); |
||||||
|
borderRadiusSpinner.setPreferredSize(new Dimension(120, 20)); |
||||||
|
borderPane.add(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Radius"), borderRadiusSpinner)); |
||||||
|
return MobilePopupUIUtils.createTitleSplitLineContentPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Border"), borderPane); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createBackgroundSettingPane() { |
||||||
|
JPanel bgPane = new JPanel(); |
||||||
|
VerticalFlowLayout layout = new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 10); |
||||||
|
layout.setAlignLeft(true); |
||||||
|
bgPane.setLayout(layout); |
||||||
|
|
||||||
|
JPanel colorPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0,0)); |
||||||
|
bgColor = new NewColorSelectBox(100); |
||||||
|
colorPane.add(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Colors"), bgColor)); |
||||||
|
bgPane.add(colorPane); |
||||||
|
|
||||||
|
JPanel transparencyPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
this.numberDragPane = new UINumberDragPane(0,100); |
||||||
|
this.numberDragPane.setPreferredSize(new Dimension(140, 20)); |
||||||
|
transparencyPane.add(numberDragPane, BorderLayout.CENTER); |
||||||
|
transparencyPane.add(new UILabel(" %"), BorderLayout.EAST); |
||||||
|
bgPane.add(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Opacity"), transparencyPane)); |
||||||
|
return MobilePopupUIUtils.createTitleSplitLineContentPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Background"), bgPane); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createPopupSizePane() { |
||||||
|
JPanel sizePane = new JPanel(new BorderLayout()); |
||||||
|
|
||||||
|
mobileRegularPane = new MobilePopupRegularPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Mobile_Rules")); |
||||||
|
padRegularPane = new MobilePopupRegularPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Pad_Rules")); |
||||||
|
|
||||||
|
sizePane.add(mobileRegularPane, BorderLayout.NORTH); |
||||||
|
sizePane.add(padRegularPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
return MobilePopupUIUtils.createTitleSplitLineContentPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Size"), sizePane); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
|
||||||
|
public void resetPane(String popupTargetType) { |
||||||
|
if (StringUtils.equals(popupTargetType, MobilePopupConstants.Target_Template)) { |
||||||
|
popupTypeLabel.setText(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Center")); |
||||||
|
mobileRegularPane.resetPane(MobilePopupConstants.Regular_Custom, MobilePopupConstants.Popup_Center_Default_Width, MobilePopupConstants.Popup_Center_Default_Height); |
||||||
|
padRegularPane.resetPane(MobilePopupConstants.Regular_Custom, MobilePopupConstants.Popup_Center_Default_Width, MobilePopupConstants.Popup_Center_Default_Height); |
||||||
|
} else { |
||||||
|
popupTypeLabel.setText(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Follow")); |
||||||
|
mobileRegularPane.resetPane(MobilePopupConstants.Regular_Custom, MobilePopupConstants.Popup_Follow_Default_Width, MobilePopupConstants.Popup_Follow_Default_Height); |
||||||
|
padRegularPane.resetPane(MobilePopupConstants.Regular_Custom, MobilePopupConstants.Popup_Follow_Default_Width, MobilePopupConstants.Popup_Follow_Default_Height); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobilePopupHyperlink link) { |
||||||
|
this.populateTypeBean(link); |
||||||
|
this.populateBorderSettingBean(link); |
||||||
|
this.populateBackgroundSettingBean(link); |
||||||
|
this.populatePopupSizeBean(link); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobilePopupHyperlink updateBean() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(MobilePopupHyperlink link) { |
||||||
|
this.updateBorderSettingBean(link); |
||||||
|
this.updateBackgroundSettingBean(link); |
||||||
|
this.updatePopupSizeBean(link); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void populateTypeBean(MobilePopupHyperlink link) { |
||||||
|
if (StringUtils.equals(link.getPopupTarget(), MobilePopupConstants.Target_Text)) { |
||||||
|
popupTypeLabel.setText(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Follow")); |
||||||
|
} else { |
||||||
|
popupTypeLabel.setText(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Center")); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void populateBorderSettingBean(MobilePopupHyperlink link) { |
||||||
|
borderType.setSelectedLineStyle(link.getBorderType()); |
||||||
|
borderColor.setSelectObject(link.getBorderColor()); |
||||||
|
borderRadiusSpinner.setValue(link.getBorderRadius()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void updateBorderSettingBean(MobilePopupHyperlink link) { |
||||||
|
link.setBorderType(borderType.getSelectedLineStyle()); |
||||||
|
link.setBorderColor(borderColor.getSelectObject()); |
||||||
|
link.setBorderRadius(borderRadiusSpinner.getValue()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void populateBackgroundSettingBean(MobilePopupHyperlink link) { |
||||||
|
bgColor.setSelectObject(link.getBgColor()); |
||||||
|
numberDragPane.populateBean(link.getBgOpacity() * maxNumber); |
||||||
|
} |
||||||
|
|
||||||
|
private void updateBackgroundSettingBean(MobilePopupHyperlink link) { |
||||||
|
link.setBgColor(bgColor.getSelectObject()); |
||||||
|
link.setBgOpacity((float)(numberDragPane.updateBean() / maxNumber)); |
||||||
|
} |
||||||
|
|
||||||
|
private void populatePopupSizeBean(MobilePopupHyperlink link) { |
||||||
|
mobileRegularPane.setRegularType(link.getMobileRegularType()); |
||||||
|
mobileRegularPane.setWidthSpinnerValue(link.getMobileWidth()); |
||||||
|
mobileRegularPane.setHeightSpinnerValue(link.getMobileHeight()); |
||||||
|
padRegularPane.setRegularType(link.getPadRegularType()); |
||||||
|
padRegularPane.setWidthSpinnerValue(link.getPadWidth()); |
||||||
|
padRegularPane.setHeightSpinnerValue(link.getPadHeight()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void updatePopupSizeBean(MobilePopupHyperlink link) { |
||||||
|
link.setMobileRegularType(mobileRegularPane.getRegularType()); |
||||||
|
link.setMobileWidth(mobileRegularPane.getWidthSpinnerValue()); |
||||||
|
link.setMobileHeight(mobileRegularPane.getHeightSpinnerValue()); |
||||||
|
link.setPadRegularType(padRegularPane.getRegularType()); |
||||||
|
link.setPadWidth(padRegularPane.getWidthSpinnerValue()); |
||||||
|
link.setPadHeight(padRegularPane.getHeightSpinnerValue()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.design.hyperlink.popup; |
||||||
|
|
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.plaf.LayerUI; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.MouseWheelEvent; |
||||||
|
|
||||||
|
class WheelScrollLayerUI extends LayerUI<UIScrollPane> { |
||||||
|
@Override |
||||||
|
public void installUI(JComponent c) { |
||||||
|
super.installUI(c); |
||||||
|
if (c instanceof JLayer) { |
||||||
|
((JLayer) c).setLayerEventMask(AWTEvent.MOUSE_WHEEL_EVENT_MASK); |
||||||
|
} |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void uninstallUI(JComponent c) { |
||||||
|
if (c instanceof JLayer) { |
||||||
|
((JLayer) c).setLayerEventMask(0); |
||||||
|
} |
||||||
|
super.uninstallUI(c); |
||||||
|
} |
||||||
|
@Override |
||||||
|
protected void processMouseWheelEvent(MouseWheelEvent e, JLayer<? extends UIScrollPane> l) { |
||||||
|
Component c = e.getComponent(); |
||||||
|
int dir = e.getWheelRotation(); |
||||||
|
JScrollPane main = l.getView(); |
||||||
|
if (c instanceof JScrollPane && !c.equals(main)) { |
||||||
|
JScrollPane child = (JScrollPane) c; |
||||||
|
BoundedRangeModel m = child.getVerticalScrollBar().getModel(); |
||||||
|
int extent = m.getExtent(); |
||||||
|
int minimum = m.getMinimum(); |
||||||
|
int maximum = m.getMaximum(); |
||||||
|
int value = m.getValue(); |
||||||
|
if (value + extent >= maximum && dir > 0 || value <= minimum && dir < 0) { |
||||||
|
main.dispatchEvent(SwingUtilities.convertMouseEvent(c, e, main)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,453 @@ |
|||||||
|
package com.fr.design.javascript; |
||||||
|
|
||||||
|
import com.fr.base.BaseFormula; |
||||||
|
import com.fr.base.Parameter; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.dialog.FineJOptionPane; |
||||||
|
import com.fr.design.editor.editor.FormulaEditor; |
||||||
|
import com.fr.design.gui.frpane.ReportletParameterViewPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBoxRenderer; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.gui.itree.filetree.TemplateFileTree; |
||||||
|
import com.fr.design.hyperlink.AbstractHyperLinkPane; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.scrollruler.ModLineBorder; |
||||||
|
import com.fr.file.filetree.IOFileNodeFilter; |
||||||
|
import com.fr.general.GeneralUtils; |
||||||
|
import com.fr.js.ExportJavaScript; |
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.AbstractButton; |
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.ButtonGroup; |
||||||
|
import javax.swing.DefaultComboBoxModel; |
||||||
|
import javax.swing.JList; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JScrollPane; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
import javax.swing.event.TableModelEvent; |
||||||
|
import javax.swing.event.TableModelListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.HashSet; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript> { |
||||||
|
|
||||||
|
private ExportRadioGroup templateRadioGroup; |
||||||
|
private UIRadioButton currentTemplateRadio; |
||||||
|
private UIRadioButton otherTemplateRadio; |
||||||
|
private UITextField reportPathTextField; |
||||||
|
private UIButton browserButton; |
||||||
|
private UIComboBox exportTypeComboBox; |
||||||
|
private ExportRadioGroup fileNameRadioGroup; |
||||||
|
private UIRadioButton defaultNameRadio; |
||||||
|
private UIRadioButton customNameRadio; |
||||||
|
private FormulaEditor fileNameFormulaEditor; |
||||||
|
private UICheckBox extendParametersCheckBox; |
||||||
|
private ReportletParameterViewPane parameterViewPane; |
||||||
|
|
||||||
|
private static final double p = TableLayout.PREFERRED; |
||||||
|
private static final Map<String, String> EXPORT_TYPES_MAP = new HashMap<>(); |
||||||
|
private static final String CURRENT_TEMPLATE = "current"; |
||||||
|
private static final String DEFAULT_FILENAME = "default"; |
||||||
|
|
||||||
|
|
||||||
|
static { |
||||||
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_PDF, Toolkit.i18nText("Fine-Design_Basic_Export_JS_PDF")); |
||||||
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_EXCEL_PAGE, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Excel_Page")); |
||||||
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_EXCEL_SIMPLE, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Excel_Simple")); |
||||||
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_EXCEL_SHEET, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Excel_Sheet")); |
||||||
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_WORD, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Word")); |
||||||
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_IMAGE, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Image")); |
||||||
|
} |
||||||
|
|
||||||
|
public ExportJavaScriptPane() { |
||||||
|
initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Toolkit.i18nText("Fine-Design_Basic_Export_JS_Setting"))); |
||||||
|
|
||||||
|
//导出模板+导出方式+导出文件名
|
||||||
|
JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
|
||||||
|
//导出模板
|
||||||
|
JPanel chooseTemplatePane = initChooseTemplatePane(); |
||||||
|
northPane.add(chooseTemplatePane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
//导出方式
|
||||||
|
JPanel exportTypePane = initExportTypePane(); |
||||||
|
northPane.add(exportTypePane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
//导出文件名
|
||||||
|
JPanel fileNamePane = initFileNamePane(); |
||||||
|
northPane.add(fileNamePane, BorderLayout.SOUTH); |
||||||
|
|
||||||
|
//参数
|
||||||
|
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
JPanel paramsPane = initParamsPane(); |
||||||
|
centerPane.add(paramsPane); |
||||||
|
|
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
this.add(centerPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel initParamsPane() { |
||||||
|
extendParametersCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Hyperlink_Extends_Report_Parameters")); |
||||||
|
parameterViewPane = new ReportletParameterViewPane(getChartParaType(), getValueEditorPane(), getValueEditorPane()); |
||||||
|
parameterViewPane.addTableEditorListener(new TableModelListener() { |
||||||
|
public void tableChanged(TableModelEvent e) { |
||||||
|
List<ParameterProvider> list = parameterViewPane.update(); |
||||||
|
HashSet<String> tempSet = new HashSet<>(); |
||||||
|
for (int i = 0; i < list.size(); i++) { |
||||||
|
if (StringUtils.isEmpty(list.get(i).getName())) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
if (tempSet.contains(list.get(i).toString())) { |
||||||
|
list.remove(i); |
||||||
|
FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameter_Duplicate_Name") + "!"); |
||||||
|
return; |
||||||
|
} |
||||||
|
tempSet.add(list.get(i).toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
extendParametersCheckBox.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
parameterViewPane.setVisible(e.getStateChange() == ItemEvent.DESELECTED); |
||||||
|
} |
||||||
|
}); |
||||||
|
JPanel paramsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
paramsPane.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Toolkit.i18nText("Fine-Design_Basic_Parameters"))); |
||||||
|
paramsPane.add(extendParametersCheckBox, BorderLayout.NORTH); |
||||||
|
JPanel dynamicPaneWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
dynamicPaneWrapper.add(parameterViewPane); |
||||||
|
paramsPane.add(dynamicPaneWrapper, BorderLayout.CENTER); |
||||||
|
return paramsPane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel initFileNamePane() { |
||||||
|
UILabel nameLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename") + ":"); |
||||||
|
fileNameRadioGroup = new ExportRadioGroup(); |
||||||
|
defaultNameRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename_Default")); |
||||||
|
defaultNameRadio.setSelected(true); |
||||||
|
customNameRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename_Custom")); |
||||||
|
addRadioToGroup(fileNameRadioGroup, defaultNameRadio, customNameRadio); |
||||||
|
fileNameFormulaEditor = new FormulaEditor(Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
||||||
|
fileNameRadioGroup.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
if (defaultNameRadio.isSelected()) { |
||||||
|
fileNameFormulaEditor.setEnabled(false); |
||||||
|
} else { |
||||||
|
fileNameFormulaEditor.setEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
Component[][] components = new Component[][]{{nameLabel, defaultNameRadio, customNameRadio, fileNameFormulaEditor}}; |
||||||
|
JPanel fileNameRadioPane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p, p, p}); |
||||||
|
|
||||||
|
JPanel fileNameTipPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
UILabel fileNameTipLabel = new UILabel("<html><body style=\"color:red\">" + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Title_Tip_Front") + "\\/:*?\"<>|" + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Title_Tip_Back") + "</html>"); |
||||||
|
fileNameTipPane.add(fileNameTipLabel); |
||||||
|
|
||||||
|
JPanel fileNamePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
fileNamePane.add(fileNameRadioPane, BorderLayout.NORTH); |
||||||
|
fileNamePane.add(fileNameTipPane, BorderLayout.CENTER); |
||||||
|
fileNameTipPane.setBorder(BorderFactory.createEmptyBorder(5,2,5,2)); |
||||||
|
fileNamePane.setBorder(BorderFactory.createEmptyBorder(5,2,5,2)); |
||||||
|
return fileNamePane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel initExportTypePane() { |
||||||
|
UILabel typeLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Type") + ":"); |
||||||
|
exportTypeComboBox = new UIComboBox(new DefaultComboBoxModel<String>()); |
||||||
|
DefaultComboBoxModel<String> comboBoxModel = (DefaultComboBoxModel<String>) exportTypeComboBox.getModel(); |
||||||
|
String[] allExportTypes = new String[]{ExportJavaScript.EXPORT_PDF, ExportJavaScript.EXPORT_EXCEL_PAGE, ExportJavaScript.EXPORT_EXCEL_SIMPLE, ExportJavaScript.EXPORT_EXCEL_SHEET, ExportJavaScript.EXPORT_WORD, ExportJavaScript.EXPORT_IMAGE}; |
||||||
|
for (int i = 0; i < allExportTypes.length; i++) { |
||||||
|
comboBoxModel.addElement(allExportTypes[i]); |
||||||
|
} |
||||||
|
this.exportTypeComboBox.setRenderer(new UIComboBoxRenderer() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||||
|
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||||
|
if (value instanceof String) { |
||||||
|
this.setText(EXPORT_TYPES_MAP.get(value)); |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
}); |
||||||
|
Component[][] components = new Component[][]{{typeLabel, exportTypeComboBox}}; |
||||||
|
|
||||||
|
JPanel exportTypePane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p}); |
||||||
|
exportTypePane.setBorder(BorderFactory.createEmptyBorder(5,2,5,2)); |
||||||
|
return exportTypePane; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel initChooseTemplatePane() { |
||||||
|
UILabel templateLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template") + ":"); |
||||||
|
templateRadioGroup = new ExportRadioGroup(); |
||||||
|
currentTemplateRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Current")); |
||||||
|
currentTemplateRadio.setSelected(true); |
||||||
|
otherTemplateRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Other")); |
||||||
|
addRadioToGroup(templateRadioGroup, currentTemplateRadio, otherTemplateRadio); |
||||||
|
templateRadioGroup.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
if (currentTemplateRadio.isSelected()) { |
||||||
|
reportPathTextField.setEnabled(false); |
||||||
|
browserButton.setEnabled(false); |
||||||
|
} else { |
||||||
|
reportPathTextField.setEnabled(true); |
||||||
|
browserButton.setEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
Component[][] components = new Component[][]{{templateLabel, currentTemplateRadio, otherTemplateRadio}}; |
||||||
|
JPanel reportletRadioPane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p, p}); |
||||||
|
|
||||||
|
JPanel reportletNamePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
// 路径输入框
|
||||||
|
reportPathTextField = new UITextField(20); |
||||||
|
reportletNamePane.add(reportPathTextField, BorderLayout.CENTER); |
||||||
|
|
||||||
|
// 选择路径按钮
|
||||||
|
browserButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Select")); |
||||||
|
browserButton.setPreferredSize(new Dimension(browserButton.getPreferredSize().width, 20)); |
||||||
|
reportletNamePane.add(browserButton, BorderLayout.EAST); |
||||||
|
browserButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
final ReportletPane reportletPane = new ReportletPane(); |
||||||
|
reportletPane.setSelectedReportletPath(reportPathTextField.getText()); |
||||||
|
BasicDialog reportletDialog = reportletPane.showWindow(SwingUtilities.getWindowAncestor(ExportJavaScriptPane.this)); |
||||||
|
|
||||||
|
reportletDialog.addDialogActionListener(new DialogActionAdapter() { |
||||||
|
@Override |
||||||
|
public void doOk() { |
||||||
|
reportPathTextField.setText(reportletPane.getSelectedReportletPath()); |
||||||
|
} |
||||||
|
}); |
||||||
|
reportletDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
JPanel chooseTemplatePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
chooseTemplatePane.add(reportletRadioPane, BorderLayout.NORTH); |
||||||
|
chooseTemplatePane.add(reportletNamePane, BorderLayout.CENTER); |
||||||
|
chooseTemplatePane.setBorder(BorderFactory.createEmptyBorder(0,2,5,2)); |
||||||
|
|
||||||
|
return chooseTemplatePane; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(ExportJavaScript ob) { |
||||||
|
if (ob == null) { |
||||||
|
ob = new ExportJavaScript(); |
||||||
|
} |
||||||
|
this.templateRadioGroup.selectIndexButton(ob.isCurrentTemplate() ? 0 : 1); |
||||||
|
if (ob.isCurrentTemplate()) { |
||||||
|
this.reportPathTextField.setEnabled(false); |
||||||
|
this.browserButton.setEnabled(false); |
||||||
|
} else { |
||||||
|
this.reportPathTextField.setEnabled(true); |
||||||
|
this.browserButton.setEnabled(true); |
||||||
|
this.reportPathTextField.setText(ob.getTemplatePath()); |
||||||
|
} |
||||||
|
this.exportTypeComboBox.setSelectedItem(ob.getExportType()); |
||||||
|
this.fileNameRadioGroup.selectIndexButton(ob.isDefaultFileName() ? 0 : 1); |
||||||
|
if (ob.isDefaultFileName()) { |
||||||
|
this.fileNameFormulaEditor.setEnabled(false); |
||||||
|
} else { |
||||||
|
this.fileNameFormulaEditor.setEnabled(true); |
||||||
|
this.fileNameFormulaEditor.setValue(BaseFormula.createFormulaBuilder().build(ob.getFileName())); |
||||||
|
} |
||||||
|
if (ob.isExtendParameters()) { |
||||||
|
this.extendParametersCheckBox.setSelected(true); |
||||||
|
} else { |
||||||
|
this.extendParametersCheckBox.setSelected(false); |
||||||
|
List<ParameterProvider> parameterList = this.parameterViewPane.update(); |
||||||
|
parameterList.clear(); |
||||||
|
ParameterProvider[] parameters = ob.getParameters(); |
||||||
|
this.parameterViewPane.populate(parameters); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ExportJavaScript updateBean() { |
||||||
|
ExportJavaScript exportJavaScript = new ExportJavaScript(); |
||||||
|
updateBean(exportJavaScript); |
||||||
|
return exportJavaScript; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(ExportJavaScript exportJavaScript) { |
||||||
|
exportJavaScript.setCurrentTemplate(this.currentTemplateRadio.isSelected()); |
||||||
|
exportJavaScript.setTemplatePath(getTemplatePath()); |
||||||
|
exportJavaScript.setExportType(GeneralUtils.objectToString(this.exportTypeComboBox.getSelectedItem())); |
||||||
|
exportJavaScript.setDefaultFileName(this.defaultNameRadio.isSelected()); |
||||||
|
exportJavaScript.setFileName(getFileName()); |
||||||
|
exportJavaScript.setExtendParameters(this.extendParametersCheckBox.isSelected()); |
||||||
|
if (extendParametersCheckBox.isSelected()) { |
||||||
|
exportJavaScript.setParameters(null); |
||||||
|
} else { |
||||||
|
List<ParameterProvider> parameterList = this.parameterViewPane.update(); |
||||||
|
if (!parameterList.isEmpty()) { |
||||||
|
Parameter[] parameters = new Parameter[parameterList.size()]; |
||||||
|
parameterList.toArray(parameters); |
||||||
|
exportJavaScript.setParameters(parameters); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private String getTemplatePath() { |
||||||
|
return currentTemplateRadio.isSelected() ? CURRENT_TEMPLATE : reportPathTextField.getText(); |
||||||
|
} |
||||||
|
|
||||||
|
private String getFileName() { |
||||||
|
return defaultNameRadio.isSelected() ? DEFAULT_FILENAME : fileNameFormulaEditor.getUITextField().getText(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return ob instanceof ExportJavaScript; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void reset() { |
||||||
|
populateBean(null); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public java.lang.String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Basic_Export_JS_Event"); |
||||||
|
} |
||||||
|
|
||||||
|
private void addRadioToGroup(ButtonGroup buttonGroup, UIRadioButton... radios) { |
||||||
|
for (UIRadioButton radio : radios) { |
||||||
|
buttonGroup.add(radio); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class ExportRadioGroup extends ButtonGroup { |
||||||
|
private List<UIRadioButton> radioButtons = new ArrayList<>(); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void add(AbstractButton button) { |
||||||
|
super.add(button); |
||||||
|
|
||||||
|
UIRadioButton radioButton = (UIRadioButton) button; |
||||||
|
radioButtons.add(radioButton); |
||||||
|
} |
||||||
|
|
||||||
|
public void selectIndexButton(int index) { |
||||||
|
if (index < 0 || index > radioButtons.size() - 1) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
UIRadioButton button = radioButtons.get(index); |
||||||
|
button.setSelected(true); |
||||||
|
} |
||||||
|
|
||||||
|
public void addActionListener(ActionListener actionListener) { |
||||||
|
for (UIRadioButton radioButton : radioButtons) { |
||||||
|
radioButton.addActionListener(actionListener); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class ReportletPane extends BasicPane { |
||||||
|
private TemplateFileTree templateReportletTree; |
||||||
|
private JScrollPane t_panel; |
||||||
|
|
||||||
|
private JPanel cardPane; |
||||||
|
|
||||||
|
public ReportletPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); |
||||||
|
|
||||||
|
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
this.add(centerPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
cardPane = FRGUIPaneFactory.createCardLayout_S_Pane(); |
||||||
|
centerPane.add(cardPane, BorderLayout.CENTER); |
||||||
|
cardPane.setLayout(new CardLayout()); |
||||||
|
templateReportletTree = new TemplateFileTree(); |
||||||
|
IOFileNodeFilter filter = new IOFileNodeFilter(new String[]{".cpt"}); |
||||||
|
templateReportletTree.setFileNodeFilter(filter); |
||||||
|
cardPane.add(t_panel = new JScrollPane(templateReportletTree), "TEMPLATE"); |
||||||
|
|
||||||
|
this.refreshEnv(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 检查是否符合规范 |
||||||
|
* |
||||||
|
* @throws Exception 抛错 |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public void checkValid() throws Exception { |
||||||
|
String path = this.getSelectedReportletPath(); |
||||||
|
if (path == null) { |
||||||
|
throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Function_The_Selected_File_Cannot_Be_Null")); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 刷新Env |
||||||
|
*/ |
||||||
|
public void refreshEnv() { |
||||||
|
this.templateReportletTree.refreshEnv(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Basic_Export_JS_Event"); |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* 返回选中的Reportlet的路径 |
||||||
|
*/ |
||||||
|
public String getSelectedReportletPath() { |
||||||
|
if (t_panel.isVisible()) { |
||||||
|
return templateReportletTree.getSelectedTemplatePath(); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* 选中某Reportlet |
||||||
|
*/ |
||||||
|
public void setSelectedReportletPath(String reportletPath) { |
||||||
|
if (reportletPath == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
templateReportletTree.setSelectedTemplatePath(reportletPath); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,278 @@ |
|||||||
|
package com.fr.design.mainframe; |
||||||
|
|
||||||
|
import com.fr.design.DesignState; |
||||||
|
import com.fr.design.base.mode.DesignModeContext; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.file.HistoryTemplateListCache; |
||||||
|
import com.fr.design.file.MutilTempalteTabPane; |
||||||
|
import com.fr.design.file.NewTemplatePane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.imenu.UIMenuHighLight; |
||||||
|
import com.fr.design.gui.itoolbar.UILargeToolbar; |
||||||
|
import com.fr.design.gui.itoolbar.UIToolbar; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.toolbar.ToolBarMenuDock; |
||||||
|
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; |
||||||
|
import org.jetbrains.annotations.Nullable; |
||||||
|
|
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.border.MatteBorder; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Insets; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author shine |
||||||
|
* @version 10.0 |
||||||
|
* Created by shine on 2021/4/6 |
||||||
|
*/ |
||||||
|
public class CenterRegionContainerPane extends JPanel { |
||||||
|
|
||||||
|
private static volatile CenterRegionContainerPane THIS; |
||||||
|
|
||||||
|
private static final int LEFT_ALIGN_GAP = -5; |
||||||
|
|
||||||
|
private DesktopCardPane centerTemplateCardPane; |
||||||
|
|
||||||
|
private JPanel toolbarPane;//撤销重做 等工具栏 + 模板tab标签 + maybe have cpt 字体
|
||||||
|
|
||||||
|
private JComponent toolbarComponent;//cpt 字体 等工具栏
|
||||||
|
|
||||||
|
private JPanel eastPane;//=largeToolbar+eastCenterPane
|
||||||
|
private UILargeToolbar largeToolbar;//预览
|
||||||
|
|
||||||
|
private JPanel eastCenterPane;//=combineUp + templateTabPane
|
||||||
|
|
||||||
|
private UIToolbar combineUp;//撤销重做 等工具栏
|
||||||
|
|
||||||
|
private JPanel templateTabPane;//新建模板 + 模板tab标签
|
||||||
|
private NewTemplatePane newWorkBookPane;//新建模板button
|
||||||
|
|
||||||
|
|
||||||
|
public static CenterRegionContainerPane getInstance() { |
||||||
|
if (THIS == null) { |
||||||
|
synchronized (CenterRegionContainerPane.class) { |
||||||
|
if (THIS == null) { |
||||||
|
THIS = new CenterRegionContainerPane(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return THIS; |
||||||
|
} |
||||||
|
|
||||||
|
public CenterRegionContainerPane() { |
||||||
|
|
||||||
|
toolbarPane = new JPanel() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
|
||||||
|
Dimension dim = super.getPreferredSize(); |
||||||
|
// dim.height = TOOLBAR_HEIGHT;
|
||||||
|
return dim; |
||||||
|
} |
||||||
|
}; |
||||||
|
toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
eastPane.add(largeToolbar = getToolBarMenuDock().createLargeToolbar(), BorderLayout.WEST); |
||||||
|
eastCenterPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
combineUpTooBar(); |
||||||
|
eastCenterPane.add(combineUp, BorderLayout.NORTH); |
||||||
|
templateTabPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
templateTabPane.add(newWorkBookPane = getToolBarMenuDock().getNewTemplatePane(), BorderLayout.WEST); |
||||||
|
templateTabPane.add(MutilTempalteTabPane.getInstance(), BorderLayout.CENTER); |
||||||
|
eastCenterPane.add(templateTabPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
eastPane.add(eastCenterPane, BorderLayout.CENTER); |
||||||
|
toolbarPane.add(eastPane, BorderLayout.NORTH); |
||||||
|
toolbarPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(centerTemplateCardPane = new DesktopCardPane(), BorderLayout.CENTER); |
||||||
|
this.add(toolbarPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private ToolBarMenuDock getToolBarMenuDock() { |
||||||
|
return DesignerContext.getDesignerFrame().getToolBarMenuDock(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 创建上工具栏 |
||||||
|
*/ |
||||||
|
private void combineUpTooBar() { |
||||||
|
combineUp = new UIToolbar(FlowLayout.LEFT); |
||||||
|
combineUp.setBorder(new MatteBorder(new Insets(0, LEFT_ALIGN_GAP, 1, 0), UIConstants.LINE_COLOR)); |
||||||
|
combineUp.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 2)); |
||||||
|
setUpUpToolBar(null); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 重置上工具栏 |
||||||
|
*/ |
||||||
|
private void resetCombineUpTooBar(JComponent[] toolbar4Form, ToolBarMenuDockPlus plus) { |
||||||
|
combineUp.removeAll(); |
||||||
|
setUpUpToolBar(toolbar4Form); |
||||||
|
plus.insertToCombineUpToolbar(combineUp); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 填充上工具栏的中的工具 |
||||||
|
* |
||||||
|
* @param toolbar4Form 目标组件 |
||||||
|
*/ |
||||||
|
private void setUpUpToolBar(@Nullable JComponent[] toolbar4Form) { |
||||||
|
UIButton[] fixButtons = getToolBarMenuDock().createUp(); |
||||||
|
for (UIButton fixButton : fixButtons) { |
||||||
|
combineUp.add(fixButton); |
||||||
|
} |
||||||
|
if (!DesignModeContext.isAuthorityEditing()) { |
||||||
|
combineUp.addSeparator(new Dimension(2, 16)); |
||||||
|
if (toolbar4Form != null) { |
||||||
|
for (JComponent jComponent : toolbar4Form) { |
||||||
|
combineUp.add(jComponent); |
||||||
|
} |
||||||
|
} |
||||||
|
//添加检测按钮
|
||||||
|
addCheckButton(); |
||||||
|
} |
||||||
|
//添加分享按钮
|
||||||
|
addShareButton(); |
||||||
|
//添加插件中的按钮
|
||||||
|
addExtraButtons(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void addExtraButtons() { |
||||||
|
|
||||||
|
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
||||||
|
if (jt == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
UIButton[] extraButtons = jt.createExtraButtons(); |
||||||
|
for (UIButton extraButton : extraButtons) { |
||||||
|
combineUp.add(extraButton); |
||||||
|
} |
||||||
|
if (extraButtons.length > 0) { |
||||||
|
combineUp.addSeparator(new Dimension(2, 16)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void addCheckButton() { |
||||||
|
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
||||||
|
if (jt == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
combineUp.addSeparator(new Dimension(2, 16)); |
||||||
|
UIButton[] checkButtons = jt.createCheckButton(); |
||||||
|
for (UIButton checkButton : checkButtons) { |
||||||
|
combineUp.add(checkButton); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void addShareButton() { |
||||||
|
|
||||||
|
JTemplate<?, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
||||||
|
if (jt == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
combineUp.addSeparator(new Dimension(2, 16)); |
||||||
|
UIButton[] shareButtons = jt.createShareButton(); |
||||||
|
for (UIButton shareButton : shareButtons) { |
||||||
|
combineUp.add(shareButton); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 检查 |
||||||
|
* |
||||||
|
* @param flag 组件是否可见 |
||||||
|
* @param al 组件名称 |
||||||
|
*/ |
||||||
|
protected void checkCombineUp(boolean flag, ArrayList<String> al) { |
||||||
|
//Yvan: 检查当前是否为WORK_SHEET状态,因为只有WORK_SHEET中含有格式刷组件,此时是不需要进行checkComponentsByNames的
|
||||||
|
JTemplate<?, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
||||||
|
if (jTemplate != null) { |
||||||
|
// 第一个条件满足后还需要添加一重判断,判断是编辑报表块还是参数面板,编辑报表块时则直接return
|
||||||
|
if (jTemplate.getMenuState() == DesignState.WORK_SHEET && !jTemplate.isUpMode()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
combineUp.checkComponentsByNames(flag, al); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 重置相关的工具条. |
||||||
|
* |
||||||
|
* @param plus 工具条中相关信息 |
||||||
|
*/ |
||||||
|
protected void resetToolkitByPlus(ToolBarMenuDockPlus plus, ToolBarMenuDock ad) { |
||||||
|
|
||||||
|
resetCombineUpTooBar(ad.resetUpToolBar(plus), plus); |
||||||
|
|
||||||
|
if (toolbarComponent != null) { |
||||||
|
toolbarPane.remove(toolbarComponent); |
||||||
|
} |
||||||
|
|
||||||
|
// 颜色,字体那些按钮的工具栏
|
||||||
|
toolbarPane.add(toolbarComponent = ad.resetToolBar(toolbarComponent, plus), BorderLayout.CENTER); |
||||||
|
|
||||||
|
if (plus.hasToolBarPane()) { |
||||||
|
this.add(toolbarPane, BorderLayout.NORTH); |
||||||
|
} else { |
||||||
|
this.remove(toolbarPane); |
||||||
|
} |
||||||
|
|
||||||
|
resetByDesignMode(); |
||||||
|
} |
||||||
|
|
||||||
|
private void resetByDesignMode() { |
||||||
|
if (DesignModeContext.isDuchampMode()) { |
||||||
|
eastPane.remove(largeToolbar); |
||||||
|
eastCenterPane.remove(templateTabPane); |
||||||
|
centerTemplateCardPane.refresh(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()); |
||||||
|
} else { |
||||||
|
eastPane.add(largeToolbar, BorderLayout.WEST); |
||||||
|
eastCenterPane.add(templateTabPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
JComponent getToolbarComponent() { |
||||||
|
|
||||||
|
return this.toolbarComponent; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断是否在权限编辑状态,若是在权限编辑状态,则需要有虚线框和关闭突变 |
||||||
|
*/ |
||||||
|
protected void needToAddAuhtorityPaint() { |
||||||
|
newWorkBookPane.setButtonGray(DesignModeContext.isAuthorityEditing()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected DesktopCardPane getCenterTemplateCardPane() { |
||||||
|
|
||||||
|
return centerTemplateCardPane; |
||||||
|
} |
||||||
|
|
||||||
|
protected void refreshUIToolBar() { |
||||||
|
if (toolbarComponent instanceof UIToolbar) { |
||||||
|
((UIToolbar ) toolbarComponent).refreshUIToolBar(); |
||||||
|
} |
||||||
|
combineUp.refreshUIToolBar(); |
||||||
|
getToolBarMenuDock().updateEnable(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,83 @@ |
|||||||
|
package com.fr.design.mainframe; |
||||||
|
|
||||||
|
import com.fr.design.file.TemplateTreePane; |
||||||
|
import com.fr.design.gui.itree.filetree.TemplateFileTree; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.tree.DefaultMutableTreeNode; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author shine |
||||||
|
* @version 10.0 |
||||||
|
* Created by shine on 2021/5/7 |
||||||
|
*/ |
||||||
|
public class JTemplateNameHelper { |
||||||
|
|
||||||
|
private static final int PREFIX_NUM = 3000; |
||||||
|
|
||||||
|
private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复
|
||||||
|
|
||||||
|
public static String newTemplateNameByIndex(String prefix) { |
||||||
|
// 用于获取左侧模板的文件名,如左侧已包含"WorkBook1.cpt, WorkBook12.cpt, WorkBook177.cpt"
|
||||||
|
// 那么新建的文件名将被命名为"WorkBook178.cpt",即取最大数+1
|
||||||
|
TemplateFileTree tt = TemplateTreePane.getInstance().getTemplateFileTree(); |
||||||
|
DefaultMutableTreeNode gen = (DefaultMutableTreeNode) tt.getModel().getRoot(); |
||||||
|
String[] str = new String[gen.getChildCount()]; |
||||||
|
|
||||||
|
List<Integer> reportNum = new ArrayList<>(); |
||||||
|
for (int j = 0; j < gen.getChildCount(); j++) { |
||||||
|
str[j] = gen.getChildAt(j).toString(); |
||||||
|
//返回文件名中的index(算法中没有再匹配文件后缀了,因为DefaultMutableTreeNode中已经匹配过了)
|
||||||
|
Integer index = getFileNameIndex(prefix, str[j]); |
||||||
|
if (index != null) { |
||||||
|
reportNum.add(index); |
||||||
|
} |
||||||
|
} |
||||||
|
Collections.sort(reportNum); |
||||||
|
int idx = reportNum.size() > 0 ? reportNum.get(reportNum.size() - 1) + 1 : 1; |
||||||
|
|
||||||
|
idx = idx + currentIndex; |
||||||
|
currentIndex++; |
||||||
|
return prefix + idx; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return java.lang.Integer WorkBook11.cpt则返回11,如果没有找到index返回null |
||||||
|
* @Description 返回文件名中的index |
||||||
|
* @param: prefix 前缀 |
||||||
|
* @param: fileName 文件名称全名 |
||||||
|
* @Author Henry.Wang |
||||||
|
* @Date 2021/4/9 11:13 |
||||||
|
**/ |
||||||
|
private static Integer getFileNameIndex(String prefix, String fileName) { |
||||||
|
char[] chars = new char[fileName.length()]; |
||||||
|
int i = 0; |
||||||
|
for (; i < fileName.length(); i++) { |
||||||
|
char c = fileName.charAt(i); |
||||||
|
//匹配前缀
|
||||||
|
if (i < prefix.length()) { |
||||||
|
if (c != prefix.charAt(i)) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (c == '.') { |
||||||
|
break; |
||||||
|
} else { |
||||||
|
//匹配0~9
|
||||||
|
if (c < 48 || c > 57) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
chars[i - prefix.length()] = c; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
String s = new String(chars).substring(0, i - prefix.length()); |
||||||
|
if (StringUtils.isBlank(s)) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
return Integer.valueOf(s); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,144 @@ |
|||||||
|
package com.fr.design.mainframe; |
||||||
|
|
||||||
|
import com.fr.design.DesignState; |
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.ExtraDesignClassManager; |
||||||
|
import com.fr.design.fun.TitlePlaceProcessor; |
||||||
|
import com.fr.design.gui.imenu.UIMenuHighLight; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.loghandler.LogMessageBar; |
||||||
|
import com.fr.design.mainframe.toolbar.ToolBarMenuDock; |
||||||
|
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; |
||||||
|
import com.fr.design.menu.MenuManager; |
||||||
|
import com.fr.design.os.impl.SupportOSImpl; |
||||||
|
import com.fr.general.GeneralContext; |
||||||
|
import com.fr.plugin.context.PluginContext; |
||||||
|
import com.fr.plugin.injectable.PluginModule; |
||||||
|
import com.fr.plugin.manage.PluginFilter; |
||||||
|
import com.fr.plugin.observer.PluginEvent; |
||||||
|
import com.fr.plugin.observer.PluginEventListener; |
||||||
|
import com.fr.stable.os.support.OSBasedAction; |
||||||
|
import com.fr.stable.os.support.OSSupportCenter; |
||||||
|
|
||||||
|
import javax.swing.JMenuBar; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author shine |
||||||
|
* @version 10.0 |
||||||
|
* Created by shine on 2021/4/6 |
||||||
|
*/ |
||||||
|
public class NorthRegionContainerPane extends JPanel { |
||||||
|
|
||||||
|
private static volatile NorthRegionContainerPane THIS; |
||||||
|
|
||||||
|
private JMenuBar menuBar; |
||||||
|
|
||||||
|
public static NorthRegionContainerPane getInstance() { |
||||||
|
if (THIS == null) { |
||||||
|
synchronized (NorthRegionContainerPane.class) { |
||||||
|
if (THIS == null) { |
||||||
|
THIS = new NorthRegionContainerPane(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return THIS; |
||||||
|
} |
||||||
|
|
||||||
|
public NorthRegionContainerPane() { |
||||||
|
|
||||||
|
ToolBarMenuDock ad = DesignerContext.getDesignerFrame().getToolBarMenuDock(); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(new UIMenuHighLight(), BorderLayout.SOUTH); |
||||||
|
this.add(initNorthEastPane(ad), BorderLayout.EAST); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param ad 菜单栏 |
||||||
|
* @return panel |
||||||
|
*/ |
||||||
|
protected JPanel initNorthEastPane(final ToolBarMenuDock ad) { |
||||||
|
//hugh: private修改为protected方便oem的时候修改右上的组件构成
|
||||||
|
//顶部日志+登陆按钮
|
||||||
|
final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
//优先级为-1,保证最后全面刷新一次
|
||||||
|
GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void on(PluginEvent event) { |
||||||
|
|
||||||
|
refreshNorthEastPane(northEastPane, ad); |
||||||
|
SwingUtilities.invokeLater(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
if (DesignerContext.getDesignerFrame() == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
DesignerContext.getDesignerFrame().refresh(); |
||||||
|
DesignerContext.getDesignerFrame().repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}, new PluginFilter() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(PluginContext context) { |
||||||
|
|
||||||
|
return context.contain(PluginModule.ExtraDesign); |
||||||
|
} |
||||||
|
}); |
||||||
|
refreshNorthEastPane(northEastPane, ad); |
||||||
|
return northEastPane; |
||||||
|
} |
||||||
|
|
||||||
|
private void refreshNorthEastPane(final JPanel northEastPane, final ToolBarMenuDock ad) { |
||||||
|
|
||||||
|
northEastPane.removeAll(); |
||||||
|
northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); |
||||||
|
northEastPane.add(LogMessageBar.getInstance()); |
||||||
|
TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING); |
||||||
|
if (processor != null) { |
||||||
|
final Component[] bbsLoginPane = {null}; |
||||||
|
OSSupportCenter.buildAction(new OSBasedAction() { |
||||||
|
@Override |
||||||
|
public void execute(Object... objects) { |
||||||
|
bbsLoginPane[0] = ad.createBBSLoginPane(); |
||||||
|
} |
||||||
|
}, SupportOSImpl.USERINFOPANE); |
||||||
|
processor.hold(northEastPane, LogMessageBar.getInstance(), bbsLoginPane[0]); |
||||||
|
} |
||||||
|
northEastPane.add(ad.createAlphaFinePane()); |
||||||
|
if (!DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) { |
||||||
|
ad.createAlphaFinePane().setVisible(false); |
||||||
|
} |
||||||
|
northEastPane.add(ad.createNotificationCenterPane()); |
||||||
|
|
||||||
|
OSSupportCenter.buildAction(new OSBasedAction() { |
||||||
|
@Override |
||||||
|
public void execute(Object... objects) { |
||||||
|
northEastPane.add(ad.createBBSLoginPane()); |
||||||
|
} |
||||||
|
}, SupportOSImpl.USERINFOPANE); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 重置相关的工具条. |
||||||
|
* |
||||||
|
* @param plus 工具条中相关信息 |
||||||
|
*/ |
||||||
|
void resetToolkitByPlus(ToolBarMenuDockPlus plus, ToolBarMenuDock ad) { |
||||||
|
DesignState designState = new DesignState(plus); |
||||||
|
MenuManager.getInstance().setMenus4Designer(designState); |
||||||
|
if (menuBar == null) { |
||||||
|
this.add(menuBar = ad.createJMenuBar(plus), BorderLayout.CENTER); |
||||||
|
} else { |
||||||
|
ad.resetJMenuBar(menuBar, plus); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.combo; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.combo.SimpleComboPane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.combo.SimpleComboStyle; |
||||||
|
|
||||||
|
public class SimpleComboCheckBoxStyleProvider extends AbstractMobileWidgetStyleProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return SimpleComboStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return SimpleComboPane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "tagcombocheckbox"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-SimpleCombo_SimpleComboStyle"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.combo; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.combo.SimpleComboPane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.combo.SimpleComboStyle; |
||||||
|
|
||||||
|
public class SimpleComboStyleProvider extends AbstractMobileWidgetStyleProvider{ |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return SimpleComboStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return SimpleComboPane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "combo"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-SimpleCombo_SimpleComboStyle"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.date; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.date.NavigationCustomDefinePane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.date.NavigationMobileStyle; |
||||||
|
|
||||||
|
public class NavigationStyleProvider extends AbstractMobileWidgetStyleProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return NavigationMobileStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return NavigationCustomDefinePane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "datetime"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-Date_Navigation_Calendar"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.date; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.date.SimpleDateCustomDefinePane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.date.SimpleDateMobileStyle; |
||||||
|
|
||||||
|
public class SimpleDateStyleProvider extends AbstractMobileWidgetStyleProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return SimpleDateMobileStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return SimpleDateCustomDefinePane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "datetime"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-SimpleDate_Style"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.date; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.date.SimpleCustomDefinePane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.date.SimpleMobileStyle; |
||||||
|
|
||||||
|
public class SimpleStyleProvider extends AbstractMobileWidgetStyleProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return SimpleMobileStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return SimpleCustomDefinePane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "datetime"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-Date_Simple_Calendar"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.radiogroup; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.radiogroup.CapsuleCustomDefinePane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.radiogroup.CapsuleMobileStyle; |
||||||
|
|
||||||
|
public class CapsuleRadioGroupStyleProvider extends AbstractMobileWidgetStyleProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return CapsuleMobileStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return CapsuleCustomDefinePane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "radiogroup"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-RadioGroup_Capsule_Button"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.radiogroup; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.radiogroup.ImageCustomDefinePane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.radiogroup.ImageMobileStyle; |
||||||
|
|
||||||
|
public class ImageRadioGroupStyleProvider extends AbstractMobileWidgetStyleProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return ImageMobileStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return ImageCustomDefinePane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "radiogroup"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-RadioGroup_Graphic_Button"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.radiogroup; |
||||||
|
|
||||||
|
import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.ui.radiogroup.UnitedCustomDefinePane; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.radiogroup.UnitedMobileStyle; |
||||||
|
|
||||||
|
public class UnitedRadioGroupStyleProvider extends AbstractMobileWidgetStyleProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyle> classForMobileStyle() { |
||||||
|
return UnitedMobileStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends MobileStyleCustomDefinePane> classForWidgetAppearance() { |
||||||
|
return UnitedCustomDefinePane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String xTypeForWidget() { |
||||||
|
return "radiogroup"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-RadioGroup_Linkage_Button"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int currentAPILevel() { |
||||||
|
return CURRENT_LEVEL; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.provider.topparam; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.fun.impl.AbstractMobileParamUIProvider; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.mobile.ui.topparam.MobileTopParamPane; |
||||||
|
import com.fr.form.ui.mobile.MobileParamStyle; |
||||||
|
import com.fr.form.ui.mobile.impl.MobileTopParamStyle; |
||||||
|
|
||||||
|
public class MobileTopParamStyleProvider extends AbstractMobileParamUIProvider { |
||||||
|
@Override |
||||||
|
public Class<? extends MobileParamStyle> classForMobileParamStyle() { |
||||||
|
return MobileTopParamStyle.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<? extends BasicBeanPane<? extends MobileParamStyle>> classForMobileParamAppearance() { |
||||||
|
return MobileTopParamPane.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String displayName() { |
||||||
|
return Toolkit.i18nText("Fine-Plugin-TopParam_Name"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,304 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.combo; |
||||||
|
|
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.DesignerUtils; |
||||||
|
import com.fr.design.mainframe.mobile.utils.FontConfigPane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.IconConfigPane; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.combo.SimpleComboStyle; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
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.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public class SimpleComboPane extends MobileStyleCustomDefinePane { |
||||||
|
|
||||||
|
private JPanel scrollPanel; |
||||||
|
private UIComboBox custom; |
||||||
|
private JPanel centerPane; |
||||||
|
private FontConfigPane labelFontPane; |
||||||
|
private FontConfigPane valueFontPane; |
||||||
|
private IconConfigPane expandIconPane; |
||||||
|
private IconConfigPane unexpandIconPane; |
||||||
|
private NewColorSelectBox background; |
||||||
|
private LineComboBox borderType; |
||||||
|
private NewColorSelectBox borderColor; |
||||||
|
private UISpinner borderRadius; |
||||||
|
private UIRadioButton fillButton; |
||||||
|
private UIRadioButton customButton; |
||||||
|
private UISpinner widthSpinner; |
||||||
|
|
||||||
|
private UIRadioButton floatFillButton; |
||||||
|
private UIRadioButton floatSameWidthButton; |
||||||
|
|
||||||
|
public SimpleComboPane(Widget widget) { |
||||||
|
super(widget); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createPreviewPane() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.addScrollPane(); |
||||||
|
this.addStyleSelectPane(); |
||||||
|
this.addConfigPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void addScrollPane() { |
||||||
|
scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}; |
||||||
|
this.add(basicScrollPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addStyleSelectPane() { |
||||||
|
UILabel buttonStyleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Control_Style")); |
||||||
|
custom = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-SimpleCombo_Style_Default"), Toolkit.i18nText("Fine-Plugin-SimpleCombo_Style_Custom")}); |
||||||
|
custom.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); |
||||||
|
JPanel stylePanel = DesignerUtils.createLeftRightComponentsPane(buttonStyleLabel, custom); |
||||||
|
panel.add(stylePanel); |
||||||
|
scrollPanel.add(panel, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
private void addConfigPane() { |
||||||
|
centerPane = createCenterPane(); |
||||||
|
centerPane.setVisible(false); |
||||||
|
addLabelNamePane(); |
||||||
|
addValuePane(); |
||||||
|
addIconPane(); |
||||||
|
addWidgetSettingPane(); |
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCenterPane() { |
||||||
|
return FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
} |
||||||
|
|
||||||
|
private void addLabelNamePane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Label_Name"))); |
||||||
|
labelFontPane = new FontConfigPane(); |
||||||
|
JPanel fontPanel = createFontPane(labelFontPane); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addValuePane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Control_Value"))); |
||||||
|
valueFontPane = new FontConfigPane(); |
||||||
|
JPanel fontPanel = createFontPane(valueFontPane); |
||||||
|
valueFontPane.setFontColor(new Color(153, 153, 153)); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createFontPane(FontConfigPane fontConfigPane) { |
||||||
|
UILabel fontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Character")); |
||||||
|
JPanel fontPanel = DesignerUtils.createLeftRightComponentsPane(fontLabel, fontConfigPane); |
||||||
|
return fontPanel; |
||||||
|
} |
||||||
|
|
||||||
|
private void addIconPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Arrow"))); |
||||||
|
UILabel tipLabel = new UILabel(); |
||||||
|
tipLabel.setFont(new Font(tipLabel.getName(), Font.PLAIN, 10)); |
||||||
|
tipLabel.setSize(470, 40); |
||||||
|
tipLabel.setText(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Tips")); |
||||||
|
tipLabel.setForeground(Color.decode("#9B9B9B")); |
||||||
|
centerPane.add(tipLabel); |
||||||
|
|
||||||
|
|
||||||
|
UILabel expandLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Expand_Icon")); |
||||||
|
UILabel unexpandLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Collapse_Icon")); |
||||||
|
|
||||||
|
expandIconPane = new IconConfigPane(); |
||||||
|
unexpandIconPane = new IconConfigPane(); |
||||||
|
|
||||||
|
JPanel expandPane = DesignerUtils.createLeftRightComponentsPane(expandLabel, expandIconPane); |
||||||
|
centerPane.add(expandPane); |
||||||
|
|
||||||
|
JPanel unexpandPane = DesignerUtils.createLeftRightComponentsPane(unexpandLabel, unexpandIconPane); |
||||||
|
centerPane.add(unexpandPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addWidgetSettingPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Control_Region"))); |
||||||
|
background = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
borderType = new LineComboBox(DesignerUtils.BORDER_LINE_STYLE_ARRAY); |
||||||
|
borderType.setSelectedLineStyle(Constants.LINE_THIN); |
||||||
|
borderType.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
borderColor = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
borderRadius = new UISpinner(0, Integer.MAX_VALUE, 1, 2); |
||||||
|
borderRadius.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
|
||||||
|
JComponent[] controlComponents = new JComponent[]{background, borderType, borderColor, borderRadius}; |
||||||
|
String[] comboBoxNames = new String[]{ |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleCombo_Control_Background"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleCombo_Control_Border"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleCombo_Border_Color"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleCombo_Radius"), |
||||||
|
}; |
||||||
|
|
||||||
|
Component[][] components = new Component[4][]; |
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) { |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(comboBoxNames[i]); |
||||||
|
components[i] = new Component[]{label, controlComponents[i]}; |
||||||
|
} |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p, p, p, }; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel controlPanel = TableLayoutHelper.createCommonTableLayoutPane(components, rowSize, columnSize, 10); |
||||||
|
centerPane.add(controlPanel); |
||||||
|
|
||||||
|
fillButton = new UIRadioButton(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Horizontal_Fill")); |
||||||
|
fillButton.setSelected(true); |
||||||
|
customButton = new UIRadioButton(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Custom_Width")); |
||||||
|
ActionListener listener = new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
widthSpinner.setVisible(customButton.isSelected()); |
||||||
|
} |
||||||
|
}; |
||||||
|
fillButton.addActionListener(listener); |
||||||
|
customButton.addActionListener(listener); |
||||||
|
ButtonGroup buttonGroup = new ButtonGroup(); |
||||||
|
buttonGroup.add(fillButton); |
||||||
|
buttonGroup.add(customButton); |
||||||
|
widthSpinner = new UISpinner(1, Integer.MAX_VALUE, 1, 200); |
||||||
|
widthSpinner.setPreferredSize(new Dimension(78, 20)); |
||||||
|
widthSpinner.setVisible(false); |
||||||
|
UILabel widthLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Width")); |
||||||
|
JPanel buttonsPane = createButtonPane(); |
||||||
|
buttonsPane.add(fillButton); |
||||||
|
buttonsPane.add(customButton); |
||||||
|
JPanel widthSetting = DesignerUtils.createLeftRightComponentsPane(widthLabel, buttonsPane, widthSpinner); |
||||||
|
centerPane.add(widthSetting); |
||||||
|
|
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Floating_Layer"))); |
||||||
|
UILabel floatLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Width")); |
||||||
|
floatFillButton = new UIRadioButton(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Horizontal_Fill")); |
||||||
|
floatFillButton.setSelected(true); |
||||||
|
floatSameWidthButton = new UIRadioButton(Toolkit.i18nText("Fine-Plugin-SimpleCombo_Follow_Control")); |
||||||
|
ButtonGroup floatButtonGroup = new ButtonGroup(); |
||||||
|
floatButtonGroup.add(floatFillButton); |
||||||
|
floatButtonGroup.add(floatSameWidthButton); |
||||||
|
JPanel floatButtonPane = createButtonPane(); |
||||||
|
floatButtonPane.add(floatFillButton); |
||||||
|
floatButtonPane.add(floatSameWidthButton); |
||||||
|
JPanel floatSetting = DesignerUtils.createLeftRightComponentsPane(floatLabel, floatFillButton, floatSameWidthButton); |
||||||
|
centerPane.add(floatSetting); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createButtonPane() { |
||||||
|
JPanel buttonPane = new JPanel(); |
||||||
|
buttonPane.setLayout(new GridLayout(0, 2, 14, 0)); |
||||||
|
buttonPane.setPreferredSize(new Dimension(220, 20)); |
||||||
|
return buttonPane; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileStyle ob) { |
||||||
|
SimpleComboStyle mobileStyle = (SimpleComboStyle) ob; |
||||||
|
custom.setSelectedIndex(mobileStyle.isCustom() ? 1 : 0); |
||||||
|
expandIconPane.populate(mobileStyle.getExpandIcon()); |
||||||
|
unexpandIconPane.populate(mobileStyle.getUnexpandIcon()); |
||||||
|
if (mobileStyle.getLabelFont() != null) { |
||||||
|
labelFontPane.populate(mobileStyle.getLabelFont()); |
||||||
|
} |
||||||
|
if (mobileStyle.getValueFont() != null) { |
||||||
|
valueFontPane.populate(mobileStyle.getValueFont()); |
||||||
|
} |
||||||
|
if (mobileStyle.getBackgroundColor() != null) { |
||||||
|
background.setSelectObject(mobileStyle.getBackgroundColor()); |
||||||
|
} |
||||||
|
if (mobileStyle.getBorderColor() != null) { |
||||||
|
borderColor.setSelectObject(mobileStyle.getBorderColor()); |
||||||
|
} |
||||||
|
borderType.setSelectedLineStyle(mobileStyle.getBorderType()); |
||||||
|
borderRadius.setValue(mobileStyle.getBorderRadius()); |
||||||
|
if (mobileStyle.isCustomWidth()) { |
||||||
|
fillButton.setSelected(false); |
||||||
|
customButton.setSelected(true); |
||||||
|
widthSpinner.setVisible(true); |
||||||
|
widthSpinner.setValue(mobileStyle.getWidth()); |
||||||
|
} else { |
||||||
|
fillButton.setSelected(true); |
||||||
|
customButton.setSelected(false); |
||||||
|
widthSpinner.setVisible(false); |
||||||
|
} |
||||||
|
if (mobileStyle.isFloatWidthFollow()) { |
||||||
|
floatFillButton.setSelected(false); |
||||||
|
floatSameWidthButton.setSelected(true); |
||||||
|
} else { |
||||||
|
floatFillButton.setSelected(true); |
||||||
|
floatSameWidthButton.setSelected(false); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileStyle updateBean() { |
||||||
|
SimpleComboStyle mobileStyle = (SimpleComboStyle) this.widget.getMobileStyle(); |
||||||
|
mobileStyle.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setExpandIcon(expandIconPane.update()); |
||||||
|
mobileStyle.setUnexpandIcon(unexpandIconPane.update()); |
||||||
|
mobileStyle.setLabelFont(labelFontPane.update()); |
||||||
|
mobileStyle.setValueFont(valueFontPane.update()); |
||||||
|
mobileStyle.setBackgroundColor(background.getSelectObject()); |
||||||
|
mobileStyle.setBorderColor(borderColor.getSelectObject()); |
||||||
|
mobileStyle.setBorderType(borderType.getSelectedLineStyle()); |
||||||
|
mobileStyle.setBorderRadius(borderRadius.getValue()); |
||||||
|
mobileStyle.setCustomWidth(customButton.isSelected()); |
||||||
|
mobileStyle.setWidth(widthSpinner.getValue()); |
||||||
|
mobileStyle.setFloatWidthFollow(floatSameWidthButton.isSelected()); |
||||||
|
return mobileStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,272 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.date; |
||||||
|
|
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.DesignerUtils; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.date.NavigationMobileStyle; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public class NavigationCustomDefinePane extends MobileStyleCustomDefinePane { |
||||||
|
|
||||||
|
private JPanel scrollPanel; |
||||||
|
private UIComboBox custom; |
||||||
|
private JPanel centerPane; |
||||||
|
|
||||||
|
private UIComboBox expand; |
||||||
|
private UIComboBox dateFontSize; |
||||||
|
private NewColorSelectBox buttonColorSelectBox; |
||||||
|
private NewColorSelectBox titleSplitLineColorSelectBox; |
||||||
|
private UICheckBox showTitleEditor; |
||||||
|
private NewColorSelectBox arrowColorSelectBox; |
||||||
|
private UIColorButton mainFontColor; |
||||||
|
private UIColorButton specialFontColor; |
||||||
|
|
||||||
|
private Color titleSplitLineDisableColor = new Color(234, 234, 234); |
||||||
|
private Color titleSplitLineColor; |
||||||
|
|
||||||
|
public NavigationCustomDefinePane(Widget widget) { |
||||||
|
super(widget); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createPreviewPane() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.addScrollPane(); |
||||||
|
this.addStyleSelectPane(); |
||||||
|
this.addConfigPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void addScrollPane() { |
||||||
|
scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}; |
||||||
|
this.add(basicScrollPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addStyleSelectPane() { |
||||||
|
JPanel stylePanel = new JPanel(); |
||||||
|
stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
UILabel buttonStyleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Style")); |
||||||
|
custom = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-Date_Style_Default"), Toolkit.i18nText("Fine-Plugin-Date_Style_Custom")}); |
||||||
|
custom.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
stylePanel.add(buttonStyleLabel); |
||||||
|
stylePanel.add(custom); |
||||||
|
scrollPanel.add(stylePanel, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
private void addConfigPane() { |
||||||
|
centerPane = createCenterPane(); |
||||||
|
centerPane.setVisible(false); |
||||||
|
addExpandPane(); |
||||||
|
addHeaderLinePane(); |
||||||
|
addButtonColorPane(); |
||||||
|
addFontColorPane(); |
||||||
|
addArrowPane(); |
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
custom.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
private void addExpandPane() { |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Status")); |
||||||
|
expand = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-Date_Status_Collapse"), Toolkit.i18nText("Fine-Plugin-Date_Status_Expand")}); |
||||||
|
expand.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
panel.add(label); |
||||||
|
panel.add(expand); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addButtonColorPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Button"))); |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Button_Color")); |
||||||
|
buttonColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
buttonColorSelectBox.setSelectObject(new Color(31, 173, 229)); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
panel.add(label); |
||||||
|
panel.add(buttonColorSelectBox); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addHeaderLinePane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Title_Line"))); |
||||||
|
|
||||||
|
UILabel titleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_SubTitle_Line")); |
||||||
|
showTitleEditor = DesignerUtils.createCheckBox(Toolkit.i18nText("Fine-Plugin-Date_Show_Title_Line"), true); |
||||||
|
JPanel headerPanel = new JPanel(); |
||||||
|
headerPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
headerPanel.add(titleLabel); |
||||||
|
headerPanel.add(showTitleEditor); |
||||||
|
centerPane.add(headerPanel); |
||||||
|
|
||||||
|
final UILabel splitLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Title_Split_Line_Color")); |
||||||
|
titleSplitLineColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
if(showTitleEditor.isSelected()) { |
||||||
|
titleSplitLineColor = titleSplitLineColorSelectBox.getSelectObject(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
titleSplitLineColorSelectBox.setSelectObject(new Color(234, 234, 234)); |
||||||
|
final JPanel splitLineColorPanel = new JPanel(); |
||||||
|
splitLineColorPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
splitLineColorPanel.add(splitLabel); |
||||||
|
splitLineColorPanel.add(titleSplitLineColorSelectBox); |
||||||
|
|
||||||
|
|
||||||
|
showTitleEditor.registerChangeListener(new UIObserverListener() { |
||||||
|
@Override |
||||||
|
public void doChange() { |
||||||
|
if(showTitleEditor.isSelected()) { |
||||||
|
titleSplitLineColorSelectBox.setSelectObject(titleSplitLineColor); |
||||||
|
} else { |
||||||
|
titleSplitLineColorSelectBox.setSelectObject(titleSplitLineDisableColor); |
||||||
|
} |
||||||
|
|
||||||
|
titleSplitLineColorSelectBox.setEnabled(showTitleEditor.isSelected()); |
||||||
|
splitLabel.setEnabled(showTitleEditor.isSelected()); |
||||||
|
} |
||||||
|
}); |
||||||
|
centerPane.add(splitLineColorPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addFontColorPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Font"))); |
||||||
|
UILabel mainLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Font_Main")); |
||||||
|
mainFontColor = new UIColorButton(); |
||||||
|
mainFontColor.setColor(new Color(51, 51, 51)); |
||||||
|
mainFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
|
||||||
|
UILabel specialLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Font_Special")); |
||||||
|
specialFontColor = new UIColorButton(); |
||||||
|
specialFontColor.setColor(new Color(255, 148, 84)); |
||||||
|
specialFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel panel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][] { |
||||||
|
{mainLabel, mainFontColor}, |
||||||
|
{specialLabel, specialFontColor} |
||||||
|
}, rowSize, columnSize, 10); |
||||||
|
|
||||||
|
centerPane.add(panel); |
||||||
|
|
||||||
|
|
||||||
|
UILabel fontSizeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Font_Size")); |
||||||
|
dateFontSize = new UIComboBox(new Integer[]{12, 13, 14, 15, 16, 17, 18}); |
||||||
|
dateFontSize.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
dateFontSize.setSelectedItem(14); |
||||||
|
JPanel fontPanel = new JPanel(); |
||||||
|
fontPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
fontPanel.add(fontSizeLabel); |
||||||
|
fontPanel.add(dateFontSize); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addArrowPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Arrow"))); |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Arrow_Color")); |
||||||
|
arrowColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
arrowColorSelectBox.setSelectObject(new Color(234, 234, 234)); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
panel.add(label); |
||||||
|
panel.add(arrowColorSelectBox ); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCenterPane() { |
||||||
|
return FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileStyle ob) { |
||||||
|
NavigationMobileStyle mobileStyle = (NavigationMobileStyle) ob; |
||||||
|
custom.setSelectedIndex(mobileStyle.isCustom() ? 1 : 0); |
||||||
|
expand.setSelectedIndex(mobileStyle.isExpand() ? 1 : 0); |
||||||
|
buttonColorSelectBox.setSelectObject(mobileStyle.getButtonBackgroundColor()); |
||||||
|
mainFontColor.setColor(mobileStyle.getMainFontColor()); |
||||||
|
specialFontColor.setColor(mobileStyle.getSpecialFontColor()); |
||||||
|
showTitleEditor.setSelected(mobileStyle.isShowTitleLine()); |
||||||
|
if(mobileStyle.isShowTitleLine()) { |
||||||
|
titleSplitLineColorSelectBox.setSelectObject(mobileStyle.getTitleSplitLineColor()); |
||||||
|
} else { |
||||||
|
titleSplitLineColorSelectBox.setSelectObject(titleSplitLineDisableColor); |
||||||
|
titleSplitLineColor = mobileStyle.getTitleSplitLineColor(); |
||||||
|
} |
||||||
|
dateFontSize.setSelectedItem(mobileStyle.getDateFontSize()); |
||||||
|
arrowColorSelectBox.setSelectObject(mobileStyle.getArrowColor()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileStyle updateBean() { |
||||||
|
NavigationMobileStyle mobileStyle = (NavigationMobileStyle)this.widget.getMobileStyle(); |
||||||
|
|
||||||
|
mobileStyle.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setExpand(expand.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setButtonBackgroundColor(buttonColorSelectBox.getSelectObject()); |
||||||
|
mobileStyle.setMainFontColor(mainFontColor.getColor()); |
||||||
|
mobileStyle.setSpecialFontColor(specialFontColor.getColor()); |
||||||
|
mobileStyle.setShowTitleLine(showTitleEditor.isSelected()); |
||||||
|
if(showTitleEditor.isSelected()) { |
||||||
|
mobileStyle.setTitleSplitLineColor(titleSplitLineColorSelectBox.getSelectObject()); |
||||||
|
} else { |
||||||
|
mobileStyle.setTitleSplitLineColor(titleSplitLineColor); |
||||||
|
} |
||||||
|
mobileStyle.setDateFontSize(Integer.parseInt(dateFontSize.getSelectedItem().toString())); |
||||||
|
mobileStyle.setArrowColor(arrowColorSelectBox.getSelectObject()); |
||||||
|
return mobileStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,230 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.date; |
||||||
|
|
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.DesignerUtils; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.date.SimpleMobileStyle; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public class SimpleCustomDefinePane extends MobileStyleCustomDefinePane { |
||||||
|
|
||||||
|
private JPanel scrollPanel; |
||||||
|
private UIComboBox custom; |
||||||
|
private JPanel centerPane; |
||||||
|
|
||||||
|
private UIComboBox expand; |
||||||
|
private UIComboBox dateFontSize; |
||||||
|
private NewColorSelectBox buttonColorSelectBox; |
||||||
|
private NewColorSelectBox titleSplitLineColorSelectBox; |
||||||
|
private NewColorSelectBox arrowColorSelectBox; |
||||||
|
private UIColorButton mainFontColor; |
||||||
|
private UIColorButton specialFontColor; |
||||||
|
|
||||||
|
public SimpleCustomDefinePane(Widget widget) { |
||||||
|
super(widget); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createPreviewPane() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void init() { |
||||||
|
|
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.addScrollPane(); |
||||||
|
this.addStyleSelectPane(); |
||||||
|
this.addConfigPane(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void addScrollPane() { |
||||||
|
scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}; |
||||||
|
this.add(basicScrollPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addStyleSelectPane() { |
||||||
|
JPanel stylePanel = new JPanel(); |
||||||
|
stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
UILabel buttonStyleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Style")); |
||||||
|
custom = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-Date_Style_Default"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-Date_Style_Custom")}); |
||||||
|
custom.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
stylePanel.add(buttonStyleLabel); |
||||||
|
stylePanel.add(custom); |
||||||
|
scrollPanel.add(stylePanel, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
private void addConfigPane() { |
||||||
|
centerPane = createCenterPane(); |
||||||
|
centerPane.setVisible(false); |
||||||
|
addExpandPane(); |
||||||
|
addHeaderLinePane(); |
||||||
|
addButtonColorPane(); |
||||||
|
addFontColorPane(); |
||||||
|
addArrowPane(); |
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
custom.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
private void addExpandPane() { |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Status")); |
||||||
|
expand = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-Date_Status_Collapse"), Toolkit.i18nText("Fine-Plugin-Date_Status_Expand")}); |
||||||
|
expand.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
panel.add(label); |
||||||
|
panel.add(expand); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addHeaderLinePane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Title_Line"))); |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Title_Split_Line_Color")); |
||||||
|
titleSplitLineColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
titleSplitLineColorSelectBox.setSelectObject(new Color(234, 234, 234)); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
panel.add(label); |
||||||
|
panel.add(titleSplitLineColorSelectBox); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addButtonColorPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Button"))); |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Button_Color")); |
||||||
|
buttonColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
buttonColorSelectBox.setSelectObject(new Color(31, 173, 229)); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
panel.add(label); |
||||||
|
panel.add(buttonColorSelectBox); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addFontColorPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Font"))); |
||||||
|
UILabel mainLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Font_Main")); |
||||||
|
mainFontColor = new UIColorButton(); |
||||||
|
mainFontColor.setColor(new Color(51, 51, 51)); |
||||||
|
mainFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
|
||||||
|
UILabel specialLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Font_Special")); |
||||||
|
specialFontColor = new UIColorButton(); |
||||||
|
specialFontColor.setColor(new Color(255, 148, 84)); |
||||||
|
specialFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel panel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][] { |
||||||
|
{mainLabel, mainFontColor}, |
||||||
|
{specialLabel, specialFontColor} |
||||||
|
}, rowSize, columnSize, 10); |
||||||
|
|
||||||
|
centerPane.add(panel); |
||||||
|
|
||||||
|
UILabel fontSizeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Font_Size")); |
||||||
|
dateFontSize = new UIComboBox(new Integer[]{12, 13, 14, 15, 16, 17, 18}); |
||||||
|
dateFontSize.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
dateFontSize.setSelectedItem(14); |
||||||
|
JPanel fontPanel = new JPanel(); |
||||||
|
fontPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
fontPanel.add(fontSizeLabel); |
||||||
|
fontPanel.add(dateFontSize); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addArrowPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-Date_Arrow"))); |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-Date_Arrow_Color")); |
||||||
|
arrowColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
arrowColorSelectBox.setSelectObject(new Color(234, 234, 234)); |
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
panel.add(label); |
||||||
|
panel.add(arrowColorSelectBox ); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCenterPane() { |
||||||
|
return FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileStyle ob) { |
||||||
|
SimpleMobileStyle mobileStyle = (SimpleMobileStyle) ob; |
||||||
|
custom.setSelectedIndex(mobileStyle.isCustom() ? 1 : 0); |
||||||
|
expand.setSelectedIndex(mobileStyle.isExpand() ? 1 : 0); |
||||||
|
buttonColorSelectBox.setSelectObject(mobileStyle.getButtonBackgroundColor()); |
||||||
|
mainFontColor.setColor(mobileStyle.getMainFontColor()); |
||||||
|
specialFontColor.setColor(mobileStyle.getSpecialFontColor()); |
||||||
|
titleSplitLineColorSelectBox.setSelectObject(mobileStyle.getTitleSplitLineColor()); |
||||||
|
dateFontSize.setSelectedItem(mobileStyle.getDateFontSize()); |
||||||
|
arrowColorSelectBox.setSelectObject(mobileStyle.getArrowColor()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileStyle updateBean() { |
||||||
|
SimpleMobileStyle mobileStyle = (SimpleMobileStyle)this.widget.getMobileStyle(); |
||||||
|
|
||||||
|
mobileStyle.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setExpand(expand.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setButtonBackgroundColor(buttonColorSelectBox.getSelectObject()); |
||||||
|
mobileStyle.setMainFontColor(mainFontColor.getColor()); |
||||||
|
mobileStyle.setSpecialFontColor(specialFontColor.getColor()); |
||||||
|
mobileStyle.setTitleSplitLineColor(titleSplitLineColorSelectBox.getSelectObject()); |
||||||
|
mobileStyle.setDateFontSize(Integer.parseInt(dateFontSize.getSelectedItem().toString())); |
||||||
|
mobileStyle.setArrowColor(arrowColorSelectBox.getSelectObject()); |
||||||
|
return mobileStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,267 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.date; |
||||||
|
|
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.DesignerUtils; |
||||||
|
import com.fr.design.mainframe.mobile.utils.FontConfigPane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.IconConfigPane; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.date.ControlStyle; |
||||||
|
import com.fr.form.ui.mobile.date.SimpleDateMobileStyle; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
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.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public class SimpleDateCustomDefinePane extends MobileStyleCustomDefinePane { |
||||||
|
|
||||||
|
private JPanel scrollPanel; |
||||||
|
private UIComboBox custom; |
||||||
|
private JPanel centerPane; |
||||||
|
private FontConfigPane labelFontConfigPane; |
||||||
|
private FontConfigPane controlValueConfigPane; |
||||||
|
private NewColorSelectBox controlBackground; |
||||||
|
private LineComboBox controlBorder; |
||||||
|
private NewColorSelectBox controlBorderColor; |
||||||
|
private UISpinner controlWidgetRadius; |
||||||
|
private UISpinner widthSpinner; |
||||||
|
private UIRadioButton fillButton; |
||||||
|
private UIRadioButton customButton; |
||||||
|
private IconConfigPane iconConfigPane; |
||||||
|
|
||||||
|
public SimpleDateCustomDefinePane(Widget widget) { |
||||||
|
super(widget); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createPreviewPane() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.addScrollPane(); |
||||||
|
this.addStyleSelectPane(); |
||||||
|
this.addConfigPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void addScrollPane() { |
||||||
|
scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
this.add(new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void addStyleSelectPane() { |
||||||
|
JPanel stylePanel = new JPanel(); |
||||||
|
stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
UILabel buttonStyleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleDate_Control_Style")); |
||||||
|
custom = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-SimpleDate_Style_Default"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleDate_Style_Custom")}); |
||||||
|
custom.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
stylePanel.add(buttonStyleLabel); |
||||||
|
stylePanel.add(custom); |
||||||
|
scrollPanel.add(stylePanel, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
private void addConfigPane() { |
||||||
|
centerPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
centerPane.setVisible(false); |
||||||
|
|
||||||
|
addFontConfigPane(); |
||||||
|
addIconConfigPane(); |
||||||
|
addControlConfigPane(); |
||||||
|
|
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
private void addControlConfigPane() { |
||||||
|
|
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-SimpleDate_Control_Region"))); |
||||||
|
controlBackground = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
controlBorder = new LineComboBox(DesignerUtils.BORDER_LINE_STYLE_ARRAY); |
||||||
|
controlBorder.setSelectedLineStyle(Constants.LINE_THIN); |
||||||
|
controlBorder.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
controlBorderColor = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
controlWidgetRadius = new UISpinner(0, Integer.MAX_VALUE, 1, 2); |
||||||
|
controlWidgetRadius.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
|
||||||
|
JComponent[] controlComponents = new JComponent[]{controlBackground, controlBorder, controlBorderColor, controlWidgetRadius}; |
||||||
|
String[] comboBoxNames = new String[]{ |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleDate_Control_Background"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleDate_Control_Border"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleDate_Border_Color"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleDate_Radius") |
||||||
|
}; |
||||||
|
|
||||||
|
Component[][] components = new Component[4][]; |
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) { |
||||||
|
UILabel label = DesignerUtils.createConfigLabel(comboBoxNames[i]); |
||||||
|
components[i] = new Component[]{label, controlComponents[i]}; |
||||||
|
} |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p, p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel controlPanel = TableLayoutHelper.createCommonTableLayoutPane(components, rowSize, columnSize, 10); |
||||||
|
centerPane.add(controlPanel); |
||||||
|
|
||||||
|
this.fillButton = new UIRadioButton(Toolkit.i18nText("Fine-Plugin-SimpleDate_Horizontal_Fill")); |
||||||
|
this.customButton = new UIRadioButton(Toolkit.i18nText("Fine-Plugin-SimpleDate_Width_Custom")); |
||||||
|
|
||||||
|
ButtonGroup buttonGroup = new ButtonGroup(); |
||||||
|
buttonGroup.add(fillButton); |
||||||
|
buttonGroup.add(customButton); |
||||||
|
|
||||||
|
JPanel panel = new JPanel(); |
||||||
|
panel.add(fillButton); |
||||||
|
panel.add(customButton); |
||||||
|
panel.setLayout(new GridLayout(0, 2, 14, 0)); |
||||||
|
panel.setPreferredSize(new Dimension(174, 20)); |
||||||
|
fillButton.setSelected(true); |
||||||
|
|
||||||
|
ActionListener listener = new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
widthSpinner.setVisible(customButton.isSelected()); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
fillButton.addActionListener(listener); |
||||||
|
customButton.addActionListener(listener); |
||||||
|
|
||||||
|
UILabel label = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleDate_Width")); |
||||||
|
widthSpinner = new UISpinner(1, Integer.MAX_VALUE, 1, 200); |
||||||
|
widthSpinner.setPreferredSize(new Dimension(78, 20)); |
||||||
|
widthSpinner.setVisible(false); |
||||||
|
centerPane.add(DesignerUtils.createLeftRightComponentsPane(label, panel, widthSpinner)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void addFontConfigPane() { |
||||||
|
|
||||||
|
String[] titleSplitLineNames = new String[]{ |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleDate_Label_Name"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-SimpleDate_Control_Value") |
||||||
|
}; |
||||||
|
labelFontConfigPane = new FontConfigPane(); |
||||||
|
controlValueConfigPane = new FontConfigPane(); |
||||||
|
FontConfigPane[] fontConfigPanes = new FontConfigPane[]{labelFontConfigPane, controlValueConfigPane}; |
||||||
|
for (int i = 0; i < 2; i++) { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(titleSplitLineNames[i])); |
||||||
|
UILabel fontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-SimpleDate_Character")); |
||||||
|
JPanel fontPanel = DesignerUtils.createLeftRightComponentsPane(fontLabel, fontConfigPanes[i]); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void addIconConfigPane() { |
||||||
|
|
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-SimpleDate_Icon"))); |
||||||
|
UILabel tipLabel = new UILabel(); |
||||||
|
tipLabel.setFont(new Font(tipLabel.getName(), Font.PLAIN, 10)); |
||||||
|
tipLabel.setSize(470, 40); |
||||||
|
tipLabel.setText(Toolkit.i18nText("Fine-Plugin-SimpleDate_Tip")); |
||||||
|
tipLabel.setForeground(Color.decode("#9B9B9B")); |
||||||
|
centerPane.add(tipLabel); |
||||||
|
|
||||||
|
JPanel panel = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
|
||||||
|
|
||||||
|
iconConfigPane = new IconConfigPane(); |
||||||
|
centerPane.add(iconConfigPane); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileStyle mobileStyle) { |
||||||
|
SimpleDateMobileStyle simpleDateMobileStyle = (SimpleDateMobileStyle) mobileStyle; |
||||||
|
custom.setSelectedIndex(simpleDateMobileStyle.isCustom() ? 1 : 0); |
||||||
|
iconConfigPane.populate(simpleDateMobileStyle.getIconValue()); |
||||||
|
labelFontConfigPane.populate(simpleDateMobileStyle.getLabelFontStyle()); |
||||||
|
controlValueConfigPane.populate(simpleDateMobileStyle.getValueFontStyle()); |
||||||
|
|
||||||
|
ControlStyle controlStyle = simpleDateMobileStyle.getControlStyle(); |
||||||
|
|
||||||
|
if (controlStyle != null) { |
||||||
|
controlBackground.setSelectObject(controlStyle.getBackground()); |
||||||
|
controlBorderColor.setSelectObject(controlStyle.getBorderColor()); |
||||||
|
controlBorder.setSelectedLineStyle(controlStyle.getBorderType()); |
||||||
|
controlWidgetRadius.setValue(controlStyle.getBorderRadius()); |
||||||
|
if (controlStyle.isCustomWidth()) { |
||||||
|
widthSpinner.setVisible(true); |
||||||
|
widthSpinner.setValue(controlStyle.getWidth()); |
||||||
|
customButton.setSelected(true); |
||||||
|
fillButton.setSelected(false); |
||||||
|
} else { |
||||||
|
widthSpinner.setVisible(false); |
||||||
|
customButton.setSelected(false); |
||||||
|
fillButton.setSelected(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileStyle updateBean() { |
||||||
|
SimpleDateMobileStyle simpleDateMobileStyle = (SimpleDateMobileStyle) this.widget.getMobileStyle(); |
||||||
|
simpleDateMobileStyle.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
simpleDateMobileStyle.setIconValue(iconConfigPane.update()); |
||||||
|
simpleDateMobileStyle.setLabelFontStyle(labelFontConfigPane.update()); |
||||||
|
simpleDateMobileStyle.setValueFontStyle(controlValueConfigPane.update()); |
||||||
|
ControlStyle controlStyle = new ControlStyle(); |
||||||
|
controlStyle.setBackground(controlBackground.getSelectObject()); |
||||||
|
controlStyle.setBorderColor(controlBorderColor.getSelectObject()); |
||||||
|
controlStyle.setBorderType(controlBorder.getSelectedLineStyle()); |
||||||
|
controlStyle.setBorderRadius(controlWidgetRadius.getValue()); |
||||||
|
controlStyle.setCustomWidth(customButton.isSelected()); |
||||||
|
controlStyle.setWidth(widthSpinner.getValue()); |
||||||
|
simpleDateMobileStyle.setControlStyle(controlStyle); |
||||||
|
return simpleDateMobileStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,310 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.radiogroup; |
||||||
|
|
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.DesignerUtils; |
||||||
|
import com.fr.design.mainframe.mobile.utils.FontConfigPane; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.radiogroup.CapsuleMobileStyle; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { |
||||||
|
|
||||||
|
private JPanel scrollPanel; |
||||||
|
private UIComboBox custom; |
||||||
|
private JPanel centerPane; |
||||||
|
|
||||||
|
private UISpinner leftSpinner; |
||||||
|
private UISpinner rightSpinner; |
||||||
|
private UISpinner topSpinner; |
||||||
|
private UISpinner bottomSpinner; |
||||||
|
|
||||||
|
private JRadioButton leftAlignRadioButton; |
||||||
|
private JRadioButton centerAlignRadioButton; |
||||||
|
|
||||||
|
private NewColorSelectBox initialColorSelectBox; |
||||||
|
private NewColorSelectBox selectedColorSelectBox; |
||||||
|
|
||||||
|
private LineComboBox borderLineCombo; |
||||||
|
private NewColorSelectBox initialBorderColor; |
||||||
|
private NewColorSelectBox selectedBorderColor; |
||||||
|
private UISpinner borderRadiusSpinner; |
||||||
|
|
||||||
|
private FontConfigPane initialFontConfPane; |
||||||
|
private UIColorButton selectedFontColor; |
||||||
|
|
||||||
|
|
||||||
|
public CapsuleCustomDefinePane(Widget widget) { |
||||||
|
super(widget); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createPreviewPane() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.addScrollPane(); |
||||||
|
this.addStyleSelectPane(); |
||||||
|
this.addConfigPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void addScrollPane() { |
||||||
|
scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}; |
||||||
|
this.add(basicScrollPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addStyleSelectPane() { |
||||||
|
JPanel stylePanel = new JPanel(); |
||||||
|
stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
UILabel buttonStyleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Style")); |
||||||
|
custom = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-RadioGroup_Style_Default"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-RadioGroup_Style_Custom")}); |
||||||
|
custom.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
stylePanel.add(buttonStyleLabel); |
||||||
|
stylePanel.add(custom); |
||||||
|
scrollPanel.add(stylePanel, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
private void addConfigPane() { |
||||||
|
centerPane = createCenterPane(); |
||||||
|
centerPane.setVisible(false); |
||||||
|
|
||||||
|
addPaddingPane(); |
||||||
|
addBackgroundPane(); |
||||||
|
addBorderPane(); |
||||||
|
addFontPane(); |
||||||
|
|
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
custom.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCenterPane() { |
||||||
|
return FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
} |
||||||
|
|
||||||
|
private void addPaddingPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout"))); |
||||||
|
|
||||||
|
UILabel paddingHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Button_Padding")); |
||||||
|
UILabel emptyHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("")); |
||||||
|
UILabel buttonAlignHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment")); |
||||||
|
|
||||||
|
UILabel leftLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Left")); |
||||||
|
leftSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultHorizontalPadding); |
||||||
|
|
||||||
|
UILabel rightLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Right")); |
||||||
|
rightSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultHorizontalPadding); |
||||||
|
|
||||||
|
UILabel topLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Top")); |
||||||
|
topSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); |
||||||
|
|
||||||
|
UILabel bottomLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Bottom")); |
||||||
|
bottomSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); |
||||||
|
|
||||||
|
leftAlignRadioButton = new JRadioButton(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Left"), true); |
||||||
|
centerAlignRadioButton = new JRadioButton(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Center"), false); |
||||||
|
|
||||||
|
JPanel leftSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftLabel, leftSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel rightSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{rightLabel, rightSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel topSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topLabel, topSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel bottomSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{bottomLabel, bottomSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
JPanel vPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topSpinnerPanel, bottomSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
JPanel hPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftSpinnerPanel, rightSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
JPanel layoutPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftAlignRadioButton, centerAlignRadioButton}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
ButtonGroup layoutRadioButtonGroup = new ButtonGroup(); |
||||||
|
layoutRadioButtonGroup.add(leftAlignRadioButton); |
||||||
|
layoutRadioButtonGroup.add(centerAlignRadioButton); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel paddingPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ |
||||||
|
{paddingHintLabel, vPaddingSpinnerPanel}, |
||||||
|
{emptyHintLabel, hPaddingSpinnerPanel}, |
||||||
|
{buttonAlignHintLabel, layoutPanel}, |
||||||
|
}, rowSize, columnSize, 10); |
||||||
|
centerPane.add(paddingPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addBackgroundPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Background"))); |
||||||
|
|
||||||
|
UILabel initialColorLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Background_Init")); |
||||||
|
initialColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
initialColorSelectBox.setSelectObject(new Color(244, 244, 244)); |
||||||
|
JPanel initialColorSelectPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initialColorLabel, initialColorSelectBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(initialColorSelectPane); |
||||||
|
|
||||||
|
UILabel selectedColorLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Background_Select")); |
||||||
|
selectedColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
selectedColorSelectBox.setSelectObject(new Color(31, 173, 229)); |
||||||
|
JPanel selectedColorSelectPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectedColorLabel, selectedColorSelectBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(selectedColorSelectPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addBorderPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border"))); |
||||||
|
|
||||||
|
UILabel borderTypeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border_Line")); |
||||||
|
borderLineCombo = new LineComboBox(DesignerUtils.BORDER_LINE_STYLE_ARRAY); |
||||||
|
borderLineCombo.setSelectedLineStyle(Constants.LINE_THIN); |
||||||
|
|
||||||
|
UILabel initialColorLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border_Init_Color")); |
||||||
|
initialBorderColor = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
initialBorderColor.setSelectObject(new Color(244, 244, 244)); |
||||||
|
|
||||||
|
UILabel selectedColorLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border_Select_Color")); |
||||||
|
selectedBorderColor = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
selectedBorderColor.setSelectObject(new Color(31, 173, 229)); |
||||||
|
|
||||||
|
UILabel radiusLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border_Radius")); |
||||||
|
borderRadiusSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 20); |
||||||
|
borderRadiusSpinner.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p, p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel borderPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ |
||||||
|
{borderTypeLabel, borderLineCombo}, |
||||||
|
{initialColorLabel, initialBorderColor}, |
||||||
|
{selectedColorLabel, selectedBorderColor}, |
||||||
|
{radiusLabel, borderRadiusSpinner} |
||||||
|
}, rowSize, columnSize, 10); |
||||||
|
|
||||||
|
centerPane.add(borderPanel); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void addFontPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font"))); |
||||||
|
|
||||||
|
UILabel initialFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_init")); |
||||||
|
initialFontConfPane = new FontConfigPane(); |
||||||
|
initialFontConfPane.setFontColor(new Color(204, 204, 204)); |
||||||
|
JPanel fontPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initialFontLabel, initialFontConfPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
UILabel selectedFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_Select")); |
||||||
|
selectedFontColor = new UIColorButton(); |
||||||
|
selectedFontColor.setColor(Color.WHITE); |
||||||
|
selectedFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
JPanel selectFontColorPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectedFontLabel, selectedFontColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(selectFontColorPanel); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileStyle ob) { |
||||||
|
CapsuleMobileStyle mobileStyle = (CapsuleMobileStyle) ob; |
||||||
|
custom.setSelectedIndex(mobileStyle.isCustom() ? 1 : 0); |
||||||
|
leftSpinner.setValue(mobileStyle.getLeftPadding()); |
||||||
|
rightSpinner.setValue(mobileStyle.getRightPadding()); |
||||||
|
topSpinner.setValue(mobileStyle.getTopPadding()); |
||||||
|
bottomSpinner.setValue(mobileStyle.getBottomPadding()); |
||||||
|
leftAlignRadioButton.setSelected(mobileStyle.getButtonAlign() == DesignerUtils.kAlignLeft); |
||||||
|
centerAlignRadioButton.setSelected(mobileStyle.getButtonAlign() == DesignerUtils.kAlignCenter); |
||||||
|
initialColorSelectBox.setSelectObject(mobileStyle.getInitialBackgroundColor()); |
||||||
|
selectedColorSelectBox.setSelectObject(mobileStyle.getSelectedBackgroundColor()); |
||||||
|
borderLineCombo.setSelectedLineStyle(mobileStyle.getBorderType()); |
||||||
|
initialBorderColor.setSelectObject(mobileStyle.getInitialBorderColor()); |
||||||
|
selectedBorderColor.setSelectObject(mobileStyle.getSelectedBorderColor()); |
||||||
|
borderRadiusSpinner.setValue(mobileStyle.getBorderRadius()); |
||||||
|
if (mobileStyle.getInitialFont() != null) { |
||||||
|
initialFontConfPane.populate(mobileStyle.getInitialFont()); |
||||||
|
} |
||||||
|
if (mobileStyle.getSelectedFont() != null) { |
||||||
|
selectedFontColor.setColor(mobileStyle.getSelectedFont().getForeground()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileStyle updateBean() { |
||||||
|
CapsuleMobileStyle mobileStyle = (CapsuleMobileStyle) this.widget.getMobileStyle(); |
||||||
|
|
||||||
|
mobileStyle.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setLeftPadding(leftSpinner.getValue()); |
||||||
|
mobileStyle.setRightPadding(rightSpinner.getValue()); |
||||||
|
mobileStyle.setTopPadding(topSpinner.getValue()); |
||||||
|
mobileStyle.setBottomPadding(bottomSpinner.getValue()); |
||||||
|
mobileStyle.setButtonAlign(leftAlignRadioButton.isSelected() ? DesignerUtils.kAlignLeft : DesignerUtils.kAlignCenter); |
||||||
|
mobileStyle.setInitialBackgroundColor(initialColorSelectBox.getSelectObject()); |
||||||
|
mobileStyle.setSelectedBackgroundColor(selectedColorSelectBox.getSelectObject()); |
||||||
|
mobileStyle.setBorderType(borderLineCombo.getSelectedLineStyle()); |
||||||
|
mobileStyle.setInitialBorderColor(initialBorderColor.getSelectObject()); |
||||||
|
mobileStyle.setSelectedBorderColor(selectedBorderColor.getSelectObject()); |
||||||
|
mobileStyle.setBorderRadius(borderRadiusSpinner.getValue()); |
||||||
|
|
||||||
|
FRFont initialFont = initialFontConfPane.updateFont(null, null, null); |
||||||
|
FRFont selectedFont = initialFontConfPane.updateFont(selectedFontColor.getColor(), null, null); |
||||||
|
|
||||||
|
mobileStyle.setInitialFont(initialFont); |
||||||
|
mobileStyle.setSelectedFont(selectedFont); |
||||||
|
|
||||||
|
return mobileStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,195 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.radiogroup; |
||||||
|
|
||||||
|
import com.fr.base.IconManager; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.utils.DrawRoutines; |
||||||
|
import com.fr.design.web.CustomIconPane; |
||||||
|
import com.fr.form.ui.WidgetInfoConfig; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.plaf.basic.BasicButtonUI; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
public class IconConfigPane extends JPanel { |
||||||
|
private UIButton editIconButton; |
||||||
|
private UIButton deleteIconButton; |
||||||
|
private String curIconName; |
||||||
|
private IconButton selectIconButton; |
||||||
|
private ArrayList<IconButton> iconButtons = new ArrayList<IconButton>(); |
||||||
|
|
||||||
|
public IconConfigPane(int count) { |
||||||
|
initComp(count); |
||||||
|
} |
||||||
|
|
||||||
|
public void initComp(int count) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
||||||
|
editIconButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Edit")); |
||||||
|
editIconButton.setFont(FRFont.getInstance("Helvetica", Font.PLAIN, 12, Color.decode("#3A383A"))); |
||||||
|
editIconButton.setPreferredSize(new Dimension(62, 20)); |
||||||
|
panel.add(editIconButton); |
||||||
|
editIconButton.addActionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
final CustomIconPane cip = new CustomIconPane(){ |
||||||
|
protected String createDescriptionText(){ |
||||||
|
return Toolkit.i18nText("Fine-Design_Mobile_Custom_Icon_Message"); |
||||||
|
} |
||||||
|
}; |
||||||
|
BasicDialog editDialog = cip.showWindow(DesignerContext.getDesignerFrame()); |
||||||
|
editDialog.addDialogActionListener(new DialogActionAdapter() { |
||||||
|
@Override |
||||||
|
public void doOk() { |
||||||
|
curIconName = cip.update(); |
||||||
|
setShowIconImage(); |
||||||
|
IconConfigPane.this.repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
editDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
editIconButton.setEnabled(false); |
||||||
|
|
||||||
|
deleteIconButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Delete")); |
||||||
|
deleteIconButton.setFont(FRFont.getInstance("Helvetica", Font.PLAIN, 12, Color.decode("#3A383A"))); |
||||||
|
deleteIconButton.setPreferredSize(new Dimension(62, 20)); |
||||||
|
panel.add(deleteIconButton); |
||||||
|
deleteIconButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
selectIconButton.setIconName(StringUtils.EMPTY); |
||||||
|
IconConfigPane.this.repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
deleteIconButton.setEnabled(false); |
||||||
|
|
||||||
|
|
||||||
|
this.add(panel, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
for (int i = 0; i < count; i++) { |
||||||
|
IconButton iconButton = new IconButton(""); |
||||||
|
northPane.add(iconButton); |
||||||
|
iconButtons.add(iconButton); |
||||||
|
} |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
public void setShowIconImage() { |
||||||
|
selectIconButton.setIconName(curIconName); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(ArrayList<String> iconArr) { |
||||||
|
for (int i = 0; i < iconButtons.size(); i++) { |
||||||
|
iconButtons.get(i).setIconName(iconArr.get(i)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public ArrayList<String> update() { |
||||||
|
ArrayList<String> iconNames = new ArrayList<String>(); |
||||||
|
for (int i = 0; i < iconButtons.size(); i++) { |
||||||
|
iconNames.add(iconButtons.get(i).getIconName()); |
||||||
|
} |
||||||
|
return iconNames; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private class IconButton extends JToggleButton implements ActionListener { |
||||||
|
private String iconName; |
||||||
|
private Image iconImage = null; |
||||||
|
private static final int ICON_BUTTON_SIZE = 20; |
||||||
|
private static final int ICON_X = 2; |
||||||
|
private static final int ICON_Y = 2; |
||||||
|
|
||||||
|
public IconButton(String name) { |
||||||
|
this.iconName = name; |
||||||
|
this.addActionListener(this); |
||||||
|
this.setBackground(Color.WHITE); |
||||||
|
this.setCursor(new Cursor(Cursor.HAND_CURSOR)); |
||||||
|
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(name); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateUI() { |
||||||
|
setUI(new BasicButtonUI() { |
||||||
|
public void paint(Graphics g, JComponent c) { |
||||||
|
super.paint(g, c); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected void paintBorder(Graphics g) { |
||||||
|
super.paintBorder(g); |
||||||
|
if (ComparatorUtils.equals(this, selectIconButton)) { |
||||||
|
DrawRoutines.drawRoundedBorder( |
||||||
|
g, Color.decode("#419BF9"), 0, 0, 20, 20); |
||||||
|
} else { |
||||||
|
DrawRoutines.drawRoundedBorder( |
||||||
|
g, Color.decode("#D9DADD"), 0, 0, 20, 20); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public String getIconName() { |
||||||
|
return iconName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIconName(String iconName) { |
||||||
|
this.iconName = iconName; |
||||||
|
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(iconName); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paintComponent(Graphics g) { |
||||||
|
super.paintComponent(g); |
||||||
|
Graphics2D g2d = (Graphics2D) g; |
||||||
|
// carl:这里缩放显示 16 × 16
|
||||||
|
if (iconImage != null) { |
||||||
|
g2d.drawImage(iconImage, ICON_X, ICON_Y, IconManager.DEFAULT_ICONWIDTH, IconManager.DEFAULT_ICONHEIGHT, null); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
return new Dimension(ICON_BUTTON_SIZE, ICON_BUTTON_SIZE); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
selectIconButton = this; |
||||||
|
editIconButton.setEnabled(true); |
||||||
|
if(StringUtils.isNotEmpty(this.iconName)) { |
||||||
|
deleteIconButton.setEnabled(true); |
||||||
|
} else { |
||||||
|
deleteIconButton.setEnabled(false); |
||||||
|
} |
||||||
|
IconConfigPane.this.repaint();// repaint
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
this.changeListener = changeListener; |
||||||
|
} |
||||||
|
|
||||||
|
private void fireChagneListener() { |
||||||
|
if (this.changeListener != null) { |
||||||
|
ChangeEvent evt = new ChangeEvent(this); |
||||||
|
this.changeListener.stateChanged(evt); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,242 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.radiogroup; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.ibutton.UIToggleButton; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.DesignerUtils; |
||||||
|
import com.fr.design.mainframe.mobile.utils.FontConfigPane; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.radiogroup.ImageMobileStyle; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
|
||||||
|
public class ImageCustomDefinePane extends MobileStyleCustomDefinePane { |
||||||
|
|
||||||
|
private static final Icon[] BOLD_ICONS = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold_white.png")}; |
||||||
|
|
||||||
|
private JPanel scrollPanel; |
||||||
|
private UIComboBox custom; |
||||||
|
private JPanel centerPane; |
||||||
|
|
||||||
|
private UISpinner leftSpinner; |
||||||
|
private UISpinner rightSpinner; |
||||||
|
private UISpinner topSpinner; |
||||||
|
private UISpinner bottomSpinner; |
||||||
|
|
||||||
|
private IconConfigPane initialIconConfigPane; |
||||||
|
private IconConfigPane selectedIconConfigPane; |
||||||
|
|
||||||
|
private FontConfigPane initialFontConfPane; |
||||||
|
private UIColorButton selectedFontColor; |
||||||
|
private UIToggleButton selectedFontBold; |
||||||
|
|
||||||
|
public ImageCustomDefinePane(Widget widget) { |
||||||
|
super(widget); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createPreviewPane() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.addScrollPane(); |
||||||
|
this.addStyleSelectPane(); |
||||||
|
this.addConfigPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void addScrollPane() { |
||||||
|
scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}; |
||||||
|
this.add(basicScrollPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addStyleSelectPane() { |
||||||
|
JPanel stylePanel = new JPanel(); |
||||||
|
stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
UILabel buttonStyleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Style")); |
||||||
|
custom = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-RadioGroup_Style_Default"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-RadioGroup_Style_Custom")}); |
||||||
|
custom.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
stylePanel.add(buttonStyleLabel); |
||||||
|
stylePanel.add(custom); |
||||||
|
scrollPanel.add(stylePanel, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
private void addConfigPane() { |
||||||
|
centerPane = createCenterPane(); |
||||||
|
centerPane.setVisible(false); |
||||||
|
|
||||||
|
addPaddingPane(); |
||||||
|
|
||||||
|
addIconPane(); |
||||||
|
|
||||||
|
addFontPane(); |
||||||
|
|
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
custom.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCenterPane() { |
||||||
|
return FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
} |
||||||
|
|
||||||
|
private void addPaddingPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout"))); |
||||||
|
|
||||||
|
UILabel paddingHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Button_Padding")); |
||||||
|
UILabel emptyHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("")); |
||||||
|
|
||||||
|
UILabel leftLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Left")); |
||||||
|
leftSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultHorizontalPadding); |
||||||
|
|
||||||
|
UILabel rightLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Right")); |
||||||
|
rightSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultHorizontalPadding); |
||||||
|
|
||||||
|
UILabel topLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Top")); |
||||||
|
topSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); |
||||||
|
|
||||||
|
UILabel bottomLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Bottom")); |
||||||
|
bottomSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); |
||||||
|
|
||||||
|
JPanel leftSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftLabel, leftSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel rightSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{rightLabel, rightSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel topSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topLabel, topSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel bottomSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{bottomLabel, bottomSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
JPanel vPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topSpinnerPanel, bottomSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel hPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftSpinnerPanel, rightSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel paddingPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ |
||||||
|
{paddingHintLabel, vPaddingSpinnerPanel}, |
||||||
|
{emptyHintLabel, hPaddingSpinnerPanel}, |
||||||
|
}, rowSize, columnSize, 10); |
||||||
|
|
||||||
|
centerPane.add(paddingPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addIconPane() { |
||||||
|
|
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Icon"))); |
||||||
|
|
||||||
|
UILabel initialLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Icon_Init")); |
||||||
|
UILabel selectedLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Icon_Select")); |
||||||
|
|
||||||
|
initialIconConfigPane = new IconConfigPane(8); |
||||||
|
selectedIconConfigPane = new IconConfigPane(8); |
||||||
|
|
||||||
|
JPanel container = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 5); |
||||||
|
|
||||||
|
JPanel initialPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
initialPane.add(initialLabel); |
||||||
|
initialPane.add(initialIconConfigPane); |
||||||
|
container.add(initialPane); |
||||||
|
|
||||||
|
JPanel selectedPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
||||||
|
selectedPane.add(selectedLabel); |
||||||
|
selectedPane.add(selectedIconConfigPane); |
||||||
|
container.add(selectedPane); |
||||||
|
|
||||||
|
centerPane.add(container); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void addFontPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font"))); |
||||||
|
|
||||||
|
UILabel initialFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_init")); |
||||||
|
initialFontConfPane = new FontConfigPane(); |
||||||
|
initialFontConfPane.setFontColor(new Color(204, 204, 204)); |
||||||
|
JPanel fontPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initialFontLabel, initialFontConfPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
UILabel selectedFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_Select")); |
||||||
|
selectedFontColor = new UIColorButton(); |
||||||
|
selectedFontColor.setColor(new Color(31, 173, 229)); |
||||||
|
selectedFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
selectedFontBold = new UIToggleButton(BOLD_ICONS, true); |
||||||
|
selectedFontBold.setPreferredSize(new Dimension(20, 20)); |
||||||
|
JPanel selectFontColorPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectedFontLabel, selectedFontColor, selectedFontBold}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(selectFontColorPanel); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileStyle ob) { |
||||||
|
ImageMobileStyle mobileStyle = (ImageMobileStyle) ob; |
||||||
|
custom.setSelectedIndex(mobileStyle.isCustom() ? 1 : 0); |
||||||
|
leftSpinner.setValue(mobileStyle.getLeftPadding()); |
||||||
|
rightSpinner.setValue(mobileStyle.getRightPadding()); |
||||||
|
topSpinner.setValue(mobileStyle.getTopPadding()); |
||||||
|
bottomSpinner.setValue(mobileStyle.getBottomPadding()); |
||||||
|
initialIconConfigPane.populate(new ArrayList<>(Arrays.asList(mobileStyle.getInitialIconNames()))); |
||||||
|
selectedIconConfigPane.populate(new ArrayList<>(Arrays.asList(mobileStyle.getSelectedIconNames()))); |
||||||
|
if(mobileStyle.getInitialFont() != null) { |
||||||
|
initialFontConfPane.populate(mobileStyle.getInitialFont()); |
||||||
|
} |
||||||
|
if(mobileStyle.getSelectedFont() != null) { |
||||||
|
selectedFontColor.setColor(mobileStyle.getSelectedFont().getForeground()); |
||||||
|
selectedFontBold.setSelected(mobileStyle.getSelectedFont().isBold()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileStyle updateBean() { |
||||||
|
ImageMobileStyle mobileStyle = (ImageMobileStyle)this.widget.getMobileStyle(); |
||||||
|
mobileStyle.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setLeftPadding(leftSpinner.getValue()); |
||||||
|
mobileStyle.setRightPadding(rightSpinner.getValue()); |
||||||
|
mobileStyle.setTopPadding(topSpinner.getValue()); |
||||||
|
mobileStyle.setBottomPadding(bottomSpinner.getValue()); |
||||||
|
ArrayList<String> initialIconNamesList = initialIconConfigPane.update(); |
||||||
|
ArrayList<String> selectedIconNamesList = selectedIconConfigPane.update(); |
||||||
|
mobileStyle.setInitialIconNames(initialIconNamesList.toArray(new String[initialIconNamesList.size()])); |
||||||
|
mobileStyle.setSelectedIconNames(selectedIconNamesList.toArray(new String[selectedIconNamesList.size()])); |
||||||
|
FRFont initialFont = initialFontConfPane.updateFont(null, null, null); |
||||||
|
FRFont selectedFont = initialFontConfPane.updateFont(selectedFontColor.getColor(), selectedFontBold.isSelected(), null); |
||||||
|
mobileStyle.setInitialFont(initialFont); |
||||||
|
mobileStyle.setSelectedFont(selectedFont); |
||||||
|
return mobileStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,279 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.radiogroup; |
||||||
|
|
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.ispinner.UISpinner; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
||||||
|
import com.fr.design.mainframe.mobile.utils.DesignerUtils; |
||||||
|
import com.fr.design.mainframe.mobile.utils.FontConfigPane; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.Widget; |
||||||
|
import com.fr.form.ui.mobile.MobileStyle; |
||||||
|
import com.fr.form.ui.mobile.radiogroup.UnitedMobileStyle; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public class UnitedCustomDefinePane extends MobileStyleCustomDefinePane { |
||||||
|
|
||||||
|
private JPanel scrollPanel; |
||||||
|
private UIComboBox custom; |
||||||
|
private JPanel centerPane; |
||||||
|
|
||||||
|
private UISpinner leftSpinner; |
||||||
|
private UISpinner rightSpinner; |
||||||
|
private UISpinner topSpinner; |
||||||
|
private UISpinner bottomSpinner; |
||||||
|
|
||||||
|
private NewColorSelectBox initialColorSelectBox; |
||||||
|
private NewColorSelectBox selectedColorSelectBox; |
||||||
|
|
||||||
|
private LineComboBox borderLineCombo; |
||||||
|
private NewColorSelectBox borderColor; |
||||||
|
private UISpinner borderRadiusSpinner; |
||||||
|
|
||||||
|
private FontConfigPane initialFontConfPane; |
||||||
|
private UIColorButton selectedFontColor; |
||||||
|
|
||||||
|
public UnitedCustomDefinePane(Widget widget) { |
||||||
|
super(widget); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createPreviewPane() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.addScrollPane(); |
||||||
|
this.addStyleSelectPane(); |
||||||
|
this.addConfigPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void addScrollPane() { |
||||||
|
scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}; |
||||||
|
this.add(basicScrollPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addStyleSelectPane() { |
||||||
|
JPanel stylePanel = new JPanel(); |
||||||
|
stylePanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
UILabel buttonStyleLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Style")); |
||||||
|
custom = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Plugin-RadioGroup_Style_Default"), |
||||||
|
Toolkit.i18nText("Fine-Plugin-RadioGroup_Style_Custom")}); |
||||||
|
custom.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
} |
||||||
|
}); |
||||||
|
stylePanel.add(buttonStyleLabel); |
||||||
|
stylePanel.add(custom); |
||||||
|
scrollPanel.add(stylePanel, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
private void addConfigPane() { |
||||||
|
centerPane = createCenterPane(); |
||||||
|
centerPane.setVisible(false); |
||||||
|
|
||||||
|
addPaddingPane(); |
||||||
|
addBackgroundPane(); |
||||||
|
addBorderPane(); |
||||||
|
addFontPane(); |
||||||
|
|
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
custom.setSelectedIndex(1); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCenterPane() { |
||||||
|
return FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
} |
||||||
|
|
||||||
|
private void addPaddingPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout"))); |
||||||
|
|
||||||
|
UILabel paddingHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Button_Padding")); |
||||||
|
UILabel emptyHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("")); |
||||||
|
|
||||||
|
UILabel leftLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Left")); |
||||||
|
leftSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultHorizontalPadding); |
||||||
|
|
||||||
|
UILabel rightLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Right")); |
||||||
|
rightSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultHorizontalPadding); |
||||||
|
|
||||||
|
UILabel topLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Top")); |
||||||
|
topSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); |
||||||
|
|
||||||
|
UILabel bottomLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Bottom")); |
||||||
|
bottomSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); |
||||||
|
|
||||||
|
JPanel leftSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftLabel, leftSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel rightSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{rightLabel, rightSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel topSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topLabel, topSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel bottomSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{bottomLabel, bottomSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
JPanel vPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topSpinnerPanel, bottomSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); |
||||||
|
JPanel hPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftSpinnerPanel, rightSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel paddingPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ |
||||||
|
{paddingHintLabel, vPaddingSpinnerPanel}, |
||||||
|
{emptyHintLabel, hPaddingSpinnerPanel}, |
||||||
|
}, rowSize, columnSize, 10); |
||||||
|
|
||||||
|
centerPane.add(paddingPanel); |
||||||
|
} |
||||||
|
|
||||||
|
private void addBackgroundPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Background"))); |
||||||
|
|
||||||
|
UILabel initialColorLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Background_Init")); |
||||||
|
initialColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
initialColorSelectBox.setSelectObject(Color.WHITE); |
||||||
|
JPanel initialColorSelectPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initialColorLabel, initialColorSelectBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(initialColorSelectPane); |
||||||
|
|
||||||
|
UILabel selectedColorLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Background_Select")); |
||||||
|
selectedColorSelectBox = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
selectedColorSelectBox.setSelectObject(new Color(31, 173, 229)); |
||||||
|
JPanel selectedColorSelectPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectedColorLabel, selectedColorSelectBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(selectedColorSelectPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void addBorderPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border"))); |
||||||
|
|
||||||
|
UILabel borderTypeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border_Line")); |
||||||
|
borderLineCombo = new LineComboBox(DesignerUtils.BORDER_LINE_STYLE_ARRAY); |
||||||
|
borderLineCombo.setSelectedLineStyle(Constants.LINE_THIN); |
||||||
|
|
||||||
|
UILabel colorLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border_Color")); |
||||||
|
borderColor = DesignerUtils.createNormalColorSelectBox(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
borderColor.setSelectObject(new Color(31, 173, 229) ); |
||||||
|
|
||||||
|
UILabel radiusLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Border_Radius")); |
||||||
|
borderRadiusSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 2); |
||||||
|
borderRadiusSpinner.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p, p}; |
||||||
|
double[] columnSize = {p, p}; |
||||||
|
JPanel borderPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][] { |
||||||
|
{borderTypeLabel, borderLineCombo}, |
||||||
|
{colorLabel, borderColor}, |
||||||
|
{radiusLabel, borderRadiusSpinner} |
||||||
|
}, rowSize, columnSize, 10); |
||||||
|
|
||||||
|
centerPane.add(borderPanel); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void addFontPane() { |
||||||
|
centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font"))); |
||||||
|
|
||||||
|
UILabel initialFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_init")); |
||||||
|
initialFontConfPane = new FontConfigPane(); |
||||||
|
initialFontConfPane.setFontColor(new Color(31, 173, 229)); |
||||||
|
JPanel fontPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initialFontLabel, initialFontConfPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(fontPanel); |
||||||
|
UILabel selectedFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_Select")); |
||||||
|
selectedFontColor = new UIColorButton(); |
||||||
|
selectedFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
selectedFontColor.setColor(Color.WHITE); |
||||||
|
JPanel selectFontColorPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectedFontLabel, selectedFontColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.add(selectFontColorPanel); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileStyle ob) { |
||||||
|
UnitedMobileStyle mobileStyle = (UnitedMobileStyle) ob; |
||||||
|
custom.setSelectedIndex(mobileStyle.isCustom() ? 1 : 0); |
||||||
|
leftSpinner.setValue(mobileStyle.getLeftPadding()); |
||||||
|
rightSpinner.setValue(mobileStyle.getRightPadding()); |
||||||
|
topSpinner.setValue(mobileStyle.getTopPadding()); |
||||||
|
bottomSpinner.setValue(mobileStyle.getBottomPadding()); |
||||||
|
initialColorSelectBox.setSelectObject(mobileStyle.getInitialBackgroundColor()); |
||||||
|
selectedColorSelectBox.setSelectObject(mobileStyle.getSelectedBackgroundColor()); |
||||||
|
borderLineCombo.setSelectedLineStyle(mobileStyle.getBorderType()); |
||||||
|
borderColor.setSelectObject(mobileStyle.getBorderColor()); |
||||||
|
borderRadiusSpinner.setValue(mobileStyle.getBorderRadius()); |
||||||
|
if(mobileStyle.getInitialFont() != null) { |
||||||
|
initialFontConfPane.populate(mobileStyle.getInitialFont()); |
||||||
|
} |
||||||
|
if(mobileStyle.getSelectedFont() != null) { |
||||||
|
selectedFontColor.setColor(mobileStyle.getSelectedFont().getForeground()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileStyle updateBean() { |
||||||
|
UnitedMobileStyle mobileStyle = (UnitedMobileStyle)this.widget.getMobileStyle(); |
||||||
|
|
||||||
|
mobileStyle.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
mobileStyle.setLeftPadding(leftSpinner.getValue()); |
||||||
|
mobileStyle.setRightPadding(rightSpinner.getValue()); |
||||||
|
mobileStyle.setTopPadding(topSpinner.getValue()); |
||||||
|
mobileStyle.setBottomPadding(bottomSpinner.getValue()); |
||||||
|
mobileStyle.setInitialBackgroundColor(initialColorSelectBox.getSelectObject()); |
||||||
|
mobileStyle.setSelectedBackgroundColor(selectedColorSelectBox.getSelectObject()); |
||||||
|
mobileStyle.setBorderType(borderLineCombo.getSelectedLineStyle()); |
||||||
|
mobileStyle.setBorderColor(borderColor.getSelectObject()); |
||||||
|
mobileStyle.setBorderRadius(borderRadiusSpinner.getValue()); |
||||||
|
|
||||||
|
FRFont initialFont = initialFontConfPane.updateFont(null, null, null); |
||||||
|
FRFont selectedFont = initialFontConfPane.updateFont(selectedFontColor.getColor(), null, null); |
||||||
|
selectedFont.setForeground(selectedFontColor.getColor()); |
||||||
|
|
||||||
|
mobileStyle.setInitialFont(initialFont); |
||||||
|
mobileStyle.setSelectedFont(selectedFont); |
||||||
|
|
||||||
|
return mobileStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui.topparam; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.form.ui.mobile.impl.MobileTopParamStyle; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class MobileTopParamPane extends BasicBeanPane<MobileTopParamStyle> { |
||||||
|
private UICheckBox autoCommitCheckBox; |
||||||
|
|
||||||
|
public MobileTopParamPane() { |
||||||
|
this.init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
JPanel panel = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Plugin-TopParam_Setting")); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); |
||||||
|
autoCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Plugin-TopParam_AutoCommit"), true); |
||||||
|
panel.add(autoCommitCheckBox); |
||||||
|
this.add(panel, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileTopParamStyle topParamStyle) { |
||||||
|
autoCommitCheckBox.setSelected(topParamStyle.isAutoCommit()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTopParamStyle updateBean() { |
||||||
|
MobileTopParamStyle topParamStyle = new MobileTopParamStyle(); |
||||||
|
topParamStyle.setAutoCommit(autoCommitCheckBox.isSelected()); |
||||||
|
return topParamStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.utils; |
||||||
|
|
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
public class DesignerUtils { |
||||||
|
|
||||||
|
public static final int NORMAL_COMBO_WIDTH = 152; |
||||||
|
public static final int kDefaultHorizontalPadding = 0; |
||||||
|
public static final int kDefaultVerticalPadding = 15; |
||||||
|
public static final int kAlignLeft = 0; |
||||||
|
public static final int kAlignCenter = 1; |
||||||
|
public static final int[] BORDER_LINE_STYLE_ARRAY = new int[]{ |
||||||
|
Constants.LINE_NONE, |
||||||
|
Constants.LINE_THIN, |
||||||
|
Constants.LINE_MEDIUM, |
||||||
|
Constants.LINE_THICK, |
||||||
|
}; |
||||||
|
|
||||||
|
public static UITitleSplitLine createTitleSplitLine(String title) { |
||||||
|
UITitleSplitLine splitLine = new UITitleSplitLine(title, 520); |
||||||
|
splitLine.setPreferredSize(new Dimension(520, 20)); |
||||||
|
return splitLine; |
||||||
|
} |
||||||
|
|
||||||
|
public static UILabel createConfigLabel(String title) { |
||||||
|
UILabel label = new UILabel(title, UILabel.RIGHT); |
||||||
|
label.setPreferredSize(new Dimension(100, 20)); |
||||||
|
return label; |
||||||
|
} |
||||||
|
|
||||||
|
public static NewColorSelectBox createNormalColorSelectBox(ChangeListener changeListener) { |
||||||
|
NewColorSelectBox colorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH); |
||||||
|
colorSelectBox.addSelectChangeListener(changeListener); |
||||||
|
return colorSelectBox; |
||||||
|
} |
||||||
|
|
||||||
|
public static UICheckBox createCheckBox(String text, boolean selected) { |
||||||
|
UICheckBox uiCheckBox = new UICheckBox(text, selected); |
||||||
|
return uiCheckBox; |
||||||
|
} |
||||||
|
|
||||||
|
public static JPanel createLeftRightComponentsPane(Component... components) { |
||||||
|
return TableLayoutHelper.createGapTableLayoutPane(new Component[][]{components}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,137 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.utils; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.ibutton.UIToggleButton; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.event.EventListenerList; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.Vector; |
||||||
|
|
||||||
|
public class FontConfigPane extends JPanel { |
||||||
|
private static final Icon[] ITALIC_ICONS = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic_white.png")}; |
||||||
|
private static final Icon[] BOLD_ICONS = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold_white.png")}; |
||||||
|
|
||||||
|
private EventListenerList fontChangeListener = new EventListenerList(); |
||||||
|
private UIComboBox fontFamily; |
||||||
|
private UIComboBox fontSize; |
||||||
|
private UIToggleButton bold; |
||||||
|
private UIColorButton color; |
||||||
|
private UIToggleButton italic; |
||||||
|
|
||||||
|
|
||||||
|
public FontConfigPane() { |
||||||
|
super(); |
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() { |
||||||
|
this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
fontFamily = new UIComboBox(Utils.getAvailableFontFamilyNames4Report()); |
||||||
|
Vector<Integer> integerList = new Vector<>(); |
||||||
|
for (int i = 1; i < 100; i++) { |
||||||
|
integerList.add(i); |
||||||
|
} |
||||||
|
fontFamily.setPreferredSize(new Dimension(152, 20)); |
||||||
|
fontSize = new UIComboBox(integerList); |
||||||
|
fontSize.setSelectedIndex(14); |
||||||
|
color = new UIColorButton(); |
||||||
|
bold = new UIToggleButton(BOLD_ICONS, true); |
||||||
|
italic = new UIToggleButton(ITALIC_ICONS, true); |
||||||
|
fontFamily.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
fontSize.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
bold.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
italic.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
color.addColorChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.add(fontFamily); |
||||||
|
this.add(fontSize); |
||||||
|
this.add(color); |
||||||
|
this.add(bold); |
||||||
|
this.add(italic); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void setFontColor(Color fontColor) { |
||||||
|
color.setColor(fontColor); |
||||||
|
} |
||||||
|
|
||||||
|
public FRFont updateFont(Color fontColor, Boolean isBold, Boolean isItalic) { |
||||||
|
String family = (String) fontFamily.getSelectedItem(); |
||||||
|
int size = (int) fontSize.getSelectedItem(); |
||||||
|
int style = Font.PLAIN; |
||||||
|
boolean bold = (isBold == null) ? this.bold.isSelected() : isBold; |
||||||
|
boolean italic = (isItalic == null) ? this.italic.isSelected() : isItalic; |
||||||
|
style += bold ? Font.BOLD : Font.PLAIN; |
||||||
|
style += italic ? Font.ITALIC : Font.PLAIN; |
||||||
|
FRFont frFont = FRFont.getInstance(family, style, size, fontColor == null ? color.getColor() : fontColor); |
||||||
|
return frFont; |
||||||
|
} |
||||||
|
|
||||||
|
public FRFont update() { |
||||||
|
String family = (String) fontFamily.getSelectedItem(); |
||||||
|
int size = (int) fontSize.getSelectedItem(); |
||||||
|
int style = Font.PLAIN; |
||||||
|
style += this.bold.isSelected() ? Font.BOLD : Font.PLAIN; |
||||||
|
style += this.italic.isSelected() ? Font.ITALIC : Font.PLAIN; |
||||||
|
return FRFont.getInstance(family, style, size, color.getColor()); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(FRFont frFont) { |
||||||
|
fontFamily.setSelectedItem(frFont.getFamily()); |
||||||
|
fontSize.setSelectedItem(frFont.getSize()); |
||||||
|
color.setColor(frFont.getForeground()); |
||||||
|
bold.setSelected(frFont.isBold()); |
||||||
|
italic.setSelected(frFont.isItalic()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 颜色状态改变 |
||||||
|
*/ |
||||||
|
public void fireFontStateChanged() { |
||||||
|
Object[] listeners = fontChangeListener.getListenerList(); |
||||||
|
ChangeEvent e = null; |
||||||
|
|
||||||
|
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||||
|
if (listeners[i] == ChangeListener.class) { |
||||||
|
if (e == null) { |
||||||
|
e = new ChangeEvent(this); |
||||||
|
} |
||||||
|
((ChangeListener) listeners[i + 1]).stateChanged(e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,185 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.utils; |
||||||
|
|
||||||
|
import com.fr.base.IconManager; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.utils.DrawRoutines; |
||||||
|
import com.fr.design.web.CustomIconPane; |
||||||
|
import com.fr.form.ui.WidgetInfoConfig; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.plaf.basic.BasicButtonUI; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Cursor; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Font; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.Image; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
public class IconConfigPane extends JPanel { |
||||||
|
private UIButton editIconButton; |
||||||
|
private UIButton deleteIconButton; |
||||||
|
private IconButton iconButton; |
||||||
|
|
||||||
|
public IconConfigPane() { |
||||||
|
initComp(); |
||||||
|
} |
||||||
|
|
||||||
|
public void initComp() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
JPanel panel = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
||||||
|
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
editIconButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Edit")); |
||||||
|
editIconButton.setFont(FRFont.getInstance("Helvetica", Font.PLAIN, 12, Color.decode("#3A383A"))); |
||||||
|
editIconButton.setPreferredSize(new Dimension(62, 20)); |
||||||
|
panel.add(editIconButton); |
||||||
|
editIconButton.addActionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
final CustomIconPane cip = new CustomIconPane(){ |
||||||
|
protected String createDescriptionText(){ |
||||||
|
return Toolkit.i18nText("Fine-Design_Mobile_Custom_Icon_Message"); |
||||||
|
} |
||||||
|
}; |
||||||
|
BasicDialog editDialog = cip.showWindow(new JFrame()); |
||||||
|
editDialog.addDialogActionListener(new DialogActionAdapter() { |
||||||
|
@Override |
||||||
|
public void doOk() { |
||||||
|
IconConfigPane.this.iconButton.setIconName(cip.update()); |
||||||
|
IconConfigPane.this.deleteIconButton.setEnabled(true); |
||||||
|
IconConfigPane.this.repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
editDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
editIconButton.setEnabled(true); |
||||||
|
|
||||||
|
deleteIconButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Delete")); |
||||||
|
deleteIconButton.setFont(FRFont.getInstance("Helvetica", Font.PLAIN, 12, Color.decode("#3A383A"))); |
||||||
|
deleteIconButton.setPreferredSize(new Dimension(62, 20)); |
||||||
|
panel.add(deleteIconButton); |
||||||
|
deleteIconButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
IconConfigPane.this.iconButton.setIconName(StringUtils.EMPTY); |
||||||
|
IconConfigPane.this.deleteIconButton.setEnabled(false); |
||||||
|
IconConfigPane.this.repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
deleteIconButton.setEnabled(false); |
||||||
|
|
||||||
|
|
||||||
|
this.add(panel, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel westPane = new JPanel(); |
||||||
|
iconButton = new IconButton(""); |
||||||
|
westPane.add(iconButton); |
||||||
|
this.add(westPane, BorderLayout.WEST); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(String iconName) { |
||||||
|
if(StringUtils.isNotEmpty(iconName)) { |
||||||
|
deleteIconButton.setEnabled(true); |
||||||
|
} else { |
||||||
|
deleteIconButton.setEnabled(false); |
||||||
|
} |
||||||
|
iconButton.setIconName(iconName); |
||||||
|
} |
||||||
|
|
||||||
|
public String update() { |
||||||
|
return iconButton.getIconName(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private class IconButton extends JToggleButton implements ActionListener { |
||||||
|
private String iconName; |
||||||
|
private Image iconImage = null; |
||||||
|
private static final int ICON_BUTTON_SIZE = 20; |
||||||
|
private static final int ICON_X = 2; |
||||||
|
private static final int ICON_Y = 2; |
||||||
|
|
||||||
|
public IconButton(String name) { |
||||||
|
this.iconName = name; |
||||||
|
this.addActionListener(this); |
||||||
|
this.setBackground(Color.WHITE); |
||||||
|
this.setCursor(new Cursor(Cursor.HAND_CURSOR)); |
||||||
|
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(name); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateUI() { |
||||||
|
setUI(new BasicButtonUI() { |
||||||
|
public void paint(Graphics g, JComponent c) { |
||||||
|
super.paint(g, c); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected void paintBorder(Graphics g) { |
||||||
|
super.paintBorder(g); |
||||||
|
if (StringUtils.isNotEmpty(iconButton.getIconName())) { |
||||||
|
DrawRoutines.drawRoundedBorder( |
||||||
|
g, Color.decode("#419BF9"), 0, 0, 20, 20); |
||||||
|
} else { |
||||||
|
DrawRoutines.drawRoundedBorder( |
||||||
|
g, Color.decode("#D9DADD"), 0, 0, 20, 20); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public String getIconName() { |
||||||
|
return iconName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIconName(String iconName) { |
||||||
|
this.iconName = iconName; |
||||||
|
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(iconName); |
||||||
|
this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paintComponent(Graphics g) { |
||||||
|
super.paintComponent(g); |
||||||
|
Graphics2D g2d = (Graphics2D) g; |
||||||
|
// carl:这里缩放显示 16 × 16
|
||||||
|
if (iconImage != null) { |
||||||
|
g2d.drawImage(iconImage, ICON_X, ICON_Y, IconManager.DEFAULT_ICONWIDTH, IconManager.DEFAULT_ICONHEIGHT, null); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
return new Dimension(ICON_BUTTON_SIZE, ICON_BUTTON_SIZE); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
IconConfigPane.this.repaint();// repaint
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
this.changeListener = changeListener; |
||||||
|
} |
||||||
|
|
||||||
|
private void fireChagneListener() { |
||||||
|
if (this.changeListener != null) { |
||||||
|
ChangeEvent evt = new ChangeEvent(this); |
||||||
|
this.changeListener.stateChanged(evt); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.utils; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.mobile.provider.combo.SimpleComboCheckBoxStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.combo.SimpleComboStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.date.NavigationStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.date.SimpleDateStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.date.SimpleStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.radiogroup.CapsuleRadioGroupStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.radiogroup.ImageRadioGroupStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.radiogroup.UnitedRadioGroupStyleProvider; |
||||||
|
import com.fr.design.mainframe.mobile.provider.topparam.MobileTopParamStyleProvider; |
||||||
|
import com.fr.stable.fun.mark.Mutable; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.HashSet; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Set; |
||||||
|
|
||||||
|
public class MobileStyleProviderManager { |
||||||
|
private static Set<Mutable> mobileWidgetStyleProviderSet = new HashSet<Mutable>() {{ |
||||||
|
add(new SimpleStyleProvider()); |
||||||
|
add(new NavigationStyleProvider()); |
||||||
|
add(new SimpleDateStyleProvider()); |
||||||
|
add(new SimpleComboStyleProvider()); |
||||||
|
add(new SimpleComboCheckBoxStyleProvider()); |
||||||
|
add(new CapsuleRadioGroupStyleProvider()); |
||||||
|
add(new UnitedRadioGroupStyleProvider()); |
||||||
|
add(new ImageRadioGroupStyleProvider()); |
||||||
|
}}; |
||||||
|
private static Set<Mutable> mobileParamUIProviderSet = new HashSet<Mutable>() {{ |
||||||
|
add(new MobileTopParamStyleProvider()); |
||||||
|
}}; |
||||||
|
private static Map<String, Set<Mutable>> map = new HashMap<String, Set<Mutable>>() {{ |
||||||
|
put("MobileWidgetStyleProvider", mobileWidgetStyleProviderSet); |
||||||
|
put("MobileParamUIProvider", mobileParamUIProviderSet); |
||||||
|
}}; |
||||||
|
|
||||||
|
public static <T extends Mutable> Set<T> getArray(String mark) { |
||||||
|
return (Set<T>) map.get(mark); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.env; |
||||||
|
|
||||||
|
import com.fr.general.locale.LocaleCenter; |
||||||
|
import com.fr.general.locale.LocaleMark; |
||||||
|
import com.fr.locale.InterProviderFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* 错误提示中的跳转链接管理 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/9 |
||||||
|
*/ |
||||||
|
public class HelpLink { |
||||||
|
|
||||||
|
public static String getLink(String solution) { |
||||||
|
Map<String, String> map = new HashMap<>(); |
||||||
|
LocaleMark<String> linkMark = LocaleCenter.getMark(RemoteDesignLocaleMark.class); |
||||||
|
String link = linkMark.getValue(); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Change_PassWord"), StringUtils.EMPTY); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Cert_Error_Solution"), link); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Connection_Unknown_Error_Solution"), link); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_NetWork_Connection_Error_Solution"), link); |
||||||
|
return map.get(solution); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package com.fr.env; |
||||||
|
|
||||||
|
import com.fr.general.CloudCenter; |
||||||
|
import com.fr.general.GeneralContext; |
||||||
|
import com.fr.general.locale.LocaleMark; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Locale; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/9 |
||||||
|
*/ |
||||||
|
public class RemoteDesignLocaleMark implements LocaleMark<String> { |
||||||
|
|
||||||
|
private Map<Locale, String> map = new HashMap<>(); |
||||||
|
private static final String REMOTE_DESIGN_CN = CloudCenter.getInstance().acquireUrlByKind("help.remote.design.zh_CN", "https://help.fanruan.com/finereport/doc-view-3925.html"); |
||||||
|
private static final String REMOTE_DESIGN_EN = CloudCenter.getInstance().acquireUrlByKind("help.remote.design.en_US", "https://help.fanruan.com/finereport-en/doc-view-3862.html"); |
||||||
|
|
||||||
|
|
||||||
|
public RemoteDesignLocaleMark() { |
||||||
|
map.put(Locale.CHINA, REMOTE_DESIGN_CN); |
||||||
|
map.put(Locale.KOREA, REMOTE_DESIGN_EN); |
||||||
|
map.put(Locale.JAPAN, REMOTE_DESIGN_EN); |
||||||
|
map.put(Locale.US, REMOTE_DESIGN_EN); |
||||||
|
map.put(Locale.TAIWAN, REMOTE_DESIGN_CN); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getValue() { |
||||||
|
String result = map.get(GeneralContext.getLocale()); |
||||||
|
return result == null ? REMOTE_DESIGN_CN : result; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.env.handler; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public interface Handler<T, R> { |
||||||
|
|
||||||
|
/** |
||||||
|
* @param t |
||||||
|
* @return 是否需要继续处理 |
||||||
|
*/ |
||||||
|
R handle(T t); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.fr.env.handler; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/11 |
||||||
|
*/ |
||||||
|
public class RefWrapper { |
||||||
|
|
||||||
|
private final Throwable throwable; |
||||||
|
|
||||||
|
private final String link; |
||||||
|
|
||||||
|
|
||||||
|
public RefWrapper(Throwable throwable, String link) { |
||||||
|
this.throwable = throwable; |
||||||
|
this.link = link; |
||||||
|
} |
||||||
|
|
||||||
|
public Throwable getThrowable() { |
||||||
|
return throwable; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLink() { |
||||||
|
return link; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,90 @@ |
|||||||
|
package com.fr.env.handler; |
||||||
|
|
||||||
|
import com.fr.design.EnvChangeEntrance; |
||||||
|
import com.fr.design.dialog.FineJOptionPane; |
||||||
|
import com.fr.design.env.DesignerWorkspaceInfo; |
||||||
|
import com.fr.design.env.DesignerWorkspaceType; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.env.RemoteWorkspaceURL; |
||||||
|
import com.fr.env.handler.impl.CancelHandler; |
||||||
|
import com.fr.env.handler.impl.CommonHandler; |
||||||
|
import com.fr.env.handler.impl.ExecutionHandler; |
||||||
|
import com.fr.env.handler.impl.UnexpectedHandler; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import javax.swing.UIManager; |
||||||
|
|
||||||
|
|
||||||
|
import static javax.swing.JOptionPane.ERROR_MESSAGE; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class RemoteDesignExceptionHandler { |
||||||
|
|
||||||
|
private static final RemoteDesignExceptionHandler INSTANCE = new RemoteDesignExceptionHandler(); |
||||||
|
|
||||||
|
public static RemoteDesignExceptionHandler getInstance() { |
||||||
|
return INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
private final List<Handler<RefWrapper, ResultWrapper>> testList = new ArrayList<>(); |
||||||
|
|
||||||
|
private final List<Handler<RefWrapper, ResultWrapper>> switchList = new ArrayList<>(); |
||||||
|
|
||||||
|
private RemoteDesignExceptionHandler() { |
||||||
|
// 要保证顺序
|
||||||
|
testList.add(new CancelHandler()); |
||||||
|
testList.add(new ExecutionHandler()); |
||||||
|
testList.add(new UnexpectedHandler()); |
||||||
|
testList.add(new CommonHandler(false)); |
||||||
|
|
||||||
|
switchList.add(new CancelHandler()); |
||||||
|
switchList.add(new ExecutionHandler()); |
||||||
|
switchList.add(new UnexpectedHandler()); |
||||||
|
switchList.add(new CommonHandler(true)); |
||||||
|
} |
||||||
|
|
||||||
|
public void handle(Throwable e, List<Handler<RefWrapper, ResultWrapper>> list, DesignerWorkspaceInfo workspaceInfo) { |
||||||
|
Throwable throwable = e; |
||||||
|
ResultWrapper wrapper; |
||||||
|
String link = workspaceInfo.getConnection().getUrl() + RemoteWorkspaceURL.SYSTEM_LOGIN_PATH; |
||||||
|
for (Handler<RefWrapper, ResultWrapper> handler : list) { |
||||||
|
wrapper = handler.handle(new RefWrapper(throwable, link)); |
||||||
|
throwable = wrapper.getThrowable(); |
||||||
|
if (!wrapper.isNext()) { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().error(throwable.getMessage(), throwable); |
||||||
|
} |
||||||
|
|
||||||
|
public void handleInSwitch(Throwable e, DesignerWorkspaceInfo workspaceInfo) { |
||||||
|
if (workspaceInfo == null || workspaceInfo.getType() == DesignerWorkspaceType.Local) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
FineJOptionPane.showMessageDialog(EnvChangeEntrance.getInstance().getDialog(), |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"), |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), |
||||||
|
ERROR_MESSAGE, |
||||||
|
UIManager.getIcon("OptionPane.errorIcon")); |
||||||
|
return; |
||||||
|
} |
||||||
|
handle(e, switchList, workspaceInfo); |
||||||
|
} |
||||||
|
|
||||||
|
public void handleInStart(Throwable e, DesignerWorkspaceInfo workspaceInfo) { |
||||||
|
if (workspaceInfo == null || workspaceInfo.getType() == DesignerWorkspaceType.Local) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
return; |
||||||
|
} |
||||||
|
handle(e, testList, workspaceInfo); |
||||||
|
} |
||||||
|
|
||||||
|
public void handleInTest(Throwable e, DesignerWorkspaceInfo workspaceInfo) { |
||||||
|
handle(e, testList, workspaceInfo); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.env.handler; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class ResultWrapper { |
||||||
|
|
||||||
|
private final boolean next; |
||||||
|
|
||||||
|
private final Throwable throwable; |
||||||
|
|
||||||
|
public ResultWrapper(Throwable throwable) { |
||||||
|
this(true, throwable); |
||||||
|
} |
||||||
|
|
||||||
|
public ResultWrapper(boolean next, Throwable e) { |
||||||
|
this.next = next; |
||||||
|
this.throwable = e; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isNext() { |
||||||
|
return next; |
||||||
|
} |
||||||
|
|
||||||
|
public Throwable getThrowable() { |
||||||
|
return throwable; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.RefWrapper; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import java.util.concurrent.CancellationException; |
||||||
|
|
||||||
|
/** |
||||||
|
* 取消测试连接时的处理器 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class CancelHandler implements Handler<RefWrapper, ResultWrapper> { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(RefWrapper wrapper) { |
||||||
|
Throwable e = wrapper.getThrowable(); |
||||||
|
return new ResultWrapper(!(e instanceof CancellationException), e); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.base.exception.ExceptionDescriptor; |
||||||
|
import com.fr.design.EnvChangeEntrance; |
||||||
|
import com.fr.design.dialog.UIDetailErrorLinkDialog; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.env.HelpLink; |
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.RefWrapper; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class CommonHandler implements Handler<RefWrapper, ResultWrapper> { |
||||||
|
|
||||||
|
private final boolean onSwitch; |
||||||
|
|
||||||
|
public CommonHandler(boolean onSwitch) { |
||||||
|
this.onSwitch = onSwitch; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(RefWrapper wrapper) { |
||||||
|
Throwable e = wrapper.getThrowable(); |
||||||
|
if (e instanceof ExceptionDescriptor) { |
||||||
|
ExceptionDescriptor exceptionDescriptor = (ExceptionDescriptor) e; |
||||||
|
SwingUtilities.invokeLater(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
String link = HelpLink.getLink(exceptionDescriptor.solution()); |
||||||
|
UIDetailErrorLinkDialog detailErrorLinkDialog = UIDetailErrorLinkDialog.newBuilder(). |
||||||
|
setWindow(onSwitch ? DesignerContext.getDesignerFrame() : EnvChangeEntrance.getInstance().getDialog()). |
||||||
|
setErrorCode(exceptionDescriptor.errorCode()). |
||||||
|
setReason(exceptionDescriptor.reason()). |
||||||
|
setSolution(exceptionDescriptor.solution()). |
||||||
|
setDetailReason(exceptionDescriptor.detailReason()). |
||||||
|
setTitle(Toolkit.i18nText("Fine-Design_Basic_Connection_Failed")). |
||||||
|
setLink(StringUtils.isEmpty(link) ? wrapper.getLink() : link). |
||||||
|
setThrowable(e).build(); |
||||||
|
detailErrorLinkDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
return new ResultWrapper(e); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.RefWrapper; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import java.util.concurrent.ExecutionException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class ExecutionHandler implements Handler<RefWrapper, ResultWrapper> { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(RefWrapper wrapper) { |
||||||
|
Throwable e = wrapper.getThrowable(); |
||||||
|
if (e instanceof ExecutionException) { |
||||||
|
return new ResultWrapper(e.getCause()); |
||||||
|
} |
||||||
|
return new ResultWrapper(e); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.base.exception.ExceptionDescriptor; |
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.RefWrapper; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import com.fr.workspace.engine.convert.ExceptionConverter; |
||||||
|
|
||||||
|
/** |
||||||
|
* 出现预料之外的情况异常处理器 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class UnexpectedHandler implements Handler<RefWrapper, ResultWrapper> { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(RefWrapper wrapper) { |
||||||
|
Throwable e = wrapper.getThrowable(); |
||||||
|
if (!(e instanceof ExceptionDescriptor)) { |
||||||
|
return new ResultWrapper(ExceptionConverter.getInstance().convert(e)) ; |
||||||
|
} |
||||||
|
return new ResultWrapper(e); |
||||||
|
} |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue