From d57aec979350fca16ee338ae94959f6b452523bb Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 11:48:04 -0800 Subject: [PATCH 1/8] don't use separate NodeList owner UUID and Avatar UUID --- assignment-client/src/Agent.cpp | 3 -- interface/src/Application.cpp | 5 +++ interface/src/avatar/Avatar.cpp | 9 ----- interface/src/avatar/Profile.cpp | 47 +++++++++++--------------- libraries/avatars/src/AvatarData.cpp | 13 ++----- libraries/avatars/src/AvatarData.h | 5 --- libraries/shared/src/NodeList.cpp | 6 ++++ libraries/shared/src/NodeList.h | 2 ++ libraries/shared/src/PacketHeaders.cpp | 2 +- 9 files changed, 37 insertions(+), 55 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 913f22be18..f4f9d6fb69 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -97,9 +97,6 @@ void Agent::run() { // setup an Avatar for the script to use AvatarData scriptedAvatar; - // match the scripted avatar's UUID to the DataServerScriptingInterface UUID - scriptedAvatar.setUUID(_scriptEngine.getDataServerScriptingInterface().getUUID()); - // give this AvatarData object to the script engine _scriptEngine.setAvatarData(&scriptedAvatar, "Avatar"); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b59893a10e..268df17ffd 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3913,6 +3913,11 @@ void Application::setMenuShortcutsEnabled(bool enabled) { void Application::attachNewHeadToNode(Node* newNode) { if (newNode->getLinkedData() == NULL) { newNode->setLinkedData(new Avatar(newNode)); + + // new UUID requires mesh and skeleton request to data-server + DataServerClient::getValuesForKeysAndUUID(QStringList() << DataServerKey::FaceMeshURL << DataServerKey::SkeletonURL, + newNode->getUUID(), Application::getInstance()->getProfile()); + } } diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 30de5b1e2a..7705a5d03e 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -345,20 +345,11 @@ int Avatar::parseData(unsigned char* sourceBuffer, int numBytes) { // change in position implies movement glm::vec3 oldPosition = _position; - // change in UUID requires mesh and skeleton request to data-server - - QUuid oldUuid = _uuid; - int bytesRead = AvatarData::parseData(sourceBuffer, numBytes); const float MOVE_DISTANCE_THRESHOLD = 0.001f; _moving = glm::distance(oldPosition, _position) > MOVE_DISTANCE_THRESHOLD; - if (oldUuid != _uuid && !_uuid.isNull()) { - DataServerClient::getValuesForKeysAndUUID(QStringList() << DataServerKey::FaceMeshURL << DataServerKey::SkeletonURL, - _uuid, Application::getInstance()->getProfile()); - } - return bytesRead; } diff --git a/interface/src/avatar/Profile.cpp b/interface/src/avatar/Profile.cpp index 89ce750d68..dfd06daa4a 100644 --- a/interface/src/avatar/Profile.cpp +++ b/interface/src/avatar/Profile.cpp @@ -48,8 +48,8 @@ QString Profile::getUserString() const { void Profile::setUUID(const QUuid& uuid) { _uuid = uuid; - // when the UUID is changed we need set it appropriately on our avatar instance - Application::getInstance()->getAvatar()->setUUID(_uuid); + // when the UUID is changed we need set it appropriately on the NodeList instance + NodeList::getInstance()->setOwnerUUID(uuid); } void Profile::setFaceModelURL(const QUrl& faceModelURL) { @@ -156,19 +156,15 @@ void Profile::processDataServerResponse(const QString& userString, const QString Application::getInstance()->getProfile()->setFaceModelURL(QUrl(valueList[i])); } else { // mesh URL for a UUID, find avatar in our list - - foreach (const SharedNodePointer& node, NodeList::getInstance()->getNodeHash()) { - if (node->getLinkedData() != NULL && node->getType() == NODE_TYPE_AGENT) { - Avatar* avatar = (Avatar *) node->getLinkedData(); - - if (avatar->getUUID() == QUuid(userString)) { - qDebug() << "Changing mesh to" << valueList[i] << "for avatar with UUID" - << uuidStringWithoutCurlyBraces(avatar->getUUID()); - - QMetaObject::invokeMethod(&avatar->getHead().getFaceModel(), - "setURL", Q_ARG(QUrl, QUrl(valueList[i]))); - } - } + SharedNodePointer matchingNode = NodeList::getInstance()->nodeWithUUID(QUuid(userString)); + if (matchingNode && matchingNode->getType() == NODE_TYPE_AGENT) { + qDebug() << "Changing mesh to" << valueList[i] << "for avatar with UUID" + << uuidStringWithoutCurlyBraces(matchingNode->getUUID()); + + Avatar* avatar = (Avatar *) matchingNode->getLinkedData(); + + QMetaObject::invokeMethod(&avatar->getHead().getFaceModel(), + "setURL", Q_ARG(QUrl, QUrl(valueList[i]))); } } } else if (keyList[i] == DataServerKey::SkeletonURL) { @@ -177,18 +173,15 @@ void Profile::processDataServerResponse(const QString& userString, const QString Application::getInstance()->getProfile()->setSkeletonModelURL(QUrl(valueList[i])); } else { // skeleton URL for a UUID, find avatar in our list - foreach (const SharedNodePointer& node, NodeList::getInstance()->getNodeHash()) { - if (node->getLinkedData() != NULL && node->getType() == NODE_TYPE_AGENT) { - Avatar* avatar = (Avatar *) node->getLinkedData(); - - if (avatar->getUUID() == QUuid(userString)) { - qDebug() << "Changing skeleton to" << valueList[i] << "for avatar with UUID" - << uuidStringWithoutCurlyBraces(avatar->getUUID()); - - QMetaObject::invokeMethod(&avatar->getSkeletonModel(), "setURL", - Q_ARG(QUrl, QUrl(valueList[i]))); - } - } + SharedNodePointer matchingNode = NodeList::getInstance()->nodeWithUUID(QUuid(userString)); + if (matchingNode && matchingNode->getType() == NODE_TYPE_AGENT) { + qDebug() << "Changing skeleton to" << valueList[i] << "for avatar with UUID" + << uuidStringWithoutCurlyBraces(matchingNode->getUUID()); + + Avatar* avatar = (Avatar *) matchingNode->getLinkedData(); + + QMetaObject::invokeMethod(&avatar->getSkeletonModel(), + "setURL", Q_ARG(QUrl, QUrl(valueList[i]))); } } } else if (keyList[i] == DataServerKey::Domain && keyList[i + 1] == DataServerKey::Position && diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 35e6c37e96..a0dea1743e 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -24,7 +24,6 @@ static const float fingerVectorRadix = 4; // bits of precision when converting f AvatarData::AvatarData(Node* owningNode) : NodeData(owningNode), - _uuid(), _handPosition(0,0,0), _bodyYaw(-90.0), _bodyPitch(0.0), @@ -69,10 +68,8 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { _handData = new HandData(this); } - // UUID - QByteArray uuidByteArray = _uuid.toRfc4122(); - memcpy(destinationBuffer, uuidByteArray.constData(), uuidByteArray.size()); - destinationBuffer += uuidByteArray.size(); + // pack the NodeList owner UUID + destinationBuffer += NodeList::getInstance()->packOwnerUUID(destinationBuffer); // Body world position memcpy(destinationBuffer, &_position, sizeof(float) * 3); @@ -180,11 +177,7 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { // push past the node session UUID sourceBuffer += NUM_BYTES_RFC4122_UUID; - - // user UUID - _uuid = QUuid::fromRfc4122(QByteArray((char*) sourceBuffer, NUM_BYTES_RFC4122_UUID)); - sourceBuffer += NUM_BYTES_RFC4122_UUID; - + // Body world position memcpy(&_position, sourceBuffer, sizeof(float) * 3); sourceBuffer += sizeof(float) * 3; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 0005d1eb11..ac0d198fc9 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -82,9 +82,6 @@ public: int getBroadcastData(unsigned char* destinationBuffer); int parseData(unsigned char* sourceBuffer, int numBytes); - QUuid& getUUID() { return _uuid; } - void setUUID(const QUuid& uuid) { _uuid = uuid; } - // Body Rotation float getBodyYaw() const { return _bodyYaw; } void setBodyYaw(float bodyYaw) { _bodyYaw = bodyYaw; } @@ -137,8 +134,6 @@ public: } protected: - QUuid _uuid; - glm::vec3 _position; glm::vec3 _handPosition; diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index f33137a092..f37f2b48dc 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -642,6 +642,12 @@ void NodeList::sendAssignment(Assignment& assignment) { assignmentServerSocket->getPort()); } +int NodeList::packOwnerUUID(unsigned char* packetData) { + QByteArray rfcUUID = _ownerUUID.toRfc4122(); + memcpy(packetData, rfcUUID.constData(), rfcUUID.size()); + return rfcUUID.size(); +} + int NodeList::fillPingPacket(unsigned char* buffer) { int numHeaderBytes = populateTypeAndVersion(buffer, PACKET_TYPE_PING); uint64_t currentTime = usecTimestampNow(); diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index b5e27564b1..9ac6c5970c 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -96,6 +96,8 @@ public: void setAssignmentServerSocket(const HifiSockAddr& serverSocket) { _assignmentServerSocket = serverSocket; } void sendAssignment(Assignment& assignment); + + int packOwnerUUID(unsigned char* packetData); int fillPingPacket(unsigned char* buffer); int fillPingReplyPacket(unsigned char* pingBuffer, unsigned char* replyBuffer); diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index 83dbf4654f..e3659a3e7d 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -20,7 +20,7 @@ PACKET_VERSION versionForPacketType(PACKET_TYPE type) { return 2; case PACKET_TYPE_HEAD_DATA: - return 15; + return 16; case PACKET_TYPE_OCTREE_STATS: return 2; From a9ce6c7467edacb7e278b80c7ad1104ff3e1face Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 12:00:26 -0800 Subject: [PATCH 2/8] use NodeList ownerUUID for DataServerScriptingInterface, fix double UUID send --- interface/src/Application.cpp | 7 ++----- libraries/avatars/src/AvatarData.cpp | 3 --- .../script-engine/src/DataServerScriptingInterface.cpp | 6 +++--- libraries/script-engine/src/DataServerScriptingInterface.h | 5 ----- libraries/script-engine/src/ScriptEngine.cpp | 5 ++--- 5 files changed, 7 insertions(+), 19 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 268df17ffd..678c7ab647 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2494,17 +2494,14 @@ void Application::updateAvatar(float deltaTime) { // Get audio loudness data from audio input device _myAvatar.getHead().setAudioLoudness(_audio.getLastInputLoudness()); - NodeList* nodeList = NodeList::getInstance(); - // send head/hand data to the avatar mixer and voxel server unsigned char broadcastString[MAX_PACKET_SIZE]; unsigned char* endOfBroadcastStringWrite = broadcastString; endOfBroadcastStringWrite += populateTypeAndVersion(endOfBroadcastStringWrite, PACKET_TYPE_HEAD_DATA); - QByteArray ownerUUID = nodeList->getOwnerUUID().toRfc4122(); - memcpy(endOfBroadcastStringWrite, ownerUUID.constData(), ownerUUID.size()); - endOfBroadcastStringWrite += ownerUUID.size(); + // pack the NodeList owner UUID + endOfBroadcastStringWrite += NodeList::getInstance()->packOwnerUUID(endOfBroadcastStringWrite); endOfBroadcastStringWrite += _myAvatar.getBroadcastData(endOfBroadcastStringWrite); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index a0dea1743e..1ae44bb57a 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -68,9 +68,6 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { _handData = new HandData(this); } - // pack the NodeList owner UUID - destinationBuffer += NodeList::getInstance()->packOwnerUUID(destinationBuffer); - // Body world position memcpy(destinationBuffer, &_position, sizeof(float) * 3); destinationBuffer += sizeof(float) * 3; diff --git a/libraries/script-engine/src/DataServerScriptingInterface.cpp b/libraries/script-engine/src/DataServerScriptingInterface.cpp index 236f46e54c..6effd7ebdc 100644 --- a/libraries/script-engine/src/DataServerScriptingInterface.cpp +++ b/libraries/script-engine/src/DataServerScriptingInterface.cpp @@ -7,15 +7,15 @@ // #include +#include #include "DataServerScriptingInterface.h" -DataServerScriptingInterface::DataServerScriptingInterface() : - _uuid(QUuid::createUuid()) +DataServerScriptingInterface::DataServerScriptingInterface() { } void DataServerScriptingInterface::setValueForKey(const QString& key, const QString& value) { - DataServerClient::putValueForKeyAndUUID(key, value, _uuid); + DataServerClient::putValueForKeyAndUUID(key, value, NodeList::getInstance()->getOwnerUUID()); } \ No newline at end of file diff --git a/libraries/script-engine/src/DataServerScriptingInterface.h b/libraries/script-engine/src/DataServerScriptingInterface.h index 8bd3eea565..b46c0bda7a 100644 --- a/libraries/script-engine/src/DataServerScriptingInterface.h +++ b/libraries/script-engine/src/DataServerScriptingInterface.h @@ -18,13 +18,8 @@ class DataServerScriptingInterface : public QObject { public: DataServerScriptingInterface(); - void refreshUUID() { _uuid = QUuid::createUuid(); } - const QUuid& getUUID() const { return _uuid; } - public slots: void setValueForKey(const QString& key, const QString& value); -private: - QUuid _uuid; }; #endif /* defined(__hifi__DataServerScriptingInterface__) */ diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index a5cb903320..8bb83db2d8 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -41,6 +41,7 @@ static QScriptValue soundConstructor(QScriptContext* context, QScriptEngine* eng ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, const QString& fileNameString, AbstractMenuInterface* menu, AbstractControllerScriptingInterface* controllerScriptingInterface) : + _dataServerScriptingInterface(), _avatarData(NULL) { _scriptContents = scriptContents; @@ -249,9 +250,7 @@ void ScriptEngine::run() { numAvatarHeaderBytes = populateTypeAndVersion(avatarPacket, PACKET_TYPE_HEAD_DATA); // pack the owner UUID for this script - QByteArray ownerUUID = nodeList->getOwnerUUID().toRfc4122(); - memcpy(avatarPacket + numAvatarHeaderBytes, ownerUUID.constData(), ownerUUID.size()); - numAvatarHeaderBytes += ownerUUID.size(); + numAvatarHeaderBytes += NodeList::getInstance()->packOwnerUUID(avatarPacket); } int numAvatarPacketBytes = _avatarData->getBroadcastData(avatarPacket + numAvatarHeaderBytes) + numAvatarHeaderBytes; From d307412183fab39ee456bf4a100251c1081ce928 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 12:01:15 -0800 Subject: [PATCH 3/8] remove preEvaluateReset in ScriptEngine --- libraries/script-engine/src/ScriptEngine.cpp | 4 ---- libraries/script-engine/src/ScriptEngine.h | 1 - 2 files changed, 5 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 8bb83db2d8..c982e91b59 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -158,10 +158,6 @@ void ScriptEngine::registerGlobalObject(const QString& name, QObject* object) { _engine.globalObject().setProperty(name, value); } -void ScriptEngine::preEvaluateReset() { - _dataServerScriptingInterface.refreshUUID(); -} - void ScriptEngine::evaluate() { if (!_isInitialized) { init(); diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index ab0129bc6f..b36e2425fe 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -74,7 +74,6 @@ signals: void finished(const QString& fileNameString); protected: - void preEvaluateReset(); QString _scriptContents; bool _isFinished; From fb0f28cd7ca5383febe34b905b44f0f2bff7eff9 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 13:46:37 -0800 Subject: [PATCH 4/8] fix LogDialog deadlock by removing unneeded mutex, closes #1624 --- interface/src/ui/LogDialog.cpp | 6 +----- interface/src/ui/LogDialog.h | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/interface/src/ui/LogDialog.cpp b/interface/src/ui/LogDialog.cpp index b532c0fe52..474b4f034e 100644 --- a/interface/src/ui/LogDialog.cpp +++ b/interface/src/ui/LogDialog.cpp @@ -97,7 +97,7 @@ void LogDialog::initControls() { } void LogDialog::showEvent(QShowEvent*) { - connect(_logger, SIGNAL(logReceived(QString)), this, SLOT(appendLogLine(QString))); + connect(_logger, SIGNAL(logReceived(QString)), this, SLOT(appendLogLine(QString)), Qt::QueuedConnection); showLogData(); } @@ -111,11 +111,9 @@ void LogDialog::resizeEvent(QResizeEvent*) { void LogDialog::appendLogLine(QString logLine) { if (isVisible()) { - _mutex.lock(); if (logLine.contains(_searchTerm, Qt::CaseInsensitive)) { _logTextBox->appendPlainText(logLine.simplified()); } - _mutex.unlock(); _logTextBox->ensureCursorVisible(); } } @@ -140,12 +138,10 @@ void LogDialog::handleSearchTextChanged(const QString searchText) { void LogDialog::showLogData() { _logTextBox->clear(); - _mutex.lock(); QStringList _logData = _logger->getLogData(); for (int i = 0; i < _logData.size(); ++i) { appendLogLine(_logData[i]); } - _mutex.unlock(); } KeywordHighlighter::KeywordHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent), keywordFormat() { diff --git a/interface/src/ui/LogDialog.h b/interface/src/ui/LogDialog.h index c8e7441d3c..17216db0c4 100644 --- a/interface/src/ui/LogDialog.h +++ b/interface/src/ui/LogDialog.h @@ -60,7 +60,6 @@ private: QCheckBox* _extraDebuggingBox; QPushButton* _revealLogButton; QPlainTextEdit* _logTextBox; - QMutex _mutex; QString _searchTerm; KeywordHighlighter* _highlighter; From d2e02c15d82c012ff6f91014f030924c4eca8725 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 14:17:56 -0800 Subject: [PATCH 5/8] repair the UpdateDialog so it is a QDialog with no child QWidget --- interface/CMakeLists.txt | 9 +++++- interface/src/Application.cpp | 3 +- interface/src/ui/UpdateDialog.cpp | 29 ++++++++++---------- interface/src/ui/UpdateDialog.h | 2 +- interface/{resources => }/ui/updateDialog.ui | 0 5 files changed, 25 insertions(+), 18 deletions(-) rename interface/{resources => }/ui/updateDialog.ui (100%) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index d05ea7a7c0..165c3c4c15 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -71,7 +71,6 @@ foreach(EXTERNAL_SOURCE_SUBDIR ${EXTERNAL_SOURCE_SUBDIRS}) set(INTERFACE_SRCS ${INTERFACE_SRCS} ${SUBDIR_SRCS}) endforeach(EXTERNAL_SOURCE_SUBDIR) - find_package(Qt5Core REQUIRED) find_package(Qt5Gui REQUIRED) find_package(Qt5Multimedia REQUIRED) @@ -83,6 +82,14 @@ find_package(Qt5WebKitWidgets REQUIRED) find_package(Qt5Xml REQUIRED) find_package(Qt5UiTools REQUIRED) +# grab the ui files in resources/ui +file (GLOB_RECURSE QT_UI_FILES ui/*.ui) +# have qt5 wrap them and generate the appropriate header files +qt5_wrap_ui(QT_UI_HEADERS ${QT_UI_FILES}) + +# add them to the interface source files +set(INTERFACE_SRCS ${INTERFACE_SRCS} ${QT_UI_HEADERS}) + if (APPLE) set(MACOSX_BUNDLE_BUNDLE_NAME Interface) # set how the icon shows up in the Info.plist file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 678c7ab647..78d65048bd 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4415,7 +4415,8 @@ bool Application::shouldSkipVersion(QString latestVersion) { QFile skipFile(SKIP_FILENAME); skipFile.open(QIODevice::ReadWrite); QString skipVersion(skipFile.readAll()); - return (skipVersion == latestVersion || applicationVersion() == "dev"); +// return (skipVersion == latestVersion || applicationVersion() == "dev"); + return false; } void Application::skipVersion(QString latestVersion) { diff --git a/interface/src/ui/UpdateDialog.cpp b/interface/src/ui/UpdateDialog.cpp index 12c5cd83e0..c13425be61 100644 --- a/interface/src/ui/UpdateDialog.cpp +++ b/interface/src/ui/UpdateDialog.cpp @@ -19,35 +19,34 @@ #include "SharedUtil.h" #include "UpdateDialog.h" +#include "ui_updateDialog.h" + UpdateDialog::UpdateDialog(QWidget *parent, const QString& releaseNotes, const QString& latestVersion, const QUrl& downloadURL) : - QWidget(parent, Qt::Widget), + QDialog(parent), _latestVersion(latestVersion), - _downloadUrl(downloadURL) { - - QUiLoader updateDialogLoader; - QWidget* updateDialog; - QFile updateDialogUi("resources/ui/updateDialog.ui"); - updateDialogUi.open(QFile::ReadOnly); - updateDialog = updateDialogLoader.load(&updateDialogUi, this); + _downloadUrl(downloadURL) +{ + Ui::Dialog dialogUI; + dialogUI.setupUi(this); QString updateRequired = QString("You are currently running build %1, the latest build released is %2. \ Please download and install the most recent release to access the latest features and bug fixes.") .arg(Application::getInstance()->applicationVersion(), latestVersion); + setAttribute(Qt::WA_DeleteOnClose); - updateDialog->setAttribute(Qt::WA_DeleteOnClose); - - QPushButton* downloadButton = updateDialog->findChild("downloadButton"); - QPushButton* skipButton = updateDialog->findChild("skipButton"); - QPushButton* closeButton = updateDialog->findChild("closeButton"); - QLabel* updateContent = updateDialog->findChild("updateContent"); + QPushButton* downloadButton = findChild("downloadButton"); + QPushButton* skipButton = findChild("skipButton"); + QPushButton* closeButton = findChild("closeButton"); + QLabel* updateContent = findChild("updateContent"); updateContent->setText(updateRequired); connect(downloadButton, SIGNAL(released()), this, SLOT(handleDownload())); connect(skipButton, SIGNAL(released()), this, SLOT(handleSkip())); connect(closeButton, SIGNAL(released()), this, SLOT(close())); - updateDialog->show(); + + QMetaObject::invokeMethod(this, "show", Qt::QueuedConnection); } void UpdateDialog::handleDownload() { diff --git a/interface/src/ui/UpdateDialog.h b/interface/src/ui/UpdateDialog.h index 1c4f5de9d0..14f4e6f39c 100644 --- a/interface/src/ui/UpdateDialog.h +++ b/interface/src/ui/UpdateDialog.h @@ -11,7 +11,7 @@ #include -class UpdateDialog : public QWidget { +class UpdateDialog : public QDialog { Q_OBJECT public: diff --git a/interface/resources/ui/updateDialog.ui b/interface/ui/updateDialog.ui similarity index 100% rename from interface/resources/ui/updateDialog.ui rename to interface/ui/updateDialog.ui From a0b859a8e3e00d2203227a430fede0f49da6771e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 14:19:57 -0800 Subject: [PATCH 6/8] remove unneeded includes in UpdateDialog --- interface/src/ui/UpdateDialog.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/interface/src/ui/UpdateDialog.cpp b/interface/src/ui/UpdateDialog.cpp index c13425be61..deb671427f 100644 --- a/interface/src/ui/UpdateDialog.cpp +++ b/interface/src/ui/UpdateDialog.cpp @@ -6,20 +6,13 @@ // Copyright (c) 2013, 2014 High Fidelity, Inc. All rights reserved. // -#include -#include -#include #include -#include -#include -#include -#include #include "Application.h" -#include "SharedUtil.h" +#include "ui_updateDialog.h" + #include "UpdateDialog.h" -#include "ui_updateDialog.h" UpdateDialog::UpdateDialog(QWidget *parent, const QString& releaseNotes, const QString& latestVersion, const QUrl& downloadURL) : QDialog(parent), From e01f317cbaea10a39f4551d5352668c4a941ea1e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 14:20:40 -0800 Subject: [PATCH 7/8] remove QUiTools include, not needed --- interface/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 165c3c4c15..6af6ed478d 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -80,7 +80,6 @@ find_package(Qt5Svg REQUIRED) find_package(Qt5WebKit REQUIRED) find_package(Qt5WebKitWidgets REQUIRED) find_package(Qt5Xml REQUIRED) -find_package(Qt5UiTools REQUIRED) # grab the ui files in resources/ui file (GLOB_RECURSE QT_UI_FILES ui/*.ui) From 6937ce035a1d1655ea8f0614b8002f996991ff6a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 Jan 2014 14:25:06 -0800 Subject: [PATCH 8/8] restore functionality of shouldSkipVersion --- interface/src/Application.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 78d65048bd..678c7ab647 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4415,8 +4415,7 @@ bool Application::shouldSkipVersion(QString latestVersion) { QFile skipFile(SKIP_FILENAME); skipFile.open(QIODevice::ReadWrite); QString skipVersion(skipFile.readAll()); -// return (skipVersion == latestVersion || applicationVersion() == "dev"); - return false; + return (skipVersion == latestVersion || applicationVersion() == "dev"); } void Application::skipVersion(QString latestVersion) {