/* * 2012-3 Red Hat Inc. and/or its affiliates and other contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.overlord.gadgets.web.client.view; import java.util.List; import org.overlord.gadgets.web.client.ApplicationEntryPoint; import org.overlord.gadgets.web.client.BootstrapContext; import org.overlord.gadgets.web.client.NameTokens; import org.overlord.gadgets.web.client.auth.CurrentUser; import org.overlord.gadgets.web.client.presenter.IndexPresenter; import org.overlord.gadgets.web.client.widgets.AddTabForm; import org.overlord.gadgets.web.client.widgets.PortalLayout; import org.overlord.gadgets.web.client.widgets.Portlet; import org.overlord.gadgets.web.client.widgets.TabLayout; import org.overlord.gadgets.web.shared.dto.PageModel; import org.overlord.gadgets.web.shared.dto.WidgetModel; 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.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.LayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.gwtplatform.mvp.client.ViewImpl; import com.gwtplatform.mvp.client.proxy.PlaceRequest; /** * @author: Jeff Yu * @date: 20/02/12 */ public class IndexViewImpl extends ViewImpl implements IndexPresenter.IndexView { private LayoutPanel headerPanel; private LayoutPanel mainPanel; private TabLayout mainContentPanel; private LayoutPanel footerPanel; private DockLayoutPanel panel; private BootstrapContext context; private IndexPresenter presenter; private CurrentUser currentUser; @Inject public IndexViewImpl(BootstrapContext ctx, CurrentUser user) { context = ctx; currentUser = user; headerPanel = new LayoutPanel(); headerPanel.setStyleName("header-panel"); HTML store = new HTML("Gadget Store"); store.addStyleName("header-link"); store.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (currentUser.getCurrentPage() != 0) { ApplicationEntryPoint.MODULES.getPlaceManager().revealPlace( new PlaceRequest(NameTokens.WIDGET_STORE) ); } else { Window.alert("You need to create a Page before adding widgets from Widget Store!"); } } }); headerPanel.add(store); headerPanel.setWidgetRightWidth(store, 5, Style.Unit.PX, 110, Style.Unit.PX); headerPanel.setWidgetTopHeight(store, 5, Style.Unit.PX, 28, Style.Unit.PX); footerPanel = new LayoutPanel(); footerPanel.setStyleName("footer-panel"); panel = new DockLayoutPanel(Style.Unit.PX); panel.getElement().setAttribute("id", "container"); mainContentPanel = new TabLayout(currentUser); final AddTabForm addTabForm = new AddTabForm(currentUser, mainContentPanel); Anchor anchor = new Anchor(); anchor.setText("+"); anchor.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent clickEvent) { addTabForm.show(); } }); mainContentPanel.setTabAnchor(anchor); mainPanel = new LayoutPanel(); mainPanel.add(addTabForm); mainPanel.add(mainContentPanel); panel.addNorth(headerPanel, 25); panel.addSouth(footerPanel, 25); panel.add(mainPanel); footerPanel.add(ApplicationEntryPoint.MODULES.getFooter().asWidget()); } @Override public void initializePages(List<PageModel> pageModels) { mainContentPanel.clearAllTabs(); for (PageModel page : pageModels) { int i = 0; int columnNum = Long.valueOf(page.getColumns()).intValue(); PortalLayout portalLayout = new PortalLayout(String.valueOf(page.getId()), columnNum); for(WidgetModel model : page.getModels()) { portalLayout.addPortlet( i % columnNum, new Portlet(model, portalLayout.getPortletWidth(), portalLayout.getPortalId())); i ++; } mainContentPanel.addTab(String.valueOf(page.getId()), page.getName(), portalLayout); } mainContentPanel.addTabAnchor(); mainContentPanel.initializeTab(); mainContentPanel.selectCurrentActiveTab(); } @Override public Widget asWidget() { return panel; } @Override public void setPresenter(IndexPresenter presenter) { this.presenter = presenter; } /** * JNSI methods * * @param alertMsg */ private static native void alertWindow(String alertMsg) /*-{ $wnd.alert(alertMsg); }-*/; }