Files

170 lines
5.5 KiB
C++

/*
* DOScreen.h
* DRS oscilloscope screen header file
* $Id: DOScreen.h 22327 2016-10-11 13:18:26Z ritt $
*/
class Osci;
class DOFrame;
enum PaintModes {
kPMWaveform,
kPMTimeCalibration,
};
class DOScreen : public wxWindow
{
public:
DOScreen(wxWindow* parent, Osci *osci, DOFrame *frame);
~DOScreen();
void SelectBoard(int b) { m_board = b; }
void SetChnOn(int b, int i, int value ) { m_chnon[b][i] = value; }
int GetChnOn(int b, int i) { return m_chnon[b][i]; }
int GetCurChn() { return m_chn; }
bool GetSplitMode() { return m_splitMode; }
void SetSplitMode(bool flag) { m_splitMode = flag; }
void SetPaintMode(int pm) { m_paintMode = pm; }
void SetPos(int b, int i, double value) { m_offset[b][i] = value; }
void SetScale(int b, int i, int sclae);
void SetHScale(int b, int hscale);
void SetHScaleInc(int b, int increment);
int GetPaintMode() { return m_paintMode; }
void SetScreenOffset(int b, int offset) { m_screenOffset[b] = offset; }
int GetScreenSize(int b) { return m_screenSize[b]; }
int GetScreenOffset(int b) { return m_screenOffset[b]; }
int GetScaleIndex(int b, int i) { return m_scale[b][i]; }
double GetScale(int b, int i) { return m_scaleTable[m_scale[b][i]]; }
double GetOffset(int b, int i) { return m_offset[b][i]; }
int GetHScale(int b) { return m_hscale[b]; }
void SetDisplayDateTime(bool flag) { m_displayDateTime = flag; }
void SetDisplayShowGrid(bool flag) { m_displayShowGrid = flag; }
void SetDisplayLines(bool flag) { m_displayLines = flag; }
void SetDisplayScalers(bool flag) { m_displayScalers = flag; }
void SetDisplayMode(int mode, int n) { m_displayMode = mode; m_displayN = n; }
void SetMathDisplay(int id, bool flag);
wxDC *GetDC() { return m_dc; }
int GetX1() { return m_x1[m_board]; }
int GetX2() { return m_x2[m_board]; }
int GetY1() { return m_y1[m_board]; }
int GetY2() { return m_y2[m_board]; }
int timeToX(float t);
int voltToY(float v);
int voltToY(int chn, float v);
double XToTime(int x);
double YToVolt(int y);
double YToVolt(int chn, int y);
double GetT1();
double GetT2();
static const int m_scaleTable[10];
static const int m_hscaleTable[13];
// event handlers
void OnPaint(wxPaintEvent& event);
void OnSize(wxSizeEvent& event);
// drawing routines
void DrawScope(wxDC& dc, wxCoord w, wxCoord h, bool printing);
void DrawScopeBottom(wxDC& dc, int board, int x1, int y1, int width, bool printing);
void DrawWaveforms(wxDC& dc, int wfIndex, bool printing);
void DrawHisto(wxDC& dc, wxCoord w, wxCoord h, bool printing);
void SaveHisto(int fd);
void DrawTcalib(wxDC& dc, wxCoord w, wxCoord h, bool printing);
void DrawMath(wxDC& dc, wxCoord width, wxCoord height, bool printing);
void DrawPeriodJitter(wxDC& dc, int chn, bool printing);
void DrawHAxis(wxDC &dc, int x1, int y1, int width,
int minor, int major, int text, int label, int grid, double xmin, double xmax);
void OnMouse(wxMouseEvent& event);
private:
// any class wishing to process wxWidgets events must use this macro
DECLARE_EVENT_TABLE()
// pointer for main Osci object
Osci *m_osci;
// pointer to DOFrame object
DOFrame *m_frame;
// fonts
wxFont m_fontNormal;
wxFont m_fontFixed;
wxFont m_fontFixedBold;
// coordinates of total scope area
int m_sx1, m_sx2, m_sy1, m_sy2;
// coordinates of subpanel area
int m_x1[MAX_N_BOARDS], m_x2[MAX_N_BOARDS], m_y1[MAX_N_BOARDS], m_y2[MAX_N_BOARDS];
// split mode
bool m_splitMode;
// current device context
wxDC *m_dc;
// stop watch for screen updates
wxStopWatch m_sw;
// paing mode
int m_paintMode;
// current board index for drawing
int m_board;
// curent channel index
int m_chn;
// offset and size of display area in ns
int m_screenSize[MAX_N_BOARDS], m_screenOffset[MAX_N_BOARDS];
// cursor variables
int m_clientHeight, m_clientWidth;
double m_mouseX;
double m_mouseY;
int m_MeasX1, m_MeasX2, m_MeasY1, m_MeasY2;
int m_BSX1[MAX_N_BOARDS], m_BSX2[MAX_N_BOARDS], m_BSY1[MAX_N_BOARDS], m_BSY2[MAX_N_BOARDS];
double m_xCursorA, m_xCursorB, m_yCursorA, m_yCursorB;
int m_idxA, m_idxB;
double m_uCursorA, m_uCursorB, m_tCursorA, m_tCursorB;
// waveform propoerties
int m_chnon[MAX_N_BOARDS][4];
double m_offset[MAX_N_BOARDS][4];
int m_scale[MAX_N_BOARDS][4];
int m_hscale[MAX_N_BOARDS];
// math display
bool m_mathFlag[2][4];
// histogram coordinates
int m_hx1, m_hy1, m_hx2, m_hy2;
// save button
int m_savex1, m_savey1, m_savex2, m_savey2;
// histogram x axis
bool m_histAxisAuto;
double m_histAxisMin;
double m_histAxisMax;
double m_minCursor;
double m_maxCursor;
bool m_dragMin, m_dragMax;
// display properties
bool m_displayDateTime, m_displayShowGrid, m_displayLines, m_displayScalers;
int m_displayMode, m_displayN;
// grid drawing (screen vs. printer)
void DrawDot(wxDC& dc, wxCoord w, wxCoord h, bool printing);
// find waveform point close to mouse cursor
bool FindClosestWafeformPoint(int& idx_min, int& x_min, int& y_min);
// optional debug message
char m_debugMsg[80];
};