commit c9cbabe1f90da4ef414847832063c244e7387bed Author: richie Date: Mon Mar 28 16:36:49 2016 +0800 迁移到solution下 diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..c9109f6 --- /dev/null +++ b/build.bat @@ -0,0 +1,5 @@ +set JAVA_HOME=D:\FineReport\develop\java\jdk1.6u35 + +set ANT_OPTS=-Xmx512M -Xss100m + +D:\FineReport\develop\release\build\ant\bin\ant -f build.xml jar \ No newline at end of file diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..7d1d9e4 --- /dev/null +++ b/build.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..fcfd216 --- /dev/null +++ b/plugin.xml @@ -0,0 +1,25 @@ + + com.fr.plugin.form.widget.rh.iframe + + yes + 3.2 + 8.0 + 2016-01-15 + 洪七公 + + [2015-12-03]修复再次打开地址设置界面时没有正确选择到选项的问题

+

[2016-01-13]增加常用的API接口

+

[2016-01-15]实现功能改进数据统计接口

+ ]]>
+ + + + + + + + + + +
\ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..5927b28 --- /dev/null +++ b/readme.md @@ -0,0 +1,30 @@ +# 表单网页框控件 + +该插件支持在FineReport V8.0的表单中使用网页框控件 + +## API接口 + +1. setValue:(String)v +设置并刷新网页框控件的地址(保留原参数) +2. getValue +获取网页框控件的src地址 +3. reset +重置网页框控件并刷新 + + +## 效果图 + +1. 选择控件界面 +![1](screenshots/1.png) + +2. 设置控件的地址和参数入口 +![2](screenshots/2.png) + +3. 设置控件的模板地址界面 +![3](screenshots/3.png) + +4. 设置控件的网络地址界面 +![4](screenshots/4.png) + +5. 预览效果 +![5](screenshots/5.png) \ No newline at end of file diff --git a/screenshots/1.png b/screenshots/1.png new file mode 100644 index 0000000..50745d0 Binary files /dev/null and b/screenshots/1.png differ diff --git a/screenshots/2.png b/screenshots/2.png new file mode 100644 index 0000000..f78f9d8 Binary files /dev/null and b/screenshots/2.png differ diff --git a/screenshots/3.png b/screenshots/3.png new file mode 100644 index 0000000..e7714c4 Binary files /dev/null and b/screenshots/3.png differ diff --git a/screenshots/4.png b/screenshots/4.png new file mode 100644 index 0000000..50e9a11 Binary files /dev/null and b/screenshots/4.png differ diff --git a/screenshots/5.png b/screenshots/5.png new file mode 100644 index 0000000..3dfa5cb Binary files /dev/null and b/screenshots/5.png differ diff --git a/src/com/fr/plugin/form/widget/CSSFileLoader.java b/src/com/fr/plugin/form/widget/CSSFileLoader.java new file mode 100644 index 0000000..db1b864 --- /dev/null +++ b/src/com/fr/plugin/form/widget/CSSFileLoader.java @@ -0,0 +1,19 @@ +package com.fr.plugin.form.widget; + +import com.fr.stable.fun.impl.AbstractCssFileHandler; + +/** + * Created by richie on 15/12/2. + */ +public class CSSFileLoader extends AbstractCssFileHandler { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String[] pathsForFiles() { + return new String[0]; + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/JavaScriptFileLoader.java b/src/com/fr/plugin/form/widget/JavaScriptFileLoader.java new file mode 100644 index 0000000..d019c96 --- /dev/null +++ b/src/com/fr/plugin/form/widget/JavaScriptFileLoader.java @@ -0,0 +1,21 @@ +package com.fr.plugin.form.widget; + +import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler; + +/** + * Created by richie on 15/12/2. + */ +public class JavaScriptFileLoader extends AbstractJavaScriptFileHandler { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String[] pathsForFiles() { + return new String[]{ + "/com/fr/plugin/form/widget/web/widget.rh.iframe.js" + }; + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/conf/RHIframeMarkInForm.java b/src/com/fr/plugin/form/widget/conf/RHIframeMarkInForm.java new file mode 100644 index 0000000..641916a --- /dev/null +++ b/src/com/fr/plugin/form/widget/conf/RHIframeMarkInForm.java @@ -0,0 +1,38 @@ +package com.fr.plugin.form.widget.conf; + +import com.fr.design.fun.impl.AbstractFormWidgetOptionProvider; +import com.fr.form.ui.Widget; +import com.fr.general.Inter; +import com.fr.plugin.form.widget.core.RHIframe; +import com.fr.plugin.form.widget.ui.XRHIframe; + +/** + * Created by richie on 15/12/2. + */ +public class RHIframeMarkInForm extends AbstractFormWidgetOptionProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public Class classForWidget() { + return RHIframe.class; + } + + @Override + public Class appearanceForWidget() { + return XRHIframe.class; + } + + @Override + public String iconPathForWidget() { + return "/com/fr/plugin/form/widget/images/rh_iframe.png"; + } + + @Override + public String nameForWidget() { + return Inter.getLocText("Plugin-RH_Iframe_Name"); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/core/RHIframe.java b/src/com/fr/plugin/form/widget/core/RHIframe.java new file mode 100644 index 0000000..e7f17fd --- /dev/null +++ b/src/com/fr/plugin/form/widget/core/RHIframe.java @@ -0,0 +1,127 @@ +package com.fr.plugin.form.widget.core; + +import com.fr.form.ui.FieldEditor; +import com.fr.general.xml.GeneralXMLTools; +import com.fr.json.JSONArray; +import com.fr.json.JSONException; +import com.fr.json.JSONObject; +import com.fr.plugin.ExtraClassManager; +import com.fr.plugin.form.widget.monitor.RHFunctionProcessor; +import com.fr.script.Calculator; +import com.fr.stable.core.NodeVisitor; +import com.fr.stable.fun.FunctionProcessor; +import com.fr.stable.script.CalculatorProvider; +import com.fr.stable.web.Repository; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.web.core.SessionIDInfor; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by richie on 15/12/2. + */ +public class RHIframe extends FieldEditor { + + + private boolean overflowX = true; + private boolean overflowY = true; + + private RHIframeAttr attr = new RHIframeAttr(); + + + public RHIframe() { + + } + + public RHIframeAttr getAttr() { + return attr; + } + + public void setAttr(RHIframeAttr attr) { + this.attr = attr; + } + + public boolean isOverflowX() { + return overflowX; + } + + public void setOverflowX(boolean overflowX) { + this.overflowX = overflowX; + } + + public boolean isOverflowY() { + return overflowY; + } + + public void setOverflowY(boolean overflowY) { + this.overflowY = overflowY; + } + + + @Override + public JSONObject createJSONConfig(Repository repo, Calculator c, NodeVisitor nodeVisitor) throws JSONException { + JSONObject jo = super.createJSONConfig(repo, c, nodeVisitor); + attr.mixConfig(jo, c, repo.getHttpServletRequest()); + jo.put("showOverFlowX", overflowX); + jo.put("showOverFlowY", overflowY); + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null){ + processor.recordFunction(RHFunctionProcessor.getInstance()); + } + return jo; + } + + @Override + public JSONArray createJSONData(SessionIDInfor sessionIDInfor, Calculator c, HttpServletRequest req) throws Exception { + JSONArray ja = super.createJSONData(sessionIDInfor, c, req); + attr.mixJSONData(ja, sessionIDInfor, c); + return ja; + } + + @Override + public String getXType() { + return "rh.iframe"; + } + + @Override + public boolean isEditor() { + return false; + } + + @Override + public String[] supportedEvents() { + return new String[0]; + } + + @Override + public String[] dependence(CalculatorProvider ca) { + return new String[0]; + } + + @Override + public void readXML(XMLableReader reader) { + super.readXML(reader); + if (reader.isChildNode()) { + String nodeName = reader.getTagName(); + if ("Attr".equals(nodeName)) { + this.overflowX = reader.getAttrAsBoolean("scrollX", true); + this.overflowY = reader.getAttrAsBoolean("scrollY", true); + } else if (RHIframeAttr.XML_TAG.equals(nodeName)) { + this.attr = (RHIframeAttr) GeneralXMLTools.readXMLable(reader); + } + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + super.writeXML(writer); + writer.startTAG("Attr"); + writer.attr("scrollX", overflowX); + writer.attr("scrollY", overflowY); + writer.end(); + if (attr != null) { + GeneralXMLTools.writeXMLable(writer, attr, RHIframeAttr.XML_TAG); + } + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/core/RHIframeAttr.java b/src/com/fr/plugin/form/widget/core/RHIframeAttr.java new file mode 100644 index 0000000..7cd7126 --- /dev/null +++ b/src/com/fr/plugin/form/widget/core/RHIframeAttr.java @@ -0,0 +1,122 @@ +package com.fr.plugin.form.widget.core; + +import com.fr.base.Formula; +import com.fr.base.ParameterMapNameSpace; +import com.fr.general.FArray; +import com.fr.general.xml.GeneralXMLTools; +import com.fr.json.JSONArray; +import com.fr.json.JSONException; +import com.fr.json.JSONObject; +import com.fr.script.Calculator; +import com.fr.stable.CodeUtils; +import com.fr.stable.ParameterProvider; +import com.fr.stable.UtilEvalError; +import com.fr.stable.js.WidgetName; +import com.fr.stable.script.NameSpace; +import com.fr.stable.xml.*; +import com.fr.web.core.SessionIDInfor; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by richie on 15/12/2. + */ +public class RHIframeAttr implements XMLable { + public static final String XML_TAG = "RHIframeAttr"; + + private RHIframeSource source; + + private ParameterProvider[] parameters; + + public RHIframeSource getSource() { + return source; + } + + public void setSource(RHIframeSource source) { + this.source = source; + } + + public ParameterProvider[] getParameters() { + return parameters; + } + + public void setParameters(ParameterProvider[] parameters) { + this.parameters = parameters; + } + + public void mixConfig(JSONObject jo, Calculator c, HttpServletRequest req) throws JSONException { + if (source != null) { + jo.put("src", source.getCalculatedUrl(c, req)); + } + } + + public void mixJSONData(JSONArray ja, SessionIDInfor sessionIDInfor, Calculator c) throws JSONException, UtilEvalError { + NameSpace ns = ParameterMapNameSpace.create(sessionIDInfor.getParameterMap4Execute()); + c.pushNameSpace(ns); + for (int i = 0; i < (parameters == null ? 0 : parameters.length); i++) { + Object obj = parameters[i].getValue(); + if (obj instanceof Formula) { + String content = ((Formula) obj).getContent(); + obj = c.evalValue(content); + } + JSONObject jo = new JSONObject(); + if (obj instanceof String) { + obj = CodeUtils.cjkEncode((String) obj); + jo.put(parameters[i].getName(), obj); + } else if (obj instanceof FArray) { + obj = ((FArray) obj).cjkEncode(); + jo.put(parameters[i].getName(), obj); + } else if (obj instanceof WidgetName) { + jo.put("widgetName", ((WidgetName) obj).getName()); + } else { + // 还可以是数字啊什么的 + jo.put(parameters[i].getName(), obj); + } + + ja.put(jo); + } + } + + @Override + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + String tmpName = reader.getTagName(); + if (ParameterProvider.ARRAY_XML_TAG.equals(tmpName)) {//读取Parameters. + final List tmpParameterList = new ArrayList(); + + reader.readXMLObject(new XMLReadable() { + public void readXML(XMLableReader reader) { + if (ParameterProvider.XML_TAG.equals(reader.getTagName())) { + tmpParameterList.add(StableXMLUtils.readParameter(reader)); + } + } + }); + + //转换数组. + if (!tmpParameterList.isEmpty()) { + this.parameters = tmpParameterList.toArray(new ParameterProvider[tmpParameterList.size()]); + } + } else if (tmpName.equals(RHIframeSource.XML_TAG)) { + this.source = (RHIframeSource) GeneralXMLTools.readXMLable(reader); + } + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + if (source != null) { + GeneralXMLTools.writeXMLable(writer, source, RHIframeSource.XML_TAG); + } + StableXMLUtils.writeParameters(writer, parameters); + } + + @Override + public Object clone() throws CloneNotSupportedException { + RHIframeAttr cloned = (RHIframeAttr)super.clone(); + cloned.source = source; + cloned.parameters = parameters; + return cloned; + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/core/RHIframeSource.java b/src/com/fr/plugin/form/widget/core/RHIframeSource.java new file mode 100644 index 0000000..c690aa1 --- /dev/null +++ b/src/com/fr/plugin/form/widget/core/RHIframeSource.java @@ -0,0 +1,40 @@ +package com.fr.plugin.form.widget.core; + +import com.fr.script.Calculator; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLable; +import com.fr.stable.xml.XMLableReader; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by richie on 15/12/2. + */ +public class RHIframeSource implements XMLable { + + public static final String XML_TAG = "RHIframeSource"; + + + public String toString() { + return "source"; + } + + @Override + public void readXML(XMLableReader reader) { + + } + + @Override + public void writeXML(XMLPrintWriter writer) { + + } + + public String getCalculatedUrl(Calculator calculator, HttpServletRequest req) { + return null; + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/core/TemplateSource.java b/src/com/fr/plugin/form/widget/core/TemplateSource.java new file mode 100644 index 0000000..f5c5cec --- /dev/null +++ b/src/com/fr/plugin/form/widget/core/TemplateSource.java @@ -0,0 +1,74 @@ +package com.fr.plugin.form.widget.core; + +import com.fr.base.TemplateUtils; +import com.fr.data.NetworkHelper; +import com.fr.general.Inter; +import com.fr.script.Calculator; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by richie on 15/12/2. + */ +public class TemplateSource extends RHIframeSource { + + + private String path; + + public TemplateSource() { + + } + + public TemplateSource(String path) { + this.path = path; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + @Override + public String getCalculatedUrl(Calculator calculator, HttpServletRequest req) { + try { + String realPath = TemplateUtils.render(path, calculator); + if (realPath.contains(".cpt")) { + return NetworkHelper.createServletURL(req) + "?reportlet=" + realPath; + } else if (realPath.contains(".frm")) { + return NetworkHelper.createServletURL(req) + "?formlet=" + realPath; + } + } catch (Exception e) { + return null; + } + return null; + } + + @Override + public String toString() { + return Inter.getLocText("Plugin_RH_Iframe_Template_Path"); + } + + @Override + public void readXML(XMLableReader reader) { + super.readXML(reader); + if (reader.isChildNode()) { + String nodeName = reader.getTagName(); + if ("Attr".equals(nodeName)) { + this.path = reader.getAttrAsString("path", null); + } + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + super.writeXML(writer); + writer.startTAG("Attr"); + writer.attr("path", path); + writer.end(); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/core/URLSource.java b/src/com/fr/plugin/form/widget/core/URLSource.java new file mode 100644 index 0000000..c5133f0 --- /dev/null +++ b/src/com/fr/plugin/form/widget/core/URLSource.java @@ -0,0 +1,65 @@ +package com.fr.plugin.form.widget.core; + +import com.fr.base.TemplateUtils; +import com.fr.general.Inter; +import com.fr.script.Calculator; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by richie on 15/12/2. + */ +public class URLSource extends RHIframeSource { + private String url; + + public URLSource() { + + } + + public URLSource(String url) { + this.url = url; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public String getCalculatedUrl(Calculator calculator, HttpServletRequest req) { + try { + return TemplateUtils.render(url, calculator); + } catch (Exception e) { + return null; + } + } + + @Override + public String toString() { + return Inter.getLocText("Plugin_RH_Iframe_Url"); + } + + @Override + public void readXML(XMLableReader reader) { + super.readXML(reader); + if (reader.isChildNode()) { + String nodeName = reader.getTagName(); + if ("Attr".equals(nodeName)) { + this.url = reader.getAttrAsString("url", null); + } + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + super.writeXML(writer); + writer.startTAG("Attr"); + writer.attr("url", url); + writer.end(); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/images/rh_iframe.png b/src/com/fr/plugin/form/widget/images/rh_iframe.png new file mode 100644 index 0000000..2893833 Binary files /dev/null and b/src/com/fr/plugin/form/widget/images/rh_iframe.png differ diff --git a/src/com/fr/plugin/form/widget/locale/LocaleFinder.java b/src/com/fr/plugin/form/widget/locale/LocaleFinder.java new file mode 100644 index 0000000..714918b --- /dev/null +++ b/src/com/fr/plugin/form/widget/locale/LocaleFinder.java @@ -0,0 +1,19 @@ +package com.fr.plugin.form.widget.locale; + +import com.fr.stable.fun.impl.AbstractLocaleFinder; + +/** + * Created by richie on 15/12/2. + */ +public class LocaleFinder extends AbstractLocaleFinder { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String find() { + return "com/fr/plugin/form/widget/locale/iframe"; + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/locale/iframe.properties b/src/com/fr/plugin/form/widget/locale/iframe.properties new file mode 100644 index 0000000..dbba2ff --- /dev/null +++ b/src/com/fr/plugin/form/widget/locale/iframe.properties @@ -0,0 +1,4 @@ +Plugin-RH_Iframe_Name=Iframe +Plugin-RH_Iframe_Value=Address +Plugin_RH_Iframe_Template_Path=Template Path +Plugin_RH_Iframe_Url=URL \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/locale/iframe_zh_CN.properties b/src/com/fr/plugin/form/widget/locale/iframe_zh_CN.properties new file mode 100644 index 0000000..c34a236 --- /dev/null +++ b/src/com/fr/plugin/form/widget/locale/iframe_zh_CN.properties @@ -0,0 +1,4 @@ +Plugin-RH_Iframe_Name=\u7F51\u9875\u6846 +Plugin-RH_Iframe_Value=\u5730\u5740\u548C\u53C2\u6570 +Plugin_RH_Iframe_Template_Path=\u6A21\u677F\u8DEF\u5F84 +Plugin_RH_Iframe_Url=\u7F51\u7EDC\u8DEF\u5F84 \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/monitor/RHFunctionProcessor.java b/src/com/fr/plugin/form/widget/monitor/RHFunctionProcessor.java new file mode 100644 index 0000000..1f38cc4 --- /dev/null +++ b/src/com/fr/plugin/form/widget/monitor/RHFunctionProcessor.java @@ -0,0 +1,26 @@ +package com.fr.plugin.form.widget.monitor; + +import com.fr.stable.fun.FunctionHelper; +import com.fr.stable.fun.impl.AbstractFunctionProcessor; + +/** + * Created by richie on 15/12/3. + */ +public class RHFunctionProcessor extends AbstractFunctionProcessor { + + private static RHFunctionProcessor instance = new RHFunctionProcessor(); + + public static RHFunctionProcessor getInstance() { + return instance; + } + + @Override + public int getId() { + return FunctionHelper.generateFunctionID("com.fr.plugin.form.widget.rh.iframe"); + } + + @Override + public String getLocaleKey() { + return "Plugin-RH_Iframe_Name"; + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/RHFramePane.java b/src/com/fr/plugin/form/widget/ui/RHFramePane.java new file mode 100644 index 0000000..5a9977e --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/RHFramePane.java @@ -0,0 +1,52 @@ +package com.fr.plugin.form.widget.ui; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.UIRadioPane; +import com.fr.design.gui.itableeditorpane.ParameterTableModel; +import com.fr.design.gui.itableeditorpane.UITableEditorPane; +import com.fr.general.Inter; +import com.fr.plugin.form.widget.core.RHIframeAttr; +import com.fr.plugin.form.widget.core.RHIframeSource; +import com.fr.stable.ParameterProvider; + +import java.awt.*; + +/** + * Created by richie on 15/12/2. + */ +public class RHFramePane extends BasicPane { + + private UIRadioPane radioPane; + private UITableEditorPane editorPane; + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Plugin-RH_Iframe_Value"); + } + + public RHFramePane() { + setLayout(new BorderLayout()); + radioPane = new SourceRadioPane(); + radioPane.setPreferredSize(new Dimension(200, 60)); + add(radioPane, BorderLayout.NORTH); + ParameterTableModel model = new ParameterTableModel(); + editorPane = new UITableEditorPane(model); + add(editorPane, BorderLayout.CENTER); + + } + + public RHIframeAttr update() { + RHIframeAttr attr = new RHIframeAttr(); + attr.setSource(radioPane.updateBean()); + java.util.List list = editorPane.update(); + attr.setParameters(list.toArray(new ParameterProvider[list.size()])); + return attr; + } + + public void populate(RHIframeAttr attr) { + if (attr != null) { + radioPane.populateBean(attr.getSource()); + editorPane.populate(attr.getParameters()); + } + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/SourceRadioPane.java b/src/com/fr/plugin/form/widget/ui/SourceRadioPane.java new file mode 100644 index 0000000..b6e5fc0 --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/SourceRadioPane.java @@ -0,0 +1,28 @@ +package com.fr.plugin.form.widget.ui; + +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.gui.frpane.UIRadioPane; +import com.fr.plugin.form.widget.core.RHIframeSource; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by richie on 15/12/2. + */ +public class SourceRadioPane extends UIRadioPane{ + + @Override + protected List> initPaneList() { + List> list = new ArrayList>(); + list.add(new TemplateSourcePane()); + list.add(new URLSourcePane()); + return list; + } + + @Override + protected String title4PopupWindow() { + return "Source"; + } + +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/TemplateSourcePane.java b/src/com/fr/plugin/form/widget/ui/TemplateSourcePane.java new file mode 100644 index 0000000..812dbca --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/TemplateSourcePane.java @@ -0,0 +1,75 @@ +package com.fr.plugin.form.widget.ui; + +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.gui.itree.filetree.ReportletPane; +import com.fr.plugin.form.widget.core.TemplateSource; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * Created by richie on 15/12/2. + */ +public class TemplateSourcePane extends FurtherBasicBeanPane { + + private UITextField textField; + + public TemplateSourcePane() { + setLayout(new BorderLayout()); + JPanel contentPane = new JPanel(new BorderLayout()); + contentPane.setPreferredSize(new Dimension(30, 20)); + add(contentPane, BorderLayout.NORTH); + + textField = new UITextField(); + UIButton btn = new UIButton("..."); + btn.setPreferredSize(new Dimension(30, 20)); + contentPane.add(textField, BorderLayout.CENTER); + contentPane.add(btn, BorderLayout.EAST); + btn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + final ReportletPane reportletPane = new ReportletPane(); + reportletPane.setSelectedReportletPath(textField.getText()); + BasicDialog reportletDialog = reportletPane.showWindow(SwingUtilities.getWindowAncestor(TemplateSourcePane.this)); + + reportletDialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + textField.setText(reportletPane.getSelectedReportletPath()); + } + }); + reportletDialog.setVisible(true); + } + }); + } + + @Override + public boolean accept(Object ob) { + return ob instanceof TemplateSource; + } + + @Override + public String title4PopupWindow() { + return "模板路径"; + } + + @Override + public void reset() { + + } + + @Override + public void populateBean(TemplateSource ob) { + textField.setText(ob.getPath()); + } + + @Override + public TemplateSource updateBean() { + return new TemplateSource(textField.getText()); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/URLSourcePane.java b/src/com/fr/plugin/form/widget/ui/URLSourcePane.java new file mode 100644 index 0000000..a89543a --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/URLSourcePane.java @@ -0,0 +1,48 @@ +package com.fr.plugin.form.widget.ui; + +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.formula.TinyFormulaPane; +import com.fr.plugin.form.widget.core.URLSource; + +import java.awt.*; + +/** + * Created by richie on 15/12/2. + */ +public class URLSourcePane extends FurtherBasicBeanPane { + + private TinyFormulaPane formulaPane; + + public URLSourcePane() { + setLayout(new BorderLayout()); + formulaPane = new TinyFormulaPane(); + add(formulaPane, BorderLayout.CENTER); + } + + @Override + public boolean accept(Object ob) { + return ob instanceof URLSource; + } + + @Override + public String title4PopupWindow() { + return "网络路径"; + } + + @Override + public void reset() { + + } + + @Override + public void populateBean(URLSource ob) { + if (ob != null) { + formulaPane.populateBean(ob.getUrl()); + } + } + + @Override + public URLSource updateBean() { + return new URLSource(formulaPane.updateBean()); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/XRHIframe.java b/src/com/fr/plugin/form/widget/ui/XRHIframe.java new file mode 100644 index 0000000..72bdeee --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/XRHIframe.java @@ -0,0 +1,75 @@ +package com.fr.plugin.form.widget.ui; + +import com.fr.design.designer.creator.CRPropertyDescriptor; +import com.fr.design.designer.creator.XWidgetCreator; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.widget.editors.WidgetValueEditor; +import com.fr.general.Inter; +import com.fr.plugin.form.widget.core.RHIframe; +import com.fr.plugin.form.widget.ui.editor.RHIframeModelEditor; +import com.fr.plugin.form.widget.ui.render.RHIframeModelRenderer; +import com.fr.stable.ArrayUtils; + +import javax.swing.*; +import java.awt.*; +import java.beans.IntrospectionException; + +/** + * Created by richie on 15/12/2. + */ +public class XRHIframe extends XWidgetCreator { + + public XRHIframe(RHIframe widget, Dimension initSize) { + super(widget, initSize); + } + + @Override + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + return (CRPropertyDescriptor[]) ArrayUtils.addAll(super.supportedDescriptor(), new CRPropertyDescriptor[]{ + new CRPropertyDescriptor("attr", this.toData().getClass()) + .setI18NName(Inter.getLocText("Plugin-RH_Iframe_Value")) + .setEditorClass(RHIframeModelEditor.class) + .setRendererClass(RHIframeModelRenderer.class), + new CRPropertyDescriptor("overflowX", this.data.getClass()).setI18NName( + Inter.getLocText("Preference-Horizontal_Scroll_Bar_Visible")).putKeyValue( + XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("overflowY", this.data.getClass()).setI18NName( + Inter.getLocText("Preference-Vertical_Scroll_Bar_Visible")).putKeyValue( + XCreatorConstants.PROPERTY_CATEGORY, "Advanced")}); + } + + @Override + protected JComponent initEditor() { + if (editor == null) { + editor = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UITextField address = new UITextField(); + editor.add(address, BorderLayout.NORTH); + JPanel contentPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + contentPane.setBackground(Color.white); + editor.add(contentPane, BorderLayout.CENTER); + } + return editor; + } + + @Override + public Dimension initEditorSize() { + return new Dimension(160, 80); + } + + /** + * 该组件是否可以拖入参数面板 + * 这里控制 网页预定义控件在工具栏不显示 + * + * @return 是则返回true + */ + public boolean canEnterIntoParaPane() { + return false; + } + + @Override + public String getIconPath() { + return "/com/fr/plugin/form/widget/images/rh_iframe.png"; + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/editor/AccessibleRHIframeModelEditor.java b/src/com/fr/plugin/form/widget/ui/editor/AccessibleRHIframeModelEditor.java new file mode 100644 index 0000000..d72ee64 --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/editor/AccessibleRHIframeModelEditor.java @@ -0,0 +1,45 @@ +package com.fr.plugin.form.widget.ui.editor; + +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.widget.accessibles.UneditableAccessibleEditor; +import com.fr.plugin.form.widget.core.RHIframeAttr; +import com.fr.plugin.form.widget.ui.RHFramePane; + +import javax.swing.*; + +/** + * Created by richie on 15/12/2. + */ +public class AccessibleRHIframeModelEditor extends UneditableAccessibleEditor { + + private RHFramePane rhFramePane; + + public AccessibleRHIframeModelEditor() { + super(new RHIframeModelWrapper()); + } + + @Override + protected void showEditorPane() { + if (rhFramePane == null) { + rhFramePane = new RHFramePane(); + } + BasicDialog dlg = rhFramePane.showWindow(SwingUtilities.getWindowAncestor(this)); + rhFramePane.populate(getValue()); + dlg.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + RHIframeAttr zTreeNode = rhFramePane.update(); + setValue(zTreeNode); + fireStateChanged(); + } + }); + dlg.setVisible(true); + + } + + @Override + public RHIframeAttr getValue() { + return (RHIframeAttr) super.getValue(); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/editor/RHIframeModelEditor.java b/src/com/fr/plugin/form/widget/ui/editor/RHIframeModelEditor.java new file mode 100644 index 0000000..35a6db9 --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/editor/RHIframeModelEditor.java @@ -0,0 +1,12 @@ +package com.fr.plugin.form.widget.ui.editor; + +import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; + +/** + * Created by richie on 15/12/2. + */ +public class RHIframeModelEditor extends AccessiblePropertyEditor { + public RHIframeModelEditor() { + super(new AccessibleRHIframeModelEditor()); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/editor/RHIframeModelWrapper.java b/src/com/fr/plugin/form/widget/ui/editor/RHIframeModelWrapper.java new file mode 100644 index 0000000..7cea685 --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/editor/RHIframeModelWrapper.java @@ -0,0 +1,33 @@ +package com.fr.plugin.form.widget.ui.editor; + +import com.fr.design.Exception.ValidationException; +import com.fr.design.designer.properties.Decoder; +import com.fr.design.designer.properties.Encoder; +import com.fr.plugin.form.widget.core.RHIframeAttr; +import com.fr.plugin.form.widget.core.RHIframeSource; + +/** + * Created by richie on 15/12/2. + */ +public class RHIframeModelWrapper implements Encoder, Decoder { + @Override + public RHIframeAttr decode(String txt) { + return null; + } + + @Override + public void validate(String txt) throws ValidationException { + + } + + @Override + public String encode(RHIframeAttr v) { + if (v != null) { + RHIframeSource source = v.getSource(); + if (source != null) { + return source.toString(); + } + } + return null; + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/ui/render/RHIframeModelRenderer.java b/src/com/fr/plugin/form/widget/ui/render/RHIframeModelRenderer.java new file mode 100644 index 0000000..eb02900 --- /dev/null +++ b/src/com/fr/plugin/form/widget/ui/render/RHIframeModelRenderer.java @@ -0,0 +1,13 @@ +package com.fr.plugin.form.widget.ui.render; + +import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer; +import com.fr.plugin.form.widget.ui.editor.RHIframeModelWrapper; + +/** + * Created by richie on 15/12/2. + */ +public class RHIframeModelRenderer extends EncoderCellRenderer { + public RHIframeModelRenderer() { + super(new RHIframeModelWrapper()); + } +} \ No newline at end of file diff --git a/src/com/fr/plugin/form/widget/web/widget.rh.iframe.js b/src/com/fr/plugin/form/widget/web/widget.rh.iframe.js new file mode 100644 index 0000000..8d0f33f --- /dev/null +++ b/src/com/fr/plugin/form/widget/web/widget.rh.iframe.js @@ -0,0 +1,233 @@ +/** + * @class FR.RHIframe + * @extends FR.BaseEditor + */ +(function($){ + + FR.RHIframe = FR.extend(FR.BaseEditor, { + + _defaultConfig: function () { + return $.extend(FR.RHIframe.superclass._defaultConfig.apply(), { + baseName: 'rh.iframe', + baseClass: 'rh.iframe', + widgetName: "", + src: "", + width: "100%", + height: "100%", + showOverFlowX: true, + showOverFlowY: true + }); + }, + _init: function () { + FR.RHIframe.superclass._init.apply(this, arguments); + this.initData(); + // 控件属性 + var o = this.options; + + this.editComp = this.element.css({ + width: '100%', + height: '100%' + }); + o.iframeName = o.widgetName || this.createNoRepeatName(); + this.$iframe = $("