Merge pull request #8891 from huffman/fix/disconnected-dialog-updates

Fix several aspects of the "disconnected" dialog
This commit is contained in:
Clément Brisset 2016-10-24 15:39:16 -07:00 committed by GitHub
commit dd45500313
9 changed files with 68 additions and 18 deletions

View file

@ -0,0 +1,14 @@
import QtQuick.Dialogs 1.2 as OriginalDialogs
import "dialogs"
MessageDialog {
id: root
objectName: "ConnectionFailureDialog"
title: "No Connection"
text: "Unable to connect to this domain. Click the 'GO TO' button on the toolbar to visit another domain."
buttons: OriginalDialogs.StandardButton.Ok
icon: OriginalDialogs.StandardIcon.Warning
defaultButton: OriginalDialogs.StandardButton.NoButton;
}

View file

@ -882,8 +882,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
UserActivityLogger::getInstance().logAction("launch", properties);
_connectionMonitor.init();
// Tell our entity edit sender about our known jurisdictions
_entityEditSender.setServerJurisdictions(&_entityServerJurisdictions);
_entityEditSender.setMyAvatar(myAvatar.get());
@ -1376,6 +1374,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
}
}
_connectionMonitor.init();
// After all of the constructor is completed, then set firstRun to false.
firstRun.set(false);
}

View file

@ -13,34 +13,42 @@
#include "ui/DialogsManager.h"
#include <NodeList.h>
#include <DependencyManager.h>
#include <DomainHandler.h>
#include <AddressManager.h>
#include <NodeList.h>
// Because the connection monitor is created at startup, the time we wait on initial load
// should be longer to allow the application to initialize.
static const int ON_INITIAL_LOAD_DISPLAY_AFTER_DISCONNECTED_FOR_X_MS = 10000;
static const int DISPLAY_AFTER_DISCONNECTED_FOR_X_MS = 5000;
void ConnectionMonitor::init() {
// Connect to domain disconnected message
auto nodeList = DependencyManager::get<NodeList>();
const DomainHandler& domainHandler = nodeList->getDomainHandler();
connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &ConnectionMonitor::disconnectedFromDomain);
connect(&domainHandler, &DomainHandler::connectedToDomain, this, &ConnectionMonitor::connectedToDomain);
connect(&domainHandler, &DomainHandler::resetting, this, &ConnectionMonitor::startTimer);
connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &ConnectionMonitor::startTimer);
connect(&domainHandler, &DomainHandler::connectedToDomain, this, &ConnectionMonitor::stopTimer);
connect(&domainHandler, &DomainHandler::domainConnectionRefused, this, &ConnectionMonitor::stopTimer);
_timer.setSingleShot(true);
_timer.setInterval(DISPLAY_AFTER_DISCONNECTED_FOR_X_MS);
if (!domainHandler.isConnected()) {
_timer.start();
_timer.start(ON_INITIAL_LOAD_DISPLAY_AFTER_DISCONNECTED_FOR_X_MS);
}
auto dialogsManager = DependencyManager::get<DialogsManager>();
connect(&_timer, &QTimer::timeout, dialogsManager.data(), &DialogsManager::indicateDomainConnectionFailure);
connect(&_timer, &QTimer::timeout, this, []() {
qDebug() << "ConnectionMonitor: Showing connection failure window";
DependencyManager::get<DialogsManager>()->setDomainConnectionFailureVisibility(true);
});
}
void ConnectionMonitor::disconnectedFromDomain() {
_timer.start();
void ConnectionMonitor::startTimer() {
qDebug() << "ConnectionMonitor: Starting timer";
_timer.start(DISPLAY_AFTER_DISCONNECTED_FOR_X_MS);
}
void ConnectionMonitor::connectedToDomain(const QString& name) {
void ConnectionMonitor::stopTimer() {
qDebug() << "ConnectionMonitor: Stopping timer";
_timer.stop();
DependencyManager::get<DialogsManager>()->setDomainConnectionFailureVisibility(false);
}

View file

@ -23,8 +23,8 @@ public:
void init();
private slots:
void disconnectedFromDomain();
void connectedToDomain(const QString& name);
void startTimer();
void stopTimer();
private:
QTimer _timer;

View file

@ -0,0 +1,3 @@
#include "ConnectionFailureDialog.h"
HIFI_QML_DEF(ConnectionFailureDialog)

View file

@ -0,0 +1,8 @@
#pragma once
#include <OffscreenQmlDialog.h>
class ConnectionFailureDialog : public OffscreenQmlDialog {
Q_OBJECT
HIFI_QML_DECL
};

View file

@ -21,6 +21,7 @@
#include "AddressBarDialog.h"
#include "BandwidthDialog.h"
#include "CachesSizeDialog.h"
#include "ConnectionFailureDialog.h"
#include "DiskCacheEditor.h"
#include "DomainConnectionDialog.h"
#include "HMDToolsDialog.h"
@ -59,8 +60,12 @@ void DialogsManager::showFeed() {
emit setUseFeed(true);
}
void DialogsManager::indicateDomainConnectionFailure() {
OffscreenUi::information("No Connection", "Unable to connect to this domain. Click the 'GO TO' button on the toolbar to visit another domain.");
void DialogsManager::setDomainConnectionFailureVisibility(bool visible) {
if (visible) {
ConnectionFailureDialog::show();
} else {
ConnectionFailureDialog::hide();
}
}
void DialogsManager::toggleDiskCacheEditor() {

View file

@ -44,7 +44,7 @@ public slots:
void toggleAddressBar();
void showAddressBar();
void showFeed();
void indicateDomainConnectionFailure();
void setDomainConnectionFailureVisibility(bool visible);
void toggleDiskCacheEditor();
void toggleLoginDialog();
void showLoginDialog();

View file

@ -22,6 +22,7 @@ private: \
public: \
static void registerType(); \
static void show(std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}); \
static void hide(); \
static void toggle(std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}); \
static void load(std::function<void(QQmlContext*, QObject*)> f = [](QQmlContext*, QObject*) {}); \
private:
@ -33,6 +34,7 @@ protected: \
public: \
static void registerType(); \
static void show(); \
static void hide(); \
static void toggle(); \
static void load(); \
private:
@ -50,6 +52,11 @@ private:
offscreenUi->show(QML, NAME, f); \
} \
\
void x::hide() { \
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
offscreenUi->hide(NAME); \
} \
\
void x::toggle(std::function<void(QQmlContext*, QObject*)> f) { \
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
offscreenUi->toggle(QML, NAME, f); \
@ -70,6 +77,11 @@ private:
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
offscreenUi->show(QML, NAME, f); \
} \
void x::hide() { \
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
offscreenUi->hide(NAME); \
} \
\
void x::toggle() { \
auto offscreenUi = DependencyManager::get<OffscreenUi>(); \
offscreenUi->toggle(QML, NAME, f); \