From 49264000e12a7c5e9f66268dfabdc55e7f7d2874 Mon Sep 17 00:00:00 2001 From: "patrick.pdb" Date: Thu, 22 Feb 2024 11:26:49 -0400 Subject: [PATCH] '#1864 better position and render of time event group selection combo box. --- .../app/timelinegraph/IpedChartsPanel.java | 13 +++++++--- .../ui/controls/CheckboxListCellRenderer.java | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/iped-app/src/main/java/iped/app/timelinegraph/IpedChartsPanel.java b/iped-app/src/main/java/iped/app/timelinegraph/IpedChartsPanel.java index cdf768bd8f..0122d839b1 100644 --- a/iped-app/src/main/java/iped/app/timelinegraph/IpedChartsPanel.java +++ b/iped-app/src/main/java/iped/app/timelinegraph/IpedChartsPanel.java @@ -1,5 +1,6 @@ package iped.app.timelinegraph; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; @@ -154,6 +155,7 @@ public class IpedChartsPanel extends JPanel implements ResultSetViewer, TableMod IpedChartPanel chartPanel = null; JList legendList = new JList(); JScrollPane listScroller = new JScrollPane(legendList); + JPanel legendPane = new JPanel(); JComboBox tegCombo = new JComboBox<>(); IpedStackedXYBarRenderer renderer = null; @@ -309,8 +311,8 @@ public boolean test(TimeEventGroup t) { } }); tegCombo.setRenderer(cblcRenderer); - chartPanel.add(tegCombo); tegCombo.addActionListener(this); + tegCombo.setMaximumSize(new Dimension(100, 0)); legendListModel = new DefaultListModel(); legendList.setModel(legendListModel); @@ -362,7 +364,12 @@ public void check(MouseEvent e) { ttm.setEnabled(true); splitPane.setTopComponent(chartPanel); - splitPane.setBottomComponent(listScroller); + + legendPane.setPreferredSize(new Dimension(Integer.MAX_VALUE, 80)); + legendPane.setLayout(new BorderLayout()); + legendPane.add(tegCombo, BorderLayout.NORTH); + legendPane.add(listScroller, BorderLayout.CENTER); + splitPane.setBottomComponent(legendPane); splitPane.setVisible(false); chartPanel.setPopupMenu(null); @@ -544,7 +551,7 @@ public void run() { self.remove(splitPane); self.add(splitPane); splitPane.setTopComponent(chartPanel); - splitPane.setBottomComponent(listScroller); + splitPane.setBottomComponent(legendPane); splitPane.setVisible(true); // hide hidden events diff --git a/iped-app/src/main/java/iped/app/ui/controls/CheckboxListCellRenderer.java b/iped-app/src/main/java/iped/app/ui/controls/CheckboxListCellRenderer.java index 3ab729f5cc..8a46441cf7 100644 --- a/iped-app/src/main/java/iped/app/ui/controls/CheckboxListCellRenderer.java +++ b/iped-app/src/main/java/iped/app/ui/controls/CheckboxListCellRenderer.java @@ -7,12 +7,14 @@ import java.util.function.Predicate; import javax.swing.JCheckBox; +import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListCellRenderer; public class CheckboxListCellRenderer extends JPanel implements ListCellRenderer { JCheckBox enabledCheckBox = new JCheckBox(); + JLabel selectedValues = new JLabel(); Predicate isEnabled; int maxStringWidth = 0; boolean indexedPredicate = false; @@ -32,6 +34,30 @@ public CheckboxListCellRenderer(Predicate isEnabled, boolean indexedPredicate) { @Override public Component getListCellRendererComponent(JList list, E value, int index, boolean isSelected, boolean cellHasFocus) { + if (index == -1) { + + StringBuffer sb = new StringBuffer(); + sb.append(" "); + for (int i = 0; i < list.getModel().getSize(); i++) { + Object lvalue = list.getModel().getElementAt(i); + boolean include = false; + if (indexedPredicate) { + if (isEnabled.test(i)) { + include = true; + } + } else { + if (isEnabled.test(lvalue)) { + include = true; + } + } + if (include) { + sb.append(lvalue); + sb.append(","); + } + } + selectedValues.setText(sb.toString()); + return selectedValues; + } if (indexedPredicate) { enabledCheckBox.setSelected(isEnabled.test(index)); } else {