summaryrefslogtreecommitdiffstats
path: root/src/debugging/.svn
diff options
context:
space:
mode:
Diffstat (limited to 'src/debugging/.svn')
-rwxr-xr-xsrc/debugging/.svn/all-wcprops7
-rwxr-xr-xsrc/debugging/.svn/entries130
-rwxr-xr-xsrc/debugging/.svn/text-base/TSLogger.cpp.svn-base251
-rwxr-xr-xsrc/debugging/.svn/text-base/TSLogger.h.svn-base63
-rwxr-xr-xsrc/debugging/.svn/text-base/TSLoggerDialog.ui.svn-base142
5 files changed, 593 insertions, 0 deletions
diff --git a/src/debugging/.svn/all-wcprops b/src/debugging/.svn/all-wcprops
new file mode 100755
index 0000000..3ceca8f
--- /dev/null
+++ b/src/debugging/.svn/all-wcprops
@@ -0,0 +1,7 @@
+END
+TSLoggerDialog.ui
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svnroot/universalindent/!svn/ver/1031/trunk/src/debugging/TSLoggerDialog.ui
+END
diff --git a/src/debugging/.svn/entries b/src/debugging/.svn/entries
new file mode 100755
index 0000000..3d62022
--- /dev/null
+++ b/src/debugging/.svn/entries
@@ -0,0 +1,130 @@
+10
+
+dir
+1074
+https://universalindent.svn.sourceforge.net/svnroot/universalindent/trunk/src/debugging
+https://universalindent.svn.sourceforge.net/svnroot/universalindent
+
+
+
+2012-01-01T15:57:45.041181Z
+1072
+thomas_-_s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+c764a436-2d14-0410-8e4b-8664b97a5d8c
+
+TSLogger.cpp
+file
+
+
+
+
+2012-01-01T15:53:22.000000Z
+bb8f19f90ef34ed27f3746cce9c0d857
+2012-01-01T15:57:45.041181Z
+1072
+thomas_-_s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9302
+
+TSLogger.h
+file
+
+
+
+
+2012-01-01T15:53:20.000000Z
+4f6c6d98220006c54c8530fed4ef69a2
+2012-01-01T15:57:45.041181Z
+1072
+thomas_-_s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2317
+
+TSLoggerDialog.ui
+file
+
+
+
+
+2011-12-26T15:10:20.000000Z
+ca2220682b5c3f228a786bbd43fcc9ed
+2010-12-21T23:07:50.799886Z
+1031
+thomas_-_s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3660
+
diff --git a/src/debugging/.svn/text-base/TSLogger.cpp.svn-base b/src/debugging/.svn/text-base/TSLogger.cpp.svn-base
new file mode 100755
index 0000000..e7a912b
--- /dev/null
+++ b/src/debugging/.svn/text-base/TSLogger.cpp.svn-base
@@ -0,0 +1,251 @@
+/***************************************************************************
+ * Copyright (C) 2006-2012 by Thomas Schweitzer *
+ * thomas-schweitzer(at)arcor.de *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License version 2.0 as *
+ * published by the Free Software Foundation. *
+ * *
+ * 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 in the file LICENSE.GPL; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "TSLogger.h"
+#include "ui_TSLoggerDialog.h"
+
+#include "SettingsPaths.h"
+
+#include <QDateTime>
+#include <QFile>
+#include <QFileInfo>
+#include <QUrl>
+#include <QTextStream>
+#include <QDesktopServices>
+#include <QMessageBox>
+
+#include <ctime>
+
+using namespace tschweitzer;
+using namespace tschweitzer::debugging;
+
+TSLogger* TSLogger::_instance = NULL;
+
+/*!
+ \class TSLogger
+ \brief This class handles any kind of data logging, for debugging and whatever purpose.
+
+ Beneath being able of displaying a dialog window containing all log messages of the
+ current session, a log file in the systems temporary directory is used. Its name
+ is "UiGUI_log.html".
+
+ Setting a verbose level allows to only write messages that have the selected minimum
+ priority to the log.
+ */
+
+/*!
+ \brief Returns the only existing instance of TSLogger. If the instance doesn't exist, it will be created.
+ */
+TSLogger* TSLogger::getInstance(int verboseLevel) {
+ if ( _instance == NULL )
+ _instance = new TSLogger(verboseLevel);
+
+ return _instance;
+}
+
+
+/*!
+ \brief Returns the only existing instance of TSLogger. If the instance doesn't exist, it will be created.
+ */
+TSLogger* TSLogger::getInstance() {
+#ifdef _DEBUG
+ return TSLogger::getInstance(QtDebugMsg);
+#else
+ return TSLogger::getInstance(QtWarningMsg);
+#endif
+}
+
+
+/*!
+ \brief Initializes the dialog and sets the path to the log file in the systems temporary directory.
+ Sets the default verbose level to warning level.
+ */
+TSLogger::TSLogger(int verboseLevel) : QDialog() {
+ _TSLoggerDialogForm = new Ui::TSLoggerDialog();
+ _TSLoggerDialogForm->setupUi(this);
+#ifdef _DEBUG
+ _verboseLevel = QtDebugMsg;
+#else
+ _verboseLevel = QtMsgType(verboseLevel);
+#endif
+
+ _logFileInitState = NOTINITIALZED;
+
+ connect( _TSLoggerDialogForm->openLogFileFolderToolButton, SIGNAL(clicked()), this, SLOT(openLogFileFolder()) );
+
+ // Make the main application not to wait for the logging window to close.
+ setAttribute(Qt::WA_QuitOnClose, false);
+}
+
+
+/*!
+ \brief Logs all incoming messages \a msg to the dialogs text edit and to the log file.
+
+ Only messages whos \a type have a higher priority than the set verbose level are logged.
+ */
+void TSLogger::messageHandler(QtMsgType type, const char *msg) {
+ if ( _instance == NULL )
+ _instance = TSLogger::getInstance();
+
+/*
+ QMessageBox messageBox;
+ QString messageBoxText = QString::fromUtf8( msg );
+ messageBox.setText( messageBoxText );
+ messageBox.setWindowModality( Qt::ApplicationModal );
+ messageBox.exec();
+*/
+
+ // Only log messages that have a higher or equal priority than set with the verbose level.
+ if ( type < _instance->_verboseLevel )
+ return;
+
+ // Init log message with prepended date and time.
+ QString message = QDateTime::currentDateTime().toString();
+
+ // Depending on the QtMsgType prepend a different colored Debug, Warning, Critical or Fatal.
+ switch (type) {
+ case QtDebugMsg :
+ message += " <span style=\"font-weight:bold; color:black;\">Debug:</span> ";
+ break;
+ case QtWarningMsg :
+ message += " <span style=\"font-weight:bold; color:gold;\">Warning:</span> ";
+ break;
+ case QtCriticalMsg :
+ message += "<span style=\"font-weight:bold; color:red;\">Critical:</span> ";
+ break;
+ case QtFatalMsg :
+ message += " <span style=\"font-weight:bold; color:#D60000;\">Fatal:</span> ";
+ // This one is no Qt message type, but can be used to send info messages to the log
+ // by calling TSLogger::messageHandler() directly.
+ case TSLoggerInfoMsg :
+ message += " <span style=\"font-weight:bold; color:darkgray;\">Info:</span> ";
+ break;
+ }
+
+ // Append the to UTF-8 back converted message parameter.
+ message += QString::fromUtf8( msg ) + "<br/>\n";
+
+ // Write the message to the log windows text edit.
+ _instance->_TSLoggerDialogForm->logTextEdit->append( message );
+
+ // Write/append the log message to the log file.
+ _instance->writeToLogFile( message );
+
+ // In case of a fatal error abort the application.
+ if ( type == QtFatalMsg )
+ abort();
+}
+
+
+/*!
+ \brief Calling this the verbose level can be set in a range from 0 to 3
+ which is equal to debug, warning, critical and fatal priority.
+ */
+void TSLogger::setVerboseLevel(int level) {
+ if ( level < 0 )
+ _verboseLevel = QtDebugMsg;
+ if ( level > 3 )
+ _verboseLevel = QtFatalMsg;
+ else
+ _verboseLevel = QtMsgType(level);
+}
+
+
+/*!
+ \brief Deletes the existing _instance of TSLogger.
+ */
+void TSLogger::deleteInstance() {
+ if ( _instance != NULL ) {
+ delete _instance;
+ _instance = NULL;
+ }
+}
+
+
+/*!
+ \brief Opens the folder that contains the created log file with the name "UiGUI_log.html".
+ */
+void TSLogger::openLogFileFolder() {
+ QDesktopServices::openUrl( QFileInfo( _logFile ).absolutePath() );
+}
+
+
+/*!
+ \brief Writes the \a message to the used log file.
+ */
+void TSLogger::writeToLogFile(const QString &message) {
+ // If the file where all logging messages should go to isn't initilized yet, do that now.
+ if ( _logFileInitState == NOTINITIALZED ) {
+ _logFileInitState = INITIALIZING;
+
+ // On different systems it may be that "QDir::tempPath()" ends with a "/" or not. So check this.
+ // Remove any trailing slashes.
+ QString tempPath = QFileInfo( SettingsPaths::getTempPath() ).absolutePath();
+ while ( tempPath.right(1) == "/" ) {
+ tempPath.chop(1);
+ }
+
+ // To make the temporary log file invulnerable against file symbolic link hacks
+ // append the current date and time up to milliseconds to its name and a random character.
+ QString logFileName = "UiGUI_log_" + QDateTime::currentDateTime().toString("yyyyMMdd");
+ logFileName += "-" + QDateTime::currentDateTime().toString("hhmmsszzz");
+ // By random decide whether to append a number or an upper or lower case character.
+ qsrand( time(NULL) );
+ unsigned char randomChar;
+ switch ( qrand() % 3 ) {
+ // Append a number from 0 to 9.
+ case 0 :
+ randomChar = qrand() % 10 + '0';
+ break;
+ // Append a upper case characer between A and Z.
+ case 1 :
+ randomChar = qrand() % 26 + 'A';
+ break;
+ // Append a lower case characer between a and z.
+ default :
+ randomChar = qrand() % 26 + 'a';
+ break;
+ }
+ logFileName += "_" + QString(randomChar) + ".html";
+
+ _logFile.setFileName( tempPath + "/" + logFileName );
+
+ // Set the tooltip of the open log file folder button to show the unique name of the log file.
+ _TSLoggerDialogForm->openLogFileFolderToolButton->setToolTip( _TSLoggerDialogForm->openLogFileFolderToolButton->toolTip() + " (" + logFileName + ")" );
+
+ _logFileInitState = INITIALZED;
+ }
+
+ // Add the message to the message queue.
+ _messageQueue << message;
+
+ // If the logging file is initialzed, write all messages contained in the message queue into the file.
+ if ( _logFileInitState == INITIALZED ) {
+ // Write/append the log message to the log file.
+ if ( _logFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append) ) {
+ QTextStream out(&_logFile);
+
+ while ( !_messageQueue.isEmpty() ) {
+ out << _messageQueue.takeFirst() << "\n";
+ }
+
+ _logFile.close();
+ }
+ }
+}
diff --git a/src/debugging/.svn/text-base/TSLogger.h.svn-base b/src/debugging/.svn/text-base/TSLogger.h.svn-base
new file mode 100755
index 0000000..c7e7e62
--- /dev/null
+++ b/src/debugging/.svn/text-base/TSLogger.h.svn-base
@@ -0,0 +1,63 @@
+/***************************************************************************
+ * Copyright (C) 2006-2012 by Thomas Schweitzer *
+ * thomas-schweitzer(at)arcor.de *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License version 2.0 as *
+ * published by the Free Software Foundation. *
+ * *
+ * 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 in the file LICENSE.GPL; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef TSLogger_H
+#define TSLogger_H
+
+#include <QDialog>
+#include <QFile>
+
+namespace Ui {
+ class TSLoggerDialog;
+}
+
+namespace tschweitzer { namespace debugging {
+
+#define TSLoggerInfoMsg QtMsgType(4)
+
+class TSLogger : public QDialog
+{
+ Q_OBJECT
+
+public:
+ static TSLogger* getInstance(int verboseLevel);
+ static TSLogger* getInstance();
+ static void messageHandler(QtMsgType type, const char *msg);
+ static void deleteInstance();
+ void setVerboseLevel(int level);
+
+private slots:
+ void openLogFileFolder();
+
+private:
+ Ui::TSLoggerDialog *_TSLoggerDialogForm;
+
+ enum LogFileInitState { NOTINITIALZED, INITIALIZING, INITIALZED } _logFileInitState;
+ TSLogger(int verboseLevel);
+ void writeToLogFile(const QString &message);
+
+ static TSLogger* _instance;
+ QtMsgType _verboseLevel;
+ QFile _logFile;
+ QStringList _messageQueue;
+};
+
+}} // namespace tschweitzer::debugging
+
+#endif // TSLogger_H
diff --git a/src/debugging/.svn/text-base/TSLoggerDialog.ui.svn-base b/src/debugging/.svn/text-base/TSLoggerDialog.ui.svn-base
new file mode 100755
index 0000000..3a83146
--- /dev/null
+++ b/src/debugging/.svn/text-base/TSLoggerDialog.ui.svn-base
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TSLoggerDialog</class>
+ <widget class="QDialog" name="TSLoggerDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1030</width>
+ <height>263</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Log</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../resources/Icons.qrc">
+ <normaloff>:/mainWindow/document-properties.png</normaloff>:/mainWindow/document-properties.png</iconset>
+ </property>
+ <layout class="QVBoxLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Logged messages</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QTextEdit" name="logTextEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QToolButton" name="cleanUpToolButton">
+ <property name="toolTip">
+ <string>Clear log</string>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../resources/Icons.qrc">
+ <normaloff>:/mainWindow/edit-clear.png</normaloff>:/mainWindow/edit-clear.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="openLogFileFolderToolButton">
+ <property name="toolTip">
+ <string>Open folder containing log file.</string>
+ </property>
+ <property name="statusTip">
+ <string>Open folder containing log file.</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../resources/Icons.qrc">
+ <normaloff>:/mainWindow/document-open.png</normaloff>:/mainWindow/document-open.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../resources/Icons.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>TSLoggerDialog</sender>
+ <signal>finished(int)</signal>
+ <receiver>TSLoggerDialog</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>2</x>
+ <y>45</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>5</x>
+ <y>59</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>clicked(QAbstractButton*)</signal>
+ <receiver>TSLoggerDialog</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>419</x>
+ <y>280</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>477</x>
+ <y>263</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>cleanUpToolButton</sender>
+ <signal>clicked()</signal>
+ <receiver>logTextEdit</receiver>
+ <slot>clear()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>27</x>
+ <y>282</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>22</x>
+ <y>231</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>