package org.geogebra.web.web.gui.menubar; import org.geogebra.common.GeoGebraConstants; import org.geogebra.common.gui.Layout; import org.geogebra.common.main.App; import org.geogebra.common.main.Feature; import org.geogebra.web.html5.gui.util.NoDragImage; import org.geogebra.web.web.css.GuiResources; import org.geogebra.web.web.gui.ImageFactory; import org.geogebra.web.web.gui.dialog.DialogBoxW; import org.geogebra.web.web.gui.images.ImgResourceHelper; import org.geogebra.web.web.gui.images.PerspectiveResources; import org.geogebra.web.web.main.AppWFull; import com.google.gwt.core.shared.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.resources.client.ResourcePrototype; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; /** * Apps Picker Dialog for new Start screen (GGB-992) */ public class PerspectivesPopup { /** dialog */ private DialogBoxW box; /** application */ final AppWFull app; private FlowPanel contentPanel; /** * @param app * application */ public PerspectivesPopup(final AppWFull app) { this.app = app; box = new DialogBoxW(true, false, null, app.getPanel()){ @Override public void setPopupPosition(int left, int top) { super.setPopupPosition(left, Math.max(0, (int) (app.getHeight() / 2 - 250))); } }; if (app.has(Feature.DIALOGS_OVERLAP_KEYBOARD)) { box.setOverlapFeature(true); } box.setGlassEnabled(false); this.contentPanel = new FlowPanel(); contentPanel.removeStyleName("dialogContent"); contentPanel.addStyleName("perspectivesMainPanel"); box.setWidget(contentPanel); box.addStyleName("perspectivesBox"); box.getCaption().asWidget().addStyleName("perspectivesCaption"); } /** * Show the popup! */ public void showPerspectivesPopup() { setLabels(); box.show(); } private void setLabels() { PerspectiveResources pr = ((ImageFactory) GWT .create(ImageFactory.class)).getPerspectiveResources(); contentPanel.clear(); addPerspective(0, pr.menu_icon_algebra24()); if (app.supportsView(App.VIEW_CAS)) { addPerspective(3, pr.menu_icon_cas24()); } addPerspective(1, pr.menu_icon_geometry24()); if (app.supportsView(App.VIEW_EUCLIDIAN3D)) { addPerspective(4, pr.menu_icon_graphics3D24()); } addPerspective(2, pr.menu_icon_spreadsheet24()); addPerspective(5, pr.menu_icon_probability24()); if (app.has(Feature.WHITEBOARD_APP)) { addPerspective(6, pr.menu_icon_whiteboard24()); } // add exam mode HorizontalPanel examRow = addPerspectiveRow(pr.menu_icon_exam24(), "exam_menu_entry", -1, 7); contentPanel.add(examRow); // add link to tutorials if (app.has(Feature.STORE_IMAGES_ON_APPS_PICKER)) { if (!app.getLAF().isSmart() && !app.getLAF().isTablet()) { SimplePanel holderPanel = new SimplePanel(); holderPanel.addStyleName("appstoreholder"); NoDragImage appStoreIcon = new NoDragImage(ImgResourceHelper .safeURI(GuiResources.INSTANCE.app_store()), 135); Anchor link = new Anchor(appStoreIcon.toString(), true, "http://www.geogebra.org/download"); holderPanel.add(link); contentPanel.add(holderPanel); } } else { HorizontalPanel tutorialsRow = addPerspectiveRow( GuiResources.INSTANCE.icon_help(), "Tutorials", -2, 8); tutorialsRow.addStyleName("upperBorder"); contentPanel.add(tutorialsRow); } box.getCaption() .setText(app.getLocalization().getMenu("CreateYourOwn")); } private void addPerspective(int i, ResourcePrototype icon) { if (Layout.getDefaultPerspectives(i) == null) { return; } final int index = i; final int defID = Layout.getDefaultPerspectives(i).getDefaultID(); HorizontalPanel rowPanel = addPerspectiveRow(icon, Layout.getDefaultPerspectives(i).getId(), index, defID); if (app.getActivePerspective() == index) { rowPanel.addStyleName("perspectiveHighlighted"); } else { rowPanel.removeStyleName("perspectiveHighlighted"); } contentPanel.add(rowPanel); } /** tutorial links */ final static String[] tutorials = new String[] { "graphing/", "graphing/", "geometry/", "spreadsheet/", "cas/", "3d/", "probability/", "exam/", "" }; private HorizontalPanel addPerspectiveRow(ResourcePrototype icon, String menuID, final int index, final int defID) { HorizontalPanel rowPanel = new HorizontalPanel(); // HorizontalPanel perspective = new HorizontalPanel(); // icon rowPanel.add(new Image(ImgResourceHelper.safeURI(icon))); // perspective label Label label = new Label(app.getLocalization().getMenu(menuID)); label.addStyleName("perspectivesLabel"); rowPanel.add(label); rowPanel.setStyleName("perspectivesRow"); // help button if (index != -2) { Image helpBtn = new Image(GuiResources.INSTANCE.icon_help()); helpBtn.addStyleName("perspectivesHelp"); helpBtn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String URL = GeoGebraConstants.QUICKSTART_URL + tutorials[defID] + app.getLocalization().getLocaleStr() + "/"; // TODO check if online app.getFileManager().open(URL); event.stopPropagation(); } }); rowPanel.add(helpBtn); } rowPanel.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (index >= 0) { PerspectivesMenuW.setPerspective(app, index); if (!(app.isExam() && app.getExam().getStart() >= 0)) { ((AppWFull) app).showStartTooltip(defID); } } else if (index == -1) { app.getLAF().toggleFullscreen(true); app.setNewExam(); ((AppWFull) app).examWelcome(); // activePerspective = -1; } else if (index == -2) { String URL = GeoGebraConstants.QUICKSTART_URL + tutorials[defID] + app.getLocalization().getLocaleStr() + "/"; // TODO check if online app.getFileManager().open(URL); } closePerspectivesPopup(); } }, ClickEvent.getType()); return rowPanel; } /** * Close the popup */ public void closePerspectivesPopup() { box.hide(); } /** * @return whether popup is showing */ public boolean isShowing() { return box.isShowing(); } }