package edu.stanford.rsl.apps.gui; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Rectangle; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import edu.stanford.rsl.conrad.filtering.ImageFilteringTool; import edu.stanford.rsl.conrad.pipeline.ParallelImageFilterPipeliner; import edu.stanford.rsl.conrad.utils.Configuration; /** * This code was edited or generated using CloudGarden's Jigloo * SWT/Swing GUI Builder, which is free for non-commercial * use. If Jigloo is being used commercially (ie, by a corporation, * company or business for any purpose whatever) then you * should purchase a license for each developer using Jigloo. * Please visit www.cloudgarden.com for details. * Use of Jigloo implies acceptance of these licensing terms. * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE. */ public class ConfigurePipelineFrame extends JFrame implements ActionListener, MouseListener, UpdateableGUI { /** * */ private static final long serialVersionUID = -6842659152489589850L; private JScrollPane jScrollPane1; private JButton jMoveDownButton; private JPanel jPipelinePanel; private JButton jSaveButton; private JButton jMoveUpButton; private JButton jRemoveButton; private JButton jAddButton; private ImageFilteringTool [] pipeline; private boolean exited = false; private UpdateableGUI parentFrame = null; private boolean saveToDisk = true; public ConfigurePipelineFrame(){ pipeline = Configuration.getGlobalConfiguration().getFilterPipeline(); initGUI(); updateGUI(); //pack(); } public boolean isExited() { return exited; } public void exit(){ exited = true; setVisible(false); if (parentFrame != null) parentFrame.updateGUI(); System.out.println("exiting pipeline frame"); } private GUICompatibleObjectVisualizationPanel [] panels = null; private int selectedIndex = 0; public void updateGUI(){ Rectangle rect = jPipelinePanel.getVisibleRect(); int visibleYCoord = 100*selectedIndex; if (!rect.contains(0, visibleYCoord)){ rect = new Rectangle(0, visibleYCoord, jScrollPane1.getWidth(), visibleYCoord + jScrollPane1.getHeight()); } visibleYCoord = 100*(selectedIndex+1); if (!rect.contains(0, visibleYCoord)){ rect = new Rectangle(0, visibleYCoord - jScrollPane1.getHeight(), jScrollPane1.getWidth(), visibleYCoord); } jPipelinePanel = new JPanel(); jPipelinePanel.setBackground(Color.WHITE); jPipelinePanel.setLayout(null); panels = new GUICompatibleObjectVisualizationPanel[pipeline.length]; for (int i = 0; i < pipeline.length; i++){ GUICompatibleObjectVisualizationPanel currentPanel = new GUICompatibleObjectVisualizationPanel(pipeline[i]); jPipelinePanel.add(currentPanel); currentPanel.setLocation(0, 100 *i); currentPanel.addMouseListener(this); currentPanel.setParentFrame(this); panels[i] = currentPanel; } if((selectedIndex < panels.length)&&(selectedIndex >= 0)){ panels[selectedIndex].setBackground(new Color(255,200,200)); } jPipelinePanel.setPreferredSize(new Dimension(550, 100 * pipeline.length)); jScrollPane1.setViewportView(jPipelinePanel); jScrollPane1.setPreferredSize(new Dimension(500,440)); jPipelinePanel.scrollRectToVisible(rect); } private void initGUI() { try { { GridBagLayout thisLayout = new GridBagLayout(); thisLayout.rowWeights = new double[] {0.0, 0.1, 0.1, 0.1}; thisLayout.rowHeights = new int[] {30, 223, 223, 30}; thisLayout.columnWeights = new double[] {0.1, 0.0, 0.0, 0.1}; thisLayout.columnWidths = new int[] {0, 20, 570, 20}; this.setBackground(Color.WHITE); getContentPane().setLayout(thisLayout); getContentPane().setBackground(Color.WHITE); setTitle("Configure Pipeline"); { jScrollPane1 = new JScrollPane(); getContentPane().add(jScrollPane1, new GridBagConstraints(2, 1, 1, 2, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); { jPipelinePanel = new JPanel(); jPipelinePanel.setBackground(Color.WHITE); jScrollPane1.setViewportView(jPipelinePanel); } } { jAddButton = new JButton(); getContentPane().add(jAddButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); jAddButton.setText("add"); jAddButton.addActionListener(this); } { jRemoveButton = new JButton(); getContentPane().add(jRemoveButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE, new Insets(0, 50, 0, 0), 0, 0)); jRemoveButton.setText("remove"); jRemoveButton.addActionListener(this); } { jMoveUpButton = new JButton(); getContentPane().add(jMoveUpButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); jMoveUpButton.setText("up"); jMoveUpButton.addActionListener(this); } { jMoveDownButton = new JButton(); getContentPane().add(jMoveDownButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 50), 0, 0)); jMoveDownButton.setText("down"); jMoveDownButton.addActionListener(this); } { jSaveButton = new JButton(); getContentPane().add(jSaveButton, new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); jSaveButton.setText("save and exit"); jSaveButton.addActionListener(this); } } pack(); } catch(Exception e) { e.printStackTrace(); } } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source != null){ if (source.equals(this.jSaveButton)){ Configuration config = Configuration.getGlobalConfiguration(); config.setFilterPipeline(pipeline); ImageFilteringTool [] backup = ParallelImageFilterPipeliner.getPipelineClone(pipeline); Configuration.setGlobalConfiguration(config); if (saveToDisk) Configuration.saveConfiguration(); config.setFilterPipeline(backup); Configuration.setGlobalConfiguration(config); exited = true; if (parentFrame != null) parentFrame.updateGUI(); this.setVisible(false); } if (source.equals(this.jAddButton)){ ImageFilteringTool [] filters = ImageFilteringTool.getFilterTools(); ImageFilteringTool newFilter = (ImageFilteringTool) JOptionPane.showInputDialog(null, "Please select the filter type to add:", "Filter Selection", JOptionPane.DEFAULT_OPTION, null, filters, filters[0]); if (newFilter != null) { ImageFilteringTool [] newPipeline = new ImageFilteringTool [pipeline.length + 1]; for (int i = 0; i < newPipeline.length; i++){ if (i < selectedIndex) newPipeline[i] = pipeline[i]; if (i == selectedIndex) { newPipeline[i] = newFilter; i++; } if (i > selectedIndex){ if ((i < newPipeline.length) && ((i -1 >=0))) { newPipeline[i] = pipeline[i-1]; } } } if (selectedIndex == -1) { newPipeline[0] = newFilter; } pipeline = newPipeline; } this.updateGUI(); } if (source.equals(this.jRemoveButton)){ ImageFilteringTool [] newPipeline = new ImageFilteringTool [pipeline.length -1]; for (int i = 0; i < newPipeline.length + 1; i++){ if (i < selectedIndex) newPipeline[i] = pipeline[i]; if (i == selectedIndex) { i++; } if ((i > selectedIndex)&&(i < newPipeline.length + 1)){ newPipeline[i-1] = pipeline[i]; } } if(selectedIndex >= newPipeline.length) selectedIndex--; pipeline = newPipeline; this.updateGUI(); } if (source.equals(this.jMoveUpButton)){ if (selectedIndex != 0) { ImageFilteringTool [] newPipeline = new ImageFilteringTool [pipeline.length]; for (int i = 0; i < newPipeline.length; i++){ if (i < selectedIndex - 1) newPipeline[i] = pipeline[i]; if (i == selectedIndex) { newPipeline[i-1] = pipeline[i]; newPipeline[i] = pipeline[i-1]; } if (i > selectedIndex){ newPipeline[i] = pipeline[i]; } } selectedIndex--; pipeline = newPipeline; this.updateGUI(); } } if (source.equals(this.jMoveDownButton)){ if (selectedIndex != pipeline.length - 1) { ImageFilteringTool [] newPipeline = new ImageFilteringTool [pipeline.length]; for (int i = 0; i < newPipeline.length; i++){ if (i < selectedIndex) newPipeline[i] = pipeline[i]; if (i == selectedIndex) { newPipeline[i+1] = pipeline[i]; newPipeline[i] = pipeline[i+1]; } if (i > selectedIndex + 1){ newPipeline[i] = pipeline[i]; } } selectedIndex++; pipeline = newPipeline; this.updateGUI(); } } } } public void setParentFrame(UpdateableGUI parentFrame) { this.parentFrame = parentFrame; } public UpdateableGUI getParentFrame() { return parentFrame; } public void mouseClicked(MouseEvent e) { for (int i = 0; i < panels.length; i++){ if(e.getSource().equals(panels[i])) selectedIndex = i; } this.updateGUI(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } /** * @param saveToDisk the saveToDisk to set */ public void setSaveToDisk(boolean saveToDisk) { this.saveToDisk = saveToDisk; } /** * @return the saveToDisk */ public boolean isSaveToDisk() { return saveToDisk; } } /* * Copyright (C) 2010-2014 - Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */