< prev index next >

application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/JfrOutlinePage.java

Print this page




  33 package org.openjdk.jmc.flightrecorder.ui;
  34 
  35 import static org.eclipse.ui.IWorkbenchCommandConstants.EDIT_COPY;
  36 import static org.eclipse.ui.IWorkbenchCommandConstants.EDIT_DELETE;
  37 import static org.eclipse.ui.IWorkbenchCommandConstants.EDIT_PASTE;
  38 
  39 import java.util.List;
  40 
  41 import org.eclipse.jface.action.Action;
  42 import org.eclipse.jface.action.IAction;
  43 import org.eclipse.jface.action.IMenuManager;
  44 import org.eclipse.jface.action.MenuManager;
  45 import org.eclipse.jface.dialogs.MessageDialog;
  46 import org.eclipse.jface.resource.ImageDescriptor;
  47 import org.eclipse.jface.util.IPropertyChangeListener;
  48 import org.eclipse.jface.util.LocalSelectionTransfer;
  49 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
  50 import org.eclipse.jface.viewers.ISelection;
  51 import org.eclipse.jface.viewers.IStructuredSelection;
  52 import org.eclipse.jface.viewers.ITreeContentProvider;
  53 import org.eclipse.jface.viewers.SelectionChangedEvent;
  54 import org.eclipse.jface.viewers.StructuredSelection;
  55 import org.eclipse.jface.viewers.TreeViewer;
  56 import org.eclipse.jface.viewers.Viewer;
  57 import org.eclipse.jface.viewers.ViewerDropAdapter;
  58 import org.eclipse.swt.SWT;
  59 import org.eclipse.swt.dnd.DND;
  60 import org.eclipse.swt.dnd.DragSourceAdapter;
  61 import org.eclipse.swt.dnd.DragSourceEvent;
  62 import org.eclipse.swt.dnd.Transfer;
  63 import org.eclipse.swt.dnd.TransferData;
  64 import org.eclipse.swt.graphics.Image;
  65 import org.eclipse.swt.widgets.Composite;
  66 import org.eclipse.swt.widgets.Display;
  67 import org.eclipse.ui.IActionBars;
  68 import org.eclipse.ui.PlatformUI;
  69 import org.eclipse.ui.part.IPageSite;
  70 import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
  71 
  72 import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages;
  73 import org.openjdk.jmc.flightrecorder.ui.pages.itemhandler.ItemHandlerPage;


 308                 mm.appendToGroup(MCContextMenuManager.GROUP_NEW, createNewPageMenuManager());
 309                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 310                                 ActionToolkit.action(() -> moveSelectedLeft(true), Messages.JFR_OUTLINE_MOVE_LEFT));
 311                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 312                                 ActionToolkit.action(() -> moveSelectedLeft(false), Messages.JFR_OUTLINE_MOVE_RIGHT));
 313                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 314                                 ActionToolkit.action(() -> moveSelectedUp(true), Messages.JFR_OUTLINE_MOVE_UP));
 315                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 316                                 ActionToolkit.action(() -> moveSelectedUp(false), Messages.JFR_OUTLINE_MOVE_DOWN));
 317                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT, copyAction);
 318                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT, pasteAction);
 319                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT, deleteAction);
 320                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 321                                 ActionToolkit.action(this::resetSelected, Messages.JFR_OUTLINE_RESET_ACTION, RESET_ICON));
 322 
 323                 ab.getMenuManager().add(createNewPageMenuManager());
 324                 ab.getToolBarManager().add(PAGE_STRUCTURE_LOCK_ACTION);
 325                 ab.getToolBarManager().add(RESET_ALL_PAGES_ACTION);
 326 
 327                 getTreeViewer().addDoubleClickListener(e -> expandSelected());






 328 
 329                 ColumnViewerToolTipSupport.enableFor(getTreeViewer());
 330 
 331                 getTreeViewer().addDragSupport(DND_OPERATIONS, DND_TRANSFER, new OutlineDragListener());
 332                 getTreeViewer().addDropSupport(DND_OPERATIONS, DND_TRANSFER, new OutlineDropListener(getTreeViewer()));
 333 
 334                 /*
 335                  * Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=438919
 336                  *
 337                  * This bug was introduced in Eclipse 3.6 M6, fixed in 3.6 RC4, reintroduced in 4.4.0, fixed
 338                  * in 4.4.1.
 339                  * 
 340                  * While ContentViewer keeps its input in a private field, AbstractTreeViewer.inputChanged()
 341                  * also stores the root tree element derived from (and often the same as) the input using
 342                  * Widget.setData() on the tree, without using a key. This allows unified translation from a
 343                  * widget (Tree or TreeItem) to the corresponding tree element by using getData(),
 344                  * simplifying code.
 345                  * 
 346                  * However, in Eclipse 4.4.0, PageBookView.createPage() also uses Widget.setData() without
 347                  * key on the topmost control of the page to store a ContributionInfo (used by the


 422                         FlightRecorderUI.getDefault().getPageManager().makeSibling(dpd, dpd, up ? -1 : 2);
 423                 }
 424         }
 425 
 426         private void moveSelectedLeft(boolean left) {
 427                 Object selected = ((IStructuredSelection) getTreeViewer().getSelection()).getFirstElement();
 428                 if (selected instanceof DataPageDescriptor) {
 429                         DataPageDescriptor dpd = (DataPageDescriptor) selected;
 430                         if (!left) {
 431                                 FlightRecorderUI.getDefault().getPageManager().makeChild(dpd, dpd, -1);
 432                         } else if (dpd.getParent() != null) {
 433                                 FlightRecorderUI.getDefault().getPageManager().makeSibling(dpd, dpd.getParent(), 1);
 434                         }
 435                 }
 436         }
 437 
 438         private void expandSelected() {
 439                 Object selected = ((IStructuredSelection) getTreeViewer().getSelection()).getFirstElement();
 440                 if (selected != null) {
 441                         getTreeViewer().setExpandedState(selected, !getTreeViewer().getExpandedState(selected));
 442                 }
 443         }
 444 
 445         @Override
 446         public void selectionChanged(SelectionChangedEvent event) {
 447                 Object selected = (((IStructuredSelection) event.getSelection()).getFirstElement());
 448                 if (selected != null) {
 449                         editor.navigateTo((DataPageDescriptor) selected);
 450                 }
 451         }
 452 
 453         @Override
 454         protected int getTreeStyle() {
 455                 return SWT.VIRTUAL | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER;
 456         }
 457 
 458         @Override
 459         public void dispose() {
 460                 FlightRecorderUI.getDefault().getPreferenceStore().removePropertyChangeListener(analysisEnabledListener);
 461                 super.dispose();
 462         }
 463 
 464         void refresh() {
 465                 refresh(false);
 466         }
 467 
 468         private void refresh(boolean forceRefreshPages) {
 469                 TreeViewer tv = getTreeViewer();




  33 package org.openjdk.jmc.flightrecorder.ui;
  34 
  35 import static org.eclipse.ui.IWorkbenchCommandConstants.EDIT_COPY;
  36 import static org.eclipse.ui.IWorkbenchCommandConstants.EDIT_DELETE;
  37 import static org.eclipse.ui.IWorkbenchCommandConstants.EDIT_PASTE;
  38 
  39 import java.util.List;
  40 
  41 import org.eclipse.jface.action.Action;
  42 import org.eclipse.jface.action.IAction;
  43 import org.eclipse.jface.action.IMenuManager;
  44 import org.eclipse.jface.action.MenuManager;
  45 import org.eclipse.jface.dialogs.MessageDialog;
  46 import org.eclipse.jface.resource.ImageDescriptor;
  47 import org.eclipse.jface.util.IPropertyChangeListener;
  48 import org.eclipse.jface.util.LocalSelectionTransfer;
  49 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
  50 import org.eclipse.jface.viewers.ISelection;
  51 import org.eclipse.jface.viewers.IStructuredSelection;
  52 import org.eclipse.jface.viewers.ITreeContentProvider;

  53 import org.eclipse.jface.viewers.StructuredSelection;
  54 import org.eclipse.jface.viewers.TreeViewer;
  55 import org.eclipse.jface.viewers.Viewer;
  56 import org.eclipse.jface.viewers.ViewerDropAdapter;
  57 import org.eclipse.swt.SWT;
  58 import org.eclipse.swt.dnd.DND;
  59 import org.eclipse.swt.dnd.DragSourceAdapter;
  60 import org.eclipse.swt.dnd.DragSourceEvent;
  61 import org.eclipse.swt.dnd.Transfer;
  62 import org.eclipse.swt.dnd.TransferData;
  63 import org.eclipse.swt.graphics.Image;
  64 import org.eclipse.swt.widgets.Composite;
  65 import org.eclipse.swt.widgets.Display;
  66 import org.eclipse.ui.IActionBars;
  67 import org.eclipse.ui.PlatformUI;
  68 import org.eclipse.ui.part.IPageSite;
  69 import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
  70 
  71 import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages;
  72 import org.openjdk.jmc.flightrecorder.ui.pages.itemhandler.ItemHandlerPage;


 307                 mm.appendToGroup(MCContextMenuManager.GROUP_NEW, createNewPageMenuManager());
 308                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 309                                 ActionToolkit.action(() -> moveSelectedLeft(true), Messages.JFR_OUTLINE_MOVE_LEFT));
 310                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 311                                 ActionToolkit.action(() -> moveSelectedLeft(false), Messages.JFR_OUTLINE_MOVE_RIGHT));
 312                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 313                                 ActionToolkit.action(() -> moveSelectedUp(true), Messages.JFR_OUTLINE_MOVE_UP));
 314                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 315                                 ActionToolkit.action(() -> moveSelectedUp(false), Messages.JFR_OUTLINE_MOVE_DOWN));
 316                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT, copyAction);
 317                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT, pasteAction);
 318                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT, deleteAction);
 319                 mm.appendToGroup(MCContextMenuManager.GROUP_EDIT,
 320                                 ActionToolkit.action(this::resetSelected, Messages.JFR_OUTLINE_RESET_ACTION, RESET_ICON));
 321 
 322                 ab.getMenuManager().add(createNewPageMenuManager());
 323                 ab.getToolBarManager().add(PAGE_STRUCTURE_LOCK_ACTION);
 324                 ab.getToolBarManager().add(RESET_ALL_PAGES_ACTION);
 325 
 326                 getTreeViewer().addDoubleClickListener(e -> expandSelected());
 327                 getTreeViewer().addPostSelectionChangedListener((event) -> {
 328                         Object selected = (((IStructuredSelection) event.getSelection()).getFirstElement());
 329                         if (selected != null) {
 330                                 editor.navigateTo((DataPageDescriptor) selected);
 331                         }
 332                 });
 333 
 334                 ColumnViewerToolTipSupport.enableFor(getTreeViewer());
 335 
 336                 getTreeViewer().addDragSupport(DND_OPERATIONS, DND_TRANSFER, new OutlineDragListener());
 337                 getTreeViewer().addDropSupport(DND_OPERATIONS, DND_TRANSFER, new OutlineDropListener(getTreeViewer()));
 338 
 339                 /*
 340                  * Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=438919
 341                  *
 342                  * This bug was introduced in Eclipse 3.6 M6, fixed in 3.6 RC4, reintroduced in 4.4.0, fixed
 343                  * in 4.4.1.
 344                  * 
 345                  * While ContentViewer keeps its input in a private field, AbstractTreeViewer.inputChanged()
 346                  * also stores the root tree element derived from (and often the same as) the input using
 347                  * Widget.setData() on the tree, without using a key. This allows unified translation from a
 348                  * widget (Tree or TreeItem) to the corresponding tree element by using getData(),
 349                  * simplifying code.
 350                  * 
 351                  * However, in Eclipse 4.4.0, PageBookView.createPage() also uses Widget.setData() without
 352                  * key on the topmost control of the page to store a ContributionInfo (used by the


 427                         FlightRecorderUI.getDefault().getPageManager().makeSibling(dpd, dpd, up ? -1 : 2);
 428                 }
 429         }
 430 
 431         private void moveSelectedLeft(boolean left) {
 432                 Object selected = ((IStructuredSelection) getTreeViewer().getSelection()).getFirstElement();
 433                 if (selected instanceof DataPageDescriptor) {
 434                         DataPageDescriptor dpd = (DataPageDescriptor) selected;
 435                         if (!left) {
 436                                 FlightRecorderUI.getDefault().getPageManager().makeChild(dpd, dpd, -1);
 437                         } else if (dpd.getParent() != null) {
 438                                 FlightRecorderUI.getDefault().getPageManager().makeSibling(dpd, dpd.getParent(), 1);
 439                         }
 440                 }
 441         }
 442 
 443         private void expandSelected() {
 444                 Object selected = ((IStructuredSelection) getTreeViewer().getSelection()).getFirstElement();
 445                 if (selected != null) {
 446                         getTreeViewer().setExpandedState(selected, !getTreeViewer().getExpandedState(selected));








 447                 }
 448         }
 449 
 450         @Override
 451         protected int getTreeStyle() {
 452                 return SWT.VIRTUAL | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER;
 453         }
 454 
 455         @Override
 456         public void dispose() {
 457                 FlightRecorderUI.getDefault().getPreferenceStore().removePropertyChangeListener(analysisEnabledListener);
 458                 super.dispose();
 459         }
 460 
 461         void refresh() {
 462                 refresh(false);
 463         }
 464 
 465         private void refresh(boolean forceRefreshPages) {
 466                 TreeViewer tv = getTreeViewer();


< prev index next >