max lines

This commit is contained in:
Radek Davidek 2026-02-10 18:36:03 +01:00
parent f4cb0c4b1f
commit 5855c0ea7f
3 changed files with 24 additions and 1 deletions

View File

@ -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));
}
}

View File

@ -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();

View File

@ -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<cz.kamma.kfmanager.config.AppConfig.OpenWithEntry> 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;
}