- /* iterate over the component’s sinks. */
- Collection<Sink> sinks = pipeline.sinks((Source) controlled);
- int sinkWidth = width / sinks.size();
- int sinkIndex = 0;
- for (Sink connectedSink : sinks) {
- /* distribute all sinks evenly below this source. */
- addControlled(connectedSink, level + 1, position + sinkIndex * sinkWidth, sinkWidth);
- sinkIndex++;
+ /* iterate over the filter’s connected filters. */
+ if (!sinks.isEmpty()) {
+ int sinkWidth = width / sinks.size();
+ int sinkIndex = 0;
+ for (Filter connectedSink : sinks) {
+ /* distribute all filters evenly below this source. */
+ addFilter(connectedSink, level + 1, position + sinkIndex * sinkWidth, sinkWidth, filter);
+ sinkIndex++;
+ }
+ }
+ }
+
+ /**
+ * Creates a panel displaying a single filter.
+ *
+ * @param filter
+ * The filter to display
+ * @return The created panel
+ */
+ private static JPanel createFilterPanel(final Filter filter, final Filter parentFilter) {
+ JPanel filterPanel = new JPanel(new BorderLayout(12, 12));
+ filterPanel.setBorder(createCompoundBorder(createEtchedBorder(), createEmptyBorder(0, 4, 0, 3)));
+ filterPanel.add(new JLabel(filter.name()), BorderLayout.WEST);
+ final JLabel titleLabel = new JLabel(filter.metadata().fullTitle());
+ titleLabel.setFont(titleLabel.getFont().deriveFont(titleLabel.getFont().getSize2D() * 0.8f));
+ filterPanel.add(titleLabel, BorderLayout.EAST);
+ if (parentFilter != null) {
+ titleLabel.setVisible(!parentFilter.metadata().fullTitle().equals(filter.metadata().fullTitle()));