Merge remote branch 'tom/qtfix' into maint
authorJohnathan Corgan <jcorgan@corganenterprises.com>
Wed, 6 Oct 2010 19:20:08 +0000 (12:20 -0700)
committerJohnathan Corgan <jcorgan@corganenterprises.com>
Wed, 6 Oct 2010 19:20:08 +0000 (12:20 -0700)
* tom/qtfix:
  Finally, the simple fix for the qtgui issues; also, changed the naming scheme output from _moc to .moc files because I think this looks cleaner.
  Removing Waterfall3DPlot. The qwt_plot3d is too much of a hassle to deal with and the plotting is not that stable even when it does work. This does not change the API.
  Fixed gitignore to reflect changes in moc/ui file naming.
  Fixes a lot of warnings by cleaning up namespace issues.
  Finally, the simple fix for the qtgui issues; also, changed the naming scheme output from _moc to .moc files because I think this looks cleaner.
  Removing qwtplot3d dependency and fixing a missed include in waterfallGlobalData.h.
  Removing Waterfall3DPlot. The qwt_plot3d is too much of a hassle to deal with and the plotting is not that stable even when it does work. This does not change the API.

20 files changed:
config/grc_gr_qtgui.m4
gr-qtgui/src/lib/.gitignore
gr-qtgui/src/lib/ConstellationDisplayPlot.cc
gr-qtgui/src/lib/FrequencyDisplayPlot.cc
gr-qtgui/src/lib/Makefile.am
gr-qtgui/src/lib/SpectrumGUIClass.cc
gr-qtgui/src/lib/SpectrumGUIClass.h
gr-qtgui/src/lib/TimeDomainDisplayPlot.cc
gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc [deleted file]
gr-qtgui/src/lib/Waterfall3DDisplayPlot.h [deleted file]
gr-qtgui/src/lib/WaterfallDisplayPlot.cc
gr-qtgui/src/lib/qtgui_sink_c.cc
gr-qtgui/src/lib/qtgui_sink_c.h
gr-qtgui/src/lib/qtgui_sink_f.cc
gr-qtgui/src/lib/qtgui_sink_f.h
gr-qtgui/src/lib/spectrumdisplayform.cc
gr-qtgui/src/lib/spectrumdisplayform.h
gr-qtgui/src/lib/spectrumdisplayform.ui
gr-qtgui/src/lib/waterfallGlobalData.cc
gr-qtgui/src/lib/waterfallGlobalData.h

index 84514d7ce9ad9f18091cc8f66201a336489737f1..4027bb332bd4f02cf9d40e7e7966f0ab3d6b85d3 100644 (file)
@@ -42,10 +42,9 @@ AC_DEFUN([GRC_GR_QTGUI],[
 #      QtGui
 #      QtCore
 #      qwt 
-#      qwtplot3d
 #      qt4
 
-# qt4-core, qt4-gui, qwt5-qt4, qwt5-qt4-dev, libqwtplot3d-qt4, libqwtplot3d-qt4-dev, qt4-dev-tools
+# qt4-core, qt4-gui, qwt5-qt4, qwt5-qt4-dev, qt4-dev-tools
 
     if test $passed = yes; then
         dnl Check for package qt or qt-mt, set QT_CFLAGS and QT_LIBS
@@ -59,20 +58,15 @@ AC_DEFUN([GRC_GR_QTGUI],[
         dnl Fetch QWT variables
         GR_QWT([], [passed=no])
 
-        dnl Process QWT Plot3D only if QWT passed
-       if test "$passed" = "yes"; then
-            GR_QWTPLOT3D([], [passed=no])
-        fi
-
        dnl Export the include dirs and libraries (note: QTOPENGL_LIBS includes links
        dnl to QtCore and QtGui libraries)
-       QT_INCLUDES="$QWT_CFLAGS $QWTPLOT3D_CFLAGS $QTCORE_CFLAGS $QTGUI_CFLAGS"
-       QT_LIBS="$QWT_LIBS $QWTPLOT3D_LIBS $QTOPENGL_LIBS"
+       QT_INCLUDES="$QWT_CFLAGS $QTCORE_CFLAGS $QTGUI_CFLAGS"
+       QT_LIBS="$QWT_LIBS $QTOPENGL_LIBS"
 
         dnl Build an includes variable specifically for running qmake by extracting
-        dnl all includes from the QWT and QWTPLOT3D, without the -I;
+        dnl all includes from the QWT, without the -I;
         dnl qmake appends the -I when processing the project file INCLUDEPATH
-        for i in $QWT_CFLAGS $QWTPLOT3D_CFLAGS; do
+        for i in $QWT_CFLAGS; do
             QMAKE_INCLUDES="$QMAKE_INCLUDES ${i##-I}"
         done
 
index 58c8081e513d08af582f314c45d1bf216d8f3a98..11bb4342aca4b848f92371f7b1b9e25613dfa015 100644 (file)
@@ -4,10 +4,10 @@
 /.deps
 /qtgui.cc
 /qtgui.py
-/WaterfallDisplayPlot_moc.cc
-/Waterfall3DDisplayPlot_moc.cc
-/TimeDomainDisplayPlot_moc.cc
-/spectrumdisplayform_moc.cc
-/spectrumdisplayform_ui.h
-/FrequencyDisplayPlot_moc.cc
-/ConstellationDisplayPlot_moc.cc
+/WaterfallDisplayPlot.moc.cc
+/Waterfall3DDisplayPlot.moc.cc
+/TimeDomainDisplayPlot.moc.cc
+/spectrumdisplayform.moc.cc
+/spectrumdisplayform.ui.h
+/FrequencyDisplayPlot.moc.cc
+/ConstellationDisplayPlot.moc.cc
index e8e6288f5bf7c6924296e1473ba59ccd624a4c2c..9ad5bdd3c44215b94d90e84a447c00e8a0b6a3be 100644 (file)
@@ -24,6 +24,7 @@ public:
   }
 
 protected:
+  using QwtPlotZoomer::trackerText;
   virtual QwtText trackerText( const QwtDoublePoint& p ) const 
   {
     QwtText t(QString("(%1, %2)").arg(p.x(), 0, 'f', 4).
index f2cde322efd1569f2ccaf8d1a5c46bee6fdebb5a..d150e2e4ce19dec73b334f555ba3c4d78c74494b 100644 (file)
@@ -79,7 +79,8 @@ public:
   }
 
 protected:
-  virtual QwtText trackerText( const QwtDoublePoint& p ) const 
+  using QwtPlotZoomer::trackerText;
+  virtual QwtText trackerText( const QwtDoublePoint& p ) const
   {
     QwtText t(QString("%1 %2, %3 dB").
              arg(p.x(), 0, 'f', GetFrequencyPrecision()).
index 6d4a91257bfef9a6970529df98b71c3f2b3e98e6..4ba637ad642e988399d62f99fff626b1ed42d283 100644 (file)
@@ -27,13 +27,12 @@ AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \
 # Only include these files in the build if qtgui passes configure checks
 # This is mostly to help make distcheck pass
 QMAKE_SOURCES =                                \
-       spectrumdisplayform_moc.cc              \
-       FrequencyDisplayPlot_moc.cc             \
-       TimeDomainDisplayPlot_moc.cc            \
-       WaterfallDisplayPlot_moc.cc             \
-       Waterfall3DDisplayPlot_moc.cc           \
-       ConstellationDisplayPlot_moc.cc         \
-       spectrumdisplayform_ui.h
+       spectrumdisplayform.moc.cc              \
+       FrequencyDisplayPlot.moc.cc             \
+       TimeDomainDisplayPlot.moc.cc            \
+       WaterfallDisplayPlot.moc.cc             \
+       ConstellationDisplayPlot.moc.cc         \
+       spectrumdisplayform.ui.h
 
 EXTRA_DIST = spectrumdisplayform.ui
 
@@ -47,7 +46,6 @@ libgnuradio_qtgui_la_SOURCES =        \
        FrequencyDisplayPlot.cc                 \
        TimeDomainDisplayPlot.cc                \
        WaterfallDisplayPlot.cc                 \
-       Waterfall3DDisplayPlot.cc               \
        waterfallGlobalData.cc                  \
        ConstellationDisplayPlot.cc             \
        spectrumdisplayform.cc                  \
@@ -57,12 +55,13 @@ libgnuradio_qtgui_la_SOURCES =      \
        qtgui_sink_c.cc                         \
        qtgui_sink_f.cc
 
+nodist_libgnuradio_qtgui_la_SOURCES=$(BUILT_SOURCES)
+
 # These headers get installed in ${prefix}/include/gnuradio
 grinclude_HEADERS =                    \
        FrequencyDisplayPlot.h          \
        TimeDomainDisplayPlot.h         \
        WaterfallDisplayPlot.h          \
-       Waterfall3DDisplayPlot.h        \
        waterfallGlobalData.h           \
        ConstellationDisplayPlot.h      \
        highResTimeFunctions.h          \
@@ -74,12 +73,11 @@ grinclude_HEADERS =                 \
        qtgui_sink_c.h                  \
        qtgui_sink_f.h
 
-nodist_libqtsrc_la_SOURCES = $(QMAKE_SOURCES)
-
-%_moc.cc : %.h
-       $(QT_MOC_EXEC) -DQT_SHARED -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -p $(srcdir) $< -o $@
+QT_MOC_FLAGS=-DQT_SHARED -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+%.moc.cc : %.h
+       $(QT_MOC_EXEC) $(QT_MOC_FLAGS) -p $(srcdir) $< -o $@
 
-%_ui.h : %.ui
+%.ui.h : %.ui
        $(QT_UIC_EXEC) $< -o $@
 
 # magic flags
index 8c1b3670300f16bc5ec230a11898c8482b07bcc2..563ed34bae4c874402b664b8eb109db4910a07a0 100644 (file)
@@ -61,8 +61,7 @@ SpectrumGUIClass::~SpectrumGUIClass()
 void
 SpectrumGUIClass::OpenSpectrumWindow(QWidget* parent,
                                     const bool frequency, const bool waterfall,
-                                    const bool waterfall3d, const bool time,
-                                    const bool constellation,
+                                    const bool time, const bool constellation,
                                     const bool use_openGL)
 {
   //_windowStateLock->Lock();
@@ -87,7 +86,6 @@ SpectrumGUIClass::OpenSpectrumWindow(QWidget* parent,
     // Toggle Windows on/off
     _spectrumDisplayForm->ToggleTabFrequency(frequency);
     _spectrumDisplayForm->ToggleTabWaterfall(waterfall);
-    _spectrumDisplayForm->ToggleTabWaterfall3D(waterfall3d);
     _spectrumDisplayForm->ToggleTabTime(time);
     _spectrumDisplayForm->ToggleTabConstellation(constellation);
 
index 17d3a54c1af48601a368a72b6e03de89a03f5fa7..63a340c3402d653dfb22bcf9016957752bb5deb2 100644 (file)
@@ -31,8 +31,7 @@ public:
 
   void OpenSpectrumWindow(QWidget*,
                          const bool frequency=true, const bool waterfall=true,
-                         const bool waterfall3d=true, const bool time=true,
-                         const bool constellation=true,
+                         const bool time=true, const bool constellation=true,
                          const bool use_openGL=true);
   void SetDisplayTitle(const std::string);
 
index c299f83a4a09ea56f6b39df9d039cbfc1c96c794..9c98cec5b037320e5bf4b5439ac1f8feea9f4af3 100644 (file)
@@ -56,6 +56,7 @@ public:
   }
 
 protected:
+  using QwtPlotZoomer::trackerText;
   virtual QwtText trackerText( const QwtDoublePoint& p ) const 
   {
     QwtText t(QString("%1 %2, %3 V").arg(p.x(), 0, 'f', GetTimePrecision()).
diff --git a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc
deleted file mode 100644 (file)
index f676cb4..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#ifndef WATERFALL_3D_DISPLAY_PLOT_C
-#define WATERFALL_3D_DISPLAY_PLOT_C
-
-#include <Waterfall3DDisplayPlot.h>
-
-#include <qwt3d_helper.h>
-#include <qapplication.h>
-
-Waterfall3DColorMap::Waterfall3DColorMap(): Qwt3D::Color(), QwtLinearColorMap(){
-  _interval.setInterval(0, 1.0);
-
-}
-
-Waterfall3DColorMap::~Waterfall3DColorMap(){
-
-}
-
-Qwt3D::RGBA
-Waterfall3DColorMap::operator()(double, double, double z) const
-{
-  return Qwt3D::RGBA(Qwt3D::Qt2GL(color(_interval, z)));
-}
-
-void
-Waterfall3DColorMap::SetInterval(const double minValue, const double maxValue)
-{
-  _interval.setInterval(minValue, maxValue);
-}
-
-Qwt3D::ColorVector&
-Waterfall3DColorMap::createVector(Qwt3D::ColorVector& vec)
-{
-  // Generate 100 interval values and then return those
-  Qwt3D::ColorVector colorVec;
-  for(unsigned int number = 0; number < 100; number++){
-    double value = (_interval.width() * (static_cast<double>(number) / 100.0)) + _interval.minValue();
-    colorVec.push_back(operator()(0,0,value));
-  }
-  vec = colorVec;
-  return vec; 
-}
-
-
-const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR;
-const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_WHITE_HOT;
-const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_BLACK_HOT;
-const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_INCANDESCENT;
-const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED;
-
-Waterfall3DDisplayPlot::Waterfall3DDisplayPlot(QWidget* parent):Qwt3D::SurfacePlot(parent)
-{
-  _startFrequency = 0;
-  _stopFrequency = 4000;
-
-  _createCoordinateSystemFlag = true;
-
-  _initialized = false;
-
-  _numPoints = 1024;
-
-  _displayIntervalTime = (1.0/5.0); // 1/5 of a second between updates
-
-  timespec_reset(&_lastReplot);
-
-  _useCenterFrequencyFlag = false;
-  _centerFrequency = 0.0;
-
-  _timePerFFT = 1.0;
-  timespec_reset(&_dataTimestamp);
-
-  coordinates()->setAutoScale(false);
-
-  _waterfallData = new Waterfall3DData(_startFrequency, _stopFrequency, _numPoints, 200);
-  _waterfallData->assign(this);
-  _waterfallData->create();
-
-  _intensityColorMapType = -1;
-  SetIntensityColorMapType(INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR, Qt::white, Qt::black, true, true);
-
-  legend()->setScale(Qwt3D::LINEARSCALE);
-  legend()->setTitleString("Intensity");
-
-  enableMouse(true);  
-}
-
-Waterfall3DDisplayPlot::~Waterfall3DDisplayPlot()
-{
-  delete _waterfallData;
-}
-
-void
-Waterfall3DDisplayPlot::Init()
-{
-  if(!_initialized && initializedGL()){
-    resize(parentWidget()->width(), parentWidget()->height());
-
-    // Attempting to prevent valgrind uninitialized variable errors in QwtPlot3d::Drawable class
-    glDisable(GL_POLYGON_OFFSET_FILL);
-    
-    setPlotStyle(Qwt3D::FILLED);
-    
-    setCoordinateStyle(Qwt3D::FRAME);
-    setFloorStyle(Qwt3D::FLOORDATA);
-    setOrtho(true);  
-
-    _initialized = true;
-  }
-}
-
-void
-Waterfall3DDisplayPlot::Reset()
-{
-  _waterfallData->ResizeData(_startFrequency, _stopFrequency, _numPoints);
-  _waterfallData->Reset();
-
-  if(initializedGL()){
-    setScale(1, static_cast<int>(((_stopFrequency - _startFrequency) / 200) ), 10);
-  }
-
-  _createCoordinateSystemFlag = true;
-
-  timespec_reset(&_dataTimestamp);
-  _timePerFFT = 1.0;
-}
-
-void
-Waterfall3DDisplayPlot::SetFrequencyRange(const double constStartFreq,
-                                         const double constStopFreq,
-                                         const double constCenterFreq,
-                                         const bool useCenterFrequencyFlag,
-                                         const double units,
-                                         const std::string &strunits)
-{
-  double startFreq = constStartFreq / units;
-  double stopFreq = constStopFreq / units;
-  double centerFreq = constCenterFreq / units;
-
-  if(stopFreq > startFreq) {
-    _startFrequency = startFreq;
-    _stopFrequency = stopFreq;
-
-    _useCenterFrequencyFlag = useCenterFrequencyFlag;
-    _centerFrequency = centerFreq;
-
-    Reset();
-
-    // Only replot if screen is visible
-    if(isVisible()){
-      replot();
-    }
-  }
-}
-
-bool
-Waterfall3DDisplayPlot::loadFromData(double** data, unsigned int columns, unsigned int rows
-                                    ,double minx, double maxx, double miny, double maxy)
-{
-
-  Qwt3D::GridData* gridPtr = (Qwt3D::GridData*)actualData_p;
-  
-  gridPtr->setPeriodic(false,false);
-  gridPtr->setSize(columns,rows);
-  readIn(*gridPtr,data,columns,rows,minx,maxx,miny,maxy);
-  calcNormals(*gridPtr);  
-  
-  updateData();
-  updateNormals();
-  
-  if( _createCoordinateSystemFlag ){
-    createCoordinateSystem();
-    
-    for (unsigned i=0; i!=coordinates()->axes.size(); ++i)
-      {
-       coordinates()->axes[i].setMajors(5);
-       coordinates()->axes[i].setMinors(3);
-      }
-    
-    coordinates()->axes[Qwt3D::Y1].setLabelString("Time");
-    coordinates()->axes[Qwt3D::Y2].setLabelString("Time");
-    coordinates()->axes[Qwt3D::Y3].setLabelString("Time");
-    coordinates()->axes[Qwt3D::Y4].setLabelString("Time");
-    coordinates()->axes[Qwt3D::Z1].setLabelString("Intensity (dB)");
-    coordinates()->axes[Qwt3D::Z2].setLabelString("Intensity (dB)");
-    coordinates()->axes[Qwt3D::Z3].setLabelString("Intensity (dB)");
-    coordinates()->axes[Qwt3D::Z4].setLabelString("Intensity (dB)");
-
-    coordinates()->axes[Qwt3D::X1].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)"));
-    coordinates()->axes[Qwt3D::X2].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)"));
-    coordinates()->axes[Qwt3D::X3].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)"));
-    coordinates()->axes[Qwt3D::X4].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)"));
-
-    // The QwtPlot3D Interface takes ownership of these items, so there is no need to delete them...
-    coordinates()->axes[Qwt3D::X1].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency));
-    coordinates()->axes[Qwt3D::X2].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency));
-    coordinates()->axes[Qwt3D::X3].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency));
-    coordinates()->axes[Qwt3D::X4].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency));
-
-    coordinates()->axes[Qwt3D::Y1].setScale(new TimeScale(this));
-    coordinates()->axes[Qwt3D::Y2].setScale(new TimeScale(this));
-    coordinates()->axes[Qwt3D::Y3].setScale(new TimeScale(this));
-    coordinates()->axes[Qwt3D::Y4].setScale(new TimeScale(this));
-
-    coordinates()->axes[Qwt3D::Z1].setScale(new IntensityScale(_waterfallData->GetFloorValue()));
-    coordinates()->axes[Qwt3D::Z2].setScale(new IntensityScale(_waterfallData->GetFloorValue()));
-    coordinates()->axes[Qwt3D::Z3].setScale(new IntensityScale(_waterfallData->GetFloorValue()));
-    coordinates()->axes[Qwt3D::Z4].setScale(new IntensityScale(_waterfallData->GetFloorValue()));
-
-    _createCoordinateSystemFlag = false;
-  }
-  
-  return true;
-}
-
-double
-Waterfall3DDisplayPlot::GetStartFrequency() const
-{
-  return _startFrequency;
-}
-
-double
-Waterfall3DDisplayPlot::GetStopFrequency() const
-{
-  return _stopFrequency;
-}
-
-void
-Waterfall3DDisplayPlot::PlotNewData(const double* dataPoints,
-                                   const int64_t numDataPoints,
-                                   const double timePerFFT,
-                                   const timespec timestamp,
-                                   const int droppedFrames)
-{
-  if(numDataPoints > 0){
-    if(numDataPoints != _numPoints){
-      _numPoints = numDataPoints;
-
-      Reset();
-
-      if(isVisible()){
-       replot();
-      }
-
-      _createCoordinateSystemFlag = true;
-
-      _lastReplot = get_highres_clock();
-    }
-
-    _dataTimestamp = timestamp;
-    _timePerFFT = timePerFFT;
-
-    _waterfallData->addFFTData(dataPoints, numDataPoints, droppedFrames);
-    _waterfallData->IncrementNumLinesToUpdate();
-  }
-
-  // Allow at least a 50% duty cycle
-  if(diff_timespec(get_highres_clock(), _lastReplot) > _displayIntervalTime){
-    // Only update when window is visible
-    if(isVisible()){
-      replot();
-    }
-
-    _lastReplot = get_highres_clock();
-  }
-}
-
-void
-Waterfall3DDisplayPlot::SetIntensityRange(const double minIntensity,
-                                         const double maxIntensity)
-{
-  _waterfallData->SetFloorValue(minIntensity);
-  _waterfallData->setMinZ(0);
-  _waterfallData->setMaxZ(maxIntensity-minIntensity);
-
-  _createCoordinateSystemFlag = true;
-
-  emit UpdatedLowerIntensityLevel(minIntensity);
-  emit UpdatedUpperIntensityLevel(maxIntensity);
-
-  SetIntensityColorMapType(_intensityColorMapType,
-                          _userDefinedLowIntensityColor,
-                          _userDefinedLowIntensityColor, true);
-}
-
-void
-Waterfall3DDisplayPlot::replot()
-{
-  if(!_initialized){
-    Init();
-  }
-  if(initializedGL()){
-    const timespec startTime = get_highres_clock();
-    
-    _waterfallData->create();
-    
-    legend()->setMajors(4);
-    legend()->setMinors(5);
-    double start, stop;
-    coordinates()->axes[Qwt3D::Z1].limits(start,stop);
-    legend()->setLimits( _waterfallData->GetFloorValue(), _waterfallData->GetFloorValue() + stop - start );
-
-    coordinates()->axes[Qwt3D::X1].limits(start,stop);
-
-    showColorLegend(true);
-
-    updateGL();
-
-    double differenceTime = (diff_timespec(get_highres_clock(), startTime));
-  
-    // Require at least a 20% duty cycle
-    differenceTime *= 4.0;
-    if(differenceTime > (1.0/5.0)){
-      _displayIntervalTime = differenceTime;
-    }
-  }
-}
-
-void
-Waterfall3DDisplayPlot::resizeSlot( QSize *s )
-{
-  resize(s->width(), s->height());
-}
-
-int
-Waterfall3DDisplayPlot::GetIntensityColorMapType() const
-{
-  return _intensityColorMapType;
-}
-
-void
-Waterfall3DDisplayPlot::SetIntensityColorMapType(const int newType,
-                                                const QColor lowColor,
-                                                const QColor highColor,
-                                                const bool forceFlag,
-                                                const bool noReplotFlag)
-{
-  if(((_intensityColorMapType != newType) || forceFlag) || 
-     ((newType == INTENSITY_COLOR_MAP_TYPE_USER_DEFINED) &&
-      (lowColor.isValid() && highColor.isValid()))){
-
-    Waterfall3DColorMap* colorMap = new Waterfall3DColorMap();
-    colorMap->SetInterval(_waterfallData->minZ(), _waterfallData->maxZ());
-
-    switch(newType){
-    case INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR:{
-      _intensityColorMapType = newType;
-      colorMap->setColorInterval(Qt::darkCyan, Qt::white);
-      colorMap->addColorStop(0.25, Qt::cyan);
-      colorMap->addColorStop(0.5, Qt::yellow);
-      colorMap->addColorStop(0.75, Qt::red);
-      setBackgroundColor(Qwt3D::Qt2GL(Qt::gray));
-      break;
-    }
-    case INTENSITY_COLOR_MAP_TYPE_WHITE_HOT:{
-      _intensityColorMapType = newType;
-      colorMap->setColorInterval(Qt::black, Qt::white);
-      setBackgroundColor(Qwt3D::Qt2GL(Qt::blue));
-      break;
-    }
-    case INTENSITY_COLOR_MAP_TYPE_BLACK_HOT:{
-      _intensityColorMapType = newType;
-      colorMap->setColorInterval(Qt::white, Qt::black);
-      setBackgroundColor(Qwt3D::Qt2GL(Qt::blue));
-      break;
-    }
-    case INTENSITY_COLOR_MAP_TYPE_INCANDESCENT:{
-      _intensityColorMapType = newType;
-      colorMap->setColorInterval(Qt::black, Qt::white);
-      colorMap->addColorStop(0.5, Qt::darkRed);
-      setBackgroundColor(Qwt3D::Qt2GL(Qt::gray));
-      break;
-    }
-    case INTENSITY_COLOR_MAP_TYPE_USER_DEFINED:{
-      _userDefinedLowIntensityColor = lowColor;
-      _userDefinedHighIntensityColor = highColor;
-      _intensityColorMapType = newType;
-      colorMap->setColorInterval(_userDefinedLowIntensityColor, _userDefinedHighIntensityColor);
-      setBackgroundColor(Qwt3D::Qt2GL(Qt::white));
-      break;
-    }
-    default:
-      colorMap->setColorInterval(Qt::black, Qt::white);
-      break;
-    }
-
-    // Qwt3D takes over destruction of this object...
-    setDataColor(colorMap);
-
-    if(!noReplotFlag){
-      // Draw again
-      replot();
-      
-      // Update the last replot timer
-      _lastReplot = get_highres_clock();
-    }
-  }
-}
-
-const QColor
-Waterfall3DDisplayPlot::GetUserDefinedLowIntensityColor() const
-{
-  return _userDefinedLowIntensityColor;
-}
-
-const QColor
-Waterfall3DDisplayPlot::GetUserDefinedHighIntensityColor() const
-{
-  return _userDefinedHighIntensityColor;
-}
-
-#endif /* WATERFALL_3D_DISPLAY_PLOT_C */
diff --git a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h
deleted file mode 100644 (file)
index 272bdf6..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-#ifndef WATERFALL_3D_DISPLAY_PLOT_HPP
-#define WATERFALL_3D_DISPLAY_PLOT_HPP
-
-#include <cstdio>
-#include <highResTimeFunctions.h>
-
-#include <waterfallGlobalData.h>
-#include <qwt3d_surfaceplot.h>
-
-#include <qwt3d_color.h>
-#include <qwt_color_map.h>
-
-class Waterfall3DColorMap: public Qwt3D::Color, public QwtLinearColorMap
-{
-public:
-  Waterfall3DColorMap();
-  virtual ~Waterfall3DColorMap();
-
-  virtual Qwt3D::RGBA operator()(double x, double y, double z)const;
-  virtual Qwt3D::ColorVector& createVector(Qwt3D::ColorVector& vec);
-
-  virtual void SetInterval(const double minValue, const double maxValue);
-
-protected:
-  
-private:
-  QwtDoubleInterval _interval;
-};
-
-class Waterfall3DDisplayPlot:public Qwt3D::SurfacePlot{
-  Q_OBJECT
-
-  protected:
-  class IntensityScale:public Qwt3D::LinearScale{
-
-  friend class Qwt3D::Axis;
-  friend class Qwt3D::qwt3d_ptr<Qwt3D::Scale>;
-
-  private:
-    double _floor;
-
-  public:
-    explicit IntensityScale(const double newFloor):_floor(newFloor){ }
-    virtual ~IntensityScale(){}
-
-    virtual QString ticLabel(unsigned int idx) const{
-      if (idx<majors_p.size())
-       {
-         return QString("%1").arg( majors_p[idx] + GetFloorValue(), 0, 'f', 0 );
-       }
-      return QString("");
-    }
-
-    virtual double GetFloorValue()const{ return _floor; }
-    virtual void SetFloorValue(const double newFloor){ _floor = newFloor; }
-
-    //! Returns a new heap based object utilized from qwt3d_ptr
-    Scale* clone() const {return new IntensityScale(*this);} 
-  };
-  
-  class TimeScale:public Qwt3D::LinearScale{
-
-    friend class Qwt3D::Axis;
-    friend class Qwt3D::qwt3d_ptr<Qwt3D::Scale>;
-    friend class Waterfall3DDisplayPlot;
-
-  private:
-    Waterfall3DDisplayPlot* _plot;
-
-  public:
-    TimeScale(Waterfall3DDisplayPlot* plot ):_plot(plot){
-    }
-    virtual ~TimeScale(){
-    }
-
-    virtual QString ticLabel(unsigned int idx) const{
-      if (idx<majors_p.size())
-       {
-         const timespec markerTime = timespec_add(_plot->_dataTimestamp,
-                                                  -(_plot->_timePerFFT) * majors_p[idx]);
-         struct tm timeTm;
-         gmtime_r(&markerTime.tv_sec, &timeTm);
-         
-         char* timeBuffer = new char[128];
-         snprintf(timeBuffer, 128, "%02d:%02d:%02d.%03ld", timeTm.tm_hour,
-                  timeTm.tm_min, timeTm.tm_sec, (markerTime.tv_nsec / 1000000));
-         QString returnBuffer(timeBuffer);
-         delete[] timeBuffer;
-         return returnBuffer;
-       }
-      return QString("");
-    }
-
-    //! Returns a new heap based object utilized from qwt3d_ptr
-    Scale* clone() const {return new TimeScale(*this);}
-  };
-
-  class FrequencyScale: public Qwt3D::LinearScale{
-
-    friend class Qwt3D::Axis;
-    friend class Qwt3D::qwt3d_ptr<Qwt3D::Scale>;
-  private:
-    double _centerFrequency;
-    bool _useCenterFrequencyFlag;
-  public:
-    FrequencyScale(bool useCenterFrequencyFlag, double centerFrequency)
-      : _centerFrequency(centerFrequency),_useCenterFrequencyFlag(useCenterFrequencyFlag)
-      {}
-
-    virtual ~FrequencyScale(){}
-
-    virtual QString ticLabel(unsigned int idx) const
-    {
-      if (idx<majors_p.size())
-       {
-         if(!_useCenterFrequencyFlag){
-           return QString("%1").arg(  majors_p[idx], 0, 'f', 0 );
-
-         }
-         else{
-           return QString("%1").arg(  (majors_p[idx] + _centerFrequency)/1000.0, 0, 'f', 3 );
-         }
-       }
-      return QString("");
-    }
-
-    //! Returns a new heap based object utilized from qwt3d_ptr
-    Scale* clone() const {return new FrequencyScale(*this);}
-  };
-
-public:
-  Waterfall3DDisplayPlot(QWidget*);
-  virtual ~Waterfall3DDisplayPlot();
-                                               
-  void Init();
-  void Reset();
-
-  bool loadFromData(double** data, unsigned int columns, unsigned int rows
-                   ,double minx, double maxx, double miny, double maxy);
-
-  void SetFrequencyRange(const double, const double,
-                        const double, const bool,
-                        const double units, const std::string &strunits);
-  double GetStartFrequency()const;
-  double GetStopFrequency()const;
-
-  void PlotNewData(const double* dataPoints, const int64_t numDataPoints,
-                  const double timePerFFT, const timespec timestamp,
-                  const int droppedFrames);
-
-  void SetIntensityRange(const double minIntensity, const double maxIntensity);
-
-  virtual void replot(void);
-
-  int GetIntensityColorMapType()const;
-  void SetIntensityColorMapType( const int, const QColor,
-                                const QColor, const bool forceFlag = false,
-                                const bool noReplotFlag = false );
-  const QColor GetUserDefinedLowIntensityColor()const;
-  const QColor GetUserDefinedHighIntensityColor()const;
-
-  static const int INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR = 0;
-  static const int INTENSITY_COLOR_MAP_TYPE_WHITE_HOT = 1;
-  static const int INTENSITY_COLOR_MAP_TYPE_BLACK_HOT = 2;
-  static const int INTENSITY_COLOR_MAP_TYPE_INCANDESCENT = 3;
-  static const int INTENSITY_COLOR_MAP_TYPE_USER_DEFINED = 4;
-
-public slots:
-  void resizeSlot( QSize *s );
-
-
-signals:
-  void UpdatedLowerIntensityLevel(const double);
-  void UpdatedUpperIntensityLevel(const double);
-
-protected:
-
-  double _startFrequency;
-  double _stopFrequency;
-
-  Waterfall3DData* _waterfallData;
-
-  timespec _lastReplot;
-
-  int64_t _numPoints;
-
-  double _displayIntervalTime;
-
-  int _intensityColorMapType;
-  QColor _userDefinedLowIntensityColor;
-  QColor _userDefinedHighIntensityColor;
-
-  bool _useCenterFrequencyFlag;
-  double _centerFrequency;
-
-  timespec _dataTimestamp;
-  double _timePerFFT;
-  bool _initialized;
-
-  bool _createCoordinateSystemFlag;
-
-private:
-
-};
-
-#endif /* WATERFALL_3D_DISPLAY_PLOT_HPP */
index e0804fa64083bcbd379d81c1fa3fa8892d11a849..680c447565f392aac552d8c67e9774d108e8dc54 100644 (file)
@@ -186,6 +186,7 @@ public:
   }
 
 protected:
+  using QwtPlotZoomer::trackerText;
   virtual QwtText trackerText( const QwtDoublePoint& p ) const 
   {
     QString yLabel("");
index f77045938b9659f45a9808384c7715e05325b88c..c12c451b0034845bfcd0e22ac76f0e9ba8dffd3e 100644 (file)
@@ -64,10 +64,13 @@ qtgui_sink_c::qtgui_sink_c (int fftsize, int wintype,
     d_wintype((gr_firdes::win_type)(wintype)), 
     d_center_freq(fc), d_bandwidth(bw), d_name(name),
     d_plotfreq(plotfreq), d_plotwaterfall(plotwaterfall),
-    d_plotwaterfall3d(plotwaterfall3d), d_plottime(plottime),
-    d_plotconst(plotconst),
+    d_plottime(plottime), d_plotconst(plotconst),
     d_parent(parent)
 {
+  if(plotwaterfall3d == true) {
+    fprintf(stderr, "Warning: plotting Waterfall3D has been removed; enabling plotwaterfall3d has no effect.\n");
+  }
+
   d_main_gui = NULL;
   pthread_mutex_init(&d_pmutex, NULL);
   lock();
@@ -141,8 +144,7 @@ qtgui_sink_c::initialize(const bool opengl)
 
   d_main_gui->OpenSpectrumWindow(d_parent, 
                                 d_plotfreq, d_plotwaterfall,
-                                d_plotwaterfall3d, d_plottime,
-                                d_plotconst,
+                                d_plottime, d_plotconst,
                                 opengl);
 
   // initialize update time to 10 times a second
index 1f6c284738981bf6abe8225d8c7984d6ecd28dcc..9aee665031169d523bc13798f82af10ce260c89c 100644 (file)
 #ifndef INCLUDED_QTGUI_SINK_C_H
 #define INCLUDED_QTGUI_SINK_C_H
 
+#include <Python.h>
 #include <gr_block.h>
 #include <gr_firdes.h>
 #include <gri_fft.h>
 #include <qapplication.h>
 #include <qtgui.h>
-#include <Python.h>
 #include "SpectrumGUIClass.h"
 
 class qtgui_sink_c;
@@ -84,7 +84,7 @@ private:
   int d_index;
   gr_complex *d_residbuf;
 
-  bool d_plotfreq, d_plotwaterfall, d_plotwaterfall3d, d_plottime, d_plotconst;
+  bool d_plotfreq, d_plotwaterfall, d_plottime, d_plotconst;
   
   double d_update_time;
 
index 976b1761b29ead28e99bde2dc12b4fe1c4a8164d..ab4fd082d47c0a3520fb8a4a5f5003cbf69d2858 100644 (file)
@@ -64,10 +64,13 @@ qtgui_sink_f::qtgui_sink_f (int fftsize, int wintype,
     d_wintype((gr_firdes::win_type)(wintype)),
     d_center_freq(fc), d_bandwidth(bw), d_name(name),
     d_plotfreq(plotfreq), d_plotwaterfall(plotwaterfall),
-    d_plotwaterfall3d(plotwaterfall3d), d_plottime(plottime),
-    d_plotconst(plotconst),
+    d_plottime(plottime), d_plotconst(plotconst),
     d_parent(parent)
 {
+  if(plotwaterfall3d == true) {
+    fprintf(stderr, "Warning: plotting Waterfall3D has been removed; enabling plotwaterfall3d has no effect.\n");
+  }
+
   d_main_gui = NULL;
   pthread_mutex_init(&d_pmutex, NULL);
   lock();
@@ -136,8 +139,7 @@ qtgui_sink_f::initialize(const bool opengl)
 
   d_main_gui->OpenSpectrumWindow(d_parent,
                                 d_plotfreq, d_plotwaterfall,
-                                d_plotwaterfall3d, d_plottime,
-                                d_plotconst,
+                                d_plottime, d_plotconst,
                                 opengl);
 
   // initialize update time to 10 times a second
index f603da7b6ac990f2e0b4756b9ca9d22653d3367f..0cac35d90cb8996197a1a109f8470f02d93b04fb 100644 (file)
 #ifndef INCLUDED_QTGUI_SINK_F_H
 #define INCLUDED_QTGUI_SINK_F_H
 
+#include <Python.h>
 #include <gr_block.h>
 #include <gr_firdes.h>
 #include <gri_fft.h>
 #include <qapplication.h>
 #include <qtgui.h>
-#include <Python.h>
 #include "SpectrumGUIClass.h"
 
 class qtgui_sink_f;
@@ -82,7 +82,7 @@ private:
   int d_index;
   float *d_residbuf;
 
-  bool d_plotfreq, d_plotwaterfall, d_plotwaterfall3d, d_plottime, d_plotconst;
+  bool d_plotfreq, d_plotwaterfall, d_plottime, d_plotconst;
 
   double d_update_time;
 
index f52a63d1f0a85c0ff555a8036b19fd0530e90567..e0509a294853715b0f44966a1106b9ffe01c3a06 100644 (file)
@@ -17,10 +17,6 @@ SpectrumDisplayForm::SpectrumDisplayForm(bool useOpenGL, QWidget* parent)
   _frequencyDisplayPlot = new FrequencyDisplayPlot(FrequencyPlotDisplayFrame);
   _waterfallDisplayPlot = new WaterfallDisplayPlot(WaterfallPlotDisplayFrame);
 
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    //_waterfall3DDisplayPlot = new Waterfall3DDisplayPlot(Waterfall3DPlotDisplayFrame);
-  }
-
   _timeDomainDisplayPlot = new TimeDomainDisplayPlot(TimeDomainDisplayFrame);
   _constellationDisplayPlot = new ConstellationDisplayPlot(ConstellationDisplayFrame);
   _numRealDataPoints = 1024;
@@ -38,14 +34,6 @@ SpectrumDisplayForm::SpectrumDisplayForm(bool useOpenGL, QWidget* parent)
   WaterfallMinimumIntensityWheel->setTickCnt(50);
   WaterfallMinimumIntensityWheel->setValue(-200);
   
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    Waterfall3DMaximumIntensityWheel->setRange(-200, 0);
-    Waterfall3DMaximumIntensityWheel->setTickCnt(50);
-    Waterfall3DMinimumIntensityWheel->setRange(-200, 0);
-    Waterfall3DMinimumIntensityWheel->setTickCnt(50);
-    Waterfall3DMinimumIntensityWheel->setValue(-200);
-  }
-
   _peakFrequency = 0;
   _peakAmplitude = -HUGE_VAL;
   
@@ -68,7 +56,6 @@ SpectrumDisplayForm::SpectrumDisplayForm(bool useOpenGL, QWidget* parent)
 
   ToggleTabFrequency(false);
   ToggleTabWaterfall(false);
-  ToggleTabWaterfall3D(false);
   ToggleTabTime(false);
   ToggleTabConstellation(false);
 
@@ -134,11 +121,11 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate
   const std::complex<float>* complexDataPointsPtr = complexDataPoints+numFFTDataPoints/2;
   double* realFFTDataPointsPtr = _realFFTDataPoints;
 
-  double sumMean, localPeakAmplitude, localPeakFrequency;
+  double sumMean = 0.0;
+  double localPeakAmplitude = -HUGE_VAL;
+  double localPeakFrequency = 0.0;
   const double fftBinSize = (_stopFrequency-_startFrequency) /
     static_cast<double>(numFFTDataPoints);
-  localPeakAmplitude = -HUGE_VAL;
-  sumMean = 0.0;
 
   // Run this twice to perform the fftshift operation on the data here as well
   std::complex<float> scaleFactor = std::complex<float>((float)numFFTDataPoints);
@@ -229,15 +216,6 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate
                                           d_update_time, dataTimestamp, 
                                           spectrumUpdateEvent->getDroppedFFTFrames());
       }
-      /*
-      if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-       if( _openGLWaterfall3DFlag == 1 && (tabindex == d_plot_waterfall3d)) {
-         _waterfall3DDisplayPlot->PlotNewData(_realFFTDataPoints, numFFTDataPoints, 
-                                              d_update_time, dataTimestamp, 
-                                              spectrumUpdateEvent->getDroppedFFTFrames());
-       }
-      }
-      */
     }
 
     
@@ -265,12 +243,6 @@ SpectrumDisplayForm::resizeEvent( QResizeEvent *e )
   s.setHeight(WaterfallPlotDisplayFrame->height());
   emit _waterfallDisplayPlot->resizeSlot(&s);
 
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    s.setWidth(Waterfall3DPlotDisplayFrame->width());
-    s.setHeight(Waterfall3DPlotDisplayFrame->height());
-    //emit _waterfall3DDisplayPlot->resizeSlot(&s);
-  }
-
   s.setWidth(ConstellationDisplayFrame->width());
   s.setHeight(ConstellationDisplayFrame->height());
   emit _constellationDisplayPlot->resizeSlot(&s);
@@ -289,32 +261,6 @@ SpectrumDisplayForm::customEvent( QEvent * e)
     waterfallMinimumIntensityChangedCB(WaterfallMinimumIntensityWheel->value());
     waterfallMaximumIntensityChangedCB(WaterfallMaximumIntensityWheel->value());
 
-    // If the video card doesn't support OpenGL then don't display the 3D Waterfall
-    if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-      waterfall3DMinimumIntensityChangedCB(Waterfall3DMinimumIntensityWheel->value());
-      waterfall3DMaximumIntensityChangedCB(Waterfall3DMaximumIntensityWheel->value());
-      
-      // Check for Hardware Acceleration of the OpenGL
-      /*
-      if(!_waterfall3DDisplayPlot->format().directRendering()){
-       // Only ask this once while the program is running...
-       if(_openGLWaterfall3DFlag == -1){
-         _openGLWaterfall3DFlag = 0;
-         if(QMessageBox::warning(this, "OpenGL Direct Rendering NOT Supported", "<center>The system's video card hardware or current drivers do not support direct hardware rendering of the OpenGL modules.</center><br><center>Software rendering is VERY processor intensive.</center><br><center>Do you want to use software rendering?</center>", QMessageBox::Yes, QMessageBox::No | QMessageBox::Default | QMessageBox::Escape) == QMessageBox::Yes){
-           _openGLWaterfall3DFlag = 1;
-         }
-       }
-      }
-      else{
-       _openGLWaterfall3DFlag = 1;
-      }
-      */
-    }
-    
-    if(_openGLWaterfall3DFlag != 1){
-      ToggleTabWaterfall3D(false);
-    }
-
     // Clear any previous display
     Reset();
   }
@@ -347,8 +293,6 @@ SpectrumDisplayForm::UpdateGuiTimer()
   // all of the plots.
   _frequencyDisplayPlot->canvas()->update();
   _waterfallDisplayPlot->canvas()->update();
-  //if((QGLFormat::hasOpenGL()) && (_useOpenGL))
-  //_waterfall3DDisplayPlot->canvas()->update();
   _timeDomainDisplayPlot->canvas()->update();
   _constellationDisplayPlot->canvas()->update();
 }
@@ -437,15 +381,6 @@ SpectrumDisplayForm::SetFrequencyRange(const double newCenterFrequency,
                                             _centerFrequency,
                                             UseRFFrequenciesCheckBox->isChecked(),
                                             units, strunits[iunit]);
-    if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-      /*
-      _waterfall3DDisplayPlot->SetFrequencyRange(_startFrequency,
-                                                _stopFrequency,
-                                                _centerFrequency,
-                                                UseRFFrequenciesCheckBox->isChecked(),
-                                                units, strunits[iunit]);
-      */
-    }
     _timeDomainDisplayPlot->SetSampleRate(_stopFrequency - _startFrequency,
                                          units, strtime[iunit]);
   }
@@ -536,9 +471,6 @@ SpectrumDisplayForm::Reset()
   AverageDataReset();
 
   _waterfallDisplayPlot->Reset();
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    //_waterfall3DDisplayPlot->Reset();
-  }
 }
 
 
@@ -613,44 +545,6 @@ SpectrumDisplayForm::waterfallMinimumIntensityChangedCB( double newValue )
                                           WaterfallMaximumIntensityWheel->value());
 }
 
-void
-SpectrumDisplayForm::waterfall3DMaximumIntensityChangedCB( double newValue )
-{
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    if(newValue > Waterfall3DMinimumIntensityWheel->value()){
-      Waterfall3DMaximumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0));
-    }
-    else{
-      Waterfall3DMaximumIntensityWheel->setValue(Waterfall3DMinimumIntensityWheel->value());
-    }
-
-    /*
-    _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(),
-                                              Waterfall3DMaximumIntensityWheel->value());
-    */
-  }
-}
-
-
-void
-SpectrumDisplayForm::waterfall3DMinimumIntensityChangedCB( double newValue )
-{
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    if(newValue < Waterfall3DMaximumIntensityWheel->value()){
-      Waterfall3DMinimumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0));
-    }
-    else{
-      Waterfall3DMinimumIntensityWheel->setValue(Waterfall3DMaximumIntensityWheel->value());
-    }
-
-    /*
-    _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(),
-                                              Waterfall3DMaximumIntensityWheel->value());
-    */
-  }
-}
-
-
 void
 SpectrumDisplayForm::FFTComboBoxSelectedCB( const QString &fftSizeString )
 {
@@ -676,24 +570,6 @@ SpectrumDisplayForm::WaterfallAutoScaleBtnCB()
   waterfallMaximumIntensityChangedCB(maximumIntensity);
 }
 
-void
-SpectrumDisplayForm::Waterfall3DAutoScaleBtnCB()
-{
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    double minimumIntensity = _noiseFloorAmplitude - 5;
-    if(minimumIntensity < Waterfall3DMinimumIntensityWheel->minValue()){
-      minimumIntensity = Waterfall3DMinimumIntensityWheel->minValue();
-    }
-    Waterfall3DMinimumIntensityWheel->setValue(minimumIntensity);
-    double maximumIntensity = _peakAmplitude + 10;
-    if(maximumIntensity > Waterfall3DMaximumIntensityWheel->maxValue()){
-      maximumIntensity = Waterfall3DMaximumIntensityWheel->maxValue();
-    }
-    Waterfall3DMaximumIntensityWheel->setValue(maximumIntensity);
-    waterfallMaximumIntensityChangedCB(maximumIntensity);
-  }
-}
-
 void
 SpectrumDisplayForm::WaterfallIntensityColorTypeChanged( int newType )
 {
@@ -720,37 +596,6 @@ SpectrumDisplayForm::WaterfallIntensityColorTypeChanged( int newType )
   _waterfallDisplayPlot->SetIntensityColorMapType(newType, lowIntensityColor, highIntensityColor);
 }
 
-void
-SpectrumDisplayForm::Waterfall3DIntensityColorTypeChanged( int newType )
-{
-  if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-    QColor lowIntensityColor;
-    QColor highIntensityColor;
-    if(newType == Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED){
-      // Select the Low Intensity Color
-      lowIntensityColor = _waterfallDisplayPlot->GetUserDefinedLowIntensityColor();
-      if(!lowIntensityColor.isValid()){
-       lowIntensityColor = Qt::black;
-      }
-      QMessageBox::information(this, "Low Intensity Color Selection", "In the next window, select the low intensity color for the waterfall display",  QMessageBox::Ok);
-      lowIntensityColor = QColorDialog::getColor(lowIntensityColor, this);
-      
-      // Select the High Intensity Color
-      highIntensityColor = _waterfallDisplayPlot->GetUserDefinedHighIntensityColor();
-      if(!highIntensityColor.isValid()){
-       highIntensityColor = Qt::white;
-      }
-      QMessageBox::information(this, "High Intensity Color Selection", "In the next window, select the high intensity color for the waterfall display",  QMessageBox::Ok);
-      highIntensityColor = QColorDialog::getColor(highIntensityColor, this);
-    }
-    /*
-    _waterfall3DDisplayPlot->SetIntensityColorMapType(newType, lowIntensityColor,
-                                                     highIntensityColor);
-    */
-  }
-}
-
-
 void
 SpectrumDisplayForm::ToggleTabFrequency(const bool state)
 {
@@ -781,28 +626,6 @@ SpectrumDisplayForm::ToggleTabWaterfall(const bool state)
   }
 }
 
-void
-SpectrumDisplayForm::ToggleTabWaterfall3D(const bool state)
-{
-  if(state == true) {
-    /*
-    if((QGLFormat::hasOpenGL()) && (_useOpenGL)) {
-      if(d_plot_waterfall3d == -1) {
-       SpectrumTypeTab->addTab(Waterfall3DPage, "3D Waterfall Display");
-       d_plot_waterfall3d = SpectrumTypeTab->count()-1;
-      }
-    }
-    */
-    SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(Waterfall3DPage));
-    d_plot_waterfall3d = -1;
-    fprintf(stderr, "\nWARNING: The Waterfall3D plot has been disabled until we get it working.\n\n");
-  }
-  else {
-    SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(Waterfall3DPage));
-    d_plot_waterfall3d = -1;
-  }
-}
-
 void
 SpectrumDisplayForm::ToggleTabTime(const bool state)
 {
index bf2af703354439780aaa8f426b1eb22b6108a9cf..fbd08349bf8ee436f0ff8006b0fd5d1e6a58d1d9 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef SPECTRUM_DISPLAY_FORM_H
 #define SPECTRUM_DISPLAY_FORM_H
 
-#include "spectrumdisplayform_ui.h"
+#include "spectrumdisplayform.ui.h"
 
 class SpectrumGUIClass;
 #include <SpectrumGUIClass.h>
@@ -9,7 +9,6 @@ class SpectrumGUIClass;
 #include <SpectrumGUIClass.h>
 #include <FrequencyDisplayPlot.h>
 #include <WaterfallDisplayPlot.h>
-#include <Waterfall3DDisplayPlot.h>
 #include <TimeDomainDisplayPlot.h>
 #include <ConstellationDisplayPlot.h>
 #include <QValidator>
@@ -54,15 +53,10 @@ public slots:
   void waterfallMinimumIntensityChangedCB(double);
   void WaterfallIntensityColorTypeChanged(int);
   void WaterfallAutoScaleBtnCB();
-  void waterfall3DMaximumIntensityChangedCB(double);
-  void waterfall3DMinimumIntensityChangedCB(double);
-  void Waterfall3DIntensityColorTypeChanged(int);
-  void Waterfall3DAutoScaleBtnCB();
   void FFTComboBoxSelectedCB(const QString&);
 
   void ToggleTabFrequency(const bool state);
   void ToggleTabWaterfall(const bool state);
-  void ToggleTabWaterfall3D(const bool state);
   void ToggleTabTime(const bool state);
   void ToggleTabConstellation(const bool state);
 
@@ -92,7 +86,6 @@ private:
   QIntValidator* _intValidator;
   FrequencyDisplayPlot* _frequencyDisplayPlot;
   WaterfallDisplayPlot* _waterfallDisplayPlot;
-  Waterfall3DDisplayPlot* _waterfall3DDisplayPlot;
   TimeDomainDisplayPlot* _timeDomainDisplayPlot;
   ConstellationDisplayPlot* _constellationDisplayPlot;
   SpectrumGUIClass* _system;
index 0e652d8337d78b90a31f95c1c777a63df9455367..5a23bc8a9f17568a27f2a6d25c70fb1c366630b3 100644 (file)
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="Waterfall3DPage">
-      <attribute name="title">
-       <string>3D Waterfall Display</string>
-      </attribute>
-      <layout class="QGridLayout" name="gridLayout_6">
-       <item row="0" column="0">
-        <widget class="QLabel" name="textLabel1_2">
-         <property name="minimumSize">
-          <size>
-           <width>0</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>Intensity Display:</string>
-         </property>
-         <property name="wordWrap">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QComboBox" name="Waterfall3DIntensityComboBox">
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <item>
-          <property name="text">
-           <string>Color</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>White Hot</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>Black Hot</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>Incandescent</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>User Defined</string>
-          </property>
-         </item>
-        </widget>
-       </item>
-       <item row="0" column="2">
-        <widget class="QwtWheel" name="Waterfall3DMaximumIntensityWheel">
-         <property name="minimumSize">
-          <size>
-           <width>200</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="mouseTracking">
-          <bool>true</bool>
-         </property>
-         <property name="focusPolicy">
-          <enum>Qt::WheelFocus</enum>
-         </property>
-         <property name="valid">
-          <bool>true</bool>
-         </property>
-         <property name="totalAngle">
-          <double>200.000000000000000</double>
-         </property>
-         <property name="viewAngle">
-          <double>20.000000000000000</double>
-         </property>
-         <property name="mass">
-          <double>0.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="3">
-        <widget class="QLabel" name="Waterfall3DMaximumIntensityLabel">
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>100 dB</string>
-         </property>
-         <property name="wordWrap">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0" colspan="4">
-        <widget class="QFrame" name="Waterfall3DPlotDisplayFrame">
-         <property name="frameShape">
-          <enum>QFrame::NoFrame</enum>
-         </property>
-         <property name="frameShadow">
-          <enum>QFrame::Plain</enum>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="0" colspan="2">
-        <widget class="QPushButton" name="Waterfall3DAutoScaleBtn">
-         <property name="minimumSize">
-          <size>
-           <width>0</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>80</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="sizeIncrement">
-          <size>
-           <width>0</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="toolTip">
-          <string>Scales the Intensity to the current data extremes.</string>
-         </property>
-         <property name="text">
-          <string>Auto Scale</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="2">
-        <widget class="QwtWheel" name="Waterfall3DMinimumIntensityWheel">
-         <property name="minimumSize">
-          <size>
-           <width>200</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="valid">
-          <bool>true</bool>
-         </property>
-         <property name="totalAngle">
-          <double>200.000000000000000</double>
-         </property>
-         <property name="viewAngle">
-          <double>20.000000000000000</double>
-         </property>
-         <property name="mass">
-          <double>0.000000000000000</double>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="3">
-        <widget class="QLabel" name="Waterfall3DMinimumIntensityLabel">
-         <property name="maximumSize">
-          <size>
-           <width>100</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>-100 dB</string>
-         </property>
-         <property name="wordWrap">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
      <widget class="QWidget" name="TimeDomainPage">
       <attribute name="title">
        <string>Time Domain Display</string>
   <include location="global">SpectrumGUIClass.h</include>
   <include location="global">FrequencyDisplayPlot.h</include>
   <include location="global">WaterfallDisplayPlot.h</include>
-  <include location="global">Waterfall3DDisplayPlot.h</include>
   <include location="global">TimeDomainDisplayPlot.h</include>
   <include location="global">qvalidator.h</include>
   <include location="global">vector</include>
     </hint>
    </hints>
   </connection>
-  <connection>
-   <sender>Waterfall3DMaximumIntensityWheel</sender>
-   <signal>valueChanged(double)</signal>
-   <receiver>SpectrumDisplayForm</receiver>
-   <slot>waterfall3DMaximumIntensityChangedCB(double)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>217</x>
-     <y>44</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>20</x>
-     <y>20</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>Waterfall3DMinimumIntensityWheel</sender>
-   <signal>valueChanged(double)</signal>
-   <receiver>SpectrumDisplayForm</receiver>
-   <slot>waterfall3DMinimumIntensityChangedCB(double)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>217</x>
-     <y>349</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>20</x>
-     <y>20</y>
-    </hint>
-   </hints>
-  </connection>
   <connection>
    <sender>FFTSizeComboBox</sender>
    <signal>activated(QString)</signal>
index 0cbef4ec37d4245e8a951a23b7e1aefc801cbe60..1ba153f0d2cc3cca374ee6f51d21e8208fbeff9c 100644 (file)
@@ -3,11 +3,13 @@
 
 #include <waterfallGlobalData.h>
 
-#include <Waterfall3DDisplayPlot.h>
-
-WaterfallData::WaterfallData(const double minimumFrequency, const double maximumFrequency, const uint64_t fftPoints, const unsigned int historyExtent):
-  QwtRasterData(QwtDoubleRect(minimumFrequency /* X START */,  0 /* Y START */, maximumFrequency - minimumFrequency /* WIDTH */,  static_cast<double>(historyExtent)/* HEIGHT */))
-
+WaterfallData::WaterfallData(const double minimumFrequency,
+                            const double maximumFrequency,
+                            const uint64_t fftPoints,
+                            const unsigned int historyExtent)
+  : QwtRasterData(QwtDoubleRect(minimumFrequency /* X START */,  0 /* Y START */, 
+                               maximumFrequency - minimumFrequency /* WIDTH */,  
+                               static_cast<double>(historyExtent)/* HEIGHT */))
 {
   _intensityRange = QwtDoubleInterval(-200.0, 0.0);
   
@@ -19,17 +21,20 @@ WaterfallData::WaterfallData(const double minimumFrequency, const double maximum
   Reset();
 }
 
-WaterfallData::~WaterfallData(){
+WaterfallData::~WaterfallData()
+{
   delete[] _spectrumData;
 }
 
-void WaterfallData::Reset(){
+void WaterfallData::Reset()
+{
   memset(_spectrumData, 0x0, _fftPoints*_historyLength*sizeof(double));
 
   _numLinesToUpdate = -1;
 }
 
-void WaterfallData::Copy(const WaterfallData* rhs){
+void WaterfallData::Copy(const WaterfallData* rhs)
+{
   if((_fftPoints != rhs->GetNumFFTPoints()) ||
      (boundingRect() != rhs->boundingRect()) ){
     _fftPoints = rhs->GetNumFFTPoints();
@@ -43,7 +48,10 @@ void WaterfallData::Copy(const WaterfallData* rhs){
   setRange(rhs->range());
 }
 
-void WaterfallData::ResizeData(const double startFreq, const double stopFreq, const uint64_t fftPoints){
+void WaterfallData::ResizeData(const double startFreq,
+                              const double stopFreq,
+                              const uint64_t fftPoints)
+{
   if((fftPoints != GetNumFFTPoints()) ||
      (boundingRect().width() != (stopFreq - startFreq)) ||
      (boundingRect().left() != startFreq)){
@@ -57,21 +65,27 @@ void WaterfallData::ResizeData(const double startFreq, const double stopFreq, co
   Reset();
 }
 
-QwtRasterData *WaterfallData::copy() const{
-  WaterfallData* returnData =  new WaterfallData(boundingRect().left(), boundingRect().right(), _fftPoints, _historyLength);
+QwtRasterData *WaterfallData::copy() const
+{
+  WaterfallData* returnData =  new WaterfallData(boundingRect().left(),
+                                                boundingRect().right(),
+                                                _fftPoints, _historyLength);
   returnData->Copy(this);
   return returnData;
 }
 
-QwtDoubleInterval WaterfallData::range() const{
+QwtDoubleInterval WaterfallData::range() const
+{
   return _intensityRange;
 }
 
-void WaterfallData::setRange(const QwtDoubleInterval& newRange){
+void WaterfallData::setRange(const QwtDoubleInterval& newRange)
+{
   _intensityRange = newRange;
 }
 
-double WaterfallData::value(double x, double y) const{
+double WaterfallData::value(double x, double y) const
+{
   double returnValue = 0.0;
 
   const unsigned int intY = static_cast<unsigned int>((1.0 - (y/boundingRect().height())) * 
@@ -87,11 +101,14 @@ double WaterfallData::value(double x, double y) const{
   return returnValue;
 }
 
-uint64_t WaterfallData::GetNumFFTPoints()const{
+uint64_t WaterfallData::GetNumFFTPoints() const
+{
   return _fftPoints;
 }
 
-void WaterfallData::addFFTData(const double* fftData, const uint64_t fftDataSize, const int droppedFrames){
+void WaterfallData::addFFTData(const double* fftData,
+                              const uint64_t fftDataSize,
+                              const int droppedFrames){
   if(fftDataSize == _fftPoints){
     int64_t heightOffset = _historyLength - 1 - droppedFrames;
     uint64_t drawingDroppedFrames = droppedFrames;
@@ -104,155 +121,44 @@ void WaterfallData::addFFTData(const double* fftData, const uint64_t fftDataSize
     
     // Copy the old data over if any available
     if(heightOffset > 0){
-      memmove( _spectrumData, &_spectrumData[(drawingDroppedFrames+1) * _fftPoints], heightOffset * _fftPoints * sizeof(double)) ;
+      memmove( _spectrumData, &_spectrumData[(drawingDroppedFrames+1) * _fftPoints],
+              heightOffset * _fftPoints * sizeof(double)) ;
     }
 
     if(drawingDroppedFrames > 0){
       // Fill in zeros data for dropped data
-      memset(&_spectrumData[heightOffset * _fftPoints], 0x00, static_cast<int64_t>(drawingDroppedFrames) * _fftPoints * sizeof(double));
+      memset(&_spectrumData[heightOffset * _fftPoints], 0x00,
+            static_cast<int64_t>(drawingDroppedFrames) * _fftPoints * sizeof(double));
     }
 
     // add the new buffer
     memcpy(&_spectrumData[(_historyLength - 1) * _fftPoints], fftData, _fftPoints*sizeof(double));
-
   }
 }
 
-double* WaterfallData::GetSpectrumDataBuffer()const{
+double* WaterfallData::GetSpectrumDataBuffer() const
+{
   return _spectrumData;
 }
 
-void WaterfallData::SetSpectrumDataBuffer(const double* newData){
+void WaterfallData::SetSpectrumDataBuffer(const double* newData)
+{
   memcpy(_spectrumData, newData, _fftPoints * _historyLength * sizeof(double));
 }
 
-int WaterfallData::GetNumLinesToUpdate()const{
+int WaterfallData::GetNumLinesToUpdate() const
+{
   return _numLinesToUpdate;
 }
 
-void WaterfallData::SetNumLinesToUpdate(const int newNum){
+void WaterfallData::SetNumLinesToUpdate(const int newNum)
+{
   _numLinesToUpdate = newNum;
 }
 
-void WaterfallData::IncrementNumLinesToUpdate(){
-  _numLinesToUpdate++;
-}
-
-Waterfall3DData::Waterfall3DData(const double minimumFrequency, const double maximumFrequency, const uint64_t fftPoints, const unsigned int historyExtent):
-  WaterfallData(minimumFrequency,  maximumFrequency, fftPoints, historyExtent), Qwt3D::Function(){
-
-  _floorValue = 0.0;
-  setMinZ(0.0);
-  setMaxZ(200.0);
-
-  // Create the dummy mesh data until _ResizeMesh is called
-  data = new double*[1];
-  data[0] = new double[1];
-  Qwt3D::Function::setMesh(1,1);
-
-  _ResizeMesh();
-}
-
-Waterfall3DData::~Waterfall3DData(){
-  for ( unsigned i = 0; i < umesh_p; i++){
-    delete[] data[i];
-  }
-  delete[] data;
-
-}
-
-void Waterfall3DData::ResizeData(const double startFreq, const double stopFreq, const uint64_t fftPoints){
-  if((fftPoints != GetNumFFTPoints()) ||
-     (boundingRect().width() != (stopFreq - startFreq)) ||
-     (boundingRect().left() != startFreq)){
-    WaterfallData::ResizeData(startFreq, stopFreq, fftPoints);
-    _ResizeMesh();
-  }
-   
-  Reset();
-}
-
-bool Waterfall3DData::create()
+void WaterfallData::IncrementNumLinesToUpdate()
 {
-  if ((umesh_p<=2) || (vmesh_p<=2) || !plotwidget_p)
-    return false;
-
-  // Almost the same as the old create, except that here we store our own data buffer in the class rather than re-creating it each time...
-
-  unsigned i,j;
-
-  /* get the data */
-  double dx = (maxu_p - minu_p) / (umesh_p - 1);
-  double dy = (maxv_p - minv_p) / (vmesh_p - 1);
-  
-  for (i = 0; i < umesh_p; ++i) 
-    {
-      for (j = 0; j < vmesh_p; ++j) 
-       {
-         data[i][j] = operator()(minu_p + i*dx, minv_p + j*dy);
-         
-         if (data[i][j] > range_p.maxVertex.z)
-           data[i][j] = range_p.maxVertex.z;
-         else if (data[i][j] < range_p.minVertex.z)
-           data[i][j] = range_p.minVertex.z;
-       }
-    }
-  
-  Q_ASSERT(plotwidget_p);
-  if (!plotwidget_p)
-    {
-      fprintf(stderr,"Function: no valid Plot3D Widget assigned");
-    }
-  else
-    {
-      ((Waterfall3DDisplayPlot*)plotwidget_p)->loadFromData(data, umesh_p, vmesh_p, minu_p, maxu_p, minv_p, maxv_p);
-    }
-  
-  return true;
-}
-
-double Waterfall3DData::operator()(double x, double y){
-  return value(x,y) - _floorValue;
-}
-
-double Waterfall3DData::GetFloorValue()const{
-  return _floorValue;
-}
-
-void Waterfall3DData::SetFloorValue(const double newValue){
-  _floorValue = newValue;
-}
-
-double Waterfall3DData::minZ()const{
-  return range_p.minVertex.z;
-}
-
-double Waterfall3DData::maxZ()const{
-  return range_p.maxVertex.z;
-}
-
-void Waterfall3DData::setMesh(unsigned int, unsigned int){
-  // Do Nothing
-  printf("Should Not Reach this Function\n");
-}
-
-void Waterfall3DData::_ResizeMesh(){
-  // Clear out the old mesh
-  for ( unsigned i = 0; i < umesh_p; i++){
-    delete[] data[i];
-  }
-  delete[] data;
-  
-  Qwt3D::Function::setMesh(static_cast<int>(boundingRect().width()/20.0), _historyLength);
-  setDomain( boundingRect().left(), static_cast<int>(boundingRect().right()), 0, _historyLength);
-
-  /* allocate some space for the mesh */
-  unsigned i;
-  data         = new double* [umesh_p] ;
-  for ( i = 0; i < umesh_p; i++) 
-    {
-      data[i]         = new double [vmesh_p];
-    }
+  _numLinesToUpdate++;
 }
 
 #endif /* WATERFALL_GLOBAL_DATA_CPP */
index 247e0ae91a5b733157a3cdfd844c9c8bfee9365e..51f65064c88f8e4d08af083542516421222037e7 100644 (file)
@@ -2,10 +2,8 @@
 #define WATERFALL_GLOBAL_DATA_HPP
 
 #include <qwt_raster_data.h>
-#include <qwt3d_function.h>
 #include <inttypes.h>
 
-class Waterfall3DDisplayPlot;
 
 class WaterfallData: public QwtRasterData
 {
@@ -46,34 +44,4 @@ private:
 
 };
 
-class Waterfall3DData: public WaterfallData, public Qwt3D::Function
-{
-public:
-  Waterfall3DData(const double, const double, const uint64_t, const unsigned int);
-  virtual ~Waterfall3DData();
-    
-  virtual void ResizeData(const double, const double, const uint64_t);
-
-  virtual bool create();
-  virtual void setMesh(unsigned int columns, unsigned int rows); //!< Sets number of rows and columns. 
-
-  virtual double operator()(double x, double y);
-
-  virtual double GetFloorValue()const;
-  virtual void SetFloorValue(const double);
-
-  virtual double minZ()const;
-  virtual double maxZ()const;
-
-protected:
-  void _ResizeMesh();
-
-  double** data;
-  double _floorValue;
-
-private:
-
-};
-
-
 #endif /* WATERFALL_GLOBAL_DATA_HPP */