Package com.bramosystems.oss.player.showcase.client

Source Code of com.bramosystems.oss.player.showcase.client.StageController$StageBinder

/*
*  Copyright 2010 Sikiru.
*
*  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.
*  under the License.
*/
package com.bramosystems.oss.player.showcase.client;

import com.bramosystems.oss.player.core.client.*;
import com.bramosystems.oss.player.core.client.geom.MatrixSupport;
import com.bramosystems.oss.player.core.client.geom.TransformationMatrix;
import com.bramosystems.oss.player.core.client.playlist.MRL;
import com.bramosystems.oss.player.core.client.skin.CustomPlayerControl;
import com.bramosystems.oss.player.core.client.ui.CoreConfigParameter;
import com.bramosystems.oss.player.core.client.ui.QuickTimePlayer;
import com.bramosystems.oss.player.core.client.ui.QuickTimePlayer.Scale;
import com.bramosystems.oss.player.core.event.client.*;
import com.bramosystems.oss.player.showcase.client.event.PlaylistChangeEvent;
import com.bramosystems.oss.player.showcase.client.event.PlaylistChangeHandler;
import com.bramosystems.oss.player.showcase.client.res.Bundle;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ExternalTextResource;
import com.google.gwt.resources.client.ResourceCallback;
import com.google.gwt.resources.client.ResourceException;
import com.google.gwt.resources.client.TextResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.uibinder.client.UiTemplate;
import com.google.gwt.user.client.ui.*;
import java.util.ArrayList;

/**
*
* @author Sikiru
*/
public class StageController extends Composite implements ValueChangeHandler<String> { // PluginChangeHandler, PlayerOptionsChangeHandler

    private final String LOG_SEPARATOR = "---------------------------------", PLAYER_WIDTH = "100%", PLAYER_HEIGHT = "300px";
    private BrowserInfo info;
    private HTML docPane;
    private AppOptions loadedOption;
    PlayerStage playerStage;

    @SuppressWarnings("LeakingThisInConstructor")
    public StageController() {
        initWidget(sb.createAndBindUi(this));
        info = new BrowserInfo();
        docPane = new HTML();
        loadedOption = AppOptions.home;
        playerStage = new PlayerStage();
    }

    /*
     @Override
     public void onPlaylistChanged(PlaylistChangeEvent pevt) {
     switch (loadedOption) {
     case widget:
     if (player != null) {
     if (pevt.isAdded()) {
     if (player instanceof PlaylistSupport) {
     ((PlaylistSupport) player).addToPlaylist(pevt.getPlaylistItem());
     }
     } else {
     if (player instanceof PlaylistSupport) {
     ((PlaylistSupport) player).removeFromPlaylist(pevt.getIndex());
     }
     }
     }
     }
     }
     */
    @Override
    public void onValueChange(ValueChangeEvent<String> event) {
        loadedOption = AppOptions.home;
        try {
            loadedOption = AppOptions.valueOf(event.getValue());
        } catch (Exception e) {
        }

        switch (loadedOption) {
            case home:
                loadDoc(Bundle.bundle.home());
                break;
            case notices:
                loadDoc(Bundle.bundle.notices());
                break;
            case plugins:
            case mimes:
                loadInfo();
                break;
            case widget:
                playerStage.doPlayerWidget(true);
                panel.setWidget(playerStage);
                break;
            case matrix:
                playerStage.doPlayerWidget(false);
                panel.setWidget(playerStage);
        }
        title.setText(loadedOption.toString());
    }

    private void loadDoc(ExternalTextResource res) {
        panel.setWidget(docPane);
        try {
            res.getText(new ResourceCallback<TextResource>() {
                @Override
                public void onError(ResourceException e) {
                    docPane.setHTML("<h2>Resource loading failed!</h2><br/>"
                            + e.getMessage());
                }

                @Override
                public void onSuccess(TextResource resource) {
                    docPane.setHTML(resource.getText());
                }
            });
        } catch (ResourceException ex) {
            docPane.setHTML("<h2>Resource loading failed!</h2><br/>"
                    + ex.getMessage());
        }
    }

    private void loadInfo() {
        panel.setWidget(info);
        info.update(loadedOption);
    }

    @UiTemplate("xml/Stage.ui.xml")
    interface StageBinder extends UiBinder<Widget, StageController> {
    }

    @UiTemplate("xml/PlayerStage.ui.xml")
    interface PlayerStageBinder extends UiBinder<Widget, PlayerStage> {
    }

    private enum _Option {

        Scale, Translate, Rotate, Skew;
    }
    StageBinder sb = GWT.create(StageBinder.class);
    PlayerStageBinder psb = GWT.create(PlayerStageBinder.class);
    @UiField SimplePanel panel;
    @UiField Label title;

    class PlayerStage extends Composite implements HasMediaMessageHandlers, HasValueChangeHandlers<String> {

        private AbstractMediaPlayer player;
        private TransformationMatrix matrixCache;

        public PlayerStage() {
            initWidget(psb.createAndBindUi(this));
            controls.setValue(true, false);
            repeatOff.setValue(true, false);
            fillXformBoxes(_Option.Rotate);
            fillXformBoxes(_Option.Scale);
            fillXformBoxes(_Option.Skew);
            fillXformBoxes(_Option.Translate);

            providers.addItem(" ");
            for (String nms : PlayerUtil.getPlayerProviderNames()) {
                providers.addItem(nms);
            }
            providers.addChangeHandler(new ChangeHandler() {
                @Override
                public void onChange(ChangeEvent event) {
                    String prov = providers.getValue(providers.getSelectedIndex());
                    players.clear();
                    if (!prov.isEmpty()) {
                        for (String pp : PlayerUtil.getPlayerNames(prov)) {
                            if (loadedOption.equals(AppOptions.matrix)) {
                                PlayerInfo pi = PlayerUtil.getPlayerInfo(prov, pp);
                                if (pi.isHasMatrixSupport()) {
                                    players.addItem(pp);
                                }
                            } else {
                                players.addItem(pp);
                            }
                        }
                        ValueChangeEvent.fire(PlayerStage.this, prov);
                    }
                }
            });
        }

        @Override
        public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
            return addHandler(handler, ValueChangeEvent.getType());
        }

        @Override
        public HandlerRegistration addDebugHandler(DebugHandler handler) {
            return addHandler(handler, DebugEvent.TYPE);
        }

        @Override
        public HandlerRegistration addMediaInfoHandler(MediaInfoHandler handler) {
            throw new UnsupportedOperationException();
        }

        void doPlayerWidget(boolean pw) {
            providers.setItemSelected(0, true);
            players.clear();
            xforms.setVisible(!pw);
            _panel.setWidget(null);
            controlPanel.setWidget(null);
        }

        @UiHandler("clearForms")
        void onClearTransforms(ClickEvent event) {
            if (player != null && player instanceof MatrixSupport) {
                ((MatrixSupport) player).setMatrix(matrixCache);
            }
            resetXformBoxes();
        }

        private void resetXformBoxes() {
            ListBox box = null;
            for (_Option option : _Option.values()) {
                switch (option) {
                    case Scale:
                        box = scale;
                        box.setSelectedIndex(1);
                        break;
                    case Rotate:
                        box = rotate;
                        box.setSelectedIndex(5);
                        break;
                    case Skew:
                        box = skew;
                        box.setSelectedIndex(2);
                        break;
                    case Translate:
                        box = xlate;
                        box.setSelectedIndex(3);
                        break;
                }
            }
        }

        private void fillXformBoxes(final _Option option) {
            ListBox box = null;

            switch (option) {
                case Scale:
                    box = scale;
                    box.addItem("0.5x", "0.5");
                    box.addItem("1.0x", "1.0");
                    box.addItem("1.5x", "1.5");
                    box.addItem("2.0x", "2.0");
                    box.setSelectedIndex(1);
                    break;
                case Rotate:
                    box = rotate;
                    box.addItem("-90 deg", "-90");
                    box.addItem("-45 deg", "-45");
                    box.addItem("-30 deg", "-30");
                    box.addItem("-15 deg", "-15");
                    box.addItem("-10 deg", "-10");
                    box.addItem("0 deg", "0");
                    box.addItem("10 deg", "10");
                    box.addItem("15 deg", "15");
                    box.addItem("30 deg", "30");
                    box.addItem("45 deg", "45");
                    box.addItem("90 deg", "90");
                    box.setSelectedIndex(5);
                    break;
                case Skew:
                    box = skew;
                    box.addItem("-10 deg", "-10");
                    box.addItem("-5 deg", "-5");
                    box.addItem("0 deg", "0");
                    box.addItem("5 deg", "5");
                    box.addItem("10 deg", "10");
//                box.addItem("15 deg", "15");
//                box.addItem("25 deg", "25");
//                box.addItem("30 deg", "30");
//                box.addItem("45 deg", "45");
                    box.setSelectedIndex(2);
                    break;
                case Translate:
                    box = xlate;
                    box.addItem("-50, -50", "-50");
                    box.addItem("-30, -30", "-30");
                    box.addItem("-20, -20", "-20");
                    box.addItem("0, 0", "0");
                    box.addItem("20, 20", "20");
                    box.addItem("30, 30", "30");
                    box.addItem("50, 50", "50");
                    box.setSelectedIndex(3);
                    break;
            }
            box.addChangeHandler(new ChangeHandler() {
                @Override
                public void onChange(ChangeEvent event) {
                    ListBox b = (ListBox) event.getSource();
                    doTransform(option, Double.parseDouble(b.getValue(b.getSelectedIndex())));
                }
            });
        }

        private void doTransform(_Option option, double value) {
            if (player != null && player instanceof MatrixSupport) {
                TransformationMatrix matrix = ((MatrixSupport) player).getMatrix();

                switch (option) {
                    case Rotate:
                        matrix.rotate(Math.toRadians(value));
                        break;
                    case Scale:
                        matrix.scale(value, value);
                        break;
                    case Skew:
                        matrix.skew(Math.toRadians(value),
                                Math.toRadians(value));
                        break;
                    case Translate:
                        matrix.translate(value, value);
                }
                ((MatrixSupport) player).setMatrix(matrix);
            }
        }

        @UiHandler("loadButton")
        void loadPlayer(ClickEvent ce) {
            try {
                _panel.setWidget(null);
                DebugEvent.fire(this, DebugEvent.MessageType.Info, LOG_SEPARATOR);

                PlayerInfo pi = PlayerUtil.getPlayerInfo(providers.getValue(providers.getSelectedIndex()),
                        players.getValue(players.getSelectedIndex()));

                ArrayList<MRL> playlist = PlaylistPane.singleton.getEntries();
                DebugEvent.fire(this, DebugEvent.MessageType.Info, "Loading player : " + pi.getPlayerName());
                DebugEvent.fire(this, DebugEvent.MessageType.Info, LOG_SEPARATOR);
                player = PlayerUtil.getPlayer(pi, playlist.get(0).getNextResource(true), autoplay.getValue(), PLAYER_HEIGHT, PLAYER_WIDTH);
                //                   player.setWidth(PLAYER_WIDTH);
                player.setControllerVisible(controls.getValue());
                player.setResizeToVideoSize(resizeToVideo.getValue());
                if (player instanceof PlaylistSupport) {
                    ((PlaylistSupport) player).setShuffleEnabled(shuffle.getValue());
                }

//            player.setConfigParameter(DefaultConfigParameter.BackgroundColor, "#ffffff");
                player.setConfigParameter(CoreConfigParameter.QTScale, QuickTimePlayer.Scale.ToFit);
//            player.setRepeatMode(playerOptions.getRepeatMode());

                player.addDebugHandler(new DebugHandler() {
                    @Override
                    public void onDebug(DebugEvent event) {
                        fireEvent(event);
                    }
                });
                player.addMediaInfoHandler(new MediaInfoHandler() {
                    @Override
                    public void onMediaInfoAvailable(MediaInfoEvent event) {
                        if (player instanceof MatrixSupport) {
                            matrixCache = ((MatrixSupport) player).getMatrix();
                        }
                    }
                });

                if ((playlist.size() > 1) && (player instanceof PlaylistSupport)) {
                    for (int i = 1; i < playlist.size(); i++) {
                        ((PlaylistSupport) player).addToPlaylist(playlist.get(i));
                    }
                }

                title.setText(loadedOption.toString() + " - " + pi.toString());
                _panel.setWidget(player);

                if (custom.getValue()) {
                    CustomPlayerControl cc = new CustomPlayerControl(player);
                    controlPanel.setWidget(cc);
                }
                controlPanel.setVisible(custom.getValue());
            } catch (PluginVersionException ex) {
                _panel.setWidget(PlayerUtil.getMissingPluginNotice(ex.getPlugin(), ex.getRequiredVersion()));
            } catch (PluginNotFoundException ex) {
                _panel.setWidget(PlayerUtil.getMissingPluginNotice(ex.getPlugin()));
            }
        }

        @UiHandler("controls")
        void onControlsChange(ValueChangeEvent<Boolean> event) {
            if (player != null) {
                player.setControllerVisible(event.getValue());
            }
        }

        @UiHandler("resizeToVideo")
        void onResizeChange(ValueChangeEvent<Boolean> event) {
            if (player != null) {
                player.setResizeToVideoSize(event.getValue());
            }
        }

        @UiHandler("shuffle")
        void onShuffle(ValueChangeEvent<Boolean> event) {
            if (player != null && player instanceof PlaylistSupport) {
                ((PlaylistSupport) player).setShuffleEnabled(event.getValue());
            }
        }

        @UiHandler("repeatOff")
        void onRepeatOff(ValueChangeEvent<Boolean> event) {
            if (player != null) {
                player.setRepeatMode(RepeatMode.REPEAT_OFF);
            }
        }

        @UiHandler("repeatOne")
        void onRepeatOne(ValueChangeEvent<Boolean> event) {
            if (player != null) {
                player.setRepeatMode(RepeatMode.REPEAT_ONE);
            }
        }

        @UiHandler("repeatAll")
        void onRepeatAll(ValueChangeEvent<Boolean> event) {
            if (player != null) {
                player.setRepeatMode(RepeatMode.REPEAT_ALL);
            }
        }
        @UiField CheckBox controls, resizeToVideo, shuffle, autoplay, custom;
        @UiField RadioButton repeatOff, repeatOne, repeatAll;
        @UiField ListBox providers, players, xlate, rotate, skew, scale;
        @UiField Button loadButton, clearForms;
        @UiField Widget control, xforms;
        @UiField SimplePanel _panel, controlPanel;
    }
}
TOP

Related Classes of com.bramosystems.oss.player.showcase.client.StageController$StageBinder

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.