Mega Code Archive

 
Categories / Java / 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)