diff --git a/src/qt/forms/rpcconsole.ui b/src/qt/forms/rpcconsole.ui index 7e496a5ce7..02164f76b5 100644 --- a/src/qt/forms/rpcconsole.ui +++ b/src/qt/forms/rpcconsole.ui @@ -204,6 +204,42 @@ + + + Qt::Vertical + + + + 20 + 20 + + + + + + + + + 75 + true + + + + Debug logfile + + + + + + + Open the Bitcoin debug logfile from the current data directory. This can take a few seconds for large logfiles. + + + &Open + + + + Qt::Vertical diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 3b8f8c76f8..9a7d42fa08 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -17,6 +17,24 @@ #include #include +#include + +#ifdef WIN32 +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif +#define _WIN32_WINNT 0x0501 +#ifdef _WIN32_IE +#undef _WIN32_IE +#endif +#define _WIN32_IE 0x0501 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include "shlwapi.h" +#endif + namespace GUIUtil { QString dateTimeStr(const QDateTime &date) @@ -214,6 +232,17 @@ bool isObscured(QWidget *w) && checkPoint(QPoint(w->width()/2, w->height()/2), w)); } +void openDebugLogfile() +{ + boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; + +#ifdef WIN32 + if (boost::filesystem::exists(pathDebug)) + /* Open debug.log with the associated application */ + ShellExecuteA((HWND)0, (LPCSTR)"open", (LPCSTR)pathDebug.string().c_str(), NULL, NULL, SW_SHOWNORMAL); +#endif +} + ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *parent): size_threshold(size_threshold), QObject(parent) { diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 8e9aae1cb0..92d0f9ee43 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -70,6 +70,9 @@ namespace GUIUtil // Determine whether a widget is hidden behind other windows bool isObscured(QWidget *w); + // Open debug.log + void openDebugLogfile(); + /** Qt event filter that intercepts ToolTipChange events, and replaces the tooltip with a rich text representation if needed. This assures that Qt can word-wrap long tooltip messages. Tooltips longer than the provided size threshold (in characters) are wrapped. diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 6d983989e9..85f79309f3 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -90,6 +90,12 @@ RPCConsole::RPCConsole(QWidget *parent) : ui->messagesWidget->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch); ui->messagesWidget->setContextMenuPolicy(Qt::ActionsContextMenu); +#ifndef WIN32 + // Show Debug logfile label and Open button only for Windows + ui->labelDebugLogfile->setVisible(false); + ui->openDebugLogfileButton->setVisible(false); +#endif + // Install event filter for up and down arrow ui->lineEdit->installEventFilter(this); @@ -101,6 +107,7 @@ RPCConsole::RPCConsole(QWidget *parent) : ui->messagesWidget->addAction(copyMessageAction); connect(ui->clearButton, SIGNAL(clicked()), this, SLOT(clear())); + connect(ui->openDebugLogfileButton, SIGNAL(clicked()), this, SLOT(on_openDebugLogfileButton_clicked())); startExecutor(); @@ -310,3 +317,8 @@ void RPCConsole::on_tabWidget_currentChanged(int index) ui->lineEdit->setFocus(); } } + +void RPCConsole::on_openDebugLogfileButton_clicked() +{ + GUIUtil::openDebugLogfile(); +} diff --git a/src/qt/rpcconsole.h b/src/qt/rpcconsole.h index 2ec47b0cf8..30948eaad2 100644 --- a/src/qt/rpcconsole.h +++ b/src/qt/rpcconsole.h @@ -32,8 +32,8 @@ protected: private slots: void on_lineEdit_returnPressed(); - void on_tabWidget_currentChanged(int index); + void on_openDebugLogfileButton_clicked(); public slots: void clear();