Browse Source

Merge pull request #630 in BA/design from ~NEIL/design:release to master

* commit '96519eca895b24cc8a0b945c5aec98ec61197345': (53 commits)
  ct
  REPORT-1096 取色板=》调整代码
  REPORT-1096 取色板=》修复在实时模式下,无法取消颜色拾取的问题
  populate之前,移除控件本身的listener
  update
  删除当前按钮时,也要考虑重新更新面板
  REPORT-1096 取色板=》修复一些bug
  下拉框重构时,不能触发更新动作
  无JIRA任务。调整代码。
  REPORT-1096 不继承UIButton
  无JIRA任务。调整代码。
  无JIRA任务。整理代码
  REPORT-1096 在“纸张背景”窗口中增加取色器按钮
  REPORT-1096 自定义界面的颜色随鼠标位置动态变化;修改取色框的UI
  REPORT-1096 完成基本功能
  无JIRA任务,给CustomChooserPanel.java 调整缩进
  REPORT-1096 将取色按钮封装为一个类
  REPORT-1096 实现第一个界面(下拉颜色选择框)里的取色器功能
  REPORT-1287 属性返回数组代码问题
  返回空数组
  ...
master
superman 8 years ago
parent
commit
f0af16ebfc
  1. 1
      designer/src/com/fr/design/actions/report/ReportBackgroundAction.java
  2. 3
      designer/src/com/fr/design/actions/report/ReportParameterAction.java
  3. 12
      designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java
  4. 8
      designer_base/src/com/fr/design/beans/FurtherBasicBeanPane.java
  5. 9
      designer_base/src/com/fr/design/editor/ValueEditorPane.java
  6. 17
      designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java
  7. 15
      designer_base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java
  8. 4
      designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java
  9. 61
      designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java
  10. 14
      designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java
  11. 25
      designer_base/src/com/fr/design/hyperlink/ReportletHyperlinkPane.java
  12. 34
      designer_base/src/com/fr/design/hyperlink/WebHyperlinkPane.java
  13. BIN
      designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker16.png
  14. BIN
      designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker18.png
  15. BIN
      designer_base/src/com/fr/design/images/gui/colorPicker/colorPickerFrame.png
  16. 233
      designer_base/src/com/fr/design/style/color/ColorPicker.java
  17. 1
      designer_base/src/com/fr/design/style/color/ColorSelectBox.java
  18. 4
      designer_base/src/com/fr/design/style/color/ColorSelectDialog.java
  19. 26
      designer_base/src/com/fr/design/style/color/ColorSelectPane.java
  20. 408
      designer_base/src/com/fr/design/style/color/CustomChooserPanel.java
  21. 17
      designer_base/src/com/fr/design/style/color/NewColorSelectPane.java
  22. 44
      designer_base/src/com/fr/design/style/color/PickColorButtonFactory.java
  23. 10
      designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java
  24. 5
      designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java
  25. 8
      designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java
  26. 9
      designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java
  27. 30
      designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java
  28. 6
      designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java
  29. 7
      designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
  30. 1
      designer_form/src/com/fr/design/designer/creator/XCreator.java
  31. 8
      designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
  32. 1
      designer_form/src/com/fr/design/designer/creator/XWFitLayout.java
  33. 11
      designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java
  34. 4
      designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java
  35. 5
      designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java
  36. 0
      sonar-dev-project.properties

1
designer/src/com/fr/design/actions/report/ReportBackgroundAction.java

@ -5,6 +5,7 @@ package com.fr.design.actions.report;
import com.fr.base.BaseUtils;
import com.fr.design.actions.ReportComponentAction;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.ReportComponent;
import com.fr.design.menu.KeySetUtils;

3
designer/src/com/fr/design/actions/report/ReportParameterAction.java

@ -21,7 +21,7 @@ import com.fr.main.parameter.ReportParameterAttr;
/**
* Report Parameter
*/
public class ReportParameterAction extends JWorkBookAction {
public class ReportParameterAction extends JWorkBookAction{
public ReportParameterAction(JWorkBook jwb) {
super(jwb);
@ -62,6 +62,7 @@ public class ReportParameterAction extends JWorkBookAction {
jwb.fireTargetModified();
jwb.updateReportParameterAttr();
jwb.populateReportParameterAttr();
}
});
parameterArrayDialog.setVisible(true);

12
designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java

@ -8,12 +8,14 @@ import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import com.fr.base.FRContext;
import com.fr.design.dialog.BasicPane;
import com.fr.design.extra.WebDialog;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.ActionLabel;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.env.RemoteEnv;
import com.fr.general.Inter;
import com.fr.page.ReportPageAttrProvider;
import com.fr.stable.ColumnRow;
@ -211,13 +213,13 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
JPanel freezePanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
//自适应插件
if (shouldShowTip()) {
JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Attention"));
BoxCenterAligmentPane actionLabel = getURLActionLabel(Inter.getLocText("FR-Designer_Form-Fit-Tip"));
infoPane.add(actionLabel, BorderLayout.SOUTH);
outfreezePanel.add(freezePanel);
this.add(infoPane, BorderLayout.SOUTH);
}
outfreezePanel.add(freezePanel);
// 重复打印部分
// 重复打印标题的起始行
JPanel labelPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
@ -241,6 +243,10 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
initWriteListener();
}
private boolean shouldShowTip() {
return !(FRContext.getCurrentEnv() instanceof RemoteEnv) && FRContext.isChineseEnv();
}
protected void initWriteListener() {
// 填报重复冻结行
useWriteFrozenCCheckBox.addChangeListener(useWriteFrozenCListener);

8
designer_base/src/com/fr/design/beans/FurtherBasicBeanPane.java

@ -1,5 +1,7 @@
package com.fr.design.beans;
import com.fr.stable.StringUtils;
/**
*
* @author zhou
@ -17,8 +19,10 @@ public abstract class FurtherBasicBeanPane<T> extends BasicBeanPane<T> {
* title应该是一个属性不只是对话框的标题时用到与其他组件结合时也会用得到
* @return 绥化狂标题
*/
@Override
public abstract String title4PopupWindow();
@Deprecated
public String title4PopupWindow(){
return StringUtils.EMPTY;
}
/**
* 重置

9
designer_base/src/com/fr/design/editor/ValueEditorPane.java

@ -106,6 +106,15 @@ public class ValueEditorPane extends BasicPane implements UIObserver, GlobalName
return currentEditor;
}
public int getCurrentEditorIndex() {
for (int i = 0;i < cards.length; i++){
if (cards[i].getClass() == currentEditor.getClass()){
return i;
}
}
return 0;
}
public void setCurrentEditor(int i) {
this.add(arrowButton, BorderLayout.WEST);
currentEditor = this.cards[i];

17
designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java

@ -13,12 +13,12 @@ import com.fr.js.JavaScript;
import com.fr.js.NameJavaScript;
import com.fr.js.NameJavaScriptGroup;
import com.fr.plugin.PluginManager;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Nameable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/**
* 超级链接 界面.
@ -34,23 +34,26 @@ public class HyperlinkGroupPane extends JListControlPane {
* @return 返回Nameable按钮数组.
*/
public NameableCreator[] createNameableCreators() {
Map<String, NameableCreator> nameCreators = new TreeMap<String, NameableCreator>();
NameableCreator[] creators = DesignModuleFactory.getHyperlinkGroupType().getHyperlinkCreators();
for (NameableCreator creator : creators) {
nameCreators.put(creator.menuName(), creator);
}
PluginManager.getInstance().setExtensionPoint(HyperlinkPluginAction.XML_TAG);
ArrayList<UpdateAction> templateArrayLisy = PluginManager.getInstance().getResultList();
// if (templateArrayLisy.isEmpty()) {
// return creators;
// }
NameableCreator[] pluginCreators = new NameableCreator[templateArrayLisy.size()];
for (int i = 0; i < templateArrayLisy.size(); i++) {
pluginCreators[i] = ((HyperlinkPluginAction) templateArrayLisy.get(i)).getHyperlinkCreator();
NameableCreator nameableCreator = ((HyperlinkPluginAction) templateArrayLisy.get(i)).getHyperlinkCreator();
nameCreators.put(nameableCreator.menuName(), nameableCreator);
}
Set<HyperlinkProvider> providers = ExtraDesignClassManager.getInstance().getArray(HyperlinkProvider.XML_TAG);
List<NameableCreator> creatorList = new ArrayList<NameableCreator>();
for (HyperlinkProvider provider : providers) {
NameableCreator nc = provider.createHyperlinkCreator();
creatorList.add(nc);
nameCreators.put(nc.menuName(), nc);
}
return ArrayUtils.addAll(creatorList.toArray(new NameableCreator[creatorList.size()]), ArrayUtils.addAll(creators, pluginCreators));
return nameCreators.values().toArray(new NameableCreator[nameCreators.size()]);
}
/**

15
designer_base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java

@ -91,6 +91,15 @@ public class FRTreeComboBox extends UIComboBox {
return this.tree;
}
/**
* 自定义那些那些node可以选中默认情况下所有node节点都可以选中
* @param node
* @return
*/
protected boolean customSelectable(DefaultMutableTreeNode node){
return true;
}
public void setTree(JTree tree) {
this.tree = tree;
if (tree != null) {
@ -403,6 +412,12 @@ public class FRTreeComboBox extends UIComboBox {
if (comboBox.onlyLeafSelectable && !node.isLeaf()) {
return;
}
//自定义node是否可选择
if (!comboBox.customSelectable(node)){
return;
}
comboBox.setSelectedItem(treePath);
togglePopup();
MenuSelectionManager.defaultManager().clearSelectedPath();

4
designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java

@ -160,6 +160,10 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser
uiObserverListener = listener;
}
public void removeChangeListener(){
uiObserverListener = null;
}
/**
* @return
*/

61
designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java

@ -1,27 +1,19 @@
package com.fr.design.hyperlink;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import com.fr.design.gui.ilable.UILabel;
import javax.swing.JList;
import javax.swing.JPanel;
import com.fr.base.Utils;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UINumberField;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.general.Inter;
import com.fr.js.Hyperlink;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public abstract class AbstractHyperlinkPane<T extends Hyperlink> extends BasicBeanPane<T> {
public static final int NEW_WINDOW = 0;
public static final int DIALOG = 1;
@ -46,7 +38,7 @@ public abstract class AbstractHyperlinkPane<T extends Hyperlink> extends BasicBe
headerPane = this.setHeaderPanel();
this.add(headerPane, BorderLayout.NORTH);
this.add(centerPane, BorderLayout.CENTER);
targetFrameComboBox = new UIComboBox(new String[]{Inter.getLocText("Hyperlink-New_Window"), Inter.getLocText("FR-Hyperlink_Dialog"), Inter.getLocText("Hyperlink-Self_Window")});
targetFrameComboBox = new UIComboBox(getTargetFrames());
targetFrameComboBox.setRenderer(new DefaultListCellRenderer() {
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
@ -86,6 +78,9 @@ public abstract class AbstractHyperlinkPane<T extends Hyperlink> extends BasicBe
this.add(this.setFootPanel(), BorderLayout.SOUTH);
}
protected String[] getTargetFrames(){
return new String[]{Inter.getLocText("Hyperlink-New_Window"), Inter.getLocText("FR-Hyperlink_Dialog"), Inter.getLocText("Hyperlink-Self_Window")};
}
protected abstract JPanel setHeaderPanel();
@ -93,20 +88,34 @@ public abstract class AbstractHyperlinkPane<T extends Hyperlink> extends BasicBe
protected abstract void populateSubHyperlinkBean(T link);
public UIComboBox getTargetFrameComboBox() {
return targetFrameComboBox;
}
public void setTargetFrameComboBox(UIComboBox targetFrameComboBox) {
this.targetFrameComboBox = targetFrameComboBox;
}
public UINumberField getHeightTextFiled() {
return heightTextFiled;
}
public void setHeightTextFiled(UINumberField heightTextFiled) {
this.heightTextFiled = heightTextFiled;
}
public UINumberField getWidthTextFiled() {
return widthTextFiled;
}
public void setWidthTextFiled(UINumberField widthTextFiled) {
this.widthTextFiled = widthTextFiled;
}
@Override
public void populateBean(T link) {
String name = link.getTargetFrame();
if ("_self".equals(name)) {
targetFrameComboBox.setSelectedIndex(SELF);
} else if ("_dialog".equals(name)) {
targetFrameComboBox.setSelectedIndex(DIALOG);
} else if ("_blank".equals(name)) {
targetFrameComboBox.setSelectedIndex(NEW_WINDOW);
} else {
DefaultComboBoxModel model = (DefaultComboBoxModel) targetFrameComboBox.getModel();
model.addElement(name);
targetFrameComboBox.setSelectedItem(name);
}
targetFrameComboBox.setSelectedIndex(HyperlinkTargetFrame.convert(name));
heightTextFiled.setText(String.valueOf(link.getHeight() == 0 ? DEFAULT_H_VALUE : link.getHeight()));
widthTextFiled.setText(String.valueOf(link.getWidth() == 0 ? DEFAULT_V_VALUE : link.getWidth()));
populateSubHyperlinkBean(link);

14
designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java

@ -1,5 +1,7 @@
package com.fr.design.hyperlink;
import com.fr.general.ComparatorUtils;
/**
* Created by ibm on 2016/10/13.
*/
@ -27,6 +29,18 @@ public enum HyperlinkTargetFrame {
return BLANK_FRAME;
}
public static int convert(String name) {
if (arrayOfValues == null) {
arrayOfValues = HyperlinkTargetFrame.values();
}
for (HyperlinkTargetFrame hyperlinkTargetFrame : HyperlinkTargetFrame.values()) {
if (ComparatorUtils.equals(hyperlinkTargetFrame.getName(), name)) {
return hyperlinkTargetFrame.getIndex();
}
}
return BLANK_FRAME.getIndex();
}
public int getIndex() {
return index;

25
designer_base/src/com/fr/design/hyperlink/ReportletHyperlinkPane.java

@ -104,7 +104,7 @@ public class ReportletHyperlinkPane extends BasicBeanPane<ReportletHyperlink> {
}
private class HyperlinkParametersAction extends UITableEditAction {
protected class HyperlinkParametersAction extends UITableEditAction {
public HyperlinkParametersAction() {
this.setName(Inter.getLocText(new String[]{"Reportlet", "Parameter"}));
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/p.gif"));
@ -207,4 +207,27 @@ public class ReportletHyperlinkPane extends BasicBeanPane<ReportletHyperlink> {
}
}
public ReporletHyperNorthPane getNorthPane() {
return northPane;
}
public void setNorthPane(ReporletHyperNorthPane northPane) {
this.northPane = northPane;
}
public ReportletParameterViewPane getParameterViewPane() {
return parameterViewPane;
}
public void setParameterViewPane(ReportletParameterViewPane parameterViewPane) {
this.parameterViewPane = parameterViewPane;
}
public UICheckBox getExtendParametersCheckBox() {
return extendParametersCheckBox;
}
public void setExtendParametersCheckBox(UICheckBox extendParametersCheckBox) {
this.extendParametersCheckBox = extendParametersCheckBox;
}
}

34
designer_base/src/com/fr/design/hyperlink/WebHyperlinkPane.java

@ -40,7 +40,7 @@ public class WebHyperlinkPane extends BasicBeanPane<WebHyperlink> {
parameterViewPane = new ReportletParameterViewPane(getChartParaType(), getValueEditorPane(), getValueEditorPane());
this.add(parameterViewPane, BorderLayout.CENTER);
parameterViewPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Parameters"), null));
parameterViewPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("FR-Designer_Parameters"), null));
useCJKCheckBox = new UICheckBox(Inter.getLocText("Hyperlink-Use_CJK_to_encode_parameter"));
extendParametersCheckBox = new UICheckBox(Inter.getLocText("Hyperlink-Extends_Report_Parameters"));
@ -167,4 +167,36 @@ public class WebHyperlinkPane extends BasicBeanPane<WebHyperlink> {
return ParameterTableModel.CHART_METER_USE;
}
}
public WebHyperNorthPane getNorthPane() {
return northPane;
}
public void setNorthPane(WebHyperNorthPane northPane) {
this.northPane = northPane;
}
public ReportletParameterViewPane getParameterViewPane() {
return parameterViewPane;
}
public void setParameterViewPane(ReportletParameterViewPane parameterViewPane) {
this.parameterViewPane = parameterViewPane;
}
public UICheckBox getUseCJKCheckBox() {
return useCJKCheckBox;
}
public void setUseCJKCheckBox(UICheckBox useCJKCheckBox) {
this.useCJKCheckBox = useCJKCheckBox;
}
public UICheckBox getExtendParametersCheckBox() {
return extendParametersCheckBox;
}
public void setExtendParametersCheckBox(UICheckBox extendParametersCheckBox) {
this.extendParametersCheckBox = extendParametersCheckBox;
}
}

BIN
designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

BIN
designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker18.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
designer_base/src/com/fr/design/images/gui/colorPicker/colorPickerFrame.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

233
designer_base/src/com/fr/design/style/color/ColorPicker.java

@ -0,0 +1,233 @@
package com.fr.design.style.color;
/**
* Created by plough on 2016/12/22.
*/
import com.fr.base.BaseUtils;
import com.fr.general.FRLogger;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import javax.swing.*;
/**
* 取色框
*/
public class ColorPicker extends JDialog implements ActionListener
{
private Container container = getContentPane(); // 主容器
private int setCoordinateX; // 取色框x坐标
private int setCoordinateY; // 取色框y坐标
private int colorPickerSize = 190; // 取色框尺寸
private int scaleFactor = 16; // 放大倍数
private ColorPickerPanel colorPickerPanel = new ColorPickerPanel(scaleFactor); // 取色框内容面板
private Timer timer; // 用于定时重绘
private int FPS = 45; // 重绘取色器的频率
private int timeCycle = 1000 / FPS; // 时钟周期
private ColorSelectable colorSelectable;
private Point mousePos; // 鼠标的绝对坐标
private Color colorToSet; // 暂存要设置的颜色值
private Color initColor; // 保存初始颜色。实时模式下,如果取消取色操作,则重设为初始颜色
private Boolean setColorRealTime; // 实时设定颜色值
/**
* 构造函数创建一个取色框窗体
*/
public ColorPicker(ColorSelectable colorSelectable, Boolean setColorRealTime)
{
setUndecorated(true); // 去掉窗体边缘
setResizable(false);
Shape shape = new Ellipse2D.Double(0, 0, colorPickerSize, colorPickerSize);
setShape(shape);
container.add(colorPickerPanel);
addMouseListener(new MouseFunctions());
updateSize(colorPickerSize);
this.colorSelectable = colorSelectable;
this.setColorRealTime = setColorRealTime;
start();
this.setModal(true);
this.setAlwaysOnTop(true);
updateLocation();
this.setVisible(true);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
public void start() {
timer = new Timer(timeCycle, this);
timer.start();
hideCursor();
// 如果要求实时变化,确保先关闭弹窗,再截屏
// 主要针对"图案"选项卡中的"前景"、"背景"
if (this.setColorRealTime) {
initColor = colorSelectable.getColor();
colorSelectable.setColor(Color.WHITE); // setColor 可以关闭弹窗
try {
Thread.sleep(100); // 等待弹窗关闭
} catch (InterruptedException e) {
FRLogger.getLogger().error(e.getMessage());
}
colorPickerPanel.captureScreen();
}
// System.out.println(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow());
}
/**
* 执行Timer要执行的部分
*/
@Override
public void actionPerformed(ActionEvent e) {
updateLocation();
colorToSet = colorPickerPanel.getPixelColor(mousePos);
if (setColorRealTime && (colorSelectable.getColor() == null || !colorSelectable.getColor().equals(colorToSet))) {
colorSelectable.setColor(colorToSet);
}
}
public void updateLocation() {
mousePos = MouseInfo.getPointerInfo().getLocation();
setCoordinateX = mousePos.x - getSize().width/2;
setCoordinateY = mousePos.y- getSize().height/2;
colorPickerPanel.setMagnifierLocation(setCoordinateX,
setCoordinateY);
setLocation(setCoordinateX, setCoordinateY);
}
/**
* 更新窗体
*
* @param colorPickerSize 取色框尺寸
*/
public void updateSize(int colorPickerSize)
{
colorPickerPanel.setColorPickerSize(colorPickerSize);
setSize(colorPickerSize, colorPickerSize);
validate(); // 更新所有子控件
}
public void pickComplete(Color color) {
timer.stop();
if (color != null) {
colorSelectable.setColor(color);
}
this.dispose();
}
// 隐藏鼠标光标
public void hideCursor() {
Image imageCursor = Toolkit.getDefaultToolkit().getImage("");
Cursor cu = Toolkit.getDefaultToolkit().createCustomCursor(imageCursor, new Point(0,0), "cursor");
setCursor(cu);
}
private class MouseFunctions extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
if (e.getButton() == e.BUTTON1) { // 左键确定
pickComplete(colorToSet);
} else {
pickComplete(setColorRealTime ? initColor : null);
}
}
}
}
class ColorPickerPanel extends JPanel
{
private BufferedImage screenImage;
private Image colorPickerFrame; // 取色框的边框图案
private int colorPickerSize; // 取色框尺寸
private int locationX; // 取色框 x 坐标
private int locationY; // 取色框 y 坐标
private int scaleFactor; // 放大倍数
private Robot robot;
// getPixelColor 常数
private static int SHIFT_STEP = 8; // 比特位右移步长
private static int AND_R = 0xff0000;
private static int AND_G = 0xff00;
private static int AND_B = 0xff;
/**
* 带参数的构造函数
* @param scaleFactor 放大倍数
*/
public ColorPickerPanel(int scaleFactor)
{
colorPickerFrame = BaseUtils.readImage("/com/fr/design/images/gui/colorPicker/colorPickerFrame.png");
this.scaleFactor = scaleFactor;
captureScreen();
}
/**
* 截屏
*/
public void captureScreen() {
try
{
robot = new Robot();
}
catch (AWTException e)
{
}
// 截屏幕
screenImage = robot.createScreenCapture(new Rectangle(0, 0, Toolkit
.getDefaultToolkit().getScreenSize().width, Toolkit
.getDefaultToolkit().getScreenSize().height));
}
/**
* 设置取色框的位置
* @param locationX x坐标
* @param locationY y坐标
*/
public void setMagnifierLocation(int locationX, int locationY)
{
this.locationX = locationX;
this.locationY = locationY;
repaint(); // 注意重画控件
}
public Color getPixelColor(Point mousePos) {
int rgb = screenImage.getRGB(mousePos.x, mousePos.y);
int R = (rgb & AND_R) >> SHIFT_STEP * 2;
int G = (rgb & AND_G) >> SHIFT_STEP;
int B = (rgb & AND_B);
return new Color(R, G, B);
}
public void setColorPickerSize(int colorPickerSize)
{
this.colorPickerSize = colorPickerSize;
}
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
double pixelCount = (double)colorPickerSize / scaleFactor; // 取色器一条边上的放大后的像素点个数(可以是小数)
// 关键处理代码
g2d.drawImage(
screenImage, // 要画的图片
0, // 目标矩形的第一个角的x坐标
0, // 目标矩形的第一个角的y坐标
colorPickerSize, // 目标矩形的第二个角的x坐标
colorPickerSize, // 目标矩形的第二个角的y坐标
locationX + (int)((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的x坐标
locationY + (int)((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的y坐标
locationX + (int)((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的x坐标
locationY + (int)((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的y坐标
this
);
g2d.drawImage(colorPickerFrame, 0, 0, this);
}
}

1
designer_base/src/com/fr/design/style/color/ColorSelectBox.java

@ -63,6 +63,7 @@ public class ColorSelectBox extends AbstractSelectBox<Color> implements UIObserv
fireDisplayComponent(ColorBackground.getInstance(color));
}
});
colorPane.setColor(color);
return colorPane;
}

4
designer_base/src/com/fr/design/style/color/ColorSelectDialog.java

@ -91,8 +91,8 @@ public class ColorSelectDialog extends MiddleChartDialog{
this.add(buttonPane, BorderLayout.SOUTH);
ok = new UIButton(Inter.getLocText("OK"));
cancel = new UIButton(Inter.getLocText("Cancel"));
ok = new UIButton(Inter.getLocText("FR-Designer_Button_OK"));
cancel = new UIButton(Inter.getLocText("FR-Designer_Button_Cancel"));
buttonPane.add(ok);
buttonPane.add(cancel);

26
designer_base/src/com/fr/design/style/color/ColorSelectPane.java

@ -3,10 +3,7 @@
*/
package com.fr.design.style.color;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.GridLayout;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
@ -72,9 +69,7 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
this.add(centerPane, BorderLayout.CENTER);
// 最近使用
UsedColorPane pane = new UsedColorPane(1, 8, ColorSelectConfigManager.getInstance().getColors(),this);
centerPane.add(pane.getPane());
centerPane.add(getRow1Pane());
JPanel menuColorPane1 = new JPanel();
centerPane.add(menuColorPane1);
@ -104,6 +99,23 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
centerPane.add(centerPane1);
}
// 第一行,1个取色按钮 + 7个最近使用的颜色
private JPanel getRow1Pane() {
JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout());
row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0));
row1Pane.setPreferredSize(new Dimension(135, 24)); // 宽度为 16 * 8 + 7
// 取色按钮
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON16, true);
row1Pane.add(pickColorButton, BorderLayout.WEST);
// 最近使用
UsedColorPane usedColorPane = new UsedColorPane(1, 7, ColorSelectConfigManager.getInstance().getColors(),this);
usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 8));
row1Pane.add(usedColorPane.getPane());
return row1Pane;
}
protected Color[] getColorArray(){
return ColorFactory.MenuColors;
}

408
designer_base/src/com/fr/design/style/color/CustomChooserPanel.java

@ -10,9 +10,7 @@ import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.*;
import java.awt.image.MemoryImageSource;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -21,7 +19,6 @@ import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JColorChooser;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.colorchooser.AbstractColorChooserPanel;
@ -32,6 +29,7 @@ import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
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.gui.islider.UISlider;
@ -42,72 +40,113 @@ import com.fr.general.Inter;
/**
* 颜色选择器自定义面板
* @author focus
*
* @author focus
*/
class CustomChooserPanel extends AbstractColorChooserPanel implements ColorSelectable {
/**
* The gradient image displayed.
*/
class CustomChooserPanel extends AbstractColorChooserPanel
{
/** The gradient image displayed. */
private transient Image gradientImage;
/** The Panel that holds the gradient image. */
/**
* The Panel that holds the gradient image.
*/
private transient JPanel gradientPanel;
/** The track gradient image. */
/**
* The track gradient image.
*/
private transient Image trackImage;
/** The panel that holds the track. */
/**
* The panel that holds the track.
*/
private transient JPanel trackPanel;
/** The slider for the locked HSB value. */
/**
* The slider for the locked HSB value.
*/
private transient UISlider slider;
/** The RadioButton that controls the Hue. */
/**
* The RadioButton that controls the Hue.
*/
private transient UIRadioButton hRadio;
/** The RadioButton that controls the Saturation. */
/**
* The RadioButton that controls the Saturation.
*/
private transient UIRadioButton sRadio;
/** The RadioButton that controls the Brightness. */
/**
* The RadioButton that controls the Brightness.
*/
private transient UIRadioButton bRadio;
/** The UIBasicSpinner that controls the Hue. */
/**
* The UIBasicSpinner that controls the Hue.
*/
private transient UIBasicSpinner hSpinner;
/** The UIBasicSpinner that controls the Saturation. */
/**
* The UIBasicSpinner that controls the Saturation.
*/
private transient UIBasicSpinner sSpinner;
/** The UIBasicSpinner that controls the Brightness. */
/**
* The UIBasicSpinner that controls the Brightness.
*/
private transient UIBasicSpinner bSpinner;
/** The UIBasicSpinner that controls the Red. */
/**
* The UIBasicSpinner that controls the Red.
*/
private transient UIBasicSpinner rSpinner;
/** The UIBasicSpinner that controls the Green. */
/**
* The UIBasicSpinner that controls the Green.
*/
private transient UIBasicSpinner gSpinner;
/** The UIBasicSpinner that controls the Blue. */
/**
* The UIBasicSpinner that controls the Blue.
*/
private transient UIBasicSpinner bbSpinner;
private transient UITextField field;
// private transient PickColorButton pickColorButton;
/** The default width of the gradient image. */
/**
* The default width of the gradient image.
*/
private static final int IMG_WIDTH = 200;
/** The default height of the gradient image. */
/**
* The default height of the gradient image.
*/
private static final int IMG_HEIGHT = 205;
/** The default width of the track gradient. */
/**
* The default width of the track gradient.
*/
private static final int TRACK_WIDTH = 20;
/** The UILabel for Red. */
/**
* The UILabel for Red.
*/
private static final UILabel R = new UILabel("R");
/** The UILabel for Green. */
/**
* The UILabel for Green.
*/
private static final UILabel G = new UILabel("G");
/** The UILabel for Blue. */
/**
* The UILabel for Blue.
*/
private static final UILabel B = new UILabel("B");
private static final int H_MAX = 365;
@ -131,7 +170,9 @@ class CustomChooserPanel extends AbstractColorChooserPanel
private ImageRGBScrollListener rgbScroll = new ImageRGBScrollListener();
/** The point that is displayed in the gradient image. */
/**
* The point that is displayed in the gradient image.
*/
private transient Point gradientPoint = new Point();
/**
@ -140,19 +181,29 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*/
private transient boolean internalChange = false;
/** This indicates that the change to the spinner is triggered internally. */
/**
* This indicates that the change to the spinner is triggered internally.
*/
private transient boolean spinnerTrigger = false;
/** This int identifies which spinner is currently locked. */
/**
* This int identifies which spinner is currently locked.
*/
private transient int locked = -1;
/** This value indicates that the Hue spinner is locked. */
/**
* This value indicates that the Hue spinner is locked.
*/
static final int HLOCKED = 0;
/** This value indicates that the Saturation spinner is locked. */
/**
* This value indicates that the Saturation spinner is locked.
*/
static final int SLOCKED = 1;
/** This value indicates that the Brightness spinner is locked. */
/**
* This value indicates that the Brightness spinner is locked.
*/
static final int BLOCKED = 2;
/**
@ -162,12 +213,13 @@ class CustomChooserPanel extends AbstractColorChooserPanel
private transient boolean handlingMouse;
// 文本监听器,监听十六进制文本输入
class TextDocumentListener implements DocumentListener{
class TextDocumentListener implements DocumentListener {
// 十六进制颜色验证的正则表达式
private static final String HEX_PATTERN = "([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";
private Pattern pattern;
private Matcher matcher;
@Override
public void insertUpdate(DocumentEvent e) {
Document doc = e.getDocument();
@ -185,12 +237,12 @@ class CustomChooserPanel extends AbstractColorChooserPanel
}
private void updateColorForHex(Document doc){
private void updateColorForHex(Document doc) {
try {
String str = doc.getText(0, doc.getLength());
pattern = Pattern.compile(HEX_PATTERN);
matcher = pattern.matcher(str);
if(matcher.matches()){
if (matcher.matches()) {
Color color = new Color(Integer.parseInt(str, 16));
CustomChooserPanel.this.getColorSelectionModel().setSelectedColor(color);
}
@ -205,16 +257,14 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This helper class handles mouse events on the gradient image.
*/
class MainGradientMouseListener extends MouseAdapter
implements MouseMotionListener
{
implements MouseMotionListener {
/**
* This method is called when the mouse is pressed over the gradient
* image. The JColorChooser is then updated with new HSB values.
*
* @param e The MouseEvent.
*/
public void mousePressed(MouseEvent e)
{
public void mousePressed(MouseEvent e) {
gradientPoint = e.getPoint();
update(e.getPoint());
}
@ -225,10 +275,9 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @param e The MouseEvent.
*/
public void mouseDragged(MouseEvent e)
{
public void mouseDragged(MouseEvent e) {
Point p = e.getPoint();
if (isMouseOutOfImage(p)){
if (isMouseOutOfImage(p)) {
return;
}
@ -236,7 +285,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
update(p);
}
private boolean isMouseOutOfImage(Point p){
private boolean isMouseOutOfImage(Point p) {
return (p.x < 0 || p.y < 0 || p.y > IMG_HEIGHT || p.x > IMG_WIDTH);
}
@ -245,8 +294,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @param e The MouseEvent.
*/
public void mouseMoved(MouseEvent e)
{
public void mouseMoved(MouseEvent e) {
// Do nothing.
}
@ -255,14 +303,13 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @param p The Point where the MouseEvent occurred.
*/
private void update(Point p)
{
private void update(Point p) {
handlingMouse = true;
if (hSpinner.isEnabled()){
if (hSpinner.isEnabled()) {
updateH(p);
}else if (sSpinner.isEnabled()){
} else if (sSpinner.isEnabled()) {
updateS(p);
}else{
} else {
updateB(p);
}
handlingMouse = false;
@ -273,8 +320,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @param p The point where the MouseEvent occurred.
*/
private void updateH(Point p)
{
private void updateH(Point p) {
float s = (IMG_WIDTH - p.x * 1f) / IMG_WIDTH;
float b = (IMG_HEIGHT - p.y * 1f) / IMG_HEIGHT;
@ -292,8 +338,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @param p The point where the MouseEvent occurred.
*/
private void updateS(Point p)
{
private void updateS(Point p) {
float h = p.x * 1f / IMG_WIDTH;
float b = (IMG_HEIGHT - p.y * 1f) / IMG_HEIGHT;
@ -310,8 +355,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @param p The point where the MouseEvent occurred.
*/
private void updateB(Point p)
{
private void updateB(Point p) {
float h = p.x * 1f / IMG_WIDTH;
float s = (IMG_HEIGHT - p.y * 1f) / IMG_HEIGHT;
@ -327,25 +371,22 @@ class CustomChooserPanel extends AbstractColorChooserPanel
/**
* This method listens for slider value changes.
*/
class SliderChangeListener implements ChangeListener
{
class SliderChangeListener implements ChangeListener {
/**
* This method is called when the slider value changes. It should change
* the color of the JColorChooser.
*
* @param e The ChangeEvent.
*/
public void stateChanged(ChangeEvent e)
{
if (internalChange){
public void stateChanged(ChangeEvent e) {
if (internalChange) {
return;
}
Integer value = new Integer(slider.getValue());
switch (locked)
{
switch (locked) {
case HLOCKED:
hSpinner.setValue(value);
break;
@ -364,29 +405,22 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This helper class determines the active UIBasicSpinner.
*/
class RadioStateListener extends MouseAdapter
implements MouseMotionListener
{
implements MouseMotionListener {
/**
* This method is called when there is a new UIRadioButton that was
* selected. As a result, it should activate the associated UIBasicSpinner.
*
* @param e The ChangeEvent.
*/
public void mousePressed(MouseEvent e)
{
public void mousePressed(MouseEvent e) {
UIBasicSpinner change;
if (e.getSource() == hRadio)
{
if (e.getSource() == hRadio) {
locked = HLOCKED;
change = hSpinner;
}
else if (e.getSource() == sRadio)
{
} else if (e.getSource() == sRadio) {
locked = SLOCKED;
change = sSpinner;
}
else
{
} else {
locked = BLOCKED;
change = bSpinner;
}
@ -406,17 +440,15 @@ class CustomChooserPanel extends AbstractColorChooserPanel
/**
* hsl 监听
*/
class ImageScrollListener implements ChangeListener
{
class ImageScrollListener implements ChangeListener {
/**
* This method is called whenever one of the UIBasicSpinner values change. The
* JColorChooser should be updated with the new HSB values.
*
* @param e The ChangeEvent.
*/
public void stateChanged(ChangeEvent e)
{
if (internalChange){
public void stateChanged(ChangeEvent e) {
if (internalChange) {
return;
}
updateImageAndTrack();
@ -427,17 +459,15 @@ class CustomChooserPanel extends AbstractColorChooserPanel
/**
* rgb 监听
*/
class ImageRGBScrollListener implements ChangeListener
{
class ImageRGBScrollListener implements ChangeListener {
/**
* This method is called whenever one of the UIBasicSpinner values change. The
* JColorChooser should be updated with the new HSB values.
*
* @param e The ChangeEvent.
*/
public void stateChanged(ChangeEvent e)
{
if (internalChange){
public void stateChanged(ChangeEvent e) {
if (internalChange) {
return;
}
@ -447,7 +477,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
int bb = (Integer) bbSpinner.getValue();
spinnerTrigger = true;
getColorSelectionModel().setSelectedColor(new Color(r,g,bb));
getColorSelectionModel().setSelectedColor(new Color(r, g, bb));
spinnerTrigger = false;
updateChooser();
@ -458,8 +488,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
/**
* Creates a new DefaultHSBChooserPanel object.
*/
CustomChooserPanel()
{
CustomChooserPanel() {
super();
}
@ -469,8 +498,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @return The name displayed in the JColorChooser tab.
*/
public String getDisplayName()
{
public String getDisplayName() {
return Inter.getLocText("FR-Designer_Custom");
}
@ -479,8 +507,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* UIBasicSpinners, the JSlider, and the gradient image point) with updated
* values when the JColorChooser color value changes.
*/
public void updateChooser()
{
public void updateChooser() {
Color c = getColorSelectionModel().getSelectedColor();
float[] hsbVals = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(),
null);
@ -490,32 +517,29 @@ class CustomChooserPanel extends AbstractColorChooserPanel
internalChange = false;
if (! handlingMouse && slider != null && ! slider.getValueIsAdjusting()){
if (!handlingMouse && slider != null && !slider.getValueIsAdjusting()) {
updateImage();
}
if (! handlingMouse || locked != HLOCKED){
if (!handlingMouse || locked != HLOCKED) {
updateTrack();
}
updateTextFields();
updateHexFields();
}
private void adjustHSLValue(float[] hsbVals){
if (! spinnerTrigger)
{
private void adjustHSLValue(float[] hsbVals) {
if (!spinnerTrigger) {
hSpinner.setValue(new Integer((int) (hsbVals[0] * HSPINNER_VALUE)));
sSpinner.setValue(new Integer((int) (hsbVals[1] * SSPINNER_VALUE)));
bSpinner.setValue(new Integer((int) (hsbVals[2] * LSPINNER_VALUE)));
}
switch (locked)
{
switch (locked) {
case HLOCKED:
if (slider != null){
if (slider != null) {
slider.setValue(((Number) hSpinner.getValue()).intValue());
}
if (! handlingMouse)
{
if (!handlingMouse) {
gradientPoint.x = (int) ((1
- ((Number) sSpinner.getValue()).intValue() / SSPINNER_VALUE) * IMG_WIDTH);
gradientPoint.y = (int) ((1
@ -523,22 +547,20 @@ class CustomChooserPanel extends AbstractColorChooserPanel
}
break;
case SLOCKED:
if (slider != null){
if (slider != null) {
slider.setValue(((Number) sSpinner.getValue()).intValue());
}
if (! handlingMouse)
{
if (!handlingMouse) {
gradientPoint.x = (int) (((Number) hSpinner.getValue()).intValue() / HSPINNER_VALUE * IMG_WIDTH);
gradientPoint.y = (int) ((1
- ((Number) bSpinner.getValue()).intValue() / LSPINNER_VALUE) * IMG_HEIGHT);
}
break;
case BLOCKED:
if (slider != null){
if (slider != null) {
slider.setValue(((Number) bSpinner.getValue()).intValue());
}
if (! handlingMouse)
{
if (!handlingMouse) {
gradientPoint.x = (int) (((Number) hSpinner.getValue()).intValue() / HSPINNER_VALUE * IMG_WIDTH);
gradientPoint.y = (int) ((1
- ((Number) sSpinner.getValue()).intValue() / SSPINNER_VALUE) * IMG_HEIGHT);
@ -547,7 +569,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
}
}
private void updateImageAndTrack(){
private void updateImageAndTrack() {
float h = ((Number) hSpinner.getValue()).intValue() / HSPINNER_VALUE;
float s = ((Number) sSpinner.getValue()).intValue() / SSPINNER_VALUE;
float b = ((Number) bSpinner.getValue()).intValue() / LSPINNER_VALUE;
@ -556,8 +578,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
getColorSelectionModel().setSelectedColor(new Color(Color.HSBtoRGB(h, s, b)));
spinnerTrigger = false;
if (! handlingMouse && slider != null && ! slider.getValueIsAdjusting())
{
if (!handlingMouse && slider != null && !slider.getValueIsAdjusting()) {
updateImage();
updateTrack();
}
@ -569,8 +590,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
/**
* This method builds the DefaultHSBChooserPanel.
*/
protected void buildChooser()
{
protected void buildChooser() {
setLayout(new BorderLayout());
add(buildRightPanel(), BorderLayout.EAST);
JPanel container = new JPanel();
@ -603,17 +623,14 @@ class CustomChooserPanel extends AbstractColorChooserPanel
repaint();
}
private JPanel createGradientPanel(){
return new JPanel()
{
public Dimension getPreferredSize()
{
private JPanel createGradientPanel() {
return new JPanel() {
public Dimension getPreferredSize() {
return new Dimension(IMG_WIDTH, IMG_HEIGHT);
}
public void paint(Graphics g)
{
if (gradientImage != null){
public void paint(Graphics g) {
if (gradientImage != null) {
g.drawImage(gradientImage, 0, 0, this);
}
@ -625,17 +642,14 @@ class CustomChooserPanel extends AbstractColorChooserPanel
};
}
private JPanel createTrackPanel(){
return new JPanel()
{
public Dimension getPreferredSize()
{
private JPanel createTrackPanel() {
return new JPanel() {
public Dimension getPreferredSize() {
return new Dimension(TRACK_WIDTH, IMG_HEIGHT);
}
public void paint(Graphics g)
{
if (trackImage != null){
public void paint(Graphics g) {
if (trackImage != null) {
g.drawImage(trackImage, 0, 0, this);
}
@ -648,8 +662,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @param chooser The JColorChooser to remove this panel from.
*/
public void uninstallChooserPanel(JColorChooser chooser)
{
public void uninstallChooserPanel(JColorChooser chooser) {
trackImage = null;
gradientImage = null;
gradientPanel = null;
@ -673,8 +686,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @return The right side panel.
*/
private Container buildRightPanel()
{
private Container buildRightPanel() {
JPanel container = new JPanel();
container.setLayout(new FlowLayout(FlowLayout.RIGHT));
@ -682,30 +694,32 @@ class CustomChooserPanel extends AbstractColorChooserPanel
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout(0, 10));
UILabel label = new UILabel();
label.setSize(200,200);
label.setSize(200, 200);
container.add(label);
container.add(mainPanel);
// hsl和rgb面板
JPanel hslAndRgbPanel = new JPanel();
hslAndRgbPanel.setLayout(new BorderLayout(0,16));
hslAndRgbPanel.add(initialHSLPanel(),BorderLayout.CENTER);
hslAndRgbPanel.add(initialRGBPanel(),BorderLayout.SOUTH);
hslAndRgbPanel.setLayout(new BorderLayout(0, 16));
hslAndRgbPanel.add(initialHSLPanel(), BorderLayout.CENTER);
hslAndRgbPanel.add(initialRGBPanel(), BorderLayout.SOUTH);
// 十六进制面板
JPanel hexPanel = new JPanel();
hexPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 8, 0));
hexPanel.add(new UILabel("#"));
hexPanel.add(field);
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON18, true);
hexPanel.add(pickColorButton);
mainPanel.add(hslAndRgbPanel,BorderLayout.CENTER);
mainPanel.add(hexPanel,BorderLayout.SOUTH);
mainPanel.add(hslAndRgbPanel, BorderLayout.CENTER);
mainPanel.add(hexPanel, BorderLayout.SOUTH);
return container;
}
//初始化HSL部分
private JPanel initialHSLPanel(){
private JPanel initialHSLPanel() {
hRadio = new UIRadioButton("H");
sRadio = new UIRadioButton("S");
bRadio = new UIRadioButton("L");
@ -734,7 +748,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
bSpinner.addChangeListener(scroll);
JPanel hslPanel = new JPanel();
hslPanel.setLayout(new GridLayout(3,0,0,5));
hslPanel.setLayout(new GridLayout(3, 0, 0, 5));
JPanel hPanel = new JPanel();
hPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 0));
@ -756,7 +770,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
return hslPanel;
}
private JPanel initialRGBPanel(){
private JPanel initialRGBPanel() {
// 初始化RGB部分
rSpinner = new UIBasicSpinner(new SpinnerNumberModel(0, 0, 255, 1));
gSpinner = new UIBasicSpinner(new SpinnerNumberModel(0, 0, 255, 1));
@ -770,11 +784,11 @@ class CustomChooserPanel extends AbstractColorChooserPanel
TextDocumentListener listen = new TextDocumentListener();
field = new UITextField();
field.setPreferredSize(new Dimension(70,18));
field.setPreferredSize(new Dimension(70, 18));
field.getDocument().addDocumentListener(listen);
JPanel rgbPanel = new JPanel();
rgbPanel.setLayout(new GridLayout(3,0,0,5));
rgbPanel.setLayout(new GridLayout(3, 0, 0, 5));
JPanel rPanel = new JPanel();
rPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 0));
@ -802,8 +816,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @return The small display icon.
*/
public Icon getSmallDisplayIcon()
{
public Icon getSmallDisplayIcon() {
return null;
}
@ -812,8 +825,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
*
* @return The large display icon.
*/
public Icon getLargeDisplayIcon()
{
public Icon getLargeDisplayIcon() {
return null;
}
@ -821,15 +833,13 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the gradient image with a new one taking the Hue
* value as the constant.
*/
private void updateHLockImage()
{
private void updateHLockImage() {
int index = 0;
int[] pix = new int[IMG_WIDTH * IMG_HEIGHT];
float hValue = ((Number) hSpinner.getValue()).intValue() / HSPINNER_VALUE;
for (int j = 0; j < IMG_HEIGHT; j++)
{
for (int i = 0; i < IMG_WIDTH; i++){
for (int j = 0; j < IMG_HEIGHT; j++) {
for (int i = 0; i < IMG_WIDTH; i++) {
pix[index++] = Color.HSBtoRGB(hValue, (IMG_WIDTH - i * 1f) / IMG_WIDTH,
(IMG_HEIGHT - j * 1f) / IMG_HEIGHT) | (BINARY_FOR_EIGHT << TWENTY_FOUR);
}
@ -843,14 +853,13 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the gradient image with a new one taking the
* Brightness value as the constant.
*/
private void updateBLockImage()
{
private void updateBLockImage() {
int[] pix = new int[IMG_WIDTH * IMG_HEIGHT];
float bValue = ((Number) bSpinner.getValue()).intValue() / LSPINNER_VALUE;
int index = 0;
for (int j = 0; j < IMG_HEIGHT; j++){
for (int i = 0; i < IMG_WIDTH; i++){
for (int j = 0; j < IMG_HEIGHT; j++) {
for (int i = 0; i < IMG_WIDTH; i++) {
pix[index++] = Color.HSBtoRGB(i * 1f / IMG_WIDTH,
(IMG_HEIGHT - j * 1f) / IMG_HEIGHT, bValue) | (BINARY_FOR_EIGHT << TWENTY_FOUR);
}
@ -864,16 +873,15 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the gradient image with a new one taking the
* Saturation value as the constant.
*/
private void updateSLockImage()
{
private void updateSLockImage() {
int[] pix = new int[IMG_WIDTH * IMG_HEIGHT];
float sValue = ((Number) sSpinner.getValue()).intValue() / SSPINNER_VALUE;
int index = 0;
for (int j = 0; j < IMG_HEIGHT; j++){
for (int i = 0; i < IMG_WIDTH; i++){
for (int j = 0; j < IMG_HEIGHT; j++) {
for (int i = 0; i < IMG_WIDTH; i++) {
pix[index++] = Color.HSBtoRGB(i * 1f / IMG_WIDTH, sValue,
(IMG_HEIGHT - j * 1f) / IMG_HEIGHT)| (BINARY_FOR_EIGHT << TWENTY_FOUR);
(IMG_HEIGHT - j * 1f) / IMG_HEIGHT) | (BINARY_FOR_EIGHT << TWENTY_FOUR);
}
}
@ -885,10 +893,8 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method calls the appropriate method to update the gradient image
* depending on which HSB value is constant.
*/
private void updateImage()
{
switch (locked)
{
private void updateImage() {
switch (locked) {
case HLOCKED:
updateHLockImage();
break;
@ -904,8 +910,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel
/**
* This method updates the TextFields with the correct RGB values.
*/
private void updateTextFields()
{
private void updateTextFields() {
int c = getColorSelectionModel().getSelectedColor().getRGB();
removeRGBSpinnerChangeLisener();
@ -917,20 +922,19 @@ class CustomChooserPanel extends AbstractColorChooserPanel
repaint();
}
private void removeRGBSpinnerChangeLisener(){
private void removeRGBSpinnerChangeLisener() {
rSpinner.removeChangeListener(rgbScroll);
gSpinner.removeChangeListener(rgbScroll);
bbSpinner.removeChangeListener(rgbScroll);
}
private void addRGBSpinnerChangeLisener(){
private void addRGBSpinnerChangeLisener() {
rSpinner.addChangeListener(rgbScroll);
gSpinner.addChangeListener(rgbScroll);
bbSpinner.addChangeListener(rgbScroll);
}
private void updateHexFields()
{
private void updateHexFields() {
Color color = getColorSelectionModel().getSelectedColor();
String R = Integer.toHexString(color.getRed());
@ -940,9 +944,9 @@ class CustomChooserPanel extends AbstractColorChooserPanel
String G = Integer.toHexString(color.getGreen());
G = G.length() < 2 ? ('0' + G) : G;
try{
try {
field.setText(R + G + B);
}catch(Exception e){
} catch (Exception e) {
// 因为有了DocumentListener的监听,导致setText()的时候报错但不影响使用
// 所以只捕捉,不处理
}
@ -953,27 +957,23 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the slider in response to making a different HSB
* property the constant.
*/
private void updateSlider()
{
if (slider == null){
private void updateSlider() {
if (slider == null) {
return;
}
slider.setMinimum(0);
if (locked == HLOCKED)
{
if (locked == HLOCKED) {
internalChange = true;
slider.setValue(((Number) hSpinner.getValue()).intValue());
slider.setMaximum(359);
internalChange = false;
slider.setInverted(true);
}
else
{
} else {
slider.setInverted(false);
if (locked == SLOCKED){
if (locked == SLOCKED) {
slider.setValue(((Number) sSpinner.getValue()).intValue());
}else{
} else {
slider.setValue(((Number) bSpinner.getValue()).intValue());
}
slider.setMaximum(100);
@ -986,10 +986,8 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the track gradient image depending on which HSB
* property is constant.
*/
private void updateTrack()
{
switch (locked)
{
private void updateTrack() {
switch (locked) {
case HLOCKED:
updateHTrack();
break;
@ -1006,13 +1004,12 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the track gradient image if the Hue value is allowed
* to change (according to the UIRadioButtons).
*/
private void updateHTrack()
{
private void updateHTrack() {
int trackIndex = 0;
int[] trackPix = new int[TRACK_WIDTH * IMG_HEIGHT];
for (int j = 0; j < IMG_HEIGHT; j++){
for (int i = 0; i < TRACK_WIDTH; i++){
for (int j = 0; j < IMG_HEIGHT; j++) {
for (int i = 0; i < TRACK_WIDTH; i++) {
trackPix[trackIndex++] = Color.HSBtoRGB(j * 1f / IMG_HEIGHT, 1f, 1f)
| (BINARY_FOR_EIGHT << TWENTY_FOUR);
}
@ -1026,16 +1023,15 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the track gradient image if the Saturation value is
* allowed to change (according to the UIRadioButtons).
*/
private void updateSTrack()
{
private void updateSTrack() {
int[] trackPix = new int[TRACK_WIDTH * IMG_HEIGHT];
float hValue = ((Number) hSpinner.getValue()).intValue() / HSPINNER_VALUE;
float bValue = ((Number) bSpinner.getValue()).intValue() / LSPINNER_VALUE;
int trackIndex = 0;
for (int j = 0; j < IMG_HEIGHT; j++){
for (int i = 0; i < TRACK_WIDTH; i++){
for (int j = 0; j < IMG_HEIGHT; j++) {
for (int i = 0; i < TRACK_WIDTH; i++) {
trackPix[trackIndex++] = Color.HSBtoRGB(hValue,
(IMG_HEIGHT - j * 1f) / IMG_HEIGHT,
bValue) | (BINARY_FOR_EIGHT << TWENTY_FOUR);
@ -1050,16 +1046,15 @@ class CustomChooserPanel extends AbstractColorChooserPanel
* This method updates the track gradient image if the Brightness value is
* allowed to change (according to the UIRadioButtons).
*/
private void updateBTrack()
{
private void updateBTrack() {
int[] trackPix = new int[TRACK_WIDTH * IMG_HEIGHT];
float hValue = ((Number) hSpinner.getValue()).intValue() / HSPINNER_VALUE;
float sValue = ((Number) sSpinner.getValue()).intValue() / SSPINNER_VALUE;
int trackIndex = 0;
for (int j = 0; j < IMG_HEIGHT; j++){
for (int i = 0; i < TRACK_WIDTH; i++){
for (int j = 0; j < IMG_HEIGHT; j++) {
for (int i = 0; i < TRACK_WIDTH; i++) {
trackPix[trackIndex++] = Color.HSBtoRGB(hValue, sValue,
(IMG_HEIGHT - j * 1f) / IMG_HEIGHT) | (BINARY_FOR_EIGHT << TWENTY_FOUR);
}
@ -1069,4 +1064,15 @@ class CustomChooserPanel extends AbstractColorChooserPanel
trackPix, 0, TRACK_WIDTH));
}
public Color getColor() {
return getColorSelectionModel().getSelectedColor();
}
public void setColor(Color color) {
getColorSelectionModel().setSelectedColor(color);
}
public void colorSetted(ColorCell cc) {
}
}

17
designer_base/src/com/fr/design/style/color/NewColorSelectPane.java

@ -79,9 +79,20 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
this.add(centerPane, BorderLayout.CENTER);
// 第一行,1个取色按钮 + 7个最近使用的颜色
JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout());
row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0));
row1Pane.setPreferredSize(new Dimension(135, 16)); // 宽度为 16 * 8 + 7
centerPane.add(row1Pane);
// 取色按钮
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON16);
row1Pane.add(pickColorButton, BorderLayout.WEST);
// 最近使用
usedColorPane = new UsedColorPane(1, 8, ColorSelectConfigManager.getInstance().getColors(),this);
centerPane.add(usedColorPane.getPane());
usedColorPane = new UsedColorPane(1, 7, ColorSelectConfigManager.getInstance().getColors(),this);
usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 8));
row1Pane.add(usedColorPane.getPane());
JPanel menuColorPane1 = new JPanel();
centerPane.add(menuColorPane1);
@ -204,4 +215,6 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
usedColorPane.updateUsedColor();
}
}

44
designer_base/src/com/fr/design/style/color/PickColorButtonFactory.java

@ -0,0 +1,44 @@
package com.fr.design.style.color;
import com.fr.base.BaseUtils;
import com.fr.design.gui.ibutton.UIButton;
import java.awt.*;
import java.awt.event.*;
/**
* Created by plough on 2016/12/22.
*/
public class PickColorButtonFactory {
public static UIButton getPickColorButton(ColorSelectable colorSelectable, IconType iconType) {
return getPickColorButton(colorSelectable, iconType, false);
}
public static UIButton getPickColorButton(final ColorSelectable colorSelectable, IconType iconType, final Boolean setColorRealTime) {
UIButton pickColorButton = new UIButton();
if (iconType == IconType.ICON16) {
pickColorButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/gui/colorPicker/colorPicker16.png"));
pickColorButton.setPreferredSize(new Dimension(16, 16));
} else {
pickColorButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/gui/colorPicker/colorPicker18.png"));
pickColorButton.setPreferredSize(new Dimension(18, 18));
}
pickColorButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
pickColorButton.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
new ColorPicker(colorSelectable, setColorRealTime);
}
});
return pickColorButton;
}
// 取色器按钮使用的图标
public enum IconType {
ICON16, ICON18
}
}

10
designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java

@ -259,7 +259,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh
while (iterator.hasNext()){
Map.Entry entry = (Map.Entry) iterator.next();
IndependentChartUIProvider provider = (IndependentChartUIProvider) entry.getValue();
names[i++] = provider.getPlotTypePane().title4PopupWindow();
names[i++] = provider.getPlotTypeTitle4PopupWindow();
}
return names;
}
@ -274,7 +274,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh
public String getTitle4PopupWindow(String priority, String plotID){
if (chartTypeInterfaces != null && chartTypeInterfaces.containsKey(priority) && chartTypeInterfaces.get(priority).containsKey(plotID)){
IndependentChartUIProvider provider = chartTypeInterfaces.get(priority).get(plotID);
return provider.getPlotTypePane().title4PopupWindow();
return provider.getPlotTypeTitle4PopupWindow();
}
//兼容老的插件
@ -284,7 +284,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh
Map.Entry entry = (Map.Entry) iterator.next();
String defaultPriority = (String) entry.getKey();
if (chartTypeInterfaces.get(defaultPriority).containsKey(plotID)) {
return chartTypeInterfaces.get(defaultPriority).get(plotID).getPlotTypePane().title4PopupWindow();
return chartTypeInterfaces.get(defaultPriority).get(plotID).getPlotTypeTitle4PopupWindow();
}
}
}
@ -332,7 +332,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh
while (chartUI.hasNext()) {
Map.Entry chartUIEntry = (Map.Entry) chartUI.next();
IndependentChartUIProvider provider = (IndependentChartUIProvider) chartUIEntry.getValue();
names[index++] = provider.getPlotTypePane().title4PopupWindow();
names[index++] = provider.getPlotTypeTitle4PopupWindow();
}
return index;
}
@ -495,7 +495,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh
extraChartDesignInterfaceList.add(tagName);
}
if (IndependentChartUIProvider.XML_TAG.equals(tagName)) {
addChartInterface(reader.getAttrAsString("class", ""), reader.getAttrAsString("priority", ChartTypeManager.DEFAULT_PRIORITY),reader.getAttrAsString("plotID", ""), simplify);
addChartInterface(reader.getAttrAsString("class", ""), reader.getAttrAsString("priority", ChartTypeManager.CHART_PRIORITY),reader.getAttrAsString("plotID", ""), simplify);
}
}
}

5
designer_chart/src/com/fr/design/chart/fun/IndependentChartUIProvider.java

@ -84,5 +84,10 @@ public interface IndependentChartUIProvider extends Level {
*/
String getIconPath();
/**
* plot面板的标题
*/
String getPlotTypeTitle4PopupWindow();
}

8
designer_chart/src/com/fr/design/chart/fun/impl/AbstractIndependentChartUIWithAPILevel.java

@ -57,4 +57,12 @@ public abstract class AbstractIndependentChartUIWithAPILevel implements Independ
public ConditionAttributesPane getPlotConditionPane(Plot plot){
return new DataSeriesConditionPane();
}
/**
* plot面板的标题
* 插件兼容
*/
public String getPlotTypeTitle4PopupWindow(){
return getPlotTypePane().title4PopupWindow();
}
}

9
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypeButtonPane.java

@ -138,7 +138,7 @@ public class ChartTypeButtonPane extends BasicBeanPane<ChartCollection> implemen
private void checkoutChange(){
editingCollection.calculateMultiChartMode();
if (parent != null){
parent.reactorChartTypePane(editingCollection);
parent.relayoutChartTypePane(editingCollection);
}
//检查是否可以配置切换
configButton.setEnabled(editingCollection.changeEnable());
@ -425,6 +425,8 @@ public class ChartTypeButtonPane extends BasicBeanPane<ChartCollection> implemen
private void deleteAButton() {
//先重构属性,在重构面板,否则面板在重构过程中,会重新将属性中的切换图表加到indexList中,导致面板无法删除
//记录改变前的plotID
String lastPlotID = editingCollection == null ? StringUtils.EMPTY : editingCollection.getSelectedChart().getPlot().getPlotID();
if (editingCollection != null) {
int count = editingCollection.getChartCount();
for (int i = 0; i < count; i++) {
@ -447,6 +449,11 @@ public class ChartTypeButtonPane extends BasicBeanPane<ChartCollection> implemen
checkoutChange();
relayoutPane();
//重构面板
if (parent != null ){
parent.reLayoutEditPane(lastPlotID, editingCollection);
}
}
private void relayoutPane() {

30
designer_chart/src/com/fr/design/mainframe/chart/gui/ChartTypePane.java

@ -69,7 +69,12 @@ public class ChartTypePane extends AbstractChartAttrPane{
buttonPane = new ChartTypeButtonPane(this);
content.add(buttonPane, BorderLayout.NORTH);
if (editingCollection != null) {
relayoutChartTypePane(editingCollection);
}else {
chartTypePane = new ComboBoxPane();
}
BasicScrollPane scrollPane = new BasicScrollPane() {
@Override
protected JPanel createContentPane() {
@ -192,7 +197,7 @@ public class ChartTypePane extends AbstractChartAttrPane{
});
}
public void reactor(ChartCollection collection){
public void relayout(ChartCollection collection){
//重构需要重构下拉框选项和cardNames
Chart chart = collection.getSelectedChart();
String chartID = chart.getPriority();
@ -201,6 +206,8 @@ public class ChartTypePane extends AbstractChartAttrPane{
}
//第一步就是重构cardNames
cardNames = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID);
//下拉框重构开始。为了防止重构是触发update
((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.REACTOR);
//重构下拉框选项
reactorComboBox();
//重新选择选中的下拉项
@ -208,6 +215,8 @@ public class ChartTypePane extends AbstractChartAttrPane{
String plotID = chart.getPlot().getPlotID();
Object item = ChartTypeInterfaceManager.getInstance().getTitle4PopupWindow(chartID, plotID);
jcb.setSelectedItem(item);
//下拉框重构结束
((FlexibleComboBox)jcb).setItemEvenType(ItemEventType.DEFAULT);
//重新选中
checkPlotPane();
}
@ -218,13 +227,10 @@ public class ChartTypePane extends AbstractChartAttrPane{
}
private void reactorComboBox() {
FlexibleComboBox fcb = (FlexibleComboBox)jcb;
fcb.setItemEvenType(ItemEventType.REACTOR);
fcb.removeAllItems();
jcb.removeAllItems();
for (int i = 0; i < this.cardNames.length; i++) {
fcb.addItem(cardNames[i]);
jcb.addItem(cardNames[i]);
}
fcb.setItemEvenType(ItemEventType.DEFAULT);
}
@Override
@ -278,9 +284,9 @@ public class ChartTypePane extends AbstractChartAttrPane{
}
public void reactorChartTypePane(ChartCollection collection){
if (needReactor(collection)) {
chartTypePane.reactor(collection);
public void relayoutChartTypePane(ChartCollection collection){
if (needRelayout(collection)) {
chartTypePane.relayout(collection);
//设置面板切换状态
updatePaneState(collection);
}
@ -292,7 +298,7 @@ public class ChartTypePane extends AbstractChartAttrPane{
}
// TODO: 2016/11/17 因为现在populate面板时会重新构造面板,所以每次都需要重构
private boolean needReactor(ChartCollection collection) {
private boolean needRelayout(ChartCollection collection) {
/*return paneState.getChartID() != collection.getRepresentChartID() || paneState.getPaneState() != collection.getState();*/
return true;
}
@ -301,14 +307,14 @@ public class ChartTypePane extends AbstractChartAttrPane{
* 更新界面属性 用于展示
*/
public void populate(ChartCollection collection) {
editingCollection = collection;
Chart chart = collection.getSelectedChart();
this.remove(leftContentPane);
initContentPane();
buttonPane.populateBean(collection);
chartTypePane.populateBean(chart);
//remove面板之后,就需要重构下拉框
reactorChartTypePane(collection);
this.initAllListeners();
}

6
designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartTextAttrPane.java

@ -71,6 +71,7 @@ public class ChartTextAttrPane extends BasicPane {
}
public void populate(FRFont frFont) {
removeAllComboBoxListener();
if (frFont == null) {
return;
}
@ -85,6 +86,11 @@ public class ChartTextAttrPane extends BasicPane {
}
}
private void removeAllComboBoxListener() {
fontNameComboBox.removeChangeListener();
fontSizeComboBox.removeChangeListener();
}
/**
* 更新字
* @return 更新字

7
designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java

@ -60,6 +60,13 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter {
if (comp == null){
return false;
}
//参数面板内的组件不允许拖往绝对布局中
if (creator.getParent() != null && ((XCreator)creator.getParent()).acceptType(XWParameterLayout.class)){
Rectangle rec = creator.getBounds();
rec.y = creator.getParent().getHeight() - rec.height;
creator.setBounds(rec);
return false;
}
//判断下组件能不能拖入绝对布局
if (!creator.canEnterIntoAbsolutePane()){
return false;

1
designer_form/src/com/fr/design/designer/creator/XCreator.java

@ -617,4 +617,5 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void adjustCompHeight(double percent) {
return;
}
}

8
designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java

@ -2,7 +2,9 @@ package com.fr.design.designer.creator;
import com.fr.design.designer.beans.LayoutAdapter;
import com.fr.design.designer.beans.adapters.layout.FRAbsoluteBodyLayoutAdapter;
import com.fr.design.designer.properties.mobile.BodyMobilePropertyUI;
import com.fr.design.form.util.XCreatorConstants;
import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.mainframe.widget.editors.PaddingMarginEditor;
import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor;
import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer;
@ -87,8 +89,14 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout {
};
}
@Override
public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() {
return new WidgetPropertyUIProvider[]{ new BodyMobilePropertyUI(this)};
}
@Override
protected void initStyle() {
initBorderStyle();
}
}

1
designer_form/src/com/fr/design/designer/creator/XWFitLayout.java

@ -25,6 +25,7 @@ import com.fr.form.ui.container.WBodyLayoutType;
import com.fr.form.ui.container.WFitLayout;
import com.fr.form.ui.container.WLayout;
import com.fr.general.FRScreen;
import com.fr.general.Inter;
import com.fr.stable.ArrayUtils;
/**

11
designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java

@ -14,7 +14,9 @@ import com.fr.design.designer.creator.CRPropertyDescriptor;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.designer.properties.mobile.BodyMobilePropertyUI;
import com.fr.design.form.util.XCreatorConstants;
import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormHierarchyTreePane;
import com.fr.design.mainframe.widget.editors.PaddingMarginEditor;
@ -367,4 +369,13 @@ public class XWTabFitLayout extends XWFitLayout {
public XLayoutContainer getTopLayout() {
return this.getBackupParent().getTopLayout();
}
/**
* 重写这个方法解决tab块底下仍然显示手机重布局的bug
* @return
*/
@Override
public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() {
return new WidgetPropertyUIProvider[0];
}
}

4
designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java

@ -53,7 +53,7 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable {
FRContext.getLogger().error(e.getMessage());
}
groups.add(new PropertyGroup(new ReportAppPropertyGroupModel(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), xCreator, propertyTableEditor, designer)));
groups.add(new PropertyGroup(new ReportAppPropertyGroupModel(Inter.getLocText("FR-Designer_Properties_Mobile"), xCreator, propertyTableEditor, designer)));
TableModel model = new BeanTableModel();
setModel(model);
@ -65,7 +65,7 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable {
* 单元格tooltip
* 属性名悬浮提示
*
* @param 鼠标点击事件
* @param event 鼠标点击事件
* @return 单元格tooltip
*/
public String getToolTipText(MouseEvent event) {

5
designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java

@ -1,6 +1,7 @@
package com.fr.design.designer.properties.mobile;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.designer.properties.BodyAppRelayoutTable;
import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider;
@ -18,6 +19,10 @@ public class BodyMobilePropertyUI extends AbstractWidgetPropertyUIProvider {
this.xCreator = xwFitLayout;
}
public BodyMobilePropertyUI(XWAbsoluteBodyLayout xwAbsoluteBodyLayout) {
this.xCreator = xwAbsoluteBodyLayout;
}
@Override
public AbstractPropertyTable createWidgetAttrTable() {
return new BodyAppRelayoutTable(xCreator);

0
sonar-project.properties → sonar-dev-project.properties

Loading…
Cancel
Save