Package org.zkoss.zss.app.zul.ctrl

Source Code of org.zkoss.zss.app.zul.ctrl.CellStyleCtrlPanel

/* CellStyleCtrlPanel.java

{{IS_NOTE
  Purpose:
   
  Description:
   
  History:
    Nov 15, 2010 9:19:40 PM , Created by Sam
}}IS_NOTE

Copyright (C) 2009 Potix Corporation. All Rights Reserved.

*/
package org.zkoss.zss.app.zul.ctrl;

import org.zkoss.poi.ss.usermodel.BorderStyle;
import org.zkoss.web.fn.ServletFns;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.IdSpace;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.ForwardEvent;
import org.zkoss.zss.app.Consts;
import org.zkoss.zss.app.Dropdownbutton;
import org.zkoss.zss.app.zul.Colorbutton;
import org.zkoss.zss.app.zul.DisposedEventListener;
import org.zkoss.zss.app.zul.Zssapp;
import org.zkoss.zss.model.Range;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Div;
import org.zkoss.zul.Hlayout;
import org.zkoss.zul.Toolbarbutton;

/**
* @author Ian Tsai / Sam
*
*/
public class CellStyleCtrlPanel extends Div implements IdSpace {

  private Hlayout container;
  /**
   * Font
   */
  private Combobox fontFamily;
  private Combobox fontSize;
 
  private boolean _isBold;
  private Toolbarbutton boldBtn;
 
  private boolean _isItalic;
  private Toolbarbutton italicBtn;
 
  private boolean _isUnderline;
  private Toolbarbutton underlineBtn;
 
  private boolean _isStrikethrough;
  private Toolbarbutton strikethroughBtn;
 
  private Dropdownbutton borderBtn;
 
  private Colorbutton fontColorBtn;
  private Colorbutton cellColorBtn;
 
  private Dropdownbutton valignBtn;
  private Dropdownbutton halignBtn;

  private boolean isWrapText;
  private Toolbarbutton wrapTextBtn;
 
  private final static String ALIGN_TOP_SRC_IMAGE = "~./zssapp/image/edit-vertical-alignment-top.png";
  private final static String ALIGN_MIDDLE_SRC_IMAGE = "~./zssapp/image/edit-vertical-alignment-middle.png";
  private final static String ALIGN_BOTTOM_SRC_IMAGE = "~./zssapp/image/edit-vertical-alignment.png";
  private final static String ALIGN_LEFT_SRC_IMAGE = "~./zssapp/image/edit-alignment.png";
  private final static String ALIGN_CENTER_SRC_IMAGE = "~./zssapp/image/edit-alignment-center.png";
  private final static String ALIGN_RIGHT_SRC_IMAGE = "~./zssapp/image/edit-alignment-right.png";
 
  public CellStyleCtrlPanel() {   
    Executions.createComponents(Consts._CellStylePanel_zul, this, null);
    Components.wireVariables(this, this);
    Components.addForwards(this, this);
  }
 
  public void setSpacing(String spacing) {
    container.setSpacing(spacing);
  }
 
  public void setFontfamilywidth(String width) {
    fontFamily.setWidth(width);
  }
 
  public void setFontsizewidth(String width) {
    fontSize.setWidth(width);
  }
 
  public void setFontfamilyvisible(boolean visible) {
    fontFamily.setVisible(visible);
  }
 
  public void setFontsizevisible(boolean visible) {
    fontSize.setVisible(visible);
  }
 
  public void setBoldvisible(boolean visible) {
    boldBtn.setVisible(visible);
  }
 
  public void setItalicvisible(boolean visible) {
    italicBtn.setVisible(visible);
  }
 
  public void setUnderlinevisible(boolean visible) {
    underlineBtn.setVisible(visible);
  }
 
  public void setStrikethroughvisible(boolean visible) {
    strikethroughBtn.setVisible(visible);
  }
 
  public void setBordervisible(boolean visible) {
    borderBtn.setVisible(visible);
  }
 
  public void setFontcolorvisible(boolean visible) {
    fontColorBtn.setVisible(visible);
  }
 
  public void setCellcolorvisible(boolean visible) {
    cellColorBtn.setVisible(visible);
  }
 
 
  public void setAlignmentvisible(boolean visible) {
    valignBtn.setVisible(visible);
    halignBtn.setVisible(visible);
  }
 
  public void setWraptextvisible(boolean visible) {
    wrapTextBtn.setVisible(visible);
  }
 
  /**
   * Set control panel attributes when FontTargetChangeEvent fired
   * @param cellStyle
   */
  protected void initPanel(CellStyle cellStyle) {
    fontFamily.setValue(cellStyle.getFontFamily());
    fontSize.setValue("" + cellStyle.getFontSize());
   
    _isBold = cellStyle.isBold();
    boldBtn.setSclass(_isBold ? "clicked" : "");
   
    _isItalic = cellStyle.isItalic();
    italicBtn.setSclass(_isItalic ? "clicked" : "");
   
    _isUnderline = cellStyle.getUnderline() == CellStyle.UNDERLINE_SINGLE;
    underlineBtn.setSclass(_isUnderline ? "clicked" : "");
   
    _isStrikethrough = cellStyle.isStrikethrough();
    strikethroughBtn.setSclass(_isStrikethrough ? "clicked" : "");
    fontColorBtn.setColor(cellStyle.getFontColor());
    cellColorBtn.setColor(cellStyle.getCellColor());
   
    String halignImageSrc = getAlignImageSrc(cellStyle.getAlignment());
    if (halignImageSrc != null) {
      halignBtn.setImage(halignImageSrc);
      halignBtn.setSclass("dpbtn-seld");
    }
    String valignImageSrc = getVerticalAlignImageSrc(cellStyle.getVerticalAlignment());
    if (valignImageSrc != null) {
      valignBtn.setImage(valignImageSrc);
      valignBtn.setSclass("dpbtn-seld")
    }
   
    isWrapText = cellStyle.isWrapText();
    wrapTextBtn.setSclass(isWrapText ? "clicked" : "");
  }

  private static String getAlignImageSrc(int align) {
    switch (align) {
    case CellStyle.ALIGN_LEFT:
      return ALIGN_LEFT_SRC_IMAGE;
    case CellStyle.ALIGN_CENTER:
      return ALIGN_CENTER_SRC_IMAGE;
    case CellStyle.ALIGN_RIGHT:
      return ALIGN_RIGHT_SRC_IMAGE;
    }
    return null;
  }
 
  private static String getVerticalAlignImageSrc(int align) {
    switch (align) {
    case CellStyle.ALIGN_TOP:
      return ALIGN_TOP_SRC_IMAGE;
    case CellStyle.ALIGN_MIDDLE:
      return ALIGN_MIDDLE_SRC_IMAGE;
    case CellStyle.ALIGN_BOTTOM:
      return ALIGN_BOTTOM_SRC_IMAGE;
    }
    return null;
  }
 
 
  /**
   *
   * @param event
   */
  public void onSelect$fontFamily() {
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setFontFamily(fontFamily.getValue());
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  //TODO: move this to spreadsheet onblur event (not implement yet)
  public void onOpen$fontFamily() {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
  }
  //TODO: move this to spreadsheet onblur event (not implement yet)
  public void onOpen$fontSize() {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
  }
 
  public void onClick$boldBtn() {
    //TODO: move this to spreadsheet onblur event (not implement yet)
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
   
    _isBold = !_isBold;
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setBold(_isBold);
        boldBtn.setSclass(_isBold ? "clicked" : "");
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  public void onClick$italicBtn() {
    //TODO: move this to spreadsheet onblur event (not implement yet)
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
   
    _isItalic = !_isItalic;
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setItalic(_isItalic);
        italicBtn.setSclass(_isItalic ? "clicked" : "");
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  public void onClick$underlineBtn() {
    //TODO: move this to spreadsheet onblur event (not implement yet)
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
   
    _isUnderline = !_isUnderline;
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setUnderline(_isUnderline ? CellStyle.UNDERLINE_SINGLE : CellStyle.UNDERLINE_NONE);
        underlineBtn.setSclass(_isUnderline ? "clicked" : "");
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  public void onClick$strikethroughBtn() {
    //TODO: move this to spreadsheet onblur event (not implement yet)
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
   
    _isStrikethrough = !_isStrikethrough;
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setStrikethrough(_isStrikethrough);
        strikethroughBtn.setSclass(_isStrikethrough ? "clicked" : "");
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  public void onSelect$fontSize() {
    //getCellStyleContext().getFontStyle().setFontSize(Integer.parseInt(fontSize.getText()));
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setFontSize(Integer.parseInt(fontSize.getText()));
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  //TODO: move this to spreadsheet onblur event (not implement yet)
  public void onClick$fontColorBtn() {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
  }
  public void onChange$fontColorBtn() {
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setFontColor(fontColorBtn.getColor());
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
  //TODO: move this to spreadsheet onblur event (not implement yet)
  public void onClick$cellColorBtn() {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
  }
  public void onChange$cellColorBtn() {
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setCellColor(cellColorBtn.getColor());
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }

  public void onDropdown$borderBtn() {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
  }
 
  public void onBorderSelector(ForwardEvent evt) {
   
    final String color = "#000000";
    final String param = (String)evt.getData();
 
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        BorderStyle borderStyle = BorderStyle.MEDIUM;
        if ("no".equals(param))
          borderStyle = BorderStyle.NONE;
        style.setBorder(getBorderType(param), borderStyle, color);
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
  private static int getBorderType(String borderType) {
    if (borderType == null) {
      return Range.BORDER_EDGE_BOTTOM;
    }

    if ("bottom".equals(borderType))
      return Range.BORDER_EDGE_BOTTOM;
    else if ("right".equals(borderType))
      return Range.BORDER_EDGE_RIGHT;
    else if ("top".equals(borderType))
      return Range.BORDER_EDGE_TOP;
    else if ("left".equals(borderType))
      return Range.BORDER_EDGE_LEFT;
    else if ("outside".equals(borderType))
      return Range.BORDER_OUTLINE;
    else if ("inside".equals(borderType))
      return Range.BORDER_INSIDE;
    else if ("insideHorizontal".equals(borderType))
      return Range.BORDER_INSIDE_HORIZONTAL;
    else if ("insideVertical".equals(borderType))
      return Range.BORDER_INSIDE_VERTICAL;
    else if ("no".equals(borderType))
      return Range.BORDER_FULL;
    else if ("full".equals(borderType))
      return Range.BORDER_FULL;
    else if ("diagonalDown".equals(borderType))
      return Range.BORDER_DIAGONAL_DOWN;
    else if ("diagonalUp".equals(borderType))
      return Range.BORDER_DIAGONAL_UP;
    else if ("diagonal".equals(borderType))
      return Range.BORDER_DIAGONAL;

    return Range.BORDER_EDGE_BOTTOM;
  }
 
  public void onDropdown$valignBtn() {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
  }
 
  public void onDropdown$halignBtn() {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
  }
 
  public void onAlignSelector(ForwardEvent evt) {
    //TODO: move this to spreadsheet onblur event (not implement yet)
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
   
    final String align = (String)evt.getData();
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        int alignment = CellStyle.ALIGN_LEFT;
       
        if ("left".equals(align)) {
          alignment = CellStyle.ALIGN_LEFT;
        } else if ("center".equals(align)) {
          alignment = CellStyle.ALIGN_CENTER;
        } else if ("right".equals(align)) {
          alignment = CellStyle.ALIGN_RIGHT;
        }
        halignBtn.setImage(getAlignImageSrc(alignment));
        style.setAlignment(alignment);
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  public void onVerticalAlignSelector(ForwardEvent evt) {
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
    final String align = (String)evt.getData();
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        int alignment = CellStyle.ALIGN_TOP;
        if ("top".equals(align)) {
          alignment = CellStyle.ALIGN_TOP;
        } else if ("middle".equals(align)) {
          alignment = CellStyle.ALIGN_MIDDLE;
        } else if ("bottom".equals(align)) {
          alignment = CellStyle.ALIGN_BOTTOM;
       
        valignBtn.setImage(getVerticalAlignImageSrc(alignment));
        style.setVerticalAlignment(alignment);
      }
    });
    Events.postEvent(Events.ON_CLICK, this, null);
  }
 
  public void onClick$wrapTextBtn() {
    //TODO: move this to spreadsheet onblur event (not implement yet)
    getDesktopWorkbenchContext().getWorkbookCtrl().reGainFocus();
   
    isWrapText = !isWrapText;
    getCellStyleContext().modifyStyle(new StyleModification(){
      public void modify(CellStyle style, CellStyleContextEvent candidteEvt) {
        candidteEvt.setExecutor(CellStyleCtrlPanel.this);
        style.setWrapText(isWrapText);
        wrapTextBtn.setSclass(isWrapText ? "clicked" : "");
      }
    });
  }
 
  protected CellStyleContext getCellStyleContext(){
    return Zssapp.getDesktopCellStyleContext(this);
  }
 
  protected DesktopWorkbenchContext getDesktopWorkbenchContext() {
    return Zssapp.getDesktopWorkbenchContext(this);
  }

  public void onCreate() {
    //bug on IE6, cause div expand
    if (ServletFns.isBrowser("ie6")) {
      container.setHflex("min");
    }
   
    CellStyleContext context = getCellStyleContext();
    DisposedEventListener listener = new DisposedEventListener() {
      public boolean isDisposed() {
        return CellStyleCtrlPanel.this.getDesktop() == null;
      }
      public void onEvent(Event arg0) throws Exception {
        CellStyleContextEvent event = (CellStyleContextEvent) arg0;
        if(event.getExecutor() != CellStyleCtrlPanel.this)
          initPanel(event.getCellStyle());
      }
    };
    context.addEventListener(Consts.ON_STYLING_TARGET_CHANGED, listener);
    context.addEventListener(Consts.ON_CELL_STYLE_CHANGED, listener);

    getDesktopWorkbenchContext().addEventListener(Consts.ON_WORKBOOK_CHANGED, new EventListener() {
      public void onEvent(Event event) throws Exception {
        //clear all UI attribute when sheet open or close
        fontFamily.setValue(null);
        fontSize.setValue(null);
       
        _isBold = false;
        boldBtn.setSclass("");
       
        _isItalic = false;
        italicBtn.setSclass("");
       
        _isUnderline = false;
        underlineBtn.setSclass("");
       
        _isStrikethrough = false;
        strikethroughBtn.setSclass("");
        fontColorBtn.setColor("#000000");
        cellColorBtn.setColor("#FFFFFF");

        valignBtn.setSclass("");
        valignBtn.setImage(ALIGN_TOP_SRC_IMAGE);
        halignBtn.setSclass("");
        halignBtn.setImage(ALIGN_LEFT_SRC_IMAGE);
       
        isWrapText = false;
        wrapTextBtn.setSclass("");
      }
    });
  }
}
TOP

Related Classes of org.zkoss.zss.app.zul.ctrl.CellStyleCtrlPanel

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.