From 6f98b52383e12824f55628e769d41eba7255d68b Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Tue, 5 Jun 2018 14:26:10 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-8353=209.0=20bug=20=E5=8A=9F=E8=83=BDpat?= =?UTF-8?q?ch=E5=88=B010?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/FormCreatorDropTarget.java | 24 ++++--- .../mainframe/FormWidgetDetailPane.java | 22 +------ .../src/com/fr/design/mainframe/JForm.java | 10 +-- .../design/mainframe/ShareWidgetButton.java | 63 ++++++++++++++----- .../fr/design/mainframe/ShareWidgetPane.java | 6 +- .../designer/component/PaddingBoundPane.java | 7 +-- .../mainframe/CellElementPropertyPane.java | 20 +++--- 7 files changed, 91 insertions(+), 61 deletions(-) diff --git a/designer-form/src/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer-form/src/com/fr/design/mainframe/FormCreatorDropTarget.java index f2760f424..24cc147d9 100644 --- a/designer-form/src/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer-form/src/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -8,21 +8,31 @@ import com.fr.design.designer.beans.HoverPainter; import com.fr.design.designer.beans.Painter; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.models.AddingModel; -import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +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.XWParameterLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.icon.IconPathConstants; import com.fr.design.utils.ComponentUtils; +import com.fr.form.share.SharableEditorProvider; import com.fr.form.share.ShareLoader; -import com.fr.form.ui.ElCaseBindInfo; import com.fr.form.ui.ElementCaseEditor; -import com.fr.form.ui.SharableElementCaseEditor; +import com.fr.form.ui.SharableWidgetBindInfo; import com.fr.form.ui.Widget; import com.fr.general.Inter; import com.fr.stable.Constants; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JWindow; +import java.awt.Color; +import java.awt.Component; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; @@ -84,8 +94,8 @@ public class FormCreatorDropTarget extends DropTarget { Widget widget = (addingXCreator.getTopLayout() != null) ? (addingXCreator.getTopLayout().toData()) : addingXCreator.toData(); if (addingXCreator.isShared()) { String shareId = addingXCreator.getShareId(); - SharableElementCaseEditor sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId); - ElCaseBindInfo bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId); + SharableEditorProvider sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId); + SharableWidgetBindInfo bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId); if (sharableEditor != null && bindInfo != null) { Map tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource()); //合并数据集之后,可能会有数据集名称变化,做一下联动 diff --git a/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java index b83603a71..1285b7115 100644 --- a/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -3,17 +3,15 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ibutton.UIHeadGroup; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icontainer.UIScrollPane; 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.SharableWidgetBindInfo; import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.SiteCenter; -import com.fr.log.FineLoggerFactory; import com.fr.share.ShareConstants; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; @@ -42,7 +40,7 @@ public class FormWidgetDetailPane extends FormDockView{ private UIScrollPane downPane; private JPanel reuWidgetPanel; private UIComboBox comboBox; - private ElCaseBindInfo[] elCaseBindInfoList; + private SharableWidgetBindInfo[] elCaseBindInfoList; private UIButton deleteButton; private UIButton resetButton; private JPanel editPanel; @@ -119,21 +117,7 @@ public class FormWidgetDetailPane extends FormDockView{ initReuWidgetPanel(); initMenuPanel(); - card = new CardLayout(); - tabbedPane = new JPanel(); - tabbedPane.setLayout(card); - tabbedPane.add(REPORT_TAB, reuWidgetPanel); - tabbedPane.add(CHART_TAB, new JPanel()); - UIHeadGroup tabsHeaderIconPane = new UIHeadGroup(new String[] {REPORT_TAB, CHART_TAB}) { - @Override - public void tabChanged(int index) { - card.show(tabbedPane, labelButtonList.get(index).getText()); - } - }; - tabsHeaderIconPane.setNeedLeftRightOutLine(false); - - add(tabsHeaderIconPane, BorderLayout.NORTH); - add(tabbedPane, BorderLayout.CENTER); + add(reuWidgetPanel, BorderLayout.CENTER); } diff --git a/designer-form/src/com/fr/design/mainframe/JForm.java b/designer-form/src/com/fr/design/mainframe/JForm.java index 8897dfb78..4f1e45053 100644 --- a/designer-form/src/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/com/fr/design/mainframe/JForm.java @@ -557,9 +557,9 @@ public class JForm extends JTemplate implements BaseJForm { @Override protected void applyUndoState(FormUndoState u) { try { - //JForm的target重置 - this.setTarget((Form) u.getForm().clone()); if (this.index == FORM_TAB) { + //JForm的target重置 + this.setTarget((Form) u.getForm().clone()); JForm.this.refreshRoot(); this.formDesign.getArea().setAreaSize(u.getAreaSize(), u.getHorizontalValue(), u.getVerticalValue(), u.getWidthValue(), u.getHeightValue(), u.getSlideValue()); //撤销的时候要重新选择的body布局 @@ -567,9 +567,12 @@ public class JForm extends JTemplate implements BaseJForm { formDesign.getRootComponent() == selectedBodyLayout() ? u.getSelectWidgets() : new Widget[]{selectedBodyLayout().toData()})); refreshToolArea(); } else { + // 只在报表块里撤销是不需要修改外部form对象的, 因为编辑的是当前报表块. + // 修改了JForm的Target需要同步修改formDesign的Target. + Form undoForm = (Form) u.getForm().clone(); String widgetName = this.formDesign.getElementCaseContainerName(); //这儿太坑了,u.getForm() 与 getTarget内容不一样 - FormElementCaseProvider dataTable = getTarget().getElementCaseByName(widgetName); + FormElementCaseProvider dataTable = undoForm.getElementCaseByName(widgetName); this.reportComposite.setSelectedWidget(dataTable); //下面这句话是防止撤销之后直接退出编辑再编辑撤销的东西会回来,因为撤销不会保存EC formDesign.setElementCase(dataTable); @@ -583,7 +586,6 @@ public class JForm extends JTemplate implements BaseJForm { } else { this.undoState = u; } - } @Override diff --git a/designer-form/src/com/fr/design/mainframe/ShareWidgetButton.java b/designer-form/src/com/fr/design/mainframe/ShareWidgetButton.java index 1c0e8603f..d6d9f307a 100644 --- a/designer-form/src/com/fr/design/mainframe/ShareWidgetButton.java +++ b/designer-form/src/com/fr/design/mainframe/ShareWidgetButton.java @@ -1,24 +1,44 @@ package com.fr.design.mainframe; -import com.fr.base.*; +import com.fr.base.BaseUtils; +import com.fr.base.iofileattr.SharableAttrMark; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.gui.ilable.UILabel; -import com.fr.share.ShareConstants; import com.fr.form.share.ShareLoader; -import com.fr.form.ui.ElCaseBindInfo; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.SharableWidgetBindInfo; import com.fr.form.ui.Widget; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; +import com.fr.share.ShareConstants; import com.fr.stable.StringUtils; -import javax.swing.*; import javax.swing.Icon; -import java.awt.*; +import javax.swing.ImageIcon; +import javax.swing.JComponent; +import javax.swing.JPanel; +import java.awt.AlphaComposite; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Composite; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.LayoutManager; +import java.awt.Rectangle; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; -import java.awt.dnd.*; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragSource; +import java.awt.dnd.DragSourceAdapter; +import java.awt.dnd.DragSourceDragEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; @@ -31,7 +51,8 @@ import java.io.Serializable; * Time: 16:14 */ public class ShareWidgetButton extends JPanel implements MouseListener, MouseMotionListener, Serializable { - private ElCaseBindInfo bindInfo; + private static final Dimension TAB_DEFAULT_SIZE = new Dimension(500, 300); + private SharableWidgetBindInfo bindInfo; private MouseEvent lastPressEvent; private JPanel reportPane; private boolean isEdit; @@ -50,7 +71,7 @@ public class ShareWidgetButton extends JPanel implements MouseListener, MouseMot } }; - public ShareWidgetButton(ElCaseBindInfo bindInfo) { + public ShareWidgetButton(SharableWidgetBindInfo bindInfo) { this.bindInfo = bindInfo; this.setPreferredSize(new Dimension(108, 68)); initUI(); @@ -127,11 +148,11 @@ public class ShareWidgetButton extends JPanel implements MouseListener, MouseMot }; } - public ElCaseBindInfo getBindInfo() { + public SharableWidgetBindInfo getBindInfo() { return bindInfo; } - public void setBindInfo(ElCaseBindInfo bindInfo) { + public void setBindInfo(SharableWidgetBindInfo bindInfo) { this.bindInfo = bindInfo; } @@ -194,13 +215,21 @@ public class ShareWidgetButton extends JPanel implements MouseListener, MouseMot } 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); + if (creatorSource != null) { + ((AbstractBorderStyleWidget)creatorSource).addWidgetAttrMark(new SharableAttrMark(true)); + //tab布局WCardMainBorderLayout通过反射出来的大小是960*480 + XCreator xCreator = null; + if (creatorSource instanceof WCardMainBorderLayout) { + xCreator = XCreatorUtils.createXCreator(creatorSource, TAB_DEFAULT_SIZE); + } else { + xCreator = XCreatorUtils.createXCreator(creatorSource); + } + xCreator.setBackupBound(new Rectangle(no.getBindInfo().getWidth(), no.getBindInfo().getHeight())); + xCreator.setShareId(shareId); + WidgetToolBarPane.getTarget().startDraggingBean(xCreator); + lastPressEvent = null; + this.setBorder(null); + } } } diff --git a/designer-form/src/com/fr/design/mainframe/ShareWidgetPane.java b/designer-form/src/com/fr/design/mainframe/ShareWidgetPane.java index c5659d9bc..32ce586c7 100644 --- a/designer-form/src/com/fr/design/mainframe/ShareWidgetPane.java +++ b/designer-form/src/com/fr/design/mainframe/ShareWidgetPane.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe; -import com.fr.form.ui.ElCaseBindInfo; +import com.fr.form.ui.SharableWidgetBindInfo; import javax.swing.*; import java.awt.*; @@ -12,12 +12,12 @@ import java.awt.*; */ public class ShareWidgetPane extends JPanel { - public ShareWidgetPane(ElCaseBindInfo[] elCaseBindInfoList, boolean isEdit) { + public ShareWidgetPane(SharableWidgetBindInfo[] elCaseBindInfoList, boolean isEdit) { this.setBorder(BorderFactory.createEmptyBorder(10, 3, 0, 0));// 设置面板的边框 ,距离上、左、下、右 的距离 if (elCaseBindInfoList != null) { int rowCount = (elCaseBindInfoList.length + 1) / 2; this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 10)); - for (ElCaseBindInfo rbModuleInfo : elCaseBindInfoList) { + for (SharableWidgetBindInfo rbModuleInfo : elCaseBindInfoList) { ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo); widgetButton.setElementCaseEdit(isEdit); this.add(widgetButton); diff --git a/designer-form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java b/designer-form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java index 21dcb4b6e..f41be3c07 100644 --- a/designer-form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java +++ b/designer-form/src/com/fr/design/widget/ui/designer/component/PaddingBoundPane.java @@ -7,8 +7,8 @@ import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.form.ui.AbstractMarginWidget; import com.fr.form.ui.PaddingMargin; +import com.fr.form.ui.RichStyleWidgetProvider; import com.fr.general.Inter; import javax.swing.BorderFactory; @@ -74,8 +74,7 @@ public class PaddingBoundPane extends BasicPane{ return panel; } - - public void update(AbstractMarginWidget marginWidget) { + public void update(RichStyleWidgetProvider marginWidget) { marginWidget.setMargin(new PaddingMargin((int)top.getValue(), (int)left.getValue(), (int)bottom.getValue(), (int)right.getValue() )); } @@ -83,7 +82,7 @@ public class PaddingBoundPane extends BasicPane{ return "PaddingBoundPane"; } - public void populate(AbstractMarginWidget marginWidget) { + public void populate(RichStyleWidgetProvider marginWidget) { PaddingMargin paddingMargin = marginWidget.getMargin(); top.setValue(paddingMargin.getTop()); bottom.setValue(paddingMargin.getBottom()); diff --git a/designer-realize/src/com/fr/design/mainframe/CellElementPropertyPane.java b/designer-realize/src/com/fr/design/mainframe/CellElementPropertyPane.java index 8514e73e1..68b1134f7 100644 --- a/designer-realize/src/com/fr/design/mainframe/CellElementPropertyPane.java +++ b/designer-realize/src/com/fr/design/mainframe/CellElementPropertyPane.java @@ -3,11 +3,8 @@ */ package com.fr.design.mainframe; -import java.awt.*; - -import javax.swing.*; - import com.fr.base.BaseUtils; +import com.fr.design.fun.BackgroundQuickUIProvider; import com.fr.design.fun.CellAttributeProvider; import com.fr.design.fun.PresentKindProvider; import com.fr.design.gui.frpane.UITitlePanel; @@ -28,6 +25,13 @@ import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.Elem; import com.fr.report.elementcase.TemplateElementCase; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Dimension; + /** * 所有组件一次全部加载,不存在延迟加载。 原因:设计器打开第一张模板的时候,会初始化许多许多东西。这个过程需要很长时间(快的3-5s)。 @@ -53,9 +57,11 @@ public class CellElementPropertyPane extends DockingView { @Override public boolean accept(PluginContext context) { - - return context.contain(PluginModule.ExtraDesign, PresentKindProvider.MARK_STRING) || - context.contain(PluginModule.ExtraDesign, CellAttributeProvider.MARK_STRING); + + return context.contain(PluginModule.ExtraDesign, BackgroundQuickUIProvider.MARK_STRING) + || context.contain(PluginModule.ExtraDesign, PresentKindProvider.MARK_STRING) + || context.contain(PluginModule.ExtraDesign, CellAttributeProvider.MARK_STRING); + } }); }