Package com.rim.samples.device.camerademo

Source Code of com.rim.samples.device.camerademo.ImageScreen$SaveMenuItem

/*
* ImageScreen.java
*
* Copyright � 1998-2011 Research In Motion Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Note: For the sake of simplicity, this sample application may not leverage
* resource bundles and resource strings.  However, it is STRONGLY recommended
* that application developers make use of the localization features available
* within the BlackBerry development platform to ensure a seamless application
* experience across a variety of languages and geographies.  For more information
* on localizing your application, please refer to the BlackBerry Java Development
* Environment Development Guide associated with this release.
*/

package com.rim.samples.device.camerademo;

import java.io.IOException;
import java.io.OutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;

import net.rim.device.api.command.Command;
import net.rim.device.api.command.CommandHandler;
import net.rim.device.api.command.ReadOnlyCommandMetadata;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.extension.container.ZoomScreen;
import net.rim.device.api.util.StringProvider;

/**
* A screen to display an image taken with the camera demo
*/
public final class ImageScreen extends ZoomScreen {
    private static final String FILE_NAME = System
            .getProperty("fileconn.dir.photos")
            + "IMAGE";
    private static final String EXTENSION = ".bmp";

    private static int _counter; // A counter for the number of snapshots taken

    private final SaveMenuItem _saveMenuItem;

    /**
     * Creates a new ImageScreen object
     *
     * @param raw
     *            A byte array representing an image
     * @param image
     *            Image to display
     */
    public ImageScreen(final byte[] raw, final EncodedImage image) {
        super(image);

        _saveMenuItem = new SaveMenuItem("Save", raw);
        addMenuItem(_saveMenuItem);

        // Initialize the zoom screen to be zoomed all the way out
        setViewableArea(0, 0, 0);
    }

    /**
     * @see ZoomScreen#zoomedOutNearToFit()
     */
    public void zoomedOutNearToFit() {
        close();
    }

    /**
     * A MenuItem class to save the displayed image as a file
     */
    private final class SaveMenuItem extends MenuItem {
        private final byte[] _raw;

        /**
         * Creates a new SaveMenuItem
         *
         * @param text
         *            Label text for the menu item
         * @param raw
         *            Raw image data
         */
        SaveMenuItem(final String text, final byte[] raw) {
            super(new StringProvider(text), 0x230010, 0);

            _raw = raw;
            setCommand(new Command(new CommandHandler() {
                /**
                 * @see net.rim.device.api.command.CommandHandler#execute(ReadOnlyCommandMetadata,
                 *      Object)
                 */
                public void execute(final ReadOnlyCommandMetadata metadata,
                        final Object context) {
                    try {
                        // Create connection to a file that may or
                        // may not exist.
                        FileConnection file =
                                (FileConnection) Connector.open(FILE_NAME
                                        + _counter + EXTENSION);

                        // If the file exists, increment the counter and try
                        // again until we have a filename for a file that hasn't
                        // been created yet.
                        while (file.exists()) {
                            file.close();
                            ++_counter;
                            file =
                                    (FileConnection) Connector.open(FILE_NAME
                                            + _counter + EXTENSION);
                        }

                        // We know the file doesn't exist yet, so create it
                        file.create();

                        // Write the image to the file
                        final OutputStream out = file.openOutputStream();
                        out.write(_raw);

                        // Close the connections
                        out.close();
                        file.close();

                        // Inform the user where the file has been saved
                        Dialog.inform("Saved to " + FILE_NAME + _counter
                                + EXTENSION);

                        // Remove the save menu item, as the file has
                        // already been saved.
                        ImageScreen.this.removeMenuItem(_saveMenuItem);

                        // Don't close the screen directly, leave it open to
                        // allow the user to send the image.
                    } catch (final IOException ioe) {
                        CameraDemo.errorDialog("ERROR " + ioe.getClass()
                                + ":  " + ioe.getMessage());
                    }
                }
            }));
        }
    }
}
TOP

Related Classes of com.rim.samples.device.camerademo.ImageScreen$SaveMenuItem

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.