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

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

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;

import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.TabItemConfig;
import com.sencha.gxt.widget.core.client.TabPanel;
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.taobao.zeus.web.platform.client.app.PlatformPlace;
import com.taobao.zeus.web.platform.client.app.PlatformPlace.KV;
import com.taobao.zeus.web.platform.client.module.filemanager.FileModel;
import com.taobao.zeus.web.platform.client.module.filemanager.images.Images;
import com.taobao.zeus.web.platform.client.module.word.toolbar.ToolBarContainer;
import com.taobao.zeus.web.platform.client.util.PlatformContext;

public class WordViewImpl implements WordView {

  private VerticalLayoutContainer container;
  private ToolBarContainer toolBarContainer=new ToolBarContainer();
  private TabPanel tabPanel;

  private Map<String, Word> wordMap = new HashMap<String, Word>();

  private final WordPresenter presenter;
  private final PlatformContext context;

  public WordViewImpl(final PlatformContext context, final WordPresenter presenter) {
    this.presenter = presenter;
    this.context = context;
    tabPanel = new TabPanel();
    tabPanel.setTabScroll(true);
    tabPanel.setCloseContextMenu(true);
    tabPanel.getElement().setMargins(3);

    tabPanel.addCloseHandler(new CloseHandler<Widget>() {
      @Override
      public void onClose(CloseEvent<Widget> event) {
        Widget widget = event.getItem();
        for (String key : wordMap.keySet()) {
          if (wordMap.get(key).asWidget() == widget) {
            wordMap.remove(key);
            // 更新打开的文档状态
            presenter.updateLastOpen();
            if(tabPanel.getActiveWidget()!=null) {
              toolBarContainer.onDocChange((Word)tabPanel.getActiveWidget());
            }else{
              toolBarContainer.onDocChange(null);
            }
            break;
          }
        }
      }
    });

    tabPanel.addSelectionHandler(new SelectionHandler<Widget>() {

      @Override
      public void onSelection(SelectionEvent<Widget> event) {
        if (event.getSelectedItem() instanceof Word) {
          Word word=(Word) event.getSelectedItem();
          String token=History.getToken();
          if(token!=null){
            PlatformPlace pp=new PlatformPlace(token);
            Queue<KV> queue=new LinkedList<PlatformPlace.KV>();
            for(KV kv:pp.getSource()){
              if(!kv.key.equals(WordPresenter.TAG)){
                queue.offer(kv);
              }
            }
            queue.offer(new KV(WordPresenter.TAG, word.getFileModel().getId()));
            History.newItem(new PlatformPlace(queue).getToken(), false);
          }
          // 更新打开的文档状态
          presenter.updateLastOpen();
          toolBarContainer.onDocChange(word);
        }
      }
    });
   
    container=new VerticalLayoutContainer();
    container.add(toolBarContainer,new VerticalLayoutData(1, 35, new Margins(0,0,3,0)));
    container.add(tabPanel,new VerticalLayoutData(1, 1d, new Margins(0)));
  }

  @Override
  public boolean contain(String fileId) {
    if (wordMap.get(fileId) != null) {
      return true;
    }
    return false;
  }

  @Override
  public void open(FileModel fm) {
    if (contain(fm.getId())) {
      tabPanel.setActiveWidget(wordMap.get(fm.getId()));
    } else {
      Widget widget = null;
      TabItemConfig config = new TabItemConfig(getDocViewName(fm), true);
      if (fm.isFolder()) {
        throw new RuntimeException("不能打开文件夹");
      } else if (fm.getName().endsWith(".hive")) {
        HiveWord word = new HiveWord(context, presenter, fm);
        config.setIcon(Images.getImageResources().script());
        wordMap.put(fm.getId(), word);
        widget = word.asWidget();
      } else if (fm.getName().endsWith(".sh")) {
        ShellWord word = new ShellWord(context, presenter, fm);
        config.setIcon(Images.getImageResources().script());
        wordMap.put(fm.getId(), word);
        widget = word.asWidget();
      } else {
        TextWord word = new TextWord(context, presenter, fm);
        config.setIcon(Images.getImageResources().page_white());
        wordMap.put(fm.getId(), word);
        widget = word.asWidget();
      }
      if (widget != null) {
        tabPanel.add(widget, config);
        tabPanel.setActiveWidget(widget);
      }
    }
    // 更新打开的文档状态
    this.presenter.updateLastOpen();
  }

  private String getDocViewName(FileModel fm) {
    return "["+fm.getId()+"] "+fm.getName();
  }

  @Override
  public Widget asWidget() {
    return container;
  }

  @Override
  public void updateFileName(FileModel model) {
    if (contain(model.getId())) {
      Word word = wordMap.get(model.getId());
      TabItemConfig config = tabPanel.getConfig(word);
      config.setText(getDocViewName(model));
      tabPanel.update(word, config);
    }
  }

  @Override
  public List<String> getOpenedDocs() {
    List<String> list =  new ArrayList<String>(tabPanel.getWidgetCount()+1);
    for(int i=0;i<tabPanel.getWidgetCount();i++){
      Word word = (Word) tabPanel.getWidget(i);
      list.add(word.getFileModel().getId());
    }
    // 把激活的文档ID加到列表末端
    if(tabPanel.getActiveWidget()!=null){
      Word activeWord = (Word) tabPanel.getActiveWidget();
      list.add(activeWord.getFileModel().getId());
    }
    return list;
  }
}
TOP

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

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.