From b793303df7778641b2cc95916efd15c5f3e9dc1c Mon Sep 17 00:00:00 2001
From: neil
Date: Tue, 11 Oct 2016 17:17:56 +0800
Subject: [PATCH 01/18] =?UTF-8?q?REPORT-465=20=E6=97=A5=E6=9C=9F=E6=8E=A7?=
=?UTF-8?q?=E4=BB=B6=E7=9A=84format=E5=92=8C=E5=8D=95=E5=85=83=E6=A0=BC?=
=?UTF-8?q?=E6=A0=B7=E5=BC=8F=E7=9B=B8=E4=BA=92=E7=8B=AC=E7=AB=8B,=20?=
=?UTF-8?q?=E4=B8=8D=E8=A6=81=E8=81=94=E5=8A=A8=E8=AE=BE=E7=BD=AE,=20?=
=?UTF-8?q?=E9=80=A0=E6=88=90=E5=9B=B0=E6=89=B0.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../fr/design/present/CellWriteAttrPane.java | 39 ++-----------------
1 file changed, 3 insertions(+), 36 deletions(-)
diff --git a/designer/src/com/fr/design/present/CellWriteAttrPane.java b/designer/src/com/fr/design/present/CellWriteAttrPane.java
index 5f4d6a8eac..4158dbd6c6 100644
--- a/designer/src/com/fr/design/present/CellWriteAttrPane.java
+++ b/designer/src/com/fr/design/present/CellWriteAttrPane.java
@@ -1,15 +1,13 @@
package com.fr.design.present;
import com.fr.base.FRContext;
-import com.fr.base.Style;
+import com.fr.design.dialog.BasicDialog;
+import com.fr.design.dialog.BasicPane;
+import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.widget.WidgetPane;
-import com.fr.design.dialog.BasicDialog;
-import com.fr.design.dialog.BasicPane;
-import com.fr.design.dialog.DialogActionAdapter;
-import com.fr.form.ui.DateEditor;
import com.fr.form.ui.NoneWidget;
import com.fr.form.ui.Widget;
import com.fr.general.FRLogger;
@@ -22,8 +20,6 @@ import com.fr.report.cell.TemplateCellElement;
import com.fr.report.elementcase.TemplateElementCase;
import java.awt.*;
-import java.text.Format;
-import java.text.SimpleDateFormat;
public class CellWriteAttrPane extends BasicPane {
@@ -78,22 +74,6 @@ public class CellWriteAttrPane extends BasicPane {
Widget cellWidget = cellElement.getWidget();
- if (cellWidget != null && cellWidget instanceof DateEditor) {
- // p:日期的格式需要设置到单元格子里面.
- DateEditor dateCellEditorDef = (DateEditor) cellWidget;
-
- // p:需要把下拉的编辑器,日期格式,都放到CellElement的Style里面
- // 这个地方很方便用户,是alex提出的.
- // p:日期的格式需要设置到单元格子里面.
- Style style = cellElement.getStyle();
- if (style != null) {
- Format format = style.getFormat();
- if (format != null && format instanceof SimpleDateFormat) {
- SimpleDateFormat simpleDateFormat = (SimpleDateFormat) format;
- dateCellEditorDef.setFormatText(simpleDateFormat.toPattern());
- }
- }
- }
// 这里进行克隆的原因是为了保留原始的Widget以便和新的Widget做比较来判断是否发生了改变
if (cellWidget != null) {
try {
@@ -111,19 +91,6 @@ public class CellWriteAttrPane extends BasicPane {
}
Widget cellWidget = this.cellEditorDefPane.update();
- // p:需要把下拉的编辑器,日期格式,都放到CellElement的Style里面
- if (cellWidget instanceof DateEditor) {
- // p:日期的格式需要设置到单元格子里面.
- DateEditor dateCellEditorDef = (DateEditor) cellWidget;
- String formatText = dateCellEditorDef.getFormatText();
- if (formatText != null) {
- Style style = cellElement.getStyle();
- if (style != null) {
- cellElement.setStyle(style.deriveFormat(new SimpleDateFormat(formatText)));
- }
- }
- }
-
// p:最后把这个cellEditorDef设置到CellGUIAttr.
if (cellWidget instanceof NoneWidget) {
cellElement.setWidget(null);
From 57cf66276b3e69fbc6fe684ea065a60964f729b2 Mon Sep 17 00:00:00 2001
From: xiaoxia
Date: Tue, 11 Oct 2016 20:44:15 +0800
Subject: [PATCH 02/18] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?=
=?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E9=83=A8=E5=88=86=EF=BC=8C=E5=87=A0?=
=?UTF-8?q?=E4=B8=AA=E7=94=A8=E5=88=B0=E7=9A=84=E6=8E=A7=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../design/mainframe/ShareWidgetButton.java | 192 +++++++++++
.../fr/design/mainframe/ShareWidgetPane.java | 29 ++
.../mainframe/widget/UITreeComboBox.java | 312 ++++++++++++++++++
3 files changed, 533 insertions(+)
create mode 100644 designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java
create mode 100644 designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java
create mode 100644 designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
diff --git a/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java b/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java
new file mode 100644
index 0000000000..3054bea328
--- /dev/null
+++ b/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java
@@ -0,0 +1,192 @@
+package com.fr.design.mainframe;
+
+import com.fr.base.BaseUtils;
+import com.fr.design.designer.creator.XCreator;
+import com.fr.design.designer.creator.XCreatorUtils;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.form.share.ShareLoader;
+import com.fr.form.ui.ElCaseBindInfo;
+import com.fr.form.ui.Widget;
+import com.fr.general.ComparatorUtils;
+import com.fr.stable.StringUtils;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
+import java.awt.dnd.*;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * Coder: zack
+ * Date: 2016/10/9
+ * Time: 16:14
+ */
+public class ShareWidgetButton extends JPanel implements MouseListener, MouseMotionListener, Serializable {
+ private ElCaseBindInfo bindInfo;
+ private MouseEvent lastPressEvent;
+
+ public ShareWidgetButton(ElCaseBindInfo bindInfo) {
+ this.bindInfo = bindInfo;
+ initUI();
+ this.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
+ this.addMouseListener(this);
+ this.addMouseMotionListener(this);
+ new DragAndDropDragGestureListener(this, DnDConstants.ACTION_COPY_OR_MOVE);
+ }
+
+
+ private void initUI() {
+ this.setBackground(Color.WHITE);
+ this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
+ setPreferredSize(new Dimension(110, 70));
+ setLayout(FRGUIPaneFactory.createBorderLayout());
+ ImagePanel imagePanel = new ImagePanel((BufferedImage) bindInfo.getCover());
+
+ this.add(imagePanel, BorderLayout.NORTH);
+ JPanel panel = new JPanel();
+ UILabel label = new UILabel(bindInfo.getName(), SwingConstants.HORIZONTAL);
+ panel.setBackground(new Color(184, 220, 242));
+ panel.add(label);
+ this.add(panel, BorderLayout.SOUTH);
+ }
+
+ private class ImagePanel extends JPanel {
+
+ private BufferedImage image;
+
+ public ImagePanel(BufferedImage image) {
+ this.image = image;
+ this.setPreferredSize(new Dimension(110, 50));
+ }
+
+ @Override
+ public void paintComponent(Graphics g) {
+ g.drawImage(image, 0, 0, 110, 70, null);
+ }
+
+ }
+
+ public ElCaseBindInfo getBindInfo() {
+ return bindInfo;
+ }
+
+ public void setBindInfo(ElCaseBindInfo bindInfo) {
+ this.bindInfo = bindInfo;
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ lastPressEvent = e;
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ if (BaseUtils.isAuthorityEditing()) {
+ return;
+ }
+ if (lastPressEvent == null) {
+ return;
+ }
+ Object source = e.getSource();
+ Widget creatorSource = null;
+ String shareId = StringUtils.EMPTY;
+ if (source instanceof ShareWidgetButton) {
+ ShareWidgetButton no = (ShareWidgetButton) e.getSource();
+ if (no == null) {
+ return;
+ }
+ shareId = no.getBindInfo().getId();
+ creatorSource = ShareLoader.getLoader().getElCaseEditorById(shareId);
+ }
+ if (creatorSource != null) {
+ XCreator xCreator = XCreatorUtils.createXCreator(creatorSource);
+ xCreator.setShareId(shareId);
+ WidgetToolBarPane.getTarget().startDraggingBean(xCreator);
+ lastPressEvent = null;
+ this.setBorder(null);
+ }
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent e) {
+
+ }
+
+ public class DragAndDropDragGestureListener extends DragSourceAdapter implements DragGestureListener {
+ private DragSource source;
+
+ public DragAndDropDragGestureListener(ShareWidgetButton tt, int actions) {
+ source = new DragSource();
+ source.createDefaultDragGestureRecognizer(tt, actions, this);
+ }
+
+ public void dragGestureRecognized(DragGestureEvent dge) {
+ ShareWidgetButton shareWidgetButton = (ShareWidgetButton) dge.getComponent();
+ if (shareWidgetButton != null) {
+ Widget widget = ShareLoader.getLoader().getElCaseEditorById(shareWidgetButton.getBindInfo().getId());
+ DragAndDropTransferable dragAndDropTransferable = new DragAndDropTransferable(widget);
+ dge.startDrag(DragSource.DefaultCopyDrop, dragAndDropTransferable, this);
+ }
+ }
+
+ @Override
+ public void dragEnter(DragSourceDragEvent dragSourceDragEvent) {
+
+ }
+ }
+
+ public class DragAndDropTransferable implements Transferable {
+ private Widget widget;
+
+ public DragAndDropTransferable(Widget widget) {
+ this.widget = widget;
+ }
+
+ DataFlavor[] flavors = {new DataFlavor(Widget.class, "Widget")};
+
+ public DataFlavor[] getTransferDataFlavors() {
+ return flavors;
+ }
+
+ public boolean isDataFlavorSupported(DataFlavor flavor) {
+ for (DataFlavor df : flavors) {
+ if (ComparatorUtils.equals(df, flavor)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Object getTransferData(DataFlavor df) throws UnsupportedFlavorException, IOException {
+ return widget;
+ }
+ }
+}
diff --git a/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java
new file mode 100644
index 0000000000..7abfb6900a
--- /dev/null
+++ b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java
@@ -0,0 +1,29 @@
+package com.fr.design.mainframe;
+
+
+import com.fr.form.ui.ElCaseBindInfo;
+
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.ArrayList;
+
+
+/**
+ * Created by xiaxiang on 2016/10/10.
+ */
+public class ShareWidgetPane extends JPanel {
+ public ShareWidgetPane(ArrayList elCaseBindInfos) {
+ this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// 设置面板的边框 ,距离上、左、下、右 的距离
+ int rowCount = (elCaseBindInfos.size() + 1)/2;
+ this.setLayout(new GridLayout(rowCount, 2, 10, 10));
+ for (ElCaseBindInfo rbModuleInfo : elCaseBindInfos) {
+ ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo);
+ this.add(widgetButton);
+ }
+ if (elCaseBindInfos.size() == 1) {
+ this.add(new JPanel());
+ }
+
+ }
+}
diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
new file mode 100644
index 0000000000..4d92ccc264
--- /dev/null
+++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
@@ -0,0 +1,312 @@
+package com.fr.design.mainframe.widget;
+
+/**
+ * Created by xiaxiang on 2016/9/30.
+ */
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.plaf.*;
+import javax.swing.plaf.basic.*;
+import javax.swing.plaf.metal.*;
+import javax.swing.tree.*;
+
+import com.fr.design.designer.beans.*;
+import com.fr.design.designer.beans.events.DesignerEditListener;
+import com.fr.design.designer.beans.events.DesignerEvent;
+import com.fr.design.designer.creator.XCreator;
+import com.fr.design.mainframe.ComponentTree;
+import com.sun.java.swing.plaf.motif.*;
+import com.sun.java.swing.plaf.windows.*;
+
+/**
+ * 控件树下拉列表框
+ */
+public class UITreeComboBox extends JComboBox{
+ /**
+ * 显示用的树
+ */
+ private ComponentTree tree;
+
+ public UITreeComboBox(ComponentTree componentTree){
+ this.setTree(componentTree);
+ tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter());
+ for(int i=0; iTitle: UITreeComboBoxRenderer
+ * Description: 树形结构而来的DefaultListCellRenderer
+ */
+ class UITreeComboBoxRenderer extends DefaultListCellRenderer {
+ public Component getListCellRendererComponent(JList list, Object value,
+ int index, boolean isSelected, boolean cellHasFocus){
+ if(value != null){
+ TreePath path = (TreePath)value;
+ Object node = path.getLastPathComponent();
+ value = node;
+ TreeCellRenderer r = tree.getCellRenderer();
+ JLabel lb = (JLabel)r.getTreeCellRendererComponent(
+ tree, value, isSelected, false, false, index,
+ cellHasFocus);
+ return lb;
+ }
+ return super.getListCellRendererComponent(list, value, index,
+ isSelected, cellHasFocus);
+ }
+ }
+
+
+ public TreePath[] getSelectedTreePath() {
+ XCreator[] creators = tree.getDesigner().getSelectionModel().getSelection().getSelectedCreators();
+ TreePath[] paths = new TreePath[creators.length];
+
+ for (int i = 0; i < paths.length; i++) {
+ paths[i] = tree.buildTreePath(creators[i]);
+ }
+ return paths;
+ }
+
+ private class TreeComboBoxDesignerEditAdapter implements DesignerEditListener {
+
+ @Override
+ public void fireCreatorModified(DesignerEvent evt) {
+ if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
+ TreePath[] paths = getSelectedTreePath();
+
+ if (paths.length == 1) {
+ tree.setAndScrollSelectionPath(paths[0]);
+ } else {
+ tree.setSelectionPaths(paths);
+ }
+ setSelectedItem(paths[0]);
+ MenuSelectionManager.defaultManager().clearSelectedPath();
+ } else if(evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) {
+ TreePath[] paths = getSelectedTreePath();
+ if (paths.length == 1) {
+ tree.setAndScrollSelectionPath(paths[0]);
+ } else {
+ tree.setSelectionPaths(paths);
+ }
+ setSelectedItem(paths[0]);
+ MenuSelectionManager.defaultManager().clearSelectedPath();
+
+ } else {
+ return;
+ }
+
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return o.getClass() == this.getClass();
+ }
+ }
+
+ /**
+ * 测试
+ */
+// public static void main(String args[]){
+// JFrame frame = new JFrame("UITreeComboBox");
+// final UITreeComboBox box = new UITreeComboBox(new ComponentTree(new FormDesigner()));
+// box.setPreferredSize(new Dimension(300, 28));
+// frame.getContentPane().add(box);
+// frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+// frame.pack();
+// frame.setVisible(true);
+// }
+}
+
+/**
+ * Title: UITreeComboBox
+ * Description: TreePopup
+ */
+class TreePopup extends JPopupMenu implements ComboPopup{
+ protected UITreeComboBox comboBox;
+ protected JScrollPane scrollPane;
+
+ protected MouseMotionListener mouseMotionListener;
+ protected MouseListener mouseListener;
+ private MouseListener treeSelectListener = new MouseAdapter(){
+ public void mouseClicked (MouseEvent e){
+ if (e.isMetaDown()) {
+ popupMenu(e);
+ } else {
+ return;
+ }
+ }
+ };
+
+ public void popupMenu(MouseEvent e) {
+ TreePath path = comboBox.getTree().getSelectionPath();
+ if (path == null) {
+ return;
+ }
+ Component component = (Component) path.getLastPathComponent();
+ if (!(component instanceof XCreator)) {
+ return;
+ }
+ com.fr.design.designer.beans.ComponentAdapter adapter = AdapterBus.getComponentAdapter(comboBox.getTree().getDesigner(), (XCreator) component);
+ JPopupMenu menu = adapter.getContextPopupMenu(e);
+ menu.show(comboBox, e.getX(), e.getY());
+ }
+
+ public TreePopup(JComboBox comboBox){
+ this.comboBox = (UITreeComboBox)comboBox;
+ setBorder(BorderFactory.createLineBorder(Color.black));
+ setLayout(new BorderLayout());
+ setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled());
+ JTree tree = this.comboBox.getTree();
+ if(tree != null){
+ scrollPane = new JScrollPane(tree);
+ scrollPane.setBorder(null);
+ add(scrollPane, BorderLayout.CENTER);
+ this.comboBox.addMouseListener(treeSelectListener);
+ }
+ }
+
+ public void show(){
+ updatePopup();
+ show(comboBox, 0, comboBox.getHeight());
+ comboBox.getTree().requestFocus();
+ }
+
+ public void hide(){
+ setVisible(false);
+ comboBox.firePropertyChange("popupVisible", true, false);
+ }
+
+ protected JList list = new JList();
+ public JList getList(){
+ return list;
+ }
+
+ public MouseMotionListener getMouseMotionListener(){
+ if(mouseMotionListener == null){
+ mouseMotionListener = new MouseMotionAdapter(){};
+ }
+ return mouseMotionListener;
+ }
+
+ public KeyListener getKeyListener(){
+ return null;
+ }
+
+ public void uninstallingUI(){}
+
+ /**
+ * Implementation of ComboPopup.getMouseListener().
+ *
+ * @return a MouseListener
or null
+ * @see ComboPopup#getMouseListener
+ */
+ public MouseListener getMouseListener(){
+ if(mouseListener == null){
+ mouseListener = new InvocationMouseHandler();
+ }
+ return mouseListener;
+ }
+
+ protected void togglePopup(){
+ if(isVisible()){
+ hide();
+ } else{
+ show();
+ }
+ }
+ protected void updatePopup(){
+ setPreferredSize(new Dimension(comboBox.getSize().width, 200));
+ Object selectedObj = comboBox.getSelectedItem();
+ if(selectedObj != null){
+ TreePath tp = (TreePath)selectedObj;
+ ((UITreeComboBox)comboBox).getTree().setSelectionPath(tp);
+ }
+ }
+
+ protected class InvocationMouseHandler extends MouseAdapter{
+ public void mousePressed(MouseEvent e){
+ if(!SwingUtilities.isLeftMouseButton(e) || !comboBox.isEnabled()){
+ return;
+ }
+ if(comboBox.isEditable()){
+ Component comp = comboBox.getEditor().getEditorComponent();
+ if((!(comp instanceof JComponent)) ||
+ ((JComponent)comp).isRequestFocusEnabled()){
+ comp.requestFocus();
+ }
+ } else if(comboBox.isRequestFocusEnabled()){
+ comboBox.requestFocus();
+ }
+ togglePopup();
+ }
+ }
+
+
+
+}
From 5e0f82fee2d8d9ae985e2431a6b403bf650b5e91 Mon Sep 17 00:00:00 2001
From: sunmondong
Date: Tue, 11 Oct 2016 22:30:43 +0800
Subject: [PATCH 03/18] =?UTF-8?q?=E6=9E=84=E5=BB=BA=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
build.gradle => build.dev.gradle | 2 +-
build.gradle.bak | 86 -------------------
.../{build.gradle => build.dev.gradle} | 2 +-
designer_base/build.gradle.bak | 70 ---------------
.../{build.gradle => build.dev.gradle} | 2 +-
designer_chart/build.gradle.bak | 66 --------------
.../{build.gradle => build.dev.gradle} | 2 +-
designer_form/build.gradle.bak | 83 ------------------
8 files changed, 4 insertions(+), 309 deletions(-)
rename build.gradle => build.dev.gradle (97%)
delete mode 100644 build.gradle.bak
rename designer_base/{build.gradle => build.dev.gradle} (96%)
delete mode 100644 designer_base/build.gradle.bak
rename designer_chart/{build.gradle => build.dev.gradle} (96%)
delete mode 100644 designer_chart/build.gradle.bak
rename designer_form/{build.gradle => build.dev.gradle} (97%)
delete mode 100644 designer_form/build.gradle.bak
diff --git a/build.gradle b/build.dev.gradle
similarity index 97%
rename from build.gradle
rename to build.dev.gradle
index abc9815956..507d77e9f5 100644
--- a/build.gradle
+++ b/build.dev.gradle
@@ -5,7 +5,7 @@ tasks.withType(JavaCompile){
def basicDir="../../"
def libDir="${basicDir}/finereport-lib-stable"
//获取什么分支名
-FileTree files =fileTree(dir:"./",include:"build.gradle")
+FileTree files =fileTree(dir:"./",include:"build.*.gradle")
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ("\\"))
def branchName=buildDir.substring(buildDir.lastIndexOf ("\\")+1)
diff --git a/build.gradle.bak b/build.gradle.bak
deleted file mode 100644
index 67a8a0e70f..0000000000
--- a/build.gradle.bak
+++ /dev/null
@@ -1,86 +0,0 @@
-apply plugin: "java"
-tasks.withType(JavaCompile){
- options.encoding = "UTF-8"
-}
-sourceCompatibility=1.7
-def basicDir="../../"
-def libDir="${basicDir}/finereport-lib-stable"
-//获取什么分支名
-FileTree files =fileTree(dir:"./",include:"build.gradle")
-def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ("\\"))
-def branchName=buildDir.substring(buildDir.lastIndexOf ("\\")+1)
-
-task appletJar<<{
-
- ant{
- mkdir(dir:"${libDir}/tmp-${branchName}")
- mkdir(dir:"build/classes/")
- copy(todir:"build/classes/"){
- fileset(dir:"${basicDir}/finereport-core-stable/${branchName}/build/classes/main")
-
- fileset(dir:"${basicDir}/finereport-chart-stable/${branchName}/build/classes/main")
-
- fileset(dir:"${basicDir}/finereport-report-stable/${branchName}/build/classes/main")
-
- fileset(dir:"${basicDir}/finereport-platform-stable/${branchName}/build/classes/main")
-
- fileset(dir:"${basicDir}/finereport-performance-stable/${branchName}/build/classes/main")
-
- }
- unjar(src:"${libDir}/3rd.jar",dest:"${libDir}/tmp-${branchName}")
- unjar(src:"${libDir}/servlet-api.jar",dest:"${libDir}/tmp-${branchName}")
- jar(jarfile:"build/libs/fr-applet-8.0.jar"){
- fileset(dir:"build/classes"){
- exclude(name:"*.*")
- exclude(name:"bin/*.*")
- exclude(name:"classes/**")
- exclude(name:"com/fr/schedule/**")
- exclude(name:"com/fr/cell/**")
- exclude(name:"com/fr/dialog/**")
- exclude(name:"com/fr/view/**")
- exclude(name:"com/fr/web/**")
- exclude(name:"com/fr/fs/**")
- exclude(name:"com/fr/design/**")
- exclude(name:"com/fr/start/**")
- exclude(name:"com/fr/process/**")
- }
- fileset(dir:"${libDir}/tmp-${branchName}"){
- include(name:"javax/mail/**")
- include(name:"javax/servlet/**")
- include(name:"org/freehep/**")
- include(name:"com/fr/third/JAI/**")
- include(name:"com/fr/third/antlr/**")
- include(name:"com/fr/third/javax/**")
- include(name:"com/sun/xml/**")
- include(name:"javax/xml/**")
-
- }
- fileset(dir:"build/classes"){
- include(name:"com/fr/web/*.class")
- include(name:"com/fr/web/attr/*.class")
- }
- }
- delete(dir:"${libDir}/tmp-${branchName}")
- def jdk6home= "D:/FineReport/develop/java/jdk1.6u35"
- def keystore="frapplet.store"
- def keycert="fr.cert"
- def keypassword="123456"
- def keyalias="fr"
-
- exec(executable:"${jdk6home}/bin/keytool"){
- arg(line:"-genkey -dname "CN=FineReport L=NanJing C=China" -keystore ${keystore} -alias ${keyalias} -validity 3650 -storepass ${keypassword}")
- }
- exec(executable:"${jdk6home}/bin/keytool"){
- arg(line:"-export -keystore ${keystore} -alias ${keyalias} -file ${keycert} -storepass ${keypassword}")
- }
-
- exec(executable:"${jdk6home}/bin/jarsigner"){
- arg(line:"-keystore ${keystore} -storepass ${keypassword} 'build/libs/fr-applet-8.0.jar' ${keyalias}")
- }
- delete(file:"${keystore}")
- delete(file:"${keycert}")
- delete(dir:"build/classes")
-
- }
-
-}
\ No newline at end of file
diff --git a/designer_base/build.gradle b/designer_base/build.dev.gradle
similarity index 96%
rename from designer_base/build.gradle
rename to designer_base/build.dev.gradle
index f8cfe57ba4..7b3bea2ba9 100644
--- a/designer_base/build.gradle
+++ b/designer_base/build.dev.gradle
@@ -24,7 +24,7 @@ sourceSets{
}
}
//获取什么分支名
-FileTree files =fileTree(dir:'./',include:'build.gradle')
+FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\'))
buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\'))
def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1)
diff --git a/designer_base/build.gradle.bak b/designer_base/build.gradle.bak
deleted file mode 100644
index e7c5a8e1ff..0000000000
--- a/designer_base/build.gradle.bak
+++ /dev/null
@@ -1,70 +0,0 @@
-
-apply plugin: 'java'
-tasks.withType(JavaCompile){
- options.encoding = 'UTF-8'
-}
-//指定构建的jdk版本
-sourceCompatibility=1.8
-//指定生成jar包版本
-version='8.0'
-//生成jar包重命名
-jar{
- baseName='fr-designer-core'
-}
-
-
-def srcDir="."
-
-//指定源码路径
-sourceSets{
- main{
- java{
- srcDirs=["${srcDir}/src"]
- }
- }
-}
-//获取什么分支名
-FileTree files =fileTree(dir:'./',include:'build.gradle')
-def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\'))
-buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\'))
-def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1)
-
-//声明外部依赖
-dependencies{
-
-compile fileTree(dir:'../../../finereport-lib-stable',include:'**/*.jar')
-compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar")
-
- testCompile 'junit:junit:4.12'
-}
-//复制非.java文件到classes文件夹下参与打包
-task copyFile(type:Copy,dependsOn:compileJava){
- copy{
- from ("${srcDir}/src"){
- exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html'
- }
- into 'build/classes/main'
- }
-
-}
-
-
-//压缩项目中的js文件
-task compressJS{
- ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){
- classpath {
- fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar')
- }
- }
- ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){
- fileset (dir:"${srcDir}/src"){
- include (name:'**/*.js')
- include (name:'**/*.css')
- }
-
- }
-}
-jar.dependsOn compressJS
-
-
-
diff --git a/designer_chart/build.gradle b/designer_chart/build.dev.gradle
similarity index 96%
rename from designer_chart/build.gradle
rename to designer_chart/build.dev.gradle
index cc22b7b34b..f980fa135a 100644
--- a/designer_chart/build.gradle
+++ b/designer_chart/build.dev.gradle
@@ -23,7 +23,7 @@ sourceSets{
}
}
}
-FileTree files =fileTree(dir:'./',include:'build.gradle')
+FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\'))
buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\'))
def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1)
diff --git a/designer_chart/build.gradle.bak b/designer_chart/build.gradle.bak
deleted file mode 100644
index 92f0551624..0000000000
--- a/designer_chart/build.gradle.bak
+++ /dev/null
@@ -1,66 +0,0 @@
-
-apply plugin: 'java'
-tasks.withType(JavaCompile){
- options.encoding = 'UTF-8'
-}
-//指定构建的jdk版本
-sourceCompatibility=1.8
-//指定生成jar包的版本
-version='8.0'
-
-def srcDir="."
-
-//对生成的jar包进行重命名
-
-jar{
- baseName='fr-designer-chart'
-}
-
-sourceSets{
- main{
- java{
- srcDirs=["${srcDir}/src"]
- }
- }
-}
-FileTree files =fileTree(dir:'./',include:'build.gradle')
-def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\'))
-buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\'))
-def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1)
-
-//指定外部依赖
-dependencies{
-compile fileTree(dir:'../../../finereport-lib-stable',include:'**/*.jar')
-compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar")
-
- testCompile 'junit:junit:4.12'
-}
-//将非.java 文件复制到classes文件夹下参与打包
-task copyFile(type:Copy,dependsOn:compileJava){
- copy{
- from ("${srcDir}/src"){
- exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html'
-
- }
- into 'build/classes/main'
- }
-
-}
-
-//压缩项目中的js文件
-task compressJS{
- ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){
- classpath {
- fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar')
- }
- }
- ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){
- fileset (dir:"${srcDir}/src"){
- include (name:'**/*.js')
- include (name:'**/*.css')
- }
-
- }
-}
-jar.dependsOn compressJS
-
diff --git a/designer_form/build.gradle b/designer_form/build.dev.gradle
similarity index 97%
rename from designer_form/build.gradle
rename to designer_form/build.dev.gradle
index b06cabd306..57ebd74c2c 100644
--- a/designer_form/build.gradle
+++ b/designer_form/build.dev.gradle
@@ -26,7 +26,7 @@ sourceSets{
}
//获取什么分支名
-FileTree files =fileTree(dir:'./',include:'build.gradle')
+FileTree files =fileTree(dir:'./',include:'build.*.gradle')
def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\'))
buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\'))
def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1)
diff --git a/designer_form/build.gradle.bak b/designer_form/build.gradle.bak
deleted file mode 100644
index 474d4aca95..0000000000
--- a/designer_form/build.gradle.bak
+++ /dev/null
@@ -1,83 +0,0 @@
-
-apply plugin: 'java'
-tasks.withType(JavaCompile){
- options.encoding = 'UTF-8'
-}
-//指定构建的jdk版本
-sourceCompatibility=1.8
-//指定生成的jar包版本
-version='8.0'
-
-def srcDir="."
-
-
-//指明生成jar包的名字
-jar{
- baseName='fr-designer-report'
-}
-//源码所在位置
-sourceSets{
- main{
- java{
- srcDirs=["${srcDir}/src",
-"${srcDir}/../designer/src"]
- }
- }
-}
-
-//获取什么分支名
-FileTree files =fileTree(dir:'./',include:'build.gradle')
-def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\'))
-buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\'))
-def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1)
-//声明外部依赖
-dependencies{
-compile fileTree(dir:"../../../finereport-lib-stable${branchName}",include:'**/*.jar')
-compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar")
-
- testCompile 'junit:junit:4.12'
-}
-
-//指明无法编译文件所在路径
-def dataContent ={def dir ->
- copySpec{
- from ("${dir}"){
- exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html'
- }
- }
-}
-
-//将非.java文件复制到classes文件夹下 参与打包
-task copyFile(type:Copy,dependsOn:compileJava){
- copy{
- with dataContent.call("${srcDir}/src")
- with dataContent.call("${srcDir}/../designer/src")
- into ('build/classes/main')
- }
-
-}
-
-
-//压缩项目中的js文件
-task compressJS{
- ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){
- classpath {
-
- fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar')
- }
- }
- ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){
- fileset (dir:"${srcDir}/src"){
- include (name:'**/*.js')
- include (name:'**/*.css')
-
- }
- fileset (dir:"${srcDir}/../designer/src"){
- include (name:'**/*.js')
- include (name:'**/*.css')
- }
-
- }
-}
-jar.dependsOn compressJS
-
From 2325ca73fd6a3a175d4ec0148ef944af38e4096b Mon Sep 17 00:00:00 2001
From: xiaoxia
Date: Wed, 12 Oct 2016 00:17:50 +0800
Subject: [PATCH 04/18] rt
---
.../src/com/fr/design/mainframe/ShareWidgetPane.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java
index 7abfb6900a..79f15b3646 100644
--- a/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java
+++ b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java
@@ -13,15 +13,15 @@ import java.util.ArrayList;
* Created by xiaxiang on 2016/10/10.
*/
public class ShareWidgetPane extends JPanel {
- public ShareWidgetPane(ArrayList elCaseBindInfos) {
+ public ShareWidgetPane(ArrayList elCaseBindInfoList) {
this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// 设置面板的边框 ,距离上、左、下、右 的距离
- int rowCount = (elCaseBindInfos.size() + 1)/2;
+ int rowCount = (elCaseBindInfoList.size() + 1)/2;
this.setLayout(new GridLayout(rowCount, 2, 10, 10));
- for (ElCaseBindInfo rbModuleInfo : elCaseBindInfos) {
+ for (ElCaseBindInfo rbModuleInfo : elCaseBindInfoList) {
ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo);
this.add(widgetButton);
}
- if (elCaseBindInfos.size() == 1) {
+ if (elCaseBindInfoList.size() == 1) {
this.add(new JPanel());
}
From 760aff6304c5c5ccbcf44f0974eb2f45a9dd2ccd Mon Sep 17 00:00:00 2001
From: xiaoxia
Date: Wed, 12 Oct 2016 02:02:18 +0800
Subject: [PATCH 05/18] rt
---
.../com/fr/design/mainframe/widget/UITreeComboBox.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
index 4d92ccc264..dd2c8fa897 100644
--- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
+++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
@@ -31,11 +31,11 @@ public class UITreeComboBox extends JComboBox{
public UITreeComboBox(ComponentTree componentTree){
this.setTree(componentTree);
tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter());
- for(int i=0; i
Date: Wed, 12 Oct 2016 02:02:51 +0800
Subject: [PATCH 06/18] rt
---
.../src/com/fr/design/mainframe/widget/UITreeComboBox.java | 4 ----
1 file changed, 4 deletions(-)
diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
index dd2c8fa897..8bb921df4b 100644
--- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
+++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
@@ -31,10 +31,6 @@ public class UITreeComboBox extends JComboBox{
public UITreeComboBox(ComponentTree componentTree){
this.setTree(componentTree);
tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter());
-// for(int i=0; i
Date: Wed, 12 Oct 2016 09:20:56 +0800
Subject: [PATCH 07/18] rt
---
.../mainframe/widget/UITreeComboBox.java | 35 ++++++++-----------
1 file changed, 14 insertions(+), 21 deletions(-)
diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
index 8bb921df4b..81afb7cc8d 100644
--- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
+++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
@@ -31,6 +31,10 @@ public class UITreeComboBox extends JComboBox{
public UITreeComboBox(ComponentTree componentTree){
this.setTree(componentTree);
tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter());
+// for(int i=0; i
Date: Wed, 12 Oct 2016 09:31:06 +0800
Subject: [PATCH 08/18] rt
---
.../fr/design/mainframe/widget/UITreeComboBox.java | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
index 81afb7cc8d..7f55ddeafe 100644
--- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
+++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
@@ -123,22 +123,12 @@ public class UITreeComboBox extends JComboBox{
}
- public TreePath[] getSelectedTreePath() {
- XCreator[] creators = tree.getDesigner().getSelectionModel().getSelection().getSelectedCreators();
- TreePath[] paths = new TreePath[creators.length];
-
- for (int i = 0; i < paths.length; i++) {
- paths[i] = tree.buildTreePath(creators[i]);
- }
- return paths;
- }
-
private class TreeComboBoxDesignerEditAdapter implements DesignerEditListener {
@Override
public void fireCreatorModified(DesignerEvent evt) {
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED || evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) {
- TreePath[] paths = getSelectedTreePath();
+ TreePath[] paths = tree.getSelectedTreePath();
if (paths.length == 1) {
tree.setAndScrollSelectionPath(paths[0]);
From 0efb563d4ce847285c6c7fff0fa2fa897888f146 Mon Sep 17 00:00:00 2001
From: xiaoxia
Date: Wed, 12 Oct 2016 09:31:48 +0800
Subject: [PATCH 09/18] =?UTF-8?q?componenttree=E5=90=8E=E9=9D=A2=E8=BF=98?=
=?UTF-8?q?=E8=A6=81=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../fr/design/mainframe/ComponentTree.java | 182 +++++++++---------
1 file changed, 93 insertions(+), 89 deletions(-)
diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
index fb0586a693..0a268610ec 100644
--- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java
+++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
@@ -40,7 +40,7 @@ public class ComponentTree extends JTree {
TreePath[] paths = getSelectedTreePath();
addTreeSelectionListener(designer);
setSelectionPaths(paths);
-
+
designer.addDesignerEditListener(new TreeDesignerEditAdapter());
this.addMouseListener(new MouseAdapter() {
@@ -68,15 +68,19 @@ public class ComponentTree extends JTree {
setEditable(true);
}
+ public FormDesigner getDesigner() {
+ return designer;
+ }
+
/**
* 构造函数
- *
+ *
* @param designer 设计界面组件
* @param model 构造JTree的model
*/
public ComponentTree(FormDesigner designer,ComponentTreeModel model) {
- this(designer);
- this.setModel(model);
+ this(designer);
+ this.setModel(model);
}
@@ -96,17 +100,17 @@ public class ComponentTree extends JTree {
return super.isPathEditable(path);
}
- /**
- * 将值转换为文本
- * @param value 值
- * @param selected 是否选中
- * @param expanded 扩展
- * @param leaf 是否叶子
- * @param row 行
- * @param hasFocus 是否焦点
- *
- * @return 返回文本
- */
+ /**
+ * 将值转换为文本
+ * @param value 值
+ * @param selected 是否选中
+ * @param expanded 扩展
+ * @param leaf 是否叶子
+ * @param row 行
+ * @param hasFocus 是否焦点
+ *
+ * @return 返回文本
+ */
@Override
public String convertValueToText(Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
if (value != null && value instanceof XCreator) {
@@ -115,25 +119,25 @@ public class ComponentTree extends JTree {
return super.convertValueToText(value, selected, expanded, leaf, row, hasFocus);
}
}
-
+
public void setAndScrollSelectionPath(TreePath treepath) {
- setSelectionPath(treepath);
- scrollPathToVisible(treepath);
+ setSelectionPath(treepath);
+ scrollPathToVisible(treepath);
+ }
+
+ private void popupMenu(MouseEvent e) {
+ TreePath path = this.getSelectionPath();
+ if (path == null) {
+ return;
+ }
+ Component component = (Component) path.getLastPathComponent();
+ if (!(component instanceof XCreator)) {
+ return;
+ }
+ ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, (XCreator) component);
+ JPopupMenu menu = adapter.getContextPopupMenu(e);
+ menu.show(this, e.getX(), e.getY());
}
-
- private void popupMenu(MouseEvent e) {
- TreePath path = this.getSelectionPath();
- if (path == null) {
- return;
- }
- Component component = (Component) path.getLastPathComponent();
- if (!(component instanceof XCreator)) {
- return;
- }
- ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, (XCreator) component);
- JPopupMenu menu = adapter.getContextPopupMenu(e);
- menu.show(this, e.getX(), e.getY());
- }
/**
* 刷新
@@ -145,51 +149,51 @@ public class ComponentTree extends JTree {
-
- public TreePath[] getSelectedTreePath() {
- XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators();
- TreePath[] paths = new TreePath[creators.length];
-
- for (int i = 0; i < paths.length; i++) {
- paths[i] = buildTreePath(creators[i]);
- }
- return paths;
- }
-
- private class TreeDesignerEditAdapter implements DesignerEditListener {
-
- @Override
- public void fireCreatorModified(DesignerEvent evt) {
- if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
- TreePath[] paths = getSelectedTreePath();
-
- if (paths.length == 1) {
- setAndScrollSelectionPath(paths[0]);
- } else {
- setSelectionPaths(paths);
- }
- } else if(evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) {
- ComponentTree.this.refreshUI();
- TreePath[] paths = getSelectedTreePath();
-
- if (paths.length == 1) {
- setAndScrollSelectionPath(paths[0]);
- } else {
- setSelectionPaths(paths);
- }
- ComponentTree.this.repaint();
-
- } else {
- ComponentTree.this.refreshUI();
- ComponentTree.this.repaint();
- }
- }
-
- @Override
- public boolean equals(Object o) {
- return o.getClass() == this.getClass();
- }
- }
+
+ public TreePath[] getSelectedTreePath() {
+ XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators();
+ TreePath[] paths = new TreePath[creators.length];
+
+ for (int i = 0; i < paths.length; i++) {
+ paths[i] = buildTreePath(creators[i]);
+ }
+ return paths;
+ }
+
+ private class TreeDesignerEditAdapter implements DesignerEditListener {
+
+ @Override
+ public void fireCreatorModified(DesignerEvent evt) {
+ if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
+ TreePath[] paths = getSelectedTreePath();
+
+ if (paths.length == 1) {
+ setAndScrollSelectionPath(paths[0]);
+ } else {
+ setSelectionPaths(paths);
+ }
+ } else if(evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) {
+ ComponentTree.this.refreshUI();
+ TreePath[] paths = getSelectedTreePath();
+
+ if (paths.length == 1) {
+ setAndScrollSelectionPath(paths[0]);
+ } else {
+ setSelectionPaths(paths);
+ }
+ ComponentTree.this.repaint();
+
+ } else {
+ ComponentTree.this.refreshUI();
+ ComponentTree.this.repaint();
+ }
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return o.getClass() == this.getClass();
+ }
+ }
/**
@@ -211,11 +215,11 @@ public class ComponentTree extends JTree {
paths[i] = buildTreePath(searchList.get(i));
}
if(paths.length > 0) {
- setAndScrollSelectionPath(paths[0]);
+ setAndScrollSelectionPath(paths[0]);
} else {
- setSelectionPath();
+ setSelectionPath();
}
- return paths;
+ return paths;
}
@@ -248,7 +252,7 @@ public class ComponentTree extends JTree {
* 触发
*/
public void fireTreeChanged() {
- designer.refreshDesignerUI();
+ designer.refreshDesignerUI();
}
/**
@@ -267,14 +271,14 @@ public class ComponentTree extends JTree {
ArrayList path = new ArrayList();
Component parent = comp;
- while (parent != null) {
- XCreator creator = (XCreator) parent;
- path.add(0, parent);
- if (creator != comp ) {
- creator.notShowInComponentTree(path);
- }
- parent = parent.getParent();
- }
+ while (parent != null) {
+ XCreator creator = (XCreator) parent;
+ path.add(0, parent);
+ if (creator != comp ) {
+ creator.notShowInComponentTree(path);
+ }
+ parent = parent.getParent();
+ }
Object[] components = path.toArray();
return new TreePath(components);
}
From fc3b700db1da47f99e6178bf27a743cc1d95ad09 Mon Sep 17 00:00:00 2001
From: PanLi320 <854954082@qq.com>
Date: Wed, 12 Oct 2016 10:25:02 +0800
Subject: [PATCH 10/18] =?UTF-8?q?bugfix:QQ=E6=8E=88=E6=9D=83=E6=9C=AA?=
=?UTF-8?q?=E7=BB=91=E5=AE=9A=EF=BC=8C=E8=B6=85=E9=93=BE=E4=B8=A4=E6=AC=A1?=
=?UTF-8?q?=EF=BC=8C=E5=90=8C=E6=AD=A5=E7=9A=84url=EF=BC=8C=E6=9A=82?=
=?UTF-8?q?=E6=97=B6=E5=8E=BB=E6=8E=89=EF=BC=8C=E8=AE=BA=E5=9D=9B=E9=82=A3?=
=?UTF-8?q?=E8=BE=B9=E8=BF=98=E8=A6=81=E5=81=9A=E6=94=AF=E6=8C=81=E5=A4=84?=
=?UTF-8?q?=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../design/mainframe/bbs/UserInfoLabel.java | 5 +----
.../com/fr/design/extra/PluginWebBridge.java | 5 +----
.../com/fr/design/extra/QQLoginWebBridge.java | 19 -------------------
3 files changed, 2 insertions(+), 27 deletions(-)
diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java
index d0fe7dadba..460f758df6 100644
--- a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java
+++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java
@@ -284,10 +284,7 @@ public class UserInfoLabel extends UILabel{
public void mousePressed(MouseEvent e) {
if(StringUtils.isNotEmpty(userName)){
try {
- String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default") +
- "&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=" +
- "&username=" + DesignerEnvManager.getEnvManager().getBBSName() +
- "&password=" + DesignerEnvManager.getEnvManager().getBBSPassword();
+ String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default");
Desktop.getDesktop().browse(new URI(loginUrl));
} catch (Exception exp) {
FRContext.getLogger().info(exp.getMessage());
diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java
index b192873d8c..12c3e85c41 100644
--- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java
+++ b/designer_base/src/com/fr/design/extra/PluginWebBridge.java
@@ -379,10 +379,7 @@ public class PluginWebBridge {
*/
public void getPriviteMessage() {
try {
- String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default") +
- "&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=" +
- "&username=" + DesignerEnvManager.getEnvManager().getBBSName() +
- "&password=" + DesignerEnvManager.getEnvManager().getBBSPassword();
+ String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default");
Desktop.getDesktop().browse(new URI(loginUrl));
}catch (Exception exp) {
FRContext.getLogger().info(exp.getMessage());
diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java
index 140c89748e..d0bcc27e12 100644
--- a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java
+++ b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java
@@ -127,24 +127,5 @@ public class QQLoginWebBridge {
if (url.indexOf("qqLogin.html") > 0) {
return;
}
- if (Desktop.isDesktopSupported()) {
- try {
- //创建一个URI实例,注意不是URL
- URI uri = URI.create(url);
- //获取当前系统桌面扩展
- Desktop desktop = Desktop.getDesktop();
- //判断系统桌面是否支持要执行的功能
- if (desktop.isSupported(Desktop.Action.BROWSE)) {
- //获取系统默认浏览器打开链接
- desktop.browse(uri);
- }
- } catch (NullPointerException e) {
- //此为uri为空时抛出异常
- FRLogger.getLogger().error(e.getMessage());
- } catch (IOException e) {
- //此为无法获取系统默认浏览器
- FRLogger.getLogger().error(e.getMessage());
- }
- }
}
}
From a996143c18697dc0981714ebc53309a5263a1430 Mon Sep 17 00:00:00 2001
From: zhouping
Date: Wed, 12 Oct 2016 11:49:38 +0800
Subject: [PATCH 11/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=B2=E7=AA=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../layout/FRAbsoluteLayoutAdapter.java | 12 +-
.../designer/creator/XWAbsoluteLayout.java | 19 ++
.../FRAbsoluteLayoutPropertiesGroupModel.java | 184 +++++++++++++++++-
.../FRFitLayoutPropertiesGroupModel.java | 67 +++++--
.../properties/LayoutTypeRenderer.java | 14 ++
.../properties/LayoutTypeWrapper.java | 13 ++
.../items/FRFitConstraintsItems.java | 4 +-
.../properties/items/FRLayoutTypeItems.java | 16 ++
.../designer/treeview/ComponentTreeModel.java | 27 ++-
.../fr/design/gui/core/FormWidgetOption.java | 2 +-
.../fr/design/mainframe/ComponentTree.java | 9 +
.../design/mainframe/FormParaWidgetPane.java | 9 +-
.../widget/editors/LayoutTypeEditor.java | 15 ++
13 files changed, 360 insertions(+), 31 deletions(-)
create mode 100644 designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java
create mode 100644 designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java
create mode 100644 designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java
create mode 100644 designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java
diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
index 3c0f1155c6..8e0a725cd4 100644
--- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
+++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
@@ -12,6 +12,7 @@ import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.design.utils.ComponentUtils;
import com.fr.design.utils.gui.LayoutUtils;
+import com.fr.form.ui.container.WBodyLayoutType;
import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogger;
@@ -330,6 +331,15 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter {
@Override
public GroupModel getLayoutProperties() {
XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container;
- return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout);
+ if (xwAbsoluteLayout.toData().isAbsoluteLayoutAsBody()){
+ //如果body是绝对布局,那么获取原来自适应body的属性--布局类型
+ WBodyLayoutType layoutType = WBodyLayoutType.FIT;
+ if (container.getParent() != null) {
+ layoutType = ((XWFitLayout)container.getParent()).toData().getBodyLayoutType();
+ }
+ return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout, layoutType);
+ } else {
+ return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout);
+ }
}
}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java
index a1fc32c402..9ac9addc7f 100644
--- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java
+++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java
@@ -75,9 +75,17 @@ public class XWAbsoluteLayout extends XLayoutContainer {
xConnectorMap.put(connector, new XConnector(connector, this));
}
+ this.editable = widget.isAbsoluteLayoutAsBody();
+
initPercent();
}
+ public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize, boolean isAbsoluteLayoutAsBody) {
+ this(widget, initSize);
+ widget.setAbsoluteLayoutAsBody(isAbsoluteLayoutAsBody);
+ this.editable = isAbsoluteLayoutAsBody;
+ }
+
/**
* 初始化时默认的组件大小
*
@@ -443,4 +451,15 @@ public class XWAbsoluteLayout extends XLayoutContainer {
}
}
}
+
+ /**
+ * 设置布局是否可编辑,不可则显示编辑蒙层
+ * 假如是body的话,始终要能编辑,不会出现蒙层
+ *
+ * @param isEditable 可否编辑
+ */
+ @Override
+ public void setEditable(boolean isEditable) {
+ super.setEditable(toData().isAbsoluteLayoutAsBody() || isEditable);
+ }
}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java
index fc9c0985cd..f8b695a333 100644
--- a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java
+++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java
@@ -2,27 +2,40 @@ package com.fr.design.designer.properties;
import com.fr.design.beans.GroupModel;
import com.fr.design.designer.creator.XWAbsoluteLayout;
+import com.fr.design.designer.creator.XWFitLayout;
+import com.fr.design.mainframe.FormDesigner;
+import com.fr.design.mainframe.FormSelectionUtils;
+import com.fr.design.mainframe.WidgetPropertyPane;
import com.fr.design.mainframe.widget.editors.AbsoluteLayoutDirectionEditor;
import com.fr.design.mainframe.widget.editors.IntegerPropertyEditor;
+import com.fr.design.mainframe.widget.editors.LayoutTypeEditor;
import com.fr.design.mainframe.widget.editors.PropertyCellEditor;
+import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout;
+import com.fr.form.ui.container.WBodyLayoutType;
import com.fr.general.Inter;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
+import java.awt.*;
+import java.util.Arrays;
+import java.util.Comparator;
/**
* Created by zhouping on 2016/8/1.
*/
public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
-
private PropertyCellEditor editor;
private DefaultTableCellRenderer renderer;
private AbsoluteLayoutDirectionEditor stateEditor;
private AbsoluteStateRenderer stateRenderer;
private WAbsoluteLayout layout;
private XWAbsoluteLayout xwAbsoluteLayout;
+ private LayoutTypeEditor layoutTypeEditor;
+ private LayoutTypeRenderer layoutTypeRenderer;
+ //默认body是0,自适应布局;1,绝对布局.
+ private WBodyLayoutType layoutType = WBodyLayoutType.FIT;
public FRAbsoluteLayoutPropertiesGroupModel(XWAbsoluteLayout xwAbsoluteLayout){
this.xwAbsoluteLayout = xwAbsoluteLayout;
@@ -33,31 +46,65 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
stateRenderer = new AbsoluteStateRenderer();
}
+ public FRAbsoluteLayoutPropertiesGroupModel(XWAbsoluteLayout xwAbsoluteLayout, WBodyLayoutType layoutType){
+ this(xwAbsoluteLayout);
+ this.layoutTypeEditor = new LayoutTypeEditor();
+ this.layoutTypeRenderer = new LayoutTypeRenderer();
+ this.layoutType = layoutType;
+ }
+
/**
* 布局管理器自己的属性
*/
@Override
public String getGroupName() {
- return Inter.getLocText("FR-Designer-Widget_Area_Scaling");
+ return Inter.getLocText(layoutType == WBodyLayoutType.ABSOLUTE ? "FR-Designer_Attr_Layout" : "FR-Designer-Widget_Area_Scaling");
}
@Override
public int getRowCount() {
- return 1;
+ return layoutType == WBodyLayoutType.ABSOLUTE ? 2 : 1;
}
@Override
public TableCellRenderer getRenderer(int row) {
- return stateRenderer;
+ if (layoutType == WBodyLayoutType.ABSOLUTE) {
+ return row == 0 ? layoutTypeRenderer : stateRenderer;
+ }
+ else {
+ return stateRenderer;
+ }
}
@Override
public TableCellEditor getEditor(int row) {
- return stateEditor;
+ if (layoutType == WBodyLayoutType.ABSOLUTE) {
+ return row == 0 ? layoutTypeEditor : stateEditor;
+ }
+ else{
+ return stateEditor;
+ }
}
@Override
public Object getValue(int row, int column) {
+ if (layoutType == WBodyLayoutType.ABSOLUTE){
+ if (column == 0) {
+ switch (row) {
+ case 0:
+ return Inter.getLocText("FR-Designer_Attr_Layout_Type");
+ default:
+ return Inter.getLocText("FR-Designer-Widget_Scaling_Mode");
+ }
+ } else {
+ switch (row) {
+ case 0:
+ return layoutType.getTypeValue();
+ default:
+ return layout.getCompState();
+ }
+ }
+ }
if (column == 0) {
return Inter.getLocText("FR-Designer-Widget_Scaling_Mode");
} else {
@@ -67,6 +114,42 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
@Override
public boolean setValue(Object value, int row, int column) {
+ if (layoutType == WBodyLayoutType.ABSOLUTE){
+ int state = 0;
+ if(value instanceof Integer) {
+ state = (Integer)value;
+ }
+ if (column == 0 || state < 0) {
+ return false;
+ } else {
+ if (row == 0) {
+ if (state == WBodyLayoutType.FIT.getTypeValue()) {
+ XWFitLayout xfl = (XWFitLayout) xwAbsoluteLayout.getBackupParent();
+ Component[] components = xwAbsoluteLayout.getComponents();
+
+ Arrays.sort(components, new ComparatorComponentLocation());
+
+ xfl.getLayoutAdapter().removeBean(xwAbsoluteLayout, xwAbsoluteLayout.getWidth(), xwAbsoluteLayout.getHeight());
+ xfl.remove(xwAbsoluteLayout);
+ xfl.toData().setLayoutType(WBodyLayoutType.FIT);
+
+ for (Component comp : components) {
+ xfl.add(comp);
+ }
+ moveComponents2FitLayout(xfl, components);
+ FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner();
+ formDesigner.getSelectionModel().setSelectedCreators(
+ FormSelectionUtils.rebuildSelection(xfl, new Widget[]{xfl.toData()}));
+ return true;
+ }
+ }
+ if (row == 1) {
+ layout.setCompState(state);
+ return true;
+ }
+ return false;
+ }
+ }
int state = 0;
if(value instanceof Integer) {
state = (Integer)value;
@@ -91,4 +174,95 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
public boolean isEditable(int row) {
return true;
}
+
+ //把绝对布局中的元素按规则移动到自适应布局中
+ private void moveComponents2FitLayout(XWFitLayout xwFitLayout, Component[] components) {
+ int eachRowCount = 4;
+ if (components.length <= 1){
+ return;
+ }
+ int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight();
+ int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom();
+ int leftMargin = xwFitLayout.toData().getMargin().getLeft();
+ int topMargin = xwFitLayout.toData().getMargin().getTop();
+ int row = (components.length / eachRowCount) + (components.length % eachRowCount == 0 ? 0 : 1);
+ //最后一行的列数不定
+ int column = components.length % eachRowCount;
+ int componentWidth = layoutWidth / eachRowCount;
+ int componentHeight = layoutHeight / row;
+ for(int i = 0;i < row - 1;i++){
+ for(int j = 0;j < eachRowCount;j++){
+ components[eachRowCount * i + j].setBounds(
+ leftMargin + componentWidth * j,
+ topMargin + componentHeight * i,
+ j == eachRowCount - 1 ? layoutWidth - componentWidth * (eachRowCount-1) : componentWidth,
+ componentHeight
+ );
+ }
+ }
+ //最后一行列数是特殊的,要单独处理
+ int lastRowWidth = layoutWidth / column;
+ int lastRowHeight = layoutHeight - componentHeight * (row - 1);
+ for (int i = 0;i < column;i++) {
+ components[eachRowCount * (row - 1) + i].setBounds(
+ leftMargin + lastRowWidth * i,
+ topMargin + componentHeight * (row - 1),
+ i == column - 1 ? layoutWidth - lastRowWidth * (column-1) : lastRowWidth,
+ lastRowHeight
+ );
+ }
+ xwFitLayout.updateBoundsWidget();
+ }
+
+ private class ComponentLocationInfo{
+ private Component component;
+ private int horizontalNO;
+ private int verticalNO;
+
+ public ComponentLocationInfo(Component component, int horizontalNO, int verticalNO){
+ this.component = component;
+ this.horizontalNO = horizontalNO;
+ this.verticalNO = verticalNO;
+ }
+
+ public int getHorizontalNO() {
+ return this.horizontalNO;
+ }
+
+ public int getVerticalNO() {
+ return this.verticalNO;
+ }
+
+ public void setHorizontalNO(int horizontalNO){
+ this.horizontalNO = horizontalNO;
+ }
+
+ public void setVerticalNO(int verticalNO){
+ this.verticalNO = verticalNO;
+ }
+ }
+
+ //以组件的位置来确定先后顺序,y小的在前,x小的在前
+ private class ComparatorComponentLocation implements Comparator {
+ @Override
+ public int compare(Object o1, Object o2) {
+ if(((Component)o1).getY() < ((Component)o2).getY()){
+ return -1;
+ }
+ else if (((Component)o1).getY() > ((Component)o2).getY()) {
+ return 1;
+ }
+ else {
+ if (((Component)o1).getX() < ((Component)o2).getX()){
+ return -1;
+ }
+ else if (((Component)o1).getX() > ((Component)o2).getX()) {
+ return 1;
+ }
+ else{
+ return 0;
+ }
+ }
+ }
+ }
}
diff --git a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java
index 8a2f507936..25680581c0 100644
--- a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java
+++ b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java
@@ -4,16 +4,25 @@
package com.fr.design.designer.properties;
import com.fr.design.beans.GroupModel;
+import com.fr.design.designer.creator.XWAbsoluteLayout;
import com.fr.design.designer.creator.XWFitLayout;
+import com.fr.design.mainframe.FormDesigner;
+import com.fr.design.mainframe.FormSelectionUtils;
+import com.fr.design.mainframe.WidgetPropertyPane;
import com.fr.design.mainframe.widget.editors.FitLayoutDirectionEditor;
+import com.fr.design.mainframe.widget.editors.LayoutTypeEditor;
import com.fr.design.mainframe.widget.editors.IntegerPropertyEditor;
import com.fr.design.mainframe.widget.editors.PropertyCellEditor;
+import com.fr.form.ui.Widget;
+import com.fr.form.ui.container.WAbsoluteLayout;
+import com.fr.form.ui.container.WBodyLayoutType;
import com.fr.form.ui.container.WFitLayout;
import com.fr.general.Inter;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
+import java.awt.*;
/**
* 自适应布局自身的属性表
@@ -28,6 +37,8 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel {
private DefaultTableCellRenderer renderer;
private FitLayoutDirectionEditor stateEditor;
private FitStateRenderer stateRenderer;
+ private LayoutTypeEditor layoutTypeEditor;
+ private LayoutTypeRenderer layoutTypeRenderer;
private WFitLayout layout;
private XWFitLayout xfl;
@@ -38,6 +49,8 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel {
editor = new PropertyCellEditor(new IntegerPropertyEditor());
stateEditor = new FitLayoutDirectionEditor();
stateRenderer = new FitStateRenderer();
+ layoutTypeEditor = new LayoutTypeEditor();
+ layoutTypeRenderer = new LayoutTypeRenderer();
}
/**
@@ -45,31 +58,35 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel {
*/
@Override
public String getGroupName() {
- return Inter.getLocText("FR-Designer-Layout_Adaptive_Layout");
+ return Inter.getLocText("FR-Designer_Layout");
}
@Override
public int getRowCount() {
- return 2;
+ return 3;
}
@Override
public TableCellRenderer getRenderer(int row) {
switch (row) {
case 0:
- return renderer;
+ return layoutTypeRenderer;
+ case 1:
+ return stateRenderer;
default:
- return stateRenderer;
+ return renderer;
}
}
@Override
public TableCellEditor getEditor(int row) {
switch (row) {
- case 0:
- return editor;
+ case 0:
+ return layoutTypeEditor;
+ case 1:
+ return stateEditor;
default:
- return stateEditor;
+ return editor;
}
}
@@ -78,16 +95,20 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel {
if (column == 0) {
switch (row) {
case 0:
- return Inter.getLocText("FR-Designer_Component_Interval");
+ return Inter.getLocText("FR-Designer_Attr_Layout_Type");
+ case 1:
+ return Inter.getLocText("FR-Designer_Component_Scale");
default:
- return Inter.getLocText("FR-Designer_Component_Scale");
+ return Inter.getLocText("FR-Designer_Component_Interval");
}
} else {
switch (row) {
case 0:
- return layout.getCompInterval();
+ return layout.getBodyLayoutType().getTypeValue();
+ case 1:
+ return layout.getCompState();
default:
- return layout.getCompState();
+ return layout.getCompInterval();
}
}
}
@@ -101,13 +122,35 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel {
if (column == 0 || state < 0) {
return false;
} else {
- if (row ==0 && xfl.canAddInterval(state)) {
+ if (row == 2 && xfl.canAddInterval(state)) {
// 设置完间隔后,要同步处理界面组件,容器刷新后显示出对应效果
setLayoutGap(state);
return true;
}else if (row == 1) {
layout.setCompState(state);
return true;
+ }else if (row == 0) {
+ layout.setLayoutType(WBodyLayoutType.parse(state));
+ if (state == WBodyLayoutType.ABSOLUTE.getTypeValue()) {
+ WAbsoluteLayout wAbsoluteLayout = new WAbsoluteLayout("body");
+ wAbsoluteLayout.setCompState(WAbsoluteLayout.STATE_FIXED);
+ Component[] components = xfl.getComponents();
+ xfl.removeAll();
+ XWAbsoluteLayout xwAbsoluteLayout = new XWAbsoluteLayout(wAbsoluteLayout, new Dimension(0,0), true);
+ xfl.getLayoutAdapter().addBean(xwAbsoluteLayout, 0, 0);
+ for (Component component : components) {
+ xwAbsoluteLayout.add(component);
+ }
+ FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner();
+ formDesigner.getSelectionModel().setSelectedCreators(
+ FormSelectionUtils.rebuildSelection(xfl, new Widget[]{wAbsoluteLayout}));
+ }
+ else {
+ FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner();
+ formDesigner.getSelectionModel().setSelectedCreators(
+ FormSelectionUtils.rebuildSelection(xfl, new Widget[]{xfl.toData()}));
+ }
+ return true;
}
return false;
}
diff --git a/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java b/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java
new file mode 100644
index 0000000000..033552028b
--- /dev/null
+++ b/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java
@@ -0,0 +1,14 @@
+package com.fr.design.designer.properties;
+
+import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer;
+
+/**
+ * Created by zhouping on 2016/9/18.
+ */
+public class LayoutTypeRenderer extends EncoderCellRenderer {
+
+ public LayoutTypeRenderer() {
+ super(new LayoutTypeWrapper());
+ }
+
+}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java b/designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java
new file mode 100644
index 0000000000..4630fe784a
--- /dev/null
+++ b/designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java
@@ -0,0 +1,13 @@
+package com.fr.design.designer.properties;
+
+import com.fr.design.designer.properties.items.FRLayoutTypeItems;
+
+/**
+ * Created by zhouping on 2016/9/18.
+ */
+public class LayoutTypeWrapper extends ItemWrapper{
+
+ public LayoutTypeWrapper() {
+ super(new FRLayoutTypeItems());
+ }
+}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java b/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java
index 6ae6f22c8c..92e63bf1ad 100644
--- a/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java
+++ b/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java
@@ -13,8 +13,8 @@ import com.fr.general.Inter;
public class FRFitConstraintsItems implements ItemProvider{
public static final Item[] ITEMS = new Item[] {
- new Item(Inter.getLocText("Adaptive_Full_Area"), WFitLayout.STATE_FULL),
- new Item(Inter.getLocText("Adaptive_Original_Scale"), WFitLayout.STATE_ORIGIN)};
+ new Item(Inter.getLocText("FR-Designer_Attr_Bidirectional_Adaptive"), WFitLayout.STATE_FULL),
+ new Item(Inter.getLocText("FR_Designer_Attr_Horizontal_Adaptive"), WFitLayout.STATE_ORIGIN)};
public Item[] getItems() {
return ITEMS;
diff --git a/designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java b/designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java
new file mode 100644
index 0000000000..a19d975170
--- /dev/null
+++ b/designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java
@@ -0,0 +1,16 @@
+package com.fr.design.designer.properties.items;
+
+import com.fr.form.ui.container.WBodyLayoutType;
+
+/**
+ * Created by zhouping on 2016/9/18.
+ */
+public class FRLayoutTypeItems implements ItemProvider{
+ public static final Item[] ITEMS = new Item[] {
+ new Item(WBodyLayoutType.FIT.description(), WBodyLayoutType.FIT.getTypeValue()),
+ new Item(WBodyLayoutType.ABSOLUTE.description(), WBodyLayoutType.ABSOLUTE.getTypeValue())};
+
+ public Item[] getItems() {
+ return ITEMS;
+ }
+}
diff --git a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java
index f189bcada2..e94ea1ad05 100644
--- a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java
+++ b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java
@@ -10,11 +10,9 @@ import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import com.fr.base.FRContext;
+import com.fr.design.designer.creator.*;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.designer.beans.events.DesignerEvent;
-import com.fr.design.designer.creator.XCreator;
-import com.fr.design.designer.creator.XLayoutContainer;
-import com.fr.design.designer.creator.XWidgetCreator;
import com.fr.form.ui.Widget;
public class ComponentTreeModel implements TreeModel {
@@ -23,6 +21,8 @@ public class ComponentTreeModel implements TreeModel {
private Component root;
private FormDesigner designer;
+ private final int ABSOLUTE_AS_BODY_NOT_FOUND = -1;
+
public ComponentTreeModel(FormDesigner designer, Component root) {
this.designer = designer;
this.root = root;
@@ -38,6 +38,11 @@ public class ComponentTreeModel implements TreeModel {
if (parent != null && parent instanceof XLayoutContainer) {
XLayoutContainer xlayout = (XLayoutContainer) parent;
XCreator creator = xlayout.getXCreator(index);
+ //绝对布局作为body的时候不显示自适应布局父层
+ int absoluteBodyIndex = getAbsoluteBodyIndex(creator);
+ if (absoluteBodyIndex > ABSOLUTE_AS_BODY_NOT_FOUND){
+ return creator.getComponent(absoluteBodyIndex);
+ }
return creator.getXCreator();
}
return null;
@@ -135,4 +140,20 @@ public class ComponentTreeModel implements TreeModel {
FRContext.getLogger().error(e.getMessage(), e);
}
}
+
+ private int getAbsoluteBodyIndex(XCreator xCreator){
+ //绝对布局作为body,父层是自适应布局,找到绝对布局位于父层的index
+ int index = ABSOLUTE_AS_BODY_NOT_FOUND;
+ if (xCreator.acceptType(XWFitLayout.class)){
+ XWFitLayout bodyFitLayout = (XWFitLayout)xCreator;
+ for (int i = 0;i < bodyFitLayout.getXCreatorCount();i++){
+ //类型是绝对布局并且还是body
+ if (bodyFitLayout.getXCreator(i).acceptType(XWAbsoluteLayout.class)
+ && ((XWAbsoluteLayout)bodyFitLayout.getXCreator(i)).toData().isAbsoluteLayoutAsBody()){
+ index = i;
+ }
+ }
+ }
+ return index;
+ }
}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java
index 214d2cd679..b3fa73a26d 100644
--- a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java
+++ b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java
@@ -1 +1 @@
-package com.fr.design.gui.core;
import javax.swing.Icon;
import com.fr.base.BaseUtils;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WBorderLayout;
import com.fr.form.ui.container.WCardLayout;
import com.fr.form.ui.container.WFitLayout;
import com.fr.form.ui.container.WHorizontalBoxLayout;
import com.fr.form.ui.container.WParameterLayout;
import com.fr.form.ui.container.WVerticalBoxLayout;
import com.fr.general.Inter;
/**
* Author : Shockway
* Date: 13-6-17
* Time: 上午10:40
*/
public class FormWidgetOption extends WidgetOption {
/**
* 返回名字
* @return 名字
*/
@Override
public String optionName() {
return null;
}
/**
* 返回图标
* @return 图标
*/
@Override
public Icon optionIcon() {
return null;
}
/**
* 组件类
* @return 类
*/
@Override
public Class extends Widget> widgetClass() {
return null;
}
/**
* 返回组件
* @return 控件
*/
@Override
public Widget createWidget() {
return null;
}
/*
* 表单容器
*/
public static WidgetOption[] getFormContainerInstance() {
return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER,
CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER };
}
/**
* 表单工具栏上的布局
* @return 控件
*/
public static WidgetOption[] getFormLayoutInstance() {
return new WidgetOption[] {CARDLAYOUTCONTAINER, ABSOLUTELAYOUTCONTAINER};
}
public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_AbsoluteLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute_new.png"),
WAbsoluteLayout.class);
public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"),
WBorderLayout.class);
public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_CardLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"),
WCardLayout.class);
public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"),
WHorizontalBoxLayout.class);
public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"),
WVerticalBoxLayout.class);
public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"),
BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"),
WFitLayout.class);
public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"),
WParameterLayout.class);
public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"),
ElementCaseEditor.class);
}
\ No newline at end of file
+package com.fr.design.gui.core;
import javax.swing.Icon;
import com.fr.base.BaseUtils;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WBorderLayout;
import com.fr.form.ui.container.WCardLayout;
import com.fr.form.ui.container.WFitLayout;
import com.fr.form.ui.container.WHorizontalBoxLayout;
import com.fr.form.ui.container.WParameterLayout;
import com.fr.form.ui.container.WVerticalBoxLayout;
import com.fr.general.Inter;
/**
* Author : Shockway
* Date: 13-6-17
* Time: 上午10:40
*/
public class FormWidgetOption extends WidgetOption {
/**
* 返回名字
* @return 名字
*/
@Override
public String optionName() {
return null;
}
/**
* 返回图标
* @return 图标
*/
@Override
public Icon optionIcon() {
return null;
}
/**
* 组件类
* @return 类
*/
@Override
public Class extends Widget> widgetClass() {
return null;
}
/**
* 返回组件
* @return 控件
*/
@Override
public Widget createWidget() {
return null;
}
/*
* 表单容器
*/
public static WidgetOption[] getFormContainerInstance() {
return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER,
CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER };
}
/**
* 表单工具栏上的布局
* @return 控件
*/
public static WidgetOption[] getFormLayoutInstance() {
return new WidgetOption[] {CARDLAYOUTCONTAINER, ABSOLUTELAYOUTCONTAINER};
}
public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Layout_Block_Absolute"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute_new.png"),
WAbsoluteLayout.class);
public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"),
WBorderLayout.class);
public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Layout_Block_Tab"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"),
WCardLayout.class);
public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"),
WHorizontalBoxLayout.class);
public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"),
WVerticalBoxLayout.class);
public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"),
BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"),
WFitLayout.class);
public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"),
WParameterLayout.class);
public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter
.getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"),
ElementCaseEditor.class);
}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
index 0a268610ec..4cf0d2528c 100644
--- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java
+++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
@@ -18,6 +18,8 @@ import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XLayoutContainer;
+import com.fr.design.designer.creator.XWAbsoluteLayout;
+import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.designer.treeview.ComponentTreeCellRenderer;
import com.fr.design.designer.treeview.ComponentTreeModel;
import com.fr.stable.StringUtils;
@@ -277,6 +279,13 @@ public class ComponentTree extends JTree {
if (creator != comp ) {
creator.notShowInComponentTree(path);
}
+ //绝对布局作为body的时候不显示自适应布局父层
+ if (((XCreator) parent).acceptType(XWAbsoluteLayout.class)
+ && ((XCreator)parent.getParent()).acceptType(XWFitLayout.class)
+ && ((XWAbsoluteLayout)parent).toData().isAbsoluteLayoutAsBody()){
+ parent = parent.getParent().getParent();
+ continue;
+ }
parent = parent.getParent();
}
Object[] components = path.toArray();
diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java
index 8118d4da27..cb111bb929 100644
--- a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java
+++ b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java
@@ -94,12 +94,6 @@ public class FormParaWidgetPane extends JPanel{
private void initFormParaComponent() {
this.removeAll();
// 菜单中的布局先注释掉
-
- JPanel reportPane = new JPanel(new FlowLayout());
- reportPane.add(new ToolBarButton(FormWidgetOption.ELEMENTCASE));
- add(createNormalCombinationPane(reportPane,Inter.getLocText("FR-Designer-Form-ToolBar_Report")));
- add(createJSeparator());
-
JPanel paraPane = new JPanel(new FlowLayout());
ToolBarButton paraButton = new paraButton(FormWidgetOption.PARAMETERCONTAINER);
paraPane.add(paraButton);
@@ -111,7 +105,8 @@ public class FormParaWidgetPane extends JPanel{
for(WidgetOption option : loadLayoutOptions()){
layoutPane.add(new ToolBarButton(option));
}
- add(createNormalCombinationPane(layoutPane,Inter.getLocText("FR-Designer_Layout")));
+ layoutPane.add(new ToolBarButton(FormWidgetOption.ELEMENTCASE));
+ add(createNormalCombinationPane(layoutPane,Inter.getLocText("FR-Designer_Layout_Block_Blank")));
jSeparatorLayout = createJSeparator();
add(jSeparatorLayout);
diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java b/designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java
new file mode 100644
index 0000000000..05de57f52c
--- /dev/null
+++ b/designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java
@@ -0,0 +1,15 @@
+package com.fr.design.mainframe.widget.editors;
+
+import com.fr.design.designer.properties.EnumerationEditor;
+import com.fr.design.designer.properties.items.FRLayoutTypeItems;
+
+/**
+ * Created by zhouping on 2016/9/18.
+ */
+public class LayoutTypeEditor extends EnumerationEditor {
+
+ public LayoutTypeEditor() {
+ super(new FRLayoutTypeItems());
+ }
+
+}
\ No newline at end of file
From 74e8773a81c78181b50a6f9a0ede910c81a7347e Mon Sep 17 00:00:00 2001
From: zack
Date: Thu, 13 Oct 2016 10:07:45 +0800
Subject: [PATCH 12/18] =?UTF-8?q?dev=E6=89=93=E5=8C=85=E5=A4=B1=E8=B4=A5?=
=?UTF-8?q?=EF=BC=8C=E5=85=88=E6=8A=8Axcreator=E4=BC=A0=E4=B8=80=E4=B8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../fr/design/designer/creator/XCreator.java | 133 +++++++++++-------
1 file changed, 85 insertions(+), 48 deletions(-)
diff --git a/designer_form/src/com/fr/design/designer/creator/XCreator.java b/designer_form/src/com/fr/design/designer/creator/XCreator.java
index ab08de3fea..552402398a 100644
--- a/designer_form/src/com/fr/design/designer/creator/XCreator.java
+++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java
@@ -15,6 +15,7 @@ import com.fr.design.utils.gui.LayoutUtils;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WTitleLayout;
import com.fr.stable.StableUtils;
+import com.fr.stable.StringUtils;
import javax.swing.*;
import javax.swing.border.Border;
@@ -27,7 +28,7 @@ import java.util.List;
/**
* @author richer
* @since 6.5.3 com.fr.base.listener.OB的设计组件
- *
+ *
*/
public abstract class XCreator extends JPanel implements XComponent, XCreatorTools {
@@ -44,6 +45,8 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
// XCreator加入到某些XLayoutContainer中时,能调整宽度或者高度
private int[] directions;
private Rectangle backupBound;
+ private String shareId = StringUtils.EMPTY;//如果组件是共享的会有这个属性
+ private boolean isHelpBtnOnFocus = false;//焦点是否在帮助按钮上
public XCreator(Widget ob, Dimension initSize) {
this.data = ob;
@@ -83,7 +86,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
setSize(this.backupSize);
}
}
-
+
/**
* 备份当前大小
*/
@@ -113,76 +116,76 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public XLayoutContainer getTopLayout(){
return null;
}
-
+
/**
* 获取当前XCreator的一个封装父容器
- *
+ *
* @param widgetName 当前组件名
- *
+ *
* @return 封装的父容器
- *
+ *
*
* @date 2014-11-25-下午4:47:23
- *
+ *
*/
protected XLayoutContainer getCreatorWrapper(String widgetName){
return new XWTitleLayout();
}
-
+
/**
* 将当前对象添加到父容器中
- *
+ *
* @param parentPanel 父容器组件
- *
+ *
*
* @date 2014-11-25-下午4:57:55
- *
+ *
*/
- protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight){
+ protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight){
parentPanel.add(this, WTitleLayout.BODY);
}
-
+
/**
* 设置父容器的名字
- *
+ *
* @param parentPanel 当前父容器
* @param widgetName 当前控件名
- *
+ *
*
* @date 2014-11-27-上午9:47:00
- *
+ *
*/
protected void setWrapperName(XLayoutContainer parentPanel, String widgetName){
parentPanel.toData().setWidgetName(widgetName);
}
-
+
/**
* 初始化当前组件的父容器
* 大体分为三种: Scale缩放型, Title标题型, Border自定义标题栏
- *
+ *
* @param minHeight 最小高度
- *
+ *
* @return 父容器
- *
+ *
*
* @date 2014-11-25-下午5:15:23
- *
+ *
*/
public XLayoutContainer initCreatorWrapper(int minHeight){
XLayoutContainer parentPanel;
String widgetName = this.toData().getWidgetName();
parentPanel = this.getCreatorWrapper(widgetName);
-
+
int width = this.getWidth();
int height = this.getHeight();
-
+
parentPanel.setLocation(this.getX(), this.getY());
parentPanel.setSize(width, height);
setWrapperName(parentPanel, widgetName);
this.setLocation(0, 0);
this.addToWrapper(parentPanel, width, minHeight);
LayoutUtils.layoutRootContainer(parentPanel);
-
+
return parentPanel;
}
@@ -291,7 +294,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public Dimension getMinimumSize() {
return new Dimension(0, 0);
}
-
+
/**
* 是否支持切换到报表界面编辑
* @return 是则返回true
@@ -299,7 +302,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public boolean isReport(){
return false;
}
-
+
/**
* 该组件是否可以拖入参数面板
* @return 是则返回true
@@ -359,7 +362,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void setBackupBound(Rectangle rec) {
this.backupBound = rec;
}
-
+
/**
* 控件树不显示此组件
* @param path 控件树list
@@ -367,7 +370,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void notShowInComponentTree(ArrayList path) {
return;
}
-
+
/**
* 重置组件的名称
* @param name 名称
@@ -375,7 +378,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void resetCreatorName(String name) {
toData().setWidgetName(name);
}
-
+
/**
* 返回编辑的子组件,scale为其内部组件
* @return 组件
@@ -383,7 +386,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public XCreator getEditingChildCreator() {
return this;
}
-
+
/**
* 返回对应属性表的组件,scale和title返回其子组件
* @return 组件
@@ -391,7 +394,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public XCreator getPropertyDescriptorCreator() {
return this;
}
-
+
/**
* 更新子组件的Bound; 没有不处理
* @param minHeight 最小高度
@@ -399,7 +402,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void updateChildBound(int minHeight) {
return;
}
-
+
/**
* 是否作为控件树的叶子节点
* @return 是则返回true
@@ -407,7 +410,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public boolean isComponentTreeLeaf() {
return true;
}
-
+
/**
* 是否为sclae和title专属容器
* @return 是则返回true
@@ -415,7 +418,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public boolean isDedicateContainer() {
return false;
}
-
+
/**
* 是否接收这种类型
* @param acceptTypes 接收的类型
@@ -432,13 +435,13 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
/**
* 是否组件要缩放(自适应里部分组件需要, 如数字、文本、下拉框、下拉复选框、密码、下拉树、下拉复选树、日期)
- *
+ *
* @return 是则返回true
*/
public boolean shouldScaleCreator() {
return false;
}
-
+
/**
* 是否支持标题样式
* @return 默认false
@@ -446,10 +449,10 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public boolean hasTitleStyle() {
return false;
}
-
+
/**
* 响应点击事件
- *
+ *
* @param editingMouseListener 鼠标点击,位置处理器
* @param e 鼠标点击事件
*/
@@ -468,10 +471,10 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
}
}
}
-
+
/**
* 删除相关组件
- *
+ *
* @param creator 当前组件
* @param designer 表单设计器
*
@@ -479,17 +482,17 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void deleteRelatedComponent(XCreator creator,FormDesigner designer){
return;
}
-
+
/**
* 选择相关组件
- *
+ *
* @param creator 当前组件
- *
+ *
*/
public void seleteRelatedComponent(XCreator creator){
return;
}
-
+
/**
* 返回组件
* @return
@@ -498,7 +501,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public XCreator getXCreator(){
return this;
}
-
+
/**
* 按百分比调整组件
* @param percent 百分比
@@ -507,7 +510,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public void adjustCompSize(double percent){
return;
}
-
+
/**
* 返回一些需要的子组件
* @return 返回一些需要的子组件
@@ -516,11 +519,11 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public ArrayList> getTargetChildrenList(){
return new ArrayList();
}
-
+
public XLayoutContainer getOuterLayout(){
return this.getBackupParent();
}
-
+
/**
* 重新调整子组件宽度
* @param width 宽度
@@ -553,4 +556,38 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo
public boolean supportRenameInWidgetTree() {
return true;
}
+
+ /**
+ * 组件是否是共享组件
+ * @return 是否是共享组件
+ */
+ public boolean isShared() {
+ return StringUtils.isNotEmpty(shareId);
+ }
+
+ public void setShareId(String shareId) {
+ this.shareId = shareId;
+ }
+
+ public String getShareId() {
+ return shareId;
+ }
+
+ /**
+ * 焦点是否在帮助按钮上
+ * @return 焦点是否在帮助按钮上
+ */
+ public boolean isHelpBtnOnFocus() {
+ return isHelpBtnOnFocus;
+ }
+
+ public void setHelpBtnOnFocus(boolean helpBtnOnFocus) {
+ isHelpBtnOnFocus = helpBtnOnFocus;
+ }
+
+ /**
+ * 设置共享帮助信息
+ * @param msg 帮助信息
+ */
+ public void setSharedMsg(String msg){}
}
\ No newline at end of file
From 07b771326aabd4be5332135501d3b8c1cc25051f Mon Sep 17 00:00:00 2001
From: kerry
Date: Thu, 13 Oct 2016 10:54:10 +0800
Subject: [PATCH 13/18] =?UTF-8?q?REPORT-338=20=20=E6=97=A5=E6=96=87?=
=?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=EF=BC=8C=E8=B6=85=E9=93=BE=E6=8E=A5?=
=?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=A1=86=E9=80=89=E9=A1=B9=E6=97=A0=E6=95=88?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../hyperlink/AbstractHyperlinkPane.java | 2 +-
.../hyperlink/HyperlinkTargetFrame.java | 44 +++++++++++++++++++
2 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java
diff --git a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java
index bc54473291..6a236a4e34 100644
--- a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java
+++ b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java
@@ -127,7 +127,7 @@ public abstract class AbstractHyperlinkPane extends BasicBe
public void updateBean(T link) {
updateSubHyperlinkBean(link);
- link.setTargetFrame((String) targetFrameComboBox.getSelectedItem());
+ link.setTargetFrame(HyperlinkTargetFrame.getName(targetFrameComboBox.getSelectedIndex()));
link.setHeight(Utils.objectToNumber(heightTextFiled.getText(), false).intValue());
link.setWidth(Utils.objectToNumber(widthTextFiled.getText(), false).intValue());
}
diff --git a/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java
new file mode 100644
index 0000000000..56d590f039
--- /dev/null
+++ b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java
@@ -0,0 +1,44 @@
+package com.fr.design.hyperlink;
+
+/**
+ * Created by ibm on 2016/10/13.
+ */
+public enum HyperlinkTargetFrame {
+ BLANK_FRAME("_blank", 0), DIALOG_FRAME("_dialog", 1), SELF_FRAME("_self", 2);
+
+ private String name;
+ private int index;
+
+
+ HyperlinkTargetFrame(String name, int index) {
+ this.name = name;
+ this.index = index;
+ }
+
+ public static String getName(int index) {
+ for (HyperlinkTargetFrame hyperlinkTargetFrame : HyperlinkTargetFrame.values()) {
+ if (hyperlinkTargetFrame.getIndex() == index) {
+ return hyperlinkTargetFrame.name;
+ }
+ }
+ return null;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public void setIndex(int index) {
+ this.index = index;
+ }
+
+ public String getName() {
+ return name;
+
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
+
From e79268436682c6c45114f27157d5b4940e498053 Mon Sep 17 00:00:00 2001
From: kerry
Date: Thu, 13 Oct 2016 11:29:21 +0800
Subject: [PATCH 14/18] =?UTF-8?q?REPORT-338=20=E6=97=A5=E6=96=87=E8=AE=BE?=
=?UTF-8?q?=E8=AE=A1=E5=99=A8=EF=BC=8C=E8=B6=85=E9=93=BE=E6=8E=A5=E5=AF=B9?=
=?UTF-8?q?=E8=AF=9D=E6=A1=86=E9=80=89=E9=A1=B9=E6=97=A0=E6=95=88=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../fr/design/hyperlink/AbstractHyperlinkPane.java | 2 +-
.../fr/design/hyperlink/HyperlinkTargetFrame.java | 12 ++++++++----
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java
index 6a236a4e34..8a2773f58a 100644
--- a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java
+++ b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java
@@ -127,7 +127,7 @@ public abstract class AbstractHyperlinkPane extends BasicBe
public void updateBean(T link) {
updateSubHyperlinkBean(link);
- link.setTargetFrame(HyperlinkTargetFrame.getName(targetFrameComboBox.getSelectedIndex()));
+ link.setTargetFrame(HyperlinkTargetFrame.parse(targetFrameComboBox.getSelectedIndex()).getName());
link.setHeight(Utils.objectToNumber(heightTextFiled.getText(), false).intValue());
link.setWidth(Utils.objectToNumber(widthTextFiled.getText(), false).intValue());
}
diff --git a/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java
index 56d590f039..80e9f21a0a 100644
--- a/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java
+++ b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java
@@ -8,22 +8,26 @@ public enum HyperlinkTargetFrame {
private String name;
private int index;
-
+ private static HyperlinkTargetFrame[] arrayOfValues;
HyperlinkTargetFrame(String name, int index) {
this.name = name;
this.index = index;
}
- public static String getName(int index) {
+ public static HyperlinkTargetFrame parse(int index) {
+ if (arrayOfValues == null) {
+ arrayOfValues = HyperlinkTargetFrame.values();
+ }
for (HyperlinkTargetFrame hyperlinkTargetFrame : HyperlinkTargetFrame.values()) {
if (hyperlinkTargetFrame.getIndex() == index) {
- return hyperlinkTargetFrame.name;
+ return hyperlinkTargetFrame;
}
}
- return null;
+ return BLANK_FRAME;
}
+
public int getIndex() {
return index;
}
From 41a09a060ed5dc0e0a3a86cfc1d986fbcd6eb2ea Mon Sep 17 00:00:00 2001
From: zhouping
Date: Thu, 13 Oct 2016 14:20:26 +0800
Subject: [PATCH 15/18] =?UTF-8?q?REPORT-437=20=E8=A1=A8=E5=8D=95=E6=8A=A5?=
=?UTF-8?q?=E8=A1=A8=E5=9D=97=E7=BC=A9=E7=95=A5=E5=9B=BE,=20=E4=B8=8D?=
=?UTF-8?q?=E5=AD=98xml?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../design/designer/creator/XElementCase.java | 26 +++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java
index 474acfbb91..252ec35c78 100644
--- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java
+++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java
@@ -1,5 +1,6 @@
package com.fr.design.designer.creator;
+import com.fr.base.BaseUtils;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.designer.properties.mobile.ElementCasePropertyUI;
import com.fr.design.form.util.XCreatorConstants;
@@ -20,6 +21,7 @@ import com.fr.form.FormElementCaseProvider;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.general.Inter;
import com.fr.stable.ArrayUtils;
+import com.fr.stable.CoreGraphHelper;
import com.fr.stable.core.PropertyChangeAdapter;
import com.fr.stable.fun.FitProvider;
import com.fr.stable.fun.ReportFitAttrProvider;
@@ -35,6 +37,18 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
private UILabel imageLable;
private JPanel coverPanel;
private FormDesigner designer;
+ //缩略图
+ private BufferedImage thumbnailImage;
+ private static BufferedImage DEFAULT_BACKGROUND;
+
+ static{
+ try{
+ DEFAULT_BACKGROUND = BaseUtils.readImageWithCache("com/fr/base/images/report/elementcase.png");
+ }catch (Throwable e) {
+ //IBM jdk 1.5.0_22 并发下读取图片有时会异常(EOFException), 这个图片反正只有设计器用到, 捕获住
+ DEFAULT_BACKGROUND = CoreGraphHelper.createBufferedImage(0, 0);
+ }
+ }
public XElementCase(ElementCaseEditor widget, Dimension initSize) {
super(widget, initSize);
@@ -145,7 +159,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
*/
private UILabel initImageBackground(){
UILabel imageLable = new UILabel();
- BufferedImage image = toData().getECImage();
+ BufferedImage image = getThumbnailImage();
setLabelBackground(image, imageLable);
return imageLable;
@@ -222,10 +236,18 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
}
public void setBackground(BufferedImage image){
- toData().setECImage(image);
+ setThumbnailImage(image);
setEditorIcon(image);
}
+ private void setThumbnailImage(BufferedImage image) {
+ this.thumbnailImage = image;
+ }
+
+ private BufferedImage getThumbnailImage(){
+ return thumbnailImage == null ? DEFAULT_BACKGROUND : thumbnailImage;
+ }
+
private void setEditorIcon(BufferedImage image){
setLabelBackground(image, imageLable);
}
From d8022b8ad31e20f655de9e60b144e5fba7e0b274 Mon Sep 17 00:00:00 2001
From: zhouping
Date: Thu, 13 Oct 2016 15:29:49 +0800
Subject: [PATCH 16/18] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?=
=?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=9D=E5=A7=8B=E5=8C=96=E5=B8=83=E5=B1=80?=
=?UTF-8?q?=E6=94=B9=E5=8A=A8=E9=80=A0=E6=88=90=E7=9A=84npe=E9=97=AE?=
=?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
designer_form/src/com/fr/design/mainframe/ComponentTree.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
index 4cf0d2528c..2b490e8bef 100644
--- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java
+++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
@@ -281,6 +281,7 @@ public class ComponentTree extends JTree {
}
//绝对布局作为body的时候不显示自适应布局父层
if (((XCreator) parent).acceptType(XWAbsoluteLayout.class)
+ && (parent.getParent() != null)
&& ((XCreator)parent.getParent()).acceptType(XWFitLayout.class)
&& ((XWAbsoluteLayout)parent).toData().isAbsoluteLayoutAsBody()){
parent = parent.getParent().getParent();
From 8487130f901a86fadb35a86e903372249776e18d Mon Sep 17 00:00:00 2001
From: zhouping
Date: Fri, 14 Oct 2016 16:18:00 +0800
Subject: [PATCH 17/18] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20?=
=?UTF-8?q?=E6=97=A5=E6=96=87=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=AD=97=E4=BD=93?=
=?UTF-8?q?=E4=B8=8D=E7=94=A8=E6=98=8E=E6=9C=9D=E5=AD=97=E4=BD=93=E4=BA=86?=
=?UTF-8?q?=EF=BC=8C=E4=BB=8D=E6=97=A7=E7=94=A8=E5=9B=9E=E4=BB=A5=E5=89=8D?=
=?UTF-8?q?=E7=9A=84=E5=AE=8B=E4=BD=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/com/fr/design/utils/DesignUtils.java | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/designer_base/src/com/fr/design/utils/DesignUtils.java b/designer_base/src/com/fr/design/utils/DesignUtils.java
index d6a2ab8a58..8ed8aa6175 100644
--- a/designer_base/src/com/fr/design/utils/DesignUtils.java
+++ b/designer_base/src/com/fr/design/utils/DesignUtils.java
@@ -230,15 +230,12 @@ public class DesignUtils {
private static FRFont getCurrentLocaleFont(){
FRFont guiFRFont;
- Locale defaultLocale = FRContext.getLocale();
+ Locale defaultLocale = Locale.getDefault();
if (isDisplaySimSun(defaultLocale)) {
guiFRFont = getNamedFont("SimSun");
} else if(isDisplayDialog(defaultLocale)) {
guiFRFont = getNamedFont("Dialog");
- } else if(isDisplayJapaneseFont(defaultLocale)){
- //日文设计器默认用MS Mincho字体渲染
- guiFRFont = getNamedFont("MS Mincho");
} else {
guiFRFont = getNamedFont("Tahoma");
}
@@ -270,14 +267,11 @@ public class DesignUtils {
private static boolean isDisplaySimSun(Locale defaultLocale){
return ComparatorUtils.equals(defaultLocale, Locale.SIMPLIFIED_CHINESE);
}
-
- private static boolean isDisplayJapaneseFont(Locale defaultLocale){
- return ComparatorUtils.equals(defaultLocale, Locale.JAPANESE)
- || ComparatorUtils.equals(defaultLocale, Locale.JAPAN);
- }
private static boolean isDisplayDialog(Locale defaultLocale){
- return ComparatorUtils.equals(defaultLocale, Locale.TRADITIONAL_CHINESE)
+ return ComparatorUtils.equals(defaultLocale, Locale.TRADITIONAL_CHINESE)
+ || ComparatorUtils.equals(defaultLocale, Locale.JAPANESE)
+ || ComparatorUtils.equals(defaultLocale, Locale.JAPAN)
|| ComparatorUtils.equals(defaultLocale, Locale.KOREAN)
|| ComparatorUtils.equals(defaultLocale, Locale.KOREA);
}
From facf2abffe6f6e496c012deb2ced988e555145a2 Mon Sep 17 00:00:00 2001
From: zhouping
Date: Fri, 14 Oct 2016 19:09:52 +0800
Subject: [PATCH 18/18] =?UTF-8?q?REPORT-533=20=E8=A1=A8=E5=8D=95=E5=88=9D?=
=?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=B8=83=E5=B1=80=E6=96=B0=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=20bugfix:=201.=E6=8A=BD=E5=87=BA=E4=B8=80=E4=B8=AA=E7=B1=BBext?=
=?UTF-8?q?ends=20absolute=202.=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F=203.?=
=?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E5=B8=83=E5=B1=80=E7=9A=84=E6=B5=8B?=
=?UTF-8?q?=E8=AF=95bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/fr/design/images/control/combobox.png | Bin 0 -> 239 bytes
.../layout/FRAbsoluteBodyLayoutAdapter.java | 30 +++
.../layout/FRAbsoluteLayoutAdapter.java | 11 +-
.../designer/creator/XCreatorUtils.java | 1 +
.../creator/XWAbsoluteBodyLayout.java | 45 ++++
.../designer/creator/XWAbsoluteLayout.java | 24 +-
.../properties/AbsoluteStateRenderer.java | 5 +-
.../properties/BodyLayoutAttrRenderer.java | 23 ++
...bsoluteBodyLayoutPropertiesGroupModel.java | 239 ++++++++++++++++++
.../FRAbsoluteLayoutPropertiesGroupModel.java | 192 +-------------
.../FRFitLayoutPropertiesGroupModel.java | 15 +-
.../designer/properties/FitStateRenderer.java | 4 +-
.../properties/LayoutTypeRenderer.java | 4 +-
.../designer/treeview/ComponentTreeModel.java | 3 +-
.../fr/design/mainframe/ComponentTree.java | 10 +-
15 files changed, 367 insertions(+), 239 deletions(-)
create mode 100644 designer_base/src/com/fr/design/images/control/combobox.png
create mode 100644 designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteBodyLayoutAdapter.java
create mode 100644 designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
create mode 100644 designer_form/src/com/fr/design/designer/properties/BodyLayoutAttrRenderer.java
create mode 100644 designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java
diff --git a/designer_base/src/com/fr/design/images/control/combobox.png b/designer_base/src/com/fr/design/images/control/combobox.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e5be84e739758339f3e4a78284817e69b35eef9
GIT binary patch
literal 239
zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1SHi;jSd1S#^NA%Cx&(BWL^R}Ea{HEjtmSN
z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!V2h`VV~BE*UX=K^^j>|LJudX>AEX3y4ZCHHr}1R9|J
f>*#F#3o``eUn}XqJE0v6bPt24tDnm{r-UW|{Fzu!
literal 0
HcmV?d00001
diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteBodyLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteBodyLayoutAdapter.java
new file mode 100644
index 0000000000..e06bb74634
--- /dev/null
+++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteBodyLayoutAdapter.java
@@ -0,0 +1,30 @@
+package com.fr.design.designer.beans.adapters.layout;
+
+import com.fr.design.beans.GroupModel;
+import com.fr.design.designer.creator.XLayoutContainer;
+import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
+import com.fr.design.designer.creator.XWAbsoluteLayout;
+import com.fr.design.designer.creator.XWFitLayout;
+import com.fr.design.designer.properties.FRAbsoluteBodyLayoutPropertiesGroupModel;
+import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel;
+import com.fr.form.ui.container.WBodyLayoutType;
+
+/**
+ * Created by zhouping on 2016/10/14.
+ */
+public class FRAbsoluteBodyLayoutAdapter extends FRAbsoluteLayoutAdapter {
+ public FRAbsoluteBodyLayoutAdapter(XLayoutContainer container) {
+ super(container);
+ }
+
+ @Override
+ public GroupModel getLayoutProperties() {
+ XWAbsoluteBodyLayout xwAbsoluteBodyLayout = (XWAbsoluteBodyLayout) container;
+ //如果body是绝对布局,那么获取原来自适应body的属性--布局类型
+ WBodyLayoutType layoutType = WBodyLayoutType.FIT;
+ if (container.getParent() != null) {
+ layoutType = ((XWFitLayout)container.getParent()).toData().getBodyLayoutType();
+ }
+ return new FRAbsoluteBodyLayoutPropertiesGroupModel(xwAbsoluteBodyLayout, layoutType);
+ }
+}
diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
index 8e0a725cd4..c49ecf0f38 100644
--- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
+++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java
@@ -331,15 +331,6 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter {
@Override
public GroupModel getLayoutProperties() {
XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container;
- if (xwAbsoluteLayout.toData().isAbsoluteLayoutAsBody()){
- //如果body是绝对布局,那么获取原来自适应body的属性--布局类型
- WBodyLayoutType layoutType = WBodyLayoutType.FIT;
- if (container.getParent() != null) {
- layoutType = ((XWFitLayout)container.getParent()).toData().getBodyLayoutType();
- }
- return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout, layoutType);
- } else {
- return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout);
- }
+ return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout);
}
}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/designer/creator/XCreatorUtils.java b/designer_form/src/com/fr/design/designer/creator/XCreatorUtils.java
index 19cfe2d8d1..e0fc683552 100644
--- a/designer_form/src/com/fr/design/designer/creator/XCreatorUtils.java
+++ b/designer_form/src/com/fr/design/designer/creator/XCreatorUtils.java
@@ -77,6 +77,7 @@ public class XCreatorUtils {
xLayoutMap.put(WAbsoluteLayout.class, XWAbsoluteLayout.class);
xLayoutMap.put(WParameterLayout.class, XWParameterLayout.class);
+ xLayoutMap.put(WAbsoluteBodyLayout.class, XWAbsoluteBodyLayout.class);
xLayoutMap.put(WAbsoluteLayout.class, XWAbsoluteLayout.class);
xLayoutMap.put(WHorizontalBoxLayout.class, XWHorizontalBoxLayout.class);
xLayoutMap.put(WBorderLayout.class, XWBorderLayout.class);
diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
new file mode 100644
index 0000000000..b9fea0a0bf
--- /dev/null
+++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java
@@ -0,0 +1,45 @@
+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.form.ui.container.WAbsoluteBodyLayout;
+
+import java.awt.*;
+
+/**
+ * Created by zhouping on 2016/10/14.
+ * 用作body的绝对布局
+ */
+public class XWAbsoluteBodyLayout extends XWAbsoluteLayout {
+ public XWAbsoluteBodyLayout(WAbsoluteBodyLayout widget, Dimension initSize) {
+ super(widget, initSize);
+ this.editable = true;
+ }
+
+ /**
+ * 返回对应的widget容器
+ *
+ * @return 返回WAbsoluteLayout
+ */
+ @Override
+ public WAbsoluteBodyLayout toData() {
+ return (WAbsoluteBodyLayout)data;
+ }
+
+ @Override
+ public LayoutAdapter getLayoutAdapter() {
+ return new FRAbsoluteBodyLayoutAdapter(this);
+ }
+
+
+
+ /**
+ * 假如是body的话,始终要能编辑,不会出现蒙层
+ *
+ * @param isEditable 可否编辑
+ */
+ @Override
+ public void setEditable(boolean isEditable) {
+ super.setEditable(true);
+ }
+}
diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java
index 9ac9addc7f..210343f8ed 100644
--- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java
+++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java
@@ -75,15 +75,7 @@ public class XWAbsoluteLayout extends XLayoutContainer {
xConnectorMap.put(connector, new XConnector(connector, this));
}
- this.editable = widget.isAbsoluteLayoutAsBody();
-
- initPercent();
- }
-
- public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize, boolean isAbsoluteLayoutAsBody) {
- this(widget, initSize);
- widget.setAbsoluteLayoutAsBody(isAbsoluteLayoutAsBody);
- this.editable = isAbsoluteLayoutAsBody;
+ initPercent(widget);
}
/**
@@ -97,13 +89,14 @@ public class XWAbsoluteLayout extends XLayoutContainer {
}
//根据屏幕大小来确定显示的百分比, 1440*900默认100%, 1366*768缩放90%
- private void initPercent(){
+ private void initPercent(WAbsoluteLayout widget){
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension scrnsize = toolkit.getScreenSize();
double screenValue = FRScreen.getByDimension(scrnsize).getValue();
if(screenValue != FormArea.DEFAULT_SLIDER){
this.setContainerPercent(screenValue / FormArea.DEFAULT_SLIDER);
}
+ widget.setDesigningResolution(scrnsize);
}
/**
@@ -451,15 +444,4 @@ public class XWAbsoluteLayout extends XLayoutContainer {
}
}
}
-
- /**
- * 设置布局是否可编辑,不可则显示编辑蒙层
- * 假如是body的话,始终要能编辑,不会出现蒙层
- *
- * @param isEditable 可否编辑
- */
- @Override
- public void setEditable(boolean isEditable) {
- super.setEditable(toData().isAbsoluteLayoutAsBody() || isEditable);
- }
}
\ No newline at end of file
diff --git a/designer_form/src/com/fr/design/designer/properties/AbsoluteStateRenderer.java b/designer_form/src/com/fr/design/designer/properties/AbsoluteStateRenderer.java
index 4cc770eec8..e58c7f8abd 100644
--- a/designer_form/src/com/fr/design/designer/properties/AbsoluteStateRenderer.java
+++ b/designer_form/src/com/fr/design/designer/properties/AbsoluteStateRenderer.java
@@ -1,11 +1,10 @@
package com.fr.design.designer.properties;
-import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer;
-
/**
* Created by zhouping on 2016/8/1.
*/
-public class AbsoluteStateRenderer extends EncoderCellRenderer {
+public class AbsoluteStateRenderer extends BodyLayoutAttrRenderer {
+
public AbsoluteStateRenderer() {
super(new AbsoluteStateWrapper());
}
diff --git a/designer_form/src/com/fr/design/designer/properties/BodyLayoutAttrRenderer.java b/designer_form/src/com/fr/design/designer/properties/BodyLayoutAttrRenderer.java
new file mode 100644
index 0000000000..be05e45986
--- /dev/null
+++ b/designer_form/src/com/fr/design/designer/properties/BodyLayoutAttrRenderer.java
@@ -0,0 +1,23 @@
+package com.fr.design.designer.properties;
+
+import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer;
+import com.fr.general.IOUtils;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+/**
+ * Created by zhouping on 2016/10/14.
+ */
+public class BodyLayoutAttrRenderer extends EncoderCellRenderer {
+ public BodyLayoutAttrRenderer(Encoder encoder) {
+ super(encoder);
+ }
+
+ @Override
+ public void paint(Graphics g) {
+ super.paint(g);
+ BufferedImage image = IOUtils.readImage("com/fr/design/images/control/combobox.png");
+ g.drawImage(image, getWidth() - image.getWidth(), 0, image.getWidth(), image.getHeight(), null, this);
+ }
+}
diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java
new file mode 100644
index 0000000000..1a7ab03d3f
--- /dev/null
+++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java
@@ -0,0 +1,239 @@
+package com.fr.design.designer.properties;
+
+import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
+import com.fr.design.designer.creator.XWFitLayout;
+import com.fr.design.mainframe.FormDesigner;
+import com.fr.design.mainframe.FormSelectionUtils;
+import com.fr.design.mainframe.WidgetPropertyPane;
+import com.fr.design.mainframe.widget.editors.LayoutTypeEditor;
+import com.fr.design.utils.gui.LayoutUtils;
+import com.fr.form.ui.Widget;
+import com.fr.form.ui.container.WBodyLayoutType;
+import com.fr.general.FRScreen;
+import com.fr.general.Inter;
+
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import java.awt.*;
+import java.awt.geom.Arc2D;
+import java.util.Arrays;
+import java.util.Comparator;
+
+/**
+ * Created by zhouping on 2016/10/14.
+ */
+public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPropertiesGroupModel {
+ private LayoutTypeEditor layoutTypeEditor;
+ private LayoutTypeRenderer layoutTypeRenderer;
+ //默认body是0,自适应布局;1,绝对布局.
+ private WBodyLayoutType layoutType = WBodyLayoutType.ABSOLUTE;
+ public FRAbsoluteBodyLayoutPropertiesGroupModel(XWAbsoluteBodyLayout xwAbsoluteBodyLayout) {
+ super(xwAbsoluteBodyLayout);
+ }
+
+ public FRAbsoluteBodyLayoutPropertiesGroupModel(XWAbsoluteBodyLayout xwAbsoluteBodyLayout, WBodyLayoutType layoutType){
+ this(xwAbsoluteBodyLayout);
+ this.layoutTypeEditor = new LayoutTypeEditor();
+ this.layoutTypeRenderer = new LayoutTypeRenderer();
+ this.layoutType = layoutType;
+ }
+
+ /**
+ * 布局管理器自己的属性
+ */
+ @Override
+ public String getGroupName() {
+ return Inter.getLocText("FR-Designer_Attr_Layout");
+ }
+
+ @Override
+ public int getRowCount() {
+ return 2;
+ }
+
+ @Override
+ public TableCellRenderer getRenderer(int row) {
+ return row == 0 ? layoutTypeRenderer : stateRenderer;
+ }
+
+ @Override
+ public TableCellEditor getEditor(int row) {
+ return row == 0 ? layoutTypeEditor : stateEditor;
+ }
+
+ @Override
+ public Object getValue(int row, int column) {
+ if (column == 0) {
+ switch (row) {
+ case 0:
+ return Inter.getLocText("FR-Designer_Attr_Layout_Type");
+ default:
+ return Inter.getLocText("FR-Designer-Widget_Scaling_Mode");
+ }
+ } else {
+ switch (row) {
+ case 0:
+ return layoutType.getTypeValue();
+ default:
+ return layout.getCompState();
+ }
+ }
+ }
+
+ @Override
+ public boolean setValue(Object value, int row, int column) {
+ if (layoutType == WBodyLayoutType.ABSOLUTE){
+ int state = 0;
+ if(value instanceof Integer) {
+ state = (Integer)value;
+ }
+ if (column == 0 || state < 0) {
+ return false;
+ } else {
+ if (row == 0) {
+ if (state == WBodyLayoutType.FIT.getTypeValue()) {
+ XWFitLayout xfl = (XWFitLayout) xwAbsoluteLayout.getBackupParent();
+ Component[] components = xwAbsoluteLayout.getComponents();
+
+ Arrays.sort(components, new ComparatorComponentLocation());
+
+ xfl.getLayoutAdapter().removeBean(xwAbsoluteLayout, xwAbsoluteLayout.getWidth(), xwAbsoluteLayout.getHeight());
+ xfl.remove(xwAbsoluteLayout);
+ xfl.toData().setLayoutType(WBodyLayoutType.FIT);
+
+ for (Component comp : components) {
+ xfl.add(comp);
+ }
+ moveComponents2FitLayout(xfl, components);
+ FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner();
+ formDesigner.getSelectionModel().setSelectedCreators(
+ FormSelectionUtils.rebuildSelection(xfl, new Widget[]{xfl.toData()}));
+ xfl.convert();
+ LayoutUtils.layoutContainer(xfl);
+ xfl.adjustCreatorsWhileSlide(xfl.getContainerPercent() - 1.0);
+ return true;
+ }
+ }
+ if (row == 1) {
+ layout.setCompState(state);
+ return true;
+ }
+ return false;
+ }
+ }
+ int state = 0;
+ if(value instanceof Integer) {
+ state = (Integer)value;
+ }
+ if (column == 0 || state < 0) {
+ return false;
+ } else {
+ if (row == 0) {
+ layout.setCompState(state);
+ return true;
+ }
+ return false;
+ }
+ }
+
+ /**
+ * 是否可编辑
+ * @param row 行
+ * @return 否
+ */
+ @Override
+ public boolean isEditable(int row) {
+ return true;
+ }
+
+ //把绝对布局中的元素按规则移动到自适应布局中
+ private void moveComponents2FitLayout(XWFitLayout xwFitLayout, Component[] components) {
+ int eachRowCount = 4;
+ if (components.length <= 1){
+ return;
+ }
+ int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight();
+ int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom();
+ int leftMargin = xwFitLayout.toData().getMargin().getLeft();
+ int topMargin = xwFitLayout.toData().getMargin().getTop();
+ int row = (components.length / eachRowCount) + (components.length % eachRowCount == 0 ? 0 : 1);
+ //最后一行的列数不定
+ int column = components.length % eachRowCount == 0 ? eachRowCount : components.length % eachRowCount;
+ int componentWidth = layoutWidth / eachRowCount;
+ int componentHeight = layoutHeight / row;
+ for(int i = 0;i < row - 1;i++){
+ for(int j = 0;j < eachRowCount;j++){
+ components[eachRowCount * i + j].setBounds(
+ leftMargin + componentWidth * j,
+ topMargin + componentHeight * i,
+ j == eachRowCount - 1 ? layoutWidth - componentWidth * (eachRowCount - 1) : componentWidth,
+ componentHeight
+ );
+ }
+ }
+ //最后一行列数是特殊的,要单独处理
+ int lastRowWidth = layoutWidth / column;
+ int lastRowHeight = layoutHeight - componentHeight * (row - 1);
+ for (int i = 0;i < column;i++) {
+ components[eachRowCount * (row - 1) + i].setBounds(
+ leftMargin + lastRowWidth * i,
+ topMargin + componentHeight * (row - 1),
+ i == column - 1 ? layoutWidth - lastRowWidth * (column - 1) : lastRowWidth,
+ lastRowHeight
+ );
+ }
+ xwFitLayout.updateBoundsWidget();
+ }
+
+ private class ComponentLocationInfo{
+ private Component component;
+ private int horizontalNO;
+ private int verticalNO;
+
+ public ComponentLocationInfo(Component component, int horizontalNO, int verticalNO){
+ this.component = component;
+ this.horizontalNO = horizontalNO;
+ this.verticalNO = verticalNO;
+ }
+
+ public int getHorizontalNO() {
+ return this.horizontalNO;
+ }
+
+ public int getVerticalNO() {
+ return this.verticalNO;
+ }
+
+ public void setHorizontalNO(int horizontalNO){
+ this.horizontalNO = horizontalNO;
+ }
+
+ public void setVerticalNO(int verticalNO){
+ this.verticalNO = verticalNO;
+ }
+ }
+
+ //以组件的位置来确定先后顺序,y小的在前,x小的在前
+ private class ComparatorComponentLocation implements Comparator {
+ @Override
+ public int compare(Object o1, Object o2) {
+ if(((Component)o1).getY() < ((Component)o2).getY()){
+ return -1;
+ }
+ else if (((Component)o1).getY() > ((Component)o2).getY()) {
+ return 1;
+ }
+ else {
+ if (((Component)o1).getX() < ((Component)o2).getX()){
+ return -1;
+ }
+ else if (((Component)o1).getX() > ((Component)o2).getX()) {
+ return 1;
+ }
+ else{
+ return 0;
+ }
+ }
+ }
+ }
+}
diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java
index f8b695a333..66540fe068 100644
--- a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java
+++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java
@@ -2,40 +2,27 @@ package com.fr.design.designer.properties;
import com.fr.design.beans.GroupModel;
import com.fr.design.designer.creator.XWAbsoluteLayout;
-import com.fr.design.designer.creator.XWFitLayout;
-import com.fr.design.mainframe.FormDesigner;
-import com.fr.design.mainframe.FormSelectionUtils;
-import com.fr.design.mainframe.WidgetPropertyPane;
import com.fr.design.mainframe.widget.editors.AbsoluteLayoutDirectionEditor;
import com.fr.design.mainframe.widget.editors.IntegerPropertyEditor;
-import com.fr.design.mainframe.widget.editors.LayoutTypeEditor;
import com.fr.design.mainframe.widget.editors.PropertyCellEditor;
-import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout;
-import com.fr.form.ui.container.WBodyLayoutType;
import com.fr.general.Inter;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
-import java.awt.*;
-import java.util.Arrays;
-import java.util.Comparator;
/**
* Created by zhouping on 2016/8/1.
*/
public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
+
private PropertyCellEditor editor;
private DefaultTableCellRenderer renderer;
- private AbsoluteLayoutDirectionEditor stateEditor;
- private AbsoluteStateRenderer stateRenderer;
- private WAbsoluteLayout layout;
- private XWAbsoluteLayout xwAbsoluteLayout;
- private LayoutTypeEditor layoutTypeEditor;
- private LayoutTypeRenderer layoutTypeRenderer;
- //默认body是0,自适应布局;1,绝对布局.
- private WBodyLayoutType layoutType = WBodyLayoutType.FIT;
+ protected AbsoluteLayoutDirectionEditor stateEditor;
+ protected AbsoluteStateRenderer stateRenderer;
+ protected WAbsoluteLayout layout;
+ protected XWAbsoluteLayout xwAbsoluteLayout;
public FRAbsoluteLayoutPropertiesGroupModel(XWAbsoluteLayout xwAbsoluteLayout){
this.xwAbsoluteLayout = xwAbsoluteLayout;
@@ -46,65 +33,31 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
stateRenderer = new AbsoluteStateRenderer();
}
- public FRAbsoluteLayoutPropertiesGroupModel(XWAbsoluteLayout xwAbsoluteLayout, WBodyLayoutType layoutType){
- this(xwAbsoluteLayout);
- this.layoutTypeEditor = new LayoutTypeEditor();
- this.layoutTypeRenderer = new LayoutTypeRenderer();
- this.layoutType = layoutType;
- }
-
/**
* 布局管理器自己的属性
*/
@Override
public String getGroupName() {
- return Inter.getLocText(layoutType == WBodyLayoutType.ABSOLUTE ? "FR-Designer_Attr_Layout" : "FR-Designer-Widget_Area_Scaling");
+ return Inter.getLocText("FR-Designer-Widget_Area_Scaling");
}
@Override
public int getRowCount() {
- return layoutType == WBodyLayoutType.ABSOLUTE ? 2 : 1;
+ return 1;
}
@Override
public TableCellRenderer getRenderer(int row) {
- if (layoutType == WBodyLayoutType.ABSOLUTE) {
- return row == 0 ? layoutTypeRenderer : stateRenderer;
- }
- else {
- return stateRenderer;
- }
+ return stateRenderer;
}
@Override
public TableCellEditor getEditor(int row) {
- if (layoutType == WBodyLayoutType.ABSOLUTE) {
- return row == 0 ? layoutTypeEditor : stateEditor;
- }
- else{
- return stateEditor;
- }
+ return stateEditor;
}
@Override
public Object getValue(int row, int column) {
- if (layoutType == WBodyLayoutType.ABSOLUTE){
- if (column == 0) {
- switch (row) {
- case 0:
- return Inter.getLocText("FR-Designer_Attr_Layout_Type");
- default:
- return Inter.getLocText("FR-Designer-Widget_Scaling_Mode");
- }
- } else {
- switch (row) {
- case 0:
- return layoutType.getTypeValue();
- default:
- return layout.getCompState();
- }
- }
- }
if (column == 0) {
return Inter.getLocText("FR-Designer-Widget_Scaling_Mode");
} else {
@@ -114,42 +67,6 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
@Override
public boolean setValue(Object value, int row, int column) {
- if (layoutType == WBodyLayoutType.ABSOLUTE){
- int state = 0;
- if(value instanceof Integer) {
- state = (Integer)value;
- }
- if (column == 0 || state < 0) {
- return false;
- } else {
- if (row == 0) {
- if (state == WBodyLayoutType.FIT.getTypeValue()) {
- XWFitLayout xfl = (XWFitLayout) xwAbsoluteLayout.getBackupParent();
- Component[] components = xwAbsoluteLayout.getComponents();
-
- Arrays.sort(components, new ComparatorComponentLocation());
-
- xfl.getLayoutAdapter().removeBean(xwAbsoluteLayout, xwAbsoluteLayout.getWidth(), xwAbsoluteLayout.getHeight());
- xfl.remove(xwAbsoluteLayout);
- xfl.toData().setLayoutType(WBodyLayoutType.FIT);
-
- for (Component comp : components) {
- xfl.add(comp);
- }
- moveComponents2FitLayout(xfl, components);
- FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner();
- formDesigner.getSelectionModel().setSelectedCreators(
- FormSelectionUtils.rebuildSelection(xfl, new Widget[]{xfl.toData()}));
- return true;
- }
- }
- if (row == 1) {
- layout.setCompState(state);
- return true;
- }
- return false;
- }
- }
int state = 0;
if(value instanceof Integer) {
state = (Integer)value;
@@ -174,95 +91,4 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel {
public boolean isEditable(int row) {
return true;
}
-
- //把绝对布局中的元素按规则移动到自适应布局中
- private void moveComponents2FitLayout(XWFitLayout xwFitLayout, Component[] components) {
- int eachRowCount = 4;
- if (components.length <= 1){
- return;
- }
- int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight();
- int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom();
- int leftMargin = xwFitLayout.toData().getMargin().getLeft();
- int topMargin = xwFitLayout.toData().getMargin().getTop();
- int row = (components.length / eachRowCount) + (components.length % eachRowCount == 0 ? 0 : 1);
- //最后一行的列数不定
- int column = components.length % eachRowCount;
- int componentWidth = layoutWidth / eachRowCount;
- int componentHeight = layoutHeight / row;
- for(int i = 0;i < row - 1;i++){
- for(int j = 0;j < eachRowCount;j++){
- components[eachRowCount * i + j].setBounds(
- leftMargin + componentWidth * j,
- topMargin + componentHeight * i,
- j == eachRowCount - 1 ? layoutWidth - componentWidth * (eachRowCount-1) : componentWidth,
- componentHeight
- );
- }
- }
- //最后一行列数是特殊的,要单独处理
- int lastRowWidth = layoutWidth / column;
- int lastRowHeight = layoutHeight - componentHeight * (row - 1);
- for (int i = 0;i < column;i++) {
- components[eachRowCount * (row - 1) + i].setBounds(
- leftMargin + lastRowWidth * i,
- topMargin + componentHeight * (row - 1),
- i == column - 1 ? layoutWidth - lastRowWidth * (column-1) : lastRowWidth,
- lastRowHeight
- );
- }
- xwFitLayout.updateBoundsWidget();
- }
-
- private class ComponentLocationInfo{
- private Component component;
- private int horizontalNO;
- private int verticalNO;
-
- public ComponentLocationInfo(Component component, int horizontalNO, int verticalNO){
- this.component = component;
- this.horizontalNO = horizontalNO;
- this.verticalNO = verticalNO;
- }
-
- public int getHorizontalNO() {
- return this.horizontalNO;
- }
-
- public int getVerticalNO() {
- return this.verticalNO;
- }
-
- public void setHorizontalNO(int horizontalNO){
- this.horizontalNO = horizontalNO;
- }
-
- public void setVerticalNO(int verticalNO){
- this.verticalNO = verticalNO;
- }
- }
-
- //以组件的位置来确定先后顺序,y小的在前,x小的在前
- private class ComparatorComponentLocation implements Comparator {
- @Override
- public int compare(Object o1, Object o2) {
- if(((Component)o1).getY() < ((Component)o2).getY()){
- return -1;
- }
- else if (((Component)o1).getY() > ((Component)o2).getY()) {
- return 1;
- }
- else {
- if (((Component)o1).getX() < ((Component)o2).getX()){
- return -1;
- }
- else if (((Component)o1).getX() > ((Component)o2).getX()) {
- return 1;
- }
- else{
- return 0;
- }
- }
- }
- }
}
diff --git a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java
index 25680581c0..f6b8ccaf22 100644
--- a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java
+++ b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java
@@ -4,7 +4,7 @@
package com.fr.design.designer.properties;
import com.fr.design.beans.GroupModel;
-import com.fr.design.designer.creator.XWAbsoluteLayout;
+import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormSelectionUtils;
@@ -14,6 +14,7 @@ import com.fr.design.mainframe.widget.editors.LayoutTypeEditor;
import com.fr.design.mainframe.widget.editors.IntegerPropertyEditor;
import com.fr.design.mainframe.widget.editors.PropertyCellEditor;
import com.fr.form.ui.Widget;
+import com.fr.form.ui.container.WAbsoluteBodyLayout;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WBodyLayoutType;
import com.fr.form.ui.container.WFitLayout;
@@ -132,18 +133,18 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel {
}else if (row == 0) {
layout.setLayoutType(WBodyLayoutType.parse(state));
if (state == WBodyLayoutType.ABSOLUTE.getTypeValue()) {
- WAbsoluteLayout wAbsoluteLayout = new WAbsoluteLayout("body");
- wAbsoluteLayout.setCompState(WAbsoluteLayout.STATE_FIXED);
+ WAbsoluteBodyLayout wAbsoluteBodyLayout = new WAbsoluteBodyLayout("body");
+ wAbsoluteBodyLayout.setCompState(WAbsoluteLayout.STATE_FIXED);
Component[] components = xfl.getComponents();
xfl.removeAll();
- XWAbsoluteLayout xwAbsoluteLayout = new XWAbsoluteLayout(wAbsoluteLayout, new Dimension(0,0), true);
- xfl.getLayoutAdapter().addBean(xwAbsoluteLayout, 0, 0);
+ XWAbsoluteBodyLayout xwAbsoluteBodyLayout = new XWAbsoluteBodyLayout(wAbsoluteBodyLayout, new Dimension(0,0));
+ xfl.getLayoutAdapter().addBean(xwAbsoluteBodyLayout, 0, 0);
for (Component component : components) {
- xwAbsoluteLayout.add(component);
+ xwAbsoluteBodyLayout.add(component);
}
FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner();
formDesigner.getSelectionModel().setSelectedCreators(
- FormSelectionUtils.rebuildSelection(xfl, new Widget[]{wAbsoluteLayout}));
+ FormSelectionUtils.rebuildSelection(xfl, new Widget[]{wAbsoluteBodyLayout}));
}
else {
FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner();
diff --git a/designer_form/src/com/fr/design/designer/properties/FitStateRenderer.java b/designer_form/src/com/fr/design/designer/properties/FitStateRenderer.java
index dfaa1939b6..933c0d17ce 100644
--- a/designer_form/src/com/fr/design/designer/properties/FitStateRenderer.java
+++ b/designer_form/src/com/fr/design/designer/properties/FitStateRenderer.java
@@ -3,13 +3,11 @@
*/
package com.fr.design.designer.properties;
-import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer;
-
/**
* @author jim
* @date 2014-7-31
*/
-public class FitStateRenderer extends EncoderCellRenderer{
+public class FitStateRenderer extends BodyLayoutAttrRenderer{
/**
* @param encoder
diff --git a/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java b/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java
index 033552028b..4061245d75 100644
--- a/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java
+++ b/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java
@@ -1,11 +1,9 @@
package com.fr.design.designer.properties;
-import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer;
-
/**
* Created by zhouping on 2016/9/18.
*/
-public class LayoutTypeRenderer extends EncoderCellRenderer {
+public class LayoutTypeRenderer extends BodyLayoutAttrRenderer {
public LayoutTypeRenderer() {
super(new LayoutTypeWrapper());
diff --git a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java
index e94ea1ad05..c39ea73b51 100644
--- a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java
+++ b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java
@@ -148,8 +148,7 @@ public class ComponentTreeModel implements TreeModel {
XWFitLayout bodyFitLayout = (XWFitLayout)xCreator;
for (int i = 0;i < bodyFitLayout.getXCreatorCount();i++){
//类型是绝对布局并且还是body
- if (bodyFitLayout.getXCreator(i).acceptType(XWAbsoluteLayout.class)
- && ((XWAbsoluteLayout)bodyFitLayout.getXCreator(i)).toData().isAbsoluteLayoutAsBody()){
+ if (bodyFitLayout.getXCreator(i).acceptType(XWAbsoluteBodyLayout.class)){
index = i;
}
}
diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
index 2b490e8bef..cc242f3695 100644
--- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java
+++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java
@@ -16,10 +16,7 @@ import com.fr.design.designer.beans.AdapterBus;
import com.fr.design.designer.beans.ComponentAdapter;
import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent;
-import com.fr.design.designer.creator.XCreator;
-import com.fr.design.designer.creator.XLayoutContainer;
-import com.fr.design.designer.creator.XWAbsoluteLayout;
-import com.fr.design.designer.creator.XWFitLayout;
+import com.fr.design.designer.creator.*;
import com.fr.design.designer.treeview.ComponentTreeCellRenderer;
import com.fr.design.designer.treeview.ComponentTreeModel;
import com.fr.stable.StringUtils;
@@ -280,10 +277,9 @@ public class ComponentTree extends JTree {
creator.notShowInComponentTree(path);
}
//绝对布局作为body的时候不显示自适应布局父层
- if (((XCreator) parent).acceptType(XWAbsoluteLayout.class)
+ if (((XCreator) parent).acceptType(XWAbsoluteBodyLayout.class)
&& (parent.getParent() != null)
- && ((XCreator)parent.getParent()).acceptType(XWFitLayout.class)
- && ((XWAbsoluteLayout)parent).toData().isAbsoluteLayoutAsBody()){
+ && ((XCreator)parent.getParent()).acceptType(XWFitLayout.class)){
parent = parent.getParent().getParent();
continue;
}