forked from fanruan/design
daniel
8 years ago
135 changed files with 3582 additions and 2086 deletions
@ -1,13 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<module type="JAVA_MODULE" version="4"> |
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false"> |
||||
<output url="file://$MODULE_DIR$/../../env/WebReport/WEB-INF/classes" /> |
||||
<component name="NewModuleRootManager" inherit-compiler-output="true"> |
||||
<exclude-output /> |
||||
<content url="file://$MODULE_DIR$"> |
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> |
||||
</content> |
||||
<orderEntry type="jdk" jdkName="jdk1.8" jdkType="JavaSDK" /> |
||||
<orderEntry type="inheritedJdk" /> |
||||
<orderEntry type="sourceFolder" forTests="false" /> |
||||
<orderEntry type="module" module-name="designer_base" /> |
||||
<orderEntry type="library" name="lib" level="project" /> |
||||
<orderEntry type="module" module-name="designer_form" /> |
||||
<orderEntry type="module" module-name="designer_chart" /> |
||||
</component> |
||||
</module> |
@ -1 +1 @@
|
||||
package com.fr.design.widget.ui;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.general.Inter;
import javax.swing.*;
import java.awt.*;
/**
design.gui.icheckbox.UICheckBox;
design.gui.icheckbox.UICheckBox;
design.gui.icheckbox.UICheckBox;
design.gui.icheckbox.UICheckBox;
import com.fr.design.layout.FRGUIPaneFactory;
design.gui.icheckbox.UICheckBox;
import com.fr.design.utils.gui.GUICoreUtils;
design.gui.icheckbox.UICheckBox;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
design.gui.icheckbox.UICheckBox;
import com.fr.general.Inter;
design.gui.icheckbox.UICheckBox;
design.gui.icheckbox.UICheckBox;
import javax.swing.*;
design.gui.icheckbox.UICheckBox;
import java.awt.*;
design.gui.icheckbox.UICheckBox;
/**
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.FRGUIPaneFactory;
design.gui.icheckbox.UICheckBox;
contentPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
this.customDataCheckBox.setPreferredSize(new Dimension(100, 30));
getValidatePane().add(GUICoreUtils.createFlowPane(new JComponent[]{this.customDataCheckBox}, FlowLayout.LEFT, 5));
JPanel otherContentPane = this.setForthContentPane();
if (otherContentPane != null) {
contentPane.add(otherContentPane,BorderLayout.CENTER);
}
return contentPane;
}
protected abstract JPanel setForthContentPane();
protected void populateSubWritableRepeatEditorBean(T e) {
this.customDataCheckBox.setSelected(e.isCustomData());
populateSubCustomWritableRepeatEditorBean(e);
}
protected abstract void populateSubCustomWritableRepeatEditorBean(T e);
protected T updateSubWritableRepeatEditorBean() {
T e = updateSubCustomWritableRepeatEditorBean();
e.setCustomData(this.customDataCheckBox.isSelected());
return e;
}
protected abstract T updateSubCustomWritableRepeatEditorBean();
} |
||||
package com.fr.design.widget.ui;
import com.fr.base.GraphHelper;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.general.Inter;
import com.fr.design.utils.gui.GUICoreUtils;
design.gui.icheckbox.UICheckBox;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.Inter;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.design.utils.gui.GUICoreUtils;
import javax.swing.*;
import com.fr.design.utils.gui.GUICoreUtils;
import java.awt.*;
import com.fr.design.utils.gui.GUICoreUtils;
/**
import com.fr.design.utils.gui.GUICoreUtils;
design.gui.icheckbox.UICheckBox;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
design.gui.icheckbox.UICheckBox;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
design.gui.icheckbox.UICheckBox;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.general.Inter;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import javax.swing.*;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import java.awt.*;
import com.fr.form.ui.CustomWriteAbleRepeatEditor;
/**
import com.fr.general.Inter;
import com.fr.general.Inter;
design.gui.icheckbox.UICheckBox;
import com.fr.general.Inter;
import com.fr.design.layout.FRGUIPaneFactory;
));
getValidatePane().add(GUICoreUtils.createFlowPane(new JComponent[]{this.customDataCheckBox}, FlowLayout.LEFT, 5));
JPanel otherContentPane = this.setForthContentPane();
if (otherContentPane != null) {
contentPane.add(otherContentPane,BorderLayout.CENTER);
}
return contentPane;
}
protected abstract JPanel setForthContentPane();
protected void populateSubWritableRepeatEditorBean(T e) {
this.customDataCheckBox.setSelected(e.isCustomData());
populateSubCustomWritableRepeatEditorBean(e);
}
protected abstract void populateSubCustomWritableRepeatEditorBean(T e);
protected T updateSubWritableRepeatEditorBean() {
T e = updateSubCustomWritableRepeatEditorBean();
e.setCustomData(this.customDataCheckBox.isSelected());
return e;
}
protected abstract T updateSubCustomWritableRepeatEditorBean();
} |
@ -0,0 +1,41 @@
|
||||
package com.fr.design.fun; |
||||
|
||||
import com.fr.form.ui.Widget; |
||||
import com.fr.stable.fun.mark.Mutable; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* 报表工具栏设计器端拓展,用于配置按钮额外属性 |
||||
* Created by harry on 2016-12-23. |
||||
*/ |
||||
public interface ExtraButtonToolBarProvider extends Mutable { |
||||
|
||||
String XML_TAG = "ExtraButtonToolBarProvider"; |
||||
|
||||
int CURRENT_LEVEL = 1; |
||||
|
||||
/** |
||||
* 用于添加属性面板 |
||||
* |
||||
* @param centerPane 面板 |
||||
*/ |
||||
void updateCenterPane(JPanel centerPane); |
||||
|
||||
/** |
||||
* 更新界面 |
||||
* |
||||
* @param widget 控件 |
||||
* @param card 卡片布局 |
||||
* @param centerPane 面板 |
||||
*/ |
||||
void populate(Widget widget, CardLayout card, JPanel centerPane); |
||||
|
||||
/** |
||||
* 保存界面设置 |
||||
* |
||||
* @param widget 控件 |
||||
*/ |
||||
void update(Widget widget); |
||||
} |
@ -0,0 +1,19 @@
|
||||
package com.fr.design.fun.impl; |
||||
|
||||
import com.fr.design.fun.ExtraButtonToolBarProvider; |
||||
import com.fr.stable.fun.impl.AbstractProvider; |
||||
import com.fr.stable.fun.mark.API; |
||||
|
||||
/** |
||||
* Created by harry on 2016-12-23. |
||||
*/ |
||||
@API(level = ExtraButtonToolBarProvider.CURRENT_LEVEL) |
||||
public abstract class AbstractExtraButtonToolBarProvider extends AbstractProvider implements ExtraButtonToolBarProvider { |
||||
public int currentAPILevel() { |
||||
return ExtraButtonToolBarProvider.CURRENT_LEVEL; |
||||
} |
||||
|
||||
public String mark4Provider() { |
||||
return getClass().getName(); |
||||
} |
||||
} |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 3.6 KiB |
File diff suppressed because one or more lines are too long
@ -1,56 +1,192 @@
|
||||
package com.fr.design.style.color; |
||||
|
||||
import com.fr.file.XMLFileManager; |
||||
|
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.cluster.rpc.RPC; |
||||
import com.fr.file.BaseClusterHelper; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.GeneralContext; |
||||
import com.fr.stable.EnvChangedListener; |
||||
import com.fr.stable.xml.XMLPrintWriter; |
||||
import com.fr.stable.xml.XMLTools; |
||||
import com.fr.stable.xml.XMLableReader; |
||||
import com.fr.general.FRLogger; |
||||
|
||||
import java.awt.Color; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.io.InputStream; |
||||
|
||||
/** |
||||
* 最近使用颜色 |
||||
* @author focus |
||||
* |
||||
* @author focus |
||||
*/ |
||||
public class ColorSelectConfigManager{ |
||||
|
||||
// 最近使用的颜色个数
|
||||
private int colorNums = 20; |
||||
// 最近使用颜色
|
||||
private List<Color> colors; |
||||
|
||||
private static ColorSelectConfigManager colorSelectConfigManager = null; |
||||
|
||||
public Color[] getColors() { |
||||
if(colors == null){ |
||||
colors = new ArrayList<Color>(); |
||||
} |
||||
return colors.toArray(new Color[colors.size()]); |
||||
} |
||||
|
||||
public int getColorNum() { |
||||
return colorNums; |
||||
} |
||||
public void setColorNum(int colorNums) { |
||||
this.colorNums = colorNums; |
||||
} |
||||
|
||||
public synchronized static ColorSelectConfigManager getInstance() { |
||||
if (colorSelectConfigManager == null) { |
||||
colorSelectConfigManager = new ColorSelectConfigManager(); |
||||
} |
||||
return colorSelectConfigManager; |
||||
} |
||||
|
||||
/** |
||||
* 添加颜色到最近使用队列中 |
||||
* |
||||
* @param color 颜色 |
||||
* |
||||
*/ |
||||
public void addToColorQueue(Color color){ |
||||
// 过滤重复的最近使用颜色
|
||||
// 因为有个后进先出的问题,最近使用的颜色需要放到最前面所以没用set
|
||||
if(colors.contains(color)){ |
||||
colors.remove(color); |
||||
} |
||||
colors.add(color); |
||||
} |
||||
} |
||||
public class ColorSelectConfigManager extends XMLFileManager implements ColorSelectConfigManagerProvider { |
||||
|
||||
// 最近使用的颜色个数
|
||||
private int colorNums = 20; |
||||
|
||||
private static ColorSelectConfigManagerProvider configManager = null; |
||||
private static ColorSelectConfigManager colorSelectConfigManager = null; |
||||
private boolean init = true; |
||||
// 最近使用颜色
|
||||
private List<Color> colors = new ArrayList<Color>(); |
||||
private static final String RECENT_COLOR_TAG = "RecentColors"; |
||||
private static final String COLOR_TAG = "Color"; |
||||
|
||||
static { |
||||
GeneralContext.addEnvChangedListener(new EnvChangedListener() { |
||||
public void envChanged() { |
||||
ColorSelectConfigManager.envChanged(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private static void envChanged() { |
||||
configManager = null; |
||||
} |
||||
|
||||
public Color[] getColors() { |
||||
|
||||
//初次打开软件时从xml文件中获取历史颜色信息
|
||||
if (init) { |
||||
ColorSelectConfigManagerProvider manager = ColorSelectConfigManager.getProviderInstance(); |
||||
this.colors = manager.getColorsFromFile(); |
||||
init = false; |
||||
} |
||||
if (colors == null) { |
||||
colors = new ArrayList<Color>(); |
||||
} |
||||
return colors.toArray(new Color[colors.size()]); |
||||
} |
||||
|
||||
public int getColorNum() { |
||||
return colorNums; |
||||
} |
||||
|
||||
public void setColorNum(int colorNums) { |
||||
this.colorNums = colorNums; |
||||
} |
||||
|
||||
public synchronized static ColorSelectConfigManager getInstance() { |
||||
if (colorSelectConfigManager == null) { |
||||
colorSelectConfigManager = new ColorSelectConfigManager(); |
||||
} |
||||
return colorSelectConfigManager; |
||||
} |
||||
|
||||
/** |
||||
* 添加颜色到最近使用队列中 |
||||
* |
||||
* @param color 颜色 |
||||
*/ |
||||
public void addToColorQueue(Color color) { |
||||
// 过滤重复的最近使用颜色
|
||||
// 因为有个后进先出的问题,最近使用的颜色需要放到最前面所以没用set
|
||||
if (colors.contains(color)) { |
||||
colors.remove(color); |
||||
} |
||||
colors.add(color); |
||||
|
||||
/*@author yaohwu*/ |
||||
//将历史颜色信息保存到xml文件中去
|
||||
ColorSelectConfigManagerProvider manager = ColorSelectConfigManager.getProviderInstance(); |
||||
if (colors != null && !colors.isEmpty()) { |
||||
manager.setColorsToFile(colors); |
||||
} |
||||
try { |
||||
FRContext.getCurrentEnv().writeResource(manager); |
||||
} catch (Exception e) { |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 读取配置文件流 |
||||
* |
||||
* @param input 流 |
||||
* @throws Exception 异常 |
||||
*/ |
||||
@Override |
||||
public void readFromInputStream(InputStream input) throws Exception { |
||||
ColorSelectConfigManager manager = new ColorSelectConfigManager(); |
||||
XMLTools.readInputStreamXML(manager, input); |
||||
configManager = manager; |
||||
FRContext.getCurrentEnv().writeResource(configManager); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 获取配置管理接口 |
||||
* |
||||
* @return 配置管理接口ConfigManagerProvider |
||||
*/ |
||||
public synchronized static ColorSelectConfigManagerProvider getProviderInstance() { |
||||
if (configManager == null) { |
||||
if (isClusterMember()) { |
||||
return configManager; |
||||
} |
||||
configManager.readXMLFile(); |
||||
} |
||||
return configManager; |
||||
} |
||||
|
||||
private synchronized static boolean isClusterMember() { |
||||
switch (BaseClusterHelper.getClusterState()) { |
||||
case LEADER: |
||||
configManager = new ColorSelectConfigManager(); |
||||
RPC.registerSkeleton(configManager); |
||||
return false; |
||||
case MEMBER: |
||||
String ip = BaseClusterHelper.getMainServiceIP(); |
||||
configManager = (ColorSelectConfigManagerProvider) RPC.getProxy(ColorSelectConfigManager.class, ip); |
||||
return true; |
||||
default: |
||||
configManager = new ColorSelectConfigManager(); |
||||
break; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
public boolean writeResource() throws Exception { |
||||
return FRContext.getCurrentEnv().writeResource(ColorSelectConfigManager.getProviderInstance()); |
||||
} |
||||
|
||||
public String fileName() { |
||||
return "recentcolors.xml"; |
||||
} |
||||
|
||||
public void readXML(XMLableReader reader) { |
||||
String name = reader.getTagName(); |
||||
if (reader.isChildNode()) { |
||||
if (ComparatorUtils.equals(COLOR_TAG, name)) { |
||||
Color color = null; |
||||
colors.add(reader.getAttrAsColor("colors", color)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void writeXML(XMLPrintWriter writer) { |
||||
writer.startTAG(RECENT_COLOR_TAG); |
||||
if (this.colors != null && !this.colors.isEmpty()) { |
||||
for (int i = 0; i < this.colors.size(); i++) { |
||||
writer.startTAG(COLOR_TAG); |
||||
writer.attr("colors", colors.get(i).getRGB()); |
||||
writer.end(); |
||||
} |
||||
} |
||||
writer.end(); |
||||
} |
||||
|
||||
public List<Color> getColorsFromFile() { |
||||
return this.colors; |
||||
} |
||||
|
||||
public void setColorsToFile(List<Color> colors) { |
||||
this.colors = colors; |
||||
} |
||||
} |
||||
|
@ -0,0 +1,17 @@
|
||||
package com.fr.design.style.color; |
||||
|
||||
import com.fr.stable.file.RemoteXMLFileManagerProvider; |
||||
|
||||
import java.awt.Color; |
||||
import java.util.List; |
||||
|
||||
|
||||
/** |
||||
* Created by yaohwu on 2017/2/8. |
||||
*/ |
||||
public interface ColorSelectConfigManagerProvider extends RemoteXMLFileManagerProvider { |
||||
|
||||
List<Color> getColorsFromFile(); |
||||
|
||||
void setColorsToFile(List<Color> colors); |
||||
} |
@ -1 +1 @@
|
||||
package com.fr.design.write.submit;
import com.fr.data.AbstractClassJob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.formula.JavaEditorPane;
import com.fr.design.gui.frpane.ObjectProperiesPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory;
data.AbstractClassJob;
import com.fr.design.dialog.DialogActionAdapter;
data.AbstractClassJob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.stable.StringUtils;
data.AbstractClassJob;
import com.fr.design.formula.JavaEditorPane;
data.AbstractClassJob;
import com.fr.design.gui.ibutton.UIButton;
import java.awt.*;
data.AbstractClassJob;
import com.fr.design.gui.itextfield.UITextField;
import java.awt.event.ActionListener;
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
/**
* Author : Shockway
* Date: 13-7-29
* Time: 下午6:48
*/
public abstract class CustomJobPane extends BasicBeanPane {
protected UITextField classNameTextField;
protected ObjectProperiesPane objectProperiesPane;
public static final int DEFAULT_LENGTH = 30;
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
public CustomJobPane() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane();
classNameTextField = new UITextField(getLengthOfTextField());
reportletNamePane.add(classNameTextField);
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
UIButton browserButton = new UIButton(Inter.getLocText("Select"));
browserButton.setPreferredSize(new Dimension(
browserButton.getPreferredSize().width,
classNameTextField.getPreferredSize().height));
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
UIButton editButton = new UIButton(Inter.getLocText("Edit"));
editButton.setPreferredSize(new Dimension(
browserButton.getPreferredSize().width,
classNameTextField.getPreferredSize().height));
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
import com.fr.design.formula.JavaEditorPane;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
reportletNamePane.add(editButton);
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
browserButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
final ClassNameSelectPane bPane = new ClassNameSelectPane();
bPane.setClassPath(classNameTextField.getText());
bPane.showWindow(
SwingUtilities.getWindowAncestor(getWindowAncestor()),
new DialogActionAdapter() {
public void doOk() {
classNameTextField.setText(bPane.getClassPath());
checkAddButtonEnable();
}
}).setVisible(true);
}
});
editButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final JavaEditorPane javaEditorPane = new JavaEditorPane(classNameTextField.getText(), JavaEditorPane.DEFAULT_SUBMIT_JOB);
final BasicDialog dlg = javaEditorPane.showMediumWindow(SwingUtilities.getWindowAncestor(CustomJobPane.this),
new DialogActionAdapter() {
public void doOk() {
classNameTextField.setText(javaEditorPane.getClassText());
checkAddButtonEnable();
}
});
javaEditorPane.addSaveActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dlg.doOK();
}
});
dlg.setVisible(true);
}
});
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("ClassName"), null));
this.add(reportletNamePane, BorderLayout.NORTH);
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
objectProperiesPane = new ObjectProperiesPane();
objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Property"), null));
this.add(objectProperiesPane, BorderLayout.CENTER);
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
UITextArea area = new UITextArea(2, 1);
area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.SubmitJob");
JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
dsPane.add(area);
dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Description"), null));
this.add(dsPane, BorderLayout.SOUTH);
checkAddButtonEnable();
}
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
public int getLengthOfTextField() {
import com.fr.design.layout.FRGUIPaneFactory;
data.AbstractClassJob;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory;
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
protected String title4PopupWindow() {
return "CustomJob";
}
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
protected Component getWindowAncestor() {
return this;
}
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
@Override
public void populateBean(Object ob) {
if (ob instanceof AbstractClassJob) {
AbstractClassJob cj = (AbstractClassJob) ob;
data.AbstractClassJob;
data.AbstractClassJob;
data.AbstractClassJob;
data.AbstractClassJob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
data.AbstractClassJob;
import com.fr.design.beans.BasicBeanPane;
}
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
data.AbstractClassJob;
import com.fr.design.formula.JavaEditorPane;
data.AbstractClassJob;
import com.fr.design.gui.frpane.ObjectProperiesPane;
data.AbstractClassJob;
import com.fr.design.gui.ibutton.UIButton;
data.AbstractClassJob;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.gui.itextfield.UITextField;
Empty(classNameTextField.getText()));
}
/**
* 重置
*/
public void reset() {
this.classNameTextField.setText(null);
this.checkAddButtonEnable();
}
} |
||||
package com.fr.design.write.submit;
import com.fr.data.AbstractClassJob;
import com.fr.design.layout.FRGUIPaneFactory;
data.AbstractClassJob;
data.AbstractClassJob;
data.AbstractClassJob;
import com.fr.design.dialog.DialogActionAdapter;
data.AbstractClassJob;
data.AbstractClassJob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
data.AbstractClassJob;
import com.fr.stable.StringUtils;
data.AbstractClassJob;
data.AbstractClassJob;
import com.fr.design.formula.JavaEditorPane;
data.AbstractClassJob;
data.AbstractClassJob;
data.AbstractClassJob;
import com.fr.design.gui.ibutton.UIButton;
data.AbstractClassJob;
import java.awt.*;
data.AbstractClassJob;
data.AbstractClassJob;
import com.fr.design.gui.itextfield.UITextField;
data.AbstractClassJob;
import java.awt.event.ActionListener;
data.AbstractClassJob;
/**
data.AbstractClassJob;
* Author : Shockway
data.AbstractClassJob;
* Date: 13-7-29
data.AbstractClassJob;
* Time: 下午6:48
data.AbstractClassJob;
*/
data.AbstractClassJob;
public abstract class CustomJobPane extends BasicBeanPane {
data.AbstractClassJob;
protected UITextField classNameTextField;
data.AbstractClassJob;
protected ObjectProperiesPane objectProperiesPane;
data.AbstractClassJob;
public static final int DEFAULT_LENGTH = 30;
data.AbstractClassJob;
*/
data.AbstractClassJob;
public CustomJobPane() {
data.AbstractClassJob;
this.setLayout(FRGUIPaneFactory.createBorderLayout());
data.AbstractClassJob;
JPanel reportletNamePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane();
data.AbstractClassJob;
classNameTextField = new UITextField(getLengthOfTextField());
data.AbstractClassJob;
reportletNamePane.add(classNameTextField);
data.AbstractClassJob;
UIButton browserButton = new UIButton(Inter.getLocText("Select"));
data.AbstractClassJob;
browserButton.setPreferredSize(new Dimension(
data.AbstractClassJob;
browserButton.getPreferredSize().width,
data.AbstractClassJob;
classNameTextField.getPreferredSize().height));
data.AbstractClassJob;
*/
data.AbstractClassJob;
UIButton editButton = new UIButton(Inter.getLocText("Edit"));
data.AbstractClassJob;
editButton.setPreferredSize(new Dimension(
data.AbstractClassJob;
browserButton.getPreferredSize().width,
data.AbstractClassJob;
classNameTextField.getPreferredSize().height));
data.AbstractClassJob;
reportletNamePane.add(browserButton);
data.AbstractClassJob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.formula.JavaEditorPane;
data.AbstractClassJob;
reportletNamePane.add(editButton);
data.AbstractClassJob;
browserButton.addActionListener(new ActionListener() {
data.AbstractClassJob;
public void actionPerformed(ActionEvent evt) {
data.AbstractClassJob;
final ClassNameSelectPane bPane = new ClassNameSelectPane();
data.AbstractClassJob;
bPane.setClassPath(classNameTextField.getText());
data.AbstractClassJob;
bPane.showWindow(
data.AbstractClassJob;
SwingUtilities.getWindowAncestor(getWindowAncestor()),
data.AbstractClassJob;
new DialogActionAdapter() {
data.AbstractClassJob;
public void doOk() {
data.AbstractClassJob;
classNameTextField.setText(bPane.getClassPath());
data.AbstractClassJob;
checkAddButtonEnable();
data.AbstractClassJob;
}
data.AbstractClassJob;
}).setVisible(true);
data.AbstractClassJob;
}
data.AbstractClassJob;
});
data.AbstractClassJob;
editButton.addActionListener(new ActionListener() {
data.AbstractClassJob;
@Override
data.AbstractClassJob;
public void actionPerformed(ActionEvent e) {
data.AbstractClassJob;
final JavaEditorPane javaEditorPane = new JavaEditorPane(classNameTextField.getText(), JavaEditorPane.DEFAULT_SUBMIT_JOB);
data.AbstractClassJob;
final BasicDialog dlg = javaEditorPane.showMediumWindow(SwingUtilities.getWindowAncestor(CustomJobPane.this),
data.AbstractClassJob;
new DialogActionAdapter() {
data.AbstractClassJob;
public void doOk() {
data.AbstractClassJob;
classNameTextField.setText(javaEditorPane.getClassText());
data.AbstractClassJob;
}
data.AbstractClassJob;
});
data.AbstractClassJob;
javaEditorPane.addSaveActionListener(new ActionListener() {
data.AbstractClassJob;
@Override
data.AbstractClassJob;
public void actionPerformed(ActionEvent e) {
data.AbstractClassJob;
dlg.doOK();
data.AbstractClassJob;
}
data.AbstractClassJob;
});
data.AbstractClassJob;
dlg.setVisible(true);
checkAddButtonEnable();
data.AbstractClassJob;
}
data.AbstractClassJob;
});
data.AbstractClassJob;
reportletNamePane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("ClassName"), null));
data.AbstractClassJob;
this.add(reportletNamePane, BorderLayout.NORTH);
data.AbstractClassJob;
objectProperiesPane = new ObjectProperiesPane();
data.AbstractClassJob;
objectProperiesPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Property"), null));
data.AbstractClassJob;
this.add(objectProperiesPane, BorderLayout.CENTER);
data.AbstractClassJob;
UITextArea area = new UITextArea(2, 1);
data.AbstractClassJob;
area.setText(Inter.getLocText(new String[]{"Come_True", "Interface"}) + ":com.fr.data.SubmitJob");
data.AbstractClassJob;
JPanel dsPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
data.AbstractClassJob;
dsPane.add(area);
data.AbstractClassJob;
dsPane.setBorder(GUICoreUtils.createTitledBorder(Inter.getLocText("Description"), null));
data.AbstractClassJob;
this.add(dsPane, BorderLayout.SOUTH);
data.AbstractClassJob;
checkAddButtonEnable();
data.AbstractClassJob;
}
data.AbstractClassJob;
public int getLengthOfTextField() {
data.AbstractClassJob;
*/
data.AbstractClassJob;
import com.fr.design.layout.FRGUIPaneFactory;
data.AbstractClassJob;
data.AbstractClassJob;
protected String title4PopupWindow() {
data.AbstractClassJob;
return "CustomJob";
data.AbstractClassJob;
protected Component getWindowAncestor() {
data.AbstractClassJob;
return this;
data.AbstractClassJob;
@Override
data.AbstractClassJob;
public void populateBean(Object ob) {
data.AbstractClassJob;
if (ob instanceof AbstractClassJob) {
data.AbstractClassJob;
AbstractClassJob cj = (AbstractClassJob) ob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
data.AbstractClassJob;
if (ob instanceof AbstractClassJob) {
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
data.AbstractClassJob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
data.AbstractClassJob;
if (ob instanceof AbstractClassJob) {
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.beans.BasicBeanPane;
return this;
data.AbstractClassJob;
if (ob instanceof AbstractClassJob) {
data.AbstractClassJob;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.formula.JavaEditorPane;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.gui.frpane.ObjectProperiesPane;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.gui.itextarea.UITextArea;
AbstractClassJob cj = (AbstractClassJob) ob;
this.classNameTextField.setText(cj.getClassName());
import com.fr.design.data.tabledata.tabledatapane.ClassNameSelectPane;
import com.fr.design.dialog.BasicDialog;
checkAddButtonEnable();
}
import java.awt.event.ActionListener;
import com.fr.design.gui.itextfield.UITextField;
/**
* 添加按钮可用
*/
public void checkAddButtonEnable() {
objectProperiesPane.enableAddButton(StringUtils.isNotEmpty(classNameTextField.getText()));
}
/**
* 重置
*/
public void reset() {
this.classNameTextField.setText(null);
this.checkAddButtonEnable();
}
} |
@ -1,94 +1,108 @@
|
||||
/** |
||||
* |
||||
* |
||||
*/ |
||||
package com.fr.design.designer.beans.adapters.layout; |
||||
|
||||
|
||||
import java.awt.Rectangle; |
||||
|
||||
import com.fr.design.beans.GroupModel; |
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.designer.creator.XLayoutContainer; |
||||
import com.fr.design.designer.creator.XWParameterLayout; |
||||
import com.fr.design.designer.creator.XWidgetCreator; |
||||
import com.fr.design.designer.creator.cardlayout.XWCardLayout; |
||||
import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; |
||||
import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; |
||||
import com.fr.design.designer.properties.FRTabFitLayoutPropertiesGroupModel; |
||||
import com.fr.design.utils.ComponentUtils; |
||||
import com.fr.form.ui.LayoutBorderStyle; |
||||
import com.fr.form.ui.container.WBorderLayout; |
||||
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; |
||||
import com.fr.general.ComparatorUtils; |
||||
|
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* tab布局tabFit适配器 |
||||
* |
||||
* |
||||
* @author focus |
||||
* @date 2014-6-24 |
||||
*/ |
||||
public class FRTabFitLayoutAdapter extends FRFitLayoutAdapter { |
||||
//标题栏高度对tab布局内部组件的y坐标造成了偏移
|
||||
private static int TAB_HEIGHT = 40; |
||||
|
||||
/** |
||||
* 构造函数 |
||||
* @param container XWTabFitLayout容器 |
||||
*/ |
||||
public FRTabFitLayoutAdapter(XLayoutContainer container) { |
||||
super(container); |
||||
} |
||||
|
||||
/** |
||||
* 返回布局自身属性,方便一些特有设置在layout刷新时处理 |
||||
*/ |
||||
@Override |
||||
//标题栏高度对tab布局内部组件的y坐标造成了偏移
|
||||
private static int TAB_HEIGHT = 40; |
||||
|
||||
/** |
||||
* 构造函数 |
||||
* |
||||
* @param container XWTabFitLayout容器 |
||||
*/ |
||||
public FRTabFitLayoutAdapter(XLayoutContainer container) { |
||||
super(container); |
||||
} |
||||
|
||||
/** |
||||
* 返回布局自身属性,方便一些特有设置在layout刷新时处理 |
||||
*/ |
||||
@Override |
||||
public GroupModel getLayoutProperties() { |
||||
XWTabFitLayout xfl = (XWTabFitLayout) container; |
||||
return new FRTabFitLayoutPropertiesGroupModel(xfl); |
||||
XWTabFitLayout xfl = (XWTabFitLayout) container; |
||||
return new FRTabFitLayoutPropertiesGroupModel(xfl); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 组件的ComponentAdapter在添加组件时,如果发现布局管理器不为空,会继而调用该布局管理器的 |
||||
* addComp方法来完成组件的具体添加。在该方法内,布局管理器可以提供额外的功能。 |
||||
* |
||||
* @param creator 被添加的新组件 |
||||
* @param x 添加的位置x,该位置是相对于container的 |
||||
* @param y 添加的位置y,该位置是相对于container的 |
||||
* @param x 添加的位置x,该位置是相对于container的 |
||||
* @param y 添加的位置y,该位置是相对于container的 |
||||
* @return 是否添加成功,成功返回true,否则false |
||||
*/ |
||||
@Override |
||||
public boolean addBean(XCreator creator, int x, int y) { |
||||
// 经过accept判断后,container会被改变,先备份
|
||||
XLayoutContainer backUpContainer = container; |
||||
Rectangle rect = ComponentUtils.getRelativeBounds(container); |
||||
|
||||
int posX = x - rect.x; |
||||
int posY = y - rect.y; |
||||
if (!accept(creator, posX, posY)) { |
||||
return false; |
||||
} |
||||
// posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到
|
||||
// 父层自适应布局中,这时候的添加位置就是tab布局所在的位置
|
||||
if(this.intersectsEdge(posX, posY, backUpContainer)){ |
||||
if(!ComparatorUtils.equals(backUpContainer.getOuterLayout(), backUpContainer.getBackupParent())){ |
||||
XWTabFitLayout tabLayout = (XWTabFitLayout)backUpContainer; |
||||
y = adjustY(y,tabLayout); |
||||
} |
||||
addComp(creator, x, y); |
||||
((XWidgetCreator) creator).recalculateChildrenSize(); |
||||
return true; |
||||
} |
||||
// 如果不在边缘,容器为本自适应布局,增加组件的位置就是相对于容器的位置
|
||||
addComp(creator, posX, posY); |
||||
((XWidgetCreator) creator).recalculateChildrenSize(); |
||||
return true; |
||||
} |
||||
|
||||
public boolean addBean(XCreator creator, int x, int y) { |
||||
// 经过accept判断后,container会被改变,先备份
|
||||
XLayoutContainer backUpContainer = container; |
||||
Rectangle rect = ComponentUtils.getRelativeBounds(container); |
||||
|
||||
int posX = x - rect.x; |
||||
int posY = y - rect.y; |
||||
if (!accept(creator, posX, posY)) { |
||||
return false; |
||||
} |
||||
// posX,posY是新拖入组件相对于容器的位置,若在tab布局的边缘,则需要把新组件添加到
|
||||
// 父层自适应布局中,这时候的添加位置就是tab布局所在的位置
|
||||
if (this.intersectsEdge(posX, posY, backUpContainer)) { |
||||
if (!ComparatorUtils.equals(backUpContainer.getOuterLayout(), backUpContainer.getBackupParent())) { |
||||
XWTabFitLayout tabLayout = (XWTabFitLayout) backUpContainer; |
||||
y = adjustY(y, tabLayout); |
||||
} |
||||
addComp(creator, x, y); |
||||
((XWidgetCreator) creator).recalculateChildrenSize(); |
||||
return true; |
||||
} |
||||
// 如果不在边缘,容器为本自适应布局,增加组件的位置就是相对于容器的位置
|
||||
addComp(creator, posX, posY); |
||||
((XWidgetCreator) creator).recalculateChildrenSize(); |
||||
return true; |
||||
} |
||||
|
||||
// tab布局的纵坐标受到tab高度的影响,判断的上边界取得是里面XWTabFitLayout的上边界,
|
||||
// 实际计算的时候的纵坐标用了外层的CardMainBorerLayout,需要将tab高度减掉
|
||||
private int adjustY(int y,XWTabFitLayout tabLayout){ |
||||
XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); |
||||
LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); |
||||
if(ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)){ |
||||
y -= WCardMainBorderLayout.TAB_HEIGHT; |
||||
} |
||||
return y; |
||||
//将y值变为相对坐标以实现获取到鼠标drop位置的控件
|
||||
//TODO 可以直接在这边将x,y都变成相对坐标,这样在后面判断拖进来的新控件放置方式的时候就不用再判断了
|
||||
private int adjustY(int y, XWTabFitLayout tabLayout) { |
||||
XWCardLayout cardLayout = (XWCardLayout) tabLayout.getBackupParent(); |
||||
LayoutBorderStyle style = cardLayout.toData().getBorderStyle(); |
||||
if (container.getLocation().y == WBorderLayout.DEFAULT_SIZE) { |
||||
y = y - WBorderLayout.DEFAULT_SIZE; |
||||
} |
||||
if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { |
||||
y = y - WCardMainBorderLayout.TAB_HEIGHT; |
||||
} |
||||
return y; |
||||
} |
||||
|
||||
protected Rectangle getLayoutBound(XWCardMainBorderLayout mainLayout) { |
||||
return ComponentUtils.getRelativeBounds(mainLayout); |
||||
} |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue