Commit df70a8d7 authored by Cage, Marshall Andrew's avatar Cage, Marshall Andrew
Browse files

Add misc image stuff

Refactor plugin loading to keep track of packages
Break preferenece dialog due to refactored plugin loading(?)
parent d037e6f9
......@@ -133,9 +133,9 @@ class Profile():
sections = []
for i in range(len(self.sections)):
title = self.listWidget.item(i).text()
toc += "\t<section title=\"%s\" pos=%d/>\n" %(title,i)
toc += '\t<section title="%s" pos=%d/>\n' %(title,i)
sections.append(self.sections[self.sectionTitles[title]])
toc = "<contents>\n%s</contents>\n" %(toc)
toc = '<contents>\n%s</contents>\n' %(toc)
return (toc, sections)
class Section():
......@@ -175,11 +175,11 @@ class Section():
def serialise(self):
if self.plugin is None:
return "<section title=\"%s\" plugin=\"None\" showTitle=%d/>\n"\
%(self.title,1 if self.showTitle else 0)
return ('<section title="%s" plugin="None" showTitle=%d/>\n'
%(self.title,1 if self.showTitle else 0))
return ("<section title=\"%s\" plugin=\"%s\" showTitle=%d>\n\t%s</sec"\
"tion>\n") %(self.title, self.plugin.__name__,
return ('<section title="%s" plugin="%s" showTitle=%d>\n\t%s</sec'
'tion>\n') %(self.title, self.plugin.__name__,
1 if self.showTitle else 0, self.plugin.serialise())
class Package():
......@@ -193,7 +193,7 @@ class Package():
self.sources = []
loader = importlib.machinery.SourceFileLoader(
"package",os.path.join(path,"__init__.py")
str(path.__hash__()),os.path.join(path,"__init__.py")
)
package = loader.load_module()
self.pluginNames = package.__all__
......@@ -237,7 +237,7 @@ class Package():
path = os.path.join(self.path, name)
loader = importlib.machinery.SourceFileLoader(
name + "MOD",path + ".py"
name + "MOD_" + self.name,path + ".py"
)
# try:
plugin = loader.load_module()
......@@ -543,8 +543,8 @@ class TimeContext(Context):
self.ui.timeBegin.setMaximumTime(QTime(23,59,59,999))
def callback(self,content):
#If the content got this far, we'd better hope it meshes with this context
# Content in this Context should implement "getTime"
# If the content got this far, we'd better hope it meshes with this
# context. Content in this Context should implement "getTime"
# if content.getTime is None
valid = True
time = content.getTime()
......@@ -593,7 +593,7 @@ class TimeContext(Context):
def PackOptions(opts):
pack = ''
for k in opts:
pack += "<opt key=\"%s\" value=\"%s\" property=\"%s\" type=\"%s\"/>\n"\
pack += '<opt key="%s" value="%s" property="%s" type="%s"/>\n'\
%(k,str(opts[k][0]).replace('"','\\"'),opts[k][1],
type(opts[k][0]).__name__)
return pack
......@@ -601,6 +601,6 @@ def PackOptions(opts):
def packExtras(extras):
pack = ''
for k in extras:
pack += "<extra key=\"%s\" value=\"%s\"/>\n"\
pack += '<extra key="%s" value="%s"/>\n'\
%(k,str(extras[k]).replace('"','\\"'))
return pack
\ No newline at end of file
......@@ -12,8 +12,13 @@ class PluginSelectDialog(QDialog):
# works for now, and this memo exists, so it can be taken care of later.
parent = None
ui = None
packages = None
pluginInfo = None
# Holds package objects. Real name is p.name, nice name is p.getName()
# Indices are numbers
packageInfo = {}
packageIndices = {}
# Holds plugin objects. Real name is p.name, nice name is p.getName()
# Indices are package real names -> plugin real names
pluginInfo = {}
__init = False
def __init__(self,parent):
......@@ -24,7 +29,6 @@ class PluginSelectDialog(QDialog):
PluginSelectDialog.ui.setupUi(self)
PluginSelectDialog.parent = parent
PluginSelectDialog.updateModuleList()
PluginSelectDialog.ui.packageList.currentItemChanged.connect(
PluginSelectDialog.updatePluginList
)
......@@ -33,33 +37,49 @@ class PluginSelectDialog(QDialog):
)
self.setWindowTitle("Select Plugin")
PluginSelectDialog.pluginInfo = {}
# PluginSelectDialog.updatePackageList()
PluginSelectDialog.updatePluginList()
PluginSelectDialog.ui.packageList.setCurrentRow(0)
PluginSelectDialog.__init = True
# Update packageInfo with packages and add their nice names to the list
# Also map the real names to the indices in the info list
# Also create an entry in the pluginInfo list for each package's plugins
@staticmethod
def updateModuleList():
PluginSelectDialog.packages = sorted(PluginSelectDialog.parent.packages)
def updatePackageList():
print(PluginSelectDialog.parent.packages)
PluginSelectDialog.packageInfo = sorted(
PluginSelectDialog.parent.packages)
PluginSelectDialog.ui.packageList.clear()
PluginSelectDialog.ui.packageList.addItems(
[p.getName() for p in PluginSelectDialog.packages]
)
PluginSelectDialog.packageIndices = {}
for p in PluginSelectDialog.packageInfo:
PluginSelectDialog.packageIndices[p.name] = len(
PluginSelectDialog.packageIndices)
PluginSelectDialog.pluginInfo[p.name] = []
PluginSelectDialog.ui.packageList.addItems(p.getName())
# Load all plugins and store them according to their package
@staticmethod
def updatePluginInfo():
for p in PluginSelectDialog.packages:
for p in PluginSelectDialog.packageInfo:
for m in p.getPluginNames():
if not m in PluginSelectDialog.pluginInfo:
if not m in PluginSelectDialog.pluginInfo[p.name]:
plugin = p.newPlugin(m,True)
if plugin is not None:
PluginSelectDialog.pluginInfo[m] = plugin
PluginSelectDialog.pluginInfo[plugin.getName()] =plugin
PluginSelectDialog.pluginInfo[p.name][m] = plugin
(PluginSelectDialog.pluginInfo[p.name]
[plugin.getName()]) = plugin
#HEY I JUST STARTED APPENDING PACKAGE NAMES TO PLUGINS IN PLUGIN INFO BUT THIS
#ISN"T THE BEST WAY< TAKE CARE OF IT.
# Update the plugin list widget to contain the selected package's plugins
@staticmethod
def updatePluginList():
if PluginSelectDialog.ui.packageList.currentItem() is None: return;
index_ = PluginSelectDialog.ui.packageList.currentIndex().row()
package = PluginSelectDialog.packageInfo[index_]
PluginSelectDialog.updatePluginInfo()
......@@ -67,8 +87,8 @@ class PluginSelectDialog(QDialog):
PluginSelectDialog.ui.pluginList.addItems(
[
PluginSelectDialog.pluginInfo[m].getName()
for m in PluginSelectDialog.packages[index_].getPluginNames()
if m in PluginSelectDialog.pluginInfo
for m in package.getPluginNames()
if m in PluginSelectDialog.pluginInfo[package.name]
]
)
PluginSelectDialog.ui.pluginList.setCurrentRow(0)
......@@ -78,19 +98,20 @@ class PluginSelectDialog(QDialog):
if PluginSelectDialog.ui.pluginList.currentItem() is None: return;
index_ = PluginSelectDialog.ui.packageList.currentIndex().row()
name = sorted(PluginSelectDialog.packages[index_].getPluginNames())
name = name[PluginSelectDialog.ui.pluginList.currentIndex().row()]
package = PluginSelectDialog.packageInfo[index_]
names = sorted(package.getPluginNames())
name = names[PluginSelectDialog.ui.pluginList.currentIndex().row()]
# Failsafe
# plugin = None
# if not name in PluginSelectDialog.pluginInfo:
# plugin = PluginSelectDialog.packages[index_].newPlugin(name,True)
# plugin = PluginSelectDialog.packageInfo[index_].newPlugin(name,True)
# PluginSelectDialog.pluginInfo[name] = plugin
# else:
if name not in PluginSelectDialog.pluginInfo:
if name not in PluginSelectDialog.pluginInfo[package.name]:
return
plugin = PluginSelectDialog.pluginInfo[name]
plugin = PluginSelectDialog.pluginInfo[package.name][name]
PluginSelectDialog.ui.name.setText(plugin.getName())
PluginSelectDialog.ui.version.setText(plugin.getVersion())
......@@ -99,48 +120,73 @@ class PluginSelectDialog(QDialog):
return
# Return the nice name of the currently selected plugin
def getCurrentPluginName(self):
return self.ui.pluginList.currentItem().text()
# Return the nice name of the currently selected package
def getCurrentPackageName(self):
return self.ui.packageList.currentItem().text()
# Returns a full plugin object of the currently selected plugin
def getCurrentPlugin(self):
index_ = self.ui.packageList.currentIndex().row()
name = sorted(self.packages[index_].getPluginNames())
name = name[self.ui.pluginList.currentIndex().row()]
return self.packages[index_].newPlugin(name)
package = self.packageInfo[index_]
names = sorted(package.getPluginNames())
name = names[self.ui.pluginList.currentIndex().row()]
return package.newPlugin(name)
# Returns a list of nice names for every package
# Returns a list of real names for every package
@staticmethod
def getPackageNames():
return [p.getName() for p in PluginSelectDialog.packages]
def getPackageNames(real=False):
if real:
print('realll')
print([p.name for p in PluginSelectDialog.packageInfo])
return [p.name for p in PluginSelectDialog.packageInfo]
else:
return [p.getName() for p in PluginSelectDialog.packageInfo]
# Returns a list of plugin nice names given a package nice or real name
# If you want the real names, get them from a package object
@staticmethod
def getPluginNames(package):
def getPluginNames(package,real=False):
print(package)
if real and package in PluginSelectDialog.packageIndices:
return PluginSelectDialog.packageInfo[
PluginSelectDialog.packageIndices[package]
].getPluginNames()
index_ = PluginSelectDialog.ui.packageList.findItems(
package,Qt.MatchFixedString
)
if len(index_) > 0:
index_ = PluginSelectDialog.ui.packageList.row(index_[0])
names = []
for m in PluginSelectDialog.packages[index_].getPluginNames():
for m in PluginSelectDialog.packageInfo[index_].getPluginNames():
if m in PluginSelectDialog.pluginInfo:
names.append(PluginSelectDialog.pluginInfo[m].getName())
return names
# Returns a package item given its nice or real name
@staticmethod
def getPackage(package):
def getPackage(package,real=False):
if real and package in PluginSelectDialog.packageIndices:
return PluginSelectDialog.packageInfo[
PluginSelectDialog.packageIndices[package]
]
index_ = PluginSelectDialog.ui.packageList.findItems(
package,Qt.MatchFixedString
)
if len(index_) > 0:
index_ = PluginSelectDialog.ui.packageList.row(index_[0])
return PluginSelectDialog.packages[index_]
return PluginSelectDialog.packageInfo[index_]
# Returns a plugin item by providing it's real package name and real name
# The returned object has no ui widget
@staticmethod
def getPluginInfo(package,plugin):
return PluginSelectDialog.pluginInfo[plugin]
return PluginSelectDialog.pluginInfo[package][plugin]
class LoginDialog(QDialog):
credentials = pyqtSignal([str, str])
......
......@@ -26,13 +26,15 @@ class PreferenceManager(QDialog):
PreferenceManager.ui.treeWidget.currentItemChanged.connect(
PreferenceManager.updateForm
)
for k in sorted(PSD.getPackageNames()):
print('a')
for k in sorted(PSD.getPackageNames(True)):
print(k)
PreferenceManager.preferences[k] = {
'':PSD.getPackage(k).preferenceDict or {}
}
twi = QTreeWidgetItem()
twi.setText(0,k)
for m in sorted(PSD.getPluginNames(k)):
for m in sorted(PSD.getPluginNames(k,True)):
PreferenceManager.preferences[k][m] =\
PSD.getPluginInfo(k,m).getPreferenceDict()
child = QTreeWidgetItem()
......@@ -70,6 +72,7 @@ class PreferenceManager(QDialog):
@staticmethod
def updateForm():
item = PreferenceManager.ui.treeWidget.currentItem()
if item is None: return
child = True if item.parent() else False
package = None
......@@ -78,7 +81,6 @@ class PreferenceManager(QDialog):
[item.text(0)]
else:
package = PreferenceManager.preferences[item.text(0)]['']
# PreferenceManager.storeForm(False)
PreferenceManager.ui.formWidget.setParent(None)
PreferenceManager.ui.horizontalLayout.removeWidget(
PreferenceManager.ui.formWidget
......@@ -93,7 +95,6 @@ class PreferenceManager(QDialog):
w = None
if params['type'] == 'string':
w = QLineEdit()
# print(params)
w.setText(
params['value'] if ('value' in params and params['value'])
else params['default'] if 'default' in params
......@@ -164,10 +165,7 @@ class PreferenceManager(QDialog):
else:
package = PreferenceManager.preferences[item.text(0)]['']
# print(package)
for k in sorted(package.keys()):
# print(k)
params = package[k]
if 'widget' in params:
params['value'] = {
......@@ -176,7 +174,6 @@ class PreferenceManager(QDialog):
'number': lambda: params['widget'].value(),
'choice': lambda: params['widget'].currentText()
}[params['type']]()
# print(package)
if save:
PreferenceManager.savePreferences()
......
......@@ -117,9 +117,9 @@ class ARCTool(QMainWindow):
self.packages = []
self.plugins = {}
self.packageNames = {}
self.loadPackages()
self.pluginDialog = ARCG.PluginSelectDialog(self)
self.pluginDialog.accepted.connect(self.assignSectionPlugin)
self.loadPackages()
# Preference Dialog
self.preferenceDialog = ARCP.PreferenceManager(self)
......@@ -573,7 +573,8 @@ class ARCTool(QMainWindow):
for m in package.getPluginNames():
self.plugins[m] = package
ARCG.PluginSelectDialog.updateModuleList()
print(self.packages)
# ARCG.PluginSelectDialog.updatePluginList()
def generateReport(self):
self.ui.statusBar.showMessage("Generating Report...")
......
<?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="210mm"
height="297mm"
viewBox="0 0 744.09448819 1052.3622047"
id="svg45253"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="drawing.svg">
<defs
id="defs45255" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="97.023869"
inkscape:cy="815.22503"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:object-nodes="true"
showguides="false"
inkscape:guide-bbox="true"
inkscape:snap-smooth-nodes="true"
inkscape:window-width="1360"
inkscape:window-height="743"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid45801" />
<sodipodi:guide
position="195,850.00002"
orientation="0,1"
id="guide45923" />
<sodipodi:guide
position="180,835.00002"
orientation="0,1"
id="guide45925" />
</sodipodi:namedview>
<metadata
id="metadata45258">
<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>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g45933">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45807"
d="m 60,217.3622 -5,-5 7,0 0,5 z"
style="fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path45805"
d="m 50,177.3622 12,0 -10,40 -12,0 z"
style="fill:#306581;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path45803"
d="m 52,177.3622 10,40 2,0 10,0 -10,-40 z"
style="fill:#80b4d0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
</g>
<g
id="g45938">
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path45809"
d="m 80,217.3622 0,-30 2.5,-10 9.5,0 0,40 z"
style="fill:#80b4d0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45811"
d="m 92,187.3622 6,0 0,-10 -6,0 z"
style="fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path45805-7"
d="m 103,197.3622 -10,-8 0,16 3,12 12,0 z"
style="opacity:1;fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path45803-7"
d="m 103,177.3622 2.5,10 -7.5,30 -2,0 -3,-12 L 92.98658,189.41588 96,177.3622 Z"
style="opacity:1;fill:#80b4d0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g45944">
<path
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
id="path45809-9"
d="m 115,207.3622 0,-20 2.5,-10 9.5,0 0,40 -9.5,0 z"
style="fill:#80b4d0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45811-8"
d="m 127,187.3622 6,0 0,-10 -6,0 z"
style="fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45811-8-1"
d="m 127,217.3622 6,0 0,-10 -6,0 z"
style="fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0"
id="path45809-9-0"
d="m 131,202.3622 0,15 9.5,0 2.5,-10 0,-5 z m 12,-10 0,-5 -2.5,-10 -9.5,0 0,15 z"
style="fill:#80b4d0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g45950">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45805-76"
d="m 150,187.3622 7.5,30 12,0 -7.5,-30 z"
style="fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45891"
d="m 178,177.3622 0,10 -28,0 2.5,-10 z"
style="fill:#80b4d0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45809-0"
d="m 170,217.3622 0,-28 -12,0 0,28 z"
style="fill:#80b4d0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<circle
style="opacity:1;fill:none;fill-opacity:1;stroke:#306581;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45927"
cx="183.5"
cy="209.8622"
r="7.4999986" />
<circle
style="opacity:1;fill:none;fill-opacity:1;stroke:#306581;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45929"
cx="203.5"
cy="209.8622"
r="7.4999986" />
<path
style="fill:none;fill-rule:evenodd;stroke:#306581;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 216,217.3622 0,-30"
id="path45931"
inkscape:connector-curvature="0" />
<circle
style="opacity:1;fill:none;fill-opacity:1;stroke:#306581;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45927-1"
cx="157.79291"
cy="264.86221"
r="7.4999986" />
<g
transform="translate(0,55.000005)"
id="g45933-1">
<path
sodipodi:nodetypes="ccccc"
inkscape:connector-curvature="0"
id="path45807-0"
d="m 60,217.3622 -5,-5 7,0 0,5 z"
style="fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path45805-2"
d="m 50,177.3622 12,0 -10,40 -12,0 z"
style="fill:#306581;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path45803-5"
d="m 52,177.3622 10,40 2,0 10,0 -10,-40 z"
style="fill:#80b4d0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<circle
style="opacity:1;fill:none;fill-opacity:1;stroke:#306581;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45929-9"
cx="177.79291"
cy="264.86221"
r="7.4999986" />
<path
style="fill:none;fill-rule:evenodd;stroke:#306581;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 190.2929,272.3622 0,-30"
id="path45931-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#306581;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 140.2929,272.3622 0,-30 -10,0 20,0"
id="path46000"
inkscape:connector-curvature="0" />
<path
style="opacity:1;fill:none;fill-opacity:1;stroke:#306581;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45927-1-1"
sodipodi:type="arc"
sodipodi:cx="88.292892"
sodipodi:cy="252.3622"
sodipodi:rx="9.999999"
sodipodi:ry="9.999999"
sodipodi:start="3.1415927"
sodipodi:end="2.0943951"
d="m 78.292893,252.3622 a 9.999999,9.999999 0 0 1 7.41181,-9.65926 9.999999,9.999999 0 0 1 11.248443,4.65926 9.999999,9.999999 0 0 1 -1.589186,12.07107 9.999999,9.999999 0 0 1 -12.071067,1.58918"
sodipodi:open="true" />
<path
style="fill:none;fill-rule:evenodd;stroke:#306581;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 78.292894,252.3622 0,20"
id="path46017"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#306581;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 93.292894,262.3622 4.999996,10"
id="path46019"
inkscape:connector-curvature="0" />
<path
style="opacity:1;fill:none;fill-opacity:1;stroke:#306581;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path45927-1-3"
sodipodi:type="arc"
sodipodi:cx="118.29289"
sodipodi:cy="257.36221"
sodipodi:rx="15.000003"
sodipodi:ry="15.000003"
sodipodi:start="1.0471976"
sodipodi:end="5.2359878"
sodipodi:open="true"
d="m 125.79289,270.3526 a 15.000003,15.000003 0 0 1 -18.99067,-3.34857 15.000003,15.000003 0 0 1 0,-19.28363 15.000003,15.000003 0 0 1 18.99067,-3.34857" />
</g>
</svg>
This diff is collapsed.
This diff is collapsed.
......@@ -409,8 +409,9 @@ class Plugin(arcclasses.Plugin):
matches = []