diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index a2a8e9e004..e89a04e083 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -106,3 +106,6 @@ MediaViewVideoPanel.pauseButton.text=\u25ba MediaViewVideoPanel.progressLabel.text=00:00 DataContentViewerMedia.AccessibleContext.accessibleDescription= MediaViewVideoPanel.infoLabel.text=info +GeneralPanel.jLabel2.text=When displaying times: +GeneralPanel.useLocalTimeRB.text=Use local timezone +GeneralPanel.useGMTTimeRB.text=Use GMT diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java index 01929ba341..6835a1e435 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultPanel.java @@ -358,6 +358,7 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C this.rootNode = selectedNode; if (this.rootNode != null) { + dummyNodeListener.reset(); this.rootNode.addNodeListener(dummyNodeListener); } @@ -612,15 +613,28 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C private class DummyNodeListener implements NodeListener { private static final String DUMMY_NODE_DISPLAY_NAME = "Please Wait..."; + private volatile boolean load = true; + + public void reset() { + load = true; + } @Override - 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; + public void childrenAdded(NodeMemberEvent nme) { + Node[] delta = nme.getDelta(); + if (load && containsReal(delta)) { + load = false; + setupTabs(nme.getNode()); } - setupTabs(nme.getNode()); + } + + private boolean containsReal(Node[] delta) { + for (Node n : delta) { + if (!n.getDisplayName().equals(DUMMY_NODE_DISPLAY_NAME)) { + return true; + } + } + return false; } @Override diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java index 6c42c9f7bf..ab8d52fed8 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataResultViewerTable.java @@ -243,8 +243,7 @@ public class DataResultViewerTable extends AbstractDataResultViewer { this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { boolean hasChildren = false; - - + if (selectedNode != null) { hasChildren = selectedNode.getChildren().getNodesCount() > 0; } @@ -257,6 +256,7 @@ public class DataResultViewerTable extends AbstractDataResultViewer { // if there's no selection node, do nothing if (hasChildren) { Node root = selectedNode; + dummyNodeListener.reset(); root.addNodeListener(dummyNodeListener); setupTable(root); } else { @@ -478,21 +478,32 @@ public class DataResultViewerTable extends AbstractDataResultViewer { private class DummyNodeListener implements NodeListener { private static final String DUMMY_NODE_DISPLAY_NAME = "Please Wait..."; + private volatile boolean load = true; + + public void reset() { + load = true; + } @Override 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; + Node[] delta = nme.getDelta(); + if (load && containsReal(delta)) { + load = false; + setupTable(nme.getNode()); } - setupTable(added); + } + + private boolean containsReal(Node[] delta) { + for (Node n : delta) { + if (!n.getDisplayName().equals(DUMMY_NODE_DISPLAY_NAME)) { + return true; + } + } + return false; } @Override public void childrenRemoved(NodeMemberEvent nme) { - } @Override