package org.gwtoolbox.widget.client.panel.dashboard;
import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.*;
import org.gwtoolbox.widget.client.panel.contentpanel.ContentPanel;
/**
* @author Uri Boness
*/
public class DashboardPanel extends Composite {
private SimplePanel main;
private Columns columns;
private DashboardDragController controller;
public DashboardPanel(int numberOfColumns) {
columns = new Columns(numberOfColumns);
controller = new DashboardDragController();
for (int i = 0; i<numberOfColumns; i++) {
DashboardColumn column = new DashboardColumn();
controller.addDashboardColumn(column);
columns.setWidget(column, i);
column.setWidth("100%");
}
main = new SimplePanel();
main.setWidget(columns);
columns.setSize("100%", "100%");
initWidget(main);
setStylePrimaryName("DashboardPanel");
}
public void addWidget(int column, String title, Widget widget) {
addDashboardWidget(column, title, widget);
}
public void addGadget(int column, final Gadget gadget) {
DashboardWidget dashboardWidget = addDashboardWidget(column, gadget.getTitle(), gadget.getContent());
if (gadget.supportsMaximiz()) {
dashboardWidget.addTool(ContentPanel.Tools.MAXIMIZE, new ClickHandler() {
public void onClick(ClickEvent event) {
showMaximizedContent(gadget);
}
});
}
}
//============================================== Helper Methods ====================================================
private DashboardWidget addDashboardWidget(int column, String title, Widget widget) {
DashboardWidget dashboardWidget = new DashboardWidget(title, widget, controller);
DashboardColumn dashboardColumn = (DashboardColumn) columns.getWidget(column);
dashboardColumn.addWidget(dashboardWidget);
return dashboardWidget;
}
private void showMaximizedContent(Gadget gadget) {
ContentPanel contentPanel = new ContentPanel(gadget.getTitle());
contentPanel.addTool(ContentPanel.Tools.UNMAXIMIZE, new ClickHandler() {
public void onClick(ClickEvent event) {
main.setWidget(columns);
}
});
contentPanel.setContent(gadget.getMaximizedContent());
main.setWidget(contentPanel);
contentPanel.setSize("100%", "100%");
}
//================================================= Inner Classes ==================================================
private class Columns extends ResizeComposite {
private LayoutPanel layout;
private SimplePanel[] panels;
private Columns(int numberOfColumns) {
this.panels = new SimplePanel[numberOfColumns];
layout = new LayoutPanel();
int width = 100 / numberOfColumns;
for (int i = 0; i < numberOfColumns; i++) {
panels[i] = new SimplePanel();
layout.add(panels[i]);
int left = i * width;
if (i == numberOfColumns - 1) {
width = 100 - left;
}
layout.setWidgetLeftWidth(panels[i], left, Style.Unit.PCT, width, Style.Unit.PCT);
}
initWidget(layout);
}
public void setWidget(Widget widget, int columnIndex) {
panels[columnIndex].setWidget(widget);
}
public Widget getWidget(int columnIndex) {
return panels[columnIndex].getWidget();
}
}
}