Package com.agifans.picedit.picture

Examples of com.agifans.picedit.picture.EditStatus


     */
    public void processMouseClick(Point mousePoint, int mouseButton) {
        int x = (int) mousePoint.getX();
        int y = (int) mousePoint.getY();
       
        EditStatus editStatus = application.getEditStatus();
        Picture picture = application.getPicture();

        // Is it the LEFT mouse button?
        if (mouseButton == MouseEvent.BUTTON1) {
            // Is a tool active?
            if (editStatus.getTool() != ToolType.NONE) {
                // Register the new left mouse click in the edit status.
                editStatus.addClickPoint();

                // Get the 'adjusted' X & Y position back from the edit status.
                Point pictureClickPoint = editStatus.getClickPoint();
                x = (int) pictureClickPoint.getX();
                y = (int) pictureClickPoint.getY();

                // Get the previous mouse click point for use with Line, Pen, Step.
                int previousX = 0;
                int previousY = 0;
                Point previousClickPoint = editStatus.getPreviousClickPoint();
                if (previousClickPoint != null) {
                    previousX = (int) previousClickPoint.getX();
                    previousY = (int) previousClickPoint.getY();
                }

                // If a given tool is active then update the AGI picture.
                if (editStatus.isFillActive()) {
                    picture.fill(x, y);
                    if (editStatus.isFirstClick()) {
                        picture.addPictureCode(PictureCodeType.DRAW_FILL);
                    }
                    picture.addPictureCode(PictureCodeType.FILL_POINT_DATA, x, y);
                } else if (editStatus.isLineActive()) {
                    switch (editStatus.getNumOfClicks()) {
                        case 1:
                            picture.addPictureCode(PictureCodeType.DRAW_LINE);
                            picture.addPictureCode(x, y);
                            picture.putPixel(x, y);
                            break;
                        default:
                            picture.addPictureCode(x, y);
                            picture.drawLine(previousX, previousY, x, y);
                            break;
                    }
                } else if (editStatus.isPenActive()) {
                    int disp = 0;
                    int dX = 0;
                    int dY = 0;

                    switch (editStatus.getNumOfClicks()) {
                        case 1:
                            picture.addPictureCode(PictureCodeType.DRAW_SHORT_LINE);
                            picture.addPictureCode(x, y);
                            picture.putPixel(x, y);
                            break;
                        default:
                            dX = adjustForPen(x - previousX, 6);
                            dY = adjustForPen(y - previousY, 7);
                            x = previousX + dX;
                            y = previousY + dY;

                            if (dX < 0) {
                                disp = (0x80 | ((((-1) * dX) - 0) << 4));
                            } else {
                                disp = (dX << 4);
                            }
                            if (dY < 0) {
                                disp |= (0x08 | (((-1) * dY) - 0));
                            } else {
                                disp |= dY;
                            }
                            picture.addPictureCode(PictureCodeType.RELATIVE_POINT_DATA, disp, new Point(x, y));
                            picture.drawLine(previousX, previousY, x, y);
                            editStatus.setClickPoint(new Point(x, y));
                            break;
                    }
                } else if (editStatus.isBrushActive()) {
                    int patNum = 0;

                    if (editStatus.isFirstClick()) {
                        picture.addPictureCode(PictureCodeType.SET_BRUSH_TYPE);
                        picture.addPictureCode(PictureCodeType.BRUSH_TYPE_DATA, editStatus.getBrushCode());
                        picture.addPictureCode(PictureCodeType.DRAW_BRUSH_POINT);
                    }
                    patNum = (((new java.util.Random().nextInt(255)) % 0xEE) >> 1) & 0x7F;
                    picture.plotPattern(patNum, x, y);
                    if (editStatus.getBrushTexture() == BrushTexture.SPRAY) {
                        picture.addPictureCode(PictureCodeType.BRUSH_PATTERN_DATA, patNum << 1);
                    }
                    picture.addPictureCode(PictureCodeType.BRUSH_POINT_DATA, x, y);
                } else if (editStatus.isStepActive()) {
                    int dX = 0;
                    int dY = 0;

                    switch (editStatus.getNumOfClicks()) {
                        case 1:
                            break;

                        case 2:
                            dX = x - previousX;
                            dY = y - previousY;
                            if (Math.abs(dX) > Math.abs(dY)) { /* X or Y corner */
                                y = previousY;
                                editStatus.setStepType(StepType.XCORNER);
                                picture.addPictureCode(PictureCodeType.DRAW_HORIZONTAL_STEP_LINE);
                                picture.addPictureCode(previousX, previousY);
                                picture.addPictureCode(PictureCodeType.X_POSITION_DATA, x, new Point(x, y));
                            } else {
                                x = previousX;
                                editStatus.setStepType(StepType.YCORNER);
                                picture.addPictureCode(PictureCodeType.DRAW_VERTICAL_STEP_LINE);
                                picture.addPictureCode(previousX, previousY);
                                picture.addPictureCode(PictureCodeType.Y_POSITION_DATA, y, new Point(x, y));
                            }
                            picture.drawLine(previousX, previousY, x, y);
                            editStatus.setClickPoint(new Point(x, y));
                            break;

                        default:
                            if ((editStatus.isXCornerActive() && ((editStatus.getNumOfClicks() % 2) > 0)) || (editStatus.isYCornerActive() && ((editStatus.getNumOfClicks() % 2) == 0))) {
                                // X and Y corners toggle different direction based on number of clicks. 
                                x = previousX;
                                picture.addPictureCode(PictureCodeType.Y_POSITION_DATA, y, new Point(x, y));
                            } else {
                                y = previousY;
                                picture.addPictureCode(PictureCodeType.X_POSITION_DATA, x, new Point(x, y));
                            }
                            picture.drawLine(previousX, previousY, x, y);
                            editStatus.setClickPoint(new Point(x, y));
                            break;
                    }
                }
            }
        }
       
        // Is it the RIGHT mouse button?
        if (mouseButton == MouseEvent.BUTTON3) {
            // Right-clicking on the AGI picture will clear the current tool selection.
            if ((editStatus.getNumOfClicks() == 1) && (editStatus.isStepActive())) {
                // Single point line support for the Step tool.
               
                // Get the 'adjusted' X & Y position back from the edit status.
                editStatus.addClickPoint();
                Point pictureClickPoint = editStatus.getClickPoint();
                x = (int) pictureClickPoint.getX();
                y = (int) pictureClickPoint.getY();

                // Get the previous mouse click point for use with single point Step.
                int previousX = 0;
                int previousY = 0;
                Point previousClickPoint = editStatus.getPreviousClickPoint();
                if (previousClickPoint != null) {
                    previousX = (int) previousClickPoint.getX();
                    previousY = (int) previousClickPoint.getY();
                }
               
                // The X/Y corner decision for single point is based on where right click was.
                int dX = x - previousX;
                int dY = y - previousY;
                if (Math.abs(dX) > Math.abs(dY)) { /* X or Y corner */
                    picture.addPictureCode(PictureCodeType.DRAW_HORIZONTAL_STEP_LINE);
                    picture.addPictureCode(previousX, previousY);
                } else {
                    picture.addPictureCode(PictureCodeType.DRAW_VERTICAL_STEP_LINE);
                    picture.addPictureCode(previousX, previousY);
                }
               
                picture.putPixel(previousX, previousY);
            }
            if (editStatus.getNumOfClicks() > 0) {
                // If a tool is active (i.e. has a least one click) then right click resets
                // number of clicks, which allows the user to move to new location.
                editStatus.resetTool();
            } else {
                // If no clicks performed yet then a right click sets tool to None.
                editStatus.setTool(ToolType.NONE);
            }
        }
       
        // Update active status of the position slider based on whether a line is being
        // drawn or not. It should not be possible to use the slider if line drawing is
        // enabled.
        pictureFrame.getPositionSlider().setEnabled(!editStatus.isLineBeingDrawn());
    }
View Full Code Here


   
    /**
     * Creates and configures the menu items used by PICEDIT.
     */
    private void createMenuItems() {
        EditStatus editStatus = application.getEditStatus();
       
        this.menuBar = new JMenuBar();
       
        // Get the shortcut key for this platform (e.g. "cmd" key on the Mac).
        int acceleratorKey = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
       
        // Create the File menu.
        JMenu fileMenu = new JMenu("File");
        fileMenu.setMnemonic(KeyEvent.VK_F);
        JMenuItem newMenuItem = new JMenuItem(MenuOption.NEW.getDisplayValue(), KeyEvent.VK_N);
        newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, acceleratorKey));
        JMenuItem loadMenuItem = new JMenuItem(MenuOption.OPEN.getDisplayValue(), KeyEvent.VK_O);
        loadMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, acceleratorKey));
        openRecentMenu = new JMenu(MenuOption.OPEN_RECENT.getDisplayValue());
        openRecentMenu.addMenuListener(this);
        JMenuItem saveMenuItem = new JMenuItem(MenuOption.SAVE.getDisplayValue(), KeyEvent.VK_S);
        saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, acceleratorKey));
        JMenuItem saveAsMenuItem = new JMenuItem(MenuOption.SAVE_AS.getDisplayValue(), KeyEvent.VK_A);
        JMenuItem loadBackgroundItem = new JMenuItem(MenuOption.LOAD_BACKGROUND.getDisplayValue(), KeyEvent.VK_B);
        JMenuItem quitMenuItem = new JMenuItem(MenuOption.EXIT.getDisplayValue(), KeyEvent.VK_X);
        newMenuItem.addActionListener(this);
        loadMenuItem.addActionListener(this);
        saveMenuItem.addActionListener(this);
        saveAsMenuItem.addActionListener(this);
        loadBackgroundItem.addActionListener(this);
        quitMenuItem.addActionListener(this);
        fileMenu.add(newMenuItem);
        fileMenu.add(loadMenuItem);
        fileMenu.add(openRecentMenu);
        fileMenu.addSeparator();
        fileMenu.add(saveMenuItem);
        fileMenu.add(saveAsMenuItem);
        fileMenu.addSeparator();
        fileMenu.add(loadBackgroundItem);
        fileMenu.addSeparator();
        fileMenu.add(quitMenuItem);
        fileMenu.addMenuListener(this);
        menuBar.add(fileMenu);
       
        // Create the Edit menu.
        JMenu editMenu = new JMenu("Edit");
        editMenu.setMnemonic(KeyEvent.VK_E);
        JMenuItem deleteMenuItem = new JMenuItem(MenuOption.DELETE.getDisplayValue(), KeyEvent.VK_D);
        deleteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
        deleteMenuItem.addActionListener(this);
        editMenu.add(deleteMenuItem);
        editMenu.addMenuListener(this);
        menuBar.add(editMenu);
       
        // Create the View menu.
        viewMenu = new JMenu("View");
        viewMenu.setMnemonic(KeyEvent.VK_V);
        ButtonGroup screenGroup = new ButtonGroup();
        JRadioButtonMenuItem visualMenuItem = new JRadioButtonMenuItem(MenuOption.VISUAL.getDisplayValue());
        screenGroup.add(visualMenuItem);
        visualMenuItem.setSelected(true);
        JRadioButtonMenuItem priorityMenuItem = new JRadioButtonMenuItem(MenuOption.PRIORITY.getDisplayValue());
        priorityMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
        screenGroup.add(priorityMenuItem);
        backgroundMenuItem = new JCheckBoxMenuItem(MenuOption.BACKGROUND.getDisplayValue());
        backgroundMenuItem.setMnemonic(KeyEvent.VK_G);
        backgroundMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0));
        backgroundMenuItem.setSelected(editStatus.isBackgroundEnabled());
        bandsMenuItem = new JCheckBoxMenuItem(MenuOption.BANDS.getDisplayValue());
        bandsMenuItem.setMnemonic(KeyEvent.VK_B);
        bandsMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, acceleratorKey));
        bandsMenuItem.setSelected(editStatus.isBandsOn());
        dualModeMenuItem = new JCheckBoxMenuItem(MenuOption.DUAL_MODE.getDisplayValue());
        dualModeMenuItem.setMnemonic(KeyEvent.VK_D);
        dualModeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, acceleratorKey));
        dualModeMenuItem.setSelected(editStatus.isDualModeEnabled());
        egoTestMenuItem = new JCheckBoxMenuItem(MenuOption.EGO_TEST.getDisplayValue());
        egoTestMenuItem.setMnemonic(KeyEvent.VK_E);
        egoTestMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, acceleratorKey));
        ButtonGroup fillGroup = new ButtonGroup();
        JRadioButtonMenuItem normalFillMenuItem = new JRadioButtonMenuItem(MenuOption.NORMAL_FILL.getDisplayValue());
View Full Code Here

    /**
     * Invoked when one of the menus is selected.
     */
    public void menuSelected(MenuEvent e) {
        EditStatus editStatus = application.getEditStatus();
        editStatus.setMenuActive(true);
        if (openRecentMenu.equals(e.getSource())) {
            // Open Recent sub menu was selected.
            openRecentMenu.removeAll();
            for (String pictureName : application.getRecentPictures()) {
                if (!pictureName.equals("")) {
View Full Code Here

            // menu item, then uncheck it.
            if (event.getSource() instanceof JCheckBoxMenuItem) {
                ((JCheckBoxMenuItem)event.getSource()).setState(false);
            }
        }
        EditStatus editStatus = application.getEditStatus();
        editStatus.setMenuActive(false);
    }
View Full Code Here

     * @return true if the MenuOption was successfully processed.
     */
    private boolean processMenuSelection(MenuOption menuOption) {
        boolean success = true;
       
        EditStatus editStatus = application.getEditStatus();
        Picture picture = application.getPicture();
       
        switch (menuOption) {
            case NEW:
                newPicture();
                break;

            case OPEN:
                if (fileChooser.showOpenDialog(this.application) == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = fileChooser.getSelectedFile();
                    if (selectedFile != null) {
                        if ((!application.hasVisiblePictureFrame()) ||
                            (application.getPicture().getPictureCodes().size() > 1)) {
                            // If there are no picture frames, or if the current picture is not empty
                            // then launch a new picture frame.
                            newPicture();
                        } else {
                            // Otherwise reuse the old frame. We need to clear off the background image
                            // since the EditStatus clear call doesn't handle this.
                            application.getPicturePanel().setBackgroundImage(null);
                        }
                        application.getPicture().loadPicture(selectedFile);
                        application.updateRecentPictures(selectedFile);
                    }
                }
                break;

            case SAVE_AS:
            case SAVE:
                if ((editStatus.getPictureFile() == null) || MenuOption.SAVE_AS.equals(menuOption)) {
                    if (fileChooser.showSaveDialog(this.application) == JFileChooser.APPROVE_OPTION) {
                        File selectedFile = fileChooser.getSelectedFile();
                        if (selectedFile != null) {
                            application.getPicture().savePicture(selectedFile);
                            application.updateRecentPictures(selectedFile);
                        }
                    }
                } else {
                    application.getPicture().savePicture(editStatus.getPictureFile());
                    application.updateRecentPictures(editStatus.getPictureFile());
                }
                break;

            case LOAD_BACKGROUND:
                if (fileChooser.showOpenDialog(this.application) == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = fileChooser.getSelectedFile();
                    if (selectedFile != null) {
                        loadBackgroundImage(selectedFile);
                    }
                }
                success = editStatus.isBackgroundEnabled();
                backgroundMenuItem.setSelected(success);
                break;
               
            case EXIT:
                Object[] quitOptions = { "Quit", "Cancel" };
                int quitAnswer = JOptionPane.showOptionDialog(application, "Are you sure you want to Quit?", "", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null, quitOptions, quitOptions[0]);
                if (quitAnswer == JOptionPane.YES_OPTION) {
                    application.savePreferences();
                    System.exit(0);
                }
                break;

            case ABOUT:
                showAboutMessage();
                break;

            case HELP:
                showHelp();
                break;
           
            case ZOOM_IN:
                if (editStatus.getZoomFactor() < 5) {
                    application.resizeScreen(editStatus.getZoomFactor() + 1);
                }
                break;
               
            case ZOOM_OUT:
                if (editStatus.getZoomFactor() > 1) {
                    application.resizeScreen(editStatus.getZoomFactor() - 1);
                }
                break;
               
            case ZOOM_X1:
                application.resizeScreen(1);
                break;

            case ZOOM_X2:
                application.resizeScreen(2);
                break;

            case ZOOM_X3:
                application.resizeScreen(3);
                break;

            case ZOOM_X4:
                application.resizeScreen(4);
                break;

            case ZOOM_X5:
                application.resizeScreen(5);
                break;

            case BACKGROUND:
                processToggleBackground();
                break;

            case BANDS:
                editStatus.setBandsOn(!editStatus.isBandsOn());
                break;

            case DUAL_MODE:
                editStatus.setDualModeEnabled(!editStatus.isDualModeEnabled());
                break;
               
            case EGO_TEST:
                editStatus.setEgoTestEnabled(!editStatus.isEgoTestEnabled());
                break;
               
            case NORMAL_FILL:
                editStatus.setFillType(FillType.NORMAL);
                picture.clearPictureCache();
                picture.drawPicture();
                break;
           
            case TRANSPARENT_FILL:
                editStatus.setFillType(FillType.TRANSPARENT);
                picture.clearPictureCache();
                picture.drawPicture();
                break;
               
            case NO_FILL:
                editStatus.setFillType(FillType.NONE);
                picture.clearPictureCache();
                picture.drawPicture();
                break;
               
            case LINE:
                if (application.hasVisiblePictureFrame() && !picture.getCurrentPictureCode().isDataCode()) {
                    processToolSelect(ToolType.LINE);
                }
                break;
               
            case PEN:
                if (application.hasVisiblePictureFrame() && !picture.getCurrentPictureCode().isDataCode()) {
                    processToolSelect(ToolType.SHORTLINE);
                }
                break;
               
            case STEP:
                if (application.hasVisiblePictureFrame() && !picture.getCurrentPictureCode().isDataCode()) {
                    processToolSelect(ToolType.STEPLINE);
                }
                break;
           
            case FILL:
                if (application.hasVisiblePictureFrame() && !picture.getCurrentPictureCode().isDataCode()) {
                    processToolSelect(ToolType.FILL);
                }
                break;
           
            case BRUSH:
                if (application.hasVisiblePictureFrame() && !picture.getCurrentPictureCode().isDataCode()) {
                    processToolSelect(ToolType.BRUSH);
                    application.getEditStatus().setBrushShape(BrushShape.CIRCLE);
                    application.getEditStatus().setBrushTexture(BrushTexture.SOLID);
                    application.getEditStatus().setBrushSize(0);
                }
                break;
               
            case AIRBRUSH:
                if (application.hasVisiblePictureFrame() && !picture.getCurrentPictureCode().isDataCode()) {
                    processToolSelect(ToolType.AIRBRUSH);
                    application.getEditStatus().setBrushShape(BrushShape.CIRCLE);
                    application.getEditStatus().setBrushTexture(BrushTexture.SPRAY);
                    application.getEditStatus().setBrushSize(0);
                }
                break;
           
            case START:
                picture.moveToStartOfPictureBuffer();
                break;
               
            case PREV:
                picture.moveBackOnePictureCode();
                break;
               
            case PREV_TOOL:
                picture.moveBackOnePictureAction();
                break;
               
            case NEXT:
                picture.moveForwardOnePictureCode();
                break;
               
            case NEXT_TOOL:
                picture.moveForwardOnePictureAction();
                break;
               
            case END:
                picture.moveToEndOfPictureBuffer();
                break;
               
            case GOTO:
                processEnterPosition();
                break;
               
            case DELETE:
                picture.deleteSelectedPictureCodes();
                break;
               
            case VISUAL:
                if (editStatus.isPriorityShowing()) {
                    processTogglePriorityScreen();
                    recreateScreenMenuItems();
                }
                break;
               
            case PRIORITY:
                if (!editStatus.isPriorityShowing()) {
                    processTogglePriorityScreen();
                    recreateScreenMenuItems();
                }
                break;
        }
View Full Code Here

     * is the current picture coordinates. This is useful for situations where the
     * current picture coordinates have been restricted due to the bounds of the
     * picture or the bounds of the drawing tool (e.g. Pen or Step).
     */
    private void moveMouseToPictureCoordinates() {
        EditStatus editStatus = application.getEditStatus();
       
        // Get current picture coordinates.
        int x = editStatus.getMouseX();
        int y = editStatus.getMouseY();
       
        // Adjust the picture coordinates back to screen coordinates.
        if (editStatus.getPictureType().equals(PictureType.AGI)) {
            x = ((x << 1) * editStatus.getZoomFactor()) + diffX;
        } else {
            x = (x * editStatus.getZoomFactor()) + diffX;
        }
        y = (y * editStatus.getZoomFactor()) + diffY;
     
        // Use robot to move the mouse cursor to the calculated position.
        robot.mouseMove(x, y);
    }
View Full Code Here

    /**
     * Toggles the display of the priority screen.
     */
    public void processTogglePriorityScreen() {
        EditStatus editStatus = application.getEditStatus();
        editStatus.toggleScreen();
        editStatus.setTool(ToolType.NONE);
    }
View Full Code Here

    /**
     * Processes toggling of the display of the background tracking image.
     */
    protected void processToggleBackground() {
        EditStatus editStatus = application.getEditStatus();
        editStatus.setBackgroundEnabled(!editStatus.isBackgroundEnabled());
        application.getMenu().getBackgroundMenuItem().setSelected(editStatus.isBackgroundEnabled());
    }
View Full Code Here

     * Loads a background image from the given File.
     *
     * @param imageFile the image File to load for the background image.
     */
    protected void loadBackgroundImage(File imageFile) {
        EditStatus editStatus = application.getEditStatus();
        PicturePanel picturePanel = application.getPicturePanel();
       
        try {
            Image image = ImageIO.read(imageFile);
            if (image != null) {
                picturePanel.setBackgroundImage(image);
                editStatus.setBackgroundEnabled(true);
            } else {
                picturePanel.setBackgroundImage(null);
                editStatus.setBackgroundEnabled(false);
            }
        } catch (IOException e) {
            picturePanel.setBackgroundImage(null);
            editStatus.setBackgroundEnabled(false);
        }
       
        // This will cause the offscreen image to be recreated, which will remove
        // any rendering artifacts of the previous background.
        application.getPicturePanel().clearOffscreenGraphics();
View Full Code Here

   
    /**
     * Recreates the menu items for selecting the picture screen (visual/priority).
     */
    private void recreateScreenMenuItems() {
        EditStatus editStatus = application.getEditStatus();
       
        // Remove the previously created menu items.
        viewMenu.remove(0);
        viewMenu.remove(0);
       
        // Create the new menu items for the visual and priority screen selection.
        JRadioButtonMenuItem visualMenuItem = new JRadioButtonMenuItem(MenuOption.VISUAL.getDisplayValue());
        JRadioButtonMenuItem priorityMenuItem = new JRadioButtonMenuItem(MenuOption.PRIORITY.getDisplayValue());
        if (!editStatus.isPriorityShowing()) {
            visualMenuItem.setSelected(true);
            priorityMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
        } else {
            priorityMenuItem.setSelected(true);
            visualMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
View Full Code Here

TOP

Related Classes of com.agifans.picedit.picture.EditStatus

Copyright © 2018 www.massapicom. 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.