diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java index c1afbe137f..72e30df2c1 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java @@ -52,8 +52,8 @@ public class JDBCDefPane extends JPanel { public static final String DRIVER_TYPE = "driver_type"; public static final String USER_NAME = "user_name"; private static final String OTHER_DB = "Others"; - private static final Pattern ORACLE_URL = Pattern.compile("^jdbc:oracle:thin:@[/]*([-0-9a-zA-Z_\\.]+)(:([0-9]+|port))?([:/](.*))?.*", Pattern.CASE_INSENSITIVE); - private static final Pattern GENERAL_URL = Pattern.compile("^jdbc:(mysql|sqlserver|db2|derby|postgresql|inceptor|inceptor2|hive2)://([-0-9a-zA-Z_\\.]+)(:([0-9]+|port))?((/|;DatabaseName=)(.*))?.*", Pattern.CASE_INSENSITIVE); + private static final Pattern ORACLE_URL = Pattern.compile("^jdbc:oracle:thin:@[/]*([-0-9a-zA-Z_\\.\\\\]+)(:([0-9]+|port))?([:/](.*))?.*", Pattern.CASE_INSENSITIVE); + private static final Pattern GENERAL_URL = Pattern.compile("^jdbc:(mysql|sqlserver|db2|derby|postgresql|inceptor|inceptor2|hive2)://([-0-9a-zA-Z_\\.\\\\]+)(:([0-9]+|port))?((/|;DatabaseName=)(.*))?.*", Pattern.CASE_INSENSITIVE); private static final Pattern PORT = Pattern.compile("^0$|^[1-9][\\d]*[\\d]*$"); private static final Pattern CHAR_NEED_ESCAPE = Pattern.compile("[?|$^*\\\\\\[\\](){}.+]"); // 编码转换. diff --git a/designer-base/src/main/java/com/fr/design/mainframe/OpenLoadingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/OpenLoadingPane.java index 624f280a74..adc30b2bff 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/OpenLoadingPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/OpenLoadingPane.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import com.fr.general.IOUtils; import java.awt.Color; import java.awt.Component; @@ -17,9 +18,13 @@ import javax.swing.JPanel; */ public class OpenLoadingPane extends JPanel { - private static final ImageIcon LOADING_ICON = new ImageIcon(IOUtils.readImage("/com/fr/design/images/mainframe/loading.gif")); + private static final ImageIcon LOADING_ICON = new ImageIcon(IOUtils.readImage("/com/fr/design/images/mainframe/openloading.png")); + private static final Color TIP_COLOR = new Color(108, 174, 235); + private static final int Y_GAP = 50; + private static final int X_GAP = 10; private UILabel loadingLabel; + private UILabel tipLabel; public OpenLoadingPane() { @@ -47,7 +52,12 @@ public class OpenLoadingPane extends JPanel { int loadingLabelHeight = loadingLabel.getPreferredSize().height; int loadingLabelX = (width - loadingLabelWidth) / 2; int loadingLabelY = (height - loadingLabelHeight) / 2; + int tipLabelWidth = tipLabel.getPreferredSize().width; + int tipLabelHeight = tipLabel.getPreferredSize().height; + int tipLabelX = (width - tipLabelWidth) / 2 + X_GAP; + int tipLabelY = loadingLabelY + loadingLabelHeight - Y_GAP; loadingLabel.setBounds(loadingLabelX, loadingLabelY, loadingLabelWidth, loadingLabelHeight); + tipLabel.setBounds(tipLabelX, tipLabelY, tipLabelWidth, tipLabelHeight); } @Override @@ -56,7 +66,10 @@ public class OpenLoadingPane extends JPanel { }); setBackground(Color.WHITE); loadingLabel = new UILabel(LOADING_ICON); + tipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Open_Template_Loading")); + tipLabel.setForeground(TIP_COLOR); add(loadingLabel); + add(tipLabel); } } diff --git a/designer-base/src/main/resources/com/fr/design/images/mainframe/openloading.png b/designer-base/src/main/resources/com/fr/design/images/mainframe/openloading.png new file mode 100644 index 0000000000..512333be9a Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/mainframe/openloading.png differ diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java index 80d49abe37..d36ef487c7 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/richText/VanChartRichEditorPane.java @@ -7,14 +7,13 @@ import com.fr.chart.chartattr.Plot; import com.fr.chart.chartdata.MoreNameCDDefinition; import com.fr.chart.chartdata.OneValueCDDefinition; import com.fr.data.TableDataSource; -import com.fr.data.impl.EmbeddedTableData; +import com.fr.data.impl.NameTableData; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.data.DesignTableDataManager; import com.fr.design.ui.ModernUIPane; import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; -import com.fr.log.FineLoggerFactory; import com.fr.plugin.chart.base.AttrTooltipRichText; import com.fr.plugin.chart.custom.CustomDefinition; import com.fr.plugin.chart.custom.type.CustomPlotType; @@ -28,6 +27,8 @@ import com.teamdev.jxbrowser.chromium.JSValue; import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; @@ -117,15 +118,9 @@ public class VanChartRichEditorPane { return; } - try { - EmbeddedTableData embeddedTableData = DesignTableDataManager.previewTableDataNotNeedInputParameters(tableDataSource, - tableData, TableData.RESULT_NOT_NEED, false); - - List fieldNames = DesignTableDataManager.getColumnNamesByTableData(embeddedTableData); - VanChartRichEditorPane.fieldNames = fieldNames; - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } + String[] columnNames = DesignTableDataManager.getSelectedColumnNames(tableDataSource, ((NameTableData) tableData).getName()); + VanChartRichEditorPane.fieldNames = new ArrayList<>(); + fieldNames.addAll(Arrays.asList(columnNames)); } public static ModernUIPane createRichEditorPane(AttrTooltipRichText richEditor) { diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java index ce3e34ba76..680a7e4f24 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java @@ -1,6 +1,9 @@ package com.fr.van.chart.map.designer.style.label; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.TableLayout; import com.fr.design.ui.ModernUIPane; import com.fr.plugin.chart.base.AttrTooltipContent; import com.fr.plugin.chart.base.format.AttrTooltipAreaNameFormat; @@ -10,6 +13,7 @@ import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat; import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat; import com.fr.plugin.chart.base.format.AttrTooltipValueFormat; import com.fr.plugin.chart.type.TextAlign; +import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.component.format.MapAreaNameFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox; @@ -23,12 +27,17 @@ import com.fr.van.chart.designer.style.VanChartStylePane; import com.fr.van.chart.map.designer.style.VanChartMapRichTextFieldListPane; import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; /** * Created by Mitisky on 16/5/20. */ public class VanChartMapLabelContentPane extends VanChartLabelContentPane { + private UICheckBox showAllSeries; + private JPanel checkPane; + public VanChartMapLabelContentPane(VanChartStylePane parent, JPanel showOnPane, boolean inCondition) { super(parent, showOnPane, inCondition); } @@ -55,6 +64,31 @@ public class VanChartMapLabelContentPane extends VanChartLabelContentPane { }; } + protected JPanel getLabelContentPane(JPanel contentPane) { + showAllSeries = new UICheckBox(Toolkit.i18nText("Fine-Design_Chart_Show_All_Series")); + + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + double[] columnSize = {f, e}; + double p = TableLayout.PREFERRED; + double[] row = {p, p}; + Component[][] components = { + new Component[]{null, null}, + new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Display_Strategy")), showAllSeries} + }; + checkPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, row, columnSize); + + JPanel panel = new JPanel(new BorderLayout()); + panel.add(contentPane, BorderLayout.CENTER); + panel.add(checkPane, BorderLayout.SOUTH); + return createTableLayoutPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Content"), panel); + } + + protected void checkCardPane() { + super.checkCardPane(); + checkPane.setVisible(getContent().getSelectedIndex() == COMMON_INDEX); + } + protected String[] getRichTextFieldNames() { return new String[]{ Toolkit.i18nText("Fine-Design_Chart_Area_Name"), @@ -82,4 +116,15 @@ public class VanChartMapLabelContentPane extends VanChartLabelContentPane { content.setRichTextValueFormat(new AttrTooltipMapValueFormat()); return content; } + + public AttrTooltipContent updateBean() { + AttrTooltipContent attrTooltipContent = super.updateBean(); + attrTooltipContent.setShowAllSeries(showAllSeries.isSelected()); + return attrTooltipContent; + } + + public void populateBean(AttrTooltipContent attrTooltipContent) { + super.populateBean(attrTooltipContent); + showAllSeries.setSelected(attrTooltipContent.isShowAllSeries()); + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 932338a3fd..4b3147c0ab 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -72,7 +72,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { } XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); if(topLayout != null){ - if (topLayout.isEditable()){ + if (topLayout.isDragInAble() || topLayout.isEditable()){ return topLayoutAccept(creator, x, y); } //绝对布局嵌套,处于内层,不可编辑,不添加,topLayout只能获取到最外层可编辑的布局 diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 22d74d7741..c893268ba1 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -19,12 +19,7 @@ import com.fr.design.designer.creator.cardlayout.XWCardTitleLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.designer.properties.FRFitLayoutConstraints; import com.fr.design.designer.properties.FRFitLayoutPropertiesGroupModel; -import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.fun.FormWidgetOptionProvider; -import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.JForm; -import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.WAbsoluteLayout; @@ -169,7 +164,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { //布局控件要先判断是不是可编辑 XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator) comp).getTopLayout(); - boolean access = topLayout != null && !isMatchEdge && !topLayout.isEditable() && !topLayout.acceptType(XWAbsoluteLayout.class) && !isExtraContainer(comp); + boolean access = topLayout != null && !isMatchEdge && !topLayout.isEditable() && !topLayout.acceptType(XWAbsoluteLayout.class) && !isExtraContainer(comp) && !topLayout.isDragInAble(); if (access) { return false; } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java index 682dcc4d47..354a60ecb8 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java @@ -255,7 +255,7 @@ public class XChartEditor extends XBorderStyleWidgetCreator { * @param e 鼠标点击事件 */ public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { - if (this.isShareConfigButtonFocus()) { + if (this.isHelpBtnOnFocus()) { CoverReportPane.showShareConfig(((XCreator) this.getParent()).toData()); return; } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index 01d53f850c..265fa3618c 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -67,7 +67,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo private int[] directions; private Rectangle backupBound; private String shareId = StringUtils.EMPTY;//如果组件是共享的会有这个属性 - private boolean isShareConfigButtonFocus = false;//焦点是否在帮助按钮上 + private boolean isHelpBtnOnFocus = false;//焦点是否在帮助按钮上 private static final int SHORTS_SEPARATOR_POS = 4; // 弹出菜单分割的位置 public XCreator(Widget ob, Dimension initSize) { @@ -671,12 +671,12 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 焦点是否在帮助按钮上 * @return 焦点是否在帮助按钮上 */ - public boolean isShareConfigButtonFocus() { - return isShareConfigButtonFocus; + public boolean isHelpBtnOnFocus() { + return isHelpBtnOnFocus; } - public void setShareConfigButtonFocus(boolean shareConfigButtonFocus) { - isShareConfigButtonFocus = shareConfigButtonFocus; + public void setHelpBtnOnFocus(boolean isHelpBtnOnFocus) { + this.isHelpBtnOnFocus = isHelpBtnOnFocus; } @@ -692,7 +692,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo if (coverPanel != null) { coverPanel.setVisible(display); coverPanel.setPreferredSize(editor.getPreferredSize()); - coverPanel.setBounds(editor.getBounds()); + coverPanel.setBounds(new Rectangle(0, 0 , editor.getWidth(), editor.getHeight())); editor.repaint(); } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java index 9c459e9868..e08cb658c7 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java @@ -306,7 +306,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { super.respondClick(editingMouseListener, e); editingMouseListener.refreshTopXCreator(); - if (this.isShareConfigButtonFocus()) { + if (this.isHelpBtnOnFocus()) { CoverReportPane.showShareConfig(((XCreator) this.getParent()).toData()); } else { switchTab(e, editingMouseListener); diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XLayoutContainer.java b/designer-form/src/main/java/com/fr/design/designer/creator/XLayoutContainer.java index 9044d6c3cd..07220df0db 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XLayoutContainer.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XLayoutContainer.java @@ -48,6 +48,8 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme //鼠标移动到布局画出编辑层 protected boolean isMouseEnter = false; + private volatile boolean dragInAble; + public void setMouseEnter(boolean mouseEnter) { isMouseEnter = mouseEnter; } @@ -577,4 +579,11 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme return false; } + public boolean isDragInAble() { + return dragInAble; + } + + public void setDragInAble(boolean dragInAble) { + this.dragInAble = dragInAble; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java index 32273ca08a..60197ba12c 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -467,7 +467,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { * @param e 鼠标点击事件 */ public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e) { - if (this.isShareConfigButtonFocus()) { + if (this.isHelpBtnOnFocus()) { CoverReportPane.showShareConfig(this.toData()); return; } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index 2d5b5ba917..992fa00cc9 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -358,7 +358,7 @@ public class XWCardMainBorderLayout extends XWBorderLayout { */ @Override public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e){ - if (this.isShareConfigButtonFocus()) { + if (this.isHelpBtnOnFocus()) { CoverReportPane.showShareConfig(this.toData()); return; } @@ -447,4 +447,9 @@ public class XWCardMainBorderLayout extends XWBorderLayout { return true; } + @Override + public Dimension initEditorSize() { + return LARGEPREFERREDSIZE; + } + } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java index fd12360915..931b668281 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java @@ -435,7 +435,7 @@ public class EditingMouseListener extends MouseInputAdapter { } private void processCoverMouseMove(XCreator component, MouseEvent e) { - component.setShareConfigButtonFocus(false); + component.setHelpBtnOnFocus(false); Insets insets; if (component instanceof XBorderStyleWidgetCreator) { insets = ((XBorderStyleWidgetCreator) component).getInsets(); @@ -447,7 +447,7 @@ public class EditingMouseListener extends MouseInputAdapter { } if (isShareConfigButton(e, component, insets)) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - component.setShareConfigButtonFocus(true); + component.setHelpBtnOnFocus(true); } else if (isEditButton(e, component, insets)) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java index 01a46d25b7..222165a53c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -66,6 +66,8 @@ public class FormCreatorDropTarget extends DropTarget { private AddingModel addingModel; private static final int GAP = 30; + private TabDragInner tabDragInner; + private JWindow promptWindow = new JWindow(); private UIButton promptButton = new UIButton("", BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); @@ -73,6 +75,7 @@ public class FormCreatorDropTarget extends DropTarget { this.designer = designer; this.addingModel = designer.getAddingModel(); this.promptWindow.add(promptButton); + this.tabDragInner = new TabDragInner(designer); } private void adding(int x, int y) { @@ -128,6 +131,7 @@ public class FormCreatorDropTarget extends DropTarget { designer.getSelectionModel().setSelectedCreators( FormSelectionUtils.rebuildSelection(xCreator, new Widget[]{widget})); designer.getEditListenerTable().fireCreatorModified(addingModel.getXCreator(), DesignerEvent.CREATOR_ADDED); + tabDragInner.tryDragIn(); } else { Toolkit.getDefaultToolkit().beep(); } @@ -263,7 +267,10 @@ public class FormCreatorDropTarget extends DropTarget { @Override public synchronized void dragOver(DropTargetDragEvent dtde) { Point loc = dtde.getLocation(); - hovering(designer.getRelativeX(loc.x), designer.getRelativeY(loc.y)); + int x = designer.getRelativeX(loc.x); + int y = designer.getRelativeY(loc.y); + hovering(x, y); + tabDragInner.canDragIn(designer.getComponentAt(x, y), x, y); } /** diff --git a/designer-form/src/main/java/com/fr/design/mainframe/TabDragInner.java b/designer-form/src/main/java/com/fr/design/mainframe/TabDragInner.java new file mode 100644 index 0000000000..ce98d9d55b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/TabDragInner.java @@ -0,0 +1,83 @@ +package com.fr.design.mainframe; + +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.ComponentAdapter; +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.cardlayout.XWCardMainBorderLayout; + +/** + * 判断tab块是否能拖入 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/29 + */ +public class TabDragInner { + + /** + * 悬浮停留的时间间隔 + */ + private static final long TIME_GAP = 1000; + + private FormDesigner designer; + private XLayoutContainer belowXLayoutContainer; + private long timer; + private int oldX; + private int oldY; + + public TabDragInner(FormDesigner designer) { + this.designer = designer; + } + + /** + * 判断拖入 + * + * @param creator 当前拖拽的组件下方所在布局最上层的组件 + * @param x + * @param y + */ + public void canDragIn(XCreator creator, int x, int y) { + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(creator).getTopLayout(); + boolean dragInAble = false; + if (topLayout != null && topLayout.acceptType(XWCardMainBorderLayout.class) && belowXLayoutContainer == null) { + belowXLayoutContainer = topLayout; + timer = System.currentTimeMillis(); + } else if (topLayout == belowXLayoutContainer && topLayout != null && oldX == x && oldY == y) { + if (System.currentTimeMillis() - timer > TIME_GAP) { + dragInAble = true; + } + } else { + timer = 0; + belowXLayoutContainer = null; + } + if (topLayout != null) { + topLayout.setDragInAble(dragInAble); + } + oldX = x; + oldY = y; + } + + /** + * 尝试进入tab编辑 + */ + public void tryDragIn() { + if (belowXLayoutContainer != null && belowXLayoutContainer.isDragInAble()) { + EditingMouseListener editingMouseListener = new EditingMouseListener(designer); + editingMouseListener.refreshTopXCreator(); + belowXLayoutContainer.setEditable(true); + if (editingMouseListener.stopEditing() && belowXLayoutContainer != designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, belowXLayoutContainer); + if (adapter != null) { + editingMouseListener.startEditing(belowXLayoutContainer, adapter.getDesignerEditor(), adapter); + } + } + } + } + + + public XLayoutContainer getBelowXLayoutContainer() { + return belowXLayoutContainer; + } +}