analysis: Keep selection when switching traces Kernel Memory Usage View
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.os.linux.ui / src / org / eclipse / tracecompass / internal / analysis / os / linux / ui / views / kernelmemoryusage / KernelMemoryUsageView.java
CommitLineData
aa19e48b
NA
1/**********************************************************************
2 * Copyright (c) 2016 École Polytechnique de Montréal
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 **********************************************************************/
9package org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.kernelmemoryusage;
10
5ddfceb6
JCK
11import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
12
aa19e48b
NA
13import org.eclipse.jdt.annotation.NonNull;
14import org.eclipse.jface.viewers.ISelection;
15import org.eclipse.jface.viewers.ISelectionChangedListener;
16import org.eclipse.jface.viewers.IStructuredSelection;
17import org.eclipse.jface.viewers.SelectionChangedEvent;
18import org.eclipse.swt.events.ControlAdapter;
19import org.eclipse.swt.events.ControlEvent;
20import org.eclipse.swt.widgets.Composite;
21import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
22import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
5ddfceb6 23import org.eclipse.tracecompass.tmf.core.trace.TmfTraceContext;
aa19e48b
NA
24import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
25import org.eclipse.tracecompass.tmf.ui.viewers.TmfViewer;
26import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.TmfXYChartViewer;
27import org.eclipse.tracecompass.tmf.ui.views.TmfChartView;
28
29/**
30 * Memory usage view
31 *
32 * @author Samuel Gagnon
33 * @author Mahdi Zolnouri
34 * @author Wassim Nasrallah
35 */
36public class KernelMemoryUsageView extends TmfChartView {
37
38 /** ID string */
39 public static final String ID = "org.eclipse.tracecompass.analysis.os.linux.ui.kernelmemoryusageview"; //$NON-NLS-1$
5ddfceb6
JCK
40 /** ID of the Kernel Memory Usage view data in the data map of {@link TmfTraceContext} */
41 public static final @NonNull String KERNEL_MEMORY = ID + ".KERNEL_MEMORY"; //$NON-NLS-1$
aa19e48b
NA
42
43 /*
44 * We need this reference to update the viewer when there is a new selection
45 */
46 private KernelMemoryUsageTreeViewer fTreeViewerReference = null;
47
48 /**
49 * Constructor
50 */
51 public KernelMemoryUsageView() {
52 super(Messages.MemoryUsageView_title);
53 }
54
55 @Override
56 protected TmfXYChartViewer createChartViewer(Composite parent) {
57 return new KernelMemoryUsageViewer(parent);
58 }
59
60 private final class SelectionChangeListener implements ISelectionChangedListener {
61 @Override
62 public void selectionChanged(SelectionChangedEvent event) {
63 ISelection selection = event.getSelection();
64 if (selection instanceof IStructuredSelection) {
65 Object structSelection = ((IStructuredSelection) selection).getFirstElement();
66 if (structSelection instanceof KernelMemoryUsageEntry) {
67 KernelMemoryUsageEntry entry = (KernelMemoryUsageEntry) structSelection;
68 fTreeViewerReference.setSelectedThread(entry.getTid());
69 ((KernelMemoryUsageViewer) getChartViewer()).setSelectedThread(entry.getTid());
5ddfceb6
JCK
70 TmfTraceContext ctx = TmfTraceManager.getInstance().getCurrentTraceContext();
71 ctx.setData(KERNEL_MEMORY, checkNotNull(entry.getTid()));
aa19e48b
NA
72 }
73 }
74 }
75 }
76
77 @Override
78 protected @NonNull TmfViewer createLeftChildViewer(Composite parent) {
79 @NonNull
80 KernelMemoryUsageTreeViewer fTreeViewer = new KernelMemoryUsageTreeViewer(parent);
81 fTreeViewerReference = fTreeViewer;
82
83 fTreeViewer.addSelectionChangeListener(new SelectionChangeListener());
84
85 /* Initialize the viewers with the currently selected trace */
86 ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
87 if (trace != null) {
88 TmfTraceSelectedSignal signal = new TmfTraceSelectedSignal(this, trace);
89 fTreeViewer.traceSelected(signal);
90 fTreeViewerReference.traceSelected(signal);
91 }
92
93 fTreeViewer.getControl().addControlListener(new ControlAdapter() {
94 @Override
95 public void controlResized(ControlEvent e) {
96 super.controlResized(e);
97 }
98 });
99 return fTreeViewer;
100 }
101}
This page took 0.032702 seconds and 5 git commands to generate.