Revert "Clone event w/o references (2nd pass, part B)"
This reverts commit 208feceb03
.
Changes requested in the PR not made. Such a change requires
discussion on the list first.
This commit is contained in:
parent
90bdb0a840
commit
9a386574d8
@ -2,7 +2,6 @@
|
|||||||
# Gramps - a GTK+/GNOME based genealogy program
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
#
|
#
|
||||||
# Copyright (C) 2000-2006 Donald N. Allingham
|
# Copyright (C) 2000-2006 Donald N. Allingham
|
||||||
# Copyright (C) 2018 Alois Poettker
|
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -28,24 +27,10 @@ from .backrefmodel import BackRefModel
|
|||||||
from .backreflist import BackRefList
|
from .backreflist import BackRefList
|
||||||
|
|
||||||
class EventBackRefList(BackRefList):
|
class EventBackRefList(BackRefList):
|
||||||
""""""
|
|
||||||
def __init__(self, dbstate, uistate, track, obj, option=None, callback=None):
|
|
||||||
"""
|
|
||||||
Connector class between events and back reference mechanism
|
|
||||||
"""
|
|
||||||
self.option = option
|
|
||||||
|
|
||||||
|
def __init__(self, dbstate, uistate, track, obj, callback=None):
|
||||||
BackRefList.__init__(self, dbstate, uistate, track, obj,
|
BackRefList.__init__(self, dbstate, uistate, track, obj,
|
||||||
BackRefModel, callback)
|
BackRefModel, callback)
|
||||||
|
|
||||||
def get_icon_name(self):
|
def get_icon_name(self):
|
||||||
return 'gramps-event'
|
return 'gramps-event'
|
||||||
|
|
||||||
def get_data(self):
|
|
||||||
"""
|
|
||||||
Method overrides 'get_data' from BackRefList.py
|
|
||||||
"""
|
|
||||||
if self.option and self.option['action']:
|
|
||||||
return []
|
|
||||||
else:
|
|
||||||
return self.obj
|
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
# Copyright (C) 2000-2007 Donald N. Allingham
|
# Copyright (C) 2000-2007 Donald N. Allingham
|
||||||
# Copyright (C) 2009 Gary Burton
|
# Copyright (C) 2009 Gary Burton
|
||||||
# Copyright (C) 2011 Tim G L Lyons
|
# Copyright (C) 2011 Tim G L Lyons
|
||||||
# Copyright (C) 2018 Alois Poettker
|
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -72,9 +71,6 @@ WIKI_HELP_SEC = _('manual|New_Event_dialog')
|
|||||||
class EditEvent(EditPrimary):
|
class EditEvent(EditPrimary):
|
||||||
|
|
||||||
def __init__(self, dbstate, uistate, track, event, callback=None):
|
def __init__(self, dbstate, uistate, track, event, callback=None):
|
||||||
""""""
|
|
||||||
self.callback = callback
|
|
||||||
self.action = uistate.action.split('-')[1]
|
|
||||||
|
|
||||||
EditPrimary.__init__(self, dbstate, uistate, track,
|
EditPrimary.__init__(self, dbstate, uistate, track,
|
||||||
event, dbstate.db.get_event_from_handle,
|
event, dbstate.db.get_event_from_handle,
|
||||||
@ -90,27 +86,18 @@ class EditEvent(EditPrimary):
|
|||||||
return Event()
|
return Event()
|
||||||
|
|
||||||
def get_menu_title(self):
|
def get_menu_title(self):
|
||||||
""" compile menu title out of different actions """
|
|
||||||
handle = self.obj.get_handle()
|
handle = self.obj.get_handle()
|
||||||
|
|
||||||
event_action, event_name = '', ''
|
|
||||||
if handle:
|
if handle:
|
||||||
if self.action == 'clone':
|
|
||||||
event_action = _('Clone')
|
|
||||||
if self.action == 'edit':
|
|
||||||
event_action = _('Edit')
|
|
||||||
|
|
||||||
who = get_participant_from_event(self.db, handle)
|
who = get_participant_from_event(self.db, handle)
|
||||||
desc = self.obj.get_description()
|
desc = self.obj.get_description()
|
||||||
event_name = self.obj.get_type().string
|
event_name = self.obj.get_type()
|
||||||
|
if desc:
|
||||||
|
event_name = '%s - %s' % (event_name, desc)
|
||||||
if who:
|
if who:
|
||||||
event_name = ': %s - %s' % (event_name, who)
|
event_name = '%s - %s' % (event_name, who)
|
||||||
elif desc:
|
dialog_title = _('Event: %s') % event_name
|
||||||
event_name = ': %s - %s' % (event_name, desc)
|
|
||||||
else:
|
else:
|
||||||
event_action = _('New')
|
dialog_title = _('New Event')
|
||||||
|
|
||||||
dialog_title = _('%s Event%s') % (event_action, event_name)
|
|
||||||
return dialog_title
|
return dialog_title
|
||||||
|
|
||||||
def get_custom_events(self):
|
def get_custom_events(self):
|
||||||
@ -220,14 +207,10 @@ class EditEvent(EditPrimary):
|
|||||||
self._add_tab(notebook, self.attr_list)
|
self._add_tab(notebook, self.attr_list)
|
||||||
|
|
||||||
handle_list = self.dbstate.db.find_backlink_handles(self.obj.handle)
|
handle_list = self.dbstate.db.find_backlink_handles(self.obj.handle)
|
||||||
# Additional variables in 'EventBackRefList' injected via 'option'
|
|
||||||
backref_option = {}
|
|
||||||
backref_option['action'] = self.action == 'clone'
|
|
||||||
self.backref_list = EventBackRefList(self.dbstate,
|
self.backref_list = EventBackRefList(self.dbstate,
|
||||||
self.uistate,
|
self.uistate,
|
||||||
self.track,
|
self.track,
|
||||||
handle_list,
|
handle_list)
|
||||||
option=backref_option)
|
|
||||||
self._add_tab(notebook, self.backref_list)
|
self._add_tab(notebook, self.backref_list)
|
||||||
|
|
||||||
self._setup_notebook_tabs(notebook)
|
self._setup_notebook_tabs(notebook)
|
||||||
@ -286,11 +269,7 @@ class EditEvent(EditPrimary):
|
|||||||
self.db) as trans:
|
self.db) as trans:
|
||||||
self.db.add_event(self.obj, trans)
|
self.db.add_event(self.obj, trans)
|
||||||
else:
|
else:
|
||||||
if self.action == 'clone':
|
if self.data_has_changed():
|
||||||
with DbTxn(_("Clone Event"), self.db) as trans:
|
|
||||||
self.obj.handle = None
|
|
||||||
self.db.add_event(self.obj, trans)
|
|
||||||
elif self.data_has_changed():
|
|
||||||
with DbTxn(_("Edit Event (%s)") % self.obj.get_gramps_id(),
|
with DbTxn(_("Edit Event (%s)") % self.obj.get_gramps_id(),
|
||||||
self.db) as trans:
|
self.db) as trans:
|
||||||
if not self.obj.get_gramps_id():
|
if not self.obj.get_gramps_id():
|
||||||
@ -308,6 +287,7 @@ class EditEvent(EditPrimary):
|
|||||||
entered date when importing from a XML file, so we can get an
|
entered date when importing from a XML file, so we can get an
|
||||||
incorrect fail.
|
incorrect fail.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if self.db.readonly:
|
if self.db.readonly:
|
||||||
return False
|
return False
|
||||||
elif self.obj.handle:
|
elif self.obj.handle:
|
||||||
|
@ -241,7 +241,7 @@ class EditEventRef(EditReference):
|
|||||||
self.uistate,
|
self.uistate,
|
||||||
self.track,
|
self.track,
|
||||||
self.db.find_backlink_handles(self.source.handle),
|
self.db.find_backlink_handles(self.source.handle),
|
||||||
callback=self.enable_warnbox)
|
self.enable_warnbox)
|
||||||
self._add_tab(notebook, self.backref_tab)
|
self._add_tab(notebook, self.backref_tab)
|
||||||
self.track_ref_for_deletion("backref_tab")
|
self.track_ref_for_deletion("backref_tab")
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# Copyright (C) 2001-2007 Donald N. Allingham
|
# Copyright (C) 2001-2007 Donald N. Allingham
|
||||||
# Copyright (C) 2008 Gary Burton
|
# Copyright (C) 2008 Gary Burton
|
||||||
# Copyright (C) 2011 Tim G L Lyons
|
# Copyright (C) 2011 Tim G L Lyons
|
||||||
# Copyright (C) 2018 Alois Poettker
|
# Copyright (C) 2017 Alois Poettker
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -29,7 +29,6 @@ Provide the event view.
|
|||||||
# Standard python modules
|
# Standard python modules
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import copy
|
|
||||||
import logging
|
import logging
|
||||||
_LOG = logging.getLogger(".plugins.eventview")
|
_LOG = logging.getLogger(".plugins.eventview")
|
||||||
|
|
||||||
@ -41,16 +40,16 @@ _LOG = logging.getLogger(".plugins.eventview")
|
|||||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||||
_ = glocale.translation.gettext
|
_ = glocale.translation.gettext
|
||||||
|
|
||||||
|
from gramps.gui.dialog import ErrorDialog, MultiSelectDialog, QuestionDialog
|
||||||
from gramps.gen.errors import WindowActiveError
|
from gramps.gen.errors import WindowActiveError
|
||||||
from gramps.gen.lib import Event
|
from gramps.gen.lib import Event
|
||||||
from gramps.gen.plug import CATEGORY_QR_EVENT
|
|
||||||
from gramps.gen.utils.string import data_recover_msg
|
from gramps.gen.utils.string import data_recover_msg
|
||||||
|
|
||||||
from gramps.gui.dialog import ErrorDialog, MultiSelectDialog, QuestionDialog
|
|
||||||
from gramps.gui.ddtargets import DdTargets
|
from gramps.gui.ddtargets import DdTargets
|
||||||
from gramps.gui.editors import EditEvent, DeleteEventQuery
|
from gramps.gui.editors import EditEvent, DeleteEventQuery
|
||||||
from gramps.gui.filters.sidebar import EventSidebarFilter
|
from gramps.gui.filters.sidebar import EventSidebarFilter
|
||||||
from gramps.gui.merge import MergeEvent
|
from gramps.gui.merge import MergeEvent
|
||||||
|
from gramps.gen.plug import CATEGORY_QR_EVENT
|
||||||
from gramps.gui.views.bookmarks import EventBookmarks
|
from gramps.gui.views.bookmarks import EventBookmarks
|
||||||
from gramps.gui.views.listview import ListView, TEXT, MARKUP, ICON
|
from gramps.gui.views.listview import ListView, TEXT, MARKUP, ICON
|
||||||
from gramps.gui.views.treemodels import EventModel
|
from gramps.gui.views.treemodels import EventModel
|
||||||
@ -98,7 +97,6 @@ class EventView(ListView):
|
|||||||
EDIT_MSG = _("Edit the selected event")
|
EDIT_MSG = _("Edit the selected event")
|
||||||
DEL_MSG = _("Delete the selected event")
|
DEL_MSG = _("Delete the selected event")
|
||||||
MERGE_MSG = _("Merge the selected events")
|
MERGE_MSG = _("Merge the selected events")
|
||||||
CLONE_MSG = _("Clones the selected event")
|
|
||||||
FILTER_TYPE = "Event"
|
FILTER_TYPE = "Event"
|
||||||
QR_CATEGORY = CATEGORY_QR_EVENT
|
QR_CATEGORY = CATEGORY_QR_EVENT
|
||||||
|
|
||||||
@ -126,8 +124,6 @@ class EventView(ListView):
|
|||||||
'<PRIMARY>BackSpace' : self.key_delete,
|
'<PRIMARY>BackSpace' : self.key_delete,
|
||||||
})
|
})
|
||||||
|
|
||||||
# Identify the requested action in several sublevel
|
|
||||||
uistate.action = ''
|
|
||||||
uistate.connect('nameformat-changed', self.build_tree)
|
uistate.connect('nameformat-changed', self.build_tree)
|
||||||
uistate.connect('placeformat-changed', self.build_tree)
|
uistate.connect('placeformat-changed', self.build_tree)
|
||||||
|
|
||||||
@ -178,7 +174,6 @@ class EventView(ListView):
|
|||||||
<menuitem action="Edit"/>
|
<menuitem action="Edit"/>
|
||||||
<menuitem action="Remove"/>
|
<menuitem action="Remove"/>
|
||||||
<menuitem action="Merge"/>
|
<menuitem action="Merge"/>
|
||||||
<menuitem action="Clone"/>
|
|
||||||
</placeholder>
|
</placeholder>
|
||||||
<menuitem action="FilterEdit"/>
|
<menuitem action="FilterEdit"/>
|
||||||
</menu>
|
</menu>
|
||||||
@ -193,7 +188,6 @@ class EventView(ListView):
|
|||||||
<toolitem action="Edit"/>
|
<toolitem action="Edit"/>
|
||||||
<toolitem action="Remove"/>
|
<toolitem action="Remove"/>
|
||||||
<toolitem action="Merge"/>
|
<toolitem action="Merge"/>
|
||||||
<toolitem action="Clone"/>
|
|
||||||
</placeholder>
|
</placeholder>
|
||||||
</toolbar>
|
</toolbar>
|
||||||
<popup name="Popup">
|
<popup name="Popup">
|
||||||
@ -204,7 +198,6 @@ class EventView(ListView):
|
|||||||
<menuitem action="Edit"/>
|
<menuitem action="Edit"/>
|
||||||
<menuitem action="Remove"/>
|
<menuitem action="Remove"/>
|
||||||
<menuitem action="Merge"/>
|
<menuitem action="Merge"/>
|
||||||
<menuitem action="Clone"/>
|
|
||||||
<separator/>
|
<separator/>
|
||||||
<menu name="QuickReport" action="QuickReport"/>
|
<menu name="QuickReport" action="QuickReport"/>
|
||||||
</popup>
|
</popup>
|
||||||
@ -212,13 +205,8 @@ class EventView(ListView):
|
|||||||
|
|
||||||
def define_actions(self):
|
def define_actions(self):
|
||||||
ListView.define_actions(self)
|
ListView.define_actions(self)
|
||||||
self.edit_action.add_actions([
|
|
||||||
('Clone', 'gramps-clone', _('Clone...'), None,
|
|
||||||
self.CLONE_MSG, self.clone),
|
|
||||||
])
|
|
||||||
self._add_action('FilterEdit', None,
|
self._add_action('FilterEdit', None,
|
||||||
_('Event Filter Editor'),
|
_('Event Filter Editor'), callback=self.filter_editor)
|
||||||
callback=self.filter_editor,)
|
|
||||||
self._add_action('QuickReport', None,
|
self._add_action('QuickReport', None,
|
||||||
_("Quick View"), None, None, None)
|
_("Quick View"), None, None, None)
|
||||||
|
|
||||||
@ -231,7 +219,6 @@ class EventView(ListView):
|
|||||||
|
|
||||||
def add(self, obj):
|
def add(self, obj):
|
||||||
try:
|
try:
|
||||||
self.uistate.action = 'event-add'
|
|
||||||
EditEvent(self.dbstate, self.uistate, [], Event())
|
EditEvent(self.dbstate, self.uistate, [], Event())
|
||||||
except WindowActiveError:
|
except WindowActiveError:
|
||||||
pass
|
pass
|
||||||
@ -295,7 +282,6 @@ class EventView(ListView):
|
|||||||
for handle in self.selected_handles():
|
for handle in self.selected_handles():
|
||||||
event = self.dbstate.db.get_event_from_handle(handle)
|
event = self.dbstate.db.get_event_from_handle(handle)
|
||||||
try:
|
try:
|
||||||
self.uistate.action = 'event-edit'
|
|
||||||
EditEvent(self.dbstate, self.uistate, [], event)
|
EditEvent(self.dbstate, self.uistate, [], event)
|
||||||
except WindowActiveError:
|
except WindowActiveError:
|
||||||
pass
|
pass
|
||||||
@ -304,38 +290,16 @@ class EventView(ListView):
|
|||||||
"""
|
"""
|
||||||
Merge the selected events.
|
Merge the selected events.
|
||||||
"""
|
"""
|
||||||
merge_list = self.selected_handles()
|
mlist = self.selected_handles()
|
||||||
|
|
||||||
if len(merge_list) != 2:
|
if len(mlist) != 2:
|
||||||
msg = _("Cannot merge event objects.")
|
msg = _("Cannot merge event objects.")
|
||||||
msg2 = _("Exactly two events must be selected to perform a merge. "
|
msg2 = _("Exactly two events must be selected to perform a merge. "
|
||||||
"A second object can be selected by holding down the "
|
"A second object can be selected by holding down the "
|
||||||
"control key while clicking on the desired event.")
|
"control key while clicking on the desired event.")
|
||||||
ErrorDialog(msg, msg2, parent=self.uistate.window)
|
ErrorDialog(msg, msg2, parent=self.uistate.window)
|
||||||
else:
|
else:
|
||||||
self.uistate.action = 'event-merge'
|
MergeEvent(self.dbstate, self.uistate, [], mlist[0], mlist[1])
|
||||||
MergeEvent(self.dbstate, self.uistate, [], merge_list[0], merge_list[1])
|
|
||||||
|
|
||||||
def clone(self, obj):
|
|
||||||
"""
|
|
||||||
Clones the selected event.
|
|
||||||
"""
|
|
||||||
event_list = self.selected_handles()
|
|
||||||
|
|
||||||
if len(event_list) != 1:
|
|
||||||
msg = _("Cannot clone event object.")
|
|
||||||
msg2 = _("Exactly one event must be selected to perform a clone.")
|
|
||||||
ErrorDialog(msg, msg2, parent=self.uistate.window)
|
|
||||||
else:
|
|
||||||
event = Event()
|
|
||||||
event = copy.deepcopy(self.dbstate.db.get_event_from_handle(event_list[0]))
|
|
||||||
event.gramps_id = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.uistate.action = 'event-clone'
|
|
||||||
EditEvent(self.dbstate, self.uistate, [], event)
|
|
||||||
except WindowActiveError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def tag_updated(self, handle_list):
|
def tag_updated(self, handle_list):
|
||||||
"""
|
"""
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 727 B |
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
||||||
<!-- Creator: CorelDRAW -->
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="48.033mm" height="48.033mm" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
|
|
||||||
viewBox="0 0 48.033 48.033"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<defs>
|
|
||||||
<style type="text/css">
|
|
||||||
<![CDATA[
|
|
||||||
.str0 {stroke:#3C6B41;stroke-width:2.26929}
|
|
||||||
.fil0 {fill:url(#id0);fill-rule:nonzero}
|
|
||||||
]]>
|
|
||||||
</style>
|
|
||||||
<linearGradient id="id0" gradientUnits="userSpaceOnUse" x1="47.2838" y1="34.1401" x2="0.752554" y2="14.5731">
|
|
||||||
<stop offset="0" style="stop-color:#337B30"/>
|
|
||||||
<stop offset="0.101961" style="stop-color:#468843"/>
|
|
||||||
<stop offset="1" style="stop-color:honeydew"/>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="Ebene_x0020_1">
|
|
||||||
<metadata id="CorelCorpID_0Corel-Layer"/>
|
|
||||||
<path class="fil0 str0" d="M1.17237 1.84096c2.91519,1.49944 5.83038,3.00369 8.74529,4.49859 2.91519,1.49518 5.83464,2.9949 8.75437,4.4898 -1.69034,1.03139 -3.38096,2.0625 -5.06705,3.08936 0.963882,1.55333 1.92805,3.10695 2.89221,4.65602 1.2657,1.67502 2.5314,3.35033 3.80163,5.02081 1.00076,0.855807 2.00577,1.70679 3.01107,2.55778 0.232886,0.202818 0.470595,0.401098 0.708303,0.599093 0.232886,-0.197996 0.466056,-0.396275 0.703481,-0.599093 1.00076,-0.850985 2.00606,-1.70197 3.01107,-2.55778 1.2657,-1.67048 2.5314,-3.34579 3.80163,-5.02081 0.964166,-1.54908 1.92805,-3.10269 2.89221,-4.65602 -1.69062,-1.02686 -3.38096,-2.05797 -5.06705,-3.08936 2.91491,-1.4949 5.83464,-2.99462 8.74983,-4.4898 2.91462,-1.4949 5.83464,-2.99915 8.75465,-4.49859 -0.0822619,3.22892 -0.164524,6.4621 -0.242247,9.68648 -0.0777233,3.2241 -0.159985,6.45727 -0.237708,9.68166 -1.69034,-1.02657 -3.38125,-2.05797 -5.06705,-3.08908 -0.968705,1.56269 -1.93741,3.1251 -2.90611,4.68297 -1.50341,1.9862 -3.00653,3.97183 -4.50511,5.95349 -0.0958776,0.125946 -0.192039,0.251892 -0.283378,0.373582 -0.109777,0.0899208 -0.214732,0.180125 -0.31997,0.27033 -0.680504,0.580655 -1.36129,1.15734 -2.04208,1.73346 -0.141831,1.99953 -0.283662,3.99878 -0.420387,5.99831 -0.136725,1.99925 -0.274301,3.99878 -0.411593,5.99831 -0.0865168,1.24698 -0.173317,2.49452 -0.260401,3.74178 -1.26088,0 -2.5175,0 -3.77412,0 -1.58539,0 -3.17077,0 -4.75616,0 -1.26116,0 -2.51778,0 -3.7744,0 -0.0868005,-1.24726 -0.173601,-2.4948 -0.260118,-3.74178 -0.141831,-1.99953 -0.283662,-3.99906 -0.420387,-5.99831 -0.137009,-1.99953 -0.274301,-3.99878 -0.411309,-5.99831 -0.681072,-0.576117 -1.36186,-1.1528 -2.04265,-1.73346 -0.109777,-0.0902044 -0.214732,-0.180409 -0.31997,-0.27033 -0.095594,-0.121691 -0.191755,-0.247637 -0.282811,-0.373582 -1.43051,-1.88238 -2.85591,-3.7693 -4.28159,-5.65621 -0.0683625,-0.0899208 -0.137009,-0.180125 -0.205655,-0.27033 -0.00907717,-0.00879351 -0.0136158,-0.0178707 -0.0181543,-0.0269479 -0.968705,-1.55787 -1.93741,-3.12028 -2.90611,-4.68297 -1.69062,1.03111 -3.38125,2.0625 -5.06705,3.08908 -0.0822619,-3.22438 -0.164524,-6.45756 -0.242247,-9.68166 -0.0777233,-3.22438 -0.155447,-6.45756 -0.232886,-9.68648z"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.1 KiB |
Loading…
Reference in New Issue
Block a user