summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2010-03-23 22:07:17 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2010-03-23 22:07:17 +0000
commit56199d3dfba2c2454c1226fac5d98e84ecf11cd1 (patch)
tree8a8e2dd58e9bb13279aa4b3427cca46261c5fe1f
parent492fafe8792bf21f034d34bbef0e3d38383fa989 (diff)
downloadrockbox-56199d3dfba2c2454c1226fac5d98e84ecf11cd1.tar.gz
rockbox-56199d3dfba2c2454c1226fac5d98e84ecf11cd1.zip
Save System Trace on exit and allow easy retrieval after restart.
The System Trace isn't preserved when quitting Rockbox Utility. Change this so the last trace is saved in the cache folder, and add a button to the trace window to allow easy saving it. Should help in cases where users have problems but restart Rockbox Utility before saving the trace. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25313 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--rbutil/rbutilqt/rbutilqt.cpp1
-rw-r--r--rbutil/rbutilqt/systrace.cpp47
-rw-r--r--rbutil/rbutilqt/systrace.h5
-rw-r--r--rbutil/rbutilqt/systracefrm.ui74
4 files changed, 86 insertions, 41 deletions
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp
index 292a0026b1..ececb782d4 100644
--- a/rbutil/rbutilqt/rbutilqt.cpp
+++ b/rbutil/rbutilqt/rbutilqt.cpp
@@ -149,6 +149,7 @@ void RbUtilQt::shutdown(void)
149 // object destruction -- the trace object could already be destroyed. 149 // object destruction -- the trace object could already be destroyed.
150 // Fixes segfaults on exit. 150 // Fixes segfaults on exit.
151 qInstallMsgHandler(0); 151 qInstallMsgHandler(0);
152 SysTrace::save();
152 this->close(); 153 this->close();
153} 154}
154 155
diff --git a/rbutil/rbutilqt/systrace.cpp b/rbutil/rbutilqt/systrace.cpp
index 1aed5c05b5..1b9de6b713 100644
--- a/rbutil/rbutilqt/systrace.cpp
+++ b/rbutil/rbutilqt/systrace.cpp
@@ -21,6 +21,7 @@
21#include "systrace.h" 21#include "systrace.h"
22#include "ui_systracefrm.h" 22#include "ui_systracefrm.h"
23 23
24#include "rbsettings.h"
24 25
25QString SysTrace::debugbuffer; 26QString SysTrace::debugbuffer;
26 27
@@ -32,7 +33,8 @@ SysTrace::SysTrace(QWidget *parent) : QDialog(parent)
32 refresh(); 33 refresh();
33 34
34 connect(ui.buttonClose, SIGNAL(clicked()), this, SLOT(close())); 35 connect(ui.buttonClose, SIGNAL(clicked()), this, SLOT(close()));
35 connect(ui.buttonSave, SIGNAL(clicked()), this, SLOT(save())); 36 connect(ui.buttonSave, SIGNAL(clicked()), this, SLOT(saveCurrentTrace()));
37 connect(ui.buttonSavePrevious, SIGNAL(clicked()), this, SLOT(savePreviousTrace()));
36 connect(ui.buttonRefresh, SIGNAL(clicked()), this, SLOT(refresh())); 38 connect(ui.buttonRefresh, SIGNAL(clicked()), this, SLOT(refresh()));
37} 39}
38 40
@@ -41,22 +43,51 @@ void SysTrace::refresh(void)
41 int pos = ui.textTrace->verticalScrollBar()->value(); 43 int pos = ui.textTrace->verticalScrollBar()->value();
42 ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>"); 44 ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>");
43 ui.textTrace->verticalScrollBar()->setValue(pos); 45 ui.textTrace->verticalScrollBar()->setValue(pos);
46 QString oldlog = RbSettings::value(RbSettings::CachePath).toString()
47 + "/rbutil-trace.log";
48 ui.buttonSavePrevious->setEnabled(QFileInfo(oldlog).isFile());
44} 49}
45 50
46void SysTrace::save(void) 51
52void SysTrace::save(QString filename)
47{ 53{
48 QString fp = QFileDialog::getSaveFileName(this, tr("Save system trace log"), 54 if(filename.isEmpty())
49 QDir::homePath(), "*.log"); 55 filename = RbSettings::value(RbSettings::CachePath).toString()
50 if(fp == "") 56 + "/rbutil-trace.log";
51 return; 57 // append save date to the trace. Append it directly instead of using
52 58 // qDebug() as the handler might have been unregistered.
53 QFile fh(fp); 59 debugbuffer.append("[SysTrace] saving trace at ");
60 debugbuffer.append(QDateTime::currentDateTime().toString(Qt::ISODate));
61 debugbuffer.append("\n");
62 QFile fh(filename);
54 if(!fh.open(QIODevice::WriteOnly)) 63 if(!fh.open(QIODevice::WriteOnly))
55 return; 64 return;
56 fh.write(debugbuffer.toUtf8(), debugbuffer.size()); 65 fh.write(debugbuffer.toUtf8(), debugbuffer.size());
57 fh.close(); 66 fh.close();
58} 67}
59 68
69void SysTrace::saveCurrentTrace(void)
70{
71 QString fp = QFileDialog::getSaveFileName(this, tr("Save system trace log"),
72 QDir::homePath(), "*.log");
73 if(!fp.isEmpty())
74 save(fp);
75}
76
77
78void SysTrace::savePreviousTrace(void)
79{
80 QString fp = QFileDialog::getSaveFileName(this, tr("Save system trace log"),
81 QDir::homePath(), "*.log");
82 if(fp.isEmpty())
83 return;
84
85 QString oldlog = RbSettings::value(RbSettings::CachePath).toString()
86 + "/rbutil-trace.log";
87 QFile::copy(oldlog, fp);
88 return;
89}
90
60void SysTrace::debug(QtMsgType type, const char* msg) 91void SysTrace::debug(QtMsgType type, const char* msg)
61{ 92{
62 (void)type; 93 (void)type;
diff --git a/rbutil/rbutilqt/systrace.h b/rbutil/rbutilqt/systrace.h
index a8253ce9e6..4e6206a886 100644
--- a/rbutil/rbutilqt/systrace.h
+++ b/rbutil/rbutilqt/systrace.h
@@ -31,14 +31,15 @@ class SysTrace : public QDialog
31 public: 31 public:
32 SysTrace(QWidget *parent); 32 SysTrace(QWidget *parent);
33 static void debug(QtMsgType type, const char* msg); 33 static void debug(QtMsgType type, const char* msg);
34
35 static QString getTrace() {return debugbuffer;} 34 static QString getTrace() {return debugbuffer;}
35 static void save(QString filename = "");
36 private: 36 private:
37 Ui::SysTraceFrm ui; 37 Ui::SysTraceFrm ui;
38 static QString debugbuffer; 38 static QString debugbuffer;
39 39
40 private slots: 40 private slots:
41 void save(void); 41 void saveCurrentTrace(void);
42 void savePreviousTrace(void);
42 void refresh(void); 43 void refresh(void);
43 44
44}; 45};
diff --git a/rbutil/rbutilqt/systracefrm.ui b/rbutil/rbutilqt/systracefrm.ui
index 7a83eecb80..eb8bb6dac6 100644
--- a/rbutil/rbutilqt/systracefrm.ui
+++ b/rbutil/rbutilqt/systracefrm.ui
@@ -1,7 +1,8 @@
1<ui version="4.0" > 1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
2 <class>SysTraceFrm</class> 3 <class>SysTraceFrm</class>
3 <widget class="QDialog" name="SysTraceFrm" > 4 <widget class="QDialog" name="SysTraceFrm">
4 <property name="geometry" > 5 <property name="geometry">
5 <rect> 6 <rect>
6 <x>0</x> 7 <x>0</x>
7 <y>0</y> 8 <y>0</y>
@@ -9,29 +10,29 @@
9 <height>550</height> 10 <height>550</height>
10 </rect> 11 </rect>
11 </property> 12 </property>
12 <property name="windowTitle" > 13 <property name="windowTitle">
13 <string>System Trace</string> 14 <string>System Trace</string>
14 </property> 15 </property>
15 <layout class="QGridLayout" name="gridLayout" > 16 <layout class="QGridLayout" name="gridLayout">
16 <item row="0" column="0" colspan="5" > 17 <item row="0" column="0" colspan="6">
17 <widget class="QLabel" name="label" > 18 <widget class="QLabel" name="label">
18 <property name="text" > 19 <property name="text">
19 <string>System State trace</string> 20 <string>System State trace</string>
20 </property> 21 </property>
21 <property name="wordWrap" > 22 <property name="wordWrap">
22 <bool>true</bool> 23 <bool>true</bool>
23 </property> 24 </property>
24 </widget> 25 </widget>
25 </item> 26 </item>
26 <item row="1" column="0" colspan="5" > 27 <item row="1" column="0" colspan="6">
27 <widget class="QTextEdit" name="textTrace" /> 28 <widget class="QTextEdit" name="textTrace"/>
28 </item> 29 </item>
29 <item row="2" column="1" colspan="2" > 30 <item row="2" column="1" colspan="2">
30 <spacer name="horizontalSpacer" > 31 <spacer name="horizontalSpacer">
31 <property name="orientation" > 32 <property name="orientation">
32 <enum>Qt::Horizontal</enum> 33 <enum>Qt::Horizontal</enum>
33 </property> 34 </property>
34 <property name="sizeHint" stdset="0" > 35 <property name="sizeHint" stdset="0">
35 <size> 36 <size>
36 <width>487</width> 37 <width>487</width>
37 <height>26</height> 38 <height>26</height>
@@ -39,43 +40,54 @@
39 </property> 40 </property>
40 </spacer> 41 </spacer>
41 </item> 42 </item>
42 <item row="2" column="4" > 43 <item row="2" column="5">
43 <widget class="QPushButton" name="buttonClose" > 44 <widget class="QPushButton" name="buttonClose">
44 <property name="text" > 45 <property name="text">
45 <string>&amp;Close</string> 46 <string>&amp;Close</string>
46 </property> 47 </property>
47 <property name="icon" > 48 <property name="icon">
48 <iconset resource="rbutilqt.qrc" > 49 <iconset resource="rbutilqt.qrc">
49 <normaloff>:/icons/process-stop.png</normaloff>:/icons/process-stop.png</iconset> 50 <normaloff>:/icons/process-stop.png</normaloff>:/icons/process-stop.png</iconset>
50 </property> 51 </property>
51 </widget> 52 </widget>
52 </item> 53 </item>
53 <item row="2" column="3" > 54 <item row="2" column="4">
54 <widget class="QPushButton" name="buttonSave" > 55 <widget class="QPushButton" name="buttonSave">
55 <property name="text" > 56 <property name="text">
56 <string>&amp;Save</string> 57 <string>&amp;Save</string>
57 </property> 58 </property>
58 <property name="icon" > 59 <property name="icon">
59 <iconset resource="rbutilqt.qrc" > 60 <iconset resource="rbutilqt.qrc">
60 <normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset> 61 <normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
61 </property> 62 </property>
62 </widget> 63 </widget>
63 </item> 64 </item>
64 <item row="2" column="0" > 65 <item row="2" column="0">
65 <widget class="QPushButton" name="buttonRefresh" > 66 <widget class="QPushButton" name="buttonRefresh">
66 <property name="text" > 67 <property name="text">
67 <string>&amp;Refresh</string> 68 <string>&amp;Refresh</string>
68 </property> 69 </property>
69 <property name="icon" > 70 <property name="icon">
70 <iconset resource="rbutilqt.qrc" > 71 <iconset resource="rbutilqt.qrc">
71 <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 72 <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset>
72 </property> 73 </property>
73 </widget> 74 </widget>
74 </item> 75 </item>
76 <item row="2" column="3">
77 <widget class="QPushButton" name="buttonSavePrevious">
78 <property name="text">
79 <string>Save &amp;previous</string>
80 </property>
81 <property name="icon">
82 <iconset resource="rbutilqt.qrc">
83 <normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
84 </property>
85 </widget>
86 </item>
75 </layout> 87 </layout>
76 </widget> 88 </widget>
77 <resources> 89 <resources>
78 <include location="rbutilqt.qrc" /> 90 <include location="rbutilqt.qrc"/>
79 </resources> 91 </resources>
80 <connections/> 92 <connections/>
81</ui> 93</ui>