improve fitGraph and other small tweaks

This commit is contained in:
millmanorama 2018-02-09 17:51:32 +01:00
parent 9225730f02
commit cce4e918cd
4 changed files with 137 additions and 111 deletions

View File

@ -24,7 +24,7 @@ VisualizationPanel.jButton6.text=Hierarchy
VisualizationPanel.jButton7.text=Circle VisualizationPanel.jButton7.text=Circle
VisualizationPanel.jButton8.text=Organic VisualizationPanel.jButton8.text=Organic
VisualizationPanel.fitGraphButton.text= VisualizationPanel.fitGraphButton.text=
VisualizationPanel.statusLabel.text= VisualizationPanel.statusLabel.text=\
VisualizationPanel.jTextArea1.text=Right-click an account in the Browse Accounts table, and select 'Visualize' to begin. VisualizationPanel.jTextArea1.text=Right-click an account in the Browse Accounts table, and select 'Visualize' to begin.
VisualizationPanel.jLabel1.text=Layouts: VisualizationPanel.jLabel1.text=Layouts:
VisualizationPanel.fitZoomButton.text= VisualizationPanel.fitZoomButton.text=
@ -32,8 +32,12 @@ VisualizationPanel.zoomActualButton.text=
VisualizationPanel.zoomInButton.text= VisualizationPanel.zoomInButton.text=
VisualizationPanel.zoomOutButton.text= VisualizationPanel.zoomOutButton.text=
VisualizationPanel.circleLayoutButton.text=Circle VisualizationPanel.circleLayoutButton.text=Circle
VisualizationPanel.OrganicLayoutButton.text=Organic
VisualizationPanel.fastOrganicLayoutButton.text=Fast Organic VisualizationPanel.fastOrganicLayoutButton.text=Fast Organic
VisualizationPanel.hierarchyLayoutButton.text=Hierarchy VisualizationPanel.hierarchyLayoutButton.text=Hierarchy
VisualizationPanel.jLabel2.text=Zoom: VisualizationPanel.jLabel2.text=Zoom:
VisualizationPanel.zoomLabel.text=100% VisualizationPanel.zoomLabel.text=100%
VisualizationPanel.zoomOutButton.toolTipText=Zoom out
VisualizationPanel.zoomInButton.toolTipText=Zoom in
VisualizationPanel.zoomActualButton.toolTipText=reset zoom
VisualizationPanel.fitZoomButton.toolTipText=fit visualization
VisualizationPanel.organicLayoutButton.text=Organic

View File

@ -97,7 +97,7 @@
</Container> </Container>
</SubComponents> </SubComponents>
</Container> </Container>
<Container class="javax.swing.JPanel" name="jPanel1"> <Container class="javax.swing.JPanel" name="placeHolderPanel">
<Constraints> <Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/> <BorderConstraints direction="Center"/>
@ -140,7 +140,7 @@
</Component> </Component>
</SubComponents> </SubComponents>
</Container> </Container>
<Container class="javax.swing.JPanel" name="jPanel2"> <Container class="javax.swing.JPanel" name="toolbar">
<Constraints> <Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="First"/> <BorderConstraints direction="First"/>
@ -156,7 +156,7 @@
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="fastOrganicLayoutButton" min="-2" max="-2" attributes="0"/> <Component id="fastOrganicLayoutButton" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="OrganicLayoutButton" min="-2" max="-2" attributes="0"/> <Component id="organicLayoutButton" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="hierarchyLayoutButton" min="-2" max="-2" attributes="0"/> <Component id="hierarchyLayoutButton" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
@ -171,7 +171,7 @@
<Component id="zoomActualButton" min="-2" pref="33" max="-2" attributes="0"/> <Component id="zoomActualButton" min="-2" pref="33" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="fitZoomButton" min="-2" pref="32" max="-2" attributes="0"/> <Component id="fitZoomButton" min="-2" pref="32" max="-2" attributes="0"/>
<EmptySpace pref="110" max="32767" attributes="0"/> <EmptySpace max="32767" attributes="0"/>
<Component id="jLabel2" min="-2" max="-2" attributes="0"/> <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="zoomLabel" min="-2" max="-2" attributes="0"/> <Component id="zoomLabel" min="-2" max="-2" attributes="0"/>
@ -187,7 +187,7 @@
<Component id="jLabel1" alignment="2" min="-2" pref="25" max="-2" attributes="0"/> <Component id="jLabel1" alignment="2" min="-2" pref="25" max="-2" attributes="0"/>
<Component id="hierarchyLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/> <Component id="hierarchyLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="fastOrganicLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/> <Component id="fastOrganicLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="OrganicLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/> <Component id="organicLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="circleLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/> <Component id="circleLayoutButton" alignment="2" min="-2" max="-2" attributes="0"/>
<Component id="jSeparator1" alignment="2" max="32767" attributes="0"/> <Component id="jSeparator1" alignment="2" max="32767" attributes="0"/>
<Component id="zoomOutButton" alignment="2" min="-2" max="-2" attributes="0"/> <Component id="zoomOutButton" alignment="2" min="-2" max="-2" attributes="0"/>
@ -236,17 +236,17 @@
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fastOrganicLayoutButtonActionPerformed"/> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="fastOrganicLayoutButtonActionPerformed"/>
</Events> </Events>
</Component> </Component>
<Component class="javax.swing.JButton" name="OrganicLayoutButton"> <Component class="javax.swing.JButton" name="organicLayoutButton">
<Properties> <Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.OrganicLayoutButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/> <ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.organicLayoutButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property> </Property>
<Property name="focusable" type="boolean" value="false"/> <Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/> <Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="verticalTextPosition" type="int" value="3"/> <Property name="verticalTextPosition" type="int" value="3"/>
</Properties> </Properties>
<Events> <Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="OrganicLayoutButtonActionPerformed"/> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="organicLayoutButtonActionPerformed"/>
</Events> </Events>
</Component> </Component>
<Component class="javax.swing.JButton" name="circleLayoutButton"> <Component class="javax.swing.JButton" name="circleLayoutButton">
@ -272,6 +272,9 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomOutButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/> <ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomOutButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property> </Property>
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomOutButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="focusable" type="boolean" value="false"/> <Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/> <Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="verticalTextPosition" type="int" value="3"/> <Property name="verticalTextPosition" type="int" value="3"/>
@ -288,6 +291,9 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomInButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/> <ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomInButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property> </Property>
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomInButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="focusable" type="boolean" value="false"/> <Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/> <Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="verticalTextPosition" type="int" value="3"/> <Property name="verticalTextPosition" type="int" value="3"/>
@ -304,6 +310,9 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomActualButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/> <ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomActualButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property> </Property>
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.zoomActualButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="focusable" type="boolean" value="false"/> <Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/> <Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="verticalTextPosition" type="int" value="3"/> <Property name="verticalTextPosition" type="int" value="3"/>
@ -320,6 +329,9 @@
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.fitZoomButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/> <ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.fitZoomButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property> </Property>
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="VisualizationPanel.fitZoomButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="focusable" type="boolean" value="false"/> <Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/> <Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="verticalTextPosition" type="int" value="3"/> <Property name="verticalTextPosition" type="int" value="3"/>

View File

@ -43,6 +43,8 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException; import java.beans.PropertyVetoException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.Arrays; import java.util.Arrays;
@ -120,19 +122,20 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
private CommunicationsManager commsManager; private CommunicationsManager commsManager;
private CommunicationsFilter currentFilter; private CommunicationsFilter currentFilter;
private final mxRubberband rubberband; private final mxRubberband rubberband;
private mxFastOrganicLayout mxFastOrganicLayout; private final mxFastOrganicLayout fastOrganicLayout;
private mxCircleLayout mxCircleLayout; private final mxCircleLayout circleLayout;
private final mxOrganicLayout mxOrganicLayout; private final mxOrganicLayout organicLayout;
private mxHierarchicalLayout mxHierarchicalLayout; private final mxHierarchicalLayout hierarchicalLayout;
private SwingWorker<?, ?> worker;
public VisualizationPanel() { public VisualizationPanel() {
initComponents(); initComponents();
graph = new mxGraphImpl(); graph = new mxGraphImpl();
mxFastOrganicLayout = new mxFastOrganicLayoutImpl(graph); fastOrganicLayout = new mxFastOrganicLayoutImpl(graph);
mxCircleLayout = new mxCircleLayoutImpl(graph); circleLayout = new mxCircleLayoutImpl(graph);
mxOrganicLayout = new mxOrganicLayoutImpl(graph); organicLayout = new mxOrganicLayoutImpl(graph);
mxHierarchicalLayout = new mxHierarchicalLayoutImpl(graph); hierarchicalLayout = new mxHierarchicalLayoutImpl(graph);
graphComponent = new mxGraphComponent(graph); graphComponent = new mxGraphComponent(graph);
graphComponent.setAutoExtend(true); graphComponent.setAutoExtend(true);
@ -249,7 +252,6 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
graph.getModel().endUpdate(); graph.getModel().endUpdate();
} }
applyOrganicLayout(10);
} }
@Subscribe @Subscribe
@ -269,7 +271,6 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
graph.getModel().endUpdate(); graph.getModel().endUpdate();
} }
applyOrganicLayout(10);
} }
@Subscribe @Subscribe
@ -287,18 +288,30 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
graph.getModel().endUpdate(); graph.getModel().endUpdate();
} }
applyOrganicLayout(10);
} }
private void rebuildGraph() throws TskCoreException { private void rebuildGraph() throws TskCoreException {
if (graph.hasPinnedAccounts()) { if (graph.hasPinnedAccounts()) {
borderLayoutPanel.remove(jPanel1); borderLayoutPanel.remove(placeHolderPanel);
borderLayoutPanel.add(graphComponent, BorderLayout.CENTER); borderLayoutPanel.add(graphComponent, BorderLayout.CENTER);
SwingWorker<?, ?> rebuild = graph.rebuild(new ProgressIndicatorImpl(), commsManager, currentFilter); if (worker != null) {
rebuild.execute(); worker.cancel(true);
}
worker = graph.rebuild(new ProgressIndicatorImpl(), commsManager, currentFilter);
worker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (worker.isDone()) {
applyOrganicLayout(10);
}
}
});
worker.execute();
} else { } else {
borderLayoutPanel.remove(graphComponent); borderLayoutPanel.remove(graphComponent);
borderLayoutPanel.add(jPanel1, BorderLayout.CENTER); borderLayoutPanel.add(placeHolderPanel, BorderLayout.CENTER);
} }
} }
@ -358,13 +371,13 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
statusLabel = new JLabel(); statusLabel = new JLabel();
progresPanel = new JPanel(); progresPanel = new JPanel();
progressBar = new JProgressBar(); progressBar = new JProgressBar();
jPanel1 = new JPanel(); placeHolderPanel = new JPanel();
jTextArea1 = new JTextArea(); jTextArea1 = new JTextArea();
jPanel2 = new JPanel(); toolbar = new JPanel();
jLabel1 = new JLabel(); jLabel1 = new JLabel();
hierarchyLayoutButton = new JButton(); hierarchyLayoutButton = new JButton();
fastOrganicLayoutButton = new JButton(); fastOrganicLayoutButton = new JButton();
OrganicLayoutButton = new JButton(); organicLayoutButton = new JButton();
circleLayoutButton = new JButton(); circleLayoutButton = new JButton();
jSeparator1 = new JToolBar.Separator(); jSeparator1 = new JToolBar.Separator();
zoomOutButton = new JButton(); zoomOutButton = new JButton();
@ -416,22 +429,22 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
jTextArea1.setRows(5); jTextArea1.setRows(5);
jTextArea1.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.jTextArea1.text")); // NOI18N jTextArea1.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.jTextArea1.text")); // NOI18N
GroupLayout jPanel1Layout = new GroupLayout(jPanel1); GroupLayout placeHolderPanelLayout = new GroupLayout(placeHolderPanel);
jPanel1.setLayout(jPanel1Layout); placeHolderPanel.setLayout(placeHolderPanelLayout);
jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(GroupLayout.LEADING) placeHolderPanelLayout.setHorizontalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(GroupLayout.TRAILING, jPanel1Layout.createSequentialGroup() .add(GroupLayout.TRAILING, placeHolderPanelLayout.createSequentialGroup()
.addContainerGap(213, Short.MAX_VALUE) .addContainerGap(213, Short.MAX_VALUE)
.add(jTextArea1, GroupLayout.PREFERRED_SIZE, 372, GroupLayout.PREFERRED_SIZE) .add(jTextArea1, GroupLayout.PREFERRED_SIZE, 372, GroupLayout.PREFERRED_SIZE)
.addContainerGap(214, Short.MAX_VALUE)) .addContainerGap(214, Short.MAX_VALUE))
); );
jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(GroupLayout.LEADING) placeHolderPanelLayout.setVerticalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(GroupLayout.TRAILING, jPanel1Layout.createSequentialGroup() .add(GroupLayout.TRAILING, placeHolderPanelLayout.createSequentialGroup()
.addContainerGap(200, Short.MAX_VALUE) .addContainerGap(200, Short.MAX_VALUE)
.add(jTextArea1, GroupLayout.PREFERRED_SIZE, 43, GroupLayout.PREFERRED_SIZE) .add(jTextArea1, GroupLayout.PREFERRED_SIZE, 43, GroupLayout.PREFERRED_SIZE)
.addContainerGap(200, Short.MAX_VALUE)) .addContainerGap(200, Short.MAX_VALUE))
); );
borderLayoutPanel.add(jPanel1, BorderLayout.CENTER); borderLayoutPanel.add(placeHolderPanel, BorderLayout.CENTER);
jLabel1.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.jLabel1.text")); // NOI18N jLabel1.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.jLabel1.text")); // NOI18N
@ -455,13 +468,13 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
}); });
OrganicLayoutButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.OrganicLayoutButton.text")); // NOI18N organicLayoutButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.organicLayoutButton.text")); // NOI18N
OrganicLayoutButton.setFocusable(false); organicLayoutButton.setFocusable(false);
OrganicLayoutButton.setHorizontalTextPosition(SwingConstants.CENTER); organicLayoutButton.setHorizontalTextPosition(SwingConstants.CENTER);
OrganicLayoutButton.setVerticalTextPosition(SwingConstants.BOTTOM); organicLayoutButton.setVerticalTextPosition(SwingConstants.BOTTOM);
OrganicLayoutButton.addActionListener(new ActionListener() { organicLayoutButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) { public void actionPerformed(ActionEvent evt) {
OrganicLayoutButtonActionPerformed(evt); organicLayoutButtonActionPerformed(evt);
} }
}); });
@ -477,6 +490,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
zoomOutButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-out-red.png"))); // NOI18N zoomOutButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-out-red.png"))); // NOI18N
zoomOutButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomOutButton.text")); // NOI18N zoomOutButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomOutButton.text")); // NOI18N
zoomOutButton.setToolTipText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomOutButton.toolTipText")); // NOI18N
zoomOutButton.setFocusable(false); zoomOutButton.setFocusable(false);
zoomOutButton.setHorizontalTextPosition(SwingConstants.CENTER); zoomOutButton.setHorizontalTextPosition(SwingConstants.CENTER);
zoomOutButton.setVerticalTextPosition(SwingConstants.BOTTOM); zoomOutButton.setVerticalTextPosition(SwingConstants.BOTTOM);
@ -488,6 +502,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
zoomInButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-in-green.png"))); // NOI18N zoomInButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-in-green.png"))); // NOI18N
zoomInButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomInButton.text")); // NOI18N zoomInButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomInButton.text")); // NOI18N
zoomInButton.setToolTipText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomInButton.toolTipText")); // NOI18N
zoomInButton.setFocusable(false); zoomInButton.setFocusable(false);
zoomInButton.setHorizontalTextPosition(SwingConstants.CENTER); zoomInButton.setHorizontalTextPosition(SwingConstants.CENTER);
zoomInButton.setVerticalTextPosition(SwingConstants.BOTTOM); zoomInButton.setVerticalTextPosition(SwingConstants.BOTTOM);
@ -499,6 +514,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
zoomActualButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-actual.png"))); // NOI18N zoomActualButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-actual.png"))); // NOI18N
zoomActualButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomActualButton.text")); // NOI18N zoomActualButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomActualButton.text")); // NOI18N
zoomActualButton.setToolTipText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomActualButton.toolTipText")); // NOI18N
zoomActualButton.setFocusable(false); zoomActualButton.setFocusable(false);
zoomActualButton.setHorizontalTextPosition(SwingConstants.CENTER); zoomActualButton.setHorizontalTextPosition(SwingConstants.CENTER);
zoomActualButton.setVerticalTextPosition(SwingConstants.BOTTOM); zoomActualButton.setVerticalTextPosition(SwingConstants.BOTTOM);
@ -510,6 +526,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
fitZoomButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-fit.png"))); // NOI18N fitZoomButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/magnifier-zoom-fit.png"))); // NOI18N
fitZoomButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.fitZoomButton.text")); // NOI18N fitZoomButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.fitZoomButton.text")); // NOI18N
fitZoomButton.setToolTipText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.fitZoomButton.toolTipText")); // NOI18N
fitZoomButton.setFocusable(false); fitZoomButton.setFocusable(false);
fitZoomButton.setHorizontalTextPosition(SwingConstants.CENTER); fitZoomButton.setHorizontalTextPosition(SwingConstants.CENTER);
fitZoomButton.setVerticalTextPosition(SwingConstants.BOTTOM); fitZoomButton.setVerticalTextPosition(SwingConstants.BOTTOM);
@ -523,16 +540,16 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
zoomLabel.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomLabel.text")); // NOI18N zoomLabel.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.zoomLabel.text")); // NOI18N
GroupLayout jPanel2Layout = new GroupLayout(jPanel2); GroupLayout toolbarLayout = new GroupLayout(toolbar);
jPanel2.setLayout(jPanel2Layout); toolbar.setLayout(toolbarLayout);
jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(GroupLayout.LEADING) toolbarLayout.setHorizontalGroup(toolbarLayout.createParallelGroup(GroupLayout.LEADING)
.add(jPanel2Layout.createSequentialGroup() .add(toolbarLayout.createSequentialGroup()
.add(3, 3, 3) .add(3, 3, 3)
.add(jLabel1) .add(jLabel1)
.addPreferredGap(LayoutStyle.RELATED) .addPreferredGap(LayoutStyle.RELATED)
.add(fastOrganicLayoutButton) .add(fastOrganicLayoutButton)
.addPreferredGap(LayoutStyle.RELATED) .addPreferredGap(LayoutStyle.RELATED)
.add(OrganicLayoutButton) .add(organicLayoutButton)
.addPreferredGap(LayoutStyle.RELATED) .addPreferredGap(LayoutStyle.RELATED)
.add(hierarchyLayoutButton) .add(hierarchyLayoutButton)
.addPreferredGap(LayoutStyle.RELATED) .addPreferredGap(LayoutStyle.RELATED)
@ -547,20 +564,20 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
.add(zoomActualButton, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE) .add(zoomActualButton, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.RELATED) .addPreferredGap(LayoutStyle.RELATED)
.add(fitZoomButton, GroupLayout.PREFERRED_SIZE, 32, GroupLayout.PREFERRED_SIZE) .add(fitZoomButton, GroupLayout.PREFERRED_SIZE, 32, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.RELATED, 110, Short.MAX_VALUE) .addPreferredGap(LayoutStyle.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jLabel2) .add(jLabel2)
.addPreferredGap(LayoutStyle.RELATED) .addPreferredGap(LayoutStyle.RELATED)
.add(zoomLabel) .add(zoomLabel)
.add(27, 27, 27)) .add(27, 27, 27))
); );
jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(GroupLayout.LEADING) toolbarLayout.setVerticalGroup(toolbarLayout.createParallelGroup(GroupLayout.LEADING)
.add(jPanel2Layout.createSequentialGroup() .add(toolbarLayout.createSequentialGroup()
.add(3, 3, 3) .add(3, 3, 3)
.add(jPanel2Layout.createParallelGroup(GroupLayout.CENTER) .add(toolbarLayout.createParallelGroup(GroupLayout.CENTER)
.add(jLabel1, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE) .add(jLabel1, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)
.add(hierarchyLayoutButton) .add(hierarchyLayoutButton)
.add(fastOrganicLayoutButton) .add(fastOrganicLayoutButton)
.add(OrganicLayoutButton) .add(organicLayoutButton)
.add(circleLayoutButton) .add(circleLayoutButton)
.add(jSeparator1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(jSeparator1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(zoomOutButton) .add(zoomOutButton)
@ -572,7 +589,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
.add(3, 3, 3)) .add(3, 3, 3))
); );
borderLayoutPanel.add(jPanel2, BorderLayout.PAGE_START); borderLayoutPanel.add(toolbar, BorderLayout.PAGE_START);
splitPane.setLeftComponent(borderLayoutPanel); splitPane.setLeftComponent(borderLayoutPanel);
@ -596,30 +613,29 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
}//GEN-LAST:event_zoomOutButtonActionPerformed }//GEN-LAST:event_zoomOutButtonActionPerformed
private void circleLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_circleLayoutButtonActionPerformed private void circleLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_circleLayoutButtonActionPerformed
morph(mxCircleLayout); morph(circleLayout);
}//GEN-LAST:event_circleLayoutButtonActionPerformed }//GEN-LAST:event_circleLayoutButtonActionPerformed
private void OrganicLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_OrganicLayoutButtonActionPerformed private void organicLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_organicLayoutButtonActionPerformed
applyOrganicLayout(10); applyOrganicLayout(10);
}//GEN-LAST:event_OrganicLayoutButtonActionPerformed }//GEN-LAST:event_organicLayoutButtonActionPerformed
private void fastOrganicLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_fastOrganicLayoutButtonActionPerformed private void fastOrganicLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_fastOrganicLayoutButtonActionPerformed
morph(fastOrganicLayout);
morph(mxFastOrganicLayout);
}//GEN-LAST:event_fastOrganicLayoutButtonActionPerformed }//GEN-LAST:event_fastOrganicLayoutButtonActionPerformed
private void hierarchyLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_hierarchyLayoutButtonActionPerformed private void hierarchyLayoutButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_hierarchyLayoutButtonActionPerformed
morph(hierarchicalLayout);
morph(mxHierarchicalLayout);
}//GEN-LAST:event_hierarchyLayoutButtonActionPerformed }//GEN-LAST:event_hierarchyLayoutButtonActionPerformed
private void applyOrganicLayout(int iterations) { private void applyOrganicLayout(int iterations) {
mxOrganicLayout.setMaxIterations(iterations); organicLayout.setMaxIterations(iterations);
morph(mxOrganicLayout); morph(organicLayout);
} }
private void fitGraph() { private void fitGraph() {
graphComponent.zoomTo(1, true);
mxPoint translate = graph.getView().getTranslate(); mxPoint translate = graph.getView().getTranslate();
if (translate == null || Double.isNaN(translate.getX()) || Double.isNaN(translate.getY())) { if (translate == null || Double.isNaN(translate.getX()) || Double.isNaN(translate.getY())) {
translate = new mxPoint(); translate = new mxPoint();
@ -629,7 +645,10 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
if (boundsForCells == null || Double.isNaN(boundsForCells.getWidth()) || Double.isNaN(boundsForCells.getHeight())) { if (boundsForCells == null || Double.isNaN(boundsForCells.getWidth()) || Double.isNaN(boundsForCells.getHeight())) {
boundsForCells = new mxRectangle(0, 0, 1, 1); boundsForCells = new mxRectangle(0, 0, 1, 1);
} }
graph.getView().setTranslate(new mxPoint(translate.getX() - boundsForCells.getX(), translate.getY() - boundsForCells.getY())); final mxPoint mxPoint = new mxPoint(translate.getX() - boundsForCells.getX(), translate.getY() - boundsForCells.getY());
// graph.getView().setTranslate(mxPoint);
graph.cellsMoved(graph.getChildCells(graph.getDefaultParent()), mxPoint.getX(), mxPoint.getY(), false, false);
boundsForCells = graph.getCellBounds(graph.getDefaultParent(), true, true, true); boundsForCells = graph.getCellBounds(graph.getDefaultParent(), true, true, true);
if (boundsForCells == null || Double.isNaN(boundsForCells.getWidth()) || Double.isNaN(boundsForCells.getHeight())) { if (boundsForCells == null || Double.isNaN(boundsForCells.getWidth()) || Double.isNaN(boundsForCells.getHeight())) {
@ -637,13 +656,10 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
Dimension size = graphComponent.getSize(); Dimension size = graphComponent.getSize();
double widthFactor = size.getWidth() / boundsForCells.getWidth(); double widthFactor = size.getWidth() / boundsForCells.getWidth();
// widthFactor = boundsForCells.getWidth() / size.getWidth();
graphComponent.zoom(widthFactor); graphComponent.zoom(widthFactor);//, true);
// bounds = graph.getGraphBounds();
} }
private void morph(mxIGraphLayout layout) { private void morph(mxIGraphLayout layout) {
@ -662,16 +678,12 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
progressBar.setVisible(false); progressBar.setVisible(false);
progressBar.setValue(0); progressBar.setValue(0);
}); });
morph.addListener(mxEvent.EXECUTE, (Object sender, mxEventObject event) -> {
// fitGraph();
});
morph.startAnimation(); morph.startAnimation();
} }
} }
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private JButton OrganicLayoutButton;
private JPanel borderLayoutPanel; private JPanel borderLayoutPanel;
private JButton circleLayoutButton; private JButton circleLayoutButton;
private JButton fastOrganicLayoutButton; private JButton fastOrganicLayoutButton;
@ -679,22 +691,23 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
private JButton hierarchyLayoutButton; private JButton hierarchyLayoutButton;
private JLabel jLabel1; private JLabel jLabel1;
private JLabel jLabel2; private JLabel jLabel2;
private JPanel jPanel1;
private JPanel jPanel2;
private JToolBar.Separator jSeparator1; private JToolBar.Separator jSeparator1;
private JTextArea jTextArea1; private JTextArea jTextArea1;
private JToolBar jToolBar2; private JToolBar jToolBar2;
private JButton organicLayoutButton;
private JPanel placeHolderPanel;
private JPanel progresPanel; private JPanel progresPanel;
private JProgressBar progressBar; private JProgressBar progressBar;
private JSplitPane splitPane; private JSplitPane splitPane;
private JLabel statusLabel; private JLabel statusLabel;
private JPanel toolbar;
private JButton zoomActualButton; private JButton zoomActualButton;
private JButton zoomInButton; private JButton zoomInButton;
private JLabel zoomLabel; private JLabel zoomLabel;
private JButton zoomOutButton; private JButton zoomOutButton;
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
private class SelectionListener implements mxEventSource.mxIEventListener { final private class SelectionListener implements mxEventSource.mxIEventListener {
@Override @Override
@ -726,7 +739,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
} }
private class ProgressIndicatorImpl implements ProgressIndicator { final private class ProgressIndicatorImpl implements ProgressIndicator {
@Override @Override
public void start(String message, int totalWorkUnits) { public void start(String message, int totalWorkUnits) {
@ -799,9 +812,9 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
} }
private class mxFastOrganicLayoutImpl extends mxFastOrganicLayout { final private class mxFastOrganicLayoutImpl extends mxFastOrganicLayout {
public mxFastOrganicLayoutImpl(mxGraph graph) { private mxFastOrganicLayoutImpl(mxGraph graph) {
super(graph); super(graph);
} }
@ -821,12 +834,10 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
} }
private class mxCircleLayoutImpl extends mxCircleLayout { final private class mxCircleLayoutImpl extends mxCircleLayout {
public mxCircleLayoutImpl(mxGraph graph) { private mxCircleLayoutImpl(mxGraph graph) {
super(graph); super(graph);
}
{
setResetEdges(true); setResetEdges(true);
} }
@ -846,12 +857,10 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
} }
private class mxOrganicLayoutImpl extends mxOrganicLayout { final private class mxOrganicLayoutImpl extends mxOrganicLayout {
public mxOrganicLayoutImpl(mxGraph graph) { private mxOrganicLayoutImpl(mxGraph graph) {
super(graph); super(graph);
}
{
setResetEdges(true); setResetEdges(true);
} }
@ -871,9 +880,9 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
} }
} }
private class mxHierarchicalLayoutImpl extends mxHierarchicalLayout { final private class mxHierarchicalLayoutImpl extends mxHierarchicalLayout {
public mxHierarchicalLayoutImpl(mxGraph graph) { private mxHierarchicalLayoutImpl(mxGraph graph) {
super(graph); super(graph);
} }

View File

@ -38,7 +38,6 @@ import java.util.Set;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.logging.Level; import java.util.logging.Level;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import org.openide.util.Exceptions;
import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.progress.ProgressIndicator; import org.sleuthkit.autopsy.progress.ProgressIndicator;
import org.sleuthkit.datamodel.AccountDeviceInstance; import org.sleuthkit.datamodel.AccountDeviceInstance;
@ -61,21 +60,19 @@ final class mxGraphImpl extends mxGraph {
private final Multimap<Content, mxCell> edgeMap = MultimapBuilder.hashKeys().hashSetValues().build(); private final Multimap<Content, mxCell> edgeMap = MultimapBuilder.hashKeys().hashSetValues().build();
static { static {
//initialize defaul cell (Vertex and/or Edge) properties //initialize defaul vertex properties
mxStylesheet.getDefaultVertexStyle().put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_ELLIPSE); mxStylesheet.getDefaultVertexStyle().put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_ELLIPSE);
mxStylesheet.getDefaultVertexStyle().put(mxConstants.STYLE_PERIMETER, mxConstants.PERIMETER_ELLIPSE); mxStylesheet.getDefaultVertexStyle().put(mxConstants.STYLE_PERIMETER, mxConstants.PERIMETER_ELLIPSE);
mxStylesheet.getDefaultVertexStyle().put(mxConstants.STYLE_FONTCOLOR, "000000"); mxStylesheet.getDefaultVertexStyle().put(mxConstants.STYLE_FONTCOLOR, "000000");
// mxStylesheet.getDefaultVertexStyle().put(mxConstants.STYLE_WHITE_SPACE, "wrap");
//initialize defaul edge properties
mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_NOLABEL, true); mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_NOLABEL, true);
// mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_OPACITY, 50 );
// mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_ROUNDED, true);
mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_PERIMETER_SPACING, 0); mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_PERIMETER_SPACING, 0);
mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_ENDARROW, mxConstants.NONE); mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_ENDARROW, mxConstants.NONE);
mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_STARTARROW, mxConstants.NONE); mxStylesheet.getDefaultEdgeStyle().put(mxConstants.STYLE_STARTARROW, mxConstants.NONE);
} }
public mxGraphImpl() { mxGraphImpl() {
super(mxStylesheet); super(mxStylesheet);
setAutoSizeCells(true); setAutoSizeCells(true);
setCellsCloneable(false); setCellsCloneable(false);
@ -139,17 +136,20 @@ final class mxGraphImpl extends mxGraph {
if (value instanceof AccountDeviceInstanceKey) { if (value instanceof AccountDeviceInstanceKey) {
final AccountDeviceInstanceKey adiKey = (AccountDeviceInstanceKey) value; final AccountDeviceInstanceKey adiKey = (AccountDeviceInstanceKey) value;
final String accountName = adiKey.getAccountDeviceInstance().getAccount().getTypeSpecificID(); final String accountName = adiKey.getAccountDeviceInstance().getAccount().getTypeSpecificID();
final double size = Math.round(Math.log(adiKey.getMessageCount()) + 5);
String iconFileName = Utils.getIconFileName(adiKey.getAccountDeviceInstance().getAccount().getAccountType()); String iconFileName = Utils.getIconFileName(adiKey.getAccountDeviceInstance().getAccount().getAccountType());
String label = "<img src=\"" String label = "<img height=" + size + " width=" + size + " src="
+ mxGraphImpl.class.getResource("/org/sleuthkit/autopsy/communications/images/" + iconFileName) + mxGraphImpl.class.getResource("/org/sleuthkit/autopsy/communications/images/" + iconFileName)
+ "\">" + accountName; + ">" + accountName;
if (pinnedAccountDevices.contains(adiKey)) { if (pinnedAccountDevices.contains(adiKey)) {
label = "<img src=\"" + MARKER_PIN_URL + "\">"+label; label = "<img height=" + size + " width=" + size + " src=" + MARKER_PIN_URL + ">" + label;
} }
if (lockedVertices.contains((mxCell) cell)) { if (lockedVertices.contains((mxCell) cell)) {
label += "<img src=\"" + LOCK_URL + "\">"; label += "<img height=" + size + " width=" + size + " src=" + LOCK_URL + ">";
} }
return "<div style=\"font-size:"+ (Math.log(adiKey.getMessageCount())+5)+ "px;\" >" + label + "</div>"; return "<div style=\"font-size:" + size + "px;\" >" + label + "</div>";
} else { } else {
return ""; return "";
} }
@ -192,6 +192,7 @@ final class mxGraphImpl extends mxGraph {
void resetGraph() { void resetGraph() {
clear(); clear();
getView().setScale(1);
pinnedAccountDevices.clear(); pinnedAccountDevices.clear();
lockedVertices.clear(); lockedVertices.clear();
} }
@ -207,8 +208,8 @@ final class mxGraphImpl extends mxGraph {
mxCell newVertex = (mxCell) insertVertex( mxCell newVertex = (mxCell) insertVertex(
getDefaultParent(), getDefaultParent(),
vertexName, accountDeviceInstanceKey, vertexName, accountDeviceInstanceKey,
Math.random() * getView().getGraphBounds().getWidth(), Math.random() * 400,
Math.random() * getView().getGraphBounds().getHeight(), Math.random() * 400,
size, size,
size); size);
return newVertex; return newVertex;
@ -322,7 +323,7 @@ final class mxGraphImpl extends mxGraph {
try { try {
get(); get();
} catch (InterruptedException | ExecutionException ex) { } catch (InterruptedException | ExecutionException ex) {
Exceptions.printStackTrace(ex); logger.log(Level.SEVERE, "Error building graph visualization. ", ex);
} finally { } finally {
progress.finish(); progress.finish();
} }