Yvan
4 years ago
451 changed files with 19542 additions and 4955 deletions
@ -0,0 +1,55 @@ |
|||||||
|
package com.fr.design.dialog.link; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Desktop; |
||||||
|
import java.awt.Font; |
||||||
|
import java.net.URI; |
||||||
|
import javax.swing.JEditorPane; |
||||||
|
import javax.swing.event.HyperlinkEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 用来构建JOptionPane带超链的消息提示 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2020/10/23 |
||||||
|
*/ |
||||||
|
public class MessageWithLink extends JEditorPane { |
||||||
|
|
||||||
|
public MessageWithLink(String message, String linkName, String link) { |
||||||
|
super("text/html", "<html><body style=\"" + getStyle() + "\">" + message + "<a href=\"" + link + "\">" + linkName + "</a>" + "</body></html>"); |
||||||
|
addHyperlinkListener(e -> { |
||||||
|
if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) { |
||||||
|
try { |
||||||
|
Desktop.getDesktop().browse(URI.create(link)); |
||||||
|
} catch (Exception exception) { |
||||||
|
FineLoggerFactory.getLogger().error(exception.getMessage(), exception); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
setEditable(false); |
||||||
|
setBorder(null); |
||||||
|
} |
||||||
|
|
||||||
|
public MessageWithLink(String linkName, String link ) { |
||||||
|
this(StringUtils.EMPTY, linkName, link); |
||||||
|
} |
||||||
|
|
||||||
|
private static StringBuilder getStyle() { |
||||||
|
// 构建和相同风格样式
|
||||||
|
UILabel label = new UILabel(); |
||||||
|
Font font = label.getFont(); |
||||||
|
Color color = label.getBackground(); |
||||||
|
|
||||||
|
StringBuilder style = new StringBuilder("font-family:" + font.getFamily() + ";"); |
||||||
|
style.append("font-weight:").append(font.isBold() ? "bold" : "normal").append(";"); |
||||||
|
style.append("font-size:").append(font.getSize()).append("pt;"); |
||||||
|
style.append("background-color: rgb(").append(color.getRed()).append(",").append(color.getGreen()).append(",").append(color.getBlue()).append(");"); |
||||||
|
|
||||||
|
return style; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package com.fr.design.jdk; |
||||||
|
|
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设计器运行jdk版本 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2020/9/27 |
||||||
|
*/ |
||||||
|
public enum JdkVersion { |
||||||
|
|
||||||
|
/** |
||||||
|
* 小于或等于jdk 8 |
||||||
|
*/ |
||||||
|
LE_8 { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean support() { |
||||||
|
return StableUtils.getMajorJavaVersion() <= 8; |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
/** |
||||||
|
* 大于或等于jdk 9 |
||||||
|
*/ |
||||||
|
GE_9 { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean support() { |
||||||
|
return StableUtils.getMajorJavaVersion() >= 9; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
abstract public boolean support(); |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.fr.design.mainframe; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author: Yuan.Wang |
||||||
|
* @Date: 2020/10/27 |
||||||
|
*/ |
||||||
|
public class JTemplateActionListenerAdapter implements JTemplateActionListener { |
||||||
|
@Override |
||||||
|
public void templateOpened(JTemplate<?, ?> jt) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void templateSaved(JTemplate<?, ?> jt) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void templateClosed(JTemplate<?, ?> jt) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fr.design.mainframe; |
||||||
|
|
||||||
|
import com.fr.event.Event; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-12-11 |
||||||
|
*/ |
||||||
|
public enum JTemplateEvent implements Event<JTemplate> { |
||||||
|
/** |
||||||
|
* 模板初始化之前 |
||||||
|
*/ |
||||||
|
BEFORE_TEMPLATE_INIT, |
||||||
|
|
||||||
|
/** |
||||||
|
* 模板激活之前 |
||||||
|
*/ |
||||||
|
BEFORE_TEMPLATE_ACTIVE |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fr.design.mainframe; |
||||||
|
|
||||||
|
import javax.swing.JWindow; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author: Yuan.Wang |
||||||
|
* @Date: 2020/10/9 |
||||||
|
* 只关心Window的显示和隐藏操作时可以实现该接口 |
||||||
|
*/ |
||||||
|
public interface PromptWindow { |
||||||
|
/** |
||||||
|
* 显示弹窗 |
||||||
|
*/ |
||||||
|
void showWindow(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 隐藏弹窗 |
||||||
|
*/ |
||||||
|
void hideWindow(); |
||||||
|
} |
@ -0,0 +1,103 @@ |
|||||||
|
package com.fr.design.mainframe.backgroundpane; |
||||||
|
|
||||||
|
import com.fr.base.background.GradientBackground; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.style.background.gradient.FixedGradientBar; |
||||||
|
import com.fr.general.Background; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* 渐变色设置界面,bar无法拖拽 |
||||||
|
*/ |
||||||
|
public class VanChartGradientPane extends GradientBackgroundQuickPane { |
||||||
|
protected static final int CHART_GRADIENT_WIDTH = 150; |
||||||
|
private static final long serialVersionUID = 256594362341221087L; |
||||||
|
|
||||||
|
private FixedGradientBar gradientBar; |
||||||
|
private UIButtonGroup<Integer> directionPane; |
||||||
|
|
||||||
|
public VanChartGradientPane() { |
||||||
|
constructPane(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void constructPane(){ |
||||||
|
String[] textArray = {com.fr.design.i18n.Toolkit.i18nText("FIne-Design_Report_Utils_Left_To_Right"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Top_To_Bottom")}; |
||||||
|
Integer[] valueArray = {GradientBackground.LEFT2RIGHT, GradientBackground.TOP2BOTTOM}; |
||||||
|
directionPane = new UIButtonGroup<Integer>(textArray, valueArray); |
||||||
|
directionPane.setSelectedIndex(0); |
||||||
|
gradientBar = new FixedGradientBar(4, CHART_GRADIENT_WIDTH); |
||||||
|
|
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double[] columnSize = {p, f}; |
||||||
|
double[] rowSize = {p, p, p}; |
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{gradientBar, null}, |
||||||
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Direction")),directionPane}, |
||||||
|
}; |
||||||
|
JPanel Gradient = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(Gradient, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(Background background) { |
||||||
|
GradientBackground bg = (GradientBackground) background; |
||||||
|
this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor()); |
||||||
|
this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor()); |
||||||
|
directionPane.setSelectedItem(bg.getDirection()); |
||||||
|
this.gradientBar.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
public GradientBackground updateBean() { |
||||||
|
GradientBackground gb = new GradientBackground(gradientBar.getSelectColorPointBtnP1().getColorInner(), gradientBar.getSelectColorPointBtnP2().getColorInner()); |
||||||
|
gb.setDirection(directionPane.getSelectedItem()); |
||||||
|
|
||||||
|
return gb; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 给组件登记一个观察者监听事件 |
||||||
|
* |
||||||
|
* @param listener 观察者监听事件 |
||||||
|
*/ |
||||||
|
public void registerChangeListener(final UIObserverListener listener) { |
||||||
|
gradientBar.addChangeListener(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
directionPane.addChangeListener(new ChangeListener() { |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否接受 |
||||||
|
* @param background 背景 |
||||||
|
* @return 是则返回true |
||||||
|
*/ |
||||||
|
public boolean accept(Background background) { |
||||||
|
return background instanceof GradientBackground; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 名称 |
||||||
|
* @return 名称 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Color"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
package com.fr.design.mainframe.predefined; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedStyle; |
||||||
|
//import com.fr.predefined.PredefinedPatternStyleManager;
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-31 |
||||||
|
*/ |
||||||
|
public enum PatternStyle { |
||||||
|
DARK_STYLE(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Dark_Pattern")) { |
||||||
|
@Override |
||||||
|
public PredefinedStyle getPredefinedStyle() { |
||||||
|
// return PredefinedPatternStyleManager.INSTANCE.getDarkMode();
|
||||||
|
return new PredefinedStyle(); |
||||||
|
} |
||||||
|
}, |
||||||
|
LIGHT_STYLE(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Light_Pattern")) { |
||||||
|
@Override |
||||||
|
public PredefinedStyle getPredefinedStyle() { |
||||||
|
// return PredefinedPatternStyleManager.INSTANCE.getLightMode();
|
||||||
|
return new PredefinedStyle(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
private String name; |
||||||
|
|
||||||
|
|
||||||
|
PatternStyle(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return this.name; |
||||||
|
} |
||||||
|
|
||||||
|
public abstract PredefinedStyle getPredefinedStyle(); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,143 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.config.predefined.PredefinedStyle; |
||||||
|
import com.fr.design.mainframe.predefined.ui.dialog.PredefinedStyleEditDialog; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.predefined.ui.preview.PredefinedStylePreviewPane; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.Icon; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Rectangle; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-25 |
||||||
|
*/ |
||||||
|
public class PredefinedStyleBlock extends JPanel { |
||||||
|
private PredefinedStyle previewObject; |
||||||
|
private PredefinedStyleSelectPane parentPane; |
||||||
|
private Icon markedMode = IOUtils.readIcon("/com/fr/design/form/images/marked.png"); |
||||||
|
private static final Color BORDER_COLOR = new Color(141, 194, 249); |
||||||
|
|
||||||
|
private boolean mouseOver = false; |
||||||
|
|
||||||
|
private MouseListener mouseListener = new MouseListener() { |
||||||
|
@Override |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
setSelect(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseReleased(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
mouseOver = true; |
||||||
|
PredefinedStyleBlock.this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
mouseOver = false; |
||||||
|
PredefinedStyleBlock.this.repaint(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
public PredefinedStyleBlock(PredefinedStyle previewObject, PredefinedStyleSelectPane selectPane, boolean supportEdit) { |
||||||
|
this.previewObject = previewObject; |
||||||
|
this.parentPane = selectPane; |
||||||
|
initPane(supportEdit); |
||||||
|
this.addMouseListener(mouseListener); |
||||||
|
} |
||||||
|
|
||||||
|
private void setSelect() { |
||||||
|
this.parentPane.setSelectedPreviewPane(this); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g) { |
||||||
|
super.paint(g); |
||||||
|
boolean isSelected = ComparatorUtils.equals(this, this.parentPane.getSelectedPreviewPane()); |
||||||
|
if (ComparatorUtils.equals(this.parentPane.getCurrentApplicateStyle(), this.previewObject.getStyleName())) { |
||||||
|
markedMode.paintIcon(this, g, 176, 0); |
||||||
|
} |
||||||
|
if (isSelected || this.mouseOver) { |
||||||
|
g.setColor(BORDER_COLOR); |
||||||
|
Rectangle rectangle = new Rectangle(1, 1, this.getWidth() - 2, this.getHeight() - 2); |
||||||
|
GraphHelper.draw(g, rectangle, Constants.LINE_MEDIUM); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void initPane(boolean supportEdit) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
PredefinedStylePreviewPane content = new PredefinedStylePreviewPane(0.387, 0.384); |
||||||
|
content.setParent(this); |
||||||
|
content.setPreferredSize(new Dimension(200, 180)); |
||||||
|
UILabel label = new UILabel(previewObject.getStyleName()); |
||||||
|
label.setToolTipText(previewObject.getStyleName()); |
||||||
|
label.setPreferredSize(new Dimension(167, 25)); |
||||||
|
|
||||||
|
|
||||||
|
JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(0,9,2,5)); |
||||||
|
panel.add(label, BorderLayout.WEST); |
||||||
|
if (supportEdit) { |
||||||
|
addEditButton(panel); |
||||||
|
} |
||||||
|
|
||||||
|
this.add(content, BorderLayout.CENTER); |
||||||
|
this.add(panel, BorderLayout.SOUTH); |
||||||
|
this.setPreferredSize(new Dimension(200, 210)); |
||||||
|
panel.setBackground(Color.WHITE); |
||||||
|
this.setBackground(Color.WHITE); |
||||||
|
content.refresh(this.previewObject); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void addEditButton(JPanel panel) { |
||||||
|
UIButton editButton = new UIButton(BaseUtils.readIcon("/com/fr/design/icon/icon_edit.png")); |
||||||
|
editButton.setPreferredSize(new Dimension(24, 24)); |
||||||
|
editButton.setBorderPainted(false); |
||||||
|
editButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
PredefinedStyleEditPane editPane = PredefinedStyleEditPane.createEditPane(parentPane); |
||||||
|
PredefinedStyleEditDialog editDialog = new PredefinedStyleEditDialog( |
||||||
|
SwingUtilities.getWindowAncestor(PredefinedStyleBlock.this), editPane, previewObject.isBuiltIn()); |
||||||
|
editPane.populate(PredefinedStyleBlock.this.previewObject); |
||||||
|
editDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
panel.add(editButton, BorderLayout.EAST); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public PredefinedStyle update() { |
||||||
|
return this.previewObject; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,374 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui; |
||||||
|
|
||||||
|
import com.fr.base.ChartColorMatching; |
||||||
|
import com.fr.base.ChartPreStyleConfig; |
||||||
|
import com.fr.base.Style; |
||||||
|
import com.fr.base.background.ColorBackground; |
||||||
|
import com.fr.config.predefined.ColorFillStyle; |
||||||
|
import com.fr.config.predefined.PredefinedCellStyle; |
||||||
|
import com.fr.config.predefined.PredefinedCellStyleConfig; |
||||||
|
import com.fr.config.predefined.PredefinedColorStyle; |
||||||
|
import com.fr.config.predefined.PredefinedStyle; |
||||||
|
import com.fr.config.predefined.PredefinedStyleConfig; |
||||||
|
import com.fr.config.ServerPreferenceConfig; |
||||||
|
import com.fr.design.dialog.FineJOptionPane; |
||||||
|
import com.fr.design.file.HistoryTemplateListCache; |
||||||
|
import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.frpane.UITabbedPane; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.ChartStyleSettingPane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.ColorFillStylePane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.PredefinedBackgroundSettingPane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.ComponentStyleSettingPane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.CellStyleListControlPane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.preview.PredefinedStylePreviewPane; |
||||||
|
import com.fr.design.ui.util.UIUtil; |
||||||
|
import com.fr.design.utils.DesignUtils; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.transaction.Configurations; |
||||||
|
import com.fr.transaction.WorkerFacade; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-26 |
||||||
|
*/ |
||||||
|
public class PredefinedStyleEditPane extends AbstractAttrNoScrollPane { |
||||||
|
private static final Color TIP_COLOR = Color.decode("#8F8F92"); |
||||||
|
|
||||||
|
private PredefinedStylePreviewPane previewPane; |
||||||
|
private UITextField styleNameField; |
||||||
|
private PredefinedBackgroundSettingPane backgroundSettingPane; |
||||||
|
private CellStyleListControlPane cellStyleSettingPane; |
||||||
|
private ComponentStyleSettingPane componentStyleSettingPane; |
||||||
|
private ChartStyleSettingPane chartStyleSettingPane; |
||||||
|
private PredefinedStyleSelectPane selectPane; |
||||||
|
private ColorFillStylePane colorFillStylePane; |
||||||
|
private boolean isPopulating = false; |
||||||
|
private UITabbedPane uiTabbedPane; |
||||||
|
|
||||||
|
private boolean isLightMode = true; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
jPanel.add(createLeftPane(), BorderLayout.WEST); |
||||||
|
jPanel.add(createRightPane(), BorderLayout.CENTER); |
||||||
|
|
||||||
|
this.addAttributeChangeListener(new AttributeChangeListener() { |
||||||
|
@Override |
||||||
|
public void attributeChange() { |
||||||
|
if (!isPopulating) { |
||||||
|
valueChangeAction(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
public void valueChangeAction() { |
||||||
|
boolean displayFormBackground = backgroundSettingPane.currentFormBackground() || uiTabbedPane.getSelectedIndex() == 3; |
||||||
|
previewPane.refresh(this.update(), displayFormBackground); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Edit"); |
||||||
|
} |
||||||
|
|
||||||
|
private PredefinedStyleEditPane(PredefinedStyleSelectPane selectPane, boolean newEditPane) { |
||||||
|
this.selectPane = selectPane; |
||||||
|
this.styleNameField.setEnabled(newEditPane); |
||||||
|
} |
||||||
|
|
||||||
|
public static PredefinedStyleEditPane createEditPane(PredefinedStyleSelectPane selectPane) { |
||||||
|
return new PredefinedStyleEditPane(selectPane, false); |
||||||
|
} |
||||||
|
|
||||||
|
public static PredefinedStyleEditPane createNewEditPane(PredefinedStyleSelectPane selectPane) { |
||||||
|
return new PredefinedStyleEditPane(selectPane, true); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel createLeftPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
JPanel titlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Overall_Preview")); |
||||||
|
previewPane = new PredefinedStylePreviewPane(); |
||||||
|
previewPane.setPreferredSize(new Dimension(517, 500)); |
||||||
|
|
||||||
|
titlePane.add(previewPane); |
||||||
|
jPanel.add(titlePane, BorderLayout.CENTER); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createRightPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
JPanel styleNamePane = createStyleNamePane(); |
||||||
|
jPanel.add(styleNamePane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
JPanel basicSettingPane = createBasicSettingPane(); |
||||||
|
jPanel.add(basicSettingPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel customDetailPane = createCustomDetailPane(); |
||||||
|
jPanel.add(customDetailPane, BorderLayout.SOUTH); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createStyleNamePane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(5, 26, 8); |
||||||
|
jPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Name"))); |
||||||
|
this.styleNameField = new UITextField(); |
||||||
|
this.styleNameField.setPreferredSize(new Dimension(160, 20)); |
||||||
|
jPanel.add(this.styleNameField); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createBasicSettingPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
JPanel titlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Basic_Setting")); |
||||||
|
JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
colorFillStylePane = new ColorFillStylePane(); |
||||||
|
contentPane.add(colorFillStylePane); |
||||||
|
titlePane.add(contentPane); |
||||||
|
jPanel.add(titlePane, BorderLayout.CENTER); |
||||||
|
titlePane.setSize(new Dimension(348, 157)); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCustomDetailPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
JPanel titlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Custom_Detail")); |
||||||
|
titlePane.setLayout(FRGUIPaneFactory.createLeftZeroLayout()); |
||||||
|
jPanel.add(titlePane, BorderLayout.CENTER); |
||||||
|
uiTabbedPane = new UITabbedPane(); |
||||||
|
uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Template_Background"), createTemplateBackgroundSettingPane()); |
||||||
|
uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Cell_Style"), createCellStyleSettingPane()); |
||||||
|
uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Chart_Style"), createChartStyleSettingPane()); |
||||||
|
uiTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Component_Style"), createComponentStyleSettingPane()); |
||||||
|
uiTabbedPane.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
valueChangeAction(); |
||||||
|
} |
||||||
|
}); |
||||||
|
titlePane.add(uiTabbedPane); |
||||||
|
uiTabbedPane.setPreferredSize(new Dimension(323, 298)); |
||||||
|
titlePane.setPreferredSize(new Dimension(333, 320)); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel createTemplateBackgroundSettingPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5)); |
||||||
|
this.backgroundSettingPane = new PredefinedBackgroundSettingPane(); |
||||||
|
jPanel.setPreferredSize(new Dimension(309, 248)); |
||||||
|
UIScrollPane scrollPane = new UIScrollPane(this.backgroundSettingPane); |
||||||
|
scrollPane.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
jPanel.add(new UIScrollPane(this.backgroundSettingPane)); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createCellStyleSettingPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); |
||||||
|
this.cellStyleSettingPane = new CellStyleListControlPane(); |
||||||
|
this.cellStyleSettingPane.registerAttrChangeListener(new AttributeChangeListener() { |
||||||
|
@Override |
||||||
|
public void attributeChange() { |
||||||
|
valueChangeAction(); |
||||||
|
} |
||||||
|
}); |
||||||
|
jPanel.add(this.cellStyleSettingPane); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel createChartStyleSettingPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5)); |
||||||
|
this.chartStyleSettingPane = new ChartStyleSettingPane(); |
||||||
|
jPanel.add(this.chartStyleSettingPane); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel createComponentStyleSettingPane() { |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
jPanel.setLayout(new BorderLayout(0, 5)); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5)); |
||||||
|
this.componentStyleSettingPane = new ComponentStyleSettingPane(); |
||||||
|
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_ComponentStyle_Setting_Tip")); |
||||||
|
label.setForeground(TIP_COLOR); |
||||||
|
jPanel.add(label, BorderLayout.NORTH); |
||||||
|
jPanel.add(this.componentStyleSettingPane, BorderLayout.CENTER); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void populate(PredefinedStyle previewObject) { |
||||||
|
isPopulating = true; |
||||||
|
isLightMode = previewObject.isLightMode(); |
||||||
|
styleNameField.setText(previewObject.getStyleName()); |
||||||
|
this.backgroundSettingPane.populateBean(previewObject.getPredefinedBackground()); |
||||||
|
this.cellStyleSettingPane.populateBean(previewObject.getCellStyleConfig()); |
||||||
|
this.componentStyleSettingPane.populateBean(previewObject.getComponentStyle()); |
||||||
|
this.colorFillStylePane.populateBean(previewObject.getPredefinedColorStyle()); |
||||||
|
this.chartStyleSettingPane.populateBean(previewObject.getPredefinedChartStyle()); |
||||||
|
previewPane.refresh(previewObject); |
||||||
|
isPopulating = false; |
||||||
|
} |
||||||
|
|
||||||
|
public PredefinedStyle update() { |
||||||
|
PredefinedStyle predefinedStyle = new PredefinedStyle(); |
||||||
|
predefinedStyle.setLightMode(isLightMode); |
||||||
|
predefinedStyle.setStyleName(this.styleNameField.getText()); |
||||||
|
PredefinedCellStyleConfig cellStyleConfig = this.cellStyleSettingPane.updateBean(); |
||||||
|
predefinedStyle.setCellStyleConfig(cellStyleConfig); |
||||||
|
|
||||||
|
predefinedStyle.setPredefinedBackground(this.backgroundSettingPane.updateBean()); |
||||||
|
predefinedStyle.setComponentStyle(this.componentStyleSettingPane.updateBean()); |
||||||
|
|
||||||
|
PredefinedColorStyle colorStyle = this.colorFillStylePane.update(); |
||||||
|
updateCellStyleByColorStyle(colorStyle, cellStyleConfig); |
||||||
|
predefinedStyle.setPredefinedColorStyle(colorStyle); |
||||||
|
predefinedStyle.setPredefinedChartStyle(this.chartStyleSettingPane.updateBean()); |
||||||
|
return predefinedStyle; |
||||||
|
} |
||||||
|
|
||||||
|
private void updateCellStyleByColorStyle(PredefinedColorStyle colorStyle, PredefinedCellStyleConfig cellStyleConfig) { |
||||||
|
PredefinedCellStyle headerStyle = cellStyleConfig.getStyle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Header")); |
||||||
|
PredefinedCellStyle highlightStyle = cellStyleConfig.getStyle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Highlight_Text")); |
||||||
|
ColorFillStyle colorFillStyle = colorStyle.getColorFillStyle(); |
||||||
|
List<Color> colorList = new ArrayList<>(); |
||||||
|
if (colorFillStyle == null || colorFillStyle.getColorList().size() == 0){ |
||||||
|
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance(); |
||||||
|
String defaultName = config.getCurrentStyle(); |
||||||
|
ChartColorMatching defaultStyle = (ChartColorMatching) config.getPreStyle(defaultName); |
||||||
|
if (defaultStyle != null) { |
||||||
|
colorList = defaultStyle.getColorList(); |
||||||
|
} |
||||||
|
} else { |
||||||
|
colorList = colorFillStyle.getColorList(); |
||||||
|
} |
||||||
|
if (colorList.size() < 2) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (headerStyle != null) { |
||||||
|
Style style = headerStyle.getStyle(); |
||||||
|
Color color = colorList.get(0); |
||||||
|
headerStyle.setStyle(style.deriveBackground(ColorBackground.getInstance(color))); |
||||||
|
} |
||||||
|
if (highlightStyle != null) { |
||||||
|
Style style = highlightStyle.getStyle(); |
||||||
|
Color color = colorList.get(1); |
||||||
|
FRFont font = style.getFRFont(); |
||||||
|
font.setForeground(color); |
||||||
|
highlightStyle.setStyle(style.deriveFRFont(font)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public boolean saveStyle() { |
||||||
|
PredefinedStyle previewObject; |
||||||
|
try { |
||||||
|
previewObject = update(); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (this.styleNameField.isEnabled() && !validateRepeat(previewObject.getStyleName())) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (!saveStyle(previewObject)) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
HistoryTemplateListCache.getInstance().repaintCurrentEditingTemplate(); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean saveStyle(PredefinedStyle previewObject) { |
||||||
|
PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig(); |
||||||
|
if (StringUtils.isEmpty(previewObject.getStyleName())) { |
||||||
|
FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(PredefinedStyleEditPane.this), |
||||||
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Name_Cannot_Empty")); |
||||||
|
|
||||||
|
return false; |
||||||
|
} |
||||||
|
config.add(previewObject); |
||||||
|
PredefinedStyleConfig sortedConfig = resortConfigStyles(previewObject, config); |
||||||
|
// Configurations.modify(new WorkerFacade(ServerPreferenceConfig.class) {
|
||||||
|
// @Override
|
||||||
|
// public void run() {
|
||||||
|
// ServerPreferenceConfig.getInstance().setPreferenceStyleConfig(sortedConfig);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
selectPane.refreshPane(); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
public void saveAsNewStyle(String styleName) { |
||||||
|
PredefinedStyle previewObject; |
||||||
|
try { |
||||||
|
previewObject = update(); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
return; |
||||||
|
} |
||||||
|
previewObject.setStyleName(styleName); |
||||||
|
if (validateRepeat(styleName)) { |
||||||
|
saveStyle(previewObject); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean validateRepeat(String styleName) { |
||||||
|
PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig(); |
||||||
|
if (config.getStyle(styleName) != null) { |
||||||
|
FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(PredefinedStyleEditPane.this), |
||||||
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Name_Repeat")); |
||||||
|
|
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
private PredefinedStyleConfig resortConfigStyles(PredefinedStyle priorityStyle, PredefinedStyleConfig config){ |
||||||
|
PredefinedStyleConfig sortedConfig = new PredefinedStyleConfig(); |
||||||
|
PredefinedStyle defaultStyle = config.getDefaultPredefinedStyle(); |
||||||
|
if (defaultStyle != null) { |
||||||
|
sortedConfig.add(defaultStyle); |
||||||
|
config.removeStyle(defaultStyle.getStyleName()); |
||||||
|
sortedConfig.setDefaultPredefinedStyle(defaultStyle.getStyleName()); |
||||||
|
} |
||||||
|
if (priorityStyle != null && !priorityStyle.isDefaultStyle()) { |
||||||
|
sortedConfig.add(priorityStyle); |
||||||
|
config.removeStyle(priorityStyle.getStyleName()); |
||||||
|
} |
||||||
|
Iterator<PredefinedStyle> iterator = config.getPredefinedStyleIterator(); |
||||||
|
while (iterator.hasNext()) { |
||||||
|
PredefinedStyle entry = iterator.next(); |
||||||
|
sortedConfig.add(entry); |
||||||
|
} |
||||||
|
sortedConfig.setCompatibleStyleName(config.getCompatibleStyleName()); |
||||||
|
return sortedConfig; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,102 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui; |
||||||
|
|
||||||
|
import com.fr.config.ServerPreferenceConfig; |
||||||
|
import com.fr.config.predefined.PredefinedStyle; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.event.ChangeListener; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-26 |
||||||
|
*/ |
||||||
|
public class PredefinedStyleSelectPane extends BasicPane { |
||||||
|
private PredefinedStyleBlock selectedBlock; |
||||||
|
private boolean editable; |
||||||
|
private JPanel contentPane; |
||||||
|
private String currentApplicateStyle; |
||||||
|
private ChangeListener changeListener; |
||||||
|
|
||||||
|
|
||||||
|
public PredefinedStyleSelectPane(String currentApplicateStyle, boolean editable) { |
||||||
|
this.editable = editable; |
||||||
|
this.currentApplicateStyle = currentApplicateStyle; |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public void registerChangeListener(ChangeListener changeListener) { |
||||||
|
this.changeListener = changeListener; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void initPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
contentPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(5, 8); |
||||||
|
createContentPane(); |
||||||
|
UIScrollPane scrollPane = new UIScrollPane(contentPane); |
||||||
|
scrollPane.setPreferredSize(new Dimension(630, 480)); |
||||||
|
scrollPane.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
this.add(scrollPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void createContentPane() { |
||||||
|
contentPane.removeAll(); |
||||||
|
Iterator<PredefinedStyle> iterator = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig().getPredefinedStyleIterator(); |
||||||
|
int rowCount = (ServerPreferenceConfig.getInstance().getPreferenceStyleConfig().getPredefinedSize() +2)/ 3; |
||||||
|
contentPane.setPreferredSize(new Dimension(618, 220 * rowCount)); |
||||||
|
while (iterator.hasNext()) { |
||||||
|
PredefinedStyle tmpStyle = iterator.next(); |
||||||
|
|
||||||
|
if (tmpStyle != null) { |
||||||
|
PredefinedStyleBlock tmpPanel = |
||||||
|
new PredefinedStyleBlock(tmpStyle, this, this.editable); |
||||||
|
contentPane.add(tmpPanel); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public String getCurrentApplicateStyle() { |
||||||
|
return currentApplicateStyle; |
||||||
|
} |
||||||
|
|
||||||
|
public void refreshPane() { |
||||||
|
createContentPane(); |
||||||
|
this.validate(); |
||||||
|
this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSelectedPreviewPane(PredefinedStyleBlock selectedPreviewPane) { |
||||||
|
this.selectedBlock = selectedPreviewPane; |
||||||
|
if (changeListener != null) { |
||||||
|
changeListener.fireChanged(null); |
||||||
|
} |
||||||
|
this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
public PredefinedStyleBlock getSelectedPreviewPane() { |
||||||
|
return selectedBlock; |
||||||
|
} |
||||||
|
|
||||||
|
public PredefinedStyle update() { |
||||||
|
if (this.selectedBlock == null){ |
||||||
|
return null; |
||||||
|
} |
||||||
|
return this.selectedBlock.update(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,159 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedNameStyleProvider; |
||||||
|
import com.fr.design.file.HistoryTemplateListCache; |
||||||
|
import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
import com.fr.design.mainframe.predefined.ui.preview.StyleSettingPreviewPane; |
||||||
|
import javax.swing.ButtonGroup; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-02 |
||||||
|
*/ |
||||||
|
public abstract class PredefinedStyleSettingPane<T> extends AbstractAttrNoScrollPane { |
||||||
|
protected StyleSettingPreviewPane previewPane; |
||||||
|
protected UIRadioButton predefinedRadioBtn; |
||||||
|
private UIRadioButton customRadioBtn; |
||||||
|
private JPanel customDetailPane; |
||||||
|
private JPanel predefinedSettingPane; |
||||||
|
private CardLayout tabbedPane; |
||||||
|
private JPanel center; |
||||||
|
private boolean isPopulating = false; |
||||||
|
|
||||||
|
|
||||||
|
public void setPopulating(boolean populating) { |
||||||
|
isPopulating = populating; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initContentPane() { |
||||||
|
leftContentPane = createContentPane(); |
||||||
|
this.add(leftContentPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
previewPane = createPreviewPane(); |
||||||
|
JPanel previewTitlePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview")); |
||||||
|
if (previewPane != null) { |
||||||
|
previewTitlePane.setPreferredSize(new Dimension(407, 527)); |
||||||
|
previewTitlePane.add(previewPane); |
||||||
|
contentPane.add(previewTitlePane, BorderLayout.WEST); |
||||||
|
} |
||||||
|
|
||||||
|
customDetailPane = createCustomDetailPane(); |
||||||
|
predefinedSettingPane = createPredefinedSettingPane(); |
||||||
|
|
||||||
|
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(10, 20, 10); |
||||||
|
jPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style"))); |
||||||
|
predefinedRadioBtn = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined")); |
||||||
|
customRadioBtn = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom")); |
||||||
|
|
||||||
|
tabbedPane = new CardLayout(); |
||||||
|
center = new JPanel(tabbedPane); |
||||||
|
center.add(predefinedSettingPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined")); |
||||||
|
center.add(customDetailPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom")); |
||||||
|
predefinedRadioBtn.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
populateCustomPane(); |
||||||
|
tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined")); |
||||||
|
} |
||||||
|
}); |
||||||
|
customRadioBtn.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom")); |
||||||
|
} |
||||||
|
}); |
||||||
|
jPanel.add(predefinedRadioBtn); |
||||||
|
jPanel.add(customRadioBtn); |
||||||
|
|
||||||
|
ButtonGroup layoutBG = new ButtonGroup(); |
||||||
|
layoutBG.add(predefinedRadioBtn); |
||||||
|
layoutBG.add(customRadioBtn); |
||||||
|
centerPane.add(jPanel, BorderLayout.NORTH); |
||||||
|
centerPane.add(center, BorderLayout.CENTER); |
||||||
|
contentPane.add(centerPane, BorderLayout.CENTER); |
||||||
|
this.addAttributeChangeListener(new AttributeChangeListener() { |
||||||
|
@Override |
||||||
|
public void attributeChange() { |
||||||
|
if (isPopulating) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (previewPane != null) { |
||||||
|
previewPane.refresh(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
return contentPane; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected abstract StyleSettingPreviewPane createPreviewPane(); |
||||||
|
|
||||||
|
protected abstract JPanel createCustomDetailPane(); |
||||||
|
|
||||||
|
protected JPanel createPredefinedSettingPane() { |
||||||
|
return new JPanel(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void populate(PredefinedNameStyleProvider nameStyle) { |
||||||
|
this.predefinedRadioBtn.setSelected(nameStyle.usePredefinedStyle()); |
||||||
|
this.customRadioBtn.setSelected(!nameStyle.usePredefinedStyle()); |
||||||
|
if (nameStyle.usePredefinedStyle()) { |
||||||
|
tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Predefined")); |
||||||
|
} else { |
||||||
|
tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom")); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
protected String getPredefinedStyleName() { |
||||||
|
JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
||||||
|
return template.getTemplatePredefinedStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 用于在切换到预定义样式后重置自定义样式的设置 |
||||||
|
*/ |
||||||
|
protected abstract void populateCustomPane(); |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 展示数据 |
||||||
|
* |
||||||
|
* @param ob 待展示的对象 |
||||||
|
*/ |
||||||
|
public abstract void populateBean(T ob); |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存数据 |
||||||
|
* |
||||||
|
* @return 待保存的对象 |
||||||
|
*/ |
||||||
|
public abstract T updateBean(); |
||||||
|
|
||||||
|
/** |
||||||
|
* 保存数据 |
||||||
|
* |
||||||
|
* @param ob 待保存的对象 |
||||||
|
*/ |
||||||
|
public void updateBean(T ob) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedStyle; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-28 |
||||||
|
*/ |
||||||
|
public class ReportPredefinedStylePane extends BasicPane { |
||||||
|
private PredefinedStyleSelectPane selectPane; |
||||||
|
private JTemplate currentTemplate; |
||||||
|
|
||||||
|
public ReportPredefinedStylePane(JTemplate jTemplate) { |
||||||
|
this.currentTemplate = jTemplate; |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Select")); |
||||||
|
jPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); |
||||||
|
JPanel subPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
this.selectPane = new PredefinedStyleSelectPane(currentTemplate.getTemplatePredefinedStyle(), false); |
||||||
|
subPanel.add(this.selectPane, BorderLayout.CENTER); |
||||||
|
jPanel.add(subPanel, BorderLayout.CENTER); |
||||||
|
this.add(jPanel, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
public void update() { |
||||||
|
PredefinedStyle style = selectPane.update(); |
||||||
|
if (style != null) { |
||||||
|
// currentTemplate.resetPredefinedStyle(style.getStyleName());
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void refresh() { |
||||||
|
this.selectPane.refreshPane(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Template_Style"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,218 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.config.predefined.PredefinedStyle; |
||||||
|
import com.fr.config.predefined.PredefinedStyleConfig; |
||||||
|
import com.fr.config.ServerPreferenceConfig; |
||||||
|
import com.fr.design.actions.UpdateAction; |
||||||
|
import com.fr.design.event.ChangeEvent; |
||||||
|
import com.fr.design.event.ChangeListener; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.predefined.PatternStyle; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.FineJOptionPane; |
||||||
|
import com.fr.design.gui.itoolbar.UIToolbar; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.icon.IconPathConstants; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.predefined.ui.dialog.PredefinedStyleEditDialog; |
||||||
|
import com.fr.design.menu.MenuDef; |
||||||
|
import com.fr.design.menu.ToolBarDef; |
||||||
|
import com.fr.design.utils.DesignUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.transaction.Configurations; |
||||||
|
import com.fr.transaction.WorkerFacade; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JOptionPane; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JSeparator; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-25 |
||||||
|
*/ |
||||||
|
public class ServerPredefinedStylePane extends BasicPane { |
||||||
|
|
||||||
|
private static final Color TIP_COLOR = Color.decode("#8F8F92"); |
||||||
|
private RemoveAction removeAction; |
||||||
|
|
||||||
|
private PredefinedStyleSelectPane selectPane; |
||||||
|
|
||||||
|
|
||||||
|
public ServerPredefinedStylePane() { |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
JPanel jPanel = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Manager")); |
||||||
|
jPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); |
||||||
|
jPanel.setLayout(FRGUIPaneFactory.createLeftZeroLayout()); |
||||||
|
JPanel subPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
subPanel.add(createControlPane(), BorderLayout.NORTH); |
||||||
|
PredefinedStyle style = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig().getDefaultPredefinedStyle(); |
||||||
|
|
||||||
|
this.selectPane = new PredefinedStyleSelectPane(style == null ? StringUtils.EMPTY : style.getStyleName(), true); |
||||||
|
this.selectPane.registerChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void fireChanged(ChangeEvent event) { |
||||||
|
PredefinedStyle selectStyle = selectPane.getSelectedPreviewPane().update(); |
||||||
|
removeAction.setEnabled(!selectStyle.isBuiltIn()); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.selectPane.addMouseListener(new MouseListener() { |
||||||
|
@Override |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
if (selectPane.getSelectedPreviewPane() != null) { |
||||||
|
removeAction.setEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseReleased(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
|
||||||
|
} |
||||||
|
}); |
||||||
|
JSeparator jSeparator = new JSeparator(); |
||||||
|
subPanel.add(jSeparator, BorderLayout.CENTER); |
||||||
|
subPanel.add(this.selectPane, BorderLayout.SOUTH); |
||||||
|
jPanel.add(subPanel); |
||||||
|
this.add(jPanel, BorderLayout.CENTER); |
||||||
|
this.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel createControlPane() { |
||||||
|
MenuDef addMenuDef = new MenuDef(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Action_Add")); |
||||||
|
addMenuDef.setIconPath(IconPathConstants.ADD_POPMENU_ICON_PATH); |
||||||
|
createAddMenuDef(addMenuDef); |
||||||
|
ToolBarDef toolbarDef = new ToolBarDef(); |
||||||
|
removeAction = new RemoveAction(); |
||||||
|
removeAction.setEnabled(false); |
||||||
|
toolbarDef.addShortCut(addMenuDef, removeAction); |
||||||
|
UIToolbar toolBar = ToolBarDef.createJToolBar(); |
||||||
|
toolBar.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); |
||||||
|
toolbarDef.updateToolBar(toolBar); |
||||||
|
JPanel toolbarPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
toolbarPane.add(toolBar, BorderLayout.CENTER); |
||||||
|
UILabel tipLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Style_Manager_Tip")); |
||||||
|
tipLabel.setForeground(TIP_COLOR); |
||||||
|
tipLabel.setHorizontalTextPosition(UILabel.RIGHT); |
||||||
|
toolbarPane.add(tipLabel, BorderLayout.EAST); |
||||||
|
toolbarPane.setPreferredSize(new Dimension(620, 30)); |
||||||
|
return toolbarPane; |
||||||
|
} |
||||||
|
|
||||||
|
private void createAddMenuDef(MenuDef addMenuDef) { |
||||||
|
addMenuDef.setRePaint(true); |
||||||
|
addMenuDef.addShortCut(new CreateStyleAction(PatternStyle.DARK_STYLE)); |
||||||
|
addMenuDef.addShortCut(new CreateStyleAction(PatternStyle.LIGHT_STYLE)); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void update() { |
||||||
|
PredefinedStyle style = selectPane.update(); |
||||||
|
if (style != null) { |
||||||
|
PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig(); |
||||||
|
config.setDefaultPredefinedStyle(style.getStyleName()); |
||||||
|
// Configurations.modify(new WorkerFacade(ServerPreferenceConfig.class) {
|
||||||
|
// @Override
|
||||||
|
// public void run() {
|
||||||
|
// ServerPreferenceConfig.getInstance().setPreferenceStyleConfig(config);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Server_Style"); |
||||||
|
} |
||||||
|
|
||||||
|
private class RemoveAction extends UpdateAction { |
||||||
|
|
||||||
|
public RemoveAction() { |
||||||
|
this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Remove")); |
||||||
|
this.setMnemonic('R'); |
||||||
|
this.setSmallIcon(BaseUtils.readIcon(IconPathConstants.TD_REMOVE_ICON_PATH)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
PredefinedStyle previewObject = ServerPredefinedStylePane.this.selectPane.update(); |
||||||
|
int selVal = FineJOptionPane.showConfirmDialog(SwingUtilities.getWindowAncestor(ServerPredefinedStylePane.this), |
||||||
|
Toolkit.i18nText("Fine-Design_Predefined_Remove_Style_Confirm", previewObject.getStyleName()), |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Delete"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); |
||||||
|
if (selVal == JOptionPane.YES_OPTION) { |
||||||
|
removeStyle(previewObject.getStyleName()); |
||||||
|
ServerPredefinedStylePane.this.selectPane.refreshPane(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private class CreateStyleAction extends UpdateAction { |
||||||
|
private PatternStyle style; |
||||||
|
|
||||||
|
public CreateStyleAction(PatternStyle style) { |
||||||
|
this.style = style; |
||||||
|
this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Predefined_Create_Parttern_Style") + style.getName()); |
||||||
|
this.setMnemonic('R'); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
createNewPatternStylePane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void createNewPatternStylePane() { |
||||||
|
PredefinedStyleEditPane editPane = PredefinedStyleEditPane.createNewEditPane(selectPane); |
||||||
|
PredefinedStyleEditDialog editDialog = new PredefinedStyleEditDialog( |
||||||
|
SwingUtilities.getWindowAncestor(ServerPredefinedStylePane.this), editPane); |
||||||
|
PredefinedStyle predefinedStyle = style.getPredefinedStyle(); |
||||||
|
predefinedStyle.setStyleName(StringUtils.EMPTY); |
||||||
|
editPane.populate(predefinedStyle); |
||||||
|
editDialog.setVisible(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void removeStyle(String name) { |
||||||
|
PredefinedStyleConfig config = ServerPreferenceConfig.getInstance().getPreferenceStyleConfig(); |
||||||
|
config.removeStyle(name); |
||||||
|
// Configurations.modify(new WorkerFacade(ServerPreferenceConfig.class) {
|
||||||
|
// @Override
|
||||||
|
// public void run() {
|
||||||
|
// ServerPreferenceConfig.getInstance().setPreferenceStyleConfig(config);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,308 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.Style; |
||||||
|
import com.fr.config.predefined.PredefinedCellStyle; |
||||||
|
import com.fr.config.predefined.PredefinedCellStyleConfig; |
||||||
|
import com.fr.design.actions.UpdateAction; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.FineJOptionPane; |
||||||
|
import com.fr.design.gui.NameInspector; |
||||||
|
import com.fr.design.gui.controlpane.JListControlPane; |
||||||
|
import com.fr.design.gui.controlpane.NameObjectCreator; |
||||||
|
import com.fr.design.gui.controlpane.NameableCreator; |
||||||
|
import com.fr.design.gui.controlpane.ShortCut4JControlPane; |
||||||
|
import com.fr.design.gui.controlpane.UnrepeatedNameHelper; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.ilist.ListModelElement; |
||||||
|
import com.fr.design.gui.ilist.ModNameActionListener; |
||||||
|
import com.fr.design.gui.style.AlignmentPane; |
||||||
|
import com.fr.design.gui.style.FormatPane; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.cell.CustomPredefinedStylePane; |
||||||
|
import com.fr.design.menu.ShortCut; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.NameObject; |
||||||
|
import com.fr.invoke.Reflect; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.Nameable; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JOptionPane; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JSeparator; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.lang.reflect.Constructor; |
||||||
|
import java.lang.reflect.InvocationTargetException; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-27 |
||||||
|
*/ |
||||||
|
public class CellStyleListControlPane extends JListControlPane { |
||||||
|
private boolean namePermitted = true; |
||||||
|
private AttributeChangeListener attributeChangeListener; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public CellStyleListControlPane() { |
||||||
|
super(); |
||||||
|
this.addModNameActionListener(new ModNameActionListener() { |
||||||
|
public void nameModed(int index, String oldName, String newName) { |
||||||
|
if (ComparatorUtils.equals(oldName, newName) || ComparatorUtils.equals(newName, NameInspector.ILLEGAL_NAME_HOLDER)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
namePermitted = true; |
||||||
|
String[] allNames = nameableList.getAllNames(); |
||||||
|
allNames[index] = StringUtils.EMPTY; |
||||||
|
if (StringUtils.isEmpty(newName)) { |
||||||
|
showTipDialogAndReset(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Empty_Name"), index); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (isNameRepeated(new List[]{Arrays.asList(allNames)}, newName)) { |
||||||
|
showTipDialogAndReset(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Duplicate_Name", newName), index); |
||||||
|
return; |
||||||
|
} |
||||||
|
populateSelectedValue(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void registerAttrChangeListener(AttributeChangeListener listener){ |
||||||
|
this.attributeChangeListener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void showTipDialogAndReset(String content, int index) { |
||||||
|
nameableList.stopEditing(); |
||||||
|
|
||||||
|
FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(CellStyleListControlPane.this), |
||||||
|
content, |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Alert"), |
||||||
|
JOptionPane.WARNING_MESSAGE); |
||||||
|
setIllegalIndex(index); |
||||||
|
namePermitted = false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public NameableCreator[] createNameableCreators() { |
||||||
|
return new NameableCreator[]{ |
||||||
|
new CellStyleNameObjectCreator(Toolkit.i18nText("Fine-Design_Predefined_Cell_New_Style"), |
||||||
|
PredefinedCellStyle.class, CustomPredefinedStylePaneNoBorder.class) { |
||||||
|
@Override |
||||||
|
public boolean acceptDefaultNameObject(Object ob) { |
||||||
|
return ((PredefinedCellStyle) ob).isDefaultStyle(); |
||||||
|
} |
||||||
|
}, |
||||||
|
new CellStyleNameObjectCreator(Toolkit.i18nText("Fine-Design_Predefined_Cell_New_Style"), |
||||||
|
PredefinedCellStyle.class, CustomPredefinedStylePane.class)}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BasicBeanPane createPaneByCreators(NameableCreator creator) { |
||||||
|
CustomPredefinedStylePane stylePane = (CustomPredefinedStylePane) super.createPaneByCreators(creator); |
||||||
|
stylePane.registerAttrChangeListener(attributeChangeListener); |
||||||
|
return stylePane; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return StringUtils.EMPTY; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponentPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.setCreators(this.createNameableCreators()); |
||||||
|
initCardPane(); |
||||||
|
JPanel leftPane = getLeftPane(); |
||||||
|
JSeparator jSeparator = new JSeparator(SwingConstants.VERTICAL); |
||||||
|
leftPane.setPreferredSize(new Dimension(70, 0)); |
||||||
|
jSeparator.setPreferredSize(new Dimension(2, 0)); |
||||||
|
cardPane.setPreferredSize(new Dimension(238, 0)); |
||||||
|
cardPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); |
||||||
|
JPanel mainSplitPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
mainSplitPane.add(leftPane, BorderLayout.WEST); |
||||||
|
mainSplitPane.add(jSeparator, BorderLayout.CENTER); |
||||||
|
mainSplitPane.add(cardPane, BorderLayout.EAST); |
||||||
|
|
||||||
|
this.add(mainSplitPane, BorderLayout.CENTER); |
||||||
|
this.checkButtonEnabled(); |
||||||
|
} |
||||||
|
|
||||||
|
protected ShortCut4JControlPane[] createShortcuts() { |
||||||
|
return new ShortCut4JControlPane[]{ |
||||||
|
createAddItemShortCut4JControlPane(), |
||||||
|
new RemoveItemShortCut4JControlPane(new RemoveItemAction()) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static class CustomPredefinedStylePaneNoBorder extends CustomPredefinedStylePane { |
||||||
|
@Override |
||||||
|
protected List<BasicPane> initPaneList() { |
||||||
|
paneList = new ArrayList<BasicPane>(); |
||||||
|
paneList.add(new FormatPane()); |
||||||
|
paneList.add(new AlignmentPane()); |
||||||
|
return paneList; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private ShortCut4JControlPane createAddItemShortCut4JControlPane (){ |
||||||
|
ShortCut shortCut = shortCutFactory.createAddItemUpdateAction(new NameableCreator[]{ |
||||||
|
new CellStyleNameObjectCreator(Toolkit.i18nText("Fine-Design_Predefined_Cell_New_Style"), |
||||||
|
PredefinedCellStyle.class, CustomPredefinedStylePane.class)}); |
||||||
|
return new AddItemShortCut4JControlPane(shortCut); |
||||||
|
} |
||||||
|
|
||||||
|
private class AddItemShortCut4JControlPane extends ShortCut4JControlPane{ |
||||||
|
AddItemShortCut4JControlPane(ShortCut shortCut) { |
||||||
|
this.shortCut = shortCut; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkEnable() { |
||||||
|
this.shortCut.setEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private class RemoveItemShortCut4JControlPane extends ShortCut4JControlPane { |
||||||
|
RemoveItemShortCut4JControlPane(ShortCut shortCut) { |
||||||
|
this.shortCut = shortCut; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkEnable() { |
||||||
|
ListModelElement selectModel = CellStyleListControlPane.this.getSelectedValue(); |
||||||
|
if (selectModel != null) { |
||||||
|
NameObject selectNameObject = (NameObject) selectModel.wrapper; |
||||||
|
PredefinedCellStyle cellStyle = (PredefinedCellStyle) (selectNameObject.getObject()); |
||||||
|
this.shortCut.setEnabled(!cellStyle.isBuiltIn() && !cellStyle.isDefaultStyle()); |
||||||
|
} else { |
||||||
|
this.shortCut.setEnabled(false); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private class RemoveItemAction extends UpdateAction { |
||||||
|
RemoveItemAction() { |
||||||
|
this.setName(com.fr.design.i18n.Toolkit.i18nText(("Fine-Design_Basic_Action_Remove"))); |
||||||
|
this.setMnemonic('R'); |
||||||
|
this.setSmallIcon(BaseUtils |
||||||
|
.readIcon("/com/fr/base/images/cell/control/remove.png")); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
CellStyleListControlPane.this.onRemoveItem(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
class CellStyleNameObjectCreator extends NameObjectCreator { |
||||||
|
public CellStyleNameObjectCreator(String menuName, Class clazz, Class<? extends BasicBeanPane> updatePane) { |
||||||
|
super(menuName, clazz, updatePane); |
||||||
|
} |
||||||
|
|
||||||
|
public Nameable createNameable(UnrepeatedNameHelper helper) { |
||||||
|
Constructor<? extends PredefinedCellStyle> constructor = null; |
||||||
|
try { |
||||||
|
constructor = clazzOfInitCase.getConstructor(); |
||||||
|
PredefinedCellStyle cellStyle = constructor.newInstance(); |
||||||
|
|
||||||
|
cellStyle.setName(menuName); |
||||||
|
cellStyle.setStyle(Style.getInstance()); |
||||||
|
return new NameObject(helper.createUnrepeatedName(this.menuName()), cellStyle); |
||||||
|
|
||||||
|
} catch (NoSuchMethodException e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} catch (IllegalAccessException e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} catch (InstantiationException e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} catch (InvocationTargetException e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
/** |
||||||
|
* |
||||||
|
* @param ob |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public Object acceptObject2Populate(Object ob) { |
||||||
|
if (ob instanceof NameObject) { |
||||||
|
ob = ((NameObject) ob).getObject(); |
||||||
|
} |
||||||
|
if (clazzOfObject != null && clazzOfObject.isInstance(ob) && acceptDefaultNameObject(ob)) { |
||||||
|
doSthChanged4Icon(ob); |
||||||
|
return ob; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean acceptDefaultNameObject(Object ob) { |
||||||
|
return !((PredefinedCellStyle) ob).isDefaultStyle(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Populate |
||||||
|
*/ |
||||||
|
public void populateBean(PredefinedCellStyleConfig ob) { |
||||||
|
if (ob == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
List nameStyleList = new ArrayList(); |
||||||
|
|
||||||
|
Iterator styleNameIterator = ob.getStyleNameIterator(); |
||||||
|
while (styleNameIterator.hasNext()) { |
||||||
|
String name = (String) styleNameIterator.next(); |
||||||
|
PredefinedCellStyle tmpStyle = ob.getStyle(name); |
||||||
|
|
||||||
|
if (tmpStyle != null) { |
||||||
|
nameStyleList.add(new NameObject(name, tmpStyle)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
NameObject[] nameObjects = new NameObject[nameStyleList.size()]; |
||||||
|
nameStyleList.toArray(nameObjects); |
||||||
|
|
||||||
|
populate(nameObjects); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public PredefinedCellStyleConfig updateBean() { |
||||||
|
Nameable[] nameables = this.update(); |
||||||
|
PredefinedCellStyleConfig styleConfig = new PredefinedCellStyleConfig(); |
||||||
|
for (int i = 0; i < nameables.length; i++) { |
||||||
|
PredefinedCellStyle tmpStyle = (PredefinedCellStyle) ((NameObject) nameables[i]).getObject(); |
||||||
|
tmpStyle.setName(nameables[i].getName()); |
||||||
|
styleConfig.addStyle(tmpStyle); |
||||||
|
} |
||||||
|
return styleConfig; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,94 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedChartStyle; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.MultiTabPane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.chart.ChartAxisStylePane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.chart.ChartBackgroundStylePane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.chart.ChartDataSheetStylePane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.chart.ChartLabelStylePane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.chart.ChartLegendStylePane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.chart.ChartTitleStylePane; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2020-09-16 |
||||||
|
*/ |
||||||
|
public class ChartStyleSettingPane extends MultiTabPane<PredefinedChartStyle> { |
||||||
|
|
||||||
|
private ChartTitleStylePane chartTitleStylePane; |
||||||
|
private ChartLegendStylePane chartLegendStylePane; |
||||||
|
private ChartLabelStylePane chartLabelPane; |
||||||
|
private ChartAxisStylePane chartAxisStylePane; |
||||||
|
private ChartDataSheetStylePane chartDataSheetStylePane; |
||||||
|
private ChartBackgroundStylePane chartBackgroundStylePane; |
||||||
|
|
||||||
|
public ChartStyleSettingPane() { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initLayout() { |
||||||
|
super.initLayout(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<BasicPane> initPaneList() { |
||||||
|
this.chartTitleStylePane = new ChartTitleStylePane(); |
||||||
|
this.chartLegendStylePane = new ChartLegendStylePane(); |
||||||
|
this.chartLabelPane = new ChartLabelStylePane(); |
||||||
|
this.chartAxisStylePane = new ChartAxisStylePane(); |
||||||
|
this.chartDataSheetStylePane = new ChartDataSheetStylePane(); |
||||||
|
this.chartBackgroundStylePane = new ChartBackgroundStylePane(); |
||||||
|
paneList = new ArrayList<>(); |
||||||
|
paneList.add(this.chartTitleStylePane); |
||||||
|
paneList.add(this.chartLegendStylePane); |
||||||
|
paneList.add(this.chartLabelPane); |
||||||
|
paneList.add(this.chartAxisStylePane); |
||||||
|
paneList.add(this.chartDataSheetStylePane); |
||||||
|
paneList.add(this.chartBackgroundStylePane); |
||||||
|
return paneList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(PredefinedChartStyle ob) { |
||||||
|
chartTitleStylePane.populate(ob); |
||||||
|
chartLegendStylePane.populate(ob); |
||||||
|
chartLabelPane.populate(ob); |
||||||
|
chartAxisStylePane.populate(ob); |
||||||
|
chartDataSheetStylePane.populate(ob); |
||||||
|
chartBackgroundStylePane.populate(ob); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(PredefinedChartStyle ob) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public PredefinedChartStyle updateBean() { |
||||||
|
PredefinedChartStyle chartStyle = new PredefinedChartStyle(); |
||||||
|
chartTitleStylePane.update(chartStyle); |
||||||
|
chartLegendStylePane.update(chartStyle); |
||||||
|
chartLabelPane.update(chartStyle); |
||||||
|
chartAxisStylePane.update(chartStyle); |
||||||
|
chartDataSheetStylePane.update(chartStyle); |
||||||
|
chartBackgroundStylePane.update(chartStyle); |
||||||
|
return chartStyle; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,292 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail; |
||||||
|
|
||||||
|
import com.fr.base.ChartColorMatching; |
||||||
|
import com.fr.base.ChartPreStyleConfig; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.chart.base.ChartConstants; |
||||||
|
import com.fr.config.predefined.ColorFillStyle; |
||||||
|
import com.fr.config.predefined.PredefinedColorStyle; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.icombobox.ColorSchemeComboBox; |
||||||
|
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.style.background.gradient.FixedGradientBar; |
||||||
|
import com.fr.design.style.color.ColorAdjustPane; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.List; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2020-09-15 |
||||||
|
*/ |
||||||
|
public class ColorFillStylePane extends BasicBeanPane<ColorFillStyle> { |
||||||
|
|
||||||
|
private ColorSchemeComboBox styleSelectBox; |
||||||
|
private JPanel customPane; |
||||||
|
private JPanel changeColorSetPane; |
||||||
|
private FixedGradientBar colorGradient; |
||||||
|
|
||||||
|
private CardLayout cardLayout; |
||||||
|
|
||||||
|
private ColorAdjustPane colorAdjustPane; |
||||||
|
|
||||||
|
private Color[] gradientColors; |
||||||
|
private Color[] accColors; |
||||||
|
|
||||||
|
private boolean gradientSelect = false; |
||||||
|
|
||||||
|
public ColorFillStylePane() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
|
||||||
|
styleSelectBox = createColorSchemeComboBox(); |
||||||
|
customPane = new JPanel(FRGUIPaneFactory.createBorderLayout()) { |
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
if (!customPane.isVisible()) { |
||||||
|
return new Dimension(0, 0); |
||||||
|
} |
||||||
|
if (!gradientSelect) { |
||||||
|
return colorAdjustPane.getPreferredSize(); |
||||||
|
} |
||||||
|
return colorGradient.getPreferredSize(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
changeColorSetPane = new JPanel(cardLayout = new CardLayout()); |
||||||
|
changeColorSetPane.add(colorGradient = new FixedGradientBar(4, 130), "gradient"); |
||||||
|
gradientColors = new Color[]{Color.WHITE, FixedGradientBar.NEW_CHARACTER}; |
||||||
|
changeColorSetPane.add(colorAdjustPane = new ColorAdjustPane(), "acc"); |
||||||
|
accColors = ColorAdjustPane.DEFAULT_COLORS; |
||||||
|
cardLayout.show(changeColorSetPane, "acc"); |
||||||
|
customPane.add(changeColorSetPane, BorderLayout.CENTER); |
||||||
|
initListener(); |
||||||
|
initLayout(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public ColorSchemeComboBox getStyleSelectBox() { |
||||||
|
return styleSelectBox; |
||||||
|
} |
||||||
|
|
||||||
|
public JPanel getCustomPane() { |
||||||
|
return customPane; |
||||||
|
} |
||||||
|
|
||||||
|
protected ColorSchemeComboBox createColorSchemeComboBox() { |
||||||
|
return new ColorSchemeComboBox(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initListener() { |
||||||
|
colorAdjustPane.registerChangeListener(new UIObserverListener() { |
||||||
|
@Override |
||||||
|
public void doChange() { |
||||||
|
accColors = colorAdjustPane.getColors(); |
||||||
|
if (styleSelectBox.getSelectType() != ColorSchemeComboBox.SelectType.COMBINATION_COLOR) { |
||||||
|
styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.COMBINATION_COLOR); |
||||||
|
} |
||||||
|
ColorFillStylePane.this.revalidate(); |
||||||
|
} |
||||||
|
}); |
||||||
|
colorGradient.registerChangeListener(new UIObserverListener() { |
||||||
|
@Override |
||||||
|
public void doChange() { |
||||||
|
gradientColors[0] = colorGradient.getSelectColorPointBtnP1().getColorInner(); |
||||||
|
gradientColors[1] = colorGradient.getSelectColorPointBtnP2().getColorInner(); |
||||||
|
if (styleSelectBox.getSelectType() != ColorSchemeComboBox.SelectType.GRADATION_COLOR) { |
||||||
|
styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.GRADATION_COLOR); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
styleSelectBox.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
styleSelectBoxChange(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected void styleSelectBoxChange() { |
||||||
|
switch (styleSelectBox.getSelectType()) { |
||||||
|
case COMBINATION_COLOR: |
||||||
|
colorAdjustPane.updateColor(accColors); |
||||||
|
cardLayout.show(changeColorSetPane, "acc"); |
||||||
|
gradientSelect = false; |
||||||
|
break; |
||||||
|
case GRADATION_COLOR: |
||||||
|
colorGradient.updateColor(gradientColors[0], gradientColors[1]); |
||||||
|
cardLayout.show(changeColorSetPane, "gradient"); |
||||||
|
gradientSelect = true; |
||||||
|
break; |
||||||
|
default: |
||||||
|
ColorSchemeComboBox.ColorInfo selectColorInfo = styleSelectBox.getSelectColorInfo(); |
||||||
|
if (selectColorInfo == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (selectColorInfo.isGradient()) { |
||||||
|
colorGradient.updateColor(selectColorInfo.getColors().get(0), selectColorInfo.getColors().get(1)); |
||||||
|
cardLayout.show(changeColorSetPane, "gradient"); |
||||||
|
gradientSelect = true; |
||||||
|
} else { |
||||||
|
colorAdjustPane.updateColor(selectColorInfo.getColors().toArray(new Color[]{})); |
||||||
|
cardLayout.show(changeColorSetPane, "acc"); |
||||||
|
gradientSelect = false; |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
ColorFillStylePane.this.revalidate(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(getContentPane(), BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel getContentPane() { |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double e = 155; |
||||||
|
double[] columnSize = {f, e}; |
||||||
|
double[] rowSize = {p, p, p}; |
||||||
|
|
||||||
|
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(contentPaneComponents(), rowSize, columnSize, 12, LayoutConstants.VGAP_LARGE); |
||||||
|
return panel; |
||||||
|
} |
||||||
|
|
||||||
|
protected Component[][] contentPaneComponents() { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Template_Color")), styleSelectBox}, |
||||||
|
new Component[]{null, customPane}, |
||||||
|
|
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Chart_Color"); |
||||||
|
} |
||||||
|
|
||||||
|
public void populateBean(PredefinedColorStyle predefinedColorStyle) { |
||||||
|
populateBean(predefinedColorStyle.getColorFillStyle()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(ColorFillStyle colorFillStyle) { |
||||||
|
String fillStyleName = colorFillStyle == null ? "" : colorFillStyle.getFillStyleName(); |
||||||
|
if (StringUtils.isBlank(fillStyleName) || !styleSelectBox.getItems().contains(fillStyleName)) { |
||||||
|
if (colorFillStyle == null || colorFillStyle.getColorStyle() == ChartConstants.COLOR_DEFAULT) { |
||||||
|
styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.DEFAULT);//默认
|
||||||
|
} else { |
||||||
|
int colorStyle = colorFillStyle.getColorStyle(); |
||||||
|
if (colorStyle == ChartConstants.COLOR_GRADIENT) { |
||||||
|
gradientColors[0] = colorFillStyle.getColorList().get(0); |
||||||
|
gradientColors[1] = colorFillStyle.getColorList().get(1); |
||||||
|
styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.GRADATION_COLOR); |
||||||
|
} else { |
||||||
|
int colorSize = colorFillStyle.getColorList().size(); |
||||||
|
accColors = new Color[colorSize]; |
||||||
|
for (int i = 0; i < colorSize; i++) { |
||||||
|
accColors[i] = colorFillStyle.getColorList().get(i); |
||||||
|
} |
||||||
|
styleSelectBox.setSelectType(ColorSchemeComboBox.SelectType.COMBINATION_COLOR); |
||||||
|
} |
||||||
|
} |
||||||
|
} else { |
||||||
|
styleSelectBox.setSelectedItem(fillStyleName); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public PredefinedColorStyle update() { |
||||||
|
PredefinedColorStyle predefinedColorStyle = new PredefinedColorStyle(); |
||||||
|
predefinedColorStyle.setColorFillStyle(updateBean()); |
||||||
|
return predefinedColorStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ColorFillStyle updateBean() { |
||||||
|
switch (styleSelectBox.getSelectType()) { |
||||||
|
case COMBINATION_COLOR: |
||||||
|
return updateCombinationColor(); |
||||||
|
case GRADATION_COLOR: |
||||||
|
return updateGradationColor(); |
||||||
|
case DEFAULT: |
||||||
|
return updateDefaultColor(); |
||||||
|
default: |
||||||
|
return updateNormalColor(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private ColorFillStyle updateCombinationColor() { |
||||||
|
ColorFillStyle colorFillStyle = new ColorFillStyle(); |
||||||
|
List<Color> colorList = colorFillStyle.getColorList(); |
||||||
|
colorFillStyle.setColorStyle(ChartConstants.COLOR_ACC); |
||||||
|
for (int i = 0, length = accColors.length; i < length; i++) { |
||||||
|
colorList.add(accColors[i]); |
||||||
|
} |
||||||
|
colorFillStyle.setCustomFillStyle(true); |
||||||
|
return colorFillStyle; |
||||||
|
} |
||||||
|
|
||||||
|
private ColorFillStyle updateGradationColor() { |
||||||
|
ColorFillStyle colorFillStyle = new ColorFillStyle(); |
||||||
|
List<Color> colorList = colorFillStyle.getColorList(); |
||||||
|
colorFillStyle.setColorStyle(ChartConstants.COLOR_GRADIENT); |
||||||
|
Color start = gradientColors[0]; |
||||||
|
Color end = gradientColors[1]; |
||||||
|
colorList.add(start); |
||||||
|
colorList.add(end); |
||||||
|
colorFillStyle.setCustomFillStyle(true); |
||||||
|
return colorFillStyle; |
||||||
|
} |
||||||
|
|
||||||
|
private ColorFillStyle updateDefaultColor() { |
||||||
|
ColorFillStyle colorFillStyle = new ColorFillStyle(); |
||||||
|
colorFillStyle.setColorStyle(ChartConstants.COLOR_DEFAULT); |
||||||
|
return colorFillStyle; |
||||||
|
} |
||||||
|
|
||||||
|
private ColorFillStyle updateNormalColor() { |
||||||
|
ChartPreStyleConfig manager = ChartPreStyleConfig.getInstance(); |
||||||
|
Object preStyle = manager.getPreStyle(styleSelectBox.getSelectedItem()); |
||||||
|
if (preStyle instanceof ChartColorMatching) { |
||||||
|
ColorFillStyle colorFillStyle = new ColorFillStyle(); |
||||||
|
ChartColorMatching chartColorMatching = (ChartColorMatching) preStyle; |
||||||
|
colorFillStyle.setColorStyle(chartColorMatching.getGradient() ? ChartConstants.COLOR_GRADIENT : ChartConstants.COLOR_ACC); |
||||||
|
List<Color> colorList = chartColorMatching.getColorList(); |
||||||
|
if (colorList == null || colorList.size() == 0) { |
||||||
|
colorList = Arrays.asList(ChartConstants.CHART_COLOR_ARRAY); |
||||||
|
} |
||||||
|
colorFillStyle.setColorList(colorList); |
||||||
|
colorFillStyle.setFillStyleName(Utils.objectToString(styleSelectBox.getSelectedItem())); |
||||||
|
return colorFillStyle; |
||||||
|
} else { |
||||||
|
return updateModifyColor(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private ColorFillStyle updateModifyColor() { |
||||||
|
ColorFillStyle colorFillStyle = new ColorFillStyle(); |
||||||
|
ColorSchemeComboBox.ColorInfo selectColorInfo = styleSelectBox.getSelectColorInfo(); |
||||||
|
boolean isGradient = selectColorInfo.isGradient(); |
||||||
|
List<Color> colors = selectColorInfo.getColors(); |
||||||
|
colorFillStyle.setColorList(colors); |
||||||
|
colorFillStyle.setCustomFillStyle(true); |
||||||
|
colorFillStyle.setColorStyle(isGradient ? ChartConstants.COLOR_GRADIENT : ChartConstants.COLOR_ACC); |
||||||
|
return colorFillStyle; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedComponentStyle; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.MultiTabPane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.component.ComponentFrameStylePane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.component.ComponentTitleStylePane; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-01 |
||||||
|
*/ |
||||||
|
public class ComponentStyleSettingPane extends MultiTabPane<PredefinedComponentStyle> { |
||||||
|
private ComponentFrameStylePane frameStylePane; |
||||||
|
private ComponentTitleStylePane titleStylePane; |
||||||
|
|
||||||
|
public ComponentStyleSettingPane() { |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<BasicPane> initPaneList() { |
||||||
|
this.frameStylePane = new ComponentFrameStylePane(); |
||||||
|
this.titleStylePane = ComponentTitleStylePane.createPredefinedSettingPane(); |
||||||
|
paneList = new ArrayList<BasicPane>(); |
||||||
|
paneList.add(this.frameStylePane); |
||||||
|
paneList.add(this.titleStylePane); |
||||||
|
return paneList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(PredefinedComponentStyle ob) { |
||||||
|
this.frameStylePane.populate(ob); |
||||||
|
this.titleStylePane.populate(ob); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateBean(PredefinedComponentStyle ob) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public PredefinedComponentStyle updateBean() { |
||||||
|
PredefinedComponentStyle componentStyle = new PredefinedComponentStyle(); |
||||||
|
this.frameStylePane.update(componentStyle); |
||||||
|
this.titleStylePane.update(componentStyle); |
||||||
|
return componentStyle; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,81 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedBackground; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.background.BackgroundSettingPane; |
||||||
|
import com.fr.design.mainframe.predefined.ui.detail.background.BackgroundWithAlphaSettingPane; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-31 |
||||||
|
*/ |
||||||
|
public class PredefinedBackgroundSettingPane extends BasicBeanPane<PredefinedBackground> { |
||||||
|
private UIButtonGroup buttonGroup; |
||||||
|
private BackgroundSettingPane reportBackgroundSettingPane; |
||||||
|
private BackgroundWithAlphaSettingPane formBackgroundSettingPane; |
||||||
|
|
||||||
|
|
||||||
|
public PredefinedBackgroundSettingPane() { |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
reportBackgroundSettingPane = new BackgroundSettingPane(); |
||||||
|
formBackgroundSettingPane = new BackgroundWithAlphaSettingPane(); |
||||||
|
CardLayout tabbedPane = new CardLayout(); |
||||||
|
JPanel center = new JPanel(tabbedPane); |
||||||
|
center.add(reportBackgroundSettingPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plain_Report")); |
||||||
|
center.add(formBackgroundSettingPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Decision_Report")); |
||||||
|
this.buttonGroup = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plain_Report"), |
||||||
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Decision_Report")}); |
||||||
|
buttonGroup.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
if (buttonGroup.getSelectedIndex() == 0) { |
||||||
|
tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plain_Report")); |
||||||
|
} else { |
||||||
|
tabbedPane.show(center, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Decision_Report")); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
this.add(buttonGroup, BorderLayout.NORTH); |
||||||
|
|
||||||
|
this.add(center, BorderLayout.CENTER); |
||||||
|
this.buttonGroup.setSelectedIndex(0); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean currentFormBackground() { |
||||||
|
return buttonGroup.getSelectedIndex() == 1; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(PredefinedBackground predefinedBackground) { |
||||||
|
reportBackgroundSettingPane.populateBean(predefinedBackground.getReportBackground()); |
||||||
|
formBackgroundSettingPane.populateBean(predefinedBackground.getFormBackground()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PredefinedBackground updateBean() { |
||||||
|
PredefinedBackground predefinedBackground = new PredefinedBackground(); |
||||||
|
predefinedBackground.setReportBackground(reportBackgroundSettingPane.updateBean()); |
||||||
|
predefinedBackground.setFormBackground(formBackgroundSettingPane.updateBean()); |
||||||
|
return predefinedBackground; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Predefined_Background_Setting"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; |
||||||
|
import com.fr.general.Background; |
||||||
|
|
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-14 |
||||||
|
*/ |
||||||
|
public abstract class AbstractBackgroundDetailPane<T extends Background> extends BackgroundQuickPane { |
||||||
|
@Override |
||||||
|
public boolean accept(Background background) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(Background background) { |
||||||
|
this.populate((T) background); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Background updateBean() { |
||||||
|
return this.update(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void reset() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public abstract void populate(T background); |
||||||
|
|
||||||
|
public abstract T update(); |
||||||
|
|
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,135 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; |
||||||
|
import com.fr.general.Background; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-02 |
||||||
|
*/ |
||||||
|
public class BackgroundSettingPane extends BasicBeanPane<Background> { |
||||||
|
private ChangeListener changeListener = null; |
||||||
|
private UIComboBox headCombobox; |
||||||
|
private BackgroundQuickPane[] paneList; |
||||||
|
|
||||||
|
public BackgroundSettingPane() { |
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.add(createComboHeadPane(), BorderLayout.NORTH); |
||||||
|
CardLayout cardlayout = new CardLayout(); |
||||||
|
paneList = supportKindsOfBackgroundUI(); |
||||||
|
final JPanel centerPane = new JPanel(cardlayout) { |
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() {// AUGUST:使用当前面板的的高度
|
||||||
|
int index = headCombobox.getSelectedIndex(); |
||||||
|
return new Dimension(super.getPreferredSize().width, paneList[index].getPreferredSize().height); |
||||||
|
} |
||||||
|
}; |
||||||
|
centerPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); |
||||||
|
for (BackgroundQuickPane pane : paneList) { |
||||||
|
headCombobox.addItem(pane.title4PopupWindow()); |
||||||
|
centerPane.add(pane, pane.title4PopupWindow()); |
||||||
|
} |
||||||
|
headCombobox.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
cardlayout.show(centerPane, (String) headCombobox.getSelectedItem()); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.add(centerPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
this.changeListener = changeListener; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private JPanel createComboHeadPane() { |
||||||
|
headCombobox = new UIComboBox(); |
||||||
|
|
||||||
|
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane( |
||||||
|
new Component[][]{new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill")), headCombobox}}, |
||||||
|
TableLayoutHelper.FILL_NONE, 33, 5); |
||||||
|
headCombobox.setPreferredSize(new Dimension(160, 20)); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
protected BackgroundQuickPane[] supportKindsOfBackgroundUI() { |
||||||
|
java.util.List<BackgroundQuickPane> kinds = new ArrayList<>(); |
||||||
|
kinds.add(new EmptyBackgroundPane()); |
||||||
|
kinds.add(new ColorDetailPane()); |
||||||
|
kinds.add(new TextureDetailObservePane()); |
||||||
|
kinds.add(new PatternDetailPane()); |
||||||
|
kinds.add(createImageSelectPane()); |
||||||
|
kinds.add(new GradientDetailPane()); |
||||||
|
return kinds.toArray(new BackgroundQuickPane[kinds.size()]); |
||||||
|
} |
||||||
|
|
||||||
|
protected ImageDetailPane createImageSelectPane() { |
||||||
|
ImageDetailPane imageDetailPane = new ImageDetailPane(); |
||||||
|
imageDetailPane.registerChangeListener(new UIObserverListener() { |
||||||
|
@Override |
||||||
|
public void doChange() { |
||||||
|
fireChangeListener(); |
||||||
|
} |
||||||
|
}); |
||||||
|
return imageDetailPane; |
||||||
|
} |
||||||
|
|
||||||
|
protected void fireChangeListener() { |
||||||
|
if (changeListener != null) { |
||||||
|
changeListener.stateChanged(null); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(Background background) { |
||||||
|
for (int i = 0; i < paneList.length; i++) { |
||||||
|
BackgroundQuickPane pane = paneList[i]; |
||||||
|
if (pane.accept(background)) { |
||||||
|
pane.populateBean(background); |
||||||
|
headCombobox.setSelectedIndex(i); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Background updateBean() { |
||||||
|
int selectIndex = this.headCombobox.getSelectedIndex(); |
||||||
|
try { |
||||||
|
return paneList[selectIndex].updateBean(); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,76 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.config.predefined.BackgroundWithAlpha; |
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.frpane.UINumberDragPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-04 |
||||||
|
*/ |
||||||
|
public class BackgroundWithAlphaSettingPane extends BasicBeanPane<BackgroundWithAlpha> { |
||||||
|
private BackgroundSettingPane backgroundSettingPane; |
||||||
|
//透明度
|
||||||
|
private UINumberDragPane numberDragPane; |
||||||
|
|
||||||
|
private double maxNumber = 100; |
||||||
|
|
||||||
|
|
||||||
|
public BackgroundWithAlphaSettingPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
backgroundSettingPane = new FormBackgroundSettingPane(); |
||||||
|
|
||||||
|
JPanel eastpane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(2, 0); |
||||||
|
this.numberDragPane = new UINumberDragPane(0, 100); |
||||||
|
this.numberDragPane.setPreferredSize(new Dimension(148, 20)); |
||||||
|
eastpane.add(numberDragPane); |
||||||
|
eastpane.add(new UILabel("%")); |
||||||
|
JPanel transparencyPane = TableLayoutHelper.createGapTableLayoutPane( |
||||||
|
new Component[][]{new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget-Style_Alpha")), |
||||||
|
eastpane}}, TableLayoutHelper.FILL_LASTCOLUMN, 18, 5); |
||||||
|
transparencyPane.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); |
||||||
|
|
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{backgroundSettingPane}, |
||||||
|
new Component[]{transparencyPane}}; |
||||||
|
|
||||||
|
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_NONE, IntervalConstants.INTERVAL_W2, IntervalConstants.INTERVAL_L1); |
||||||
|
this.add(panel, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
this.backgroundSettingPane.addChangeListener(changeListener); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(BackgroundWithAlpha ob) { |
||||||
|
backgroundSettingPane.populateBean(ob.getBackground()); |
||||||
|
numberDragPane.populateBean(ob.getAlpha() * maxNumber); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BackgroundWithAlpha updateBean() { |
||||||
|
BackgroundWithAlpha backgroundWithAlpha = new BackgroundWithAlpha(); |
||||||
|
backgroundWithAlpha.setBackground(backgroundSettingPane.updateBean()); |
||||||
|
backgroundWithAlpha.setAlpha((float) (numberDragPane.updateBean() / maxNumber)); |
||||||
|
return backgroundWithAlpha; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,105 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.base.background.ColorBackground; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.style.color.ColorSelectPane; |
||||||
|
import com.fr.general.Background; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-31 |
||||||
|
*/ |
||||||
|
public class ColorDetailPane extends AbstractBackgroundDetailPane<ColorBackground> { |
||||||
|
private ColorBackgroundSelectPane selectPane; |
||||||
|
|
||||||
|
|
||||||
|
public ColorDetailPane() { |
||||||
|
this.selectPane = new ColorBackgroundSelectPane(); |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.add(this.selectPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(ColorBackground background) { |
||||||
|
this.selectPane.setColor(background.getColor()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ColorBackground update() { |
||||||
|
return ColorBackground.getInstance(selectPane.getColor()); |
||||||
|
} |
||||||
|
|
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Color"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Background background) { |
||||||
|
return background instanceof ColorBackground; |
||||||
|
} |
||||||
|
|
||||||
|
class ColorBackgroundSelectPane extends ColorSelectPane implements UIObserver { |
||||||
|
protected UIObserverListener uiObserverListener; |
||||||
|
|
||||||
|
protected void initialCompents(boolean isSupportTransparent) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
if (isSupportTransparent) { |
||||||
|
this.add(createNorthPane(), BorderLayout.NORTH); |
||||||
|
} |
||||||
|
JPanel centerPane = createCenterPane(); |
||||||
|
this.add(centerPane, BorderLayout.CENTER); |
||||||
|
this.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
if (uiObserverListener != null) { |
||||||
|
uiObserverListener.doChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createNorthPane() { |
||||||
|
// UIButton transpanrentBtn = createTranspanrentButton();
|
||||||
|
UIButton transpanrentBtn = new UIButton(); |
||||||
|
transpanrentBtn.setPreferredSize(new Dimension(160, 20)); |
||||||
|
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane( |
||||||
|
new Component[][]{new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Color")), |
||||||
|
transpanrentBtn}}, TableLayoutHelper.FILL_NONE, 33, 5); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 10)); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createCenterPane() { |
||||||
|
// JPanel centerPane = super.createCenterPane();
|
||||||
|
JPanel centerPane = new JPanel(); |
||||||
|
|
||||||
|
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane( |
||||||
|
new Component[][]{new Component[]{new UILabel(" "), centerPane}}, TableLayoutHelper.FILL_NONE, 33, 5); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 10)); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
this.uiObserverListener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.general.Background; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-01 |
||||||
|
*/ |
||||||
|
public class EmptyBackgroundPane extends AbstractBackgroundDetailPane { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(Background background) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Background update() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 名称 |
||||||
|
* |
||||||
|
* @return 名称 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Null"); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean accept(Background background) { |
||||||
|
return background == null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.design.ExtraDesignClassManager; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.fun.BackgroundQuickUIProvider; |
||||||
|
import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Set; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-14 |
||||||
|
*/ |
||||||
|
public class FormBackgroundSettingPane extends BackgroundSettingPane { |
||||||
|
|
||||||
|
public FormBackgroundSettingPane() { |
||||||
|
super(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected BackgroundQuickPane[] supportKindsOfBackgroundUI() { |
||||||
|
ColorDetailPane colorDetailPane = new ColorDetailPane(); |
||||||
|
ImageDetailPane imageDetailPane = createImageSelectPane(); |
||||||
|
GradientDetailPane gradientPane = new GradientDetailPane(); |
||||||
|
//hugh:表单支持背景接口
|
||||||
|
List<BackgroundQuickPane> kinds = new ArrayList<BackgroundQuickPane>(); |
||||||
|
|
||||||
|
kinds.add(new EmptyBackgroundPane()); |
||||||
|
kinds.add(colorDetailPane); |
||||||
|
kinds.add(imageDetailPane); |
||||||
|
kinds.add(gradientPane); |
||||||
|
|
||||||
|
Set<BackgroundQuickUIProvider> providers = ExtraDesignClassManager.getInstance().getArray(BackgroundQuickUIProvider.MARK_STRING); |
||||||
|
for (BackgroundQuickUIProvider provider : providers) { |
||||||
|
BackgroundQuickPane newTypePane = provider.appearanceForBackground(); |
||||||
|
newTypePane.registerChangeListener(new UIObserverListener() { |
||||||
|
@Override |
||||||
|
public void doChange() { |
||||||
|
fireChangeListener(); |
||||||
|
} |
||||||
|
}); |
||||||
|
kinds.add(newTypePane); |
||||||
|
} |
||||||
|
|
||||||
|
return kinds.toArray(new BackgroundQuickPane[kinds.size()]); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,159 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.base.background.GradientBackground; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.style.background.gradient.GradientBar; |
||||||
|
import com.fr.general.Background; |
||||||
|
|
||||||
|
import javax.swing.ButtonGroup; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.GridLayout; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* 渐变色的面板,不是很pp,面板应用显得繁琐,有写可以写成控件类型,比如色彩选择的。。,可以做得花哨点 |
||||||
|
* |
||||||
|
* @author ben |
||||||
|
*/ |
||||||
|
public class GradientDetailPane extends AbstractBackgroundDetailPane<GradientBackground> implements UIObserver { |
||||||
|
private static final long serialVersionUID = -6854603990673031897L; |
||||||
|
private UIObserverListener listener; |
||||||
|
private UIRadioButton left2right, top2bottom; |
||||||
|
private GradientBar gradientBar; |
||||||
|
private ChangeListener changeListener = null; |
||||||
|
|
||||||
|
public GradientDetailPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
|
||||||
|
JPanel gradientPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
JPanel blankJp = new JPanel(); |
||||||
|
gradientBar = new GradientBar(4, 140); |
||||||
|
blankJp.add(gradientBar); |
||||||
|
|
||||||
|
gradientPanel.add(gradientBar, BorderLayout.SOUTH); |
||||||
|
|
||||||
|
JPanel jp = new JPanel(new GridLayout(2, 1, 15, 10)); |
||||||
|
|
||||||
|
|
||||||
|
left2right = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Page_Setup_Horizontal")); |
||||||
|
jp.add(left2right); |
||||||
|
left2right.setSelected(true); |
||||||
|
left2right.addActionListener(reviewListener); |
||||||
|
|
||||||
|
top2bottom = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Page_Setup_Vertical")); |
||||||
|
jp.add(top2bottom); |
||||||
|
top2bottom.addActionListener(reviewListener); |
||||||
|
|
||||||
|
ButtonGroup toggle = new ButtonGroup(); |
||||||
|
toggle.add(left2right); |
||||||
|
toggle.add(top2bottom); |
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Gradient_Setting")), gradientPanel}, |
||||||
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Gradient_Color")), jp} |
||||||
|
}; |
||||||
|
JPanel contentPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_LASTCOLUMN, |
||||||
|
IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1); |
||||||
|
this.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
if (listener != null) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
this.add(contentPane); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Background background) { |
||||||
|
return background instanceof GradientBackground; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void populate(GradientBackground bg) { |
||||||
|
this.gradientBar.getSelectColorPointBtnP1().setColorInner(bg.getStartColor()); |
||||||
|
this.gradientBar.getSelectColorPointBtnP2().setColorInner(bg.getEndColor()); |
||||||
|
if (bg.getDirection() == GradientBackground.LEFT2RIGHT) { |
||||||
|
left2right.setSelected(true); |
||||||
|
} else { |
||||||
|
top2bottom.setSelected(true); |
||||||
|
} |
||||||
|
if (bg.isUseCell()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
double startValue = (double) bg.getBeginPlace(); |
||||||
|
double endValue = (double) bg.getFinishPlace(); |
||||||
|
gradientBar.setStartValue(startValue); |
||||||
|
gradientBar.setEndValue(endValue); |
||||||
|
this.gradientBar.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
public GradientBackground update() { |
||||||
|
GradientBackground gb = new GradientBackground( |
||||||
|
gradientBar.getSelectColorPointBtnP1().getColorInner(), |
||||||
|
gradientBar.getSelectColorPointBtnP2().getColorInner()); |
||||||
|
if (left2right.isSelected()) { |
||||||
|
gb.setDirection(GradientBackground.LEFT2RIGHT); |
||||||
|
} else { |
||||||
|
gb.setDirection(GradientBackground.TOP2BOTTOM); |
||||||
|
} |
||||||
|
if (gradientBar.isOriginalPlace()) { |
||||||
|
gb.setUseCell(true); |
||||||
|
} else { |
||||||
|
gb.setUseCell(false); |
||||||
|
gb.setBeginPlace((float) gradientBar.getStartValue()); |
||||||
|
gb.setFinishPlace((float) gradientBar.getEndValue()); |
||||||
|
} |
||||||
|
return gb; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
ActionListener reviewListener = new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
fireChagneListener(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
this.changeListener = changeListener; |
||||||
|
gradientBar.addChangeListener(changeListener); |
||||||
|
} |
||||||
|
|
||||||
|
public void fireChagneListener() { |
||||||
|
if (this.changeListener != null) { |
||||||
|
ChangeEvent evt = new ChangeEvent(this); |
||||||
|
this.changeListener.stateChanged(evt); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
this.listener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Gradient_Color"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,215 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.base.Style; |
||||||
|
import com.fr.base.background.ImageBackground; |
||||||
|
import com.fr.base.background.ImageFileBackground; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.frpane.ImgChooseWrapper; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.style.background.image.ImageFileChooser; |
||||||
|
import com.fr.design.style.background.image.ImagePreviewPane; |
||||||
|
import com.fr.general.Background; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.ButtonGroup; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.GridLayout; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Image background pane. |
||||||
|
*/ |
||||||
|
public class ImageDetailPane extends AbstractBackgroundDetailPane<ImageBackground> implements UIObserver { |
||||||
|
private UIObserverListener listener; |
||||||
|
protected ImagePreviewPane previewPane = null; |
||||||
|
private Style imageStyle = null; |
||||||
|
private ChangeListener changeListener = null; |
||||||
|
private ImageFileChooser imageFileChooser = null; |
||||||
|
|
||||||
|
private UIRadioButton defaultRadioButton = null; |
||||||
|
private UIRadioButton tiledRadioButton = null; |
||||||
|
private UIRadioButton extendRadioButton = null; |
||||||
|
private UIRadioButton adjustRadioButton = null; |
||||||
|
|
||||||
|
|
||||||
|
public ImageDetailPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.add(initSelectFilePane(), BorderLayout.CENTER); |
||||||
|
imageFileChooser = new ImageFileChooser(); |
||||||
|
imageFileChooser.setMultiSelectionEnabled(false); |
||||||
|
previewPane = new ImagePreviewPane(); |
||||||
|
this.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
if (listener != null) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public JPanel initSelectFilePane() { |
||||||
|
JPanel selectFilePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||||
|
selectFilePane.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
UIButton selectPictureButton = new UIButton( |
||||||
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Image_Select")); |
||||||
|
selectPictureButton.setMnemonic('S'); |
||||||
|
selectPictureButton.addActionListener(selectPictureActionListener); |
||||||
|
selectPictureButton.setPreferredSize(new Dimension(160, 20)); |
||||||
|
//布局
|
||||||
|
defaultRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Default")); |
||||||
|
tiledRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Titled")); |
||||||
|
extendRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Extend")); |
||||||
|
adjustRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Alignment_Layout_Image_Adjust")); |
||||||
|
|
||||||
|
defaultRadioButton.addActionListener(layoutActionListener); |
||||||
|
tiledRadioButton.addActionListener(layoutActionListener); |
||||||
|
extendRadioButton.addActionListener(layoutActionListener); |
||||||
|
adjustRadioButton.addActionListener(layoutActionListener); |
||||||
|
|
||||||
|
JPanel jp = new JPanel(new GridLayout(4, 1, 15, 10)); |
||||||
|
for (UIRadioButton button : imageLayoutButtons()) { |
||||||
|
jp.add(button); |
||||||
|
} |
||||||
|
|
||||||
|
ButtonGroup layoutBG = new ButtonGroup(); |
||||||
|
layoutBG.add(defaultRadioButton); |
||||||
|
layoutBG.add(tiledRadioButton); |
||||||
|
layoutBG.add(extendRadioButton); |
||||||
|
layoutBG.add(adjustRadioButton); |
||||||
|
|
||||||
|
defaultRadioButton.setSelected(true); |
||||||
|
|
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Image")), selectPictureButton}, |
||||||
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Fill_Mode")), jp} |
||||||
|
}; |
||||||
|
JPanel centerPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_NONE, |
||||||
|
IntervalConstants.INTERVAL_L4, IntervalConstants.INTERVAL_L1); |
||||||
|
selectFilePane.add(centerPane, BorderLayout.CENTER); |
||||||
|
return selectFilePane; |
||||||
|
} |
||||||
|
|
||||||
|
protected UIRadioButton[] imageLayoutButtons() { |
||||||
|
return new UIRadioButton[]{ |
||||||
|
defaultRadioButton, |
||||||
|
tiledRadioButton, |
||||||
|
extendRadioButton, |
||||||
|
adjustRadioButton |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Background background) { |
||||||
|
return background instanceof ImageBackground; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Select picture. |
||||||
|
*/ |
||||||
|
ActionListener selectPictureActionListener = new ActionListener() { |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
int returnVal = imageFileChooser.showOpenDialog(ImageDetailPane.this); |
||||||
|
setImageStyle(); |
||||||
|
ImgChooseWrapper.getInstance(previewPane, imageFileChooser, imageStyle, changeListener).dealWithImageFile(returnVal); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
protected void setImageStyle() { |
||||||
|
if (tiledRadioButton.isSelected()) { |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); |
||||||
|
} else if (adjustRadioButton.isSelected()) { |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); |
||||||
|
} else if (extendRadioButton.isSelected()) { |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); |
||||||
|
} else { |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
ActionListener layoutActionListener = new ActionListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
setImageStyle(); |
||||||
|
changeImageStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
private void changeImageStyle() { |
||||||
|
previewPane.setImageStyle(ImageDetailPane.this.imageStyle); |
||||||
|
previewPane.repaint(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(ImageBackground imageBackground) { |
||||||
|
if (imageBackground.getLayout() == Constants.IMAGE_CENTER) { |
||||||
|
defaultRadioButton.setSelected(true); |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_CENTER); |
||||||
|
} else if (imageBackground.getLayout() == Constants.IMAGE_EXTEND) { |
||||||
|
extendRadioButton.setSelected(true); |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_EXTEND); |
||||||
|
} else if (imageBackground.getLayout() == Constants.IMAGE_ADJUST) { |
||||||
|
adjustRadioButton.setSelected(true); |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_ADJUST); |
||||||
|
} else { |
||||||
|
tiledRadioButton.setSelected(true); |
||||||
|
imageStyle = Style.DEFAULT_STYLE.deriveImageLayout(Constants.IMAGE_TILED); |
||||||
|
} |
||||||
|
previewPane.setImageStyle(ImageDetailPane.this.imageStyle); |
||||||
|
if (imageBackground.getImage() != null) { |
||||||
|
previewPane.setImageWithSuffix(imageBackground.getImageWithSuffix()); |
||||||
|
previewPane.setImage(imageBackground.getImage()); |
||||||
|
} |
||||||
|
|
||||||
|
fireChagneListener(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ImageBackground update() { |
||||||
|
ImageBackground imageBackground = new ImageFileBackground(previewPane.getImageWithSuffix()); |
||||||
|
setImageStyle(); |
||||||
|
imageBackground.setLayout(imageStyle.getImageLayout()); |
||||||
|
return imageBackground; |
||||||
|
} |
||||||
|
|
||||||
|
@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); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
this.listener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Image"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,119 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.base.background.PatternBackground; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.style.background.impl.PatternBackgroundPane; |
||||||
|
import com.fr.design.style.color.ColorSelectBox; |
||||||
|
import com.fr.general.Background; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.GridLayout; |
||||||
|
import java.awt.LayoutManager; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-08-31 |
||||||
|
*/ |
||||||
|
public class PatternDetailPane extends AbstractBackgroundDetailPane<PatternBackground> implements UIObserver { |
||||||
|
|
||||||
|
private UIObserverListener listener; |
||||||
|
private PatternNewBackgroundPane patternNewBackgroundPane; |
||||||
|
|
||||||
|
public PatternDetailPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
patternNewBackgroundPane = new PatternNewBackgroundPane(6); |
||||||
|
this.add(patternNewBackgroundPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
this.listener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(PatternBackground background) { |
||||||
|
this.patternNewBackgroundPane.populate(background); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PatternBackground update() { |
||||||
|
try { |
||||||
|
return (PatternBackground) this.patternNewBackgroundPane.update(); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Pattern"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Background background) { |
||||||
|
return background instanceof PatternBackground; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
class PatternNewBackgroundPane extends PatternBackgroundPane { |
||||||
|
private PatternNewBackgroundPane(int nColumn) { |
||||||
|
super(nColumn); |
||||||
|
} |
||||||
|
|
||||||
|
protected LayoutManager layoutOfTypePane(int nColumn) { |
||||||
|
return new GridLayout(0, nColumn, 2, 2); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents(int nColumn) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
JPanel jPanel = new JPanel(); |
||||||
|
jPanel.setLayout(layoutOfTypePane(nColumn)); |
||||||
|
setChildrenOfTypePane(jPanel); |
||||||
|
|
||||||
|
foregroundColorPane = new ColorSelectBox(80); |
||||||
|
backgroundColorPane = new ColorSelectBox(80); |
||||||
|
foregroundColorPane.setSelectObject(Color.lightGray); |
||||||
|
backgroundColorPane.setSelectObject(Color.black); |
||||||
|
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Pattern")); |
||||||
|
label.setVerticalAlignment(SwingConstants.TOP); |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{label, jPanel}, |
||||||
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_ForeBackground_Color")), foregroundColorPane}, |
||||||
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Pattern_Color")), backgroundColorPane} |
||||||
|
}; |
||||||
|
JPanel centerPane = TableLayoutHelper.createGapTableLayoutPane(components, TableLayoutHelper.FILL_LASTCOLUMN, |
||||||
|
IntervalConstants.INTERVAL_W4, IntervalConstants.INTERVAL_L1); |
||||||
|
JPanel jPanel1 = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
||||||
|
jPanel1.add(centerPane); |
||||||
|
jPanel1.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
this.add(jPanel1, BorderLayout.NORTH); |
||||||
|
this.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
if (listener != null) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,97 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.background; |
||||||
|
|
||||||
|
import com.fr.base.background.TextureBackground; |
||||||
|
import com.fr.design.event.UIObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.style.background.texture.TextureDetailPane; |
||||||
|
import com.fr.general.Background; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by kerry on 2020-09-02 |
||||||
|
*/ |
||||||
|
public class TextureDetailObservePane extends AbstractBackgroundDetailPane<TextureBackground> implements UIObserver { |
||||||
|
private TextureDetailPane detailPane; |
||||||
|
|
||||||
|
private UIObserverListener listener; |
||||||
|
|
||||||
|
public TextureDetailObservePane() { |
||||||
|
|
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
detailPane = TextureDetailPane.createMiniTextureDetailPane(6); |
||||||
|
|
||||||
|
detailPane.setPreferredSize(new Dimension(160, 108)); |
||||||
|
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture")); |
||||||
|
label.setPreferredSize(new Dimension(24, 108)); |
||||||
|
label.setVerticalAlignment(SwingConstants.TOP); |
||||||
|
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane( |
||||||
|
new Component[][]{new Component[]{label, detailPane}}, TableLayoutHelper.FILL_LASTCOLUMN, 33, 5); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 10)); |
||||||
|
|
||||||
|
|
||||||
|
detailPane.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
if (listener != null) { |
||||||
|
listener.doChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
this.add(jPanel, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
this.listener = listener; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(TextureBackground background) { |
||||||
|
this.detailPane.populate(background); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public TextureBackground update() { |
||||||
|
try { |
||||||
|
return (TextureBackground) this.detailPane.update(); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background_Texture"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean accept(Background background) { |
||||||
|
return background instanceof TextureBackground; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,223 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.cell; |
||||||
|
|
||||||
|
import com.fr.base.ScreenResolution; |
||||||
|
import com.fr.base.Style; |
||||||
|
import com.fr.config.predefined.PredefinedCellStyle; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.dialog.MultiTabPane; |
||||||
|
import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.style.AbstractBasicStylePane; |
||||||
|
import com.fr.design.gui.style.AlignmentPane; |
||||||
|
import com.fr.design.gui.style.BorderPane; |
||||||
|
import com.fr.design.gui.style.FormatPane; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.GridLayout; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 哎,复杂的原型图导致复杂的画法。非我所愿也 |
||||||
|
* |
||||||
|
* @author zhou |
||||||
|
* @since 2012-5-24上午10:36:10 |
||||||
|
*/ |
||||||
|
public class CustomPredefinedStylePane extends MultiTabPane<PredefinedCellStyle> { |
||||||
|
private PredefinedCellStyle cellStyle; |
||||||
|
private PreviewArea previewArea; |
||||||
|
private boolean populating; |
||||||
|
private AttributeChangeListener attributeChangeListener; |
||||||
|
|
||||||
|
|
||||||
|
public CustomPredefinedStylePane() { |
||||||
|
super(); |
||||||
|
tabPane.setOneLineTab(true); |
||||||
|
tabPane.setDrawLine(false); |
||||||
|
tabPane.setBorder(BorderFactory.createLineBorder(UIConstants.SHADOW_GREY)); |
||||||
|
tabPane.setLayout(new GridLayout(1, 3, 0, 0)); |
||||||
|
} |
||||||
|
|
||||||
|
public void registerAttrChangeListener(AttributeChangeListener listener){ |
||||||
|
this.attributeChangeListener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
private void fireAttrChangeListener() { |
||||||
|
if (this.attributeChangeListener != null) { |
||||||
|
this.attributeChangeListener.attributeChange(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Custom_Style"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
*/ |
||||||
|
public void reset() { |
||||||
|
populateBean(null); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
/** |
||||||
|
* |
||||||
|
*/ |
||||||
|
public void populateBean(PredefinedCellStyle ob) { |
||||||
|
this.populating = true; |
||||||
|
this.cellStyle = ob; |
||||||
|
for (int i = 0; i < paneList.size(); i++) { |
||||||
|
((AbstractBasicStylePane) paneList.get(i)).populateBean(ob.getStyle()); |
||||||
|
previewArea.preview(ob.getStyle()); |
||||||
|
} |
||||||
|
this.populating = false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
/** |
||||||
|
* |
||||||
|
*/ |
||||||
|
public PredefinedCellStyle updateBean() { |
||||||
|
AbstractBasicStylePane basicStylePane = (AbstractBasicStylePane) paneList.get(tabPane.getSelectedIndex()); |
||||||
|
this.cellStyle.setStyle(basicStylePane.update(this.cellStyle.getStyle())); |
||||||
|
return this.cellStyle; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @param ob |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public boolean accept(Object ob) { |
||||||
|
return ob instanceof PredefinedCellStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected List<BasicPane> initPaneList() { |
||||||
|
paneList = new ArrayList<BasicPane>(); |
||||||
|
paneList.add(new FormatPane()); |
||||||
|
paneList.add(new BorderPane()); |
||||||
|
paneList.add(new AlignmentPane()); |
||||||
|
return paneList; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initLayout() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
|
||||||
|
JPanel jPanel = new JPanel(); |
||||||
|
jPanel.setLayout(new BorderLayout(0, 4)); |
||||||
|
|
||||||
|
JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
previewArea = new PreviewArea(); |
||||||
|
previewPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"), null)); |
||||||
|
previewPane.add(previewArea, BorderLayout.CENTER); |
||||||
|
|
||||||
|
this.add(previewPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
this.add(jPanel, BorderLayout.CENTER); |
||||||
|
jPanel.add(tabPane, BorderLayout.NORTH); |
||||||
|
JPanel attrListenerPane = new AbstractAttrNoScrollPane() { |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initContentPane() { |
||||||
|
leftContentPane = createContentPane(); |
||||||
|
this.add(leftContentPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
this.addAttributeChangeListener(new AttributeChangeListener() { |
||||||
|
@Override |
||||||
|
public void attributeChange() { |
||||||
|
if (populating) { |
||||||
|
return; |
||||||
|
} |
||||||
|
PredefinedCellStyle cellStyle = updateBean(); |
||||||
|
if (cellStyle != null) { |
||||||
|
previewArea.preview(cellStyle.getStyle()); |
||||||
|
} |
||||||
|
fireAttrChangeListener(); |
||||||
|
} |
||||||
|
}); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return centerPane; |
||||||
|
} |
||||||
|
}; |
||||||
|
return basicScrollPane; |
||||||
|
} |
||||||
|
}; |
||||||
|
jPanel.add(attrListenerPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
/** |
||||||
|
* |
||||||
|
*/ |
||||||
|
public void updateBean(PredefinedCellStyle ob) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 预览Style的面板 |
||||||
|
* |
||||||
|
* @author richer |
||||||
|
*/ |
||||||
|
private static class PreviewArea extends JComponent { |
||||||
|
|
||||||
|
private String paintText = "Report"; |
||||||
|
private Style style = Style.DEFAULT_STYLE; |
||||||
|
|
||||||
|
public PreviewArea() { |
||||||
|
setPreferredSize(new Dimension(40, 30)); |
||||||
|
} |
||||||
|
|
||||||
|
public void preview(Style style) { |
||||||
|
this.style = style; |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paintComponent(Graphics g) { |
||||||
|
Graphics2D g2d = (Graphics2D) g; |
||||||
|
int resolution = ScreenResolution.getScreenResolution(); |
||||||
|
|
||||||
|
if (style == Style.DEFAULT_STYLE) { |
||||||
|
// 如果是默认的style,就只写"Report"上去
|
||||||
|
Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Style.paintBackground(g2d, style, getWidth() - 3, getHeight() - 3); |
||||||
|
|
||||||
|
Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); |
||||||
|
|
||||||
|
Style.paintBorder(g2d, style, getWidth() - 3, getHeight() - 3); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension getMinimumSize() { |
||||||
|
return getPreferredSize(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.chart; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedChartStyle; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2020-09-17 |
||||||
|
*/ |
||||||
|
public abstract class AbstractChartStylePane extends BasicPane { |
||||||
|
|
||||||
|
public AbstractChartStylePane() { |
||||||
|
initComponents(); |
||||||
|
initPane(); |
||||||
|
} |
||||||
|
|
||||||
|
protected abstract void initComponents(); |
||||||
|
|
||||||
|
protected void initPane() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
double e = 155; |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] columnSize = {p, e}; |
||||||
|
JPanel gapTableLayoutPane = TableLayoutHelper.createGapTableLayoutPane(getComponent(), getRows(p), columnSize, 20, LayoutConstants.VGAP_LARGE); |
||||||
|
gapTableLayoutPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); |
||||||
|
UIScrollPane rightTopPane = new UIScrollPane(gapTableLayoutPane); |
||||||
|
rightTopPane.setBorder(BorderFactory.createEmptyBorder()); |
||||||
|
this.add(rightTopPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
protected abstract Component[][] getComponent(); |
||||||
|
|
||||||
|
protected abstract double[] getRows(double p); |
||||||
|
|
||||||
|
public abstract void populate(PredefinedChartStyle chartStyle); |
||||||
|
|
||||||
|
public abstract void update(PredefinedChartStyle chartStyle); |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.chart; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedChartStyle; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.style.color.ColorSelectBox; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2020-09-16 |
||||||
|
*/ |
||||||
|
public class ChartAxisStylePane extends AbstractChartStylePane { |
||||||
|
|
||||||
|
//轴标题字体样式
|
||||||
|
private ChartFontPane titleFontPane; |
||||||
|
|
||||||
|
//轴标签字体样式
|
||||||
|
private ChartFontPane labelFontPane; |
||||||
|
|
||||||
|
//轴线颜色
|
||||||
|
private ColorSelectBox axisLineColor; |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
titleFontPane = new ChartFontPane() { |
||||||
|
public String getUILabelText() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Chart_Axis_Title_Character"); |
||||||
|
} |
||||||
|
}; |
||||||
|
labelFontPane = new ChartFontPane() { |
||||||
|
public String getUILabelText() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Character"); |
||||||
|
} |
||||||
|
}; |
||||||
|
axisLineColor = new ColorSelectBox(100); |
||||||
|
} |
||||||
|
|
||||||
|
protected Component[][] getComponent() { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{titleFontPane, null}, |
||||||
|
new Component[]{labelFontPane, null}, |
||||||
|
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Axis_Line_Color")), axisLineColor} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
protected double[] getRows(double p) { |
||||||
|
return new double[]{p, p, p}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Axis"); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(PredefinedChartStyle chartStyle) { |
||||||
|
titleFontPane.populate(chartStyle.getAxisTitleFont()); |
||||||
|
labelFontPane.populate(chartStyle.getAxisLabelFont()); |
||||||
|
axisLineColor.setSelectObject(chartStyle.getAxisLineColor()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void update(PredefinedChartStyle chartStyle) { |
||||||
|
chartStyle.setAxisTitleFont(titleFontPane.update()); |
||||||
|
chartStyle.setAxisLabelFont(labelFontPane.update()); |
||||||
|
chartStyle.setAxisLineColor(axisLineColor.getSelectObject()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.chart; |
||||||
|
|
||||||
|
import com.fr.base.background.ImageBackground; |
||||||
|
import com.fr.config.predefined.PredefinedChartStyle; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane; |
||||||
|
import com.fr.design.mainframe.backgroundpane.ColorBackgroundQuickPane; |
||||||
|
import com.fr.design.mainframe.backgroundpane.ImageBackgroundQuickPane; |
||||||
|
import com.fr.design.mainframe.backgroundpane.NullBackgroundQuickPane; |
||||||
|
import com.fr.design.mainframe.backgroundpane.VanChartGradientPane; |
||||||
|
import com.fr.design.style.color.ColorSelectBox; |
||||||
|
import com.fr.general.Background; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2020-09-17 |
||||||
|
*/ |
||||||
|
public class ChartBackgroundStylePane extends AbstractChartStylePane { |
||||||
|
|
||||||
|
private UIComboBox typeComboBox; |
||||||
|
private List<BackgroundQuickPane> paneList; |
||||||
|
private JPanel centerPane; |
||||||
|
//网格线颜色
|
||||||
|
private ColorSelectBox mainGridColor; |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
mainGridColor = new ColorSelectBox(100); |
||||||
|
|
||||||
|
typeComboBox = new UIComboBox(); |
||||||
|
final CardLayout cardlayout = new CardLayout(); |
||||||
|
initList(); |
||||||
|
|
||||||
|
centerPane = new JPanel(cardlayout) { |
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() {// AUGUST:使用当前面板的的高度
|
||||||
|
int index = typeComboBox.getSelectedIndex(); |
||||||
|
return new Dimension(super.getPreferredSize().width, paneList.get(index).getPreferredSize().height); |
||||||
|
} |
||||||
|
}; |
||||||
|
for (int i = 0; i < paneList.size(); i++) { |
||||||
|
BackgroundQuickPane pane = paneList.get(i); |
||||||
|
typeComboBox.addItem(pane.title4PopupWindow()); |
||||||
|
centerPane.add(pane, pane.title4PopupWindow()); |
||||||
|
} |
||||||
|
|
||||||
|
typeComboBox.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
cardlayout.show(centerPane, (String) typeComboBox.getSelectedItem()); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected Component[][] getComponent() { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{null, null}, |
||||||
|
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Area_Background_Color")), typeComboBox}, |
||||||
|
new Component[]{null, centerPane}, |
||||||
|
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Grid_Line_Color")), mainGridColor} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
protected double[] getRows(double p) { |
||||||
|
return new double[]{p, p, p, p}; |
||||||
|
} |
||||||
|
|
||||||
|
private void initList() { |
||||||
|
paneList = new ArrayList<>(); |
||||||
|
paneList.add(new NullBackgroundQuickPane()); |
||||||
|
paneList.add(new ColorBackgroundQuickPane()); |
||||||
|
paneList.add(new ImageBackgroundQuickPane(false)); |
||||||
|
paneList.add(new VanChartGradientPane()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Background"); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(PredefinedChartStyle chartStyle) { |
||||||
|
Background background = chartStyle.getChartBackground(); |
||||||
|
for (int i = 0; i < paneList.size(); i++) { |
||||||
|
BackgroundQuickPane pane = paneList.get(i); |
||||||
|
if (pane.accept(background)) { |
||||||
|
pane.populateBean(background); |
||||||
|
typeComboBox.setSelectedIndex(i); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
mainGridColor.setSelectObject(chartStyle.getGridMainLineColor()); |
||||||
|
} |
||||||
|
|
||||||
|
public void update(PredefinedChartStyle chartStyle) { |
||||||
|
chartStyle.setChartBackground(paneList.get(typeComboBox.getSelectedIndex()).updateBean()); |
||||||
|
if (chartStyle.getChartBackground() instanceof ImageBackground) { |
||||||
|
((ImageBackground) chartStyle.getChartBackground()).setLayout(Constants.IMAGE_EXTEND); |
||||||
|
} |
||||||
|
chartStyle.setGridMainLineColor(mainGridColor.getSelectObject()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.chart; |
||||||
|
|
||||||
|
import com.fr.config.predefined.PredefinedChartStyle; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.style.color.ColorSelectBox; |
||||||
|
|
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2020-09-17 |
||||||
|
*/ |
||||||
|
public class ChartDataSheetStylePane extends AbstractChartStylePane { |
||||||
|
|
||||||
|
//字体样式
|
||||||
|
private ChartFontPane fontPane; |
||||||
|
|
||||||
|
//边框颜色
|
||||||
|
private ColorSelectBox borderColor; |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
fontPane = new ChartFontPane() { |
||||||
|
public String getUILabelText() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Chart_DataSheet_Character"); |
||||||
|
} |
||||||
|
}; |
||||||
|
borderColor = new ColorSelectBox(100); |
||||||
|
} |
||||||
|
|
||||||
|
protected Component[][] getComponent() { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{fontPane, null}, |
||||||
|
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Border_Color")), borderColor} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
protected double[] getRows(double p) { |
||||||
|
return new double[]{p, p, p}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Sheet"); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(PredefinedChartStyle chartStyle) { |
||||||
|
fontPane.populate(chartStyle.getDataSheetFont()); |
||||||
|
borderColor.setSelectObject(chartStyle.getDataSheetBorderColor()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void update(PredefinedChartStyle chartStyle) { |
||||||
|
chartStyle.setDataSheetFont(fontPane.update()); |
||||||
|
chartStyle.setDataSheetBorderColor(borderColor.getSelectObject()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,160 @@ |
|||||||
|
package com.fr.design.mainframe.predefined.ui.detail.chart; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
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.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.GeneralUtils; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Font; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Bjorn |
||||||
|
* @version 10.0 |
||||||
|
* Created by Bjorn on 2020-09-16 |
||||||
|
*/ |
||||||
|
public class ChartFontPane extends BasicPane { |
||||||
|
|
||||||
|
public static final int FONT_START = 6; |
||||||
|
public static final int FONT_END = 72; |
||||||
|
private UIComboBox fontNameComboBox; |
||||||
|
private UIComboBox fontSizeComboBox; |
||||||
|
private UIToggleButton bold; |
||||||
|
private UIToggleButton italic; |
||||||
|
private UIColorButton fontColor; |
||||||
|
private static Integer[] FONT_SIZES = new Integer[FONT_END - FONT_START + 1]; |
||||||
|
|
||||||
|
static { |
||||||
|
for (int i = FONT_START; i <= FONT_END; i++) { |
||||||
|
FONT_SIZES[i - FONT_START] = i; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public ChartFontPane() { |
||||||
|
initState(); |
||||||
|
initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initState() { |
||||||
|
fontNameComboBox = new UIComboBox(Utils.getAvailableFontFamilyNames4Report()); |
||||||
|
fontSizeComboBox = new UIComboBox(FONT_SIZES); |
||||||
|
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")); |
||||||
|
fontColor = new UIColorButton(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
Component[] components = new Component[]{ |
||||||
|
fontColor, italic, bold |
||||||
|
}; |
||||||
|
JPanel buttonPane = new JPanel(new BorderLayout()); |
||||||
|
buttonPane.add(fontSizeComboBox, BorderLayout.CENTER); |
||||||
|
buttonPane.add(GUICoreUtils.createFlowPane(components, FlowLayout.LEFT, LayoutConstants.HGAP_LARGE), BorderLayout.EAST); |
||||||
|
|
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.add(getContentPane(buttonPane), BorderLayout.CENTER); |
||||||
|
|
||||||
|
populate(FRContext.getDefaultValues().getFRFont()); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel getContentPane(JPanel buttonPane) { |
||||||
|
double e = 155; |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rows = {p, p, p}; |
||||||
|
double[] columnSize = {p, e}; |
||||||
|
UILabel text = new UILabel(getUILabelText(), SwingConstants.LEFT); |
||||||
|
Component[][] components = { |
||||||
|
new Component[]{null, null}, |
||||||
|
new Component[]{text, fontNameComboBox}, |
||||||
|
new Component[]{null, buttonPane} |
||||||
|
}; |
||||||
|
|
||||||
|
return TableLayoutHelper.createGapTableLayoutPane(components, rows, columnSize, 20, LayoutConstants.VGAP_LARGE); |
||||||
|
} |
||||||
|
|
||||||
|
public String getUILabelText() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Chart_Character"); |
||||||
|
} |
||||||
|
|
||||||
|
public String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(FRFont frFont) { |
||||||
|
UIObserverListener listener = fontNameComboBox == null ? null : fontNameComboBox.getUiObserverListener(); |
||||||
|
removeAllComboBoxListener(); |
||||||
|
|
||||||
|
if (frFont != null) { |
||||||
|
fontNameComboBox.setSelectedItem(frFont.getFamily()); |
||||||
|
bold.setSelected(frFont.isBold()); |
||||||
|
italic.setSelected(frFont.isItalic()); |
||||||
|
populateFontSize(frFont); |
||||||
|
if (fontColor != null) { |
||||||
|
fontColor.setColor(frFont.getForeground()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//更新结束后,注册监听器
|
||||||
|
registerAllComboBoxListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
private void populateFontSize(FRFont frFont) { |
||||||
|
if (fontSizeComboBox != null) { |
||||||
|
fontSizeComboBox.setSelectedItem(frFont.getSize()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void removeAllComboBoxListener() { |
||||||
|
fontNameComboBox.removeChangeListener(); |
||||||
|
fontSizeComboBox.removeChangeListener(); |
||||||
|
} |
||||||
|
|
||||||
|
private void registerAllComboBoxListener(UIObserverListener listener) { |
||||||
|
fontNameComboBox.registerChangeListener(listener); |
||||||
|
fontSizeComboBox.registerChangeListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 更新字 |
||||||
|
* |
||||||
|
* @return 更新字 |
||||||
|
*/ |
||||||
|
public FRFont update() { |
||||||
|
String name = GeneralUtils.objectToString(fontNameComboBox.getSelectedItem()); |
||||||
|
|
||||||
|
return FRFont.getInstance(name, updateFontStyle(), updateFontSize(), fontColor.getColor()); |
||||||
|
} |
||||||
|
|
||||||
|
private int updateFontStyle() { |
||||||
|
int style = Font.PLAIN; |
||||||
|
if (bold.isSelected() && !italic.isSelected()) { |
||||||
|
style = Font.BOLD; |
||||||
|
} else if (!bold.isSelected() && italic.isSelected()) { |
||||||
|
style = Font.ITALIC; |
||||||
|
} else if (bold.isSelected() && italic.isSelected()) { |
||||||
|
style = 3; |
||||||
|
} |
||||||
|
|
||||||
|
return style; |
||||||
|
} |
||||||
|
|
||||||
|
private float updateFontSize() { |
||||||
|
return Float.parseFloat(GeneralUtils.objectToString(fontSizeComboBox.getSelectedItem())); |
||||||
|
} |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue