diff --git a/resources/icons/create_swarm.svg b/resources/icons/create_swarm.svg new file mode 100644 index 00000000..d590be27 --- /dev/null +++ b/resources/icons/create_swarm.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/src/constant/JamiStrings.qml b/src/constant/JamiStrings.qml index 722f829a..d0db3dce 100644 --- a/src/constant/JamiStrings.qml +++ b/src/constant/JamiStrings.qml @@ -37,6 +37,7 @@ Item { property string incomingAudioCallFrom: qsTr("Incoming audio call from {}") property string incomingVideoCallFrom: qsTr("Incoming video call from {}") property string contactSearchConversation: qsTr("Find a user or search for a conversation") + property string startASwarm: qsTr("Start a swarm") property string contactSearchInvitations: qsTr("Search your invitations") property string invitations: qsTr("Invitations") property string description: qsTr("Jami is free software for universal communication which respects the freedoms and the privacy of its users.") diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp index 11b7bfc9..02786c58 100644 --- a/src/conversationsadapter.cpp +++ b/src/conversationsadapter.cpp @@ -549,3 +549,10 @@ ConversationsAdapter::connectConversationModel() return true; } + +void +ConversationsAdapter::createSwarm() +{ + auto convModel = lrcInstance_->getCurrentConversationModel(); + convModel->createConversation({}, ""); +} \ No newline at end of file diff --git a/src/conversationsadapter.h b/src/conversationsadapter.h index 3302bd55..72da591e 100644 --- a/src/conversationsadapter.h +++ b/src/conversationsadapter.h @@ -48,6 +48,7 @@ protected: public: Q_INVOKABLE bool connectConversationModel(); + Q_INVOKABLE void createSwarm(); Q_INVOKABLE void setFilter(const QString& filterString); Q_INVOKABLE QVariantMap getConvInfoMap(const QString& convId); Q_INVOKABLE void restartConversation(const QString& convId); diff --git a/src/mainview/components/SidePanel.qml b/src/mainview/components/SidePanel.qml index 45feb8af..f0ad5fcb 100644 --- a/src/mainview/components/SidePanel.qml +++ b/src/mainview/components/SidePanel.qml @@ -56,8 +56,8 @@ Rectangle { sidePanelTabBar.selectTab(tabIndex) } - ContactSearchBar { - id: contactSearchBar + RowLayout { + id: startBar height: 40 anchors.top: sidePanelRect.top @@ -67,19 +67,46 @@ Rectangle { anchors.right: sidePanelRect.right anchors.rightMargin: 15 - onContactSearchBarTextChanged: function (text) { - // not calling positionViewAtBeginning will cause - // sort animation visual bugs - conversationListView.positionViewAtBeginning() - ConversationsAdapter.setFilter(text) + ContactSearchBar { + id: contactSearchBar + + Layout.fillHeight: true + Layout.fillWidth: true + + onContactSearchBarTextChanged: function (text) { + // not calling positionViewAtBeginning will cause + // sort animation visual bugs + conversationListView.positionViewAtBeginning() + ConversationsAdapter.setFilter(text) + } + + onReturnPressedWhileSearching: { + var listView = searchResultsListView.count ? + searchResultsListView : + conversationListView + if (listView.count) + listView.model.select(0) + } } - onReturnPressedWhileSearching: { - var listView = searchResultsListView.count ? - searchResultsListView : - conversationListView - if (listView.count) - listView.model.select(0) + PushButton { + id: startConversation + + Layout.alignment: Qt.AlignLeft + radius: JamiTheme.primaryRadius + + imageColor: JamiTheme.textColor + imagePadding: 8 + normalColor: JamiTheme.secondaryBackgroundColor + + preferredSize: startBar.height + + source: JamiResources.create_swarm_svg + toolTipText: JamiStrings.startASwarm + + onClicked: { + ConversationsAdapter.createSwarm() + } } } @@ -88,7 +115,7 @@ Rectangle { visible: ConversationsAdapter.pendingRequestCount && !contactSearchBar.textContent - anchors.top: contactSearchBar.bottom + anchors.top: startBar.bottom anchors.topMargin: visible ? 10 : 0 width: sidePanelRect.width height: visible ? 42 : 0