package org.geogebra.web.web.gui.menubar;
import org.geogebra.common.gui.Layout;
import org.geogebra.common.io.layout.Perspective;
import org.geogebra.common.main.Feature;
import org.geogebra.web.html5.Browser;
import org.geogebra.web.html5.main.AppW;
import org.geogebra.web.web.css.GuiResources;
import org.geogebra.web.web.gui.ImageFactory;
import org.geogebra.web.web.gui.dialog.DialogManagerW;
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.resources.client.ResourcePrototype;
/**
* Web implementation of FileMenu
*/
public class PerspectivesMenuW extends GMenuBar {
/** Application */
AppW app;
/**
* @param app application
*/
public PerspectivesMenuW(AppW app) {
super(true, "apps");
this.app = app;
addStyleName("GeoGebraMenuBar");
initActions();
update();
}
private void update() {
// TODO Auto-generated method stub
}
private void initActions() {
PerspectiveResources pr = ((ImageFactory)GWT.create(ImageFactory.class)).getPerspectiveResources();
addPerspective(0, pr.menu_icon_algebra());
addPerspective(3, pr.menu_icon_cas());
addPerspective(1, pr.menu_icon_geometry());
addPerspective(4, pr.menu_icon_graphics3D());
addPerspective(2, pr.menu_icon_spreadsheet());
addPerspective(5, pr.menu_icon_probability());
if (app.has(Feature.WHITEBOARD_APP)) {
addPerspective(6, pr.menu_icon_whiteboard());
}
if (!app.isExam()) {
if (app.getLAF().examSupported(app.has(Feature.EXAM_TABLET))) {
addItem(MainMenu.getMenuBarHtml(GuiResources.INSTANCE.menu_icon_exam().getSafeUri().asString(),
app.getLocalization().getMenu("exam_menu_entry"), true), // "Exam
// Mode"
true, new MenuCommand(app) {
@Override
public void doExecute() {
((DialogManagerW) app.getDialogManager()).getSaveDialog()
.showIfNeeded(getExamCallback());
}
});
}
}
}
private void addPerspective(int i, ResourcePrototype icon) {
if (Layout.getDefaultPerspectives(i) == null) {
return;
}
final int index = i;
final int defID = Layout.getDefaultPerspectives(i).getDefaultID();
addItem(MainMenu.getMenuBarHtml(ImgResourceHelper.safeURI(icon),
app.getLocalization()
.getMenu(Layout.getDefaultPerspectives(i).getId()),
true), true,
new MenuCommand(app) {
@Override
public void doExecute() {
setPerspective(app, index);
if (!(app.isExam() && app.getExam().getStart() >= 0)) {
((AppWFull) app).showStartTooltip(defID);
}
}
});
}
/**
* @return callback that shows the exam welcome message and prepares Exam
* (goes fullscreen)
*/
Runnable getExamCallback() {
return new Runnable() {
@Override
public void run() {
app.getLAF().toggleFullscreen(true);
app.setNewExam();
((AppWFull) app).examWelcome();
}
};
}
/**
* @param app
* application
* @param index
* perspective index
*/
static void setPerspective(AppW app, int index) {
app.persistWidthAndHeight();
boolean changed = app.getGuiManager().getLayout()
.applyPerspective(Layout.getDefaultPerspectives(index));
app.updateViewSizes();
app.getGuiManager().updateMenubar();
// set active perspective for highlighting
app.setActivePerspective(index);
// app.getToolbar().closeAllSubmenu();
if (app.getTubeId() < 1
&& app.getArticleElement().getDataParamApp()) {
Browser.changeUrl(Perspective.getPerspectiveSlug(index));
}
if (changed) {
app.storeUndoInfo();
}
}
}