Allow adding the Virtual library button to any toolbar/menu via Preferences->Toolbars & menus

This commit is contained in:
Kovid Goyal 2018-02-26 09:00:56 +05:30
parent 348d6cecce
commit 4983623691
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
6 changed files with 793 additions and 8 deletions

746
imgsrc/vl.svg Normal file
View File

@ -0,0 +1,746 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="vl.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
version="1.1"
id="svg2"
viewBox="0 0 1024 1024"
height="1024"
width="1024">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="endcap-3">
<stop
style="stop-color:#601a22;stop-opacity:1"
offset="0"
id="stop4283" />
<stop
id="stop4299"
offset="0.86720961"
style="stop-color:#45181d;stop-opacity:1" />
<stop
style="stop-color:#a13642;stop-opacity:0"
offset="1"
id="stop4301" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6741">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop6743" />
<stop
style="stop-color:#5b757b;stop-opacity:0;"
offset="1"
id="stop6745" />
</linearGradient>
<linearGradient
id="linearGradient5929"
osb:paint="solid">
<stop
style="stop-color:#ffa900;stop-opacity:1;"
offset="0"
id="stop5931" />
</linearGradient>
<filter
inkscape:menu-tooltip="Darkens the edge with an inner blur and adds a flexible glow"
inkscape:menu="Shadows and Glows"
inkscape:label="Out of Focus"
height="1.5"
width="1.4"
x="-0.2"
y="-0.25"
style="color-interpolation-filters:sRGB;"
id="filter4262">
<feGaussianBlur
result="result14"
stdDeviation="1.5"
id="feGaussianBlur4264" />
<feFlood
result="result12"
flood-color="rgb(146,94,26)"
id="feFlood4266" />
<feTurbulence
type="turbulence"
seed="0"
baseFrequency="0.29999999999999999"
numOctaves="5"
result="result5"
id="feTurbulence4268" />
<feDisplacementMap
scale="100"
xChannelSelector="R"
in="result5"
result="result8"
in2="result14"
yChannelSelector="G"
id="feDisplacementMap4270" />
<feComposite
in="result8"
result="result10"
operator="arithmetic"
in2="result5"
k1="0.5"
k2="0.5"
id="feComposite4272" />
<feSpecularLighting
specularExponent="15"
specularConstant="1"
surfaceScale="-15"
result="result2"
id="feSpecularLighting4274">
<feDistantLight
elevation="90"
azimuth="225"
id="feDistantLight4276" />
</feSpecularLighting>
<feGaussianBlur
result="result13"
stdDeviation="0.4"
id="feGaussianBlur4278" />
<feDiffuseLighting
surfaceScale="-20"
result="result1"
diffuseConstant="0.6"
in="result13"
id="feDiffuseLighting4280">
<feDistantLight
elevation="10"
azimuth="225"
id="feDistantLight4282" />
</feDiffuseLighting>
<feComposite
result="result4"
in="SourceGraphic"
in2="result1"
operator="arithmetic"
k2="1"
k3="0.6"
id="feComposite4284" />
<feComposite
result="result11"
in2="SourceGraphic"
operator="in"
id="feComposite4286" />
<feBlend
in2="result11"
in="result11"
result="fbSourceGraphic"
mode="normal"
id="feBlend4288" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix4439" />
<feGaussianBlur
id="feGaussianBlur4441"
stdDeviation="5"
result="result6"
in="fbSourceGraphic" />
<feComposite
id="feComposite4443"
in2="result6"
result="result8"
in="fbSourceGraphic"
operator="atop" />
<feComposite
id="feComposite4445"
in2="fbSourceGraphicAlpha"
result="result9"
operator="over"
in="result8" />
<feColorMatrix
id="feColorMatrix4447"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 "
result="result10" />
<feBlend
id="feBlend4449"
in2="result6"
in="result10"
mode="normal"
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix6777" />
<feFlood
id="feFlood6779"
flood-opacity="1"
flood-color="rgb(255,255,255)"
result="flood"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix6781"
in="fbSourceGraphic"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 -0.2125 -0.7154 -0.0721 1 0 "
result="colormatrix1" />
<feGaussianBlur
id="feGaussianBlur6783"
in="colormatrix1"
stdDeviation="1.9 1"
result="blur" />
<feColorMatrix
id="feColorMatrix6785"
in="blur"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 5.1 -2 "
result="colormatrix2" />
<feBlend
id="feBlend6787"
in2="flood"
in="colormatrix2"
mode="normal"
result="blend" />
<feComposite
id="feComposite6789"
in2="blend"
in="blend"
operator="arithmetic"
k2="1"
result="composite1" />
<feComposite
id="feComposite6791"
in2="fbSourceGraphic"
operator="in" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter5943">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood5945" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite5947" />
<feGaussianBlur
in="composite1"
stdDeviation="3"
result="blur"
id="feGaussianBlur5949" />
<feOffset
dx="6"
dy="6"
result="offset"
id="feOffset5951" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite5953" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:menu-tooltip="Darkens the edge with an inner blur and adds a flexible glow"
inkscape:menu="Shadows and Glows"
inkscape:label="Dark And Glow"
id="filter6683"
y="-0.25"
height="1.5">
<feTurbulence
result="result0"
seed="0"
baseFrequency="1"
numOctaves="5"
type="fractalNoise"
id="feTurbulence6685" />
<feConvolveMatrix
result="result5"
order="5 5"
kernelMatrix="-2 0 0 0 -2 0 -2 0 -2 0 0 0 -10 0 0 0 -2 0 -2 0 -2 0 0 0 -2 "
targetX="2"
targetY="2"
id="feConvolveMatrix6687" />
<feComposite
result="result2"
k3="0.5"
k2="0.5"
k1="1.5"
operator="arithmetic"
in="result5"
in2="SourceGraphic"
id="feComposite6689" />
<feColorMatrix
in="result2"
type="luminanceToAlpha"
result="result2"
id="feColorMatrix6691" />
<feDiffuseLighting
surfaceScale="5"
result="result1"
diffuseConstant="0.6"
id="feDiffuseLighting6693">
<feDistantLight
elevation="35"
azimuth="225"
id="feDistantLight6695" />
</feDiffuseLighting>
<feComposite
operator="arithmetic"
in="result1"
k1="1.5"
k3="0.5"
result="result3"
in2="SourceGraphic"
id="feComposite6697" />
<feBlend
in="result3"
mode="normal"
result="result6"
in2="result1"
id="feBlend6699" />
<feComposite
operator="in"
in2="SourceGraphic"
id="feComposite6701"
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix6703" />
<feGaussianBlur
id="feGaussianBlur6705"
stdDeviation="5"
result="result6"
in="fbSourceGraphic" />
<feComposite
id="feComposite6707"
in2="result6"
result="result8"
in="fbSourceGraphic"
operator="atop" />
<feComposite
id="feComposite6709"
in2="fbSourceGraphicAlpha"
result="result9"
operator="over"
in="result8" />
<feColorMatrix
id="feColorMatrix6711"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 "
result="result10" />
<feBlend
id="feBlend6713"
in2="result6"
in="result10"
mode="normal"
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix6715" />
<feFlood
id="feFlood6717"
flood-opacity="1"
flood-color="rgb(255,255,255)"
result="flood"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix6719"
in="fbSourceGraphic"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 -0.2125 -0.7154 -0.0721 1 0 "
result="colormatrix1" />
<feGaussianBlur
id="feGaussianBlur6721"
in="colormatrix1"
stdDeviation="1.9 1"
result="blur" />
<feColorMatrix
id="feColorMatrix6723"
in="blur"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 5.1 -2 "
result="colormatrix2" />
<feBlend
id="feBlend6725"
in2="flood"
in="colormatrix2"
mode="normal"
result="blend" />
<feComposite
id="feComposite6727"
in2="blend"
in="blend"
operator="arithmetic"
k2="1"
result="composite1" />
<feComposite
id="feComposite6729"
in2="fbSourceGraphic"
operator="in"
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix6765" />
<feGaussianBlur
id="feGaussianBlur6767"
stdDeviation="5"
result="result6"
in="fbSourceGraphic" />
<feComposite
id="feComposite6769"
in2="result6"
result="result8"
in="fbSourceGraphic"
operator="atop" />
<feComposite
id="feComposite6771"
in2="fbSourceGraphicAlpha"
result="result9"
operator="over"
in="result8" />
<feColorMatrix
id="feColorMatrix6773"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 "
result="result10" />
<feBlend
id="feBlend6775"
in2="result6"
in="result10"
mode="normal" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6741"
id="radialGradient6747"
cx="393.92856"
cy="257.00507"
fx="393.92856"
fy="257.00507"
r="111.78571"
gradientTransform="matrix(1.7457256,-0.00436375,3.8094882e-4,0.0894564,-348.59118,256.12318)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6741"
id="radialGradient6751"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7332115,-0.00436375,3.78218e-4,0.0894564,-343.66079,888.26604)"
cx="393.92856"
cy="257.00507"
fx="393.92856"
fy="257.00507"
r="111.78571" />
<filter
y="-0.25"
height="1.5"
inkscape:menu-tooltip="Darkens the edge with an inner blur and adds a flexible glow"
inkscape:menu="Shadows and Glows"
inkscape:label="Dark And Glow"
style="color-interpolation-filters:sRGB;"
id="filter6809">
<feGaussianBlur
stdDeviation="5"
result="result6"
id="feGaussianBlur6811" />
<feComposite
result="result8"
in="SourceGraphic"
operator="atop"
in2="result6"
id="feComposite6813" />
<feComposite
result="result9"
operator="over"
in2="SourceAlpha"
in="result8"
id="feComposite6815" />
<feColorMatrix
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 "
result="result10"
id="feColorMatrix6817" />
<feBlend
in="result10"
mode="normal"
in2="result6"
id="feBlend6819" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter6821">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood6823" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite6825" />
<feGaussianBlur
in="composite1"
stdDeviation="3"
result="blur"
id="feGaussianBlur6827" />
<feOffset
dx="6"
dy="6"
result="offset"
id="feOffset6829" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite6831" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter7470">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood7472" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite7474" />
<feGaussianBlur
in="composite1"
stdDeviation="3"
result="blur"
id="feGaussianBlur7476" />
<feOffset
dx="6"
dy="6"
result="offset"
id="feOffset7478" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite7480" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#endcap-3"
id="radialGradient4287"
cx="620.27869"
cy="-27.452856"
fx="620.27869"
fy="-27.452856"
r="41.080517"
gradientTransform="matrix(10.935912,-1.2967219,0.08820477,0.74387601,-6207.307,928.16347)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#endcap-3"
id="radialGradient4309"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(11.938212,-1.443998,0.08995089,0.74366689,-6850.4532,1021.976)"
cx="620.70544"
cy="1109.0797"
fx="620.70544"
fy="1109.0797"
r="41.080517" />
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter4345">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood4347" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite4349" />
<feGaussianBlur
in="composite1"
stdDeviation="3"
result="blur"
id="feGaussianBlur4351" />
<feOffset
dx="6"
dy="6"
result="offset"
id="feOffset4353" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite4355" />
</filter>
</defs>
<sodipodi:namedview
inkscape:window-maximized="0"
inkscape:window-y="32"
inkscape:window-x="0"
inkscape:window-height="2128"
inkscape:window-width="3840"
units="px"
showgrid="false"
inkscape:current-layer="layer1"
inkscape:document-units="px"
inkscape:cy="627.42279"
inkscape:cx="67.260134"
inkscape:zoom="1.4142136"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showguides="false">
<inkscape:grid
type="xygrid"
id="grid7555" />
</sodipodi:namedview>
<metadata
id="metadata7">
<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:creator>
<cc:Agent>
<dc:title>Kovid Goyal</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>CC BY-SA</dc:title>
</cc:Agent>
</dc:rights>
<dc:publisher>
<cc:Agent>
<dc:title>Kovid Goyal</dc:title>
</cc:Agent>
</dc:publisher>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-28.362161)">
<rect
style="fill:#5b757b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect6055"
width="197.66254"
height="806.42017"
x="240.36664"
y="188.25954"
ry="13.699058" />
<rect
style="fill:url(#radialGradient6747);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect6739"
width="199.28571"
height="20"
x="239.55505"
y="267.39493" />
<rect
y="899.53778"
x="240.26932"
height="20"
width="197.85715"
id="rect6749"
style="fill:url(#radialGradient6751);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#79abff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect6835"
width="220.95114"
height="593.90881"
x="509.9231"
y="514.38483"
ry="13.472634"
transform="matrix(0.98420937,-0.17700821,0.19459355,0.98088396,0,0)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="634.07745"
y="890.01166"
id="text7490"><tspan
sodipodi:role="line"
id="tspan7492"
x="634.07745"
y="890.01166"
style="font-size:90px;line-height:1.25;font-family:sans-serif"> </tspan></text>
<g
id="g4327"
transform="rotate(-7.222335,771.31726,893.54644)">
<g
id="g4320">
<g
id="g4311">
<path
transform="rotate(5.799032,720.99401,330.78116)"
d="m 624.9082,72.820312 c -0.83386,-0.08218 -1.68937,-0.0815 -2.55664,0.0078 L 515.95117,83.785156 c -6.93817,0.714477 -11.94885,6.874331 -11.23437,13.8125 l 89.83203,872.349614 c 0.71448,6.93817 6.87628,11.94885 13.81445,11.23437 l 106.40039,-10.95703 c 6.93817,-0.71448 11.94885,-6.87433 11.23438,-13.8125 L 636.16406,84.0625 C 635.5389,77.991602 630.74522,73.39555 624.9082,72.820312 Z"
id="yellow_book"
style="fill:#d6b865;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
xlink:href="#rect6833"
inkscape:original="M 624.9082 72.820312 C 624.07434 72.738136 623.21883 72.738815 622.35156 72.828125 L 515.95117 83.785156 C 509.013 84.499633 504.00232 90.659487 504.7168 97.597656 L 594.54883 969.94727 C 595.26331 976.88544 601.42511 981.89612 608.36328 981.18164 L 714.76367 970.22461 C 721.70184 969.51013 726.71252 963.35028 725.99805 956.41211 L 636.16406 84.0625 C 635.5389 77.991602 630.74522 73.39555 624.9082 72.820312 z "
inkscape:radius="0"
sodipodi:type="inkscape:offset"
inkscape:label="#path7428"
inkscape:href="#rect6833" />
</g>
<g
id="g4316">
<path
inkscape:label="#path4307"
sodipodi:type="inkscape:offset"
inkscape:radius="0"
inkscape:original="M 624.9082 72.820312 C 624.07434 72.738136 623.21883 72.738815 622.35156 72.828125 L 515.95117 83.785156 C 509.013 84.499633 504.00232 90.659487 504.7168 97.597656 L 594.54883 969.94727 C 595.26331 976.88544 601.42511 981.89612 608.36328 981.18164 L 714.76367 970.22461 C 721.70184 969.51013 726.71252 963.35028 725.99805 956.41211 L 636.16406 84.0625 C 635.5389 77.991602 630.74522 73.39555 624.9082 72.820312 z "
xlink:href="#rect6833"
style="fill:url(#radialGradient4309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="yellow_book_bottom_cap"
d="m 624.9082,72.820312 c -0.83386,-0.08218 -1.68937,-0.0815 -2.55664,0.0078 L 515.95117,83.785156 c -6.93817,0.714477 -11.94885,6.874331 -11.23437,13.8125 l 89.83203,872.349614 c 0.71448,6.93817 6.87628,11.94885 13.81445,11.23437 l 106.40039,-10.95703 c 6.93817,-0.71448 11.94885,-6.87433 11.23438,-13.8125 L 636.16406,84.0625 C 635.5389,77.991602 630.74522,73.39555 624.9082,72.820312 Z"
transform="rotate(5.799032,720.99401,330.78116)"
inkscape:href="#rect6833" />
<path
inkscape:label="#path4279"
sodipodi:type="inkscape:offset"
inkscape:radius="0"
inkscape:original="M 624.9082 72.820312 C 624.07434 72.738136 623.21883 72.738815 622.35156 72.828125 L 515.95117 83.785156 C 509.013 84.499633 504.00232 90.659487 504.7168 97.597656 L 594.54883 969.94727 C 595.26331 976.88544 601.42511 981.89612 608.36328 981.18164 L 714.76367 970.22461 C 721.70184 969.51013 726.71252 963.35028 725.99805 956.41211 L 636.16406 84.0625 C 635.5389 77.991602 630.74522 73.39555 624.9082 72.820312 z "
xlink:href="#rect6833"
style="fill:url(#radialGradient4287);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="yellow_book_top_cap"
d="m 624.9082,72.820312 c -0.83386,-0.08218 -1.68937,-0.0815 -2.55664,0.0078 L 515.95117,83.785156 c -6.93817,0.714477 -11.94885,6.874331 -11.23437,13.8125 l 89.83203,872.349614 c 0.71448,6.93817 6.87628,11.94885 13.81445,11.23437 l 106.40039,-10.95703 c 6.93817,-0.71448 11.94885,-6.87433 11.23438,-13.8125 L 636.16406,84.0625 C 635.5389,77.991602 630.74522,73.39555 624.9082,72.820312 Z"
transform="rotate(5.799032,720.99401,330.78116)"
inkscape:href="#rect6833" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

BIN
resources/images/vl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -1037,6 +1037,12 @@ class ActionMarkBooks(InterfaceActionBase):
description = _('Temporarily mark books')
class ActionVirtualLibrary(InterfaceActionBase):
name = 'Virtual Library'
actual_plugin = 'calibre.gui2.actions.virtual_library:VirtualLibraryAction'
description = _('Change the current Virtual library')
class ActionStore(InterfaceActionBase):
name = 'Store'
author = 'John Schember'
@ -1070,7 +1076,8 @@ plugins += [ActionAdd, ActionFetchAnnotations, ActionGenerateCatalog,
ActionAddToLibrary, ActionEditCollections, ActionMatchBooks, ActionChooseLibrary,
ActionCopyToLibrary, ActionTweakEpub, ActionUnpackBook, ActionNextMatch, ActionStore,
ActionPluginUpdater, ActionPickRandom, ActionEditToC, ActionSortBy,
ActionMarkBooks, ActionEmbed, ActionTemplateTester, ActionTagMapper]
ActionMarkBooks, ActionEmbed, ActionTemplateTester, ActionTagMapper,
ActionVirtualLibrary]
# }}}

View File

@ -0,0 +1,29 @@
#!/usr/bin/env python2
# vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2018, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals
from PyQt5.Qt import QToolButton
from calibre.gui2.actions import InterfaceAction
class VirtualLibraryAction(InterfaceAction):
name = 'Virtual library'
action_spec = (
_('Virtual library'), 'vl.png', _('Change the current Virtual library'),
None
)
action_type = 'current'
action_add_menu = True
popup_type = QToolButton.InstantPopup
dont_add_to = frozenset(['context-menu-device', 'menubar-device'])
def genesis(self):
self.menu = m = self.qaction.menu()
m.aboutToShow.connect(self.about_to_show_menu)
def about_to_show_menu(self):
self.gui.build_virtual_library_menu(self.menu, add_tabs_action=False)

View File

@ -184,7 +184,7 @@ class SearchBar(QFrame): # {{{
x.setPopupMode(x.InstantPopup)
x.setText(_('Virtual library'))
x.setAutoRaise(True)
x.setIcon(QIcon(I('lt.png')))
x.setIcon(QIcon(I('vl.png')))
x.setObjectName("virtual_library")
x.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
l.addWidget(x)

View File

@ -366,8 +366,7 @@ class SearchRestrictionMixin(object):
self.apply_virtual_library(cd.library_name)
self.rebuild_vl_tabs()
def virtual_library_menu_about_to_show(self):
m = self.virtual_library_menu
def build_virtual_library_menu(self, m, add_tabs_action=True):
m.clear()
a = m.addAction(_('Create Virtual library'))
@ -381,10 +380,11 @@ class SearchRestrictionMixin(object):
self.build_virtual_library_list(a, self.remove_vl_triggered)
m.addMenu(a)
if gprefs['show_vl_tabs']:
m.addAction(_('Hide virtual library tabs'), self.vl_tabs.disable_bar)
else:
m.addAction(_('Show virtual libraries as tabs'), self.vl_tabs.enable_bar)
if add_tabs_action:
if gprefs['show_vl_tabs']:
m.addAction(_('Hide virtual library tabs'), self.vl_tabs.disable_bar)
else:
m.addAction(_('Show virtual libraries as tabs'), self.vl_tabs.enable_bar)
m.addSeparator()
@ -422,6 +422,9 @@ class SearchRestrictionMixin(object):
a = m.addAction(self.checked if vl == current_lib else self.empty, vl.replace('&', '&&'))
a.triggered.connect(partial(self.apply_virtual_library, library=vl))
def virtual_library_menu_about_to_show(self):
self.build_virtual_library_menu(self.virtual_library_menu)
def rebuild_vl_tabs(self):
self.vl_tabs.rebuild()