From 42e9b6320e14e824f34017a5175f1fc9c28f5b72 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Mon, 20 Jul 2020 10:30:45 +0800 Subject: [PATCH 1/9] =?UTF-8?q?REPORT-35699=20=E5=9B=BD=E9=99=85=E5=8C=96?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=B9=E6=8A=A5=E8=A1=A8=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86=E4=BA=A7=E7=94=9F=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/utils/gui/GUICoreUtils.java | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java index 586047f5a..3723c775f 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java @@ -387,31 +387,35 @@ public final class GUICoreUtils { * @param y y坐标 */ public static void showPopupMenu(JPopupMenu popup, Component parentComponent, int x, int y) { - if (popup == null) {// check null. - return; - } - - Point point = new Point(x, y); - SwingUtilities.convertPointToScreen(point, parentComponent); - - Dimension size = popup.getPreferredSize(); - Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); - screen.setSize(screen.getSize().width, screen.height - HEIGHT_GAP); - - int showOnScreenX = Math.min(screen.width, parentComponent.getLocationOnScreen().x + parentComponent.getWidth()); - - // peter:调整X的高度. - if (point.x + size.width > showOnScreenX && size.width < showOnScreenX) { - x += (showOnScreenX - point.x - size.width); - } - - // peter:调整y高度. - if (point.y + size.height > screen.height && size.height < screen.height) { - y -= size.height; - } - - popup.show(parentComponent, x, y); - } + if (popup == null) {// check null. + return; + } + + Point point = new Point(x, y); + SwingUtilities.convertPointToScreen(point, parentComponent); + + Dimension size = popup.getPreferredSize(); + Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); + screen.setSize(screen.getSize().width, screen.height - HEIGHT_GAP); + //父元素右边界的坐标 + int parentComponentRightBorderPosition = parentComponent.getLocationOnScreen().x + parentComponent.getWidth(); + //设计器右边界的坐标 + Rectangle rectangle = DesignerContext.getDesignerFrame().getBounds(); + int designerRightBorderPosition = rectangle.x + rectangle.width; + rectangle = SwingUtilities.getWindowAncestor(parentComponent).getBounds(); + designerRightBorderPosition = Math.max(designerRightBorderPosition, rectangle.x + rectangle.width); + // peter:调整X的高度. + if (point.x + size.width > designerRightBorderPosition && size.width < designerRightBorderPosition) { + x += (parentComponentRightBorderPosition - point.x - size.width); + } + + // peter:调整y高度. + if (point.y + size.height > screen.height && size.height < screen.height) { + y -= size.height; + } + + popup.show(parentComponent, x, y); + } /** * Set enabled.
From 57c22fe43b56ae478d357c29417b79b51303b0f8 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Mon, 20 Jul 2020 10:38:27 +0800 Subject: [PATCH 2/9] =?UTF-8?q?REPORT-35699=20=E5=9B=BD=E9=99=85=E5=8C=96?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=B9=E6=8A=A5=E8=A1=A8=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86=E4=BA=A7=E7=94=9F=E5=BD=B1=E5=93=8D=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/utils/gui/GUICoreUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java index 3723c775f..9f5c7fbaa 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java @@ -27,6 +27,7 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.style.color.ColorCell; import com.fr.design.style.color.ColorFactory; import com.fr.design.style.color.ColorSelectBox; From 90c2aaeee80819e2652ff0a9d8a4cb802edf4ea9 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 20 Jul 2020 18:47:07 +0800 Subject: [PATCH 3/9] =?UTF-8?q?REPORT-35455=20=20=E8=B5=B6=E8=BF=99?= =?UTF-8?q?=E4=B8=80=E6=B3=A2=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/data/BasicTableDataTreePane.java | 11 +++- .../fr/design/data/BasicTableDataUtils.java | 17 ++++++ .../data/datapane/TableDataTreePane.java | 53 +++++++++++-------- .../design/data/BasicTableDataUtilsTest.java | 27 +++++++++- .../fr/design/designer/creator/XCreator.java | 16 +++--- .../mainframe/FormCreatorDropTarget.java | 2 +- 6 files changed, 92 insertions(+), 34 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java index e8bc8e39a..5ba801ca8 100644 --- a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java @@ -446,7 +446,16 @@ public abstract class BasicTableDataTreePane extends DockingView implements Resp * @param srcName 数据集来源(比如报表块,就是报表块的名称) * @param tableDataSource 数据集 */ + public Map addTableData(String srcName, TableDataSource tableDataSource, boolean isCover) { + return new HashMap<>(0); + } + public Map addTableData(String srcName, TableDataSource tableDataSource) { - return new HashMap<>(0); + return addTableData(srcName, tableDataSource, false); + } + + public void removeTableData(String sourceName) { + } + } diff --git a/designer-base/src/main/java/com/fr/design/data/BasicTableDataUtils.java b/designer-base/src/main/java/com/fr/design/data/BasicTableDataUtils.java index 27724450b..57c7e23a1 100644 --- a/designer-base/src/main/java/com/fr/design/data/BasicTableDataUtils.java +++ b/designer-base/src/main/java/com/fr/design/data/BasicTableDataUtils.java @@ -1,5 +1,6 @@ package com.fr.design.data; +import com.fr.data.TableDataSource; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.i18n.Toolkit; import com.fr.stable.StringUtils; @@ -10,6 +11,7 @@ import com.fr.stable.StringUtils; * Created by hades on 2020/4/27 */ public abstract class BasicTableDataUtils { + private static final String SEPARATOR = "-"; private static final int LEN = 2; @@ -33,4 +35,19 @@ public abstract class BasicTableDataUtils { } return false; } + + public static String getTableDataName(boolean isCover, TableDataSource tds, String tdName, String srcName, boolean isDsNameRepeaded) { + if (isCover) { + return srcName + SEPARATOR + tdName; + } + if (tds.getTableData(tdName) != null || isDsNameRepeaded) {//如果有同名的就拼上来源名称 + tdName = srcName + SEPARATOR + tdName; + } + int i = 0; + while (tds.getTableData(tdName) != null) { + i++;//如果拼上名字后依然已经存在就加编号 + tdName += i; + } + return tdName; + } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java index 531e12848..a2cc5b7d2 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java @@ -9,6 +9,7 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; import com.fr.design.constants.UIConstants; import com.fr.design.data.BasicTableDataTreePane; +import com.fr.design.data.BasicTableDataUtils; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.tabledata.StoreProcedureWorkerListener; import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; @@ -59,7 +60,7 @@ import java.util.Map; public class TableDataTreePane extends BasicTableDataTreePane { private static TableDataTreePane singleton = new TableDataTreePane(); - + public static final int PLUGIN_LISTENER_PRIORITY = 1; public synchronized static BasicTableDataTreePane getInstance(DesignModelAdapter tc) { @@ -96,10 +97,10 @@ public class TableDataTreePane extends BasicTableDataTreePane { addMenuDef.setIconPath(IconPathConstants.ADD_POPMENU_ICON_PATH); createAddMenuDef(); - + // 创建插件监听 createPluginListener(); - + editAction = new EditAction(); removeAction = new RemoveAction(); previewTableDataAction = new PreviewTableDataAction(dataTree); @@ -139,27 +140,27 @@ public class TableDataTreePane extends BasicTableDataTreePane { new TableDataTreeDragSource(dataTree, DnDConstants.ACTION_COPY); checkButtonEnabled(); } - + private void createPluginListener() { - + //菜单栏监听 GeneralContext.listenPluginRunningChanged(new PluginEventListener(PLUGIN_LISTENER_PRIORITY) { - + @Override public void on(PluginEvent event) { - + addMenuDef.clearShortCuts(); createAddMenuDef(); } }, new PluginFilter() { - + @Override public boolean accept(PluginContext context) { - + return context.contain(PluginModule.ExtraDesign); } }); - + //监听数据集插件 GeneralContext.listenPluginRunningChanged(new PluginEventListener() { @Override @@ -188,8 +189,8 @@ public class TableDataTreePane extends BasicTableDataTreePane { } }); } - - + + protected void checkButtonEnabled() { super.checkButtonEnabled(editAction, previewTableDataAction, removeAction, op, dataTree); } @@ -339,10 +340,11 @@ public class TableDataTreePane extends BasicTableDataTreePane { /** * 合并数据集 - * @param srcName 数据集来源(比如报表块,就是报表块的名称) + * + * @param srcName 数据集来源(比如报表块,就是报表块的名称) * @param tableDataSource 数据集 */ - public Map addTableData(String srcName, TableDataSource tableDataSource) { + public Map addTableData(String srcName, TableDataSource tableDataSource, boolean isCover) { Map tdNameMap = new HashMap<>(); allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook()); DesignTableDataManager.setThreadLocal(DesignTableDataManager.NO_PARAMETER); @@ -352,14 +354,8 @@ public class TableDataTreePane extends BasicTableDataTreePane { String tdName = (String) tdIterator.next(); String oldName = tdName; TableData td = tableDataSource.getTableData(tdName); - if (tds.getTableData(tdName) != null || isDsNameRepeaded(tdName)) {//如果有同名的就拼上来源名称 - tdName = srcName + tdName; - } - int i = 0; - while (tds.getTableData(tdName) != null) { - i++;//如果拼上名字后依然已经存在就加编号 - tdName += i; - } + boolean isDsNameRepeaded = isDsNameRepeaded(tdName); + tdName = BasicTableDataUtils.getTableDataName(isCover, tds, tdName, srcName, isDsNameRepeaded); tds.putTableData(tdName, td); if (!ComparatorUtils.equals(oldName, tdName)) { tdNameMap.put(oldName, tdName); @@ -367,8 +363,19 @@ public class TableDataTreePane extends BasicTableDataTreePane { } tc.parameterChanged(); dataTree.refresh(); - return Collections.unmodifiableMap(tdNameMap); + return Collections.unmodifiableMap(tdNameMap); } + + @Override + public void removeTableData(String sourceName) { + TableDataSource tds = tc.getBook(); + tds.removeTableData(sourceName); + dataTree.refresh(); + } + + + + public void addDataPane(final AbstractTableDataPane uPanel, String paneName) { final NamePane nPanel = uPanel.asNamePane(); nPanel.setObjectName(paneName); diff --git a/designer-base/src/test/java/com/fr/design/data/BasicTableDataUtilsTest.java b/designer-base/src/test/java/com/fr/design/data/BasicTableDataUtilsTest.java index acd47a3c1..7391924ac 100644 --- a/designer-base/src/test/java/com/fr/design/data/BasicTableDataUtilsTest.java +++ b/designer-base/src/test/java/com/fr/design/data/BasicTableDataUtilsTest.java @@ -1,6 +1,9 @@ package com.fr.design.data; +import com.fr.base.TableData; +import com.fr.data.TableDataSource; import junit.framework.TestCase; +import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Test; @@ -41,4 +44,26 @@ public class BasicTableDataUtilsTest extends TestCase { Assert.assertFalse(result12); } -} \ No newline at end of file + + @Test + public void testGetTableDataName() { + TableDataSource source = EasyMock.mock(TableDataSource.class); + TableData tableData = EasyMock.mock(TableData.class); + EasyMock.expect(source.getTableData("ds1")).andReturn(tableData).anyTimes(); + EasyMock.expect(source.getTableData("test-ds1")).andReturn(tableData).anyTimes(); + EasyMock.expect(source.getTableData("test-ds11")).andReturn(null).anyTimes(); + EasyMock.replay(source, tableData); + Assert.assertEquals("test-ds1", BasicTableDataUtils.getTableDataName(true, source, "ds1", "test", false)); + Assert.assertEquals("test-ds11", BasicTableDataUtils.getTableDataName(false, source, "ds1", "test", false)); + + source = EasyMock.mock(TableDataSource.class); + EasyMock.expect(source.getTableData("ds1")).andReturn(null).anyTimes(); + EasyMock.expect(source.getTableData("test-ds1")).andReturn(null).anyTimes(); + EasyMock.replay(source); + Assert.assertEquals("test-ds1", BasicTableDataUtils.getTableDataName(true, source, "ds1", "test", false)); + Assert.assertEquals("ds1", BasicTableDataUtils.getTableDataName(false, source, "ds1", "test", false)); + Assert.assertEquals("test-ds1", BasicTableDataUtils.getTableDataName(false, source, "ds1", "test", true)); + + } + +} 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 f4554069e..dcb693883 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 @@ -298,7 +298,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo @Override public JComponent createToolPane(BaseJForm jform, FormDesigner formEditor) { if (!DesignerMode.isAuthorityEditing()) { - if (isDedicateContainer()) { + if (isDedicateContainer() && this.getComponentCount() > 0) { // 图表块和报表块由于控件树处不显示,但对应的属性表要显示,此处处理下 XCreator child = ((XLayoutContainer) this).getXCreator(0); return child.createToolPane(jform, formEditor); @@ -408,7 +408,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public Component getParentShow(){ return this.getParent(); } - + /** * 重置组件的名称 * @@ -418,18 +418,18 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void resetCreatorName(String name) { toData().setWidgetName(name); } - + /** * 遍历所有命名相关的组件到集合中 * * @param xCreators 集合 */ public void traversalNameRelatedXCreators(Set xCreators) { - + xCreators.add(this); int componentCount = getComponentCount(); for (int i = 0; i < componentCount; i++) { - + Component component = getComponent(i); if (component instanceof XCreator) { XCreator xCreator = (XCreator) component; @@ -439,7 +439,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo } } } - + /** * 重置组件的可见性 * @@ -448,7 +448,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void resetVisible(boolean visible) { toData().setVisible(visible); } - + /** * 返回编辑的子组件,scale为其内部组件 * @return 组件 @@ -804,4 +804,4 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo return false; } -} \ No newline at end of file +} 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 06cb19d0a..e13748719 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 @@ -105,7 +105,7 @@ public class FormCreatorDropTarget extends DropTarget { SharableEditorProvider sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId); SharableWidgetProvider bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId); if (sharableEditor != null && bindInfo != null) { - Map tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource()); + Map tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource(), true); //合并数据集之后,可能会有数据集名称变化,做一下联动 //共享的组件拿的时候都是克隆的,这边改拖拽中克隆的对象而非新克隆对象,上面这个新克隆的对象只是为了拿数据集 for (Map.Entry entry : tdNameMap.entrySet()) { From 0debb703223cacd46f5894e3583d8c39de77b087 Mon Sep 17 00:00:00 2001 From: kerry Date: Mon, 20 Jul 2020 18:50:16 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/designer/beans/models/SelectionModel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java index 1209310f6..a930deb23 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java @@ -306,12 +306,12 @@ public class SelectionModel { // 清除被选中的组件 selection.reset(); } + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); + setSelectedCreator(isInPara ? designer.getParaComponent() : designer.getRootComponent()); - setSelectedCreator(isInPara ? designer.getParaComponent() : designer.getRootComponent()); // 触发事件 - designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); designer.repaint(); } } From fbd5c6668283ae022168059c8d46a261aa08d501 Mon Sep 17 00:00:00 2001 From: pengda Date: Mon, 20 Jul 2020 19:20:34 +0800 Subject: [PATCH 5/9] =?UTF-8?q?REPORT-34907=20linux=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E7=BA=B8=E5=BC=A0=E8=83=8C=E6=99=AF-=E6=B8=90?= =?UTF-8?q?=E5=8F=98=E8=89=B2=EF=BC=8C=E5=8F=B3=E8=BE=B9=E7=9A=84=E6=B8=B8?= =?UTF-8?q?=E6=A0=87=E4=B8=8D=E8=83=BD=E6=8B=96=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/style/background/gradient/GradientBar.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java index efeffa4e4..46d1b9165 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java +++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java @@ -11,6 +11,7 @@ import com.fr.design.style.color.ColorSelectDialog; import com.fr.design.style.color.ColorSelectable; import com.fr.stable.AssistUtils; +import com.fr.stable.os.OperatingSystem; import javax.swing.JComponent; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -124,14 +125,20 @@ public class GradientBar extends JComponent implements UIObserver, ColorSelectab protected void addMouseDragListener() { this.addMouseMotionListener(new MouseAdapter() { public void mouseDragged(MouseEvent e) { - + int oldIndex = index; for (int i = 0; i < list.size(); i++) { if (list.get(i).contains(e.getX(), e.getY())) { index = i; break; } } - + if(OperatingSystem.isLinux() && AssistUtils.equals(oldIndex,index)){ + if(Math.abs(p1.getX() - e.getX()) > Math.abs(p2.getX() - e.getX())){ + index = 1; + }else{ + index = 0; + } + } boolean x = e.getX() <= max && e.getX() >= min; if (x && e.getY() < MAX_VERTICAL) { list.get(index).setX(e.getX()); From deee0ab65fe104e3cce7be960279441c44641377 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 21 Jul 2020 10:50:04 +0800 Subject: [PATCH 6/9] REPORT-34996 && REPORT-34636 --- .../java/com/fr/design/actions/UpdateAction.java | 8 +++++++- .../com/fr/design/os/impl/UpdateDialogAction.java | 12 +++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/UpdateAction.java b/designer-base/src/main/java/com/fr/design/actions/UpdateAction.java index b0803635c..4fd7e6c42 100644 --- a/designer-base/src/main/java/com/fr/design/actions/UpdateAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/UpdateAction.java @@ -17,6 +17,7 @@ import com.fr.design.mainframe.toolbar.UpdateActionManager; import com.fr.design.menu.ShortCut; import com.fr.design.selection.SelectionListener; import com.fr.general.ComparatorUtils; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.stable.pinyin.PinyinFormat; import com.fr.stable.pinyin.PinyinHelper; @@ -562,7 +563,12 @@ public abstract class UpdateAction extends ShortCut implements Action { for (int i = 0; i < component.getTabCount(); i++) { String title = component.getTitleAt(i); handleSearchText(separator, text, pinyin, shortPinyin, title); - Component tabComponent = component.getComponentAt(i); + Component tabComponent = null; + try { + tabComponent = component.getComponentAt(i); + } catch (Exception ignore) { + FineLoggerFactory.getLogger().info("AlphaFine index tabPane end"); + } if (tabComponent instanceof JPanel) { getComponentTexts((JPanel) tabComponent, separator, text, pinyin, shortPinyin); } else if (tabComponent instanceof JTabbedPane) { diff --git a/designer-base/src/main/java/com/fr/design/os/impl/UpdateDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/UpdateDialogAction.java index 64f8f2112..f71493cd6 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/UpdateDialogAction.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/UpdateDialogAction.java @@ -2,8 +2,6 @@ package com.fr.design.os.impl; import com.fr.design.mainframe.DesignerContext; import com.fr.design.update.ui.dialog.UpdateMainDialog; -import com.fr.design.utils.DesignUtils; -import com.fr.stable.os.OperatingSystem; import com.fr.stable.os.support.OSBasedAction; /** @@ -12,14 +10,10 @@ import com.fr.stable.os.support.OSBasedAction; * @date 2019/10/9 */ public class UpdateDialogAction implements OSBasedAction { - private static String UPDATE_ROUTE = "#management/backup"; + @Override public void execute(Object... objects) { - if(!OperatingSystem.isLinux()) { - UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); - dialog.showDialog(); - }else{ - DesignUtils.visitEnvServerByParameters( UPDATE_ROUTE,null,null); - } + UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); + dialog.showDialog(); } } From 23a94b9371a68a360c33d87d0a683c8f6dbfb4c5 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 21 Jul 2020 12:43:27 +0800 Subject: [PATCH 7/9] =?UTF-8?q?REPORT-34878=20&&=20REPORT-34936=20=20linux?= =?UTF-8?q?=E4=B8=8B=E6=9D=A1=E4=BB=B6=E5=B1=9E=E6=80=A7=E5=92=8C=E8=B6=85?= =?UTF-8?q?=E9=93=BE=E4=BF=9D=E5=AD=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/gui/controlpane/UIControlPane.java | 4 ++ .../gui/controlpane/UIListControlPane.java | 4 ++ .../design/os/impl/PopupDialogSaveAction.java | 39 +++++++++++++++++++ .../java/com/fr/grid/GridMouseAdapter.java | 7 +++- 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java index 747dbe32f..04427b337 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java @@ -9,12 +9,14 @@ import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.ShortCut; +import com.fr.design.os.impl.PopupDialogSaveAction; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.invoke.Reflect; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; import com.fr.stable.os.OperatingSystem; +import com.fr.stable.os.support.OSSupportCenter; import javax.swing.BorderFactory; import javax.swing.JComponent; @@ -273,6 +275,8 @@ abstract class UIControlPane extends JControlPane { } saveSettings(); setVisible(false); + PopupDialogSaveAction saveAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); + saveAction.unregister(); } private void initListener() { diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java index 0dec12421..786eb2d30 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java @@ -7,9 +7,11 @@ import com.fr.design.gui.ilist.JNameEdList; import com.fr.design.gui.ilist.ListModelElement; import com.fr.design.gui.ilist.UINameEdList; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.os.impl.PopupDialogSaveAction; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; +import com.fr.stable.os.support.OSSupportCenter; import javax.swing.DefaultListModel; import javax.swing.JList; @@ -216,6 +218,8 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon ((PopupEditDialog)popupEditDialog).setTitle(getSelectedName()); } popupEditDialog.setVisible(true); + PopupDialogSaveAction osBasedAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); + osBasedAction.execute(this, popupEditDialog); } } diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java new file mode 100644 index 000000000..019ee3d97 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/os/impl/PopupDialogSaveAction.java @@ -0,0 +1,39 @@ +package com.fr.design.os.impl; + +import com.fr.design.gui.controlpane.UIListControlPane; +import com.fr.stable.os.OperatingSystem; +import com.fr.stable.os.support.OSBasedAction; + +import java.awt.*; + +/** + * linux下超链弹窗等保存问题 + * + * @author hades + * @version 10.0 + * Created by hades on 2020/7/21 + */ +public class PopupDialogSaveAction implements OSBasedAction { + + private UIListControlPane currentControlPane; + private Window popupDialog; + + @Override + public void execute(Object... objects) { + boolean canSave = OperatingSystem.isLinux() && popupDialog != null && popupDialog.isVisible() && currentControlPane != null; + if (canSave) { + currentControlPane.saveSettings(); + } + } + + public void register(UIListControlPane currentControlPane, Window popupDialog) { + this.currentControlPane = currentControlPane; + this.popupDialog = popupDialog; + } + + public void unregister() { + this.currentControlPane = null; + this.popupDialog = null; + } + +} diff --git a/designer-realize/src/main/java/com/fr/grid/GridMouseAdapter.java b/designer-realize/src/main/java/com/fr/grid/GridMouseAdapter.java index ae230a531..86ed09161 100644 --- a/designer-realize/src/main/java/com/fr/grid/GridMouseAdapter.java +++ b/designer-realize/src/main/java/com/fr/grid/GridMouseAdapter.java @@ -10,7 +10,7 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.JSliderPane; -import com.fr.design.present.CellWriteAttrPane; +import com.fr.design.os.impl.PopupDialogSaveAction; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.FloatSelection; @@ -26,6 +26,7 @@ import com.fr.report.elementcase.TemplateElementCase; import com.fr.stable.ArrayUtils; import com.fr.stable.ColumnRow; import com.fr.stable.StringUtils; +import com.fr.stable.os.support.OSSupportCenter; import com.fr.stable.unit.FU; import javax.swing.*; @@ -93,7 +94,9 @@ public class GridMouseAdapter implements MouseListener, MouseWheelListener, Mous if (!grid.hasFocus() && grid.isRequestFocusEnabled()) { grid.requestFocus(); } - + // linux下 点击单元格时 失焦之前立即触发保存 + PopupDialogSaveAction saveAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); + saveAction.execute(); if (SwingUtilities.isRightMouseButton(evt)) { doWithRightButtonPressed(); } else { From 326eb6bb1eefb6716c8ff6eb4145c06c8f02f1fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Tue, 21 Jul 2020 17:35:58 +0800 Subject: [PATCH 8/9] =?UTF-8?q?CHART-14689=20=20=E9=A2=84=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E9=85=8D=E8=89=B2=E6=8C=89=E9=92=AE=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/module/ChartPreFillStylePane.java | 56 ++++++++----------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java b/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java index 34f917f15..5bcdaca53 100644 --- a/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java +++ b/designer-chart/src/main/java/com/fr/design/module/ChartPreFillStylePane.java @@ -2,14 +2,16 @@ package com.fr.design.module; import com.fr.base.ChartColorMatching; import com.fr.design.beans.BasicBeanPane; -import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.style.ChartColorAdjustPane; import com.fr.design.style.background.gradient.FixedGradientBar; +import javax.swing.BorderFactory; import javax.swing.JPanel; import java.util.ArrayList; import java.util.Collections; @@ -19,7 +21,6 @@ import java.awt.CardLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -35,8 +36,7 @@ public class ChartPreFillStylePane extends BasicBeanPane { private JPanel changeColorSetPane; private CardLayout cardLayout; - private UIButton accButton; - private UIButton gradientButton; + private UIButtonGroup groupButton; private ChartColorAdjustPane colorAdjustPane; private FixedGradientBar colorGradient; @@ -52,22 +52,20 @@ public class ChartPreFillStylePane extends BasicBeanPane { JPanel customPane = new JPanel(FRGUIPaneFactory.createBorderLayout()); - JPanel buttonPane = new JPanel(); - buttonPane.setLayout(new FlowLayout(FlowLayout.LEFT)); - buttonPane.add(accButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Custom_Color"))); - buttonPane.add(gradientButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Color"))); - customPane.add(buttonPane, BorderLayout.NORTH); + groupButton = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Chart_Custom_Color"), Toolkit.i18nText("Fine-Design_Chart_Gradient_Color")}); + groupButton.setPreferredSize(new Dimension(155, 20)); + groupButton.setSelectedIndex(0); + customPane.add(groupButton, BorderLayout.NORTH); changeColorSetPane = new JPanel(cardLayout = new CardLayout()); - changeColorSetPane.add(colorGradient = new FixedGradientBar(4, 130), "gradient"); + changeColorSetPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); + changeColorSetPane.add(colorGradient = new FixedGradientBar(4, 150), "gradient"); changeColorSetPane.add(colorAdjustPane = new ChartColorAdjustPane(), "acc"); cardLayout.show(changeColorSetPane, "acc"); customPane.add(changeColorSetPane, BorderLayout.CENTER); - accButton.setSelected(true); - - customPane.setPreferredSize(new Dimension(200, 200)); - colorGradient.setPreferredSize(new Dimension(120, 30)); + customPane.setPreferredSize(new Dimension(155, 200)); + colorGradient.setPreferredSize(new Dimension(155, 30)); colorGradient.getSelectColorPointBtnP1().setColorInner(Color.WHITE); colorGradient.getSelectColorPointBtnP2().setColorInner(FixedGradientBar.NEW_CHARACTER); @@ -84,24 +82,20 @@ public class ChartPreFillStylePane extends BasicBeanPane { } private void initListener() { - - accButton.addActionListener(new ActionListener() { + groupButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - accButton.setSelected(true); - gradientButton.setSelected(false); - cardLayout.show(changeColorSetPane, "acc"); + checkCardPane(); } }); + } - gradientButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - gradientButton.setSelected(true); - accButton.setSelected(false); - cardLayout.show(changeColorSetPane, "gradient"); - } - }); + private void checkCardPane() { + if (groupButton.getSelectedIndex() == 0) { + cardLayout.show(changeColorSetPane, "acc"); + } else { + cardLayout.show(changeColorSetPane, "gradient"); + } } @Override @@ -117,8 +111,7 @@ public class ChartPreFillStylePane extends BasicBeanPane { boolean isGradient = condition.getGradient(); List colorList = condition.getColorList(); if (isGradient) { - gradientButton.setSelected(true); - accButton.setSelected(false); + groupButton.setSelectedIndex(1); cardLayout.show(changeColorSetPane, "gradient"); if (colorList.size() == 2) { @@ -127,8 +120,7 @@ public class ChartPreFillStylePane extends BasicBeanPane { colorGradient.repaint(); } } else { - accButton.setSelected(true); - gradientButton.setSelected(false); + groupButton.setSelectedIndex(0); cardLayout.show(changeColorSetPane, "acc"); if (colorList.isEmpty()) { @@ -148,7 +140,7 @@ public class ChartPreFillStylePane extends BasicBeanPane { List colorList = new ArrayList(); - if (gradientButton.isSelected()) { + if (groupButton.getSelectedIndex() == 1) { chartColorMatching.setGradient(true); Color start = colorGradient.getSelectColorPointBtnP1().getColorInner(); From 75d9b30d8c71e0b548731cfcff4b6109a49a81e6 Mon Sep 17 00:00:00 2001 From: hades Date: Tue, 21 Jul 2020 18:54:33 +0800 Subject: [PATCH 9/9] =?UTF-8?q?REPORT-34878=20&&=20REPORT-34936=20linux?= =?UTF-8?q?=E4=B8=8B=E6=9D=A1=E4=BB=B6=E5=B1=9E=E6=80=A7=E5=92=8C=E8=B6=85?= =?UTF-8?q?=E9=93=BE=E4=BF=9D=E5=AD=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/controlpane/UIListControlPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java index 786eb2d30..100daf511 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIListControlPane.java @@ -219,7 +219,7 @@ public abstract class UIListControlPane extends UIControlPane implements ListCon } popupEditDialog.setVisible(true); PopupDialogSaveAction osBasedAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); - osBasedAction.execute(this, popupEditDialog); + osBasedAction.register(this, popupEditDialog); } }