Package com.rim.samples.device.ui.menudemo

Source Code of com.rim.samples.device.ui.menudemo.MenuDemo

/*
* MenuDemo.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.ui.menudemo;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.FontFamily;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.XYEdges;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.component.ObjectChoiceField;
import net.rim.device.api.ui.component.RadioButtonField;
import net.rim.device.api.ui.component.RadioButtonGroup;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.decor.Background;
import net.rim.device.api.ui.decor.BackgroundFactory;
import net.rim.device.api.ui.decor.Border;
import net.rim.device.api.ui.decor.BorderFactory;
import net.rim.device.api.ui.image.Image;
import net.rim.device.api.ui.image.ImageFactory;
import net.rim.device.api.ui.menu.SubMenu;
import net.rim.device.api.util.StringProvider;

/**
* This sample application demonstrates the ability to customize the background,
* border and font of a menu, add an image to a menu item and create sub menus.
*/
public class MenuDemo extends UiApplication {
    /**
     * Entry point for application
     *
     * @param args
     *            Command line arguments (not used)
     */
    public static void main(final String[] args) {
        // Create a new instance of the application and make the currently
        // running thread the application's event dispatch thread.
        final MenuDemo app = new MenuDemo();
        app.enterEventDispatcher();
    }

    /**
     * Creates a new MenuDemo object
     */
    public MenuDemo() {
        pushScreen(new MenuDemoScreen());
    }

    /**
     * MainScreen class for the MenuDemo application
     */
    static class MenuDemoScreen extends MainScreen implements
            FieldChangeListener {
        private final Background _menuBackground;
        private final Border _menuBorder;
        private Font _menuFont;
        private final FontFamily[] _fontFamilies;
        private final RadioButtonField _radioButtonImage;
        private final RadioButtonField _radioButtonSubMenu;
        private final RadioButtonField _radioButtonDecor;
        private final ImageMenuItem _imageMenuItem;
        private final ObjectChoiceField _fontChoiceField;
        private final SubMenu _phoneSubMenu;

        // Creates a new MenuDemoScreen object
        MenuDemoScreen() {
            setTitle("Menu Demo");
            add(new LabelField(
                    "Press the menu key to view the customized menu."));
            add(new SeparatorField());

            // Initialize font family and menu font
            _fontFamilies = FontFamily.getFontFamilies();
            _menuFont = _fontFamilies[0].getFont(FontFamily.SCALABLE_FONT, 20);

            // Initialize radio buttons for menu customization and add to screen
            final RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
            _radioButtonImage =
                    new RadioButtonField("Menu with image", radioButtonGroup,
                            true);
            _radioButtonSubMenu =
                    new RadioButtonField("Menu with sub menu",
                            radioButtonGroup, false);
            _radioButtonDecor =
                    new RadioButtonField(
                            "Menu with custom border, background and font",
                            radioButtonGroup, false);
            _radioButtonDecor.setChangeListener(this);
            add(_radioButtonImage);
            add(_radioButtonSubMenu);
            add(_radioButtonDecor);

            add(new SeparatorField());

            // Initialize choice field for font selection and add to screen
            _fontChoiceField =
                    new ObjectChoiceField("Select a font:", _fontFamilies, 0,
                            Field.FIELD_HCENTER);
            _fontChoiceField.setEditable(false);
            _fontChoiceField.setChangeListener(this);
            add(_fontChoiceField);

            // Create an ImageMenuItem
            _imageMenuItem = new ImageMenuItem();

            // Initialize menu background
            _menuBackground =
                    BackgroundFactory.createLinearGradientBackground(
                            Color.BLUE, Color.BLUE, Color.LIGHTBLUE,
                            Color.LIGHTBLUE);

            // Initialize menu border
            final XYEdges thickPadding = new XYEdges(10, 10, 10, 10);
            final XYEdges colors =
                    new XYEdges(Color.DARKBLUE, Color.DARKBLUE, Color.DARKBLUE,
                            Color.DARKBLUE);
            _menuBorder =
                    BorderFactory.createBevelBorder(thickPadding, colors,
                            colors);

            // Create an array of demo menu items
            final DemoMenuItem[] demoMenuItems = new DemoMenuItem[3];
            demoMenuItems[0] = new DemoMenuItem("Hold", 100, 1);
            demoMenuItems[1] = new DemoMenuItem("Add Participant", 200, 2);
            demoMenuItems[2] = new DemoMenuItem("Volume", 300, 3);

            // Create a SubMenu populated with the array of menu items
            _phoneSubMenu = new SubMenu(demoMenuItems, "Phone", 200, 2);
        }

        /**
         * The class is strictly meant to demonstrate the SubMenu API.
         */
        static final class DemoMenuItem extends MenuItem {
            /**
             * Creates a new DemoMenuItem object
             */
            DemoMenuItem(final String text, final int ordinal,
                    final int priority) {
                super(new StringProvider(text), ordinal, priority);
            }
        }

        /**
         * @see FieldChangeListener#fieldChanged(Field, int)
         */
        public void fieldChanged(final Field field, final int context) {
            if (field instanceof ObjectChoiceField) {
                // Get the font selected in the ObjectChoiceField and set the
                // menu font to match what is selected.
                final int selectedIndex =
                        ((ObjectChoiceField) field).getSelectedIndex();

                _menuFont =
                        _fontFamilies[selectedIndex].getFont(
                                FontFamily.SCALABLE_FONT, 20);
            }
            if (field == _radioButtonDecor) {
                if (_radioButtonDecor.isSelected()) {
                    _fontChoiceField.setEditable(true);
                } else {
                    _fontChoiceField.setEditable(false);
                }
            }
        }

        /**
         * @see MainScreen#makeMenu(Menu, int)
         */
        protected void makeMenu(final Menu menu, final int context) {
            if (_radioButtonImage.isSelected()) {
                // Add the image menu item to the menu
                menu.add(_imageMenuItem);
            } else if (_radioButtonDecor.isSelected()) {
                // Set the background, border, and font for the menu
                menu.setBackground(_menuBackground);
                menu.setBorder(_menuBorder);
                menu.setFont(_menuFont);
            } else if (_radioButtonSubMenu.isSelected()) {
                // Add the phone sub menu to the menu
                menu.add(_phoneSubMenu);
            }

            super.makeMenu(menu, context);
        }

        /**
         * @see MainScreen#onSavePrompt()
         */
        public boolean onSavePrompt() {
            // Suppress the save dialog
            return true;
        }

        /**
         * Concrete implementation of abstract class MenuItem
         */
        class ImageMenuItem extends MenuItem {
            /**
             * Creates a new MenuDemoMenuItem object
             */
            ImageMenuItem() {
                super(new StringProvider("Image menu item"), 0x230100, 0);

                // Create Image object from project resource
                final Bitmap bitmap = Bitmap.getBitmapResource("img.png");
                final Image image = ImageFactory.createImage(bitmap);

                // Set image as this menu item's icon
                setIcon(image);
            }
        }
    }
}
TOP

Related Classes of com.rim.samples.device.ui.menudemo.MenuDemo

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.