From f9d02017115411c3c7dfcd2b90884dce47e2ef66 Mon Sep 17 00:00:00 2001 From: obo Date: Fri, 14 Jul 2023 10:18:59 +0800 Subject: [PATCH 01/68] =?UTF-8?q?REPORT-99924=20FR10=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=88=B011=E5=90=8E=EF=BC=8C=E5=AF=BC=E5=87=BA=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E5=AD=97=E4=BD=93=E6=98=BE=E7=A4=BA=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/report/ImageExportPane.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java b/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java index 08d1a213c3..ba4eccb63a 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java @@ -84,20 +84,20 @@ public class ImageExportPane extends AbstractExportPane { private void initGlobalSettings() { - globalResolutionBtnS = new UIRadioButton("96dpi", true); - globalResolutionBtnM = new UIRadioButton("192dpi"); + globalResolutionBtnS = new UIRadioButton("96dpi"); + globalResolutionBtnM = new UIRadioButton("192dpi", true); globalResolutionBtnL = new UIRadioButton("300dpi"); wrapButtonsInButtonGroup(globalResolutionBtnS, globalResolutionBtnM, globalResolutionBtnL); - globalFormatJpg = new UIRadioButton("jpg", true); - globalFormatPng = new UIRadioButton("png"); + globalFormatJpg = new UIRadioButton("jpg"); + globalFormatPng = new UIRadioButton("png", true); wrapButtonsInButtonGroup(globalFormatJpg, globalFormatPng); - globalRenderQuality = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Quality_First"), true); - globalRenderSpeed = new UIRadioButton(Toolkit.i18nText(("Fine-Design_Image_Export_Speed_Priority"))); + globalRenderQuality = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Quality_First")); + globalRenderSpeed = new UIRadioButton(Toolkit.i18nText(("Fine-Design_Image_Export_Speed_Priority")), true); wrapButtonsInButtonGroup(globalRenderQuality, globalRenderSpeed); - templateThumbnail = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Thumbnail")); + templateThumbnail = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Thumbnail"), true); templatePaging = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Paging")); wrapButtonsInButtonGroup(templateThumbnail, templatePaging); } From 49cbdffd4356fc62cbc273a24d7fd72695ee5da9 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 14:26:50 +0800 Subject: [PATCH 02/68] =?UTF-8?q?REPORT-91839=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=20bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 50 ++++++++++------- .../design/actions/file/SwitchExistEnv.java | 5 ++ .../itableeditorpane/UITableModelAdapter.java | 13 +++++ .../fr/design/mainframe/DesignerFrame.java | 5 ++ .../design/mainframe/vcs/RecycleAction.java | 2 +- .../design/mainframe/vcs/VcsMoveChecker.java | 54 +++++++++++++++++++ .../ui/AbstractSupportSelectTablePane.java | 11 +++- .../mainframe/vcs/ui/VcsCenterPane.java | 5 ++ .../design/mainframe/vcs/ui/VcsMovePanel.java | 33 ++++++++---- 9 files changed, 148 insertions(+), 30 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index fcaaccfc20..1b75688b6a 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -50,9 +50,12 @@ import com.fr.io.attr.ImageExportAttr; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.report.ReportConfigManager; +import com.fr.scheduler.tool.FineScheduler; import com.fr.stable.Constants; import com.fr.stable.os.OperatingSystem; import com.fr.third.apache.logging.log4j.Level; +import com.fr.third.guava.collect.BiMap; +import com.fr.third.guava.collect.HashBiMap; import com.fr.transaction.Configurations; import com.fr.transaction.Worker; import com.fr.transaction.WorkerAdaptor; @@ -92,6 +95,7 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.text.DecimalFormat; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -224,6 +228,8 @@ public class PreferencePane extends BasicPane { private JPanel saveIntervalPane; private JPanel autoCleanPane; + + private JPanel gcControlPane; private UICheckBox startupPageEnabledCheckBox; private IntegerEditor saveIntervalEditor; private UICheckBox gcEnableCheckBox; @@ -245,7 +251,15 @@ public class PreferencePane extends BasicPane { private UIRadioButton previewRenderQuality; private static final int DPI_SCALE_S = 1; private static final int DPI_SCALE_M = 2; - + private static final BiMap INDEX_DAY_MAP = HashBiMap.create(new HashMap() { + { + put(ONE_DAY_INDEX, ONE_DAY_INT); + put(ONE_WEEK_INDEX, ONE_WEEK_INT); + put(ONE_MONTH_INDEX, ONE_MONTH_INT); + put(SIX_MONTH_INDEX, SIX_MONTH_INT); + put(THREE_MONTH_INDEX, THREE_MONTH_INT); + } + }); public PreferencePane() { this.initComponents(); } @@ -418,7 +432,7 @@ public class PreferencePane extends BasicPane { savePane.add(saveIntervalPane); //gc面板 - JPanel gcControlPane = createGcControlPane(); + gcControlPane = createGcControlPane(); JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); enableVcsPanel.add(remindVcsLabel); @@ -470,9 +484,14 @@ public class PreferencePane extends BasicPane { private VcsMovePanel createMovePane(CardLayout cardLayout, JPanel parentPane) { return new VcsMovePanel(cardLayout, parentPane, new VcsMovePanel.MoveCallBack(){ @Override - public void doCallBack(boolean visible) { - saveIntervalPane.setVisible(visible); - autoCleanPane.setVisible(visible); + public void doCallBack(boolean useV2) { + saveIntervalPane.setVisible(useV2); + autoCleanPane.setVisible(useV2); + useVcsAutoCleanScheduleCheckBox.setSelected(useV2); + useVcsAutoSaveScheduleCheckBox.setSelected(useV2); + gcControlPane.setVisible(!useV2); + useVcsAutoCleanScheduleCheckBox.setEnabled(useV2 && FineScheduler.getInstance().isStarted()); + useVcsAutoSaveScheduleCheckBox.setEnabled(useV2); } }); }; @@ -490,7 +509,7 @@ public class PreferencePane extends BasicPane { autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Content"))); autoCleanPane.add(autoCleanRetainIntervalComboBox); autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Last"))); - useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode()); + useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode() && FineScheduler.getInstance().isStarted()); autoCleanPane.setVisible(false); return autoCleanPane; } @@ -916,6 +935,8 @@ public class PreferencePane extends BasicPane { useVcsAutoSaveScheduleCheckBox.setSelected(vcsConfigManager.isUseAutoSave()); useVcsAutoCleanScheduleCheckBox.setSelected(VcsConfig.getInstance().isUseV2AutoClean()); autoSaveIntervalEditor.setValue(vcsConfigManager.getAutoSaveInterval()); + autoCleanIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2CleanInterval())); + autoCleanRetainIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2RetainInterval())); gridLineColorTBButton.setColor(designerEnvManager.getGridLineColor()); paginationLineColorTBButton.setColor(designerEnvManager.getPaginationLineColor()); @@ -1005,18 +1026,11 @@ public class PreferencePane extends BasicPane { } private int getDay(int dateIndex) { - switch (dateIndex) { - case ONE_DAY_INDEX: - return ONE_DAY_INT; - case ONE_WEEK_INDEX: - return ONE_WEEK_INT; - case ONE_MONTH_INDEX: - return ONE_MONTH_INT; - case SIX_MONTH_INDEX: - return SIX_MONTH_INT; - default: - return THREE_MONTH_INT; - } + return INDEX_DAY_MAP.getOrDefault(dateIndex, THREE_MONTH_INT); + } + + private int getIndex(int day) { + return INDEX_DAY_MAP.inverse().getOrDefault(day, THREE_MONTH_INDEX); } /** diff --git a/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java b/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java index e38a39895a..ffd0cd94d6 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java @@ -7,6 +7,7 @@ import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.SaveSomeTemplatePane; import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.vcs.VcsMoveChecker; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -60,6 +61,10 @@ public class SwitchExistEnv extends MenuDef { * @param e 事件 */ public void actionPerformed(ActionEvent e) { + // 检查是否正在迁移 + if (!VcsMoveChecker.checkSwitch()) { + return; + } final String envName = getName(); DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); DesignerWorkspaceInfo selectedEnv = envManager.getWorkspaceInfo(envName); diff --git a/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java b/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java index 87e21c75be..63d651bb52 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java +++ b/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java @@ -64,6 +64,19 @@ public abstract class UITableModelAdapter extends AbstractTableModel implemen return null; } + /** + * 获取映射后的值 + * + * @param row 行 + * @return 值 + */ + public T getConvertRowSelectedValue(int row) { + if (table.getSelectedRow() >= 0) { + return list.get(table.convertRowIndexToModel(row)); + } + return null; + } + public void setColumnClass(Class[] classes) { this.classes = classes; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 150c4302f4..43a4199254 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -33,6 +33,7 @@ import com.fr.design.lock.LockInfoDialog; import com.fr.design.mainframe.share.mini.MiniShopDisposingChecker; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; +import com.fr.design.mainframe.vcs.VcsMoveChecker; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.ShortCut; import com.fr.design.os.impl.MacOsAddListenerAction; @@ -161,6 +162,10 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta @Override public void windowClosing(WindowEvent e) { + // 检查是否正在迁移 + if (!VcsMoveChecker.checkClose()) { + return; + } // 检查mini商城是否存在未结束的后台任务 if (!MiniShopDisposingChecker.check()) { return; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java index aa43ed5b91..b074f17f8f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java @@ -18,7 +18,7 @@ import java.awt.event.ActionEvent; public class RecycleAction extends UpdateAction { public RecycleAction() { - this.setSmallIcon("/com/fr/design/standard/vcslist/vcs_recycle"); + this.setSmallIcon("/com/fr/design/standard/vcslist/vcs_recycle", false); this.setName(Toolkit.i18nText("Fine-Design_Vcs_Recycle")); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java new file mode 100644 index 0000000000..441b2505dc --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java @@ -0,0 +1,54 @@ +package com.fr.design.mainframe.vcs; + +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.workspace.server.vcs.v2.move.VcsMoveService; + +import javax.swing.JOptionPane; + +/** + * 版本管理迁移检查 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/18 + */ +public class VcsMoveChecker { + + + /** + * 关闭前的检查 + * + * @return + */ + public static boolean checkClose() { + return check(Toolkit.i18nText("Fine-Design_Vcs_Close_Tips")); + } + + + /** + * 切换环境前的检查 + * + * @return + */ + public static boolean checkSwitch() { + return check(Toolkit.i18nText("Fine-Design_Vcs_Switch_Tips")); + } + + private static boolean check(String msg) { + if (VcsMoveService.getInstance().isMoving()) { + int result = FineJOptionPane.showConfirmDialog( + DesignerContext.getDesignerFrame(), + msg, + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + FineJOptionPane.YES_NO_OPTION + ); + return result == JOptionPane.YES_OPTION; + } + return true; + } + + + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java index eaa63b1ccd..7c2d56b509 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java @@ -19,6 +19,7 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; +import javax.swing.RowSorter; import javax.swing.SwingConstants; import javax.swing.SwingWorker; import javax.swing.UIManager; @@ -26,6 +27,7 @@ import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.UIResource; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableRowSorter; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -151,6 +153,13 @@ public abstract class AbstractSupportSelectTablePane exte tablePane.add(tableTopPane, BorderLayout.NORTH); tablePane.add(tableContentPane, BorderLayout.CENTER); tableContentPane.getEditTable().getColumnModel().getColumn(0).setMaxWidth(50); + RowSorter> sorter = new TableRowSorter>(model) { + @Override + public boolean isSortable(int column) { + return column != 0; + } + }; + tableContentPane.getEditTable().setRowSorter(sorter); return tablePane; } @@ -171,7 +180,7 @@ public abstract class AbstractSupportSelectTablePane exte int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint()); int col = ((JTable) e.getSource()).columnAtPoint(e.getPoint()); if (col == 0) { - T entity = model.getSelectedValue(); + T entity = model.getConvertRowSelectedValue(row); //改变面板的各个状态 changeComponentStatus(entity, row, col, table); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 6d927b8376..0da23fa3dd 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -189,4 +189,9 @@ public class VcsCenterPane extends VcsNewPane { protected boolean isNeedRestore() { return false; } + + @Override + protected boolean isNeedSearch() { + return true; + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index a8a719a188..1cce88efd5 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -197,8 +197,14 @@ public class VcsMovePanel extends BasicPane { private void initTipDesc() { UILabel descLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Desc")); + UILabel firstLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tips_First")); + UILabel secondLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tips_Second")); descLabel.setForeground(TIP_COLOR); + firstLabel.setForeground(TIP_COLOR); + secondLabel.setForeground(TIP_COLOR); choosePane.add(descLabel); + choosePane.add(firstLabel); + choosePane.add(secondLabel); } private void initRadioButton() { @@ -372,7 +378,7 @@ public class VcsMovePanel extends BasicPane { } - private class MoveWorker extends SwingWorker { + private class MoveWorker extends SwingWorker { private VcsMoveStrategy strategy; @@ -381,7 +387,7 @@ public class VcsMovePanel extends BasicPane { } @Override - protected Void doInBackground() throws Exception { + protected Boolean doInBackground() throws Exception { try { //开始迁移 VcsMoveService.getInstance().startMove(new VcsMoveService.BaseMoveServiceWhileMoving() { @@ -396,13 +402,10 @@ public class VcsMovePanel extends BasicPane { } }, strategy); } catch (Exception e) { - this.cancel(true); VcsMoveService.getInstance().stopMoving(); - initFailedPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); - FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); + return false; } - return null; + return true; } @Override @@ -413,9 +416,19 @@ public class VcsMovePanel extends BasicPane { @Override protected void done() { VcsMoveService.getInstance().stopMoving(); - initSuccessPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); - VcsHelper.getInstance().updateLegacyMode(); + try { + if (get()) { + initSuccessPane(); + VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); + VcsHelper.getInstance().updateLegacyMode(); + } else { + initFailedPane(); + VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); + FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); + } + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } } } From bb665f038506d25f4acc7e3b774f140e0c1edb98 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:20:02 +0800 Subject: [PATCH 03/68] =?UTF-8?q?Revert=20"REPORT-91839=20=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F?= =?UTF-8?q?=20bug=E4=BF=AE=E5=A4=8D"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 49cbdffd4356fc62cbc273a24d7fd72695ee5da9. --- .../design/actions/file/PreferencePane.java | 50 +++++++---------- .../design/actions/file/SwitchExistEnv.java | 5 -- .../itableeditorpane/UITableModelAdapter.java | 13 ----- .../fr/design/mainframe/DesignerFrame.java | 5 -- .../design/mainframe/vcs/RecycleAction.java | 2 +- .../design/mainframe/vcs/VcsMoveChecker.java | 54 ------------------- .../ui/AbstractSupportSelectTablePane.java | 11 +--- .../mainframe/vcs/ui/VcsCenterPane.java | 5 -- .../design/mainframe/vcs/ui/VcsMovePanel.java | 33 ++++-------- 9 files changed, 30 insertions(+), 148 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 1b75688b6a..fcaaccfc20 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -50,12 +50,9 @@ import com.fr.io.attr.ImageExportAttr; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.report.ReportConfigManager; -import com.fr.scheduler.tool.FineScheduler; import com.fr.stable.Constants; import com.fr.stable.os.OperatingSystem; import com.fr.third.apache.logging.log4j.Level; -import com.fr.third.guava.collect.BiMap; -import com.fr.third.guava.collect.HashBiMap; import com.fr.transaction.Configurations; import com.fr.transaction.Worker; import com.fr.transaction.WorkerAdaptor; @@ -95,7 +92,6 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.text.DecimalFormat; -import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -228,8 +224,6 @@ public class PreferencePane extends BasicPane { private JPanel saveIntervalPane; private JPanel autoCleanPane; - - private JPanel gcControlPane; private UICheckBox startupPageEnabledCheckBox; private IntegerEditor saveIntervalEditor; private UICheckBox gcEnableCheckBox; @@ -251,15 +245,7 @@ public class PreferencePane extends BasicPane { private UIRadioButton previewRenderQuality; private static final int DPI_SCALE_S = 1; private static final int DPI_SCALE_M = 2; - private static final BiMap INDEX_DAY_MAP = HashBiMap.create(new HashMap() { - { - put(ONE_DAY_INDEX, ONE_DAY_INT); - put(ONE_WEEK_INDEX, ONE_WEEK_INT); - put(ONE_MONTH_INDEX, ONE_MONTH_INT); - put(SIX_MONTH_INDEX, SIX_MONTH_INT); - put(THREE_MONTH_INDEX, THREE_MONTH_INT); - } - }); + public PreferencePane() { this.initComponents(); } @@ -432,7 +418,7 @@ public class PreferencePane extends BasicPane { savePane.add(saveIntervalPane); //gc面板 - gcControlPane = createGcControlPane(); + JPanel gcControlPane = createGcControlPane(); JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); enableVcsPanel.add(remindVcsLabel); @@ -484,14 +470,9 @@ public class PreferencePane extends BasicPane { private VcsMovePanel createMovePane(CardLayout cardLayout, JPanel parentPane) { return new VcsMovePanel(cardLayout, parentPane, new VcsMovePanel.MoveCallBack(){ @Override - public void doCallBack(boolean useV2) { - saveIntervalPane.setVisible(useV2); - autoCleanPane.setVisible(useV2); - useVcsAutoCleanScheduleCheckBox.setSelected(useV2); - useVcsAutoSaveScheduleCheckBox.setSelected(useV2); - gcControlPane.setVisible(!useV2); - useVcsAutoCleanScheduleCheckBox.setEnabled(useV2 && FineScheduler.getInstance().isStarted()); - useVcsAutoSaveScheduleCheckBox.setEnabled(useV2); + public void doCallBack(boolean visible) { + saveIntervalPane.setVisible(visible); + autoCleanPane.setVisible(visible); } }); }; @@ -509,7 +490,7 @@ public class PreferencePane extends BasicPane { autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Content"))); autoCleanPane.add(autoCleanRetainIntervalComboBox); autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Last"))); - useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode() && FineScheduler.getInstance().isStarted()); + useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode()); autoCleanPane.setVisible(false); return autoCleanPane; } @@ -935,8 +916,6 @@ public class PreferencePane extends BasicPane { useVcsAutoSaveScheduleCheckBox.setSelected(vcsConfigManager.isUseAutoSave()); useVcsAutoCleanScheduleCheckBox.setSelected(VcsConfig.getInstance().isUseV2AutoClean()); autoSaveIntervalEditor.setValue(vcsConfigManager.getAutoSaveInterval()); - autoCleanIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2CleanInterval())); - autoCleanRetainIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2RetainInterval())); gridLineColorTBButton.setColor(designerEnvManager.getGridLineColor()); paginationLineColorTBButton.setColor(designerEnvManager.getPaginationLineColor()); @@ -1026,11 +1005,18 @@ public class PreferencePane extends BasicPane { } private int getDay(int dateIndex) { - return INDEX_DAY_MAP.getOrDefault(dateIndex, THREE_MONTH_INT); - } - - private int getIndex(int day) { - return INDEX_DAY_MAP.inverse().getOrDefault(day, THREE_MONTH_INDEX); + switch (dateIndex) { + case ONE_DAY_INDEX: + return ONE_DAY_INT; + case ONE_WEEK_INDEX: + return ONE_WEEK_INT; + case ONE_MONTH_INDEX: + return ONE_MONTH_INT; + case SIX_MONTH_INDEX: + return SIX_MONTH_INT; + default: + return THREE_MONTH_INT; + } } /** diff --git a/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java b/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java index ffd0cd94d6..e38a39895a 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java @@ -7,7 +7,6 @@ import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.SaveSomeTemplatePane; import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.vcs.VcsMoveChecker; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -61,10 +60,6 @@ public class SwitchExistEnv extends MenuDef { * @param e 事件 */ public void actionPerformed(ActionEvent e) { - // 检查是否正在迁移 - if (!VcsMoveChecker.checkSwitch()) { - return; - } final String envName = getName(); DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); DesignerWorkspaceInfo selectedEnv = envManager.getWorkspaceInfo(envName); diff --git a/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java b/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java index 63d651bb52..87e21c75be 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java +++ b/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java @@ -64,19 +64,6 @@ public abstract class UITableModelAdapter extends AbstractTableModel implemen return null; } - /** - * 获取映射后的值 - * - * @param row 行 - * @return 值 - */ - public T getConvertRowSelectedValue(int row) { - if (table.getSelectedRow() >= 0) { - return list.get(table.convertRowIndexToModel(row)); - } - return null; - } - public void setColumnClass(Class[] classes) { this.classes = classes; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 43a4199254..150c4302f4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -33,7 +33,6 @@ import com.fr.design.lock.LockInfoDialog; import com.fr.design.mainframe.share.mini.MiniShopDisposingChecker; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.mainframe.vcs.VcsMoveChecker; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.menu.ShortCut; import com.fr.design.os.impl.MacOsAddListenerAction; @@ -162,10 +161,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta @Override public void windowClosing(WindowEvent e) { - // 检查是否正在迁移 - if (!VcsMoveChecker.checkClose()) { - return; - } // 检查mini商城是否存在未结束的后台任务 if (!MiniShopDisposingChecker.check()) { return; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java index b074f17f8f..aa43ed5b91 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java @@ -18,7 +18,7 @@ import java.awt.event.ActionEvent; public class RecycleAction extends UpdateAction { public RecycleAction() { - this.setSmallIcon("/com/fr/design/standard/vcslist/vcs_recycle", false); + this.setSmallIcon("/com/fr/design/standard/vcslist/vcs_recycle"); this.setName(Toolkit.i18nText("Fine-Design_Vcs_Recycle")); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java deleted file mode 100644 index 441b2505dc..0000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsMoveChecker.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.fr.design.mainframe.vcs; - -import com.fr.design.dialog.FineJOptionPane; -import com.fr.design.i18n.Toolkit; -import com.fr.design.mainframe.DesignerContext; -import com.fr.workspace.server.vcs.v2.move.VcsMoveService; - -import javax.swing.JOptionPane; - -/** - * 版本管理迁移检查 - * - * @author Destiny.Lin - * @since 11.0 - * Created on 2023/7/18 - */ -public class VcsMoveChecker { - - - /** - * 关闭前的检查 - * - * @return - */ - public static boolean checkClose() { - return check(Toolkit.i18nText("Fine-Design_Vcs_Close_Tips")); - } - - - /** - * 切换环境前的检查 - * - * @return - */ - public static boolean checkSwitch() { - return check(Toolkit.i18nText("Fine-Design_Vcs_Switch_Tips")); - } - - private static boolean check(String msg) { - if (VcsMoveService.getInstance().isMoving()) { - int result = FineJOptionPane.showConfirmDialog( - DesignerContext.getDesignerFrame(), - msg, - Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), - FineJOptionPane.YES_NO_OPTION - ); - return result == JOptionPane.YES_OPTION; - } - return true; - } - - - -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java index 7c2d56b509..eaa63b1ccd 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java @@ -19,7 +19,6 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; -import javax.swing.RowSorter; import javax.swing.SwingConstants; import javax.swing.SwingWorker; import javax.swing.UIManager; @@ -27,7 +26,6 @@ import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.UIResource; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; -import javax.swing.table.TableRowSorter; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -153,13 +151,6 @@ public abstract class AbstractSupportSelectTablePane exte tablePane.add(tableTopPane, BorderLayout.NORTH); tablePane.add(tableContentPane, BorderLayout.CENTER); tableContentPane.getEditTable().getColumnModel().getColumn(0).setMaxWidth(50); - RowSorter> sorter = new TableRowSorter>(model) { - @Override - public boolean isSortable(int column) { - return column != 0; - } - }; - tableContentPane.getEditTable().setRowSorter(sorter); return tablePane; } @@ -180,7 +171,7 @@ public abstract class AbstractSupportSelectTablePane exte int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint()); int col = ((JTable) e.getSource()).columnAtPoint(e.getPoint()); if (col == 0) { - T entity = model.getConvertRowSelectedValue(row); + T entity = model.getSelectedValue(); //改变面板的各个状态 changeComponentStatus(entity, row, col, table); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 0da23fa3dd..6d927b8376 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -189,9 +189,4 @@ public class VcsCenterPane extends VcsNewPane { protected boolean isNeedRestore() { return false; } - - @Override - protected boolean isNeedSearch() { - return true; - } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 1cce88efd5..a8a719a188 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -197,14 +197,8 @@ public class VcsMovePanel extends BasicPane { private void initTipDesc() { UILabel descLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Desc")); - UILabel firstLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tips_First")); - UILabel secondLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tips_Second")); descLabel.setForeground(TIP_COLOR); - firstLabel.setForeground(TIP_COLOR); - secondLabel.setForeground(TIP_COLOR); choosePane.add(descLabel); - choosePane.add(firstLabel); - choosePane.add(secondLabel); } private void initRadioButton() { @@ -378,7 +372,7 @@ public class VcsMovePanel extends BasicPane { } - private class MoveWorker extends SwingWorker { + private class MoveWorker extends SwingWorker { private VcsMoveStrategy strategy; @@ -387,7 +381,7 @@ public class VcsMovePanel extends BasicPane { } @Override - protected Boolean doInBackground() throws Exception { + protected Void doInBackground() throws Exception { try { //开始迁移 VcsMoveService.getInstance().startMove(new VcsMoveService.BaseMoveServiceWhileMoving() { @@ -402,10 +396,13 @@ public class VcsMovePanel extends BasicPane { } }, strategy); } catch (Exception e) { + this.cancel(true); VcsMoveService.getInstance().stopMoving(); - return false; + initFailedPane(); + VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); + FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); } - return true; + return null; } @Override @@ -416,19 +413,9 @@ public class VcsMovePanel extends BasicPane { @Override protected void done() { VcsMoveService.getInstance().stopMoving(); - try { - if (get()) { - initSuccessPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); - VcsHelper.getInstance().updateLegacyMode(); - } else { - initFailedPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); - FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); - } - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } + initSuccessPane(); + VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); + VcsHelper.getInstance().updateLegacyMode(); } } From e17d1661254e85733aaf49a12952a30a4a9b36f5 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:28:15 +0800 Subject: [PATCH 04/68] =?UTF-8?q?REPORT-100167=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=B8=85=E7=90=86=E9=85=8D=E7=BD=AE=E9=A1=B9=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index fcaaccfc20..5c3e38b868 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -50,9 +50,12 @@ import com.fr.io.attr.ImageExportAttr; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.report.ReportConfigManager; +import com.fr.scheduler.tool.FineScheduler; import com.fr.stable.Constants; import com.fr.stable.os.OperatingSystem; import com.fr.third.apache.logging.log4j.Level; +import com.fr.third.guava.collect.BiMap; +import com.fr.third.guava.collect.HashBiMap; import com.fr.transaction.Configurations; import com.fr.transaction.Worker; import com.fr.transaction.WorkerAdaptor; @@ -92,6 +95,7 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.text.DecimalFormat; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -245,7 +249,15 @@ public class PreferencePane extends BasicPane { private UIRadioButton previewRenderQuality; private static final int DPI_SCALE_S = 1; private static final int DPI_SCALE_M = 2; - + private static final BiMap INDEX_DAY_MAP = HashBiMap.create(new HashMap() { + { + put(ONE_DAY_INDEX, ONE_DAY_INT); + put(ONE_WEEK_INDEX, ONE_WEEK_INT); + put(ONE_MONTH_INDEX, ONE_MONTH_INT); + put(SIX_MONTH_INDEX, SIX_MONTH_INT); + put(THREE_MONTH_INDEX, THREE_MONTH_INT); + } + }); public PreferencePane() { this.initComponents(); } @@ -470,9 +482,9 @@ public class PreferencePane extends BasicPane { private VcsMovePanel createMovePane(CardLayout cardLayout, JPanel parentPane) { return new VcsMovePanel(cardLayout, parentPane, new VcsMovePanel.MoveCallBack(){ @Override - public void doCallBack(boolean visible) { - saveIntervalPane.setVisible(visible); - autoCleanPane.setVisible(visible); + public void doCallBack(boolean useV2) { + saveIntervalPane.setVisible(useV2); + autoCleanPane.setVisible(useV2); } }); }; @@ -916,6 +928,8 @@ public class PreferencePane extends BasicPane { useVcsAutoSaveScheduleCheckBox.setSelected(vcsConfigManager.isUseAutoSave()); useVcsAutoCleanScheduleCheckBox.setSelected(VcsConfig.getInstance().isUseV2AutoClean()); autoSaveIntervalEditor.setValue(vcsConfigManager.getAutoSaveInterval()); + autoCleanIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2CleanInterval())); + autoCleanRetainIntervalComboBox.setSelectedIndex(getIndex(VcsConfig.getInstance().getV2RetainInterval())); gridLineColorTBButton.setColor(designerEnvManager.getGridLineColor()); paginationLineColorTBButton.setColor(designerEnvManager.getPaginationLineColor()); @@ -1005,18 +1019,11 @@ public class PreferencePane extends BasicPane { } private int getDay(int dateIndex) { - switch (dateIndex) { - case ONE_DAY_INDEX: - return ONE_DAY_INT; - case ONE_WEEK_INDEX: - return ONE_WEEK_INT; - case ONE_MONTH_INDEX: - return ONE_MONTH_INT; - case SIX_MONTH_INDEX: - return SIX_MONTH_INT; - default: - return THREE_MONTH_INT; - } + return INDEX_DAY_MAP.getOrDefault(dateIndex, THREE_MONTH_INT); + } + + private int getIndex(int day) { + return INDEX_DAY_MAP.inverse().getOrDefault(day, THREE_MONTH_INDEX); } /** From 91ad776a155b0aac872bb8ac8a20dab227e32af7 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:30:22 +0800 Subject: [PATCH 05/68] =?UTF-8?q?REPORT-100545=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=9B=B4=E6=8E=A5=E8=BF=9B=E5=85=A5=E6=96=B0?= =?UTF-8?q?=E7=89=88=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=EF=BC=8C=E4=BC=9A?= =?UTF-8?q?=E6=9C=89=E5=AD=98=E5=82=A8=E4=BC=98=E5=8C=96=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 5c3e38b868..f664905260 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -228,6 +228,8 @@ public class PreferencePane extends BasicPane { private JPanel saveIntervalPane; private JPanel autoCleanPane; + + private JPanel gcControlPane; private UICheckBox startupPageEnabledCheckBox; private IntegerEditor saveIntervalEditor; private UICheckBox gcEnableCheckBox; @@ -430,7 +432,7 @@ public class PreferencePane extends BasicPane { savePane.add(saveIntervalPane); //gc面板 - JPanel gcControlPane = createGcControlPane(); + gcControlPane = createGcControlPane(); JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); enableVcsPanel.add(remindVcsLabel); @@ -485,6 +487,7 @@ public class PreferencePane extends BasicPane { public void doCallBack(boolean useV2) { saveIntervalPane.setVisible(useV2); autoCleanPane.setVisible(useV2); + gcControlPane.setVisible(!useV2); } }); }; From 88bfdc35756d1dc5e088bbfb2088d3d1fae668d5 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:32:15 +0800 Subject: [PATCH 06/68] =?UTF-8?q?REPORT-100757=20=E6=9C=AA=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=86=85=E7=BD=AE=E6=9C=8D=E5=8A=A1=E5=99=A8=EF=BC=8C?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=B8=85=E7=90=86=E9=85=8D=E7=BD=AE=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E7=81=B0=E5=8C=96=20&=20REPORT-100070=20=E6=96=B0?= =?UTF-8?q?=E7=89=88=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E5=92=8C=E4=BA=A4=E4=BA=92=E6=96=87=E6=A1=A3=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/actions/file/PreferencePane.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index f664905260..3ab832a019 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -488,6 +488,10 @@ public class PreferencePane extends BasicPane { saveIntervalPane.setVisible(useV2); autoCleanPane.setVisible(useV2); gcControlPane.setVisible(!useV2); + useVcsAutoCleanScheduleCheckBox.setSelected(useV2); + useVcsAutoSaveScheduleCheckBox.setSelected(useV2); + useVcsAutoCleanScheduleCheckBox.setEnabled(useV2 && FineScheduler.getInstance().isStarted()); + useVcsAutoSaveScheduleCheckBox.setEnabled(useV2); } }); }; @@ -505,7 +509,7 @@ public class PreferencePane extends BasicPane { autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Content"))); autoCleanPane.add(autoCleanRetainIntervalComboBox); autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Last"))); - useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode()); + useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode() && FineScheduler.getInstance().isStarted()); autoCleanPane.setVisible(false); return autoCleanPane; } From ab9dbfe11baefd6efe5efd59af8addbc989b0ffd Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:40:40 +0800 Subject: [PATCH 07/68] =?UTF-8?q?REPORT-100527=20=E4=B8=AD=E6=96=AD?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=B2=A1=E6=9C=89=E5=BC=82=E5=B8=B8=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/SwitchExistEnv.java | 6 +++ .../fr/design/mainframe/DesignerFrame.java | 7 +++ .../mainframe/vcs/ui/VcsMovingExitOption.java | 54 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovingExitOption.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java b/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java index e38a39895a..1a421c5fd0 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/SwitchExistEnv.java @@ -7,6 +7,7 @@ import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.SaveSomeTemplatePane; import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.vcs.ui.VcsMovingExitOption; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; @@ -60,6 +61,11 @@ public class SwitchExistEnv extends MenuDef { * @param e 事件 */ public void actionPerformed(ActionEvent e) { + //检查是否正在迁移,如果正在迁移就弹出弹窗让用户选择 + if (!VcsMovingExitOption.ShowDialogAndConfirmSwitch()) { + //如果用户选择取消切换环境则返回,不然说明用户就是想切换,则往下走 + return; + } final String envName = getName(); DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); DesignerWorkspaceInfo selectedEnv = envManager.getWorkspaceInfo(envName); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 150c4302f4..1ac6538926 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -34,6 +34,7 @@ import com.fr.design.mainframe.share.mini.MiniShopDisposingChecker; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.vcs.common.VcsHelper; +import com.fr.design.mainframe.vcs.ui.VcsMovingExitOption; import com.fr.design.menu.ShortCut; import com.fr.design.os.impl.MacOsAddListenerAction; import com.fr.design.os.impl.SupportOSImpl; @@ -161,6 +162,12 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta @Override public void windowClosing(WindowEvent e) { + //检查是否正在迁移,如果正在迁移就弹出弹窗让用户选择 + if (!VcsMovingExitOption.ShowDialogAndConfirmExit()) { + //如果用户选择取消退出则返回,不然说明用户就是想退出,则往下走 + return; + } + // 检查mini商城是否存在未结束的后台任务 if (!MiniShopDisposingChecker.check()) { return; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovingExitOption.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovingExitOption.java new file mode 100644 index 0000000000..0c1469b877 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovingExitOption.java @@ -0,0 +1,54 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.workspace.server.vcs.v2.move.VcsMoveService; + +import javax.swing.JOptionPane; + +/** + * 版本管理迁移检查 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/18 + */ +public class VcsMovingExitOption { + + + /** + * 关闭前的检查 + * + * @return + */ + public static boolean ShowDialogAndConfirmExit() { + return showDialogAndChoose(Toolkit.i18nText("Fine-Design_Vcs_Close_Tips")); + } + + + /** + * 切换环境前的检查 + * + * @return + */ + public static boolean ShowDialogAndConfirmSwitch() { + return showDialogAndChoose(Toolkit.i18nText("Fine-Design_Vcs_Switch_Tips")); + } + + private static boolean showDialogAndChoose(String msg) { + if (VcsMoveService.getInstance().isMoving()) { + int result = FineJOptionPane.showConfirmDialog( + DesignerContext.getDesignerFrame(), + msg, + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + FineJOptionPane.YES_NO_OPTION + ); + return result == JOptionPane.YES_OPTION; + } + return true; + } + + + +} From 326f902ff67d5b9b46ca0d82099860d4955cd958 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:42:02 +0800 Subject: [PATCH 08/68] =?UTF-8?q?REPORT-100284=20=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE=E5=BC=B9=E7=AA=97=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=96=87=E6=A1=88=E5=92=8C=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=B8=8D=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index a8a719a188..b894a4cbfa 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -197,8 +197,14 @@ public class VcsMovePanel extends BasicPane { private void initTipDesc() { UILabel descLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Desc")); + UILabel firstLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tips_First")); + UILabel secondLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tips_Second")); descLabel.setForeground(TIP_COLOR); + firstLabel.setForeground(TIP_COLOR); + secondLabel.setForeground(TIP_COLOR); choosePane.add(descLabel); + choosePane.add(firstLabel); + choosePane.add(secondLabel); } private void initRadioButton() { From c7ea9190a7f1a1a1db0dad6e699d720b0f70e84a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:44:35 +0800 Subject: [PATCH 09/68] =?UTF-8?q?REPORT-100518=20=E6=97=A0=E7=A3=81?= =?UTF-8?q?=E7=9B=98=E5=86=99=E5=85=A5=E6=9D=83=E9=99=90=EF=BC=8C=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=BF=81=E7=A7=BB=E6=97=A0=E5=BC=82=E5=B8=B8=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/VcsMovePanel.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index b894a4cbfa..5dacb65e91 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -378,7 +378,7 @@ public class VcsMovePanel extends BasicPane { } - private class MoveWorker extends SwingWorker { + private class MoveWorker extends SwingWorker { private VcsMoveStrategy strategy; @@ -387,7 +387,7 @@ public class VcsMovePanel extends BasicPane { } @Override - protected Void doInBackground() throws Exception { + protected Boolean doInBackground() throws Exception { try { //开始迁移 VcsMoveService.getInstance().startMove(new VcsMoveService.BaseMoveServiceWhileMoving() { @@ -402,13 +402,10 @@ public class VcsMovePanel extends BasicPane { } }, strategy); } catch (Exception e) { - this.cancel(true); VcsMoveService.getInstance().stopMoving(); - initFailedPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); - FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); + return false; } - return null; + return true; } @Override @@ -419,13 +416,22 @@ public class VcsMovePanel extends BasicPane { @Override protected void done() { VcsMoveService.getInstance().stopMoving(); - initSuccessPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); - VcsHelper.getInstance().updateLegacyMode(); + try { + if (get()) { + initSuccessPane(); + VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); + VcsHelper.getInstance().updateLegacyMode(); + } else { + initFailedPane(); + VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); + FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); + } + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } } } - /** * 迁移回调事件 * From 21c570af45336e75f3eb8902c9ce653e14a423d0 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:46:37 +0800 Subject: [PATCH 10/68] =?UTF-8?q?REPORT-98345=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/itableeditorpane/UITableModelAdapter.java | 15 +++++++++++++++ .../vcs/ui/AbstractSupportSelectTablePane.java | 11 ++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java b/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java index 87e21c75be..8918cccdbf 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java +++ b/designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableModelAdapter.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.mainframe.DesignerContext; import com.fr.log.FineLoggerFactory; +import org.jetbrains.annotations.Nullable; import javax.swing.JOptionPane; import javax.swing.JTable; @@ -64,6 +65,20 @@ public abstract class UITableModelAdapter extends AbstractTableModel implemen return null; } + /** + * 获取映射后的值 + * + * @param row 行 + * @return 值 + */ + @Nullable + public T getConvertRowSelectedValue(int row) { + if (table.getSelectedRow() >= 0) { + return list.get(table.convertRowIndexToModel(row)); + } + return null; + } + public void setColumnClass(Class[] classes) { this.classes = classes; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java index eaa63b1ccd..7c2d56b509 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java @@ -19,6 +19,7 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; +import javax.swing.RowSorter; import javax.swing.SwingConstants; import javax.swing.SwingWorker; import javax.swing.UIManager; @@ -26,6 +27,7 @@ import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.UIResource; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableRowSorter; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -151,6 +153,13 @@ public abstract class AbstractSupportSelectTablePane exte tablePane.add(tableTopPane, BorderLayout.NORTH); tablePane.add(tableContentPane, BorderLayout.CENTER); tableContentPane.getEditTable().getColumnModel().getColumn(0).setMaxWidth(50); + RowSorter> sorter = new TableRowSorter>(model) { + @Override + public boolean isSortable(int column) { + return column != 0; + } + }; + tableContentPane.getEditTable().setRowSorter(sorter); return tablePane; } @@ -171,7 +180,7 @@ public abstract class AbstractSupportSelectTablePane exte int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint()); int col = ((JTable) e.getSource()).columnAtPoint(e.getPoint()); if (col == 0) { - T entity = model.getSelectedValue(); + T entity = model.getConvertRowSelectedValue(row); //改变面板的各个状态 changeComponentStatus(entity, row, col, table); } From 6365ff517975093d0849668220146ee2a9bf8561 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:47:59 +0800 Subject: [PATCH 11/68] =?UTF-8?q?REPORT-100846=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E5=92=8C=E7=89=88=E6=9C=AC=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=83=BD=E6=B2=A1=E6=9C=89=E6=90=9C=E7=B4=A2=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 6d927b8376..0da23fa3dd 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -189,4 +189,9 @@ public class VcsCenterPane extends VcsNewPane { protected boolean isNeedRestore() { return false; } + + @Override + protected boolean isNeedSearch() { + return true; + } } From f2c5f7a267cfe168bacbbe2a51b3033a0047a60c Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 18 Jul 2023 15:48:44 +0800 Subject: [PATCH 12/68] =?UTF-8?q?REPORT-98345=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=20icon=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/RecycleAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java index aa43ed5b91..b074f17f8f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java @@ -18,7 +18,7 @@ import java.awt.event.ActionEvent; public class RecycleAction extends UpdateAction { public RecycleAction() { - this.setSmallIcon("/com/fr/design/standard/vcslist/vcs_recycle"); + this.setSmallIcon("/com/fr/design/standard/vcslist/vcs_recycle", false); this.setName(Toolkit.i18nText("Fine-Design_Vcs_Recycle")); } From bbbca1d9fa7efe441132475ca04c599d855670a3 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" <3166887LjL> Date: Tue, 18 Jul 2023 20:23:10 +0800 Subject: [PATCH 13/68] =?UTF-8?q?REPORT-100960=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=9C=AA=E4=BF=9D=E5=AD=98=E7=9A=84=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8B=E8=A7=A6=E5=8F=91=E8=BF=98=E5=8E=9F=EF=BC=8C=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrameFileDealerPane.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 6ef68afe7e..b030479904 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -501,10 +501,10 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt public void actionPerformed(ActionEvent e) { String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); path = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, path); + boolean currentEditing = isCurrentEditing(path); + // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) + closeOpenedTemplate(path, currentEditing); if (VcsHelper.getInstance().isLegacyMode()) { - boolean currentEditing = isCurrentEditing(path); - // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) - closeOpenedTemplate(path, currentEditing); FileVersionsPanel fileVersionTablePanel = FileVersionsPanel.getInstance(); fileVersionTablePanel.showFileVersionsPane(); stateChange(); From 73a04ae48063ea1777f3afa9056a5eb0fb9d655b Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" <3166887LjL> Date: Tue, 18 Jul 2023 20:25:59 +0800 Subject: [PATCH 14/68] =?UTF-8?q?REPORT-100959=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=A8=A1=E6=9D=BF=E7=9B=AE=E5=BD=95=E6=A0=91=E4=B8=8D?= =?UTF-8?q?=E4=BC=9A=E8=87=AA=E5=8A=A8=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/file/TemplateTreePane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java index 74f26aaf80..a3af0ea8fa 100644 --- a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java @@ -378,8 +378,6 @@ public class TemplateTreePane extends JPanel implements FileOperations { deleteNodes(deletableNodes); } } - Set deletedFileNode = deletableNodes.stream().map(treeNode -> (FileNode) treeNode.getUserObject()).collect(Collectors.toSet()); - refreshAfterDelete(deletedFileNode); } private void refreshAfterDelete(Set deletedPaths) { @@ -426,6 +424,8 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (!get()) { showErrorDialog(); } + Set deletedFileNode = nodes.stream().map(treeNode -> (FileNode) treeNode.getUserObject()).collect(Collectors.toSet()); + refreshAfterDelete(deletedFileNode); } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } From eb348a6389cadfc0817afc967cb0cae79a43b5a5 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" <3166887LjL> Date: Tue, 18 Jul 2023 20:27:15 +0800 Subject: [PATCH 15/68] =?UTF-8?q?REPORT-98345=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E5=88=A4=E6=96=AD=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java index 200aa38e7a..6911b7a93a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java @@ -16,7 +16,7 @@ public class VcsTableEntity implements TableEntity{ private static final String MB = "MB"; private static final String VERSION = "V."; - private static final double MB_SIZE = 1024.0; + private static final double MB_SIZE = 1024.0 * 1024; private VcsEntity entity; From 48c77bea248447999eb0fcede944bc0f4c7494cb Mon Sep 17 00:00:00 2001 From: "Sky.Luo" Date: Wed, 19 Jul 2023 09:14:22 +0800 Subject: [PATCH 16/68] =?UTF-8?q?REPORT-96966=20fix:=20=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E6=8F=90=E5=88=B0release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget/editors/DataBindingEditor.java | 13 +++++++++--- .../widget/editors/WidgetValueEditor.java | 20 ++++++++++++++++++- .../component/FormWidgetValuePane.java | 2 +- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java index 018bc75aeb..bad481e7af 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java @@ -29,8 +29,8 @@ public class DataBindingEditor extends Editor { private final static int HORI_GAP = 1; private final static int VER_GAP = 7; - private TableDataComboBox tableDataComboBox; - private LazyComboBox columnNameComboBox; + protected TableDataComboBox tableDataComboBox; + protected LazyComboBox columnNameComboBox; private ItemListener tableDataComboBoxListener = new ItemListener() { public void itemStateChanged(ItemEvent evt) { boolean isInit = columnNameComboBox.getSelectedIndex() == -1; @@ -87,9 +87,16 @@ public class DataBindingEditor extends Editor { } }); columnNameComboBox.setEditable(true); + addComboBoxesAndSetPosition(); + columnNameComboBox.addItemListener(columnNameComboboxListener); + } + + /** + * 根据需求不同调整下拉框的位置 + */ + protected void addComboBoxesAndSetPosition() { this.add(tableDataComboBox, BorderLayout.NORTH); this.add(columnNameComboBox, BorderLayout.CENTER); - columnNameComboBox.addItemListener(columnNameComboboxListener); } protected TableDataSource getTableDataSource() { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/WidgetValueEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/WidgetValueEditor.java index 4f5c7f28f3..48199a5e6b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/WidgetValueEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/WidgetValueEditor.java @@ -5,6 +5,7 @@ package com.fr.design.mainframe.widget.editors; import java.awt.Component; +import java.awt.BorderLayout; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -30,6 +31,7 @@ public class WidgetValueEditor extends AbstractPropertyEditor { /** * 根据类型创建 + * 服务器 - 控件管理 * @param type 类型 * @param onlyServer 是否是服务器 * @return 编辑器 @@ -41,7 +43,7 @@ public class WidgetValueEditor extends AbstractPropertyEditor { case DataControl.TYPE_FORMULA: return new FormulaEditor(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); case DataControl.TYPE_DATABINDING: - return onlyServer ? new ServerDataBindingEditor() : new DataBindingEditor(); + return onlyServer ? new WidgetValueServerDataBindingEditor() : new WidgetValueDataBindingEditor(); case DataControl.TYPE_STRING: return new TextEditor(); case DataControl.TYPE_BOOLEAN: @@ -70,6 +72,22 @@ public class WidgetValueEditor extends AbstractPropertyEditor { } return editor; } + + private static class WidgetValueDataBindingEditor extends DataBindingEditor { + @Override + protected void addComboBoxesAndSetPosition() { + this.add(tableDataComboBox, BorderLayout.CENTER); + this.add(columnNameComboBox, BorderLayout.EAST); + } + } + + private static class WidgetValueServerDataBindingEditor extends ServerDataBindingEditor { + @Override + protected void addComboBoxesAndSetPosition() { + this.add(tableDataComboBox, BorderLayout.CENTER); + this.add(columnNameComboBox, BorderLayout.EAST); + } + } public WidgetValueEditor(Object o) { this(o, false); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/FormWidgetValuePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/FormWidgetValuePane.java index 6943085ecf..7a69292ce5 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/FormWidgetValuePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/component/FormWidgetValuePane.java @@ -63,7 +63,7 @@ public class FormWidgetValuePane extends JPanel { /** * 根据类型创建 - * + * 设计器右侧控件设置 - 属性 * @param type 类型 * @param onlyServer 是否是服务器 * @return 编辑器 From 5aad600fee1278e9e90b38e239a69085a07877a9 Mon Sep 17 00:00:00 2001 From: obo Date: Wed, 19 Jul 2023 10:15:26 +0800 Subject: [PATCH 17/68] =?UTF-8?q?REPORT-100623=20=E6=8E=A7=E4=BB=B6-?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF=E6=A0=B9=E6=8D=AE=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E7=9A=84=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E9=A1=B5=E9=9D=A2=E6=94=BE=E5=A4=A7=E5=90=8E?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E7=82=B9=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/designer/creator/XEditorHolder.java | 2 +- .../java/com/fr/design/mainframe/EditingMouseListener.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java index 8bcacb7d26..608eb2b27d 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java @@ -46,7 +46,7 @@ public class XEditorHolder extends XWidgetCreator { Rectangle rect = this.getBounds(); int min = rect.x + rect.width / 2 - editingMouseListener.getMinMoveSize(); int max = rect.x + rect.width / 2 + editingMouseListener.getMinMoveSize(); - if (e.getX() > min && e.getX() < max) { + if (e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() > min && e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() < max) { ToolTipEditor.getInstance().showToolTip((XEditorHolder) this, e.getXOnScreen(), e.getYOnScreen()); } 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 0555cf1723..62a5bc5043 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 @@ -281,7 +281,7 @@ public class EditingMouseListener extends MouseInputAdapter { Rectangle rect = xcreator.getBounds(); int min = rect.x + rect.width / 2 - minMoveSize; int max = rect.x + rect.width / 2 + minMoveSize; - if (e.getX() > min && e.getX() < max) { + if (e.getX() + designer.getHorizontalScaleValue() > min && e.getX() + designer.getHorizontalScaleValue() < max) { if (designer.getCursor().getType() != Cursor.HAND_CURSOR) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } @@ -673,8 +673,8 @@ public class EditingMouseListener extends MouseInputAdapter { currentEditor = designerEditor; currentXCreator = creator; Rectangle bounds = new Rectangle(1, 1, creator.getWidth() - 2, creator.getHeight() - 2); - bounds.x += (rect.x - designer.getArea().getHorizontalValue()); - bounds.y += (rect.y - designer.getArea().getVerticalValue()); + bounds.x += (rect.x - designer.getHorizontalScaleValue()); + bounds.y += (rect.y - designer.getVerticalScaleValue()); designerEditor.getEditorTarget().setBounds(bounds); designer.add(designerEditor.getEditorTarget()); designer.invalidate(); From f2d954c2874bbf9b5fd8520edb8049336b1773a7 Mon Sep 17 00:00:00 2001 From: obo Date: Wed, 19 Jul 2023 10:17:50 +0800 Subject: [PATCH 18/68] =?UTF-8?q?REPORT-99924=20=E6=8F=90=E5=88=B0bugfix?= =?UTF-8?q?=E4=BA=86,=E5=9B=9E=E9=80=80=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/report/ImageExportPane.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java b/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java index ba4eccb63a..b3c46d5c60 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java @@ -84,21 +84,20 @@ public class ImageExportPane extends AbstractExportPane { private void initGlobalSettings() { - globalResolutionBtnS = new UIRadioButton("96dpi"); - globalResolutionBtnM = new UIRadioButton("192dpi", true); + globalResolutionBtnS = new UIRadioButton("96dpi", true); + globalResolutionBtnM = new UIRadioButton("192dpi"); globalResolutionBtnL = new UIRadioButton("300dpi"); wrapButtonsInButtonGroup(globalResolutionBtnS, globalResolutionBtnM, globalResolutionBtnL); - globalFormatJpg = new UIRadioButton("jpg"); - globalFormatPng = new UIRadioButton("png", true); + globalFormatJpg = new UIRadioButton("jpg", true); + globalFormatPng = new UIRadioButton("png"); wrapButtonsInButtonGroup(globalFormatJpg, globalFormatPng); - globalRenderQuality = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Quality_First")); - globalRenderSpeed = new UIRadioButton(Toolkit.i18nText(("Fine-Design_Image_Export_Speed_Priority")), true); + globalRenderQuality = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Quality_First"), true); + globalRenderSpeed = new UIRadioButton(Toolkit.i18nText(("Fine-Design_Image_Export_Speed_Priority"))); wrapButtonsInButtonGroup(globalRenderQuality, globalRenderSpeed); - templateThumbnail = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Thumbnail"), true); - templatePaging = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Paging")); + templateThumbnail = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Thumbnail")); wrapButtonsInButtonGroup(templateThumbnail, templatePaging); } From 83f9acc28dd15f513c3f1b9bdb17d009599c24e4 Mon Sep 17 00:00:00 2001 From: obo Date: Wed, 19 Jul 2023 10:18:25 +0800 Subject: [PATCH 19/68] =?UTF-8?q?REPORT-99924=20=E6=8F=90=E5=88=B0bugfix?= =?UTF-8?q?=E4=BA=86,=E5=9B=9E=E9=80=80=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/report/ImageExportPane.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java b/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java index b3c46d5c60..08d1a213c3 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ImageExportPane.java @@ -98,6 +98,7 @@ public class ImageExportPane extends AbstractExportPane { wrapButtonsInButtonGroup(globalRenderQuality, globalRenderSpeed); templateThumbnail = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Thumbnail")); + templatePaging = new UIRadioButton(Toolkit.i18nText("Fine-Design_Image_Export_Paging")); wrapButtonsInButtonGroup(templateThumbnail, templatePaging); } From 47fcbc203159d6540815ccc2e18950d872ab8db4 Mon Sep 17 00:00:00 2001 From: obo Date: Wed, 19 Jul 2023 11:10:13 +0800 Subject: [PATCH 20/68] =?UTF-8?q?REPORT-100623=20=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E4=B8=8A=E7=AB=96=E7=9B=B4=E6=96=B9=E5=90=91=E7=9A=84=E5=81=8F?= =?UTF-8?q?=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/XEditorHolder.java | 22 ++++++++++++++++--- .../mainframe/EditingMouseListener.java | 15 ++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java index 608eb2b27d..1889172c69 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java @@ -44,9 +44,7 @@ public class XEditorHolder extends XWidgetCreator { ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); Rectangle rect = this.getBounds(); - int min = rect.x + rect.width / 2 - editingMouseListener.getMinMoveSize(); - int max = rect.x + rect.width / 2 + editingMouseListener.getMinMoveSize(); - if (e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() > min && e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() < max) { + if (MouseEditRangeValid(e, rect, editingMouseListener)) { ToolTipEditor.getInstance().showToolTip((XEditorHolder) this, e.getXOnScreen(), e.getYOnScreen()); } @@ -54,6 +52,24 @@ public class XEditorHolder extends XWidgetCreator { } } + /** + * 判断当前鼠标事件是否在可编辑区域内 + * + * @param e 鼠标事件 + * @param rect 区域 + * @param editingMouseListener 位置处理器 + * @return 是否位于可编辑区 + */ + private boolean MouseEditRangeValid(MouseEvent e, Rectangle rect, EditingMouseListener editingMouseListener) { + int minHorizontal = rect.x + rect.width / 2 - editingMouseListener.getMinMoveSize(); + int maxHorizontal = rect.x + rect.width / 2 + editingMouseListener.getMinMoveSize(); + int minVertical = rect.y + rect.height / 2 - editingMouseListener.getMinMoveSize(); + int maxVertical = rect.y + rect.height / 2 + editingMouseListener.getMinMoveSize(); + + return e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() > minHorizontal && e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() < maxHorizontal + && e.getY() + editingMouseListener.getDesigner().getVerticalScaleValue() > minVertical && e.getY() + editingMouseListener.getDesigner().getVerticalScaleValue() < maxVertical; + } + @Override protected String getIconName() { return "text_field_16.png"; 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 62a5bc5043..64b07d50ce 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 @@ -279,9 +279,7 @@ public class EditingMouseListener extends MouseInputAdapter { if (component instanceof XEditorHolder) { XEditorHolder xcreator = (XEditorHolder) component; Rectangle rect = xcreator.getBounds(); - int min = rect.x + rect.width / 2 - minMoveSize; - int max = rect.x + rect.width / 2 + minMoveSize; - if (e.getX() + designer.getHorizontalScaleValue() > min && e.getX() + designer.getHorizontalScaleValue() < max) { + if (creatorRangeValid(e, rect)) { if (designer.getCursor().getType() != Cursor.HAND_CURSOR) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } @@ -747,4 +745,15 @@ public class EditingMouseListener extends MouseInputAdapter { refreshTopXCreator(false); } + /** + * 判断当前鼠标移动事件是否在Creator有效范围内 + */ + private boolean creatorRangeValid(MouseEvent e, Rectangle rect) { + int minHorizontal = rect.x + rect.width / 2 - minMoveSize; + int maxHorizontal = rect.x + rect.width / 2 + minMoveSize; + int minVertical = rect.y + rect.height / 2 - minMoveSize; + int maxVertical = rect.y + rect.height / 2 + minMoveSize; + return e.getX() + designer.getHorizontalScaleValue() > minHorizontal && e.getX() + designer.getHorizontalScaleValue() < maxHorizontal + && e.getY() + designer.getVerticalScaleValue() > minVertical && e.getY() + designer.getVerticalScaleValue() < maxVertical; + } } From 6d968323de89d6d30c9665f4b4126080c0bd8539 Mon Sep 17 00:00:00 2001 From: obo Date: Wed, 19 Jul 2023 11:24:00 +0800 Subject: [PATCH 21/68] =?UTF-8?q?REPORT-100623=20=E8=8E=B7=E5=8F=96rootCon?= =?UTF-8?q?tainer=E6=97=B6=E5=8A=A0=E4=B8=8A=E7=AB=96=E7=9B=B4=E6=96=B9?= =?UTF-8?q?=E5=90=91=E7=9A=84=E5=81=8F=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/FormDesigner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java index 24ed004fff..87f7465490 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java @@ -1208,7 +1208,7 @@ public class FormDesigner extends TargetComponent
implements TreeSelection } public XLayoutContainer getRootContainer(int y) { - XLayoutContainer container = y < paraHeight - formArea.getVerticalValue() ? paraComponent : rootComponent; + XLayoutContainer container = y < paraHeight - formArea.getVerticalValue() / scale ? paraComponent : rootComponent; if (container == null) { container = rootComponent; } From b7eb17ae624ae3b00f79ffcf97be4b2da2f59d58 Mon Sep 17 00:00:00 2001 From: obo Date: Wed, 19 Jul 2023 11:26:47 +0800 Subject: [PATCH 22/68] =?UTF-8?q?REPORT-100623=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=90=8D=E5=86=99=E6=88=90=E5=A4=A7=E5=86=99=E5=AD=97=E6=AF=8D?= =?UTF-8?q?=E5=BC=80=E5=A4=B4=E4=BA=86=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/designer/creator/XEditorHolder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java index 1889172c69..d523010bf8 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java @@ -44,7 +44,7 @@ public class XEditorHolder extends XWidgetCreator { ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); Rectangle rect = this.getBounds(); - if (MouseEditRangeValid(e, rect, editingMouseListener)) { + if (mouseEditRangeValid(e, rect, editingMouseListener)) { ToolTipEditor.getInstance().showToolTip((XEditorHolder) this, e.getXOnScreen(), e.getYOnScreen()); } @@ -60,7 +60,7 @@ public class XEditorHolder extends XWidgetCreator { * @param editingMouseListener 位置处理器 * @return 是否位于可编辑区 */ - private boolean MouseEditRangeValid(MouseEvent e, Rectangle rect, EditingMouseListener editingMouseListener) { + private boolean mouseEditRangeValid(MouseEvent e, Rectangle rect, EditingMouseListener editingMouseListener) { int minHorizontal = rect.x + rect.width / 2 - editingMouseListener.getMinMoveSize(); int maxHorizontal = rect.x + rect.width / 2 + editingMouseListener.getMinMoveSize(); int minVertical = rect.y + rect.height / 2 - editingMouseListener.getMinMoveSize(); From 52cf3229b16eb5a5d0b9267e524502b211cf9dd5 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 19 Jul 2023 14:51:58 +0800 Subject: [PATCH 23/68] =?UTF-8?q?REPORT-101022=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E7=AB=99=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E8=BF=9B=E5=BA=A6=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/dialog/BasicPane.java | 20 ++ .../com/fr/design/file/TemplateTreePane.java | 6 +- .../mainframe/vcs/VcsOperatorWorker.java | 291 ++++++++++++++++++ .../fr/design/mainframe/vcs/VcsService.java | 162 ---------- .../design/mainframe/vcs/ui/RecyclePane.java | 6 +- .../vcs/ui/VcsBatchProcessDetailPane.java | 156 ++++++++++ .../mainframe/vcs/ui/VcsCenterPane.java | 4 +- .../design/mainframe/vcs/ui/VcsNewPane.java | 6 +- .../mainframe/vcs/ui/VcsProgressDialog.java | 81 +++++ 9 files changed, 560 insertions(+), 172 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsOperatorWorker.java delete mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsService.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsBatchProcessDetailPane.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java diff --git a/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java b/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java index 75626441bf..5b77b9571a 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java +++ b/designer-base/src/main/java/com/fr/design/dialog/BasicPane.java @@ -75,6 +75,26 @@ public abstract class BasicPane extends JPanel { return dg; } + /** + * 显示小窗口并允许自定义需不需要按钮 + * + * @param window 窗口 + * @param isNeedButtonsPane 是否需要确定删除按钮 + * @return 对话框 + */ + public BasicDialog showSmallWindow(Window window, boolean isNeedButtonsPane) { + BasicDialog dg; + if (window instanceof Frame) { + dg = new DIALOG((Frame) window, isNeedButtonsPane); + } else { + dg = new DIALOG((Dialog) window, isNeedButtonsPane); + } + dg.setBasicDialogSize(BasicDialog.SMALL); + GUICoreUtils.centerWindow(dg); + dg.setResizable(false); + return dg; + } + /** * 图表类型选择时 弹出的按钮大小, 不适合用最大最小, 因为图表大小 默认是规定好的, 那么界面大小也是必须配合. diff --git a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java index a3af0ea8fa..d730c69d35 100644 --- a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java @@ -18,7 +18,6 @@ import com.fr.design.lock.LockInfoDialog; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager; import com.fr.design.mainframe.manager.search.searcher.control.pane.TemplateSearchRemindPane; -import com.fr.design.mainframe.vcs.VcsService; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.file.FILE; import com.fr.file.FileNodeFILE; @@ -65,6 +64,7 @@ import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; +import com.fr.workspace.server.vcs.VcsOperator; import org.jetbrains.annotations.Nullable; @@ -407,7 +407,9 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (node instanceof FileNode) { FileNodeFILE nodeFILE = new FileNodeFILE((FileNode) node); if (nodeFILE.exists()) { - VcsService.getInstance().doRecycle(VcsHelper.getInstance().dealWithFilePath(((FileNode) node).getEnvPath())); + WorkContext.getCurrent().get(VcsOperator.class).recycleVersion( + VcsHelper.getInstance().getCurrentUsername(), + VcsHelper.getInstance().dealWithFilePath(((FileNode) node).getEnvPath())); if (TemplateResourceManager.getResource().delete(nodeFILE)) { HistoryTemplateListCache.getInstance().deleteFile(nodeFILE); } else { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsOperatorWorker.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsOperatorWorker.java new file mode 100644 index 0000000000..b59ac3c128 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsOperatorWorker.java @@ -0,0 +1,291 @@ +package com.fr.design.mainframe.vcs; + +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.vcs.ui.VcsBatchProcessDetailPane; +import com.fr.design.mainframe.vcs.ui.VcsProgressDialog; +import com.fr.log.FineLoggerFactory; +import com.fr.report.entity.VcsEntity; +import com.fr.stable.StringUtils; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsOperator; + +import javax.swing.SwingWorker; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +/** + * 为版本中心、回收站、版本详情提供带进度条与结算面板的操作的worker + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/18 + */ +public class VcsOperatorWorker { + private int count = 0; + + private static final int FREQ = 5; + + private String successStr; + + private String title; + + private String failedStr; + + private String everyFailedStr; + + private VcsProgressDialog dialog; + + + private static final String PREFIX = "(v."; + private static final String TAIL = ")"; + + public VcsOperatorWorker(String title, String dealingStr, String successStr, String failedStr, String everyFailedStr) { + this.title = title; + this.successStr = successStr; + this.failedStr = failedStr; + this.everyFailedStr = everyFailedStr; + dialog = new VcsProgressDialog(title, dealingStr); + } + + public VcsOperatorWorker(String everyFailedStr) { + this.title = StringUtils.EMPTY; + this.successStr = StringUtils.EMPTY; + this.failedStr = StringUtils.EMPTY; + this.everyFailedStr = everyFailedStr; + } + + /** + * 快速创建用于删除的worker + * + * @return + */ + public static VcsOperatorWorker createDeleteWorker() { + return new VcsOperatorWorker( + Toolkit.i18nText("Fine-Design_Vcs_Delete_Progress_Title"), + Toolkit.i18nText("Fine-Design_Vcs_Delete_Progress_Tips"), + Toolkit.i18nText("Fine-Design_Vcs_Delete_Progress_Success"), + "Fine-Design_Vcs_Delete_Progress_Failed", + Toolkit.i18nText("Fine-Design_Vcs_Delete_Every_Failed")); + } + + + /** + * 快速创建用于还原的worker + * + * @return + */ + public static VcsOperatorWorker createRestoreWorker() { + return new VcsOperatorWorker( + Toolkit.i18nText("Fine-Design_Vcs_Restore_Progress_Title"), + Toolkit.i18nText("Fine-Design_Vcs_Restore_Progress_Tips"), + Toolkit.i18nText("Fine-Design_Vcs_Restore_Progress_Success"), + "Fine-Design_Vcs_Restore_Progress_Failed", + Toolkit.i18nText("Fine-Design_Vcs_Restore_Every_Failed")); + } + + + /** + * 快速创建用于还原的worker + * + * @return + */ + public static VcsOperatorWorker createUpdateWorker() { + return new VcsOperatorWorker(Toolkit.i18nText("Fine-Design_Vcs_Update_Every_Failed")); + } + + + /** + * 批量还原 + * + * @param vcsEntities 需要还原的版本 + */ + public void batchRestore(List vcsEntities) { + List failedList = new ArrayList<>(); + startProcess(vcsEntities, failedList, (vcsEntity, operator) -> { + String fileName = vcsEntity.getFilename(); + boolean result = true; + try { + operator.restoreVersion(fileName); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + result = false; + } + if (!result) { + failedList.add(fileName+PREFIX+vcsEntity.getVersion()+TAIL); + } + }); + } + + + /** + * 批量删除 + * + * @param vcsEntities 需要删除的版本 + * @param all 是否需要删除所有版本 + */ + public void batchDelete(List vcsEntities, boolean all) { + List failedList = new ArrayList<>(); + startProcess(vcsEntities, failedList, (vcsEntity, operator) -> { + String fileName = vcsEntity.getFilename(); + boolean result = true; + try { + if (all) { + operator.deleteVersionForRecycle(fileName); + } else { + operator.deleteVersion(fileName, vcsEntity.getVersion()); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + result = false; + } + if (!result) { + failedList.add(fileName+PREFIX+vcsEntity.getVersion()+TAIL); + } + }); + } + + + /** + * 删除指定模板的全部历史版本 + * + * @param entity VcsEntity + */ + public void doDelete(VcsEntity entity) { + String fileName = entity.getFilename(); + start4Single(entity, (vcsEntity, operator) -> operator.deleteVersionForRecycle(fileName), fileName + everyFailedStr); + } + + /** + * 删除指定模板的指定版本 + * + * @param entity 版本 + */ + public void deleteTargetVersion(VcsEntity entity) { + String fileName = entity.getFilename(); + int version = entity.getVersion(); + start4Single(entity, (vcsEntity, operator) -> { + operator.deleteVersion(fileName, version); + }, fileName + everyFailedStr); + } + + + /** + * 更新版本 + * + * @param entity 版本 + */ + public void updateEntityAnnotation(VcsEntity entity) { + start4Single(entity, (vcsEntity, operator) -> { + operator.updateVersion(entity); + }, everyFailedStr); + } + + private void startProcess(List vcsEntities, List failedList, VcsWorkerOperator workerOperator) { + try { + dialog.getProgressBar().setMaximum(vcsEntities.size()); + start4Batch(vcsEntities, failedList, workerOperator); + dialog.showDialog(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + /** + * 控制更新频率 + * + * @return 是否需要更新进度 + */ + private boolean needPublish() { + return (count > FREQ && count % FREQ == 0) || count < FREQ; + } + + private void start4Single(VcsEntity entity, VcsWorkerOperator vcsWorkerOperator, String failedTip) { + new SwingWorker() { + @Override + protected void done() { + try { + if (!get()) { + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), failedTip); + } + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + @Override + protected Boolean doInBackground() throws Exception { + try { + VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); + vcsWorkerOperator.process(entity, operator); + } catch (Exception e) { + return false; + } + return true; + } + }.execute(); + } + + private void start4Batch(List vcsEntities, List failedList, VcsWorkerOperator workerOperator) { + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); + for (VcsEntity vcsEntity : vcsEntities) { + workerOperator.process(vcsEntity, operator); + count++; + if (needPublish()) { + publish(count); + } + } + return failedList.isEmpty(); + } + @Override + protected void process(List chunks) { + dialog.getProgressBar().setValue(chunks.get(chunks.size() - 1)); + } + @Override + protected void done() { + dialog.closeDialog(); + try { + showErrorDetailPane(get(), failedList, failedList.size(), vcsEntities.size() - failedList.size()); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + }.execute(); + } + + + private void showErrorDetailPane(boolean result, List failedList, int failed, int success) { + if (result) { + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), successStr); + } else { + VcsBatchProcessDetailPane pane = new VcsBatchProcessDetailPane( + DesignerContext.getDesignerFrame(), + title, + Toolkit.i18nText(failedStr, failed, success) + ); + for (String msg : failedList) { + pane.updateDetailArea(msg + everyFailedStr); + } + pane.show(); + } + } + + /** + * Vcs面板操作处理接口 + * + */ + private interface VcsWorkerOperator { + + /** + * 处理 + * + * @param vcsEntity 版本 + * @param operator 操作类 + */ + void process(VcsEntity vcsEntity, VcsOperator operator) throws Exception; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsService.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsService.java deleted file mode 100644 index e83b0212e9..0000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsService.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.fr.design.mainframe.vcs; - -import com.fr.concurrent.NamedThreadFactory; -import com.fr.design.mainframe.vcs.common.VcsHelper; -import com.fr.log.FineLoggerFactory; -import com.fr.report.entity.VcsEntity; -import com.fr.workspace.WorkContext; -import com.fr.workspace.server.vcs.VcsOperator; - -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -/** - * 版本管理常用操作 - *

便于版本管理面板快捷实现版本管理相关操作 - * - * @author Destiny.Lin - * @since 11.0 - * Created on 2023/7/10 - */ -public class VcsService { - - private static final String SERVICE = "VcsService"; - private static final VcsService INSTANCE = new VcsService(); - - private static final ExecutorService executorService = Executors.newFixedThreadPool(5, new NamedThreadFactory(SERVICE)); - - /** - * 获取单例 - * - * @return - */ - public static VcsService getInstance() { - return INSTANCE; - } - - private VcsService() { - } - - /** - * 回收模板 - * - * @param filename - */ - public void doRecycle(String filename) { - try { - WorkContext.getCurrent().get(VcsOperator.class).recycleVersion(VcsHelper.getInstance().getCurrentUsername(), filename); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - - /** - * 从回收站还原版本 - * - * @param vcsEntities - */ - public void doRestore(List vcsEntities) { - try { - executorService.execute(new Runnable() { - @Override - public void run() { - VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); - for (VcsEntity vcsEntity : vcsEntities) { - String fileName = vcsEntity.getFilename(); - operator.restoreVersion(fileName); - } - } - }); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - - /** - * 删除对应列表中所有模板的指定的历史版本 - * - * @param vcsEntities - */ - public void doDelete(List vcsEntities, boolean all) { - try { - executorService.execute(new Runnable() { - @Override - public void run() { - VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); - for (VcsEntity vcsEntity : vcsEntities) { - String fileName = vcsEntity.getFilename(); - if (all) { - operator.deleteVersionForRecycle(fileName); - } else { - operator.deleteVersion(fileName, vcsEntity.getVersion()); - } - } - } - }); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - /** - * 删除指定模板的全部历史版本 - * - * @param entity VcsEntity - */ - public void deleteEntity(VcsEntity entity) { - try { - executorService.execute(new Runnable() { - @Override - public void run() { - VcsOperator vcsOperator = WorkContext.getCurrent().get(VcsOperator.class); - String fileName = entity.getFilename(); - vcsOperator.deleteVersionForRecycle(fileName); - } - }); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - /** - * 删除指定模板的指定版本 - * - * @param fileName 文件名 - * @param version 版本号 - */ - public void deleteEntity(String fileName, int version) { - try { - executorService.execute(new Runnable() { - @Override - public void run() { - VcsOperator vcsOperator = WorkContext.getCurrent().get(VcsOperator.class); - vcsOperator.deleteVersion(fileName, version); - } - }); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - /** - * 更新版本 - * - * @param entity 版本 - */ - public void updateEntityAnnotation(VcsEntity entity) { - try { - executorService.execute(new Runnable() { - @Override - public void run() { - VcsOperator vcsOperator = WorkContext.getCurrent().get(VcsOperator.class); - vcsOperator.updateVersion(entity); - } - }); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } -} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index e829318174..594e0c1722 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -5,7 +5,7 @@ import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; -import com.fr.design.mainframe.vcs.VcsService; +import com.fr.design.mainframe.vcs.VcsOperatorWorker; import com.fr.design.mainframe.vcs.TableEntity; import com.fr.design.mainframe.vcs.TableValueOperator; import com.fr.design.mainframe.vcs.VcsTableEntity; @@ -134,7 +134,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane fireListener(new VcsResponseListener() { @Override public void doAfterChooseYes(List selectList) { - VcsService.getInstance().doDelete(selectList, isNeedDeleteAllVersion()); + VcsOperatorWorker.createDeleteWorker().batchDelete(selectList, isNeedDeleteAllVersion()); } }, true); } @@ -150,7 +150,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane fireListener(new VcsResponseListener() { @Override public void doAfterChooseYes(List selectList) { - VcsService.getInstance().doRestore(selectList); + VcsOperatorWorker.createRestoreWorker().batchRestore(selectList); } }, false); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsBatchProcessDetailPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsBatchProcessDetailPane.java new file mode 100644 index 0000000000..4421b7f301 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsBatchProcessDetailPane.java @@ -0,0 +1,156 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; + +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +/** + * 处理结果详细面板 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/19 + */ +public class VcsBatchProcessDetailPane { + + private UILabel message = new UILabel(); + private UIButton cancelButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); + private UILabel uiLabel = new UILabel(); + private UILabel directUiLabel = new UILabel(); + private UILabel detailLabel = new UILabel(); + + private JPanel upPane; + private JPanel midPane; + private JPanel downPane; + private JPanel hiddenPanel; + private JTextArea jta; + private JDialog dialog; + + public static final Dimension DEFAULT = new Dimension(380, 150); + public static final Dimension DEFAULT_PRO = new Dimension(380, 270); + + public VcsBatchProcessDetailPane(Frame parent, String title, String msg) { + init(parent, title, msg); + } + + private void init(Frame parent, String title, String msg) { + message.setBorder(BorderFactory.createEmptyBorder(8, 5, 0, 0)); + message.setText(msg); + dialog = new JDialog(parent, title, true); + dialog.setSize(DEFAULT); + JPanel jp = new JPanel(); + initUpPane(); + initDownPane(); + initMidPane(); + initHiddenPanel(); + initListener(); + jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS)); + jp.add(upPane); + jp.add(midPane); + jp.add(hiddenPanel); + jp.add(downPane); + hiddenPanel.setVisible(false); + dialog.add(jp); + dialog.setResizable(false); + dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(parent)); + } + + private void initDownPane() { + downPane = new JPanel(); + downPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 15, 9)); + downPane.add(cancelButton); + } + + private void initUpPane() { + upPane = new JPanel(); + uiLabel = new UILabel(UIManager.getIcon("OptionPane.errorIcon")); + upPane.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); + upPane.add(uiLabel); + upPane.add(message); + } + + private void initMidPane() { + midPane = new JPanel(); + midPane.add(directUiLabel); + midPane.add(detailLabel); + midPane.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0)); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); + detailLabel.setForeground(Color.BLUE); + detailLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); + } + + private void initHiddenPanel() { + hiddenPanel = new JPanel(); + hiddenPanel.setLayout(new BorderLayout(2, 0)); + hiddenPanel.add(new JPanel(), BorderLayout.WEST); + hiddenPanel.add(new JPanel(), BorderLayout.EAST); + JPanel borderPanel = new JPanel(); + borderPanel.setLayout(new BorderLayout()); + jta = new JTextArea(); + JScrollPane jsp = new JScrollPane(jta); + jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + jta.setEditable(false); + borderPanel.add(jsp, BorderLayout.CENTER); + hiddenPanel.add(borderPanel); + } + + /** + * 补充更详细的报错信息 + * + * @param message 信息 + */ + public void updateDetailArea(String message) { + jta.append(message + "\n"); + } + + private void initListener() { + detailLabel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (hiddenPanel.isVisible()) { + hiddenPanel.setVisible(false); + dialog.setSize(DEFAULT); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); + directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); + } else { + dialog.setSize(DEFAULT_PRO); + hiddenPanel.setVisible(true); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Hide_Detail")); + directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); + } + } + + }); + cancelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + hiddenPanel.removeAll(); + dialog.dispose(); + } + }); + } + + + /** + * 显示面板 + */ + public void show() { + dialog.setVisible(true); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 0da23fa3dd..d559b26191 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -6,7 +6,7 @@ import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.vcs.VcsService; +import com.fr.design.mainframe.vcs.VcsOperatorWorker; import com.fr.design.mainframe.vcs.VcsTableEntity; import com.fr.file.FileNodeFILE; @@ -111,7 +111,7 @@ public class VcsCenterPane extends VcsNewPane { JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { - VcsService.getInstance().deleteEntity(entity); + VcsOperatorWorker.createDeleteWorker().doDelete(entity); } DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(getTemplateTruePath(fileName), false))); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index 0916062ccb..e7d7af7e0e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -9,7 +9,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.vcs.TableValueOperator; -import com.fr.design.mainframe.vcs.VcsService; +import com.fr.design.mainframe.vcs.VcsOperatorWorker; import com.fr.design.mainframe.vcs.VcsTableEntity; import com.fr.design.mainframe.vcs.common.VcsCacheFileNodeFile; import com.fr.design.mainframe.vcs.common.VcsHelper; @@ -209,7 +209,7 @@ public class VcsNewPane extends RecyclePane { if (selVal == JOptionPane.YES_OPTION) { model.getList().remove(o); model.fireTableDataChanged(); - VcsService.getInstance().deleteEntity(entity.getFilename(), entity.getVersion()); + VcsOperatorWorker.createDeleteWorker().deleteTargetVersion(entity); } } } @@ -329,7 +329,7 @@ public class VcsNewPane extends RecyclePane { @Override public void doOK() { entity.setCommitMsg(getMsgTestArea().getText()); - VcsService.getInstance().updateEntityAnnotation(entity); + VcsOperatorWorker.createUpdateWorker().updateEntityAnnotation(entity); setVisible(false); model.fireTableDataChanged(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java new file mode 100644 index 0000000000..33b57e1f3e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java @@ -0,0 +1,81 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.iprogressbar.ModernUIProgressBarUI; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.stable.StringUtils; + +import javax.swing.JPanel; +import javax.swing.JProgressBar; + +import static java.awt.Component.CENTER_ALIGNMENT; + +/** + * Vcs操作进度条面板 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/18 + */ +public class VcsProgressDialog{ + private JProgressBar progressBar = new JProgressBar(); + private UILabel tipLabel; + private BasicPane processPane; + + private BasicDialog dialog; + + public VcsProgressDialog(String title, String dealingStr) { + + processPane = new BasicPane() { + @Override + protected String title4PopupWindow() { + return title; + } + }; + JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + progressBar.setStringPainted(true); + progressBar.setUI(new ModernUIProgressBarUI()); + progressBar.setBorderPainted(false); + progressBar.setOpaque(false); + progressBar.setBorder(null); + progressBar.setSize(BasicDialog.MEDIUM); + progressBar.setValue(0); + body.add(progressBar); + body.add(new UILabel(StringUtils.BLANK)); + tipLabel = new UILabel(dealingStr); + tipLabel.setAlignmentX(CENTER_ALIGNMENT); + body.add(tipLabel); + processPane.add(body); + processPane.setLayout(FRGUIPaneFactory.createCenterLayout(body, 0.5f, 0.5f)); + } + + + /** + * 展示面板 + * + */ + public void showDialog() { + dialog = processPane.showSmallWindow(DesignerContext.getDesignerFrame(), false); + dialog.setVisible(true); + } + + /** + * 关闭面板 + * + */ + public void closeDialog() { + dialog.setVisible(false); + } + + public JProgressBar getProgressBar() { + return progressBar; + } + + public void setProgressBar(JProgressBar progressBar) { + this.progressBar = progressBar; + } +} From a28fc37a8a382702be7150da78965d04c6e73e06 Mon Sep 17 00:00:00 2001 From: obo Date: Wed, 19 Jul 2023 15:52:23 +0800 Subject: [PATCH 24/68] =?UTF-8?q?REPORT-100623=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=B8=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/creator/XEditorHolder.java | 23 +++++++++++-------- .../mainframe/EditingMouseListener.java | 20 +++++++++------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java index d523010bf8..3291159a3a 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XEditorHolder.java @@ -44,7 +44,7 @@ public class XEditorHolder extends XWidgetCreator { ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); Rectangle rect = this.getBounds(); - if (mouseEditRangeValid(e, rect, editingMouseListener)) { + if (checkMouseEditRangeValid(e, rect, editingMouseListener)) { ToolTipEditor.getInstance().showToolTip((XEditorHolder) this, e.getXOnScreen(), e.getYOnScreen()); } @@ -60,14 +60,19 @@ public class XEditorHolder extends XWidgetCreator { * @param editingMouseListener 位置处理器 * @return 是否位于可编辑区 */ - private boolean mouseEditRangeValid(MouseEvent e, Rectangle rect, EditingMouseListener editingMouseListener) { - int minHorizontal = rect.x + rect.width / 2 - editingMouseListener.getMinMoveSize(); - int maxHorizontal = rect.x + rect.width / 2 + editingMouseListener.getMinMoveSize(); - int minVertical = rect.y + rect.height / 2 - editingMouseListener.getMinMoveSize(); - int maxVertical = rect.y + rect.height / 2 + editingMouseListener.getMinMoveSize(); - - return e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() > minHorizontal && e.getX() + editingMouseListener.getDesigner().getHorizontalScaleValue() < maxHorizontal - && e.getY() + editingMouseListener.getDesigner().getVerticalScaleValue() > minVertical && e.getY() + editingMouseListener.getDesigner().getVerticalScaleValue() < maxVertical; + private boolean checkMouseEditRangeValid(MouseEvent e, Rectangle rect, EditingMouseListener editingMouseListener) { + int horizontalValue = editingMouseListener.getDesigner().getHorizontalScaleValue(); + int verticalValue = editingMouseListener.getDesigner().getVerticalScaleValue(); + int minMoveSize = editingMouseListener.getMinMoveSize(); + + int minHorizontal = rect.x + rect.width / 2 - minMoveSize - horizontalValue; + int maxHorizontal = rect.x + rect.width / 2 + minMoveSize - horizontalValue; + int minVertical = rect.y + rect.height / 2 - minMoveSize - verticalValue; + int maxVertical = rect.y + rect.height / 2 + minMoveSize - verticalValue; + boolean xRangeValid = e.getX() > minHorizontal && e.getX() < maxHorizontal; + boolean yRangeValid = e.getY() > minVertical && e.getY() < maxVertical; + + return xRangeValid && yRangeValid; } @Override 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 64b07d50ce..801a342197 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 @@ -279,7 +279,7 @@ public class EditingMouseListener extends MouseInputAdapter { if (component instanceof XEditorHolder) { XEditorHolder xcreator = (XEditorHolder) component; Rectangle rect = xcreator.getBounds(); - if (creatorRangeValid(e, rect)) { + if (checkCreatorRangeValid(e, rect)) { if (designer.getCursor().getType() != Cursor.HAND_CURSOR) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } @@ -748,12 +748,16 @@ public class EditingMouseListener extends MouseInputAdapter { /** * 判断当前鼠标移动事件是否在Creator有效范围内 */ - private boolean creatorRangeValid(MouseEvent e, Rectangle rect) { - int minHorizontal = rect.x + rect.width / 2 - minMoveSize; - int maxHorizontal = rect.x + rect.width / 2 + minMoveSize; - int minVertical = rect.y + rect.height / 2 - minMoveSize; - int maxVertical = rect.y + rect.height / 2 + minMoveSize; - return e.getX() + designer.getHorizontalScaleValue() > minHorizontal && e.getX() + designer.getHorizontalScaleValue() < maxHorizontal - && e.getY() + designer.getVerticalScaleValue() > minVertical && e.getY() + designer.getVerticalScaleValue() < maxVertical; + private boolean checkCreatorRangeValid(MouseEvent e, Rectangle rect) { + int horizontalValue = designer.getHorizontalScaleValue(); + int verticalValue = designer.getVerticalScaleValue(); + + int minHorizontal = rect.x + rect.width / 2 - minMoveSize - horizontalValue; + int maxHorizontal = rect.x + rect.width / 2 + minMoveSize - horizontalValue; + int minVertical = rect.y + rect.height / 2 - minMoveSize - verticalValue; + int maxVertical = rect.y + rect.height / 2 + minMoveSize - verticalValue; + boolean xRangeValid = e.getX() > minHorizontal && e.getX() < maxHorizontal; + boolean yRangeValid = e.getY() > minVertical && e.getY() < maxVertical; + return xRangeValid && yRangeValid; } } From 56eb94cdbfbd0d3360f1409a69c54ed328f67524 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 19 Jul 2023 15:57:40 +0800 Subject: [PATCH 25/68] =?UTF-8?q?REPORT-101037=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E9=80=9A=E8=BF=87=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=9A=84=E6=8C=89=E9=92=AE=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=89=88=E6=9C=AC=EF=BC=8C=E5=8F=AA=E4=BC=9A=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index d559b26191..12c109b63d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -194,4 +194,9 @@ public class VcsCenterPane extends VcsNewPane { protected boolean isNeedSearch() { return true; } + + @Override + protected boolean isNeedDeleteAllVersion() { + return true; + } } From ea877e280acd90a4caa5e36efe7c11b271c8c800 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 19 Jul 2023 15:59:41 +0800 Subject: [PATCH 26/68] =?UTF-8?q?REPORT-101035=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=88=A0=E9=99=A4=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E6=89=80=E6=9C=89=E7=89=88=E6=9C=AC=EF=BC=8C=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E6=B2=A1=E6=9C=89=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 12c109b63d..c348f0abe6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -112,6 +112,8 @@ public class VcsCenterPane extends VcsNewPane { JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { VcsOperatorWorker.createDeleteWorker().doDelete(entity); + model.getList().remove(o); + model.fireTableDataChanged(); } DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(getTemplateTruePath(fileName), false))); } From 508cdc924810b4f966d05d767ac04508e6acf116 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 19 Jul 2023 16:21:44 +0800 Subject: [PATCH 27/68] =?UTF-8?q?REPORT-100939=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=AC=A1?= =?UTF-8?q?=E7=AE=A1=E5=8F=AF=E8=A7=81=E5=9B=9E=E6=94=B6=E7=AB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/file/PreferencePane.java | 5 +++-- .../mainframe/DesignerFrameFileDealerPane.java | 3 ++- .../fr/design/mainframe/vcs/common/VcsHelper.java | 13 ++++++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 3ab832a019..99ece7a081 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -467,8 +467,9 @@ public class PreferencePane extends BasicPane { vcsPane.add(intervalPanel); vcsPane.add(saveCommitCheckBox); vcsPane.add(autoCleanPane); - saveIntervalPane.setVisible(!VcsHelper.getInstance().isLegacyMode()); - autoCleanPane.setVisible(!VcsHelper.getInstance().isLegacyMode()); + boolean support = VcsHelper.getInstance().checkV2FunctionSupport(); + saveIntervalPane.setVisible(support); + autoCleanPane.setVisible(support); if (VcsHelper.getInstance().isLegacyMode()) { // 老版本时才显示gc选项 vcsPane.add(gcControlPane); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index b030479904..d0be64955e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -87,6 +87,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ExecutionException; import java.util.regex.Pattern; import static javax.swing.JOptionPane.WARNING_MESSAGE; @@ -337,7 +338,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } toolbarDef.addShortCut(vcsAction); //11.0.19及其之后加入回收站逻辑 - if (!VcsHelper.getInstance().isLegacyMode()) { + if (VcsHelper.getInstance().checkV2FunctionSupport()) { recycleAction = new RecycleAction(); toolbarDef.addShortCut(recycleAction); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 2a78159217..b59e358e76 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -15,6 +15,7 @@ import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.ui.FileVersionTable; import com.fr.event.Event; import com.fr.event.EventDispatcher; +import com.fr.event.Listener; import com.fr.event.ListenerAdaptor; import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; @@ -24,6 +25,8 @@ import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; +import com.fr.workspace.Workspace; +import com.fr.workspace.WorkspaceEvent; import com.fr.workspace.server.vcs.VcsOperator; import com.fr.workspace.server.vcs.filesystem.VcsFileSystem; import com.fr.workspace.server.vcs.git.config.GcConfig; @@ -66,6 +69,8 @@ public class VcsHelper implements JTemplateActionListener { private volatile boolean legacyMode; + private volatile boolean root; + public static VcsHelper getInstance() { return INSTANCE; } @@ -89,6 +94,12 @@ public class VcsHelper implements JTemplateActionListener { } } }); + EventDispatcher.listen(WorkspaceEvent.AfterSwitch, new Listener() { + @Override + public void on(Event event, Workspace param) { + root = WorkContext.getCurrent().isRoot() || WorkContext.getCurrent().isLocal(); + } + }); } /** @@ -370,7 +381,7 @@ public class VcsHelper implements JTemplateActionListener { * @return 支持返回true */ public boolean checkV2FunctionSupport() { - return !VcsHelper.getInstance().isLegacyMode() && (WorkContext.getCurrent().isLocal() || WorkContext.getCurrent().isRoot()); + return !VcsHelper.getInstance().isLegacyMode() && root; } /** From 548d28dd7afef4ad09e01412faa5d22e0c66559f Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 19 Jul 2023 19:16:46 +0800 Subject: [PATCH 28/68] =?UTF-8?q?REPORT-100942=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=EF=BC=8C=E7=89=88=E6=9C=AC=E8=AF=A6?= =?UTF-8?q?=E6=83=85=EF=BC=8C=E5=9B=9E=E6=94=B6=E7=AB=99=E7=9A=84=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=98=AF=E5=90=A6=E8=A6=81=E5=8A=A0=E6=82=AC=E6=B5=AE?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java | 2 ++ .../java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java | 3 +++ .../main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java | 3 +++ 3 files changed, 8 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index 594e0c1722..f7ca1845fe 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -128,6 +128,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane private void initDeleteLabelListener() { if (isNeedDelete()) { + deleteLabel.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Delete")); deleteLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -144,6 +145,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane private void initRestoreListener() { if (isNeedRestore()) { + restoreLabel.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Restore")); restoreLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index c348f0abe6..66475f6389 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -83,8 +83,11 @@ public class VcsCenterPane extends VcsNewPane { @Override public VcsOperatorPane createOperatorPane() { manager = new UILabel(MANAGER_ICON); + manager.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Manager")); open = new UILabel(OPEN_ICON); + open.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Open")); delete = new UILabel(DELETE_ICON); + delete.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Delete")); initManagerListener(); initOpenListener(); initDeleteListener(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index e7d7af7e0e..29b5e9e634 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -128,8 +128,11 @@ public class VcsNewPane extends RecyclePane { */ public VcsOperatorPane createOperatorPane() { restore = new UILabel(RESTORE_ICON); + restore.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Restore")); delete = new UILabel(DELETE_ICON); + delete.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Delete")); preview = new UILabel(PREVIEW_ICON); + preview.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_ToolTip_Preview")); initPreviewListener(); initDeleteListener(); initRestoreListener(); From 46f22a4afaa6eaef4e6b1c43239ab0bfef430379 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 19 Jul 2023 19:18:40 +0800 Subject: [PATCH 29/68] =?UTF-8?q?REPORT-100939=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=AC=A1?= =?UTF-8?q?=E7=AE=A1=E5=8F=AF=E8=A7=81=E5=9B=9E=E6=94=B6=E7=AB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/vcs/common/VcsHelper.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index b59e358e76..2dc1ed4927 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -97,7 +97,13 @@ public class VcsHelper implements JTemplateActionListener { EventDispatcher.listen(WorkspaceEvent.AfterSwitch, new Listener() { @Override public void on(Event event, Workspace param) { - root = WorkContext.getCurrent().isRoot() || WorkContext.getCurrent().isLocal(); + try { + root = WorkContext.getCurrent().isRoot() || WorkContext.getCurrent().isLocal(); + } catch (Exception e) { + root = false; + FineLoggerFactory.getLogger().error("[VcsHelper] get root failed", e.getMessage()); + } + } }); } From 39c78622cf10cf01e0ee0d03aba4e7559c6ec9fb Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 19 Jul 2023 19:19:40 +0800 Subject: [PATCH 30/68] =?UTF-8?q?REPORT-100939=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=AC=A1?= =?UTF-8?q?=E7=AE=A1=E5=8F=AF=E8=A7=81=E5=9B=9E=E6=94=B6=E7=AB=99=20?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=A4=9A=E4=BD=99=E5=BC=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/DesignerFrameFileDealerPane.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index d0be64955e..ad65c59acb 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -87,7 +87,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ExecutionException; import java.util.regex.Pattern; import static javax.swing.JOptionPane.WARNING_MESSAGE; From 5ec4042bc5cfd3b07c2957db5fcf786573e6ae48 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 20 Jul 2023 13:56:52 +0800 Subject: [PATCH 31/68] =?UTF-8?q?REPORT-100939=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=AC=A1?= =?UTF-8?q?=E7=AE=A1=E5=8F=AF=E8=A7=81=E5=9B=9E=E6=94=B6=E7=AB=99=20?= =?UTF-8?q?=E8=B0=83=E6=8D=A2=E4=B8=80=E4=B8=8B=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 2dc1ed4927..c8f5c40c68 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -98,7 +98,7 @@ public class VcsHelper implements JTemplateActionListener { @Override public void on(Event event, Workspace param) { try { - root = WorkContext.getCurrent().isRoot() || WorkContext.getCurrent().isLocal(); + root = WorkContext.getCurrent().isLocal() || WorkContext.getCurrent().isRoot() ; } catch (Exception e) { root = false; FineLoggerFactory.getLogger().error("[VcsHelper] get root failed", e.getMessage()); From aa15ed8aa5227dc4c47c2c0d7bd48bd687469417 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 20 Jul 2023 14:30:16 +0800 Subject: [PATCH 32/68] =?UTF-8?q?REPORT-100984=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E5=AE=8C=E6=88=90=E7=9B=B4=E6=8E=A5=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E6=96=B0=E7=89=88=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E6=9C=89=E6=9B=B4=E6=96=B0=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/vcs/ui/VcsMovePanel.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 5dacb65e91..f9d362ad8d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -16,6 +16,7 @@ import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.utils.DesignUtils; +import com.fr.design.utils.ThemeUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.FRFont; import com.fr.log.FineLoggerFactory; @@ -37,6 +38,9 @@ import java.awt.event.MouseEvent; import java.util.List; import java.util.concurrent.ExecutionException; +import static javax.swing.JOptionPane.YES_NO_CANCEL_OPTION; +import static javax.swing.JOptionPane.YES_OPTION; + /** * 迁移面板 @@ -238,7 +242,9 @@ public class VcsMovePanel extends BasicPane { } private void initVcsLabel(JPanel parent) { + parent.removeAll(); if (!VcsHelper.getInstance().isLegacyMode()) { + parent.setBackground(ThemeUtils.BACK_COLOR); centerButton = new UIButton(Toolkit.i18nText("Fine-Design_Vcs_Center")); parent.add(centerButton); initVcsCenterListener(); @@ -324,11 +330,8 @@ public class VcsMovePanel extends BasicPane { private void doAfterMove() { visible = !VcsHelper.getInstance().isLegacyMode(); - if (visible) { - updatePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); - updatePane.add(new UIButton(Toolkit.i18nText("Fine-Design_Vcs_Center"))); - } - updatePane.setVisible(!visible); + initVcsLabel(updatePane); + updatePane.setVisible(visible); callBack.doCallBack(visible); parentCard.show(parentPane, SETTING); } From f26b7ff28616fe98f268ad8f1acf53f683f6836a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 20 Jul 2023 15:15:42 +0800 Subject: [PATCH 33/68] =?UTF-8?q?REPORT-100991=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E4=BA=8C=E6=AC=A1=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/RecyclePane.java | 28 +++++++++++++++++-- .../mainframe/vcs/ui/VcsCenterPane.java | 2 ++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index f7ca1845fe..e606fed729 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -48,6 +48,8 @@ public class RecyclePane extends AbstractSupportSelectTablePane private static final int COLUMNS_COUNT = 15; + private List tableEntities; + public RecyclePane() { super(i18nText("Fine-Design_Vcs_Recycle"), (o, columnIndex) -> { switch (columnIndex) { @@ -86,6 +88,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane for (VcsEntity entity : entityList) { tableEntities.add(new VcsTableEntity(entity)); } + updateTableList(tableEntities); return tableEntities; } @@ -166,8 +169,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane @Override public void actionPerformed(ActionEvent e) { String str = searchTextField.getText(); - List entityList = model.getList(); - model.setList(entityList.stream().filter(entity -> entity.getEntity().getFilename().contains(str)).collect(Collectors.toList())); + model.setList(tableEntities.stream().filter(entity -> entity.getEntity().getFilename().contains(str)).collect(Collectors.toList())); model.fireTableDataChanged(); } }); @@ -185,7 +187,8 @@ public class RecyclePane extends AbstractSupportSelectTablePane JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { - model.setList(model.getList().stream().filter(tableEntity -> !tableEntity.isSelect()).collect(Collectors.toList())); + tableEntities = model.getList().stream().filter(tableEntity -> !tableEntity.isSelect()).collect(Collectors.toList()); + model.setList(tableEntities); model.fireTableDataChanged(); listener.doAfterChooseYes(selectList); } @@ -252,6 +255,25 @@ public class RecyclePane extends AbstractSupportSelectTablePane return true; } + + /** + * 更新数据列表 + * + * @param entities + */ + public void updateTableList(List entities) { + tableEntities = entities; + } + + /** + * 移除指定元素 + * + * @param entity + */ + public void removeTarget(VcsTableEntity entity) { + tableEntities.remove(entity); + } + /** * 版本管理按钮事件响应 */ diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 66475f6389..5c2520ce1e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -115,6 +115,7 @@ public class VcsCenterPane extends VcsNewPane { JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { VcsOperatorWorker.createDeleteWorker().doDelete(entity); + removeTarget((VcsTableEntity) o); model.getList().remove(o); model.fireTableDataChanged(); } @@ -166,6 +167,7 @@ public class VcsCenterPane extends VcsNewPane { for (VcsEntity entity : entities) { tableEntities.add(new VcsTableEntity(entity)); } + updateTableList(tableEntities); return tableEntities; } From 5ca5a7b5929098acf9e77df95bd57909fadb5106 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 20 Jul 2023 15:26:05 +0800 Subject: [PATCH 34/68] =?UTF-8?q?REPORT-100757=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E6=9C=AA?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=86=85=E7=BD=AE=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=EF=BC=8C=E8=87=AA=E5=8A=A8=E6=B8=85=E7=90=86=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E7=81=B0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/file/PreferencePane.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 99ece7a081..51bfa1fb53 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -491,7 +491,10 @@ public class PreferencePane extends BasicPane { gcControlPane.setVisible(!useV2); useVcsAutoCleanScheduleCheckBox.setSelected(useV2); useVcsAutoSaveScheduleCheckBox.setSelected(useV2); - useVcsAutoCleanScheduleCheckBox.setEnabled(useV2 && FineScheduler.getInstance().isStarted()); + boolean useAutoClean =useV2 && FineScheduler.getInstance().isStarted(); + useVcsAutoCleanScheduleCheckBox.setEnabled(useAutoClean); + autoCleanIntervalComboBox.setEnabled(useAutoClean); + autoCleanRetainIntervalComboBox.setEnabled(useAutoClean); useVcsAutoSaveScheduleCheckBox.setEnabled(useV2); } }); @@ -510,7 +513,10 @@ public class PreferencePane extends BasicPane { autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Content"))); autoCleanPane.add(autoCleanRetainIntervalComboBox); autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Last"))); - useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode() && FineScheduler.getInstance().isStarted()); + boolean useAutoClean = !VcsHelper.getInstance().isLegacyMode() && FineScheduler.getInstance().isStarted(); + useVcsAutoCleanScheduleCheckBox.setEnabled(useAutoClean); + autoCleanIntervalComboBox.setEnabled(useAutoClean); + autoCleanRetainIntervalComboBox.setEnabled(useAutoClean); autoCleanPane.setVisible(false); return autoCleanPane; } From d8192fe60f80b161b915e10b297bd82c9daf65ff Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Thu, 20 Jul 2023 19:47:52 +0800 Subject: [PATCH 35/68] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/VcsTableEntity.java | 2 +- .../mainframe/vcs/ui/VcsCellEditor.java | 35 ++++++++++++++++++ .../mainframe/vcs/ui/VcsCellRender.java | 29 +++++++++++++++ .../design/mainframe/vcs/ui/VcsNewPane.java | 4 +- .../mainframe/vcs/ui/VcsOperatorPane.java | 37 ++++--------------- 5 files changed, 74 insertions(+), 33 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellEditor.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellRender.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java index 6911b7a93a..f10b0a12fe 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java @@ -39,7 +39,7 @@ public class VcsTableEntity implements TableEntity{ * @return 版本大小 */ public String getSize() { - return String.format("%.2f",entity.getSize()/MB_SIZE) + MB; + return String.format("%.3f",entity.getSize()/MB_SIZE) + MB; } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellEditor.java new file mode 100644 index 0000000000..9baebaebe1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellEditor.java @@ -0,0 +1,35 @@ +package com.fr.design.mainframe.vcs.ui; + +import javax.swing.AbstractCellEditor; +import javax.swing.JTable; +import javax.swing.table.TableCellEditor; +import java.awt.*; + +import static com.fr.design.mainframe.vcs.ui.AbstractSupportSelectTablePane.DEFAULT_SELECT_TABLE_ROW_COLOR; + +/** + * Vcs的表格Editor + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/20 + */ +public class VcsCellEditor extends AbstractCellEditor implements TableCellEditor { + + private final VcsOperatorPane vcsPanel; + + public VcsCellEditor(VcsOperatorPane vcsPanel) { + this.vcsPanel = vcsPanel; + } + + @Override + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + vcsPanel.setBackground(isSelected ? DEFAULT_SELECT_TABLE_ROW_COLOR : Color.WHITE); + return vcsPanel; + } + + @Override + public Object getCellEditorValue() { + return vcsPanel; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellRender.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellRender.java new file mode 100644 index 0000000000..952c52a060 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCellRender.java @@ -0,0 +1,29 @@ +package com.fr.design.mainframe.vcs.ui; + +import javax.swing.JTable; +import javax.swing.table.TableCellRenderer; +import java.awt.*; + +import static com.fr.design.mainframe.vcs.ui.AbstractSupportSelectTablePane.DEFAULT_SELECT_TABLE_ROW_COLOR; + +/** + * Vcs的表格Render + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/20 + */ +public class VcsCellRender implements TableCellRenderer { + + private final VcsOperatorPane vcsPanel; + + public VcsCellRender(VcsOperatorPane vcsPanel) { + this.vcsPanel = vcsPanel; + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + vcsPanel.setBackground(isSelected ? DEFAULT_SELECT_TABLE_ROW_COLOR : Color.WHITE); + return vcsPanel; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index 29b5e9e634..42b5f15db0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -111,8 +111,8 @@ public class VcsNewPane extends RecyclePane { } }; this.operatorPane = createOperatorPane(); - this.model.setDefaultEditor(VcsOperatorPane.class, operatorPane); - this.model.setDefaultRenderer(VcsOperatorPane.class, operatorPane); + this.model.setDefaultEditor(VcsOperatorPane.class, new VcsCellEditor(createOperatorPane())); + this.model.setDefaultRenderer(VcsOperatorPane.class, new VcsCellRender(createOperatorPane())); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsOperatorPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsOperatorPane.java index 9da20d8a54..ce4db1e0d7 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsOperatorPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsOperatorPane.java @@ -3,20 +3,15 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.design.layout.FRGUIPaneFactory; - -import javax.swing.AbstractCellEditor; - import javax.swing.JComponent; import javax.swing.JPanel; -import javax.swing.JTable; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableCellRenderer; + + import java.awt.*; -import java.util.List; +import java.util.List; -import static com.fr.design.mainframe.vcs.ui.AbstractSupportSelectTablePane.DEFAULT_SELECT_TABLE_ROW_COLOR; /** * 操作面板,用于置放常用的操作label @@ -27,37 +22,19 @@ import static com.fr.design.mainframe.vcs.ui.AbstractSupportSelectTablePane.DEFA * @since 11.0 * Created on 2023/7/13 */ -public class VcsOperatorPane extends AbstractCellEditor implements TableCellEditor, TableCellRenderer { - private JPanel contentPane; - - private static final Color DETAIL_FONT_COLOR = new Color(65, 155, 249); +public class VcsOperatorPane extends JPanel { public VcsOperatorPane(List iconJComponentMap) { init(iconJComponentMap); } + private void init(List iconJComponentMap) { - contentPane = new JPanel(FRGUIPaneFactory.createLeftZeroVgapNormalHgapLayout()); + this.setLayout(FRGUIPaneFactory.createLeftZeroVgapNormalHgapLayout()); for (JComponent value : iconJComponentMap) { - value.setForeground(DETAIL_FONT_COLOR); value.setCursor(new Cursor(Cursor.HAND_CURSOR)); - contentPane.add(value); + this.add(value); } } - @Override - public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - return contentPane; - } - - @Override - public Object getCellEditorValue() { - return contentPane; - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - contentPane.setBackground(isSelected ? DEFAULT_SELECT_TABLE_ROW_COLOR : Color.WHITE); - return contentPane; - } } From 23b7051b6eb06507145d016e1fc23fa9805d8010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Destiny=2ELin-=E6=9E=97=E9=94=A6=E9=BE=99?= Date: Thu, 20 Jul 2023 23:22:48 +0800 Subject: [PATCH 36/68] =?UTF-8?q?REPORT-101167=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=80=E6=9C=9F=E3=80=91=E9=9B=86?= =?UTF-8?q?=E7=BE=A4=E7=8E=AF=E5=A2=83=EF=BC=8C=E4=BF=9D=E5=AD=98=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 51bfa1fb53..d16dce3d15 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -916,7 +916,8 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setSelected(false); } VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); - if (WorkContext.getCurrent().isCluster()) { + //如果是集群并且是老版本则不可用 + if (WorkContext.getCurrent().isCluster() && VcsHelper.getInstance().isLegacyMode()) { vcsEnableCheckBox.setEnabled(false); gcEnableCheckBox.setEnabled(false); } From 70aba8428818b06fd58a14e0c2beb41711ad7d25 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" <3166887LjL> Date: Fri, 21 Jul 2023 00:15:06 +0800 Subject: [PATCH 37/68] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/AbstractSupportSelectTablePane.java | 20 +++++++++++-- .../vcs/ui/ToolTipTableCellRenderer.java | 28 +++++++++++++++++++ .../mainframe/vcs/ui/VcsCenterPane.java | 6 ++++ .../design/mainframe/vcs/ui/VcsNewPane.java | 6 ++++ .../standard/vcslist/vcs_sort_normal.svg | 4 +++ 5 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java create mode 100644 designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java index 7c2d56b509..a4ee2623c2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.vcs.ui; +import com.fr.base.svg.IconUtils; import com.fr.design.data.tabledata.tabledatapane.loading.TipsPane; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.icheckbox.UICheckBox; @@ -242,6 +243,7 @@ public abstract class AbstractSupportSelectTablePane exte public HeaderRenderer(JTable table) { this.tableHeader = table.getTableHeader(); + tableHeader.setCursor(new Cursor(Cursor.HAND_CURSOR)); selectBox = new UICheckBox(); selectBox.setSelected(false); tableHeader.addMouseListener(new MouseAdapter() { @@ -290,8 +292,12 @@ public abstract class AbstractSupportSelectTablePane exte tableHeader = table.getTableHeader(); tableHeader.setReorderingAllowed(false); String valueStr = (String) value; - JLabel label = new JLabel(valueStr); - label.setHorizontalAlignment(SwingConstants.LEFT); + UILabel label = new UILabel(valueStr); + if (needIcon4Head(column)) { + label.setIcon(IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_sort")); + label.setHorizontalTextPosition(JLabel.LEFT); + label.setHorizontalAlignment(SwingConstants.LEFT); + } selectBox.setHorizontalAlignment(SwingConstants.CENTER); selectBox.setBorderPainted(true); JComponent component = (column == 0) ? selectBox : label; @@ -320,6 +326,7 @@ public abstract class AbstractSupportSelectTablePane exte setColumnClass(classes); this.setDefaultEditor(Boolean.class, new BooleanEditor()); this.setDefaultRenderer(Boolean.class, new BooleanRenderer()); + this.setDefaultRenderer(UILabel.class, new ToolTipTableCellRenderer()); } @Override @@ -375,5 +382,14 @@ public abstract class AbstractSupportSelectTablePane exte } + /** + * 表头的某列是否需要icon + * + * @param col 列 + * @return + */ + protected boolean needIcon4Head(int col) { + return col != 0; + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java new file mode 100644 index 0000000000..9e2dca1054 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java @@ -0,0 +1,28 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.general.GeneralUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.*; + + +/** + * 带ToolTip的UILabel的表格渲染类 + * + */ +public class ToolTipTableCellRenderer extends DefaultTableCellRenderer { + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if(component instanceof JLabel) { + String toolTipText = GeneralUtils.objectToString(value); + if (StringUtils.isNotEmpty(toolTipText)) { + ((JLabel) component).setToolTipText(toolTipText); + } + } + return component; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 5c2520ce1e..d1ac7ad31e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -125,6 +125,12 @@ public class VcsCenterPane extends VcsNewPane { }); } + + @Override + protected boolean needIcon4Head(int col) { + return col != 0 && col != OPERATOR_COL; + } + private void initOpenListener() { open.addMouseListener(new MouseAdapter() { @Override diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index 42b5f15db0..e65726bc68 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -113,6 +113,7 @@ public class VcsNewPane extends RecyclePane { this.operatorPane = createOperatorPane(); this.model.setDefaultEditor(VcsOperatorPane.class, new VcsCellEditor(createOperatorPane())); this.model.setDefaultRenderer(VcsOperatorPane.class, new VcsCellRender(createOperatorPane())); + this.model.setDefaultRenderer(UILabel.class, new ToolTipTableCellRenderer()); } @@ -339,4 +340,9 @@ public class VcsNewPane extends RecyclePane { }; dialog.setVisible(true); } + + @Override + protected boolean needIcon4Head(int col) { + return col != 0 && col != OPERATOR_COL; + } } diff --git a/designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg b/designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg new file mode 100644 index 0000000000..01d9ffeb5f --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg @@ -0,0 +1,4 @@ + + + + From e20fca28e3b389d0a78bf4c7990e25188c85bca0 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" <3166887LjL> Date: Fri, 21 Jul 2023 01:31:52 +0800 Subject: [PATCH 38/68] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/ToolTipTableCellRenderer.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java index 9e2dca1054..bfb10e2057 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java @@ -3,7 +3,8 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.general.GeneralUtils; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.JTable; +import javax.swing.JLabel; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; @@ -11,6 +12,9 @@ import java.awt.*; /** * 带ToolTip的UILabel的表格渲染类 * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/21 */ public class ToolTipTableCellRenderer extends DefaultTableCellRenderer { From 10569aa772f4883a5e7a0716b083bb02574084ee Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 10:03:02 +0800 Subject: [PATCH 39/68] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index d16dce3d15..e7f747d817 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -917,7 +917,7 @@ public class PreferencePane extends BasicPane { } VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); //如果是集群并且是老版本则不可用 - if (WorkContext.getCurrent().isCluster() && VcsHelper.getInstance().isLegacyMode()) { + if (VcsHelper.getInstance().isLegacyMode() && WorkContext.getCurrent().isCluster()) { vcsEnableCheckBox.setEnabled(false); gcEnableCheckBox.setEnabled(false); } From 378ae2eb0e8b32150787c8b39776d98407dae90a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 10:54:50 +0800 Subject: [PATCH 40/68] =?UTF-8?q?REPORT-101063=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=B7=B2=E6=89=93=E5=BC=80=EF=BC=8C=E6=89=93=E5=BC=80?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=EF=BC=8C=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=A2=AB=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 68 +++++++++++++++++-- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index ad65c59acb..ad2980d98d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -46,6 +46,7 @@ import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.design.worker.save.CallbackSaveWorker; import com.fr.event.Event; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; @@ -502,21 +503,31 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); path = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, path); boolean currentEditing = isCurrentEditing(path); - // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) - closeOpenedTemplate(path, currentEditing); if (VcsHelper.getInstance().isLegacyMode()) { + // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) + closeOpenedTemplate(path, currentEditing); FileVersionsPanel fileVersionTablePanel = FileVersionsPanel.getInstance(); fileVersionTablePanel.showFileVersionsPane(); stateChange(); } else { - VcsNewPane panel = new VcsNewPane(path); - BasicDialog dialog = panel.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); + //如果指定模板已经打开: + //1.如果该模板已保存,则正常打开新版本管理弹窗 + //2.如果该模板未保存,触发保存逻辑 + // a.如果用户选择保存,则保存并不关闭模板,弹出新版本管理弹窗 + // b.如果用户选择不保存,则关闭当前模板,弹出新版本管理弹窗 + // c.如果用户选择取消, 则啥操作都不做 + checkTemplateSavedAndShowVcsNewPane(path, currentEditing); } } + private void showVcsNewPane(String path) { + VcsNewPane panel = new VcsNewPane(path); + BasicDialog dialog = panel.showWindow(DesignerContext.getDesignerFrame(), false); + dialog.setVisible(true); + } + /** * 版本管理可用状态的监控 */ @@ -571,6 +582,53 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } + private void checkTemplateSavedAndShowVcsNewPane(String path, boolean isCurrentEditing) { + for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { + if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { + if (!jTemplate.isALLSaved()) { + if (isCurrentEditing) { + MultiTemplateTabPane.getInstance().setIsCloseCurrent(true); + } + MultiTemplateTabPane.getInstance().closeFormat(jTemplate); + confirmCloseAndShowVcsNewPane(jTemplate, path); + return; + } else { + showVcsNewPane(path); + } + } + } + } + + private void confirmCloseAndShowVcsNewPane(JTemplate specifiedTemplate, String path) { + if (specifiedTemplate == null) { + return; + } + if (!specifiedTemplate.isALLSaved() && !DesignerMode.isVcsMode()) { + specifiedTemplate.stopEditing(); + int returnVal = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Utils_Would_You_Like_To_Save") + " \"" + specifiedTemplate.getEditingFILE() + "\" ?", + Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + if (returnVal == JOptionPane.YES_OPTION) { + CallbackSaveWorker worker = specifiedTemplate.save(); + worker.addSuccessCallback(() -> { + FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Template_Already_Saved", specifiedTemplate.getEditingFILE().getName())); + showVcsNewPane(path); + }); + worker.start(specifiedTemplate.getRuntimeId()); + } else if (returnVal == JOptionPane.NO_OPTION) { + closeTpl(specifiedTemplate); + showVcsNewPane(path); + } + } else { + showVcsNewPane(path); + } + } + + private void closeTpl(JTemplate specifiedTemplate) { + HistoryTemplateListCache.getInstance().closeSelectedReport(specifiedTemplate); + MultiTemplateTabPane.getInstance().closeAndFreeLock(specifiedTemplate); + MultiTemplateTabPane.getInstance().activePrevTemplateAfterClose(); + } + } /** From 83b13ffd4baca33d1c4c3fa1cda6cdaad671e430 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 11:13:13 +0800 Subject: [PATCH 41/68] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 3 +- .../design/mainframe/vcs/ui/RecyclePane.java | 45 +++++++++++++++++++ .../mainframe/vcs/ui/VcsCenterPane.java | 3 +- .../design/mainframe/vcs/ui/VcsMovePanel.java | 4 +- .../design/mainframe/vcs/ui/VcsNewPane.java | 2 + 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index ad2980d98d..a207b75d50 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -524,8 +524,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private void showVcsNewPane(String path) { VcsNewPane panel = new VcsNewPane(path); - BasicDialog dialog = panel.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); + panel.showDialog(); } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index e606fed729..e1a9bce625 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -1,10 +1,12 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.base.svg.IconUtils; +import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.vcs.VcsOperatorWorker; import com.fr.design.mainframe.vcs.TableEntity; import com.fr.design.mainframe.vcs.TableValueOperator; @@ -47,7 +49,9 @@ public class RecyclePane extends AbstractSupportSelectTablePane protected UILabel restoreLabel; private static final int COLUMNS_COUNT = 15; + private BasicDialog dialog; + private BasicDialog parent; private List tableEntities; public RecyclePane() { @@ -196,6 +200,47 @@ public class RecyclePane extends AbstractSupportSelectTablePane } + /** + * 显示弹窗 + * + */ + public void showDialog() { + dialog = this.showWindow(DesignerContext.getDesignerFrame(), false); + dialog.setVisible(true); + } + + /** + * 依据父弹窗显示弹窗 + * + * @param parent 父弹窗 + */ + public void showDialog(BasicDialog parent) { + this.parent = parent; + dialog = this.showWindow(parent, false); + dialog.setVisible(true); + } + + /** + * 关闭弹窗,如果有父弹窗,则一起关闭 + * + */ + public void closeDialog() { + if (dialog != null) { + dialog.dispose(); + } + if (parent != null) { + parent.dispose(); + } + } + + public BasicDialog getDialog() { + return dialog; + } + + public void setDialog(BasicDialog dialog) { + this.dialog = dialog; + } + /** * 删除范围 * diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index d1ac7ad31e..474d6fbb67 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -159,8 +159,7 @@ public class VcsCenterPane extends VcsNewPane { return entity.getFilename()+Toolkit.i18nText("Fine-Design_Vcs_Version_Tips"); } }; - BasicDialog dialog = pane.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); + pane.showDialog(getDialog()); } } }); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index f9d362ad8d..99ce67f21c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -265,9 +265,7 @@ public class VcsMovePanel extends BasicPane { @Override public void actionPerformed(ActionEvent e) { VcsCenterPane vcsCenterPane = new VcsCenterPane(); - BasicDialog dialog = vcsCenterPane.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); - + vcsCenterPane.showDialog(); } }); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index e65726bc68..8273de81da 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -160,6 +160,7 @@ public class VcsNewPane extends RecyclePane { JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { restoreEntity(entity); + VcsNewPane.this.closeDialog(); } } } @@ -229,6 +230,7 @@ public class VcsNewPane extends RecyclePane { if (o instanceof VcsTableEntity) { VcsEntity entity = ((VcsTableEntity) o).getEntity(); previewEntity(entity); + VcsNewPane.this.closeDialog(); } } }); From 9c862e2d6f06713a865a018eae76088116b86973 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 11:26:59 +0800 Subject: [PATCH 42/68] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/DesignerFrameFileDealerPane.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index a207b75d50..063ef5913b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -510,12 +510,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt fileVersionTablePanel.showFileVersionsPane(); stateChange(); } else { - //如果指定模板已经打开: - //1.如果该模板已保存,则正常打开新版本管理弹窗 - //2.如果该模板未保存,触发保存逻辑 - // a.如果用户选择保存,则保存并不关闭模板,弹出新版本管理弹窗 - // b.如果用户选择不保存,则关闭当前模板,弹出新版本管理弹窗 - // c.如果用户选择取消, 则啥操作都不做 checkTemplateSavedAndShowVcsNewPane(path, currentEditing); } @@ -580,7 +574,17 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } } - + /** + * 如果指定模板已经打开: + *

1.如果该模板已保存,则正常打开新版本管理弹窗 + *

2.如果该模板未保存,触发保存逻辑 + *

  • a.如果用户选择保存,则保存并不关闭模板,弹出新版本管理弹窗 + *
  • b.如果用户选择不保存,则关闭当前模板,弹出新版本管理弹窗 + *
  • c.如果用户选择取消, 则啥操作都不做 + * + * @param path + * @param isCurrentEditing + */ private void checkTemplateSavedAndShowVcsNewPane(String path, boolean isCurrentEditing) { for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { From 941c1e864e9ef56ad4b286ce1f078dde7ac61b62 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 13:35:17 +0800 Subject: [PATCH 43/68] =?UTF-8?q?REPORT-101045=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E7=AB=99=E4=BA=A4=E4=BA=92=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 9 +- .../design/mainframe/vcs/RecycleAction.java | 4 +- .../ui/AbstractSupportSelectTablePane.java | 12 ++ .../design/mainframe/vcs/ui/RecyclePane.java | 25 +++- .../mainframe/vcs/ui/RecycleSettingPane.java | 119 ++++++++++++++++++ 5 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index e7f747d817..563c1620e1 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -64,6 +64,8 @@ import com.fr.workspace.server.vcs.VcsConfig; import com.fr.workspace.server.vcs.VcsOperator; import com.fr.workspace.server.vcs.git.config.GcConfig; import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanSchedule; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; import org.jetbrains.annotations.NotNull; import javax.swing.BorderFactory; @@ -1189,9 +1191,12 @@ public class PreferencePane extends BasicPane { } if (useVcsAutoCleanScheduleCheckBox.isSelected()) { FineLoggerFactory.getLogger().info("[VcsV2] start auto clean!"); - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob(getDay(autoCleanIntervalComboBox.getSelectedIndex())); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( + VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME, + getDay(autoCleanIntervalComboBox.getSelectedIndex()), + VcsAutoCleanSchedule.class); } else { - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).stopVcsAutoCleanJob(); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).stopVcsAutoCleanJob(VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME); } } return null; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java index b074f17f8f..acd89f668d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java @@ -4,7 +4,7 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.dialog.BasicDialog; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.vcs.ui.RecyclePane; +import com.fr.design.mainframe.vcs.ui.RecycleSettingPane; import java.awt.event.ActionEvent; @@ -24,7 +24,7 @@ public class RecycleAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { - RecyclePane pane = new RecyclePane(); + RecycleSettingPane pane = new RecycleSettingPane(); BasicDialog dialog = pane.showWindow(DesignerContext.getDesignerFrame(), false); dialog.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java index a4ee2623c2..75733121de 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java @@ -220,6 +220,17 @@ public abstract class AbstractSupportSelectTablePane exte //更新表头的勾选框状态 HeaderRenderer renderer = (HeaderRenderer) table.getTableHeader().getDefaultRenderer(); renderer.refreshHeader(table, selectCount >= table.getRowCount()); + changeExtraComponentStatus(); + } + + /** + * 更新额外组件的状态 + */ + protected void changeExtraComponentStatus() { + } + + public int getSelectCount() { + return selectCount; } @@ -256,6 +267,7 @@ public abstract class AbstractSupportSelectTablePane exte selectBox.setSelected(value); selectAllOrNull(value); selectCount = value ? table.getRowCount() : 0; + changeExtraComponentStatus(); tableHeader.repaint(); model.fireTableDataChanged(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index e1a9bce625..f9e803c3fc 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -39,8 +39,10 @@ import static com.fr.design.i18n.Toolkit.i18nText; */ public class RecyclePane extends AbstractSupportSelectTablePane { public static final Icon ICON_SEARCH = IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_recycle_search"); - public static final Icon ICON_REFRESH = IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_recycle_restore"); - public static final Icon ICON_DELETE = IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_recycle_delete"); + public static final Icon ICON_REFRESH = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_restore", IconUtils.ICON_TYPE_NORMAL); + public static final Icon ICON_REFRESH_DISABLE = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_restore", IconUtils.ICON_TYPE_DISABLED); + public static final Icon ICON_DELETE = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_delete", IconUtils.ICON_TYPE_NORMAL); + public static final Icon ICON_DELETE_DISABLE = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_delete", IconUtils.ICON_TYPE_DISABLED); protected UITextField searchTextField; @@ -77,7 +79,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane Toolkit.i18nText("Fine-Design_Vcs_Recycle_Size"), Toolkit.i18nText("Fine-Design_Vcs_Delete_Time"), Toolkit.i18nText("Fine-Design_Vcs_Time") - }, true); + }, false); } public RecyclePane(String title, TableValueOperator operators, boolean needBorder) { @@ -115,17 +117,33 @@ public class RecyclePane extends AbstractSupportSelectTablePane if (isNeedRestore()) { restoreLabel = new UILabel(ICON_REFRESH); restoreLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); + restoreLabel.setDisabledIcon(ICON_REFRESH_DISABLE); + restoreLabel.setEnabled(false); rightPane.add(restoreLabel); } if (isNeedDelete()) { deleteLabel = new UILabel(ICON_DELETE); deleteLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); + deleteLabel.setDisabledIcon(ICON_DELETE_DISABLE); + deleteLabel.setEnabled(false); rightPane.add(deleteLabel); } tableTopPane.add(leftPane, BorderLayout.EAST); tableTopPane.add(rightPane, BorderLayout.WEST); } + + @Override + protected void changeExtraComponentStatus() { + boolean canUseLabel = getSelectCount() > 0; + if (restoreLabel != null) { + restoreLabel.setEnabled(canUseLabel); + } + if (deleteLabel != null) { + deleteLabel.setEnabled(canUseLabel); + } + } + @Override protected void initTopPaneListener() { initSearchTextFiledListener(); @@ -181,6 +199,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane } + private void fireListener(VcsResponseListener listener, boolean isDelete) { List selectList = model.getList().stream().filter(TableEntity::isSelect).map(VcsTableEntity::getEntity).collect(Collectors.toList()); if (selectList.size() > 0) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java new file mode 100644 index 0000000000..7c41e64f2c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java @@ -0,0 +1,119 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.UITabbedPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.VerticalFlowLayout; +import com.fr.transaction.Configurations; +import com.fr.transaction.WorkerAdaptor; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsConfig; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoRecycleSchedule; + +import javax.swing.JPanel; +import javax.swing.ScrollPaneConstants; +import javax.swing.border.EmptyBorder; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + + +/** + * 回收站配置面板 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/21 + */ +public class RecycleSettingPane extends BasicPane { + + private static final int MIN_VALUE = 1; + + private static final int MAX_VALUE = 999; + + private static final int STEP = 1; + + private static final int DEFAULT_VALUE = 30; + + private UISpinner spinner; + + private UIButton button; + + public RecycleSettingPane() { + init(); + } + + private void init() { + + this.setLayout(new BorderLayout()); + UITabbedPane tabbedPane = new UITabbedPane(); + //回收站内容 + JPanel recyclePane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + UIScrollPane recycleScrollPane = patchScroll(recyclePane); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Vcs_Recycle_Content"), recycleScrollPane); + recyclePane.add(new RecyclePane()); + //通用设置 + JPanel settingPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + UIScrollPane settingScrollPane = patchScroll(settingPane); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Carton_General_Settings"), settingScrollPane); + settingPane.add(createSchedulePane()); + this.add(tabbedPane, BorderLayout.CENTER); + } + + private JPanel createSchedulePane() { + JPanel schedulePane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, VerticalFlowLayout.TOP, 0, 0); + JPanel spinnerPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane_First0(); + JPanel buttonPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane_First0(); + spinnerPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Recycle_Schedule"))); + spinner = new UISpinner(MIN_VALUE, MAX_VALUE, STEP, DEFAULT_VALUE); + spinner.setValue(VcsConfig.getInstance().getV2CleanRecycleInterval()); + spinnerPane.add(spinner); + spinnerPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Recycle_Schedule_Day"))); + schedulePane.add(spinnerPane); + button = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Save")); + initButtonListener(); + buttonPane.add(button); + schedulePane.add(buttonPane); + return schedulePane; + } + + private void initButtonListener() { + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new Thread(() -> { + Configurations.update(new WorkerAdaptor(VcsConfig.class) { + @Override + public void run() { + VcsConfig.getInstance().setV2CleanRecycleInterval((int) spinner.getValue()); + } + }); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( + VcsAutoCleanService.VCS_AUTO_CLEAN_RECYCLE_JOB_NAME, + 1, + VcsAutoRecycleSchedule.class); + }).start(); + } + }); + } + + + private UIScrollPane patchScroll(JPanel generalPane) { + UIScrollPane generalPanelWithScroll = new UIScrollPane(generalPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + generalPanelWithScroll.setBorder(new EmptyBorder(0, 0, 0, 0)); + return generalPanelWithScroll; + } + + @Override + protected String title4PopupWindow() { + return Toolkit.i18nText("Fine-Design_Vcs_Recycle"); + } +} From c7224d54209c98099daeaadf5fe600cbcff5b6ce Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 13:46:13 +0800 Subject: [PATCH 44/68] =?UTF-8?q?=20REPORT-101063=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=B7=B2=E6=89=93=E5=BC=80=EF=BC=8C=E6=89=93=E5=BC=80?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=EF=BC=8C=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=A2=AB=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrameFileDealerPane.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 063ef5913b..4fb218be60 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -589,15 +589,12 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { if (!jTemplate.isALLSaved()) { - if (isCurrentEditing) { - MultiTemplateTabPane.getInstance().setIsCloseCurrent(true); - } + MultiTemplateTabPane.getInstance().setIsCloseCurrent(isCurrentEditing); MultiTemplateTabPane.getInstance().closeFormat(jTemplate); confirmCloseAndShowVcsNewPane(jTemplate, path); return; - } else { - showVcsNewPane(path); } + showVcsNewPane(path); } } } From 608ca0c6a16cbde1fd85231ec6a67df9d3642a47 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 13:51:58 +0800 Subject: [PATCH 45/68] =?UTF-8?q?=20REPORT-101045=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E7=AB=99=E4=BA=A4=E4=BA=92=E9=97=AE=E9=A2=98=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vcs/VcsRecycleSettingHelper.java | 49 +++++++++++++++++++ .../mainframe/vcs/ui/RecycleSettingPane.java | 20 +------- 2 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java new file mode 100644 index 0000000000..3e6a5bab96 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java @@ -0,0 +1,49 @@ +package com.fr.design.mainframe.vcs; + +import com.fr.concurrent.NamedThreadFactory; +import com.fr.transaction.Configurations; +import com.fr.transaction.WorkerAdaptor; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsConfig; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoRecycleSchedule; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * 版本管理界面配置回收事件的处理类 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/21 + */ +public class VcsRecycleSettingHelper { + + private static ExecutorService executorService = Executors.newSingleThreadExecutor(new NamedThreadFactory("VcsRecycle")); + + + /** + * 更新任务 + * + * @param day + */ + public static void updateJob(int day) { + executorService.execute(new Runnable() { + @Override + public void run() { + Configurations.update(new WorkerAdaptor(VcsConfig.class) { + @Override + public void run() { + VcsConfig.getInstance().setV2CleanRecycleInterval(day); + } + }); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( + VcsAutoCleanService.VCS_AUTO_CLEAN_RECYCLE_JOB_NAME, + 1, + VcsAutoRecycleSchedule.class); + } + }); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java index 7c41e64f2c..0653aad05f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java @@ -9,13 +9,8 @@ import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.VerticalFlowLayout; -import com.fr.transaction.Configurations; -import com.fr.transaction.WorkerAdaptor; -import com.fr.workspace.WorkContext; +import com.fr.design.mainframe.vcs.VcsRecycleSettingHelper; import com.fr.workspace.server.vcs.VcsConfig; -import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; -import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; -import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoRecycleSchedule; import javax.swing.JPanel; import javax.swing.ScrollPaneConstants; @@ -89,18 +84,7 @@ public class RecycleSettingPane extends BasicPane { button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - new Thread(() -> { - Configurations.update(new WorkerAdaptor(VcsConfig.class) { - @Override - public void run() { - VcsConfig.getInstance().setV2CleanRecycleInterval((int) spinner.getValue()); - } - }); - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( - VcsAutoCleanService.VCS_AUTO_CLEAN_RECYCLE_JOB_NAME, - 1, - VcsAutoRecycleSchedule.class); - }).start(); + VcsRecycleSettingHelper.updateJob((int) spinner.getValue()); } }); } From 5a8ddf8ec2078e612510adaff45259c3f48a6f6a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 14:50:20 +0800 Subject: [PATCH 46/68] =?UTF-8?q?REPORT-91839=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=81=E7=A7=BB=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/VcsMovePanel.java | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 99ce67f21c..064da17e7e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -5,6 +5,7 @@ import com.fr.base.svg.IconUtils; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ilable.UILabel; @@ -26,6 +27,7 @@ import com.fr.workspace.server.vcs.v2.move.VcsMoveStrategy; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; @@ -277,18 +279,7 @@ public class VcsMovePanel extends BasicPane { BasicDialog dlg = choosePane.showMediumWindow(SwingUtilities.getWindowAncestor(VcsMovePanel.this), new DialogActionAdapter() { @Override public void doOk() { - //进度条面板 - initProcessPane(); - VcsMovePanel.this.getParentCard().next(getParentPane()); - VcsMoveStrategy strategy; - if (moveDefaultButton.isSelected()) { - strategy = VcsMoveStrategy.createNumStrategy((int) spinner.getValue()); - } else if (moveNothingButton.isSelected()) { - strategy = VcsMoveStrategy.ALL_GIVE_UP; - } else { - strategy = VcsMoveStrategy.ALL_RETAIN; - } - new MoveWorker(strategy).execute(); + createConfirmPane(VcsMovePanel.this); } }); dlg.setVisible(true); @@ -296,6 +287,42 @@ public class VcsMovePanel extends BasicPane { }); } + private void createConfirmPane(Component parent) { + VerticalFlowLayout layout = new VerticalFlowLayout(VerticalFlowLayout.TOP); + layout.setAlignLeft(true); + JPanel panel = new JPanel(); + panel.setLayout(layout); + UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tip_Title")); + UILabel firstLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tip_First")); + UILabel secondLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tip_Second")); + titleLabel.setForeground(TIP_COLOR); + firstLabel.setForeground(TIP_COLOR); + secondLabel.setForeground(TIP_COLOR); + panel.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Right_Now"))); + panel.add(titleLabel); + panel.add(firstLabel); + panel.add(secondLabel); + int value = FineJOptionPane.showConfirmDialog(parent, panel, Toolkit.i18nText("Fine-Design_Vcs_Move_Title"), JOptionPane.YES_NO_OPTION); + processMove(value); + } + + private void processMove(int value) { + if (value == YES_OPTION) { + //进度条面板 + initProcessPane(); + VcsMovePanel.this.getParentCard().next(getParentPane()); + VcsMoveStrategy strategy; + if (moveDefaultButton.isSelected()) { + strategy = VcsMoveStrategy.createNumStrategy((int) spinner.getValue()); + } else if (moveNothingButton.isSelected()) { + strategy = VcsMoveStrategy.ALL_GIVE_UP; + } else { + strategy = VcsMoveStrategy.ALL_RETAIN; + } + new MoveWorker(strategy).execute(); + } + } + private void initSuccessPane() { JPanel successPane = new JPanel(); JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); From 175de09e0b555c0f943dadd65975bccf146e8148 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 16:03:10 +0800 Subject: [PATCH 47/68] =?UTF-8?q?REPORT-100547=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E7=8E=AF=E5=A2=83=E4=B8=8B=EF=BC=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E4=BF=9D=E7=95=99=E5=8E=86=E5=8F=B2=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=95=B0=E7=9B=AE=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 064da17e7e..64b93fe99f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -313,11 +313,11 @@ public class VcsMovePanel extends BasicPane { VcsMovePanel.this.getParentCard().next(getParentPane()); VcsMoveStrategy strategy; if (moveDefaultButton.isSelected()) { - strategy = VcsMoveStrategy.createNumStrategy((int) spinner.getValue()); + strategy = VcsMoveStrategy.createStrategy((int) spinner.getValue()); } else if (moveNothingButton.isSelected()) { - strategy = VcsMoveStrategy.ALL_GIVE_UP; + strategy = VcsMoveStrategy.createStrategy(0); } else { - strategy = VcsMoveStrategy.ALL_RETAIN; + strategy = VcsMoveStrategy.createStrategy(Integer.MAX_VALUE); } new MoveWorker(strategy).execute(); } From 5360342bb28411fd4bccc6968ef76536093e0327 Mon Sep 17 00:00:00 2001 From: Carlson Date: Mon, 24 Jul 2023 11:28:03 +0800 Subject: [PATCH 48/68] =?UTF-8?q?fix:=20=E5=85=B3=E9=97=AD=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E7=B1=BB=E5=9E=8B=E6=A8=A1=E6=9D=BF=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=88=A4=E6=96=AD=E5=85=B6=E5=AE=83=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=98=AF=E5=90=A6=E4=BF=9D=E5=AD=98=20#REPOR?= =?UTF-8?q?T-99959?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/file/SaveSomeTemplatePane.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java index 0bdd48b359..fecd39129c 100644 --- a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java +++ b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java @@ -3,7 +3,6 @@ package com.fr.design.file; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.dialog.FineJOptionPane; import com.fr.design.event.StateChangeListener; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icontainer.UIScrollPane; @@ -15,14 +14,19 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.general.ComparatorUtils; - import com.fr.log.FineLoggerFactory; import org.jetbrains.annotations.Nullable; -import javax.swing.*; -import javax.swing.border.EmptyBorder; -import java.awt.*; -import java.awt.event.*; +import javax.swing.AbstractListModel; +import javax.swing.BorderFactory; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JList; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Window; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.ArrayList; /** @@ -204,6 +208,7 @@ public class SaveSomeTemplatePane extends BasicPane { for (int i = 0; i < opendedTemplate.size(); i++) { //满足关闭条件的才继续判断文件是否发生了改动 boolean needClose = option == null || option.shouldClose(opendedTemplate.get(i), currentIndex, i); + needClose &= ComparatorUtils.equals(opendedTemplate.get(i).getTemplateTabOperatorType(), currentTemplate.getTemplateTabOperatorType()); if (needClose && isneedToAdd(opendedTemplate.get(i), currentTemplate)) { unSavedTemplate.add(opendedTemplate.get(i)); } From 040ffc520ca1139c408ba7843d07a59b03142086 Mon Sep 17 00:00:00 2001 From: Carlson Date: Mon, 24 Jul 2023 11:30:41 +0800 Subject: [PATCH 49/68] =?UTF-8?q?fix:=20=E5=85=B3=E9=97=AD=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E7=B1=BB=E5=9E=8B=E6=A8=A1=E6=9D=BF=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=88=A4=E6=96=AD=E5=85=B6=E5=AE=83=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=98=AF=E5=90=A6=E4=BF=9D=E5=AD=98=20#REPOR?= =?UTF-8?q?T-99959?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/file/SaveSomeTemplatePane.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java index fecd39129c..196c08cbb2 100644 --- a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java +++ b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java @@ -3,6 +3,7 @@ package com.fr.design.file; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.FineJOptionPane; import com.fr.design.event.StateChangeListener; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icontainer.UIScrollPane; @@ -14,19 +15,14 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.general.ComparatorUtils; + import com.fr.log.FineLoggerFactory; import org.jetbrains.annotations.Nullable; -import javax.swing.AbstractListModel; -import javax.swing.BorderFactory; -import javax.swing.DefaultListCellRenderer; -import javax.swing.JList; -import javax.swing.JPanel; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Window; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import java.awt.*; +import java.awt.event.*; import java.util.ArrayList; /** From 7e37eff8a81ec70012d065fa22746b734b4ed149 Mon Sep 17 00:00:00 2001 From: Carlson Date: Mon, 24 Jul 2023 13:57:34 +0800 Subject: [PATCH 50/68] =?UTF-8?q?fix:=20=E5=8F=AA=E6=9C=89=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=85=B3=E9=97=AD=E5=BD=93=E5=89=8D=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E5=85=B6=E5=AE=83=E6=A8=A1=E6=9D=BF=E6=97=B6=E6=89=8D=E5=81=9A?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=AF=94=E8=BE=83=20#REPORT-99959?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/file/MultiTemplateTabPane.java | 2 +- .../fr/design/file/SaveSomeTemplatePane.java | 20 ++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index 6658fc6638..be7c8c1953 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -419,7 +419,7 @@ public class MultiTemplateTabPane extends JComponent { public void closeOtherByOperatorType(String operatorType){ JTemplate currentEditingTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane(false); - if (saveSomeTempaltePane.showSavePane()) { + if (saveSomeTempaltePane.showSavePane(null, false, true)) { List> openedTemplate = HistoryTemplateListCache.getInstance().getHistoryList(); JTemplate[] templates = new JTemplate[openedTemplate.size()]; diff --git a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java index 196c08cbb2..1517309ef1 100644 --- a/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java +++ b/designer-base/src/main/java/com/fr/design/file/SaveSomeTemplatePane.java @@ -183,7 +183,19 @@ public class SaveSomeTemplatePane extends BasicPane { * @return */ public boolean showSavePane(@Nullable MultiTemplateTabPane.CloseCondition option, boolean judgeJTemplateMustSave) { - initAndPopulate(option, judgeJTemplateMustSave); + return showSavePane(option, judgeJTemplateMustSave, false); + } + + /** + * 显示保存模板提醒面板 + * + * @param option 具体关闭操作 + * @param judgeJTemplateMustSave 模板是否必须保存 + * @param judgeSameTabType 是否只包含当前编辑的模板类型 + * @return + */ + public boolean showSavePane(@Nullable MultiTemplateTabPane.CloseCondition option, boolean judgeJTemplateMustSave, boolean judgeSameTabType) { + initAndPopulate(option, judgeJTemplateMustSave, judgeSameTabType); //如果有未保存的文件 ,则跳出保存对话框,选择要存储的项目 if (!unSavedTemplate.isEmpty()) { dialog.setVisible(true); @@ -197,14 +209,16 @@ public class SaveSomeTemplatePane extends BasicPane { return HistoryTemplateListPane.getInstance().getHistoryList(); } - private void initAndPopulate(@Nullable MultiTemplateTabPane.CloseCondition option, boolean judgeJTemplateMustSave) { + private void initAndPopulate(@Nullable MultiTemplateTabPane.CloseCondition option, boolean judgeJTemplateMustSave, boolean judgeSameTabType) { java.util.List> opendedTemplate = getOpenedTemplatesToProcess(); JTemplate currentTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); int currentIndex = opendedTemplate.indexOf(currentTemplate); for (int i = 0; i < opendedTemplate.size(); i++) { //满足关闭条件的才继续判断文件是否发生了改动 boolean needClose = option == null || option.shouldClose(opendedTemplate.get(i), currentIndex, i); - needClose &= ComparatorUtils.equals(opendedTemplate.get(i).getTemplateTabOperatorType(), currentTemplate.getTemplateTabOperatorType()); + if (judgeSameTabType) { + needClose &= ComparatorUtils.equals(opendedTemplate.get(i).getTemplateTabOperatorType(), currentTemplate.getTemplateTabOperatorType()); + } if (needClose && isneedToAdd(opendedTemplate.get(i), currentTemplate)) { unSavedTemplate.add(opendedTemplate.get(i)); } From 3e72f5c4fbe0fca29652671d887c299ec2028918 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 15:04:46 +0800 Subject: [PATCH 51/68] =?UTF-8?q?REPORT-101293=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=9C=AA=E6=89=93=E5=BC=80=EF=BC=8C=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E7=82=B9=E4=B8=8D=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrameFileDealerPane.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 4fb218be60..747cf6aef5 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -394,8 +394,11 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private boolean isCurrentEditing(String path) { JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - String editing = jt.getEditingFILE().getPath(); - return ComparatorUtils.equals(editing, path); + if (JTemplate.isValid(jt)) { + String editing = jt.getEditingFILE().getPath(); + return ComparatorUtils.equals(editing, path); + } + return false; } /** @@ -594,9 +597,9 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt confirmCloseAndShowVcsNewPane(jTemplate, path); return; } - showVcsNewPane(path); } } + showVcsNewPane(path); } private void confirmCloseAndShowVcsNewPane(JTemplate specifiedTemplate, String path) { From e1c02e0bc8915266b74fefe6129dbd96070315db Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 15:18:46 +0800 Subject: [PATCH 52/68] =?UTF-8?q?REPORT-101289=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=BF=81=E7=A7=BB=E7=9A=84=E6=8F=90=E7=A4=BA=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E4=BD=8D=E7=BD=AE=E6=B2=A1=E6=9C=89=E5=B1=85=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 64b93fe99f..c724c16b88 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -279,7 +279,7 @@ public class VcsMovePanel extends BasicPane { BasicDialog dlg = choosePane.showMediumWindow(SwingUtilities.getWindowAncestor(VcsMovePanel.this), new DialogActionAdapter() { @Override public void doOk() { - createConfirmPane(VcsMovePanel.this); + createConfirmPane(); } }); dlg.setVisible(true); @@ -287,7 +287,7 @@ public class VcsMovePanel extends BasicPane { }); } - private void createConfirmPane(Component parent) { + private void createConfirmPane() { VerticalFlowLayout layout = new VerticalFlowLayout(VerticalFlowLayout.TOP); layout.setAlignLeft(true); JPanel panel = new JPanel(); @@ -302,7 +302,7 @@ public class VcsMovePanel extends BasicPane { panel.add(titleLabel); panel.add(firstLabel); panel.add(secondLabel); - int value = FineJOptionPane.showConfirmDialog(parent, panel, Toolkit.i18nText("Fine-Design_Vcs_Move_Title"), JOptionPane.YES_NO_OPTION); + int value = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), panel, Toolkit.i18nText("Fine-Design_Vcs_Move_Title"), JOptionPane.YES_NO_OPTION); processMove(value); } From 14f50ff342c98ae315eb532c1fb6e1fcdacc70ec Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 15:25:03 +0800 Subject: [PATCH 53/68] =?UTF-8?q?REPORT-100633=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E5=8B=BE=E9=80=89=E5=A4=87=E6=B3=A8=E7=9A=84=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8D=E4=BC=9A=E8=A2=AB=E6=B8=85=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E5=A4=87=E6=B3=A8=E7=9A=84=E7=89=88=E6=9C=AC=E8=BF=98=E6=98=AF?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E8=A2=AB=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 563c1620e1..1087a45035 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -467,7 +467,9 @@ public class PreferencePane extends BasicPane { }); vcsPane.add(enableVcsPanel); vcsPane.add(intervalPanel); - vcsPane.add(saveCommitCheckBox); + if (VcsHelper.getInstance().isLegacyMode()) { + vcsPane.add(saveCommitCheckBox); + } vcsPane.add(autoCleanPane); boolean support = VcsHelper.getInstance().checkV2FunctionSupport(); saveIntervalPane.setVisible(support); @@ -491,6 +493,7 @@ public class PreferencePane extends BasicPane { saveIntervalPane.setVisible(useV2); autoCleanPane.setVisible(useV2); gcControlPane.setVisible(!useV2); + saveCommitCheckBox.setVisible(!useV2); useVcsAutoCleanScheduleCheckBox.setSelected(useV2); useVcsAutoSaveScheduleCheckBox.setSelected(useV2); boolean useAutoClean =useV2 && FineScheduler.getInstance().isStarted(); From b230f8f8e5d91e079137cd406594392fd1f7403c Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 15:27:08 +0800 Subject: [PATCH 54/68] =?UTF-8?q?REPORT-100162=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=8D=E5=9C=A8=E7=BC=96=E8=BE=91=E7=8A=B6=E6=80=81?= =?UTF-8?q?=EF=BC=8C=E8=BF=98=E6=98=AF=E5=9C=A8=E8=A7=A6=E5=8F=91=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index c8f5c40c68..7032a21af4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -344,7 +344,7 @@ public class VcsHelper implements JTemplateActionListener { private void autoSave(JTemplate jt, String currentUsername, String fileName, int nowVersion, boolean replace, VcsOperator operator) { try { - if (JTemplate.isValid(jt)) { + if (JTemplate.isValid(jt) && !jt.isALLSaved()) { operator.autoSave(currentUsername, fileName, StringUtils.EMPTY, nowVersion, jt.exportData(), replace); } } catch (Exception e) { From b245ac7429a494b7057febe7dc64c24dc1f1d62d Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 15:37:00 +0800 Subject: [PATCH 55/68] =?UTF-8?q?REPORT-101167=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=80=E6=9C=9F=E3=80=91=E9=9B=86?= =?UTF-8?q?=E7=BE=A4=E7=8E=AF=E5=A2=83=EF=BC=8C=E4=BF=9D=E5=AD=98=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index 7032a21af4..b5464cb84f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -364,7 +364,8 @@ public class VcsHelper implements JTemplateActionListener { public void templateSaved(JTemplate jt) { if (needInit() && DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() - && !WorkContext.getCurrent().isCluster()) { + // 如果是集群,在新版本下才生效 + && (!WorkContext.getCurrent().isCluster() || !VcsHelper.getInstance().isLegacyMode())) { fireVcs(jt); } } From 8cfe74ab898130a4832d187ff50323268dece6c2 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 15:53:34 +0800 Subject: [PATCH 56/68] =?UTF-8?q?REPORT-91839=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=20?= =?UTF-8?q?=E5=81=B6=E9=81=87=E6=8A=A5=E9=94=99=EF=BC=8C=E4=B8=8D=E7=A1=AE?= =?UTF-8?q?=E5=AE=9A=E5=9C=BA=E6=99=AF=EF=BC=8C=E5=8A=A0=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/common/VcsHelper.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index b5464cb84f..fd959af6bf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -79,7 +79,12 @@ public class VcsHelper implements JTemplateActionListener { VcsOperator op = WorkContext.getCurrent().get(VcsOperator.class); // 开了设计器启动页面时一开始取不到VcsOperator,通过下面的切换环境事件再取,这边判断下 if (op != null) { - legacyMode = op.isLegacyMode(); + try { + legacyMode = op.isLegacyMode(); + } catch (Exception e) { + legacyMode = true; + FineLoggerFactory.getLogger().error("[VcsHelper] get legacy first failed ", e.getMessage()); + } } EventDispatcher.listen(ConfigEvent.READY, new ListenerAdaptor() { @Override From 7637d0d0aea213db5f3096d19b02975636e102ac Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 17:51:27 +0800 Subject: [PATCH 57/68] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=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/mainframe/vcs/VcsTableEntity.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java index f10b0a12fe..0739bb16b2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsTableEntity.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.vcs; import com.fr.report.entity.VcsEntity; +import com.fr.stable.StringUtils; /** * 包装VcsEntity的用于表格展示与处理的类 @@ -39,7 +40,11 @@ public class VcsTableEntity implements TableEntity{ * @return 版本大小 */ public String getSize() { - return String.format("%.3f",entity.getSize()/MB_SIZE) + MB; + double size = entity.getSize()/MB_SIZE; + if (size == 0) { + return StringUtils.EMPTY; + } + return String.format("%.3f", size) + MB; } /** From 36d59dff5c428458c1f3a0f46260004f04bc0db6 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 17:53:11 +0800 Subject: [PATCH 58/68] =?UTF-8?q?REPORT-101166=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E9=9B=86?= =?UTF-8?q?=E7=BE=A4=E7=8E=AF=E5=A2=83=EF=BC=8C=E7=89=88=E6=9C=AC=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=A1=B5=E9=9D=A2=E6=89=80=E6=9C=89=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E9=83=BD=E4=B8=8D=E5=8F=AF=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 1087a45035..f2f7c1af5f 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -496,10 +496,7 @@ public class PreferencePane extends BasicPane { saveCommitCheckBox.setVisible(!useV2); useVcsAutoCleanScheduleCheckBox.setSelected(useV2); useVcsAutoSaveScheduleCheckBox.setSelected(useV2); - boolean useAutoClean =useV2 && FineScheduler.getInstance().isStarted(); - useVcsAutoCleanScheduleCheckBox.setEnabled(useAutoClean); - autoCleanIntervalComboBox.setEnabled(useAutoClean); - autoCleanRetainIntervalComboBox.setEnabled(useAutoClean); + checkAutoScheduleStartAndUpdateStatus(); useVcsAutoSaveScheduleCheckBox.setEnabled(useV2); } }); @@ -518,14 +515,39 @@ public class PreferencePane extends BasicPane { autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Content"))); autoCleanPane.add(autoCleanRetainIntervalComboBox); autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Last"))); - boolean useAutoClean = !VcsHelper.getInstance().isLegacyMode() && FineScheduler.getInstance().isStarted(); - useVcsAutoCleanScheduleCheckBox.setEnabled(useAutoClean); - autoCleanIntervalComboBox.setEnabled(useAutoClean); - autoCleanRetainIntervalComboBox.setEnabled(useAutoClean); + checkAutoScheduleStartAndUpdateStatus(); autoCleanPane.setVisible(false); return autoCleanPane; } + private void checkAutoScheduleStartAndUpdateStatus() { + if (!VcsHelper.getInstance().isLegacyMode()) { + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + return WorkContext.getCurrent().get(VcsAutoCleanOperator.class).isSupport(); + } + @Override + protected void done() { + try { + boolean useAutoClean = get(); + updateAutoCleanEnabled(useAutoClean); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + }.execute(); + } else { + updateAutoCleanEnabled(false); + } + } + + private void updateAutoCleanEnabled(boolean b) { + useVcsAutoCleanScheduleCheckBox.setEnabled(b); + autoCleanIntervalComboBox.setEnabled(b); + autoCleanRetainIntervalComboBox.setEnabled(b); + } + private JPanel createSaveIntervalPane() { JPanel saveIntervalPane = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); useVcsAutoSaveScheduleCheckBox = new UICheckBox(); @@ -1192,14 +1214,16 @@ public class PreferencePane extends BasicPane { } else { VcsHelper.getInstance().stopAutoSave(); } - if (useVcsAutoCleanScheduleCheckBox.isSelected()) { - FineLoggerFactory.getLogger().info("[VcsV2] start auto clean!"); - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( - VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME, - getDay(autoCleanIntervalComboBox.getSelectedIndex()), - VcsAutoCleanSchedule.class); - } else { - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).stopVcsAutoCleanJob(VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME); + if (useVcsAutoCleanScheduleCheckBox.isEnabled()) { + if (useVcsAutoCleanScheduleCheckBox.isSelected()) { + FineLoggerFactory.getLogger().info("[VcsV2] start auto clean!"); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( + VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME, + getDay(autoCleanIntervalComboBox.getSelectedIndex()), + VcsAutoCleanSchedule.class); + } else { + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).stopVcsAutoCleanJob(VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME); + } } } return null; From 583cfd91ccb6c72bdf47df2d83e6b9bfcbfb2597 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 17:58:44 +0800 Subject: [PATCH 59/68] =?UTF-8?q?REPORT-101060=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=A0=E6=9D=83=E9=99=90=E7=9A=84=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E8=83=BD=E5=88=A0=E9=99=A4=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/file/TemplateTreePane.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java index d730c69d35..494232f2a9 100644 --- a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java @@ -407,9 +407,11 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (node instanceof FileNode) { FileNodeFILE nodeFILE = new FileNodeFILE((FileNode) node); if (nodeFILE.exists()) { - WorkContext.getCurrent().get(VcsOperator.class).recycleVersion( - VcsHelper.getInstance().getCurrentUsername(), - VcsHelper.getInstance().dealWithFilePath(((FileNode) node).getEnvPath())); + try { + WorkContext.getCurrent().get(VcsOperator.class).recycleVersion(VcsHelper.getInstance().getCurrentUsername(), VcsHelper.getInstance().dealWithFilePath(((FileNode) node).getEnvPath())); + } catch (Exception e) { + return false; + } if (TemplateResourceManager.getResource().delete(nodeFILE)) { HistoryTemplateListCache.getInstance().deleteFile(nodeFILE); } else { From 8d1c4939366d52e6619b7d3d1bbaccaf1620ed81 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 19:00:23 +0800 Subject: [PATCH 60/68] =?UTF-8?q?REPORT-101340=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=B8=85=E7=90=86=E9=85=8D=E7=BD=AE=E7=81=B0=E5=8C=96?= =?UTF-8?q?=E6=97=B6=EF=BC=8Chover=E6=8F=90=E7=A4=BA=E6=B2=A1=E6=9C=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index f2f7c1af5f..4294477b7c 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -446,6 +446,7 @@ public class PreferencePane extends BasicPane { intervalPanel.add(saveIntervalEditor); intervalPanel.add(delayLabel); autoCleanPane = createAutoCleanPane(); + checkAutoScheduleStartAndUpdateStatus(); vcsEnableCheckBox.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { @@ -515,7 +516,6 @@ public class PreferencePane extends BasicPane { autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Content"))); autoCleanPane.add(autoCleanRetainIntervalComboBox); autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Last"))); - checkAutoScheduleStartAndUpdateStatus(); autoCleanPane.setVisible(false); return autoCleanPane; } @@ -546,6 +546,9 @@ public class PreferencePane extends BasicPane { useVcsAutoCleanScheduleCheckBox.setEnabled(b); autoCleanIntervalComboBox.setEnabled(b); autoCleanRetainIntervalComboBox.setEnabled(b); + if (autoCleanPane != null) { + autoCleanPane.setToolTipText(b ? null : Toolkit.i18nText("Fine-Design_Vcs_Server_Start_Hover")); + } } private JPanel createSaveIntervalPane() { From 9680bf0074c97261140b8155b4b6852845e9acee Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Mon, 24 Jul 2023 20:02:36 +0800 Subject: [PATCH 61/68] =?UTF-8?q?REPORT-100518=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E6=97=A0?= =?UTF-8?q?=E7=A3=81=E7=9B=98=E5=86=99=E5=85=A5=E6=9D=83=E9=99=90=EF=BC=8C?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=BF=81=E7=A7=BB=E6=97=A0=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/vcs/VcsExceptionUtils.java | 37 +++++++++++++++++++ .../design/mainframe/vcs/ui/VcsMovePanel.java | 9 +++-- 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsExceptionUtils.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsExceptionUtils.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsExceptionUtils.java new file mode 100644 index 0000000000..9ab310bbac --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsExceptionUtils.java @@ -0,0 +1,37 @@ +package com.fr.design.mainframe.vcs; + +import com.fr.design.i18n.Toolkit; + +import java.io.IOException; +import java.util.HashMap; + +/** + * 版本管理异常处理工具类 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/24 + */ +public class VcsExceptionUtils { + + public static final HashMap EXCEPTION_MAP = new HashMap() { + { + put(IOException.class, Toolkit.i18nText("Fine-Design_Vcs_Exception_IO")); + put(UnsupportedOperationException.class, Toolkit.i18nText("Fine-Design_Vcs_Exception_Un_Support")); + } + }; + + + /** + * 根据异常返回结果描述文案 + */ + public static String createDetailByException(Exception e) { + for (Class key : EXCEPTION_MAP.keySet()) { + if (key.isAssignableFrom(e.getClass())) { + return EXCEPTION_MAP.get(key); + } + } + return Toolkit.i18nText("Fine-Design_Vcs_Exception_Unknown"); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index c724c16b88..211a3d24a6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -15,6 +15,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.vcs.VcsExceptionUtils; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.ThemeUtils; @@ -375,7 +376,7 @@ public class VcsMovePanel extends BasicPane { return parentPane; } - private void initFailedPane() { + private void initFailedPane(String detail) { JPanel failedPane = new JPanel(); JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); failedButton = new UIButton(Toolkit.i18nText("Fine-Design_Vcs_Move_Failed_Go")); @@ -383,7 +384,7 @@ public class VcsMovePanel extends BasicPane { failedIconLabel = new UILabel(IconUtils.readIcon("/com/fr/design/vcs/move_failed.svg")); failedLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Failed")); failedLabel.setFont(FONT); - failedTipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Failed_Tip")); + failedTipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Failed_Tip", detail)); initStatusPane(failedTipLabel, failedIconLabel, failedLabel, failedButton, body, FAILED, failedPane); } @@ -409,6 +410,7 @@ public class VcsMovePanel extends BasicPane { private class MoveWorker extends SwingWorker { private VcsMoveStrategy strategy; + private String detail = StringUtils.EMPTY; public MoveWorker(VcsMoveStrategy strategy) { this.strategy = strategy; @@ -431,6 +433,7 @@ public class VcsMovePanel extends BasicPane { }, strategy); } catch (Exception e) { VcsMoveService.getInstance().stopMoving(); + detail = VcsExceptionUtils.createDetailByException(e); return false; } return true; @@ -450,7 +453,7 @@ public class VcsMovePanel extends BasicPane { VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); VcsHelper.getInstance().updateLegacyMode(); } else { - initFailedPane(); + initFailedPane(detail); VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); } From 2b70d0f48467292a755704416b12390c642546bc Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 25 Jul 2023 11:00:47 +0800 Subject: [PATCH 62/68] =?UTF-8?q?REPORT-91839=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=20?= =?UTF-8?q?=E6=B2=A1=E8=AE=BE=E7=BD=AE=E5=90=AF=E5=8A=A8=E9=A1=B5=EF=BC=8C?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E7=9A=84=E6=97=B6=E5=80=99=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=9C=89=E7=82=B9=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/mainframe/vcs/common/VcsHelper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index fd959af6bf..bd3551256a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -81,9 +81,11 @@ public class VcsHelper implements JTemplateActionListener { if (op != null) { try { legacyMode = op.isLegacyMode(); + root = WorkContext.getCurrent().isLocal() || WorkContext.getCurrent().isRoot(); } catch (Exception e) { legacyMode = true; - FineLoggerFactory.getLogger().error("[VcsHelper] get legacy first failed ", e.getMessage()); + root = false; + FineLoggerFactory.getLogger().error("[VcsHelper] init first failed ", e.getMessage()); } } EventDispatcher.listen(ConfigEvent.READY, new ListenerAdaptor() { From dfce42efc49a6a8b2b449f9841892e54895d00a2 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 25 Jul 2023 14:51:20 +0800 Subject: [PATCH 63/68] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/file/PreferencePane.java | 8 ++++++-- .../java/com/fr/design/file/TemplateTreePane.java | 1 + .../fr/design/mainframe/vcs/ui/VcsCenterPane.java | 13 +++++++++++++ .../fr/design/mainframe/vcs/ui/VcsMovePanel.java | 14 ++++++++++++-- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 4294477b7c..0ea128a2ab 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -179,6 +179,8 @@ public class PreferencePane extends BasicPane { private static final int DEFAULT_INDEX = 3; + private BasicDialog basicDialog; + private boolean languageChanged; // 是否修改了设计器语言设置 //设置是否支持undo private UICheckBox supportUndoCheckBox; @@ -500,7 +502,7 @@ public class PreferencePane extends BasicPane { checkAutoScheduleStartAndUpdateStatus(); useVcsAutoSaveScheduleCheckBox.setEnabled(useV2); } - }); + }, basicDialog); }; private JPanel createAutoCleanPane() { @@ -1262,12 +1264,14 @@ public class PreferencePane extends BasicPane { @Override public BasicDialog showWindow(Window window) { - return showWindow(window, new DialogActionAdapter() { + basicDialog = showWindow(window, new DialogActionAdapter() { @Override public void doOk() { languageChanged = !ComparatorUtils.equals(languageComboBox.getSelectedItem(), DesignerEnvManager.getEnvManager(false).getLanguage()); } }); + movePanel.setParentDialog(basicDialog); + return basicDialog; } @Override diff --git a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java index 494232f2a9..2f8b1cd206 100644 --- a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java @@ -410,6 +410,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { try { WorkContext.getCurrent().get(VcsOperator.class).recycleVersion(VcsHelper.getInstance().getCurrentUsername(), VcsHelper.getInstance().dealWithFilePath(((FileNode) node).getEnvPath())); } catch (Exception e) { + FineLoggerFactory.getLogger().error("[VcsV2] recycle {} failed", nodeFILE.getName()); return false; } if (TemplateResourceManager.getResource().delete(nodeFILE)) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 474d6fbb67..2f96418c45 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.base.svg.IconUtils; import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; @@ -139,6 +140,7 @@ public class VcsCenterPane extends VcsNewPane { Object o = table.getValueAt(table.getEditingRow(), table.getEditingColumn()); if (o instanceof VcsTableEntity) { VcsEntity entity = ((VcsTableEntity) o).getEntity(); + closeDialog(); DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(getTemplateTruePath(entity.getFilename()), false))); } } @@ -176,6 +178,17 @@ public class VcsCenterPane extends VcsNewPane { return tableEntities; } + @Override + protected void initDialogListener(BasicDialog dialog) { + dialog.addDialogActionListener(new DialogActionAdapter() { + @Override + public void doOk() { + getParentDialog().doOK(); + getParentDialog().dispose(); + } + }); + } + @Override protected String title4PopupWindow() { return TITLE; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 211a3d24a6..ef37d7af1f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -82,6 +82,8 @@ public class VcsMovePanel extends BasicPane { public static final String FAILED = "FAILED"; public static boolean moving = false; + + private BasicDialog parentDialog; private UILabel vcsUpdateExistLabel = new UILabel(); private UILabel vcsUpdateFireLabel = new UILabel(); @@ -119,11 +121,12 @@ public class VcsMovePanel extends BasicPane { private boolean visible = false; - public VcsMovePanel(CardLayout cardLayout, JPanel parentPane, MoveCallBack callBack) { + public VcsMovePanel(CardLayout cardLayout, JPanel parentPane, MoveCallBack callBack, BasicDialog parentDialog) { this.parentCard = cardLayout; this.parentPane = parentPane; this.callBack = callBack; this.setLayout(new BorderLayout()); + this.parentDialog = parentDialog; updatePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); updatePane.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); //初始化顶部的面板 @@ -268,7 +271,7 @@ public class VcsMovePanel extends BasicPane { @Override public void actionPerformed(ActionEvent e) { VcsCenterPane vcsCenterPane = new VcsCenterPane(); - vcsCenterPane.showDialog(); + vcsCenterPane.showDialog(parentDialog); } }); } @@ -362,6 +365,13 @@ public class VcsMovePanel extends BasicPane { parentCard.show(parentPane, SETTING); } + public BasicDialog getParentDialog() { + return parentDialog; + } + + public void setParentDialog(BasicDialog parentDialog) { + this.parentDialog = parentDialog; + } @Override protected String title4PopupWindow() { From ab28e1f4872164ccd2e9bc1e4b0964dcdec2daea Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 25 Jul 2023 14:57:59 +0800 Subject: [PATCH 64/68] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/RecyclePane.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index f9e803c3fc..1569eaf3d1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -53,7 +53,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane private static final int COLUMNS_COUNT = 15; private BasicDialog dialog; - private BasicDialog parent; + private BasicDialog parentDialog; private List tableEntities; public RecyclePane() { @@ -234,21 +234,27 @@ public class RecyclePane extends AbstractSupportSelectTablePane * @param parent 父弹窗 */ public void showDialog(BasicDialog parent) { - this.parent = parent; + this.parentDialog = parent; dialog = this.showWindow(parent, false); + initDialogListener(dialog); dialog.setVisible(true); } + protected void initDialogListener(BasicDialog dialog) { + } + /** * 关闭弹窗,如果有父弹窗,则一起关闭 * */ public void closeDialog() { if (dialog != null) { + dialog.doOK(); dialog.dispose(); } - if (parent != null) { - parent.dispose(); + if (parentDialog != null) { + parentDialog.doOK(); + parentDialog.dispose(); } } @@ -260,6 +266,14 @@ public class RecyclePane extends AbstractSupportSelectTablePane this.dialog = dialog; } + public BasicDialog getParentDialog() { + return parentDialog; + } + + public void setParentDialog(BasicDialog parentDialog) { + this.parentDialog = parentDialog; + } + /** * 删除范围 * From 4a77907e08e09f0f04b324580a1a839ae6acf6b2 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 25 Jul 2023 15:42:15 +0800 Subject: [PATCH 65/68] =?UTF-8?q?REPORT-100458=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E5=BC=B9=E7=AA=97=EF=BC=8C=E4=BF=9D=E7=95=99=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E8=BE=93=E5=85=A5=E6=A1=86=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E9=9D=9E=E6=B3=95=E5=80=BC=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 9 +-- .../fr/design/editor/editor/NumberEditor.java | 10 +++- .../mainframe/vcs/ui/UIPositiveIntEditor.java | 59 +++++++++++++++++++ .../vcs/ui/UIPositiveIntSpinner.java | 39 ++++++++++++ .../design/mainframe/vcs/ui/VcsMovePanel.java | 4 +- 5 files changed, 114 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntEditor.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntSpinner.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 0ea128a2ab..91d67edf8d 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -36,6 +36,7 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.common.VcsHelper; +import com.fr.design.mainframe.vcs.ui.UIPositiveIntEditor; import com.fr.design.mainframe.vcs.ui.VcsMovePanel; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.unit.UnitConvertUtil; @@ -225,7 +226,7 @@ public class PreferencePane extends BasicPane { private UIComboBox autoCleanIntervalComboBox; private UIComboBox autoCleanRetainIntervalComboBox; - private IntegerEditor autoSaveIntervalEditor; + private UIPositiveIntEditor autoSaveIntervalEditor; private UICheckBox saveCommitCheckBox; private UICheckBox useIntervalCheckBox; private VcsMovePanel movePanel; @@ -235,7 +236,7 @@ public class PreferencePane extends BasicPane { private JPanel gcControlPane; private UICheckBox startupPageEnabledCheckBox; - private IntegerEditor saveIntervalEditor; + private UIPositiveIntEditor saveIntervalEditor; private UICheckBox gcEnableCheckBox; private UIButton gcButton; private UILabel remindVcsLabel; @@ -430,7 +431,7 @@ public class PreferencePane extends BasicPane { saveIntervalPane = createSaveIntervalPane(); saveCommitCheckBox = new UICheckBox(i18nText("Fine-Design_Vcs_No_Delete")); - saveIntervalEditor = new IntegerEditor(60); + saveIntervalEditor = new UIPositiveIntEditor(60); useIntervalCheckBox = new UICheckBox(); savePane.add(vcsEnableCheckBox); savePane.add(saveIntervalPane); @@ -556,7 +557,7 @@ public class PreferencePane extends BasicPane { private JPanel createSaveIntervalPane() { JPanel saveIntervalPane = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); useVcsAutoSaveScheduleCheckBox = new UICheckBox(); - autoSaveIntervalEditor = new IntegerEditor(60); + autoSaveIntervalEditor = new UIPositiveIntEditor(60); saveIntervalPane.add(useVcsAutoSaveScheduleCheckBox); saveIntervalPane.add(new UILabel(i18nText("Fine-Design_Vcs_Every"))); saveIntervalPane.add(autoSaveIntervalEditor); diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java index d811ad89b7..26b81f8a4b 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java @@ -38,7 +38,7 @@ public abstract class NumberEditor extends Editor { */ public NumberEditor(T value, String name) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); - numberField = new UINumberField(); + numberField = createNumberField(); this.add(numberField, BorderLayout.CENTER); this.numberField.addKeyListener(textKeyListener); this.numberField.setHorizontalAlignment(UITextField.RIGHT); @@ -46,6 +46,14 @@ public abstract class NumberEditor extends Editor { this.setName(name); } + /** + * 创建NumberField对象 + * + */ + protected UINumberField createNumberField() { + return new UINumberField(); + } + /** * 给numberField加键盘事件 * diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntEditor.java new file mode 100644 index 0000000000..797d8bd1ef --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntEditor.java @@ -0,0 +1,59 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.editor.editor.IntegerEditor; +import com.fr.design.gui.itextfield.UIIntNumberField; +import com.fr.design.gui.itextfield.UINumberField; +import com.fr.stable.StringUtils; + + +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; + +/** + * 正整数输入框 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/25 + */ +public class UIPositiveIntEditor extends IntegerEditor { + private static final int DEFAULT_COLUMNS = 4; + + private static final int MIN = 1; + private static final int MAX = 99999; + + private static final int DEFAULT_VALUE = 60; + + public UIPositiveIntEditor(Integer value) { + super(value); + numberField.setMaxValue(MAX); + numberField.setMinValue(MIN); + initNumberFieldListener(); + } + + public UIPositiveIntEditor(Integer value, Integer min, Integer max) { + super(value); + numberField.setMaxValue(max); + numberField.setMinValue(min); + initNumberFieldListener(); + } + + private void initNumberFieldListener() { + numberField.addFocusListener(new FocusAdapter() { + @Override + public void focusLost(FocusEvent e) { + if (StringUtils.isEmpty(numberField.getTextValue())) { + numberField.setValue(DEFAULT_VALUE); + } + } + }); + } + + + @Override + protected UINumberField createNumberField() { + UIIntNumberField field = new UIIntNumberField(); + field.setColumns(DEFAULT_COLUMNS); + return field; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntSpinner.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntSpinner.java new file mode 100644 index 0000000000..3753cf817c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/UIPositiveIntSpinner.java @@ -0,0 +1,39 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.gui.itextfield.UIIntNumberField; +import com.fr.design.gui.itextfield.UINumberField; + +/** + * 只允许输入正整数的Spinner + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/25 + */ +public class UIPositiveIntSpinner extends UISpinner { + private static final int DEFAULT_COLUMNS = 5; + + + public UIPositiveIntSpinner() { + } + + public UIPositiveIntSpinner(double minValue, double maxValue, double dierta) { + super(minValue, maxValue, dierta); + } + + public UIPositiveIntSpinner(double minValue, double maxValue, double dierta, double defaultValue) { + super(minValue, maxValue, dierta, defaultValue); + } + + public UIPositiveIntSpinner(double minValue, double maxValue, double dierta, double defaultValue, boolean fillNegativeNumber) { + super(minValue, maxValue, dierta, defaultValue, fillNegativeNumber); + } + + @Override + protected UINumberField initNumberField() { + UIIntNumberField field = new UIIntNumberField(); + field.setColumns(DEFAULT_COLUMNS); + return field; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index ef37d7af1f..369c7261c1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -112,7 +112,7 @@ public class VcsMovePanel extends BasicPane { //全部放弃 private UIRadioButton moveNothingButton; - private UISpinner spinner; + private UIPositiveIntSpinner spinner; private MoveCallBack callBack; @@ -238,7 +238,7 @@ public class VcsMovePanel extends BasicPane { moveAllPane.add(moveAllButton); moveDefaultPanel.add(moveDefaultButton); moveDefaultPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Default_Text_Left"))); - spinner = new UISpinner(MIN_VALUE, MAX_VALUE, STEP, DEFAULT_VALUE); + spinner = new UIPositiveIntSpinner(MIN_VALUE, MAX_VALUE, STEP, DEFAULT_VALUE); moveDefaultPanel.add(spinner); moveDefaultPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Default_Text_Right"))); moveNothingPane.add(moveNothingButton); From f13a6585046ce565782be7b1a6f8e563c03be8a1 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 25 Jul 2023 16:11:32 +0800 Subject: [PATCH 66/68] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=96=B9=E6=B3=95=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java | 4 ++-- .../java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java | 2 +- .../main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index 1569eaf3d1..992f3add58 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -244,10 +244,10 @@ public class RecyclePane extends AbstractSupportSelectTablePane } /** - * 关闭弹窗,如果有父弹窗,则一起关闭 + * 关闭弹窗,如果有父弹窗,则一起关闭,如果有属性配置的弹窗面板要保存再关闭 * */ - public void closeDialog() { + public void SaveSettingAndCloseDialog() { if (dialog != null) { dialog.doOK(); dialog.dispose(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 2f96418c45..e71b85639c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -140,7 +140,7 @@ public class VcsCenterPane extends VcsNewPane { Object o = table.getValueAt(table.getEditingRow(), table.getEditingColumn()); if (o instanceof VcsTableEntity) { VcsEntity entity = ((VcsTableEntity) o).getEntity(); - closeDialog(); + SaveSettingAndCloseDialog(); DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(getTemplateTruePath(entity.getFilename()), false))); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index 8273de81da..605e3642bf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -160,7 +160,7 @@ public class VcsNewPane extends RecyclePane { JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { restoreEntity(entity); - VcsNewPane.this.closeDialog(); + VcsNewPane.this.SaveSettingAndCloseDialog(); } } } @@ -230,7 +230,7 @@ public class VcsNewPane extends RecyclePane { if (o instanceof VcsTableEntity) { VcsEntity entity = ((VcsTableEntity) o).getEntity(); previewEntity(entity); - VcsNewPane.this.closeDialog(); + VcsNewPane.this.SaveSettingAndCloseDialog(); } } }); From fbe7375e684e154ec7068c47372b4c58a18e8404 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 25 Jul 2023 16:16:51 +0800 Subject: [PATCH 67/68] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=96=B9=E6=B3=95=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java | 2 +- .../java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java | 2 +- .../main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index 992f3add58..4b0f8e9763 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -247,7 +247,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane * 关闭弹窗,如果有父弹窗,则一起关闭,如果有属性配置的弹窗面板要保存再关闭 * */ - public void SaveSettingAndCloseDialog() { + public void saveSettingAndCloseDialog() { if (dialog != null) { dialog.doOK(); dialog.dispose(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index e71b85639c..efe622566b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -140,7 +140,7 @@ public class VcsCenterPane extends VcsNewPane { Object o = table.getValueAt(table.getEditingRow(), table.getEditingColumn()); if (o instanceof VcsTableEntity) { VcsEntity entity = ((VcsTableEntity) o).getEntity(); - SaveSettingAndCloseDialog(); + saveSettingAndCloseDialog(); DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(getTemplateTruePath(entity.getFilename()), false))); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index 605e3642bf..3a949b85d6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -160,7 +160,7 @@ public class VcsNewPane extends RecyclePane { JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { restoreEntity(entity); - VcsNewPane.this.SaveSettingAndCloseDialog(); + VcsNewPane.this.saveSettingAndCloseDialog(); } } } @@ -230,7 +230,7 @@ public class VcsNewPane extends RecyclePane { if (o instanceof VcsTableEntity) { VcsEntity entity = ((VcsTableEntity) o).getEntity(); previewEntity(entity); - VcsNewPane.this.SaveSettingAndCloseDialog(); + VcsNewPane.this.saveSettingAndCloseDialog(); } } }); From 3d4f9022637efb459d45c7ca70e106e0e92c4df6 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Tue, 25 Jul 2023 18:17:58 +0800 Subject: [PATCH 68/68] =?UTF-8?q?REPORT-98345=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=90=8E=EF=BC=8C=E6=B2=A1=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 369c7261c1..cd3e6f09a6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -15,6 +15,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.vcs.VcsExceptionUtils; import com.fr.design.mainframe.vcs.common.VcsHelper; import com.fr.design.utils.DesignUtils; @@ -462,6 +463,7 @@ public class VcsMovePanel extends BasicPane { initSuccessPane(); VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); VcsHelper.getInstance().updateLegacyMode(); + DesignerFrameFileDealerPane.getInstance().refreshDockingView(); } else { initFailedPane(detail); VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED);