From 5855c0ea7fa415e45c11c13d7d665796a65babdf Mon Sep 17 00:00:00 2001 From: Radek Davidek Date: Tue, 10 Feb 2026 18:36:03 +0100 Subject: [PATCH] max lines --- .../java/cz/kamma/kfmanager/config/AppConfig.java | 8 ++++++++ .../kamma/kfmanager/ui/FileComparisonDialog.java | 3 ++- .../java/cz/kamma/kfmanager/ui/SettingsDialog.java | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/cz/kamma/kfmanager/config/AppConfig.java b/src/main/java/cz/kamma/kfmanager/config/AppConfig.java index 768c84f..e410fab 100644 --- a/src/main/java/cz/kamma/kfmanager/config/AppConfig.java +++ b/src/main/java/cz/kamma/kfmanager/config/AppConfig.java @@ -1010,4 +1010,12 @@ public class AppConfig { public void setDividerPosition(double position) { properties.setProperty("mainPanel.dividerPosition", String.valueOf(position)); } + + public int getMaxCompareLines() { + return Integer.parseInt(properties.getProperty("compare.maxLines", "10000")); + } + + public void setMaxCompareLines(int lines) { + properties.setProperty("compare.maxLines", String.valueOf(lines)); + } } diff --git a/src/main/java/cz/kamma/kfmanager/ui/FileComparisonDialog.java b/src/main/java/cz/kamma/kfmanager/ui/FileComparisonDialog.java index 14b88e2..9506868 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/FileComparisonDialog.java +++ b/src/main/java/cz/kamma/kfmanager/ui/FileComparisonDialog.java @@ -305,7 +305,8 @@ public class FileComparisonDialog extends JFrame { if (lines1.isEmpty() || lines2.isEmpty()) return; // Skip alignment for very large files to avoid O(N^2) memory/time issues - if (lines1.size() > 2000 || lines2.size() > 2000) return; + int maxLines = config.getMaxCompareLines(); + if (lines1.size() > maxLines || lines2.size() > maxLines) return; int n = lines1.size(); int m = lines2.size(); diff --git a/src/main/java/cz/kamma/kfmanager/ui/SettingsDialog.java b/src/main/java/cz/kamma/kfmanager/ui/SettingsDialog.java index 1e85d71..993e6f4 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/SettingsDialog.java +++ b/src/main/java/cz/kamma/kfmanager/ui/SettingsDialog.java @@ -76,6 +76,7 @@ public class SettingsDialog extends JDialog { private final String originalExternalEditorPath; private final int originalToolbarButtonSize; private final int originalToolbarIconSize; + private final int originalMaxCompareLines; private final java.util.List originalOpenWithEntries; // Appearance controls @@ -110,6 +111,7 @@ public class SettingsDialog extends JDialog { this.originalExternalEditorPath = config.getExternalEditorPath(); this.originalToolbarButtonSize = config.getToolbarButtonSize(); this.originalToolbarIconSize = config.getToolbarIconSize(); + this.originalMaxCompareLines = config.getMaxCompareLines(); this.originalOpenWithEntries = new java.util.ArrayList<>(config.getOpenWithEntries()); setDefaultCloseOperation(DISPOSE_ON_CLOSE); @@ -264,6 +266,8 @@ public class SettingsDialog extends JDialog { try { JSpinner ari = (JSpinner) behaviorHolder.getClientProperty("autoRefreshInterval"); if (ari != null) config.setAutoRefreshInterval((Integer) ari.getValue()); + JSpinner mcl = (JSpinner) behaviorHolder.getClientProperty("maxCompareLines"); + if (mcl != null) config.setMaxCompareLines((Integer) mcl.getValue()); } catch (Exception ignore) {} } @@ -288,6 +292,7 @@ public class SettingsDialog extends JDialog { config.setExternalEditorPath(originalExternalEditorPath); config.setToolbarButtonSize(originalToolbarButtonSize); config.setToolbarIconSize(originalToolbarIconSize); + config.setMaxCompareLines(originalMaxCompareLines); config.setOpenWithEntries(originalOpenWithEntries); // Notify UI to revert changes @@ -624,8 +629,17 @@ public class SettingsDialog extends JDialog { gbc.gridx = 1; gbc.gridy = row++; gbc.weightx = 1.0; grid.add(refreshInt, gbc); + // Max lines for file comparison + gbc.gridx = 0; gbc.gridy = row; gbc.weightx = 0.0; + grid.add(new JLabel("Max lines for smart comparison:"), gbc); + + JSpinner maxLines = new JSpinner(new SpinnerNumberModel(config.getMaxCompareLines(), 100, 100000, 100)); + gbc.gridx = 1; gbc.gridy = row++; gbc.weightx = 1.0; + grid.add(maxLines, gbc); + p.add(grid, BorderLayout.NORTH); p.putClientProperty("autoRefreshInterval", refreshInt); + p.putClientProperty("maxCompareLines", maxLines); panels.put("Behavior", p); return p; }