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); UserActivityLogger::getInstance().logAction("launch", properties);
_connectionMonitor.init();
// Tell our entity edit sender about our known jurisdictions // Tell our entity edit sender about our known jurisdictions
_entityEditSender.setServerJurisdictions(&_entityServerJurisdictions); _entityEditSender.setServerJurisdictions(&_entityServerJurisdictions);
_entityEditSender.setMyAvatar(myAvatar.get()); _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. // After all of the constructor is completed, then set firstRun to false.
firstRun.set(false); firstRun.set(false);
} }

View file

@ -13,34 +13,42 @@
#include "ui/DialogsManager.h" #include "ui/DialogsManager.h"
#include <NodeList.h>
#include <DependencyManager.h> #include <DependencyManager.h>
#include <DomainHandler.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; static const int DISPLAY_AFTER_DISCONNECTED_FOR_X_MS = 5000;
void ConnectionMonitor::init() { void ConnectionMonitor::init() {
// Connect to domain disconnected message // Connect to domain disconnected message
auto nodeList = DependencyManager::get<NodeList>(); auto nodeList = DependencyManager::get<NodeList>();
const DomainHandler& domainHandler = nodeList->getDomainHandler(); const DomainHandler& domainHandler = nodeList->getDomainHandler();
connect(&domainHandler, &DomainHandler::disconnectedFromDomain, this, &ConnectionMonitor::disconnectedFromDomain); connect(&domainHandler, &DomainHandler::resetting, this, &ConnectionMonitor::startTimer);
connect(&domainHandler, &DomainHandler::connectedToDomain, this, &ConnectionMonitor::connectedToDomain); 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.setSingleShot(true);
_timer.setInterval(DISPLAY_AFTER_DISCONNECTED_FOR_X_MS);
if (!domainHandler.isConnected()) { 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, this, []() {
connect(&_timer, &QTimer::timeout, dialogsManager.data(), &DialogsManager::indicateDomainConnectionFailure); qDebug() << "ConnectionMonitor: Showing connection failure window";
DependencyManager::get<DialogsManager>()->setDomainConnectionFailureVisibility(true);
});
} }
void ConnectionMonitor::disconnectedFromDomain() { void ConnectionMonitor::startTimer() {
_timer.start(); 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(); _timer.stop();
DependencyManager::get<DialogsManager>()->setDomainConnectionFailureVisibility(false);
} }

View file

@ -23,8 +23,8 @@ public:
void init(); void init();
private slots: private slots:
void disconnectedFromDomain(); void startTimer();
void connectedToDomain(const QString& name); void stopTimer();
private: private:
QTimer _timer; 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 "AddressBarDialog.h"
#include "BandwidthDialog.h" #include "BandwidthDialog.h"
#include "CachesSizeDialog.h" #include "CachesSizeDialog.h"
#include "ConnectionFailureDialog.h"
#include "DiskCacheEditor.h" #include "DiskCacheEditor.h"
#include "DomainConnectionDialog.h" #include "DomainConnectionDialog.h"
#include "HMDToolsDialog.h" #include "HMDToolsDialog.h"
@ -59,8 +60,12 @@ void DialogsManager::showFeed() {
emit setUseFeed(true); emit setUseFeed(true);
} }
void DialogsManager::indicateDomainConnectionFailure() { void DialogsManager::setDomainConnectionFailureVisibility(bool visible) {
OffscreenUi::information("No Connection", "Unable to connect to this domain. Click the 'GO TO' button on the toolbar to visit another domain."); if (visible) {
ConnectionFailureDialog::show();
} else {
ConnectionFailureDialog::hide();
}
} }
void DialogsManager::toggleDiskCacheEditor() { void DialogsManager::toggleDiskCacheEditor() {

View file

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

View file

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