Added fix to ensure DataResultPanel sets up activated tabs on the EDT. Cleaned up NodeListener logic.

This commit is contained in:
Jeff Wallace 2013-09-20 15:08:36 -04:00
parent 4b6d257760
commit 81b5761684
2 changed files with 51 additions and 40 deletions

View File

@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.JTabbedPane; import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import org.openide.explorer.ExplorerManager; import org.openide.explorer.ExplorerManager;
@ -379,40 +380,46 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
} }
} }
private void setupTabs(Node selectedNode) { private void setupTabs(final Node selectedNode) {
//update/disable tabs based on if supported for this node SwingUtilities.invokeLater(new Runnable() {
int drvC = 0; @Override
for (UpdateWrapper drv : viewers) { public void run() {
//update/disable tabs based on if supported for this node
int drvC = 0;
for (UpdateWrapper drv : viewers) {
if (drv.isSupported(selectedNode)) { if (drv.isSupported(selectedNode)) {
dataResultTabbedPanel.setEnabledAt(drvC, true); dataResultTabbedPanel.setEnabledAt(drvC, true);
} else { } else {
dataResultTabbedPanel.setEnabledAt(drvC, false); dataResultTabbedPanel.setEnabledAt(drvC, false);
} }
++drvC; ++drvC;
} }
// if the current tab is no longer enabled, then find one that is // if the current tab is no longer enabled, then find one that is
boolean hasViewerEnabled = true; boolean hasViewerEnabled = true;
int currentActiveTab = this.dataResultTabbedPanel.getSelectedIndex(); int currentActiveTab = dataResultTabbedPanel.getSelectedIndex();
if ((currentActiveTab == -1) || (dataResultTabbedPanel.isEnabledAt(currentActiveTab) == false)) { if ((currentActiveTab == -1) || (dataResultTabbedPanel.isEnabledAt(currentActiveTab) == false)) {
hasViewerEnabled = false; hasViewerEnabled = false;
for (int i = 0; i < dataResultTabbedPanel.getTabCount(); i++) { for (int i = 0; i < dataResultTabbedPanel.getTabCount(); i++) {
if (dataResultTabbedPanel.isEnabledAt(i)) { if (dataResultTabbedPanel.isEnabledAt(i)) {
currentActiveTab = i; currentActiveTab = i;
hasViewerEnabled = true; hasViewerEnabled = true;
break; break;
}
}
if (hasViewerEnabled) {
dataResultTabbedPanel.setSelectedIndex(currentActiveTab);
}
}
if (hasViewerEnabled) {
viewers.get(currentActiveTab).setNode(selectedNode);
} }
} }
});
if (hasViewerEnabled) {
dataResultTabbedPanel.setSelectedIndex(currentActiveTab);
}
}
if (hasViewerEnabled) {
viewers.get(currentActiveTab).setNode(selectedNode);
}
} }
@Override @Override
@ -604,9 +611,15 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
} }
private class DummyNodeListener implements NodeListener { private class DummyNodeListener implements NodeListener {
private static final String DUMMY_NODE_DISPLAY_NAME = "Please Wait...";
@Override @Override
public void childrenAdded(NodeMemberEvent nme) { public void childrenAdded(final NodeMemberEvent nme) {
Node added = nme.getNode();
if (added.getDisplayName().equals(DUMMY_NODE_DISPLAY_NAME)) {
// don't set up tabs if the new node is a waiting node
return;
}
setupTabs(nme.getNode()); setupTabs(nme.getNode());
} }

View File

@ -481,20 +481,18 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
@Override @Override
public void childrenAdded(NodeMemberEvent nme) { public void childrenAdded(NodeMemberEvent nme) {
Node added = nme.getNode();
if (added.getDisplayName().equals(DUMMY_NODE_DISPLAY_NAME)) {
// If it's the dummy waiting node, we don't want
// to reload the table headers
return;
}
setupTable(added);
} }
@Override @Override
public void childrenRemoved(NodeMemberEvent nme) { public void childrenRemoved(NodeMemberEvent nme) {
Node removed = nme.getDelta()[0];
if (! removed.getDisplayName().equals(DUMMY_NODE_DISPLAY_NAME)) {
// If it's not the dummy waiting node, we don't want
// to reload the table headers
return;
}
// dummy node removed. Reset the table headers.
Node node = nme.getNode();
setupTable(node);
} }
@Override @Override