From 466dbdcee563e4a89d65c20080a50dc2fdfcaf95 Mon Sep 17 00:00:00 2001 From: stojce Date: Mon, 22 Sep 2014 20:51:19 +0200 Subject: [PATCH 1/6] added address bar dialog --- interface/src/Application.cpp | 9 +- interface/src/Menu.cpp | 20 +---- interface/src/Menu.h | 3 + interface/src/ui/AddressBarDialog.cpp | 91 +++++++++++++++++++++ interface/src/ui/AddressBarDialog.h | 46 +++++++++++ libraries/networking/src/AddressManager.cpp | 6 +- libraries/networking/src/AddressManager.h | 2 +- 7 files changed, 153 insertions(+), 24 deletions(-) create mode 100644 interface/src/ui/AddressBarDialog.cpp create mode 100644 interface/src/ui/AddressBarDialog.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a20a6553d4..d2dc48ed59 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -923,12 +923,11 @@ void Application::keyPressEvent(QKeyEvent* event) { case Qt::Key_Return: case Qt::Key_Enter: - if (isMeta) { - Menu::getInstance()->triggerOption(MenuOption::AddressBar); - } else { - Menu::getInstance()->triggerOption(MenuOption::Chat); - } + Menu::getInstance()->triggerOption(MenuOption::AddressBar); + break; + case Qt::Key_CapsLock: + Menu::getInstance()->triggerOption(MenuOption::Chat); break; case Qt::Key_N: diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 454d21be20..026d532559 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -173,7 +173,7 @@ Menu::Menu() : SLOT(toggleLocationList())); addActionToQMenuAndActionHash(fileMenu, MenuOption::AddressBar, - Qt::CTRL | Qt::Key_Enter, + Qt::Key_Enter, this, SLOT(toggleAddressBar())); @@ -1154,22 +1154,10 @@ void Menu::changePrivateKey() { } void Menu::toggleAddressBar() { - - QInputDialog addressBarDialog(Application::getInstance()->getWindow()); - addressBarDialog.setWindowTitle("Address Bar"); - addressBarDialog.setWindowFlags(Qt::Sheet); - addressBarDialog.setLabelText("place, domain, @user, example.com, /position/orientation"); - - addressBarDialog.resize(addressBarDialog.parentWidget()->size().width() * DIALOG_RATIO_OF_WINDOW, - addressBarDialog.size().height()); - - int dialogReturn = addressBarDialog.exec(); - if (dialogReturn == QDialog::Accepted && !addressBarDialog.textValue().isEmpty()) { - // let the AddressManger figure out what to do with this - AddressManager::getInstance().handleLookupString(addressBarDialog.textValue()); + if (!_addressBarDialog) { + _addressBarDialog = new AddressBarDialog(); + _addressBarDialog->show(); } - - sendFakeEnterEvent(); } void Menu::displayAddressOfflineMessage() { diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 5a2240b3d8..8a0653c4ec 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -28,6 +28,8 @@ #endif #include "location/LocationManager.h" + +#include "ui/AddressBarDialog.h" #include "ui/ChatWindow.h" #include "ui/DataWebDialog.h" #include "ui/JSConsole.h" @@ -299,6 +301,7 @@ private: QPointer _attachmentsDialog; QPointer _animationsDialog; QPointer _loginDialog; + QPointer _addressBarDialog; bool _hasLoginDialogDisplayed; QAction* _chatAction; QString _snapshotsLocation; diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp new file mode 100644 index 0000000000..f24dcb1ba6 --- /dev/null +++ b/interface/src/ui/AddressBarDialog.cpp @@ -0,0 +1,91 @@ +// +// AddressBarDialog.cpp +// interface/src/ui +// +// Created by Stojce Slavkovski on 9/22/14. +// Copyright 2014 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "AddressBarDialog.h" +#include "AddressManager.h" +#include "Application.h" + +AddressBarDialog::AddressBarDialog() : + FramelessDialog(Application::getInstance()->getWindow(), 0, FramelessDialog::POSITION_TOP){ + setupUI(); +} + +void AddressBarDialog::setupUI() { + + setModal(true); + setWindowModality(Qt::WindowModal); + setHideOnBlur(false); + + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + setSizePolicy(sizePolicy); + setMinimumSize(QSize(560, 100)); + setStyleSheet("font-family: Helvetica, Arial, sans-serif;"); + + verticalLayout = new QVBoxLayout(this); + + addressLayout = new QHBoxLayout(); + addressLayout->setContentsMargins(0, 0, 10, 0); + + leftSpacer = new QSpacerItem(20, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + addressLayout->addItem(leftSpacer); + + addressLineEdit = new QLineEdit(this); + addressLineEdit->setPlaceholderText("Go to: domain, @user, #location"); + QSizePolicy sizePolicyLineEdit(QSizePolicy::Preferred, QSizePolicy::Fixed); + sizePolicyLineEdit.setHorizontalStretch(60); + addressLineEdit->setSizePolicy(sizePolicyLineEdit); + addressLineEdit->setMinimumSize(QSize(200, 50)); + addressLineEdit->setMaximumSize(QSize(615, 50)); + QFont font("Helvetica,Arial,sans-serif", 20); + addressLineEdit->setFont(font); + addressLineEdit->setStyleSheet("padding: 0 10px;"); + addressLayout->addWidget(addressLineEdit); + + buttonSpacer = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum); + addressLayout->addItem(buttonSpacer); + + goButton = new QPushButton(this); + goButton->setSizePolicy(sizePolicy); + goButton->setMinimumSize(QSize(54, 54)); + goButton->setFont(font); + goButton->setText("➡"); + goButton->setStyleSheet("background: #0e7077; color: #e7eeee; border-radius: 4px;"); + goButton->setIconSize(QSize(32, 32)); + goButton->setDefault(true); + goButton->setFlat(true); + addressLayout->addWidget(goButton); + + rightSpacer = new QSpacerItem(20, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); + addressLayout->addItem(rightSpacer); + + closeButton = new QPushButton(this); + closeButton->setSizePolicy(sizePolicy); + closeButton->setMinimumSize(QSize(16, 16)); + closeButton->setMaximumSize(QSize(16, 16)); + closeButton->setStyleSheet("color: #333"); + QIcon icon(Application::resourcesPath() + "styles/close.svg"); + closeButton->setIcon(icon); + closeButton->setFlat(true); + addressLayout->addWidget(closeButton, 0, Qt::AlignRight); + + verticalLayout->addLayout(addressLayout); + + connect(addressLineEdit, &QLineEdit::returnPressed, this, &AddressBarDialog::accept); + connect(goButton, &QPushButton::clicked, this, &AddressBarDialog::accept); + connect(closeButton, &QPushButton::clicked, this, &QDialog::close); +} + +void AddressBarDialog::accept() { + // let the AddressManger figure out what to do with this + if (AddressManager::getInstance().handleLookupString(addressLineEdit->text())) { + close(); + } +} \ No newline at end of file diff --git a/interface/src/ui/AddressBarDialog.h b/interface/src/ui/AddressBarDialog.h new file mode 100644 index 0000000000..0f77250097 --- /dev/null +++ b/interface/src/ui/AddressBarDialog.h @@ -0,0 +1,46 @@ +// +// AddressBarDialog.h +// interface/src/ui +// +// Created by Stojce Slavkovski on 9/22/14. +// Copyright 2014 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_AddressBarDialog_h +#define hifi_AddressBarDialog_h + +#include "FramelessDialog.h" + +#include +#include +#include +#include + + +class AddressBarDialog : public FramelessDialog { + Q_OBJECT + +public: + AddressBarDialog(); + +private: + void setupUI(); + + QVBoxLayout *verticalLayout; + QHBoxLayout *addressLayout; + QSpacerItem *leftSpacer; + QLineEdit *addressLineEdit; + QSpacerItem *buttonSpacer; + QPushButton *goButton; + QSpacerItem *rightSpacer; + QPushButton *closeButton; + +private slots: + void accept(); + +}; + +#endif // hifi_AddressBarDialog_h diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 8ea6d1107a..0fd0d72755 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -85,7 +85,7 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl) { return false; } -void AddressManager::handleLookupString(const QString& lookupString) { +bool AddressManager::handleLookupString(const QString& lookupString) { if (!lookupString.isEmpty()) { // make this a valid hifi URL and handle it off to handleUrl QString sanitizedString = lookupString; @@ -100,8 +100,10 @@ void AddressManager::handleLookupString(const QString& lookupString) { lookupURL = QUrl(lookupString); } - handleUrl(lookupURL); + return handleUrl(lookupURL); } + + return false; } void AddressManager::handleAPIResponse(const QJsonObject &jsonObject) { diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index 2590e8f80c..4715ff0592 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -31,7 +31,7 @@ public: void attemptPlaceNameLookup(const QString& lookupString); public slots: - void handleLookupString(const QString& lookupString); + bool handleLookupString(const QString& lookupString); void handleAPIResponse(const QJsonObject& jsonObject); void handleAPIError(QNetworkReply& errorReply); From 5a7b7cca44d2bc611928cb76118dfd846461a3ef Mon Sep 17 00:00:00 2001 From: stojce Date: Tue, 23 Sep 2014 11:32:16 +0200 Subject: [PATCH 2/6] Add finish lookup event --- interface/src/ui/AddressBarDialog.cpp | 10 ++++++---- libraries/networking/src/AddressManager.cpp | 11 +++++++---- libraries/networking/src/AddressManager.h | 3 ++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp index f24dcb1ba6..274152742f 100644 --- a/interface/src/ui/AddressBarDialog.cpp +++ b/interface/src/ui/AddressBarDialog.cpp @@ -78,14 +78,16 @@ void AddressBarDialog::setupUI() { verticalLayout->addLayout(addressLayout); - connect(addressLineEdit, &QLineEdit::returnPressed, this, &AddressBarDialog::accept); connect(goButton, &QPushButton::clicked, this, &AddressBarDialog::accept); connect(closeButton, &QPushButton::clicked, this, &QDialog::close); } void AddressBarDialog::accept() { - // let the AddressManger figure out what to do with this - if (AddressManager::getInstance().handleLookupString(addressLineEdit->text())) { - close(); + if (!addressLineEdit->text().isEmpty()) { + goButton->setStyleSheet("background: #333; color: #e7eeee; border-radius: 4px;"); + + AddressManager& addressManager = AddressManager::getInstance(); + connect(&addressManager, &AddressManager::lookupResultsFinished, this, &QDialog::close); + addressManager.handleLookupString(addressLineEdit->text()); } } \ No newline at end of file diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 0fd0d72755..4b3a84c603 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -80,12 +80,13 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl) { // if this is a relative path then handle it as a relative viewpoint handleRelativeViewpoint(lookupUrl.path()); + emit lookupResultsFinished(); } return false; } -bool AddressManager::handleLookupString(const QString& lookupString) { +void AddressManager::handleLookupString(const QString& lookupString) { if (!lookupString.isEmpty()) { // make this a valid hifi URL and handle it off to handleUrl QString sanitizedString = lookupString; @@ -100,10 +101,8 @@ bool AddressManager::handleLookupString(const QString& lookupString) { lookupURL = QUrl(lookupString); } - return handleUrl(lookupURL); + handleUrl(lookupURL); } - - return false; } void AddressManager::handleAPIResponse(const QJsonObject &jsonObject) { @@ -151,6 +150,7 @@ void AddressManager::handleAPIResponse(const QJsonObject &jsonObject) { // we've been told that this result exists but is offline, emit our signal so the application can handle emit lookupResultIsOffline(); } + emit lookupResultsFinished(); } void AddressManager::handleAPIError(QNetworkReply& errorReply) { @@ -159,6 +159,7 @@ void AddressManager::handleAPIError(QNetworkReply& errorReply) { if (errorReply.error() == QNetworkReply::ContentNotFoundError) { emit lookupResultIsNotFound(); } + emit lookupResultsFinished(); } const QString GET_PLACE = "/api/v1/places/%1"; @@ -182,6 +183,7 @@ bool AddressManager::handleNetworkAddress(const QString& lookupString) { if (hostnameRegex.indexIn(lookupString) != -1) { emit possibleDomainChangeRequired(hostnameRegex.cap(0)); + emit lookupResultsFinished(); return true; } @@ -189,6 +191,7 @@ bool AddressManager::handleNetworkAddress(const QString& lookupString) { if (ipAddressRegex.indexIn(lookupString) != -1) { emit possibleDomainChangeRequired(ipAddressRegex.cap(0)); + emit lookupResultsFinished(); return true; } diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index 4715ff0592..f7cc7c52ee 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -31,12 +31,13 @@ public: void attemptPlaceNameLookup(const QString& lookupString); public slots: - bool handleLookupString(const QString& lookupString); + void handleLookupString(const QString& lookupString); void handleAPIResponse(const QJsonObject& jsonObject); void handleAPIError(QNetworkReply& errorReply); void goToUser(const QString& username); signals: + void lookupResultsFinished(); void lookupResultIsOffline(); void lookupResultIsNotFound(); void possibleDomainChangeRequired(const QString& newHostname); From c14bf84af837a4347d26322fb518418ea917dc5e Mon Sep 17 00:00:00 2001 From: stojce Date: Wed, 24 Sep 2014 00:14:00 +0200 Subject: [PATCH 3/6] layout fix --- interface/resources/images/arrow.svg | 7 +++++++ interface/src/ui/AddressBarDialog.cpp | 7 +++---- libraries/networking/src/AddressManager.cpp | 4 ++-- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 interface/resources/images/arrow.svg diff --git a/interface/resources/images/arrow.svg b/interface/resources/images/arrow.svg new file mode 100644 index 0000000000..dc1c36c2b3 --- /dev/null +++ b/interface/resources/images/arrow.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp index 274152742f..04740ae799 100644 --- a/interface/src/ui/AddressBarDialog.cpp +++ b/interface/src/ui/AddressBarDialog.cpp @@ -42,8 +42,8 @@ void AddressBarDialog::setupUI() { QSizePolicy sizePolicyLineEdit(QSizePolicy::Preferred, QSizePolicy::Fixed); sizePolicyLineEdit.setHorizontalStretch(60); addressLineEdit->setSizePolicy(sizePolicyLineEdit); - addressLineEdit->setMinimumSize(QSize(200, 50)); - addressLineEdit->setMaximumSize(QSize(615, 50)); + addressLineEdit->setMinimumSize(QSize(200, 54)); + addressLineEdit->setMaximumSize(QSize(615, 54)); QFont font("Helvetica,Arial,sans-serif", 20); addressLineEdit->setFont(font); addressLineEdit->setStyleSheet("padding: 0 10px;"); @@ -55,8 +55,7 @@ void AddressBarDialog::setupUI() { goButton = new QPushButton(this); goButton->setSizePolicy(sizePolicy); goButton->setMinimumSize(QSize(54, 54)); - goButton->setFont(font); - goButton->setText("➡"); + goButton->setIcon(QIcon(Application::resourcesPath() + "images/arrow.svg")); goButton->setStyleSheet("background: #0e7077; color: #e7eeee; border-radius: 4px;"); goButton->setIconSize(QSize(32, 32)); goButton->setDefault(true); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 4b3a84c603..9a7da955d6 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -167,7 +167,7 @@ const QString GET_PLACE = "/api/v1/places/%1"; void AddressManager::attemptPlaceNameLookup(const QString& lookupString) { // assume this is a place name and see if we can get any info on it QString placeName = QUrl::toPercentEncoding(lookupString); - AccountManager::getInstance().authenticatedRequest(GET_PLACE.arg(placeName), + AccountManager::getInstance().unauthenticatedRequest(GET_PLACE.arg(placeName), QNetworkAccessManager::GetOperation, apiCallbackParameters()); } @@ -268,7 +268,7 @@ bool AddressManager::handleUsername(const QString& lookupString) { void AddressManager::goToUser(const QString& username) { QString formattedUsername = QUrl::toPercentEncoding(username); // this is a username - pull the captured name and lookup that user's location - AccountManager::getInstance().authenticatedRequest(GET_USER_LOCATION.arg(formattedUsername), + AccountManager::getInstance().unauthenticatedRequest(GET_USER_LOCATION.arg(formattedUsername), QNetworkAccessManager::GetOperation, apiCallbackParameters()); } From 8031454f616cbb4f37c204f3cf54795aefc0b40f Mon Sep 17 00:00:00 2001 From: stojce Date: Wed, 24 Sep 2014 00:22:51 +0200 Subject: [PATCH 4/6] use backslash to activate chat --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6fc4acd905..09f81060f8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -926,7 +926,7 @@ void Application::keyPressEvent(QKeyEvent* event) { Menu::getInstance()->triggerOption(MenuOption::AddressBar); break; - case Qt::Key_CapsLock: + case Qt::Key_Backslash: Menu::getInstance()->triggerOption(MenuOption::Chat); break; From 039deb8b4215cd169b2310fc65b32cbb6a6343b5 Mon Sep 17 00:00:00 2001 From: stojce Date: Wed, 24 Sep 2014 23:26:34 +0200 Subject: [PATCH 5/6] added go button active state icon --- .../images/address-bar-submit-active.svg | 18 ++++++++++++++++++ .../resources/images/address-bar-submit.svg | 18 ++++++++++++++++++ interface/resources/images/arrow.svg | 7 ------- interface/src/ui/AddressBarDialog.cpp | 11 +++++------ 4 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 interface/resources/images/address-bar-submit-active.svg create mode 100644 interface/resources/images/address-bar-submit.svg delete mode 100644 interface/resources/images/arrow.svg diff --git a/interface/resources/images/address-bar-submit-active.svg b/interface/resources/images/address-bar-submit-active.svg new file mode 100644 index 0000000000..313b366033 --- /dev/null +++ b/interface/resources/images/address-bar-submit-active.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + diff --git a/interface/resources/images/address-bar-submit.svg b/interface/resources/images/address-bar-submit.svg new file mode 100644 index 0000000000..df4d7e90f6 --- /dev/null +++ b/interface/resources/images/address-bar-submit.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + diff --git a/interface/resources/images/arrow.svg b/interface/resources/images/arrow.svg deleted file mode 100644 index dc1c36c2b3..0000000000 --- a/interface/resources/images/arrow.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp index 04740ae799..c9ac412aeb 100644 --- a/interface/src/ui/AddressBarDialog.cpp +++ b/interface/src/ui/AddressBarDialog.cpp @@ -54,10 +54,10 @@ void AddressBarDialog::setupUI() { goButton = new QPushButton(this); goButton->setSizePolicy(sizePolicy); - goButton->setMinimumSize(QSize(54, 54)); - goButton->setIcon(QIcon(Application::resourcesPath() + "images/arrow.svg")); - goButton->setStyleSheet("background: #0e7077; color: #e7eeee; border-radius: 4px;"); - goButton->setIconSize(QSize(32, 32)); + goButton->setMinimumSize(QSize(55, 55)); + goButton->setMaximumSize(QSize(55, 55)); + goButton->setIcon(QIcon(Application::resourcesPath() + "images/address-bar-submit.svg")); + goButton->setIconSize(QSize(55, 55)); goButton->setDefault(true); goButton->setFlat(true); addressLayout->addWidget(goButton); @@ -83,8 +83,7 @@ void AddressBarDialog::setupUI() { void AddressBarDialog::accept() { if (!addressLineEdit->text().isEmpty()) { - goButton->setStyleSheet("background: #333; color: #e7eeee; border-radius: 4px;"); - + goButton->setIcon(QIcon(Application::resourcesPath() + "images/address-bar-submit-active.svg")); AddressManager& addressManager = AddressManager::getInstance(); connect(&addressManager, &AddressManager::lookupResultsFinished, this, &QDialog::close); addressManager.handleLookupString(addressLineEdit->text()); From 5610cfeb34e2c311ae024b9379012510c18960f8 Mon Sep 17 00:00:00 2001 From: stojce Date: Fri, 26 Sep 2014 00:57:56 +0200 Subject: [PATCH 6/6] CR fixes --- interface/src/Menu.cpp | 3 + interface/src/ui/AddressBarDialog.cpp | 134 +++++++++++++++++--------- interface/src/ui/AddressBarDialog.h | 18 ++-- 3 files changed, 99 insertions(+), 56 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index ab6e30b7d9..cd5677e9e5 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -1158,6 +1158,9 @@ void Menu::changePrivateKey() { void Menu::toggleAddressBar() { if (!_addressBarDialog) { _addressBarDialog = new AddressBarDialog(); + } + + if (!_addressBarDialog->isVisible()) { _addressBarDialog->show(); } } diff --git a/interface/src/ui/AddressBarDialog.cpp b/interface/src/ui/AddressBarDialog.cpp index c9ac412aeb..25a4299d6c 100644 --- a/interface/src/ui/AddressBarDialog.cpp +++ b/interface/src/ui/AddressBarDialog.cpp @@ -13,79 +13,119 @@ #include "AddressManager.h" #include "Application.h" +const QString ADDRESSBAR_GO_BUTTON_ICON = "images/address-bar-submit.svg"; +const QString ADDRESSBAR_GO_BUTTON_ACTIVE_ICON = "images/address-bar-submit-active.svg"; + AddressBarDialog::AddressBarDialog() : - FramelessDialog(Application::getInstance()->getWindow(), 0, FramelessDialog::POSITION_TOP){ + FramelessDialog(Application::getInstance()->getWindow(), 0, FramelessDialog::POSITION_TOP) { + + setAttribute(Qt::WA_DeleteOnClose, false); setupUI(); } void AddressBarDialog::setupUI() { + const QString DIALOG_STYLESHEET = "font-family: Helvetica, Arial, sans-serif;"; + const QString ADDRESSBAR_PLACEHOLDER = "Go to: domain, @user, #location"; + const QString ADDRESSBAR_STYLESHEET = "padding: 0 10px;"; + const QString ADDRESSBAR_FONT_FAMILY = "Helvetica,Arial,sans-serif"; + const int ADDRESSBAR_FONT_SIZE = 20; + + const int ADDRESSBAR_MIN_WIDTH = 200; + const int ADDRESSBAR_MAX_WIDTH = 615; + const int ADDRESSBAR_HEIGHT = 54; + const int ADDRESSBAR_STRETCH = 60; + + const int BUTTON_SPACER_SIZE = 10; + const int DEFAULT_SPACER_SIZE = 20; + const int ADDRESS_LAYOUT_RIGHT_MARGIN = 10; + + const int GO_BUTTON_SIZE = 55; + const int CLOSE_BUTTON_SIZE = 16; + const QString CLOSE_BUTTON_ICON = "styles/close.svg"; + + const int DIALOG_HEIGHT = 100; + const int DIALOG_INITIAL_WIDTH = 560; + setModal(true); setWindowModality(Qt::WindowModal); setHideOnBlur(false); QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); setSizePolicy(sizePolicy); - setMinimumSize(QSize(560, 100)); - setStyleSheet("font-family: Helvetica, Arial, sans-serif;"); + setMinimumSize(QSize(DIALOG_INITIAL_WIDTH, DIALOG_HEIGHT)); + setStyleSheet(DIALOG_STYLESHEET); - verticalLayout = new QVBoxLayout(this); + _verticalLayout = new QVBoxLayout(this); - addressLayout = new QHBoxLayout(); - addressLayout->setContentsMargins(0, 0, 10, 0); + _addressLayout = new QHBoxLayout(); + _addressLayout->setContentsMargins(0, 0, ADDRESS_LAYOUT_RIGHT_MARGIN, 0); - leftSpacer = new QSpacerItem(20, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); - addressLayout->addItem(leftSpacer); + _leftSpacer = new QSpacerItem(DEFAULT_SPACER_SIZE, + DEFAULT_SPACER_SIZE, + QSizePolicy::MinimumExpanding, + QSizePolicy::Minimum); - addressLineEdit = new QLineEdit(this); - addressLineEdit->setPlaceholderText("Go to: domain, @user, #location"); + _addressLayout->addItem(_leftSpacer); + + _addressLineEdit = new QLineEdit(this); + _addressLineEdit->setPlaceholderText(ADDRESSBAR_PLACEHOLDER); QSizePolicy sizePolicyLineEdit(QSizePolicy::Preferred, QSizePolicy::Fixed); - sizePolicyLineEdit.setHorizontalStretch(60); - addressLineEdit->setSizePolicy(sizePolicyLineEdit); - addressLineEdit->setMinimumSize(QSize(200, 54)); - addressLineEdit->setMaximumSize(QSize(615, 54)); - QFont font("Helvetica,Arial,sans-serif", 20); - addressLineEdit->setFont(font); - addressLineEdit->setStyleSheet("padding: 0 10px;"); - addressLayout->addWidget(addressLineEdit); + sizePolicyLineEdit.setHorizontalStretch(ADDRESSBAR_STRETCH); + _addressLineEdit->setSizePolicy(sizePolicyLineEdit); + _addressLineEdit->setMinimumSize(QSize(ADDRESSBAR_MIN_WIDTH, ADDRESSBAR_HEIGHT)); + _addressLineEdit->setMaximumSize(QSize(ADDRESSBAR_MAX_WIDTH, ADDRESSBAR_HEIGHT)); + QFont font(ADDRESSBAR_FONT_FAMILY, ADDRESSBAR_FONT_SIZE); + _addressLineEdit->setFont(font); + _addressLineEdit->setStyleSheet(ADDRESSBAR_STYLESHEET); + _addressLayout->addWidget(_addressLineEdit); - buttonSpacer = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum); - addressLayout->addItem(buttonSpacer); + _buttonSpacer = new QSpacerItem(BUTTON_SPACER_SIZE, BUTTON_SPACER_SIZE, QSizePolicy::Fixed, QSizePolicy::Minimum); + _addressLayout->addItem(_buttonSpacer); - goButton = new QPushButton(this); - goButton->setSizePolicy(sizePolicy); - goButton->setMinimumSize(QSize(55, 55)); - goButton->setMaximumSize(QSize(55, 55)); - goButton->setIcon(QIcon(Application::resourcesPath() + "images/address-bar-submit.svg")); - goButton->setIconSize(QSize(55, 55)); - goButton->setDefault(true); - goButton->setFlat(true); - addressLayout->addWidget(goButton); + _goButton = new QPushButton(this); + _goButton->setSizePolicy(sizePolicy); + _goButton->setMinimumSize(QSize(GO_BUTTON_SIZE, GO_BUTTON_SIZE)); + _goButton->setMaximumSize(QSize(GO_BUTTON_SIZE, GO_BUTTON_SIZE)); + _goButton->setIcon(QIcon(Application::resourcesPath() + ADDRESSBAR_GO_BUTTON_ICON)); + _goButton->setIconSize(QSize(GO_BUTTON_SIZE, GO_BUTTON_SIZE)); + _goButton->setDefault(true); + _goButton->setFlat(true); + _addressLayout->addWidget(_goButton); - rightSpacer = new QSpacerItem(20, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); - addressLayout->addItem(rightSpacer); + _rightSpacer = new QSpacerItem(DEFAULT_SPACER_SIZE, + DEFAULT_SPACER_SIZE, + QSizePolicy::MinimumExpanding, + QSizePolicy::Minimum); - closeButton = new QPushButton(this); - closeButton->setSizePolicy(sizePolicy); - closeButton->setMinimumSize(QSize(16, 16)); - closeButton->setMaximumSize(QSize(16, 16)); - closeButton->setStyleSheet("color: #333"); - QIcon icon(Application::resourcesPath() + "styles/close.svg"); - closeButton->setIcon(icon); - closeButton->setFlat(true); - addressLayout->addWidget(closeButton, 0, Qt::AlignRight); + _addressLayout->addItem(_rightSpacer); - verticalLayout->addLayout(addressLayout); + _closeButton = new QPushButton(this); + _closeButton->setSizePolicy(sizePolicy); + _closeButton->setMinimumSize(QSize(CLOSE_BUTTON_SIZE, CLOSE_BUTTON_SIZE)); + _closeButton->setMaximumSize(QSize(CLOSE_BUTTON_SIZE, CLOSE_BUTTON_SIZE)); + QIcon icon(Application::resourcesPath() + CLOSE_BUTTON_ICON); + _closeButton->setIcon(icon); + _closeButton->setFlat(true); + _addressLayout->addWidget(_closeButton, 0, Qt::AlignRight); - connect(goButton, &QPushButton::clicked, this, &AddressBarDialog::accept); - connect(closeButton, &QPushButton::clicked, this, &QDialog::close); + _verticalLayout->addLayout(_addressLayout); + + connect(_goButton, &QPushButton::clicked, this, &AddressBarDialog::accept); + connect(_closeButton, &QPushButton::clicked, this, &QDialog::close); +} + +void AddressBarDialog::showEvent(QShowEvent* event) { + _goButton->setIcon(QIcon(Application::resourcesPath() + ADDRESSBAR_GO_BUTTON_ICON)); + _addressLineEdit->setText(QString()); + FramelessDialog::showEvent(event); } void AddressBarDialog::accept() { - if (!addressLineEdit->text().isEmpty()) { - goButton->setIcon(QIcon(Application::resourcesPath() + "images/address-bar-submit-active.svg")); + if (!_addressLineEdit->text().isEmpty()) { + _goButton->setIcon(QIcon(Application::resourcesPath() + ADDRESSBAR_GO_BUTTON_ACTIVE_ICON)); AddressManager& addressManager = AddressManager::getInstance(); - connect(&addressManager, &AddressManager::lookupResultsFinished, this, &QDialog::close); - addressManager.handleLookupString(addressLineEdit->text()); + connect(&addressManager, &AddressManager::lookupResultsFinished, this, &QDialog::hide); + addressManager.handleLookupString(_addressLineEdit->text()); } } \ No newline at end of file diff --git a/interface/src/ui/AddressBarDialog.h b/interface/src/ui/AddressBarDialog.h index 0f77250097..8f2cf2d7b8 100644 --- a/interface/src/ui/AddressBarDialog.h +++ b/interface/src/ui/AddressBarDialog.h @@ -19,7 +19,6 @@ #include #include - class AddressBarDialog : public FramelessDialog { Q_OBJECT @@ -28,15 +27,16 @@ public: private: void setupUI(); + void showEvent(QShowEvent* event); - QVBoxLayout *verticalLayout; - QHBoxLayout *addressLayout; - QSpacerItem *leftSpacer; - QLineEdit *addressLineEdit; - QSpacerItem *buttonSpacer; - QPushButton *goButton; - QSpacerItem *rightSpacer; - QPushButton *closeButton; + QVBoxLayout *_verticalLayout; + QHBoxLayout *_addressLayout; + QSpacerItem *_leftSpacer; + QSpacerItem *_rightSpacer; + QSpacerItem *_buttonSpacer; + QPushButton *_goButton; + QPushButton *_closeButton; + QLineEdit *_addressLineEdit; private slots: void accept();