From 9e8219fda29df325bf5f5246385b5abab1fd61ae Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Tue, 25 May 2010 15:24:21 +0200
Subject: [PATCH] Debugger: Add menu option for saving debugger logs.

...as X11-clipboard is unreliable for long logs.
---
 src/plugins/debugger/debuggeroutputwindow.cpp | 30 +++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/plugins/debugger/debuggeroutputwindow.cpp b/src/plugins/debugger/debuggeroutputwindow.cpp
index f29d5ab8c72..e65499686e2 100644
--- a/src/plugins/debugger/debuggeroutputwindow.cpp
+++ b/src/plugins/debugger/debuggeroutputwindow.cpp
@@ -32,6 +32,7 @@
 #include "debuggermanager.h"
 
 #include <QtCore/QDebug>
+#include <QtCore/QFile>
 
 #include <QtGui/QAction>
 #include <QtGui/QHBoxLayout>
@@ -45,6 +46,8 @@
 #include <QtGui/QSyntaxHighlighter>
 #include <QtGui/QTextBlock>
 #include <QtGui/QPlainTextEdit>
+#include <QtGui/QFileDialog>
+#include <QtGui/QMessageBox>
 
 #include <aggregation/aggregate.h>
 #include <coreplugin/findplaceholder.h>
@@ -190,13 +193,14 @@ public:
         m_saveContentsAction = new QAction(this);
         m_saveContentsAction->setText(tr("Save Contents"));
         m_saveContentsAction->setEnabled(true);
+        connect(m_saveContentsAction, SIGNAL(triggered()), this, SLOT(saveContents()));
     }
 
     void contextMenuEvent(QContextMenuEvent *ev)
     {
         QMenu *menu = createStandardContextMenu();
         menu->addAction(m_clearContentsAction);
-        //menu->addAction(m_saveContentsAction);
+        menu->addAction(m_saveContentsAction); // X11 clipboard is unreliable for long texts
         addContextActions(menu);
         theDebuggerAction(ExecuteCommand)->setData(textCursor().block().text());
         menu->addAction(theDebuggerAction(ExecuteCommand));
@@ -210,11 +214,33 @@ public:
 
     virtual void addContextActions(QMenu *) {}
 
-public:
+private slots:
+    void saveContents();
+
+private:
     QAction *m_clearContentsAction;
     QAction *m_saveContentsAction;
 };
 
+void DebuggerPane::saveContents()
+{
+    while (true) {
+        const QString fileName = QFileDialog::getSaveFileName(this, tr("Log File"));
+        if (fileName.isEmpty())
+            break;
+        QFile file(fileName);
+        if (file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate)) {
+            file.write(toPlainText().toUtf8());
+            file.close();
+            break;
+        } else {
+            QMessageBox::warning(this, tr("Write Failure"),
+                                 tr("Unable to write log contents to '%1': %2").
+                                 arg(fileName, file.errorString()));
+        }
+    }
+}
+
 
 /////////////////////////////////////////////////////////////////////
 //
-- 
GitLab