## Auto Generated makefile by CodeLite IDE\r
## any manual changes will be erased \r
##\r
-## Release\r
+## Debug\r
ProjectName :=fdmdv2\r
-ConfigurationName :=Release\r
+ConfigurationName :=Debug\r
WorkspacePath := "C:\bin\Projects\Radio\fdmdv2\build"\r
ProjectPath := "C:\bin\Projects\Radio\fdmdv2\build"\r
-IntermediateDirectory :=./Release\r
+IntermediateDirectory :=./Debug\r
OutDir := $(IntermediateDirectory)\r
CurrentFileName :=\r
CurrentFilePath :=\r
CurrentFileFullPath :=\r
User :=OFA-Staff\r
-Date :=9/14/2012\r
+Date :=9/17/2012\r
CodeLitePath :="C:\bin\CodeLite"\r
LinkerName :=g++\r
SharedObjectLinkerName :=g++ -shared -fPIC\r
ObjectsFileList :="C:\bin\Projects\Radio\fdmdv2\build\fdmdv2.txt"\r
PCHCompileFlags :=\r
MakeDirCommand :=makedir\r
-LinkOptions := -mwindows -s $(shell wx-config --debug=no --libs --unicode=yes)\r
+LinkOptions := -mwindows $(shell wx-config --debug=yes --libs --unicode=yes)\r
IncludePath := $(IncludeSwitch). $(IncludeSwitch)/bin/MinGW/msys/1.0/local/include $(IncludeSwitch)../../codec2-dev/src $(IncludeSwitch)../3rdparty/portaudio/include $(IncludeSwitch)../3rdparty/portaudio/bindings/cpp/include $(IncludeSwitch)../3rdparty/libsndfile/include $(IncludeSwitch)../3rdparty/libsamplerate-0.1.8/src \r
IncludePCH := \r
RcIncludePath := \r
AR := ar rcus\r
CXX := g++\r
CC := gcc\r
-CXXFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"674\" $(Preprocessors)\r
-CFLAGS := -O2 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=no) -DSVN_REVISION=\"674\" $(Preprocessors)\r
+CXXFLAGS := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) -DSVN_REVISION=\"674\" $(Preprocessors)\r
+CFLAGS := -g -O0 -Wall $(shell wx-config --cxxflags --unicode=yes --debug=yes) -DSVN_REVISION=\"674\" $(Preprocessors)\r
\r
\r
##\r
$(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions)\r
\r
$(IntermediateDirectory)/.d:\r
- @$(MakeDirCommand) "./Release"\r
+ @$(MakeDirCommand) "./Debug"\r
\r
PreBuild:\r
\r
$(RM) $(IntermediateDirectory)/src_fdmdv2_plot_scalar$(PreprocessSuffix)\r
$(RM) $(OutputFile)\r
$(RM) $(OutputFile).exe\r
- $(RM) "C:\bin\Projects\Radio\fdmdv2\build\.build-release\fdmdv2"\r
+ $(RM) "C:\bin\Projects\Radio\fdmdv2\build\.build-debug\fdmdv2"\r
\r
\r
-./Release/src_dlg_about.o ./Release/src_dlg_audio.o ./Release/src_dlg_comports.o ./Release/src_dlg_options.o ./Release/src_fdmdv2_main.o ./Release/src_fdmdv2_plot.o ./Release/src_topFrame.o ./Release/src_fdmdv2_plot_scatter.o ./Release/src_fdmdv2_plot_waterfall.o ./Release/src_fdmdv2_plot_spectrum.o ./Release/src_fdmdv2_pa_wrapper.o ./Release/src_fdmdv2_plot_scalar.o \r
+./Debug/src_dlg_about.o ./Debug/src_dlg_audio.o ./Debug/src_dlg_comports.o ./Debug/src_dlg_options.o ./Debug/src_fdmdv2_main.o ./Debug/src_fdmdv2_plot.o ./Debug/src_topFrame.o ./Debug/src_fdmdv2_plot_scatter.o ./Debug/src_fdmdv2_plot_waterfall.o ./Debug/src_fdmdv2_plot_spectrum.o ./Debug/src_fdmdv2_pa_wrapper.o ./Debug/src_fdmdv2_plot_scalar.o \r
<?xml version="1.0" encoding="UTF-8"?>
<CodeLite_Workspace Name="fdmdv2" Database="./fdmdv2.tags">
<Project Name="fdmdv2" Path="fdmdv2.project" Active="Yes"/>
+ <Project Name="drawing" Path="../../../../wxWidgets-2.9.4/samples/drawing/drawing.project" Active="No"/>
<BuildMatrix>
- <WorkspaceConfiguration Name="Debug" Selected="no">
+ <WorkspaceConfiguration Name="Debug" Selected="yes">
<Project Name="fdmdv2" ConfigName="Debug"/>
+ <Project Name="drawing" ConfigName="Debug"/>
</WorkspaceConfiguration>
<WorkspaceConfiguration Name="Release" Selected="yes">
<Project Name="fdmdv2" ConfigName="Release"/>
+ <Project Name="drawing" ConfigName="Release"/>
</WorkspaceConfiguration>
</BuildMatrix>
</CodeLite_Workspace>
.PHONY: clean All
All:
- @echo ----------Building project:[ fdmdv2 - Release ]----------
+ @echo ----------Building project:[ fdmdv2 - Debug ]----------
@"$(MAKE)" -f "fdmdv2.mk"
clean:
- @echo ----------Cleaning project:[ fdmdv2 - Release ]----------
+ @echo ----------Cleaning project:[ fdmdv2 - Debug ]----------
@"$(MAKE)" -f "fdmdv2.mk" clean
\r
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
// Class MainFrame(wxFrame* pa->ent) : TopFrame(parent)\r
-//\r
-// @class $(Name)\r
-// @author $(User)\r
-// @date $(Date)\r
-// @file $(CurrentFileName).$(CurrentFileExt)\r
-// @brief\r
-//\r
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent)\r
{\r
+ /*\r
+ // @class $(Name)\r
+ // @author $(User)\r
+ // @date $(Date)\r
+ // @file $(CurrentFileName).$(CurrentFileExt)\r
+ // @brief\r
+ */\r
// m_radioRunning = false;\r
m_sound = NULL;\r
m_zoom = 1.;\r
m_panelDefaultA = new PlotPanel((wxFrame*) m_auiNbookCtrl );\r
m_auiNbookCtrl->AddPage(m_panelDefaultA, _("Test A"), true, wxNullBitmap );\r
#ifdef USE_TIMER\r
-// this->Connect(wxEVT_TIMER, MainFrame::OnTimer); //, ID_TIMER_WATERFALL);\r
- Bind(wxEVT_TIMER, &MainFrame::OnTimer, this); // ID_MY_WINDOW);\r
+ m_rxPa = new PortAudioWrap();\r
+ double f = 0.0;\r
+ for(int i = 0; i < FDMDV_NSPEC; i++)\r
+ {\r
+// m_rxPa->m_av_mag[i] = sin(i) * 100.0;\r
+ f = ((double)i / M_PI);\r
+ f = sin(f);\r
+ f = 100 * f;\r
+// f = f - 50;\r
+ m_rxPa->m_av_mag[i] = f;\r
+ }\r
+ Bind(wxEVT_TIMER, &MainFrame::OnTimer, this); // ID_MY_WINDOW);\r
m_plotTimer.SetOwner(this, ID_TIMER_WATERFALL);
m_plotTimer.Start(500, wxTIMER_CONTINUOUS);\r
#endif\r
}
\r
#ifdef USE_TIMER\r
+//static int cnt = 3;\r
+\r
//----------------------------------------------------------------\r
// OnTimer()\r
//----------------------------------------------------------------\r
void MainFrame::OnTimer(wxTimerEvent &evt)\r
{\r
+// cnt--;\r
m_panelWaterfall->m_newdata = true;\r
m_panelWaterfall->Refresh();\r
+ m_panelSpectrum->m_newdata = true;\r
+ m_panelSpectrum->Refresh();\r
+// m_panelDefaultA->m_newdata = true;\r
+// m_panelDefaultA->Refresh();\r
}\r
#endif\r
\r
#include <wx/wx.h>\r
+#include "wx/rawbmp.h"\r
#include "wx/file.h"
#include "wx/config.h"\r
#include "wx/filename.h"
{\r
m_pNoteBook = (wxAuiNotebook *) parent;\r
m_pTopFrame = (MainFrame *)m_pNoteBook->GetParent();\r
-// m_bmp = new wxBitmap(MAX_BMP_X, MAX_BMP_Y, wxBITMAP_SCREEN_DEPTH);
m_zoomFactor = 1.0;\r
+ m_pBmp = NULL;\r
+ m_pPix = NULL;\r
+ m_firstPass = true;\r
+ m_line_color = 0;\r
m_newdata = false;\r
m_clip = false;\r
m_use_bitmap = true;\r
m_penSolid = wxPen(wxColor(0x00, 0x00, 0x00), 1, wxPENSTYLE_SOLID);\r
SetBackgroundStyle(wxBG_STYLE_PAINT);\r
SetLabelSize(10.0);\r
-/*\r
- wxNativePixelData m_pBmp(*m_bmp);\r
- if(!m_pBmp)\r
- {\r
- // ... raw access to bitmap data unavailable, do something else ...\r
- return;\r
- }\r
- if(m_pBmp.GetWidth() < 20 || m_pBmp.GetHeight() < 20)\r
- {\r
- // ... complain: the bitmap it too small ...\r
- return;\r
- }\r
-*/\r
}\r
\r
//-------------------------------------------------------------------------\r
//-------------------------------------------------------------------------\r
PlotPanel::~PlotPanel()\r
{\r
- if(!m_bmp->IsNull())\r
+ if(!m_pBmp->IsNull())\r
{\r
- delete m_bmp;\r
+ delete m_pBmp;\r
}
}\r
\r
m_rCtrl = GetClientRect();\r
if(m_use_bitmap)\r
{\r
- m_bmp = new wxBitmap(m_rCtrl.GetWidth(), m_rCtrl.GetHeight(), wxBITMAP_SCREEN_DEPTH);
+ if(!m_oImage.IsOk())\r
+ {\r
+ m_oImage.Create(m_rCtrl.GetWidth(), m_rCtrl.GetHeight(), true);\r
+ }\r
+ else\r
+ {\r
+ m_oImage.Rescale(m_rCtrl.GetWidth(), m_rCtrl.GetHeight());\r
+ }\r
+ m_pBmp = new wxBitmap(m_oImage, wxBITMAP_SCREEN_DEPTH);
+/*\r
+ if(m_oImage.IsOk())\r
+ {\r
+ m_oImage.Destroy();\r
+ }\r
+ m_oImage.Create(m_rCtrl.GetWidth(), m_rCtrl.GetHeight(), true);\r
+ m_pBmp = new wxBitmap(m_oImage, wxBITMAP_SCREEN_DEPTH);
+ m_oImage.Rescale(m_rCtrl.GetWidth(), m_rCtrl.GetHeight());\r
+*/\r
m_firstPass = true;\r
- this->Refresh();\r
+// this->Refresh();\r
}\r
}\r
\r
return m_zoomFactor;\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// draw()\r
+//-------------------------------------------------------------------------\r
+void PlotPanel::draw(wxAutoBufferedPaintDC& pDC)\r
+{\r
+ wxMemoryDC m_mDC;\r
+ m_mDC.SelectObject(*m_pBmp);\r
+ m_rCtrl = GetClientRect();\r
+ m_rGrid = m_rCtrl;\r
+\r
+ m_rGrid = m_rGrid.Deflate(PLOT_BORDER + (XLEFT_OFFSET/2), (PLOT_BORDER + (YBOTTOM_OFFSET/2)));\r
+ m_rGrid.Offset(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER);\r
+\r
+ pDC.Clear();\r
+ m_rPlot = wxRect(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER, m_rGrid.GetWidth(), m_rGrid.GetHeight());\r
+ if(m_firstPass)\r
+ {\r
+ m_firstPass = false;\r
+ m_mDC.FloodFill(0, 0, VERY_LTGREY_COLOR);\r
+\r
+ // Draw a filled rectangle with aborder\r
+ wxBrush ltGraphBkgBrush = wxBrush(DARK_BLUE_COLOR);\r
+ m_mDC.SetBrush(ltGraphBkgBrush);\r
+ m_mDC.SetPen(wxPen(BLACK_COLOR, 0));\r
+ m_mDC.DrawRectangle(m_rPlot);\r
+ }\r
+ if(m_newdata)\r
+ {\r
+ m_newdata = false;\r
+ int t = m_rPlot.GetTop();\r
+ int l = m_rPlot.GetLeft();\r
+ int r = m_rPlot.GetRight();\r
+ int h = m_rPlot.GetHeight();\r
+ int w = m_rPlot.GetWidth();\r
+ pDC.Blit(l, t, w, h, &m_mDC, l, t);\r
+ }\r
+ drawGraticule(pDC);\r
+ m_mDC.SetBrush(wxNullBrush);\r
+ m_mDC.SelectObject(wxNullBitmap);\r
+}\r
+\r
//-------------------------------------------------------------------------\r
// drawGraticule()\r
//-------------------------------------------------------------------------\r
-void PlotPanel::drawGraticule(wxAutoBufferedPaintDC& pdc)\r
+void PlotPanel::drawGraticule(wxAutoBufferedPaintDC& pDC)\r
{\r
int p;\r
char buf[15];\r
wxString s;\r
\r
// Vertical gridlines\r
- pdc.SetPen(m_penShortDash);\r
- for(p = (PLOT_BORDER + XLEFT_OFFSET + GRID_INCREMENT); p < ((m_rCtrl.GetWidth() - XLEFT_OFFSET) + GRID_INCREMENT); p += GRID_INCREMENT)\r
+ pDC.SetPen(m_penShortDash);\r
+ for(p = (PLOT_BORDER + XLEFT_OFFSET + GRID_INCREMENT); p < ((m_rGrid.GetWidth() - XLEFT_OFFSET) + GRID_INCREMENT); p += GRID_INCREMENT)\r
{\r
- pdc.DrawLine(p, (m_rGrid.GetHeight() + PLOT_BORDER), p, PLOT_BORDER);\r
+ pDC.DrawLine(p, (m_rGrid.GetHeight() + PLOT_BORDER), p, PLOT_BORDER);\r
}\r
// Horizontal gridlines\r
- pdc.SetPen(m_penDotDash);\r
+ pDC.SetPen(m_penDotDash);\r
for(p = (m_rGrid.GetHeight() - GRID_INCREMENT); p > PLOT_BORDER; p -= GRID_INCREMENT)\r
{\r
- pdc.DrawLine(PLOT_BORDER + XLEFT_OFFSET, (p + PLOT_BORDER), (m_rCtrl.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), (p + PLOT_BORDER));\r
+ pDC.DrawLine(PLOT_BORDER + XLEFT_OFFSET, (p + PLOT_BORDER), (m_rGrid.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), (p + PLOT_BORDER));\r
}\r
// Label the X-Axis\r
- pdc.SetPen(wxPen(GREY_COLOR, 1));\r
- for(p = GRID_INCREMENT; p < (m_rCtrl.GetWidth() - YBOTTOM_OFFSET); p += GRID_INCREMENT)\r
+ pDC.SetPen(wxPen(GREY_COLOR, 1));\r
+ for(p = GRID_INCREMENT; p < (m_rGrid.GetWidth() - YBOTTOM_OFFSET); p += GRID_INCREMENT)\r
{\r
sprintf(buf, "%1.1f Hz",(double)(p / 10));\r
- pdc.DrawText(buf, p - PLOT_BORDER + XLEFT_OFFSET, m_rGrid.GetHeight() + YBOTTOM_OFFSET/2);\r
+ pDC.DrawText(buf, p - PLOT_BORDER + XLEFT_OFFSET, m_rGrid.GetHeight() + YBOTTOM_OFFSET/2);\r
}\r
// Label the Y-Axis\r
//for(p = GRID_INCREMENT; p < (h - YBOTTOM_OFFSET); p += GRID_INCREMENT)\r
for(p = (m_rGrid.GetHeight() - GRID_INCREMENT); p > PLOT_BORDER; p -= GRID_INCREMENT)\r
{\r
sprintf(buf, "%1.0f", (double)((m_rGrid.GetHeight() - p) * -10));\r
- pdc.DrawText(buf, XLEFT_TEXT_OFFSET, p);\r
+ pDC.DrawText(buf, XLEFT_TEXT_OFFSET, p);\r
}\r
}\r
\r
-//-------------------------------------------------------------------------\r
-// draw()\r
-//-------------------------------------------------------------------------\r
-void PlotPanel::draw(wxAutoBufferedPaintDC& pdc)\r
-{\r
-// wxAutoBufferedPaintDC dc(this);\r
-// wxMemoryDC memdc(&m_bmp);\r
-\r
- m_rCtrl = GetClientRect();\r
- m_rGrid = m_rCtrl;\r
-\r
- m_rCtrl.Deflate(PLOT_BORDER + (XLEFT_OFFSET/2), (PLOT_BORDER + (YBOTTOM_OFFSET/2)));\r
- m_rCtrl.Offset(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER);\r
-\r
- //m_h = m_rCtrl.GetHeight();\r
- //m_w = m_rCtrl.GetWidth();\r
-\r
- pdc.Clear();\r
-\r
- // Draw a filled rectangle with aborder\r
- wxBrush ltBlueBrush = wxBrush(LIGHT_BLUE_COLOR);\r
- pdc.SetBrush(ltBlueBrush);\r
- pdc.SetPen(wxPen(BLACK_COLOR, 1));\r
- pdc.DrawRectangle(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER, m_rCtrl.GetWidth(), m_rCtrl.GetHeight());\r
- drawGraticule(pdc);\r
-}\r
-\r
//-------------------------------------------------------------------------\r
// paintEvent()\r
//\r
#define MAX_ZOOM 7\r
#define MAX_BMP_X (400 * MAX_ZOOM)\r
#define MAX_BMP_Y (400 * MAX_ZOOM)\r
+#define DATA_LINE_HEIGHT 10\r
+#define TEXT_BASELINE_OFFSET_Y -5\r
+
\r
#define wxUSE_FILEDLG 1\r
#define wxUSE_LIBPNG 1\r
#define VERY_LTGREY_COLOR wxColor(0xF8, 0xF8, 0xF8)\r
#define WHITE_COLOR wxColor(0xFF, 0xFF, 0xFF)\r
\r
+#define DARK_BLUE_COLOR wxColor(0x00, 0x00, 0x80)\r
#define BLUE_COLOR wxColor(0x00, 0x00, 0xFF)\r
#define LIGHT_BLUE_COLOR wxColor(0x80, 0x80, 0xFF)\r
\r
#define LIGHT_YELLOW_COLOR wxColor(0xFF, 0xFF, 0xB5)\r
#define DARK_YELLOW_COLOR wxColor(0xFF, 0xFF, 0x08)\r
\r
-\r
-/*\r
- wxNullBrush\r
- wxBLACK_BRUSH\r
- wxBLUE_BRUSH\r
- wxCYAN_BRUSH\r
- wxGREEN_BRUSH\r
- wxYELLOW_BRUSH\r
- wxGREY_BRUSH\r
- wxLIGHT_GREY_BRUSH\r
- wxMEDIUM_GREY_BRUSH\r
- wxRED_BRUSH\r
- wxTRANSPARENT_BRUSH\r
- wxWHITE_BRUSH\r
-*/\r
-\r
class MainFrame;\r
\r
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
double m_label_size;\r
wxSize m_Bufsz;\r
bool m_newdata;\r
- wxBitmap *m_bmp;\r
- wxNativePixelData *m_pBmp;\r
+ wxImage m_oImage;\r
+ wxBitmap *m_pBmp;\r
+ wxNativePixelData *m_pPix;\r
\r
// some useful events\r
void OnMouseMove(wxMouseEvent& event);\r
protected:\r
int m_x;
int m_y;
-// int m_w;
-// int m_h;\r
int m_left;\r
int m_top;
int m_prev_w;
bool m_mouseDown;\r
bool m_firstPass;\r
double m_zoomFactor;\r
+ int m_greyscale;
+ int m_line_color;\r
DECLARE_EVENT_TABLE()\r
};\r
#endif //__FDMDV2_PLOT__\r
\r
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
// Class PlotSpectrum\r
+//\r
+// @class $(Name)\r
+// @author $(User)\r
+// @date $(Date)\r
+// @file $(CurrentFileName).$(CurrentFileExt)\r
+// @brief\r
+//\r
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
PlotSpectrum::PlotSpectrum(wxFrame* parent): PlotPanel(parent)\r
{\r
+ m_greyscale = 0;\r
+ m_Bufsz = GetMaxClientSize();\r
+ m_newdata = false;\r
+ m_firstPass = true;\r
+ m_line_color = 0;\r
SetLabelSize(10.0);\r
}\r
\r
-#define TEXT_BASELINE_OFFSET_Y -5\r
+//----------------------------------------------------------------\r
+// ~PlotSpectrum()\r
+//----------------------------------------------------------------\r
+PlotSpectrum::~PlotSpectrum()
+{\r
+}\r
+\r
+//----------------------------------------------------------------\r
+// draw()\r
+//----------------------------------------------------------------\r
+void PlotSpectrum::draw(wxAutoBufferedPaintDC& pDC)
+{\r
+ wxMemoryDC m_mDC;\r
+ m_mDC.SelectObject(*m_pBmp);\r
+ m_rCtrl = GetClientRect();\r
+ m_rGrid = m_rCtrl;\r
+\r
+ m_rGrid = m_rGrid.Deflate(PLOT_BORDER + (XLEFT_OFFSET/2), (PLOT_BORDER + (YBOTTOM_OFFSET/2)));\r
+ m_rGrid.Offset(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER);\r
+\r
+ pDC.Clear();\r
+ m_rPlot = wxRect(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER, m_rGrid.GetWidth(), m_rGrid.GetHeight());\r
+ if(m_firstPass)\r
+ {\r
+ m_firstPass = false;\r
+ m_mDC.Clear();\r
+ m_mDC.FloodFill(0, 0, VERY_LTGREY_COLOR);\r
+\r
+ // Draw a filled rectangle with aborder\r
+// wxBrush ltGraphBkgBrush = wxBrush(LIGHT_YELLOW_COLOR);\r
+ wxBrush ltGraphBkgBrush = wxBrush(DARK_GREY_COLOR);\r
+ m_mDC.SetBrush(ltGraphBkgBrush);\r
+ m_mDC.SetPen(wxPen(BLACK_COLOR, 0));\r
+ m_mDC.DrawRectangle(m_rPlot);\r
+ }\r
+ if(m_newdata)\r
+ {\r
+ m_newdata = false;\r
+// plotPixelData(dc);\r
+#ifdef USE_TIMER\r
+ int t = m_rPlot.GetTop();\r
+ int l = m_rPlot.GetLeft();\r
+ int h = m_rPlot.GetHeight();\r
+ int w = m_rPlot.GetWidth();\r
+ //double stride = w / FDMDV_NSPEC;\r
+\r
+ wxPen pen;\r
+ pen.SetColour(DARK_GREEN_COLOR);\r
+ pen.SetWidth(1);\r
+ m_mDC.SetPen(pen);\r
+\r
+ float *pData = m_pTopFrame->m_rxPa->m_av_mag;\r
+ for(int x = 1; x < w; x++)\r
+ {\r
+// m_mDC.DrawPoint(x, (int)pData[x]);\r
+ m_mDC.DrawLine((x - 1), (int)pData[(x - 1)] + (h / 2), x, (int)pData[x] + (h / 2));\r
+ }\r
+ pDC.Blit(l, t, w, h, &m_mDC, l, t);\r
+#endif\r
+ drawGraticule(pDC);\r
+ }\r
+ m_mDC.SetBrush(wxNullBrush);\r
+ m_mDC.SelectObject(wxNullBitmap);\r
+}
+\r
+//-------------------------------------------------------------------------\r
+// drawData()\r
+//-------------------------------------------------------------------------\r
+void PlotSpectrum::drawData() //wxMemoryDC& pDC)\r
+{\r
+ wxNativePixelData dPix = wxNativePixelData(*m_pBmp, m_rCtrl);\r
+ m_pPix = &dPix;\r
+ if(m_pPix == NULL)\r
+ {\r
+ return;\r
+ }\r
+ wxNativePixelData::Iterator p(*m_pPix);\r
+\r
+ int w = m_rPlot.GetWidth();\r
+ int h = m_rPlot.GetHeight();\r
+ p.Offset(*m_pPix, XLEFT_OFFSET + 3, h - (DATA_LINE_HEIGHT - 2));\r
+// for(int y = 0; y < DATA_LINE_HEIGHT; ++y)\r
+// {\r
+ wxNativePixelData::Iterator rowStart = p;\r
+ for(int x = 0; x < (w - 1); ++x, ++p)\r
+ {\r
+ p.OffsetX(*m_pPix, m_pTopFrame->m_rxPa->m_av_mag[x]);\r
+ p.Red() = 0x00; // m_pTopFrame->m_rxPa->m_av_mag[x];\r
+ p.Green() = 0xFF;\r
+ p.Blue() = 0x00; // m_pTopFrame->m_rxPa->m_av_mag[x];\r
+ }\r
+ p = rowStart;\r
+// p.OffsetY(*m_pPix, 1);\r
+// }\r
+}\r
\r
//-------------------------------------------------------------------------\r
// drawGraticule()\r
\r
// Vertical gridlines\r
dc.SetPen(m_penShortDash);\r
- for(p = (PLOT_BORDER + XLEFT_OFFSET + GRID_INCREMENT); p < ((m_rCtrl.GetWidth() - XLEFT_OFFSET) + GRID_INCREMENT); p += GRID_INCREMENT)\r
+ for(p = (PLOT_BORDER + XLEFT_OFFSET + GRID_INCREMENT); p < ((m_rGrid.GetWidth() - XLEFT_OFFSET) + GRID_INCREMENT); p += GRID_INCREMENT)\r
{\r
- dc.DrawLine(p, (m_rCtrl.GetHeight() + PLOT_BORDER), p, PLOT_BORDER);\r
+ dc.DrawLine(p, (m_rGrid.GetHeight() + PLOT_BORDER), p, PLOT_BORDER);\r
}\r
\r
- int y_zero = (m_rCtrl.GetHeight() - m_top) / 2 ;\r
+ int y_zero = (m_rGrid.GetHeight() - m_top) / 2 ;\r
dc.SetPen(m_penSolid);\r
- dc.DrawLine(PLOT_BORDER + XLEFT_OFFSET, y_zero, (m_rCtrl.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), y_zero);\r
+ dc.DrawLine(PLOT_BORDER + XLEFT_OFFSET, y_zero, (m_rGrid.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), y_zero);\r
sprintf(buf, "%6.0f", 0.0);\r
dc.DrawText(buf, XLEFT_TEXT_OFFSET, y_zero + TEXT_BASELINE_OFFSET_Y);\r
\r
// Horizontal gridlines\r
dc.SetPen(m_penDotDash);\r
- for(p = 0; (y_zero + p) < m_rCtrl.GetHeight() ; p += GRID_INCREMENT)\r
+ for(p = 0; (y_zero + p) < m_rGrid.GetHeight() ; p += GRID_INCREMENT)\r
{\r
if(p > 0)\r
{\r
- dc.DrawLine(PLOT_BORDER + XLEFT_OFFSET, (y_zero + p), (m_rCtrl.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), (y_zero + p));\r
+ dc.DrawLine(PLOT_BORDER + XLEFT_OFFSET, (y_zero + p), (m_rGrid.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), (y_zero + p));\r
sprintf(buf, "%6.0f", (double)(p) * -10);\r
dc.DrawText(buf, XLEFT_TEXT_OFFSET, (y_zero + p + TEXT_BASELINE_OFFSET_Y));\r
\r
- dc.DrawLine(PLOT_BORDER + XLEFT_OFFSET, (y_zero - p), (m_rCtrl.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), (y_zero - p));\r
+ dc.DrawLine(PLOT_BORDER + XLEFT_OFFSET, (y_zero - p), (m_rGrid.GetWidth() + PLOT_BORDER + XLEFT_OFFSET), (y_zero - p));\r
sprintf(buf, "%6.0f", (double)(p) * 10);\r
dc.DrawText(buf, XLEFT_TEXT_OFFSET, (y_zero - p + TEXT_BASELINE_OFFSET_Y));\r
}\r
}\r
}\r
\r
-//----------------------------------------------------------------\r
-// draw()\r
-//----------------------------------------------------------------\r
-void PlotSpectrum::draw(wxAutoBufferedPaintDC& dc)
-{\r
-/*
- float x_px_per_point = 0.0;
- float y_px_per_dB = 0.0;
- int i;
- int x1;
- int y1;
- int x2;
- int y2;
- float mag1, mag2;
- char label[20];
- float px_per_hz;\r
-*/\r
- m_rCtrl = GetClientRect();\r
- m_rGrid = m_rCtrl;\r
-\r
- m_rGrid.Deflate(PLOT_BORDER + (XLEFT_OFFSET/2), (PLOT_BORDER + (YBOTTOM_OFFSET/2)));\r
- m_rGrid.Offset(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER);\r
-\r
-// m_rGrid.Deflate(PLOT_BORDER, (PLOT_BORDER + (YBOTTOM_OFFSET/2)));\r
-// m_rGrid.Offset(PLOT_BORDER, PLOT_BORDER);\r
-\r
-// m_h = m_rGrid.GetHeight();\r
-// m_w = m_rGrid.GetWidth();\r
-\r
- dc.Clear();\r
-\r
- // Draw a filled rectangle with aborder\r
- wxBrush ltYellowBrush = wxBrush(LIGHT_YELLOW_COLOR);\r
- dc.SetBrush(ltYellowBrush);\r
-// dc.SetBrush(BLACK_COLOR);\r
-// dc.SetPen(wxPen(BLACK_COLOR, 1));\r
- m_top = PLOT_BORDER;\r
- m_left = PLOT_BORDER + XLEFT_OFFSET;\r
- dc.DrawRectangle(m_left, m_top, m_rCtrl.GetWidth(), m_rCtrl.GetHeight());\r
-\r
- drawGraticule(dc);\r
-/*
- Fl_Box::draw();
- fl_color(FL_BLACK);
- fl_rectf(x(),y(),w(),h());
- fl_color(FL_GREEN);
- fl_line_style(FL_SOLID);
-
- fl_push_clip(x(),y(),w(),h());
- //printf("%d %d\n", w(), h());
-*/
-/*\r
- dc.SetBrush(*wxBLUE_BRUSH);\r
- dc.SetPen(wxPen(YELLOW_COLOR, 2));\r
- dc.DrawRectangle(PLOT_BORDER, PLOT_BORDER, m_w, m_h);\r
-\r
- x_px_per_point = (float)m_w / FDMDV_NSPEC;
- y_px_per_dB = (float)m_h / (MAX_DB - MIN_DB);
-
-\r
- // plot spectrum
- for(i = 0; i < FDMDV_NSPEC - 1; i++)
- {
-// mag1 = av_mag[i];
-// mag2 = av_mag[i+1];
-
- x1 = m_x + i * x_px_per_point;
- y1 = m_y + -mag1 * y_px_per_dB;
- x2 = m_x + (i+1) * x_px_per_point;
- y2 = m_y + -mag2 * y_px_per_dB;
-// fl_line(x1,y1,x2,y2);
- }
-
- // y axis graticule
-// fl_line_style(FL_DOT);
- for(i=MIN_DB; i<MAX_DB; i+=10)
- {
- x1 = m_x;
- y1 = m_y + -i * y_px_per_dB;
- x2 = m_x + m_w;
- y2 = y1;
- //printf("%d %d %d %d\n", x1, y1, x2, y2);
-// fl_line(x1,y1,x2,y2);
- sprintf(label, "%d", i);
-// fl_draw(label, x1, y1);
- }
-
- // x axis graticule
- px_per_hz = (float)m_w/(MAX_HZ-MIN_HZ);
-// fl_line_style(FL_DOT);
- for(i = 500; i < MAX_HZ; i += 500)
- {
- x1 = m_x + i * px_per_hz;
- y1 = m_y;
- x2 = x1;
- y2 = m_y + m_h;
- //printf("i=%d %d %d %d %d\n", i, x1, y1, x2, y2);
-// fl_line(x1,y1,x2,y2);
- sprintf(label, "%d", i);
-// fl_draw(label, x1, y2);
- }
-// fl_pop_clip();
- */\r
-}
-\r
//----------------------------------------------------------------\r
// OnPaint()\r
//----------------------------------------------------------------\r
m_rCtrl = GetClientRect();\r
if(m_use_bitmap)\r
{\r
- m_bmp = new wxBitmap(m_rCtrl.GetWidth(), m_rCtrl.GetHeight(), wxBITMAP_SCREEN_DEPTH);
+ m_firstPass = true;\r
+ m_pBmp = new wxBitmap(m_rCtrl.GetWidth(), m_rCtrl.GetHeight(), wxBITMAP_SCREEN_DEPTH);
this->Refresh();\r
}\r
}\r
public:
// PlotSpectrum(wxFrame* parent, int x, int y, int w, int h);
PlotSpectrum(wxFrame* parent);
- ~PlotSpectrum() {};
+ ~PlotSpectrum();
+// bool m_newdata;\r
+\r
protected:
void OnPaint(wxPaintEvent& event);\r
void OnSize(wxSizeEvent& event);\r
void OnShow(wxShowEvent& event);\r
void drawGraticule(wxAutoBufferedPaintDC& dc);\r
void draw(wxAutoBufferedPaintDC& dc);\r
+ void drawData(); //wxMemoryDC& pDC);\r
DECLARE_EVENT_TABLE()\r
};
}
//----------------------------------------------------------------\r
-// ~PlotWaterfall()\r
+// paintEvent()\r
+//\r
+// Called by the system of by wxWidgets when the panel needs\r
+// to be redrawn. You can also trigger this call by calling\r
+// Refresh()/Update().\r
//----------------------------------------------------------------\r
-PlotWaterfall::~PlotWaterfall()
+void PlotWaterfall::OnPaint(wxPaintEvent & evt)\r
{\r
+ wxAutoBufferedPaintDC pdc(this);\r
+ draw(pdc);\r
}\r
\r
-/*\r
//----------------------------------------------------------------\r
-// new_pixel_buf()\r
+// OnShow()\r
//----------------------------------------------------------------\r
-void PlotWaterfall::new_pixel_buf(int w, int h)
-{
-// int i;\r
-\r
- m_prev_w = w;\r
- m_prev_h = h;
-\r
-// wxMemoryDC m_memDC = new wxMemoryDC();
-
- if(m_bmp->IsOk())\r
- {\r
- delete m_bmp;\r
- //m_Bufsz = h * w;\r
+void PlotWaterfall::OnShow(wxShowEvent& event)\r
+{\r
+}\r
\r
- //m_img = new wxImage(sz, pdata, alpha, false);\r
- m_bmp = new wxBitmap(w, h, wxBITMAP_SCREEN_DEPTH);\r
- //m_pBmp = m_bmp->GetBitmapData();\r
- }
-// m_pixel_buf = new unsigned[buf_sz];
-// for(i = 0; i < buf_sz; i++)
-// {
-// m_pixel_buf[i] = 0;
-// }\r
-}
-
//----------------------------------------------------------------\r
-// handle()\r
+// ~PlotWaterfall()\r
//----------------------------------------------------------------\r
-int PlotWaterfall::handle(int event)
-{
- // detect a left mouse down if inside the window
- if ((event == FL_NO_EVENT) && (Fl::event_button() == 1))
- {
- if ((Fl::event_x() > x()) && (Fl::event_x() < (x() + w())) && (Fl::event_y() > y()) && (Fl::event_y() < (y() + h())))
- {
- // show zoomed spectrum window
- zoomWaterfallWindow->show();
- }
- }
- return 0;
-}
-*/\r
-
+PlotWaterfall::~PlotWaterfall()
+{\r
+}\r
+\r
//----------------------------------------------------------------\r
// heatmap()\r
// map val to a rgb colour
return (b << 16) + (g << 8) + r;
}
\r
-#define DATA_LINE_WIDTH 25\r
-
+#define PLOT_BOTTOM 0\r
+#define PLOT_TOP 1\r
+\r
+//static long paint_count;\r
+\r
//----------------------------------------------------------------\r
// draw()\r
//----------------------------------------------------------------\r
void PlotWaterfall::draw(wxAutoBufferedPaintDC& pDC)
{\r
- bool rc;\r
wxMemoryDC m_mDC;\r
- m_mDC.SelectObject(*m_bmp);\r
-// m_mDC.SetMapMode(pDC.GetMapMode());\r
+ m_mDC.SelectObject(*m_pBmp);\r
m_rCtrl = GetClientRect();\r
m_rGrid = m_rCtrl;\r
\r
m_rGrid.Offset(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER);\r
\r
pDC.Clear();\r
+// m_mDC.Clear();\r
m_rPlot = wxRect(PLOT_BORDER + XLEFT_OFFSET, PLOT_BORDER, m_rGrid.GetWidth(), m_rGrid.GetHeight());\r
-// m_rPlot = m_rPlot.Deflate(1, 1);\r
if(m_firstPass)\r
{\r
m_firstPass = false;\r
m_mDC.FloodFill(0, 0, VERY_LTGREY_COLOR);\r
-// m_rPlot.Offset(1, 1);\r
\r
// Draw a filled rectangle with aborder\r
- wxBrush ltGraphBkgBrush = wxBrush(LIGHT_RED_COLOR);\r
+ wxBrush ltGraphBkgBrush = wxBrush(LIGHT_BLUE_COLOR);\r
m_mDC.SetBrush(ltGraphBkgBrush);\r
m_mDC.SetPen(wxPen(BLACK_COLOR, 0));\r
m_mDC.DrawRectangle(m_rPlot);\r
if(m_newdata)\r
{\r
m_newdata = false;\r
-// m_rPlot = m_rPlot.Deflate(2, 2);\r
-// m_rPlot.Offset(1, 1);\r
-\r
// plotPixelData(dc);\r
#ifdef USE_TIMER\r
int t = m_rPlot.GetTop();\r
int l = m_rPlot.GetLeft();\r
- int b = m_rPlot.GetBottom();\r
- int r = m_rPlot.GetRight();\r
int h = m_rPlot.GetHeight();\r
+// int b = m_rPlot.GetBottom();\r
int w = m_rPlot.GetWidth();\r
-\r
- wxDateTime dt;\r
- char buf[15];\r
- sprintf(buf, "%9X", (unsigned int)dt.GetTimeNow());\r
- wxPen pen;\r
- pen.SetCap(wxCAP_BUTT);\r
- pen.SetStyle(wxPENSTYLE_SOLID);\r
- pen.SetWidth(1);\r
- pen.SetColour(BLACK_COLOR);\r
- m_mDC.SetPen(pen);\r
- m_mDC.DrawText(buf, l + 100, h - 38);\r
-// bool rc = pDC.StretchBlit(l, t + DATA_LINE_WIDTH, r, b , &m_mDC, l, t, r, b - DATA_LINE_WIDTH);\r
-// bool rc = pDC.StretchBlit(l, t, w, h - DATA_LINE_WIDTH, &m_mDC, l, t + DATA_LINE_WIDTH, w, h - DATA_LINE_WIDTH);\r
-// bool rc = pDC.StretchBlit(l, t, w, h, &m_mDC, l, t, w, h);\r
int t2 = t + 1;\r
int w2 = w - 1;\r
- rc = m_mDC.StretchBlit(l, t2, w2, h - (DATA_LINE_WIDTH), &m_mDC, l, t2 + DATA_LINE_WIDTH, w2, h - DATA_LINE_WIDTH);\r
- switch(m_line_color)\r
- {\r
- case 0:\r
- pen.SetColour(RED_COLOR);\r
- m_line_color = 1;\r
- break;\r
-\r
- case 1:\r
- pen.SetColour(YELLOW_COLOR);\r
- m_line_color = 2;\r
- break;\r
+ int ht = (h - DATA_LINE_HEIGHT);\r
\r
- case 2:\r
- pen.SetColour(BLUE_COLOR);\r
- m_line_color = 0;\r
- break;\r
- }\r
- pen.SetWidth(DATA_LINE_WIDTH);\r
- m_mDC.SetPen(pen);\r
- m_mDC.DrawLine(l + 1, h - (DATA_LINE_WIDTH/2) + 1, r, h - (DATA_LINE_WIDTH/2) + 1);\r
- rc = pDC.Blit(l, t, w, h, &m_mDC, l, t);\r
+ drawData(); // m_mDC, PLOT_BOTTOM);\r
+// m_mDC.StretchBlit(l, t2, w2, ht, &m_mDC, l, t2 + DATA_LINE_HEIGHT, w2, ht - 2);\r
+ m_mDC.StretchBlit(l, t2, w2, ht, &m_mDC, l, t2 + DATA_LINE_HEIGHT, w2, ht - 2);\r
+// pDC.Blit(l, t, w, h, &m_mDC, l, t); // Scroll Up from Bottom\r
+ pDC.StretchBlit(l, (h - t) + 4, w, (-h) + 4, &m_mDC, l, t, w, h); // Scroll Down from top\r
#endif\r
+ drawGraticule(pDC);\r
}\r
- drawGraticule(pDC);\r
m_mDC.SetBrush(wxNullBrush);\r
m_mDC.SelectObject(wxNullBitmap);\r
}\r
\r
+//-------------------------------------------------------------------------\r
+// drawData()\r
+//-------------------------------------------------------------------------\r
+void PlotWaterfall::drawData() //wxMemoryDC& pDC)\r
+{\r
+ wxNativePixelData dPix = wxNativePixelData(*m_pBmp, m_rCtrl);\r
+ m_pPix = &dPix;\r
+ if(m_pPix == NULL)\r
+ {\r
+ return;\r
+ }\r
+ wxNativePixelData::Iterator p(*m_pPix);\r
+\r
+ int w = m_rPlot.GetWidth();\r
+ int h = m_rPlot.GetHeight();\r
+ p.Offset(*m_pPix, XLEFT_OFFSET + 3, h - (DATA_LINE_HEIGHT - 2));\r
+ for(int y = 0; y < DATA_LINE_HEIGHT; ++y)\r
+ {\r
+ wxNativePixelData::Iterator rowStart = p;\r
+ for(int x = 0; x < (w - 1); ++x, ++p)\r
+ {\r
+ p.Red() = m_pTopFrame->m_rxPa->m_av_mag[x];\r
+ p.Green() = m_pTopFrame->m_rxPa->m_av_mag[x];\r
+ p.Blue() = m_pTopFrame->m_rxPa->m_av_mag[x];\r
+ }\r
+ p = rowStart;\r
+ p.OffsetY(*m_pPix, 1);\r
+ }\r
+}\r
+\r
//-------------------------------------------------------------------------\r
// drawGraticule()\r
//-------------------------------------------------------------------------\r
char buf[15];\r
wxString s;\r
\r
- //wxBrush ltGraphBkgBrush = wxBrush(LIGHT_RED_COLOR);\r
wxBrush ltGraphBkgBrush;\r
ltGraphBkgBrush.SetStyle(wxBRUSHSTYLE_TRANSPARENT);\r
pDC.SetBrush(ltGraphBkgBrush);\r
pDC.SetPen(wxPen(BLACK_COLOR, 1));\r
-// pDC.DrawRectangle(m_rPlot);\r
\r
// Vertical gridlines\r
pDC.SetPen(m_penShortDash);\r
for(p = GRID_INCREMENT; p < (m_rGrid.GetWidth() - YBOTTOM_OFFSET); p += GRID_INCREMENT)\r
{\r
sprintf(buf, "%1.1f Hz",(double)(p / 10));\r
- pDC.DrawText(buf, p - PLOT_BORDER + XLEFT_OFFSET, m_rGrid.GetHeight() + YBOTTOM_OFFSET/2);\r
+ pDC.DrawText(buf, p - PLOT_BORDER + XLEFT_OFFSET, m_rGrid.GetHeight() + YBOTTOM_OFFSET/3);\r
}\r
// Label the Y-Axis\r
for(p = (m_rGrid.GetHeight() - GRID_INCREMENT); p > PLOT_BORDER; p -= GRID_INCREMENT)\r
intensity_per_dB = (float)256 /(MAX_DB - MIN_DB);
last_row = (unsigned int *)m_pBmp + dy *(dy_blocks - 1)* m_rCtrl.GetWidth();
\r
- wxNativePixelData data(*m_bmp);\r
+ wxNativePixelData data(*m_pBmp);\r
if(!data)\r
{\r
// ... raw access to bitmap data unavailable, do something else ...\r
}
}\r
}\r
-\r
-//----------------------------------------------------------------\r
-// paintEvent()\r
-//\r
-// Called by the system of by wxWidgets when the panel needs\r
-// to be redrawn. You can also trigger this call by calling\r
-// Refresh()/Update().\r
-//----------------------------------------------------------------\r
-void PlotWaterfall::OnPaint(wxPaintEvent & evt)\r
-{\r
- wxAutoBufferedPaintDC pdc(this);\r
- draw(pdc);\r
-}\r
-\r
-//----------------------------------------------------------------\r
-// OnSize()\r
-//----------------------------------------------------------------\r
-//void PlotWaterfall::OnSize(wxSizeEvent& event)\r
-//{\r
-// m_rCtrlPrev = m_rCtrl;\r
-// m_rCtrl = GetClientRect();\r
-// if(m_use_bitmap)\r
-// {\r
-// m_firstPass = true;\r
-// m_bmp = new wxBitmap(m_rCtrl.GetWidth(), m_rCtrl.GetHeight(), wxBITMAP_SCREEN_DEPTH);
-// this->Refresh();\r
-// }\r
-//}\r
-\r
-//----------------------------------------------------------------\r
-// OnShow()\r
-//----------------------------------------------------------------\r
-void PlotWaterfall::OnShow(wxShowEvent& event)\r
-{\r
-// wxAutoBufferedPaintDC dc(this);\r
-// draw();\r
-}\r
public:
PlotWaterfall(wxFrame* parent);\r
~PlotWaterfall();\r
+// bool m_newdata;\r
protected:
// unsigned *m_pixel_buf;
unsigned m_heatmap_lut[256];
- int m_greyscale;
wxMemoryDC m_mDC;\r
- int m_line_color;\r
\r
unsigned heatmap(float val, float min, float max);
\r
void drawGraticule(wxAutoBufferedPaintDC& dc);\r
void draw(wxAutoBufferedPaintDC& pdc);\r
void plotPixelData(wxAutoBufferedPaintDC& dc);\r
+ void drawData(); // wxMemoryDC& pDC);\r
+ void drawData2(wxMemoryDC& pDC, int barpos, int l, int t, int w, int h);\r
+\r
DECLARE_EVENT_TABLE()\r
};\r
\r