]> git.cworth.org Git - apitrace/blob - gui/main.cpp
qapitrace: Support executing glretrace on a remote target host.
[apitrace] / gui / main.cpp
1 #include "mainwindow.h"
2
3 #include "apitrace.h"
4 #include "apitracecall.h"
5
6 #include "os_string.hpp"
7 #include "os_process.hpp"
8
9 #include <QApplication>
10 #include <QMetaType>
11 #include <QVariant>
12 #include <QImage>
13
14 #include <stdio.h>
15
16 Q_DECLARE_METATYPE(QList<ApiTraceFrame*>);
17 Q_DECLARE_METATYPE(QVector<ApiTraceCall*>);
18 Q_DECLARE_METATYPE(Qt::CaseSensitivity);
19 Q_DECLARE_METATYPE(ApiTrace::SearchResult);
20 Q_DECLARE_METATYPE(ApiTrace::SearchRequest);
21 Q_DECLARE_METATYPE(QList<QImage>);
22
23 static void usage(void)
24 {
25     qWarning("usage: qapitrace [options] [TRACE] [CALLNO]\n"
26              "Valid options include:\n"
27              "    -h, --help            Print this help message\n"
28              "    --remote-target HOST  Replay trace on remote target HOST\n");
29 }
30
31 int main(int argc, char **argv)
32 {
33     QApplication::setGraphicsSystem("raster");
34     QApplication app(argc, argv);
35
36     qRegisterMetaType<QList<ApiTraceFrame*> >();
37     qRegisterMetaType<QVector<ApiTraceCall*> >();
38     qRegisterMetaType<ApiTraceState>();
39     qRegisterMetaType<Qt::CaseSensitivity>();
40     qRegisterMetaType<ApiTrace::SearchResult>();
41     qRegisterMetaType<ApiTrace::SearchRequest>();
42     qRegisterMetaType<QList<QImage> >();
43
44 #ifndef Q_OS_WIN
45     os::String currentProcess = os::getProcessName();
46     currentProcess.trimFilename();
47     QString path = qgetenv("PATH");
48     path = QLatin1String(currentProcess.str()) + QLatin1String(":") + path;
49     qputenv("PATH", path.toLatin1());
50 #endif
51
52     QStringList args = app.arguments();
53     QString remoteTarget;
54
55     int i = 1;
56     while (i < args.count()) {
57         QString arg = args[i];
58         if (arg[0] != QLatin1Char('-')) {
59             break;
60         }
61         ++i;
62         if (arg == QLatin1String("--")) {
63             break;
64         } else if (arg == QLatin1String("--remote-target")) {
65             if (i == args.count()) {
66                 qWarning("Option --remote-target requires an argument.\n");
67                 exit(1);
68             }
69             remoteTarget = args[i];
70             ++i;
71         } else if (arg == QLatin1String("-h") ||
72                    arg == QLatin1String("--help")) {
73             usage();
74             exit(0);
75         } else {
76             usage();
77             exit(1);
78         }
79     }
80
81     MainWindow window;
82     window.show();
83
84     if (i < args.count()) {
85         QString fileName = args[i++];
86
87         int callNum = -1;
88         if (i < args.count()) {
89             callNum = args[i++].toInt();
90         }
91         window.loadTrace(fileName, callNum);
92     }
93
94     if (remoteTarget.length()) {
95         window.setRemoteTarget(remoteTarget);
96     }
97
98     app.exec();
99 }