1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>ARC Graphical Clients: /home/jonas/Development/arc-gui-clients/src/arcstat-ui/qdebugstream.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.1 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<img id="MSearchSelect" src="search/search.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</div>
</li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File List</span></a></li>
</ul>
</div>
<h1>/home/jonas/Development/arc-gui-clients/src/arcstat-ui/qdebugstream.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef QDEBUGSTREAM_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define QDEBUGSTREAM_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="comment">//################</span>
<a name="l00005"></a>00005 <span class="comment">//# qdebugstream.h #</span>
<a name="l00006"></a>00006 <span class="comment">//################</span>
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="preprocessor">#include <iostream></span>
<a name="l00009"></a>00009 <span class="preprocessor">#include <streambuf></span>
<a name="l00010"></a>00010 <span class="preprocessor">#include <string></span>
<a name="l00011"></a>00011 <span class="preprocessor">#include <QMutex></span>
<a name="l00012"></a>00012 <span class="preprocessor">#include <QMutexLocker></span>
<a name="l00013"></a>00013 <span class="preprocessor">#include <QString></span>
<a name="l00014"></a>00014 <span class="preprocessor">#include <QMainWindow></span>
<a name="l00015"></a>00015 <span class="preprocessor">#include <QApplication></span>
<a name="l00016"></a>00016
<a name="l00017"></a>00017 <span class="preprocessor">#include "qtextedit.h"</span>
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="preprocessor">#include <QCustomEvent></span>
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <span class="comment">// Define your custom event identifier</span>
<a name="l00022"></a>00022 <span class="keyword">const</span> QEvent::Type DEBUG_STREAM_EVENT = <span class="keyword">static_cast<</span>QEvent::Type<span class="keyword">></span>(QEvent::User + 1);
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="comment">// Define your custom event subclass</span>
<a name="l00025"></a>00025 <span class="keyword">class </span><a class="code" href="classDebugStreamEvent.html">DebugStreamEvent</a> : <span class="keyword">public</span> QEvent
<a name="l00026"></a>00026 {
<a name="l00027"></a>00027 <span class="keyword">public</span>:
<a name="l00028"></a>00028 <a class="code" href="classDebugStreamEvent.html">DebugStreamEvent</a>(<span class="keyword">const</span> QString& outputText):
<a name="l00029"></a>00029 QEvent(DEBUG_STREAM_EVENT),
<a name="l00030"></a>00030 m_outputText(outputText)
<a name="l00031"></a>00031 {
<a name="l00032"></a>00032 }
<a name="l00033"></a>00033
<a name="l00034"></a>00034 QString getOutputText()<span class="keyword"> const</span>
<a name="l00035"></a>00035 <span class="keyword"> </span>{
<a name="l00036"></a>00036 <span class="keywordflow">return</span> m_outputText;
<a name="l00037"></a>00037 }
<a name="l00038"></a>00038
<a name="l00039"></a>00039 <span class="keyword">private</span>:
<a name="l00040"></a>00040 QString m_outputText;
<a name="l00041"></a>00041 };
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <span class="keyword">class </span><a class="code" href="classQDebugStream.html">QDebugStream</a> : <span class="keyword">public</span> std::basic_streambuf<char>
<a name="l00044"></a>00044 {
<a name="l00045"></a>00045 <span class="keyword">public</span>:
<a name="l00046"></a>00046 <a class="code" href="classQDebugStream.html">QDebugStream</a>(std::ostream &stream, QMainWindow* mainWindow) : m_stream(stream)
<a name="l00047"></a>00047 {
<a name="l00048"></a>00048 m_mainWindow = mainWindow;
<a name="l00049"></a>00049 m_old_buf = stream.rdbuf();
<a name="l00050"></a>00050 stream.rdbuf(<span class="keyword">this</span>);
<a name="l00051"></a>00051 }
<a name="l00052"></a>00052 ~<a class="code" href="classQDebugStream.html">QDebugStream</a>()
<a name="l00053"></a>00053 {
<a name="l00054"></a>00054 <span class="comment">// output anything that is left</span>
<a name="l00055"></a>00055 QMutexLocker locker(&m_mutex);
<a name="l00056"></a>00056 <span class="keywordflow">if</span> (!m_string.empty()) {
<a name="l00057"></a>00057
<a name="l00058"></a>00058 QString appendString = m_string.c_str();
<a name="l00059"></a>00059 QApplication::postEvent(m_mainWindow, <span class="keyword">new</span> <a class="code" href="classDebugStreamEvent.html">DebugStreamEvent</a>(appendString));
<a name="l00060"></a>00060 <span class="comment">//log_window->append(appendString);</span>
<a name="l00061"></a>00061 }
<a name="l00062"></a>00062
<a name="l00063"></a>00063 m_stream.rdbuf(m_old_buf);
<a name="l00064"></a>00064 }
<a name="l00065"></a>00065
<a name="l00066"></a>00066 <span class="keyword">protected</span>:
<a name="l00067"></a>00067 <span class="keyword">virtual</span> int_type overflow(int_type v)
<a name="l00068"></a>00068 {
<a name="l00069"></a>00069 QMutexLocker locker(&m_mutex);
<a name="l00070"></a>00070 <span class="keywordflow">if</span> (v == <span class="charliteral">'\n'</span>)
<a name="l00071"></a>00071 {
<a name="l00072"></a>00072 QString appendString = m_string.c_str();
<a name="l00073"></a>00073 <span class="comment">//log_window->append(appendString);</span>
<a name="l00074"></a>00074 QApplication::postEvent(m_mainWindow, <span class="keyword">new</span> <a class="code" href="classDebugStreamEvent.html">DebugStreamEvent</a>(appendString));
<a name="l00075"></a>00075 <span class="comment">// Scroll to bottom of window</span>
<a name="l00076"></a>00076
<a name="l00077"></a>00077 <span class="comment">//log_window->moveCursor(QTextCursor::End);</span>
<a name="l00078"></a>00078 <span class="comment">//log_window->moveCursor(QTextCursor::StartOfLine);</span>
<a name="l00079"></a>00079
<a name="l00080"></a>00080 m_string.erase(m_string.begin(), m_string.end());
<a name="l00081"></a>00081 }
<a name="l00082"></a>00082 <span class="keywordflow">else</span>
<a name="l00083"></a>00083 m_string += v;
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keywordflow">return</span> v;
<a name="l00086"></a>00086 }
<a name="l00087"></a>00087
<a name="l00088"></a>00088 <span class="keyword">virtual</span> std::streamsize xsputn(<span class="keyword">const</span> <span class="keywordtype">char</span> *p, std::streamsize n)
<a name="l00089"></a>00089 {
<a name="l00090"></a>00090 QMutexLocker locker(&m_mutex);
<a name="l00091"></a>00091
<a name="l00092"></a>00092 m_string.append(p, p + n);
<a name="l00093"></a>00093
<a name="l00094"></a>00094 std::string::size_type pos = 0;
<a name="l00095"></a>00095 <span class="keywordflow">while</span> (pos != std::string::npos)
<a name="l00096"></a>00096 {
<a name="l00097"></a>00097 pos = m_string.find(<span class="charliteral">'\n'</span>);
<a name="l00098"></a>00098 <span class="keywordflow">if</span> (pos != std::string::npos)
<a name="l00099"></a>00099 {
<a name="l00100"></a>00100 std::string tmp(m_string.begin(), m_string.begin() + pos);
<a name="l00101"></a>00101 QString appendString = tmp.c_str();
<a name="l00102"></a>00102 QApplication::postEvent(m_mainWindow, <span class="keyword">new</span> <a class="code" href="classDebugStreamEvent.html">DebugStreamEvent</a>(appendString));
<a name="l00103"></a>00103 <span class="comment">//log_window->append(appendString);</span>
<a name="l00104"></a>00104 qDebug() << appendString;
<a name="l00105"></a>00105
<a name="l00106"></a>00106 <span class="comment">// Scroll to bottom of window</span>
<a name="l00107"></a>00107
<a name="l00108"></a>00108 <span class="comment">//log_window->moveCursor(QTextCursor::End);</span>
<a name="l00109"></a>00109 <span class="comment">//log_window->moveCursor(QTextCursor::StartOfLine);</span>
<a name="l00110"></a>00110
<a name="l00111"></a>00111 m_string.erase(m_string.begin(), m_string.begin() + pos + 1);
<a name="l00112"></a>00112 }
<a name="l00113"></a>00113 }
<a name="l00114"></a>00114
<a name="l00115"></a>00115 <span class="keywordflow">return</span> n;
<a name="l00116"></a>00116 }
<a name="l00117"></a>00117
<a name="l00118"></a>00118 <span class="keyword">private</span>:
<a name="l00119"></a>00119 std::ostream &m_stream;
<a name="l00120"></a>00120 std::streambuf *m_old_buf;
<a name="l00121"></a>00121 std::string m_string;
<a name="l00122"></a>00122 QMainWindow* m_mainWindow;
<a name="l00123"></a>00123 QMutex m_mutex;
<a name="l00124"></a>00124 };
<a name="l00125"></a>00125
<a name="l00126"></a>00126 <span class="preprocessor">#endif // QDEBUGSTREAM_H</span>
</pre></div></div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Variables</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 19 Feb 2013 for ARC Graphical Clients by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>
|