Package net.sourceforge.jiu.apps

Source Code of net.sourceforge.jiu.apps.OperationProcessor

/*
* OperationProcessor
*
* Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Marco Schmidt.
* All rights reserved.
*/

package net.sourceforge.jiu.apps;

import net.sourceforge.jiu.data.BilevelImage;
import net.sourceforge.jiu.data.Gray16Image;
import net.sourceforge.jiu.data.Gray8Image;
import net.sourceforge.jiu.data.Paletted8Image;
import net.sourceforge.jiu.data.PixelImage;
import net.sourceforge.jiu.data.RGB24Image;
import net.sourceforge.jiu.data.RGB48Image;

/**
* Abstract base class for performing JIU operations in combination
* with an {@link EditorState}.
* @author Marco Schmidt
*/
public abstract class OperationProcessor implements MenuIndexConstants
{
  private EditorState state;

  /**
   * Create an object of this class, storing the state argument for later use.
   * @param editorState EditorState object to be used for processing
   */
  public OperationProcessor(EditorState editorState)
  {
    state = editorState;
  }

  /**
   * Adjust the brightness of the current image.
   */
  public abstract void colorAdjustBrightness();

  /**
   * Adjust the contrast of the current image.
   */
  public abstract void colorAdjustContrast();

  /**
   * Adjust the gamma value of the current image.
   */
  public abstract void colorAdjustGamma();

  /**
   * Adjust hue, saturation and value of the current image.
   */
  public abstract void colorAdjustHueSaturationValue();

  /**
   * Count the number of colors used in the current image.
   */
  public abstract void colorHistogramCountColorsUsed();

  public abstract void colorHistogramEqualize();

  public abstract void colorHistogramNormalize();

  public abstract void colorHistogramTextureProperties();

  public abstract void colorHistogramSaveHistogramAs();

  public abstract void colorHistogramSaveCoOccurrenceMatrixAs();

  public abstract void colorHistogramSaveCoOccurrenceFrequencyMatrixAs();

  public abstract void colorPaletteSaveAs();

  public abstract void colorPromotePromoteToPaletted();

  public abstract void colorPromotePromoteToGray8();

  public abstract void colorPromotePromoteToGray16();

  public abstract void colorPromotePromoteToRgb24();

  public abstract void colorPromotePromoteToRgb48();

  public abstract void colorReduceReduceNumberOfShadesOfGray();

  public abstract void colorReduceConvertToGrayscale();

  public abstract void colorReduceMedianCut();

  public abstract void colorReduceOctree();

  public abstract void colorReduceReduceToBilevelThreshold();

  public abstract void colorReduceUniformPalette();

  public abstract void colorReduceMapToArbitraryPalette();

  public abstract void colorConvertToMinimumColorType();

  public abstract void colorInvert();

  public abstract void editRedo();

  public abstract void editUndo();

  public abstract void filtersBlur();

  public abstract void filtersSharpen();

  public abstract void filtersEdgeDetection();

  public abstract void filtersEmboss();

  public abstract void filtersPsychedelicDistillation();

  public abstract void filtersLithograph();

  public abstract void filtersHorizontalSobel();

  public abstract void filtersVerticalSobel();

  public abstract void filtersHorizontalPrewitt();

  public abstract void filtersVerticalPrewitt();

  public abstract void filtersMaximum();

  public abstract void filtersMedian();

  public abstract void filtersMean();

  public abstract void filtersMinimum();

  public abstract void filtersOil();

  public abstract void transformationsFlip();

  public abstract void transformationsMirror();

  public abstract void transformationsRotate90Left();

  public abstract void transformationsRotate90Right();

  public abstract void transformationsRotate180();

  public abstract void transformationsCrop();

  public abstract void transformationsShear();

  public abstract void transformationsScale();

  public abstract void viewInterpolationTypeBicubic();

  public abstract void viewInterpolationTypeBilinear();

  public abstract void viewInterpolationTypeNearestNeighbor();

  public abstract void viewZoomIn();

  public abstract void viewZoomOut();

  public abstract void viewSetOriginalSize();


  /**
   * If there is an image loaded in the application, remove the image.
   */
  public abstract void fileClose();

  /**
   * Terminate the application.
   * If changes were not saved, the user should be asked whether these changes
   * should be discarded.
   */
  public abstract void fileExit();

  /**
   * Load an image in the application.
   */
  public abstract void fileOpen(String uri);

  /**
   * Save the current image as a Windows BMP file.
   */
  public abstract void fileSaveAsBmp();

  /**
   * Save the current image as a GIF file.
   */
  public abstract void fileSaveAsGif();

  /**
   * Save the current image as a Palm image file.
   */
  public abstract void fileSaveAsPalm();

  /**
   * Save the current image as a Portable Bitmap file.
   */
  public abstract void fileSaveAsPbm();

  /**
   * Save the current image as a Portable Graymap file.
   */
  public abstract void fileSaveAsPgm();

  /**
   * Save the current image as a Portable Network Graphics file.
   */
  public abstract void fileSaveAsPng();

  /**
   * Save the current image as a Portable Pixmap file.
   */
  public abstract void fileSaveAsPpm();

  /**
   * Save the current image as a Sun Raster file.
   */
  public abstract void fileSaveAsRas();

  /**
   * Returns the EditorState object given to this object's constructor.
   * @return EditorState object used by this processor
   */
  public EditorState getEditorState()
  {
    return state;
  }

  /**
   * Display information about the application:
   * name, version, feedback email address, website.
   */
  public abstract void helpAbout();

  /**
   * Display information on the system this application
   * is currently running on.
   */
  public abstract void helpSystemInformation();

  /**
   * Returns if the operation given by the menu index (from {@link MenuIndexConstants}
   * is available regarding the current editor state.
   * This method is used to update the enabled status of menu items so that
   * they reflect what can be done in the current state of an application.
   * Thus, things that cannot be done cannot be chosen in the menu
   * because they are disabled.
   * Example: the File | Save as... items are disabled as long as there is no image loaded,
   * simply because there is nothing to save.
   * @param menuIndex index of menu item to be checked
   * @return whether the operation is available (if true, menu item
   *  should be enabled)
   */
  public boolean isAvailable(int menuIndex)
  {
    boolean hasImage = state.hasImage();
    PixelImage image = state.getImage();
    boolean bilevel = hasImage && image instanceof BilevelImage;
    boolean gray8 = hasImage && image instanceof Gray8Image;
    boolean gray16 = hasImage && image instanceof Gray16Image;
    //boolean gray = gray8 || gray16;
    boolean pal8 = hasImage && image instanceof Paletted8Image;
    boolean rgb24 = hasImage && image instanceof RGB24Image;
    boolean rgb48 = hasImage && image instanceof RGB48Image;
    boolean rgb = rgb24 || rgb48;
    switch(menuIndex)
    {
      case(FILE):
      {
        return true;
      }
      case(FILE_OPEN):
      {
        return true;
      }
      case(FILE_CLOSE):
      {
        return hasImage;
      }
      case(FILE_SAVEAS):
      {
        return hasImage;
      }
      case(FILE_SAVEAS_GIF):
      {
        return bilevel || gray8 || pal8;
      }
      case(FILE_SAVEAS_PALM):
      {
        return bilevel || gray8 || pal8 || rgb24;
      }
      case(FILE_SAVEAS_PBM):
      {
        return bilevel;
      }
      case(FILE_SAVEAS_PGM):
      {
        return gray8 || gray16;
      }
      case(FILE_SAVEAS_PNG):
      {
        return hasImage;
      }
      case(FILE_SAVEAS_PPM):
      {
        return rgb24 || rgb48;
      }
      case(FILE_SAVEAS_SUNRASTER):
      {
        return pal8;
      }
      case(FILE_SAVEAS_WINDOWSBMP):
      {
        return bilevel || gray8 || pal8 || rgb24;
      }
      case(FILE_IMAGE_1):
      {
        return true;
      }
      case(FILE_EXIT):
      {
        return true;
      }
      case(EDIT):
      {
        return state.canUndo() || state.canRedo();
      }
      case(EDIT_UNDO):
      {
        return state.canUndo();
      }
      case(EDIT_REDO):
      {
        return state.canRedo();
      }
      case(COLOR):
      {
        return hasImage;
      }
      case(COLOR_ADJUST):
      {
        return !bilevel;
      }
      case(COLOR_ADJUST_BRIGHTNESS):
      {
        return gray8 || gray16 || pal8 || rgb24 || rgb48;
      }
      case(COLOR_ADJUST_CONTRAST):
      {
        return gray8 || gray16 || pal8 || rgb24 || rgb48;
      }
      case(COLOR_ADJUST_GAMMA):
      {
        return gray8 || gray16 || pal8 || rgb24 || rgb48;
      }
      case(COLOR_HISTOGRAM):
      {
        return hasImage;
      }
      case(COLOR_HISTOGRAM_COUNTCOLORSUSED):
      {
        return hasImage;
      }
      case(COLOR_HISTOGRAM_EQUALIZE):
      {
        return gray8 || pal8 || rgb24 || rgb48;
      }
      case(COLOR_HISTOGRAM_NORMALIZE):
      {
        return gray8 || pal8 || rgb24 || rgb48;
      }
      case(COLOR_HISTOGRAM_TEXTUREPROPERTIES):
      {
        return gray8;
      }
      case(COLOR_HISTOGRAM_SAVEHISTOGRAMAS):
      {
        return hasImage;
      }
      case(COLOR_HISTOGRAM_SAVECOOCCURRENCEMATRIXAS):
      {
        return pal8 || gray8 || bilevel;
      }
      case(COLOR_HISTOGRAM_SAVECOOCCURRENCEFREQUENCYMATRIXAS):
      {
        return pal8 || gray8 || bilevel;
      }
      case(COLOR_PALETTE):
      {
        return pal8;
      }
      case(COLOR_PALETTE_SAVEAS):
      {
        return pal8;
      }
      case(COLOR_PROMOTE):
      {
        return !rgb48;
      }
      case(COLOR_PROMOTE_PROMOTETOGRAY8):
      {
        return bilevel;
      }
      case(COLOR_PROMOTE_PROMOTETOGRAY16):
      {
        return bilevel || gray8;
      }
      case(COLOR_PROMOTE_PROMOTETORGB24):
      {
        return bilevel || gray8 || pal8;
      }
      case(COLOR_PROMOTE_PROMOTETORGB48):
      {
        return bilevel || gray8 || gray16 || pal8 || rgb24;
      }
      case(COLOR_PROMOTE_PROMOTETOPALETTED):
      {
        return bilevel || gray8;
      }
      case(COLOR_ADJUST_HUESATURATIONVALUE):
      {
        return pal8 || rgb24;
      }
      case(COLOR_REDUCE):
      {
        return !bilevel;
      }
      case(COLOR_REDUCE_CONVERTTOGRAYSCALE):
      {
        return pal8 || rgb;
      }
      case(COLOR_REDUCE_REDUCENUMBEROFSHADESOFGRAY):
      {
        return gray8 || gray16;
      }
      case(COLOR_REDUCE_REDUCETOBILEVELTHRESHOLD):
      {
        return gray8 || gray16;
      }
      case(COLOR_REDUCE_MEDIANCUT):
      {
        return rgb24;
      }
      case(COLOR_REDUCE_OCTREE):
      {
        return rgb24;
      }
      case(COLOR_REDUCE_UNIFORMPALETTE):
      {
        return rgb24;
      }
      case(COLOR_REDUCE_MAPTOARBITRARYPALETTE):
      {
        return rgb24;
      }
      case(COLOR_INVERT):
      {
        return hasImage;
      }
      case(COLOR_CONVERTTOMINIMUMCOLORTYPE):
      {
        return !bilevel;
      }
      case(TRANSFORMATIONS):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_FLIP):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_MIRROR):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_ROTATELEFT90):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_ROTATERIGHT90):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_ROTATE180):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_SHEAR):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_SCALE):
      {
        return hasImage;
      }
      case(TRANSFORMATIONS_CROP):
      {
        return hasImage;
      }
      case(FILTERS):
      {
        return hasImage && !pal8;
      }
      case(FILTERS_BLUR):
      case(FILTERS_SHARPEN):
      case(FILTERS_EDGEDETECTION):
      case(FILTERS_EMBOSS):
      case(FILTERS_PSYCHEDELICDISTILLATION):
      case(FILTERS_LITHOGRAPH):
      case(FILTERS_HORIZONTALSOBEL):
      case(FILTERS_VERTICALSOBEL):
      case(FILTERS_HORIZONTALPREWITT):
      case(FILTERS_VERTICALPREWITT):
      case(FILTERS_MEAN):
      case(FILTERS_OIL):
      {
        return gray16 || gray8 || rgb24 || rgb48;
      }
      case(FILTERS_MAXIMUM):
      case(FILTERS_MINIMUM):
      case(FILTERS_MEDIAN):
      {
        return gray16 || gray8 || rgb24 || bilevel || rgb48;
      }
      case(VIEW):
      case(VIEW_INTERPOLATIONTYPE):
      case(VIEW_INTERPOLATIONTYPE_NEARESTNEIGHBOR):
      case(VIEW_INTERPOLATIONTYPE_BILINEAR):
      case(VIEW_INTERPOLATIONTYPE_BICUBIC):
      {
        return hasImage;
      }
      case(VIEW_SETORIGINALSIZE):
      {
        return hasImage && !state.isZoomOriginalSize();
      }
      case(VIEW_ZOOMIN):
      {
        return hasImage && !state.isMaximumZoom();
      }
      case(VIEW_ZOOMOUT):
      {
        return hasImage && !state.isMinimumZoom();
      }
      case(HELP):
      {
        return true;
      }
      case(HELP_ABOUT):
      {
        return true;
      }
      case(HELP_SYSTEMINFORMATION):
      {
        return true;
      }
      default:
      {
        throw new IllegalArgumentException("Not a valid menu index: " + menuIndex);
      }
    }
  }

  public void process(int menuIndex)
  {
    switch (menuIndex)
    {
      case(FILE_OPEN):
      {
        fileOpen(null);
        break;
      }
      case(FILE_SAVEAS_GIF):
      {
        fileSaveAsGif();
        break;
      }
      case(FILE_SAVEAS_PALM):
      {
        fileSaveAsPalm();
        break;
      }
      case(FILE_SAVEAS_PBM):
      {
        fileSaveAsPbm();
        break;
      }
      case(FILE_SAVEAS_PGM):
      {
        fileSaveAsPgm();
        break;
      }
      case(FILE_SAVEAS_PNG):
      {
        fileSaveAsPng();
        break;
      }
      case(FILE_SAVEAS_PPM):
      {
        fileSaveAsPpm();
        break;
      }
      case(FILE_SAVEAS_SUNRASTER):
      {
        fileSaveAsRas();
        break;
      }
      case(FILE_SAVEAS_WINDOWSBMP):
      {
        fileSaveAsBmp();
        break;
      }
      case(FILE_IMAGE_1):
      {
        fileOpen("/resources/images/image1.jpg");
        break;
      }
      case(FILE_CLOSE):
      {
        fileClose();
        break;
      }
      case(FILE_EXIT):
      {
        fileExit();
        break;
      }
      case(EDIT_UNDO):
      {
        editUndo();
        break;
      }
      case(EDIT_REDO):
      {
        editRedo();
        break;
      }
      case(COLOR_ADJUST_BRIGHTNESS):
      {
        colorAdjustBrightness();
        break;
      }
      case(COLOR_ADJUST_CONTRAST):
      {
        colorAdjustContrast();
        break;
      }
      case(COLOR_ADJUST_GAMMA):
      {
        colorAdjustGamma();
        break;
      }
      case(COLOR_ADJUST_HUESATURATIONVALUE):
      {
        colorAdjustHueSaturationValue();
        break;
      }
      case(COLOR_HISTOGRAM_COUNTCOLORSUSED):
      {
        colorHistogramCountColorsUsed();
        break;
      }
      case(COLOR_HISTOGRAM_EQUALIZE):
      {
        colorHistogramEqualize();
        break;
      }
      case(COLOR_HISTOGRAM_NORMALIZE):
      {
        colorHistogramNormalize();
        break;
      }
      case(COLOR_HISTOGRAM_TEXTUREPROPERTIES):
      {
        colorHistogramTextureProperties();
        break;
      }
      case(COLOR_HISTOGRAM_SAVEHISTOGRAMAS):
      {
        colorHistogramSaveHistogramAs();
        break;
      }
      case(COLOR_HISTOGRAM_SAVECOOCCURRENCEMATRIXAS):
      {
        colorHistogramSaveCoOccurrenceMatrixAs();
        break;
      }
      case(COLOR_HISTOGRAM_SAVECOOCCURRENCEFREQUENCYMATRIXAS):
      {
        colorHistogramSaveCoOccurrenceFrequencyMatrixAs();
        break;
      }
      case(COLOR_PALETTE_SAVEAS):
      {
        colorPaletteSaveAs();
        break;
      }
      case(COLOR_PROMOTE_PROMOTETOPALETTED):
      {
        colorPromotePromoteToPaletted();
        break;
      }
      case(COLOR_PROMOTE_PROMOTETOGRAY8):
      {
        colorPromotePromoteToGray8();
        break;
      }
      case(COLOR_PROMOTE_PROMOTETOGRAY16):
      {
        colorPromotePromoteToGray16();
        break;
      }
      case(COLOR_PROMOTE_PROMOTETORGB24):
      {
        colorPromotePromoteToRgb24();
        break;
      }
      case(COLOR_PROMOTE_PROMOTETORGB48):
      {
        colorPromotePromoteToRgb48();
        break;
      }
      case(COLOR_REDUCE_REDUCETOBILEVELTHRESHOLD):
      {
        colorReduceReduceToBilevelThreshold();
        break;
      }
      case(COLOR_REDUCE_REDUCENUMBEROFSHADESOFGRAY):
      {
        colorReduceReduceNumberOfShadesOfGray();
        break;
      }
      case(COLOR_REDUCE_CONVERTTOGRAYSCALE):
      {
        colorReduceConvertToGrayscale();
        break;
      }
      case(COLOR_REDUCE_MEDIANCUT):
      {
        colorReduceMedianCut();
        break;
      }
      case(COLOR_REDUCE_OCTREE):
      {
        colorReduceOctree();
        break;
      }
      case(COLOR_REDUCE_UNIFORMPALETTE):
      {
        colorReduceUniformPalette();
        break;
      }
      case(COLOR_REDUCE_MAPTOARBITRARYPALETTE):
      {
        colorReduceMapToArbitraryPalette();
        break;
      }
      case(COLOR_INVERT):
      {
        colorInvert();
        break;
      }
      case(COLOR_CONVERTTOMINIMUMCOLORTYPE):
      {
        colorConvertToMinimumColorType();
        break;
      }
      case(TRANSFORMATIONS_FLIP):
      {
        transformationsFlip();
        break;
      }
      case(TRANSFORMATIONS_MIRROR):
      {
        transformationsMirror();
        break;
      }
      case(TRANSFORMATIONS_ROTATELEFT90):
      {
        transformationsRotate90Left();
        break;
      }
      case(TRANSFORMATIONS_ROTATERIGHT90):
      {
        transformationsRotate90Right();
        break;
      }
      case(TRANSFORMATIONS_ROTATE180):
      {
        transformationsRotate180();
        break;
      }
      case(TRANSFORMATIONS_CROP):
      {
        transformationsCrop();
        break;
      }
      case(TRANSFORMATIONS_SCALE):
      {
        transformationsScale();
        break;
      }
      case(TRANSFORMATIONS_SHEAR):
      {
        transformationsShear();
        break;
      }
      case(FILTERS_BLUR):
      {
        filtersBlur();
        break;
      }
      case(FILTERS_SHARPEN):
      {
        filtersSharpen();
        break;
      }
      case(FILTERS_EDGEDETECTION):
      {
        filtersEdgeDetection();
        break;
      }
      case(FILTERS_EMBOSS):
      {
        filtersEmboss();
        break;
      }
      case(FILTERS_PSYCHEDELICDISTILLATION):
      {
        filtersPsychedelicDistillation();
        break;
      }
      case(FILTERS_LITHOGRAPH):
      {
        filtersLithograph();
        break;
      }
      case(FILTERS_HORIZONTALSOBEL):
      {
        filtersHorizontalSobel();
        break;
      }
      case(FILTERS_VERTICALSOBEL):
      {
        filtersVerticalSobel();
        break;
      }
      case(FILTERS_HORIZONTALPREWITT):
      {
        filtersHorizontalPrewitt();
        break;
      }
      case(FILTERS_VERTICALPREWITT):
      {
        filtersVerticalPrewitt();
        break;
      }
      case(FILTERS_MINIMUM):
      {
        filtersMinimum();
        break;
      }
      case(FILTERS_MAXIMUM):
      {
        filtersMaximum();
        break;
      }
      case(FILTERS_MEDIAN):
      {
        filtersMedian();
        break;
      }
      case(FILTERS_MEAN):
      {
        filtersMean();
        break;
      }
      case(FILTERS_OIL):
      {
        filtersOil();
        break;
      }
      case(VIEW_ZOOMIN):
      {
        viewZoomIn();
        break;
      }
      case(VIEW_ZOOMOUT):
      {
        viewZoomOut();
        break;
      }
      case(VIEW_SETORIGINALSIZE):
      {
        viewSetOriginalSize();
        break;
      }
      case(VIEW_INTERPOLATIONTYPE_NEARESTNEIGHBOR):
      {
        viewInterpolationTypeNearestNeighbor();
        break;
      }
      case(VIEW_INTERPOLATIONTYPE_BILINEAR):
      {
        viewInterpolationTypeBilinear();
        break;
      }
      case(VIEW_INTERPOLATIONTYPE_BICUBIC):
      {
        viewInterpolationTypeBicubic();
        break;
      }
      case(HELP_ABOUT):
      {
        helpAbout();
        break;
      }
      case(HELP_SYSTEMINFORMATION):
      {
        helpSystemInformation();
        break;
      }
      default:
      {
        // error?
        break;
      }
    }
  }
}
TOP

Related Classes of net.sourceforge.jiu.apps.OperationProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.