List of usage examples for com.jgoodies.forms.layout CellConstraints xyw
public CellConstraints xyw(int col, int row, int colSpan)
Examples:
cc.xyw(1, 3, 7); cc.xyw(1, 3, 2);
From source file:loci.visbio.data.DataControls.java
License:Open Source License
/** Constructs a tool panel for adjusting data parameters. */ public DataControls(final LogicManager logic) { super(logic, "Data", "Controls for managing data"); frameTable = new Hashtable(); // list of data objects dataRoot = new DefaultMutableTreeNode("Data objects"); dataModel = new DefaultTreeModel(dataRoot); dataTree = new JTree(dataModel); dataTree.setRootVisible(false);/*from w w w . jav a 2 s. co m*/ dataTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); dataTree.setVisibleRowCount(8); dataTree.addTreeSelectionListener(this); final JScrollPane treePane = new JScrollPane(dataTree); SwingUtil.configureScrollPane(treePane); // add data button final JButton addData = new JButton("Add >"); addData.setActionCommand("addData"); addData.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) addData.setMnemonic('a'); addData.setToolTipText("Adds a new data object to the list"); // display button display = new JButton("Display >"); display.setActionCommand("display"); display.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) display.setMnemonic('d'); display.setToolTipText("Visualizes the selected data object"); // controls button editData = new JButton("Edit"); editData.setActionCommand("edit"); editData.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) editData.setMnemonic('i'); editData.setToolTipText("Shows controls for editing the selected data object"); // export button export = new JButton("Export >"); export.setActionCommand("export"); export.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) export.setMnemonic('x'); export.setToolTipText("Exports the selected data object"); // remove data button removeData = new JButton("Remove"); removeData.setActionCommand("removeData"); removeData.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) removeData.setMnemonic('r'); removeData.setToolTipText("Removes the selected data object from the list"); // data information display panel dataInfo = new JEditorPane(); dataInfo.setPreferredSize(new java.awt.Dimension(0, 0)); dataInfo.setEditable(false); dataInfo.setContentType("text/html"); dataInfo.setToolTipText("Reports information about the selected data object"); final JScrollPane infoPane = new JScrollPane(dataInfo); SwingUtil.configureScrollPane(infoPane); doDataInfo(null); // new 2D display menu item display2D = new JMenuItem("New 2D display..."); display2D.setMnemonic('2'); display2D.setActionCommand("new2D"); display2D.addActionListener(this); // new 3D display menu item display3D = new JMenuItem("New 3D display..."); display3D.setMnemonic('3'); display3D.setActionCommand("new3D"); display3D.addActionListener(this); display3D.setEnabled(DisplayUtil.canDo3D()); // export panes final VisBioFrame bio = lm.getVisBio(); exporter = new ExportPane(bio); sender = new SendToIJPane(bio); // lay out buttons final ButtonStackBuilder bsb = new ButtonStackBuilder(); bsb.addGridded(addData); bsb.addRelatedGap(); bsb.addGridded(display); bsb.addRelatedGap(); bsb.addGridded(editData); bsb.addRelatedGap(); bsb.addGridded(export); bsb.addRelatedGap(); bsb.addGridded(removeData); final JPanel buttons = bsb.getPanel(); // lay out components final PanelBuilder builder = new PanelBuilder( new FormLayout("pref:grow, 3dlu, pref", "pref, 5dlu, fill:200:grow")); final CellConstraints cc = new CellConstraints(); builder.add(treePane, cc.xy(1, 1)); builder.add(buttons, cc.xy(3, 1)); builder.add(infoPane, cc.xyw(1, 3, 3)); add(builder.getPanel()); // handle file drag and drop final BioDropHandler dropHandler = new BioDropHandler(bio); ((JComponent) bio.getContentPane()).setTransferHandler(dropHandler); dataTree.setTransferHandler(dropHandler); dataInfo.setTransferHandler(dropHandler); }
From source file:loci.visbio.data.ExportPane.java
License:Open Source License
/** Creates a multidimensional data export dialog. */ public ExportPane(final VisBioFrame bio) { super("Export data"); this.bio = bio; saver = new BufferedImageWriter(); // -- Page 1 -- // folder widgets folderField = new JTextField(System.getProperty("user.dir")); chooseButton = new JButton("Choose..."); chooseButton.setMnemonic('h'); chooseButton.setActionCommand("folder"); chooseButton.addActionListener(this); // pattern fields patternField = new JTextField(); // format combo box final String[] formats = new String[] { "TIFF", "MOV" }; formatBox = new BioComboBox(formats); // lay out first page final PanelBuilder builder = new PanelBuilder( new FormLayout("pref, 3dlu, pref:grow, 3dlu, pref, 3dlu, pref", "pref, 3dlu, pref")); final CellConstraints cc = new CellConstraints(); builder.addLabel("F&older", cc.xy(1, 1)).setLabelFor(folderField); builder.add(folderField, cc.xyw(3, 1, 3)); builder.add(chooseButton, cc.xy(7, 1)); builder.addLabel("File &pattern", cc.xy(1, 3)).setLabelFor(patternField); builder.add(patternField, cc.xy(3, 3)); builder.addLabel("&Format", cc.xy(5, 3)).setLabelFor(formatBox); builder.add(formatBox, cc.xy(7, 3)); final JPanel first = builder.getPanel(); // -- Page 2 -- // pad file numbering with leading zeroes checkbox leadingZeroes = new JCheckBox("Pad file numbering with leading zeroes"); leadingZeroes.setMnemonic('p'); // frames per second text field fps = new JTextField(4); // LZW compression checkbox lzw = new JCheckBox("LZW compression"); lzw.setMnemonic('c'); // lay out second page second = new JPanel(); second.setLayout(new BorderLayout()); // -- Page 3 -- // summary text area summary = new JEditorPane(); summary.setEditable(false);// w w w. j a v a2s .c o m summary.setContentType("text/html"); final JScrollPane summaryScroll = new JScrollPane(summary); SwingUtil.configureScrollPane(summaryScroll); // lay out third page third = new JPanel(); third.setLayout(new BorderLayout()); // lay out pages setPages(new JPanel[] { first, second, third }); }
From source file:loci.visbio.data.ExportPane.java
License:Open Source License
/** Handles button press events. */ @Override//from w w w . j a v a2 s.co m public void actionPerformed(final ActionEvent e) { final String command = e.getActionCommand(); if (command.equals("next")) { if (page == 0) { // lay out page 2 // ensure file pattern ends with appropriate format extension // also determine visibility of "frames per second" text field String pattern = folderField.getText() + File.separator + patternField.getText(); final String format = (String) formatBox.getSelectedItem(); final String plow = pattern.toLowerCase(); boolean doFPS = false, doLZW = false; if (format.equals("PIC")) { if (!plow.endsWith(".pic")) pattern += ".pic"; } else if (format.equals("TIFF")) { if (!plow.endsWith(".tiff") && !plow.endsWith(".tif")) { pattern += ".tif"; doLZW = true; } } else if (format.equals("MOV")) { if (!plow.endsWith(".mov")) pattern += ".mov"; doFPS = true; } // parse file pattern final StringTokenizer st = new StringTokenizer("#" + pattern + "#", "*"); tokens = new String[st.countTokens()]; for (int i = 0; i < tokens.length; i++) { String t = st.nextToken(); if (i == 0) t = t.substring(1); if (i == tokens.length - 1) t = t.substring(0, t.length() - 1); tokens[i] = t; } stars = tokens.length - 1; final String[] dims = trans.getDimTypes(); final int q = dims.length - stars; if (q < 0 || q > 1) { String msg; if (dims.length == 0) { msg = "Please specify a single filename (no asterisks)."; } else if (dims.length == 1) { msg = "Please specify either a single filename (no asterisks) " + "or a file pattern with\none asterisk to indicate where the " + "dimensional axes should be numbered."; } else { msg = "Please specify either " + (dims.length - 1) + " or " + dims.length + " asterisks in the file pattern to\nindicate " + "where the dimensional axes should be numbered."; } JOptionPane.showMessageDialog(dialog, msg, "VisBio", JOptionPane.ERROR_MESSAGE); return; } // determine visibility of "leading zeroes" checkbox final boolean doZeroes = stars > 0; // build file pattern StringBuffer sb = new StringBuffer(); for (int i = 0; i < stars; i++) { sb.append(tokens[i]); sb.append("<"); sb.append((char) ('A' + i)); sb.append(">"); } sb.append(tokens[stars]); final String pat = sb.toString(); // build list of dimensional axes final String[] dimChoices = new String[dims.length]; for (int i = 0; i < dims.length; i++) { dimChoices[i] = "<" + (i + 1) + "> " + dims[i]; } // construct second page panel sb = new StringBuffer("pref"); if (doFPS) sb.append(", 3dlu, pref"); if (doLZW) sb.append(", 3dlu, pref"); if (doZeroes) sb.append(", 3dlu, pref"); for (int i = 0; i < stars; i++) { sb.append(", 3dlu, pref"); } final PanelBuilder builder = new PanelBuilder( new FormLayout("pref:grow, 3dlu, pref", sb.toString())); final CellConstraints cc = new CellConstraints(); builder.addSeparator(pat, cc.xyw(1, 1, 3)); int row = 3; if (doFPS) { builder.addLabel("&Frames per second", cc.xy(1, row, "right,center")).setLabelFor(fps); builder.add(fps, cc.xy(3, row)); row += 2; } if (doLZW) { builder.add(lzw, cc.xyw(1, row, 3, "right, center")); row += 2; } if (doZeroes) { builder.add(leadingZeroes, cc.xyw(1, row, 3, "right,center")); row += 2; } letterBoxes = new BioComboBox[stars]; for (int i = 0; i < stars; i++) { final char letter = (char) ('A' + i); builder.addLabel("<" + letter + "> =", cc.xy(1, row, "right,center")); letterBoxes[i] = new BioComboBox(dimChoices); letterBoxes[i].setSelectedIndex(i); builder.add(letterBoxes[i], cc.xy(3, row)); row += 2; } second.removeAll(); second.add(builder.getPanel()); } else if (page == 1) { // lay out page 3 final String[] dims = trans.getDimTypes(); final int[] lengths = trans.getLengths(); // file pattern StringBuffer sb = new StringBuffer("File pattern: "); for (int i = 0; i < stars; i++) { sb.append(tokens[i]); final char letter = (char) ('A' + i); sb.append("<"); sb.append(letter); sb.append(">"); } sb.append(tokens[stars]); // file format sb.append("\nFormat: "); final String format = (String) formatBox.getSelectedItem(); if (format.equals("PIC")) sb.append("Bio-Rad PIC file"); else if (format.equals("TIFF")) { if (dims.length == stars) sb.append("TIFF image"); else sb.append("Multi-page TIFF stack"); if (lzw.isSelected()) sb.append(" (LZW)"); } else if (format.equals("MOV")) sb.append("QuickTime movie"); else sb.append("Unknown"); sb.append("\n \n"); // dimensional mappings maps = new int[stars]; if (stars > 0) { for (int i = 0; i < stars; i++) { final char letter = (char) ('A' + i); sb.append("<"); sb.append(letter); sb.append("> numbered across dimension: "); maps[i] = letterBoxes[i].getSelectedIndex(); sb.append("<"); sb.append(maps[i] + 1); sb.append("> "); sb.append(dims[maps[i]]); sb.append("\n"); } } else sb.append(" \n"); // count dimensional axis exclusions excl = -1; final boolean[] b = new boolean[dims.length]; for (int i = 0; i < stars; i++) b[maps[i]] = true; int exclude = 0; for (int i = 0; i < dims.length; i++) { if (!b[i]) { excl = i; exclude++; } } // file contents sb.append("Each file will contain "); final int q = dims.length - stars; if (q == 0) sb.append("a single image.\n \n"); else { // q == 1 final int len = lengths[excl]; sb.append(len); sb.append(" image"); if (len != 1) sb.append("s"); sb.append(" across dimension: <"); sb.append(excl + 1); sb.append("> "); sb.append(dims[excl]); sb.append("\n \n"); } // verify dimensional axis mappings are acceptable if (exclude != q) { JOptionPane.showMessageDialog(dialog, "Please map each letter to a different dimensional axis.", "VisBio", JOptionPane.ERROR_MESSAGE); return; } // verify number of range components is acceptable final int rangeCount = trans.getRangeCount(); if (format.equals("PIC") && rangeCount != 1) { JOptionPane.showMessageDialog(dialog, "Bio-Rad PIC format requires a data object with a single " + "range component. Please subsample your data object accordingly.", "VisBio", JOptionPane.ERROR_MESSAGE); return; } else if (rangeCount != 1 && rangeCount != 3) { JOptionPane.showMessageDialog(dialog, format + " format requires a data object with either 1 or 3 " + "range components. Please subsample your data object accordingly.", "VisBio", JOptionPane.ERROR_MESSAGE); return; } // number of files final boolean padZeroes = leadingZeroes.isSelected(); sb.append("\nFirst file: "); for (int i = 0; i < stars; i++) { sb.append(tokens[i]); if (padZeroes) { final int len = ("" + lengths[maps[i]]).length() - 1; for (int j = 0; j < len; j++) sb.append("0"); } sb.append("1"); } sb.append(tokens[stars]); sb.append("\nLast file: "); numFiles = 1; for (int i = 0; i < stars; i++) { sb.append(tokens[i]); sb.append(lengths[maps[i]]); numFiles *= lengths[maps[i]]; } sb.append(tokens[stars]); sb.append("\nTotal number of files: "); sb.append(numFiles); // construct third page panel final StringTokenizer st = new StringTokenizer(sb.toString(), "\n"); final int numLines = st.countTokens(); sb = new StringBuffer("pref, 3dlu"); for (int i = 0; i < numLines; i++) sb.append(", pref"); sb.append(", 5dlu"); final PanelBuilder builder = new PanelBuilder(new FormLayout("pref:grow", sb.toString())); final CellConstraints cc = new CellConstraints(); builder.addSeparator("Summary", cc.xy(1, 1)); for (int i = 0; i < numLines; i++) { builder.addLabel(st.nextToken(), cc.xy(1, i + 3)); } third.removeAll(); third.add(builder.getPanel()); } super.actionPerformed(e); } else if (command.equals("folder")) { // pop up folder chooser File dir = new File(folderField.getText()); final JFileChooser chooser = dir.isDirectory() ? new JFileChooser(dir) : new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { dir = chooser.getSelectedFile(); if (dir != null) folderField.setText(dir.getPath()); } } else super.actionPerformed(e); }
From source file:loci.visbio.data.SamplingWidget.java
License:Open Source License
public SamplingWidget(final DataSampling sampling) { super();/*from w w w . j a v a 2 s. c om*/ this.sampling = sampling; final int[] lengths = sampling.getLengths(); final String[] dims = sampling.getDimTypes(); final int[] min = sampling.getMin(); final int[] max = sampling.getMax(); final int[] step = sampling.getStep(); final int resX = sampling.getImageWidth(); final int resY = sampling.getImageHeight(); final boolean[] range = sampling.getRange(); widthField = new JTextField("" + resX, 4); heightField = new JTextField("" + resY, 4); minFields = new JTextField[min.length]; maxFields = new JTextField[max.length]; stepFields = new JTextField[step.length]; for (int i = 0; i < lengths.length; i++) { minFields[i] = new JTextField("" + min[i], 4); maxFields[i] = new JTextField("" + max[i], 4); stepFields[i] = new JTextField("" + step[i], 4); } final JPanel rangePanel = new JPanel(); rangePanel.add(new JLabel("Range components")); rangeBoxes = new JCheckBox[range.length]; for (int i = 0; i < range.length; i++) { rangeBoxes[i] = new JCheckBox("" + (i + 1), range[i]); if (i < 9 && !LAFUtil.isMacLookAndFeel()) { rangeBoxes[i].setMnemonic('1' + i); } rangePanel.add(rangeBoxes[i]); } final JButton apply = new JButton("Apply"); if (!LAFUtil.isMacLookAndFeel()) apply.setMnemonic('a'); apply.addActionListener(this); // lay out components final StringBuffer sb = new StringBuffer("pref, 3dlu, "); for (int i = 0; i < lengths.length; i++) sb.append("pref, 3dlu, "); sb.append("pref, 3dlu, pref"); final FormLayout layout = new FormLayout("pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref", sb.toString()); final PanelBuilder builder = new PanelBuilder(layout); final CellConstraints cc = new CellConstraints(); builder.addLabel("Image &resolution", cc.xyw(1, 1, 5)); builder.add(widthField, cc.xy(7, 1)); builder.addLabel("&by", cc.xy(9, 1)); builder.add(heightField, cc.xy(11, 1)); for (int i = 0; i < lengths.length; i++) { final int row = 2 * i + 3; builder.addLabel("<" + (i + 1) + "> " + dims[i], cc.xy(1, row)); builder.add(minFields[i], cc.xy(3, row)); builder.addLabel("to", cc.xy(5, row)); builder.add(maxFields[i], cc.xy(7, row)); builder.addLabel("step", cc.xy(9, row)); builder.add(stepFields[i], cc.xy(11, row)); } builder.add(rangePanel, cc.xyw(1, 2 * lengths.length + 3, 11)); builder.add(ButtonBarFactory.buildCenteredBar(apply), cc.xyw(1, 2 * lengths.length + 5, 11)); setLayout(new BorderLayout()); add(builder.getPanel()); }
From source file:loci.visbio.data.SendToIJPane.java
License:Open Source License
/** Lays out components before displaying the dialog. */ @Override//from w ww . ja v a 2 s . c o m protected int showDialog() { if (trans == null) return DialogPane.CANCEL_OPTION; removeAll(); stackAxis.removeActionListener(this); stackAxis.removeAllItems(); stackAxis.addItem("None"); final int[] lengths = trans.getLengths(); final String[] dims = trans.getDimTypes(); bsw = new BioSlideWidget[lengths.length]; if (bsw.length > 0) { final StringBuffer sb = new StringBuffer(); for (int i = 0; i < bsw.length; i++) { bsw[i] = new BioSlideWidget(trans, i); stackAxis.addItem("<" + (i + 1) + "> " + dims[i]); if (i > 0) sb.append(", 3dlu, "); sb.append("pref"); } stackAxis.addActionListener(this); sb.append(", 3dlu, pref"); final PanelBuilder builder = new PanelBuilder(new FormLayout("pref:grow, 3dlu, pref", sb.toString())); final CellConstraints cc = new CellConstraints(); for (int i = 0; i < bsw.length; i++) { builder.add(bsw[i], cc.xyw(1, 2 * i + 1, 3)); } final int row = 2 * bsw.length + 1; builder.addLabel("Stack &axis", cc.xy(1, row, "right, center")).setLabelFor(stackAxis); builder.add(stackAxis, cc.xy(3, row)); add(builder.getPanel()); } return super.showDialog(); }
From source file:loci.visbio.data.SliceWidget.java
License:Open Source License
/** Creates a new arbitrary slice widget. */ public SliceWidget(final ArbitrarySlice slice) { super();//from w w w. j a va 2s . c om this.slice = slice; final DataTransform parent = slice.getParent(); final String[] types = parent.getDimTypes(); // create combo box for selecting which axis to slice through final String[] names = new String[types.length]; for (int i = 0; i < names.length; i++) names[i] = (i + 1) + ": " + types[i]; axes = new BioComboBox(names); axes.setSelectedIndex(slice.getAxis()); axes.addItemListener(this); // create yaw slider int value = (int) slice.getYaw(); yaw = new JSlider(-90, 90, value); yaw.addChangeListener(this); yawValue = new JLabel("" + value + DEGREES); // create pitch slider value = (int) slice.getPitch(); pitch = new JSlider(-90, 90, value); pitch.setMajorTickSpacing(45); pitch.setMinorTickSpacing(5); pitch.setPaintTicks(true); pitch.addChangeListener(this); pitchValue = new JLabel("" + value + DEGREES); // create location slider value = (int) slice.getLocation(); location = new JSlider(0, 100, value); location.setMajorTickSpacing(25); location.setMinorTickSpacing(5); location.setPaintTicks(true); location.addChangeListener(this); locationValue = new JLabel(value + "%"); // create resolution slider final int min = 64, max = 896; value = slice.getResolution(); res = new JSlider(min, max, value); res.setMajorTickSpacing(max / 4); res.setMinorTickSpacing(max / 16); res.setPaintTicks(true); res.addChangeListener(this); resValue = new JLabel(value + " x " + value); resValue.setPreferredSize(new JLabel(max + " x " + max).getPreferredSize()); // create slicing line visibility checkbox showLine = new JCheckBox("Show white slicing line", true); showLine.setMnemonic('l'); showLine.addChangeListener(this); // create on-the-fly slice recompution checkbox recompute = new JCheckBox("Recompute slice on the fly", true); recompute.setMnemonic('f'); recompute.addChangeListener(this); // lay out components final PanelBuilder builder = new PanelBuilder(new FormLayout("pref, 3dlu, pref:grow, 3dlu, pref", "pref, 3dlu, pref, 3dlu, " + "pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref")); final CellConstraints cc = new CellConstraints(); builder.add(FormsUtil.makeRow("&Dimension to slice", axes), cc.xyw(1, 1, 5)); builder.addLabel("&Yaw", cc.xy(1, 3)).setLabelFor(yaw); builder.add(yaw, cc.xy(3, 3)); builder.add(yawValue, cc.xy(5, 3)); builder.addLabel("&Pitch", cc.xy(1, 5)).setLabelFor(pitch); builder.add(pitch, cc.xy(3, 5)); builder.add(pitchValue, cc.xy(5, 5)); builder.addLabel("&Location", cc.xy(1, 7)).setLabelFor(location); builder.add(location, cc.xy(3, 7)); builder.add(locationValue, cc.xy(5, 7)); builder.addLabel("&Resolution", cc.xy(1, 9)).setLabelFor(res); builder.add(res, cc.xy(3, 9)); builder.add(resValue, cc.xy(5, 9)); builder.add(showLine, cc.xyw(1, 11, 3)); builder.add(recompute, cc.xyw(1, 13, 3)); setLayout(new BorderLayout()); add(builder.getPanel()); }
From source file:loci.visbio.ext.FunctionWidget.java
License:Open Source License
public FunctionWidget(final ExternalFunction function) { super();//from ww w. j a v a 2s .c o m this.function = function; final String[] names = function.getParameterNames(); final String[] params = function.getParameters(); // create text fields paramFields = new JTextField[params.length]; for (int i = 0; i < params.length; i++) { paramFields[i] = new JTextField(8); paramFields[i].setText(params[i]); } // create apply button final JButton apply = new JButton("Apply"); if (!LAFUtil.isMacLookAndFeel()) apply.setMnemonic('a'); apply.addActionListener(this); // lay out components final StringBuffer sb = new StringBuffer("pref"); for (int i = 1; i < paramFields.length; i++) sb.append(", 3dlu, pref"); sb.append(", 9dlu, pref"); final PanelBuilder builder = new PanelBuilder(new FormLayout("pref, 3dlu, pref:grow", sb.toString())); final CellConstraints cc = new CellConstraints(); for (int i = 0; i < paramFields.length; i++) { final int row = 2 * i + 1; builder.addLabel(names[i], cc.xy(1, row)); builder.add(paramFields[i], cc.xy(3, row)); } builder.add(ButtonBarFactory.buildCenteredBar(apply), cc.xyw(1, 2 * paramFields.length + 1, 3)); setLayout(new BorderLayout()); add(builder.getPanel()); }
From source file:loci.visbio.help.HelpManager.java
License:Open Source License
/** * Prompts user for whether to visualize the currently selected data object. *///from www . j a v a 2 s .c o m public void checkVisualization() { final DataManager dm = (DataManager) bio.getManager(DataManager.class); final DataTransform data = dm.getSelectedData(); if (data.getParent() != null) return; // ask for top-level objects only // determine whether data can be displayed in 2D and/or 3D final boolean isData = data != null; final boolean canDisplay2D = data != null && data.canDisplay2D(); final boolean canDisplay3D = data != null && data.canDisplay3D() && DisplayUtil.canDo3D(); final boolean canDisplay = canDisplay2D || canDisplay3D; if (canDisplay) { // create option for 3D visualization final ButtonGroup buttons = new ButtonGroup(); final JRadioButton vis3D = new JRadioButton("In 3D", canDisplay3D); vis3D.setEnabled(canDisplay3D); if (!LAFUtil.isMacLookAndFeel()) vis3D.setMnemonic('3'); buttons.add(vis3D); // create option for 2D visualization final JRadioButton vis2D = new JRadioButton("In 2D", !canDisplay3D); vis2D.setEnabled(canDisplay2D); if (!LAFUtil.isMacLookAndFeel()) vis2D.setMnemonic('2'); buttons.add(vis2D); // create option for 2D visualization w/ overlays final JRadioButton visOver = new JRadioButton("In 2D with overlays", !canDisplay3D); visOver.setEnabled(canDisplay2D); if (!LAFUtil.isMacLookAndFeel()) visOver.setMnemonic('o'); buttons.add(visOver); // create option for no visualization final JRadioButton visNot = new JRadioButton("Not now"); if (!LAFUtil.isMacLookAndFeel()) visNot.setMnemonic('n'); buttons.add(visNot); // create panel for asking user about immediate visualization final PanelBuilder builder = new PanelBuilder(new FormLayout("15dlu, pref:grow, 15dlu", "pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref")); final CellConstraints cc = new CellConstraints(); builder.addLabel("Would you like to visualize the \"" + data + "\" object now?", cc.xyw(1, 1, 3)); builder.add(vis3D, cc.xy(2, 3)); builder.add(vis2D, cc.xy(2, 5)); builder.add(visOver, cc.xy(2, 7)); builder.add(visNot, cc.xy(2, 9)); final JPanel visPanel = builder.getPanel(); // display message pane final DataControls dc = dm.getControls(); final OptionManager om = (OptionManager) bio.getManager(OptionManager.class); final boolean success = om.checkMessage(dc, DISPLAY_DATA, false, visPanel, "VisBio"); if (success && !visNot.isSelected()) { if (!visOver.isSelected()) dc.doNewDisplay(vis3D.isSelected()); else dc.doNewDisplayWithOverlays(); } } }
From source file:loci.visbio.overlays.OverlayWidget.java
License:Open Source License
/** Creates overlay GUI controls. */ public OverlayWidget(final OverlayTransform overlay) { super();/*from w w w .ja v a 2s . c om*/ this.overlay = overlay; buttonGroup = new ButtonGroup(); // list of tools final OverlayTool[] toolList = { new PointerTool(overlay), new LineTool(overlay), new FreeformTool(overlay), new MarkerTool(overlay), new TextTool(overlay), new OvalTool(overlay), new BoxTool(overlay), new ArrowTool(overlay), new PolylineTool(overlay), }; tools = new Vector(toolList.length); // tool buttons buttons = new Vector(toolList.length); for (int i = 0; i < toolList.length; i++) addTool(toolList[i]); final Object[] buttonList = new Object[buttons.size()]; buttons.copyInto(buttonList); final JPanel toolsRow = FormsUtil.makeRow(buttonList); // file chooser for loading overlays overlayLoadBox = new JFileChooser(); overlayLoadBox .addChoosableFileFilter(new ExtensionFileFilter(new String[] { "txt" }, "Overlay text files")); // file chooser for saving overlays overlaySaveBox = new JFileChooser(); overlaySaveBox .addChoosableFileFilter(new ExtensionFileFilter(new String[] { "txt" }, "Overlay text files")); overlaySaveBox.setAccessory(new StatsOptionsPane()); overlayXLSBox = new JFileChooser(); overlayXLSBox.addChoosableFileFilter( new ExtensionFileFilter(new String[] { "xls" }, "Overlay spreadsheet files")); overlayXLSBox.setAccessory(new StatsOptionsPane()); // current font text field currentFont = new JTextField(); currentFont.setEditable(false); currentFont.setToolTipText("Font used for text overlays"); refreshCurrentFont(); // font chooser button chooseFont = new JButton("Change..."); chooseFont.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) chooseFont.setMnemonic('h'); chooseFont.setToolTipText("Configures font used for text overlays"); final JPanel fontRow = FormsUtil.makeRow(new Object[] { "Font", currentFont, chooseFont }, new boolean[] { false, true, false }); // overlay list overlayListModel = new DefaultListModel(); overlayList = new JList(overlayListModel); overlayList.addListSelectionListener(this); overlayList.setToolTipText("Overlays at the current dimensional position"); final JScrollPane overlayScroll = new JScrollPane(overlayList); SwingUtil.configureScrollPane(overlayScroll); overlayScroll.setPreferredSize(new Dimension(120, 0)); // text fields for (X, Y) coordinate pairs final int textWidth = 12; x1 = new JTextField(textWidth); y1 = new JTextField(textWidth); x2 = new JTextField(textWidth); y2 = new JTextField(textWidth); x1.setEnabled(false); y1.setEnabled(false); x2.setEnabled(false); y2.setEnabled(false); x1.getDocument().addDocumentListener(this); y1.getDocument().addDocumentListener(this); x2.getDocument().addDocumentListener(this); y2.getDocument().addDocumentListener(this); x1.setToolTipText("First X coordinate of selected overlays"); y1.setToolTipText("First Y coordinate of selected overlays"); x2.setToolTipText("Second X coordinate of selected overlays"); y2.setToolTipText("Second Y coordinate of selected overlays"); // text text field ;-) text = new JTextField(2 * textWidth); text.getDocument().addDocumentListener(this); text.setToolTipText("Text displayed for the selected text overlays"); // color chooser color = new JButton(); color.addActionListener(this); color.setBackground(Color.white); color.setToolTipText("The color of the selected overlays"); // filled checkbox filled = new JCheckBox("Filled"); filled.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) filled.setMnemonic('f'); filled.setToolTipText("Whether the selected overlays are filled in or outlined"); // group selector groupList = new BioComboBox(); groupList.addItem("None"); groupList.addActionListener(this); groupList.setToolTipText("The overlay group to which the selected overlays belong"); // new group button newGroup = new JButton("New..."); newGroup.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) newGroup.setMnemonic('n'); newGroup.setToolTipText("Creates a new overlay group"); // notes text field notes = new JTextField(2 * textWidth); notes.getDocument().addDocumentListener(this); notes.setToolTipText("Miscellaneous notes associated with the selected overlays"); // stats text area stats = new JTextArea(7, 3 * textWidth); stats.setEditable(false); stats.setBorder(new EtchedBorder()); stats.setToolTipText("Statistics for the selected overlay"); // overlay removal button remove = new JButton("Remove"); remove.setEnabled(false); remove.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) remove.setMnemonic('r'); remove.setToolTipText("Deletes the selected overlays"); // overlay copy button copy = new JButton("Copy"); copy.setEnabled(false); copy.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) copy.setMnemonic('c'); copy.setToolTipText("Copies selected overlays to the clipboard"); // overlay paste button paste = new JButton("Paste"); paste.setEnabled(false); paste.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) paste.setMnemonic('p'); paste.setToolTipText("Pastes overlays from the clipboard"); // overlay distribution button dist = new JButton("Distribute"); dist.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) dist.setMnemonic('d'); dist.setToolTipText("Distributes an overlay evenly between " + "copied location and selected location"); // overlay loading button load = new JButton("Load overlays..."); load.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) load.setMnemonic('l'); load.setToolTipText("Loads overlays from a text file on disk"); // overlay saving button save = new JButton("Save overlays..."); save.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) save.setMnemonic('s'); save.setToolTipText("Saves overlays to a text file on disk"); // overlay export button export = new JButton("Export overlays..."); export.addActionListener(this); if (!LAFUtil.isMacLookAndFeel()) export.setMnemonic('e'); export.setToolTipText("Exports overlays to a .xls file on disk"); // lay out components setLayout(new BorderLayout()); final FormLayout layout = new FormLayout("pref, 5dlu, pref, 3dlu, pref:grow, 5dlu, pref, 3dlu, pref:grow", "pref, 3dlu, pref, 9dlu, pref, 3dlu, pref, 9dlu, pref, 3dlu, pref, " + "3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, " + "3dlu, pref, 9dlu, pref, 3dlu, fill:pref:grow"); final PanelBuilder builder = new PanelBuilder(layout); final CellConstraints cc = new CellConstraints(); int row = 1; builder.addSeparator("Tools", cc.xyw(1, row, 9)); row += 2; builder.add(toolsRow, cc.xyw(1, row, 9)); row += 2; builder.addSeparator("Overlays", cc.xyw(1, row, 9)); row += 2; builder.add(fontRow, cc.xyw(1, row, 9)); row += 2; builder.add(overlayScroll, cc.xywh(1, row, 1, 11)); builder.addLabel("X1", cc.xy(3, row)); builder.add(x1, cc.xy(5, row)); builder.addLabel("Y1", cc.xy(7, row)); builder.add(y1, cc.xy(9, row)); row += 2; builder.addLabel("X2", cc.xy(3, row)); builder.add(x2, cc.xy(5, row)); builder.addLabel("Y2", cc.xy(7, row)); builder.add(y2, cc.xy(9, row)); row += 2; builder.addLabel("Text", cc.xy(3, row)); builder.add(text, cc.xyw(5, row, 5)); row += 2; builder.addLabel("Color", cc.xy(3, row)); builder.add(color, cc.xy(5, row, "fill, fill")); builder.add(filled, cc.xyw(7, row, 3)); row += 2; builder.addLabel("Group", cc.xy(3, row)); builder.add(groupList, cc.xy(5, row)); builder.add(newGroup, cc.xyw(7, row, 3, "left, center")); row += 2; builder.addLabel("Notes", cc.xy(3, row)); builder.add(notes, cc.xyw(5, row, 5)); row += 2; builder.add(ButtonBarFactory.buildCenteredBar(new JButton[] { remove, copy, paste, dist }), cc.xyw(1, row, 9, "center, center")); row += 2; builder.add(ButtonBarFactory.buildCenteredBar(new JButton[] { load, save, export }), cc.xyw(1, row, 9, "center, center")); row += 2; builder.addSeparator("Statistics", cc.xyw(1, row, 9)); row += 2; builder.add(stats, cc.xyw(1, row, 9)); layout.setColumnGroups(new int[][] { { 5, 9 } }); add(builder.getPanel()); overlay.addTransformListener(this); // widget refresh timer refreshTimer = new Timer(200, this); refreshTimer.start(); }
From source file:loci.visbio.PanelManager.java
License:Open Source License
/** Called to notify the logic manager of a VisBio event. */ @Override/*from w ww .ja va2s. c o m*/ public void doEvent(final VisBioEvent evt) { final int eventType = evt.getEventType(); if (eventType == VisBioEvent.LOGIC_ADDED) { final Object src = evt.getSource(); if (src == this) doGUI(); else if (src instanceof ExitManager) { // HACK - finalize control panel layout bio.setSplashStatus("Initializing control panels"); // lay out control panels final String pad = "9dlu"; final String[] cols = new String[numCols]; final String[] rows = new String[numRows]; Arrays.fill(cols, pad); Arrays.fill(rows, pad); for (int i = 0; i < panels.size(); i++) { final ControlPanel cpl = (ControlPanel) panels.elementAt(i); final Point p = (Point) coords.elementAt(i); final Dimension d = (Dimension) sizes.elementAt(i); final int xx = p.x; final int yy = p.y; final int ww = d.width; final int hh = d.height; final String colString = (String) colStrings.elementAt(i); final String rowString = (String) rowStrings.elementAt(i); cols[xx - 1] = colString; rows[yy - 1] = "pref"; rows[yy] = "3dlu"; rows[yy + 1] = rowString; } final StringBuffer cbuf = new StringBuffer(cols[0]); for (int i = 1; i < cols.length; i++) { cbuf.append(","); cbuf.append(cols[i]); } final StringBuffer rbuf = new StringBuffer(rows[0]); for (int i = 1; i < rows.length; i++) { rbuf.append(","); rbuf.append(rows[i]); } final PanelBuilder builder = new PanelBuilder(new FormLayout(cbuf.toString(), rbuf.toString())); builder.setDefaultDialogBorder(); final CellConstraints cc = new CellConstraints(); for (int i = 0; i < panels.size(); i++) { final ControlPanel cpl = (ControlPanel) panels.elementAt(i); final Point p = (Point) coords.elementAt(i); final Dimension d = (Dimension) sizes.elementAt(i); final int xx = p.x; final int yy = p.y; final int ww = d.width; final int hh = d.height; builder.addSeparator(cpl.getName(), cc.xyw(xx, yy, ww)); builder.add(cpl, cc.xywh(xx, yy + 2, ww, hh, "fill,fill")); } bio.setContentPane(builder.getPanel()); } } }