@Override public synchronized void processOnlineResult(String filter, Element result) { if (isRequestCancelled) return; PluginRepositoryLoader.waitBasicLoaded(); if (isRequestCancelled) return; for (Element plugin : XMLUtil.getElements(result, "plugin")) { if (isRequestCancelled) { if (SBProvider.DEBUG) System.out.println(this.getName() + ": request cancelled"); return; } String name = XMLUtil.getElementValue(plugin, "name", ""); String className = XMLUtil.getElementValue(plugin, "classname", ""); String str = XMLUtil.getElementValue(plugin, "string", ""); if (SBProvider.DEBUG) System.out.println(className); if ((StringUtil.isEmpty(name) || !name.toLowerCase().contains(filter.toLowerCase())) && (StringUtil.isEmpty(str) || !str.toLowerCase().contains(filter.toLowerCase()) || StringUtil.isEmpty(className))) continue; final PluginDescriptor pd = PluginRepositoryLoader.getPlugin(className); if (pd == null) { if (SBProvider.DEBUG) System.out.println(className + " not found."); } else if (PluginLoader.getPlugin(className) != null) { if (SBProvider.DEBUG) System.out.println(pd.getClassName() + ": already exists."); } else { pd.loadAll(); for (ProviderListener l : getListeners()) l.updateDisplay(); SBLink link = new LinkOPlugin(this, pd, str, filter); if (SBProvider.DEBUG) System.out.println(name + " added"); elements.add(link); } } if (isRequestCancelled) return; loaded(); }
void updateGui() { final Font sysFont = pluginAuthorLabel.getFont(); final Image img = plugin.getImage(); final String description = plugin.getDescription(); final String changesLog = plugin.getChangeLog(); final String author = plugin.getAuthor(); final String email = plugin.getEmail(); final String web = plugin.getWeb(); if (img == null) pluginImage.setImage(PluginDescriptor.DEFAULT_IMAGE); else pluginImage.setImage(img); if (StringUtil.isEmpty(description)) pluginDescriptionText.setText("No description"); else { if (StringUtil.containHtmlCR(description)) pluginDescriptionText.setText(StringUtil.removeCR(description)); else pluginDescriptionText.setText(StringUtil.toHtmlCR(description)); pluginDescriptionText.setCaretPosition(0); } ComponentUtil.setJTextPaneFont(pluginDescriptionText, sysFont, Color.black); if (StringUtil.isEmpty(changesLog)) pluginChangeLogText.setText("---"); else { pluginChangeLogText.setText(StringUtil.toHtmlCR(changesLog)); pluginChangeLogText.setCaretPosition(0); } ComponentUtil.setJTextPaneFont( pluginChangeLogText, new Font("courier", Font.PLAIN, 11), Color.black); if (StringUtil.isEmpty(author)) pluginAuthorLabel.setText("---"); else pluginAuthorLabel.setText(author); if (StringUtil.isEmpty(email)) pluginEmailLabel.setText("---"); else pluginEmailLabel.setText(email); if (StringUtil.isEmpty(web)) pluginWebsiteLabel.setText("---"); else pluginWebsiteLabel.setText(web); pack(); }
/** * Create a new externalizable panel. * * @param title title for the associated frame. * @param key save key, used for WindowPositionSaver.<br> * Set to null or empty string disable parameter saving. * @param defLoc the default location for the frame (externalized state) * @param defDim the default dimension for the frame (externalized state) */ public ExternalizablePanel(String title, String key, Point defLoc, Dimension defDim) { super(); frame = new Frame(title); parent = null; internalizationAutorized = true; externalizationAutorized = true; closed = false; // use window position saver with default parameters if (!StringUtil.isEmpty(key)) positionSaver = new WindowPositionSaver(this, "frame/" + key, defLoc, defDim); else positionSaver = null; }
/** * Save the specified sequence in the specified file.<br> * When the sequence contains severals image the multipleFile flag is used to indicate if images * are saved as separate files (file then specify a directory) or not.<br> * <code>zMin</code> - <code>zMax</code> and <code>tMin</code> - <code>tMax</code> define the Z * and T images range to save.<br> * * @param formatWriter writer used to save sequence (define the image format).<br> * If set to <code>null</code> then writer is determined from the file extension.<br> * If destination file does not have a valid extension (for folder for instance) then you have * to specify a valid Writer to write the image file (see {@link #getWriter(ImageFileFormat)}) * @param sequence sequence to save * @param file file where we want to save sequence.<br> * Depending the <code>formatWriter</code> the file extension may be modified.<br> * That is preferred as saving an image with a wrong extension may result in error on future * read (wrong reader detection). * @param zMin start Z position to save * @param zMax end Z position to save * @param tMin start T position to save * @param tMax end T position to save * @param fps frame rate for AVI sequence save * @param multipleFile flag to indicate if images are saved in separate file * @param showProgress show progress bar * @param addToRecent add the saved sequence to recent opened sequence list */ public static void save( IFormatWriter formatWriter, Sequence sequence, File file, int zMin, int zMax, int tMin, int tMax, int fps, boolean multipleFile, boolean showProgress, boolean addToRecent) { final String filePath = FileUtil.cleanPath(FileUtil.getGenericPath(file.getAbsolutePath())); final int sizeT = (tMax - tMin) + 1; final int sizeZ = (zMax - zMin) + 1; final int numImages = sizeT * sizeZ; final FileFrame saveFrame; final ApplicationMenu mainMenu; if (addToRecent) mainMenu = Icy.getMainInterface().getApplicationMenu(); else mainMenu = null; if (showProgress && !Icy.getMainInterface().isHeadLess()) saveFrame = new FileFrame("Saving", filePath); else saveFrame = null; try { if (saveFrame != null) { saveFrame.setLength(numImages); saveFrame.setPosition(0); } // need multiple files ? if ((numImages > 1) && multipleFile) { final IFormatWriter writer; // so we won't create it for each image if (formatWriter == null) writer = getWriter(file, ImageFileFormat.TIFF); else writer = formatWriter; if (writer == null) throw new UnknownFormatException( "Can't find a valid image writer for the specified file: " + file); // save as severals images final DecimalFormat decimalFormat = new DecimalFormat("0000"); final String fileName = FileUtil.getFileName(filePath, false); String fileExt = FileUtil.getFileExtension(filePath, true); String fileBaseDirectory = FileUtil.getDirectory(filePath); if (fileBaseDirectory.endsWith("/")) fileBaseDirectory = fileBaseDirectory.substring(0, fileBaseDirectory.length() - 1); // no extension (directory) ? if (StringUtil.isEmpty(fileExt)) { // filename is part of directory fileBaseDirectory += FileUtil.separator + fileName; // use the default file extension for the specified writer fileExt = "." + getImageFileFormat(writer, ImageFileFormat.TIFF).getExtensions()[0]; } final String filePathWithoutExt = fileBaseDirectory + FileUtil.separator + fileName; // create output directory FileUtil.createDir(fileBaseDirectory); // default name used --> use filename if (sequence.isDefaultName()) sequence.setName(fileName); sequence.setFilename(fileBaseDirectory); for (int t = tMin; t <= tMax; t++) { for (int z = zMin; z <= zMax; z++) { String filename = filePathWithoutExt; if ((tMax - tMin) > 0) filename += "_t" + decimalFormat.format(t); if ((zMax - zMin) > 0) filename += "_z" + decimalFormat.format(z); filename += fileExt; // save as single image file save(writer, sequence, filename, z, z, t, t, fps, saveFrame); } } // add as one item to recent file list if (mainMenu != null) mainMenu.addRecentFile(fileBaseDirectory); } else { final String fileExt = FileUtil.getFileExtension(filePath, false); final ImageFileFormat iff; if (formatWriter != null) iff = getImageFileFormat(formatWriter, ImageFileFormat.TIFF); else iff = ImageFileFormat.getWriteFormat(fileExt, ImageFileFormat.TIFF); // force to set correct file extension final String fixedFilePath; if (iff.matches(fileExt)) fixedFilePath = filePath; else fixedFilePath = filePath + "." + iff.getExtensions()[0]; // default name used --> use filename if (sequence.isDefaultName()) sequence.setName(FileUtil.getFileName(fixedFilePath, false)); sequence.setFilename(fixedFilePath); // save into a single file save(formatWriter, sequence, fixedFilePath, zMin, zMax, tMin, tMax, fps, saveFrame); // add as one item to recent file list if (mainMenu != null) mainMenu.addRecentFile(fixedFilePath); } // Sequence persistence enabled --> save XML if (GeneralPreferences.getSequencePersistence()) sequence.saveXMLData(); } catch (Exception e) { IcyExceptionHandler.showErrorMessage(e, true); if (showProgress && !Icy.getMainInterface().isHeadLess()) new FailedAnnounceFrame("Failed to save image(s) (see output console for details)", 15); return; } finally { if (saveFrame != null) saveFrame.close(); } }