Copy UI Template and update it for this project

Use UI template from github.com/Wanderson-Magalhaes/PyOneDark_Qt_Widgets_Modern_GUI
pull/1/head
Peng_Lx 2 years ago
parent b0238ee03c
commit ec3f1b1ef7

@ -1,2 +1,3 @@
# libmangers
# 大学图书馆管理系统
## Working in progress

@ -0,0 +1,50 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
import os
# APP FUNCTIONS
# ///////////////////////////////////////////////////////////////
class Functions:
# SET SVG ICON
# ///////////////////////////////////////////////////////////////
def set_svg_icon(icon_name):
app_path = os.path.abspath(os.getcwd())
folder = "gui/images/svg_icons/"
path = os.path.join(app_path, folder)
icon = os.path.normpath(os.path.join(path, icon_name))
return icon
# SET SVG IMAGE
# ///////////////////////////////////////////////////////////////
def set_svg_image(icon_name):
app_path = os.path.abspath(os.getcwd())
folder = "gui/images/svg_images/"
path = os.path.join(app_path, folder)
icon = os.path.normpath(os.path.join(path, icon_name))
return icon
# SET IMAGE
# ///////////////////////////////////////////////////////////////
def set_image(image_name):
app_path = os.path.abspath(os.getcwd())
folder = "gui/images/images/"
path = os.path.join(app_path, folder)
image = os.path.normpath(os.path.join(path, image_name))
return image

@ -0,0 +1,58 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
import json
import os
# APP SETTINGS
# ///////////////////////////////////////////////////////////////
class Settings(object):
# APP PATH
# ///////////////////////////////////////////////////////////////
json_file = "settings.json"
app_path = os.path.abspath(os.getcwd())
settings_path = os.path.normpath(os.path.join(app_path, json_file))
if not os.path.isfile(settings_path):
print(f"WARNING: \"settings.json\" not found! check in the folder {settings_path}")
# INIT SETTINGS
# ///////////////////////////////////////////////////////////////
def __init__(self):
super(Settings, self).__init__()
# DICTIONARY WITH SETTINGS
# Just to have objects references
self.items = {}
# DESERIALIZE
self.deserialize()
# SERIALIZE JSON
# ///////////////////////////////////////////////////////////////
def serialize(self):
# WRITE JSON FILE
with open(self.settings_path, "w", encoding='utf-8') as write:
json.dump(self.items, write, indent=4)
# DESERIALIZE JSON
# ///////////////////////////////////////////////////////////////
def deserialize(self):
# READ JSON FILE
with open(self.settings_path, "r", encoding='utf-8') as reader:
settings = json.loads(reader.read())
self.items = settings

@ -0,0 +1,66 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
import json
import os
# IMPORT SETTINGS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.json_settings import Settings
# APP THEMES
# ///////////////////////////////////////////////////////////////
class Themes(object):
# LOAD SETTINGS
# ///////////////////////////////////////////////////////////////
setup_settings = Settings()
_settings = setup_settings.items
# APP PATH
# ///////////////////////////////////////////////////////////////
json_file = f"gui/themes/{_settings['theme_name']}.json"
app_path = os.path.abspath(os.getcwd())
settings_path = os.path.normpath(os.path.join(app_path, json_file))
if not os.path.isfile(settings_path):
print(f"WARNING: \"gui/themes/{_settings['theme_name']}.json\" not found! check in the folder {settings_path}")
# INIT SETTINGS
# ///////////////////////////////////////////////////////////////
def __init__(self):
super(Themes, self).__init__()
# DICTIONARY WITH SETTINGS
self.items = {}
# DESERIALIZE
self.deserialize()
# SERIALIZE JSON
# ///////////////////////////////////////////////////////////////
def serialize(self):
# WRITE JSON FILE
with open(self.settings_path, "w", encoding='utf-8') as write:
json.dump(self.items, write, indent=4)
# DESERIALIZE JSON
# ///////////////////////////////////////////////////////////////
def deserialize(self):
# READ JSON FILE
with open(self.settings_path, "r", encoding='utf-8') as reader:
settings = json.loads(reader.read())
self.items = settings

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="5"
height="50"
viewBox="0 0 1.3229167 13.229167"
version="1.1"
id="svg1101"
sodipodi:docname="active_menu.svg"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)">
<defs
id="defs1095">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect831"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,1,1,0,8.73125,0,1 @ F,0,1,1,0,8.73125,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="33"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="true"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.3964091"
inkscape:cx="-44.262477"
inkscape:cy="-16.499375"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1098">
<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">
<path
id="rect1664"
style="fill:#000000;stroke:none;stroke-width:7.93274;stroke-linecap:round"
d="M 5 0 A 4.9999998 4.9999998 0 0 1 0 5 L 0 45 A 4.9999997 4.9999997 0 0 1 5 50 L 5 0 z "
transform="scale(0.26458333)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="18"
height="12.6"
viewBox="0 0 4.7624998 3.3337502"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_add_user.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="50.945244"
inkscape:cx="7.9999999"
inkscape:cy="7.9999999"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
id="path835"
style="fill:#c3ccdf;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 3.6497773,1.1647547e-4 V 0.67623793 H 2.9666794 V 1.101212 H 3.6497773 V 1.7773335 H 4.0794021 V 1.101212 H 4.7624999 V 0.67623793 H 4.0794021 V 1.1647547e-4 Z M 1.8870942,0.11929524 c -0.4018392,0.0027 -0.7261184,0.32608639 -0.7261184,0.72379299 -6.3e-5,0.39986437 0.3273236,0.72436537 0.7313507,0.72437427 0.4040261,-8.9e-6 0.731986,-0.3245099 0.7319319,-0.72437427 -8.9e-6,-0.3998092 -0.3279598,-0.72377385 -0.7319319,-0.72379299 -0.0018,-8.96e-6 -0.00343,-8.96e-6 -0.00523,0 z m 0.00349,0.45229799 c 6.75e-4,-3.4e-6 0.00107,-3.4e-6 0.00174,0 0.1516867,7.2e-6 0.2749798,0.1213713 0.2749831,0.271495 2.04e-5,0.1501443 -0.1232761,0.27207297 -0.2749831,0.27207637 -0.1517074,-3.4e-6 -0.2744255,-0.12193207 -0.2744019,-0.27207637 0,-0.1493342 0.1217718,-0.2704812 0.2726578,-0.271495 z M 1.8620957,1.8424458 C 0.22979836,1.8424458 2.0111711e-7,3.3336336 2.0111711e-7,3.3336336 H 3.7474457 c 0,0 -0.2530506,-1.4911879 -1.88535,-1.4911878 z"
sodipodi:nodetypes="cccccccccccccsccccsssccccsssccs" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14"
height="14"
viewBox="0 0 3.7041666 3.7041667"
version="1.1"
id="svg1112"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_arrow_left.svg">
<defs
id="defs1106" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="23.434943"
inkscape:cx="-0.27228179"
inkscape:cy="9.2969808"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1057"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1109">
<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">
<path
id="path1686"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.014809"
d="M 0.74083338,1.8520834 2.5929167,3.7041667 2.9633333,3.3337501 1.4816666,1.8520834 2.9633333,0.37041667 2.5929167,0 Z"
sodipodi:nodetypes="ccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14"
height="14"
viewBox="0 0 3.7041666 3.7041667"
version="1.1"
id="svg1112"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_arrow_right.svg">
<defs
id="defs1106" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="23.434943"
inkscape:cx="-0.27228179"
inkscape:cy="9.2969808"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1057"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1109">
<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">
<path
id="path1686"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.014809"
d="M 2.9633333,1.8520834 1.11125,3.7041667 0.74083338,3.3337501 2.2225001,1.8520834 0.74083338,0.37041667 1.11125,0 Z"
sodipodi:nodetypes="ccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="13.5"
height="15"
viewBox="0 0 3.5718749 3.9687499"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_attachment.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect997"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1"
unit="px"
method="auto"
mode="F"
radius="2"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="40.756193"
inkscape:cx="10"
inkscape:cy="6.0742163"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
style="fill:#b3b3b3;fill-opacity:1;stroke-width:0.0141266"
d="M 1.9238942,3.6438512 C 1.4817394,4.0788611 0.77078579,4.0771313 0.33108571,3.6378512 -0.10849509,3.1987411 -0.11022428,2.4882011 0.325123,2.0463711 L 0.32462607,2.0461013 1.9239736,0.44804118 2.1239828,0.24826119 c 0.3312583,-0.33097001 0.8682002,-0.33097001 1.1994485,0 0.3312583,0.33096999 0.3312583,0.86755011 0,1.19864001 l -1.762994,1.7432803 -4.97e-4,-4.762e-4 C 1.3426791,3.3990211 0.99638489,3.397541 0.78170749,3.1837153 c -0.2146774,-0.2135399 -0.2160289,-0.55777 -0.005963,-0.77355 l -4.865e-4,-7.487e-4 0.1963024,-0.1949301 0.98157111,-0.97555 0.196183,0.19519 -1.17775411,1.1704801 c -0.1084518,0.10764 -0.1084518,0.2823701 0,0.39012 0.10845171,0.10775 0.28430191,0.10775 0.39262441,0 l 1.759178,-1.7482401 -4.995e-4,-3.704e-4 0.00696,-0.006 c 0.2208386,-0.22061 0.2208386,-0.5784901 0,-0.7990801 -0.2208489,-0.2206 -0.5787108,-0.22061 -0.7995596,0 l -0.00596,0.007 L 2.3238068,0.44775554 2.1239123,0.64740507 0.52446539,2.2454751 c -0.33124834,0.33098 -0.33124834,0.86755 0,1.1985199 0.3312583,0.3309702 0.86832941,0.3309702 1.19931941,0 L 3.1232424,2.0457051 3.3231322,1.8460551 3.523022,2.0457051 3.3231322,2.2454751 1.923933,3.643775 c 0,-1.98e-5 -2.484e-4,-2.91e-4 -2.484e-4,-2.91e-4 z"
id="path1021" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25"
height="15"
viewBox="0 0 6.6145831 3.9687499"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_busy.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="44.533333"
inkscape:cx="15"
inkscape:cy="7.5"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
d="M 6.6145833,1.984375 A 1.3229167,1.3229167 0 0 1 5.2916667,3.3072916 1.3229167,1.3229167 0 0 1 3.96875,1.984375 1.3229167,1.3229167 0 0 1 5.2916667,0.66145835 1.3229167,1.3229167 0 0 1 6.6145833,1.984375 Z"
style="fill:#a02c2c;fill-opacity:1;stroke-width:0;stroke-linecap:round"
id="path1396" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="10"
height="10"
viewBox="0 0 2.6458332 2.6458332"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_close.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="40.756193"
inkscape:cx="10"
inkscape:cy="10"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
class="ci-primary"
d="M 1.3229167,1.148186 0.17473066,1.6666666e-8 -7.7304133e-6,0.17472292 1.148186,1.3229166 -7.7304133e-6,2.4711104 0.17473066,2.6458333 1.3229167,1.4976473 2.4711027,2.6458333 2.6458411,2.4711104 1.4976473,1.3229166 2.6458411,0.17472292 2.4711027,1.6666666e-8 Z"
style="fill:#f9f9f9;stroke-width:0.00772222"
id="polygon2" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="15"
height="15"
viewBox="0 0 3.9687499 3.9687498"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_emoticons.svg">
<defs
id="defs2">
<inkscape:path-effect
hide_knots="false"
only_selected="true"
apply_with_radius="true"
apply_no_radius="true"
use_knot_distance="true"
flexible="false"
chamfer_steps="1"
radius="1"
mode="F"
method="auto"
unit="px"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
lpeversion="1"
is_visible="true"
id="path-effect1635"
effect="fillet_chamfer" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="40.756193"
inkscape:cx="10"
inkscape:cy="10"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
id="path1071"
style="fill:#b3b3b3;fill-opacity:1;stroke:#ff0000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
d="M 1.97797,1.078855e-6 A 1.9843757,1.9843757 0 0 0 0,1.9843811 1.9843757,1.9843757 0 0 0 1.98437,3.9687512 1.9843757,1.9843757 0 0 0 3.96875,1.9843811 1.9843757,1.9843757 0 0 0 1.98437,1.078855e-6 a 1.9843757,1.9843757 0 0 0 -0.006,0 z M 3.31729,1.2627311 c 0.3474101,0 0.35041,2.5e-4 0.3702,0.0285 0.0401,0.0573 0.025699,0.12378 -0.0685,0.31668 -0.0486,0.0996 -0.0984,0.22263 -0.1107199,0.27348 -0.0306,0.1268 -0.0631,0.19181 -0.13521,0.27072 -0.1204198,0.13177 -0.3096199,0.19978 -0.55494,0.19951 -0.0812,-8e-5 -0.1711799,-0.008 -0.21004,-0.0182 -0.22576,-0.0601 -0.40065,-0.23559 -0.50618,-0.50795 -0.0923,-0.23812 -0.11792,-0.23794 -0.21687,0.001 -0.11412,0.27616 -0.2568,0.4237 -0.48265,0.49909 -0.0947,0.0316 -0.29736,0.0441 -0.41486,0.0255 -0.1202,-0.019 -0.23388,-0.0812 -0.33682,-0.1843 -0.1087,-0.10886 -0.16442,-0.20591 -0.23607,-0.41118 -0.0295,-0.0846 -0.0762,-0.19481 -0.10365,-0.24501 -0.0582,-0.1063 -0.0664,-0.18062 -0.0244,-0.22263 0.0243,-0.0242 0.0427,-0.0256 0.34272,-0.0256 0.46678,2e-5 0.70858,0.0301 1.08021,0.13438 0.13669,0.0384 0.17896,0.0447 0.2973,0.0448 0.12636,8e-5 0.15057,-0.004 0.28827,-0.0499 0.30888,-0.10278 0.5187101,-0.12934 1.02215,-0.12934 z m -2.2529,1.35121 c 0.0226,-9.393e-4 0.0688,0.0251 0.16018,0.0887 0.20103,0.1398199 0.58541,0.2512999 0.76378,0.2512999 0.26715,0 0.47516,-0.0812 0.7197501,-0.22445 C 2.87015,2.634591 2.91309,2.6157111 2.92973,2.632391 c 0.0323,0.0323 -0.10149,0.2286 -0.22356,0.3278499 -0.54731,0.3846801 -1.00529,0.30192 -1.43664,-0.006 -0.12288,-0.091 -0.25601,-0.2962 -0.21727,-0.33493 0.003,-0.003 0.007,-0.005 0.0121,-0.005 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14.133"
height="16"
viewBox="0 0 3.7393562 4.2333335"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_file.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="50.945244"
inkscape:cx="7.9999999"
inkscape:cy="6.9571339"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
fill="var(--ci-primary-color, currentColor)"
d="M 2.5278472,1.5e-7 H -4.3840544e-5 V 4.2333332 H 3.7394002 V 1.2115542 Z M 3.3117606,1.3284462 v 0.01211 H 2.3988452 V 0.40167229 h 0.01211 z M 0.42702697,3.8316611 V 0.40167229 H 1.9400447 V 1.7630023 h 1.3924898 v 2.0686588 z"
class="ci-primary"
id="path1797"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.00881943"
sodipodi:nodetypes="ccccccccccccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333332 4.2333335"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_folder.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="52.312503"
inkscape:cx="7.9999999"
inkscape:cy="7.9999999"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
fill="var(--ci-primary-color, currentColor)"
d="M 4.0216672,4.0216668 H 0.21166717 A 0.21191363,0.21191363 0 0 1 1.6666667e-7,3.8100008 V 0.42333284 A 0.21191363,0.21191363 0 0 1 0.21166717,0.21166684 H 1.8579662 a 0.21109342,0.21109342 0 0 1 0.195386,0.130263 l 0.180905,0.434182 h 1.78741 a 0.21191363,0.21191363 0 0 1 0.211666,0.211666 V 3.8100008 a 0.21191363,0.21191363 0 0 1 -0.211666,0.211666 z M 0.28222217,3.7394448 H 3.9511112 V 1.0583338 H 2.0461122 L 1.8109242,0.49388884 H 0.28222217 Z"
class="ci-primary"
id="path1715"
style="stroke-width:0.00881943;fill:#c3ccdf;fill-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="12.979"
viewBox="0 0 4.2333332 3.4340272"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_folder_open.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="50.945244"
inkscape:cx="7.9999999"
inkscape:cy="7.9999999"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
fill="var(--ci-primary-color, currentColor)"
d="m 4.1881781,1.2550782 c -0.040167,-0.05178 -0.1020848,-0.081993 -0.167617,-0.08179 H 3.4339851 V 0.7088652 C 3.4338533,0.59581999 3.3422423,0.504213 3.2291971,0.50408623 h -1.207708 l -0.157472,-0.378076 C 1.8323311,0.049613 1.7576995,-1.3404038e-4 1.6749921,1.222962e-5 H 0.20477805 C 0.09173634,1.4395962e-4 1.3078124e-4,0.09174952 -9.4815342e-7,0.20479123 V 3.4340152 H 3.7277421 l 0.499122,-1.996493 c 0.016088,-0.063523 0.0018,-0.1309155 -0.03869,-0.182441 z m -3.79557487,1.7915233 0,-2.61763371 H 1.5445818 l 0.209998,0.50407396 h 1.2296898 l 0,0.24024345 H 1.0773411 C 0.9797102,1.1731588 0.89457356,1.2396202 0.87100205,1.3343632 l -0.453994,1.7122383 c 0,0 0.0171431,0.00519 -0.0244048,0 z m 2.99950817,0 H 0.84430765 L 1.2417473,1.5555024 h 2.5062558 z"
class="ci-primary"
id="path1737"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.00886065"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333332 4.2333335"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_heart.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="52.312503"
inkscape:cx="7.9999999"
inkscape:cy="7.9999999"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
fill="var(--ci-primary-color, currentColor)"
d="m 3.8437761,0.55967259 a 1.124579,1.124579 0 0 0 -1.59099,5.97e-4 l -0.136276,0.137937 -0.135142,-0.137638 -8.79e-4,-8.79e-4 a 1.124579,1.124579 0 0 0 -1.59040098,0 l -0.06071,0.06071 a 1.124579,1.124579 0 0 0 0,1.59039201 l 1.60228798,1.602271 0.180943,0.189579 0.0043,-0.0043 0.0047,0.0047 0.16953,-0.178869 1.61335,-1.613367 a 1.1258705,1.1258705 0 0 0 0,-1.59039201 z m -0.13813,1.45229701 -1.588723,1.588758 -1.58875798,-1.588758 a 0.84343427,0.84343427 0 0 1 0,-1.19279201 l 0.06072,-0.06071 a 0.84343427,0.84343427 0 0 1 1.19234398,-4.48e-4 l 0.334676,0.34077401 0.336267,-0.34032601 a 0.84343427,0.84343427 0 0 1 1.1928,0 l 0.06071,0.0607 a 0.8444007,0.8444007 0 0 1 -3.3e-5,1.19280001 z"
class="ci-primary"
id="path1748"
style="stroke-width:0.00878576;fill:#c3ccdf;fill-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333332 4.2333335"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_home.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="52.312834"
inkscape:cx="8.0000001"
inkscape:cy="8"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
inkscape:export-ydpi="288.13419"
inkscape:export-xdpi="288.13419"
inkscape:export-filename="E:\ESTUDOS\TUTORIAIS\NEW\Qt Widgets Projects\PyOneDark\Layout\Exports\Preview_01.png"
id="path924"
class="ci-primary"
d="m 2.2591467,0.08067382 c -0.12676,-0.110868 -0.32292,-0.106982 -0.44471,0.0088 -0.54091,0.514215 -1.08177003,1.02847098 -1.62268003,1.54268498 -0.1059,0.100686 -0.1917600033334,0.300754 -0.1917600033334,0.446879 v 1.889698 A 0.26458331,0.26458331 0 0 0 0.26458667,4.2333198 H 1.3985067 a 0.26458331,0.26458331 0 0 0 0.26459,-0.264584 v -1.018815 a 0.13229166,0.13229166 0 0 1 0.13229,-0.132292 h 0.64256 a 0.13229166,0.13229166 0 0 1 0.13229,0.132292 v 1.018815 a 0.26458331,0.26458331 0 0 0 0.26458,0.264584 h 1.13393 a 0.26458331,0.26458331 0 0 0 0.26459,-0.264584 v -1.896721 c 0,-0.146126 -0.0892,-0.34258 -0.19914,-0.438789 -0.59165,-0.517555 -1.18337,-1.03503798 -1.77505,-1.55255198 z m -0.21784,0.301963 c 1.2e-4,-0.0016 1.2e-4,-0.0016 1.2e-4,-0.0016 z m 1.5666,3.48136598 h -0.40055 a 0.26458331,0.26458331 0 0 1 -0.26458,-0.264584 v -0.875328 c 0,-0.158767 -0.13538,-0.287474 -0.30238,-0.287474 h -1.08254 c -0.167,0 -0.30238,0.128707 -0.30238,0.287474 v 0.875328 a 0.26458331,0.26458331 0 0 1 -0.26458003,0.264584 h -0.34208 a 0.26458331,0.26458331 0 0 1 -0.26459,-0.264584 v -1.307754 a 0.63429306,0.63429306 0 0 1 0.18802,-0.450739 L 1.9474167,0.47937082 c 0.0519,-0.0514 0.094,-0.09339 0.0942,-0.09339 l 1.63381,1.46450498 a 0.59248392,0.59248392 0 0 1 0.19702,0.441184 v 1.307755 a 0.26458331,0.26458331 0 0 1 -0.26458,0.264585 z"
fill="var(--ci-primary-color, currentColor)"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.00921352"
sodipodi:nodetypes="cccccccccccscsccssssccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25"
height="15"
viewBox="0 0 6.6145831 3.9687499"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_idle.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="44.533333"
inkscape:cx="15"
inkscape:cy="7.5"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
d="M 6.6145833,1.984375 A 1.3229167,1.3229167 0 0 1 5.2916667,3.3072916 1.3229167,1.3229167 0 0 1 3.96875,1.984375 1.3229167,1.3229167 0 0 1 5.2916667,0.66145835 1.3229167,1.3229167 0 0 1 6.6145833,1.984375 Z"
style="fill:#ff9955;fill-opacity:1;stroke-width:0;stroke-linecap:round"
id="path1396" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="18"
height="18"
viewBox="0 0 4.7624998 4.7625002"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_info.svg">
<defs
id="defs1117">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect845"
is_visible="true"
lpeversion="1"
satellites_param="F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="true"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="47.163271"
inkscape:cx="7.9999996"
inkscape:cy="11.367157"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
id="path831"
style="fill:#c3ccdf;stroke-width:3.40858;stroke-linecap:round"
d="M 2.38125,0 A 2.3812499,2.3812499 0 0 0 0,2.38125 2.3812499,2.3812499 0 0 0 2.38125,4.7625 2.3812499,2.3812499 0 0 0 4.7625,2.38125 2.3812499,2.3812499 0 0 0 2.38125,0 Z m 0,0.67030791 c 0.2262168,0 0.4098587,0.18422327 0.4098587,0.41044009 0,0.2262168 -0.1836419,0.4098587 -0.4098587,0.4098587 -0.2262168,0 -0.4098587,-0.1836419 -0.4098587,-0.4098587 0,-0.22621682 0.1836419,-0.41044009 0.4098587,-0.41044009 z M 2.3254395,1.8016342 h 0.111621 A 0.29765625,0.29765625 0 0 1 2.7347168,2.0992905 V 3.7945359 A 0.29765625,0.29765625 0 0 1 2.4370605,4.0921921 H 2.3254395 A 0.29765625,0.29765625 0 0 1 2.0277832,3.7945359 V 2.0992905 A 0.29765625,0.29765625 0 0 1 2.3254395,1.8016342 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25"
height="15"
viewBox="0 0 6.6145831 3.9687499"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_invisible.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="44.533333"
inkscape:cx="15"
inkscape:cy="7.5"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
transform="scale(0.26458333)"
d="M 20 2.5 A 5.0000001 5.0000001 0 0 0 15 7.5 A 5.0000001 5.0000001 0 0 0 20 12.5 A 5.0000001 5.0000001 0 0 0 25 7.5 A 5.0000001 5.0000001 0 0 0 20 2.5 z M 20 5.1054688 A 2.3952096 2.3952096 0 0 1 22.394531 7.5 A 2.3952096 2.3952096 0 0 1 20 9.8945312 A 2.3952096 2.3952096 0 0 1 17.605469 7.5 A 2.3952096 2.3952096 0 0 1 20 5.1054688 z "
style="fill:#808080;fill-opacity:1;stroke-width:0;stroke-linecap:round"
id="path1396" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="icon_maximize.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
id="svg8"
version="1.1"
viewBox="0 0 2.6458332 2.6458332"
height="10"
width="10">
<defs
id="defs2" />
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="-8"
inkscape:window-x="1912"
inkscape:window-height="1027"
inkscape:window-width="1920"
units="px"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="10"
inkscape:cx="10"
inkscape:zoom="39.690974"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#3b3b3b"
id="base" />
<metadata
id="metadata5">
<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
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
sodipodi:nodetypes="cccccccccc"
id="rect835"
style="fill:#f9f9f9;stroke-width:0.00635566"
d="M -3.2833333e-6,1.6666666e-8 V 2.6458333 H 2.6458366 V 1.6666666e-8 Z M 0.22430672,0.22430932 H 2.4215167 V 2.4215241 H 0.22430672 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="18"
height="18"
viewBox="0 0 4.7624999 4.7625001"
version="1.1"
id="svg1112"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_menu.svg">
<defs
id="defs1106" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="46.5"
inkscape:cx="9"
inkscape:cy="10.72043"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1109">
<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">
<path
inkscape:export-ydpi="288.13419"
inkscape:export-xdpi="288.13419"
inkscape:export-filename="E:\ESTUDOS\TUTORIAIS\NEW\Qt Widgets Projects\PyOneDark\Layout\Exports\Preview_01.png"
id="rect4"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.0149578"
d="m 0,-0.0051675 v 0.529166 h 4.7625 v -0.529166 z m 0,2.121834 v 0.529167 h 4.7625 v -0.529167 z m 0,2.121834 v 0.529167 h 4.7625 v -0.529167 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="18"
height="18"
viewBox="0 0 4.7624999 4.7625001"
version="1.1"
id="svg1112"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_menu_close.svg">
<defs
id="defs1106" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="46.5"
inkscape:cx="9"
inkscape:cy="9.8602151"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1109">
<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">
<path
id="path1686"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.0149578"
d="M 1.258838,2.3812501 3.1295248,4.2519368 3.503662,3.8777995 2.0071126,2.3812501 3.503662,0.88470059 3.1295248,0.51056322 Z"
sodipodi:nodetypes="ccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="icon_minimize.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
id="svg8"
version="1.1"
viewBox="0 0 2.6458332 0.26458332"
height="1"
width="10">
<defs
id="defs2" />
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="-8"
inkscape:window-x="1912"
inkscape:window-height="1027"
inkscape:window-width="1920"
units="px"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="2.9454995"
inkscape:cx="10"
inkscape:zoom="39.690974"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#3b3b3b"
id="base" />
<metadata
id="metadata5">
<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
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
class="ci-primary"
d="M 0,0 H 2.64583 V 0.2645833 H 0 Z"
style="fill:#f9f9f9;stroke-width:0.0072517"
id="rect2" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="15"
height="3.865"
viewBox="0 0 3.9687499 1.0226145"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_more_options.svg">
<defs
id="defs2">
<inkscape:path-effect
hide_knots="false"
only_selected="true"
apply_with_radius="true"
apply_no_radius="true"
use_knot_distance="true"
flexible="false"
chamfer_steps="1"
radius="1"
mode="F"
method="auto"
unit="px"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
lpeversion="1"
is_visible="true"
id="path-effect1635"
effect="fillet_chamfer" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="40.756193"
inkscape:cx="10"
inkscape:cy="4.1113244"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
d="M 0.5072096,-5.0131521e-5 A 0.51136216,0.51136253 0 0 0 -5.0489022e-7,0.51131037 0.51136216,0.51136253 0 0 0 0.5113596,1.0226708 0.51136216,0.51136253 0 0 0 1.0227198,0.51131037 0.51136216,0.51136253 0 0 0 0.5113596,-5.0131521e-5 a 0.51136216,0.51136253 0 0 0 -0.004,0 z m 1.4730304,0 A 0.51136216,0.51136253 0 0 0 1.4730299,0.51131037 0.51136216,0.51136253 0 0 0 1.9844,1.0226708 0.51136216,0.51136253 0 0 0 2.4957601,0.51131037 0.51136216,0.51136253 0 0 0 1.9844,-5.0131521e-5 a 0.51136216,0.51136253 0 0 0 -0.005,0 z m 1.4730303,0 A 0.51136216,0.51136253 0 0 0 2.9460203,0.51131037 0.51136216,0.51136253 0 0 0 3.4573804,1.0226708 0.51136216,0.51136253 0 0 0 3.9687505,0.51131037 0.51136216,0.51136253 0 0 0 3.4573804,-5.0131521e-5 a 0.51136216,0.51136253 0 0 0 -0.004,0 z"
style="fill:#b3b3b3;stroke:#ff0000;stroke-width:0;stroke-linecap:round"
id="path1116-5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25"
height="15"
viewBox="0 0 6.6145831 3.9687499"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_online.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="44.533333"
inkscape:cx="15"
inkscape:cy="7.5"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
d="M 6.6145833,1.984375 A 1.3229167,1.3229167 0 0 1 5.2916667,3.3072916 1.3229167,1.3229167 0 0 1 3.96875,1.984375 1.3229167,1.3229167 0 0 1 5.2916667,0.66145835 1.3229167,1.3229167 0 0 1 6.6145833,1.984375 Z"
style="fill:#46b946;fill-opacity:1;stroke-width:0;stroke-linecap:round"
id="path1396" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="icon_restore.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
id="svg8"
version="1.1"
viewBox="0 0 2.6458332 2.6458332"
height="10"
width="10">
<defs
id="defs2" />
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="-8"
inkscape:window-x="1912"
inkscape:window-height="1027"
inkscape:window-width="1920"
units="px"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="10"
inkscape:cx="10"
inkscape:zoom="39.690974"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#3b3b3b"
id="base" />
<metadata
id="metadata5">
<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
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
id="rect835"
style="fill:#f9f9f9;stroke-width:0.00635566"
d="M 0.52916668,-3.3333334e-8 V 0.52916667 H 1.6666666e-8 V 2.6458334 H 2.1166667 V 2.1166667 H 2.6458333 V -3.3333334e-8 Z M 0.75344238,0.22427577 H 2.4215577 V 1.892391 H 2.1166667 V 0.52916667 H 0.75344238 Z M 0.22427572,0.75344237 H 1.892391 V 2.4215577 H 0.22427572 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333332 4.2333335"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_save.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="50.945244"
inkscape:cx="7.9999999"
inkscape:cy="7.9999999"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
id="path1759"
style="fill:#c3ccdf;fill-opacity:1;stroke-width:0.0333333"
d="M 1.3339844 0 C 0.89237001 0.00051430825 0.53371744 0.35916689 0.53320312 0.80078125 L 0.53320312 15.199219 C 0.53371737 15.640833 0.89236979 15.999486 1.3339844 16 L 14.666016 16 C 15.10763 15.999486 15.466282 15.640833 15.466797 15.199219 L 15.466797 4.1113281 C 15.467385 3.8990566 15.382939 3.6946016 15.232422 3.5449219 L 11.921875 0.234375 C 11.772195 0.083857583 11.56774 -0.00058789361 11.355469 0 L 1.3339844 0 z M 2.1699219 1.5957031 L 4.2675781 1.5957031 L 4.2675781 5.3339844 L 11.199219 5.3339844 L 11.199219 1.5957031 L 11.246094 1.5957031 L 13.849609 4.2207031 L 13.849609 14.580078 L 2.1699219 14.580078 L 2.1699219 1.5957031 z M 5.765625 1.5957031 L 9.6230469 1.5957031 L 9.6230469 3.8945312 L 5.765625 3.8945312 L 5.765625 1.5957031 z M 7.8671875 6.9335938 C 5.1348907 6.9335938 3.7674272 10.236177 5.6992188 12.167969 C 7.63101 14.09976 10.933594 12.732297 10.933594 10 C 10.931757 8.3070891 9.5600984 6.9354309 7.8671875 6.9335938 z M 7.8652344 8.5234375 C 8.6813058 8.524323 9.3428645 9.1858818 9.34375 10.001953 C 9.34375 11.319063 7.7515363 11.9781 6.8203125 11.046875 C 5.8890879 10.115651 6.548125 8.5234375 7.8652344 8.5234375 z "
transform="scale(0.26458333)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333332 4.2333335"
version="1.1"
id="svg1123"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon_search.svg">
<defs
id="defs1117" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="52.312834"
inkscape:cx="8.0000001"
inkscape:cy="8"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1120">
<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">
<path
id="path835"
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-variant-east-asian:normal;font-feature-settings:normal;font-variation-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;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c3ccdf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.218994;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;stop-color:#000000"
d="M 1.6396931,4.2071667e-5 C 1.2208792,4.2071667e-5 0.80092396,0.16261109 0.48210957,0.48143454 0.16327384,0.800258 0,1.2196884 0,1.6386495 0,2.0576106 0.16160985,2.4675692 0.48210957,2.7958645 0.80030529,3.1140693 1.2195565,3.2687664 1.6396931,3.2687664 c 0.326953,0 0.6520287,-0.093012 0.9216913,-0.2856184 l 0.074773,-0.054079 1.30442,1.3042642 0.2927559,-0.292317 -1.3044201,-1.3042749 0.052373,-0.074239 C 3.174992,2.2835717 3.2686768,1.956855 3.2686768,1.6386076 3.2686768,1.2183238 3.113275,0.79959737 2.7950686,0.48139258 2.4762542,0.16256913 2.0585389,1.0166667e-7 1.6397144,1.0166667e-7 Z m 0,0.410321188333 c 0.3096197,0 0.6271968,0.11840947 0.8643903,0.36473232 0.2350494,0.23595492 0.3536302,0.54726912 0.3536302,0.86355392 0,0.3095436 -0.1191034,0.6195671 -0.3536302,0.863106 l -0.00213,0.00213 C 2.2647992,2.7410351 1.9490035,2.8587833 1.6393517,2.8587833 c -0.3096624,0 -0.6276981,-0.1177482 -0.86483828,-0.3548871 l -0.002133,-0.00213 C 0.53785329,2.2582166 0.41873922,1.9481931 0.41873922,1.6386495 c 0,-0.3170314 0.11927406,-0.6287403 0.35542221,-0.8648979 C 1.0111842,0.52861273 1.330116,0.41036326 1.6389997,0.41036326 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="15"
height="12"
viewBox="0 0 3.9687499 3.1749999"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_send.svg">
<defs
id="defs2">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect997"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1 @ F,0,0,1,0,0.52916667,0,1"
unit="px"
method="auto"
mode="F"
radius="2"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="40.756193"
inkscape:cx="10"
inkscape:cy="6.0742163"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
id="path995"
style="fill:#b3b3b3;fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round"
d="m 5.1411346e-7,0.39646947 v 0.1171262 A 0.76441772,0.82668623 0 0 0 0.49522798,1.2873271 l 0.2430166,0.098884 a 0.19899043,0.21519994 0 0 1 -5.71e-5,0.4028531 l -0.2429024,0.098745 A 0.76416731,0.82641542 0 0 0 5.1411346e-7,2.6613765 V 2.7784931 A 0.36632052,0.39616052 0 0 0 0.49526068,3.1493014 L 3.8397924,1.789134 A 0.19900363,0.21521421 0 0 0 3.839809,1.3862574 L 0.49524418,0.02570877 A 0.36628567,0.39612284 0 0 0 5.1411346e-7,0.39646947 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="20"
height="20"
viewBox="0 0 5.2916665 5.2916664"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_settingsr.svg">
<defs
id="defs2">
<inkscape:path-effect
hide_knots="false"
only_selected="true"
apply_with_radius="true"
apply_no_radius="true"
use_knot_distance="true"
flexible="false"
chamfer_steps="1"
radius="1"
mode="F"
method="auto"
unit="px"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
lpeversion="1"
is_visible="true"
id="path-effect1635"
effect="fillet_chamfer" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="40.756193"
inkscape:cx="10"
inkscape:cy="10"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
id="path872"
style="fill:#e6e6e6;fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
d="M 2.6280115,1.0798987e-5 C 2.5343304,6.4896755e-4 2.4408118,0.00626199 2.3478488,0.0168065 2.2027152,0.03326856 2.1300123,0.14971705 2.1299985,0.2662408 2.1299913,0.55113274 1.8990498,0.78208194 1.6141658,0.7820908 1.4986508,0.78213223 1.3893358,0.74363258 1.301207,0.67645227 1.1862838,0.58884666 1.04171,0.53671311 0.93050512,0.63141419 0.8008811,0.74180083 0.68221129,0.86444503 0.57615248,0.99763452 0.48516917,1.1118921 0.5160579,1.2456361 0.59841095,1.3280108 c 0.20144445,0.2014558 0.20144445,0.5280742 0,0.72953 C 0.5167524,2.1391767 0.41226067,2.1891924 0.30248397,2.2039744 0.15927027,2.223259 0.02017503,2.2885925 0.00848632,2.4341886 0.00283791,2.504546 4.2220498e-6,2.5751364 5.33293e-7,2.6457908 1.4369918e-5,2.7454853 0.00566259,2.8450284 0.01689451,2.9439466 0.03337385,3.0890782 0.14976109,3.1618227 0.2661931,3.1618109 c 0.284884,8.8e-6 0.51582547,0.230958 0.51583273,0.5158499 -4.99e-6,0.1154405 -0.038496,0.2246762 -0.10562929,0.3127518 -0.0876003,0.1149273 -0.13973456,0.2595082 -0.0450368,0.370716 0.1103825,0.129627 0.23302209,0.2482998 0.36620659,0.3543614 0.11425468,0.090987 0.24799488,0.060104 0.33036448,-0.022249 0.09462,-0.094613 0.2223009,-0.1487558 0.3560881,-0.1510001 0.1397958,-0.00236 0.2745597,0.052138 0.3734296,0.1510001 0.081631,0.081662 0.1316434,0.1861559 0.1464235,0.2959349 0.019282,0.1432143 0.084618,0.2823107 0.2302139,0.2939996 0.070406,0.00565 0.1410459,0.00849 0.2117494,0.00849 0.099638,-1.43e-5 0.1991239,-0.00566 0.2979864,-0.016878 0.1451323,-0.016472 0.2178695,-0.132855 0.2178472,-0.2492923 7.3e-6,-0.2848919 0.2309487,-0.515841 0.5158327,-0.5158499 0.1154582,-5.9e-6 0.2247125,0.03849 0.3127998,0.1056385 0.1149233,0.087606 0.259497,0.139739 0.3707018,0.045038 C 4.490627,4.5499307 4.6092965,4.4272866 4.7153551,4.2940973 4.8063383,4.1798397 4.7754501,4.0460955 4.6930975,3.9637209 4.491653,3.762265 4.491653,3.4356467 4.6930975,3.2341908 4.7877177,3.1395786 4.9153979,3.0854354 5.0491848,3.083191 5.1612886,3.0813088 5.2714914,3.0031493 5.2831802,2.8575533 5.2888329,2.7871428 5.2916667,2.7164989 5.2916661,2.6457911 5.2916467,2.5461468 5.2859985,2.4466539 5.2747723,2.3477854 5.258293,2.2026539 5.1418323,2.1299454 5.0253138,2.1299211 4.7404293,2.1299128 4.5094872,1.8989635 4.50948,1.6140711 4.5094739,1.4986126 4.5479665,1.3893577 4.61511,1.301269 4.7027106,1.1863419 4.754858,1.0417524 4.6601751,0.93053212 4.5497852,0.80086155 4.4271314,0.68214863 4.2939268,0.57605146 4.1796803,0.48505434 4.0459758,0.51601801 3.9635743,0.59845111 c -0.2014511,0.20145486 -0.5280659,0.20145486 -0.729517,0 C 3.1524224,0.51678717 3.1024087,0.41228854 3.0876298,0.30250541 3.0683503,0.15929076 3.0030158,0.02019523 2.8574199,0.00850627 2.7870664,0.00285804 2.71648,2.446499e-5 2.6458296,2.0798987e-5 c -0.00594,-2.000188233e-5 -0.011879,-2.000188233e-5 -0.017819,0 z M 2.645831,1.7805008 c 0.4778543,6.1e-6 0.8652305,0.3873924 0.8652373,0.86526 C 3.5111499,3.1236909 3.1237479,3.5111748 2.645831,3.5111809 2.167914,3.5111751 1.7805116,3.1236911 1.7805932,2.6457608 1.7806,2.167893 2.1679765,1.7805066 2.645831,1.7805008 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25"
height="19"
viewBox="0 0 6.6145831 5.0270831"
version="1.1"
id="svg8"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="icon_signal.svg">
<defs
id="defs2">
<inkscape:path-effect
hide_knots="false"
only_selected="true"
apply_with_radius="true"
apply_no_radius="true"
use_knot_distance="true"
flexible="false"
chamfer_steps="1"
radius="1"
mode="F"
method="auto"
unit="px"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 | F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
lpeversion="1"
is_visible="true"
id="path-effect1635"
effect="fillet_chamfer" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#3b3b3b"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="40.756193"
inkscape:cx="10"
inkscape:cy="10"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<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">
<path
d="M 5.4711558,-1.687739e-5 C 5.3272124,-0.00101688 5.189694,0.13687312 5.2069338,0.28555312 c 0.00306,0.0656 0.040087,0.12236 0.085064,0.16693 0.4703897,0.50085 0.7641067,1.16944008 0.8079604,1.85966008 0.061296,0.83082 -0.2469107,1.67698 -0.8168491,2.2762599 -0.1009117,0.0917 -0.09906,0.2699203 0.00454,0.3588602 0.085538,0.0968 0.2488174,0.10882 0.3421751,0.0171 C 6.3131002,4.2637832 6.6758827,3.2594931 6.6060723,2.2779132 6.5532903,1.4680432 6.2126992,0.68088312 5.6580915,0.09454312 c -0.037894,-0.0422 -0.085301,-0.0794 -0.1422129,-0.0893 -0.014857,-0.004 -0.029813,-0.004999997 -0.0447,-0.004999997 z m -4.3360953,2e-4 C 1.0798105,0.00218312 1.0255979,0.02248312 0.9847593,0.06278312 0.30147234,0.76336312 -0.06130916,1.7676632 0.00851395,2.7492431 c 0.052761,0.8098602 0.39336035,1.5970401 0.94795436,2.18338 0.0379038,0.0422 0.0853007,0.0794 0.14221259,0.0893 C 1.2572188,5.0573231 1.4266121,4.9056432 1.407603,4.7415232 1.404543,4.6759232 1.367516,4.6191733 1.322539,4.5746032 0.85214853,4.0737533 0.55847103,3.4051332 0.51460363,2.7149231 0.45330763,1.8840931 0.76150157,1.037933 1.3314526,0.43865302 c 0.1009118,-0.0917 0.099089,-0.26989 -0.00454,-0.35884 -0.048128,-0.0544 -0.1208613,-0.0821 -0.1919015,-0.0794999974 z M 1.8298776,0.65192312 c -0.053087,0.001 -0.1055496,0.0199 -0.1466066,0.0564 C 1.1524367,1.2405032 0.87860905,2.0213732 0.95941308,2.7733932 1.0177752,3.3491133 1.2751433,3.9026531 1.6797305,4.3119733 c 0.091257,0.0887 0.248845,0.081 0.3349943,-0.011401 C 2.1205116,4.2148733 2.1318491,4.0374532 2.0324073,3.9422133 1.6286795,3.5292032 1.4112659,2.9365632 1.4587982,2.3565231 c 0.034486,-0.47765 0.2451919,-0.93828 0.5770192,-1.2790001 0.092364,-0.0956 0.080944,-0.26534988 -0.020923,-0.34960998 -0.047437,-0.052 -0.1167508,-0.0779 -0.1850023,-0.076 z m 2.9355323,9.896e-4 c -0.061583,0.002 -0.1224991,0.0273 -0.1655703,0.0735 -0.1057994,0.0858 -0.1171243,0.26312 -0.017681,0.35835998 0.4037283,0.4130101 0.621141,1.0056601 0.5736088,1.5857 -0.034476,0.4776599 -0.2451908,0.9383101 -0.5770193,1.2790101 -0.092364,0.0956 -0.080934,0.2653498 0.020951,0.3496199 0.084323,0.0924 0.2377484,0.1027501 0.3315822,0.0196 C 5.4621159,3.7865328 5.7359435,3.0056526 5.6551395,2.2536327 5.5967774,1.6779129 5.3393956,1.1243828 4.9348211,0.71505282 c -0.045639,-0.0444 -0.1078503,-0.0647 -0.169421,-0.0623 z M 4.0881637,1.3041528 c -0.1271865,6.694e-4 -0.2570411,0.10528 -0.2663398,0.23949 -0.00938,0.0805 0.026711,0.15901 0.085449,0.21193 0.2103437,0.21515 0.3285418,0.5217 0.3072159,0.82468 -0.014383,0.26696 -0.1336933,0.52478 -0.3224605,0.7109199 -0.096641,0.094 -0.089697,0.2673401 0.013406,0.3538199 0.086022,0.0952 0.2460492,0.1057802 0.3390236,0.015301 0.3395274,-0.3302302 0.5190301,-0.8208603 0.4724768,-1.2954303 -0.037301,-0.38021 -0.2097559,-0.74917 -0.4880831,-1.00897 -0.041578,-0.0362 -0.090931,-0.052 -0.1406903,-0.0517 z m -1.5693615,6.694e-4 c -0.054519,0.002 -0.1080242,0.022601 -0.1486988,0.062201 -0.3395137,0.33023 -0.5190315,0.82085 -0.4724791,1.29543 0.037301,0.3802099 0.2097173,0.7491801 0.4880594,1.00898 0.1478217,0.1286399 0.3941169,-0.00101 0.4070539,-0.1877599 0.00938,-0.0805 -0.026711,-0.15903 -0.085449,-0.21194 C 2.4969579,3.0565932 2.378748,2.7500332 2.4000727,2.4470532 c 0.014383,-0.26695 0.1336678,-0.5248 0.3224347,-0.71095 0.096641,-0.094 0.089697,-0.26729 -0.013415,-0.35378 -0.048385,-0.0536 -0.1201855,-0.0804 -0.1902971,-0.0774 z m 0.8161002,0.65641 c -0.018591,-6.694e-4 -0.037291,10e-5 -0.05607,0.002 -0.3063486,0.0101 -0.5558318,0.32026 -0.5051373,0.62608 0.032639,0.2869299 0.3159851,0.5109701 0.5989562,0.47188 0.2695583,-0.024 0.4944017,-0.2783499 0.4850091,-0.55271 0.00612,-0.28611 -0.2439501,-0.53989 -0.5227587,-0.54713 z"
style="fill:#b3b3b3;fill-opacity:1;stroke-width:0.0133103"
id="path1240" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
viewBox="0 0 18 18"
xml:space="preserve"
sodipodi:docname="icon_widgets.svg"
width="18"
height="18"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
id="metadata43"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs41" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1027"
id="namedview39"
showgrid="false"
inkscape:zoom="1.709928"
inkscape:cx="244.89999"
inkscape:cy="244.89999"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Capa_1" />
<g
id="g6"
transform="matrix(0.03674969,0,0,0.03674969,9.19e-7,-1.3853197e-5)"
style="fill:#c3ccdf;fill-opacity:1">
<g
id="g4"
style="fill:#c3ccdf;fill-opacity:1">
<path
d="m 489.8,280.92 c 0,-13.9 -11.3,-25.2 -25.2,-25.2 h -74.1 c -62.1,0 -112.4,50.2 -112.7,112.2 -0.1,32.3 -23,61 -55,65 -38.4,4.8 -71.2,-25.2 -71.2,-62.6 v -56.4 c 57.6,-11.7 101,-62.6 101,-123.7 v -64 c 0,-9.1 -7.3,-16.4 -16.4,-16.4 h -31.3 v -79.1 c 0,-12.4 -9,-23.4 -21.3,-24.6 -14.1,-1.4 -26,9.7 -26,23.6 v 80.1 H 95.2 v -79.1 c 0,-12.4 -9,-23.4 -21.4,-24.6 -14.1,-1.3 -26,9.7 -26,23.6 v 80.1 H 16.4 c -9.1,0 -16.4,7.3 -16.4,16.4 v 64 c 0,61.1 43.4,112 101,123.7 v 53.5 c 0,61.5 47.7,114 109.2,116.3 64.6,2.4 118,-49.4 118,-113.5 v -0.9 c 0,-34.9 28.3,-63.1 63.1,-63.1 h 73.2 c 14,-0.1 25.3,-11.4 25.3,-25.3 z"
id="path2"
style="fill:#c3ccdf;fill-opacity:1" />
</g>
</g>
<g
id="g8">
</g>
<g
id="g10">
</g>
<g
id="g12">
</g>
<g
id="g14">
</g>
<g
id="g16">
</g>
<g
id="g18">
</g>
<g
id="g20">
</g>
<g
id="g22">
</g>
<g
id="g24">
</g>
<g
id="g26">
</g>
<g
id="g28">
</g>
<g
id="g30">
</g>
<g
id="g32">
</g>
<g
id="g34">
</g>
<g
id="g36">
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333332 4.2333335"
version="1.1"
id="svg1107"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="no_icon.svg">
<defs
id="defs1101" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="26.156251"
inkscape:cx="3.3352559"
inkscape:cy="11.186469"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1104">
<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">
<path
id="path1676"
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-variant-east-asian:normal;font-feature-settings:normal;font-variation-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;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c3ccdf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.07085;stroke-linecap:round;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;stop-color:#000000"
d="M 1.1666666e-8,1.1666666e-8 V 0.28222226 4.2333333 H 4.2333333 V 1.1666666e-8 Z M 0.56665798,0.56665798 H 3.285952 L 0.56665798,3.285952 Z M 3.6666754,0.94738132 V 3.6666754 H 0.94738132 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="300"
height="70"
viewBox="0 0 79.374998 18.520833"
version="1.1"
id="svg1132"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="logo_home.svg">
<defs
id="defs1126">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect1836"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="true"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.3156936"
inkscape:cx="103.4558"
inkscape:cy="-63.038698"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1129">
<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="g1811"
transform="matrix(3.0579283,0,0,3.0579283,-0.79418142,0.36057057)">
<g
id="g1822"
transform="matrix(0.37563903,0,0,0.37563903,-64.288753,-32.575173)">
<g
id="g1810">
<g
id="g1804">
<g
aria-label="PY"
id="g1800"
style="font-style:normal;font-weight:normal;font-size:2.85476px;line-height:1.25;font-family:sans-serif;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.0713691"
transform="translate(-0.108475,-0.0784345)">
<path
d="m 196.06915,94.086075 c 0,-0.336862 -0.27406,-0.610919 -0.61092,-0.610919 h -0.80504 v 2.14107 h 0.34257 v -0.919233 h 0.46247 c 0.33686,0 0.61092,-0.274056 0.61092,-0.610918 z m -0.34257,0 c 0,0.171285 -0.11134,0.311169 -0.28262,0.311169 h -0.4482 v -0.622338 h 0.4482 c 0.17128,0 0.28262,0.139883 0.28262,0.311169 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Ano Bold';-inkscape-font-specification:'Ano Bold, ';fill:#dce1ec;fill-opacity:1;stroke-width:0.0713691"
id="path1796" />
<path
d="m 197.84548,93.475156 -0.61378,0.802188 -0.61091,-0.802188 h -0.41109 l 0.85072,1.113357 v 1.027713 h 0.34257 v -1.024859 l 0.85357,-1.116211 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Ano Bold';-inkscape-font-specification:'Ano Bold, ';fill:#dce1ec;fill-opacity:1;stroke-width:0.0713691"
id="path1798" />
</g>
<path
id="path1802"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Regular';-inkscape-font-specification:'Ano Regular, ';letter-spacing:0px;word-spacing:0px;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.25106"
d="m 200.31312,94.467255 c 0,-2.189227 -1.77749,-3.966719 -3.96672,-3.966719 -2.18923,0 -3.96672,1.777492 -3.96672,3.966719 0,2.18923 1.77749,3.966722 3.96672,3.966722 2.18923,0 3.96672,-1.777492 3.96672,-3.966722 z m -0.80338,0 c 0,1.797579 -1.41598,3.263759 -3.16334,3.263759 -1.74736,0 -3.16333,-1.46618 -3.16333,-3.263759 0,-1.797577 1.41597,-3.263756 3.16333,-3.263756 1.74736,0 3.16334,1.466179 3.16334,3.263756 z" />
</g>
<path
d="m 207.29882,90.701382 h -0.80339 V 96.8975 l -4.06714,-6.196118 h -0.80339 v 7.531748 h 0.80339 v -6.186075 l 4.06714,6.186075 h 0.80339 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Regular';-inkscape-font-specification:'Ano Regular, ';letter-spacing:0px;word-spacing:0px;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1806" />
<path
d="m 213.06923,97.530167 h -3.36418 v -2.711429 h 3.06291 v -0.702963 h -3.06291 v -2.71143 h 3.36418 v -0.702963 h -4.16757 v 7.531748 h 4.16757 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Regular';-inkscape-font-specification:'Ano Regular, ';letter-spacing:0px;word-spacing:0px;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1808" />
</g>
<g
id="g1820">
<path
d="m 220.63801,94.467255 c 0,-2.068719 -1.67707,-3.765873 -3.75582,-3.765873 h -2.61101 v 7.531748 h 2.61101 c 2.07875,0 3.75582,-1.687111 3.75582,-3.765875 z m -1.72728,0 c 0,1.174954 -0.94398,2.118932 -2.11893,2.118932 h -0.79335 v -4.237862 h 0.79335 c 1.17495,0 2.11893,0.954021 2.11893,2.11893 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1812" />
<path
d="m 225.71316,90.701382 h -1.80763 l -2.86207,7.531748 h 1.83776 l 0.40169,-1.064486 h 3.04282 l 0.39166,1.064486 h 1.84778 z m -1.81766,4.830361 0.91384,-2.420202 0.90382,2.420202 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1814" />
<path
d="m 232.31144,95.190303 c 0.93393,-0.281185 1.6168,-1.154867 1.6168,-2.189227 0,-1.265333 -1.02432,-2.299694 -2.28963,-2.299694 h -2.48047 v 7.531748 h 1.72728 v -2.118932 l 1.67708,2.118932 h 2.14905 z m -0.1105,-2.189227 c 0,0.411736 -0.25106,0.652752 -0.56238,0.652752 h -0.75317 v -1.305503 h 0.75317 c 0.31132,0 0.56238,0.241015 0.56238,0.652751 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1816" />
<path
d="m 238.75845,90.701382 -2.00846,2.36999 v -2.36999 h -1.72729 v 7.531748 h 1.72729 v -2.339863 l 1.98839,2.339863 h 2.17918 l -3.19346,-3.755832 3.21354,-3.775916 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1818" />
</g>
</g>
<g
id="g1790">
<path
id="path1824"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.171201"
d="m 6.0294424,2.568037 c 0,-1.4106927 -1.1436221,-2.568008872565 -2.56116,-2.568008872565 H 1.7851565 V 5.1360473 h 1.6831259 c 1.4175379,0 2.56116,-1.1504695 2.56116,-2.5680103 z m -1.1778576,0 c 0,0.8012186 -0.6437136,1.4449327 -1.4449349,1.4449327 H 2.3364893 v -2.889866 h 1.0701606 c 0.8012213,0 1.4449349,0.6505625 1.4449349,1.4449333 z"
sodipodi:nodetypes="ssccssssccss" />
<path
id="path1826"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#3d8ad5;fill-opacity:1;stroke:none;stroke-width:0.171201"
d="M 2.0300435,1.255144e-5 1.6876461,0.00635735 V 1.0924146 C 1.876678,1.0921558 2.0300435,1.2454526 2.0300435,1.4344813 V 5.1360358 H 3.0666136 C 3.1729317,4.9320827 3.2265932,4.6974519 3.2080542,4.451231 V 4.0128603 H 2.3364893 V 1.1231724 H 3.2023729 C 3.1322897,0.52831193 2.6497261,0.04664426 2.0300435,2.3144399e-7 Z"
sodipodi:nodetypes="cccsccccccccc" />
<path
d="M 1.852148,1.255144e-5 1.6876461,0.00635735 V 1.0924146 C 1.876678,1.0921558 2.0300435,1.2454526 2.0300435,1.4344813 V 5.1360358 H 2.8887173 C 2.9950362,4.9320827 3.0486959,4.6974519 3.0301587,4.451231 V 4.0128603 H 2.1585938 V 1.1231724 H 3.0244775 C 2.9543925,0.52831193 2.4075378,2.3144399e-7 1.852148,2.3144399e-7 Z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#2d7bc5;fill-opacity:1;stroke:none;stroke-width:0.171201"
id="path1828"
sodipodi:nodetypes="cccsccccccccc" />
<path
inkscape:original-d="M 1.6877949,2.2554433e-6 1.1470667,0.00944201 0.10799299,1.0937135 1.3453905,1.0924815 c 0.1890319,-2.581e-4 0.3424044,0.152908 0.3424044,0.3419373 V 5.8208335 C 2.3912578,5.7679015 2.9185985,5.1546923 2.8656498,4.4512261 V 1.3696243 C 2.9185792,0.66616151 2.3912578,0.05296662 1.6877949,1.5103439e-5 Z"
inkscape:path-effect="#path-effect1836"
sodipodi:nodetypes="ccccccccsc"
id="path1830"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.171201"
d="M 1.6877949,2.2554433e-6 1.4116097,0.00482375 A 0.63531929,0.63531929 156.39022 0 0 0.96400189,0.2004698 L 0.2910578,0.90268571 A 0.11275169,0.11275169 66.861767 0 0 0.37257619,1.0934501 L 1.3453905,1.0924815 c 0.1890319,-2.581e-4 0.3424044,0.152908 0.3424044,0.3419373 V 5.8208335 C 2.3912578,5.7679015 2.9185985,5.1546923 2.8656498,4.4512261 V 1.3696243 C 2.9185792,0.66616151 2.3912578,0.05296662 1.6877949,1.5103439e-5 Z" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

@ -0,0 +1,157 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100"
height="22"
viewBox="0 0 26.458333 5.8208334"
version="1.1"
id="svg1132"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="logo_top_100x22.svg">
<defs
id="defs1126">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect1836"
is_visible="true"
lpeversion="1"
satellites_param="F,0,0,1,0,0,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,1,1,0,0.26458333,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="1"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="true"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4.7556835"
inkscape:cx="29.382824"
inkscape:cy="2.9469558"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata1129">
<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="g1811">
<g
id="g1822"
transform="matrix(0.37563903,0,0,0.37563903,-64.288753,-32.575173)">
<g
id="g1810">
<g
id="g1804">
<g
aria-label="PY"
id="g1800"
style="font-style:normal;font-weight:normal;font-size:2.85476px;line-height:1.25;font-family:sans-serif;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.0713691"
transform="translate(-0.108475,-0.0784345)">
<path
d="m 196.06915,94.086075 c 0,-0.336862 -0.27406,-0.610919 -0.61092,-0.610919 h -0.80504 v 2.14107 h 0.34257 v -0.919233 h 0.46247 c 0.33686,0 0.61092,-0.274056 0.61092,-0.610918 z m -0.34257,0 c 0,0.171285 -0.11134,0.311169 -0.28262,0.311169 h -0.4482 v -0.622338 h 0.4482 c 0.17128,0 0.28262,0.139883 0.28262,0.311169 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Ano Bold';-inkscape-font-specification:'Ano Bold, ';fill:#dce1ec;fill-opacity:1;stroke-width:0.0713691"
id="path1796" />
<path
d="m 197.84548,93.475156 -0.61378,0.802188 -0.61091,-0.802188 h -0.41109 l 0.85072,1.113357 v 1.027713 h 0.34257 v -1.024859 l 0.85357,-1.116211 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Ano Bold';-inkscape-font-specification:'Ano Bold, ';fill:#dce1ec;fill-opacity:1;stroke-width:0.0713691"
id="path1798" />
</g>
<path
id="path1802"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Regular';-inkscape-font-specification:'Ano Regular, ';letter-spacing:0px;word-spacing:0px;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.25106"
d="m 200.31312,94.467255 c 0,-2.189227 -1.77749,-3.966719 -3.96672,-3.966719 -2.18923,0 -3.96672,1.777492 -3.96672,3.966719 0,2.18923 1.77749,3.966722 3.96672,3.966722 2.18923,0 3.96672,-1.777492 3.96672,-3.966722 z m -0.80338,0 c 0,1.797579 -1.41598,3.263759 -3.16334,3.263759 -1.74736,0 -3.16333,-1.46618 -3.16333,-3.263759 0,-1.797577 1.41597,-3.263756 3.16333,-3.263756 1.74736,0 3.16334,1.466179 3.16334,3.263756 z" />
</g>
<path
d="m 207.29882,90.701382 h -0.80339 V 96.8975 l -4.06714,-6.196118 h -0.80339 v 7.531748 h 0.80339 v -6.186075 l 4.06714,6.186075 h 0.80339 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Regular';-inkscape-font-specification:'Ano Regular, ';letter-spacing:0px;word-spacing:0px;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1806" />
<path
d="m 213.06923,97.530167 h -3.36418 v -2.711429 h 3.06291 v -0.702963 h -3.06291 v -2.71143 h 3.36418 v -0.702963 h -4.16757 v 7.531748 h 4.16757 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Regular';-inkscape-font-specification:'Ano Regular, ';letter-spacing:0px;word-spacing:0px;fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1808" />
</g>
<g
id="g1820">
<path
d="m 220.63801,94.467255 c 0,-2.068719 -1.67707,-3.765873 -3.75582,-3.765873 h -2.61101 v 7.531748 h 2.61101 c 2.07875,0 3.75582,-1.687111 3.75582,-3.765875 z m -1.72728,0 c 0,1.174954 -0.94398,2.118932 -2.11893,2.118932 h -0.79335 v -4.237862 h 0.79335 c 1.17495,0 2.11893,0.954021 2.11893,2.11893 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1812" />
<path
d="m 225.71316,90.701382 h -1.80763 l -2.86207,7.531748 h 1.83776 l 0.40169,-1.064486 h 3.04282 l 0.39166,1.064486 h 1.84778 z m -1.81766,4.830361 0.91384,-2.420202 0.90382,2.420202 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1814" />
<path
d="m 232.31144,95.190303 c 0.93393,-0.281185 1.6168,-1.154867 1.6168,-2.189227 0,-1.265333 -1.02432,-2.299694 -2.28963,-2.299694 h -2.48047 v 7.531748 h 1.72728 v -2.118932 l 1.67708,2.118932 h 2.14905 z m -0.1105,-2.189227 c 0,0.411736 -0.25106,0.652752 -0.56238,0.652752 h -0.75317 v -1.305503 h 0.75317 c 0.31132,0 0.56238,0.241015 0.56238,0.652751 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1816" />
<path
d="m 238.75845,90.701382 -2.00846,2.36999 v -2.36999 h -1.72729 v 7.531748 h 1.72729 v -2.339863 l 1.98839,2.339863 h 2.17918 l -3.19346,-3.755832 3.21354,-3.775916 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.8299px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';letter-spacing:0px;word-spacing:0px;fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.25106"
id="path1818" />
</g>
</g>
<g
id="g1790">
<path
id="path1824"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#4f9fee;fill-opacity:1;stroke:none;stroke-width:0.171201"
d="m 6.0294424,2.568037 c 0,-1.4106927 -1.1436221,-2.568008872565 -2.56116,-2.568008872565 H 1.7851565 V 5.1360473 h 1.6831259 c 1.4175379,0 2.56116,-1.1504695 2.56116,-2.5680103 z m -1.1778576,0 c 0,0.8012186 -0.6437136,1.4449327 -1.4449349,1.4449327 H 2.3364893 v -2.889866 h 1.0701606 c 0.8012213,0 1.4449349,0.6505625 1.4449349,1.4449333 z"
sodipodi:nodetypes="ssccssssccss" />
<path
id="path1826"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#3d8ad5;fill-opacity:1;stroke:none;stroke-width:0.171201"
d="M 2.0300435,1.255144e-5 1.6876461,0.00635735 V 1.0924146 C 1.876678,1.0921558 2.0300435,1.2454526 2.0300435,1.4344813 V 5.1360358 H 3.0666136 C 3.1729317,4.9320827 3.2265932,4.6974519 3.2080542,4.451231 V 4.0128603 H 2.3364893 V 1.1231724 H 3.2023729 C 3.1322897,0.52831193 2.6497261,0.04664426 2.0300435,2.3144399e-7 Z"
sodipodi:nodetypes="cccsccccccccc" />
<path
d="M 1.852148,1.255144e-5 1.6876461,0.00635735 V 1.0924146 C 1.876678,1.0921558 2.0300435,1.2454526 2.0300435,1.4344813 V 5.1360358 H 2.8887173 C 2.9950362,4.9320827 3.0486959,4.6974519 3.0301587,4.451231 V 4.0128603 H 2.1585938 V 1.1231724 H 3.0244775 C 2.9543925,0.52831193 2.4075378,2.3144399e-7 1.852148,2.3144399e-7 Z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#2d7bc5;fill-opacity:1;stroke:none;stroke-width:0.171201"
id="path1828"
sodipodi:nodetypes="cccsccccccccc" />
<path
inkscape:original-d="M 1.6877949,2.2554433e-6 1.1470667,0.00944201 0.10799299,1.0937135 1.3453905,1.0924815 c 0.1890319,-2.581e-4 0.3424044,0.152908 0.3424044,0.3419373 V 5.8208335 C 2.3912578,5.7679015 2.9185985,5.1546923 2.8656498,4.4512261 V 1.3696243 C 2.9185792,0.66616151 2.3912578,0.05296662 1.6877949,1.5103439e-5 Z"
inkscape:path-effect="#path-effect1836"
sodipodi:nodetypes="ccccccccsc"
id="path1830"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:'Ano Black';-inkscape-font-specification:'Ano Black, ';fill:#dce1ec;fill-opacity:1;stroke:none;stroke-width:0.171201"
d="M 1.6877949,2.2554433e-6 1.4116097,0.00482375 A 0.63531929,0.63531929 156.39022 0 0 0.96400189,0.2004698 L 0.2910578,0.90268571 A 0.11275169,0.11275169 66.861767 0 0 0.37257619,1.0934501 L 1.3453905,1.0924815 c 0.1890319,-2.581e-4 0.3424044,0.152908 0.3424044,0.3419373 V 5.8208335 C 2.3912578,5.7679015 2.9185985,5.1546923 2.8656498,4.4512261 V 1.3696243 C 2.9185792,0.66616151 2.3912578,0.05296662 1.6877949,1.5103439e-5 Z" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

@ -0,0 +1,28 @@
{
"theme_name" : "Default",
"app_color" : {
"dark_one" : "#1b1e23",
"dark_two" : "#1e2229",
"dark_three" : "#21252d",
"dark_four" : "#272c36",
"bg_one" : "#D3E0F7",
"bg_two" : "#E2E9F7",
"bg_three" : "#EFF1F7",
"icon_color" : "#6C7C96",
"icon_hover" : "#8CB8FF",
"icon_pressed" : "#6c99f4",
"icon_active" : "#8CB8FF",
"context_color" : "#568af2",
"context_hover" : "#6c99f4",
"context_pressed" : "#4B5469",
"text_title" : "#606C85",
"text_foreground" : "#6B7894",
"text_description" : "#7887A6",
"text_active" : "#8797BA",
"white" : "#f5f6f9",
"pink" : "#ff007f",
"green" : "#00ff7f",
"red" : "#ff5555",
"yellow" : "#f1fa8c"
}
}

@ -0,0 +1,28 @@
{
"theme_name" : "Default",
"app_color" : {
"dark_one" : "#1b1e23",
"dark_two" : "#1e2229",
"dark_three" : "#21252d",
"dark_four" : "#272c36",
"bg_one" : "#2c313c",
"bg_two" : "#343b48",
"bg_three" : "#3c4454",
"icon_color" : "#c3ccdf",
"icon_hover" : "#dce1ec",
"icon_pressed" : "#6c99f4",
"icon_active" : "#f5f6f9",
"context_color" : "#568af2",
"context_hover" : "#6c99f4",
"context_pressed" : "#3f6fd1",
"text_title" : "#dce1ec",
"text_foreground" : "#8a95aa",
"text_description" : "#4f5b6e",
"text_active" : "#dce1ec",
"white" : "#f5f6f9",
"pink" : "#ff007f",
"green" : "#00ff7f",
"red" : "#ff5555",
"yellow" : "#f1fa8c"
}
}

@ -0,0 +1,28 @@
{
"theme_name" : "dracula",
"app_color" : {
"dark_one" : "#282a36",
"dark_two" : "#2B2E3B",
"dark_three" : "#333645",
"dark_four" : "#3C4052",
"bg_one" : "#44475a",
"bg_two" : "#4D5066",
"bg_three" : "#595D75",
"icon_color" : "#c3ccdf",
"icon_hover" : "#dce1ec",
"icon_pressed" : "#ff79c6",
"icon_active" : "#f5f6f9",
"context_color" : "#ff79c6",
"context_hover" : "#FF84D7",
"context_pressed" : "#FF90DD",
"text_title" : "#dce1ec",
"text_foreground" : "#f8f8f2",
"text_description" : "#979EC7",
"text_active" : "#dce1ec",
"white" : "#f5f6f9",
"pink" : "#ff79c6",
"green" : "#00ff7f",
"red" : "#ff5555",
"yellow" : "#f1fa8c"
}
}

@ -0,0 +1,271 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>LeftColumn</class>
<widget class="QWidget" name="LeftColumn">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>240</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="main_pages_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QStackedWidget" name="menus">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="menu_1">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QWidget" name="btn_1_widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>40</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<layout class="QVBoxLayout" name="btn_1_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="btn_2_widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>40</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<layout class="QVBoxLayout" name="btn_2_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="btn_3_widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>40</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<layout class="QVBoxLayout" name="btn_3_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="label_1">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">font-size: 16pt</string>
</property>
<property name="text">
<string>Menu 1 - Left Menu</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="menu_2">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QWidget" name="btn_4_widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>40</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<layout class="QVBoxLayout" name="btn_4_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">font-size: 16pt</string>
</property>
<property name="text">
<string>Menu 2 - Left Menu</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">font-size: 9pt</string>
</property>
<property name="text">
<string>This is just an example menu.
Add Qt Widgets or your custom widgets here.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>RightColumn</class>
<widget class="QWidget" name="RightColumn">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>240</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="main_pages_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QStackedWidget" name="menus">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="menu_1">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QLabel" name="label_1">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">font-size: 16pt</string>
</property>
<property name="text">
<string>Menu 1 - Right Menu</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="menu_2">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">font-size: 16pt</string>
</property>
<property name="text">
<string>Menu 2 - Right Menu</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,138 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
class Ui_LeftColumn(object):
def setupUi(self, LeftColumn):
if not LeftColumn.objectName():
LeftColumn.setObjectName(u"LeftColumn")
LeftColumn.resize(240, 600)
self.main_pages_layout = QVBoxLayout(LeftColumn)
self.main_pages_layout.setSpacing(0)
self.main_pages_layout.setObjectName(u"main_pages_layout")
self.main_pages_layout.setContentsMargins(5, 5, 5, 5)
self.menus = QStackedWidget(LeftColumn)
self.menus.setObjectName(u"menus")
self.menu_1 = QWidget()
self.menu_1.setObjectName(u"menu_1")
self.verticalLayout = QVBoxLayout(self.menu_1)
self.verticalLayout.setSpacing(5)
self.verticalLayout.setObjectName(u"verticalLayout")
self.verticalLayout.setContentsMargins(5, 5, 5, 5)
self.btn_1_widget = QWidget(self.menu_1)
self.btn_1_widget.setObjectName(u"btn_1_widget")
self.btn_1_widget.setMinimumSize(QSize(0, 40))
self.btn_1_widget.setMaximumSize(QSize(16777215, 40))
self.btn_1_layout = QVBoxLayout(self.btn_1_widget)
self.btn_1_layout.setSpacing(0)
self.btn_1_layout.setObjectName(u"btn_1_layout")
self.btn_1_layout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.addWidget(self.btn_1_widget)
self.btn_2_widget = QWidget(self.menu_1)
self.btn_2_widget.setObjectName(u"btn_2_widget")
self.btn_2_widget.setMinimumSize(QSize(0, 40))
self.btn_2_widget.setMaximumSize(QSize(16777215, 40))
self.btn_2_layout = QVBoxLayout(self.btn_2_widget)
self.btn_2_layout.setSpacing(0)
self.btn_2_layout.setObjectName(u"btn_2_layout")
self.btn_2_layout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.addWidget(self.btn_2_widget)
self.btn_3_widget = QWidget(self.menu_1)
self.btn_3_widget.setObjectName(u"btn_3_widget")
self.btn_3_widget.setMinimumSize(QSize(0, 40))
self.btn_3_widget.setMaximumSize(QSize(16777215, 40))
self.btn_3_layout = QVBoxLayout(self.btn_3_widget)
self.btn_3_layout.setSpacing(0)
self.btn_3_layout.setObjectName(u"btn_3_layout")
self.btn_3_layout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.addWidget(self.btn_3_widget)
self.label_1 = QLabel(self.menu_1)
self.label_1.setObjectName(u"label_1")
font = QFont()
font.setPointSize(16)
self.label_1.setFont(font)
self.label_1.setStyleSheet(u"font-size: 16pt")
self.label_1.setAlignment(Qt.AlignCenter)
self.verticalLayout.addWidget(self.label_1)
self.menus.addWidget(self.menu_1)
self.menu_2 = QWidget()
self.menu_2.setObjectName(u"menu_2")
self.verticalLayout_2 = QVBoxLayout(self.menu_2)
self.verticalLayout_2.setSpacing(5)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.verticalLayout_2.setContentsMargins(5, 5, 5, 5)
self.btn_4_widget = QWidget(self.menu_2)
self.btn_4_widget.setObjectName(u"btn_4_widget")
self.btn_4_widget.setMinimumSize(QSize(0, 40))
self.btn_4_widget.setMaximumSize(QSize(16777215, 40))
self.btn_4_layout = QVBoxLayout(self.btn_4_widget)
self.btn_4_layout.setSpacing(0)
self.btn_4_layout.setObjectName(u"btn_4_layout")
self.btn_4_layout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.addWidget(self.btn_4_widget)
self.label_2 = QLabel(self.menu_2)
self.label_2.setObjectName(u"label_2")
self.label_2.setFont(font)
self.label_2.setStyleSheet(u"font-size: 16pt")
self.label_2.setAlignment(Qt.AlignCenter)
self.verticalLayout_2.addWidget(self.label_2)
self.label_3 = QLabel(self.menu_2)
self.label_3.setObjectName(u"label_3")
font1 = QFont()
font1.setPointSize(9)
self.label_3.setFont(font1)
self.label_3.setStyleSheet(u"font-size: 9pt")
self.label_3.setAlignment(Qt.AlignCenter)
self.label_3.setWordWrap(True)
self.verticalLayout_2.addWidget(self.label_3)
self.menus.addWidget(self.menu_2)
self.main_pages_layout.addWidget(self.menus)
self.retranslateUi(LeftColumn)
self.menus.setCurrentIndex(0)
QMetaObject.connectSlotsByName(LeftColumn)
# setupUi
def retranslateUi(self, LeftColumn):
LeftColumn.setWindowTitle(QCoreApplication.translate("LeftColumn", u"Form", None))
self.label_1.setText(QCoreApplication.translate("LeftColumn", u"Menu 1 - Left Menu", None))
self.label_2.setText(QCoreApplication.translate("LeftColumn", u"Menu 2 - Left Menu", None))
self.label_3.setText(QCoreApplication.translate("LeftColumn", u"This is just an example menu.\n"
"Add Qt Widgets or your custom widgets here.", None))
# retranslateUi

@ -0,0 +1,116 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
class Ui_RightColumn(object):
def setupUi(self, RightColumn):
if not RightColumn.objectName():
RightColumn.setObjectName(u"RightColumn")
RightColumn.resize(240, 600)
self.main_pages_layout = QVBoxLayout(RightColumn)
self.main_pages_layout.setSpacing(0)
self.main_pages_layout.setObjectName(u"main_pages_layout")
self.main_pages_layout.setContentsMargins(5, 5, 5, 5)
self.menus = QStackedWidget(RightColumn)
self.menus.setObjectName(u"menus")
self.menu_1 = QWidget()
self.menu_1.setObjectName(u"menu_1")
self.verticalLayout = QVBoxLayout(self.menu_1)
self.verticalLayout.setSpacing(5)
self.verticalLayout.setObjectName(u"verticalLayout")
self.verticalLayout.setContentsMargins(5, 5, 5, 5)
self.btn_1_widget = QWidget(self.menu_1)
self.btn_1_widget.setObjectName(u"btn_1_widget")
self.btn_1_widget.setMinimumSize(QSize(0, 40))
self.btn_1_widget.setMaximumSize(QSize(16777215, 40))
self.btn_1_layout = QVBoxLayout(self.btn_1_widget)
self.btn_1_layout.setSpacing(0)
self.btn_1_layout.setObjectName(u"btn_1_layout")
self.btn_1_layout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.addWidget(self.btn_1_widget)
self.label_1 = QLabel(self.menu_1)
self.label_1.setObjectName(u"label_1")
font = QFont()
font.setPointSize(16)
self.label_1.setFont(font)
self.label_1.setStyleSheet(u"font-size: 16pt")
self.label_1.setAlignment(Qt.AlignCenter)
self.verticalLayout.addWidget(self.label_1)
self.menus.addWidget(self.menu_1)
self.menu_2 = QWidget()
self.menu_2.setObjectName(u"menu_2")
self.verticalLayout_2 = QVBoxLayout(self.menu_2)
self.verticalLayout_2.setSpacing(5)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.verticalLayout_2.setContentsMargins(5, 5, 5, 5)
self.btn_2_widget = QWidget(self.menu_2)
self.btn_2_widget.setObjectName(u"btn_2_widget")
self.btn_2_widget.setMinimumSize(QSize(0, 40))
self.btn_2_widget.setMaximumSize(QSize(16777215, 40))
self.btn_2_layout = QVBoxLayout(self.btn_2_widget)
self.btn_2_layout.setSpacing(0)
self.btn_2_layout.setObjectName(u"btn_2_layout")
self.btn_2_layout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.addWidget(self.btn_2_widget)
self.label_2 = QLabel(self.menu_2)
self.label_2.setObjectName(u"label_2")
self.label_2.setFont(font)
self.label_2.setStyleSheet(u"font-size: 16pt")
self.label_2.setAlignment(Qt.AlignCenter)
self.verticalLayout_2.addWidget(self.label_2)
self.label_3 = QLabel(self.menu_2)
self.label_3.setObjectName(u"label_3")
font1 = QFont()
font1.setPointSize(9)
self.label_3.setFont(font1)
self.label_3.setStyleSheet(u"font-size: 9pt")
self.label_3.setAlignment(Qt.AlignCenter)
self.label_3.setWordWrap(True)
self.verticalLayout_2.addWidget(self.label_3)
self.menus.addWidget(self.menu_2)
self.main_pages_layout.addWidget(self.menus)
self.retranslateUi(RightColumn)
self.menus.setCurrentIndex(1)
QMetaObject.connectSlotsByName(RightColumn)
# setupUi
def retranslateUi(self, RightColumn):
RightColumn.setWindowTitle(QCoreApplication.translate("RightColumn", u"Form", None))
self.label_1.setText(QCoreApplication.translate("RightColumn", u"Menu 1 - Right Menu", None))
self.label_2.setText(QCoreApplication.translate("RightColumn", u"Menu 2 - Right Menu", None))
self.label_3.setText(QCoreApplication.translate("RightColumn", u"This is just an example menu.\n"
"Add Qt Widgets or your custom widgets here.", None))
# retranslateUi

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainPages</class>
<widget class="QWidget" name="MainPages">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>860</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="main_pages_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QStackedWidget" name="pages">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="page_1">
<property name="styleSheet">
<string notr="true">font-size: 14pt</string>
</property>
<layout class="QVBoxLayout" name="page_1_layout">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item alignment="Qt::AlignHCenter">
<widget class="QFrame" name="welcome_base">
<property name="minimumSize">
<size>
<width>300</width>
<height>150</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>300</width>
<height>150</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="center_page_layout">
<property name="spacing">
<number>10</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QFrame" name="logo">
<property name="minimumSize">
<size>
<width>300</width>
<height>120</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>300</width>
<height>120</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="logo_layout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Welcome To PyOneDark GUI</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<layout class="QVBoxLayout" name="page_2_layout">
<property name="spacing">
<number>5</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QScrollArea" name="scroll_area">
<property name="styleSheet">
<string notr="true">background: transparent;</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>840</width>
<height>580</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background: transparent;</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>15</number>
</property>
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item>
<widget class="QLabel" name="title_label">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>40</height>
</size>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">font-size: 16pt</string>
</property>
<property name="text">
<string>Custom Widgets Page</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="description_label">
<property name="text">
<string>Here will be all the custom widgets, they will be added over time on this page.
I will try to always record a new tutorial when adding a new Widget and updating the project on Patreon before launching on GitHub and GitHub after the public release.</string>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="row_1_layout"/>
</item>
<item>
<layout class="QHBoxLayout" name="row_2_layout"/>
</item>
<item>
<layout class="QHBoxLayout" name="row_3_layout"/>
</item>
<item>
<layout class="QVBoxLayout" name="row_4_layout"/>
</item>
<item>
<layout class="QVBoxLayout" name="row_5_layout"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_3">
<property name="styleSheet">
<string notr="true">QFrame {
font-size: 16pt;
}</string>
</property>
<layout class="QVBoxLayout" name="page_3_layout">
<item>
<widget class="QLabel" name="empty_page_label">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Empty Page</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,176 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
class Ui_MainPages(object):
def setupUi(self, MainPages):
if not MainPages.objectName():
MainPages.setObjectName(u"MainPages")
MainPages.resize(860, 600)
self.main_pages_layout = QVBoxLayout(MainPages)
self.main_pages_layout.setSpacing(0)
self.main_pages_layout.setObjectName(u"main_pages_layout")
self.main_pages_layout.setContentsMargins(5, 5, 5, 5)
self.pages = QStackedWidget(MainPages)
self.pages.setObjectName(u"pages")
self.page_1 = QWidget()
self.page_1.setObjectName(u"page_1")
self.page_1.setStyleSheet(u"font-size: 14pt")
self.page_1_layout = QVBoxLayout(self.page_1)
self.page_1_layout.setSpacing(5)
self.page_1_layout.setObjectName(u"page_1_layout")
self.page_1_layout.setContentsMargins(5, 5, 5, 5)
self.welcome_base = QFrame(self.page_1)
self.welcome_base.setObjectName(u"welcome_base")
self.welcome_base.setMinimumSize(QSize(300, 150))
self.welcome_base.setMaximumSize(QSize(300, 150))
self.welcome_base.setFrameShape(QFrame.NoFrame)
self.welcome_base.setFrameShadow(QFrame.Raised)
self.center_page_layout = QVBoxLayout(self.welcome_base)
self.center_page_layout.setSpacing(10)
self.center_page_layout.setObjectName(u"center_page_layout")
self.center_page_layout.setContentsMargins(0, 0, 0, 0)
self.logo = QFrame(self.welcome_base)
self.logo.setObjectName(u"logo")
self.logo.setMinimumSize(QSize(300, 120))
self.logo.setMaximumSize(QSize(300, 120))
self.logo.setFrameShape(QFrame.NoFrame)
self.logo.setFrameShadow(QFrame.Raised)
self.logo_layout = QVBoxLayout(self.logo)
self.logo_layout.setSpacing(0)
self.logo_layout.setObjectName(u"logo_layout")
self.logo_layout.setContentsMargins(0, 0, 0, 0)
self.center_page_layout.addWidget(self.logo)
self.label = QLabel(self.welcome_base)
self.label.setObjectName(u"label")
self.label.setAlignment(Qt.AlignCenter)
self.center_page_layout.addWidget(self.label)
self.page_1_layout.addWidget(self.welcome_base, 0, Qt.AlignHCenter)
self.pages.addWidget(self.page_1)
self.page_2 = QWidget()
self.page_2.setObjectName(u"page_2")
self.page_2_layout = QVBoxLayout(self.page_2)
self.page_2_layout.setSpacing(5)
self.page_2_layout.setObjectName(u"page_2_layout")
self.page_2_layout.setContentsMargins(5, 5, 5, 5)
self.scroll_area = QScrollArea(self.page_2)
self.scroll_area.setObjectName(u"scroll_area")
self.scroll_area.setStyleSheet(u"background: transparent;")
self.scroll_area.setFrameShape(QFrame.NoFrame)
self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.scroll_area.setWidgetResizable(True)
self.contents = QWidget()
self.contents.setObjectName(u"contents")
self.contents.setGeometry(QRect(0, 0, 840, 580))
self.contents.setStyleSheet(u"background: transparent;")
self.verticalLayout = QVBoxLayout(self.contents)
self.verticalLayout.setSpacing(15)
self.verticalLayout.setObjectName(u"verticalLayout")
self.verticalLayout.setContentsMargins(5, 5, 5, 5)
self.title_label = QLabel(self.contents)
self.title_label.setObjectName(u"title_label")
self.title_label.setMaximumSize(QSize(16777215, 40))
font = QFont()
font.setPointSize(16)
self.title_label.setFont(font)
self.title_label.setStyleSheet(u"font-size: 16pt")
self.title_label.setAlignment(Qt.AlignCenter)
self.verticalLayout.addWidget(self.title_label)
self.description_label = QLabel(self.contents)
self.description_label.setObjectName(u"description_label")
self.description_label.setAlignment(Qt.AlignHCenter|Qt.AlignTop)
self.description_label.setWordWrap(True)
self.verticalLayout.addWidget(self.description_label)
self.row_1_layout = QHBoxLayout()
self.row_1_layout.setObjectName(u"row_1_layout")
self.verticalLayout.addLayout(self.row_1_layout)
self.row_2_layout = QHBoxLayout()
self.row_2_layout.setObjectName(u"row_2_layout")
self.verticalLayout.addLayout(self.row_2_layout)
self.row_3_layout = QHBoxLayout()
self.row_3_layout.setObjectName(u"row_3_layout")
self.verticalLayout.addLayout(self.row_3_layout)
self.row_4_layout = QVBoxLayout()
self.row_4_layout.setObjectName(u"row_4_layout")
self.verticalLayout.addLayout(self.row_4_layout)
self.row_5_layout = QVBoxLayout()
self.row_5_layout.setObjectName(u"row_5_layout")
self.verticalLayout.addLayout(self.row_5_layout)
self.scroll_area.setWidget(self.contents)
self.page_2_layout.addWidget(self.scroll_area)
self.pages.addWidget(self.page_2)
self.page_3 = QWidget()
self.page_3.setObjectName(u"page_3")
self.page_3.setStyleSheet(u"QFrame {\n"
" font-size: 16pt;\n"
"}")
self.page_3_layout = QVBoxLayout(self.page_3)
self.page_3_layout.setObjectName(u"page_3_layout")
self.empty_page_label = QLabel(self.page_3)
self.empty_page_label.setObjectName(u"empty_page_label")
self.empty_page_label.setFont(font)
self.empty_page_label.setAlignment(Qt.AlignCenter)
self.page_3_layout.addWidget(self.empty_page_label)
self.pages.addWidget(self.page_3)
self.main_pages_layout.addWidget(self.pages)
self.retranslateUi(MainPages)
self.pages.setCurrentIndex(0)
QMetaObject.connectSlotsByName(MainPages)
# setupUi
def retranslateUi(self, MainPages):
MainPages.setWindowTitle(QCoreApplication.translate("MainPages", u"Form", None))
self.label.setText(QCoreApplication.translate("MainPages", u"Welcome To PyOneDark GUI", None))
self.title_label.setText(QCoreApplication.translate("MainPages", u"Custom Widgets Page", None))
self.description_label.setText(QCoreApplication.translate("MainPages", u"Here will be all the custom widgets, they will be added over time on this page.\n"
"I will try to always record a new tutorial when adding a new Widget and updating the project on Patreon before launching on GitHub and GitHub after the public release.", None))
self.empty_page_label.setText(QCoreApplication.translate("MainPages", u"Empty Page", None))
# retranslateUi

@ -0,0 +1,23 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# MAIN WINDOW
# ///////////////////////////////////////////////////////////////
from . ui_main import UI_MainWindow
# SETUP MAIN WINDOW
# ///////////////////////////////////////////////////////////////
from . setup_main_window import SetupMainWindow

@ -0,0 +1,145 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
import sys
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# LOAD UI MAIN
# ///////////////////////////////////////////////////////////////
from . ui_main import *
# FUNCTIONS
class MainFunctions():
def __init__(self):
super().__init__()
# SETUP MAIN WINDOw
# Load widgets from "gui\uis\main_window\ui_main.py"
# ///////////////////////////////////////////////////////////////
self.ui = UI_MainWindow()
self.ui.setup_ui(self)
# SET MAIN WINDOW PAGES
# ///////////////////////////////////////////////////////////////
def set_page(self, page):
self.ui.load_pages.pages.setCurrentWidget(page)
# SET LEFT COLUMN PAGES
# ///////////////////////////////////////////////////////////////
def set_left_column_menu(
self,
menu,
title,
icon_path
):
self.ui.left_column.menus.menus.setCurrentWidget(menu)
self.ui.left_column.title_label.setText(title)
self.ui.left_column.icon.set_icon(icon_path)
# RETURN IF LEFT COLUMN IS VISIBLE
# ///////////////////////////////////////////////////////////////
def left_column_is_visible(self):
width = self.ui.left_column_frame.width()
if width == 0:
return False
else:
return True
# RETURN IF RIGHT COLUMN IS VISIBLE
# ///////////////////////////////////////////////////////////////
def right_column_is_visible(self):
width = self.ui.right_column_frame.width()
if width == 0:
return False
else:
return True
# SET RIGHT COLUMN PAGES
# ///////////////////////////////////////////////////////////////
def set_right_column_menu(self, menu):
self.ui.right_column.menus.setCurrentWidget(menu)
# GET TITLE BUTTON BY OBJECT NAME
# ///////////////////////////////////////////////////////////////
def get_title_bar_btn(self, object_name):
return self.ui.title_bar_frame.findChild(QPushButton, object_name)
# GET TITLE BUTTON BY OBJECT NAME
# ///////////////////////////////////////////////////////////////
def get_left_menu_btn(self, object_name):
return self.ui.left_menu.findChild(QPushButton, object_name)
# LEDT AND RIGHT COLUMNS / SHOW / HIDE
# ///////////////////////////////////////////////////////////////
def toggle_left_column(self):
# GET ACTUAL CLUMNS SIZE
width = self.ui.left_column_frame.width()
right_column_width = self.ui.right_column_frame.width()
MainFunctions.start_box_animation(self, width, right_column_width, "left")
def toggle_right_column(self):
# GET ACTUAL CLUMNS SIZE
left_column_width = self.ui.left_column_frame.width()
width = self.ui.right_column_frame.width()
MainFunctions.start_box_animation(self, left_column_width, width, "right")
def start_box_animation(self, left_box_width, right_box_width, direction):
right_width = 0
left_width = 0
time_animation = self.ui.settings["time_animation"]
minimum_left = self.ui.settings["left_column_size"]["minimum"]
maximum_left = self.ui.settings["left_column_size"]["maximum"]
minimum_right = self.ui.settings["right_column_size"]["minimum"]
maximum_right = self.ui.settings["right_column_size"]["maximum"]
# Check Left Values
if left_box_width == minimum_left and direction == "left":
left_width = maximum_left
else:
left_width = minimum_left
# Check Right values
if right_box_width == minimum_right and direction == "right":
right_width = maximum_right
else:
right_width = minimum_right
# ANIMATION LEFT BOX
self.left_box = QPropertyAnimation(self.ui.left_column_frame, b"minimumWidth")
self.left_box.setDuration(time_animation)
self.left_box.setStartValue(left_box_width)
self.left_box.setEndValue(left_width)
self.left_box.setEasingCurve(QEasingCurve.InOutQuart)
# ANIMATION RIGHT BOX
self.right_box = QPropertyAnimation(self.ui.right_column_frame, b"minimumWidth")
self.right_box.setDuration(time_animation)
self.right_box.setStartValue(right_box_width)
self.right_box.setEndValue(right_width)
self.right_box.setEasingCurve(QEasingCurve.InOutQuart)
# GROUP ANIMATION
self.group = QParallelAnimationGroup()
self.group.stop()
self.group.addAnimation(self.left_box)
self.group.addAnimation(self.right_box)
self.group.start()

@ -0,0 +1,600 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
from gui.widgets.py_table_widget.py_table_widget import PyTableWidget
from . functions_main_window import *
import sys
import os
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT SETTINGS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.json_settings import Settings
# IMPORT THEME COLORS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.json_themes import Themes
# IMPORT PY ONE DARK WIDGETS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.widgets import *
# LOAD UI MAIN
# ///////////////////////////////////////////////////////////////
from . ui_main import *
# MAIN FUNCTIONS
# ///////////////////////////////////////////////////////////////
from . functions_main_window import *
# PY WINDOW
# ///////////////////////////////////////////////////////////////
class SetupMainWindow:
def __init__(self):
super().__init__()
# SETUP MAIN WINDOw
# Load widgets from "gui\uis\main_window\ui_main.py"
# ///////////////////////////////////////////////////////////////
self.ui = UI_MainWindow()
self.ui.setup_ui(self)
# ADD LEFT MENUS
# ///////////////////////////////////////////////////////////////
add_left_menus = [
{
"btn_icon" : "icon_home.svg",
"btn_id" : "btn_home",
"btn_text" : "Home",
"btn_tooltip" : "Home page",
"show_top" : True,
"is_active" : True
},
{
"btn_icon" : "icon_widgets.svg",
"btn_id" : "btn_widgets",
"btn_text" : "Show Custom Widgets",
"btn_tooltip" : "Show custom widgets",
"show_top" : True,
"is_active" : False
},
{
"btn_icon" : "icon_add_user.svg",
"btn_id" : "btn_add_user",
"btn_text" : "Add Users",
"btn_tooltip" : "Add users",
"show_top" : True,
"is_active" : False
},
{
"btn_icon" : "icon_file.svg",
"btn_id" : "btn_new_file",
"btn_text" : "New File",
"btn_tooltip" : "Create new file",
"show_top" : True,
"is_active" : False
},
{
"btn_icon" : "icon_folder_open.svg",
"btn_id" : "btn_open_file",
"btn_text" : "Open File",
"btn_tooltip" : "Open file",
"show_top" : True,
"is_active" : False
},
{
"btn_icon" : "icon_save.svg",
"btn_id" : "btn_save",
"btn_text" : "Save File",
"btn_tooltip" : "Save file",
"show_top" : True,
"is_active" : False
},
{
"btn_icon" : "icon_info.svg",
"btn_id" : "btn_info",
"btn_text" : "Information",
"btn_tooltip" : "Open informations",
"show_top" : False,
"is_active" : False
},
{
"btn_icon" : "icon_settings.svg",
"btn_id" : "btn_settings",
"btn_text" : "Settings",
"btn_tooltip" : "Open settings",
"show_top" : False,
"is_active" : False
}
]
# ADD TITLE BAR MENUS
# ///////////////////////////////////////////////////////////////
add_title_bar_menus = [
{
"btn_icon" : "icon_search.svg",
"btn_id" : "btn_search",
"btn_tooltip" : "Search",
"is_active" : False
},
{
"btn_icon" : "icon_settings.svg",
"btn_id" : "btn_top_settings",
"btn_tooltip" : "Top settings",
"is_active" : False
}
]
# SETUP CUSTOM BTNs OF CUSTOM WIDGETS
# Get sender() function when btn is clicked
# ///////////////////////////////////////////////////////////////
def setup_btns(self):
if self.ui.title_bar.sender() != None:
return self.ui.title_bar.sender()
elif self.ui.left_menu.sender() != None:
return self.ui.left_menu.sender()
elif self.ui.left_column.sender() != None:
return self.ui.left_column.sender()
# SETUP MAIN WINDOW WITH CUSTOM PARAMETERS
# ///////////////////////////////////////////////////////////////
def setup_gui(self):
# APP TITLE
# ///////////////////////////////////////////////////////////////
self.setWindowTitle(self.settings["app_name"])
# REMOVE TITLE BAR
# ///////////////////////////////////////////////////////////////
if self.settings["custom_title_bar"]:
self.setWindowFlag(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground)
# ADD GRIPS
# ///////////////////////////////////////////////////////////////
if self.settings["custom_title_bar"]:
self.left_grip = PyGrips(self, "left", self.hide_grips)
self.right_grip = PyGrips(self, "right", self.hide_grips)
self.top_grip = PyGrips(self, "top", self.hide_grips)
self.bottom_grip = PyGrips(self, "bottom", self.hide_grips)
self.top_left_grip = PyGrips(self, "top_left", self.hide_grips)
self.top_right_grip = PyGrips(self, "top_right", self.hide_grips)
self.bottom_left_grip = PyGrips(self, "bottom_left", self.hide_grips)
self.bottom_right_grip = PyGrips(self, "bottom_right", self.hide_grips)
# LEFT MENUS / GET SIGNALS WHEN LEFT MENU BTN IS CLICKED / RELEASED
# ///////////////////////////////////////////////////////////////
# ADD MENUS
self.ui.left_menu.add_menus(SetupMainWindow.add_left_menus)
# SET SIGNALS
self.ui.left_menu.clicked.connect(self.btn_clicked)
self.ui.left_menu.released.connect(self.btn_released)
# TITLE BAR / ADD EXTRA BUTTONS
# ///////////////////////////////////////////////////////////////
# ADD MENUS
self.ui.title_bar.add_menus(SetupMainWindow.add_title_bar_menus)
# SET SIGNALS
self.ui.title_bar.clicked.connect(self.btn_clicked)
self.ui.title_bar.released.connect(self.btn_released)
# ADD Title
if self.settings["custom_title_bar"]:
self.ui.title_bar.set_title(self.settings["app_name"])
else:
self.ui.title_bar.set_title("Welcome to PyOneDark")
# LEFT COLUMN SET SIGNALS
# ///////////////////////////////////////////////////////////////
self.ui.left_column.clicked.connect(self.btn_clicked)
self.ui.left_column.released.connect(self.btn_released)
# SET INITIAL PAGE / SET LEFT AND RIGHT COLUMN MENUS
# ///////////////////////////////////////////////////////////////
MainFunctions.set_page(self, self.ui.load_pages.page_1)
MainFunctions.set_left_column_menu(
self,
menu = self.ui.left_column.menus.menu_1,
title = "Settings Left Column",
icon_path = Functions.set_svg_icon("icon_settings.svg")
)
MainFunctions.set_right_column_menu(self, self.ui.right_column.menu_1)
# ///////////////////////////////////////////////////////////////
# EXAMPLE CUSTOM WIDGETS
# Here are added the custom widgets to pages and columns that
# were created using Qt Designer.
# This is just an example and should be deleted when creating
# your application.
#
# OBJECTS FOR LOAD PAGES, LEFT AND RIGHT COLUMNS
# You can access objects inside Qt Designer projects using
# the objects below:
#
# <OBJECTS>
# LEFT COLUMN: self.ui.left_column.menus
# RIGHT COLUMN: self.ui.right_column
# LOAD PAGES: self.ui.load_pages
# </OBJECTS>
# ///////////////////////////////////////////////////////////////
# LOAD SETTINGS
# ///////////////////////////////////////////////////////////////
settings = Settings()
self.settings = settings.items
# LOAD THEME COLOR
# ///////////////////////////////////////////////////////////////
themes = Themes()
self.themes = themes.items
# LEFT COLUMN
# ///////////////////////////////////////////////////////////////
# BTN 1
self.left_btn_1 = PyPushButton(
text="Btn 1",
radius=8,
color=self.themes["app_color"]["text_foreground"],
bg_color=self.themes["app_color"]["dark_one"],
bg_color_hover=self.themes["app_color"]["dark_three"],
bg_color_pressed=self.themes["app_color"]["dark_four"]
)
self.left_btn_1.setMaximumHeight(40)
self.ui.left_column.menus.btn_1_layout.addWidget(self.left_btn_1)
# BTN 2
self.left_btn_2 = PyPushButton(
text="Btn With Icon",
radius=8,
color=self.themes["app_color"]["text_foreground"],
bg_color=self.themes["app_color"]["dark_one"],
bg_color_hover=self.themes["app_color"]["dark_three"],
bg_color_pressed=self.themes["app_color"]["dark_four"]
)
self.icon = QIcon(Functions.set_svg_icon("icon_settings.svg"))
self.left_btn_2.setIcon(self.icon)
self.left_btn_2.setMaximumHeight(40)
self.ui.left_column.menus.btn_2_layout.addWidget(self.left_btn_2)
# BTN 3 - Default QPushButton
self.left_btn_3 = QPushButton("Default QPushButton")
self.left_btn_3.setMaximumHeight(40)
self.ui.left_column.menus.btn_3_layout.addWidget(self.left_btn_3)
# PAGES
# ///////////////////////////////////////////////////////////////
# PAGE 1 - ADD LOGO TO MAIN PAGE
self.logo_svg = QSvgWidget(Functions.set_svg_image("logo_home.svg"))
self.ui.load_pages.logo_layout.addWidget(self.logo_svg, Qt.AlignCenter, Qt.AlignCenter)
# PAGE 2
# CIRCULAR PROGRESS 1
self.circular_progress_1 = PyCircularProgress(
value = 80,
progress_color = self.themes["app_color"]["context_color"],
text_color = self.themes["app_color"]["text_title"],
font_size = 14,
bg_color = self.themes["app_color"]["dark_four"]
)
self.circular_progress_1.setFixedSize(200,200)
# CIRCULAR PROGRESS 2
self.circular_progress_2 = PyCircularProgress(
value = 45,
progress_width = 4,
progress_color = self.themes["app_color"]["context_color"],
text_color = self.themes["app_color"]["context_color"],
font_size = 14,
bg_color = self.themes["app_color"]["bg_three"]
)
self.circular_progress_2.setFixedSize(160,160)
# CIRCULAR PROGRESS 3
self.circular_progress_3 = PyCircularProgress(
value = 75,
progress_width = 2,
progress_color = self.themes["app_color"]["pink"],
text_color = self.themes["app_color"]["white"],
font_size = 14,
bg_color = self.themes["app_color"]["bg_three"]
)
self.circular_progress_3.setFixedSize(140,140)
# PY SLIDER 1
self.vertical_slider_1 = PySlider(
margin=8,
bg_size=10,
bg_radius=5,
handle_margin=-3,
handle_size=16,
handle_radius=8,
bg_color = self.themes["app_color"]["dark_three"],
bg_color_hover = self.themes["app_color"]["dark_four"],
handle_color = self.themes["app_color"]["context_color"],
handle_color_hover = self.themes["app_color"]["context_hover"],
handle_color_pressed = self.themes["app_color"]["context_pressed"]
)
self.vertical_slider_1.setMinimumHeight(100)
# PY SLIDER 2
self.vertical_slider_2 = PySlider(
bg_color = self.themes["app_color"]["dark_three"],
bg_color_hover = self.themes["app_color"]["dark_three"],
handle_color = self.themes["app_color"]["context_color"],
handle_color_hover = self.themes["app_color"]["context_hover"],
handle_color_pressed = self.themes["app_color"]["context_pressed"]
)
self.vertical_slider_2.setMinimumHeight(100)
# PY SLIDER 3
self.vertical_slider_3 = PySlider(
margin=8,
bg_size=10,
bg_radius=5,
handle_margin=-3,
handle_size=16,
handle_radius=8,
bg_color = self.themes["app_color"]["dark_three"],
bg_color_hover = self.themes["app_color"]["dark_four"],
handle_color = self.themes["app_color"]["context_color"],
handle_color_hover = self.themes["app_color"]["context_hover"],
handle_color_pressed = self.themes["app_color"]["context_pressed"]
)
self.vertical_slider_3.setOrientation(Qt.Horizontal)
self.vertical_slider_3.setMaximumWidth(200)
# PY SLIDER 4
self.vertical_slider_4 = PySlider(
bg_color = self.themes["app_color"]["dark_three"],
bg_color_hover = self.themes["app_color"]["dark_three"],
handle_color = self.themes["app_color"]["context_color"],
handle_color_hover = self.themes["app_color"]["context_hover"],
handle_color_pressed = self.themes["app_color"]["context_pressed"]
)
self.vertical_slider_4.setOrientation(Qt.Horizontal)
self.vertical_slider_4.setMaximumWidth(200)
# ICON BUTTON 1
self.icon_button_1 = PyIconButton(
icon_path = Functions.set_svg_icon("icon_heart.svg"),
parent = self,
app_parent = self.ui.central_widget,
tooltip_text = "Icon button - Heart",
width = 40,
height = 40,
radius = 20,
dark_one = self.themes["app_color"]["dark_one"],
icon_color = self.themes["app_color"]["icon_color"],
icon_color_hover = self.themes["app_color"]["icon_hover"],
icon_color_pressed = self.themes["app_color"]["icon_active"],
icon_color_active = self.themes["app_color"]["icon_active"],
bg_color = self.themes["app_color"]["dark_one"],
bg_color_hover = self.themes["app_color"]["dark_three"],
bg_color_pressed = self.themes["app_color"]["pink"]
)
# ICON BUTTON 2
self.icon_button_2 = PyIconButton(
icon_path = Functions.set_svg_icon("icon_add_user.svg"),
parent = self,
app_parent = self.ui.central_widget,
tooltip_text = "BTN with tooltip",
width = 40,
height = 40,
radius = 8,
dark_one = self.themes["app_color"]["dark_one"],
icon_color = self.themes["app_color"]["icon_color"],
icon_color_hover = self.themes["app_color"]["icon_hover"],
icon_color_pressed = self.themes["app_color"]["white"],
icon_color_active = self.themes["app_color"]["icon_active"],
bg_color = self.themes["app_color"]["dark_one"],
bg_color_hover = self.themes["app_color"]["dark_three"],
bg_color_pressed = self.themes["app_color"]["green"],
)
# ICON BUTTON 3
self.icon_button_3 = PyIconButton(
icon_path = Functions.set_svg_icon("icon_add_user.svg"),
parent = self,
app_parent = self.ui.central_widget,
tooltip_text = "BTN actived! (is_actived = True)",
width = 40,
height = 40,
radius = 8,
dark_one = self.themes["app_color"]["dark_one"],
icon_color = self.themes["app_color"]["icon_color"],
icon_color_hover = self.themes["app_color"]["icon_hover"],
icon_color_pressed = self.themes["app_color"]["white"],
icon_color_active = self.themes["app_color"]["icon_active"],
bg_color = self.themes["app_color"]["dark_one"],
bg_color_hover = self.themes["app_color"]["dark_three"],
bg_color_pressed = self.themes["app_color"]["context_color"],
is_active = True
)
# PUSH BUTTON 1
self.push_button_1 = PyPushButton(
text = "Button Without Icon",
radius =8,
color = self.themes["app_color"]["text_foreground"],
bg_color = self.themes["app_color"]["dark_one"],
bg_color_hover = self.themes["app_color"]["dark_three"],
bg_color_pressed = self.themes["app_color"]["dark_four"]
)
self.push_button_1.setMinimumHeight(40)
# PUSH BUTTON 2
self.push_button_2 = PyPushButton(
text = "Button With Icon",
radius = 8,
color = self.themes["app_color"]["text_foreground"],
bg_color = self.themes["app_color"]["dark_one"],
bg_color_hover = self.themes["app_color"]["dark_three"],
bg_color_pressed = self.themes["app_color"]["dark_four"]
)
self.icon_2 = QIcon(Functions.set_svg_icon("icon_settings.svg"))
self.push_button_2.setMinimumHeight(40)
self.push_button_2.setIcon(self.icon_2)
# PY LINE EDIT
self.line_edit = PyLineEdit(
text = "",
place_holder_text = "Place holder text",
radius = 8,
border_size = 2,
color = self.themes["app_color"]["text_foreground"],
selection_color = self.themes["app_color"]["white"],
bg_color = self.themes["app_color"]["dark_one"],
bg_color_active = self.themes["app_color"]["dark_three"],
context_color = self.themes["app_color"]["context_color"]
)
self.line_edit.setMinimumHeight(30)
# TOGGLE BUTTON
self.toggle_button = PyToggle(
width = 50,
bg_color = self.themes["app_color"]["dark_two"],
circle_color = self.themes["app_color"]["icon_color"],
active_color = self.themes["app_color"]["context_color"]
)
# TABLE WIDGETS
self.table_widget = PyTableWidget(
radius = 8,
color = self.themes["app_color"]["text_foreground"],
selection_color = self.themes["app_color"]["context_color"],
bg_color = self.themes["app_color"]["bg_two"],
header_horizontal_color = self.themes["app_color"]["dark_two"],
header_vertical_color = self.themes["app_color"]["bg_three"],
bottom_line_color = self.themes["app_color"]["bg_three"],
grid_line_color = self.themes["app_color"]["bg_one"],
scroll_bar_bg_color = self.themes["app_color"]["bg_one"],
scroll_bar_btn_color = self.themes["app_color"]["dark_four"],
context_color = self.themes["app_color"]["context_color"]
)
self.table_widget.setColumnCount(3)
self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table_widget.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.table_widget.setSelectionBehavior(QAbstractItemView.SelectRows)
# Columns / Header
self.column_1 = QTableWidgetItem()
self.column_1.setTextAlignment(Qt.AlignCenter)
self.column_1.setText("NAME")
self.column_2 = QTableWidgetItem()
self.column_2.setTextAlignment(Qt.AlignCenter)
self.column_2.setText("NICK")
self.column_3 = QTableWidgetItem()
self.column_3.setTextAlignment(Qt.AlignCenter)
self.column_3.setText("PASS")
# Set column
self.table_widget.setHorizontalHeaderItem(0, self.column_1)
self.table_widget.setHorizontalHeaderItem(1, self.column_2)
self.table_widget.setHorizontalHeaderItem(2, self.column_3)
for x in range(10):
row_number = self.table_widget.rowCount()
self.table_widget.insertRow(row_number) # Insert row
self.table_widget.setItem(row_number, 0, QTableWidgetItem(str("Wanderson"))) # Add name
self.table_widget.setItem(row_number, 1, QTableWidgetItem(str("vfx_on_fire_" + str(x)))) # Add nick
self.pass_text = QTableWidgetItem()
self.pass_text.setTextAlignment(Qt.AlignCenter)
self.pass_text.setText("12345" + str(x))
self.table_widget.setItem(row_number, 2, self.pass_text) # Add pass
self.table_widget.setRowHeight(row_number, 22)
# ADD WIDGETS
self.ui.load_pages.row_1_layout.addWidget(self.circular_progress_1)
self.ui.load_pages.row_1_layout.addWidget(self.circular_progress_2)
self.ui.load_pages.row_1_layout.addWidget(self.circular_progress_3)
self.ui.load_pages.row_2_layout.addWidget(self.vertical_slider_1)
self.ui.load_pages.row_2_layout.addWidget(self.vertical_slider_2)
self.ui.load_pages.row_2_layout.addWidget(self.vertical_slider_3)
self.ui.load_pages.row_2_layout.addWidget(self.vertical_slider_4)
self.ui.load_pages.row_3_layout.addWidget(self.icon_button_1)
self.ui.load_pages.row_3_layout.addWidget(self.icon_button_2)
self.ui.load_pages.row_3_layout.addWidget(self.icon_button_3)
self.ui.load_pages.row_3_layout.addWidget(self.push_button_1)
self.ui.load_pages.row_3_layout.addWidget(self.push_button_2)
self.ui.load_pages.row_3_layout.addWidget(self.toggle_button)
self.ui.load_pages.row_4_layout.addWidget(self.line_edit)
self.ui.load_pages.row_5_layout.addWidget(self.table_widget)
# RIGHT COLUMN
# ///////////////////////////////////////////////////////////////
# BTN 1
self.right_btn_1 = PyPushButton(
text="Show Menu 2",
radius=8,
color=self.themes["app_color"]["text_foreground"],
bg_color=self.themes["app_color"]["dark_one"],
bg_color_hover=self.themes["app_color"]["dark_three"],
bg_color_pressed=self.themes["app_color"]["dark_four"]
)
self.icon_right = QIcon(Functions.set_svg_icon("icon_arrow_right.svg"))
self.right_btn_1.setIcon(self.icon_right)
self.right_btn_1.setMaximumHeight(40)
self.right_btn_1.clicked.connect(lambda: MainFunctions.set_right_column_menu(
self,
self.ui.right_column.menu_2
))
self.ui.right_column.btn_1_layout.addWidget(self.right_btn_1)
# BTN 2
self.right_btn_2 = PyPushButton(
text="Show Menu 1",
radius=8,
color=self.themes["app_color"]["text_foreground"],
bg_color=self.themes["app_color"]["dark_one"],
bg_color_hover=self.themes["app_color"]["dark_three"],
bg_color_pressed=self.themes["app_color"]["dark_four"]
)
self.icon_left = QIcon(Functions.set_svg_icon("icon_arrow_left.svg"))
self.right_btn_2.setIcon(self.icon_left)
self.right_btn_2.setMaximumHeight(40)
self.right_btn_2.clicked.connect(lambda: MainFunctions.set_right_column_menu(
self,
self.ui.right_column.menu_1
))
self.ui.right_column.btn_2_layout.addWidget(self.right_btn_2)
# ///////////////////////////////////////////////////////////////
# END - EXAMPLE CUSTOM WIDGETS
# ///////////////////////////////////////////////////////////////
# RESIZE GRIPS AND CHANGE POSITION
# Resize or change position when window is resized
# ///////////////////////////////////////////////////////////////
def resize_grips(self):
if self.settings["custom_title_bar"]:
self.left_grip.setGeometry(5, 10, 10, self.height())
self.right_grip.setGeometry(self.width() - 15, 10, 10, self.height())
self.top_grip.setGeometry(5, 5, self.width() - 10, 10)
self.bottom_grip.setGeometry(5, self.height() - 15, self.width() - 10, 10)
self.top_right_grip.setGeometry(self.width() - 20, 5, 15, 15)
self.bottom_left_grip.setGeometry(5, self.height() - 20, 15, 15)
self.bottom_right_grip.setGeometry(self.width() - 20, self.height() - 20, 15, 15)

@ -0,0 +1,305 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.functions import Functions
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT SETTINGS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.json_settings import Settings
# IMPORT THEME COLORS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.json_themes import Themes
# IMPORT PY ONE DARK WIDGETS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.widgets import *
# IMPORT SETUP MAIN WINDOW
# ///////////////////////////////////////////////////////////////
from . setup_main_window import *
# IMPORT MAIN WINDOW PAGES / AND SIDE BOXES FOR APP
# ///////////////////////////////////////////////////////////////
from gui.uis.pages.ui_main_pages import Ui_MainPages
# RIGHT COLUMN
# ///////////////////////////////////////////////////////////////
from gui.uis.columns.ui_right_column import Ui_RightColumn
# CREDITS
# ///////////////////////////////////////////////////////////////
from gui.widgets.py_credits_bar.py_credits import PyCredits
# PY WINDOW
# ///////////////////////////////////////////////////////////////
class UI_MainWindow(object):
def setup_ui(self, parent):
if not parent.objectName():
parent.setObjectName("MainWindow")
# LOAD SETTINGS
# ///////////////////////////////////////////////////////////////
settings = Settings()
self.settings = settings.items
# LOAD THEME COLOR
# ///////////////////////////////////////////////////////////////
themes = Themes()
self.themes = themes.items
# SET INITIAL PARAMETERS
parent.resize(self.settings["startup_size"][0], self.settings["startup_size"][1])
parent.setMinimumSize(self.settings["minimum_size"][0], self.settings["minimum_size"][1])
# SET CENTRAL WIDGET
# Add central widget to app
# ///////////////////////////////////////////////////////////////
self.central_widget = QWidget()
self.central_widget.setStyleSheet(f'''
font: {self.settings["font"]["text_size"]}pt "{self.settings["font"]["family"]}";
color: {self.themes["app_color"]["text_foreground"]};
''')
self.central_widget_layout = QVBoxLayout(self.central_widget)
if self.settings["custom_title_bar"]:
self.central_widget_layout.setContentsMargins(10,10,10,10)
else:
self.central_widget_layout.setContentsMargins(0,0,0,0)
# LOAD PY WINDOW CUSTOM WIDGET
# Add inside PyWindow "layout" all Widgets
# ///////////////////////////////////////////////////////////////
self.window = PyWindow(
parent,
bg_color = self.themes["app_color"]["bg_one"],
border_color = self.themes["app_color"]["bg_two"],
text_color = self.themes["app_color"]["text_foreground"]
)
# If disable custom title bar
if not self.settings["custom_title_bar"]:
self.window.set_stylesheet(border_radius = 0, border_size = 0)
# ADD PY WINDOW TO CENTRAL WIDGET
self.central_widget_layout.addWidget(self.window)
# ADD FRAME LEFT MENU
# Add here the custom left menu bar
# ///////////////////////////////////////////////////////////////
left_menu_margin = self.settings["left_menu_content_margins"]
left_menu_minimum = self.settings["lef_menu_size"]["minimum"]
self.left_menu_frame = QFrame()
self.left_menu_frame.setMaximumSize(left_menu_minimum + (left_menu_margin * 2), 17280)
self.left_menu_frame.setMinimumSize(left_menu_minimum + (left_menu_margin * 2), 0)
# LEFT MENU LAYOUT
self.left_menu_layout = QHBoxLayout(self.left_menu_frame)
self.left_menu_layout.setContentsMargins(
left_menu_margin,
left_menu_margin,
left_menu_margin,
left_menu_margin
)
# ADD LEFT MENU
# Add custom left menu here
# ///////////////////////////////////////////////////////////////
self.left_menu = PyLeftMenu(
parent = self.left_menu_frame,
app_parent = self.central_widget, # For tooltip parent
dark_one = self.themes["app_color"]["dark_one"],
dark_three = self.themes["app_color"]["dark_three"],
dark_four = self.themes["app_color"]["dark_four"],
bg_one = self.themes["app_color"]["bg_one"],
icon_color = self.themes["app_color"]["icon_color"],
icon_color_hover = self.themes["app_color"]["icon_hover"],
icon_color_pressed = self.themes["app_color"]["icon_pressed"],
icon_color_active = self.themes["app_color"]["icon_active"],
context_color = self.themes["app_color"]["context_color"],
text_foreground = self.themes["app_color"]["text_foreground"],
text_active = self.themes["app_color"]["text_active"]
)
self.left_menu_layout.addWidget(self.left_menu)
# ADD LEFT COLUMN
# Add here the left column with Stacked Widgets
# ///////////////////////////////////////////////////////////////
self.left_column_frame = QFrame()
self.left_column_frame.setMaximumWidth(self.settings["left_column_size"]["minimum"])
self.left_column_frame.setMinimumWidth(self.settings["left_column_size"]["minimum"])
self.left_column_frame.setStyleSheet(f"background: {self.themes['app_color']['bg_two']}")
# ADD LAYOUT TO LEFT COLUMN
self.left_column_layout = QVBoxLayout(self.left_column_frame)
self.left_column_layout.setContentsMargins(0,0,0,0)
# ADD CUSTOM LEFT MENU WIDGET
self.left_column = PyLeftColumn(
parent,
app_parent = self.central_widget,
text_title = "Settings Left Frame",
text_title_size = self.settings["font"]["title_size"],
text_title_color = self.themes['app_color']['text_foreground'],
icon_path = Functions.set_svg_icon("icon_settings.svg"),
dark_one = self.themes['app_color']['dark_one'],
bg_color = self.themes['app_color']['bg_three'],
btn_color = self.themes['app_color']['bg_three'],
btn_color_hover = self.themes['app_color']['bg_two'],
btn_color_pressed = self.themes['app_color']['bg_one'],
icon_color = self.themes['app_color']['icon_color'],
icon_color_hover = self.themes['app_color']['icon_hover'],
context_color = self.themes['app_color']['context_color'],
icon_color_pressed = self.themes['app_color']['icon_pressed'],
icon_close_path = Functions.set_svg_icon("icon_close.svg")
)
self.left_column_layout.addWidget(self.left_column)
# ADD RIGHT WIDGETS
# Add here the right widgets
# ///////////////////////////////////////////////////////////////
self.right_app_frame = QFrame()
# ADD RIGHT APP LAYOUT
self.right_app_layout = QVBoxLayout(self.right_app_frame)
self.right_app_layout.setContentsMargins(3,3,3,3)
self.right_app_layout.setSpacing(6)
# ADD TITLE BAR FRAME
# ///////////////////////////////////////////////////////////////
self.title_bar_frame = QFrame()
self.title_bar_frame.setMinimumHeight(40)
self.title_bar_frame.setMaximumHeight(40)
self.title_bar_layout = QVBoxLayout(self.title_bar_frame)
self.title_bar_layout.setContentsMargins(0,0,0,0)
# ADD CUSTOM TITLE BAR TO LAYOUT
self.title_bar = PyTitleBar(
parent,
logo_width = 100,
app_parent = self.central_widget,
logo_image = "logo_top_100x22.svg",
bg_color = self.themes["app_color"]["bg_two"],
div_color = self.themes["app_color"]["bg_three"],
btn_bg_color = self.themes["app_color"]["bg_two"],
btn_bg_color_hover = self.themes["app_color"]["bg_three"],
btn_bg_color_pressed = self.themes["app_color"]["bg_one"],
icon_color = self.themes["app_color"]["icon_color"],
icon_color_hover = self.themes["app_color"]["icon_hover"],
icon_color_pressed = self.themes["app_color"]["icon_pressed"],
icon_color_active = self.themes["app_color"]["icon_active"],
context_color = self.themes["app_color"]["context_color"],
dark_one = self.themes["app_color"]["dark_one"],
text_foreground = self.themes["app_color"]["text_foreground"],
radius = 8,
font_family = self.settings["font"]["family"],
title_size = self.settings["font"]["title_size"],
is_custom_title_bar = self.settings["custom_title_bar"]
)
self.title_bar_layout.addWidget(self.title_bar)
# ADD CONTENT AREA
# ///////////////////////////////////////////////////////////////
self.content_area_frame = QFrame()
# CREATE LAYOUT
self.content_area_layout = QHBoxLayout(self.content_area_frame)
self.content_area_layout.setContentsMargins(0,0,0,0)
self.content_area_layout.setSpacing(0)
# LEFT CONTENT
self.content_area_left_frame = QFrame()
# IMPORT MAIN PAGES TO CONTENT AREA
self.load_pages = Ui_MainPages()
self.load_pages.setupUi(self.content_area_left_frame)
# RIGHT BAR
self.right_column_frame = QFrame()
self.right_column_frame.setMinimumWidth(self.settings["right_column_size"]["minimum"])
self.right_column_frame.setMaximumWidth(self.settings["right_column_size"]["minimum"])
# IMPORT RIGHT COLUMN
# ///////////////////////////////////////////////////////////////
self.content_area_right_layout = QVBoxLayout(self.right_column_frame)
self.content_area_right_layout.setContentsMargins(5,5,5,5)
self.content_area_right_layout.setSpacing(0)
# RIGHT BG
self.content_area_right_bg_frame = QFrame()
self.content_area_right_bg_frame.setObjectName("content_area_right_bg_frame")
self.content_area_right_bg_frame.setStyleSheet(f'''
#content_area_right_bg_frame {{
border-radius: 8px;
background-color: {self.themes["app_color"]["bg_two"]};
}}
''')
# ADD BG
self.content_area_right_layout.addWidget(self.content_area_right_bg_frame)
# ADD RIGHT PAGES TO RIGHT COLUMN
self.right_column = Ui_RightColumn()
self.right_column.setupUi(self.content_area_right_bg_frame)
# ADD TO LAYOUTS
self.content_area_layout.addWidget(self.content_area_left_frame)
self.content_area_layout.addWidget(self.right_column_frame)
# CREDITS / BOTTOM APP FRAME
# ///////////////////////////////////////////////////////////////
self.credits_frame = QFrame()
self.credits_frame.setMinimumHeight(26)
self.credits_frame.setMaximumHeight(26)
# CREATE LAYOUT
self.credits_layout = QVBoxLayout(self.credits_frame)
self.credits_layout.setContentsMargins(0,0,0,0)
# ADD CUSTOM WIDGET CREDITS
self.credits = PyCredits(
bg_two = self.themes["app_color"]["bg_two"],
copyright = self.settings["copyright"],
version = self.settings["version"],
font_family = self.settings["font"]["family"],
text_size = self.settings["font"]["text_size"],
text_description_color = self.themes["app_color"]["text_description"]
)
# ADD TO LAYOUT
self.credits_layout.addWidget(self.credits)
# ADD WIDGETS TO RIGHT LAYOUT
# ///////////////////////////////////////////////////////////////
self.right_app_layout.addWidget(self.title_bar_frame)
self.right_app_layout.addWidget(self.content_area_frame)
self.right_app_layout.addWidget(self.credits_frame)
# ADD WIDGETS TO "PyWindow"
# Add here your custom widgets or default widgets
# ///////////////////////////////////////////////////////////////
self.window.layout.addWidget(self.left_menu_frame)
self.window.layout.addWidget(self.left_column_frame)
self.window.layout.addWidget(self.right_app_frame)
# ADD CENTRAL WIDGET AND SET CONTENT MARGINS
# ///////////////////////////////////////////////////////////////
parent.setCentralWidget(self.central_widget)

@ -0,0 +1,71 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT WIDGETS
# ADD here all custom widgets
# ///////////////////////////////////////////////////////////////
# PY WINDOW
# ///////////////////////////////////////////////////////////////
from . py_window import PyWindow
# RESIZE GRIP
# ///////////////////////////////////////////////////////////////
from . py_grips import PyGrips
# LEFT MENU
# ///////////////////////////////////////////////////////////////
from . py_left_menu import PyLeftMenu
# PY LEFT COLUMN
# ///////////////////////////////////////////////////////////////
from . py_left_column import PyLeftColumn
# PY TITLE BAR
# ///////////////////////////////////////////////////////////////
from . py_title_bar import PyTitleBar
# PY CREDITS
# ///////////////////////////////////////////////////////////////
from . py_credits_bar import PyCredits
# PY PUSH BUTTON
# ///////////////////////////////////////////////////////////////
from . py_push_button import PyPushButton
# PY TOGGLE
# ///////////////////////////////////////////////////////////////
from . py_toggle import PyToggle
# PY SLIDER
# ///////////////////////////////////////////////////////////////
from . py_slider import PySlider
# PY CIRCULAR PROGRESS
# ///////////////////////////////////////////////////////////////
from . py_circular_progress import PyCircularProgress
# PY ICON BUTTON
# ///////////////////////////////////////////////////////////////
from . py_icon_button import PyIconButton
# PY LINE EDIT
# ///////////////////////////////////////////////////////////////
from . py_line_edit import PyLineEdit
# PY TABLE WIDGET
# ///////////////////////////////////////////////////////////////
from . py_table_widget import PyTableWidget

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY TITLE BAR
# ///////////////////////////////////////////////////////////////
from . py_circular_progress import PyCircularProgress

@ -0,0 +1,114 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
class PyCircularProgress(QWidget):
def __init__(
self,
value = 0,
progress_width = 10,
is_rounded = True,
max_value = 100,
progress_color = "#ff79c6",
enable_text = True,
font_family = "Segoe UI",
font_size = 12,
suffix = "%",
text_color = "#ff79c6",
enable_bg = True,
bg_color = "#44475a"
):
QWidget.__init__(self)
# CUSTOM PROPERTIES
self.value = value
self.progress_width = progress_width
self.progress_rounded_cap = is_rounded
self.max_value = max_value
self.progress_color = progress_color
# Text
self.enable_text = enable_text
self.font_family = font_family
self.font_size = font_size
self.suffix = suffix
self.text_color = text_color
# BG
self.enable_bg = enable_bg
self.bg_color = bg_color
# ADD DROPSHADOW
def add_shadow(self, enable):
if enable:
self.shadow = QGraphicsDropShadowEffect(self)
self.shadow.setBlurRadius(15)
self.shadow.setXOffset(0)
self.shadow.setYOffset(0)
self.shadow.setColor(QColor(0, 0, 0, 80))
self.setGraphicsEffect(self.shadow)
# SET VALUE
def set_value(self, value):
self.value = value
self.repaint() # Render progress bar after change value
# PAINT EVENT (DESIGN YOUR CIRCULAR PROGRESS HERE)
def paintEvent(self, e):
# SET PROGRESS PARAMETERS
width = self.width() - self.progress_width
height = self.height() - self.progress_width
margin = self.progress_width / 2
value = self.value * 360 / self.max_value
# PAINTER
paint = QPainter()
paint.begin(self)
paint.setRenderHint(QPainter.Antialiasing) # remove pixelated edges
paint.setFont(QFont(self.font_family, self.font_size))
# CREATE RECTANGLE
rect = QRect(0, 0, self.width(), self.height())
paint.setPen(Qt.NoPen)
# PEN
pen = QPen()
pen.setWidth(self.progress_width)
# Set Round Cap
if self.progress_rounded_cap:
pen.setCapStyle(Qt.RoundCap)
# ENABLE BG
if self.enable_bg:
pen.setColor(QColor(self.bg_color))
paint.setPen(pen)
paint.drawArc(margin, margin, width, height, 0, 360 * 16)
# CREATE ARC / CIRCULAR PROGRESS
pen.setColor(QColor(self.progress_color))
paint.setPen(pen)
paint.drawArc(margin, margin, width, height, -90 * 16, -value * 16)
# CREATE TEXT
if self.enable_text:
pen.setColor(QColor(self.text_color))
paint.setPen(pen)
paint.drawText(rect, Qt.AlignCenter, f"{self.value}{self.suffix}")
# END
paint.end()

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY CREDITS
# ///////////////////////////////////////////////////////////////
from . py_credits import PyCredits

@ -0,0 +1,95 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# PY CREDITS BAR AND VERSION
# ///////////////////////////////////////////////////////////////
class PyCredits(QWidget):
def __init__(
self,
copyright,
version,
bg_two,
font_family,
text_size,
text_description_color,
radius = 8,
padding = 10
):
super().__init__()
# PROPERTIES
self._copyright = copyright
self._version = version
self._bg_two = bg_two
self._font_family = font_family
self._text_size = text_size
self._text_description_color = text_description_color
self._radius = radius
self._padding = padding
# SETUP UI
self.setup_ui()
def setup_ui(self):
# ADD LAYOUT
self.widget_layout = QHBoxLayout(self)
self.widget_layout.setContentsMargins(0,0,0,0)
# BG STYLE
style = f"""
#bg_frame {{
border-radius: {self._radius}px;
background-color: {self._bg_two};
}}
.QLabel {{
font: {self._text_size}pt "{self._font_family}";
color: {self._text_description_color};
padding-left: {self._padding}px;
padding-right: {self._padding}px;
}}
"""
# BG FRAME
self.bg_frame = QFrame()
self.bg_frame.setObjectName("bg_frame")
self.bg_frame.setStyleSheet(style)
# ADD TO LAYOUT
self.widget_layout.addWidget(self.bg_frame)
# ADD BG LAYOUT
self.bg_layout = QHBoxLayout(self.bg_frame)
self.bg_layout.setContentsMargins(0,0,0,0)
# ADD COPYRIGHT TEXT
self.copyright_label = QLabel(self._copyright)
self.copyright_label.setAlignment(Qt.AlignVCenter)
# ADD VERSION TEXT
self.version_label = QLabel(self._version)
self.version_label.setAlignment(Qt.AlignVCenter)
# SEPARATOR
self.separator = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
# ADD TO LAYOUT
self.bg_layout.addWidget(self.copyright_label)
self.bg_layout.addSpacerItem(self.separator)
self.bg_layout.addWidget(self.version_label)

@ -0,0 +1,17 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
from . py_grips import PyGrips

@ -0,0 +1,249 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
import sys
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# PY GRIPS
# ///////////////////////////////////////////////////////////////
class PyGrips(QWidget):
def __init__(self, parent, position, disable_color = False):
# SETUP UI
# ///////////////////////////////////////////////////////////////
super().__init__()
self.parent = parent
self.setParent(parent)
self.wi = Widgets()
# SHOW TOP LEFT GRIP
# ///////////////////////////////////////////////////////////////
if position == "top_left":
self.wi.top_left(self)
grip = QSizeGrip(self.wi.top_left_grip)
grip.setFixedSize(self.wi.top_left_grip.size())
self.setGeometry(5, 5, 15, 15)
# ENABLE COLOR
if disable_color:
self.wi.top_left_grip.setStyleSheet("background: transparent")
# SHOW TOP RIGHT GRIP
# ///////////////////////////////////////////////////////////////
if position == "top_right":
self.wi.top_right(self)
grip = QSizeGrip(self.wi.top_right_grip)
grip.setFixedSize(self.wi.top_right_grip.size())
self.setGeometry(self.parent.width() - 20, 5, 15, 15)
# ENABLE COLOR
if disable_color:
self.wi.top_right_grip.setStyleSheet("background: transparent")
# SHOW BOTTOM LEFT GRIP
# ///////////////////////////////////////////////////////////////
if position == "bottom_left":
self.wi.bottom_left(self)
grip = QSizeGrip(self.wi.bottom_left_grip)
grip.setFixedSize(self.wi.bottom_left_grip.size())
self.setGeometry(5, self.parent.height() - 20, 15, 15)
# ENABLE COLOR
if disable_color:
self.wi.bottom_left_grip.setStyleSheet("background: transparent")
# SHOW BOTTOM RIGHT GRIP
# ///////////////////////////////////////////////////////////////
if position == "bottom_right":
self.wi.bottom_right(self)
grip = QSizeGrip(self.wi.bottom_right_grip)
grip.setFixedSize(self.wi.bottom_right_grip.size())
self.setGeometry(self.parent.width() - 20, self.parent.height() - 20, 15, 15)
# ENABLE COLOR
if disable_color:
self.wi.bottom_right_grip.setStyleSheet("background: transparent")
# SHOW TOP GRIP
# ///////////////////////////////////////////////////////////////
if position == "top":
self.wi.top(self)
self.setGeometry(0, 5, self.parent.width(), 10)
self.setMaximumHeight(10)
# RESIZE TOP
def resize_top(event):
delta = event.pos()
height = max(self.parent.minimumHeight(), self.parent.height() - delta.y())
geo = self.parent.geometry()
geo.setTop(geo.bottom() - height)
self.parent.setGeometry(geo)
event.accept()
self.wi.top_grip.mouseMoveEvent = resize_top
# ENABLE COLOR
if disable_color:
self.wi.top_grip.setStyleSheet("background: transparent")
# SHOW BOTTOM GRIP
# ///////////////////////////////////////////////////////////////
elif position == "bottom":
self.wi.bottom(self)
self.setGeometry(0, self.parent.height() - 10, self.parent.width(), 10)
self.setMaximumHeight(10)
# RESIZE BOTTOM
def resize_bottom(event):
delta = event.pos()
height = max(self.parent.minimumHeight(), self.parent.height() + delta.y())
self.parent.resize(self.parent.width(), height)
event.accept()
self.wi.bottom_grip.mouseMoveEvent = resize_bottom
# ENABLE COLOR
if disable_color:
self.wi.bottom_grip.setStyleSheet("background: transparent")
# SHOW LEFT GRIP
# ///////////////////////////////////////////////////////////////
elif position == "left":
self.wi.left(self)
self.setGeometry(0, 10, 10, self.parent.height())
self.setMaximumWidth(10)
# RESIZE LEFT
def resize_left(event):
delta = event.pos()
width = max(self.parent.minimumWidth(), self.parent.width() - delta.x())
geo = self.parent.geometry()
geo.setLeft(geo.right() - width)
self.parent.setGeometry(geo)
event.accept()
self.wi.left_grip.mouseMoveEvent = resize_left
# ENABLE COLOR
if disable_color:
self.wi.left_grip.setStyleSheet("background: transparent")
# RESIZE RIGHT
# ///////////////////////////////////////////////////////////////
elif position == "right":
self.wi.right(self)
self.setGeometry(self.parent.width() - 10, 10, 10, self.parent.height())
self.setMaximumWidth(10)
def resize_right(event):
delta = event.pos()
width = max(self.parent.minimumWidth(), self.parent.width() + delta.x())
self.parent.resize(width, self.parent.height())
event.accept()
self.wi.right_grip.mouseMoveEvent = resize_right
# ENABLE COLOR
if disable_color:
self.wi.right_grip.setStyleSheet("background: transparent")
# MOUSE RELEASE
# ///////////////////////////////////////////////////////////////
def mouseReleaseEvent(self, event):
self.mousePos = None
# RESIZE EVENT
# ///////////////////////////////////////////////////////////////
def resizeEvent(self, event):
if hasattr(self.wi, 'top_grip'):
self.wi.top_grip.setGeometry(0, 0, self.width(), 10)
elif hasattr(self.wi, 'bottom_grip'):
self.wi.bottom_grip.setGeometry(0, 0, self.width(), 10)
elif hasattr(self.wi, 'left_grip'):
self.wi.left_grip.setGeometry(0, 0, 10, self.height() - 20)
elif hasattr(self.wi, 'right_grip'):
self.wi.right_grip.setGeometry(0, 0, 10, self.height() - 20)
elif hasattr(self.wi, 'top_right_grip'):
self.wi.top_right_grip.setGeometry(self.width() - 15, 0, 15, 15)
elif hasattr(self.wi, 'bottom_left_grip'):
self.wi.bottom_left_grip.setGeometry(0, self.height() - 15, 15, 15)
elif hasattr(self.wi, 'bottom_right_grip'):
self.wi.bottom_right_grip.setGeometry(self.width() - 15, self.height() - 15, 15, 15)
# GRIP WIDGTES
# ///////////////////////////////////////////////////////////////
class Widgets(object):
def top_left(self, form):
self.top_left_grip = QFrame(form)
self.top_left_grip.setObjectName(u"top_left_grip")
self.top_left_grip.setFixedSize(15, 15)
self.top_left_grip.setStyleSheet(u"background-color: #333; border: 2px solid #55FF00;")
def top_right(self, form):
self.top_right_grip = QFrame(form)
self.top_right_grip.setObjectName(u"top_right_grip")
self.top_right_grip.setFixedSize(15, 15)
self.top_right_grip.setStyleSheet(u"background-color: #333; border: 2px solid #55FF00;")
def bottom_left(self, form):
self.bottom_left_grip = QFrame(form)
self.bottom_left_grip.setObjectName(u"bottom_left_grip")
self.bottom_left_grip.setFixedSize(15, 15)
self.bottom_left_grip.setStyleSheet(u"background-color: #333; border: 2px solid #55FF00;")
def bottom_right(self, form):
self.bottom_right_grip = QFrame(form)
self.bottom_right_grip.setObjectName(u"bottom_right_grip")
self.bottom_right_grip.setFixedSize(15, 15)
self.bottom_right_grip.setStyleSheet(u"background-color: #333; border: 2px solid #55FF00;")
def top(self, form):
self.top_grip = QFrame(form)
self.top_grip.setObjectName(u"top_grip")
self.top_grip.setGeometry(QRect(0, 0, 500, 10))
self.top_grip.setStyleSheet(u"background-color: rgb(85, 255, 255);")
self.top_grip.setCursor(QCursor(Qt.SizeVerCursor))
def bottom(self, form):
self.bottom_grip = QFrame(form)
self.bottom_grip.setObjectName(u"bottom_grip")
self.bottom_grip.setGeometry(QRect(0, 0, 500, 10))
self.bottom_grip.setStyleSheet(u"background-color: rgb(85, 170, 0);")
self.bottom_grip.setCursor(QCursor(Qt.SizeVerCursor))
def left(self, form):
self.left_grip = QFrame(form)
self.left_grip.setObjectName(u"left")
self.left_grip.setGeometry(QRect(0, 10, 10, 480))
self.left_grip.setMinimumSize(QSize(10, 0))
self.left_grip.setCursor(QCursor(Qt.SizeHorCursor))
self.left_grip.setStyleSheet(u"background-color: rgb(255, 121, 198);")
def right(self, form):
self.right_grip = QFrame(form)
self.right_grip.setObjectName(u"right")
self.right_grip.setGeometry(QRect(0, 0, 10, 500))
self.right_grip.setMinimumSize(QSize(10, 0))
self.right_grip.setCursor(QCursor(Qt.SizeHorCursor))
self.right_grip.setStyleSheet(u"background-color: rgb(255, 0, 127);")

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY ICON BUTTON
# ///////////////////////////////////////////////////////////////
from . py_icon_button import PyIconButton

@ -0,0 +1,268 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# PY TITLE BUTTON
# ///////////////////////////////////////////////////////////////
class PyIconButton(QPushButton):
def __init__(
self,
icon_path = None,
parent = None,
app_parent = None,
tooltip_text = "",
btn_id = None,
width = 30,
height = 30,
radius = 8,
bg_color = "#343b48",
bg_color_hover = "#3c4454",
bg_color_pressed = "#2c313c",
icon_color = "#c3ccdf",
icon_color_hover = "#dce1ec",
icon_color_pressed = "#edf0f5",
icon_color_active = "#f5f6f9",
dark_one = "#1b1e23",
text_foreground = "#8a95aa",
context_color = "#568af2",
top_margin = 40,
is_active = False
):
super().__init__()
# SET DEFAULT PARAMETERS
self.setFixedSize(width, height)
self.setCursor(Qt.PointingHandCursor)
self.setObjectName(btn_id)
# PROPERTIES
self._bg_color = bg_color
self._bg_color_hover = bg_color_hover
self._bg_color_pressed = bg_color_pressed
self._icon_color = icon_color
self._icon_color_hover = icon_color_hover
self._icon_color_pressed = icon_color_pressed
self._icon_color_active = icon_color_active
self._context_color = context_color
self._top_margin = top_margin
self._is_active = is_active
# Set Parameters
self._set_bg_color = bg_color
self._set_icon_path = icon_path
self._set_icon_color = icon_color
self._set_border_radius = radius
# Parent
self._parent = parent
self._app_parent = app_parent
# TOOLTIP
self._tooltip_text = tooltip_text
self._tooltip = _ToolTip(
app_parent,
tooltip_text,
dark_one,
text_foreground
)
self._tooltip.hide()
# SET ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def set_active(self, is_active):
self._is_active = is_active
self.repaint()
# RETURN IF IS ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def is_active(self):
return self._is_active
# PAINT EVENT
# painting the button and the icon
# ///////////////////////////////////////////////////////////////
def paintEvent(self, event):
# PAINTER
paint = QPainter()
paint.begin(self)
paint.setRenderHint(QPainter.RenderHint.Antialiasing)
if self._is_active:
# BRUSH
brush = QBrush(QColor(self._context_color))
else:
# BRUSH
brush = QBrush(QColor(self._set_bg_color))
# CREATE RECTANGLE
rect = QRect(0, 0, self.width(), self.height())
paint.setPen(Qt.NoPen)
paint.setBrush(brush)
paint.drawRoundedRect(
rect,
self._set_border_radius,
self._set_border_radius
)
# DRAW ICONS
self.icon_paint(paint, self._set_icon_path, rect)
# END PAINTER
paint.end()
# CHANGE STYLES
# Functions with custom styles
# ///////////////////////////////////////////////////////////////
def change_style(self, event):
if event == QEvent.Enter:
self._set_bg_color = self._bg_color_hover
self._set_icon_color = self._icon_color_hover
self.repaint()
elif event == QEvent.Leave:
self._set_bg_color = self._bg_color
self._set_icon_color = self._icon_color
self.repaint()
elif event == QEvent.MouseButtonPress:
self._set_bg_color = self._bg_color_pressed
self._set_icon_color = self._icon_color_pressed
self.repaint()
elif event == QEvent.MouseButtonRelease:
self._set_bg_color = self._bg_color_hover
self._set_icon_color = self._icon_color_hover
self.repaint()
# MOUSE OVER
# Event triggered when the mouse is over the BTN
# ///////////////////////////////////////////////////////////////
def enterEvent(self, event):
self.change_style(QEvent.Enter)
self.move_tooltip()
self._tooltip.show()
# MOUSE LEAVE
# Event fired when the mouse leaves the BTN
# ///////////////////////////////////////////////////////////////
def leaveEvent(self, event):
self.change_style(QEvent.Leave)
self.move_tooltip()
self._tooltip.hide()
# MOUSE PRESS
# Event triggered when the left button is pressed
# ///////////////////////////////////////////////////////////////
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonPress)
# SET FOCUS
self.setFocus()
# EMIT SIGNAL
return self.clicked.emit()
# MOUSE RELEASED
# Event triggered after the mouse button is released
# ///////////////////////////////////////////////////////////////
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonRelease)
# EMIT SIGNAL
return self.released.emit()
# DRAW ICON WITH COLORS
# ///////////////////////////////////////////////////////////////
def icon_paint(self, qp, image, rect):
icon = QPixmap(image)
painter = QPainter(icon)
painter.setCompositionMode(QPainter.CompositionMode_SourceIn)
if self._is_active:
painter.fillRect(icon.rect(), self._icon_color_active)
else:
painter.fillRect(icon.rect(), self._set_icon_color)
qp.drawPixmap(
(rect.width() - icon.width()) / 2,
(rect.height() - icon.height()) / 2,
icon
)
painter.end()
# SET ICON
# ///////////////////////////////////////////////////////////////
def set_icon(self, icon_path):
self._set_icon_path = icon_path
self.repaint()
# MOVE TOOLTIP
# ///////////////////////////////////////////////////////////////
def move_tooltip(self):
# GET MAIN WINDOW PARENT
gp = self.mapToGlobal(QPoint(0, 0))
# SET WIDGET TO GET POSTION
# Return absolute position of widget inside app
pos = self._parent.mapFromGlobal(gp)
# FORMAT POSITION
# Adjust tooltip position with offset
pos_x = (pos.x() - (self._tooltip.width() // 2)) + (self.width() // 2)
pos_y = pos.y() - self._top_margin
# SET POSITION TO WIDGET
# Move tooltip position
self._tooltip.move(pos_x, pos_y)
# TOOLTIP
# ///////////////////////////////////////////////////////////////
class _ToolTip(QLabel):
# TOOLTIP / LABEL StyleSheet
style_tooltip = """
QLabel {{
background-color: {_dark_one};
color: {_text_foreground};
padding-left: 10px;
padding-right: 10px;
border-radius: 17px;
border: 0px solid transparent;
font: 800 9pt "Segoe UI";
}}
"""
def __init__(
self,
parent,
tooltip,
dark_one,
text_foreground
):
QLabel.__init__(self)
# LABEL SETUP
style = self.style_tooltip.format(
_dark_one = dark_one,
_text_foreground = text_foreground
)
self.setObjectName(u"label_tooltip")
self.setStyleSheet(style)
self.setMinimumHeight(34)
self.setParent(parent)
self.setText(tooltip)
self.adjustSize()
# SET DROP SHADOW
self.shadow = QGraphicsDropShadowEffect(self)
self.shadow.setBlurRadius(30)
self.shadow.setXOffset(0)
self.shadow.setYOffset(0)
self.shadow.setColor(QColor(0, 0, 0, 80))
self.setGraphicsEffect(self.shadow)

@ -0,0 +1,20 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY LEFT COLUMN
# Left column with custom widgets
# ///////////////////////////////////////////////////////////////
from . py_left_column import PyLeftColumn

@ -0,0 +1,70 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# PY ICON WITH CUSTOM COLORS
# ///////////////////////////////////////////////////////////////
class PyIcon(QWidget):
def __init__(
self,
icon_path,
icon_color
):
super().__init__()
# PROPERTIES
self._icon_path = icon_path
self._icon_color = icon_color
# SETUP UI
self.setup_ui()
def setup_ui(self):
# LAYOUT
self.layout = QVBoxLayout(self)
self.layout.setContentsMargins(0,0,0,0)
# LABEL
self.icon = QLabel()
self.icon.setAlignment(Qt.AlignCenter)
# PAINTER
self.set_icon(self._icon_path, self._icon_color)
# ADD TO LAYOUT
self.layout.addWidget(self.icon)
def set_icon(self, icon_path, icon_color = None):
# GET COLOR
color = ""
if icon_color != None:
color = icon_color
else:
color = self._icon_color
# PAINTER / PIXMAP
icon = QPixmap(icon_path)
painter = QPainter(icon)
painter.setCompositionMode(QPainter.CompositionMode_SourceIn)
painter.fillRect(icon.rect(), color)
painter.end()
# SET PIXMAP
self.icon.setPixmap(icon)

@ -0,0 +1,271 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# PY TITLE BUTTON
# ///////////////////////////////////////////////////////////////
class PyLeftButton(QPushButton):
def __init__(
self,
parent,
app_parent = None,
tooltip_text = "",
btn_id = None,
width = 30,
height = 30,
radius = 8,
bg_color = "#343b48",
bg_color_hover = "#3c4454",
bg_color_pressed = "#2c313c",
icon_color = "#c3ccdf",
icon_color_hover = "#dce1ec",
icon_color_pressed = "#edf0f5",
icon_color_active = "#f5f6f9",
icon_path = "no_icon.svg",
dark_one = "#1b1e23",
context_color = "#568af2",
text_foreground = "#8a95aa",
is_active = False
):
super().__init__()
# SET DEFAULT PARAMETERS
self.setFixedSize(width, height)
self.setCursor(Qt.PointingHandCursor)
self.setObjectName(btn_id)
# PROPERTIES
self._bg_color = bg_color
self._bg_color_hover = bg_color_hover
self._bg_color_pressed = bg_color_pressed
self._icon_color = icon_color
self._icon_color_hover = icon_color_hover
self._icon_color_pressed = icon_color_pressed
self._icon_color_active = icon_color_active
self._context_color = context_color
self._top_margin = self.height() + 6
self._is_active = is_active
# Set Parameters
self._set_bg_color = bg_color
self._set_icon_path = icon_path
self._set_icon_color = icon_color
self._set_border_radius = radius
# Parent
self._parent = parent
self._app_parent = app_parent
# TOOLTIP
self._tooltip_text = tooltip_text
self._tooltip = _ToolTip(
app_parent,
tooltip_text,
dark_one,
context_color,
text_foreground
)
self._tooltip.hide()
# SET ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def set_active(self, is_active):
self._is_active = is_active
self.repaint()
# RETURN IF IS ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def is_active(self):
return self._is_active
# PAINT EVENT
# painting the button and the icon
# ///////////////////////////////////////////////////////////////
def paintEvent(self, event):
# PAINTER
paint = QPainter()
paint.begin(self)
paint.setRenderHint(QPainter.RenderHint.Antialiasing)
if self._is_active:
# BRUSH
brush = QBrush(QColor(self._bg_color_pressed))
else:
# BRUSH
brush = QBrush(QColor(self._set_bg_color))
# CREATE RECTANGLE
rect = QRect(0, 0, self.width(), self.height())
paint.setPen(Qt.NoPen)
paint.setBrush(brush)
paint.drawRoundedRect(
rect,
self._set_border_radius,
self._set_border_radius
)
# DRAW ICONS
self.icon_paint(paint, self._set_icon_path, rect)
# END PAINTER
paint.end()
# CHANGE STYLES
# Functions with custom styles
# ///////////////////////////////////////////////////////////////
def change_style(self, event):
if event == QEvent.Enter:
self._set_bg_color = self._bg_color_hover
self._set_icon_color = self._icon_color_hover
self.repaint()
elif event == QEvent.Leave:
self._set_bg_color = self._bg_color
self._set_icon_color = self._icon_color
self.repaint()
elif event == QEvent.MouseButtonPress:
self._set_bg_color = self._bg_color_pressed
self._set_icon_color = self._icon_color_pressed
self.repaint()
elif event == QEvent.MouseButtonRelease:
self._set_bg_color = self._bg_color_hover
self._set_icon_color = self._icon_color_hover
self.repaint()
# MOUSE OVER
# Event triggered when the mouse is over the BTN
# ///////////////////////////////////////////////////////////////
def enterEvent(self, event):
self.change_style(QEvent.Enter)
self.move_tooltip()
self._tooltip.show()
# MOUSE LEAVE
# Event fired when the mouse leaves the BTN
# ///////////////////////////////////////////////////////////////
def leaveEvent(self, event):
self.change_style(QEvent.Leave)
self.move_tooltip()
self._tooltip.hide()
# MOUSE PRESS
# Event triggered when the left button is pressed
# ///////////////////////////////////////////////////////////////
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonPress)
# SET FOCUS
self.setFocus()
# EMIT SIGNAL
return self.clicked.emit()
# MOUSE RELEASED
# Event triggered after the mouse button is released
# ///////////////////////////////////////////////////////////////
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonRelease)
# EMIT SIGNAL
return self.released.emit()
# DRAW ICON WITH COLORS
# ///////////////////////////////////////////////////////////////
def icon_paint(self, qp, image, rect):
icon = QPixmap(image)
painter = QPainter(icon)
painter.setCompositionMode(QPainter.CompositionMode_SourceIn)
if self._is_active:
painter.fillRect(icon.rect(), self._context_color)
else:
painter.fillRect(icon.rect(), self._set_icon_color)
qp.drawPixmap(
(rect.width() - icon.width()) / 2,
(rect.height() - icon.height()) / 2,
icon
)
painter.end()
# SET ICON
# ///////////////////////////////////////////////////////////////
def set_icon(self, icon_path):
self._set_icon_path = icon_path
self.repaint()
# MOVE TOOLTIP
# ///////////////////////////////////////////////////////////////
def move_tooltip(self):
# GET MAIN WINDOW PARENT
gp = self.mapToGlobal(QPoint(0, 0))
# SET WIDGET TO GET POSTION
# Return absolute position of widget inside app
pos = self._parent.mapFromGlobal(gp)
# FORMAT POSITION
# Adjust tooltip position with offset
pos_x = (pos.x() - self._tooltip.width()) + self.width() + 5
pos_y = pos.y() + self._top_margin
# SET POSITION TO WIDGET
# Move tooltip position
self._tooltip.move(pos_x, pos_y)
# TOOLTIP
# ///////////////////////////////////////////////////////////////
class _ToolTip(QLabel):
# TOOLTIP / LABEL StyleSheet
style_tooltip = """
QLabel {{
background-color: {_dark_one};
color: {_text_foreground};
padding-left: 10px;
padding-right: 10px;
border-radius: 17px;
border: 0px solid transparent;
border-right: 3px solid {_context_color};
font: 800 9pt "Segoe UI";
}}
"""
def __init__(
self,
parent,
tooltip,
dark_one,
context_color,
text_foreground
):
QLabel.__init__(self)
# LABEL SETUP
style = self.style_tooltip.format(
_dark_one = dark_one,
_context_color = context_color,
_text_foreground = text_foreground
)
self.setObjectName(u"label_tooltip")
self.setStyleSheet(style)
self.setMinimumHeight(34)
self.setParent(parent)
self.setText(tooltip)
self.adjustSize()
# SET DROP SHADOW
self.shadow = QGraphicsDropShadowEffect(self)
self.shadow.setBlurRadius(30)
self.shadow.setXOffset(0)
self.shadow.setYOffset(0)
self.shadow.setColor(QColor(0, 0, 0, 80))
self.setGraphicsEffect(self.shadow)

@ -0,0 +1,194 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT CLOSE BUTTON
# ///////////////////////////////////////////////////////////////
from . py_left_button import *
# IMPORT ICON
# ///////////////////////////////////////////////////////////////
from . py_icon import *
# IMPORT LEFT COLUMN
# ///////////////////////////////////////////////////////////////
from gui.uis.columns.ui_left_column import Ui_LeftColumn
class PyLeftColumn(QWidget):
# SIGNALS
clicked = Signal(object)
released = Signal(object)
def __init__(
self,
parent,
app_parent,
text_title,
text_title_size,
text_title_color,
dark_one,
bg_color,
btn_color,
btn_color_hover,
btn_color_pressed,
icon_path,
icon_color,
icon_color_hover,
icon_color_pressed,
context_color,
icon_close_path,
radius = 8
):
super().__init__()
# PARAMETERS
self._parent = parent
self._app_parent = app_parent
self._text_title = text_title
self._text_title_size = text_title_size
self._text_title_color = text_title_color
self._icon_path = icon_path
self._dark_one = dark_one
self._bg_color = bg_color
self._btn_color = btn_color
self._btn_color_hover = btn_color_hover
self._btn_color_pressed = btn_color_pressed
self._icon_color = icon_color
self._icon_color_hover = icon_color_hover
self._icon_color_pressed = icon_color_pressed
self._context_color = context_color
self._icon_close_path = icon_close_path
self._radius = radius
# SETUP UI
self.setup_ui()
# ADD LEFT COLUMN TO BG FRAME
self.menus = Ui_LeftColumn()
self.menus.setupUi(self.content_frame)
# CONNECT SIGNALS
self.btn_close.clicked.connect(self.btn_clicked)
self.btn_close.released.connect(self.btn_released)
# TITLE LEFT COLUMN EMIT SIGNALS
# ///////////////////////////////////////////////////////////////
def btn_clicked(self):
self.clicked.emit(self.btn_close)
def btn_released(self):
self.released.emit(self.btn_close)
# WIDGETS
# ///////////////////////////////////////////////////////////////
def setup_ui(self):
# BASE LAYOUT
self.base_layout = QVBoxLayout(self)
self.base_layout.setContentsMargins(0,0,0,0)
self.base_layout.setSpacing(0)
# TITLE FRAME
# ///////////////////////////////////////////////////////////////
self.title_frame = QFrame()
self.title_frame.setMaximumHeight(47)
self.title_frame.setMinimumHeight(47)
# TITLE BASE LAYOUT
self.title_base_layout = QVBoxLayout(self.title_frame)
self.title_base_layout.setContentsMargins(5,3,5,3)
# TITLE BG
self.title_bg_frame = QFrame()
self.title_bg_frame.setObjectName("title_bg_frame")
self.title_bg_frame.setStyleSheet(f'''
#title_bg_frame {{
background-color: {self._bg_color};
border-radius: {self._radius}px;
}}
''')
# LAYOUT TITLE BG
self.title_bg_layout = QHBoxLayout(self.title_bg_frame)
self.title_bg_layout.setContentsMargins(5,5,5,5)
self.title_bg_layout.setSpacing(3)
# ICON
self.icon_frame = QFrame()
self.icon_frame.setFixedSize(30,30)
self.icon_frame.setStyleSheet("background: none;")
self.icon_layout = QVBoxLayout(self.icon_frame)
self.icon_layout.setContentsMargins(0,0,0,0)
self.icon_layout.setSpacing(5)
self.icon = PyIcon(self._icon_path, self._icon_color)
self.icon_layout.addWidget(self.icon, Qt.AlignCenter, Qt.AlignCenter)
# LABEL
self.title_label = QLabel(self._text_title)
self.title_label.setObjectName("title_label")
self.title_label.setStyleSheet(f'''
#title_label {{
font-size: {self._text_title_size}pt;
color: {self._text_title_color};
padding-bottom: 2px;
background: none;
}}
''')
# BTN FRAME
self.btn_frame = QFrame()
self.btn_frame.setFixedSize(30,30)
self.btn_frame.setStyleSheet("background: none;")
# CLOSE BUTTON
self.btn_close = PyLeftButton(
self._parent,
self._app_parent,
tooltip_text = "Hide",
dark_one = self._dark_one,
bg_color = self._btn_color,
bg_color_hover = self._btn_color_hover,
bg_color_pressed = self._btn_color_pressed,
icon_color = self._icon_color,
icon_color_hover = self._icon_color_hover,
icon_color_pressed = self._icon_color_pressed,
icon_color_active = self._icon_color_pressed,
context_color = self._context_color,
text_foreground = self._text_title_color,
icon_path = self._icon_close_path,
radius = 6,
)
self.btn_close.setParent(self.btn_frame)
self.btn_close.setObjectName("btn_close_left_column")
# ADD TO TITLE LAYOUT
self.title_bg_layout.addWidget(self.icon_frame)
self.title_bg_layout.addWidget(self.title_label)
self.title_bg_layout.addWidget(self.btn_frame)
# ADD TITLE BG TO LAYOUT
self.title_base_layout.addWidget(self.title_bg_frame)
# CONTENT FRAME
# ///////////////////////////////////////////////////////////////
self.content_frame = QFrame()
self.content_frame.setStyleSheet("background: none")
# ADD TO LAYOUT
# ///////////////////////////////////////////////////////////////
self.base_layout.addWidget(self.title_frame)
self.base_layout.addWidget(self.content_frame)

@ -0,0 +1,20 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY LEFT MENU
# Left menu bar
# ///////////////////////////////////////////////////////////////
from . py_left_menu import PyLeftMenu

@ -0,0 +1,34 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# CUSTOM LEFT MENU
# ///////////////////////////////////////////////////////////////
class PyDiv(QWidget):
def __init__(self, color):
super().__init__()
self.layout = QHBoxLayout(self)
self.layout.setContentsMargins(5,0,5,0)
self.frame_line = QFrame()
self.frame_line.setStyleSheet(f"background: {color};")
self.frame_line.setMaximumHeight(1)
self.frame_line.setMinimumHeight(1)
self.layout.addWidget(self.frame_line)
self.setMaximumHeight(1)

@ -0,0 +1,266 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT BUTTON AND DIV
# ///////////////////////////////////////////////////////////////
from . py_left_menu_button import PyLeftMenuButton
from . py_div import PyDiv
# IMPORT FUNCTIONS
# ///////////////////////////////////////////////////////////////
from gui.core.functions import *
# PY LEFT MENU
# ///////////////////////////////////////////////////////////////
class PyLeftMenu(QWidget):
# SIGNALS
clicked = Signal(object)
released = Signal(object)
def __init__(
self,
parent = None,
app_parent = None,
dark_one = "#1b1e23",
dark_three = "#21252d",
dark_four = "#272c36",
bg_one = "#2c313c",
icon_color = "#c3ccdf",
icon_color_hover = "#dce1ec",
icon_color_pressed = "#edf0f5",
icon_color_active = "#f5f6f9",
context_color = "#568af2",
text_foreground = "#8a95aa",
text_active = "#dce1ec",
duration_time = 500,
radius = 8,
minimum_width = 50,
maximum_width = 240,
icon_path = "icon_menu.svg",
icon_path_close = "icon_menu_close.svg",
toggle_text = "Hide Menu",
toggle_tooltip = "Show menu"
):
super().__init__()
# PROPERTIES
# ///////////////////////////////////////////////////////////////
self._dark_one = dark_one
self._dark_three = dark_three
self._dark_four = dark_four
self._bg_one = bg_one
self._icon_color = icon_color
self._icon_color_hover = icon_color_hover
self._icon_color_pressed = icon_color_pressed
self._icon_color_active = icon_color_active
self._context_color = context_color
self._text_foreground = text_foreground
self._text_active = text_active
self._duration_time = duration_time
self._radius = radius
self._minimum_width = minimum_width
self._maximum_width = maximum_width
self._icon_path = Functions.set_svg_icon(icon_path)
self._icon_path_close = Functions.set_svg_icon(icon_path_close)
# SET PARENT
self._parent = parent
self._app_parent = app_parent
# SETUP WIDGETS
self.setup_ui()
# SET BG COLOR
self.bg.setStyleSheet(f"background: {dark_one}; border-radius: {radius};")
# TOGGLE BUTTON AND DIV MENUS
# ///////////////////////////////////////////////////////////////
self.toggle_button = PyLeftMenuButton(
app_parent,
text = toggle_text,
tooltip_text = toggle_tooltip,
dark_one = self._dark_one,
dark_three = self._dark_three,
dark_four = self._dark_four,
bg_one = self._bg_one,
icon_color = self._icon_color,
icon_color_hover = self._icon_color_active,
icon_color_pressed = self._icon_color_pressed,
icon_color_active = self._icon_color_active,
context_color = self._context_color,
text_foreground = self._text_foreground,
text_active = self._text_active,
icon_path = icon_path
)
self.toggle_button.clicked.connect(self.toggle_animation)
self.div_top = PyDiv(dark_four)
# ADD TO TOP LAYOUT
# ///////////////////////////////////////////////////////////////
self.top_layout.addWidget(self.toggle_button)
self.top_layout.addWidget(self.div_top)
# ADD TO BOTTOM LAYOUT
# ///////////////////////////////////////////////////////////////
self.div_bottom = PyDiv(dark_four)
self.div_bottom.hide()
self.bottom_layout.addWidget(self.div_bottom)
# ADD BUTTONS TO LEFT MENU
# Add btns and emit signals
# ///////////////////////////////////////////////////////////////
def add_menus(self, parameters):
if parameters != None:
for parameter in parameters:
_btn_icon = parameter['btn_icon']
_btn_id = parameter['btn_id']
_btn_text = parameter['btn_text']
_btn_tooltip = parameter['btn_tooltip']
_show_top = parameter['show_top']
_is_active = parameter['is_active']
self.menu = PyLeftMenuButton(
self._app_parent,
text = _btn_text,
btn_id = _btn_id,
tooltip_text = _btn_tooltip,
dark_one = self._dark_one,
dark_three = self._dark_three,
dark_four = self._dark_four,
bg_one = self._bg_one,
icon_color = self._icon_color,
icon_color_hover = self._icon_color_active,
icon_color_pressed = self._icon_color_pressed,
icon_color_active = self._icon_color_active,
context_color = self._context_color,
text_foreground = self._text_foreground,
text_active = self._text_active,
icon_path = _btn_icon,
is_active = _is_active
)
self.menu.clicked.connect(self.btn_clicked)
self.menu.released.connect(self.btn_released)
# ADD TO LAYOUT
if _show_top:
self.top_layout.addWidget(self.menu)
else:
self.div_bottom.show()
self.bottom_layout.addWidget(self.menu)
# LEFT MENU EMIT SIGNALS
# ///////////////////////////////////////////////////////////////
def btn_clicked(self):
self.clicked.emit(self.menu)
def btn_released(self):
self.released.emit(self.menu)
# EXPAND / RETRACT LEF MENU
# ///////////////////////////////////////////////////////////////
def toggle_animation(self):
# CREATE ANIMATION
self.animation = QPropertyAnimation(self._parent, b"minimumWidth")
self.animation.stop()
if self.width() == self._minimum_width:
self.animation.setStartValue(self.width())
self.animation.setEndValue(self._maximum_width)
self.toggle_button.set_active_toggle(True)
self.toggle_button.set_icon(self._icon_path_close)
else:
self.animation.setStartValue(self.width())
self.animation.setEndValue(self._minimum_width)
self.toggle_button.set_active_toggle(False)
self.toggle_button.set_icon(self._icon_path)
self.animation.setEasingCurve(QEasingCurve.InOutCubic)
self.animation.setDuration(self._duration_time)
self.animation.start()
# SELECT ONLY ONE BTN
# ///////////////////////////////////////////////////////////////
def select_only_one(self, widget: str):
for btn in self.findChildren(QPushButton):
if btn.objectName() == widget:
btn.set_active(True)
else:
btn.set_active(False)
# SELECT ONLY ONE TAB BTN
# ///////////////////////////////////////////////////////////////
def select_only_one_tab(self, widget: str):
for btn in self.findChildren(QPushButton):
if btn.objectName() == widget:
btn.set_active_tab(True)
else:
btn.set_active_tab(False)
# DESELECT ALL BTNs
# ///////////////////////////////////////////////////////////////
def deselect_all(self):
for btn in self.findChildren(QPushButton):
btn.set_active(False)
# DESELECT ALL TAB BTNs
# ///////////////////////////////////////////////////////////////
def deselect_all_tab(self):
for btn in self.findChildren(QPushButton):
btn.set_active_tab(False)
# SETUP APP
# ///////////////////////////////////////////////////////////////
def setup_ui(self):
# ADD MENU LAYOUT
self.left_menu_layout = QVBoxLayout(self)
self.left_menu_layout.setContentsMargins(0,0,0,0)
# ADD BG
self.bg = QFrame()
# TOP FRAME
self.top_frame = QFrame()
# BOTTOM FRAME
self.bottom_frame = QFrame()
# ADD LAYOUTS
self._layout = QVBoxLayout(self.bg)
self._layout.setContentsMargins(0,0,0,0)
# TOP LAYOUT
self.top_layout = QVBoxLayout(self.top_frame)
self.top_layout.setContentsMargins(0,0,0,0)
self.top_layout.setSpacing(1)
# BOTTOM LAYOUT
self.bottom_layout = QVBoxLayout(self.bottom_frame)
self.bottom_layout.setContentsMargins(0,0,0,8)
self.bottom_layout.setSpacing(1)
# ADD TOP AND BOTTOM FRAME
self._layout.addWidget(self.top_frame, 0, Qt.AlignTop)
self._layout.addWidget(self.bottom_frame, 0, Qt.AlignBottom)
# ADD BG TO LAYOUT
self.left_menu_layout.addWidget(self.bg)

@ -0,0 +1,380 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
import os
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT FUNCTIONS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.functions import *
# CUSTOM LEFT MENU
# ///////////////////////////////////////////////////////////////
class PyLeftMenuButton(QPushButton):
def __init__(
self,
app_parent,
text,
btn_id = None,
tooltip_text = "",
margin = 4,
dark_one = "#1b1e23",
dark_three = "#21252d",
dark_four = "#272c36",
bg_one = "#2c313c",
icon_color = "#c3ccdf",
icon_color_hover = "#dce1ec",
icon_color_pressed = "#edf0f5",
icon_color_active = "#f5f6f9",
context_color = "#568af2",
text_foreground = "#8a95aa",
text_active = "#dce1ec",
icon_path = "icon_add_user.svg",
icon_active_menu = "active_menu.svg",
is_active = False,
is_active_tab = False,
is_toggle_active = False
):
super().__init__()
self.setText(text)
self.setCursor(Qt.PointingHandCursor)
self.setMaximumHeight(50)
self.setMinimumHeight(50)
self.setObjectName(btn_id)
# APP PATH
self._icon_path = Functions.set_svg_icon(icon_path)
self._icon_active_menu = Functions.set_svg_icon(icon_active_menu)
# PROPERTIES
self._margin = margin
self._dark_one = dark_one
self._dark_three = dark_three
self._dark_four = dark_four
self._bg_one = bg_one
self._context_color = context_color
self._icon_color = icon_color
self._icon_color_hover = icon_color_hover
self._icon_color_pressed = icon_color_pressed
self._icon_color_active = icon_color_active
self._set_icon_color = self._icon_color # Set icon color
self._set_bg_color = self._dark_one # Set BG color
self._set_text_foreground = text_foreground
self._set_text_active = text_active
self._parent = app_parent
self._is_active = is_active
self._is_active_tab = is_active_tab
self._is_toggle_active = is_toggle_active
# TOOLTIP
self._tooltip_text = tooltip_text
self.tooltip = _ToolTip(
app_parent,
tooltip_text,
dark_one,
context_color,
text_foreground
)
self.tooltip.hide()
# PAINT EVENT
# ///////////////////////////////////////////////////////////////
def paintEvent(self, event):
# PAINTER
p = QPainter()
p.begin(self)
p.setRenderHint(QPainter.Antialiasing)
p.setPen(Qt.NoPen)
p.setFont(self.font())
# RECTANGLES
rect = QRect(4, 5, self.width(), self.height() - 10)
rect_inside = QRect(4, 5, self.width() - 8, self.height() - 10)
rect_icon = QRect(0, 0, 50, self.height())
rect_blue = QRect(4, 5, 20, self.height() - 10)
rect_inside_active = QRect(7, 5, self.width(), self.height() - 10)
rect_text = QRect(45, 0, self.width() - 50, self.height())
if self._is_active:
# DRAW BG BLUE
p.setBrush(QColor(self._context_color))
p.drawRoundedRect(rect_blue, 8, 8)
# BG INSIDE
p.setBrush(QColor(self._bg_one))
p.drawRoundedRect(rect_inside_active, 8, 8)
# DRAW ACTIVE
icon_path = self._icon_active_menu
app_path = os.path.abspath(os.getcwd())
icon_path = os.path.normpath(os.path.join(app_path, icon_path))
self._set_icon_color = self._icon_color_active
self.icon_active(p, icon_path, self.width())
# DRAW TEXT
p.setPen(QColor(self._set_text_active))
p.drawText(rect_text, Qt.AlignVCenter, self.text())
# DRAW ICONS
self.icon_paint(p, self._icon_path, rect_icon, self._set_icon_color)
elif self._is_active_tab:
# DRAW BG BLUE
p.setBrush(QColor(self._dark_four))
p.drawRoundedRect(rect_blue, 8, 8)
# BG INSIDE
p.setBrush(QColor(self._bg_one))
p.drawRoundedRect(rect_inside_active, 8, 8)
# DRAW ACTIVE
icon_path = self._icon_active_menu
app_path = os.path.abspath(os.getcwd())
icon_path = os.path.normpath(os.path.join(app_path, icon_path))
self._set_icon_color = self._icon_color_active
self.icon_active(p, icon_path, self.width())
# DRAW TEXT
p.setPen(QColor(self._set_text_active))
p.drawText(rect_text, Qt.AlignVCenter, self.text())
# DRAW ICONS
self.icon_paint(p, self._icon_path, rect_icon, self._set_icon_color)
# NORMAL BG
else:
if self._is_toggle_active:
# BG INSIDE
p.setBrush(QColor(self._dark_three))
p.drawRoundedRect(rect_inside, 8, 8)
# DRAW TEXT
p.setPen(QColor(self._set_text_foreground))
p.drawText(rect_text, Qt.AlignVCenter, self.text())
# DRAW ICONS
if self._is_toggle_active:
self.icon_paint(p, self._icon_path, rect_icon, self._context_color)
else:
self.icon_paint(p, self._icon_path, rect_icon, self._set_icon_color)
else:
# BG INSIDE
p.setBrush(QColor(self._set_bg_color))
p.drawRoundedRect(rect_inside, 8, 8)
# DRAW TEXT
p.setPen(QColor(self._set_text_foreground))
p.drawText(rect_text, Qt.AlignVCenter, self.text())
# DRAW ICONS
self.icon_paint(p, self._icon_path, rect_icon, self._set_icon_color)
p.end()
# SET ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def set_active(self, is_active):
self._is_active = is_active
if not is_active:
self._set_icon_color = self._icon_color
self._set_bg_color = self._dark_one
self.repaint()
# SET ACTIVE TAB MENU
# ///////////////////////////////////////////////////////////////
def set_active_tab(self, is_active):
self._is_active_tab = is_active
if not is_active:
self._set_icon_color = self._icon_color
self._set_bg_color = self._dark_one
self.repaint()
# RETURN IF IS ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def is_active(self):
return self._is_active
# RETURN IF IS ACTIVE TAB MENU
# ///////////////////////////////////////////////////////////////
def is_active_tab(self):
return self._is_active_tab
# SET ACTIVE TOGGLE
# ///////////////////////////////////////////////////////////////
def set_active_toggle(self, is_active):
self._is_toggle_active = is_active
# SET ICON
# ///////////////////////////////////////////////////////////////
def set_icon(self, icon_path):
self._icon_path = icon_path
self.repaint()
# DRAW ICON WITH COLORS
# ///////////////////////////////////////////////////////////////
def icon_paint(self, qp, image, rect, color):
icon = QPixmap(image)
painter = QPainter(icon)
painter.setCompositionMode(QPainter.CompositionMode_SourceIn)
painter.fillRect(icon.rect(), color)
qp.drawPixmap(
(rect.width() - icon.width()) / 2,
(rect.height() - icon.height()) / 2,
icon
)
painter.end()
# DRAW ACTIVE ICON / RIGHT SIDE
# ///////////////////////////////////////////////////////////////
def icon_active(self, qp, image, width):
icon = QPixmap(image)
painter = QPainter(icon)
painter.setCompositionMode(QPainter.CompositionMode_SourceIn)
painter.fillRect(icon.rect(), self._bg_one)
qp.drawPixmap(width - 5, 0, icon)
painter.end()
# CHANGE STYLES
# Functions with custom styles
# ///////////////////////////////////////////////////////////////
def change_style(self, event):
if event == QEvent.Enter:
if not self._is_active:
self._set_icon_color = self._icon_color_hover
self._set_bg_color = self._dark_three
self.repaint()
elif event == QEvent.Leave:
if not self._is_active:
self._set_icon_color = self._icon_color
self._set_bg_color = self._dark_one
self.repaint()
elif event == QEvent.MouseButtonPress:
if not self._is_active:
self._set_icon_color = self._context_color
self._set_bg_color = self._dark_four
self.repaint()
elif event == QEvent.MouseButtonRelease:
if not self._is_active:
self._set_icon_color = self._icon_color_hover
self._set_bg_color = self._dark_three
self.repaint()
# MOUSE OVER
# Event triggered when the mouse is over the BTN
# ///////////////////////////////////////////////////////////////
def enterEvent(self, event):
self.change_style(QEvent.Enter)
if self.width() == 50 and self._tooltip_text:
self.move_tooltip()
self.tooltip.show()
# MOUSE LEAVE
# Event fired when the mouse leaves the BTN
# ///////////////////////////////////////////////////////////////
def leaveEvent(self, event):
self.change_style(QEvent.Leave)
self.tooltip.hide()
# MOUSE PRESS
# Event triggered when the left button is pressed
# ///////////////////////////////////////////////////////////////
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonPress)
self.tooltip.hide()
return self.clicked.emit()
# MOUSE RELEASED
# Event triggered after the mouse button is released
# ///////////////////////////////////////////////////////////////
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonRelease)
return self.released.emit()
# MOVE TOOLTIP
# ///////////////////////////////////////////////////////////////
def move_tooltip(self):
# GET MAIN WINDOW PARENT
gp = self.mapToGlobal(QPoint(0, 0))
# SET WIDGET TO GET POSTION
# Return absolute position of widget inside app
pos = self._parent.mapFromGlobal(gp)
# FORMAT POSITION
# Adjust tooltip position with offset
pos_x = pos.x() + self.width() + 5
pos_y = pos.y() + (self.width() - self.tooltip.height()) // 2
# SET POSITION TO WIDGET
# Move tooltip position
self.tooltip.move(pos_x, pos_y)
class _ToolTip(QLabel):
# TOOLTIP / LABEL StyleSheet
style_tooltip = """
QLabel {{
background-color: {_dark_one};
color: {_text_foreground};
padding-left: 10px;
padding-right: 10px;
border-radius: 17px;
border: 0px solid transparent;
border-left: 3px solid {_context_color};
font: 800 9pt "Segoe UI";
}}
"""
def __init__(
self,
parent,
tooltip,
dark_one,
context_color,
text_foreground
):
QLabel.__init__(self)
# LABEL SETUP
style = self.style_tooltip.format(
_dark_one = dark_one,
_context_color = context_color,
_text_foreground = text_foreground
)
self.setObjectName(u"label_tooltip")
self.setStyleSheet(style)
self.setMinimumHeight(34)
self.setParent(parent)
self.setText(tooltip)
self.adjustSize()
# SET DROP SHADOW
self.shadow = QGraphicsDropShadowEffect(self)
self.shadow.setBlurRadius(30)
self.shadow.setXOffset(0)
self.shadow.setYOffset(0)
self.shadow.setColor(QColor(0, 0, 0, 80))
self.setGraphicsEffect(self.shadow)

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY LINE EDIT
# ///////////////////////////////////////////////////////////////
from . py_line_edit import PyLineEdit

@ -0,0 +1,95 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# STYLE
# ///////////////////////////////////////////////////////////////
style = '''
QLineEdit {{
background-color: {_bg_color};
border-radius: {_radius}px;
border: {_border_size}px solid transparent;
padding-left: 10px;
padding-right: 10px;
selection-color: {_selection_color};
selection-background-color: {_context_color};
color: {_color};
}}
QLineEdit:focus {{
border: {_border_size}px solid {_context_color};
background-color: {_bg_color_active};
}}
'''
# PY PUSH BUTTON
# ///////////////////////////////////////////////////////////////
class PyLineEdit(QLineEdit):
def __init__(
self,
text = "",
place_holder_text = "",
radius = 8,
border_size = 2,
color = "#FFF",
selection_color = "#FFF",
bg_color = "#333",
bg_color_active = "#222",
context_color = "#00ABE8"
):
super().__init__()
# PARAMETERS
if text:
self.setText(text)
if place_holder_text:
self.setPlaceholderText(place_holder_text)
# SET STYLESHEET
self.set_stylesheet(
radius,
border_size,
color,
selection_color,
bg_color,
bg_color_active,
context_color
)
# SET STYLESHEET
def set_stylesheet(
self,
radius,
border_size,
color,
selection_color,
bg_color,
bg_color_active,
context_color
):
# APPLY STYLESHEET
style_format = style.format(
_radius = radius,
_border_size = border_size,
_color = color,
_selection_color = selection_color,
_bg_color = bg_color,
_bg_color_active = bg_color_active,
_context_color = context_color
)
self.setStyleSheet(style_format)

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY PUSH BUTTON
# ///////////////////////////////////////////////////////////////
from . py_push_button import PyPushButton

@ -0,0 +1,71 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# STYLE
# ///////////////////////////////////////////////////////////////
style = '''
QPushButton {{
border: none;
padding-left: 10px;
padding-right: 5px;
color: {_color};
border-radius: {_radius};
background-color: {_bg_color};
}}
QPushButton:hover {{
background-color: {_bg_color_hover};
}}
QPushButton:pressed {{
background-color: {_bg_color_pressed};
}}
'''
# PY PUSH BUTTON
# ///////////////////////////////////////////////////////////////
class PyPushButton(QPushButton):
def __init__(
self,
text,
radius,
color,
bg_color,
bg_color_hover,
bg_color_pressed,
parent = None,
):
super().__init__()
# SET PARAMETRES
self.setText(text)
if parent != None:
self.setParent(parent)
self.setCursor(Qt.PointingHandCursor)
# SET STYLESHEET
custom_style = style.format(
_color = color,
_radius = radius,
_bg_color = bg_color,
_bg_color_hover = bg_color_hover,
_bg_color_pressed = bg_color_pressed
)
self.setStyleSheet(custom_style)

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY SLIDER
# ///////////////////////////////////////////////////////////////
from . py_slider import PySlider

@ -0,0 +1,97 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
style = """
/* HORIZONTAL */
QSlider {{ margin: {_margin}px; }}
QSlider::groove:horizontal {{
border-radius: {_bg_radius}px;
height: {_bg_size}px;
margin: 0px;
background-color: {_bg_color};
}}
QSlider::groove:horizontal:hover {{ background-color: {_bg_color_hover}; }}
QSlider::handle:horizontal {{
border: none;
height: {_handle_size}px;
width: {_handle_size}px;
margin: {_handle_margin}px;
border-radius: {_handle_radius}px;
background-color: {_handle_color};
}}
QSlider::handle:horizontal:hover {{ background-color: {_handle_color_hover}; }}
QSlider::handle:horizontal:pressed {{ background-color: {_handle_color_pressed}; }}
/* VERTICAL */
QSlider::groove:vertical {{
border-radius: {_bg_radius}px;
width: {_bg_size}px;
margin: 0px;
background-color: {_bg_color};
}}
QSlider::groove:vertical:hover {{ background-color: {_bg_color_hover}; }}
QSlider::handle:vertical {{
border: none;
height: {_handle_size}px;
width: {_handle_size}px;
margin: {_handle_margin}px;
border-radius: {_handle_radius}px;
background-color: {_handle_color};
}}
QSlider::handle:vertical:hover {{ background-color: {_handle_color_hover}; }}
QSlider::handle:vertical:pressed {{ background-color: {_handle_color_pressed}; }}
"""
class PySlider(QSlider):
def __init__(
self,
margin = 0,
bg_size = 20,
bg_radius = 10,
bg_color = "#1b1e23",
bg_color_hover = "#1e2229",
handle_margin = 2,
handle_size = 16,
handle_radius = 8,
handle_color = "#568af2",
handle_color_hover = "#6c99f4",
handle_color_pressed = "#3f6fd1"
):
super(PySlider, self).__init__()
# FORMAT STYLE
# ///////////////////////////////////////////////////////////////
adjust_style = style.format(
_margin = margin,
_bg_size = bg_size,
_bg_radius = bg_radius,
_bg_color = bg_color,
_bg_color_hover = bg_color_hover,
_handle_margin = handle_margin,
_handle_size = handle_size,
_handle_radius = handle_radius,
_handle_color = handle_color,
_handle_color_hover = handle_color_hover,
_handle_color_pressed = handle_color_pressed
)
# APPLY CUSTOM STYLE
# ///////////////////////////////////////////////////////////////
self.setStyleSheet(adjust_style)

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY TABLE WIDGET
# ///////////////////////////////////////////////////////////////
from . py_table_widget import PyTableWidget

@ -0,0 +1,90 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT STYLE
# ///////////////////////////////////////////////////////////////
from . style import *
# PY PUSH BUTTON
# ///////////////////////////////////////////////////////////////
class PyTableWidget(QTableWidget):
def __init__(
self,
radius = 8,
color = "#FFF",
bg_color = "#444",
selection_color = "#FFF",
header_horizontal_color = "#333",
header_vertical_color = "#444",
bottom_line_color = "#555",
grid_line_color = "#555",
scroll_bar_bg_color = "#FFF",
scroll_bar_btn_color = "#3333",
context_color = "#00ABE8"
):
super().__init__()
# PARAMETERS
# SET STYLESHEET
self.set_stylesheet(
radius,
color,
bg_color,
header_horizontal_color,
header_vertical_color,
selection_color,
bottom_line_color,
grid_line_color,
scroll_bar_bg_color,
scroll_bar_btn_color,
context_color
)
# SET STYLESHEET
def set_stylesheet(
self,
radius,
color,
bg_color,
header_horizontal_color,
header_vertical_color,
selection_color,
bottom_line_color,
grid_line_color,
scroll_bar_bg_color,
scroll_bar_btn_color,
context_color
):
# APPLY STYLESHEET
style_format = style.format(
_radius = radius,
_color = color,
_bg_color = bg_color,
_header_horizontal_color = header_horizontal_color,
_header_vertical_color = header_vertical_color,
_selection_color = selection_color,
_bottom_line_color = bottom_line_color,
_grid_line_color = grid_line_color,
_scroll_bar_bg_color = scroll_bar_bg_color,
_scroll_bar_btn_color = scroll_bar_btn_color,
_context_color = context_color
)
self.setStyleSheet(style_format)

@ -0,0 +1,135 @@
# STYLE
# ///////////////////////////////////////////////////////////////
style = '''
/* /////////////////////////////////////////////////////////////////////////////////////////////////
QTableWidget */
QTableWidget {{
background-color: {_bg_color};
padding: 5px;
border-radius: {_radius}px;
gridline-color: {_grid_line_color};
color: {_color};
}}
QTableWidget::item{{
border-color: none;
padding-left: 5px;
padding-right: 5px;
gridline-color: rgb(44, 49, 60);
border-bottom: 1px solid {_bottom_line_color};
}}
QTableWidget::item:selected{{
background-color: {_selection_color};
}}
QHeaderView::section{{
background-color: rgb(33, 37, 43);
max-width: 30px;
border: 1px solid rgb(44, 49, 58);
border-style: none;
border-bottom: 1px solid rgb(44, 49, 60);
border-right: 1px solid rgb(44, 49, 60);
}}
QTableWidget::horizontalHeader {{
background-color: rgb(33, 37, 43);
}}
QTableWidget QTableCornerButton::section {{
border: none;
background-color: {_header_horizontal_color};
padding: 3px;
border-top-left-radius: {_radius}px;
}}
QHeaderView::section:horizontal
{{
border: none;
background-color: {_header_horizontal_color};
padding: 3px;
}}
QHeaderView::section:vertical
{{
border: none;
background-color: {_header_vertical_color};
padding-left: 5px;
padding-right: 5px;
border-bottom: 1px solid {_bottom_line_color};
margin-bottom: 1px;
}}
/* /////////////////////////////////////////////////////////////////////////////////////////////////
ScrollBars */
QScrollBar:horizontal {{
border: none;
background: {_scroll_bar_bg_color};
height: 8px;
margin: 0px 21px 0 21px;
border-radius: 0px;
}}
QScrollBar::handle:horizontal {{
background: {_context_color};
min-width: 25px;
border-radius: 4px
}}
QScrollBar::add-line:horizontal {{
border: none;
background: {_scroll_bar_btn_color};
width: 20px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
subcontrol-position: right;
subcontrol-origin: margin;
}}
QScrollBar::sub-line:horizontal {{
border: none;
background: {_scroll_bar_btn_color};
width: 20px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
subcontrol-position: left;
subcontrol-origin: margin;
}}
QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal
{{
background: none;
}}
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
{{
background: none;
}}
QScrollBar:vertical {{
border: none;
background: {_scroll_bar_bg_color};
width: 8px;
margin: 21px 0 21px 0;
border-radius: 0px;
}}
QScrollBar::handle:vertical {{
background: {_context_color};
min-height: 25px;
border-radius: 4px
}}
QScrollBar::add-line:vertical {{
border: none;
background: {_scroll_bar_btn_color};
height: 20px;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}}
QScrollBar::sub-line:vertical {{
border: none;
background: {_scroll_bar_btn_color};
height: 20px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
subcontrol-position: top;
subcontrol-origin: margin;
}}
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical {{
background: none;
}}
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {{
background: none;
}}
'''

@ -0,0 +1,21 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY TITLE BAR
# Top bar with move application, maximize, restore, minimize,
# close buttons and extra buttons
# ///////////////////////////////////////////////////////////////
from . py_title_bar import PyTitleBar

@ -0,0 +1,35 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# CUSTOM LEFT MENU
# ///////////////////////////////////////////////////////////////
class PyDiv(QWidget):
def __init__(self, color):
super().__init__()
self.layout = QHBoxLayout(self)
self.layout.setContentsMargins(0,5,0,5)
self.frame_line = QFrame()
self.frame_line.setStyleSheet(f"background: {color};")
self.frame_line.setMaximumWidth(1)
self.frame_line.setMinimumWidth(1)
self.layout.addWidget(self.frame_line)
self.setMaximumWidth(20)
self.setMinimumWidth(20)

@ -0,0 +1,346 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT FUNCTIONS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.functions import *
# IMPORT SETTINGS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.json_settings import Settings
# IMPORT DIV
# ///////////////////////////////////////////////////////////////
from . py_div import PyDiv
# IMPORT BUTTON
# ///////////////////////////////////////////////////////////////
from . py_title_button import PyTitleButton
# GLOBALS
# ///////////////////////////////////////////////////////////////
_is_maximized = False
_old_size = QSize()
# PY TITLE BAR
# Top bar with move application, maximize, restore, minimize,
# close buttons and extra buttons
# ///////////////////////////////////////////////////////////////
class PyTitleBar(QWidget):
# SIGNALS
clicked = Signal(object)
released = Signal(object)
def __init__(
self,
parent,
app_parent,
logo_image = "logo_top_100x22.svg",
logo_width = 100,
buttons = None,
dark_one = "#1b1e23",
bg_color = "#343b48",
div_color = "#3c4454",
btn_bg_color = "#343b48",
btn_bg_color_hover = "#3c4454",
btn_bg_color_pressed = "#2c313c",
icon_color = "#c3ccdf",
icon_color_hover = "#dce1ec",
icon_color_pressed = "#edf0f5",
icon_color_active = "#f5f6f9",
context_color = "#6c99f4",
text_foreground = "#8a95aa",
radius = 8,
font_family = "Segoe UI",
title_size = 10,
is_custom_title_bar = True,
):
super().__init__()
settings = Settings()
self.settings = settings.items
# PARAMETERS
self._logo_image = logo_image
self._dark_one = dark_one
self._bg_color = bg_color
self._div_color = div_color
self._parent = parent
self._app_parent = app_parent
self._btn_bg_color = btn_bg_color
self._btn_bg_color_hover = btn_bg_color_hover
self._btn_bg_color_pressed = btn_bg_color_pressed
self._context_color = context_color
self._icon_color = icon_color
self._icon_color_hover = icon_color_hover
self._icon_color_pressed = icon_color_pressed
self._icon_color_active = icon_color_active
self._font_family = font_family
self._title_size = title_size
self._text_foreground = text_foreground
self._is_custom_title_bar = is_custom_title_bar
# SETUP UI
self.setup_ui()
# ADD BG COLOR
self.bg.setStyleSheet(f"background-color: {bg_color}; border-radius: {radius}px;")
# SET LOGO AND WIDTH
self.top_logo.setMinimumWidth(logo_width)
self.top_logo.setMaximumWidth(logo_width)
#self.top_logo.setPixmap(Functions.set_svg_image(logo_image))
# MOVE WINDOW / MAXIMIZE / RESTORE
# ///////////////////////////////////////////////////////////////
def moveWindow(event):
# IF MAXIMIZED CHANGE TO NORMAL
if parent.isMaximized():
self.maximize_restore()
#self.resize(_old_size)
curso_x = parent.pos().x()
curso_y = event.globalPos().y() - QCursor.pos().y()
parent.move(curso_x, curso_y)
# MOVE WINDOW
if event.buttons() == Qt.LeftButton:
parent.move(parent.pos() + event.globalPos() - parent.dragPos)
parent.dragPos = event.globalPos()
event.accept()
# MOVE APP WIDGETS
if is_custom_title_bar:
self.top_logo.mouseMoveEvent = moveWindow
self.div_1.mouseMoveEvent = moveWindow
self.title_label.mouseMoveEvent = moveWindow
self.div_2.mouseMoveEvent = moveWindow
self.div_3.mouseMoveEvent = moveWindow
# MAXIMIZE / RESTORE
if is_custom_title_bar:
self.top_logo.mouseDoubleClickEvent = self.maximize_restore
self.div_1.mouseDoubleClickEvent = self.maximize_restore
self.title_label.mouseDoubleClickEvent = self.maximize_restore
self.div_2.mouseDoubleClickEvent = self.maximize_restore
# ADD WIDGETS TO TITLE BAR
# ///////////////////////////////////////////////////////////////
self.bg_layout.addWidget(self.top_logo)
self.bg_layout.addWidget(self.div_1)
self.bg_layout.addWidget(self.title_label)
self.bg_layout.addWidget(self.div_2)
# ADD BUTTONS BUTTONS
# ///////////////////////////////////////////////////////////////
# Functions
self.minimize_button.released.connect(lambda: parent.showMinimized())
self.maximize_restore_button.released.connect(lambda: self.maximize_restore())
self.close_button.released.connect(lambda: parent.close())
# Extra BTNs layout
self.bg_layout.addLayout(self.custom_buttons_layout)
# ADD Buttons
if is_custom_title_bar:
self.bg_layout.addWidget(self.minimize_button)
self.bg_layout.addWidget(self.maximize_restore_button)
self.bg_layout.addWidget(self.close_button)
# ADD BUTTONS TO TITLE BAR
# Add btns and emit signals
# ///////////////////////////////////////////////////////////////
def add_menus(self, parameters):
if parameters != None and len(parameters) > 0:
for parameter in parameters:
_btn_icon = Functions.set_svg_icon(parameter['btn_icon'])
_btn_id = parameter['btn_id']
_btn_tooltip = parameter['btn_tooltip']
_is_active = parameter['is_active']
self.menu = PyTitleButton(
self._parent,
self._app_parent,
btn_id = _btn_id,
tooltip_text = _btn_tooltip,
dark_one = self._dark_one,
bg_color = self._bg_color,
bg_color_hover = self._btn_bg_color_hover,
bg_color_pressed = self._btn_bg_color_pressed,
icon_color = self._icon_color,
icon_color_hover = self._icon_color_active,
icon_color_pressed = self._icon_color_pressed,
icon_color_active = self._icon_color_active,
context_color = self._context_color,
text_foreground = self._text_foreground,
icon_path = _btn_icon,
is_active = _is_active
)
self.menu.clicked.connect(self.btn_clicked)
self.menu.released.connect(self.btn_released)
# ADD TO LAYOUT
self.custom_buttons_layout.addWidget(self.menu)
# ADD DIV
if self._is_custom_title_bar:
self.custom_buttons_layout.addWidget(self.div_3)
# TITLE BAR MENU EMIT SIGNALS
# ///////////////////////////////////////////////////////////////
def btn_clicked(self):
self.clicked.emit(self.menu)
def btn_released(self):
self.released.emit(self.menu)
# SET TITLE BAR TEXT
# ///////////////////////////////////////////////////////////////
def set_title(self, title):
self.title_label.setText(title)
# MAXIMIZE / RESTORE
# maximize and restore parent window
# ///////////////////////////////////////////////////////////////
def maximize_restore(self, e = None):
global _is_maximized
global _old_size
# CHANGE UI AND RESIZE GRIP
def change_ui():
if _is_maximized:
self._parent.ui.central_widget_layout.setContentsMargins(0,0,0,0)
self._parent.ui.window.set_stylesheet(border_radius = 0, border_size = 0)
self.maximize_restore_button.set_icon(
Functions.set_svg_icon("icon_restore.svg")
)
else:
self._parent.ui.central_widget_layout.setContentsMargins(10,10,10,10)
self._parent.ui.window.set_stylesheet(border_radius = 10, border_size = 2)
self.maximize_restore_button.set_icon(
Functions.set_svg_icon("icon_maximize.svg")
)
# CHECK EVENT
if self._parent.isMaximized():
_is_maximized = False
self._parent.showNormal()
change_ui()
else:
_is_maximized = True
_old_size = QSize(self._parent.width(), self._parent.height())
self._parent.showMaximized()
change_ui()
# SETUP APP
# ///////////////////////////////////////////////////////////////
def setup_ui(self):
# ADD MENU LAYOUT
self.title_bar_layout = QVBoxLayout(self)
self.title_bar_layout.setContentsMargins(0,0,0,0)
# ADD BG
self.bg = QFrame()
# ADD BG LAYOUT
self.bg_layout = QHBoxLayout(self.bg)
self.bg_layout.setContentsMargins(10,0,5,0)
self.bg_layout.setSpacing(0)
# DIVS
self.div_1 = PyDiv(self._div_color)
self.div_2 = PyDiv(self._div_color)
self.div_3 = PyDiv(self._div_color)
# LEFT FRAME WITH MOVE APP
self.top_logo = QLabel()
self.top_logo_layout = QVBoxLayout(self.top_logo)
self.top_logo_layout.setContentsMargins(0,0,0,0)
self.logo_svg = QSvgWidget()
self.logo_svg.load(Functions.set_svg_image(self._logo_image))
self.top_logo_layout.addWidget(self.logo_svg, Qt.AlignCenter, Qt.AlignCenter)
# TITLE LABEL
self.title_label = QLabel()
self.title_label.setAlignment(Qt.AlignVCenter)
self.title_label.setStyleSheet(f'font: {self._title_size}pt "{self._font_family}"')
# CUSTOM BUTTONS LAYOUT
self.custom_buttons_layout = QHBoxLayout()
self.custom_buttons_layout.setContentsMargins(0,0,0,0)
self.custom_buttons_layout.setSpacing(3)
# MINIMIZE BUTTON
self.minimize_button = PyTitleButton(
self._parent,
self._app_parent,
tooltip_text = "Close app",
dark_one = self._dark_one,
bg_color = self._btn_bg_color,
bg_color_hover = self._btn_bg_color_hover,
bg_color_pressed = self._btn_bg_color_pressed,
icon_color = self._icon_color,
icon_color_hover = self._icon_color_hover,
icon_color_pressed = self._icon_color_pressed,
icon_color_active = self._icon_color_active,
context_color = self._context_color,
text_foreground = self._text_foreground,
radius = 6,
icon_path = Functions.set_svg_icon("icon_minimize.svg")
)
# MAXIMIZE / RESTORE BUTTON
self.maximize_restore_button = PyTitleButton(
self._parent,
self._app_parent,
tooltip_text = "Maximize app",
dark_one = self._dark_one,
bg_color = self._btn_bg_color,
bg_color_hover = self._btn_bg_color_hover,
bg_color_pressed = self._btn_bg_color_pressed,
icon_color = self._icon_color,
icon_color_hover = self._icon_color_hover,
icon_color_pressed = self._icon_color_pressed,
icon_color_active = self._icon_color_active,
context_color = self._context_color,
text_foreground = self._text_foreground,
radius = 6,
icon_path = Functions.set_svg_icon("icon_maximize.svg")
)
# CLOSE BUTTON
self.close_button = PyTitleButton(
self._parent,
self._app_parent,
tooltip_text = "Close app",
dark_one = self._dark_one,
bg_color = self._btn_bg_color,
bg_color_hover = self._btn_bg_color_hover,
bg_color_pressed = self._context_color,
icon_color = self._icon_color,
icon_color_hover = self._icon_color_hover,
icon_color_pressed = self._icon_color_active,
icon_color_active = self._icon_color_active,
context_color = self._context_color,
text_foreground = self._text_foreground,
radius = 6,
icon_path = Functions.set_svg_icon("icon_close.svg")
)
# ADD TO LAYOUT
self.title_bar_layout.addWidget(self.bg)

@ -0,0 +1,271 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# PY TITLE BUTTON
# ///////////////////////////////////////////////////////////////
class PyTitleButton(QPushButton):
def __init__(
self,
parent,
app_parent = None,
tooltip_text = "",
btn_id = None,
width = 30,
height = 30,
radius = 8,
bg_color = "#343b48",
bg_color_hover = "#3c4454",
bg_color_pressed = "#2c313c",
icon_color = "#c3ccdf",
icon_color_hover = "#dce1ec",
icon_color_pressed = "#edf0f5",
icon_color_active = "#f5f6f9",
icon_path = "no_icon.svg",
dark_one = "#1b1e23",
context_color = "#568af2",
text_foreground = "#8a95aa",
is_active = False
):
super().__init__()
# SET DEFAULT PARAMETERS
self.setFixedSize(width, height)
self.setCursor(Qt.PointingHandCursor)
self.setObjectName(btn_id)
# PROPERTIES
self._bg_color = bg_color
self._bg_color_hover = bg_color_hover
self._bg_color_pressed = bg_color_pressed
self._icon_color = icon_color
self._icon_color_hover = icon_color_hover
self._icon_color_pressed = icon_color_pressed
self._icon_color_active = icon_color_active
self._context_color = context_color
self._top_margin = self.height() + 6
self._is_active = is_active
# Set Parameters
self._set_bg_color = bg_color
self._set_icon_path = icon_path
self._set_icon_color = icon_color
self._set_border_radius = radius
# Parent
self._parent = parent
self._app_parent = app_parent
# TOOLTIP
self._tooltip_text = tooltip_text
self._tooltip = _ToolTip(
app_parent,
tooltip_text,
dark_one,
context_color,
text_foreground
)
self._tooltip.hide()
# SET ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def set_active(self, is_active):
self._is_active = is_active
self.repaint()
# RETURN IF IS ACTIVE MENU
# ///////////////////////////////////////////////////////////////
def is_active(self):
return self._is_active
# PAINT EVENT
# painting the button and the icon
# ///////////////////////////////////////////////////////////////
def paintEvent(self, event):
# PAINTER
paint = QPainter()
paint.begin(self)
paint.setRenderHint(QPainter.RenderHint.Antialiasing)
if self._is_active:
# BRUSH
brush = QBrush(QColor(self._context_color))
else:
# BRUSH
brush = QBrush(QColor(self._set_bg_color))
# CREATE RECTANGLE
rect = QRect(0, 0, self.width(), self.height())
paint.setPen(Qt.NoPen)
paint.setBrush(brush)
paint.drawRoundedRect(
rect,
self._set_border_radius,
self._set_border_radius
)
# DRAW ICONS
self.icon_paint(paint, self._set_icon_path, rect)
# END PAINTER
paint.end()
# CHANGE STYLES
# Functions with custom styles
# ///////////////////////////////////////////////////////////////
def change_style(self, event):
if event == QEvent.Enter:
self._set_bg_color = self._bg_color_hover
self._set_icon_color = self._icon_color_hover
self.repaint()
elif event == QEvent.Leave:
self._set_bg_color = self._bg_color
self._set_icon_color = self._icon_color
self.repaint()
elif event == QEvent.MouseButtonPress:
self._set_bg_color = self._bg_color_pressed
self._set_icon_color = self._icon_color_pressed
self.repaint()
elif event == QEvent.MouseButtonRelease:
self._set_bg_color = self._bg_color_hover
self._set_icon_color = self._icon_color_hover
self.repaint()
# MOUSE OVER
# Event triggered when the mouse is over the BTN
# ///////////////////////////////////////////////////////////////
def enterEvent(self, event):
self.change_style(QEvent.Enter)
self.move_tooltip()
self._tooltip.show()
# MOUSE LEAVE
# Event fired when the mouse leaves the BTN
# ///////////////////////////////////////////////////////////////
def leaveEvent(self, event):
self.change_style(QEvent.Leave)
self.move_tooltip()
self._tooltip.hide()
# MOUSE PRESS
# Event triggered when the left button is pressed
# ///////////////////////////////////////////////////////////////
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonPress)
# SET FOCUS
self.setFocus()
# EMIT SIGNAL
return self.clicked.emit()
# MOUSE RELEASED
# Event triggered after the mouse button is released
# ///////////////////////////////////////////////////////////////
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.change_style(QEvent.MouseButtonRelease)
# EMIT SIGNAL
return self.released.emit()
# DRAW ICON WITH COLORS
# ///////////////////////////////////////////////////////////////
def icon_paint(self, qp, image, rect):
icon = QPixmap(image)
painter = QPainter(icon)
painter.setCompositionMode(QPainter.CompositionMode_SourceIn)
if self._is_active:
painter.fillRect(icon.rect(), self._icon_color_active)
else:
painter.fillRect(icon.rect(), self._set_icon_color)
qp.drawPixmap(
(rect.width() - icon.width()) / 2,
(rect.height() - icon.height()) / 2,
icon
)
painter.end()
# SET ICON
# ///////////////////////////////////////////////////////////////
def set_icon(self, icon_path):
self._set_icon_path = icon_path
self.repaint()
# MOVE TOOLTIP
# ///////////////////////////////////////////////////////////////
def move_tooltip(self):
# GET MAIN WINDOW PARENT
gp = self.mapToGlobal(QPoint(0, 0))
# SET WIDGET TO GET POSTION
# Return absolute position of widget inside app
pos = self._parent.mapFromGlobal(gp)
# FORMAT POSITION
# Adjust tooltip position with offset
pos_x = (pos.x() - self._tooltip.width()) + self.width() + 5
pos_y = pos.y() + self._top_margin
# SET POSITION TO WIDGET
# Move tooltip position
self._tooltip.move(pos_x, pos_y)
# TOOLTIP
# ///////////////////////////////////////////////////////////////
class _ToolTip(QLabel):
# TOOLTIP / LABEL StyleSheet
style_tooltip = """
QLabel {{
background-color: {_dark_one};
color: {_text_foreground};
padding-left: 10px;
padding-right: 10px;
border-radius: 17px;
border: 0px solid transparent;
border-right: 3px solid {_context_color};
font: 800 9pt "Segoe UI";
}}
"""
def __init__(
self,
parent,
tooltip,
dark_one,
context_color,
text_foreground
):
QLabel.__init__(self)
# LABEL SETUP
style = self.style_tooltip.format(
_dark_one = dark_one,
_context_color = context_color,
_text_foreground = text_foreground
)
self.setObjectName(u"label_tooltip")
self.setStyleSheet(style)
self.setMinimumHeight(34)
self.setParent(parent)
self.setText(tooltip)
self.adjustSize()
# SET DROP SHADOW
self.shadow = QGraphicsDropShadowEffect(self)
self.shadow.setBlurRadius(30)
self.shadow.setXOffset(0)
self.shadow.setYOffset(0)
self.shadow.setColor(QColor(0, 0, 0, 80))
self.setGraphicsEffect(self.shadow)

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# PY PUSH BUTTON
# ///////////////////////////////////////////////////////////////
from . py_toggle import PyToggle

@ -0,0 +1,88 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
class PyToggle(QCheckBox):
def __init__(
self,
width = 50,
bg_color = "#777",
circle_color = "#DDD",
active_color = "#00BCFF",
animation_curve = QEasingCurve.OutBounce
):
QCheckBox.__init__(self)
self.setFixedSize(width, 28)
self.setCursor(Qt.PointingHandCursor)
# COLORS
self._bg_color = bg_color
self._circle_color = circle_color
self._active_color = active_color
self._position = 3
self.animation = QPropertyAnimation(self, b"position")
self.animation.setEasingCurve(animation_curve)
self.animation.setDuration(500)
self.stateChanged.connect(self.setup_animation)
@Property(float)
def position(self):
return self._position
@position.setter
def position(self, pos):
self._position = pos
self.update()
# START STOP ANIMATION
def setup_animation(self, value):
self.animation.stop()
if value:
self.animation.setEndValue(self.width() - 26)
else:
self.animation.setEndValue(4)
self.animation.start()
def hitButton(self, pos: QPoint):
return self.contentsRect().contains(pos)
def paintEvent(self, e):
p = QPainter(self)
p.setRenderHint(QPainter.Antialiasing)
p.setFont(QFont("Segoe UI", 9))
# SET PEN
p.setPen(Qt.NoPen)
# DRAW RECT
rect = QRect(0, 0, self.width(), self.height())
if not self.isChecked():
p.setBrush(QColor(self._bg_color))
p.drawRoundedRect(0,0,rect.width(), 28, 14, 14)
p.setBrush(QColor(self._circle_color))
p.drawEllipse(self._position, 3, 22, 22)
else:
p.setBrush(QColor(self._active_color))
p.drawRoundedRect(0,0,rect.width(), 28, 14, 14)
p.setBrush(QColor(self._circle_color))
p.drawEllipse(self._position, 3, 22, 22)
p.end()

@ -0,0 +1,19 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT WIDGETS
# ///////////////////////////////////////////////////////////////
from . py_window import PyWindow

@ -0,0 +1,141 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from src.educoder.qt_core import *
# IMPORT SETTINGS
# ///////////////////////////////////////////////////////////////
from src.educoder.gui.core.json_settings import Settings
# IMPORT STYLES
# ///////////////////////////////////////////////////////////////
from . styles import Styles
# PY WINDOW
# ///////////////////////////////////////////////////////////////
class PyWindow(QFrame):
def __init__(
self,
parent,
layout = Qt.Vertical,
margin = 0,
spacing = 2,
bg_color = "#2c313c",
text_color = "#fff",
text_font = "9pt 'Segoe UI'",
border_radius = 10,
border_size = 2,
border_color = "#343b48",
enable_shadow = True
):
super().__init__()
# LOAD SETTINGS
# ///////////////////////////////////////////////////////////////
settings = Settings()
self.settings = settings.items
# PROPERTIES
# ///////////////////////////////////////////////////////////////
self.parent = parent
self.layout = layout
self.margin = margin
self.bg_color = bg_color
self.text_color = text_color
self.text_font = text_font
self.border_radius = border_radius
self.border_size = border_size
self.border_color = border_color
self.enable_shadow = enable_shadow
# OBJECT NAME
# ///////////////////////////////////////////////////////////////
self.setObjectName("pod_bg_app")
# APPLY STYLESHEET
# ///////////////////////////////////////////////////////////////
self.set_stylesheet()
# ADD LAYOUT
# ///////////////////////////////////////////////////////////////
if layout == Qt.Vertical:
# VERTICAL LAYOUT
self.layout = QHBoxLayout(self)
else:
# HORIZONTAL LAYOUT
self.layout = QHBoxLayout(self)
self.layout.setContentsMargins(margin, margin, margin, margin)
self.layout.setSpacing(spacing)
# ADD DROP SHADOW
# ///////////////////////////////////////////////////////////////
if self.settings["custom_title_bar"]:
if enable_shadow:
self.shadow = QGraphicsDropShadowEffect()
self.shadow.setBlurRadius(20)
self.shadow.setXOffset(0)
self.shadow.setYOffset(0)
self.shadow.setColor(QColor(0, 0, 0, 160))
self.setGraphicsEffect(self.shadow)
# APPLY AND UPDATE STYLESHEET
# ///////////////////////////////////////////////////////////////
def set_stylesheet(
self,
bg_color = None,
border_radius = None,
border_size = None,
border_color = None,
text_color = None,
text_font = None
):
# CHECK BG COLOR
if bg_color != None: internal_bg_color = bg_color
else: internal_bg_color = self.bg_color
# CHECK BORDER RADIUS
if border_radius != None: internal_border_radius = border_radius
else: internal_border_radius = self.border_radius
# CHECK BORDER SIZE
if border_size != None: internal_border_size = border_size
else: internal_border_size = self.border_size
# CHECK BORDER COLOR
if text_color != None: internal_text_color = text_color
else: internal_text_color = self.text_color
# CHECK TEXT COLOR
if border_color != None: internal_border_color = border_color
else: internal_border_color = self.border_color
# CHECK TEXT COLOR
if text_font != None: internal_text_font = text_font
else: internal_text_font = self.text_font
self.setStyleSheet(Styles.bg_style.format(
_bg_color = internal_bg_color,
_border_radius = internal_border_radius,
_border_size = internal_border_size,
_border_color = internal_border_color,
_text_color = internal_text_color,
_text_font = internal_text_font
))

@ -0,0 +1,28 @@
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
class Styles(object):
bg_style = """
#pod_bg_app {{
background-color: {_bg_color};
border-radius: {_border_radius};
border: {_border_size}px solid {_border_color};
}}
QFrame {{
color: {_text_color};
font: {_text_font};
}}
"""

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

@ -1,18 +1,224 @@
from PySide6.QtWidgets import *
import sqlite3
# ///////////////////////////////////////////////////////////////
#
# BY: WANDERSON M.PIMENTA
# PROJECT MADE WITH: Qt Designer and PySide6
# V: 1.0.0
#
# This project can be used freely for all uses, as long as they maintain the
# respective credits only in the Python scripts, any information in the visual
# interface (GUI) can be modified without any implication.
#
# There are limitations on Qt licenses if you want to use your products
# commercially, I recommend reading them on the official website:
# https://doc.qt.io/qtforpython/licenses.html
#
# ///////////////////////////////////////////////////////////////
class Window:
# IMPORT PACKAGES AND MODULES
# ///////////////////////////////////////////////////////////////
from gui.uis.windows.main_window.functions_main_window import *
import sys
import os
# IMPORT QT CORE
# ///////////////////////////////////////////////////////////////
from qt_core import *
# IMPORT SETTINGS
# ///////////////////////////////////////////////////////////////
from gui.core.json_settings import Settings
# IMPORT PY ONE DARK WINDOWS
# ///////////////////////////////////////////////////////////////
# MAIN WINDOW
from gui.uis.windows.main_window import *
# IMPORT PY ONE DARK WIDGETS
# ///////////////////////////////////////////////////////////////
from gui.widgets import *
# ADJUST QT FONT DPI FOR HIGHT SCALE AN 4K MONITOR
# ///////////////////////////////////////////////////////////////
os.environ["QT_FONT_DPI"] = "96"
# IF IS 4K MONITOR ENABLE 'os.environ["QT_SCALE_FACTOR"] = "2"'
# MAIN WINDOW
# ///////////////////////////////////////////////////////////////
class MainWindow(QMainWindow):
def __init__(self):
# 初始化窗口
self.win = QMainWindow()
self.win.resize(500, 400)
self.win.move(700, 210)
self.win.setWindowTitle("测试窗口")
if __name__ == '__main__':
conn = sqlite3.connect('../../data/lib_manager.db')
app = QApplication([])
w = Window()
w.win.show()
app.exec()
super().__init__()
# SETUP MAIN WINDOw
# Load widgets from "gui\uis\main_window\ui_main.py"
# ///////////////////////////////////////////////////////////////
self.ui = UI_MainWindow()
self.ui.setup_ui(self)
# LOAD SETTINGS
# ///////////////////////////////////////////////////////////////
settings = Settings()
self.settings = settings.items
# SETUP MAIN WINDOW
# ///////////////////////////////////////////////////////////////
self.hide_grips = True # Show/Hide resize grips
SetupMainWindow.setup_gui(self)
# SHOW MAIN WINDOW
# ///////////////////////////////////////////////////////////////
self.show()
# LEFT MENU BTN IS CLICKED
# Run function when btn is clicked
# Check funtion by object name / btn_id
# ///////////////////////////////////////////////////////////////
def btn_clicked(self):
# GET BT CLICKED
btn = SetupMainWindow.setup_btns(self)
# Remove Selection If Clicked By "btn_close_left_column"
if btn.objectName() != "btn_settings":
self.ui.left_menu.deselect_all_tab()
# Get Title Bar Btn And Reset Active
top_settings = MainFunctions.get_title_bar_btn(self, "btn_top_settings")
top_settings.set_active(False)
# LEFT MENU
# ///////////////////////////////////////////////////////////////
# HOME BTN
if btn.objectName() == "btn_home":
# Select Menu
self.ui.left_menu.select_only_one(btn.objectName())
# Load Page 1
MainFunctions.set_page(self, self.ui.load_pages.page_1)
# WIDGETS BTN
if btn.objectName() == "btn_widgets":
# Select Menu
self.ui.left_menu.select_only_one(btn.objectName())
# Load Page 2
MainFunctions.set_page(self, self.ui.load_pages.page_2)
# LOAD USER PAGE
if btn.objectName() == "btn_add_user":
# Select Menu
self.ui.left_menu.select_only_one(btn.objectName())
# Load Page 3
MainFunctions.set_page(self, self.ui.load_pages.page_3)
# BOTTOM INFORMATION
if btn.objectName() == "btn_info":
# CHECK IF LEFT COLUMN IS VISIBLE
if not MainFunctions.left_column_is_visible(self):
self.ui.left_menu.select_only_one_tab(btn.objectName())
# Show / Hide
MainFunctions.toggle_left_column(self)
self.ui.left_menu.select_only_one_tab(btn.objectName())
else:
if btn.objectName() == "btn_close_left_column":
self.ui.left_menu.deselect_all_tab()
# Show / Hide
MainFunctions.toggle_left_column(self)
self.ui.left_menu.select_only_one_tab(btn.objectName())
# Change Left Column Menu
if btn.objectName() != "btn_close_left_column":
MainFunctions.set_left_column_menu(
self,
menu=self.ui.left_column.menus.menu_2,
title="Info tab",
icon_path=Functions.set_svg_icon("icon_info.svg")
)
# SETTINGS LEFT
if btn.objectName() == "btn_settings" or btn.objectName() == "btn_close_left_column":
# CHECK IF LEFT COLUMN IS VISIBLE
if not MainFunctions.left_column_is_visible(self):
# Show / Hide
MainFunctions.toggle_left_column(self)
self.ui.left_menu.select_only_one_tab(btn.objectName())
else:
if btn.objectName() == "btn_close_left_column":
self.ui.left_menu.deselect_all_tab()
# Show / Hide
MainFunctions.toggle_left_column(self)
self.ui.left_menu.select_only_one_tab(btn.objectName())
# Change Left Column Menu
if btn.objectName() != "btn_close_left_column":
MainFunctions.set_left_column_menu(
self,
menu=self.ui.left_column.menus.menu_1,
title="Settings Left Column",
icon_path=Functions.set_svg_icon("icon_settings.svg")
)
# TITLE BAR MENU
# ///////////////////////////////////////////////////////////////
# SETTINGS TITLE BAR
if btn.objectName() == "btn_top_settings":
# Toogle Active
if not MainFunctions.right_column_is_visible(self):
btn.set_active(True)
# Show / Hide
MainFunctions.toggle_right_column(self)
else:
btn.set_active(False)
# Show / Hide
MainFunctions.toggle_right_column(self)
# Get Left Menu Btn
top_settings = MainFunctions.get_left_menu_btn(self, "btn_settings")
top_settings.set_active_tab(False)
# DEBUG
print(f"Button {btn.objectName()}, clicked!")
# LEFT MENU BTN IS RELEASED
# Run function when btn is released
# Check funtion by object name / btn_id
# ///////////////////////////////////////////////////////////////
def btn_released(self):
# GET BT CLICKED
btn = SetupMainWindow.setup_btns(self)
# DEBUG
print(f"Button {btn.objectName()}, released!")
# RESIZE EVENT
# ///////////////////////////////////////////////////////////////
def resizeEvent(self, event):
SetupMainWindow.resize_grips(self)
# MOUSE CLICK EVENTS
# ///////////////////////////////////////////////////////////////
def mousePressEvent(self, event):
# SET DRAG POS WINDOW
self.dragPos = event.globalPos()
# SETTINGS WHEN TO START
# Set the initial class and also additional parameters of the "QApplication" class
# ///////////////////////////////////////////////////////////////
if __name__ == "__main__":
# APPLICATION
# ///////////////////////////////////////////////////////////////
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("icon.ico"))
window = MainWindow()
# EXEC APP
# ///////////////////////////////////////////////////////////////
sys.exit(app.exec())

@ -0,0 +1,4 @@
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from PySide6.QtSvgWidgets import *

@ -0,0 +1,35 @@
{
"app_name": "PyOneDark - Modern GUI",
"version" : "v1.0.0",
"copyright" : "By: Wanderson M. Pimenta",
"year" : 2021,
"theme_name" : "default",
"custom_title_bar": true,
"startup_size": [
1400,
720
],
"minimum_size": [
960,
540
],
"lef_menu_size" : {
"minimum" : 50,
"maximum" : 240
},
"left_menu_content_margins" : 3,
"left_column_size" : {
"minimum" : 0,
"maximum" : 240
},
"right_column_size" : {
"minimum" : 0,
"maximum" : 240
},
"time_animation" : 500,
"font" : {
"family" : "Segoe UI",
"title_size" : 10,
"text_size" : 9
}
}
Loading…
Cancel
Save