git-svn-id: https://svn.code.sf.net/p/freetel/code@716 01035d8c-6547-0410-b346-abe4f9...
authorwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 17 Sep 2012 18:16:46 +0000 (18:16 +0000)
committerwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 17 Sep 2012 18:16:46 +0000 (18:16 +0000)
12 files changed:
fdmdv2/build/fdmdv2.mk
fdmdv2/build/fdmdv2.txt
fdmdv2/build/fdmdv2.workspace
fdmdv2/build/fdmdv2_wsp.mk
fdmdv2/src/fdmdv2_main.cpp
fdmdv2/src/fdmdv2_main.h
fdmdv2/src/fdmdv2_plot.cpp
fdmdv2/src/fdmdv2_plot.h
fdmdv2/src/fdmdv2_plot_spectrum.cpp
fdmdv2/src/fdmdv2_plot_spectrum.h
fdmdv2/src/fdmdv2_plot_waterfall.cpp
fdmdv2/src/fdmdv2_plot_waterfall.h

index 376a9c671a091ee97ae08eac45e19281748be7c4..0f10b71730f4e90e808c927a94f203dc3c0a82ea 100644 (file)
@@ -2,18 +2,18 @@
 ## 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
@@ -35,7 +35,7 @@ PreprocessOnlySwitch   :=-E
 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
@@ -50,8 +50,8 @@ LibPath                := $(LibraryPathSwitch). $(LibraryPathSwitch)/bin/MinGW/m
 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
@@ -78,7 +78,7 @@ $(OutputFile): $(IntermediateDirectory)/.d $(Objects)
        $(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions)\r
 \r
 $(IntermediateDirectory)/.d:\r
-       @$(MakeDirCommand) "./Release"\r
+       @$(MakeDirCommand) "./Debug"\r
 \r
 PreBuild:\r
 \r
@@ -226,6 +226,6 @@ clean:
        $(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
index 444adc7e0b44e4afd8e35a82c6ca84447879d29b..b4a88d46e90a908188966c758d8aee971edb4d3b 100644 (file)
@@ -1 +1 @@
-./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
index e70810b801e060539f670db61ee629a8c121aefb..39870050db076735beae5efcaedcefd675f3177e 100644 (file)
@@ -1,12 +1,15 @@
 <?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>
index 59fb53ea6a70e2d3e0e9130c933698d6a46b4b21..4ea617a27f67fd1c8affb214583d0600e2a5783b 100644 (file)
@@ -1,8 +1,8 @@
 .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
index ad98b1c2f950c6d34966c2f2cabd547a2d4b760e..0bbf15a910db5d02e3e56e1ca431f5138703bf55 100644 (file)
@@ -91,16 +91,16 @@ bool MainApp::loadConfig()
 \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
@@ -127,8 +127,18 @@ MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent)
     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
@@ -149,13 +159,20 @@ MainFrame::~MainFrame()
 }
 \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
index a6e038799d0c39924308ea87fd29ffb0359504f4..7c3543c0ed3f3460fd07bdd644e91f319e7542f6 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <wx/wx.h>\r
 
+#include "wx/rawbmp.h"\r
 #include "wx/file.h"
 #include "wx/config.h"\r
 #include "wx/filename.h"
index 8f91f8281abb144e5c8677cbb9f302517f9a6226..d66c76a0abd8159e66c41b45f5b68bc2c52acf85 100644 (file)
@@ -41,8 +41,11 @@ PlotPanel::PlotPanel(wxFrame* parent) : wxPanel(parent)
 {\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
@@ -53,19 +56,6 @@ PlotPanel::PlotPanel(wxFrame* parent) : wxPanel(parent)
     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
@@ -73,9 +63,9 @@ PlotPanel::PlotPanel(wxFrame* parent) : wxPanel(parent)
 //-------------------------------------------------------------------------\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
@@ -120,9 +110,26 @@ void PlotPanel::OnSize(wxSizeEvent& event)
     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
@@ -180,70 +187,84 @@ double PlotPanel::GetZoomFactor(double zf)
     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
index f1e655c328aa19a78f0a8ea3390e2e5667bf6b30..55a287821fab0e77a54df30d48dfb61e287ea753 100644 (file)
@@ -19,6 +19,9 @@
 #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
@@ -41,6 +44,7 @@
 #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
@@ -103,8 +91,9 @@ class PlotPanel : public wxPanel
         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
@@ -129,8 +118,6 @@ class PlotPanel : public wxPanel
     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;
@@ -143,6 +130,8 @@ class PlotPanel : public wxPanel
         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
index 4c643713be3dde41a953adb20bd73c40fde37067..d8717ccef44290a7162fc6dc7f15758977402243 100644 (file)
@@ -41,13 +41,119 @@ END_EVENT_TABLE()
 \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
@@ -61,28 +167,28 @@ void PlotSpectrum::drawGraticule(wxAutoBufferedPaintDC&  dc)
 \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
@@ -97,111 +203,6 @@ void PlotSpectrum::drawGraticule(wxAutoBufferedPaintDC&  dc)
     }\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
@@ -220,7 +221,8 @@ void PlotSpectrum::OnSize(wxSizeEvent& event)
     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
index 957de7fa409beb51adc7e6c211ee73dcae720c87..8e40a793c6097f4b5e9b85fb18a49ff32395bc31 100644 (file)
@@ -36,13 +36,16 @@ class PlotSpectrum : public PlotPanel
     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
 };
index 508d7493a4e956827939193cfd67ad394dd9100b..d6b4487bee090eec488c19823fa698966e3b422b 100644 (file)
@@ -74,59 +74,32 @@ PlotWaterfall::PlotWaterfall(wxFrame* parent): PlotPanel(parent)
 }
 
 //----------------------------------------------------------------\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
@@ -163,17 +136,18 @@ unsigned PlotWaterfall::heatmap(float val, float min, float max)
     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
@@ -181,16 +155,15 @@ void PlotWaterfall::draw(wxAutoBufferedPaintDC& pDC)
     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
@@ -198,62 +171,59 @@ void PlotWaterfall::draw(wxAutoBufferedPaintDC& pDC)
     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
@@ -263,12 +233,10 @@ void PlotWaterfall::drawGraticule(wxAutoBufferedPaintDC&  pDC)
     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
@@ -287,7 +255,7 @@ void PlotWaterfall::drawGraticule(wxAutoBufferedPaintDC&  pDC)
     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
@@ -335,7 +303,7 @@ void PlotWaterfall::plotPixelData(wxAutoBufferedPaintDC&  dc)
     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
@@ -383,40 +351,3 @@ void PlotWaterfall::plotPixelData(wxAutoBufferedPaintDC&  dc)
         }
     }\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
index 86046c36fc343e51ac55c15b2dde4d870ed4c621..d3eaa67fcb1eb2835acfbdb794a9d5eed14f4bee 100644 (file)
@@ -43,13 +43,12 @@ class PlotWaterfall : public PlotPanel
     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
@@ -59,6 +58,9 @@ class PlotWaterfall : public PlotPanel
         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