com.google.code.t4eclipse.tools.view.ActivePartControlView.java Source code

Java tutorial

Introduction

Here is the source code for com.google.code.t4eclipse.tools.view.ActivePartControlView.java

Source

/*******************************************************************************
 * Copyright (c) 2013 jialiang.
 * All rights reserved. This program and the accompanying materials
 * are 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:
 *     Ben Xu, xufengbing@gmail.com - initial API and implementation
 *     jialiang, lantianjialiang@gmail.com - add copy right and fix warning
 ******************************************************************************/
package com.google.code.t4eclipse.tools.view;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import com.google.code.t4eclipse.core.utility.ControlUtility;
import com.google.code.t4eclipse.core.utility.MenuUtility;
import com.google.code.t4eclipse.selection.RootControlSelection;
import com.google.code.t4eclipse.tools.utility.SelectionUtility;
import com.google.code.t4eclipse.tools.view.provider.ControlContentProvider;
import com.google.code.t4eclipse.tools.view.provider.ControlLabelProvider;

public class ActivePartControlView extends ViewPart {
    public static ActivePartControlView view;
    private Text headText;
    private Text infoSashText;
    private SashForm sashForm;
    private Composite treeViewerComposite;
    private TreeViewer viewer;
    private IWorkbenchPart part;
    private IPartListener listener;

    public void showRootControl(Control rootControl) {
        headText.setText("");
        this.part = null;
        infoSashText.setText("");
        viewer.setSelection(StructuredSelection.EMPTY);
        viewer.setInput(new RootControlSelection(rootControl));
        viewer.expandAll();

    }

    @SuppressWarnings("hiding")
    public void showAcitivePart(IWorkbenchPart part) {
        Control c = ControlUtility.getPartControl(part);
        this.part = part;

        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addPartListener(listener);

        headText.setText(ControlUtility.getActivePartDiscription(this.part));

        infoSashText.setText(SelectionUtility.getSelectionInfo(this.part));
        viewer.setInput(new RootControlSelection(c));
        viewer.expandAll();
        Control focusControl = ControlUtility.getFocusControl(c);
        if (focusControl != null) {
            Tree tree = viewer.getTree();
            ControlUtility.selectFocusedTreeItem(tree);
        }

    }

    @Override
    public void createPartControl(Composite root) {
        root.setLayout(new FillLayout());
        sashForm = new SashForm(root, SWT.HORIZONTAL);

        treeViewerComposite = new Composite(sashForm, SWT.NONE);
        infoSashText = new Text(sashForm, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY);

        // Composite composite = new Composite(parent, SWT.NONE); // in method
        // use parent
        GridLayout layout = new GridLayout();
        layout.horizontalSpacing = 0;
        layout.verticalSpacing = 0;
        layout.marginWidth = 0;
        layout.marginHeight = 0;
        layout.numColumns = 1;
        treeViewerComposite.setLayout(layout);
        treeViewerComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
        headText = new Text(treeViewerComposite, SWT.SINGLE | SWT.READ_ONLY);

        headText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        createViewer(treeViewerComposite);

        sashForm.setWeights(new int[] { 6, 4 });

        getSite().setSelectionProvider(viewer);
        final MenuManager menuMgr = new MenuManager("#PopupMenu");
        menuMgr.setRemoveAllWhenShown(true);

        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                if (ActivePartControlView.this.part != null
                        && ActivePartControlView.this.part instanceof IViewPart) {

                    manager.add(new Separator());
                    Action openToolBarAction = new Action() {
                        @SuppressWarnings("hiding")
                        @Override
                        public void run() {

                            ToolBar bar = MenuUtility.getviewToolBar(ActivePartControlView.this.part);

                            if (bar.getItems() == null || bar.getItemCount() == 0) {
                                MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Confirm",
                                        "No View toolBar action contributed in this view!\n");

                            }

                            else {
                                try {
                                    IViewPart view = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                                            .getActivePage()
                                            .showView("com.google.code.t4eclipse.tools.view.ToolBarAnalyzerView");
                                    if (view != null && view instanceof ToolBarAnalyzerView) {
                                        ToolBarAnalyzerView ma = (ToolBarAnalyzerView) view;
                                        ma.update(bar);
                                    }
                                } catch (PartInitException e) {
                                    e.printStackTrace();
                                }
                            }

                        }
                    };

                    openToolBarAction.setText("Analyze View Toolbar");

                    Action openViewMenuAction = new Action() {
                        @SuppressWarnings("hiding")
                        @Override
                        public void run() {

                            Menu menu = MenuUtility.getViewMenu(ActivePartControlView.this.part);
                            if (menu == null || menu.getItemCount() == 0) {
                                MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Confirm",
                                        "No View menu action contributed in this view\n"
                                                + "Or the menu is not showed before!\n"
                                                + "Please mannually show the toolbar menu before analyze it\n"
                                                + " if toolbar menu exists for the view " + "");
                            }
                            if (menu != null) {
                                try {
                                    IViewPart view = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                                            .getActivePage()
                                            .showView("com.google.code.t4eclipse.tools.view.MenuAnalyzerView");
                                    if (view != null && view instanceof MenuAnalyzerView) {
                                        MenuAnalyzerView ma = (MenuAnalyzerView) view;
                                        ma.update(menu);
                                    }
                                } catch (PartInitException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    };

                    openViewMenuAction.setText("Analyze View Menu");
                    manager.add(openToolBarAction);

                    manager.add(openViewMenuAction);
                    manager.add(new Separator());
                }

            }
        });
        Menu menu = menuMgr.createContextMenu(this.viewer.getTree());

        this.viewer.getTree().setMenu(menu);
        getSite().registerContextMenu(menuMgr, this.viewer);

        view = this;

        listener = new IPartListener() {

            public void partOpened(IWorkbenchPart aPart) {
                //do nothing
            }

            public void partDeactivated(IWorkbenchPart aPart) {
                //do nothing
            }

            public void partClosed(IWorkbenchPart aPart) {

                if (aPart != null && !(aPart instanceof ActivePartControlView)) {
                    if (aPart == ActivePartControlView.this.part) {
                        ActivePartControlView.this.cleanContent();
                    }
                }
            }

            public void partBroughtToTop(IWorkbenchPart aPart) {
                //do nothing
            }

            public void partActivated(IWorkbenchPart aPart) {
                //do nothing
            }
        };

        sashForm.setMaximizedControl(treeViewerComposite);
    }

    private void createViewer(Composite parent) {
        viewer = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);

        viewer.getTree().setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
        viewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
        // fFilteredTree.setInitialText(Messages.LogView_show_filter_initialText);

        viewer.getTree().setLinesVisible(true);
        viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
        createColumns(viewer.getTree());
        viewer.setContentProvider(new ControlContentProvider());

        viewer.setLabelProvider(new ControlLabelProvider());
        viewer.addDoubleClickListener(new IDoubleClickListener() {

            public void doubleClick(DoubleClickEvent event) {

                ISelection sel = viewer.getSelection();
                ActivePartControlView.this.infoSashText.setText(ControlUtility.getSelectionText(sel));

            }
        });

    }

    private void createColumns(Tree tree) {

        for (int i = 0; i < ControlUtility.COLUMNS.length; i++) {
            TreeColumn col = new TreeColumn(tree, SWT.LEFT);
            col.setText(ControlUtility.COLUMNS[i]);
            col.setWidth(ControlUtility.COL_WIDTH[i]);
        }

        tree.setHeaderVisible(true);

    }

    @Override
    public void setFocus() {
        // DO nothing
    }

    @Override
    public void dispose() {
        view = null;
        super.dispose();
    }

    public TreeViewer getTreeViewer() {

        return this.viewer;
    }

    public void toggleProp(IAction action) {
        sashForm.setMaximizedControl(action.isChecked() ? null : treeViewerComposite);
    }

    public void cleanContent() {
        if (!this.headText.isDisposed())
            this.headText.setText("");
        if (!this.infoSashText.isDisposed())
            this.infoSashText.setText("");
        if (!this.viewer.getTree().isDisposed()) {
            this.viewer.setSelection(StructuredSelection.EMPTY);
            this.viewer.setInput(null);
        }

    }
}