/*
SASAbusHTML5 - HTML5 App for SASA bus
Copyright (C) 2013 TIS Innovation Park - Bolzano/Bozen - Italy
Copyright (C) 2013-2014 Davide Montesin <d@vide.bz> - Bolzano/Bozen - Italy
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package it.bz.tis.sasabus.html5.shared.ui.menu;
import it.bz.tis.sasabus.backend.shared.AreaList;
import it.bz.tis.sasabus.html5.shared.BusStationCustomViewAndI18N;
import it.bz.tis.sasabus.html5.shared.SASAbusI18N;
import it.bz.tis.sasabus.html5.shared.ui.AboutPanel;
import it.bz.tis.sasabus.html5.shared.ui.ParkingsPanel;
import it.bz.tis.sasabus.html5.shared.ui.TrainStationsPanel;
import it.bz.tis.sasabus.html5.shared.ui.icon.Icon;
import it.bz.tis.sasabus.html5.shared.ui.map.SASAbusMap;
import bz.davide.dmweb.shared.view.DMClickEvent;
import bz.davide.dmweb.shared.view.DMClickHandler;
import bz.davide.dmweb.shared.view.DMHashNavigationPanel;
import bz.davide.dmweb.shared.view.DivView;
import com.google.gwt.user.client.Timer;
/**
* @author Davide Montesin <d@vide.bz>
*/
public class Menu extends DivView
{
DMHashNavigationPanel navigationPanel;
SASAbusMap map;
boolean menuOpen = false;
MenuItem areasAndLine;
MenuItem mapItem;
MenuItem search;
//MenuItem routing;
MenuItem news;
MenuItem favourites;
//MenuItem green;
MenuItem more;
MenuItem sendFeedback;
MenuItem about;
MenuItem parkings;
MenuItem train;
DivView moreMenuItems;
MenuMoreClickHandler moreClickHandler;
AboutPanel aboutPanel;
SASAbusI18N i18n;
BusStationCustomViewAndI18N custom;
String supportEmail;
String appTitle;
public Menu(final DMHashNavigationPanel navigationPanel,
final AreaList areaList,
final SASAbusMap map,
AboutPanel aboutPanel,
BusStationCustomViewAndI18N custom,
String supportEmail,
String appTitle)
{
super("menu");
this.supportEmail = supportEmail;
this.appTitle = appTitle;
this.i18n = custom.getI18n();
this.custom = custom;
this.aboutPanel = aboutPanel;
this.navigationPanel = navigationPanel;
this.map = map;
this.areasAndLine = new MenuItem(Icon.newLinesIcon(), this.i18n.getLocalizedText("Menu_areasLines"));
this.appendChild(this.areasAndLine);
this.mapItem = new MenuItem(Icon.newMapIcon(), this.i18n.getLocalizedText("Menu_map"));
this.mapItem.addStyleName("map ");
this.appendChild(this.mapItem);
this.search = new MenuItem(Icon.newSearchIcon(), this.i18n.getLocalizedText("Menu_search"));
this.appendChild(this.search);
this.favourites = new MenuItem(Icon.newFavouritesActiveIcon(), this.i18n.getLocalizedText("Menu_favourites"));
this.appendChild(this.favourites);
//this.green = new MenuItem(new TreeIcon()), "Green";
//this.add(this.green);
this.parkings = new MenuItem(Icon.newParkIcon(), "Park");
this.appendChild(this.parkings);
//this.routing = new MenuItem(new RouteIcon()), i18n.getLocalizedText("Menu_routing");
//this.add(this.routing);
this.more = new MenuItem(Icon.newMoreIcon(), this.i18n.getLocalizedText("Menu_more"));
this.more.addStyleName("more");
this.appendChild(this.more);
this.moreMenuItems = new DivView("more-menu-items");
this.appendChild(this.moreMenuItems);
this.train = new MenuItem(Icon.newTrainIcon(), this.i18n.getLocalizedText("Menu_train"));
this.moreMenuItems.appendChild(this.train);
this.news = new MenuItem(Icon.newNewsIcon(), this.i18n.getLocalizedText("Menu_news"));
this.moreMenuItems.appendChild(this.news);
this.sendFeedback = new MenuItem(Icon.newFeedbackIcon(), this.i18n.getLocalizedText("Menu_feedback"));
this.moreMenuItems.appendChild(this.sendFeedback);
this.about = new MenuItem(Icon.newAboutIcon(), this.i18n.getLocalizedText("Menu_about"));
this.moreMenuItems.appendChild(this.about);
}
protected Menu()
{
}
public void initClickHandlers(final AreaList areaList)
{
this.areasAndLine.addClickHandler(new MenuAreaLinesClickHandler(this.navigationPanel,
this,
areaList,
this.map));
this.mapItem.addClickHandler(new MenuMapClickHandler(this.navigationPanel, this, areaList, this.map));
this.news.addClickHandler(new MenuNewsClickHandler(this.navigationPanel, this));
this.search.addClickHandler(new MenuSearchClickHandler(this.navigationPanel, this, areaList, this.map));
//this.routing.addClickHandler(new MenuRouteClickHandler(this.navigationPanel, this, areaList, this.map));
this.moreClickHandler = new MenuMoreClickHandler(this.moreMenuItems);
this.more.addClickHandler(this.moreClickHandler);
this.sendFeedback.addClickHandler(new MenuFeedbackClickHandler(this, this.appTitle));
this.about.addClickHandler(new MenuAboutClickHandler(this.aboutPanel, this));
this.favourites.addClickHandler(new MenuFavouritesClickHandler(this.navigationPanel,
this,
areaList,
this.map));
/*
this.green.addClickHandler(new DMClickHandler()
{
@Override
public void onClick(DMClickEvent event)
{
Menu.this.navigationPanel.newPage(new GreenPanel());
Menu.this.hide();
}
});
*/
this.train.addClickHandler(new DMClickHandler()
{
@Override
public void onClick(DMClickEvent event)
{
Menu.this.navigationPanel.newPage(new TrainStationsPanel(Menu.this.navigationPanel,
areaList,
Menu.this.map,
Menu.this.custom));
Menu.this.hide();
}
});
this.parkings.addClickHandler(new DMClickHandler()
{
@Override
public void onClick(DMClickEvent event)
{
Menu.this.navigationPanel.newPage(new ParkingsPanel(Menu.this.navigationPanel,
areaList,
Menu.this.map,
Menu.this.custom));
Menu.this.hide();
}
});
}
public void show()
{
if (!this.menuOpen)
{
this.addStyleName("anim-left");
this.addStyleName("show");
this.menuOpen = !this.menuOpen;
Timer removeAnim = new Timer()
{
@Override
public void run()
{
Menu.this.removeStyleName("anim-left");
}
};
removeAnim.schedule(1000);
}
}
public void hide()
{
this.moreClickHandler.hide();
if (this.menuOpen)
{
this.addStyleName("anim-left");
this.removeStyleName("show");
this.menuOpen = !this.menuOpen;
Timer removeAnim = new Timer()
{
@Override
public void run()
{
Menu.this.removeStyleName("anim-left");
}
};
removeAnim.schedule(1000);
}
}
public void toggle()
{
if (this.menuOpen)
{
this.hide();
}
else
{
this.show();
}
}
}