summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2014-09-25 15:19:09 +0100
committerJosé Fonseca <jfonseca@vmware.com>2014-09-26 21:00:33 +0100
commitd5cda7c23f274c5be0ff0e47f711fd2be53de268 (patch)
tree98edb363e246b7f3ca675bc5730b26eb1a0ef52b /gui
parent20a1521efdac44c8219f00c2414de031891fb464 (diff)
trace: Serialize wide-strings properly.
Wide strings are only used by DirectX APIs, mostly for descriptions, but it's still useful to be able to read them. I'm split on whether to bump the trace format version or not. OpenGL traces are unaffected.
Diffstat (limited to 'gui')
-rw-r--r--gui/CMakeLists.txt5
-rw-r--r--gui/apitracecall.cpp5
-rw-r--r--gui/apitracecall.h1
-rw-r--r--gui/saverthread.cpp10
4 files changed, 21 insertions, 0 deletions
diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt
index ad13475e..97e41eb2 100644
--- a/gui/CMakeLists.txt
+++ b/gui/CMakeLists.txt
@@ -1,3 +1,8 @@
+if (MSVC)
+ # http://qt-project.org/forums/viewthread/23714
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:wchar_t-")
+endif ()
+
# Include the cmake file needed to use qt4
include( ${QT_USE_FILE} )
diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp
index 59cc7e60..fe30947b 100644
--- a/gui/apitracecall.cpp
+++ b/gui/apitracecall.cpp
@@ -188,6 +188,11 @@ void VariantVisitor::visit(trace::String *node)
m_variant = QVariant(QString::fromLatin1(node->value));
}
+void VariantVisitor::visit(trace::WString *node)
+{
+ m_variant = QVariant(QString::fromWCharArray(node->value));
+}
+
void VariantVisitor::visit(trace::Enum *e)
{
ApiTraceEnumSignature *sig = 0;
diff --git a/gui/apitracecall.h b/gui/apitracecall.h
index 46ead63e..5c2b20dd 100644
--- a/gui/apitracecall.h
+++ b/gui/apitracecall.h
@@ -27,6 +27,7 @@ public:
virtual void visit(trace::Float *node);
virtual void visit(trace::Double *node);
virtual void visit(trace::String *node);
+ virtual void visit(trace::WString *node);
virtual void visit(trace::Enum *e);
virtual void visit(trace::Bitmask *bitmask);
virtual void visit(trace::Struct *str);
diff --git a/gui/saverthread.cpp b/gui/saverthread.cpp
index 4ad83c58..990aeeec 100644
--- a/gui/saverthread.cpp
+++ b/gui/saverthread.cpp
@@ -253,6 +253,16 @@ public:
m_editedValue = new trace::String(newString);
}
+ virtual void visit(trace::WString *node)
+ {
+ QString str = m_variant.toString();
+ size_t len = str.length();
+ wchar_t *newString = new wchar_t[len + 1];
+ str.toWCharArray(newString);
+ newString[len] = 0;
+ m_editedValue = new trace::WString(newString);
+ }
+
virtual void visit(trace::Enum *e)
{
m_editedValue = e;