From 2402a6c74fd71e3726ffe666abb95cae0874e342 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 1 Feb 2010 12:13:43 +0300 Subject: [PATCH] usability: auto-adjust array end index if max elements value was changed (IDEA-29038) --- .../settings/ArrayRendererConfigurable.java | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/ArrayRendererConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/ArrayRendererConfigurable.java index bd872b0879b5..a1a65b846022 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/ArrayRendererConfigurable.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/ArrayRendererConfigurable.java @@ -31,7 +31,9 @@ public class ArrayRendererConfigurable implements UnnamedConfigurable{ private JTextField myEntriesLimit; private JTextField myStartIndex; private JTextField myEndIndex; - + private boolean myEntriesLimitUpdateEnabled = true; + private boolean myIndexUpdateEnabled = true; + private final ArrayRenderer myRenderer; private JComponent myPanel; @@ -121,7 +123,16 @@ public class ArrayRendererConfigurable implements UnnamedConfigurable{ final DocumentListener listener = new DocumentListener() { private void updateEntriesLimit() { - myEntriesLimit.setText(String.valueOf(getInt(myEndIndex) - getInt(myStartIndex) + 1)); + final boolean state = myIndexUpdateEnabled; + myIndexUpdateEnabled = false; + try { + if (myEntriesLimitUpdateEnabled) { + myEntriesLimit.setText(String.valueOf(getInt(myEndIndex) - getInt(myStartIndex) + 1)); + } + } + finally { + myIndexUpdateEnabled = state; + } } public void changedUpdate(DocumentEvent e) { updateEntriesLimit(); @@ -135,6 +146,31 @@ public class ArrayRendererConfigurable implements UnnamedConfigurable{ }; myStartIndex.getDocument().addDocumentListener(listener); myEndIndex.getDocument().addDocumentListener(listener); + myEntriesLimit.getDocument().addDocumentListener(new DocumentListener() { + private void updateEndIndex() { + final boolean state = myEntriesLimitUpdateEnabled; + myEntriesLimitUpdateEnabled = false; + try { + if (myIndexUpdateEnabled) { + myEndIndex.setText(String.valueOf(getInt(myEntriesLimit) + getInt(myStartIndex) - 1)); + } + } + finally { + myEntriesLimitUpdateEnabled = state; + } + } + public void insertUpdate(DocumentEvent e) { + updateEndIndex(); + } + + public void removeUpdate(DocumentEvent e) { + updateEndIndex(); + } + + public void changedUpdate(DocumentEvent e) { + updateEndIndex(); + } + }); return myPanel; }