EditorToolbar.java :  » GWT » gwt-html-editor » com » gc » gwt » wysiwyg » client » Java Open Source

Java Open Source » GWT » gwt html editor 
gwt html editor » com » gc » gwt » wysiwyg » client » EditorToolbar.java
/*
 * Copyright 2006 Pavel Jbanov.
 * 
 * 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 com.gc.gwt.wysiwyg.client;

import java.util.HashMap;
import java.util.Map;

import com.gc.gwt.wysiwyg.client.defaults.DefaultConstants;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.CellPanel;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class EditorToolbar extends Composite {

  /* Inner Classes */
  
  private static class EditorToolbarFlowPanel extends FlowPanel {
    public void insert(Widget w, int beforeIndex) {
      super.insert(w, beforeIndex);
      DOM.insertChild(getElement(), w.getElement(), beforeIndex);
    }
  }
  
  /* Fields */
  
  private final EditorToolbarFlowPanel fullToolbar;
  private final Map<String, Widget> widgetMap = new HashMap<String, Widget>();
  private final Map<Widget, String> widgetIDMap = new HashMap<Widget, String>();
  private final FlowPanel sourceToolbar;
  private final CellPanel topContainer;
  private int spacerCounter = 0;
  
  /* Constructors */
  public EditorToolbar() {
    topContainer = new VerticalPanel();
    topContainer.setStyleName("Editor-Toolbar");
    topContainer.setWidth("100%");

    fullToolbar = new EditorToolbarFlowPanel();
  
    sourceToolbar = new FlowPanel();

    topContainer.add(fullToolbar);
    topContainer.add(sourceToolbar);

    fullToolbar.setVisible(true);
    sourceToolbar.setVisible(false);
    
    initWidget(topContainer);
    setWidth("100%");
  }
  

  /* Methods */

  public void addSpacer() {
    this.putWidgetLast(new EditorToolbarButton(DefaultConstants.SPACER), "SPACER_" + (++spacerCounter));
  }
  
  public int getWidgetIndex(Widget widget) {
    return fullToolbar.getWidgetIndex(widget);
  }
  
  public int getWidgetCount() {
    return widgetMap.size();
  }
  
  public String getWidgetID(Widget widget) {
    return (String) widgetIDMap.get(widget);
  }
  
  public Widget getWidget(int index) {
    return fullToolbar.getWidget(index);
  }
  
  public Widget getWidget(String widgetID) {
    return (Widget) widgetMap.get(widgetID);
  }
  
  public void putWidget(Widget widget, int index, String widgetID) {
    if (widgetMap.containsKey(widgetID)) {
      throw new RuntimeException("Cannot put widget with duplicate widget ID '" +
          widgetID + "'. Use replaceWidget(...) method instead.");
    }
    
    fullToolbar.insert(widget, index);
    widgetMap.put(widgetID, widget);
    widgetIDMap.put(widget, widgetID);
  }
  
  public void putWidgetLast(Widget widget, String widgetID) {
    putWidget(widget, getWidgetCount(), widgetID);
  }
  
  public void putWidgetFirst(Widget widget, String widgetID) {
    putWidget(widget, 0, widgetID);
  }
  
  public void replaceWidget(Widget original, Widget widget) {
    replaceWidget(original, widget, getWidgetID(original));
  }
  
  public void replaceWidget(Widget original, Widget widget, String widgetID) {
    Widget idOwner = getWidget(widgetID);
    if (idOwner != null && idOwner != original) {
      throw new RuntimeException("Provided widgetID is owned by a widget" +
            " other that the widget that is being replaced.");
    }
    
    // Remove
    int indexOfTheOriginal = getWidgetIndex(original);
    removeWidget(indexOfTheOriginal);
    
    // Add
    putWidget(widget, indexOfTheOriginal, widgetID);
  }
  
  public void removeWidget(int index) {
    Widget widget = getWidget(index);
    String widgetID = getWidgetID(widget);
    
    fullToolbar.remove(index);
    widgetMap.remove(widgetID);
    widgetIDMap.remove(widget);
  }
  
  public void removeWidget(String widgetID) {
    Widget widget = getWidget(widgetID);
    int index = getWidgetIndex(widget);
    
    fullToolbar.remove(index);
    widgetMap.remove(widgetID);
    widgetIDMap.remove(widget);
  }
  
  public void removeWidget(Widget widget) {
    String widgetID = getWidgetID(widget);
    int index = getWidgetIndex(widget);
    
    fullToolbar.remove(index);
    widgetMap.remove(widgetID);
    widgetIDMap.remove(widget);
  }
  
  public void addSourceToolbarWidget(Widget widget) {
    sourceToolbar.add(widget);
  }

  public void setWidth(String width) {
    topContainer.setWidth(width);
  }

  public String getWidth() {
    return DOM.getStyleAttribute(topContainer.getElement(), "width");
  }

  public void switchToSource() {
    fullToolbar.setVisible(false);
    sourceToolbar.setVisible(true);
  }

  public void switchToFull() {
    fullToolbar.setVisible(true);
    sourceToolbar.setVisible(false);
  }
  
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.