add zoom levels
This commit is contained in:
parent
524ffb189c
commit
3572f683e3
@ -5,8 +5,10 @@ import java.text.DecimalFormat;
|
|||||||
public class Constants {
|
public class Constants {
|
||||||
|
|
||||||
public static final String[] UNIT_STRING={"fs", "ps", "ns", "us", "ms"};//, "s"};
|
public static final String[] UNIT_STRING={"fs", "ps", "ns", "us", "ms"};//, "s"};
|
||||||
|
public static final long[] UNIT_MULTIPLIER={1, 1000, 1000*1000, 1000*1000*1000, 1000*1000*1000*1000, 1000*1000*1000*1000*1000 };
|
||||||
|
|
||||||
public static final int[] UNIT_MULTIPLIER={1, 3, 10, 30, 100, 300};
|
//public static final int[] UNIT_MULTIPLIER={1, 3, 10, 30, 100, 300};
|
||||||
|
public static final long[] SCALE_MULTIPLIER={1, 2, 5, 10, 20, 50, 100, 200, 500};
|
||||||
|
|
||||||
public static final String CONTENT_PROVIDER_TAG = "TOOLTIP_CONTENT_PROVIDER";
|
public static final String CONTENT_PROVIDER_TAG = "TOOLTIP_CONTENT_PROVIDER";
|
||||||
public static final String HELP_PROVIDER_TAG = "TOOLTIP_HELP_PROVIDER";
|
public static final String HELP_PROVIDER_TAG = "TOOLTIP_HELP_PROVIDER";
|
||||||
@ -17,14 +19,18 @@ public class Constants {
|
|||||||
public static final DecimalFormat TIME_FORMAT_US = new DecimalFormat("#.0#####");
|
public static final DecimalFormat TIME_FORMAT_US = new DecimalFormat("#.0#####");
|
||||||
public static final DecimalFormat TIME_FORMAT_MS = new DecimalFormat("#.0#####");
|
public static final DecimalFormat TIME_FORMAT_MS = new DecimalFormat("#.0#####");
|
||||||
|
|
||||||
public static final DecimalFormat[] TIME_FORMAT = {
|
|
||||||
TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS, TIME_FORMAT_FS,
|
|
||||||
TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS, TIME_FORMAT_PS,
|
|
||||||
TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS, TIME_FORMAT_NS,
|
|
||||||
TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US, TIME_FORMAT_US,
|
|
||||||
TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS, TIME_FORMAT_MS,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
public static DecimalFormat getTimeFormatForLevel(int level) {
|
||||||
|
switch(level/SCALE_MULTIPLIER.length) {
|
||||||
|
case 0: return TIME_FORMAT_FS;
|
||||||
|
case 1: return TIME_FORMAT_PS;
|
||||||
|
case 2: return TIME_FORMAT_NS;
|
||||||
|
case 3: return TIME_FORMAT_US;
|
||||||
|
case 4: return TIME_FORMAT_MS;
|
||||||
|
default:
|
||||||
|
return TIME_FORMAT_FS;
|
||||||
|
}
|
||||||
|
}
|
||||||
private Constants() {}
|
private Constants() {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@ import org.eclipse.swt.graphics.Rectangle;
|
|||||||
import org.eclipse.swt.widgets.Display;
|
import org.eclipse.swt.widgets.Display;
|
||||||
|
|
||||||
import com.minres.scviewer.database.IEvent;
|
import com.minres.scviewer.database.IEvent;
|
||||||
import com.minres.scviewer.database.IHierNode;
|
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.RelationType;
|
import com.minres.scviewer.database.RelationType;
|
||||||
import com.minres.scviewer.database.tx.ITx;
|
import com.minres.scviewer.database.tx.ITx;
|
||||||
|
@ -85,7 +85,7 @@ public class CursorPainter implements IPainter, ICursor {
|
|||||||
proj.setBackground(drawColor);
|
proj.setBackground(drawColor);
|
||||||
proj.setForeground(textColor);
|
proj.setForeground(textColor);
|
||||||
double dTime=time;
|
double dTime=time;
|
||||||
proj.drawText(Constants.TIME_FORMAT[waveCanvas.getZoomLevel()].format(dTime/waveCanvas.getScaleFactorPow10())+waveCanvas.getUnitStr(), x+1, top);
|
proj.drawText(Constants.getTimeFormatForLevel(waveCanvas.getZoomLevel()).format(dTime/waveCanvas.getScaleFactorPow10())+waveCanvas.getUnitStr(), x+1, top);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package com.minres.scviewer.database.ui.swt.internal;
|
package com.minres.scviewer.database.ui.swt.internal;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
|
||||||
|
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.graphics.Color;
|
import org.eclipse.swt.graphics.Color;
|
||||||
import org.eclipse.swt.graphics.GC;
|
import org.eclipse.swt.graphics.GC;
|
||||||
@ -40,7 +38,7 @@ public class RulerPainter implements IPainter {
|
|||||||
if(headerBgColor.isDisposed())
|
if(headerBgColor.isDisposed())
|
||||||
headerBgColor=SWTResourceManager.getColor(255,255,255);
|
headerBgColor=SWTResourceManager.getColor(255,255,255);
|
||||||
String unit=waveCanvas.getUnitStr();
|
String unit=waveCanvas.getUnitStr();
|
||||||
int unitMultiplier=waveCanvas.getUnitMultiplier();
|
long unitMultiplier=waveCanvas.getUnitMultiplier();
|
||||||
long scaleFactor=waveCanvas.getScaleFactor();
|
long scaleFactor=waveCanvas.getScaleFactor();
|
||||||
|
|
||||||
long startPos=area.x*scaleFactor;
|
long startPos=area.x*scaleFactor;
|
||||||
@ -69,7 +67,7 @@ public class RulerPainter implements IPainter {
|
|||||||
boolean allMarker=true;
|
boolean allMarker=true;
|
||||||
for (long pos = startMinorIncrPos, tick = startMinorIncrVal; pos < endPos; pos+= rulerTickMinor, tick += rulerTickMinor) {
|
for (long pos = startMinorIncrPos, tick = startMinorIncrVal; pos < endPos; pos+= rulerTickMinor, tick += rulerTickMinor) {
|
||||||
if ((tick % rulerTickMajor) == 0) {
|
if ((tick % rulerTickMajor) == 0) {
|
||||||
String text = Constants.TIME_FORMAT[waveCanvas.getZoomLevel()].format(tick/scaleFactor*unitMultiplier);
|
String text = Constants.getTimeFormatForLevel(waveCanvas.getZoomLevel()).format(tick/scaleFactor*unitMultiplier);
|
||||||
if(text.length()>8) allMarker=false;
|
if(text.length()>8) allMarker=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,7 +77,7 @@ public class RulerPainter implements IPainter {
|
|||||||
long x0Val = tick/scaleFactor;
|
long x0Val = tick/scaleFactor;
|
||||||
if ((tick % rulerTickMajor) == 0) {
|
if ((tick % rulerTickMajor) == 0) {
|
||||||
if(allMarker || drawText)
|
if(allMarker || drawText)
|
||||||
gc.drawText(Constants.TIME_FORMAT[waveCanvas.getZoomLevel()].format(x0Val*unitMultiplier)+unit, x0Pos, area.y+textY);
|
gc.drawText(Constants.getTimeFormatForLevel(waveCanvas.getZoomLevel()).format(x0Val*unitMultiplier)+unit, x0Pos, area.y+textY);
|
||||||
gc.drawLine(x0Pos, area.y+majorTickY, x0Pos,area.y+ bottom);
|
gc.drawLine(x0Pos, area.y+majorTickY, x0Pos,area.y+ bottom);
|
||||||
drawText=!drawText;
|
drawText=!drawText;
|
||||||
} else {
|
} else {
|
||||||
|
@ -170,7 +170,7 @@ public class WaveformCanvas extends Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxZoomLevel(){
|
public int getMaxZoomLevel(){
|
||||||
return Constants.UNIT_MULTIPLIER.length*Constants.UNIT_STRING.length-1;
|
return Constants.SCALE_MULTIPLIER.length*Constants.UNIT_STRING.length-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setZoomLevel(int level) {
|
public void setZoomLevel(int level) {
|
||||||
@ -190,9 +190,10 @@ public class WaveformCanvas extends Canvas {
|
|||||||
if(level<0) level = 0;
|
if(level<0) level = 0;
|
||||||
}
|
}
|
||||||
//FIXME: keep center if zoom-out and cursor is not in view
|
//FIXME: keep center if zoom-out and cursor is not in view
|
||||||
if(level<Constants.UNIT_MULTIPLIER.length*Constants.UNIT_STRING.length){
|
if(level<Constants.SCALE_MULTIPLIER.length*Constants.UNIT_STRING.length){
|
||||||
this.scaleFactor = (long) Math.pow(10, level>>1);
|
int scale = level%Constants.SCALE_MULTIPLIER.length;
|
||||||
if(level%2==1) this.scaleFactor*=3;
|
int unit = level/Constants.SCALE_MULTIPLIER.length;
|
||||||
|
this.scaleFactor = Constants.UNIT_MULTIPLIER[unit]*Constants.SCALE_MULTIPLIER[scale];
|
||||||
ITx tx = arrowPainter.getTx();
|
ITx tx = arrowPainter.getTx();
|
||||||
arrowPainter.setTx(null);
|
arrowPainter.setTx(null);
|
||||||
/*
|
/*
|
||||||
@ -223,14 +224,13 @@ public class WaveformCanvas extends Canvas {
|
|||||||
Rectangle clientArea = getClientArea();
|
Rectangle clientArea = getClientArea();
|
||||||
long clientAreaWidth = clientArea.width;
|
long clientAreaWidth = clientArea.width;
|
||||||
//try to find existing zoomlevel where scaleFactor*clientAreaWidth >= maxTime, if one is found set it as new zoomlevel
|
//try to find existing zoomlevel where scaleFactor*clientAreaWidth >= maxTime, if one is found set it as new zoomlevel
|
||||||
final long[] UNIT_STRING_MULT={1, 1000, 1000*1000, 1000*1000*1000, 1000*1000*1000*1000, 1000*1000*1000*1000*1000 };
|
for(int unitIdx=0; unitIdx<Constants.UNIT_STRING.length; unitIdx++) {
|
||||||
for(int magnitude=0; magnitude<Constants.UNIT_STRING.length; magnitude++) {
|
long magnitudeMultiplier = Constants.UNIT_MULTIPLIER[unitIdx];
|
||||||
long magnitudeMultiplier = UNIT_STRING_MULT[magnitude];
|
for (int scaleIdx=0; scaleIdx<Constants.SCALE_MULTIPLIER.length; scaleIdx++){
|
||||||
for (int multiplier=0; multiplier<Constants.UNIT_MULTIPLIER.length; multiplier++){
|
long scaleFactor = magnitudeMultiplier * Constants.SCALE_MULTIPLIER[scaleIdx];
|
||||||
long scaleFactor = magnitudeMultiplier * Constants.UNIT_MULTIPLIER[multiplier];
|
|
||||||
long range = scaleFactor*clientAreaWidth;
|
long range = scaleFactor*clientAreaWidth;
|
||||||
if( range >= duration)
|
if( range >= duration)
|
||||||
return magnitude*Constants.UNIT_MULTIPLIER.length+multiplier;
|
return unitIdx*Constants.SCALE_MULTIPLIER.length+scaleIdx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -241,17 +241,17 @@ public class WaveformCanvas extends Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public long getScaleFactorPow10() {
|
public long getScaleFactorPow10() {
|
||||||
int scale = level/Constants.UNIT_MULTIPLIER.length;
|
int scale = level/Constants.SCALE_MULTIPLIER.length;
|
||||||
double res = Math.pow(1000, scale);
|
double res = Math.pow(1000, scale);
|
||||||
return (long) res;
|
return (long) res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUnitStr(){
|
public String getUnitStr(){
|
||||||
return Constants.UNIT_STRING[level/Constants.UNIT_MULTIPLIER.length];
|
return Constants.UNIT_STRING[level/Constants.SCALE_MULTIPLIER.length];
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUnitMultiplier(){
|
public long getUnitMultiplier(){
|
||||||
return Constants.UNIT_MULTIPLIER[level%Constants.UNIT_MULTIPLIER.length];
|
return Constants.SCALE_MULTIPLIER[level%Constants.SCALE_MULTIPLIER.length];
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getTimeForOffset(int xOffset){
|
public long getTimeForOffset(int xOffset){
|
||||||
|
@ -13,7 +13,6 @@ package com.minres.scviewer.database.ui.swt.internal;
|
|||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.beans.PropertyChangeSupport;
|
import java.beans.PropertyChangeSupport;
|
||||||
import java.text.DecimalFormat;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -1475,7 +1474,7 @@ public class WaveformView implements IWaveformView {
|
|||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
double dTime = time;
|
double dTime = time;
|
||||||
double scaledTime = dTime / waveformCanvas.getScaleFactorPow10();
|
double scaledTime = dTime / waveformCanvas.getScaleFactorPow10();
|
||||||
return sb.append(Constants.TIME_FORMAT[waveformCanvas.getZoomLevel()].format(scaledTime)).append(waveformCanvas.getUnitStr()).toString();
|
return sb.append(Constants.getTimeFormatForLevel(waveformCanvas.getZoomLevel()).format(scaledTime)).append(waveformCanvas.getUnitStr()).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1485,11 +1484,11 @@ public class WaveformView implements IWaveformView {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String[] getZoomLevels() {
|
public String[] getZoomLevels() {
|
||||||
String[] res = new String[Constants.UNIT_MULTIPLIER.length * Constants.UNIT_STRING.length];
|
String[] res = new String[Constants.SCALE_MULTIPLIER.length * Constants.UNIT_STRING.length];
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (String unit : Constants.UNIT_STRING) {
|
for (String unit : Constants.UNIT_STRING) {
|
||||||
for (int factor : Constants.UNIT_MULTIPLIER) {
|
for (long factor : Constants.SCALE_MULTIPLIER) {
|
||||||
res[index++] = Integer.toString(factor) + unit;
|
res[index++] = Long.toString(factor) + unit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -5,9 +5,6 @@ import java.io.File;
|
|||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
|
|
||||||
import org.eclipse.jface.dialogs.Dialog;
|
|
||||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
|
||||||
import org.eclipse.jface.dialogs.MessageDialog;
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
import org.eclipse.jface.resource.ImageDescriptor;
|
import org.eclipse.jface.resource.ImageDescriptor;
|
||||||
import org.eclipse.jface.resource.ResourceLocator;
|
import org.eclipse.jface.resource.ResourceLocator;
|
||||||
@ -17,8 +14,6 @@ import org.eclipse.swt.browser.Browser;
|
|||||||
import org.eclipse.swt.browser.LocationListener;
|
import org.eclipse.swt.browser.LocationListener;
|
||||||
import org.eclipse.swt.browser.ProgressEvent;
|
import org.eclipse.swt.browser.ProgressEvent;
|
||||||
import org.eclipse.swt.browser.ProgressListener;
|
import org.eclipse.swt.browser.ProgressListener;
|
||||||
import org.eclipse.swt.graphics.Image;
|
|
||||||
import org.eclipse.swt.graphics.Point;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
import org.eclipse.swt.layout.GridData;
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
@ -26,7 +21,6 @@ import org.eclipse.swt.widgets.Control;
|
|||||||
import org.eclipse.swt.widgets.Label;
|
import org.eclipse.swt.widgets.Label;
|
||||||
import org.eclipse.swt.widgets.Listener;
|
import org.eclipse.swt.widgets.Listener;
|
||||||
import org.eclipse.swt.widgets.ProgressBar;
|
import org.eclipse.swt.widgets.ProgressBar;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
|
||||||
import org.eclipse.swt.widgets.Text;
|
import org.eclipse.swt.widgets.Text;
|
||||||
import org.eclipse.swt.widgets.ToolBar;
|
import org.eclipse.swt.widgets.ToolBar;
|
||||||
import org.eclipse.swt.widgets.ToolItem;
|
import org.eclipse.swt.widgets.ToolItem;
|
||||||
|
@ -19,7 +19,6 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
|
|||||||
|
|
||||||
import com.minres.scviewer.database.IHierNode;
|
import com.minres.scviewer.database.IHierNode;
|
||||||
import com.minres.scviewer.database.IWaveform;
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.IWaveformDb;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class TxDbContentProvider providing the tree content of a database for the respective viewer.
|
* The Class TxDbContentProvider providing the tree content of a database for the respective viewer.
|
||||||
|
Loading…
Reference in New Issue
Block a user