Package org.fusesource.ide.commons.ui.views

Source Code of org.fusesource.ide.commons.ui.views.TabFolderSupport

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.commons.ui.views;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.IPage;
import org.eclipse.ui.part.IPageBookViewPage;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.ViewPart;
import org.fusesource.ide.commons.Activator;
import org.fusesource.ide.commons.PreferencesHelper;
import org.osgi.service.prefs.Preferences;


public abstract class TabFolderSupport extends ViewPart implements IViewPage {

  private static final String TAB_SELECTION_INDEX = "tabSelectionIndex";
  private Composite parent;
  private CTabFolder tabFolder;
  private IPageSite pageSite;
  /*
  private Action refreshAction;
  private Action doubleClickAction;
   */
  private Menu menu;
  private List<IPage> pages = new ArrayList<IPage>();

  public TabFolderSupport() {
    super();
  }

  @Override
  public void init(IPageSite pageSite) {
    this.pageSite = pageSite;
  }

  public IPageSite getPageSite() {
    return pageSite;
  }

  public String getId() {
    return getClass().getName();
  }

  @Override
  public void createPartControl(Composite parent) {
    this.parent = parent;

    parent.setLayout(new FillLayout());

    tabFolder = new CTabFolder(parent, SWT.BORDER);

    try {
      createTabItems();
    } catch (PartInitException e) {
      Activator.getLogger().error("Failed to create tabs: "+ e, e);
    }


    tabFolder.addSelectionListener(new SelectionListener() {

      @Override
      public void widgetSelected(SelectionEvent e) {
        setTabSelectionIndex(tabFolder.getSelectionIndex());
      }

      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
      }
    });

    int lastSelectedIndex = getTabSelectionIndex();
    tabFolder.setSelection(lastSelectedIndex);

    // Create the help context id for the viewer's control
    makeActions();
    contributeToActionBars();

  }

  protected int getTabSelectionIndex() {
    Preferences node = getConfigurationNode();
    int lastSelectedIndex = node.getInt(TAB_SELECTION_INDEX, 0);
    if (!isValidSelectionIndex(lastSelectedIndex)) {
      lastSelectedIndex = 0;
    }
    return lastSelectedIndex;
  }

  protected void setTabSelectionIndex(int index) {
    if (isValidSelectionIndex(index)) {
      Preferences node = getConfigurationNode();
      node.putInt(TAB_SELECTION_INDEX, index);
      PreferencesHelper.flush(node);
    }
  }

  protected Preferences getConfigurationNode() {
    return PreferencesHelper.configurationNode(getId(), "TabFolder");
  }


  protected boolean isValidSelectionIndex(int index) {
    return index >= 0 && index < tabFolder.getItemCount();
  }

  protected abstract void createTabItems() throws PartInitException;


  public CTabItem addPage(String text, IPage page) throws PartInitException {
    IViewSite viewSite = getViewSite();

    pages.add(page);
    if (pageSite != null) {
      if (page instanceof IPageBookViewPage) {
        IPageBookViewPage pageBookViewPage = (IPageBookViewPage) page;
        pageBookViewPage.init(pageSite);
      } else if (page instanceof IViewPage) {
        IViewPage viewPage = (IViewPage) page;
        viewPage.init(pageSite);
      }
    }
    if (viewSite != null && page instanceof IViewPart) {
      IViewPart viewPart = (IViewPart) page;
      viewPart.init(viewSite);
    }
    Composite pageComposite = new Composite(tabFolder, SWT.NONE);
    pageComposite.setLayout(new FillLayout());
    page.createControl(pageComposite);
    return addTabItem(text, pageComposite);
  }


  protected CTabItem addTabItem(String text, Control control) {
    CTabItem item = new CTabItem(tabFolder, SWT.NONE);
    item.setControl(control);
    item.setText(text);
    return item;
  }

  protected void hookContextMenu() {
    MenuManager menuMgr = new MenuManager("#PopupMenu");
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
      @Override
      public void menuAboutToShow(IMenuManager manager) {
        TabFolderSupport.this.fillContextMenu(manager);
      }
    });
    menu = menuMgr.createContextMenu(tabFolder);
    tabFolder.setMenu(menu);

    /*
    IWorkbenchPartSite site = getSite();
    if (site != null) {
      site.registerContextMenu(menuMgr, tabFolder);
    } else if (pageSite != null) {
      // TODO use a different ID?
      pageSite.registerContextMenu(getHelpID(), menuMgr, viewer);
    } else {
      warnNoSite();
    }
     */
  }

  protected IWorkbenchPart getPart() {
    IWorkbenchPartSite site = getSite();
    IWorkbenchPart answer = null;
    if (site != null) {
      answer  = site.getPart();
    }
    if (answer == null) {
      IPageSite ps = getPageSite();
      if (ps != null) {
        answer = ps.getPage().getActivePart();
      }
    }
    return answer;

  }
  protected void contributeToActionBars() {
    IActionBars bars = null;
    if (getViewSite() != null) {
      bars = getViewSite().getActionBars();
    } else if (pageSite != null) {
      bars = pageSite.getActionBars();
    } else {
      warnNoSite();
      return;
    }
    fillLocalPullDown(bars.getMenuManager());
    fillLocalToolBar(bars.getToolBarManager());
  }

  protected void warnNoSite() {
    Activator.getLogger().warning("No IViewSite or IPageSite registered for " + this);
  }

  protected void fillLocalPullDown(IMenuManager manager) {
    /*
    manager.add(refreshAction);
     */
  }

  protected void fillContextMenu(IMenuManager manager) {
    /*
    manager.add(refreshAction);
     */
  }

  protected void fillLocalToolBar(IToolBarManager manager) {
    /*
    manager.add(refreshAction);
     */
  }

  protected void makeActions() {
    /*
    refreshAction = new Action() {
      @Override
      public void run() {
        refresh();
      }
    };
    refreshAction.setText("Refresh");

    Activator.setLocalImageDescriptors(refreshAction, "refresh.gif"); //$NON-NLS-1$
    doubleClickAction = new Action() {
      @Override
      public void run() {
        ISelection selection = viewer.getSelection();
        doubleClickSelection(selection);
      }
    };
     */
  }


  /**
   * Passing the focus request to the viewer's control.
   */
  @Override
  public void setFocus() {
    tabFolder.setFocus();
  }

  public CTabFolder getTabFolder() {
    return tabFolder;
  }
}
TOP

Related Classes of org.fusesource.ide.commons.ui.views.TabFolderSupport

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.