@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;
  }
Beispiel #4
0
  /**
   * 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();
    }
  }