Simple Portal Sample (Smart GWT) : Portal « GWT « Java





Simple Portal Sample (Smart GWT)

Simple Portal Sample (Smart GWT)
   
/*
 * SmartGWT (GWT for SmartClient)
 * Copyright 2008 and beyond, Isomorphic Software, Inc.
 *
 * SmartGWT is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License version 3
 * as published by the Free Software Foundation.  SmartGWT is also
 * available under typical commercial license terms - see
 * http://smartclient.com/license
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 */
package com.smartgwt.sample.showcase.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Random;
import com.google.gwt.user.client.ui.RootPanel;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.DragAppearance;
import com.smartgwt.client.types.HeaderControls;
import com.smartgwt.client.types.LayoutPolicy;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.AnimationCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.layout.VStack;

public class Showcase implements EntryPoint {

  public void onModuleLoad() {
    RootPanel.get().add(getViewPanel());
  }
  //FCKEditor like colors
  private static String[] colors = new String[]{
          "FF6600", "808000", "008000", "008080", "0000FF", "666699",
          "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF",
          "800080", "969696", "FF00FF", "FFCC00", "FFFF00", "00FF00",
          "00FFFF", "00CCFF", "993366", "C0C0C0", "FF99CC", "FFCC99",
          "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"
  };

  public Canvas getViewPanel() {
      final PortalLayout portalLayout = new PortalLayout(3);
      portalLayout.setWidth100();
      portalLayout.setHeight100();

      // create portlets...
      for (int i = 1; i <= 2; i++) {
          Portlet portlet = new Portlet();
          portlet.setTitle("Portlet");

          Label label = new Label();
          label.setAlign(Alignment.CENTER);
          label.setLayoutAlign(VerticalAlignment.CENTER);
          label.setContents("Portlet contents");
          label.setBackgroundColor(colors[Random.nextInt(colors.length - 1)]);
          portlet.addItem(label);
          portalLayout.addPortlet(portlet);
      }

      VLayout vLayout = new VLayout(15);

      final DynamicForm form = new DynamicForm();
      form.setAutoWidth();
      form.setNumCols(5);

      final StaticTextItem numColItem = new StaticTextItem();
      numColItem.setTitle("Columns");
      numColItem.setValue(portalLayout.getMembers().length);

      ButtonItem addColumn = new ButtonItem("Add Column");
      addColumn.setIcon("silk/application_side_expand.png");
      addColumn.setAutoFit(true);
      addColumn.setStartRow(false);
      addColumn.setEndRow(false);


      addColumn.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
          public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {
              portalLayout.addMember(new PortalColumn());
              numColItem.setValue(portalLayout.getMembers().length);

          }
      });

      ButtonItem removeColumn = new ButtonItem("Remove Column");
      removeColumn.setIcon("silk/application_side_contract.png");
      removeColumn.setAutoFit(true);
      removeColumn.setStartRow(false);
      removeColumn.setEndRow(false);


      removeColumn.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
          public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {

              Canvas[] canvases = portalLayout.getMembers();
              int numMembers = canvases.length;
              if (numMembers > 0) {
                  Canvas lastMember = canvases[numMembers - 1];
                  portalLayout.removeMember(lastMember);
                  numColItem.setValue(numMembers - 1);
              }

          }
      });

      final ButtonItem addPortlet = new ButtonItem("Add Portlet");
      addPortlet.setIcon("silk/application_view_tile.png");
      addPortlet.setAutoFit(true);

      addPortlet.setStartRow(false);
      addPortlet.setEndRow(false);
      addPortlet.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
          public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {

              final Portlet newPortlet = new Portlet();
              newPortlet.setTitle("Portlet ");

              Label label = new Label();
              label.setAlign(Alignment.CENTER);
              label.setLayoutAlign(VerticalAlignment.CENTER);
              label.setContents("Portlet contents");
              label.setBackgroundColor(colors[Random.nextInt(colors.length - 1)]);
              newPortlet.addItem(label);

              newPortlet.setVisible(false);
              PortalColumn column = portalLayout.addPortlet(newPortlet);

              // also insert a blank spacer element, which will trigger the built-in
              //  animateMembers layout animation
              final LayoutSpacer placeHolder = new LayoutSpacer();
              placeHolder.setRect(newPortlet.getRect());
              column.addMember(placeHolder, 0); // add to top

              // create an outline around the clicked button
              final Canvas outline = new Canvas();
              outline.setLeft(form.getAbsoluteLeft() + addPortlet.getLeft());
              outline.setTop(form.getAbsoluteTop());
              outline.setWidth(addPortlet.getWidth());
              outline.setHeight(addPortlet.getHeight());
              outline.setBorder("2px solid #8289A6");
              outline.draw();
              outline.bringToFront();

              outline.animateRect(newPortlet.getPageLeft(), newPortlet.getPageTop(),
                      newPortlet.getVisibleWidth(), newPortlet.getViewportHeight(),
                      new AnimationCallback() {
                          public void execute(boolean earlyFinish) {
                              // callback at end of animation - destroy placeholder and outline; show the new portlet
                              placeHolder.destroy();
                              outline.destroy();
                              newPortlet.show();
                          }
                      }, 750);
          }
      });


      form.setItems(numColItem, addPortlet, addColumn, removeColumn);

      vLayout.addMember(form);
      vLayout.addMember(portalLayout);

      return vLayout;
  }

  /**
   * Portlet class definition
   */
  private class Portlet extends Window {

      public Portlet() {

          setShowShadow(false);

          // enable predefined component animation
          setAnimateMinimize(true);

          // Window is draggable with "outline" appearance by default.
          // "target" is the solid appearance.
          setDragAppearance(DragAppearance.OUTLINE);
          setCanDrop(true);

          // customize the appearance and order of the controls in the window header
          setHeaderControls(HeaderControls.MINIMIZE_BUTTON, HeaderControls.HEADER_LABEL, HeaderControls.CLOSE_BUTTON);

          // show either a shadow, or translucency, when dragging a portlet
          // (could do both at the same time, but these are not visually compatible effects)
          // setShowDragShadow(true);
          setDragOpacity(30);

          // these settings enable the portlet to autosize its height only to fit its contents
          // (since width is determined from the containing layout, not the portlet contents)
          setVPolicy(LayoutPolicy.NONE);
          setOverflow(Overflow.VISIBLE);
      }
  }

  /**
   * PortalColumn class definition
   */
  private class PortalColumn extends VStack {

      public PortalColumn() {

          // leave some space between portlets
          setMembersMargin(6);

          // enable predefined component animation
          setAnimateMembers(true);
          setAnimateMemberTime(300);

          // enable drop handling
          setCanAcceptDrop(true);

          // change appearance of drag placeholder and drop indicator
          setDropLineThickness(4);

          Canvas dropLineProperties = new Canvas();
          dropLineProperties.setBackgroundColor("aqua");
          setDropLineProperties(dropLineProperties);

          setShowDragPlaceHolder(true);

          Canvas placeHolderProperties = new Canvas();
          placeHolderProperties.setBorder("2px solid #8289A6");
          setPlaceHolderProperties(placeHolderProperties);
      }
  }

  /**
   * PortalLayout class definition
   */
  private class PortalLayout extends HLayout {
      public PortalLayout(int numColumns) {
          setMembersMargin(6);
          for (int i = 0; i < numColumns; i++) {
              addMember(new PortalColumn());
          }
      }

      public PortalColumn addPortlet(Portlet portlet) {
          // find the column with the fewest portlets
          int fewestPortlets = Integer.MAX_VALUE;
          PortalColumn fewestPortletsColumn = null;
          for (int i = 0; i < getMembers().length; i++) {
              int numPortlets = ((PortalColumn) getMember(i)).getMembers().length;
              if (numPortlets < fewestPortlets) {
                  fewestPortlets = numPortlets;
                  fewestPortletsColumn = (PortalColumn) getMember(i);
              }
          }
          fewestPortletsColumn.addMember(portlet);
          return fewestPortletsColumn;
      }
  }
}

   
    
    
  










SmartGWT.zip( 9,880 k)

Related examples in the same category

1.Using Portal and Portlet (Ext GWT)Using Portal and Portlet (Ext GWT)