mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 19:59:28 +02:00
backend integration from Dante
* adding some functionality to avatar bookmarks * saving work
This commit is contained in:
parent
5007c259bb
commit
ce3015662e
5 changed files with 85 additions and 18 deletions
|
@ -11,7 +11,6 @@ Rectangle {
|
||||||
width: 480
|
width: 480
|
||||||
height: 706
|
height: 706
|
||||||
color: style.colors.white
|
color: style.colors.white
|
||||||
|
|
||||||
property string getAvatarsMethod: 'getAvatars'
|
property string getAvatarsMethod: 'getAvatars'
|
||||||
|
|
||||||
signal sendToScript(var message);
|
signal sendToScript(var message);
|
||||||
|
@ -486,6 +485,7 @@ Rectangle {
|
||||||
property int verticalSpacing: 36
|
property int verticalSpacing: 36
|
||||||
|
|
||||||
function selectAvatar(avatar) {
|
function selectAvatar(avatar) {
|
||||||
|
AvatarBookmarks.loadBookmark(avatar.name);
|
||||||
selectedAvatarId = avatar.name;
|
selectedAvatarId = avatar.name;
|
||||||
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarId);
|
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarId);
|
||||||
allAvatars.move(avatarIndex, 0, 1);
|
allAvatars.move(avatarIndex, 0, 1);
|
||||||
|
|
|
@ -17,7 +17,9 @@
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QQmlContext>
|
#include <QQmlContext>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QtCore/QThread>
|
||||||
|
|
||||||
|
#include <shared/QtHelpers.h>
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
#include <OffscreenUi.h>
|
#include <OffscreenUi.h>
|
||||||
#include <avatar/AvatarManager.h>
|
#include <avatar/AvatarManager.h>
|
||||||
|
@ -96,6 +98,74 @@ AvatarBookmarks::AvatarBookmarks() {
|
||||||
readFromFile();
|
readFromFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AvatarBookmarks::addBookmark(const QString& bookmarkName) {
|
||||||
|
if (QThread::currentThread() != thread()) {
|
||||||
|
BLOCKING_INVOKE_METHOD(this, "addBookmark", Q_ARG(QString, bookmarkName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Menu* menubar = Menu::getInstance();
|
||||||
|
QVariantMap bookmark = getAvatarDataToBookmark();
|
||||||
|
addBookmarkToMenu(menubar, bookmarkName, bookmark);
|
||||||
|
insert(bookmarkName, bookmark);
|
||||||
|
enableMenuItems(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AvatarBookmarks::saveBookmark(const QString& bookmarkName) {
|
||||||
|
if (QThread::currentThread() != thread()) {
|
||||||
|
BLOCKING_INVOKE_METHOD(this, "saveBookmark", Q_ARG(QString, bookmarkName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (contains(bookmarkName)) {
|
||||||
|
QVariantMap bookmark = getAvatarDataToBookmark();
|
||||||
|
insert(bookmarkName, bookmark);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AvatarBookmarks::removeBookmark(const QString& bookmarkName) {
|
||||||
|
if (QThread::currentThread() != thread()) {
|
||||||
|
BLOCKING_INVOKE_METHOD(this, "removeBookmark", Q_ARG(QString, bookmarkName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Menu* menubar = Menu::getInstance();
|
||||||
|
Bookmarks::removeBookmarkFromMenu(Menu::getInstance(), bookmarkName);
|
||||||
|
remove(bookmarkName);
|
||||||
|
|
||||||
|
if (_bookmarksMenu->actions().count() == 0) {
|
||||||
|
enableMenuItems(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AvatarBookmarks::loadBookmark(const QString& bookmarkName) {
|
||||||
|
if (QThread::currentThread() != thread()) {
|
||||||
|
BLOCKING_INVOKE_METHOD(this, "reloadBookmark", Q_ARG(QString, bookmarkName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto bookmarkEntry = _bookmarks.find(bookmarkName);
|
||||||
|
|
||||||
|
if (bookmarkEntry != _bookmarks.end()) {
|
||||||
|
QVariantMap bookmark = bookmarkEntry.value().toMap();
|
||||||
|
if (!bookmark.empty()) {
|
||||||
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
|
myAvatar->removeAvatarEntities();
|
||||||
|
const QString& avatarUrl = bookmark.value(ENTRY_AVATAR_URL, "").toString();
|
||||||
|
myAvatar->useFullAvatarURL(avatarUrl);
|
||||||
|
qCDebug(interfaceapp) << "Avatar On " << avatarUrl;
|
||||||
|
const QList<QVariant>& attachments = bookmark.value(ENTRY_AVATAR_ATTACHMENTS, QList<QVariant>()).toList();
|
||||||
|
|
||||||
|
qCDebug(interfaceapp) << "Attach " << attachments;
|
||||||
|
myAvatar->setAttachmentsVariant(attachments);
|
||||||
|
|
||||||
|
const float& qScale = bookmark.value(ENTRY_AVATAR_SCALE, 1.0f).toFloat();
|
||||||
|
myAvatar->setAvatarScale(qScale);
|
||||||
|
|
||||||
|
const QVariantList& avatarEntities = bookmark.value(ENTRY_AVATAR_ENTITIES, QVariantList()).toList();
|
||||||
|
addAvatarEntities(avatarEntities);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AvatarBookmarks::readFromFile() {
|
void AvatarBookmarks::readFromFile() {
|
||||||
// migrate old avatarbookmarks.json, used to be in 'local' folder on windows
|
// migrate old avatarbookmarks.json, used to be in 'local' folder on windows
|
||||||
QString oldConfigPath = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + AVATARBOOKMARKS_FILENAME;
|
QString oldConfigPath = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/" + AVATARBOOKMARKS_FILENAME;
|
||||||
|
@ -181,12 +251,12 @@ void AvatarBookmarks::addBookmark() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
addBookmark(bookmarkName);
|
QVariantMap bookmark = getAvatarDataToBookmark();
|
||||||
|
Bookmarks::addBookmarkToFile(bookmarkName, bookmark);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarBookmarks::addBookmark(QString bookmarkName)
|
QVariantMap AvatarBookmarks::getAvatarDataToBookmark() {
|
||||||
{
|
|
||||||
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
auto myAvatar = DependencyManager::get<AvatarManager>()->getMyAvatar();
|
||||||
|
|
||||||
const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString();
|
const QString& avatarUrl = myAvatar->getSkeletonModelURL().toString();
|
||||||
|
@ -199,13 +269,7 @@ void AvatarBookmarks::addBookmark(QString bookmarkName)
|
||||||
bookmark.insert(ENTRY_AVATAR_SCALE, avatarScale);
|
bookmark.insert(ENTRY_AVATAR_SCALE, avatarScale);
|
||||||
bookmark.insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant());
|
bookmark.insert(ENTRY_AVATAR_ATTACHMENTS, myAvatar->getAttachmentsVariant());
|
||||||
bookmark.insert(ENTRY_AVATAR_ENTITIES, myAvatar->getAvatarEntitiesVariant());
|
bookmark.insert(ENTRY_AVATAR_ENTITIES, myAvatar->getAvatarEntitiesVariant());
|
||||||
|
return bookmark;
|
||||||
Bookmarks::addBookmarkToFile(bookmarkName, bookmark);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AvatarBookmarks::removeBookmark(QString bookmarkName)
|
|
||||||
{
|
|
||||||
Bookmarks::deleteBookmark(bookmarkName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) {
|
void AvatarBookmarks::addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) {
|
||||||
|
|
|
@ -39,13 +39,16 @@ public slots:
|
||||||
* @function AvatarBookmarks.addBookMark
|
* @function AvatarBookmarks.addBookMark
|
||||||
*/
|
*/
|
||||||
void addBookmark();
|
void addBookmark();
|
||||||
void addBookmark(QString bookmarkName);
|
void addBookmark(const QString& bookmarkName);
|
||||||
void removeBookmark(QString bookmarkName);
|
void saveBookmark(const QString& bookmarkName);
|
||||||
|
void loadBookmark(const QString& bookmarkName);
|
||||||
|
void removeBookmark(const QString& bookmarkName);
|
||||||
QVariantMap getBookmarks() { return _bookmarks; }
|
QVariantMap getBookmarks() { return _bookmarks; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override;
|
void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override;
|
||||||
void readFromFile() override;
|
void readFromFile() override;
|
||||||
|
QVariantMap getAvatarDataToBookmark();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json";
|
const QString AVATARBOOKMARKS_FILENAME = "avatarbookmarks.json";
|
||||||
|
|
|
@ -40,9 +40,10 @@ protected:
|
||||||
void insert(const QString& name, const QVariant& address); // Overwrites any existing entry with same name.
|
void insert(const QString& name, const QVariant& address); // Overwrites any existing entry with same name.
|
||||||
void sortActions(Menu* menubar, MenuWrapper* menu);
|
void sortActions(Menu* menubar, MenuWrapper* menu);
|
||||||
int getMenuItemLocation(QList<QAction*> actions, const QString& name) const;
|
int getMenuItemLocation(QList<QAction*> actions, const QString& name) const;
|
||||||
|
void removeBookmarkFromMenu(Menu* menubar, const QString& name);
|
||||||
bool contains(const QString& name) const;
|
bool contains(const QString& name) const;
|
||||||
|
void remove(const QString& name);
|
||||||
|
|
||||||
QVariantMap _bookmarks; // { name: url, ... }
|
QVariantMap _bookmarks; // { name: url, ... }
|
||||||
QPointer<MenuWrapper> _bookmarksMenu;
|
QPointer<MenuWrapper> _bookmarksMenu;
|
||||||
QPointer<QAction> _deleteBookmarksAction;
|
QPointer<QAction> _deleteBookmarksAction;
|
||||||
|
@ -59,12 +60,9 @@ protected slots:
|
||||||
void deleteBookmark();
|
void deleteBookmark();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void remove(const QString& name);
|
|
||||||
static bool sortOrder(QAction* a, QAction* b);
|
static bool sortOrder(QAction* a, QAction* b);
|
||||||
|
|
||||||
void persistToFile();
|
void persistToFile();
|
||||||
|
|
||||||
void removeBookmarkFromMenu(Menu* menubar, const QString& name);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_Bookmarks_h
|
#endif // hifi_Bookmarks_h
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
#include "scripting/MenuScriptingInterface.h"
|
#include "scripting/MenuScriptingInterface.h"
|
||||||
#include "scripting/SettingsScriptingInterface.h"
|
#include "scripting/SettingsScriptingInterface.h"
|
||||||
#include <Preferences.h>
|
#include <Preferences.h>
|
||||||
|
#include <AvatarBookmarks.h>
|
||||||
#include <ScriptEngines.h>
|
#include <ScriptEngines.h>
|
||||||
#include "FileDialogHelper.h"
|
#include "FileDialogHelper.h"
|
||||||
#include "avatar/AvatarManager.h"
|
#include "avatar/AvatarManager.h"
|
||||||
|
@ -253,6 +254,7 @@ void Web3DOverlay::setupQmlSurface() {
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("SoundCache", DependencyManager::get<SoundCache>().data());
|
_webSurface->getSurfaceContext()->setContextProperty("SoundCache", DependencyManager::get<SoundCache>().data());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("MenuInterface", MenuScriptingInterface::getInstance());
|
_webSurface->getSurfaceContext()->setContextProperty("MenuInterface", MenuScriptingInterface::getInstance());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("Settings", SettingsScriptingInterface::getInstance());
|
_webSurface->getSurfaceContext()->setContextProperty("Settings", SettingsScriptingInterface::getInstance());
|
||||||
|
_webSurface->getSurfaceContext()->setContextProperty("AvatarBookmarks", DependencyManager::get<AvatarBookmarks>().data());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("Render", AbstractViewStateInterface::instance()->getRenderEngine()->getConfiguration().get());
|
_webSurface->getSurfaceContext()->setContextProperty("Render", AbstractViewStateInterface::instance()->getRenderEngine()->getConfiguration().get());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("Workload", qApp->getGameWorkload()._engine->getConfiguration().get());
|
_webSurface->getSurfaceContext()->setContextProperty("Workload", qApp->getGameWorkload()._engine->getConfiguration().get());
|
||||||
_webSurface->getSurfaceContext()->setContextProperty("Controller", DependencyManager::get<controller::ScriptingInterface>().data());
|
_webSurface->getSurfaceContext()->setContextProperty("Controller", DependencyManager::get<controller::ScriptingInterface>().data());
|
||||||
|
|
Loading…
Reference in a new issue