package org.geogebra.web.web.gui;
import org.geogebra.common.main.App;
import org.geogebra.common.util.debug.Log;
import org.geogebra.web.html5.gui.util.NoDragImage;
import org.geogebra.web.html5.main.AppW;
import org.geogebra.web.web.gui.images.ImgResourceHelper;
import org.geogebra.web.web.gui.images.PerspectiveResources;
import org.geogebra.web.web.gui.layout.DockPanelW;
import org.geogebra.web.web.gui.util.MyToggleButtonW;
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.FlowPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Widget;
/**
* GUI for toolbar customization
*
* @author Laszlo
*
*/
public class CustomizeToolbarHeaderPanel extends AuxiliaryHeaderPanel {
/**
* Listens to updates of the toolbar
*/
public interface CustomizeToolbarListener {
/**
* @param id
* toolbar ID
*/
void update(int id);
}
/**
* General toolbar id
*/
protected static final int GENERAL = -1;
private AppW app;
private FlowPanel buttons;
private int selectedViewId = GENERAL;
private CustomizeToolbarListener listener;
private static class ViewButton extends MyToggleButtonW {
private int id;
public ViewButton(Image img, int viewId) {
super(img);
this.id = viewId;
}
public int getId() {
return id;
}
}
/**
* @param app
* application
* @param gui
* frame
*/
CustomizeToolbarHeaderPanel(AppW app, MyHeaderPanel gui) {
super(app.getLocalization(), gui);
this.app = app;
this.listener = (CustomizeToolbarListener) gui;
createPanelsToolbar();
setLabels();
}
@Override
public void setLabels() {
setText(loc.getMenu("Toolbar.Customize"));
}
private void createPanelsToolbar() {
buttons = new FlowPanel();
buttons.setStyleName("panelRow");
PerspectiveResources pr = ((ImageFactory) GWT
.create(ImageFactory.class)).getPerspectiveResources();
final MyToggleButtonW btnGeneral = new MyToggleButtonW(new NoDragImage(
ImgResourceHelper.safeURI(pr.menu_icon_graphics()), 24));
buttons.add(btnGeneral);
DockPanelW[] panels = ((GuiManagerW) app.getGuiManager()).getLayout()
.getDockManager().getPanels();
for (DockPanelW panel : panels) {
final int viewId = panel.getViewId();
if (panel.canCustomizeToolbar()) {
Log.debug("[customize] view id for button is " + viewId);
ResourcePrototype res = null;
switch (viewId) {
case App.VIEW_DATA_ANALYSIS:
res = pr.menu_icon_probability();
break;
default:
if (App.isView3D(viewId)) {
res = pr.menu_icon_graphics3D();
} else {
res = panel.getIcon();
}
}
final ViewButton btn = new ViewButton(
new NoDragImage(ImgResourceHelper.safeURI(res), 24),
viewId);
btn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
selectAndUpdate(btn, viewId);
}
});
buttons.add(btn);
}
}
btnGeneral.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
selectAndUpdate(btnGeneral, GENERAL);
}
});
selectedViewId = GENERAL;
rightPanel.add(buttons);
add(rightPanel);
}
/**
* @param btn
* clicked button
* @param viewId
* view ID
*/
protected void selectAndUpdate(MyToggleButtonW btn, int viewId) {
uncheckAll(btn);
selectedViewId = viewId;
listener.update(selectedViewId);
}
private void uncheckAll(MyToggleButtonW current) {
for (int i = 0; i < buttons.getWidgetCount(); i++) {
Widget w = buttons.getWidget(i);
if (w instanceof MyToggleButtonW && w != current) {
((MyToggleButtonW) w).setValue(false);
}
}
}
private void checkViewButton(int viewId) {
for (int i = 0; i < buttons.getWidgetCount(); i++) {
Widget w = buttons.getWidget(i);
if (w instanceof ViewButton) {
ViewButton btn = (ViewButton) w;
btn.setValue(btn.getId() == viewId);
} else if (w instanceof MyToggleButtonW) {
((MyToggleButtonW) w).setValue(viewId == -1);
}
}
}
/**
* @return view ID
*/
public int getSelectedViewId() {
return selectedViewId;
}
/**
* @param viewId
* new view ID
*/
public void setSelectedViewId(int viewId) {
selectedViewId = viewId;
checkViewButton(viewId);
}
}