Package org.objectstyle.wolips.eomodeler.outline

Source Code of org.objectstyle.wolips.eomodeler.outline.EOModelContentOutlinePage$ToggleNonClassPropertiesAction

/*
* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2006 The ObjectStyle Group and individual authors of the
* software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowlegement: "This product includes software
* developed by the ObjectStyle Group (http://objectstyle.org/)." Alternately,
* this acknowlegement may appear in the software itself, if and wherever such
* third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse or
* promote products derived from this software without prior written permission.
* For written permission, please contact andrus@objectstyle.org.
*
* 5. Products derived from this software may not be called "ObjectStyle" nor
* may "ObjectStyle" appear in their names without prior written permission of
* the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many individuals on
* behalf of the ObjectStyle Group. For more information on the ObjectStyle
* Group, please see <http://objectstyle.org/>.
*/
package org.objectstyle.wolips.eomodeler.outline;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.jface.action.Action;
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.jface.action.Separator;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.TreeViewerEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.objectstyle.wolips.eomodeler.Activator;
import org.objectstyle.wolips.eomodeler.core.model.EOModel;
import org.objectstyle.wolips.eomodeler.editors.EOModelClipboardHandler;
import org.objectstyle.wolips.eomodeler.editors.EOModelEditor;

public class EOModelContentOutlinePage extends ContentOutlinePage implements PropertyChangeListener {
  private EOModelTreeViewUpdater _updater;

  private EOModelEditor _editor;

  private EOModelClipboardHandler _clipboardHandler;

  private ToggleNonClassPropertiesAction _toggleNonClassPropertiesAction;

  private ToggleModelGroupAction _toggleModelGroupAction;

  private Menu _contextMenu;

  private boolean _selectedWithOutline;

  public EOModelContentOutlinePage(EOModelEditor editor) {
    _selectedWithOutline = true;
    _clipboardHandler = new EOModelClipboardHandler();
    _editor = editor;
  }

  protected void updateClipboardHandler() {
    IPageSite site = getSite();
    if (site != null && _editor != null) {
      IActionBars actionBars = site.getActionBars();
      _clipboardHandler.attach(actionBars, _editor);
    }
  }

  public void createControl(Composite parent) {
    super.createControl(parent);

    TreeViewer treeViewer = getTreeViewer();
   
   
    //TreeColumnLayout outlineTreeLayout = new TreeColumnLayout();
    //_treeComposite.setLayout(outlineTreeLayout);

    final TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.NONE);
    column.setLabelProvider(new EOModelOutlineColumnLabelProvider(treeViewer));
    column.setEditingSupport(new EOModelOutlineEditingSupport(treeViewer));
    column.getColumn().setWidth(400);
    //outlineTreeLayout.setColumnData(column.getColumn(), new ColumnWeightData(100, true));

    ColumnViewerEditorActivationStrategy strategy = new ColumnViewerEditorActivationStrategy(treeViewer) {
      @Override
      protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
        return event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION;
      }
    };
    TreeViewerEditor.create(treeViewer, null, strategy, ColumnViewerEditor.DEFAULT);
    /*
    parent.addControlListener(new ControlAdapter() {
      @Override
      public void controlResized(ControlEvent e) {
        super.controlResized(e);
        Composite widget = (Composite)e.getSource();
        column.getColumn().setWidth(widget.getSize().x);
        System.out.println(".controlResized: " + widget.getSize());
      }
    });
    */


    if (_updater != null) {
      _updater.dispose();
    }
    _updater = new EOModelTreeViewUpdater(treeViewer, new EOModelOutlineContentProvider(true, true, true, true, true, true, true, true));
    _updater.setModel(_editor.getModel());
    updateClipboardHandler();
    // AK: commenting prevents an error in swt
    // setFocus();

    IActionBars actionBars = getSite().getActionBars();
    IToolBarManager toolBarManager = actionBars.getToolBarManager();
    _toggleNonClassPropertiesAction = new ToggleNonClassPropertiesAction();
    toolBarManager.add(_toggleNonClassPropertiesAction);
    _toggleModelGroupAction = new ToggleModelGroupAction();
    toolBarManager.add(_toggleModelGroupAction);

    MenuManager menuManager = new MenuManager();
    menuManager.setRemoveAllWhenShown(true);
    menuManager.addMenuListener(new IMenuListener() {
      public void menuAboutToShow(IMenuManager m) {
        m.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
      }
    });
    Tree tree = treeViewer.getTree();
    _contextMenu = menuManager.createContextMenu(treeViewer.getTree());
    tree.setMenu(_contextMenu);
    getSite().registerContextMenu("org.objectstyle.wolips.eomodeler.outline", menuManager, treeViewer);

    if (_editor.getModel() == null) {
      treeViewer.setInput(new EOModelLoading(null));
      treeViewer.expandAll();
    }
  }
 
  @SuppressWarnings("unchecked")
  public void propertyChange(PropertyChangeEvent evt) {
    TreeViewer treeViewer = getTreeViewer();
    if (treeViewer != null) {
      Set<EOModel> oldModels = (Set<EOModel>) evt.getOldValue();
      Set<EOModel> newModels = new HashSet<EOModel>((Set<EOModel>) evt.getNewValue());
      newModels.removeAll(oldModels);
      if (newModels.size() == 1) {
        EOModel newModel = newModels.iterator().next();
        Object input = treeViewer.getInput();
        if (input instanceof EOModelLoading) {
          ((EOModelLoading) input).setModel(newModel);
        }
        Display.getDefault().asyncExec(new Runnable() {
          public void run() {
            getTreeViewer().refresh(getTreeViewer().getInput());
            getTreeViewer().expandAll();
          }
        });
      }
    }
  }

  @Override
  public void dispose() {
    if (_contextMenu != null && !_contextMenu.isDisposed()) {
      _contextMenu.dispose();
      _contextMenu = null;
    }
    if (_updater != null) {
      _updater.dispose();
    }
    super.dispose();
  }

  public void init(IPageSite pageSite) {
    super.init(pageSite);
    updateClipboardHandler();
  }

  public boolean isSelectedWithOutline() {
    return _selectedWithOutline;
  }
 
  @Override
  protected void fireSelectionChanged(ISelection selection) {
    super.fireSelectionChanged(selection);
  }

  public void selectionChanged(SelectionChangedEvent event) {
    super.selectionChanged(event);
    _clipboardHandler.selectionChanged(event);
  }

  public void setSelection(ISelection selection) {
    _selectedWithOutline = false;
    try {
      super.setSelection(selection);
    } finally {
      _selectedWithOutline = true;
    }
  }

  public EOModelTreeViewUpdater getUpdater() {
    return _updater;
  }

  public void showModelGroup() {
    _toggleModelGroupAction.showModelGroup();
  }

  public void showModel() {
    _toggleModelGroupAction.showModel();
  }
 
  public class ToggleModelGroupAction extends Action {
    private boolean _showModel;

    public ToggleModelGroupAction() {
      _showModel = true;
      refreshUI();
      setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor(Activator.EOMODEL_ICON));
    }

    public void toggleChanged() {
      _showModel = !_showModel;
      refreshUI();
    }

    public void showModelGroup() {
      _showModel = false;
      refreshUI();
    }

    public void showModel() {
      _showModel = true;
      refreshUI();
    }
   
    public void refreshUI() {
      if (_showModel) {
        getUpdater().showModel();
        setToolTipText("Show ModelGroup");
        setChecked(false);
      } else {
        getUpdater().showModelGroup();
        setToolTipText("Show Model");
        setChecked(true);
      }
    }

    @Override
    public void run() {
      toggleChanged();
    }
  }

  public class ToggleNonClassPropertiesAction extends Action {
    private boolean _showNonClassProperties;

    public ToggleNonClassPropertiesAction() {
      _showNonClassProperties = true;
      refreshUI();
      setImageDescriptor(Activator.getDefault().getImageRegistry().getDescriptor(Activator.CLASS_PROPERTY_ICON));
    }

    public void toggleChanged() {
      _showNonClassProperties = !_showNonClassProperties;
      refreshUI();
    }

    public void refreshUI() {
      if (_showNonClassProperties) {
        getUpdater().showNonClassProperties();
        setToolTipText("Hide Non-Class Properties");
        setChecked(true);
      } else {
        getUpdater().hideNonClassProperties();
        setToolTipText("Show Non-Class Properties");
        setChecked(false);
      }
    }

    @Override
    public void run() {
      toggleChanged();
    }
  }
}
TOP

Related Classes of org.objectstyle.wolips.eomodeler.outline.EOModelContentOutlinePage$ToggleNonClassPropertiesAction

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.