]> git.cworth.org Git - apitrace/blobdiff - gui/loaderthread.cpp
Change filterText to searchText
[apitrace] / gui / loaderthread.cpp
index 207c2a5def9f2eecd0f4e071fece2e7baab3d9e2..de5e3f85ec4d40a3e4144a71b58222a7c9da05c8 100644 (file)
@@ -2,30 +2,21 @@
 
 #include "trace_parser.hpp"
 
+#include <QFile>
+#include <QHash>
+#include <QUrl>
+
+#include <QDebug>
+
 #define FRAMES_TO_CACHE 100
 
 static ApiTraceCall *
-apiCallFromTraceCall(const Trace::Call *call)
+apiCallFromTraceCall(const Trace::Call *call,
+                     const QHash<QString, QUrl> &helpHash)
 {
-    ApiTraceCall *apiCall = new ApiTraceCall();
-    apiCall->name = QString::fromStdString(call->sig->name);
-    apiCall->index = call->no;
-
-    QString argumentsText;
-    for (int i = 0; i < call->sig->arg_names.size(); ++i) {
-        apiCall->argNames +=
-            QString::fromStdString(call->sig->arg_names[i]);
-    }
-    if (call->ret) {
-        VariantVisitor retVisitor;
-        call->ret->visit(retVisitor);
-        apiCall->returnValue = retVisitor.variant();
-    }
-    for (int i = 0; i < call->args.size(); ++i) {
-        VariantVisitor argVisitor;
-        call->args[i]->visit(argVisitor);
-        apiCall->argValues += argVisitor.variant();
-    }
+    ApiTraceCall *apiCall = new ApiTraceCall(call);
+
+    apiCall->setHelpUrl(helpHash.value(apiCall->name()));
 
     return apiCall;
 }
@@ -41,10 +32,29 @@ void LoaderThread::run()
     QList<ApiTraceFrame*> frames;
     ApiTraceFrame *currentFrame = 0;
     int frameCount = 0;
+
+    QHash<QString, QUrl> helpHash;
+
+
+    QFile file(":/resources/glreference.tsv");
+    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+        QString line;
+        while (!file.atEnd()) {
+            line = file.readLine();
+            QString function = line.section('\t', 0, 0).trimmed();
+            QUrl url = QUrl(line.section('\t', 1, 1).trimmed());
+            //qDebug()<<"function = "<<function<<", url = "<<url.toString();
+            helpHash.insert(function, url);
+        }
+    } else {
+        qWarning() << "Couldn't open reference file "
+                   << file.fileName();
+    }
+    file.close();
+
     Trace::Parser p;
     if (p.open(m_fileName.toLatin1().constData())) {
-        Trace::Call *call;
-        call = p.parse_call();
+        Trace::Call *call = p.parse_call();
         while (call) {
             //std::cout << *call;
             if (!currentFrame) {
@@ -53,9 +63,9 @@ void LoaderThread::run()
                 ++frameCount;
             }
             ApiTraceCall *apiCall =
-                apiCallFromTraceCall(call);
-            apiCall->parentFrame = currentFrame;
-            currentFrame->calls.append(apiCall);
+                apiCallFromTraceCall(call, helpHash);
+            apiCall->setParentFrame(currentFrame);
+            currentFrame->addCall(apiCall);
             if (ApiTrace::isCallAFrameMarker(apiCall,
                                              m_frameMarker)) {
                 frames.append(currentFrame);
@@ -65,6 +75,7 @@ void LoaderThread::run()
                     frames.clear();
                 }
             }
+            delete call;
             call = p.parse_call();
         }
     }