diff base/Window.h @ 350:d7c41483af8f

* Merge from transforms branch -- switch over to using Transform object properly
author Chris Cannam
date Fri, 07 Dec 2007 16:47:31 +0000
parents 524bcd89743b
children 7e1b7fcb6c00
line wrap: on
line diff
--- a/base/Window.h	Fri Nov 30 17:31:09 2007 +0000
+++ b/base/Window.h	Fri Dec 07 16:47:31 2007 +0000
@@ -18,6 +18,7 @@
 
 #include <cmath>
 #include <iostream>
+#include <string>
 #include <map>
 
 enum WindowType {
@@ -61,6 +62,12 @@
     WindowType getType() const { return m_type; }
     size_t getSize() const { return m_size; }
 
+    // The names used by these functions are un-translated, for use in
+    // e.g. XML I/O.  Use Preferences::getPropertyValueLabel if you
+    // want translated names for use in the user interface.
+    static std::string getNameForType(WindowType type);
+    static WindowType getTypeForName(std::string name);
+
 protected:
     WindowType m_type;
     size_t m_size;
@@ -159,4 +166,46 @@
     }
 }
 
+template <typename T>
+std::string
+Window<T>::getNameForType(WindowType type)
+{
+    switch (type) {
+    case RectangularWindow:    return "rectangular";
+    case BartlettWindow:       return "bartlett";
+    case HammingWindow:        return "hamming";
+    case HanningWindow:        return "hanning";
+    case BlackmanWindow:       return "blackman";
+    case GaussianWindow:       return "gaussian";
+    case ParzenWindow:         return "parzen";
+    case NuttallWindow:        return "nuttall";
+    case BlackmanHarrisWindow: return "blackman-harris";
+    }
+
+    std::cerr << "WARNING: Window::getNameForType: unknown type "
+              << type << std::endl;
+
+    return "unknown";
+}
+
+template <typename T>
+WindowType
+Window<T>::getTypeForName(std::string name)
+{
+    if (name == "rectangular")     return RectangularWindow;
+    if (name == "bartlett")        return BartlettWindow;
+    if (name == "hamming")         return HammingWindow;
+    if (name == "hanning")         return HanningWindow;
+    if (name == "blackman")        return BlackmanWindow;
+    if (name == "gaussian")        return GaussianWindow;
+    if (name == "parzen")          return ParzenWindow;
+    if (name == "nuttall")         return NuttallWindow;
+    if (name == "blackman-harris") return BlackmanHarrisWindow;
+
+    std::cerr << "WARNING: Window::getTypeForName: unknown name \""
+              << name << "\", defaulting to \"hanning\"" << std::endl;
+
+    return HanningWindow;
+}
+
 #endif