Switch to side-by-side view

--- a/src/qtgui/preview_w.h
+++ b/src/qtgui/preview_w.h
@@ -1,6 +1,6 @@
 #ifndef _PREVIEW_W_H_INCLUDED_
 #define _PREVIEW_W_H_INCLUDED_
-/* @(#$Id: preview_w.h,v 1.1 2006-09-04 15:13:01 dockes Exp $  (C) 2006 J.F.Dockes */
+/* @(#$Id: preview_w.h,v 1.2 2006-09-12 10:11:36 dockes Exp $  (C) 2006 J.F.Dockes */
 /*
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -23,23 +23,36 @@
 #include "rcldb.h"
 #include "preview.h"
 
+// We keep a list of data associated to each tab
+class TabData {
+ public:
+    string fn; // filename for this tab
+    string ipath; // Internal doc path inside file
+    QWidget *w; // widget for setCurrent
+    int docnum;  // Index of doc in db search results.
+
+
+    TabData(QWidget *wi) : w(wi) {}
+};
+
 class Preview : public PreviewBase
 {
     Q_OBJECT
 
 public:
-    Preview( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ) :
+    Preview(QWidget* parent = 0, const char* name = 0, WFlags fl = 0) :
 	PreviewBase(parent,name,fl) {init();}
 	
     ~Preview(){}
 
-    virtual void closeEvent( QCloseEvent * e );
-    virtual bool eventFilter( QObject * target, QEvent * event );
+    virtual void setSId(int sid) {m_searchId = sid;}
+    virtual void closeEvent( QCloseEvent *e );
+    virtual bool eventFilter( QObject *target, QEvent *event );
     virtual bool makeDocCurrent( const string & fn, const Rcl::Doc & doc );
-    virtual QTextEdit * getCurrentEditor();
-    virtual QTextEdit * addEditorTab();
+    virtual QTextEdit *getCurrentEditor();
+    virtual QTextEdit *addEditorTab();
     virtual bool loadFileInCurrentTab(string fn, size_t sz, 
-				      const Rcl::Doc & idoc );
+				      const Rcl::Doc& idoc, int dnm);
 
 public slots:
     virtual void searchTextLine_textChanged( const QString & text );
@@ -48,24 +61,31 @@
     virtual void prevPressed();
     virtual void currentChanged( QWidget * tw );
     virtual void closeCurrentTab();
-    virtual void setCurTabProps( const string & fn, const Rcl::Doc & doc );
+    virtual void setCurTabProps(const string & fn, const Rcl::Doc & doc, 
+				int docnum);
     virtual void textDoubleClicked(int, int);
 
 signals:
     void previewClosed(QWidget *);
     void wordSelect(QString);
+    void showNext(int sid, int docnum);
+    void showPrev(int sid, int docnum);
 
 protected:
+    int m_searchId; // Identifier of search in main window. This is so that
+                  // we make sense when requesting the next document when 
+                  // browsing successive search results in a tab.
     int matchIndex;
     int matchPara;
     bool dynSearchActive;
     bool canBeep;
-    void *tabData;
+    list<TabData> tabData;
     QWidget *currentW;
 
 private:
     void init();
     virtual void destroy();
+    TabData *tabDataForCurrent(); // Return auxiliary data pointer for cur tab
 };
 
 #endif /* _PREVIEW_W_H_INCLUDED_ */