blob: 22ef93b7dab428739079a22f2fef2bf531b2492f [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2007, 2016 Intel Corporation, Ericsson
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Intel Corporation - Initial API and implementation
* Ruslan A. Scherbakov, Intel - Initial API and implementation
* Alvaro Sanchez-Leon - Updated for TMF
* Geneviève Bastien - Added methods to save a time range selection
* Patrick Tasse - Refactoring, support for range selection
*****************************************************************************/
package org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets;
import org.eclipse.tracecompass.tmf.ui.views.ITimeReset;
import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.Utils.TimeFormat;
/**
* Time data provider interface, for use in the timegraph widget.
*
* @author Alvaro Sanchez-Leon
* @author Patrick Tasse
* @author Xavier Raynaud
*/
public interface ITimeDataProvider extends ITimeReset {
/**
* Updates the selection begin and end time and notifies the selection
* listeners about the new selection range (if it has changed).
* <p>
* If ensureVisible is true, the window range will be centered either on the
* selection begin time (if it has changed) or otherwise on the selection
* end time, if and only if that time is outside of the current window. If
* the window range is modified, the range listeners will be notified.
*
* @param beginTime
* the selection begin time
* @param endTime
* the selection end time
* @param ensureVisible
* if true, ensure visibility of the new selection range boundary
* @since 2.0
*/
void setSelectionRangeNotify(long beginTime, long endTime, boolean ensureVisible);
/**
* Updates the selection begin and end time.
* <p>
* If ensureVisible is true, the window range will be centered either on the
* selection begin time (if it has changed) or otherwise on the selection
* end time, if and only if that time is outside of the current window. If
* the window range is modified, the range listeners will be notified.
*
* @param beginTime
* the selection begin time
* @param endTime
* the selection end time
* @param ensureVisible
* if true, ensure visibility of the new selection range boundary
* @since 2.0
*/
void setSelectionRange(long beginTime, long endTime, boolean ensureVisible);
/**
* @return The begin time of the current selection
*/
long getSelectionBegin();
/**
* @return The end time of the current selection
*/
long getSelectionEnd();
/**
* Get the user-specified bounds begin time. May be set to SWT.DEFAULT. For
* the actual bound use {@link #getMinTime()}.
*
* @return The user-specified begin time, or SWT.DEFAULT if input bound used
*/
long getBeginTime();
/**
* Get the user-specified bounds end time. May be set to SWT.DEFAULT. For
* the actual bound use {@link #getMaxTime()}.
*
* @return The user-specified end time, or SWT.DEFAULT if input bound used
*/
long getEndTime();
/**
* @return The bounds minimum time
*/
long getMinTime();
/**
* @return The bounds maximum time
*/
long getMaxTime();
/**
* @return The current window start time
*/
long getTime0();
/**
* @return The current window end time
*/
long getTime1();
/**
* @return The minimal time interval
*/
long getMinTimeInterval();
/**
* Updates the window range and notify the range listeners.
*
* @param time0
* the window start time
* @param time1
* the window end time
*/
void setStartFinishTimeNotify(long time0, long time1);
/**
* Update the window range but do not notify the range listeners.
*
* @param time0
* the window start time
* @param time1
* the window end time
*/
void setStartFinishTime(long time0, long time1);
/**
* Notify the range listeners without updating the time range.
*/
void notifyStartFinishTime();
/**
* Updates the selection time and notifies the selection listeners about the
* new selection time (if it has changed).
* <p>
* If ensureVisible is true, the window range will be centered on the
* selection time, if and only if that time is outside of the current
* window. If the window range is modified, the range listeners will be
* notified.
*
* @param time
* the selection time
* @param ensureVisible
* if true, ensure visibility of the new selection time
*/
void setSelectedTimeNotify(long time, boolean ensureVisible);
/**
* Updates the selection time.
* <p>
* If ensureVisible is true, the window range will be centered on the
* selection time, if and only if that time is outside of the current
* window. If the window range is modified, the range listeners will be
* notified.
*
* @param time
* the selection time
* @param ensureVisible
* if true, ensure visibility of the new selection time
*/
void setSelectedTime(long time, boolean ensureVisible);
/**
* Reset the start and end times.
*
* @param notify
* if true, notify the registered listeners
* @since 2.0
*/
@Override
default void resetStartFinishTime(boolean notify) {
if (notify) {
setStartFinishTimeNotify(getMinTime(), getMaxTime());
} else {
setStartFinishTime(getMinTime(), getMaxTime());
}
}
/**
* @return The names' width
*/
int getNameSpace();
/**
* Set the names' width
*
* @param width
*/
void setNameSpace(int width);
/**
* @return The width for timestamps
*/
int getTimeSpace();
/**
* @return the time format, one of:
* <ul>
* <li>{@link TimeFormat#CALENDAR} absolute time, displayed as year/month/day/hours/minutes/seconds/ms/us/ns
* <li>{@link TimeFormat#RELATIVE} relative time, displayed as seconds/ms/us/ns
* <li>{@link TimeFormat#NUMBER} number, displayed as long values.
* <li>{@link TimeFormat#CYCLES} cycles, displayed as long values.
* </ul>
*/
TimeFormat getTimeFormat();
}