intermediate commit

This commit is contained in:
Michael Zanetti 2018-10-02 22:41:20 +02:00
parent cf00390f39
commit 798b6879fd
10 changed files with 692 additions and 3 deletions

View File

@ -155,7 +155,7 @@ void DeviceManager::getVendorsResponse(const QVariantMap &params)
void DeviceManager::getSupportedDevicesResponse(const QVariantMap &params)
{
// qDebug() << "DeviceClass received:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
qDebug() << "DeviceClass received:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
if (params.value("params").toMap().keys().contains("deviceClasses")) {
QVariantList deviceClassList = params.value("params").toMap().value("deviceClasses").toList();
foreach (QVariant deviceClassVariant, deviceClassList) {
@ -238,6 +238,7 @@ void DeviceManager::getConfiguredDevicesResponse(const QVariantMap &params)
value.convert(QVariant::Int);
}
device->setStateValue(stateTypeId, value);
qDebug() << "Set device state value:" << device->stateValue(stateTypeId) << value;
}
devices()->addDevice(device);
}

View File

@ -303,7 +303,7 @@ void JsonRpcClient::sendRequest(const QVariantMap &request)
{
QVariantMap newRequest = request;
newRequest.insert("token", m_token);
qDebug() << "Sending request" << qUtf8Printable(QJsonDocument::fromVariant(newRequest).toJson());
// qDebug() << "Sending request" << qUtf8Printable(QJsonDocument::fromVariant(newRequest).toJson());
m_connection->sendData(QJsonDocument::fromVariant(newRequest).toJson(QJsonDocument::Compact) + "\n");
}

View File

@ -179,6 +179,9 @@ void LogsModel::update()
void LogsModel::fetchEarlier(int hours)
{
if (!m_engine) {
return;
}
if (m_busy) {
return;
}

View File

@ -254,5 +254,8 @@
<file>ui/devicelistpages/DeviceListPageBase.qml</file>
<file>ui/MainPage.qml</file>
<file>ui/RootItem.qml</file>
<file>ui/devicepages/FingerprintReaderDevicePage.qml</file>
<file>ui/images/account.svg</file>
<file>ui/images/contact-new.svg</file>
</qresource>
</RCC>

View File

@ -53,7 +53,7 @@ ApplicationWindow {
rootItem.handleCloseEvent(close)
}
property var supportedInterfaces: ["light", "weather", "sensor", "media", "garagegate", "extendedawning", "extendedshutter", "extendedblind", "button", "notifications", "inputtrigger", "outputtrigger", "gateway"]
property var supportedInterfaces: ["light", "weather", "sensor", "media", "garagegate", "extendedawning", "extendedshutter", "extendedblind", "accesscontrol", "button", "notifications", "inputtrigger", "outputtrigger", "gateway"]
function interfaceToString(name) {
switch(name) {
case "light":
@ -91,9 +91,14 @@ ApplicationWindow {
return qsTr("Awnings");
case "garagegate":
return qsTr("Garage gates");
case "accesscontrol":
return qsTr("Access control");
case "uncategorized":
return qsTr("Uncategorized")
default:
console.warn("interfaceToString unhandled interface:", name)
}
return ""
}
function interfacesToIcon(interfaces) {
@ -166,6 +171,8 @@ ApplicationWindow {
return Qt.resolvedUrl("images/select-none.svg")
case "simpleclosable":
return Qt.resolvedUrl("images/sort-listitem.svg")
case "accesscontrol":
return Qt.resolvedUrl("images/network-secure.svg");
default:
console.warn("InterfaceToIcon: Unhandled interface", name)
}
@ -233,6 +240,8 @@ ApplicationWindow {
page = "AwningDevicePage.qml";
} else if (interfaceList.indexOf("notifications") >= 0) {
page = "NotificationsDevicePage.qml";
} else if (interfaceList.indexOf("fingerprintreader") >= 0) {
page = "FingerprintReaderDevicePage.qml";
} else {
page = "GenericDevicePage.qml";
}

View File

@ -0,0 +1,295 @@
import QtQuick 2.5
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
import Nymea 1.0
import "../components"
import "../customviews"
DevicePageBase {
id: root
readonly property var usersStateType: deviceClass.stateTypes.findByName("users")
readonly property var usersState: device.states.getState(usersStateType.id)
readonly property var accessGrantedEventType: deviceClass.eventTypes.findByName("accessGranted")
readonly property var accessDeniedEventType: deviceClass.eventTypes.findByName("accessDenied")
ColumnLayout {
anchors.fill: parent
// Item {
// Layout.fillWidth: true
// Layout.preferredHeight: root.inputVisible ? inputColumn.implicitHeight : 0
// Behavior on Layout.preferredHeight { NumberAnimation { duration: 130; easing.type: Easing.InOutQuad } }
// ColumnLayout {
// id: inputColumn
// anchors { left: parent.left; bottom: parent.bottom; right: parent.right }
// TextField {
// id: titleTextField
// Layout.fillWidth: true
// Layout.topMargin: app.margins
// Layout.leftMargin: app.margins; Layout.rightMargin: app.margins
// placeholderText: qsTr("Title")
// }
// TextArea {
// id: bodyTextField
// Layout.fillWidth: true
// Layout.leftMargin: app.margins; Layout.rightMargin: app.margins
// placeholderText: qsTr("Text")
// wrapMode: Text.WordWrap
// }
// }
// }
Button {
Layout.fillWidth: true
Layout.margins: app.margins
text: qsTr("Manage access")
onClicked: {
pageStack.push(manageUsersComponent)
}
}
// ThinDivider {}
GenericTypeLogView {
Layout.fillHeight: true
Layout.fillWidth: true
text: qsTr("%1 fingerprints recognized on this device in the last %2 days.")
logsModel: LogsModel {
deviceId: root.device.id
engine: _engine
live: true
Component.onCompleted: update()
typeIds: [root.accessGrantedEventType.id, root.accessDeniedEventType.id];
}
delegate: MeaListItemDelegate {
width: parent.width
iconName: "../images/notification.svg"
text: model.typeId === root.accessGrantedEventType.id ? qsTr("Access granted for user %1").arg(model.value) : qsTr("Access denied")
subText: Qt.formatDateTime(model.timestamp)
progressive: false
onClicked: {
var parts = model.value.trim().split(', ')
var popup = detailsPopup.createObject(root, {timestamp: model.timestamp, notificationTitle: parts[1], notificationBody: parts[0]});
popup.open();
}
}
}
}
Component {
id: manageUsersComponent
Page {
header: GuhHeader {
text: qsTr("Manage users")
onBackPressed: pageStack.pop()
HeaderButton {
imageSource: "../images/contact-new.svg"
onClicked: pageStack.push(addUserComponent)
}
}
ColumnLayout {
anchors.fill: parent
Label {
Layout.fillWidth: true
Layout.margins: app.margins
wrapMode: Text.WordWrap
text: root.usersState.value.length === 0 ?
qsTr("There are no fingerprints registered with this lock")
: qsTr("The following users have valid fingerprints for this lock")
}
ThinDivider {}
ListView {
Layout.fillWidth: true
Layout.fillHeight: true
clip: true
model: root.usersState.value
delegate: MeaListItemDelegate {
text: modelData
width: parent.width
progressive: false
iconName: "../images/account.svg"
canDelete: true
onDeleteClicked: {
var actionType = root.deviceClass.actionTypes.findByName("removeUser")
var params = []
var titleParam = {}
titleParam["paramTypeId"] = actionType.paramTypes.findByName("userId").id
titleParam["value"] = modelData
params.push(titleParam)
engine.deviceManager.executeAction(root.device.id, actionType.id, params)
}
}
}
}
}
}
Component {
id: addUserComponent
Page {
id: addUserPage
header: GuhHeader {
text: qsTr("Add a new fingerprint")
onBackPressed: pageStack.pop()
}
property bool error: false
Connections {
target: engine.deviceManager
onExecuteActionReply: {
addUserPage.error = params["deviceError"] !== DeviceManager.DeviceErrorNoError
print("Execute action reply:", params);
addUserSwipeView.currentIndex++
}
}
ColumnLayout {
anchors.fill: parent
SwipeView {
id: addUserSwipeView
Layout.fillWidth: true
Layout.preferredHeight: 200
Layout.alignment: Qt.AlignTop
Item {
width: addUserSwipeView.width
height: addUserSwipeView.height
ColumnLayout {
anchors.fill: parent
anchors.margins: app.margins
Label {
Layout.fillWidth: true
text: qsTr("Username")
}
TextField {
id: userIdTextField
Layout.fillWidth: true
}
Button {
text: qsTr("Add user")
Layout.fillWidth: true
onClicked: {
var actionType = root.deviceClass.actionTypes.findByName("addUser")
var params = []
var titleParam = {}
titleParam["paramTypeId"] = actionType.paramTypes.findByName("userId").id
titleParam["value"] = userIdTextField.displayText
params.push(titleParam)
engine.deviceManager.executeAction(root.device.id, actionType.id, params)
addUserSwipeView.currentIndex++
}
}
}
}
Item {
width: addUserSwipeView.width
height: addUserSwipeView.height
ColumnLayout {
anchors.fill: parent
anchors.margins: app.margins
Label {
text: qsTr("Please scan the fingerprint now")
Layout.fillWidth: true
}
}
}
Item {
width: addUserSwipeView.width
height: addUserSwipeView.height
ColumnLayout {
anchors.fill: parent
anchors.margins: app.margins
spacing: app.margins * 2
Label {
Layout.fillWidth: true
font.pixelSize: app.largeFont
color: app.accentColor
text: addUserPage.error ? qsTr("Uh oh") :
qsTr("All done!")
horizontalAlignment: Text.AlignHCenter
}
Label {
text: addUserPage.error ? qsTr("Fingerprint could not be read.\nPlease try again.") :
qsTr("Fingerprint added!")
Layout.fillWidth: true
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
}
Button {
Layout.fillWidth: true
text: qsTr("OK")
onClicked: pageStack.pop()
}
}
}
}
}
}
}
Component {
id: detailsPopup
MeaDialog {
id: detailsDialog
property string timestamp
property string notificationTitle
property string notificationBody
title: qsTr("Notification details")
Label {
Layout.fillWidth: true
text: qsTr("Date sent")
font.bold: true
}
Label {
Layout.fillWidth: true
text: Qt.formatDateTime(detailsDialog.timestamp)
}
Label {
Layout.topMargin: app.margins
Layout.fillWidth: true
text: qsTr("Title")
font.bold: true
}
Label {
Layout.fillWidth: true
text: detailsDialog.notificationTitle
wrapMode: Text.WordWrap
}
Label {
Layout.topMargin: app.margins
Layout.fillWidth: true
text: qsTr("Text")
font.bold: true
}
Label {
Layout.fillWidth: true
text: detailsDialog.notificationBody
wrapMode: Text.WordWrap
}
}
}
}

View File

@ -118,6 +118,7 @@ Page {
property var unitString: deviceClass.stateTypes.getStateType(stateTypeId).unitString
text: unitString === "datetime" ? Qt.formatDateTime(new Date(value * 1000), Qt.DefaultLocaleShortDate) : value + " " + unitString
horizontalAlignment: Text.AlignHCenter
elide: Text.ElideRight
}
}

View File

@ -79,6 +79,7 @@ DevicePageBase {
logsModel: LogsModel {
deviceId: root.device.id
live: true
engine: _engine
Component.onCompleted: update()
typeIds: [root.deviceClass.actionTypes.findByName("notify").id];

View File

@ -0,0 +1,188 @@
<?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"
width="96"
height="96"
id="svg4874"
version="1.1"
inkscape:version="0.91+devel r"
viewBox="0 0 96 96.000001"
sodipodi:docname="account02.svg">
<defs
id="defs4876" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.0249989"
inkscape:cx="-75.494681"
inkscape:cy="61.629883"
inkscape:document-units="px"
inkscape:current-layer="g4780"
showgrid="true"
showborder="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-global="false">
<inkscape:grid
type="xygrid"
id="grid5451"
empspacing="8" />
<sodipodi:guide
orientation="1,0"
position="8,-8.0000001"
id="guide4063"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="4,-8.0000001"
id="guide4065"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,88.000001"
id="guide4067"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,92.000001"
id="guide4069"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="104,4"
id="guide4071"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-5,8.0000001"
id="guide4073"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="92,-8.0000001"
id="guide4075"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="88,-8.0000001"
id="guide4077"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,84.000001"
id="guide4074"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="12,-8.0000001"
id="guide4076"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-5,12"
id="guide4078"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="84,-9.0000001"
id="guide4080"
inkscape:locked="false" />
<sodipodi:guide
position="48,-8.0000001"
orientation="1,0"
id="guide4170"
inkscape:locked="false" />
<sodipodi:guide
position="-8,48"
orientation="0,1"
id="guide4172"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata4879">
<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>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(67.857146,-78.50504)">
<g
transform="matrix(0,-1,-1,0,373.50506,516.50504)"
id="g4845"
style="display:inline">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="next01.png"
transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)"
id="g4778"
inkscape:label="Layer 1">
<g
transform="matrix(-1,0,0,1,575.99999,611)"
id="g4780"
style="display:inline">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
id="rect4782"
width="96.037987"
height="96"
x="-438.00244"
y="345.36221"
transform="scale(-1,1)" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.00079107;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 432,393.36133 c 0,23.17236 -18.83538,42 -42.01562,42 -23.18025,0 -42.01563,-18.82764 -42.01563,-42 0,-23.17236 18.83538,-42 42.01563,-42 23.18024,0 42.01562,18.82764 42.01562,42 z m -4.00195,0 c 0,-21.00932 -16.99476,-37.99805 -38.01367,-37.99805 -21.01892,0 -38.01563,16.98873 -38.01563,37.99805 0,21.00931 16.99671,37.99804 38.01563,37.99805 21.01891,0 38.01367,-16.98874 38.01367,-37.99805 z"
id="path4116"
inkscape:connector-curvature="0" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.00079107;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 405.01758,377.44141 c -2.47429,0 -4.77402,0.37366 -6.86133,1.15234 -2.05824,0.76779 -3.87801,1.88191 -5.40039,3.32617 -1.52083,1.40488 -2.71451,3.11134 -3.54883,5.05664 l -0.008,0.0156 -0.006,0.0176 C 388.39303,388.97398 388,391.10676 388,393.35156 c 0,2.24476 0.39304,4.37563 1.19336,6.33985 l 0.006,0.0176 0.008,0.0176 c 0.83501,1.9469 2.02571,3.66805 3.54102,5.10742 l 0.0117,0.01 0.01,0.0117 c 1.52217,1.4021 3.33667,2.4872 5.38672,3.25195 2.08731,0.77869 4.38704,1.15235 6.86133,1.15235 2.44091,0 4.72145,-0.37519 6.80469,-1.15235 2.08162,-0.76297 3.91553,-1.84644 5.4414,-3.25195 l 0.0117,-0.0117 0.0117,-0.01 c 1.51879,-1.44272 2.69533,-3.17519 3.49414,-5.13086 0.8391,-1.96532 1.25391,-4.1033 1.25391,-6.35156 0,-2.25047 -0.41513,-4.39054 -1.25586,-6.35742 -0.79899,-1.95434 -1.98018,-3.67196 -3.50586,-5.08008 -1.52696,-1.44689 -3.36858,-2.55717 -5.45899,-3.32226 -2.08122,-0.77527 -4.35887,-1.15039 -6.79687,-1.15039 z m 0,4.00195 c 2.03312,0 3.8222,0.30751 5.40625,0.89844 l 0.006,0.004 0.006,0.002 c 1.64251,0.6007 2.98583,1.42421 4.0957,2.47851 l 0.0117,0.01 0.01,0.0117 c 1.1055,1.01828 1.93658,2.21717 2.5293,3.67187 l 0.006,0.0176 0.008,0.0156 c 0.62133,1.4486 0.93946,3.02752 0.93946,4.79883 0,1.77125 -0.31813,3.34826 -0.93946,4.79688 l -0.008,0.0176 -0.006,0.0156 c -0.59248,1.4541 -1.42881,2.67859 -2.54101,3.73828 -1.10958,1.01953 -2.45658,1.8325 -4.10547,2.43555 l -0.006,0.002 -0.006,0.002 c -1.58405,0.59093 -3.37314,0.90039 -5.40625,0.90039 -2.07307,0 -3.88296,-0.31099 -5.46289,-0.90039 -1.61095,-0.60095 -2.94301,-1.41315 -4.0586,-2.4375 -1.11428,-1.06102 -1.97055,-2.29512 -2.59961,-3.75391 C 392.30655,396.71535 392,395.12995 392,393.35156 c 0,-1.77775 0.30701,-3.36427 0.89648,-4.8164 0.62888,-1.45866 1.47715,-2.668 2.58399,-3.6875 l 0.0117,-0.0117 0.0117,-0.01 c 1.11657,-1.06067 2.44494,-1.88534 4.05078,-2.48437 1.57993,-0.5894 3.38982,-0.89844 5.46289,-0.89844 z"
id="path4202-1"
inkscape:connector-curvature="0" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.00079107;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 361.07617,364.22266 -0.002,4 c 3.46007,0.002 6.2421,0.27766 8.37695,0.93945 2.13486,0.66179 3.61991,1.63997 4.8418,3.25781 2.44377,3.2357 3.73242,9.6077 3.73242,20.85742 0,11.24973 -1.28783,17.62413 -3.73242,20.86328 -1.2223,1.61958 -2.70839,2.59897 -4.84375,3.26368 -2.13536,0.6647 -4.91868,0.94328 -8.37891,0.95117 l 0.01,4.00195 c 3.65969,-0.008 6.80598,-0.27597 9.55859,-1.13281 2.75261,-0.85684 5.11262,-2.37486 6.84766,-4.67383 3.47007,-4.59793 4.53906,-11.74795 4.53906,-23.27344 0,-11.52548 -1.06817,-18.67387 -4.53906,-23.26953 -1.73545,-2.29782 -4.0965,-3.81257 -6.84961,-4.66601 -2.75312,-0.85345 -5.9007,-1.1165 -9.56055,-1.11914 z"
id="path4228-7"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,188 @@
<?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"
width="96"
height="96"
id="svg4874"
version="1.1"
inkscape:version="0.91+devel r"
viewBox="0 0 96 96.000001"
sodipodi:docname="contact-new.svg">
<defs
id="defs4876" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="17.150877"
inkscape:cx="-6.9384225"
inkscape:cy="56.839654"
inkscape:document-units="px"
inkscape:current-layer="g4780"
showgrid="true"
showborder="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:object-nodes="false"
inkscape:snap-smooth-nodes="false"
inkscape:snap-midpoints="false"
inkscape:snap-object-midpoints="false"
inkscape:snap-center="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-global="true"
inkscape:snap-others="false">
<inkscape:grid
type="xygrid"
id="grid5451"
empspacing="8" />
<sodipodi:guide
orientation="1,0"
position="8,-8.0000001"
id="guide4063"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="4,-8.0000001"
id="guide4065"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,88.000001"
id="guide4067"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,92.000001"
id="guide4069"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="104,4"
id="guide4071"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-5,8.0000001"
id="guide4073"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="88,-8.0000001"
id="guide4077"
inkscape:locked="false" />
<sodipodi:guide
orientation="0,1"
position="-8,84.000001"
id="guide4074"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="12,-8.0000001"
id="guide4076"
inkscape:locked="false" />
<sodipodi:guide
orientation="1,0"
position="84,-8.0000001"
id="guide4080"
inkscape:locked="false" />
<sodipodi:guide
position="48,-8.0000001"
orientation="1,0"
id="guide4170"
inkscape:locked="false" />
<sodipodi:guide
position="-8,48"
orientation="0,1"
id="guide4172"
inkscape:locked="false" />
<sodipodi:guide
position="92,-8.0000001"
orientation="1,0"
id="guide4760"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata4879">
<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>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(67.857146,-78.50504)">
<g
transform="matrix(0,-1,-1,0,373.50506,516.50504)"
id="g4845"
style="display:inline">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="next01.png"
transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)"
id="g4778"
inkscape:label="Layer 1">
<g
transform="matrix(-1,0,0,1,575.99999,611)"
id="g4780"
style="display:inline">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:4;marker:none;enable-background:accumulate"
id="rect4782"
width="96.037987"
height="96"
x="-438.00244"
y="345.36221"
transform="scale(-1,1)" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.5;marker:none;enable-background:accumulate"
d="m 384.98148,371.3622 1.0004,-3.99998 -40.01574,0 0,3.99998 z"
id="rect3470"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<rect
transform="scale(-1,1)"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.5;marker:none;enable-background:accumulate"
id="rect3472"
width="4.0014911"
height="40.000053"
x="-367.97476"
y="349.36221" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 35 2.5644531 C 32.67165 2.5644531 30.457751 2.9981208 28.425781 3.8769531 C 26.412051 4.7098436 24.632128 5.9356862 23.148438 7.5136719 L 23.136719 7.5253906 L 23.126953 7.5371094 C 21.676483 9.1279699 20.557924 11.039127 19.771484 13.210938 C 19.771484 13.210938 19.771484 13.212891 19.771484 13.212891 C 18.974584 15.376345 18.589844 17.743344 18.589844 20.28125 C 18.589844 22.85941 18.973711 25.252787 19.775391 27.423828 C 20.563391 29.557874 21.682323 31.444824 23.126953 33.029297 L 23.136719 33.041016 L 23.148438 33.052734 C 24.631818 34.63041 26.406206 35.871342 28.416016 36.742188 L 28.433594 36.748047 L 28.449219 36.755859 C 30.476559 37.590389 32.68026 38 35 38 C 37.3198 38 39.521488 37.590399 41.548828 36.755859 L 41.564453 36.748047 L 41.582031 36.742188 C 43.592031 35.871262 45.352671 34.624135 46.800781 33.039062 C 48.286681 31.455319 49.432536 29.563671 50.222656 27.423828 C 51.024326 25.252787 51.408193 22.8594 51.408203 20.28125 C 51.408193 17.743344 51.023453 15.376345 50.226562 13.212891 L 50.226562 13.210938 C 49.438103 11.033529 48.292611 9.1174846 46.800781 7.5273438 C 45.352331 5.942031 43.585886 4.7098836 41.572266 3.8769531 C 39.540296 2.9981208 37.32841 2.5644531 35 2.5644531 z M 35 6.5644531 C 36.84125 6.5644531 38.481534 6.8950768 39.990234 7.5488281 L 40.007812 7.5585938 L 40.025391 7.5664062 C 41.540121 8.1899196 42.792089 9.0621871 43.855469 10.228516 L 43.865234 10.240234 L 43.876953 10.251953 C 44.977653 11.42255 45.838054 12.840841 46.464844 14.572266 L 46.466797 14.578125 L 46.46875 14.583984 C 47.08591 16.255353 47.408193 18.141527 47.408203 20.28125 C 47.408193 22.462587 47.08441 24.371772 46.46875 26.039062 C 45.84362 27.732063 44.983993 29.135146 43.876953 30.3125 L 43.865234 30.324219 L 43.855469 30.335938 C 42.788989 31.505685 41.524563 32.402675 40.001953 33.064453 C 38.491993 33.682519 36.84454 34 35 34 C 33.15553 34 31.506074 33.682519 29.996094 33.064453 C 28.474954 32.403365 27.186715 31.501207 26.078125 30.326172 C 25.006555 29.148688 24.157177 27.73948 23.529297 26.039062 C 22.913637 24.371782 22.589844 22.462587 22.589844 20.28125 C 22.589844 18.141537 22.912127 16.255353 23.529297 14.583984 L 23.53125 14.578125 L 23.533203 14.572266 C 24.161853 12.835703 25.010589 11.412165 26.074219 10.242188 C 27.180519 9.0686618 28.457976 8.1898996 29.972656 7.5664062 L 29.990234 7.5585938 L 30.007812 7.5488281 C 31.516543 6.8950768 33.15882 6.5644531 35 6.5644531 z M 34.982422 43.980469 C 23.424652 43.980469 16.296649 44.893248 11.667969 48.144531 C 9.3536287 49.770168 7.8016706 52.031581 6.9316406 54.6875 C 6.0616106 57.343429 5.7951094 60.384757 5.7871094 63.943359 L 9.7871094 63.953125 C 9.7950194 60.600801 10.076275 57.940596 10.734375 55.931641 C 11.392465 53.922695 12.3476 52.556698 13.96875 51.417969 C 17.21105 49.1405 23.666502 47.980469 34.982422 47.980469 C 46.298352 47.980479 52.751444 49.14131 55.990234 51.417969 C 57.609624 52.556288 58.56357 53.921292 59.21875 55.929688 C 59.87394 57.938083 60.152297 60.597035 60.154297 63.949219 L 64.154297 63.947266 C 64.151647 60.388524 63.890038 57.345932 63.023438 54.689453 C 62.156837 52.032984 60.606189 49.770578 58.292969 48.144531 C 53.666529 44.892448 46.540202 43.980479 34.982422 43.980469 z "
transform="matrix(0,-1,-1.0003957,0,438.00245,441.36222)"
id="path4202-9" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB