Switch to side-by-side view

--- a
+++ b/src/qtgui/respopup.cpp
@@ -0,0 +1,105 @@
+/*
+ *   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
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#include "autoconfig.h"
+
+#include <qapplication.h>
+#include <qmenu.h>
+#include <qclipboard.h>
+
+#include "debuglog.h"
+#include "smallut.h"
+#include "recoll.h"
+#include "docseq.h"
+#include "respopup.h"
+
+namespace ResultPopup {
+
+QMenu *create(QWidget *me, int opts, RefCntr<DocSequence> source, Rcl::Doc& doc)
+{
+    QMenu *popup = new QMenu(me);
+
+    string apptag;
+    doc.getmeta(Rcl::Doc::keyapptg, &apptag);
+    popup->addAction(me->tr("&Preview"), me, SLOT(menuPreview()));
+    if (!theconfig->getMimeViewerDef(doc.mimetype, apptag, 0).empty()) {
+	popup->addAction(me->tr("&Open"), me, SLOT(menuEdit()));
+    }
+    popup->addAction(me->tr("Copy &File Name"), me, SLOT(menuCopyFN()));
+    popup->addAction(me->tr("Copy &URL"), me, SLOT(menuCopyURL()));
+    if (!doc.ipath.empty())
+	popup->addAction(me->tr("&Write to File"), me, SLOT(menuSaveToFile()));
+
+    Rcl::Doc pdoc;
+    if (source.isNotNull() && source->getEnclosing(doc, pdoc)) {
+	popup->addAction(me->tr("Preview P&arent document/folder"), 
+			 me, SLOT(menuPreviewParent()));
+	popup->addAction(me->tr("&Open Parent document/folder"), 
+			 me, SLOT(menuOpenParent()));
+    }
+    if (opts & showExpand)
+	popup->addAction(me->tr("Find &similar documents"), 
+			 me, SLOT(menuExpand()));
+    if (doc.haspages && source->snippetsCapable()) 
+	popup->addAction(me->tr("Open &Snippets window"), 
+			 me, SLOT(menuOpenSnippets()));
+
+    if (rcldb && rcldb->hasSubDocs(doc)) 
+	popup->addAction(me->tr("Show subdocuments / attachments"), 
+			 me, SLOT(menuShowSubDocs()));
+    return popup;
+}
+
+Rcl::Doc getParent(RefCntr<DocSequence> source,
+			       Rcl::Doc& doc)
+{
+    Rcl::Doc pdoc;
+    if (source.isNull() || !source->getEnclosing(doc, pdoc)) {
+	// No parent doc: show enclosing folder with app configured for
+	// directories
+	pdoc.url = path_getfather(doc.url);
+	pdoc.meta[Rcl::Doc::keychildurl] = doc.url;
+	pdoc.meta[Rcl::Doc::keyapptg] = "parentopen";
+	pdoc.mimetype = "inode/directory";
+    }
+    return pdoc;
+}
+
+void copyFN(const Rcl::Doc &doc)
+{
+    // Our urls currently always begin with "file://" 
+    //
+    // Problem: setText expects a QString. Passing a (const char*)
+    // as we used to do causes an implicit conversion from
+    // latin1. File are binary and the right approach would be no
+    // conversion, but it's probably better (less worse...) to
+    // make a "best effort" tentative and try to convert from the
+    // locale's charset than accept the default conversion.
+    QString qfn = QString::fromLocal8Bit(doc.url.c_str()+7);
+    QApplication::clipboard()->setText(qfn, QClipboard::Selection);
+    QApplication::clipboard()->setText(qfn, QClipboard::Clipboard);
+}
+
+void copyURL(const Rcl::Doc &doc)
+{
+    string url =  url_encode(doc.url, 7);
+    QApplication::clipboard()->setText(url.c_str(), 
+				       QClipboard::Selection);
+    QApplication::clipboard()->setText(url.c_str(), 
+				       QClipboard::Clipboard);
+}
+
+}