/* * Copyright 2011 Vancouver Ywebb Consulting Ltd * * 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. */ package ywb.c.page; import org.adamtacy.client.ui.effects.core.NMorphStyle; import org.adamtacy.client.ui.effects.events.EffectCompletedEvent; import org.adamtacy.client.ui.effects.events.EffectCompletedHandler; import org.adamtacy.client.ui.effects.impl.Fade; import ywb.c.FxUtil; import ywb.c.UiResources; import ywb.c.di.Context; import ywb.c.di.UiComponents; import ywb.c.di.UiGinjector; import ywb.c.event.AzNameEvent; import ywb.c.event.AzNameHandler; import ywb.c.event.BackButtonEvent; import ywb.c.event.FeelLuckyEvent; import ywb.c.event.MenuOptionEvent; import ywb.c.event.MenuOptionHandler; import ywb.c.event.RedcarpetOptionEvent; import ywb.c.event.RedcarpetOptionHandler; import ywb.c.event.SearchEvent; import ywb.c.event.SearchHandler; import ywb.c.event.SwimwearEvent; import ywb.c.event.WallpaperEvent; import ywb.c.event.BackButtonEvent.Type; import ywb.c.model.Continent; import ywb.c.model.Key; import ywb.c.ui.ImageButton; import com.google.gwt.event.dom.client.MouseDownEvent; import com.google.gwt.event.dom.client.MouseDownHandler; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.Widget; public class TopMenu extends PopupPanel { final static UiResources RES = UiResources.INSTANCE; private final static UiComponents UI = UiGinjector.INSTANCE.getUiComponents(); private static int TITLE_POSITION = 0; private final ImageButton hBackImg; private final ImageButton hBackTitle; private final TopLabelPanel hTitle; private boolean isHidden = true; enum BackBtnState { ENABLED, DISABLED } private Command backCommand; private BackBtnState backBtnState = BackBtnState.ENABLED; private Context ctx; public TopMenu(Context ctx_) { this.ctx = ctx_; setStyleName("yTopMenu"); setSize("1024px", "70px"); setPopupPosition(0, 0); FlexTable content = new FlexTable(); content.setStyleName("content"); setWidget(content); hBackImg = new ImageButton(RES.hBackImg()); hBackTitle = new ImageButton(RES.hBackFront()); hTitle = new TopLabelPanel(); registerBackEvent(); content.setWidget(0, 0, hBackImg); content.setWidget(0, 1, hBackTitle); content.setWidget(0, 2, hTitle); content.getCellFormatter().setWidth(0, 0, "80px"); content.getCellFormatter().setWidth(0, 1, "320px"); content.getCellFormatter().setWidth(0, 2, "624px"); content.getCellFormatter().setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_LEFT); content.getCellFormatter().setHorizontalAlignment(0, 1, HasHorizontalAlignment.ALIGN_LEFT); content.getCellFormatter().setHorizontalAlignment(0, 2, HasHorizontalAlignment.ALIGN_LEFT); // setBackCommand(getBack2Main()); // Fade eff = new Fade(hBackImg.getElement()); // eff.setDuration(0); // eff.play(); // Fade eff2 = new Fade(hBackTitle.getElement()); // eff2.setDuration(0); // eff2.play(); // FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth(), 0, hBackImg.getElement(), null, 30, 100).play(); // FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), // null, 30, 100).play(); getElement().getStyle().setOpacity(0); show(); getBack2Main().execute(); // isHidden = false; // listenEvents2(); } public Command getBackCommand() { return backCommand; } public void setBackCommand(Command backCommand) { this.backCommand = backCommand; } public void doShow() { if (!isHidden) { return; } setPopupPosition(0, 0); NMorphStyle eff = FxUtil.doShow(this, null); eff.setDuration(2); eff.play(); isHidden = false; } public void doHide() { if (isHidden) { return; } NMorphStyle eff = FxUtil.doHide(this, new Command() { @Override public void execute() { setPopupPosition(-2000, -2000); } }); eff.setDuration(2); eff.play(); isHidden = true; } private void listenEvents2() { ctx.getEventBus().addHandler(AzNameEvent.TYPE, new AzNameHandler() { @Override public void onExecute(AzNameEvent event) { // TODO Auto-generated method stub } }); } public void setContinent(Continent c) { if (c != null) { setBackBtnState(BackBtnState.ENABLED); hTitle.setText(c.getName()); hBackTitle.setResource(RES.hBackFront()); hBackImg.setResource(RES.hBackImg()); setBackCommand(getBack2Main()); } // else { // hTitle.setText("Nachalna stranica"); // // hBackTitle.setResource(RES.hBackFront()); // hBackImg.setResource(RES.hBackImg()); // setBackCommand(getBack2Main()); // // } } public void setCountry(String c) { hTitle.setText(c); slideInButton(hTitle, null, null); hBackTitle.setResource(RES.hBackFront()); hBackImg.setResource(RES.hBackImg()); } public void animateBackBtn() { setBackBtnState(BackBtnState.ENABLED); hBackTitle.setResource(RES.hBackFront()); hBackImg.setResource(RES.hBackImg()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth(), 0, hBackImg.getElement(), null, 30, 100).play(); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), null, 30, 100).play(); } private void listenEvents() { ctx.getEventBus().addHandler(MenuOptionEvent.TYPE, new MenuOptionHandler() { @Override public void onExecute(final MenuOptionEvent e) { setBackCommand(getBack2Main()); slideOutButton(hTitle, null, new Command() { @Override public void execute() { System.out.println("after slideOutButton"); if (getBackBtnState() == BackBtnState.DISABLED) { setBackBtnState(BackBtnState.ENABLED); hBackTitle.setResource(RES.hBackFront()); hBackImg.setResource(RES.hBackImg()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth(), 0, hBackImg.getElement(), null, 30, 100).play(); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), null, 30, 100).play(); } if (e.getType() == MenuOptionEvent.Type.AZ) { hTitle.setResource(RES.hAz()); UI.getAzPage().doShow(); } else if (e.getType() == MenuOptionEvent.Type.RED_CARPET) { hTitle.setResource(RES.hRedcarpet()); UI.getRedcarpetPage().doShow(); } else if (e.getType() == MenuOptionEvent.Type.SWIMWEAR) { hTitle.setResource(RES.hSwimwear()); UI.getSwimwearPage().doShow(); ctx.getEventBus().fireEvent(new SwimwearEvent()); } else if (e.getType() == MenuOptionEvent.Type.FEEL_LUCKY) { String randomName = ctx.getNamseDao().getRandomName(); hTitle.setText(randomName); UI.getFeelLuckyPage().setSearchName(randomName); UI.getFeelLuckyPage().doShow(); ctx.getEventBus().fireEvent(new FeelLuckyEvent(randomName)); } else if (e.getType() == MenuOptionEvent.Type.WALLPAPER) { hTitle.setResource(RES.hWallpaper()); UI.getWallpaperPage().doShow(); ctx.getEventBus().fireEvent(new WallpaperEvent()); } else if (e.getType() == MenuOptionEvent.Type.SEARCH) { hTitle.setResource(RES.hSearch()); UI.getSearchPage().doShow(); } else if (e.getType() == MenuOptionEvent.Type.SETTINGS) { hTitle.setResource(RES.hSettings()); UI.getSettingsPage().doShow(); } slideInButton(hTitle, null, null); } }); UI.getFrontTopMenu().doHide(null); } }); ctx.getEventBus().addHandler(RedcarpetOptionEvent.TYPE, new RedcarpetOptionHandler() { @Override public void onExecute(final RedcarpetOptionEvent e) { setBackCommand(getBack2Redcarpet()); Command cmd = new Command() { @Override public void execute() { slideOutButton(hTitle, null, new Command() { @Override public void execute() { if (e.getType() == RedcarpetOptionEvent.Type.OSCARS) { hTitle.setResource(RES.hOscar()); UI.getOscarsPage().setSearchKey(Key.OSCARS); UI.getOscarsPage().doShow(); } else if (e.getType() == RedcarpetOptionEvent.Type.GOLDENGLOBE) { hTitle.setResource(RES.hGoldenglobe()); UI.getGoldenPage().setSearchKey(Key.GOLDEN_GLOBE); UI.getGoldenPage().doShow(); } else if (e.getType() == RedcarpetOptionEvent.Type.GRAMMY) { hTitle.setResource(RES.hGrammy()); UI.getGrammyPage().setSearchKey(Key.GRAMMY); UI.getGrammyPage().doShow(); } else if (e.getType() == RedcarpetOptionEvent.Type.CANNES) { hTitle.setResource(RES.hCannes()); UI.getCannesPage().setSearchKey(Key.CANNES); UI.getCannesPage().doShow(); } slideInButton(hTitle, null, null); } }); } }; setBackBtnState(BackBtnState.ENABLED); hBackTitle.setResource(RES.hBackRedcarpet()); hBackImg.setResource(RES.hBackImg()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth(), 0, hBackImg.getElement(), null, 30, 100).play(); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), cmd, 30, 100).play(); } }); ctx.getEventBus().addHandler(AzNameEvent.TYPE, new AzNameHandler() { @Override public void onExecute(final AzNameEvent e) { setBackCommand(getBack2Az()); Command cmd = new Command() { @Override public void execute() { slideOutButton(hTitle, null, new Command() { @Override public void execute() { hTitle.setText(e.getName()); slideInButton(hTitle, null, null); UI.getAzNamePage().setSearchName(e.getName()); UI.getAzNamePage().doShow(); } }); } }; setBackBtnState(BackBtnState.ENABLED); hBackTitle.setResource(RES.hBackAz()); hBackImg.setResource(RES.hBackImg()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth(), 0, hBackImg.getElement(), null, 30, 100).play(); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), cmd, 30, 100).play(); } }); ctx.getEventBus().addHandler(SearchEvent.TYPE, new SearchHandler() { @Override public void onExecute(final SearchEvent e) { setBackCommand(getBack2Search()); Command cmd = new Command() { @Override public void execute() { slideOutButton(hTitle, null, new Command() { @Override public void execute() { hTitle.setText(e.getName()); slideInButton(hTitle, null, null); UI.getSearchResultPage().setSearchKey(new Key(e.getName(), e.getName())); UI.getSearchResultPage().doShow(); } }); } }; setBackBtnState(BackBtnState.ENABLED); hBackTitle.setResource(RES.hBackSearch()); hBackImg.setResource(RES.hBackImg()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth(), 0, hBackImg.getElement(), null, 30, 100).play(); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), cmd, 30, 100).play(); } }); } public BackBtnState getBackBtnState() { return backBtnState; } public void setBackBtnState(BackBtnState backBtnState) { this.backBtnState = backBtnState; } private void registerBackEvent() { MouseDownHandler handler = new MouseDownHandler() { @Override public void onMouseDown(MouseDownEvent event) { Command cm = getBackCommand(); if (cm != null) { cm.execute(); } } }; hBackImg.addMouseDownHandler(handler); hBackTitle.addMouseDownHandler(handler); } private Command getBack2Main() { Command cmd = new Command() { @Override public void execute() { UI.getPageManager().hidePages(); if (getBackBtnState() != BackBtnState.ENABLED) { return; } ctx.getEventBus().fireEvent(new BackButtonEvent(Type.FRONT_PAGE)); Command afterBackCmd = new Command() { @Override public void execute() { FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), -80, hBackTitle.getElement(), null, 30, 100).play(); } }; FxUtil.moveHorizEffect(0, -hBackImg.getOffsetWidth(), hBackImg.getElement(), null, 100, 30).play(); FxUtil.moveHorizEffect(0, -hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), hBackTitle.getElement(), afterBackCmd, 100, 30).play(); setBackBtnState(BackBtnState.DISABLED); setBackCommand(null); slideOutButton(hTitle, null, null); } }; return cmd; } private Command getBack2Redcarpet() { Command cmd = new Command() { @Override public void execute() { UI.getPageManager().hidePages(); ctx.getEventBus().fireEvent(new MenuOptionEvent(MenuOptionEvent.Type.RED_CARPET)); ctx.getEventBus().fireEvent(new BackButtonEvent(Type.RED_CARPET)); Command afterCmd = new Command() { @Override public void execute() { hBackTitle.setResource(RES.hBackFront()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), null, 30, 100).play(); } }; FxUtil.moveHorizEffect(0, -hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), hBackTitle.getElement(), afterCmd, 100, 30).play(); setBackBtnState(BackBtnState.ENABLED); setBackCommand(getBack2Main()); } }; return cmd; } private Command getBack2Az() { Command cmd = new Command() { @Override public void execute() { UI.getPageManager().hidePages(); ctx.getEventBus().fireEvent(new MenuOptionEvent(MenuOptionEvent.Type.AZ)); ctx.getEventBus().fireEvent(new BackButtonEvent(Type.AZ)); Command afterCmd = new Command() { @Override public void execute() { hBackTitle.setResource(RES.hBackFront()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), null, 30, 100).play(); } }; FxUtil.moveHorizEffect(0, -hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), hBackTitle.getElement(), afterCmd, 100, 30).play(); setBackBtnState(BackBtnState.ENABLED); setBackCommand(getBack2Main()); } }; return cmd; } private Command getBack2Search() { Command cmd = new Command() { @Override public void execute() { UI.getPageManager().hidePages(); ctx.getEventBus().fireEvent(new MenuOptionEvent(MenuOptionEvent.Type.SEARCH)); ctx.getEventBus().fireEvent(new BackButtonEvent(Type.SEARCH)); Command afterCmd = new Command() { @Override public void execute() { hBackTitle.setResource(RES.hBackFront()); FxUtil.moveHorizEffect(-hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), 0, hBackTitle.getElement(), null, 30, 100).play(); } }; FxUtil.moveHorizEffect(0, -hBackImg.getOffsetWidth() - hBackTitle.getOffsetWidth(), hBackTitle.getElement(), afterCmd, 100, 30).play(); setBackBtnState(BackBtnState.ENABLED); setBackCommand(getBack2Main()); } }; return cmd; } public void slideOutButton(final Widget btn, final Command beforeCmd, final Command afterCmd) { if (beforeCmd != null) { beforeCmd.execute(); } // if(afterCmd != null){ // afterCmd.execute(); // } Fade f = new Fade(btn.getElement()); f.setDuration(0.3); f.addEffectCompletedHandler(new EffectCompletedHandler() { @Override public void onEffectCompleted(EffectCompletedEvent event) { if (afterCmd != null) { afterCmd.execute(); } } }); f.play(); // FxUtil.doHide(btn, afterCmd).play(); // NMorphStyle eff = FxUtil.moveHorizEffect(btn.getAbsoluteLeft(), 1024, btn.getElement(), afterCmd, 100, 30); // eff.addEffectCompletedHandler(new EffectCompletedHandler() { // @Override // public void onEffectCompleted(EffectCompletedEvent event) { // btn.getElement().getStyle().setOpacity(0); // } // }); // eff.play(); } public void slideInButton(final Widget btn, final Command beforeCmd, final Command afterCmd) { NMorphStyle eff = FxUtil.moveHorizEffect(1024, TITLE_POSITION, btn.getElement(), afterCmd, 30, 100); eff.play(); } }