Switch to side-by-side view

--- a/src/rcldb/searchdata.h
+++ b/src/rcldb/searchdata.h
@@ -71,8 +71,7 @@
 class SearchData {
 public:
     SearchData(SClType tp) 
-    : m_tp(tp), m_topdirexcl(false), m_topdirweight(1.0), 
-      m_haveDates(false), m_maxSize(size_t(-1)),
+    : m_tp(tp), m_haveDates(false), m_maxSize(size_t(-1)),
       m_minSize(size_t(-1)), m_haveWildCards(false) 
     {
 	if (m_tp != SCLT_OR && m_tp != SCLT_AND) 
@@ -105,11 +104,9 @@
     bool maybeAddAutoPhrase(Rcl::Db &db, double threshold);
 
     /** Set/get top subdirectory for filtering results */
-    void setTopdir(const std::string& t, bool excl = false, float w = 1.0) 
-    {
-	m_topdir = t;
-	m_topdirexcl = excl;
-	m_topdirweight = w;
+    void addDirSpec(const std::string& t, bool excl = false, float w = 1.0) 
+    {
+	m_dirspecs.push_back(DirSpec(t, excl, w));
     }
 
     void setMinSize(size_t size) {m_minSize = size;}
@@ -148,10 +145,21 @@
     std::vector<std::string>            m_filetypes; 
     // Excluded set of file types if not empty
     std::vector<std::string>            m_nfiletypes;
-    // Restrict to subtree.
-    std::string                    m_topdir; 
-    bool                      m_topdirexcl; // Invert meaning
-    float                     m_topdirweight; // affect weight instead of filter
+
+    // Restrict  to subtree or exclude one
+    class DirSpec {
+    public:
+	std::string dir; 
+	bool        exclude; 
+	// For positive spec: affect weight instead of filter
+	float       weight;
+	DirSpec(const std::string&d, bool x, float w)
+	    : dir(d), exclude(x), weight(w)
+	{
+	}
+    };
+    std::vector<DirSpec> m_dirspecs;
+
     bool                      m_haveDates;
     DateInterval              m_dates; // Restrict to date interval
     size_t                    m_maxSize;