Merge pull request #2382 from SiboVG/issue-2381

[#2381] Use proper view index in table selection
This commit is contained in:
Joe Pfeiffer 2023-10-23 12:18:32 -06:00 committed by GitHub
commit be68b8391e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 17 deletions

View File

@ -303,14 +303,21 @@ public class RocketComponentConfig extends JPanel {
}
// Yes/No dialog: Are you sure you want to discard your changes?
JPanel msg = createCancelOperationContent();
int resultYesNo = JOptionPane.showConfirmDialog(RocketComponentConfig.this, msg,
trans.get("RocketCompCfg.CancelOperation.title"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (resultYesNo == JOptionPane.YES_OPTION) {
ComponentConfigDialog.clearConfigListeners = false; // Undo action => config listeners of new component will be cleared
disposeDialog();
document.undo();
}
SwingUtilities.invokeLater(() -> {
JPanel msg = createCancelOperationContent();
int resultYesNo = JOptionPane.showConfirmDialog(RocketComponentConfig.this, msg,
trans.get("RocketCompCfg.CancelOperation.title"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (resultYesNo == JOptionPane.YES_OPTION) {
ComponentConfigDialog.clearConfigListeners = false;
// Need to execute after delay, otherwise the dialog will not be disposed
GUIUtil.executeAfterDelay(100, () -> {
disposeDialog();
document.undo();
});
}
});
}
});
buttonPanel.add(cancelButton, "split 2, right, gapleft 30lp");

View File

@ -365,15 +365,10 @@ public class GeneralPreferencesPanel extends PreferencesPanel {
trans.get("generalprefs.ImportWarning.title"),
JOptionPane.WARNING_MESSAGE);
// Introduce a small delay before showing the PreferencesDialog
Timer timer = new Timer(100, new ActionListener() { // 100ms delay
@Override
public void actionPerformed(ActionEvent arg0) {
PreferencesDialog.showPreferences(parent.getParentFrame()); // Refresh the preferences dialog
}
// Need to execute after delay, otherwise the dialog will not be disposed
GUIUtil.executeAfterDelay(100, () -> {
PreferencesDialog.showPreferences(parent.getParentFrame()); // Refresh the preferences dialog
});
timer.setRepeats(false); // Only execute once
timer.start(); // Start the timer
}
});
}

View File

@ -86,7 +86,10 @@ public class ComponentPresetTable extends JTable {
ComponentPreset preset = ComponentPresetTable.this.presets.get(rowIndex);
Application.getComponentPresetDao().setFavorite(preset, presetType, (Boolean) aValue);
ComponentPresetTable.this.updateFavorites();
ComponentPresetTable.this.setRowSelectionInterval(rowIndex, rowIndex);
int viewIndex = ComponentPresetTable.this.convertRowIndexToView(rowIndex);
if (viewIndex != -1) {
ComponentPresetTable.this.setRowSelectionInterval(viewIndex, viewIndex);
}
}
@Override

View File

@ -51,6 +51,7 @@ import javax.swing.RootPaneContainer;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeListener;
@ -761,5 +762,22 @@ public class GUIUtil {
}
}
/**
* Executes the given code after a specified delay.
*
* @param delayMillis the delay in milliseconds.
* @param runnable the code to be executed after the delay.
*/
public static void executeAfterDelay(int delayMillis, Runnable runnable) {
Timer timer = new Timer(delayMillis, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
runnable.run();
}
});
timer.setRepeats(false);
timer.start();
}
}