diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 09e527d24c..14de83ec4a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -180,6 +180,9 @@ bool setupEssentials(int& argc, char** argv) { auto lodManager = DependencyManager::set(); auto jsConsole = DependencyManager::set(); auto dialogsManager = DependencyManager::set(); +#if defined(Q_OS_MAC) || defined(Q_OS_WIN) + auto speechRecognizer = DependencyManager::set(); +#endif return true; } @@ -3464,7 +3467,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGlobalObject("Camera", &_myCamera); #if defined(Q_OS_MAC) || defined(Q_OS_WIN) - scriptEngine->registerGlobalObject("SpeechRecognizer", Menu::getInstance()->getSpeechRecognizer()); + scriptEngine->registerGlobalObject("SpeechRecognizer", DependencyManager::get().data()); #endif ClipboardScriptingInterface* clipboardScriptable = new ClipboardScriptingInterface(); @@ -3787,7 +3790,10 @@ void Application::loadScriptURLDialog() { } } - +void Application::setScriptsLocation(const QString& scriptsLocation) { + _scriptsLocation = scriptsLocation; + emit scriptLocationChanged(scriptsLocation); +} void Application::toggleLogDialog() { if (! _logDialog) { diff --git a/interface/src/Application.h b/interface/src/Application.h index 7012df157d..87ac72e604 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -309,6 +309,9 @@ public: RunningScriptsWidget* getRunningScriptsWidget() { return _runningScriptsWidget; } Bookmarks* getBookmarks() const { return _bookmarks; } + + const QString& getScriptsLocation() const { return _scriptsLocation; } + void setScriptsLocation(const QString& scriptsLocation); signals: @@ -323,6 +326,8 @@ signals: /// Fired when the import window is closed void importDone(); + + void scriptLocationChanged(const QString& newPath); public slots: void domainChanged(const QString& domainHostname); @@ -575,6 +580,7 @@ private: RunningScriptsWidget* _runningScriptsWidget; QHash _scriptEnginesHash; bool _runningScriptsWidgetWasVisible; + QString _scriptsLocation; QSystemTrayIcon* _trayIcon; diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 0ad776eb2c..a2bc20b49a 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -192,9 +192,13 @@ Menu::Menu() { dialogsManager.data(), SLOT(showScriptEditor())); #if defined(Q_OS_MAC) || defined(Q_OS_WIN) + auto speechRecognizer = DependencyManager::get(); QAction* speechRecognizerAction = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::ControlWithSpeech, - Qt::CTRL | Qt::SHIFT | Qt::Key_C, _speechRecognizer.getEnabled(), &_speechRecognizer, SLOT(setEnabled(bool))); - connect(&_speechRecognizer, SIGNAL(enabledUpdated(bool)), speechRecognizerAction, SLOT(setChecked(bool))); + Qt::CTRL | Qt::SHIFT | Qt::Key_C, + speechRecognizer->getEnabled(), + speechRecognizer.data(), + SLOT(setEnabled(bool))); + connect(speechRecognizer.data(), SIGNAL(enabledUpdated(bool)), speechRecognizerAction, SLOT(setChecked(bool))); #endif #ifdef HAVE_QXMPP @@ -590,12 +594,6 @@ void Menu::loadSettings(QSettings* settings) { audio->setOutputStarveDetectionPeriod(settings->value("audioOutputStarveDetectionPeriod", DEFAULT_AUDIO_OUTPUT_STARVE_DETECTION_PERIOD).toInt()); int bufferSize = settings->value("audioOutputBufferSize", DEFAULT_AUDIO_OUTPUT_BUFFER_SIZE_FRAMES).toInt(); QMetaObject::invokeMethod(audio.data(), "setOutputBufferSize", Q_ARG(int, bufferSize)); - - setScriptsLocation(settings->value("scriptsLocation", QString()).toString()); - -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) - _speechRecognizer.setEnabled(settings->value("speechRecognitionEnabled", false).toBool()); -#endif scanMenuBar(&loadAction, settings); Application::getInstance()->getAvatar()->loadData(settings); @@ -630,11 +628,6 @@ void Menu::saveSettings(QSettings* settings) { settings->setValue("audioOutputStarveDetectionPeriod", audio->getOutputStarveDetectionPeriod()); settings->setValue("audioOutputBufferSize", audio->getOutputBufferSize()); - settings->setValue("scriptsLocation", _scriptsLocation); -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) - settings->setValue("speechRecognitionEnabled", _speechRecognizer.getEnabled()); -#endif - scanMenuBar(&saveAction, settings); Application::getInstance()->getAvatar()->saveData(settings); @@ -1100,9 +1093,3 @@ void Menu::runTests() { runTimingTests(); } -void Menu::setScriptsLocation(const QString& scriptsLocation) { - _scriptsLocation = scriptsLocation; - bumpSettings(); - emit scriptLocationChanged(scriptsLocation); -} - diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 27da7d247b..f6f45c1f07 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -129,32 +129,13 @@ private: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////// TODO: Move to appropriate files //////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -public: - - const QString& getScriptsLocation() const { return _scriptsLocation; } - void setScriptsLocation(const QString& scriptsLocation); - -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) - SpeechRecognizer* getSpeechRecognizer() { return &_speechRecognizer; } -#endif - -signals: - void scriptLocationChanged(const QString& newPath); - private slots: void aboutApp(); void showEditEntitiesHelp(); void bumpSettings(); - void changePrivateKey(); void runTests(); void displayNameLocationResponse(const QString& errorString); -private: -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) - SpeechRecognizer _speechRecognizer; -#endif - - QString _scriptsLocation; }; namespace MenuOption { diff --git a/interface/src/ScriptsModel.cpp b/interface/src/ScriptsModel.cpp index 1b897e7612..841fc30e26 100644 --- a/interface/src/ScriptsModel.cpp +++ b/interface/src/ScriptsModel.cpp @@ -58,10 +58,10 @@ ScriptsModel::ScriptsModel(QObject* parent) : _localDirectory.setFilter(QDir::Files | QDir::Readable); _localDirectory.setNameFilters(QStringList("*.js")); - updateScriptsLocation(Menu::getInstance()->getScriptsLocation()); + updateScriptsLocation(qApp->getScriptsLocation()); connect(&_fsWatcher, &QFileSystemWatcher::directoryChanged, this, &ScriptsModel::reloadLocalFiles); - connect(Menu::getInstance(), &Menu::scriptLocationChanged, this, &ScriptsModel::updateScriptsLocation); + connect(qApp, &Application::scriptLocationChanged, this, &ScriptsModel::updateScriptsLocation); reloadLocalFiles(); reloadRemoteFiles(); diff --git a/interface/src/SpeechRecognizer.h b/interface/src/SpeechRecognizer.h index 4a6f06754c..9d18f14e3a 100644 --- a/interface/src/SpeechRecognizer.h +++ b/interface/src/SpeechRecognizer.h @@ -20,12 +20,13 @@ #include #endif -class SpeechRecognizer : public QObject { - Q_OBJECT -public: - SpeechRecognizer(); - ~SpeechRecognizer(); +#include +class SpeechRecognizer : public QObject, public Dependency { + Q_OBJECT + SINGLETON_DEPENDENCY + +public: void handleCommandRecognized(const char* command); bool getEnabled() const { return _enabled; } @@ -42,6 +43,9 @@ protected: void reloadCommands(); private: + SpeechRecognizer(); + virtual ~SpeechRecognizer(); + bool _enabled; QSet _commands; #if defined(Q_OS_MAC) diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index b54c73e83b..2c6566509f 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -123,7 +123,7 @@ void PreferencesDialog::loadPreferences() { ui.snapshotLocationEdit->setText(Snapshot::getSnapshotsLocation()); - ui.scriptsLocationEdit->setText(menuInstance->getScriptsLocation()); + ui.scriptsLocationEdit->setText(qApp->getScriptsLocation()); ui.pupilDilationSlider->setValue(myAvatar->getHead()->getPupilDilation() * ui.pupilDilationSlider->maximum()); @@ -223,7 +223,7 @@ void PreferencesDialog::savePreferences() { } if (!ui.scriptsLocationEdit->text().isEmpty() && QDir(ui.scriptsLocationEdit->text()).exists()) { - Menu::getInstance()->setScriptsLocation(ui.scriptsLocationEdit->text()); + qApp->setScriptsLocation(ui.scriptsLocationEdit->text()); } myAvatar->getHead()->setPupilDilation(ui.pupilDilationSlider->value() / (float)ui.pupilDilationSlider->maximum());