Package com.wiquery.plugin.antilia.roundpane

Source Code of com.wiquery.plugin.antilia.roundpane.RoundPanel

package com.wiquery.plugin.antilia.roundpane;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.CSSPackageResource;
import org.apache.wicket.markup.html.JavascriptPackageResource;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.odlabs.wiquery.core.commons.IWiQueryPlugin;
import org.odlabs.wiquery.core.commons.WiQueryResourceManager;
import org.odlabs.wiquery.core.javascript.JsStatement;
import org.odlabs.wiquery.ui.commons.WiQueryUIPlugin;

import com.wiquery.plugin.antilia.link.JQIcon;
import com.wiquery.plugin.antilia.link.JqAjaxLink;
import com.wiquery.plugin.antilia.link.JqScriptLink;
import com.wiquery.plugin.antilia.menu.IMenu;
import com.wiquery.plugin.antilia.menu.Menu;

/**
* @author Ernesto Reinaldo Barreiro
*
*/
@WiQueryUIPlugin
public class RoundPanel extends Panel implements IWiQueryPlugin  {

  private static final long serialVersionUID = 1L;

  private static final ResourceReference CSS = new ResourceReference(RoundPanel.class,"roundpanel.css");
 
  private static final ResourceReference JS = new ResourceReference(RoundPanel.class,"roundpanel.js");
 
 
  private WebMarkupContainer root;
 
  private WebMarkupContainer  body;
 
  private Integer width = 300;
 
  private Integer heigh = -1;
 
  private boolean foldable = true;
 
  private boolean ajaxFoldable = false;
 
  private boolean folded = false;
 
  private Menu menu;
     

  /**
   * @param id
   */
  public RoundPanel(String id, IModel<String> titleModel) {
    super(id);
    setRenderBodyOnly(true);
    add(CSSPackageResource.getHeaderContribution(CSS));
    add(JavascriptPackageResource.getHeaderContribution(JS));
   
    root = new WebMarkupContainer("root");
    root.setOutputMarkupId(true);
   
    body  = new WebMarkupContainer("body") {
     
      private static final long serialVersionUID = 1L;

      @Override
      protected void onBeforeRender() {
        if(get("content")== null) {
          add(RoundPanel.this.newContent("content"));
        }
        super.onBeforeRender();
      }
     
      @Override
      public String getMarkupId() {
        return root.getMarkupId()+"_body";
      }
    };
    body.setOutputMarkupId(true);   
    root.add(body);
   
    root.add(new AttributeModifier("style", new AbstractReadOnlyModel<String>() {
     
      private static final long serialVersionUID = 1L;

      @Override
      public String getObject() {       
        StringBuffer sb = new StringBuffer();
        if(width != null) {
          sb.append("width: ")
          .append(width)
          .append("px;");         
        }
        if(heigh != null) {
          if(heigh.intValue() < 0) {
            sb.append("height: auto;");
          } else {
            sb.append("height: ")
            .append(heigh)
            .append("px;");           
          }
        }
        return sb.toString();
      }
    }));
    add(root);
   
    root.add(new Label("title", titleModel));               
  }
 
  @Override
  protected void onBeforeRender() {
    if(menu == null) {
      menu = new Menu("menu");
      menu.setOutputMarkupId(true);
      configureMenu(menu);
      root.addOrReplace(menu);
    }
    addOrReplace(new Label("script", new AbstractReadOnlyModel<String>(){
     
      private static final long serialVersionUID = 1L;

      @Override
      public String getObject() {
        return renderScript();
      }
    }).setEscapeModelStrings(false));
    super.onBeforeRender();
  }
 
  protected void configureMenu(IMenu menu) {
    configureFoldable(menu);
  }
 
  protected void configureFoldable(IMenu menu) {
    if(!isFoldable()) {
      return;
    }
    if(isAjaxFoldable()) {
      menu.addMenuItem(new JqAjaxLink(menu.newItemId(), JQIcon.ui_icon_circle_minus, "Fold") {
         
          private static final long serialVersionUID = 1L;
 
       
        @Override
        public void onClick(AjaxRequestTarget target) {
          setFolded(true);
          target.addComponent(RoundPanel.this.menu);
          //target.appendJavascript(new JsStatement().$(body).chain(new FadeOut(EffectSpeed.FAST)).render(true).toString());       
          target.appendJavascript(root.getMarkupId()+".toggleFold();");
        }
       
        @Override
        public boolean isVisible() {
          return !folded;
        }
        });
     
      menu.addMenuItem(new JqAjaxLink(menu.newItemId(), JQIcon.ui_icon_circle_plus, "Unfold") {
         
          private static final long serialVersionUID = 1L;
 
       
        @Override
        public void onClick(AjaxRequestTarget target) {
          setFolded(false);
          target.addComponent(RoundPanel.this.menu);
          //target.appendJavascript(new JsStatement().$(body).chain(new FadeIn(EffectSpeed.FAST)).render(true).toString());
          target.appendJavascript(root.getMarkupId()+".toggleFold();");
        }
       
        @Override
        public boolean isVisible() {
          return folded;
        }
        });
    } else {   
      menu.addMenuItem(new JqScriptLink(menu.newItemId(), isFolded()?JQIcon.ui_icon_circle_minus:JQIcon.ui_icon_circle_plus, "Toggle fold") {       
          private static final long serialVersionUID = 1L;
 
          @Override
          protected String getClickAction() {
            String linkId = getLink().getMarkupId();
            String rootId = root.getMarkupId();
            return new StringBuffer()
              .append(rootId)
              .append(".toggleFold();")
              .append("var link = document.getElementById('")
              .append(linkId)
              .append("'); if(")
              .append(rootId)
              .append(".isFolded()){")
              .append("link.className='ui-icon ui-icon-circle-plus';")
              .append("} else {")
              .append("link.className='ui-icon ui-icon-circle-minus';")           
              .append("};")
              .toString();
          }     
      });
    }
  }
 
  private String renderScript() {
    StringBuffer sb = new StringBuffer();
    sb.append("var ")
    .append(root.getMarkupId())
    .append(" = new RoundPanel('")
    .append(root.getMarkupId())
    .append("',")
    .append(isFolded())
    .append(");");   
    return sb.toString();
  }
     
  protected Component newContent(String id) {
    return new EmptyPanel(id);
  }

  public boolean isFoldable() {
    return foldable;
  }

  public void setFoldable(boolean folded) {
    this.foldable = folded;
  }
 
  public Integer getHeigh() {
    return heigh;
  }

  public void setHeigh(Integer heigh) {
    this.heigh = heigh;
  }

  public Integer getWidth() {
    return width;
  }

  public void setWidth(Integer width) {
    this.width = width;
  }

  public boolean isFolded() {
    return folded;
  }

  public void setFolded(boolean folded) {
    this.folded = folded;
  }

  public boolean isAjaxFoldable() {
    return ajaxFoldable;
  }

  public void setAjaxFoldable(boolean ajaxFoldable) {
    this.ajaxFoldable = ajaxFoldable;
  }

  public void contribute(WiQueryResourceManager wiQueryResourceManager) {
   
  }

  public JsStatement statement() {
    return null;
  }
}
TOP

Related Classes of com.wiquery.plugin.antilia.roundpane.RoundPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.