Merge branch 'qml_app_ui_aesthetic' into evaluation-II
@ -1,76 +0,0 @@
|
||||
/*
|
||||
* RetroShare Android QML App
|
||||
* Copyright (C) 2017 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.7
|
||||
|
||||
|
||||
Item
|
||||
{
|
||||
id: compRoot
|
||||
|
||||
property string gxs_id
|
||||
|
||||
height: 130
|
||||
width: height
|
||||
|
||||
|
||||
////////////// The following should be considered privates /////////////////////
|
||||
|
||||
property bool has_avatar: false
|
||||
property int avatarAttemptCnt: 0
|
||||
function getDetails()
|
||||
{
|
||||
++compRoot.avatarAttemptCnt
|
||||
rsApi.request(
|
||||
"/identity/get_identity_details",
|
||||
JSON.stringify({ gxs_id: compRoot.gxs_id }),
|
||||
function(par)
|
||||
{
|
||||
var jData = JSON.parse(par.response).data
|
||||
setDetails(jData)
|
||||
if(!compRoot.has_avatar &&
|
||||
compRoot.avatarAttemptCnt < 3) getDetails()
|
||||
})
|
||||
}
|
||||
function setDetails(data)
|
||||
{
|
||||
compRoot.has_avatar = data.avatar.length > 0
|
||||
if(compRoot.has_avatar)
|
||||
{
|
||||
contactAvatar.source =
|
||||
"data:image/png;base64," + data.avatar
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: if(visible && !has_avatar) getDetails()
|
||||
onVisibleChanged: if(visible && !has_avatar) getDetails()
|
||||
|
||||
Image
|
||||
{
|
||||
id: contactAvatar
|
||||
anchors.fill: parent
|
||||
visible: compRoot.has_avatar
|
||||
}
|
||||
|
||||
ColorHash
|
||||
{
|
||||
anchors.fill: parent
|
||||
visible: !compRoot.has_avatar
|
||||
hash: compRoot.gxs_id
|
||||
}
|
||||
}
|
117
retroshare-qml-app/src/ChatBubbleDelegate.qml
Normal file
@ -0,0 +1,117 @@
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.2
|
||||
import QtQuick.Controls 2.0
|
||||
import "." // To load styles
|
||||
import "./components"
|
||||
|
||||
Item
|
||||
{
|
||||
|
||||
id: chatBubbleDelegate
|
||||
height: bubble.height
|
||||
width: parent.width
|
||||
|
||||
property var styles: StyleChat.bubble
|
||||
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: rootBubble
|
||||
anchors.fill: parent
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: bubble
|
||||
width: Math.min (
|
||||
rootBubble.width * styles.bubbleMaxWidth,
|
||||
Math.max(mesageText.implicitWidth, sendersName.implicitWidth )
|
||||
) + timeText.implicitWidth + styles.aditionalBubbleWidth
|
||||
height: mesageText.height + sendersName.height + styles.aditionalBubbleHeight
|
||||
|
||||
|
||||
anchors.left: (model.incoming)? parent.left : undefined
|
||||
anchors.right: (!model.incoming)? parent.right : undefined
|
||||
|
||||
|
||||
color: (!model.incoming)? styles.colorOutgoing : styles.colorIncoming
|
||||
radius: styles.radius
|
||||
|
||||
|
||||
Text
|
||||
{
|
||||
id: sendersName
|
||||
visible: model.incoming
|
||||
text: (model.incoming)? model.author_name + ":" : ""
|
||||
color: styles.colorSenderName
|
||||
font.bold: true
|
||||
|
||||
anchors.leftMargin: styles.lMarginBubble
|
||||
anchors.rightMargin: styles.rMarginBubble
|
||||
anchors.topMargin: styles.tMarginBubble
|
||||
anchors.top: bubble.top
|
||||
|
||||
anchors.left: (model.incoming)? parent.left : undefined
|
||||
anchors.right:(!model.incoming)? parent.right : undefined
|
||||
|
||||
// Used for give minimum heigh to time when the message is bigger than the bubble in sended messages
|
||||
height: (model.incoming || !model.incoming &&
|
||||
mesageText.implicitWidth >= (rootBubble.width * styles.bubbleMaxWidth) )? implicitHeight : 0
|
||||
}
|
||||
|
||||
Text
|
||||
{
|
||||
id: timeText
|
||||
text: getMessageTime()
|
||||
color: styles.colorMessageTime
|
||||
|
||||
anchors.left: (!model.incoming)? parent.left : undefined
|
||||
anchors.right:(model.incoming)? parent.right : undefined
|
||||
|
||||
anchors.top: bubble.top
|
||||
anchors.leftMargin: styles.lMarginBubble
|
||||
anchors.rightMargin: styles.rMarginBubble
|
||||
anchors.topMargin: styles.tMarginBubble
|
||||
|
||||
}
|
||||
|
||||
|
||||
Text
|
||||
{
|
||||
id: mesageText
|
||||
text: model.msg
|
||||
width: rootBubble.width * styles.bubbleMaxWidth + timeText.width
|
||||
anchors.left: (model.incoming)? parent.left : undefined
|
||||
anchors.right:(!model.incoming)? parent.right : undefined
|
||||
|
||||
anchors.top: sendersName.bottom
|
||||
anchors.leftMargin: styles.lMarginBubble
|
||||
anchors.rightMargin: styles.rMarginBubble
|
||||
|
||||
// Used for the correct alineation when the message must be on right
|
||||
horizontalAlignment:(!model.incoming &&
|
||||
mesageText.implicitWidth <= (rootBubble.width * styles.bubbleMaxWidth)
|
||||
)? Text.AlignRight : Text.AlignLeft
|
||||
|
||||
wrapMode: Text.Wrap
|
||||
font.pixelSize: styles.messageTextSize
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function getMessageTime()
|
||||
{
|
||||
var timeFormat = "hh:mm";
|
||||
var recvDate = new Date(model.recv_time*1000)
|
||||
|
||||
var timeString = Qt.formatDateTime(recvDate, timeFormat)
|
||||
return timeString
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
139
retroshare-qml-app/src/ChatCache.qml
Normal file
@ -0,0 +1,139 @@
|
||||
pragma Singleton
|
||||
|
||||
import QtQml 2.3
|
||||
import QtQuick.Controls 2.0
|
||||
import org.retroshare.qml_components.LibresapiLocalClient 1.0
|
||||
import Qt.labs.settings 1.0
|
||||
|
||||
QtObject
|
||||
{
|
||||
|
||||
id: chatCache
|
||||
|
||||
property QtObject lastMessageCache: QtObject
|
||||
{
|
||||
id: lastMessageCache
|
||||
property var lastMessageList: ({})
|
||||
|
||||
signal lastMessageChanged(var chatI, var newLastMessage)
|
||||
|
||||
|
||||
function updateLastMessageCache (chatId, chatModel)
|
||||
{
|
||||
console.log("updateLastMessageCache (chatId, chatModel)", chatId)
|
||||
// First creates the chat id object for don't wait to work with the object if is needed to call RS api
|
||||
if (!lastMessageList[chatId]) {
|
||||
lastMessageList[chatId] = {}
|
||||
console.log("Last message cache created!")
|
||||
}
|
||||
if (!chatModel) {
|
||||
rsApi.request( "/chat/messages/"+chatId, "", function (par){
|
||||
updateLastMessage(chatId, par.response)
|
||||
})
|
||||
} else {
|
||||
updateLastMessage (chatId, chatModel)
|
||||
}
|
||||
}
|
||||
|
||||
function updateLastMessage (chatId, chatModel)
|
||||
{
|
||||
console.log("updateLastMessage (chatId, chatModel)")
|
||||
var lastMessage = findChatLastMessage (chatModel)
|
||||
lastMessageList[chatId].lastMessage = lastMessage
|
||||
lastMessageChanged(chatId, lastMessage)
|
||||
}
|
||||
|
||||
function findChatLastMessage (chatModel)
|
||||
{
|
||||
var messagesData = JSON.parse(chatModel).data
|
||||
return messagesData.slice(-1)[0]
|
||||
}
|
||||
|
||||
function findChatFirstMessage (chatModel)
|
||||
{
|
||||
var messagesData = JSON.parse(chatModel).data
|
||||
return messagesData.slice[0]
|
||||
}
|
||||
|
||||
function setRemoteGXS (chatId, remoteGXS)
|
||||
{
|
||||
if (!lastMessageList[chatId]) {
|
||||
lastMessageList[chatId] = {}
|
||||
console.log("Last message cache created!")
|
||||
}
|
||||
if (lastMessageList[chatId] && !lastMessageList[chatId].remoteGXS){
|
||||
lastMessageList[chatId].remoteGXS = remoteGXS
|
||||
return true
|
||||
}
|
||||
else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function getChatIdFromGxs (gxs)
|
||||
{
|
||||
for (var key in lastMessageList) {
|
||||
if ( lastMessageList[key].remoteGXS &&
|
||||
lastMessageList[key].remoteGXS.gxs === gxs ) {
|
||||
return key
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
function getGxsFromChatId (chatId)
|
||||
{
|
||||
if (lastMessageList[chatId]) return lastMessageList[chatId].remoteGXS
|
||||
return undefined
|
||||
}
|
||||
|
||||
function getChatLastMessage (chatId)
|
||||
{
|
||||
if (lastMessageList[chatId]) {
|
||||
return lastMessageList[chatId].lastMessage
|
||||
}
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
property QtObject contactsCache: QtObject
|
||||
{
|
||||
id: contactsCache
|
||||
property var contactsList
|
||||
property var own
|
||||
property var identityDetails: ({})
|
||||
|
||||
|
||||
function getContactFromGxsId (gxsId)
|
||||
{
|
||||
console.log("getContactFromGxsId (gxsId)", gxsId)
|
||||
for(var i in contactsList)
|
||||
{
|
||||
if (contactsList[i].gxs_id == gxsId) return contactsList[i]
|
||||
}
|
||||
}
|
||||
|
||||
function getIdentityDetails (gxsId)
|
||||
{
|
||||
if (identityDetails[gxsId]) return identityDetails[gxsId]
|
||||
return ""
|
||||
}
|
||||
|
||||
function setIdentityDetails (jData)
|
||||
{
|
||||
identityDetails[jData.gxs_id] = jData
|
||||
}
|
||||
|
||||
function getIdentityAvatar (gxsId)
|
||||
{
|
||||
|
||||
if (identityDetails[gxsId] && identityDetails[gxsId].avatar !== undefined)
|
||||
{
|
||||
return identityDetails[gxsId].avatar
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -18,15 +18,22 @@
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.2
|
||||
import org.retroshare.qml_components.LibresapiLocalClient 1.0
|
||||
import "." //Needed for TokensManager singleton
|
||||
import "./components"
|
||||
import "./components/emoji"
|
||||
|
||||
Item
|
||||
{
|
||||
id: chatView
|
||||
property string chatId
|
||||
property var gxsInfo: ""
|
||||
property int token: 0
|
||||
|
||||
property string objectName:"chatView"
|
||||
|
||||
|
||||
function refreshData()
|
||||
{
|
||||
console.log("chatView.refreshData()", visible)
|
||||
@ -38,66 +45,342 @@ Item
|
||||
token = JSON.parse(par.response).statetoken
|
||||
TokensManager.registerToken(token, refreshData)
|
||||
|
||||
ChatCache.lastMessageCache.updateLastMessageCache(chatId, chatModel.json)
|
||||
|
||||
if(chatListView.visible)
|
||||
{
|
||||
chatListView.positionViewAtEnd()
|
||||
rsApi.request("/chat/mark_chat_as_read/"+chatId)
|
||||
}
|
||||
} )
|
||||
})
|
||||
}
|
||||
|
||||
Component.onCompleted: refreshData()
|
||||
Component.onCompleted:
|
||||
{
|
||||
refreshData()
|
||||
}
|
||||
onFocusChanged: focus && refreshData()
|
||||
|
||||
function changeState ()
|
||||
{
|
||||
toolBar.state = "CHATVIEW"
|
||||
gxsInfo= ChatCache.lastMessageCache.getGxsFromChatId(chatView.chatId)
|
||||
toolBar.gxsSource = gxsInfo.gxs
|
||||
toolBar.titleText = gxsInfo.name
|
||||
}
|
||||
|
||||
|
||||
JSONListModel
|
||||
{
|
||||
id: chatModel
|
||||
query: "$.data[*]"
|
||||
}
|
||||
|
||||
Component
|
||||
{
|
||||
id: chatMessageDelegate
|
||||
Item
|
||||
{
|
||||
height: 20
|
||||
Row
|
||||
{
|
||||
Text { text: author_name }
|
||||
Text { text: ": " + msg }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListView
|
||||
{
|
||||
property var styles: StyleChat.chat
|
||||
id: chatListView
|
||||
width: parent.width
|
||||
height: 300
|
||||
width: parent.width - styles.bubbleMargin
|
||||
height: parent.height - inferiorPanel.height
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
model: chatModel.model
|
||||
delegate: chatMessageDelegate
|
||||
}
|
||||
delegate: ChatBubbleDelegate {}
|
||||
spacing: styles.bubbleSpacing
|
||||
preferredHighlightBegin: 1
|
||||
|
||||
TextField
|
||||
{
|
||||
id: msgComposer
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.left: parent.left
|
||||
width: chatView.width - sendButton.width
|
||||
}
|
||||
|
||||
Button
|
||||
{
|
||||
id: sendButton
|
||||
text: "Send"
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
|
||||
onClicked:
|
||||
onHeightChanged:
|
||||
{
|
||||
var jsonData = {"chat_id":chatView.chatId, "msg":msgComposer.text}
|
||||
rsApi.request( "/chat/send_message", JSON.stringify(jsonData),
|
||||
function(par) { msgComposer.text = ""; } )
|
||||
chatListView.currentIndex = count - 1
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
EmojiPicker {
|
||||
id: emojiPicker
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.topMargin: parent.height / 2
|
||||
anchors.bottomMargin: categorySelectorHeight
|
||||
|
||||
property int categorySelectorHeight: 50
|
||||
|
||||
color: "white"
|
||||
buttonWidth: 40
|
||||
textArea: inferiorPanel.textMessageArea //the TextArea in which EmojiPicker is pasting the Emoji into
|
||||
|
||||
state: "EMOJI_HIDDEN"
|
||||
states: [
|
||||
State {
|
||||
name: "EMOJI_HIDDEN"
|
||||
PropertyChanges { target: emojiPicker; anchors.topMargin: parent.height }
|
||||
PropertyChanges { target: emojiPicker; anchors.bottomMargin: -1 }
|
||||
},
|
||||
State {
|
||||
name: "EMOJI_SHOWN"
|
||||
PropertyChanges { target: emojiPicker; anchors.topMargin: parent.height / 2 }
|
||||
PropertyChanges { target: emojiPicker; anchors.bottomMargin: categorySelectorHeight }
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Item
|
||||
{
|
||||
|
||||
property var styles: StyleChat.inferiorPanel
|
||||
property alias textMessageArea: msgComposer.textMessageArea
|
||||
|
||||
id: inferiorPanel
|
||||
height: ( msgComposer.height > styles.height)? msgComposer.height: styles.height
|
||||
width: parent.width
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: backgroundRectangle
|
||||
anchors.fill: parent.fill
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
color:inferiorPanel.styles.backgroundColor
|
||||
border.color: inferiorPanel.styles.borderColor
|
||||
}
|
||||
|
||||
BtnIcon
|
||||
{
|
||||
|
||||
id: attachButton
|
||||
|
||||
property var styles: StyleChat.inferiorPanel.btnIcon
|
||||
|
||||
height: styles.height
|
||||
width: styles.width
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
anchors.margins: styles.margin
|
||||
|
||||
imgUrl: styles.attachIconUrl
|
||||
}
|
||||
|
||||
|
||||
RowLayout
|
||||
{
|
||||
id: msgComposer
|
||||
property var styles: StyleChat.inferiorPanel.msgComposer
|
||||
property alias textMessageArea: flickable.msgField
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: attachButton.right
|
||||
|
||||
width: chatView.width -
|
||||
(sendButton.width + sendButton.anchors.margins) -
|
||||
(attachButton.width + attachButton.anchors.margins) -
|
||||
(emojiButton.width + emojiButton.anchors.margins)
|
||||
|
||||
height: (flickable.contentHeight < styles.maxHeight)? flickable.contentHeight : styles.maxHeight
|
||||
|
||||
Flickable
|
||||
{
|
||||
id: flickable
|
||||
property alias msgField: msgField
|
||||
|
||||
anchors.fill: parent
|
||||
flickableDirection: Flickable.VerticalFlick
|
||||
|
||||
width: parent.width
|
||||
|
||||
contentWidth: msgField.width
|
||||
contentHeight: msgField.height
|
||||
contentY: contentHeight - height
|
||||
|
||||
ScrollBar.vertical: ScrollBar {}
|
||||
|
||||
clip: true
|
||||
|
||||
TextArea
|
||||
{
|
||||
property var styles: StyleChat.inferiorPanel.msgComposer
|
||||
id: msgField
|
||||
|
||||
height: contentHeight + font.pixelSize
|
||||
|
||||
width: parent.width
|
||||
|
||||
placeholderText: styles.placeHolder
|
||||
background: styles.background
|
||||
|
||||
wrapMode: TextEdit.Wrap
|
||||
|
||||
focus: true
|
||||
|
||||
inputMethodHints: Qt.ImhMultiLine
|
||||
|
||||
font.pixelSize: styles.messageBoxTextSize
|
||||
|
||||
onTextChanged:
|
||||
{
|
||||
var msgLenght = (msgField.preeditText)? msgField.preeditText.length : msgField.length
|
||||
|
||||
if (msgLenght == 0)
|
||||
{
|
||||
sendButton.state = ""
|
||||
}
|
||||
else if (msgLenght > 0 )
|
||||
{
|
||||
sendButton.state = "SENDBTN"
|
||||
}
|
||||
}
|
||||
|
||||
property bool shiftPressed: false
|
||||
Keys.onPressed:
|
||||
{
|
||||
if ((event.key === Qt.Key_Return || event.key === Qt.Key_Enter)
|
||||
&& !shiftPressed)
|
||||
{
|
||||
if (sendButton.state == "SENDBTN" )
|
||||
{
|
||||
chatView.sendMessage ()
|
||||
}
|
||||
}
|
||||
else if (event.key === Qt.Key_Shift)
|
||||
{
|
||||
shiftPressed = true
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onReleased:
|
||||
{
|
||||
if (event.key === Qt.Key_Shift)
|
||||
{
|
||||
shiftPressed = false
|
||||
}
|
||||
}
|
||||
function reset ()
|
||||
{
|
||||
Qt.inputMethod.reset()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BtnIcon
|
||||
{
|
||||
|
||||
id: emojiButton
|
||||
|
||||
property var styles: StyleChat.inferiorPanel.btnIcon
|
||||
|
||||
height: styles.height
|
||||
width: styles.width
|
||||
|
||||
anchors.right: sendButton.left
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
anchors.margins: styles.margin
|
||||
|
||||
imgUrl: styles.emojiIconUrl
|
||||
|
||||
onClicked: {
|
||||
if (emojiPicker.state == "EMOJI_HIDDEN") {
|
||||
emojiPicker.state = "EMOJI_SHOWN"
|
||||
} else {
|
||||
emojiPicker.state = "EMOJI_HIDDEN"
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BtnIcon
|
||||
{
|
||||
|
||||
id: sendButton
|
||||
|
||||
property var styles: StyleChat.inferiorPanel.btnIcon
|
||||
property alias icon: sendButton.imgUrl
|
||||
|
||||
height: styles.height
|
||||
width: styles.width
|
||||
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
anchors.margins: styles.margin
|
||||
|
||||
imgUrl: styles.microIconUrl
|
||||
|
||||
onClicked:
|
||||
{
|
||||
if (sendButton.state == "SENDBTN" )
|
||||
{
|
||||
chatView.sendMessage ()
|
||||
}
|
||||
}
|
||||
|
||||
onPressed:
|
||||
{
|
||||
if (sendButton.state == "RECORDING" )
|
||||
{
|
||||
sendButton.state = ""
|
||||
}
|
||||
else if (sendButton.state == "" )
|
||||
{
|
||||
sendButton.state = "RECORDING"
|
||||
}
|
||||
}
|
||||
|
||||
onReleased:
|
||||
{
|
||||
if (sendButton.state == "RECORDING" )
|
||||
{
|
||||
sendButton.state = ""
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
states:
|
||||
[
|
||||
State
|
||||
{
|
||||
name: ""
|
||||
PropertyChanges { target: sendButton; icon: styles.microIconUrl}
|
||||
},
|
||||
State
|
||||
{
|
||||
name: "RECORDING"
|
||||
PropertyChanges { target: sendButton; icon: styles.microMuteIconUrl}
|
||||
},
|
||||
State
|
||||
{
|
||||
name: "SENDBTN"
|
||||
PropertyChanges { target: sendButton; icon: styles.sendIconUrl}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
function sendMessage ()
|
||||
{
|
||||
if (emojiPicker.state == "EMOJI_SHOWN") emojiPicker.state = "EMOJI_HIDDEN"
|
||||
|
||||
var msgText = getCompleteMessageText()
|
||||
|
||||
var jsonData = {"chat_id":chatView.chatId, "msg":msgText}
|
||||
rsApi.request( "/chat/send_message", JSON.stringify(jsonData),
|
||||
function(par)
|
||||
{
|
||||
msgField.text = ""
|
||||
msgField.reset();
|
||||
})
|
||||
}
|
||||
|
||||
// This function is needed for the compatibility with auto predictive keyboards
|
||||
function getCompleteMessageText (){
|
||||
var completeMsg
|
||||
if (msgField.preeditText) completeMsg = msgField.text + msgField.preeditText
|
||||
else completeMsg = msgField.text
|
||||
return completeMsg
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import "." //Needed for ClipboardWrapper singleton
|
||||
import "./components"
|
||||
import "URI.js" as UriJs
|
||||
|
||||
Item
|
||||
@ -68,9 +69,10 @@ Item
|
||||
Image
|
||||
{
|
||||
source: cntDt.is_contact ?
|
||||
"qrc:/icons/rating.png" :
|
||||
"qrc:/icons/rating-unrated.png"
|
||||
"qrc:/icons/rating.svg" :
|
||||
"qrc:/icons/rating-unrated.svg"
|
||||
height: parent.height - 4
|
||||
sourceSize.height: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
|
@ -30,9 +30,20 @@ Item
|
||||
property bool searching: false
|
||||
onSearchingChanged: !searching && contactsSortWorker.sendMessage({})
|
||||
|
||||
Component.onCompleted: refreshAll()
|
||||
property string objectName:"contactsView"
|
||||
|
||||
Component.onCompleted:
|
||||
{
|
||||
refreshAll()
|
||||
}
|
||||
onFocusChanged: focus && refreshAll()
|
||||
|
||||
function changeState ()
|
||||
{
|
||||
toolBar.state = "CONTACTSVIEW"
|
||||
toolBar.searchBtnCb = toggleSearchBox
|
||||
}
|
||||
|
||||
WorkerScript
|
||||
{
|
||||
id: contactsSortWorker
|
||||
@ -40,6 +51,11 @@ Item
|
||||
onMessage: contactsListModel.json = JSON.stringify(messageObject)
|
||||
}
|
||||
|
||||
function toggleSearchBox (){
|
||||
if (searching) searching = false
|
||||
else searching = true
|
||||
}
|
||||
|
||||
function refreshAll()
|
||||
{
|
||||
refreshOwn()
|
||||
@ -51,6 +67,7 @@ Item
|
||||
{
|
||||
console.log("contactsView.refreshContactsCB()", visible)
|
||||
var token = JSON.parse(par.response).statetoken
|
||||
ChatCache.contactsCache.contactsList = JSON.parse(par.response).data
|
||||
TokensManager.registerToken(token, refreshContacts)
|
||||
contactsSortWorker.sendMessage(
|
||||
{'action': 'refreshContacts', 'response': par.response})
|
||||
@ -71,6 +88,7 @@ Item
|
||||
|
||||
if(json.data.length > 0)
|
||||
{
|
||||
ChatCache.contactsCache.own = json.data[0]
|
||||
contactsView.own_gxs_id = json.data[0].gxs_id
|
||||
contactsView.own_nick = json.data[0].name
|
||||
if(mainWindow.user_name.length === 0)
|
||||
@ -101,6 +119,11 @@ Item
|
||||
TokensManager.registerToken(json.statetoken, refreshUnread)
|
||||
contactsSortWorker.sendMessage(
|
||||
{'action': 'refreshUnread', 'response': par.response})
|
||||
json.data.forEach (function (chat)
|
||||
{
|
||||
ChatCache.lastMessageCache.updateLastMessageCache(chat.chat_id)
|
||||
ChatCache.lastMessageCache.setRemoteGXS (chat.chat_id, { gxs: chat.remote_author_id, name: chat.remote_author_name})
|
||||
})
|
||||
}
|
||||
function refreshUnread()
|
||||
{
|
||||
@ -143,31 +166,59 @@ Item
|
||||
Rectangle
|
||||
{
|
||||
id: searchBox
|
||||
visible: contactsView.searching
|
||||
// visible: contactsView.searching
|
||||
|
||||
height: searchText.height
|
||||
width: searchText.width
|
||||
height: searchText.height + 10
|
||||
width: parent.width * 0.9
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
|
||||
Image
|
||||
{
|
||||
id: searchIcon
|
||||
height: searchText.height - 4
|
||||
width: searchText.height - 4
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
source: "qrc:/icons/edit-find.png"
|
||||
}
|
||||
anchors.leftMargin: 5
|
||||
anchors.rightMargin: 5
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: "white"
|
||||
|
||||
TextField
|
||||
{
|
||||
id: searchText
|
||||
anchors.left: searchIcon.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
// placeholderText : "Search contacts..."
|
||||
width: parent.width
|
||||
anchors.leftMargin: 5
|
||||
height: 0
|
||||
|
||||
background: Rectangle
|
||||
{
|
||||
border.width: 2
|
||||
radius: 5
|
||||
border.color: searchText.focus ? "cornflowerblue" : "lightgrey"
|
||||
color: searchText.focus ? "white" : "ghostwhite"
|
||||
}
|
||||
|
||||
onTextChanged:
|
||||
contactsSortWorker.sendMessage(
|
||||
{'action': 'searchContact', 'sexp': text})
|
||||
}
|
||||
|
||||
states:
|
||||
[
|
||||
State
|
||||
{
|
||||
when: contactsView.searching;
|
||||
PropertyChanges { target: searchText; height: implicitHeight }
|
||||
PropertyChanges { target: searchText; placeholderText : "Search contacts..." }
|
||||
PropertyChanges { target: searchBox; height: searchText.height + 10 }
|
||||
},
|
||||
State
|
||||
{
|
||||
when: !contactsView.searching;
|
||||
PropertyChanges { target: searchText; height: 0 }
|
||||
PropertyChanges { target: searchBox; height: 0 }
|
||||
}
|
||||
]
|
||||
transitions: Transition
|
||||
{
|
||||
NumberAnimation { property: "height"; duration: 500; easing.type: Easing.InOutQuad}
|
||||
}
|
||||
}
|
||||
|
||||
Text
|
||||
@ -187,4 +238,5 @@ Item
|
||||
|
||||
property bool defaultIdentityCreated: false
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,101 +18,256 @@
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import "." //Needed for ChatCache singleton
|
||||
import "./components"
|
||||
|
||||
Item
|
||||
{
|
||||
id: delegateRoot
|
||||
height: 40
|
||||
height: 57
|
||||
width: parent.width
|
||||
|
||||
MouseArea
|
||||
|
||||
property var chatId: undefined
|
||||
property var lastMessageData: ({})
|
||||
property var locale: Qt.locale()
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: contactItem
|
||||
|
||||
anchors.fill: parent
|
||||
onClicked:
|
||||
color: contactItemArea.containsPress ? "lightgrey" : "transparent"
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
MouseArea
|
||||
{
|
||||
console.log("GxsIntentityDelegate onclicked:", model.name,
|
||||
model.gxs_id)
|
||||
contactsView.searching = false
|
||||
if(model.own) contactsView.own_gxs_id = model.gxs_id
|
||||
else
|
||||
id: contactItemArea
|
||||
anchors.fill: parent
|
||||
onClicked:
|
||||
{
|
||||
var jsonData = { "own_gxs_hex": contactsView.own_gxs_id,
|
||||
"remote_gxs_hex": model.gxs_id }
|
||||
rsApi.request("/chat/initiate_distant_chat",
|
||||
JSON.stringify(jsonData),
|
||||
contactsView.startChatCallback)
|
||||
}
|
||||
}
|
||||
|
||||
onPressAndHold: showDetails()
|
||||
|
||||
ColorHash
|
||||
{
|
||||
id: colorHash
|
||||
|
||||
hash: model.gxs_id
|
||||
height: parent.height - 4
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 2
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
onClicked: delegateRoot.showDetails()
|
||||
}
|
||||
}
|
||||
|
||||
Text
|
||||
{
|
||||
id: nickText
|
||||
color: model.own ? "blue" : "black"
|
||||
text: model.name
|
||||
anchors.left: colorHash.right
|
||||
anchors.leftMargin: 5
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 10
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
height: parent.height - 10
|
||||
spacing: 4
|
||||
|
||||
Rectangle
|
||||
{
|
||||
visible: model.unread_count > 0
|
||||
|
||||
color: "cornflowerblue"
|
||||
antialiasing: true
|
||||
border.color: "blue"
|
||||
border.width: 1
|
||||
height: parent.height - 4
|
||||
radius: height/2
|
||||
width: height
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
Text
|
||||
console.log("GxsIntentityDelegate onclicked:", model.name,
|
||||
model.gxs_id)
|
||||
contactsView.searching = false
|
||||
if(model.own) contactsView.own_gxs_id = model.gxs_id
|
||||
else
|
||||
{
|
||||
color: "white"
|
||||
font.bold: true
|
||||
text: model.unread_count
|
||||
anchors.centerIn: parent
|
||||
var jsonData = { "own_gxs_hex": contactsView.own_gxs_id,
|
||||
"remote_gxs_hex": model.gxs_id }
|
||||
rsApi.request("/chat/initiate_distant_chat",
|
||||
JSON.stringify(jsonData),
|
||||
startDistantChatCB)
|
||||
}
|
||||
}
|
||||
|
||||
Image
|
||||
onPressAndHold: showDetails()
|
||||
hoverEnabled: true
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: backgroundRectangle
|
||||
anchors.fill: parent.fill
|
||||
anchors.right: parent.right
|
||||
width: parent.width - colorHash.width - 15
|
||||
height: parent.height
|
||||
color:"transparent"
|
||||
|
||||
Rectangle
|
||||
{
|
||||
source: model.is_contact ?
|
||||
"qrc:/icons/rating.png" :
|
||||
"qrc:/icons/rating-unrated.png"
|
||||
height: parent.height - 4
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
id: borderBottom
|
||||
width: parent.width
|
||||
height: 1
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
color: "lightgrey"
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
anchors.fill: parent
|
||||
color: "transparent"
|
||||
anchors.margins: 5
|
||||
|
||||
AvatarOrColorHash
|
||||
{
|
||||
id: colorHash
|
||||
|
||||
gxs_id: model.gxs_id
|
||||
|
||||
height: parent.height - 4
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 2
|
||||
|
||||
onlyCached: true
|
||||
}
|
||||
|
||||
Column
|
||||
{
|
||||
|
||||
id: chatInfoRow
|
||||
height: parent.height
|
||||
width: parent.width - isContactRow.width - colorHash.width
|
||||
anchors.left: colorHash.right
|
||||
anchors.leftMargin: 10
|
||||
anchors.right: isContactRow.left
|
||||
anchors.rightMargin: 5
|
||||
|
||||
|
||||
Item
|
||||
{
|
||||
width: parent.width
|
||||
height: parent.height /2
|
||||
|
||||
Text
|
||||
{
|
||||
id: nickText
|
||||
color: model.own ? "blue" : "black"
|
||||
text: model.name
|
||||
font.bold: true
|
||||
anchors.bottom: parent.bottom
|
||||
}
|
||||
|
||||
Text
|
||||
{
|
||||
text: setTime()
|
||||
anchors.right: parent.right
|
||||
color: "darkslategrey"
|
||||
anchors.bottom: parent.bottom
|
||||
}
|
||||
}
|
||||
|
||||
Item
|
||||
{
|
||||
id: lastMessageText
|
||||
width: parent.width
|
||||
height: (lastMessageData && lastMessageData.msg !== undefined)? parent.height /2 : 0
|
||||
|
||||
Text
|
||||
{
|
||||
id: lastMessageSender
|
||||
font.italic: true
|
||||
color: "royalblue"
|
||||
text: ((lastMessageData && lastMessageData.incoming !== undefined) && !lastMessageData.incoming)? "You: " : ""
|
||||
height: parent.height
|
||||
}
|
||||
|
||||
Text
|
||||
{
|
||||
id: lastMessageMsg
|
||||
anchors.left: lastMessageSender.right
|
||||
text: (lastMessageData && lastMessageData.msg !== undefined)? lastMessageData.msg : ""
|
||||
rightPadding: 5
|
||||
elide: Text.ElideRight
|
||||
color: "darkslategrey"
|
||||
width: chatInfoRow.width - 30
|
||||
height: parent.height
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
visible: model.unread_count > 0
|
||||
|
||||
color: "cornflowerblue"
|
||||
antialiasing: true
|
||||
height: parent.height - 6
|
||||
radius: height/2
|
||||
width: height
|
||||
// anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.right: parent.right
|
||||
|
||||
Text
|
||||
{
|
||||
color: "white"
|
||||
font.bold: true
|
||||
text: model.unread_count
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Row
|
||||
{
|
||||
id: isContactRow
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 10
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
height: parent.height - 10
|
||||
spacing: 4
|
||||
|
||||
Image
|
||||
{
|
||||
source: model.is_contact ?
|
||||
"qrc:/icons/rating.svg" :
|
||||
"qrc:/icons/rating-unrated.svg"
|
||||
height: parent.height - 4
|
||||
sourceSize.height: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
id: isContactIcon
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Component.onCompleted:
|
||||
{
|
||||
if (!chatId){
|
||||
chatId = getChatIdFromGXS()
|
||||
}
|
||||
if (chatId) {
|
||||
var last = getChatLastMessage(chatId)
|
||||
if (last) lastMessageData = last
|
||||
}
|
||||
}
|
||||
|
||||
Connections
|
||||
{
|
||||
target: ChatCache.lastMessageCache
|
||||
onLastMessageChanged: {
|
||||
if (!chatId) {
|
||||
chatId = getChatIdFromGXS()
|
||||
}
|
||||
if (chatId && chatId === chatI){
|
||||
console.log("New last message received!")
|
||||
lastMessageData = newLastMessage
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getChatLastMessage (chatId)
|
||||
{
|
||||
return ChatCache.lastMessageCache.getChatLastMessage(chatId)
|
||||
}
|
||||
|
||||
function getChatIdFromGXS ()
|
||||
{
|
||||
var id= ChatCache.lastMessageCache.getChatIdFromGxs(model.gxs_id)
|
||||
return ChatCache.lastMessageCache.getChatIdFromGxs(model.gxs_id)
|
||||
}
|
||||
function setTime()
|
||||
{
|
||||
if (!lastMessageData || lastMessageData.recv_time === undefined) return ""
|
||||
|
||||
var timeFormat = "dd.MM.yyyy";
|
||||
var recvDate = new Date(lastMessageData.recv_time*1000)
|
||||
|
||||
// Check if is today
|
||||
if ( new Date (lastMessageData.recv_time*1000).setHours(0,0,0,0) == new Date ().setHours(0,0,0,0))
|
||||
{
|
||||
timeFormat = "hh:mm"
|
||||
}
|
||||
var timeString = Qt.formatDateTime(recvDate, timeFormat)
|
||||
return timeString
|
||||
}
|
||||
|
||||
function showDetails()
|
||||
@ -123,4 +278,11 @@ Item
|
||||
"qrc:/ContactDetails.qml",
|
||||
{md: contactsListView.model.get(index)})
|
||||
}
|
||||
function startDistantChatCB (par)
|
||||
{
|
||||
var chId = JSON.parse(par.response).data.chat_id
|
||||
ChatCache.lastMessageCache.setRemoteGXS(chId, { gxs: model.gxs_id, name: model.name})
|
||||
contactsView.startChatCallback (par)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ Item
|
||||
target: loginView
|
||||
visible: true
|
||||
buttonText: qsTr("Save")
|
||||
iconUrl: "qrc:/icons/edit-image-face-detect.png"
|
||||
iconUrl: "qrc:/icons/edit-image-face-detect.svg"
|
||||
suggestionText: qsTr("Create your profile")
|
||||
onSubmit:
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ Item
|
||||
{
|
||||
id: loginView
|
||||
property string buttonText: qsTr("Unlock")
|
||||
property string iconUrl: "qrc:/icons/emblem-locked.png"
|
||||
property string iconUrl: "qrc:/icons/emblem-locked.svg"
|
||||
property string login
|
||||
property bool loginPreset: false
|
||||
property bool advancedMode: false
|
||||
@ -53,6 +53,8 @@ Item
|
||||
{
|
||||
source: loginView.iconUrl
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
height: 128
|
||||
sourceSize.height: height
|
||||
}
|
||||
|
||||
Text
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import "components/."
|
||||
|
||||
Item
|
||||
{
|
||||
@ -25,19 +26,50 @@ Item
|
||||
|
||||
property string pgpName
|
||||
property alias pgpId: pgpIdTxt.text
|
||||
property bool isOnline
|
||||
|
||||
property string nodeCert
|
||||
|
||||
property var locations
|
||||
|
||||
|
||||
Image
|
||||
{
|
||||
id: nodeStatusImage
|
||||
source: isOnline?
|
||||
"icons/state-ok.svg" :
|
||||
"icons/state-offline.svg"
|
||||
|
||||
height: 128
|
||||
sourceSize.height: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: 6
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
||||
|
||||
|
||||
Column
|
||||
{
|
||||
id: pgpColumn
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.top: nodeStatusImage.bottom
|
||||
width: parent.width
|
||||
|
||||
Text { text: nodeDetailsRoot.pgpName.replace(" (Generated by RetroShare) <>", "") }
|
||||
Text { id: pgpIdTxt }
|
||||
Text
|
||||
{
|
||||
text: nodeDetailsRoot.pgpName.replace(" (Generated by RetroShare) <>", "")
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
font.pixelSize: 20
|
||||
}
|
||||
Text
|
||||
{
|
||||
id: pgpIdTxt
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: "darkslategrey"
|
||||
}
|
||||
}
|
||||
|
||||
JSONListModel
|
||||
@ -48,10 +80,36 @@ Item
|
||||
|
||||
ListView
|
||||
{
|
||||
width: parent.width
|
||||
width: parent.width * .75
|
||||
anchors.top: pgpColumn.bottom
|
||||
anchors.topMargin: 5
|
||||
anchors.bottom: buttonsRow.top
|
||||
model: jsonModel.model
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
headerPositioning: ListView.OverlayHeader
|
||||
|
||||
clip: true
|
||||
snapMode: ListView.SnapToItem
|
||||
|
||||
header:Rectangle
|
||||
{
|
||||
color: "aliceblue"
|
||||
width: parent.width
|
||||
z: 2
|
||||
height: headetText.contentHeight + 10
|
||||
radius: 10
|
||||
|
||||
Text
|
||||
{
|
||||
id: headetText
|
||||
text: "Node locations ("+jsonModel.model.count+")"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
font.italic: true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
delegate: Column
|
||||
{
|
||||
height: 60
|
||||
@ -61,17 +119,19 @@ Item
|
||||
|
||||
Row
|
||||
{
|
||||
id: idRow
|
||||
height: 30
|
||||
spacing: 10
|
||||
spacing: 4
|
||||
|
||||
Image
|
||||
{
|
||||
id: statusImage
|
||||
source: model.is_online ?
|
||||
"icons/state-ok.png" :
|
||||
"icons/state-offline.png"
|
||||
"icons/network-connect.svg" :
|
||||
"icons/network-disconnect.svg"
|
||||
|
||||
height: parent.height - 4
|
||||
sourceSize.height: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
@ -83,7 +143,14 @@ Item
|
||||
}
|
||||
}
|
||||
|
||||
Text { text: model.peer_id }
|
||||
TextAndIcon
|
||||
{
|
||||
width: parent.width
|
||||
innerText: model.peer_id
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
iconUrl: "/icons/keyring.svg"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,17 +67,19 @@ Item
|
||||
model: jsonModel.model
|
||||
delegate: Item
|
||||
{
|
||||
height: 30
|
||||
property bool isOnline: jsonModel.isOnline(model.pgp_id)
|
||||
height: 54
|
||||
width: parent.width
|
||||
|
||||
Image
|
||||
{
|
||||
id: statusImage
|
||||
source: jsonModel.isOnline(model.pgp_id) ?
|
||||
"icons/state-ok.png" :
|
||||
"icons/state-offline.png"
|
||||
source: isOnline?
|
||||
"icons/state-ok.svg" :
|
||||
"icons/state-offline.svg"
|
||||
|
||||
height: parent.height - 4
|
||||
sourceSize.height: height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 3
|
||||
@ -89,6 +91,7 @@ Item
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: statusImage.right
|
||||
anchors.leftMargin: 10
|
||||
font.pixelSize: 15
|
||||
}
|
||||
MouseArea
|
||||
{
|
||||
@ -100,6 +103,7 @@ Item
|
||||
{
|
||||
pgpName: model.name,
|
||||
pgpId: model.pgp_id,
|
||||
isOnline: isOnline,
|
||||
locations: jsonModel.getLocations(
|
||||
model.pgp_id)
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
android:label="RetroShare"
|
||||
android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation"
|
||||
android:screenOrientation="unspecified"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:launchMode="singleTask">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
146
retroshare-qml-app/src/components/AvatarOrColorHash.qml
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
* RetroShare Android QML App
|
||||
* Copyright (C) 2017 Gioacchino Mazzurco <gio@eigenlab.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.7
|
||||
import "../" //Needed for Chat Cache
|
||||
|
||||
|
||||
Item
|
||||
{
|
||||
id: compRoot
|
||||
|
||||
property string gxs_id
|
||||
property bool onlyCached: false
|
||||
signal clicked ()
|
||||
|
||||
height: 130
|
||||
width: height
|
||||
|
||||
|
||||
////////////// The following should be considered privates /////////////////////
|
||||
|
||||
property bool has_avatar: false
|
||||
property bool default_image: false
|
||||
property int avatarAttemptCnt: 0
|
||||
property string noGxsImage: "/icons/retroshare06.png"
|
||||
|
||||
function getDetails()
|
||||
{
|
||||
console.log("getDetails() ", compRoot.gxs_id )
|
||||
++compRoot.avatarAttemptCnt
|
||||
if (gxs_id)
|
||||
{
|
||||
default_image = false
|
||||
var hasAvatarCached = hasAvatar (ChatCache.contactsCache.getIdentityAvatar(gxs_id))
|
||||
if ( !hasAvatarCached )
|
||||
{
|
||||
rsApi.request(
|
||||
"/identity/get_identity_details",
|
||||
JSON.stringify({ gxs_id: compRoot.gxs_id }),
|
||||
function(par)
|
||||
{
|
||||
var jData = JSON.parse(par.response).data
|
||||
saveDetails(jData)
|
||||
if(!compRoot.has_avatar &&
|
||||
compRoot.avatarAttemptCnt < 3) getDetails()
|
||||
})
|
||||
}
|
||||
else
|
||||
{
|
||||
setImage(ChatCache.contactsCache.getIdentityDetails(gxs_id))
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
has_avatar = true
|
||||
default_image = true
|
||||
contactAvatar.source = noGxsImage
|
||||
}
|
||||
}
|
||||
function saveDetails(data)
|
||||
{
|
||||
ChatCache.contactsCache.setIdentityDetails(data)
|
||||
setImage(data)
|
||||
|
||||
}
|
||||
function setImage (data)
|
||||
{
|
||||
compRoot.has_avatar = hasAvatar (data.avatar)
|
||||
if(compRoot.has_avatar)
|
||||
{
|
||||
contactAvatar.source =
|
||||
"data:image/png;base64," + data.avatar
|
||||
}
|
||||
}
|
||||
|
||||
function hasAvatar (avatar)
|
||||
{
|
||||
return avatar.length > 0
|
||||
}
|
||||
|
||||
function showDetails()
|
||||
{
|
||||
console.log("showDetails() ", gxs_id)
|
||||
|
||||
stackView.push(
|
||||
"qrc:/ContactDetails.qml",
|
||||
{md: ChatCache.contactsCache.getContactFromGxsId(gxs_id)})
|
||||
}
|
||||
|
||||
Component.onCompleted: startComponent ()
|
||||
|
||||
onVisibleChanged: startComponent ()
|
||||
|
||||
function startComponent ()
|
||||
{
|
||||
if (onlyCached && hasAvatar (ChatCache.contactsCache.getIdentityAvatar(gxs_id) ) )
|
||||
{
|
||||
console.log("load cached avatar")
|
||||
setImage(ChatCache.contactsCache.getIdentityDetails(gxs_id))
|
||||
|
||||
}
|
||||
else if (!onlyCached)
|
||||
{
|
||||
if(visible && (!has_avatar || default_image ) ) getDetails()
|
||||
}
|
||||
}
|
||||
|
||||
Image
|
||||
{
|
||||
id: contactAvatar
|
||||
anchors.fill: parent
|
||||
visible: compRoot.has_avatar
|
||||
}
|
||||
|
||||
ColorHash
|
||||
{
|
||||
anchors.fill: parent
|
||||
visible: !compRoot.has_avatar
|
||||
hash: compRoot.gxs_id
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
onClicked:
|
||||
{
|
||||
compRoot.clicked()
|
||||
showDetails()
|
||||
}
|
||||
}
|
||||
}
|
127
retroshare-qml-app/src/components/Btn.qml
Normal file
@ -0,0 +1,127 @@
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.4
|
||||
|
||||
Item
|
||||
{
|
||||
|
||||
id: button
|
||||
property alias buttonText: innerText.text;
|
||||
property alias buttonTextPixelSize: innerText.font.pixelSize
|
||||
property alias innerAnchors: innerElements.anchors;
|
||||
property alias rectangleButton: rectangleButton;
|
||||
|
||||
property var iconUrl
|
||||
property int iconHeight: 20
|
||||
|
||||
property color color
|
||||
property color hoverColor
|
||||
property color pressColor
|
||||
property int fontSize
|
||||
property int borderWidth
|
||||
property int borderRadius
|
||||
property int innerMargin: 10
|
||||
|
||||
scale: state === "Pressed" ? 0.96 : 1.0
|
||||
onEnabledChanged: state = ""
|
||||
signal clicked
|
||||
|
||||
Rectangle
|
||||
{
|
||||
id: rectangleButton
|
||||
anchors.fill: parent
|
||||
radius: borderRadius
|
||||
color: button.enabled ? button.color : "grey"
|
||||
border.width: borderWidth
|
||||
border.color: "black"
|
||||
|
||||
ToolButton {
|
||||
id: innerElements
|
||||
|
||||
Image
|
||||
{
|
||||
id: icon
|
||||
source: (iconUrl)? iconUrl: ""
|
||||
height: (iconUrl)? iconHeight: 0
|
||||
width: (iconUrl)? iconHeight: 0
|
||||
|
||||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
visible: (iconUrl)? true: false
|
||||
anchors.left: innerElements.left
|
||||
|
||||
anchors.margins:(iconUrl)? innerMargin : 0
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Text
|
||||
{
|
||||
anchors.margins: innerMargin
|
||||
id: innerText
|
||||
font.pointSize: fontSize
|
||||
anchors.left: icon.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
states: [
|
||||
State
|
||||
{
|
||||
name: "Hovering"
|
||||
PropertyChanges
|
||||
{
|
||||
target: rectangleButton
|
||||
color: hoverColor
|
||||
}
|
||||
},
|
||||
State
|
||||
{
|
||||
name: "Pressed"
|
||||
PropertyChanges
|
||||
{
|
||||
target: rectangleButton
|
||||
color: pressColor
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
transitions: [
|
||||
Transition
|
||||
{
|
||||
from: ""; to: "Hovering"
|
||||
ColorAnimation { duration: 200 }
|
||||
},
|
||||
Transition
|
||||
{
|
||||
from: "*"; to: "Pressed"
|
||||
ColorAnimation { duration: 10 }
|
||||
}
|
||||
]
|
||||
|
||||
MouseArea
|
||||
{
|
||||
hoverEnabled: true
|
||||
anchors.fill: button
|
||||
onEntered: { button.state='Hovering'}
|
||||
onExited: { button.state=''}
|
||||
onClicked: { button.clicked();}
|
||||
onPressed: { button.state="Pressed" }
|
||||
onReleased:
|
||||
{
|
||||
if (containsMouse)
|
||||
button.state="Hovering";
|
||||
else
|
||||
button.state="";
|
||||
}
|
||||
}
|
||||
|
||||
Behavior on scale
|
||||
{
|
||||
NumberAnimation
|
||||
{
|
||||
duration: 100
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
}
|
28
retroshare-qml-app/src/components/BtnIcon.qml
Normal file
@ -0,0 +1,28 @@
|
||||
import QtQuick 2.0
|
||||
|
||||
Item {
|
||||
|
||||
id: root
|
||||
signal clicked
|
||||
signal pressed
|
||||
signal released
|
||||
|
||||
property var imgUrl: ""
|
||||
property alias fillMode: image.fillMode
|
||||
|
||||
Image {
|
||||
id: image
|
||||
anchors.fill: parent
|
||||
source: imgUrl
|
||||
|
||||
height: parent.height
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: root
|
||||
onClicked: { root.clicked() }
|
||||
onPressed: { root.pressed() }
|
||||
onReleased: { root.released() }
|
||||
}
|
||||
}
|
@ -28,8 +28,13 @@ Rectangle
|
||||
|
||||
Image
|
||||
{
|
||||
source: "qrc:/icons/edit-image-face-detect.png"
|
||||
anchors.fill: parent
|
||||
source: "qrc:/icons/edit-image-face-detect.svg"
|
||||
anchors.centerIn: parent
|
||||
height: parent.height
|
||||
width: parent.width
|
||||
sourceSize.height: height
|
||||
sourceSize.width: width
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
|
||||
Rectangle
|
256
retroshare-qml-app/src/components/SideBar.qml
Normal file
@ -0,0 +1,256 @@
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Layouts 1.3
|
||||
import "../URI.js" as UriJs
|
||||
import "../"
|
||||
import "../components"
|
||||
|
||||
|
||||
Drawer
|
||||
{
|
||||
property var styles: StyleSideBar
|
||||
id: drawer
|
||||
height: parent.height
|
||||
width: Math.min(parent.width, parent.height) / 3 * styles.width
|
||||
dragMargin: 10
|
||||
|
||||
Rectangle
|
||||
{
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
|
||||
ListView
|
||||
{
|
||||
id: listView
|
||||
currentIndex: -1
|
||||
|
||||
anchors.fill:parent
|
||||
|
||||
clip: true
|
||||
|
||||
snapMode: ListView.SnapToItem
|
||||
|
||||
headerPositioning: ListView.OverlayHeader
|
||||
|
||||
header:Rectangle
|
||||
{
|
||||
id:header
|
||||
property var styles: StyleSideBar.header
|
||||
|
||||
width: parent.width
|
||||
height: colorHash.height + nickText.height + gxsText.height + 40
|
||||
color: styles.color
|
||||
|
||||
AvatarOrColorHash
|
||||
{
|
||||
id: colorHash
|
||||
|
||||
gxs_id: (ChatCache.contactsCache.own)?ChatCache.contactsCache.own.gxs_id : ""
|
||||
height: styles.avatarHeight
|
||||
anchors.margins: styles.avatarMargins
|
||||
anchors.horizontalCenter: header.horizontalCenter
|
||||
anchors.top: header.top
|
||||
onClicked: drawer.close()
|
||||
}
|
||||
|
||||
Text
|
||||
{
|
||||
id: nickText
|
||||
text: (ChatCache.contactsCache.own)?ChatCache.contactsCache.own.name : "Retroshare"
|
||||
height: contentHeight
|
||||
anchors.top: colorHash.bottom
|
||||
anchors.left: header.left
|
||||
anchors.right: header.right
|
||||
anchors.leftMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
horizontalAlignment:Text.AlignHCenter
|
||||
wrapMode: Text.Wrap
|
||||
color: styles.textColor
|
||||
font.bold: true
|
||||
font.pixelSize: styles.textNickSize
|
||||
}
|
||||
Text
|
||||
{
|
||||
id: gxsText
|
||||
text: (ChatCache.contactsCache.own)?ChatCache.contactsCache.own.gxs_id : ""
|
||||
// height: contentHeight
|
||||
wrapMode: Text.WrapAnywhere
|
||||
width: header.width
|
||||
anchors.top: nickText.bottom
|
||||
anchors.left: header.left
|
||||
anchors.right: header.right
|
||||
anchors.leftMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
horizontalAlignment:Text.AlignHCenter
|
||||
color: styles.textColor
|
||||
font.pixelSize: styles.textGxsidSize
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
delegate: Item
|
||||
{
|
||||
|
||||
property var styles: StyleSideBar.item
|
||||
|
||||
id: menuItem
|
||||
width: parent.width
|
||||
height: styles.height
|
||||
|
||||
Connections
|
||||
{
|
||||
target: mainWindow
|
||||
onCoreReadyChanged:
|
||||
{
|
||||
if (model.showOnCoreReady)
|
||||
{
|
||||
setVisible(mainWindow.coreReady)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Btn
|
||||
{
|
||||
buttonText: model.title
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
color: menuItem.styles.defaultColor
|
||||
hoverColor: menuItem.styles.hoverColor
|
||||
innerAnchors.left: rectangleButton.left
|
||||
innerAnchors.verticalCenter: rectangleButton.verticalCenter
|
||||
iconUrl: (model.icon)? model.icon : undefined
|
||||
innerMargin: 20
|
||||
buttonTextPixelSize: menuItem.styles.pixelSize
|
||||
}
|
||||
|
||||
|
||||
MouseArea
|
||||
{
|
||||
property var lastItem
|
||||
id: itemArea
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
onClicked:
|
||||
{
|
||||
if (listView.currentIndex != index || stackView.currentItem != lastItem)
|
||||
{
|
||||
listView.currentIndex = index
|
||||
menuList.actions[model.title]();
|
||||
lastItem = stackView.currentItem
|
||||
// titleLabel.text = model.title
|
||||
// stackView.replace(model.source)
|
||||
}
|
||||
drawer.close()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
visible: (model.showOnCoreReady)? setVisible(mainWindow.coreReady) : true
|
||||
|
||||
Component.onCompleted:
|
||||
{
|
||||
if (model.showOnOsAndroid && !Q_OS_ANDROID)
|
||||
{
|
||||
menuItem.visible = false
|
||||
menuItem.height = 0
|
||||
}
|
||||
}
|
||||
|
||||
function setVisible(b)
|
||||
{
|
||||
menuItem.visible = b
|
||||
if (!b)
|
||||
{
|
||||
menuItem.height = 0
|
||||
}
|
||||
else
|
||||
{
|
||||
menuItem.height = styles.height
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
model: ListModel
|
||||
{
|
||||
id: menuList
|
||||
|
||||
property var actions :
|
||||
{
|
||||
"Contacts": function()
|
||||
{
|
||||
stackView.push("qrc:/Contacts.qml" )
|
||||
},
|
||||
"Trusted Nodes": function()
|
||||
{
|
||||
stackView.push("qrc:/TrustedNodesView.qml");
|
||||
},
|
||||
"Paste Link": function()
|
||||
{
|
||||
UriJs.URI.withinString(
|
||||
ClipboardWrapper.getFromClipBoard(),
|
||||
handleIntentUri);
|
||||
},
|
||||
"Terminate Core": function()
|
||||
{
|
||||
rsApi.request("/control/shutdown");
|
||||
}
|
||||
}
|
||||
|
||||
ListElement
|
||||
{
|
||||
title: "Contacts"
|
||||
showOnCoreReady: true
|
||||
icon: "/icons/search.svg"
|
||||
}
|
||||
ListElement
|
||||
{
|
||||
title: "Trusted Nodes"
|
||||
showOnCoreReady: true
|
||||
icon: "/icons/netgraph.svg"
|
||||
}
|
||||
ListElement
|
||||
{
|
||||
title: "Paste Link"
|
||||
showOnCoreReady: true
|
||||
icon: "/icons/add.svg"
|
||||
}
|
||||
ListElement
|
||||
{
|
||||
title: "Terminate Core"
|
||||
showOnOsAndroid: false
|
||||
icon: "/icons/exit.svg"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ScrollIndicator.vertical: ScrollIndicator { }
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
property var styles: StyleSideBar.footer
|
||||
|
||||
width: parent.width
|
||||
anchors.bottom: parent.bottom
|
||||
height: Label.contentHeight
|
||||
color: styles.color
|
||||
|
||||
Label
|
||||
{
|
||||
horizontalAlignment: Text.AlignRight
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.right: parent.right
|
||||
text: parent.styles.text
|
||||
color: parent.styles.textColor
|
||||
anchors.rightMargin: parent.styles.margins
|
||||
anchors.bottomMargin: parent.styles.margins
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
37
retroshare-qml-app/src/components/TextAndIcon.qml
Normal file
@ -0,0 +1,37 @@
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 2.0
|
||||
|
||||
|
||||
ToolButton
|
||||
{
|
||||
height: icon.height + 5
|
||||
|
||||
property alias iconUrl: icon.source
|
||||
property alias innerText: innerText.text
|
||||
|
||||
|
||||
Image
|
||||
{
|
||||
id: icon
|
||||
|
||||
height: innerText.contentHeight
|
||||
width: innerText.contentHeight
|
||||
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 4
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Text
|
||||
{
|
||||
id: innerText
|
||||
wrapMode: Text.WrapAnywhere
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: icon.right
|
||||
anchors.leftMargin: 5
|
||||
}
|
||||
|
||||
|
||||
}
|
54
retroshare-qml-app/src/components/emoji/EmojiButton.qml
Normal file
@ -0,0 +1,54 @@
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls.Styles 1.2
|
||||
|
||||
Rectangle {
|
||||
id: emojiButton
|
||||
|
||||
|
||||
Text {
|
||||
id: emojiText
|
||||
color: "gray"
|
||||
text: qsTr(eCatText)
|
||||
font.pixelSize: emojiButton.width - 8
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
|
||||
state: "RELEASED"
|
||||
states: [
|
||||
State {
|
||||
name: "PRESSED"
|
||||
PropertyChanges {
|
||||
target: emojiText
|
||||
font.pixelSize: emojiButton.width - 10
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "RELEASED"
|
||||
PropertyChanges {
|
||||
target: emojiText
|
||||
font.pixelSize: emojiButton.width - 8
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
|
||||
onEntered: {
|
||||
emojiText.color = "black"
|
||||
}
|
||||
onExited: {
|
||||
emojiText.color = "gray"
|
||||
}
|
||||
onPressedChanged: {
|
||||
emojiButton.state = emojiButton.state == "PRESSED" ? "RELEASED" : "PRESSED"
|
||||
}
|
||||
onClicked: {
|
||||
Qt.emojiClickedHandler(emojiText.text)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls.Styles 1.2
|
||||
|
||||
Rectangle {
|
||||
id: emojiCategoryButton
|
||||
property string categoryName
|
||||
|
||||
|
||||
function completedHandler() {
|
||||
categoryName = eCatName
|
||||
|
||||
//initialize
|
||||
if (parent.currSelEmojiButton === undefined) {
|
||||
clickedHandler()
|
||||
}
|
||||
}
|
||||
|
||||
function pressedHandler() {
|
||||
if (state != "SELECTED") {
|
||||
state = state == "PRESSED" ? "RELEASED" : "PRESSED"
|
||||
}
|
||||
}
|
||||
|
||||
function clickedHandler() {
|
||||
if (parent.currSelEmojiButton !== undefined) {
|
||||
parent.currSelEmojiButton.state = "RELEASED"
|
||||
}
|
||||
|
||||
parent.currSelEmojiButton = emojiCategoryButton
|
||||
state = "SELECTED"
|
||||
Qt.emojiCategoryChangedHandler(emojiCategoryButton.categoryName)
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
id: emojiText
|
||||
color: "gray"
|
||||
text: qsTr(eCatText)
|
||||
font.pixelSize: emojiCategoryButton.width - 8
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
|
||||
state: "RELEASED"
|
||||
states: [
|
||||
State {
|
||||
name: "PRESSED"
|
||||
PropertyChanges {
|
||||
target: emojiText
|
||||
font.pixelSize: emojiCategoryButton.width - 10
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "RELEASED"
|
||||
PropertyChanges {
|
||||
target: emojiText
|
||||
font.pixelSize: emojiCategoryButton.width - 8
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "SELECTED"
|
||||
PropertyChanges {
|
||||
target: emojiCategoryButton
|
||||
color: "#ADD6FF"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: emojiText.color = "black"
|
||||
onExited: emojiText.color = "gray"
|
||||
onPressedChanged: pressedHandler()
|
||||
onClicked: clickedHandler()
|
||||
}
|
||||
|
||||
Component.onCompleted: completedHandler()
|
||||
}
|
124
retroshare-qml-app/src/components/emoji/EmojiPicker.qml
Normal file
@ -0,0 +1,124 @@
|
||||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.0
|
||||
import "emoji.js" as EmojiJSON
|
||||
|
||||
Rectangle {
|
||||
id: emojiPicker
|
||||
property EmojiCategoryButton currSelEmojiButton
|
||||
property variant emojiParsedJson
|
||||
property int buttonWidth: 40
|
||||
property TextArea textArea
|
||||
|
||||
//displays all Emoji of one categroy by modifying the ListModel of emojiGrid
|
||||
function categoryChangedHandler (newCategoryName){
|
||||
emojiByCategory.clear()
|
||||
|
||||
for (var i = 0; i < emojiParsedJson.emoji_by_category[newCategoryName].length; i++) {
|
||||
var elem = emojiParsedJson.emoji_by_category[newCategoryName][i]
|
||||
emojiByCategory.append({eCatName: newCategoryName, eCatText: elem})
|
||||
}
|
||||
}
|
||||
|
||||
//adds the clicked Emoji (and one ' ' if the previous character isn't an Emoji) to textArea
|
||||
function emojiClickedHandler(selectedEmoji) {
|
||||
var strAppnd = ""
|
||||
var plainText = textArea.getText(0, textArea.length)
|
||||
|
||||
if (plainText.length > 0) {
|
||||
var lastChar = plainText[plainText.length-1]
|
||||
if ((lastChar !== ' ') && (lastChar.charCodeAt(0) < 255)) {
|
||||
strAppnd = " "
|
||||
}
|
||||
}
|
||||
strAppnd += selectedEmoji
|
||||
|
||||
textArea.insert(textArea.cursorPosition, strAppnd)
|
||||
}
|
||||
|
||||
//parses JSON, publishes button handlers and inits textArea
|
||||
function completedHandler() {
|
||||
// emojiParsedJson = JSON.parse(EmojiJSON.emoji_json)
|
||||
emojiParsedJson = EmojiJSON.emoji_json
|
||||
for (var i = 0; i < emojiParsedJson.emoji_categories.length; i++) {
|
||||
var elem = emojiParsedJson.emoji_categories[i]
|
||||
emojiCategoryButtons.append({eCatName: elem.name, eCatText: elem.emoji_unified})
|
||||
}
|
||||
|
||||
Qt.emojiCategoryChangedHandler = categoryChangedHandler
|
||||
Qt.emojiClickedHandler = emojiClickedHandler
|
||||
|
||||
textArea.cursorPosition = textArea.length
|
||||
textArea.Keys.pressed.connect(keyPressedHandler)
|
||||
}
|
||||
|
||||
|
||||
//checks if the previous character is an Emoji and adds a ' ' if that's the case
|
||||
//this is necessary, because Emoji use a bigger font-size, and that font-size is kept using without a ' '
|
||||
function keyPressedHandler(event) {
|
||||
var testStr = textArea.getText(textArea.length-2, textArea.length)
|
||||
var ptrn = new RegExp("[\uD800-\uDBFF][\uDC00-\uDFFF]")
|
||||
if ((event.key !== Qt.Key_Backspace) && (ptrn.test(testStr))) {
|
||||
textArea.text += " "
|
||||
textArea.cursorPosition = textArea.length
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//all emoji of one category
|
||||
ListModel {
|
||||
id: emojiByCategory
|
||||
}
|
||||
|
||||
GridView {
|
||||
id: emojiGrid
|
||||
width: parent.width
|
||||
anchors.fill: parent
|
||||
anchors.bottomMargin: buttonWidth
|
||||
cellWidth: buttonWidth; cellHeight: buttonWidth
|
||||
|
||||
model: emojiByCategory
|
||||
delegate: EmojiButton {
|
||||
width: buttonWidth
|
||||
height: buttonWidth
|
||||
color: emojiPicker.color
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//seperator
|
||||
Rectangle {
|
||||
color: emojiPicker.color
|
||||
anchors.bottom: parent.bottom
|
||||
width: parent.width
|
||||
height: buttonWidth
|
||||
}
|
||||
Rectangle {
|
||||
color: "black"
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: buttonWidth
|
||||
width: parent.width
|
||||
height: 1
|
||||
}
|
||||
|
||||
//emoji category selector
|
||||
ListView {
|
||||
width: parent.width
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: buttonWidth
|
||||
orientation: ListView.Horizontal
|
||||
|
||||
model: emojiCategoryButtons
|
||||
delegate: EmojiCategoryButton {
|
||||
width: buttonWidth
|
||||
height: buttonWidth
|
||||
color: emojiPicker.color
|
||||
}
|
||||
}
|
||||
|
||||
ListModel {
|
||||
id: emojiCategoryButtons
|
||||
}
|
||||
|
||||
Component.onCompleted: completedHandler()
|
||||
}
|
||||
|
1068
retroshare-qml-app/src/components/emoji/emoji.js
Normal file
54
retroshare-qml-app/src/icons/add.svg
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg4155"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
xml:space="preserve"
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
sodipodi:docname="add.svg"><metadata
|
||||
id="metadata4161"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs4159" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="706"
|
||||
id="namedview4157"
|
||||
showgrid="false"
|
||||
inkscape:zoom="5.11875"
|
||||
inkscape:cx="28.462795"
|
||||
inkscape:cy="38.239659"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g4163" /><g
|
||||
id="g4163"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="ink_ext_XXXXXX"
|
||||
transform="matrix(1.25,0,0,-1.25,0,80)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4167"
|
||||
style="fill:#039bd5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 64,32 C 64,14.327 49.673,0 32,0 14.327,0 0,14.327 0,32 0,49.673 14.327,64 32,64 49.673,64 64,49.673 64,32" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff"
|
||||
d="m 52.357845,35.83752 -15.874967,0 c -0.560293,0 -0.933823,0.373529 -0.933823,0.933822 l 0,15.874965 c 0,1.120588 -0.747056,1.867645 -1.867641,1.867645 l -3.735288,0 c -1.120584,0 -1.867644,-0.747057 -1.867644,-1.867645 l 0,-15.874965 c 0,-0.560293 -0.373527,-0.933822 -0.933819,-0.933822 l -15.874968,0 c -1.120586,0 -1.8676431,-0.747057 -1.8676431,-1.867644 l 0,-3.735285 c 0,-1.120585 0.7470571,-1.867644 1.8676431,-1.867644 l 15.874968,0 c 0.560292,0 0.933819,-0.373527 0.933819,-0.933821 l 0,-15.874967 c 0,-1.120585 0.74706,-1.8676415 1.867644,-1.8676415 l 3.735288,0 c 1.120585,0 1.867641,0.7470565 1.867641,1.8676415 l 0,15.874967 c 0,0.560294 0.37353,0.933821 0.933823,0.933821 l 15.874967,0 c 1.120585,0 1.867641,0.747059 1.867641,1.867644 l 0,3.735285 c 0,1.120587 -0.747056,1.867644 -1.867641,1.867644 z"
|
||||
id="path4" /></g></svg>
|
After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 387 B |
13
retroshare-qml-app/src/icons/application-menu.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 2 3 L 2 5 L 14 5 L 14 3 L 2 3 z M 2 7 L 2 9 L 14 9 L 14 7 L 2 7 z M 2 11 L 2 13 L 14 13 L 14 11 L 2 11 z "
|
||||
class="ColorScheme-Text"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 443 B |
61
retroshare-qml-app/src/icons/attach.svg
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="80"
|
||||
style="enable-background:new 0 0 110 110;"
|
||||
version="1.0"
|
||||
viewBox="0 0 110 110"
|
||||
width="80"
|
||||
xml:space="preserve"
|
||||
id="svg2"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="attach.svg"><metadata
|
||||
id="metadata20"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs18" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
id="namedview16"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.0341309"
|
||||
inkscape:cx="-75.947202"
|
||||
inkscape:cy="16.755676"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><g
|
||||
id="Artboard" /><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
style="display:inline"><circle
|
||||
id="circle6"
|
||||
style="fill:#039bd5;fill-opacity:1"
|
||||
r="55"
|
||||
cy="55"
|
||||
cx="55" /><path
|
||||
style="fill:#000000;fill-opacity:0.15686275"
|
||||
sodipodi:nodetypes="ccccccccccsasccsccccccccccccccsasccccccccccc"
|
||||
id="use4188"
|
||||
d="m 32.658016,88.493222 c -3.615848,8.28e-4 -7.263315,-1.424329 -10.041357,-4.202659 -2.77944,-2.779018 -4.205861,-6.427875 -4.204884,-10.04303 -0.0049,-3.403438 1.278081,-6.83375 3.862101,-9.413455 l 0.593216,-0.593494 35.641173,-35.642841 c 3.391596,-3.396336 7.894417,-5.081409 12.383162,-5.075283 4.771078,-0.002 9.594249,1.87938 13.276261,5.560136 3.678385,3.680194 5.559013,8.500861 5.558044,13.271665 0.0042,4.490277 -1.679643,8.991979 -5.075281,12.385393 -10.716723,10.715527 -20.64003,20.648354 -29.983159,29.721144 -1.137853,1.104931 -3.354856,1.236196 -4.391767,0.200648 -1.067827,-1.066425 -1.137299,-3.218296 0.200684,-4.522981 9.420341,-9.185906 29.722264,-29.852779 29.722264,-29.852779 2.153348,-2.157945 3.224312,-4.981261 3.229331,-7.9316 -4.97e-4,-3.126264 -1.22794,-6.331216 -3.714323,-8.818435 -2.48722,-2.488056 -5.693845,-3.714325 -8.821914,-3.716554 -2.949092,0.0058 -5.771848,1.076122 -7.928541,3.230447 L 27.31921,68.693496 26.726551,69.286573 c -1.343545,1.346615 -2.011143,3.098819 -2.016991,4.960511 0.002,1.972136 0.773588,4.003619 2.360607,5.591332 1.585346,1.583812 3.615429,2.354624 5.587991,2.356842 1.861408,-0.0058 3.613479,-0.673018 4.961066,-2.016569 L 62.839621,54.959584 64.95174,52.847599 c 0.506025,-0.509784 0.757852,-1.157881 0.76273,-1.899994 0,-0.782361 -0.304758,-1.604703 -0.959542,-2.259626 -0.656167,-0.656451 -1.478649,-0.960092 -2.260316,-0.962322 -0.741838,0.0064 -1.388963,0.258657 -1.899442,0.765517 0,0 -17.740223,17.818894 -20.832589,21.018568 -1.223513,1.265969 -3.596261,1.141861 -4.639005,3e-6 -1.036591,-1.135117 -0.92155,-3.247964 0.417589,-4.592681 3.215314,-3.228707 20.59883,-20.877036 20.59883,-20.877036 1.744968,-1.750676 4.072705,-2.616475 6.354335,-2.610904 2.425928,-0.002 4.864259,0.956613 6.715226,2.80674 1.845669,1.848595 2.803537,4.284834 2.803537,6.711885 0.0049,2.28024 -0.859952,4.607559 -2.608679,6.353359 l -2.112816,2.111986 -25.22026,25.220118 c -2.576358,2.578305 -5.997345,3.860847 -9.393545,3.860151 l -0.01975,-1.41e-4 0,0 z"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 32.658016,86.241133 c -3.615848,8.27e-4 -7.263315,-1.424329 -10.041357,-4.202659 -2.77944,-2.779019 -4.205861,-6.427875 -4.204884,-10.043031 -0.0049,-3.403437 1.278081,-6.83375 3.862101,-9.413456 l 0.593216,-0.593494 35.641173,-35.642841 c 3.391596,-3.396336 7.894417,-5.081408 12.383162,-5.075281 4.771078,-0.002 9.594249,1.879379 13.276261,5.560134 3.678385,3.680195 5.559013,8.500863 5.558044,13.271665 0.0042,4.490278 -1.679643,8.991981 -5.075281,12.385394 -10.716723,10.715526 -20.64003,20.648355 -29.983159,29.721144 -1.137853,1.10493 -3.354856,1.236196 -4.391767,0.200647 -1.067827,-1.066424 -1.137299,-3.218295 0.200684,-4.522981 9.420341,-9.185904 29.722264,-29.852778 29.722264,-29.852778 2.153348,-2.157945 3.224312,-4.981262 3.229331,-7.9316 -4.97e-4,-3.126264 -1.22794,-6.331217 -3.714323,-8.818435 -2.48722,-2.488056 -5.693845,-3.714325 -8.821914,-3.716555 -2.949092,0.0058 -5.771848,1.076123 -7.928541,3.230448 L 27.31921,66.441405 26.726551,67.034482 c -1.343545,1.346615 -2.011143,3.098821 -2.016991,4.960512 0.002,1.972136 0.773588,4.003619 2.360607,5.591331 1.585346,1.583813 3.615429,2.354624 5.587991,2.356843 1.861408,-0.0058 3.613479,-0.673017 4.961066,-2.01657 L 62.839621,52.707493 64.95174,50.595508 c 0.506025,-0.509784 0.757852,-1.15788 0.76273,-1.899994 0,-0.78236 -0.304758,-1.604703 -0.959542,-2.259625 -0.656167,-0.656452 -1.478649,-0.960092 -2.260316,-0.962321 -0.741838,0.0064 -1.388963,0.258655 -1.899442,0.765515 0,0 -17.740223,17.818896 -20.832589,21.01857 -1.223513,1.265968 -3.596261,1.14186 -4.639005,3e-6 -1.036591,-1.135118 -0.92155,-3.247965 0.417589,-4.592682 3.215314,-3.228708 20.59883,-20.877037 20.59883,-20.877037 1.744968,-1.750675 4.072705,-2.616473 6.354335,-2.610903 2.425928,-0.002 4.864259,0.956612 6.715226,2.806741 1.845669,1.848594 2.803537,4.284833 2.803537,6.711884 0.0049,2.28024 -0.859952,4.607558 -2.608679,6.353358 l -2.112816,2.111987 -25.22026,25.220118 c -2.576358,2.578306 -5.997345,3.860847 -9.393545,3.860151 l -0.01975,-1.4e-4 0,0 z"
|
||||
id="path3"
|
||||
sodipodi:nodetypes="ccccccccccsasccsccccccccccccccsasccccccccccc"
|
||||
style="fill:#ffffff;fill-opacity:1" /></g></svg>
|
After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 2.9 KiB |
13
retroshare-qml-app/src/icons/edit-image-face-detect.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 2 2 L 2 5 L 3 5 L 3 3 L 5 3 L 5 2 L 2 2 z M 6 2 L 6 3 L 10 3 L 10 2 L 6 2 z M 11 2 L 11 3 L 13 3 L 13 5 L 14 5 L 14 2 L 11 2 z M 6 5 A 1 1 0 0 0 5 6 A 1 1 0 0 0 6 7 A 1 1 0 0 0 7 6 A 1 1 0 0 0 6 5 z M 10 5 A 1 1 0 0 0 9 6 A 1 1 0 0 0 10 7 A 1 1 0 0 0 11 6 A 1 1 0 0 0 10 5 z M 2 6 L 2 10 L 3 10 L 3 6 L 2 6 z M 13 6 L 13 10 L 14 10 L 14 6 L 13 6 z M 4 9 A 4 3 0 0 0 8 12 A 4 3 0 0 0 12 9 L 11 9 A 3 2 0 0 1 8 11 A 3 2 0 0 1 5 9 L 4 9 z M 2 11 L 2 14 L 5 14 L 5 13 L 3 13 L 3 11 L 2 11 z M 13 11 L 13 13 L 11 13 L 11 14 L 14 14 L 14 11 L 13 11 z M 6 13 L 6 14 L 10 14 L 10 13 L 6 13 z "
|
||||
class="ColorScheme-Text"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 922 B |
Before Width: | Height: | Size: 2.2 KiB |
18
retroshare-qml-app/src/icons/emblem-locked.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 8">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-NeutralText {
|
||||
color:#f67400;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
class="ColorScheme-NeutralText"
|
||||
d="M 1 0 C 0.4459807 0 0 0.446 0 1 L 0 7 C 0 7.5541 0.4459807 8 1 8 L 7 8 C 7.554019 8 8 7.5541 8 7 L 8 1 C 8 0.446 7.554019 0 7 0 L 1 0 z "
|
||||
/>
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
||||
d="M 4 1 C 2.8954237 1 1.9999904 1.8954 2 3 L 2.0019531 4 L 1 4 L 1 7 L 7 7 L 7 4 L 6 4 L 6 3 C 6.00001 1.8954 5.104576 1 4 1 z M 4 2 C 4.552285 2 5 2.4477 5 3 L 5 4 L 3 4 L 3 3 C 3 2.4477 3.447715 2 4 2 z "
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 782 B |
65
retroshare-qml-app/src/icons/exit.svg
Normal file
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg4155"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
xml:space="preserve"
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
sodipodi:docname="exit.svg"><metadata
|
||||
id="metadata4161"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs4159" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="706"
|
||||
id="namedview4157"
|
||||
showgrid="true"
|
||||
inkscape:zoom="5.11875"
|
||||
inkscape:cx="39.840819"
|
||||
inkscape:cy="37.23375"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g4163"
|
||||
showguides="false"><inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4142" /></sodipodi:namedview><g
|
||||
id="g4163"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="ink_ext_XXXXXX"
|
||||
transform="matrix(1.25,0,0,-1.25,0,80)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4167"
|
||||
style="fill:#039bd5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 64,32 C 64,14.327 49.673,0 32,0 14.327,0 0,14.327 0,32 0,49.673 14.327,64 32,64 49.673,64 64,49.673 64,32" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.02773762;stroke-linecap:round;stroke-miterlimit:10"
|
||||
d="m 39.607341,43.825636 c 4.92391,-2.756986 8.252834,-8.023253 8.252834,-14.06788 0,-8.89828 -7.21267,-16.11095 -16.11095,-16.11095 -8.89828,0 -16.110951,7.21267 -16.110951,16.11095 0,5.927822 3.201045,11.107492 7.96888,13.904757"
|
||||
stroke-miterlimit="10"
|
||||
id="path13" /><line
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.02773762;stroke-linecap:round;stroke-miterlimit:10"
|
||||
stroke-miterlimit="10"
|
||||
x1="31.749226"
|
||||
x2="31.749226"
|
||||
y1="29.757759"
|
||||
y2="49.89645"
|
||||
id="line15" /></g></svg>
|
After Width: | Height: | Size: 2.6 KiB |
7
retroshare-qml-app/src/icons/keyring.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 44 44" enable-background="new 0 0 44 44" width="512px" height="512px">
|
||||
<g>
|
||||
<circle cx="18" cy="26" r="5" fill="#039bd5"/>
|
||||
<path d="m22,0c-12.2,0-22,9.8-22,22s9.8,22 22,22 22-9.8 22-22-9.8-22-22-22zm12.7,12.1l-8.8,8.8c-0.2,0.2-0.2,0.4-0.1,0.6 0.8,1.3 1.2,2.8 1.2,4.5 0,5-4,9-9,9s-9-4-9-9 4-9 9-9c1.6,0 3.1,0.4 4.5,1.2 0.2,0.1 0.4,0.1 0.6-0.1l.8-.8c0.2-0.2 0.2-0.5 0-0.7l-.5-.5c-0.4-0.4-0.4-1 0-1.4l1.4-1.4c0.4-0.4 1-0.4 1.4,0l.5,.5c0.2,0.2 0.5,0.2 0.7,0l.5-.5c0.2-0.2 0.2-0.5 0-0.7l-.5-.5c-0.4-0.4-0.4-1 0-1.4l1.4-1.4c0.2-0.2 0.5-0.3 0.7-0.3s0.5,0.1 0.7,0.3l.5,.5c0.2,0.2 0.5,0.2 0.7,0l.5-.5c0.2-0.2 0.5-0.3 0.7-0.3s0.5,0.1 0.7,0.3l1.4,1.4c0.2,0.2 0.3,0.5 0.3,0.7s-0.1,0.5-0.3,0.7z" fill="#039bd5"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 877 B |
148
retroshare-qml-app/src/icons/microphone.svg
Normal file
@ -0,0 +1,148 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
xml:space="preserve"
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
sodipodi:docname="microphone.svg"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath16"><path
|
||||
d="M 0,64 64,64 64,0 0,0 0,64 Z"
|
||||
id="path18"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath28"><path
|
||||
d="m 26,52.5 12,0 0,-30 -12,0 0,30 z"
|
||||
id="path30"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath44"><path
|
||||
d="m 19,34 26,0 0,-18.25 -26,0 0,18.25 z"
|
||||
id="path46"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath60"><path
|
||||
d="m 30.5,18 3,0 0,-9 -3,0 0,9 z"
|
||||
id="path62"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath76"><path
|
||||
d="m 25.5,11 13,0 0,-3 -13,0 0,3 z"
|
||||
id="path78"
|
||||
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
id="namedview4"
|
||||
showgrid="false"
|
||||
inkscape:zoom="5.9"
|
||||
inkscape:cx="-69.119913"
|
||||
inkscape:cy="23.011738"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g10" /><g
|
||||
id="g10"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Elegant_circle-icons"
|
||||
transform="matrix(1.25,0,0,-1.25,0,80)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path22"
|
||||
style="fill:#039bd5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 64,32 C 64,14.327 49.673,0 32,0 14.327,0 0,14.327 0,32 0,49.673 14.327,64 32,64 49.673,64 64,49.673 64,32" /><g
|
||||
id="g24"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
id="g26"
|
||||
style="fill:#000000;fill-opacity:0.15686275" /><g
|
||||
id="g32"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
clip-path="url(#clipPath28)"
|
||||
id="g34"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
transform="translate(32,22.5)"
|
||||
id="g36"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><path
|
||||
d="m 0,0 c 3.315,0 6,2.685 6,6 l 0,18 c 0,3.315 -2.685,6 -6,6 -3.315,0 -6,-2.685 -6,-6 L -6,6 C -6,2.685 -3.315,0 0,0"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
id="path38"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g><g
|
||||
id="g40"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
id="g42"
|
||||
style="fill:#000000;fill-opacity:0.15686275" /><g
|
||||
id="g48"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
clip-path="url(#clipPath44)"
|
||||
id="g50"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
transform="translate(32,15.75)"
|
||||
id="g52"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><path
|
||||
d="m 0,0 c -7.168,0 -13,5.832 -13,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L -10,13 C -10,7.486 -5.514,3 0,3 5.514,3 10,7.486 10,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L 13,13 C 13,5.832 7.168,0 0,0"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
id="path54"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g><g
|
||||
id="g72"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
id="g74"
|
||||
style="fill:#000000;fill-opacity:0.15686275" /><g
|
||||
id="g80"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
clip-path="url(#clipPath76)"
|
||||
id="g82"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
transform="translate(37,8)"
|
||||
id="g84"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><path
|
||||
d="m 0,0 -10,0 c -0.828,0 -1.5,0.672 -1.5,1.5 0,0.828 0.672,1.5 1.5,1.5 L 0,3 C 0.828,3 1.5,2.328 1.5,1.5 1.5,0.672 0.828,0 0,0"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
id="path86"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g><g
|
||||
id="g88"
|
||||
transform="translate(32,24.5)"
|
||||
style="fill:#036ea7;fill-opacity:1"><path
|
||||
d="m 0,0 c 3.315,0 6,2.685 6,6 l 0,18 c 0,3.315 -2.685,6 -6,6 -3.315,0 -6,-2.685 -6,-6 L -6,6 C -6,2.685 -3.315,0 0,0"
|
||||
style="fill:#036ea7;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path90"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g92"
|
||||
transform="translate(32,17.75)"><path
|
||||
d="m 0,0 c -7.168,0 -13,5.832 -13,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L -10,13 C -10,7.486 -5.514,3 0,3 5.514,3 10,7.486 10,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L 13,13 C 13,5.832 7.168,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path94"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g96"
|
||||
transform="translate(32,11)"><path
|
||||
d="m 0,0 c -0.828,0 -1.5,0.672 -1.5,1.5 l 0,6 C -1.5,8.328 -0.828,9 0,9 0.828,9 1.5,8.328 1.5,7.5 l 0,-6 C 1.5,0.672 0.828,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path98"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g100"
|
||||
transform="translate(37,10)"><path
|
||||
d="m 0,0 -10,0 c -0.828,0 -1.5,0.672 -1.5,1.5 0,0.828 0.672,1.5 1.5,1.5 L 0,3 C 0.828,3 1.5,2.328 1.5,1.5 1.5,0.672 0.828,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path102"
|
||||
inkscape:connector-curvature="0" /></g></g></svg>
|
After Width: | Height: | Size: 6.8 KiB |
164
retroshare-qml-app/src/icons/microphone_mute.svg
Normal file
@ -0,0 +1,164 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
xml:space="preserve"
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
sodipodi:docname="microphone_mute.svg"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath16"><path
|
||||
d="M 0,64 64,64 64,0 0,0 0,64 Z"
|
||||
id="path18"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath28"><path
|
||||
d="m 26,52.5 12,0 0,-30 -12,0 0,30 z"
|
||||
id="path30"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath44"><path
|
||||
d="m 19,34 26,0 0,-18.25 -26,0 0,18.25 z"
|
||||
id="path46"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath60"><path
|
||||
d="m 30.5,18 3,0 0,-9 -3,0 0,9 z"
|
||||
id="path62"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath76"><path
|
||||
d="m 25.5,11 13,0 0,-3 -13,0 0,3 z"
|
||||
id="path78"
|
||||
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
id="namedview4"
|
||||
showgrid="false"
|
||||
inkscape:zoom="5.9"
|
||||
inkscape:cx="-45.462997"
|
||||
inkscape:cy="30.717304"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g10" /><g
|
||||
id="g10"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Elegant_circle-icons"
|
||||
transform="matrix(1.25,0,0,-1.25,0,80)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path22"
|
||||
style="fill:#039bd5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 64,32 C 64,14.327 49.673,0 32,0 14.327,0 0,14.327 0,32 0,49.673 14.327,64 32,64 49.673,64 64,49.673 64,32" /><g
|
||||
id="g24"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
id="g26"
|
||||
style="fill:#000000;fill-opacity:0.15686275" /><g
|
||||
id="g32"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
clip-path="url(#clipPath28)"
|
||||
id="g34"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
transform="translate(32,22.5)"
|
||||
id="g36"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><path
|
||||
d="m 0,0 c 3.315,0 6,2.685 6,6 l 0,18 c 0,3.315 -2.685,6 -6,6 -3.315,0 -6,-2.685 -6,-6 L -6,6 C -6,2.685 -3.315,0 0,0"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
id="path38"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g><g
|
||||
id="g40"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
id="g42"
|
||||
style="fill:#000000;fill-opacity:0.15686275" /><g
|
||||
id="g48"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
clip-path="url(#clipPath44)"
|
||||
id="g50"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
transform="translate(32,15.75)"
|
||||
id="g52"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><path
|
||||
d="m 0,0 c -7.168,0 -13,5.832 -13,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L -10,13 C -10,7.486 -5.514,3 0,3 5.514,3 10,7.486 10,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L 13,13 C 13,5.832 7.168,0 0,0"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
id="path54"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g><g
|
||||
id="g72"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
id="g74"
|
||||
style="fill:#000000;fill-opacity:0.15686275" /><g
|
||||
id="g80"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
clip-path="url(#clipPath76)"
|
||||
id="g82"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><g
|
||||
transform="translate(37,8)"
|
||||
id="g84"
|
||||
style="fill:#000000;fill-opacity:0.15686275"><path
|
||||
d="m 0,0 -10,0 c -0.828,0 -1.5,0.672 -1.5,1.5 0,0.828 0.672,1.5 1.5,1.5 L 0,3 C 0.828,3 1.5,2.328 1.5,1.5 1.5,0.672 0.828,0 0,0"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
id="path86"
|
||||
inkscape:connector-curvature="0" /></g></g></g></g><g
|
||||
id="g88"
|
||||
transform="translate(32,24.5)"
|
||||
style="fill:#036ea7;fill-opacity:1"><path
|
||||
d="m 0,0 c 3.315,0 6,2.685 6,6 l 0,18 c 0,3.315 -2.685,6 -6,6 -3.315,0 -6,-2.685 -6,-6 L -6,6 C -6,2.685 -3.315,0 0,0"
|
||||
style="fill:#036ea7;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path90"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g92"
|
||||
transform="translate(32,17.75)"><path
|
||||
d="m 0,0 c -7.168,0 -13,5.832 -13,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L -10,13 C -10,7.486 -5.514,3 0,3 5.514,3 10,7.486 10,13 l 0,3.75 c 0,0.828 0.672,1.5 1.5,1.5 0.828,0 1.5,-0.672 1.5,-1.5 L 13,13 C 13,5.832 7.168,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path94"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g96"
|
||||
transform="translate(32,11)"><path
|
||||
d="m 0,0 c -0.828,0 -1.5,0.672 -1.5,1.5 l 0,6 C -1.5,8.328 -0.828,9 0,9 0.828,9 1.5,8.328 1.5,7.5 l 0,-6 C 1.5,0.672 0.828,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path98"
|
||||
inkscape:connector-curvature="0" /></g><g
|
||||
id="g100"
|
||||
transform="translate(37,10)"><path
|
||||
d="m 0,0 -10,0 c -0.828,0 -1.5,0.672 -1.5,1.5 0,0.828 0.672,1.5 1.5,1.5 L 0,3 C 0.828,3 1.5,2.328 1.5,1.5 1.5,0.672 0.828,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path102"
|
||||
inkscape:connector-curvature="0" /></g></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="strike"><g
|
||||
transform="translate(0.44034251,-0.59776851)"
|
||||
style="display:inline"
|
||||
id="g4750"><path
|
||||
d="m 15.772882,66.54618 c -0.270445,-0.120927 -0.524656,-0.293474 -0.746896,-0.516083 -0.976599,-0.976171 -0.975066,-2.559731 5.96e-4,-3.535189 L 58.523101,19.01632 c 0.976795,-0.974955 2.560753,-0.977346 3.536331,0.0011 0.976599,0.976172 0.975065,2.559732 -5.96e-4,3.53519 l -43.49652,43.478587 c -0.754705,0.753848 -1.870833,0.925722 -2.789434,0.514976"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
id="path4748"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc" /><path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path70-5"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 15.772882,64.388905 c -0.270445,-0.120927 -0.524656,-0.293474 -0.746896,-0.516083 -0.976599,-0.976171 -0.975066,-2.559731 5.96e-4,-3.535189 L 58.523101,16.859045 c 0.976795,-0.974955 2.560753,-0.977346 3.536331,0.0011 0.976599,0.976172 0.975065,2.559732 -5.96e-4,3.53519 l -43.49652,43.478587 c -0.754705,0.753848 -1.870833,0.925722 -2.789434,0.514976" /></g></g></svg>
|
After Width: | Height: | Size: 8.0 KiB |
54
retroshare-qml-app/src/icons/netgraph.svg
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg4155"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
xml:space="preserve"
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
sodipodi:docname="netgrapgh.svg"><metadata
|
||||
id="metadata4161"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs4159" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="706"
|
||||
id="namedview4157"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.8097514"
|
||||
inkscape:cx="53.977152"
|
||||
inkscape:cy="36.227842"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g4163" /><g
|
||||
id="g4163"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="ink_ext_XXXXXX"
|
||||
transform="matrix(1.25,0,0,-1.25,0,80)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4167"
|
||||
style="fill:#039bd5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 64,32 C 64,14.327 49.673,0 32,0 14.327,0 0,14.327 0,32 0,49.673 14.327,64 32,64 49.673,64 64,49.673 64,32" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff"
|
||||
d="m 50.165226,33.471431 c -1.238877,0 -2.334984,-0.620309 -2.996298,-1.566011 l -2.694288,0.466846 c 0.0034,0.101203 0.0084,0.202359 0.0084,0.304408 0,1.196013 -0.237215,2.337248 -0.664254,3.38152 l 4.563237,2.753187 c 0.614041,-0.467639 1.379399,-0.745861 2.209028,-0.745861 2.015199,0 3.654673,1.639473 3.654673,3.654673 0,2.015082 -1.639474,3.654403 -3.654673,3.654403 -2.015082,0 -3.654402,-1.639321 -3.654402,-3.654403 0,-0.214118 0.01943,-0.423558 0.05507,-0.627657 l -4.5405,-2.739434 c -1.377676,1.679533 -3.352275,2.851098 -5.596563,3.187962 l 0,5.606176 c 1.6746,0.56021 2.885699,2.14251 2.885699,4.003299 1.7e-5,2.32777 -1.893787,4.221692 -4.221404,4.221692 -2.327516,0 -4.221168,-1.893787 -4.221168,-4.221692 0,-1.860789 1.210711,-3.442953 2.885429,-4.003299 l 0,-5.606176 C 31.124979,41.082111 28.569337,39.071845 27.34075,36.340166 l -8.361237,2.568195 c 0.02518,0.206636 0.03954,0.416615 0.03954,0.629923 0,2.867536 -2.33272,5.20051 -5.200121,5.20051 -2.867654,0 -5.2005096,-2.332974 -5.2005096,-5.20051 0,-2.867401 2.3328556,-5.200239 5.2006456,-5.200239 1.699047,0 3.210011,0.819205 4.159583,2.083069 l 8.644813,-2.655292 c -0.04342,-0.35731 -0.0686,-0.72023 -0.0686,-1.089012 0,-2.404308 0.95344,-4.588887 2.499684,-6.200312 l -3.766083,-4.008232 c -0.549651,0.245375 -1.157812,0.382958 -1.797752,0.382958 -2.441562,0 -4.427651,-1.986224 -4.427651,-4.427668 0,-2.441174 1.986089,-4.427262 4.427651,-4.427262 2.441173,0 4.427397,1.986088 4.427397,4.427262 0,0.830288 -0.230154,1.60754 -0.629263,2.272335 l 3.890704,4.141015 c 1.286692,-0.715009 2.765875,-1.123885 4.339489,-1.123885 1.503227,0 2.920302,0.373734 4.166139,1.03052 l 3.882141,-5.902965 c -0.945822,-0.942222 -1.532204,-2.245099 -1.532204,-3.682332 0,-2.867536 2.332975,-5.2005097 5.200511,-5.2005097 2.867537,0 5.20051,2.3328377 5.20051,5.2005097 0,2.867401 -2.332973,5.20024 -5.20051,5.20024 -0.467233,0 -0.920056,-0.06285 -1.351099,-0.179112 l -4.043898,6.148731 c 0.955704,0.951582 1.696631,2.11752 2.147848,3.417727 L 46.5488,29.302234 c 0.250969,-1.772104 1.777173,-3.139624 3.6174,-3.139624 2.015218,0 3.654674,1.639472 3.654674,3.654672 -2.2e-4,2.014812 -1.639727,3.654149 -3.654944,3.654149 z M 29.225487,32.67681 c 0,3.4698 2.822915,6.292732 6.292597,6.292732 3.469935,0 6.292731,-2.822932 6.292731,-6.292732 0,-3.469682 -2.822932,-6.292462 -6.292731,-6.292462 -3.469682,0 -6.292597,2.82278 -6.292597,6.292462 z"
|
||||
id="path3" /></g></svg>
|
After Width: | Height: | Size: 4.3 KiB |
13
retroshare-qml-app/src/icons/network-connect.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 19.292969 4 L 15.792969 7.5 L 14.292969 6 L 12.292969 8 L 9 11.292969 L 7 13.292969 L 8.5 14.792969 L 4 19.292969 L 4.7070312 20 L 9.2070312 15.5 L 10.707031 17 L 12.707031 15 L 16 11.707031 L 18 9.7070312 L 16.5 8.2070312 L 20 4.7070312 L 19.292969 4 z "
|
||||
class="ColorScheme-Text"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 592 B |
21
retroshare-qml-app/src/icons/network-disconnect.svg
Normal file
@ -0,0 +1,21 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
.ColorScheme-NegativeText {
|
||||
color:#da4453;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 19.292969 4 L 15.792969 7.5 L 14.292969 6 L 12.292969 8 L 10.5 9.7929688 L 12 11.292969 L 12.707031 12 L 14.207031 13.5 L 16 11.707031 L 18 9.7070312 L 16.5 8.2070312 L 20 4.7070312 L 19.292969 4 z M 9.7929688 10.5 L 9 11.292969 L 7 13.292969 L 8.5 14.792969 L 4 19.292969 L 4.7070312 20 L 9.2070312 15.5 L 10.707031 17 L 12.707031 15 L 13.5 14.207031 L 12 12.707031 L 11.292969 12 L 9.7929688 10.5 z "
|
||||
class="ColorScheme-Text"/>
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 14.990234 14 L 14 14.990234 L 16.009766 17 L 14 19.009766 L 14.990234 20 L 17 17.990234 L 19.009766 20 L 20 19.009766 L 17.990234 17 L 20 14.990234 L 19.009766 14 L 17 16.009766 L 14.990234 14 z "
|
||||
class="ColorScheme-NegativeText"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.3 KiB |
13
retroshare-qml-app/src/icons/rating-unrated.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:0.6;stroke:none"
|
||||
d="m8.03 2l-1.875 3.939-4.15.621 2.982 3.08-.732 4.336 3.719-2.037 3.697 2.061-.684-4.34 3.02-3.062-4.143-.645zm-.008 2l1.221 2.635 2.762.432-2.01 2.041.455 2.893-2.463-1.373-2.48 1.357.488-2.891-1.988-2.055 2.766-.412z"
|
||||
class="ColorScheme-Text" />
|
||||
</svg>
|
After Width: | Height: | Size: 563 B |
Before Width: | Height: | Size: 3.4 KiB |
17
retroshare-qml-app/src/icons/rating.svg
Normal file
@ -0,0 +1,17 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Highlight {
|
||||
color:#3daee9;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g
|
||||
transform="translate(-421.71429,-531.79074)">
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="m 429.74391,532.79074 -2.1875,4.59602 -4.84212,0.72462 3.47949,3.59343 -0.85449,5.05858 4.33854,-2.37663 4.31348,2.40398 -0.79753,-5.06315 3.52051,-3.57291 -4.83301,-0.75196 z"
|
||||
id="path4277"
|
||||
class="ColorScheme-Highlight" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 614 B |
78
retroshare-qml-app/src/icons/search.svg
Normal file
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg4925"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
xml:space="preserve"
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
sodipodi:docname="search.svg"><metadata
|
||||
id="metadata4931"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs4929" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
id="namedview4927"
|
||||
showgrid="false"
|
||||
inkscape:zoom="5.9"
|
||||
inkscape:cx="-34.973275"
|
||||
inkscape:cy="31.754347"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g4933" /><g
|
||||
id="g4933"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="ink_ext_XXXXXX"
|
||||
transform="matrix(1.25,0,0,-1.25,0,80)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4937"
|
||||
style="fill:#039bd5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 64,32 C 64,14.327 49.673,0 32,0 14.327,0 0,14.327 0,32 0,49.673 14.327,64 32,64 49.673,64 64,49.673 64,32" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4939"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
d="m 48,11.5 c -0.6395,0 -1.2797,0.2441 -1.7676,0.7324 l -9.4636,9.4637 c 0.3863,0.273 0.7605,0.5656 1.1218,0.8777 l 8.3418,-8.3414 C 46.7203,13.7441 47.3605,13.5 48,13.5 c 0.6395,0 1.2797,0.2441 1.7676,0.7324 0.2281,0.2281 0.4027,0.4891 0.5242,0.7676 C 50.691,14.0852 50.516,12.9809 49.7676,12.2324 49.2797,11.7441 48.6395,11.5 48,11.5 M 33.9215,24.6102 c -0.3543,0.5289 -0.4856,1.1632 -0.3926,1.7699 0.132,0.0734 0.2633,0.1504 0.3926,0.2301 0.0894,-0.1332 0.193,-0.2598 0.3109,-0.3778 l 0.8192,-0.8191 C 34.6891,25.118 34.3113,24.8504 33.9215,24.6102" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4941"
|
||||
style="fill:#495672;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 48,13.5 c -0.6395,0 -1.2797,0.2441 -1.7676,0.7324 l -12,12 c -0.9765,0.9766 -0.9765,2.5586 0,3.5352 0.9754,0.9765 2.5598,0.9765 3.5352,0 l 12,-12 c 0.9765,-0.9766 0.9765,-2.5586 0,-3.5352 C 49.2797,13.7441 48.6395,13.5 48,13.5" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4943"
|
||||
style="fill:#7db6d8;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 35.8578,43.0859 c 4.127,-4.1265 4.127,-10.8171 0,-14.9437 -4.1265,-4.127 -10.8172,-4.127 -14.9437,0 -4.127,4.1266 -4.127,10.8172 0,14.9437 4.1265,4.127 10.8172,4.127 14.9437,0" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4945"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
d="m 28.3859,19.0469 c -3.891,0 -7.5492,1.5152 -10.3004,4.2668 -5.6796,5.6797 -5.6796,14.9211 0,20.6008 2.7512,2.7511 6.4094,4.2668 10.3004,4.2668 3.8911,0 7.5493,-1.5157 10.3004,-4.2668 4.7211,-4.7211 5.518,-11.904 2.3903,-17.4555 l -2.9801,2.9801 c 0.7051,1.641 0.9746,3.4246 0.8094,5.175 0.2859,3.0269 -0.7297,6.1539 -3.0481,8.4718 -2.0633,2.0633 -4.7676,3.0954 -7.4719,3.0954 -2.7043,0 -5.4086,-1.0321 -7.4718,-3.0954 -2.318,-2.3179 -3.334,-5.4449 -3.0481,-8.4718 -0.2859,-3.0274 0.7301,-6.1539 3.0481,-8.4719 2.0632,-2.0637 4.7675,-3.0953 7.4718,-3.0953 1.9219,0 3.8438,0.5211 5.5356,1.5633 0.0894,-0.1332 0.193,-0.2598 0.3109,-0.3778 l 2.5364,-2.5363 C 34.332,19.9746 31.4305,19.0469 28.3859,19.0469" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4947"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
d="m 36.7688,21.6961 -2.5364,2.5363 c -0.1179,0.118 -0.2215,0.2446 -0.3109,0.3778 0.3898,0.2402 0.7676,0.5078 1.1301,0.8031 l 2.839,-2.8395 c -0.3613,-0.3121 -0.7355,-0.6047 -1.1218,-0.8777" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4951"
|
||||
style="fill:#000000;fill-opacity:0.15686275;fill-rule:nonzero;stroke:none"
|
||||
d="m 17.866,34.6141 c -0.2859,3.0269 0.7301,6.1539 3.0481,8.4718 2.0632,2.0633 4.7675,3.0954 7.4718,3.0954 2.7043,0 5.4086,-1.0321 7.4719,-3.0954 2.3184,-2.3179 3.334,-5.4449 3.0481,-8.4718 -0.2235,2.3621 -1.2391,4.6632 -3.0481,6.4718 -2.0633,2.0633 -4.7676,3.0954 -7.4719,3.0954 -2.7043,0 -5.4086,-1.0321 -7.4718,-3.0954 -1.8086,-1.8086 -2.8246,-4.1097 -3.0481,-6.4718" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4953"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 28.3859,50.1813 c -3.891,0 -7.5492,-1.5157 -10.3004,-4.2668 -5.6796,-5.6797 -5.6796,-14.9211 0,-20.6008 2.7512,-2.7516 6.4094,-4.2668 10.3004,-4.2668 3.8911,0 7.5493,1.5152 10.3004,4.2668 5.6797,5.6797 5.6797,14.9211 0,20.6008 -2.7511,2.7511 -6.4093,4.2668 -10.3004,4.2668 z m 0,-4 c 2.7043,0 5.4086,-1.0321 7.4719,-3.0954 4.127,-4.1265 4.127,-10.8171 0,-14.9437 -2.0633,-2.0637 -4.7676,-3.0953 -7.4719,-3.0953 -2.7043,0 -5.4086,1.0316 -7.4718,3.0953 -4.127,4.1266 -4.127,10.8172 0,14.9437 2.0632,2.0633 4.7675,3.0954 7.4718,3.0954" /></g></svg>
|
After Width: | Height: | Size: 5.6 KiB |
67
retroshare-qml-app/src/icons/send-message.svg
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="80"
|
||||
style="enable-background:new 0 0 110 110;"
|
||||
version="1.0"
|
||||
viewBox="0 0 110 110"
|
||||
width="80"
|
||||
xml:space="preserve"
|
||||
id="svg2"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="send-message.svg"><metadata
|
||||
id="metadata20"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs18" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
id="namedview16"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.5170655"
|
||||
inkscape:cx="-223.56963"
|
||||
inkscape:cy="132.17218"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><g
|
||||
id="Artboard" /><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
style="display:inline"><circle
|
||||
id="circle6"
|
||||
style="fill:#039bd5;fill-opacity:1"
|
||||
r="55"
|
||||
cy="55"
|
||||
cx="55" /><path
|
||||
style="fill:#000000;fill-opacity:0.15686275"
|
||||
d="m 86.25465,28.530776 -73.5093,36.754649 13.782994,9.188663 9.188662,18.377325 7.656472,-7.656472 17.61235,8.805054 25.268822,-65.469219 z"
|
||||
id="use4142"
|
||||
inkscape:connector-curvature="0" /><polygon
|
||||
points="43,83 43,73 49.67,76.33 "
|
||||
style="fill:#b7bebf;fill-opacity:1"
|
||||
id="polygon10"
|
||||
transform="matrix(1.1485828,0,0,1.1485828,-13.672054,-7.0752906)" /><polygon
|
||||
points="65,84 43,73 43,83 35,67 23,59 87,27 "
|
||||
style="fill:#ffffff"
|
||||
id="polygon12"
|
||||
transform="matrix(1.1485828,0,0,1.1485828,-13.672054,-7.0752906)" /><polygon
|
||||
points="43,83 43,73 87,27 35,67 "
|
||||
style="fill:#cfd3d5;fill-opacity:1"
|
||||
id="polygon14"
|
||||
transform="matrix(1.1485828,0,0,1.1485828,-13.672054,-7.0752906)" /></g></svg>
|
After Width: | Height: | Size: 2.5 KiB |
102
retroshare-qml-app/src/icons/smiley.svg
Normal file
@ -0,0 +1,102 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
xml:space="preserve"
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
sodipodi:docname="smiley.svg"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath16"><path
|
||||
d="M 0,64 64,64 64,0 0,0 0,64 Z"
|
||||
id="path18"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath28"><path
|
||||
d="m 10,52.0001 44.5,0 L 54.5,8 10,8 10,52.0001 Z"
|
||||
id="path30"
|
||||
inkscape:connector-curvature="0" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath48"><path
|
||||
d="m 23.4994,49.0008 17.0012,0 0,-38.0013 -17.0012,0 0,38.0013 z"
|
||||
id="path50-3"
|
||||
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
id="namedview4"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.95"
|
||||
inkscape:cx="28.678265"
|
||||
inkscape:cy="43.034814"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g10"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true" /><g
|
||||
id="g10"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Elegant_circle-icons_3"
|
||||
transform="matrix(1.25,0,0,-1.25,0,80)"
|
||||
style="display:inline"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path22"
|
||||
style="fill:#039bd5;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="M 64,32 C 64,14.327 49.673,0 32,0 14.327,0 0,14.327 0,32 0,49.673 14.327,64 32,64 49.673,64 64,49.673 64,32" /></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="smiley"
|
||||
style="display:inline"><circle
|
||||
r="28.74452"
|
||||
cy="42.809505"
|
||||
cx="39.909584"
|
||||
id="use4269"
|
||||
style="opacity:1;fill:#000000;fill-opacity:0.17056855;stroke:none;stroke-opacity:1" /><circle
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="path4174"
|
||||
cx="39.909584"
|
||||
cy="40.210262"
|
||||
r="28.74452" /><circle
|
||||
style="opacity:1;fill:#036290;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="path4176"
|
||||
r="4.9137926"
|
||||
cy="33.378891"
|
||||
cx="27.565178" /><path
|
||||
style="opacity:1;fill:#036290;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
d="m 58.609498,44.088438 c 2e-6,10.526248 -8.53321,19.059459 -19.059457,19.059458 -10.526248,0 -19.059458,-8.53321 -19.059456,-19.059458 10.822598,0 26.991722,0 38.118913,0 z"
|
||||
id="path4176-6"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscc" /><path
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
d="m 55.758437,46.383882 c 0,1.551486 -0.494738,3.390982 -1.209686,4.542984 -7.470104,0 -21.735573,0.04946 -29.84381,0.04946 -0.953872,-1.281469 -1.224005,-3.022933 -1.224005,-4.592444 z"
|
||||
id="path4176-6-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" /><circle
|
||||
style="opacity:1;fill:#036290;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="path4176-5"
|
||||
r="4.9137926"
|
||||
cy="33.360207"
|
||||
cx="51.260605" /></g></svg>
|
After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.4 KiB |
27
retroshare-qml-app/src/icons/state-offline.svg
Normal file
@ -0,0 +1,27 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g
|
||||
transform="translate(-421.71429,-525.79074)">
|
||||
<path
|
||||
style="opacity:1;fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 11 4 A 6 6 0 0 0 5 10 A 6 6 0 0 0 5.0039062 10.128906 A 4 4 0 0 0 2 14 A 4 4 0 0 0 6 18 L 15 18 A 5 5 0 0 0 20 13 A 5 5 0 0 0 16.757812 8.3242188 A 6 6 0 0 0 11 4 z M 11 5 A 5 5 0 0 1 15.919922 9.1113281 A 4.0000019 4.0000019 0 0 1 19 13 A 4.0000019 4.0000019 0 0 1 15 17 L 6 17 A 2.9999979 2.9999979 0 0 1 3 14 A 2.9999979 2.9999979 0 0 1 6 11 A 2.9999979 2.9999979 0 0 1 6.1074219 11.005859 A 5 5 0 0 1 6 10 A 5 5 0 0 1 11 5 z "
|
||||
transform="translate(421.71429,525.79074)"
|
||||
class="ColorScheme-Text"
|
||||
id="path4196" />
|
||||
<path
|
||||
style="opacity:1;fill:#bdc3c7;fill-opacity:1;stroke:none"
|
||||
d="m 442.71429,540.29071 a 4.5,4.5 0 0 1 -4.5,4.5 4.5,4.5 0 0 1 -4.5,-4.5 4.5,4.5 0 0 1 4.5,-4.5 4.5,4.5 0 0 1 4.5,4.5 z"
|
||||
id="path4306" />
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke-linecap:round"
|
||||
d="M 14 14 L 14 15 L 15 15 L 15 14 L 14 14 z M 16 14 L 16 15 L 17 15 L 17 14 L 16 14 z M 18 14 L 18 15 L 19 15 L 19 14 L 18 14 z "
|
||||
transform="translate(421.71429,525.79074)"
|
||||
id="rect4521" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 5.0 KiB |
24
retroshare-qml-app/src/icons/state-ok.svg
Normal file
@ -0,0 +1,24 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
|
||||
<defs id="defs3051">
|
||||
<style type="text/css" id="current-color-scheme">
|
||||
.ColorScheme-Text {
|
||||
color:#4d4d4d;
|
||||
}
|
||||
.ColorScheme-PositiveText {
|
||||
color:#27ae60;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
d="M 11 4 A 6 6 0 0 0 5 10 A 6 6 0 0 0 5.0039062 10.128906 A 4 4 0 0 0 2 14 A 4 4 0 0 0 6 18 L 15 18 A 5 5 0 0 0 20 13 A 5 5 0 0 0 16.757812 8.3242188 A 6 6 0 0 0 11 4 z M 11 5 A 5 5 0 0 1 15.919922 9.1113281 A 4.0000019 4.0000019 0 0 1 19 13 A 4.0000019 4.0000019 0 0 1 15 17 L 6 17 A 2.9999979 2.9999979 0 0 1 3 14 A 2.9999979 2.9999979 0 0 1 6 11 A 2.9999979 2.9999979 0 0 1 6.1074219 11.005859 A 5 5 0 0 1 6 10 A 5 5 0 0 1 11 5 z "
|
||||
class="ColorScheme-Text"
|
||||
/>
|
||||
<path
|
||||
style="fill:currentColor;fill-opacity:1;stroke:none"
|
||||
class="ColorScheme-PositiveText"
|
||||
d="M 16 11 C 13.784 11 12 12.784 12 15 C 12 17.216 13.784 19 16 19 C 18.216 19 20 17.216 20 15 C 20 12.784 18.216 11 16 11 z "
|
||||
/>
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff"
|
||||
d="M 18 13 L 15 16 L 14 15 L 13 16 L 14 17 L 15 18 L 19 14 L 18 13 z " />
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
@ -16,11 +16,13 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.7
|
||||
import QtQuick 2.1
|
||||
import QtQuick.Controls 2.0
|
||||
import org.retroshare.qml_components.LibresapiLocalClient 1.0
|
||||
import "URI.js" as UriJs
|
||||
import "." //Needed for TokensManager and ClipboardWrapper singleton
|
||||
import "components/."
|
||||
|
||||
|
||||
ApplicationWindow
|
||||
{
|
||||
@ -54,80 +56,173 @@ ApplicationWindow
|
||||
function addUriHandler(path, fun) { uriHandlersRegister[path] = fun }
|
||||
function delUriHandler(path, fun) { delete uriHandlersRegister[path] }
|
||||
|
||||
|
||||
header: ToolBar
|
||||
{
|
||||
id: toolBar
|
||||
property alias titleText: toolBarText.text
|
||||
property alias loaderSource: imageLoader.sourceComponent
|
||||
property alias gxsSource: imageLoader.gxsSource
|
||||
property string defaultLabel: "RetroShare"
|
||||
|
||||
Image
|
||||
property var iconsSize: (coreReady)? height - 10 : 0
|
||||
|
||||
property var searchBtnCb
|
||||
|
||||
function openMainPage ()
|
||||
{
|
||||
id: rsIcon
|
||||
fillMode: Image.PreserveAspectFit
|
||||
height: Math.max(30, parent.height - 4)
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
source: "icons/retroshare06.png"
|
||||
if (stackView.currentItem.objectName != "contactsView" )
|
||||
{
|
||||
stackView.push("qrc:/Contacts.qml")
|
||||
}
|
||||
|
||||
}
|
||||
Label
|
||||
|
||||
states:
|
||||
[
|
||||
State
|
||||
{
|
||||
name: "DEFAULT"
|
||||
PropertyChanges { target: toolBar; titleText: defaultLabel}
|
||||
PropertyChanges { target: toolBar; loaderSource: rsIcon}
|
||||
},
|
||||
State
|
||||
{
|
||||
name: "CHATVIEW"
|
||||
PropertyChanges { target: toolBarText; mouseA.visible: false }
|
||||
PropertyChanges { target: toolBar; loaderSource: userHash }
|
||||
// PropertyChanges { target: toolBar; backBtnVisible: true }
|
||||
},
|
||||
State
|
||||
{
|
||||
name: "CONTACTSVIEW"
|
||||
PropertyChanges { target: toolBar; titleText: defaultLabel}
|
||||
PropertyChanges { target: toolBar; loaderSource: rsIcon}
|
||||
PropertyChanges { target: searchIcon; searchIconVisibility: true}
|
||||
}
|
||||
]
|
||||
|
||||
Item
|
||||
{
|
||||
text: "RetroShare"
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: rsIcon.right
|
||||
anchors.leftMargin: 20
|
||||
id: tolbarLeftPadding
|
||||
width: 4
|
||||
}
|
||||
|
||||
MouseArea
|
||||
{
|
||||
id: menu
|
||||
height: parent.height
|
||||
width: parent.height
|
||||
|
||||
anchors.left: tolbarLeftPadding.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
onClicked: sideBar.open()
|
||||
|
||||
Image
|
||||
{
|
||||
source: "qrc:/icons/application-menu.svg"
|
||||
height: parent.height - 10
|
||||
width: height
|
||||
sourceSize.height: height
|
||||
sourceSize.width: height
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
SideBar {
|
||||
id: sideBar
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Label
|
||||
{
|
||||
property alias mouseA: mouseA
|
||||
id: toolBarText
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: menu.right
|
||||
anchors.leftMargin: 20
|
||||
|
||||
MouseArea {
|
||||
id: mouseA
|
||||
visible: true
|
||||
anchors.fill: parent
|
||||
onClicked: { toolBar.openMainPage() }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BtnIcon
|
||||
{
|
||||
property bool searchIconVisibility: false
|
||||
property var onClickCB: function (){}
|
||||
|
||||
id: searchIcon
|
||||
height: toolBar.iconsSize
|
||||
width: toolBar.iconsSize
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
imgUrl: "qrc:/icons/search.svg"
|
||||
anchors.right: imageLoader.left
|
||||
anchors.rightMargin: 5
|
||||
visible: searchIconVisibility && coreReady
|
||||
onClicked:
|
||||
{
|
||||
toolBar.searchBtnCb()
|
||||
}
|
||||
}
|
||||
|
||||
Loader
|
||||
{
|
||||
id: imageLoader
|
||||
height: toolBar.height - 4
|
||||
|
||||
asynchronous: true
|
||||
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 2
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
onClicked: menu.open()
|
||||
property string gxsSource;
|
||||
|
||||
Image
|
||||
}
|
||||
|
||||
Component
|
||||
{
|
||||
id: rsIcon
|
||||
BtnIcon
|
||||
{
|
||||
source: "qrc:/icons/application-menu.png"
|
||||
height: parent.height - 10
|
||||
width: parent.height - 10
|
||||
anchors.centerIn: parent
|
||||
}
|
||||
|
||||
Menu
|
||||
{
|
||||
id: menu
|
||||
y: parent.y + parent.height
|
||||
|
||||
MenuItem
|
||||
height: imageLoader.height
|
||||
width: imageLoader.height
|
||||
fillMode: Image.PreserveAspectFit
|
||||
imgUrl: "/icons/retroshare06.png"
|
||||
onClicked:
|
||||
{
|
||||
text: qsTr("Trusted Nodes")
|
||||
//iconSource: "qrc:/icons/document-share.png"
|
||||
onTriggered: stackView.push("qrc:/TrustedNodesView.qml")
|
||||
enabled: mainWindow.coreReady
|
||||
}
|
||||
MenuItem
|
||||
{
|
||||
text: qsTr("Search Contacts")
|
||||
onTriggered:
|
||||
stackView.push("qrc:/Contacts.qml",
|
||||
{'searching': true} )
|
||||
enabled: mainWindow.coreReady
|
||||
}
|
||||
MenuItem
|
||||
{
|
||||
text: "Paste Link"
|
||||
onTriggered: UriJs.URI.withinString(
|
||||
ClipboardWrapper.getFromClipBoard(),
|
||||
handleIntentUri)
|
||||
|
||||
enabled: mainWindow.coreReady
|
||||
}
|
||||
MenuItem
|
||||
{
|
||||
text: "Terminate Core"
|
||||
onTriggered: rsApi.request("/control/shutdown")
|
||||
visible: !Q_OS_ANDROID
|
||||
if (coreReady) toolBar.openMainPage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component
|
||||
{
|
||||
id: userHash
|
||||
|
||||
AvatarOrColorHash
|
||||
{
|
||||
id: colorHash
|
||||
|
||||
gxs_id: imageLoader.gxsSource
|
||||
height: toolBar.height - 4
|
||||
anchors.leftMargin: 2
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
StackView
|
||||
@ -135,13 +230,43 @@ ApplicationWindow
|
||||
id: stackView
|
||||
anchors.fill: parent
|
||||
focus: true
|
||||
onCurrentItemChanged: if (currentItem) currentItem.focus = true
|
||||
onCurrentItemChanged:
|
||||
{
|
||||
if (currentItem)
|
||||
{
|
||||
setStatus (currentItem)
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onReleased:
|
||||
if (event.key === Qt.Key_Back && stackView.depth > 1)
|
||||
{
|
||||
if ((event.key === Qt.Key_Back || Qt.Key_Backspace) && stackView.depth > 1)
|
||||
{
|
||||
stackView.pop();
|
||||
event.accepted = true;
|
||||
setStatus (stackView.currentItem)
|
||||
}
|
||||
}
|
||||
|
||||
function setStatus (currentItem)
|
||||
{
|
||||
if (currentItem)
|
||||
{
|
||||
if (currentItem.objectName != "chatView" &&
|
||||
currentItem.objectName != "contactsView" &&
|
||||
toolBar.state != "DEFAULT")
|
||||
{
|
||||
toolBar.state = "DEFAULT"
|
||||
}
|
||||
else if (typeof currentItem.changeState === 'function')
|
||||
{
|
||||
currentItem.changeState ()
|
||||
}
|
||||
|
||||
currentItem.focus = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
state: "core_down"
|
||||
initialItem: BusyOverlay { message: qsTr("Connecting to core...") }
|
||||
|
@ -10,14 +10,13 @@
|
||||
<file>TrustedNodesView.qml</file>
|
||||
<file>ChatView.qml</file>
|
||||
<file>icons/retroshare06.png</file>
|
||||
<file>icons/state-offline.png</file>
|
||||
<file>icons/state-ok.png</file>
|
||||
<file>icons/state-offline.svg</file>
|
||||
<file>icons/state-ok.svg</file>
|
||||
<file>GxsIdentityDelegate.qml</file>
|
||||
<file>icons/edit-find.png</file>
|
||||
<file>icons/edit-image-face-detect.png</file>
|
||||
<file>icons/application-menu.png</file>
|
||||
<file>icons/edit-image-face-detect.svg</file>
|
||||
<file>icons/application-menu.svg</file>
|
||||
<file>ContactSort.js</file>
|
||||
<file>icons/emblem-locked.png</file>
|
||||
<file>icons/emblem-locked.svg</file>
|
||||
<file>BusyOverlay.qml</file>
|
||||
<file>URI.js</file>
|
||||
<file>TokensManager.qml</file>
|
||||
@ -25,10 +24,34 @@
|
||||
<file>TrustedNodeDetails.qml</file>
|
||||
<file>ClipboardWrapper.qml</file>
|
||||
<file>ContactDetails.qml</file>
|
||||
<file>ColorHash.qml</file>
|
||||
<file>icons/rating-unrated.png</file>
|
||||
<file>icons/rating.png</file>
|
||||
<file>icons/rating-unrated.svg</file>
|
||||
<file>icons/rating.svg</file>
|
||||
<file>TimedPopup.qml</file>
|
||||
<file>AvatarOrColorHash.qml</file>
|
||||
<file>ChatCache.qml</file>
|
||||
<file>ChatBubbleDelegate.qml</file>
|
||||
<file>icons/send-message.svg</file>
|
||||
<file>icons/attach.svg</file>
|
||||
<file>components/BtnIcon.qml</file>
|
||||
<file>icons/smiley.svg</file>
|
||||
<file>icons/microphone_mute.svg</file>
|
||||
<file>icons/microphone.svg</file>
|
||||
<file>components/ColorHash.qml</file>
|
||||
<file>styles/ChatStyle.qml</file>
|
||||
<file>components/AvatarOrColorHash.qml</file>
|
||||
<file>components/SideBar.qml</file>
|
||||
<file>styles/SideBarStyle.qml</file>
|
||||
<file>components/Btn.qml</file>
|
||||
<file>icons/netgraph.svg</file>
|
||||
<file>icons/search.svg</file>
|
||||
<file>icons/exit.svg</file>
|
||||
<file>icons/add.svg</file>
|
||||
<file>icons/keyring.svg</file>
|
||||
<file>components/TextAndIcon.qml</file>
|
||||
<file>components/emoji/EmojiPicker.qml</file>
|
||||
<file>components/emoji/EmojiCategoryButton.qml</file>
|
||||
<file>components/emoji/EmojiButton.qml</file>
|
||||
<file>components/emoji/emoji.js</file>
|
||||
<file>icons/network-connect.svg</file>
|
||||
<file>icons/network-disconnect.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -1,2 +1,6 @@
|
||||
singleton TokensManager 1.0 TokensManager.qml
|
||||
singleton ClipboardWrapper 1.0 ClipboardWrapper.qml
|
||||
singleton ChatCache ChatCache.qml
|
||||
singleton StyleChat styles/ChatStyle.qml
|
||||
singleton StyleSideBar styles/SideBarStyle.qml
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
!include("../../retroshare.pri"): error("Could not include file ../../retroshare.pri")
|
||||
|
||||
QT += core network qml quick
|
||||
QT += core network qml quick svg
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
|
74
retroshare-qml-app/src/styles/ChatStyle.qml
Normal file
@ -0,0 +1,74 @@
|
||||
import QtQuick 2.0
|
||||
pragma Singleton
|
||||
|
||||
QtObject {
|
||||
|
||||
property QtObject bubble: QtObject{
|
||||
// Bubble measures
|
||||
readonly property int lMarginBubble: 10
|
||||
readonly property int rMarginBubble: 10
|
||||
readonly property int tMarginBubble: 5
|
||||
readonly property int bMarginBubble: 10
|
||||
readonly property int aditionalBubbleHeight: tMarginBubble * 2
|
||||
readonly property int aditionalBubbleWidth: 30
|
||||
readonly property real bubbleMaxWidth: 0.5 // % from parent
|
||||
|
||||
// BubbleProps
|
||||
readonly property int radius: 5
|
||||
|
||||
|
||||
// Colors
|
||||
readonly property string colorIncoming: "lightGreen"
|
||||
readonly property string colorOutgoing: "aliceblue"
|
||||
readonly property string colorSenderName: "cornflowerblue"
|
||||
readonly property string colorMessageTime: "grey"
|
||||
|
||||
// Text
|
||||
readonly property int messageTextSize: 15
|
||||
|
||||
}
|
||||
|
||||
|
||||
property QtObject inferiorPanel: QtObject{
|
||||
// Panel globals
|
||||
readonly property int height: 50
|
||||
readonly property string backgroundColor: "white"
|
||||
readonly property string borderColor: "lightGrey"
|
||||
|
||||
property QtObject msgComposer: QtObject{
|
||||
readonly property string placeHolder: "Send message..."
|
||||
readonly property int maxHeight: 180
|
||||
readonly property int messageBoxTextSize: 15
|
||||
|
||||
property QtObject background: Rectangle {
|
||||
color: "transparent"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Button Icon
|
||||
property QtObject btnIcon: QtObject{
|
||||
readonly property int width: 35
|
||||
readonly property int height: 35
|
||||
|
||||
readonly property int margin: 5
|
||||
|
||||
readonly property string sendIconUrl: "/icons/send-message.svg"
|
||||
readonly property string attachIconUrl: "/icons/attach.svg"
|
||||
readonly property string microIconUrl: "/icons/microphone.svg"
|
||||
readonly property string microMuteIconUrl: "/icons/microphone_mute.svg"
|
||||
readonly property string emojiIconUrl: "/icons/smiley.svg"
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
property QtObject chat: QtObject {
|
||||
// Measures
|
||||
readonly property int bubbleMargin: 20
|
||||
readonly property int bubbleSpacing: 10
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
34
retroshare-qml-app/src/styles/SideBarStyle.qml
Normal file
@ -0,0 +1,34 @@
|
||||
import QtQuick 2.0
|
||||
pragma Singleton
|
||||
|
||||
QtObject {
|
||||
|
||||
property var width: 2 // Number of third parts of screen (for example 2/3)
|
||||
|
||||
property QtObject item: QtObject
|
||||
{
|
||||
property var height: 50
|
||||
|
||||
property string hoverColor: "lightgrey"
|
||||
property string defaultColor: "white"
|
||||
property string pressColor: "slategrey"
|
||||
property int pixelSize: 14
|
||||
}
|
||||
property QtObject header: QtObject
|
||||
{
|
||||
property var color: "#0398d5"
|
||||
property var avatarHeight: 50
|
||||
property var avatarMargins: 15
|
||||
property var textColor: "white"
|
||||
property var textNickSize: 14
|
||||
property var textGxsidSize: 11
|
||||
}
|
||||
property QtObject footer: QtObject
|
||||
{
|
||||
property var color: "white"
|
||||
property var textColor: "grey"
|
||||
property var margins: 8
|
||||
property string text: "Retroshare Dev Version"
|
||||
}
|
||||
|
||||
}
|