{
_trayEngine->addImportPath("qrc:/qml/theme");
_trayEngine->addImageProvider("avatars", new ImageProvider);
- _trayEngine->rootContext()->setContextProperty("userModelBackend", UserModel::instance());
- _trayEngine->rootContext()->setContextProperty("appsMenuModelBackend", UserAppsModel::instance());
- _trayEngine->rootContext()->setContextProperty("systrayBackend", this);
+
+ qmlRegisterSingletonType<UserModel>("com.nextcloud.desktopclient", 1, 0, "UserModel",
+ [](QQmlEngine *, QJSEngine *) -> QObject * {
+ return UserModel::instance();
+ }
+ );
+
+ qmlRegisterSingletonType<UserAppsModel>("com.nextcloud.desktopclient", 1, 0, "UserAppsModel",
+ [](QQmlEngine *, QJSEngine *) -> QObject * {
+ return UserAppsModel::instance();
+ }
+ );
+
+ qmlRegisterSingletonType<Systray>("com.nextcloud.desktopclient", 1, 0, "Systray",
+ [](QQmlEngine *, QJSEngine *) -> QObject * {
+ return Systray::instance();
+ }
+ );
connect(UserModel::instance(), &UserModel::newUserSelected,
this, &Systray::slotNewUserSelected);
// Custom qml modules are in /theme (and included by resources.qrc)\r
import Style 1.0\r
\r
+import com.nextcloud.desktopclient 1.0\r
+\r
Window {\r
id: trayWindow\r
\r
onActiveChanged: {\r
if(!active) {\r
trayWindow.hide();\r
- systrayBackend.setClosed();\r
+ Systray.setClosed();\r
}\r
}\r
\r
onVisibleChanged: {\r
currentAccountAvatar.source = ""\r
currentAccountAvatar.source = "image://avatars/currentUser"\r
- currentAccountUser.text = userModelBackend.currentUserName();\r
- currentAccountServer.text = userModelBackend.currentUserServer();\r
- openLocalFolderButton.visible = userModelBackend.currentUserHasLocalFolder();\r
- trayWindowTalkButton.visible = userModelBackend.currentServerHasTalk() ? true : false;\r
+ currentAccountUser.text = UserModel.currentUserName();\r
+ currentAccountServer.text = UserModel.currentUserServer();\r
+ openLocalFolderButton.visible = UserModel.currentUserHasLocalFolder();\r
+ trayWindowTalkButton.visible = UserModel.currentServerHasTalk();\r
currentAccountStateIndicator.source = ""\r
- currentAccountStateIndicator.source = userModelBackend.isUserConnected(userModelBackend.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
+ currentAccountStateIndicator.source = UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
\r
// HACK: reload account Instantiator immediately by restting it - could be done better I guess\r
// see also id:accountMenu below\r
}\r
\r
Connections {\r
- target: userModelBackend\r
+ target: UserModel\r
onRefreshCurrentUserGui: {\r
currentAccountAvatar.source = ""\r
currentAccountAvatar.source = "image://avatars/currentUser"\r
- currentAccountUser.text = userModelBackend.currentUserName();\r
- currentAccountServer.text = userModelBackend.currentUserServer();\r
+ currentAccountUser.text = UserModel.currentUserName();\r
+ currentAccountServer.text = UserModel.currentUserServer();\r
currentAccountStateIndicator.source = ""\r
- currentAccountStateIndicator.source = userModelBackend.isUserConnected(userModelBackend.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
+ currentAccountStateIndicator.source = UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
}\r
onNewUserSelected: {\r
accountMenu.close();\r
- openLocalFolderButton.visible = userModelBackend.currentUserHasLocalFolder();\r
- trayWindowTalkButton.visible = userModelBackend.currentServerHasTalk() ? true : false;\r
+ openLocalFolderButton.visible = UserModel.currentUserHasLocalFolder();\r
+ trayWindowTalkButton.visible = UserModel.currentServerHasTalk();\r
}\r
}\r
\r
Connections {\r
- target: systrayBackend\r
+ target: Systray\r
onShowWindow: {\r
accountMenu.close();\r
\r
- trayWindow.screen = Qt.application.screens[systrayBackend.currentScreenIndex()];\r
+ trayWindow.screen = Qt.application.screens[Systray.currentScreenIndex()];\r
\r
- var position = systrayBackend.computeWindowPosition(trayWindow.width, trayWindow.height)\r
+ var position = Systray.computeWindowPosition(trayWindow.width, trayWindow.height)\r
trayWindow.x = position.x\r
trayWindow.y = position.y\r
\r
trayWindow.raise();\r
trayWindow.requestActivate();\r
\r
- systrayBackend.setOpened();\r
- userModelBackend.fetchCurrentActivityModel();\r
+ Systray.setOpened();\r
+ UserModel.fetchCurrentActivityModel();\r
}\r
onHideWindow: {\r
trayWindow.hide();\r
- systrayBackend.setClosed();\r
+ Systray.setClosed();\r
}\r
}\r
\r
\r
// We call open() instead of popup() because we want to position it\r
// exactly below the dropdown button, not the mouse\r
- onClicked:\r
- {\r
- syncPauseButton.text = systrayBackend.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all")\r
+ onClicked: {\r
+ syncPauseButton.text = Systray.syncIsPaused() ? qsTr("Resume sync for all") : qsTr("Pause sync for all")\r
accountMenu.open()\r
}\r
\r
\r
Instantiator {\r
id: userLineInstantiator\r
- model: userModelBackend\r
+ model: UserModel\r
delegate: UserLine {}\r
onObjectAdded: accountMenu.insertItem(index, object)\r
onObjectRemoved: accountMenu.removeItem(object)\r
Layout.fillHeight: true\r
}\r
}\r
- onClicked: userModelBackend.addAccount()\r
+ onClicked: UserModel.addAccount()\r
}\r
\r
MenuSeparator { id: accountMenuSeparator }\r
MenuItem {\r
id: syncPauseButton\r
font.pixelSize: Style.topLinePixelSize\r
- onClicked: systrayBackend.pauseResumeSync()\r
+ onClicked: Systray.pauseResumeSync()\r
}\r
\r
MenuItem {\r
text: qsTr("Open settings")\r
font.pixelSize: Style.topLinePixelSize\r
- onClicked: systrayBackend.openSettings()\r
+ onClicked: Systray.openSettings()\r
}\r
\r
MenuItem {\r
text: qsTr("Help")\r
font.pixelSize: Style.topLinePixelSize\r
- onClicked: systrayBackend.openHelp()\r
+ onClicked: Systray.openHelp()\r
}\r
\r
MenuItem {\r
text: qsTr("Quit Nextcloud")\r
font.pixelSize: Style.topLinePixelSize\r
- onClicked: systrayBackend.shutdown()\r
+ onClicked: Systray.shutdown()\r
}\r
}\r
}\r
\r
Image {\r
id: currentAccountStateIndicator\r
- source: userModelBackend.isUserConnected(userModelBackend.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
+ source: UserModel.isUserConnected(UserModel.currentUserId()) ? "qrc:///client/theme/colored/state-ok.svg" : "qrc:///client/theme/colored/state-offline.svg"\r
cache: false\r
x: currentAccountStateIndicatorBackground.x + 1\r
y: currentAccountStateIndicatorBackground.y + 1\r
Label {\r
id: currentAccountUser\r
width: Style.currentAccountLabelWidth\r
- text: userModelBackend.currentUserName()\r
+ text: UserModel.currentUserName()\r
elide: Text.ElideRight\r
color: "white"\r
font.pixelSize: Style.topLinePixelSize\r
Label {\r
id: currentAccountServer\r
width: Style.currentAccountLabelWidth\r
- text: userModelBackend.currentUserServer()\r
+ text: UserModel.currentUserServer()\r
elide: Text.ElideRight\r
color: "white"\r
font.pixelSize: Style.subLinePixelSize\r
HeaderButton {\r
id: openLocalFolderButton\r
\r
- visible: userModelBackend.currentUserHasLocalFolder()\r
+ visible: UserModel.currentUserHasLocalFolder()\r
icon.source: "qrc:///client/theme/white/folder.svg"\r
- onClicked: userModelBackend.openCurrentAccountLocalFolder()\r
+ onClicked: UserModel.openCurrentAccountLocalFolder()\r
}\r
\r
HeaderButton {\r
id: trayWindowTalkButton\r
\r
- visible: userModelBackend.currentServerHasTalk()\r
+ visible: UserModel.currentServerHasTalk()\r
icon.source: "qrc:///client/theme/white/talk-app.svg"\r
- onClicked: userModelBackend.openCurrentAccountTalk()\r
+ onClicked: UserModel.openCurrentAccountTalk()\r
}\r
\r
HeaderButton {\r
onClicked: {\r
/*\r
// The count() property was introduced in QtQuick.Controls 2.3 (Qt 5.10)\r
- // so we handle this with userModelBackend.openCurrentAccountServer()\r
+ // so we handle this with UserModel.openCurrentAccountServer()\r
//\r
// See UserModel::openCurrentAccountServer() to disable this workaround\r
// in the future for Qt >= 5.10\r
if(appsMenu.count() > 0) {\r
appsMenu.popup();\r
} else {\r
- userModelBackend.openCurrentAccountServer();\r
+ UserModel.openCurrentAccountServer();\r
}\r
*/\r
\r
appsMenu.open();\r
- userModelBackend.openCurrentAccountServer();\r
+ UserModel.openCurrentAccountServer();\r
}\r
\r
Menu {\r
\r
Instantiator {\r
id: appsMenuInstantiator\r
- model: appsMenuModelBackend\r
+ model: UserAppsModel\r
onObjectAdded: appsMenu.insertItem(index, object)\r
onObjectRemoved: appsMenu.removeItem(object)\r
delegate: MenuItem {\r
font.pixelSize: Style.topLinePixelSize\r
icon.source: appIconUrl\r
width: contentItem.implicitWidth + leftPadding + rightPadding\r
- onTriggered: appsMenuModelBackend.openAppUrl(appUrl)\r
+ onTriggered: UserAppsModel.openAppUrl(appUrl)\r
}\r
}\r
}\r
ToolTip.visible: hovered\r
ToolTip.delay: 1000\r
ToolTip.text: qsTr("Open share dialog")\r
- onClicked: systrayBackend.openShareDialog(displayPath,absolutePath)\r
+ onClicked: Systray.openShareDialog(displayPath,absolutePath)\r
}\r
}\r
\r