19 package org.sleuthkit.autopsy.corecomponents;
21 import java.awt.Cursor;
22 import java.beans.PropertyChangeEvent;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.List;
26 import java.util.logging.Level;
27 import javax.swing.JTabbedPane;
28 import javax.swing.event.ChangeEvent;
29 import javax.swing.event.ChangeListener;
30 import org.openide.nodes.Node;
31 import org.openide.util.Lookup;
32 import org.openide.util.NbBundle;
46 private final List<UpdateWrapper>
viewers =
new ArrayList<>();
66 Collection<? extends DataContentViewer> dcvs = Lookup.getDefault().lookupAll(
DataContentViewer.class);
76 javax.swing.JScrollPane scrollTab =
new javax.swing.JScrollPane(dcv.
getComponent());
77 scrollTab.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_NEVER);
84 for (
int tab = 0; tab < numTabs; ++tab) {
108 @SuppressWarnings(
"unchecked")
114 setMinimumSize(
new java.awt.Dimension(5, 5));
116 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
117 this.setLayout(layout);
118 layout.setHorizontalGroup(
119 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
122 layout.setVerticalGroup(
123 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
134 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
139 if (selectedNode == null) {
140 setName(defaultName);
142 Content content = selectedNode.getLookup().lookup(Content.class);
143 if (content != null) {
145 String path = defaultName;
147 path = content.getUniquePath();
148 }
catch (TskCoreException ex) {
149 logger.log(Level.SEVERE,
"Exception while calling Content.getUniquePath() for {0}", content);
153 setName(defaultName);
157 currentNode = selectedNode;
161 this.setCursor(null);
174 if (listeningToTabbedPane ==
false) {
176 listeningToTabbedPane =
true;
181 int maxPreferred = 0;
182 int preferredViewerIndex = 0;
183 for (
int i = 0; i < totalTabs; ++i) {
185 dcv.resetComponent();
188 if ((selectedNode == null) || (dcv.isSupported(selectedNode) ==
false)) {
194 int currentPreferred = dcv.isPreferred(selectedNode);
195 if (currentPreferred > maxPreferred) {
196 preferredViewerIndex = i;
197 maxPreferred = currentPreferred;
208 dcv.resetComponent();
210 dcv.setNode(selectedNode);
224 JTabbedPane pane = (JTabbedPane) evt.getSource();
227 int currentTab = pane.getSelectedIndex();
228 if (currentTab != -1) {
230 if (dcv.isOutdated()) {
232 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
234 dcv.setNode(currentNode);
236 this.setCursor(null);
249 this.outdated =
true;
252 void setNode(Node selectedNode) {
253 this.wrapped.
setNode(selectedNode);
254 this.outdated =
false;
257 void resetComponent() {
259 this.outdated =
true;
262 boolean isOutdated() {
266 boolean isSupported(Node node) {
270 int isPreferred(Node node) {
final List< UpdateWrapper > viewers
boolean listeningToTabbedPane
boolean isSupported(Node node)
void setNode(Node selectedNode)
void setupTabs(Node selectedNode)
void setNode(Node selectedNode)
void stateChanged(ChangeEvent evt)
javax.swing.JTabbedPane jTabbedPane1
static boolean keepPreferredContentViewer()
JTabbedPane getTabPanels()
static DataContentPanel createInstance()
void propertyChange(PropertyChangeEvent evt)
synchronized static Logger getLogger(String name)
int isPreferred(Node node)
DataContentViewer wrapped
DataContentViewer createInstance()