Package com.taobao.zeus.web.platform.client.module.word.component

Source Code of com.taobao.zeus.web.platform.client.module.word.component.EditTab

package com.taobao.zeus.web.platform.client.module.word.component;

import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.Style.LayoutRegion;
import com.sencha.gxt.core.client.util.DelayedTask;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.theme.blue.client.status.BlueBoxStatusAppearance;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.Status;
import com.sencha.gxt.widget.core.client.Status.StatusAppearance;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.CloseEvent;
import com.sencha.gxt.widget.core.client.event.CloseEvent.CloseHandler;
import com.sencha.gxt.widget.core.client.toolbar.FillToolItem;
import com.sencha.gxt.widget.core.client.toolbar.LabelToolItem;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
import com.taobao.zeus.web.platform.client.lib.codemirror.CodeMirror;
import com.taobao.zeus.web.platform.client.lib.codemirror.CodeMirror.CodeMirrorConfig;
import com.taobao.zeus.web.platform.client.lib.codemirror.CodeMirror.OnChangeListener;
import com.taobao.zeus.web.platform.client.module.filemanager.FileModel;
import com.taobao.zeus.web.platform.client.module.word.WordPresenter;
import com.taobao.zeus.web.platform.client.util.PlatformContext;
import com.taobao.zeus.web.platform.client.util.async.PlatformAsyncCallback;

public class EditTab extends BorderLayoutContainer {

  private FileModel model;

  @SuppressWarnings("unused")
  private WordPresenter presenter;

  private CodeMirror codeMirror;

  private Status status;
  private Status charCount;
  private LogTabPanel logTabPanel = new LogTabPanel();

  private VerticalLayoutContainer codePanel = new VerticalLayoutContainer();
  private ContentPanel logPanel = new ContentPanel();

  private String newContent;

  private PlatformContext context;


  public EditTab(PlatformContext context, WordPresenter presenter,
      final FileModel model) {
    this.context = context;
    this.presenter = presenter;
    this.model = model;

    ToolBar bar = new ToolBar();
    bar.add(new FillToolItem());

    charCount = new Status(
        GWT.<StatusAppearance> create(BlueBoxStatusAppearance.class));
    charCount.setWidth(150);
    if (model.getContent() == null)
      charCount.setText(0 + " 个字符");
    else
      charCount.setText(model.getContent().length() + " 个字符");
    bar.add(charCount);

    bar.add(new LabelToolItem(" "));

    status = new Status(
        GWT.<StatusAppearance> create(BlueBoxStatusAppearance.class));
    status.setText("已保存");
    status.setWidth(150);
    bar.add(status);

    codePanel.add(getCodeMirror(), new VerticalLayoutData(1, 1,
        new Margins(5)));
    bar.setLayoutData(new VerticalLayoutData(1, -1));
    codePanel.add(bar);
    setCenterWidget(codePanel, new MarginData(0, 0, 5, 0));

    if (model.getName().endsWith(".sh")
        || model.getName().endsWith(".hive") || model.getName().endsWith(".odps")) {
      logTabPanel.addCloseHandler(new CloseHandler<Widget>() {
        public void onClose(CloseEvent<Widget> event) {
          if (logTabPanel.getWidgetCount() == 0) {
            EditTab.this.hide(LayoutRegion.SOUTH);
          }
        }
      });
      logPanel.setWidget(logTabPanel);
      logPanel.setHeaderVisible(false);
      logTabPanel.setTabScroll(true);
      logTabPanel.setCloseContextMenu(true);
      logPanel.addAttachHandler(new com.google.gwt.event.logical.shared.AttachEvent.Handler() {
        @Override
        public void onAttachOrDetach(AttachEvent event) {
          if (event.isAttached())
            EditTab.this.hide(LayoutRegion.SOUTH);
        }
      });
      BorderLayoutData data = new BorderLayoutData();
      data.setSize(200);
//      data.setCollapsed(true);
//      data.setCollapseMini(true);
      data.setCollapsible(true);
      data.setSplit(true);
      setSouthWidget(logPanel, data);
    }

    getCodeMirror().addChangeListener(new OnChangeListener() {
      public void onChange() {
        newContent = getCodeMirror().getValue();
        status.setText("编辑中...");
        String value = getCodeMirror().getValue();
        int length = value != null ? value.length() : 0;
        charCount.setText(length + " 个字符");
        task.delay(1000);
      }
    });

  }

  public CodeMirror getCodeMirror() {
    if (codeMirror == null) {
      CodeMirrorConfig editCMC = new CodeMirrorConfig();
      editCMC.value = model.getContent();
      newContent = model.getContent();
      if (model.getName().endsWith(".hive")) {
        editCMC.mode = "mysql";
      } else if (model.getName().endsWith(".sh")) {
        editCMC.mode = "shell";
      } else if (model.getName().endsWith(".html")
          || model.getName().endsWith(".htm")) {
        editCMC.mode = "htmlmixed";
      } else {
        editCMC.mode = "shell";
      }
      editCMC.readOnly = false;
      codeMirror = new CodeMirror(editCMC);
    }
    return codeMirror;
  }

  private DelayedTask task = new DelayedTask() {
    @Override
    public void onExecute() {
      if (newContent == null) {
        newContent = model.getContent();
        if (newContent == null) {
          newContent = "";
        }
      }
      if (!newContent.equals(model.getContent())) {
        context.getFileSystem().updateFileContent(model.getId(),
            newContent, new PlatformAsyncCallback<Void>() {
              public void callback(Void t) {
              }
            });
      }
      status.clearStatus("已保存");
    }
  };

  public String getNewContent() {
    return newContent;
  }

  public LogTabPanel getLogTabPanel() {
    return this.logTabPanel;
  }

  public ContentPanel getLogPanel() {
    return this.logPanel;
  }

  public VerticalLayoutContainer getCodePanel() {
    return codePanel;
  }
}
TOP

Related Classes of com.taobao.zeus.web.platform.client.module.word.component.EditTab

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.