提交 92211e5f 编写于 作者: 之一Yo's avatar 之一Yo

添加 `StyleSheetBase` 和 `FluentStyleSheet` 类

上级 2657cfeb
# coding: utf-8
from enum import Enum
from qfluentwidgets import StyleSheetBase, Theme, isDarkTheme, qconfig
class StyleSheet(StyleSheetBase, Enum):
""" Style sheet """
LINK_CARD = "link_card"
MAIN_WINDOW = "main_window"
SAMPLE_CARD = "sample_card"
HOME_INTERFACE = "home_interface"
ICON_INTERFACE = "icon_interface"
SETTING_INTERFACE = "setting_interface"
GALLERY_INTERFACE = "gallery_interface"
def path(self, theme=Theme.AUTO):
theme = qconfig.theme if theme == Theme.AUTO else theme
return f"app/resource/qss/{theme.value.lower()}/{self.value}.qss"
# coding:utf-8 # coding:utf-8
from PyQt5.QtCore import Qt, pyqtSignal, QUrl from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtGui import QPixmap, QDesktopServices from PyQt5.QtGui import QPixmap, QDesktopServices
from PyQt5.QtWidgets import QFrame, QLabel, QVBoxLayout, QWidget, QHBoxLayout from PyQt5.QtWidgets import QFrame, QLabel, QVBoxLayout, QWidget, QHBoxLayout
from qfluentwidgets import IconWidget, FluentIcon, TextWrap, isDarkTheme, ScrollArea from qfluentwidgets import IconWidget, FluentIcon, TextWrap, ScrollArea
from ..common.config import cfg from ..common.style_sheet import StyleSheet
class LinkCard(QFrame): class LinkCard(QFrame):
...@@ -62,16 +62,9 @@ class LinkCardView(ScrollArea): ...@@ -62,16 +62,9 @@ class LinkCardView(ScrollArea):
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.view.setObjectName('view') self.view.setObjectName('view')
self.__setQss() StyleSheet.LINK_CARD.apply(self)
cfg.themeChanged.connect(self.__setQss)
def addCard(self, icon, title, content, url): def addCard(self, icon, title, content, url):
""" add link card """ """ add link card """
card = LinkCard(icon, title, content, url, self.view) card = LinkCard(icon, title, content, url, self.view)
self.hBoxLayout.addWidget(card, 0, Qt.AlignLeft) self.hBoxLayout.addWidget(card, 0, Qt.AlignLeft)
def __setQss(self):
color = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{color}/link_card.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
# coding:utf-8 # coding:utf-8
from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QFrame, QLabel, QVBoxLayout, QHBoxLayout from PyQt5.QtWidgets import QWidget, QFrame, QLabel, QVBoxLayout, QHBoxLayout
from qfluentwidgets import IconWidget, TextWrap, FlowLayout, isDarkTheme from qfluentwidgets import IconWidget, TextWrap, FlowLayout
from ..common.signal_bus import signalBus from ..common.signal_bus import signalBus
from ..common.config import cfg from ..common.style_sheet import StyleSheet
class SampleCard(QFrame): class SampleCard(QFrame):
...@@ -67,15 +66,9 @@ class SampleCardView(QWidget): ...@@ -67,15 +66,9 @@ class SampleCardView(QWidget):
self.vBoxLayout.addLayout(self.flowLayout, 1) self.vBoxLayout.addLayout(self.flowLayout, 1)
self.titleLabel.setObjectName('viewTitleLabel') self.titleLabel.setObjectName('viewTitleLabel')
self.__setQss() StyleSheet.SAMPLE_CARD.apply(self)
cfg.themeChanged.connect(self.__setQss)
def addSampleCard(self, icon, title, content, routeKey, index): def addSampleCard(self, icon, title, content, routeKey, index):
""" add sample card """ """ add sample card """
card = SampleCard(icon, title, content, routeKey, index, self) card = SampleCard(icon, title, content, routeKey, index, self)
self.flowLayout.addWidget(card) self.flowLayout.addWidget(card)
def __setQss(self):
theme = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{theme}/sample_card.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
<context> <context>
<name>ExampleCard</name> <name>ExampleCard</name>
<message> <message>
<location filename="../../view/gallery_interface.py" line="86"/> <location filename="../../view/gallery_interface.py" line="87"/>
<source>Source code</source> <source>Source code</source>
<translation>源代码</translation> <translation>源代码</translation>
</message> </message>
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
<context> <context>
<name>IconCardView</name> <name>IconCardView</name>
<message> <message>
<location filename="../../view/icon_interface.py" line="125"/> <location filename="../../view/icon_interface.py" line="126"/>
<source>Fluent Icons Library</source> <source>Fluent Icons Library</source>
<translation>流畅图标库</translation> <translation>流畅图标库</translation>
</message> </message>
...@@ -166,12 +166,12 @@ ...@@ -166,12 +166,12 @@
<context> <context>
<name>IconInfoPanel</name> <name>IconInfoPanel</name>
<message> <message>
<location filename="../../view/icon_interface.py" line="83"/> <location filename="../../view/icon_interface.py" line="84"/>
<source>Icon name</source> <source>Icon name</source>
<translation>图标名字</translation> <translation>图标名字</translation>
</message> </message>
<message> <message>
<location filename="../../view/icon_interface.py" line="85"/> <location filename="../../view/icon_interface.py" line="86"/>
<source>Enum member</source> <source>Enum member</source>
<translation>枚举成员</translation> <translation>枚举成员</translation>
</message> </message>
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
<context> <context>
<name>LineEdit</name> <name>LineEdit</name>
<message> <message>
<location filename="../../view/icon_interface.py" line="23"/> <location filename="../../view/icon_interface.py" line="24"/>
<source>Search icons</source> <source>Search icons</source>
<translation>搜索图标</translation> <translation>搜索图标</translation>
</message> </message>
...@@ -250,62 +250,62 @@ ...@@ -250,62 +250,62 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../../view/main_window.py" line="136"/> <location filename="../../view/main_window.py" line="137"/>
<source>Home</source> <source>Home</source>
<translation>主页</translation> <translation>主页</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="150"/> <location filename="../../view/main_window.py" line="151"/>
<source>Basic input</source> <source>Basic input</source>
<translation>基本输入</translation> <translation>基本输入</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="157"/> <location filename="../../view/main_window.py" line="158"/>
<source>Dialogs</source> <source>Dialogs</source>
<translation>对话框</translation> <translation>对话框</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="164"/> <location filename="../../view/main_window.py" line="165"/>
<source>Layout</source> <source>Layout</source>
<translation>布局</translation> <translation>布局</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="178"/> <location filename="../../view/main_window.py" line="179"/>
<source>Menus</source> <source>Menus</source>
<translation>菜单</translation> <translation>菜单</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="171"/> <location filename="../../view/main_window.py" line="172"/>
<source>Material</source> <source>Material</source>
<translation>材料</translation> <translation>材料</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="185"/> <location filename="../../view/main_window.py" line="186"/>
<source>Scrolling</source> <source>Scrolling</source>
<translation>滚动</translation> <translation>滚动</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="192"/> <location filename="../../view/main_window.py" line="193"/>
<source>Status &amp; info</source> <source>Status &amp; info</source>
<translation>状态和信息</translation> <translation>状态和信息</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="260"/> <location filename="../../view/main_window.py" line="255"/>
<source>This is a help message</source> <source>This is a help message</source>
<translation>一条友善的提示</translation> <translation>一条友善的提示</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="260"/> <location filename="../../view/main_window.py" line="255"/>
<source>You clicked a customized navigation widget. You can add more custom widgets by calling `NavigationInterface.addWidget()` 😉</source> <source>You clicked a customized navigation widget. You can add more custom widgets by calling `NavigationInterface.addWidget()` 😉</source>
<translation>你点击了一个自定义的导航项你可以通过 `NavigationInterface.addWidget()` 添加更多的自定义导航项</translation> <translation>你点击了一个自定义的导航项你可以通过 `NavigationInterface.addWidget()` 添加更多的自定义导航项</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="199"/> <location filename="../../view/main_window.py" line="200"/>
<source>Text</source> <source>Text</source>
<translation>文本</translation> <translation>文本</translation>
</message> </message>
<message> <message>
<location filename="../../view/main_window.py" line="142"/> <location filename="../../view/main_window.py" line="143"/>
<source>Icons</source> <source>Icons</source>
<translation>图标</translation> <translation>图标</translation>
</message> </message>
...@@ -398,176 +398,186 @@ ...@@ -398,176 +398,186 @@
<source>Chitanda Eru is too hot 🥵</source> <source>Chitanda Eru is too hot 🥵</source>
<translation>回眸一笑百媚生六宫粉黛无颜色 🥵</translation> <translation>回眸一笑百媚生六宫粉黛无颜色 🥵</translation>
</message> </message>
<message>
<location filename="../../view/scroll_interface.py" line="50"/>
<source>Smooth scroll area implemented by animation</source>
<translation>使用动画实现的平滑滚动区域</translation>
</message>
<message>
<location filename="../../view/scroll_interface.py" line="56"/>
<source>Chitanda Eru is so hot 🥵🥵</source>
<translation>春寒赐浴华清池温泉水滑洗凝脂 🥵🥵</translation>
</message>
</context> </context>
<context> <context>
<name>SettingInterface</name> <name>SettingInterface</name>
<message> <message>
<location filename="../../view/setting_interface.py" line="32"/> <location filename="../../view/setting_interface.py" line="33"/>
<source>Settings</source> <source>Settings</source>
<translation>设置</translation> <translation>设置</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="35"/> <location filename="../../view/setting_interface.py" line="36"/>
<source>Music on this PC</source> <source>Music on this PC</source>
<translation>此PC上的音乐</translation> <translation>此PC上的音乐</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="37"/> <location filename="../../view/setting_interface.py" line="38"/>
<source>Local music library</source> <source>Local music library</source>
<translation>本地音乐库</translation> <translation>本地音乐库</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="207"/> <location filename="../../view/setting_interface.py" line="201"/>
<source>Choose folder</source> <source>Choose folder</source>
<translation>选择文件夹</translation> <translation>选择文件夹</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="44"/> <location filename="../../view/setting_interface.py" line="45"/>
<source>Download directory</source> <source>Download directory</source>
<translation>下载目录</translation> <translation>下载目录</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="53"/> <location filename="../../view/setting_interface.py" line="54"/>
<source>Personalization</source> <source>Personalization</source>
<translation>个性化</translation> <translation>个性化</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="55"/> <location filename="../../view/setting_interface.py" line="56"/>
<source>Application theme</source> <source>Application theme</source>
<translation>应用主题</translation> <translation>应用主题</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="55"/> <location filename="../../view/setting_interface.py" line="56"/>
<source>Change the appearance of your application</source> <source>Change the appearance of your application</source>
<translation>调整你的应用的外观</translation> <translation>调整你的应用的外观</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="55"/> <location filename="../../view/setting_interface.py" line="56"/>
<source>Light</source> <source>Light</source>
<translation>浅色</translation> <translation>浅色</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="55"/> <location filename="../../view/setting_interface.py" line="56"/>
<source>Dark</source> <source>Dark</source>
<translation>深色</translation> <translation>深色</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="84"/> <location filename="../../view/setting_interface.py" line="85"/>
<source>Use system setting</source> <source>Use system setting</source>
<translation>跟随系统设置</translation> <translation>跟随系统设置</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="66"/> <location filename="../../view/setting_interface.py" line="67"/>
<source>Theme color</source> <source>Theme color</source>
<translation>主题色</translation> <translation>主题色</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="66"/> <location filename="../../view/setting_interface.py" line="67"/>
<source>Change the theme color of you application</source> <source>Change the theme color of you application</source>
<translation>调整你的应用的主题色</translation> <translation>调整你的应用的主题色</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="73"/> <location filename="../../view/setting_interface.py" line="74"/>
<source>Interface zoom</source> <source>Interface zoom</source>
<translation>界面缩放</translation> <translation>界面缩放</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="73"/> <location filename="../../view/setting_interface.py" line="74"/>
<source>Change the size of widgets and fonts</source> <source>Change the size of widgets and fonts</source>
<translation>调整小部件和字体的大小</translation> <translation>调整小部件和字体的大小</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="84"/> <location filename="../../view/setting_interface.py" line="85"/>
<source>Language</source> <source>Language</source>
<translation>语言</translation> <translation>语言</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="84"/> <location filename="../../view/setting_interface.py" line="85"/>
<source>Set your preferred language for UI</source> <source>Set your preferred language for UI</source>
<translation>选择界面所使用的语言</translation> <translation>选择界面所使用的语言</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="94"/> <location filename="../../view/setting_interface.py" line="95"/>
<source>Material</source> <source>Material</source>
<translation>材料</translation> <translation>材料</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="96"/> <location filename="../../view/setting_interface.py" line="97"/>
<source>Acrylic blur radius</source> <source>Acrylic blur radius</source>
<translation>亚克力磨砂半径</translation> <translation>亚克力磨砂半径</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="96"/> <location filename="../../view/setting_interface.py" line="97"/>
<source>The greater the radius, the more blurred the image</source> <source>The greater the radius, the more blurred the image</source>
<translation>磨砂半径越大图像越模糊</translation> <translation>磨砂半径越大图像越模糊</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="105"/> <location filename="../../view/setting_interface.py" line="106"/>
<source>Software update</source> <source>Software update</source>
<translation>软件更新</translation> <translation>软件更新</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="107"/> <location filename="../../view/setting_interface.py" line="108"/>
<source>Check for updates when the application starts</source> <source>Check for updates when the application starts</source>
<translation>在应用程序启动时检查更新</translation> <translation>在应用程序启动时检查更新</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="107"/> <location filename="../../view/setting_interface.py" line="108"/>
<source>The new version will be more stable and have more features</source> <source>The new version will be more stable and have more features</source>
<translation>新版本将更加稳定并拥有更多功能建议启用此选项</translation> <translation>新版本将更加稳定并拥有更多功能建议启用此选项</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="133"/> <location filename="../../view/setting_interface.py" line="134"/>
<source>About</source> <source>About</source>
<translation>关于</translation> <translation>关于</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="117"/> <location filename="../../view/setting_interface.py" line="118"/>
<source>Open help page</source> <source>Open help page</source>
<translation>打开帮助页面</translation> <translation>打开帮助页面</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="117"/> <location filename="../../view/setting_interface.py" line="118"/>
<source>Help</source> <source>Help</source>
<translation>帮助</translation> <translation>帮助</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="117"/> <location filename="../../view/setting_interface.py" line="118"/>
<source>Discover new features and learn useful tips about PyQt-Fluent-Widgets</source> <source>Discover new features and learn useful tips about PyQt-Fluent-Widgets</source>
<translation>发现新功能并了解有关 PyQt-Fluent-Widgets 的使用技巧</translation> <translation>发现新功能并了解有关 PyQt-Fluent-Widgets 的使用技巧</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="126"/> <location filename="../../view/setting_interface.py" line="127"/>
<source>Provide feedback</source> <source>Provide feedback</source>
<translation>提供反馈</translation> <translation>提供反馈</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="126"/> <location filename="../../view/setting_interface.py" line="127"/>
<source>Help us improve PyQt-Fluent-Widgets by providing feedback</source> <source>Help us improve PyQt-Fluent-Widgets by providing feedback</source>
<translation>通过提供反馈帮助我们改进 PyQt-Fluent-Widgets</translation> <translation>通过提供反馈帮助我们改进 PyQt-Fluent-Widgets</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="133"/> <location filename="../../view/setting_interface.py" line="134"/>
<source>Check update</source> <source>Check update</source>
<translation>检查更新</translation> <translation>检查更新</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="133"/> <location filename="../../view/setting_interface.py" line="134"/>
<source>Copyright</source> <source>Copyright</source>
<translation>版权所有</translation> <translation>版权所有</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="133"/> <location filename="../../view/setting_interface.py" line="134"/>
<source>Version</source> <source>Version</source>
<translation>当前版本</translation> <translation>当前版本</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="198"/> <location filename="../../view/setting_interface.py" line="192"/>
<source>Configuration takes effect after restart</source> <source>Configuration takes effect after restart</source>
<translation>配置在重启软件后生效</translation> <translation>配置在重启软件后生效</translation>
</message> </message>
<message> <message>
<location filename="../../view/setting_interface.py" line="198"/> <location filename="../../view/setting_interface.py" line="192"/>
<source>Updated successfully</source> <source>Updated successfully</source>
<translation>更新成功</translation> <translation>更新成功</translation>
</message> </message>
...@@ -816,22 +826,22 @@ ...@@ -816,22 +826,22 @@
<context> <context>
<name>ToolBar</name> <name>ToolBar</name>
<message> <message>
<location filename="../../view/gallery_interface.py" line="20"/> <location filename="../../view/gallery_interface.py" line="21"/>
<source>Documentation</source> <source>Documentation</source>
<translation>在线文档</translation> <translation>在线文档</translation>
</message> </message>
<message> <message>
<location filename="../../view/gallery_interface.py" line="22"/> <location filename="../../view/gallery_interface.py" line="23"/>
<source>Source</source> <source>Source</source>
<translation>源代码</translation> <translation>源代码</translation>
</message> </message>
<message> <message>
<location filename="../../view/gallery_interface.py" line="54"/> <location filename="../../view/gallery_interface.py" line="55"/>
<source>Toggle theme</source> <source>Toggle theme</source>
<translation>切换主题</translation> <translation>切换主题</translation>
</message> </message>
<message> <message>
<location filename="../../view/gallery_interface.py" line="55"/> <location filename="../../view/gallery_interface.py" line="56"/>
<source>Send feedback</source> <source>Send feedback</source>
<translation>提供反馈</translation> <translation>提供反馈</translation>
</message> </message>
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
</message> </message>
<message> <message>
<source> folder and remove it from the list, the folder will no longer appear in the list, but will not be deleted.</source> <source> folder and remove it from the list, the folder will no longer appear in the list, but will not be deleted.</source>
<translation> 文件夾從列表中移除則該文件夾不會再出現在列表但不會被刪除</translation> <translation> 文件夾從列錶中移除則該文件夾不會再出現在列錶但不會被刪除</translation>
</message> </message>
</context> </context>
<context> <context>
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
</message> </message>
<message> <message>
<source> folder and remove it from the list, the folder will no longer appear in the list, but will not be deleted.</source> <source> folder and remove it from the list, the folder will no longer appear in the list, but will not be deleted.</source>
<translation> 文件夾從列表中移除則該文件夾不會再出現在列表但不會被刪除</translation> <translation> 文件夾從列錶中移除則該文件夾不會再出現在列錶但不會被刪除</translation>
</message> </message>
</context> </context>
<context> <context>
...@@ -138,11 +138,34 @@ ...@@ -138,11 +138,34 @@
</message> </message>
<message> <message>
<source>Copy</source> <source>Copy</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Paste</source> <source>Paste</source>
<translation>粘貼</translation> <translation>黏貼</translation>
</message>
<message>
<source>Cancel</source>
<translation>撤回</translation>
</message>
<message>
<source>Select all</source>
<translation>全選</translation>
</message>
</context>
<context>
<name>TextEditMenu</name>
<message>
<source>Cut</source>
<translation>剪切</translation>
</message>
<message>
<source>Copy</source>
<translation>復制</translation>
</message>
<message>
<source>Paste</source>
<translation>黏貼</translation>
</message> </message>
<message> <message>
<source>Cancel</source> <source>Cancel</source>
......
...@@ -153,4 +153,27 @@ ...@@ -153,4 +153,27 @@
<translation>全选</translation> <translation>全选</translation>
</message> </message>
</context> </context>
<context>
<name>TextEditMenu</name>
<message>
<source>Cut</source>
<translation>剪切</translation>
</message>
<message>
<source>Copy</source>
<translation>复制</translation>
</message>
<message>
<source>Paste</source>
<translation>粘贴</translation>
</message>
<message>
<source>Cancel</source>
<translation>撤回</translation>
</message>
<message>
<source>Select all</source>
<translation>全选</translation>
</message>
</context>
</TS> </TS>
\ No newline at end of file
...@@ -7,6 +7,7 @@ from qfluentwidgets import (ScrollArea, PushButton, ToolButton, FluentIcon, ...@@ -7,6 +7,7 @@ from qfluentwidgets import (ScrollArea, PushButton, ToolButton, FluentIcon,
isDarkTheme, IconWidget, Theme, ToolTipFilter) isDarkTheme, IconWidget, Theme, ToolTipFilter)
from ..common.icon import Icon from ..common.icon import Icon
from ..common.config import cfg, FEEDBACK_URL, HELP_URL, EXAMPLE_URL from ..common.config import cfg, FEEDBACK_URL, HELP_URL, EXAMPLE_URL
from ..common.style_sheet import StyleSheet
class ToolBar(QWidget): class ToolBar(QWidget):
...@@ -176,8 +177,8 @@ class GalleryInterface(ScrollArea): ...@@ -176,8 +177,8 @@ class GalleryInterface(ScrollArea):
self.vBoxLayout.setAlignment(Qt.AlignTop) self.vBoxLayout.setAlignment(Qt.AlignTop)
self.vBoxLayout.setContentsMargins(36, 20, 36, 36) self.vBoxLayout.setContentsMargins(36, 20, 36, 36)
self.__setQss() self.view.setObjectName('view')
cfg.themeChanged.connect(self.__setQss) StyleSheet.GALLERY_INTERFACE.apply(self)
def addExampleCard(self, title, widget, sourcePath: str, stretch=0): def addExampleCard(self, title, widget, sourcePath: str, stretch=0):
card = ExampleCard(title, widget, sourcePath, stretch, self.view) card = ExampleCard(title, widget, sourcePath, stretch, self.view)
...@@ -192,9 +193,3 @@ class GalleryInterface(ScrollArea): ...@@ -192,9 +193,3 @@ class GalleryInterface(ScrollArea):
def resizeEvent(self, e): def resizeEvent(self, e):
super().resizeEvent(e) super().resizeEvent(e)
self.toolBar.resize(self.width(), self.toolBar.height()) self.toolBar.resize(self.width(), self.toolBar.height())
def __setQss(self):
self.view.setObjectName('view')
theme = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{theme}/gallery_interface.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
# coding:utf-8 # coding:utf-8
import json from PyQt5.QtCore import Qt, QRectF
from PyQt5.QtCore import Qt, pyqtSignal, QRectF
from PyQt5.QtGui import QPixmap, QPainter, QColor, QBrush, QPainterPath from PyQt5.QtGui import QPixmap, QPainter, QColor, QBrush, QPainterPath
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel
...@@ -10,6 +8,7 @@ from ..common.config import cfg, HELP_URL, REPO_URL, EXAMPLE_URL, FEEDBACK_URL ...@@ -10,6 +8,7 @@ from ..common.config import cfg, HELP_URL, REPO_URL, EXAMPLE_URL, FEEDBACK_URL
from ..common.icon import Icon from ..common.icon import Icon
from ..components.link_card import LinkCardView from ..components.link_card import LinkCardView
from ..components.sample_card import SampleCardView from ..components.sample_card import SampleCardView
from ..common.style_sheet import StyleSheet
class BannerWidget(QWidget): class BannerWidget(QWidget):
...@@ -100,7 +99,8 @@ class HomeInterface(ScrollArea): ...@@ -100,7 +99,8 @@ class HomeInterface(ScrollArea):
self.loadSamples() self.loadSamples()
def __initWidget(self): def __initWidget(self):
self.__setQss() self.view.setObjectName('view')
StyleSheet.HOME_INTERFACE.apply(self)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setWidget(self.view) self.setWidget(self.view)
...@@ -111,14 +111,6 @@ class HomeInterface(ScrollArea): ...@@ -111,14 +111,6 @@ class HomeInterface(ScrollArea):
self.vBoxLayout.addWidget(self.banner) self.vBoxLayout.addWidget(self.banner)
self.vBoxLayout.setAlignment(Qt.AlignTop) self.vBoxLayout.setAlignment(Qt.AlignTop)
cfg.themeChanged.connect(self.__setQss)
def __setQss(self):
self.view.setObjectName('view')
theme = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{theme}/home_interface.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
def loadSamples(self): def loadSamples(self):
""" load samples """ """ load samples """
basicInputView = SampleCardView( basicInputView = SampleCardView(
......
...@@ -9,6 +9,7 @@ from qfluentwidgets import (FluentIcon, IconWidget, FlowLayout, isDarkTheme, ...@@ -9,6 +9,7 @@ from qfluentwidgets import (FluentIcon, IconWidget, FlowLayout, isDarkTheme,
from .gallery_interface import GalleryInterface from .gallery_interface import GalleryInterface
from ..common.translator import Translator from ..common.translator import Translator
from ..common.config import cfg from ..common.config import cfg
from ..common.style_sheet import StyleSheet
from ..common.trie import Trie from ..common.trie import Trie
...@@ -197,9 +198,7 @@ class IconCardView(QWidget): ...@@ -197,9 +198,7 @@ class IconCardView(QWidget):
self.scrollWidget.setObjectName('scrollWidget') self.scrollWidget.setObjectName('scrollWidget')
self.iconLibraryLabel.setObjectName('iconLibraryLabel') self.iconLibraryLabel.setObjectName('iconLibraryLabel')
theme = 'dark' if isDarkTheme() else 'light' StyleSheet.ICON_INTERFACE.apply(self)
with open(f'app/resource/qss/{theme}/icon_interface.qss', encoding='utf-8') as f:
self.setStyleSheet(applyThemeColor(f.read()))
if self.currentIndex >= 0: if self.currentIndex >= 0:
self.cards[self.currentIndex].setSelected(True, True) self.cards[self.currentIndex].setSelected(True, True)
......
...@@ -25,6 +25,7 @@ from .text_interface import TextInterface ...@@ -25,6 +25,7 @@ from .text_interface import TextInterface
from ..components.avatar_widget import AvatarWidget from ..components.avatar_widget import AvatarWidget
from ..common.icon import Icon from ..common.icon import Icon
from ..common.signal_bus import signalBus from ..common.signal_bus import signalBus
from ..common.style_sheet import StyleSheet
class StackedWidget(QFrame): class StackedWidget(QFrame):
...@@ -241,13 +242,7 @@ class MainWindow(FramelessWindow): ...@@ -241,13 +242,7 @@ class MainWindow(FramelessWindow):
w, h = desktop.width(), desktop.height() w, h = desktop.width(), desktop.height()
self.move(w//2 - self.width()//2, h//2 - self.height()//2) self.move(w//2 - self.width()//2, h//2 - self.height()//2)
cfg.themeChanged.connect(self.setQss) StyleSheet.MAIN_WINDOW.apply(self)
self.setQss()
def setQss(self):
color = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{color}/main_window.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
def switchTo(self, widget, triggerByUser=True): def switchTo(self, widget, triggerByUser=True):
self.stackWidget.setCurrentWidget(widget, not triggerByUser) self.stackWidget.setCurrentWidget(widget, not triggerByUser)
......
...@@ -27,7 +27,7 @@ class ScrollInterface(GalleryInterface): ...@@ -27,7 +27,7 @@ class ScrollInterface(GalleryInterface):
w.horizontalScrollBar().setValue(0) w.horizontalScrollBar().setValue(0)
w.setWidget(label) w.setWidget(label)
w.setFixedSize(780, 420) w.setFixedSize(780, 430)
w.setObjectName('imageViewer') w.setObjectName('imageViewer')
card = self.addExampleCard( card = self.addExampleCard(
...@@ -37,4 +37,21 @@ class ScrollInterface(GalleryInterface): ...@@ -37,4 +37,21 @@ class ScrollInterface(GalleryInterface):
) )
card.card.installEventFilter(ToolTipFilter(card.card, showDelay=500)) card.card.installEventFilter(ToolTipFilter(card.card, showDelay=500))
card.card.setToolTip(self.tr('Chitanda Eru is too hot 🥵')) card.card.setToolTip(self.tr('Chitanda Eru is too hot 🥵'))
card.card.setToolTipDuration(2000) card.card.setToolTipDuration(2000)
\ No newline at end of file
w = SmoothScrollArea()
label = PixmapLabel(self)
label.setPixmap(QPixmap("app/resource/images/chidanta3.jpg"))
w.setWidget(label)
w.setFixedSize(659, 540)
w.setObjectName('imageViewer')
card = self.addExampleCard(
self.tr('Smooth scroll area implemented by animation'),
w,
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/scroll_area/demo.py',
)
card.card.installEventFilter(ToolTipFilter(card.card, showDelay=500))
card.card.setToolTip(self.tr('Chitanda Eru is so hot 🥵🥵'))
card.card.setToolTipDuration(2000)
...@@ -12,6 +12,7 @@ from PyQt5.QtWidgets import QWidget, QLabel, QFileDialog ...@@ -12,6 +12,7 @@ from PyQt5.QtWidgets import QWidget, QLabel, QFileDialog
from ..common.icon import Icon from ..common.icon import Icon
from ..common.config import cfg, HELP_URL, FEEDBACK_URL, AUTHOR, VERSION, YEAR from ..common.config import cfg, HELP_URL, FEEDBACK_URL, AUTHOR, VERSION, YEAR
from ..common.style_sheet import StyleSheet
class SettingInterface(ScrollArea): class SettingInterface(ScrollArea):
...@@ -149,7 +150,9 @@ class SettingInterface(ScrollArea): ...@@ -149,7 +150,9 @@ class SettingInterface(ScrollArea):
self.setWidgetResizable(True) self.setWidgetResizable(True)
# initialize style sheet # initialize style sheet
self.__setQss() self.scrollWidget.setObjectName('scrollWidget')
self.settingLabel.setObjectName('settingLabel')
StyleSheet.SETTING_INTERFACE.apply(self)
# initialize layout # initialize layout
self.__initLayout() self.__initLayout()
...@@ -184,15 +187,6 @@ class SettingInterface(ScrollArea): ...@@ -184,15 +187,6 @@ class SettingInterface(ScrollArea):
self.expandLayout.addWidget(self.updateSoftwareGroup) self.expandLayout.addWidget(self.updateSoftwareGroup)
self.expandLayout.addWidget(self.aboutGroup) self.expandLayout.addWidget(self.aboutGroup)
def __setQss(self):
""" set style sheet """
self.scrollWidget.setObjectName('scrollWidget')
self.settingLabel.setObjectName('settingLabel')
theme = 'dark' if isDarkTheme() else 'light'
with open(f'app/resource/qss/{theme}/setting_interface.qss', encoding='utf-8') as f:
self.setStyleSheet(f.read())
def __showRestartTooltip(self): def __showRestartTooltip(self):
""" show restart tooltip """ """ show restart tooltip """
InfoBar.success( InfoBar.success(
...@@ -212,18 +206,10 @@ class SettingInterface(ScrollArea): ...@@ -212,18 +206,10 @@ class SettingInterface(ScrollArea):
cfg.set(cfg.downloadFolder, folder) cfg.set(cfg.downloadFolder, folder)
self.downloadFolderCard.setContent(folder) self.downloadFolderCard.setContent(folder)
def __onThemeChanged(self, theme: Theme):
""" theme changed slot """
# change the theme of qfluentwidgets
setTheme(theme)
# chang the theme of setting interface
self.__setQss()
def __connectSignalToSlot(self): def __connectSignalToSlot(self):
""" connect signal to slot """ """ connect signal to slot """
cfg.appRestartSig.connect(self.__showRestartTooltip) cfg.appRestartSig.connect(self.__showRestartTooltip)
cfg.themeChanged.connect(self.__onThemeChanged) cfg.themeChanged.connect(setTheme)
# music in the pc # music in the pc
self.musicFolderCard.folderChanged.connect( self.musicFolderCard.folderChanged.connect(
......
...@@ -12,7 +12,7 @@ Examples are available at https://github.com/zhiyiYo/PyQt-Fluent-Widgets/tree/ma ...@@ -12,7 +12,7 @@ Examples are available at https://github.com/zhiyiYo/PyQt-Fluent-Widgets/tree/ma
:license: GPLv3, see LICENSE for more details. :license: GPLv3, see LICENSE for more details.
""" """
__version__ = "0.5.7" __version__ = "0.6.0"
from .components import * from .components import *
from .common import * from .common import *
......
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M1984 320 q0 22 -8.5 35 q-8.5 13 -22.5 19.5 q-14 6.5 -31 8.5 q-17 2 -35 2 q-10 0 -20 -0.5 q-10 -0.5 -18 -0.5 l-166 1437 q-6 48 -28 89.5 q-22 41.5 -56 72 q-34 30.5 -78 48 q-44 17.5 -92 17.5 l-810 0 q-48 0 -92 -17.5 q-44 -17.5 -78 -48 q-34 -30.5 -56 -72 q-22 -41.5 -28 -89.5 l-166 -1437 q-10 0 -20 0.5 q-10 0.5 -20 0.5 q-17 0 -34 -2 q-17 -2 -30.5 -9 q-13.5 -7 -22 -20 q-8.5 -13 -8.5 -34 q0 -26 19 -45 q19 -19 45 -19 l582 0 q10 -55 39.5 -102 q29.5 -47 72 -81.5 q42.5 -34.5 94.5 -53.5 q52 -19 108 -19 q56 0 108 19 q52 19 94.5 53.5 q42.5 34.5 72 81.5 q29.5 47 39.5 102 l582 0 q26 0 45 19 q19 19 19 45 ZM843 256 l362 0 q-10 -29 -28 -52.5 q-18 -23.5 -42 -40.5 q-24 -17 -52 -26 q-28 -9 -59 -9 q-31 0 -59 9 q-28 9 -52 26 q-24 17 -42 40.5 q-18 23.5 -28 52.5 ZM1720 384 l-1392 0 l164 1423 q6 50 41.5 81.5 q35.5 31.5 85.5 31.5 l810 0 q24 0 46 -8.5 q22 -8.5 39 -23.5 q17 -15 28 -36 q11 -21 14 -45 l164 -1423 ZM768 1472 l0 -640 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 640 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 ZM1152 1472 l0 -640 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 640 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M1984 320 q0 22 -8.5 35 q-8.5 13 -22.5 19.5 q-14 6.5 -31 8.5 q-17 2 -35 2 q-10 0 -20 -0.5 q-10 -0.5 -18 -0.5 l-166 1437 q-6 48 -28 89.5 q-22 41.5 -56 72 q-34 30.5 -78 48 q-44 17.5 -92 17.5 l-810 0 q-48 0 -92 -17.5 q-44 -17.5 -78 -48 q-34 -30.5 -56 -72 q-22 -41.5 -28 -89.5 l-166 -1437 q-10 0 -20 0.5 q-10 0.5 -20 0.5 q-17 0 -34 -2 q-17 -2 -30.5 -9 q-13.5 -7 -22 -20 q-8.5 -13 -8.5 -34 q0 -26 19 -45 q19 -19 45 -19 l582 0 q10 -55 39.5 -102 q29.5 -47 72 -81.5 q42.5 -34.5 94.5 -53.5 q52 -19 108 -19 q56 0 108 19 q52 19 94.5 53.5 q42.5 34.5 72 81.5 q29.5 47 39.5 102 l582 0 q26 0 45 19 q19 19 19 45 ZM843 256 l362 0 q-10 -29 -28 -52.5 q-18 -23.5 -42 -40.5 q-24 -17 -52 -26 q-28 -9 -59 -9 q-31 0 -59 9 q-28 9 -52 26 q-24 17 -42 40.5 q-18 23.5 -28 52.5 ZM1720 384 l-1392 0 l164 1423 q6 50 41.5 81.5 q35.5 31.5 85.5 31.5 l810 0 q24 0 46 -8.5 q22 -8.5 39 -23.5 q17 -15 28 -36 q11 -21 14 -45 l164 -1423 ZM768 1472 l0 -640 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 640 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 ZM1152 1472 l0 -640 q0 -26 19 -45 q19 -19 45 -19 q26 0 45 19 q19 19 19 45 l0 640 q0 26 -19 45 q-19 19 -45 19 q-26 0 -45 -19 q-19 -19 -19 -45 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M2048 1983.03 q0 25.99 -18.99 44.98 q-18.99 18.99 -44.98 18.99 q-26.99 0 -45.98 -18.99 l-550.73 -550.73 q-66.96 91.95 -162.91 138.93 q-95.95 46.98 -208.9 46.98 q-87.95 0 -167.41 -35.99 q-79.47 -35.98 -139.94 -96.45 q-60.47 -60.47 -96.45 -139.93 q-35.98 -79.46 -35.98 -167.42 q0 -112.94 46.97 -208.9 q46.98 -95.96 138.94 -162.92 l-201.9 -201.9 q-127.94 81.96 -222.39 203.4 q-94.46 121.44 -146.43 263.37 q-7 19 -13 46.98 q-6 27.99 -15.99 54.47 q-10 26.48 -25.99 44.97 q-16 18.49 -41.98 18.49 q-25.98 0 -44.97 -18.99 q-18.99 -18.99 -18.99 -44.97 q0 -6 1.99 -16 q21.99 -96.95 62.47 -188.41 q40.48 -91.46 95.95 -173.92 q55.47 -82.46 125.44 -153.42 q69.96 -70.96 151.92 -127.93 l-448.78 -448.78 q-18.99 -18.99 -18.99 -44.98 q0 -26.99 19.49 -45.48 q19.49 -18.49 45.48 -18.49 q25.99 0 44.98 18.99 l1919.06 1919.06 q18.99 18.99 18.99 44.98 ZM810.6 538.74 l-101.95 -102.95 q75.97 -25.99 154.93 -38.99 q78.96 -13 159.92 -13 q143.93 0 277.37 40.98 q133.43 40.98 249.38 115.45 q115.95 74.47 210.89 177.92 q94.95 103.45 160.92 228.39 q10 17.99 25.99 55.47 q15.99 37.48 31.48 78.46 q15.5 40.98 26.49 78.46 q10.99 37.49 10.99 56.48 q0 26.98 -18.99 45.48 q-19 18.49 -45.98 18.49 q-25.99 0 -38.98 -13.49 q-13 -13.5 -21.99 -35.49 q-11 -25.99 -17.49 -53.97 q-6.5 -27.99 -15.5 -54.98 q-23.99 -68.96 -61.47 -136.43 q-37.48 -67.47 -82.46 -124.44 q-62.97 -80.96 -139.93 -145.43 q-76.96 -64.47 -164.92 -109.45 q-87.96 -44.97 -185.41 -69.46 q-97.45 -24.49 -200.4 -24.49 q-109.95 0 -212.9 26.99 ZM1295.37 1385.32 l-441.79 -441.78 q-73.96 47.98 -111.94 119.45 q-37.98 71.46 -37.98 159.41 q0 62.97 25.49 119.94 q25.49 56.98 67.97 99.46 q42.48 42.48 99.45 67.96 q56.97 25.49 119.94 25.49 q87.96 0 159.43 -37.98 q71.46 -37.98 119.44 -111.95 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M2048 1983.03 q0 25.99 -18.99 44.98 q-18.99 18.99 -44.98 18.99 q-26.99 0 -45.98 -18.99 l-550.73 -550.73 q-66.96 91.95 -162.91 138.93 q-95.95 46.98 -208.9 46.98 q-87.95 0 -167.41 -35.99 q-79.47 -35.98 -139.94 -96.45 q-60.47 -60.47 -96.45 -139.93 q-35.98 -79.46 -35.98 -167.42 q0 -112.94 46.97 -208.9 q46.98 -95.96 138.94 -162.92 l-201.9 -201.9 q-127.94 81.96 -222.39 203.4 q-94.46 121.44 -146.43 263.37 q-7 19 -13 46.98 q-6 27.99 -15.99 54.47 q-10 26.48 -25.99 44.97 q-16 18.49 -41.98 18.49 q-25.98 0 -44.97 -18.99 q-18.99 -18.99 -18.99 -44.97 q0 -6 1.99 -16 q21.99 -96.95 62.47 -188.41 q40.48 -91.46 95.95 -173.92 q55.47 -82.46 125.44 -153.42 q69.96 -70.96 151.92 -127.93 l-448.78 -448.78 q-18.99 -18.99 -18.99 -44.98 q0 -26.99 19.49 -45.48 q19.49 -18.49 45.48 -18.49 q25.99 0 44.98 18.99 l1919.06 1919.06 q18.99 18.99 18.99 44.98 ZM810.6 538.74 l-101.95 -102.95 q75.97 -25.99 154.93 -38.99 q78.96 -13 159.92 -13 q143.93 0 277.37 40.98 q133.43 40.98 249.38 115.45 q115.95 74.47 210.89 177.92 q94.95 103.45 160.92 228.39 q10 17.99 25.99 55.47 q15.99 37.48 31.48 78.46 q15.5 40.98 26.49 78.46 q10.99 37.49 10.99 56.48 q0 26.98 -18.99 45.48 q-19 18.49 -45.98 18.49 q-25.99 0 -38.98 -13.49 q-13 -13.5 -21.99 -35.49 q-11 -25.99 -17.49 -53.97 q-6.5 -27.99 -15.5 -54.98 q-23.99 -68.96 -61.47 -136.43 q-37.48 -67.47 -82.46 -124.44 q-62.97 -80.96 -139.93 -145.43 q-76.96 -64.47 -164.92 -109.45 q-87.96 -44.97 -185.41 -69.46 q-97.45 -24.49 -200.4 -24.49 q-109.95 0 -212.9 26.99 ZM1295.37 1385.32 l-441.79 -441.78 q-73.96 47.98 -111.94 119.45 q-37.98 71.46 -37.98 159.41 q0 62.97 25.49 119.94 q25.49 56.98 67.97 99.46 q42.48 42.48 99.45 67.96 q56.97 25.49 119.94 25.49 q87.96 0 159.43 -37.98 q71.46 -37.98 119.44 -111.95 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M2048 1024.5 q0 141.07 -36.52 272.13 q-36.52 131.07 -103.05 244.62 q-66.53 113.55 -160.08 207.1 q-93.55 93.55 -207.1 160.08 q-113.56 66.53 -244.62 103.05 q-131.07 36.52 -272.13 36.52 q-141.07 0 -272.13 -36.52 q-131.07 -36.52 -244.62 -103.05 q-113.56 -66.53 -207.1 -160.08 q-93.54 -93.55 -160.57 -207.1 q-67.03 -113.56 -103.55 -244.62 q-36.52 -131.07 -36.52 -272.13 q0 -26.01 19.01 -45.02 q19.01 -19.01 45.02 -19.01 q26.01 0 45.02 19.01 q19.01 19.01 19.01 45.02 q0 164.08 57.53 316.15 q57.53 152.08 165.58 275.13 q63.03 72.03 140.07 128.56 q77.04 56.53 163.08 95.55 q86.04 39.02 179.09 59.53 q93.05 20.51 189.1 20.51 q124.06 0 238.62 -32.01 q114.56 -32.02 214.61 -90.05 q100.05 -58.03 181.59 -139.57 q81.54 -81.54 140.07 -181.09 q58.53 -99.55 90.55 -214.11 q32.01 -114.56 32.01 -238.62 q0 -124.06 -32.01 -238.62 q-32.02 -114.55 -90.55 -214.11 q-58.53 -99.55 -140.07 -181.09 q-81.54 -81.54 -181.09 -140.07 q-99.55 -58.53 -214.11 -90.55 q-114.56 -32.01 -238.62 -32.01 q-110.05 0 -215.11 26.51 q-105.05 26.52 -199.6 76.04 q-94.55 49.52 -176.09 120.56 q-81.54 71.04 -143.57 161.08 l415.2 0 q26.02 0 45.03 19.01 q19.01 19.01 19.01 45.02 q0 26.01 -19.01 45.02 q-19.01 19.01 -45.03 19.01 l-512.25 0 q-21.01 0 -34.02 -8.5 q-13 -8.5 -20.01 -22.01 q-7 -13.5 -9 -30.01 q-2 -16.5 -2 -33.51 q0 -121.06 0.5 -241.12 q0.5 -120.06 0.5 -241.12 q0 -26.01 19.01 -45.02 q19.01 -19.01 45.02 -19.01 q26.02 0 45.03 19.01 q19.01 19.01 19.01 45.02 l0 282.14 q73.03 -83.04 161.08 -147.57 q88.04 -64.53 186.09 -108.55 q98.04 -44.02 204.1 -67.03 q106.06 -23.01 217.11 -23.01 q141.07 0 272.13 36.52 q131.07 36.52 244.62 103.55 q113.55 67.03 207.1 160.57 q93.55 93.55 160.08 207.1 q66.53 113.55 103.05 244.62 q36.52 131.06 36.52 272.13 ZM1024.5 1024.5 l320.16 0 q26.01 0 45.02 19.01 q19.01 19.01 19.01 45.02 q0 26.01 -19.01 45.02 q-19.01 19.01 -45.02 19.01 l-384.19 0 q-26.01 0 -45.02 -19.01 q-19.01 -19.01 -19.01 -45.02 l0 -640.31 q0 -26.01 19.01 -45.02 q19.01 -19.01 45.02 -19.01 q26.01 0 45.02 19.01 q19.01 19.01 19.01 45.02 l0 576.28 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M2048 1024.5 q0 141.07 -36.52 272.13 q-36.52 131.07 -103.05 244.62 q-66.53 113.55 -160.08 207.1 q-93.55 93.55 -207.1 160.08 q-113.56 66.53 -244.62 103.05 q-131.07 36.52 -272.13 36.52 q-141.07 0 -272.13 -36.52 q-131.07 -36.52 -244.62 -103.05 q-113.56 -66.53 -207.1 -160.08 q-93.54 -93.55 -160.57 -207.1 q-67.03 -113.56 -103.55 -244.62 q-36.52 -131.07 -36.52 -272.13 q0 -26.01 19.01 -45.02 q19.01 -19.01 45.02 -19.01 q26.01 0 45.02 19.01 q19.01 19.01 19.01 45.02 q0 164.08 57.53 316.15 q57.53 152.08 165.58 275.13 q63.03 72.03 140.07 128.56 q77.04 56.53 163.08 95.55 q86.04 39.02 179.09 59.53 q93.05 20.51 189.1 20.51 q124.06 0 238.62 -32.01 q114.56 -32.02 214.61 -90.05 q100.05 -58.03 181.59 -139.57 q81.54 -81.54 140.07 -181.09 q58.53 -99.55 90.55 -214.11 q32.01 -114.56 32.01 -238.62 q0 -124.06 -32.01 -238.62 q-32.02 -114.55 -90.55 -214.11 q-58.53 -99.55 -140.07 -181.09 q-81.54 -81.54 -181.09 -140.07 q-99.55 -58.53 -214.11 -90.55 q-114.56 -32.01 -238.62 -32.01 q-110.05 0 -215.11 26.51 q-105.05 26.52 -199.6 76.04 q-94.55 49.52 -176.09 120.56 q-81.54 71.04 -143.57 161.08 l415.2 0 q26.02 0 45.03 19.01 q19.01 19.01 19.01 45.02 q0 26.01 -19.01 45.02 q-19.01 19.01 -45.03 19.01 l-512.25 0 q-21.01 0 -34.02 -8.5 q-13 -8.5 -20.01 -22.01 q-7 -13.5 -9 -30.01 q-2 -16.5 -2 -33.51 q0 -121.06 0.5 -241.12 q0.5 -120.06 0.5 -241.12 q0 -26.01 19.01 -45.02 q19.01 -19.01 45.02 -19.01 q26.02 0 45.03 19.01 q19.01 19.01 19.01 45.02 l0 282.14 q73.03 -83.04 161.08 -147.57 q88.04 -64.53 186.09 -108.55 q98.04 -44.02 204.1 -67.03 q106.06 -23.01 217.11 -23.01 q141.07 0 272.13 36.52 q131.07 36.52 244.62 103.55 q113.55 67.03 207.1 160.57 q93.55 93.55 160.08 207.1 q66.53 113.55 103.05 244.62 q36.52 131.06 36.52 272.13 ZM1024.5 1024.5 l320.16 0 q26.01 0 45.02 19.01 q19.01 19.01 19.01 45.02 q0 26.01 -19.01 45.02 q-19.01 19.01 -45.02 19.01 l-384.19 0 q-26.01 0 -45.02 -19.01 q-19.01 -19.01 -19.01 -45.02 l0 -640.31 q0 -26.01 19.01 -45.02 q19.01 -19.01 45.02 -19.01 q26.01 0 45.02 19.01 q19.01 19.01 19.01 45.02 l0 576.28 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M219.43 1462.86 q-44.57 0 -84.57 -17.14 q-40 -17.14 -70.29 -47.43 q-30.29 -30.28 -47.43 -70.28 q-17.14 -40 -17.14 -84.57 l0 -1024 q0 -44.57 17.14 -84.57 q17.14 -40 47.43 -70.29 q30.28 -30.29 70.29 -47.43 q40 -17.14 84.57 -17.14 l1024 0 q44.57 0 84.57 17.14 q40 17.14 70.28 47.43 q30.29 30.28 47.43 70.29 q17.14 40 17.14 84.57 l0 85.71 l-146.29 49.15 l0 -134.86 q0 -29.72 -21.71 -51.43 q-21.71 -21.71 -51.42 -21.71 l-1024 0 q-29.72 0 -51.43 21.71 q-21.71 21.71 -21.71 51.43 l0 1024 q0 29.71 21.71 51.42 q21.71 21.71 51.43 21.71 l497.14 0 q14.86 0 14.86 14.86 q0 10.28 -9.14 13.71 q-51.43 22.86 -92.57 48.58 q-41.14 25.71 -78.86 69.14 l-331.43 0 ZM438.86 438.86 l-146.29 0 l0 -146.29 l146.29 0 l0 146.29 ZM1170.29 438.86 l-146.29 0 l0 -146.29 l146.29 0 l0 146.29 ZM585.14 1755.43 l0 -5.72 q0 -57.14 23.43 -109.14 q23.43 -52 62.86 -91.43 q39.43 -39.43 91.43 -62.86 q52 -23.42 109.14 -23.42 q41.14 0 78.86 9.14 q37.72 9.14 73.14 29.71 l0 -817.14 q0 -36.57 21.14 -64.57 q21.14 -28 54.29 -39.43 l804.57 -268.57 q17.14 -5.71 34.29 -5.71 q45.71 0 77.71 32 q32 32 32 77.71 l0 1198.86 q0 59.43 -24 111.43 q-24 52 -64 90.86 q-40 38.86 -93.14 61.71 q-53.14 22.86 -111.42 22.86 q-60.57 0 -113.72 -23.43 q-53.14 -23.42 -92.58 -62.86 q-39.43 -39.43 -62.86 -92.57 q-23.42 -53.14 -23.42 -113.71 q0 -58.28 22.86 -111.43 q22.86 -53.14 61.71 -93.14 q38.86 -40 90.86 -64 q52 -24 111.42 -24 q41.15 0 78.86 9.14 q37.72 9.14 73.14 29.72 l0 -522.29 l-731.42 243.43 l0 684.57 q0 59.43 -24 111.43 q-24 52 -64 90.86 q-40 38.86 -93.14 61.72 q-53.14 22.86 -111.43 22.86 q-60.57 0 -113.71 -23.43 q-53.14 -23.43 -92.57 -62.86 q-39.43 -39.43 -62.86 -92.57 q-23.43 -53.14 -23.43 -113.71 ZM1170.29 710.86 l0 211.43 l731.42 -243.43 l0 -211.43 l-731.42 243.43 ZM438.86 877.71 l-146.29 0 l0 -292.57 l146.29 0 l0 292.57 ZM438.86 1170.29 l-146.29 0 l0 -146.29 l146.29 0 l0 146.29 ZM1901.71 1609.14 q0 -29.71 -11.43 -56.57 q-11.42 -26.86 -31.42 -46.86 q-20 -20 -46.86 -31.43 q-26.86 -11.42 -56.57 -11.42 q-30.86 0 -57.15 11.42 q-26.28 11.43 -46.28 31.43 q-20 20 -31.43 46.29 q-11.43 26.29 -11.43 57.14 q0 30.86 11.43 57.71 q11.43 26.86 30.86 46.28 q19.43 19.43 46.29 30.86 q26.86 11.43 57.72 11.43 q30.86 0 57.14 -11.43 q26.29 -11.43 46.29 -31.43 q20 -20 31.42 -46.29 q11.43 -26.28 11.43 -57.14 ZM1024 1755.43 q0 -29.72 -11.43 -56.58 q-11.43 -26.86 -31.43 -46.86 q-20 -20 -46.86 -31.43 q-26.86 -11.43 -56.57 -11.43 q-30.85 0 -57.13 11.43 q-26.29 11.43 -46.29 31.43 q-20 20 -31.43 46.28 q-11.43 26.29 -11.43 57.15 q0 30.86 11.43 57.71 q11.43 26.86 30.86 46.28 q19.43 19.43 46.29 30.86 q26.86 11.43 57.71 11.43 q30.86 0 57.14 -11.43 q26.28 -11.42 46.28 -31.42 q20 -20 31.43 -46.29 q11.43 -26.28 11.43 -57.14 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M219.43 1462.86 q-44.57 0 -84.57 -17.14 q-40 -17.14 -70.29 -47.43 q-30.29 -30.28 -47.43 -70.28 q-17.14 -40 -17.14 -84.57 l0 -1024 q0 -44.57 17.14 -84.57 q17.14 -40 47.43 -70.29 q30.28 -30.29 70.29 -47.43 q40 -17.14 84.57 -17.14 l1024 0 q44.57 0 84.57 17.14 q40 17.14 70.28 47.43 q30.29 30.28 47.43 70.29 q17.14 40 17.14 84.57 l0 85.71 l-146.29 49.15 l0 -134.86 q0 -29.72 -21.71 -51.43 q-21.71 -21.71 -51.42 -21.71 l-1024 0 q-29.72 0 -51.43 21.71 q-21.71 21.71 -21.71 51.43 l0 1024 q0 29.71 21.71 51.42 q21.71 21.71 51.43 21.71 l497.14 0 q14.86 0 14.86 14.86 q0 10.28 -9.14 13.71 q-51.43 22.86 -92.57 48.58 q-41.14 25.71 -78.86 69.14 l-331.43 0 ZM438.86 438.86 l-146.29 0 l0 -146.29 l146.29 0 l0 146.29 ZM1170.29 438.86 l-146.29 0 l0 -146.29 l146.29 0 l0 146.29 ZM585.14 1755.43 l0 -5.72 q0 -57.14 23.43 -109.14 q23.43 -52 62.86 -91.43 q39.43 -39.43 91.43 -62.86 q52 -23.42 109.14 -23.42 q41.14 0 78.86 9.14 q37.72 9.14 73.14 29.71 l0 -817.14 q0 -36.57 21.14 -64.57 q21.14 -28 54.29 -39.43 l804.57 -268.57 q17.14 -5.71 34.29 -5.71 q45.71 0 77.71 32 q32 32 32 77.71 l0 1198.86 q0 59.43 -24 111.43 q-24 52 -64 90.86 q-40 38.86 -93.14 61.71 q-53.14 22.86 -111.42 22.86 q-60.57 0 -113.72 -23.43 q-53.14 -23.42 -92.58 -62.86 q-39.43 -39.43 -62.86 -92.57 q-23.42 -53.14 -23.42 -113.71 q0 -58.28 22.86 -111.43 q22.86 -53.14 61.71 -93.14 q38.86 -40 90.86 -64 q52 -24 111.42 -24 q41.15 0 78.86 9.14 q37.72 9.14 73.14 29.72 l0 -522.29 l-731.42 243.43 l0 684.57 q0 59.43 -24 111.43 q-24 52 -64 90.86 q-40 38.86 -93.14 61.72 q-53.14 22.86 -111.43 22.86 q-60.57 0 -113.71 -23.43 q-53.14 -23.43 -92.57 -62.86 q-39.43 -39.43 -62.86 -92.57 q-23.43 -53.14 -23.43 -113.71 ZM1170.29 710.86 l0 211.43 l731.42 -243.43 l0 -211.43 l-731.42 243.43 ZM438.86 877.71 l-146.29 0 l0 -292.57 l146.29 0 l0 292.57 ZM438.86 1170.29 l-146.29 0 l0 -146.29 l146.29 0 l0 146.29 ZM1901.71 1609.14 q0 -29.71 -11.43 -56.57 q-11.42 -26.86 -31.42 -46.86 q-20 -20 -46.86 -31.43 q-26.86 -11.42 -56.57 -11.42 q-30.86 0 -57.15 11.42 q-26.28 11.43 -46.28 31.43 q-20 20 -31.43 46.29 q-11.43 26.29 -11.43 57.14 q0 30.86 11.43 57.71 q11.43 26.86 30.86 46.28 q19.43 19.43 46.29 30.86 q26.86 11.43 57.72 11.43 q30.86 0 57.14 -11.43 q26.29 -11.43 46.29 -31.43 q20 -20 31.42 -46.29 q11.43 -26.28 11.43 -57.14 ZM1024 1755.43 q0 -29.72 -11.43 -56.58 q-11.43 -26.86 -31.43 -46.86 q-20 -20 -46.86 -31.43 q-26.86 -11.43 -56.57 -11.43 q-30.85 0 -57.13 11.43 q-26.29 11.43 -46.29 31.43 q-20 20 -31.43 46.28 q-11.43 26.29 -11.43 57.15 q0 30.86 11.43 57.71 q11.43 26.86 30.86 46.28 q19.43 19.43 46.29 30.86 q26.86 11.43 57.71 11.43 q30.86 0 57.14 -11.43 q26.28 -11.42 46.28 -31.42 q20 -20 31.43 -46.29 q11.43 -26.28 11.43 -57.14 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" transform="translate(0,125)" d="M2048 576 l0 640 q0 38 -14.5 73.5 q-14.5 35.5 -41.5 62.5 q-27 27 -62.5 41.5 q-35.5 14.5 -73.5 14.5 l-192 0 l0 192 q0 39 -15 74 q-15 35 -41.5 61.5 q-26.5 26.5 -61.5 41.5 q-35 15 -74 15 l-896 0 q-39 0 -74 -15 q-35 -15 -61.5 -41.5 q-26.5 -26.5 -41.5 -61.5 q-15 -35 -15 -74 l0 -192 l-192 0 q-38 0 -73.5 -14.5 q-35.5 -14.5 -62.5 -41.5 q-27 -27 -41.5 -62.5 q-14.5 -35.5 -14.5 -73.5 l0 -640 q0 -66 25 -124.5 q25 -58.5 68.5 -102 q43.5 -43.5 102 -68.5 q58.5 -25 124.5 -25 l64 0 l0 -64 q0 -40 15 -75 q15 -35 41 -61 q26 -26 61 -41 q35 -15 75 -15 l896 0 q40 0 75 15 q35 15 61 41 q26 26 41 61 q15 35 15 75 l0 64 l64 0 q66 0 124.5 25 q58.5 25 102 68.5 q43.5 43.5 68.5 102 q25 58.5 25 124.5 ZM512 256 l1024 0 l0 -64 q0 -26 -19 -45 q-19 -19 -45 -19 l-896 0 q-26 0 -45 19 q-19 19 -19 45 l0 64 ZM1920 576 q0 -40 -15 -75 q-15 -35 -41 -61 q-26 -26 -61 -41 q-35 -15 -75 -15 l-1408 0 q-40 0 -75 15 q-35 15 -61 41 q-26 26 -41 61 q-15 35 -15 75 l0 640 q0 26 19 45 q19 19 45 19 l192 0 l0 -192 q0 -39 15 -74 q15 -35 41.5 -61.5 q26.5 -26.5 61.5 -41.5 q35 -15 74 -15 l896 0 q39 0 74 15 q35 15 61.5 41.5 q26.5 26.5 41.5 61.5 q15 35 15 74 l0 192 l192 0 q26 0 45 -19 q19 -19 19 -45 l0 -640 ZM1536 1088 q0 -26 -19 -45 q-19 -19 -45 -19 l-896 0 q-26 0 -45 19 q-19 19 -19 45 l0 512 q0 26 19 45 q19 19 45 19 l896 0 q26 0 45 -19 q19 -19 19 -45 l0 -512 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" transform="translate(0,125)" d="M2048 576 l0 640 q0 38 -14.5 73.5 q-14.5 35.5 -41.5 62.5 q-27 27 -62.5 41.5 q-35.5 14.5 -73.5 14.5 l-192 0 l0 192 q0 39 -15 74 q-15 35 -41.5 61.5 q-26.5 26.5 -61.5 41.5 q-35 15 -74 15 l-896 0 q-39 0 -74 -15 q-35 -15 -61.5 -41.5 q-26.5 -26.5 -41.5 -61.5 q-15 -35 -15 -74 l0 -192 l-192 0 q-38 0 -73.5 -14.5 q-35.5 -14.5 -62.5 -41.5 q-27 -27 -41.5 -62.5 q-14.5 -35.5 -14.5 -73.5 l0 -640 q0 -66 25 -124.5 q25 -58.5 68.5 -102 q43.5 -43.5 102 -68.5 q58.5 -25 124.5 -25 l64 0 l0 -64 q0 -40 15 -75 q15 -35 41 -61 q26 -26 61 -41 q35 -15 75 -15 l896 0 q40 0 75 15 q35 15 61 41 q26 26 41 61 q15 35 15 75 l0 64 l64 0 q66 0 124.5 25 q58.5 25 102 68.5 q43.5 43.5 68.5 102 q25 58.5 25 124.5 ZM512 256 l1024 0 l0 -64 q0 -26 -19 -45 q-19 -19 -45 -19 l-896 0 q-26 0 -45 19 q-19 19 -19 45 l0 64 ZM1920 576 q0 -40 -15 -75 q-15 -35 -41 -61 q-26 -26 -61 -41 q-35 -15 -75 -15 l-1408 0 q-40 0 -75 15 q-35 15 -61 41 q-26 26 -41 61 q-15 35 -15 75 l0 640 q0 26 19 45 q19 19 45 19 l192 0 l0 -192 q0 -39 15 -74 q15 -35 41.5 -61.5 q26.5 -26.5 61.5 -41.5 q35 -15 74 -15 l896 0 q39 0 74 15 q35 15 61.5 41.5 q26.5 26.5 41.5 61.5 q15 35 15 74 l0 192 l192 0 q26 0 45 -19 q19 -19 19 -45 l0 -640 ZM1536 1088 q0 -26 -19 -45 q-19 -19 -45 -19 l-896 0 q-26 0 -45 19 q-19 19 -19 45 l0 512 q0 26 19 45 q19 19 45 19 l896 0 q26 0 45 -19 q19 -19 19 -45 l0 -512 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M693.16 1718.71 l-462.45 0 q-26.84 0 -51.1 -10.33 q-24.26 -10.33 -41.81 -28.38 q-17.55 -18.06 -27.87 -42.32 q-10.33 -24.26 -10.33 -52.13 q0 -13.42 2.06 -25.81 q2.06 -12.39 7.23 -24.77 l121.81 -293.16 l0 -476.91 q0 -7.22 0.52 -14.45 q0.51 -7.22 0.51 -14.45 q4.13 -105.29 35.62 -201.29 q31.48 -96 84.64 -177.55 q53.16 -81.55 125.94 -147.61 q72.77 -66.07 159.49 -112.52 q86.71 -46.45 184.26 -71.74 q97.55 -25.29 201.8 -25.29 q100.13 0 195.1 23.23 q94.97 23.23 180.64 68.13 q85.68 44.91 159.49 109.94 q73.81 65.03 129.55 147.61 q52.64 77.42 86.71 170.33 q34.06 92.9 39.22 187.88 q1.04 14.45 1.55 29.93 q0.52 15.49 0.52 29.94 l0 474.84 l121.8 293.16 q10.33 23.74 10.33 51.61 q0 26.84 -10.84 50.58 q-10.84 23.74 -28.91 41.81 q-18.07 18.06 -42.33 28.9 q-24.26 10.84 -50.06 10.84 l-462.45 0 q-3.1 69.16 -28.39 129.03 q-25.29 59.87 -69.16 104.26 q-43.87 44.39 -103.23 70.2 q-59.36 25.8 -129.56 25.8 q-70.19 0 -129.55 -25.8 q-59.35 -25.81 -103.22 -70.2 q-43.87 -44.39 -69.16 -104.26 q-25.29 -59.87 -28.39 -129.03 ZM1816.26 1586.58 q-4.13 -10.32 -16 -37.16 q-11.87 -26.84 -26.33 -61.42 q-14.45 -34.58 -30.45 -72.78 q-16 -38.19 -28.9 -71.22 q-12.9 -33.03 -21.67 -57.29 q-8.78 -24.26 -8.78 -31.48 l0 -487.23 q0 -88.77 -23.74 -170.84 q-23.74 -82.06 -67.1 -153.29 q-43.36 -71.23 -105.81 -129.55 q-62.46 -58.32 -139.88 -100.64 q-150.71 -81.55 -324.13 -81.55 q-82.58 0 -162.06 19.09 q-79.48 19.09 -150.71 55.74 q-71.23 36.65 -132.64 90.33 q-61.42 53.68 -108.91 121.81 q-43.35 64 -71.23 139.35 q-27.88 75.36 -33.04 152.78 q-1.03 14.45 -1.54 27.87 q-0.52 13.42 -0.52 27.87 l0 488.26 q0 7.22 -8.77 31.48 q-8.77 24.26 -21.68 57.29 q-12.9 33.03 -28.9 71.22 q-16 38.2 -30.45 72.78 q-14.45 34.58 -26.32 61.42 q-11.87 26.84 -16 37.16 l1585.55 0 ZM1023.48 1915.87 q41.29 0 76.9 -15.48 q35.62 -15.48 61.94 -42.32 q26.33 -26.84 41.81 -62.45 q15.48 -35.62 17.55 -76.9 l-396.39 0 q1.03 41.29 16.52 76.9 q15.48 35.62 41.81 62.45 q26.33 26.84 62.45 42.32 q36.13 15.48 77.41 15.48 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M693.16 1718.71 l-462.45 0 q-26.84 0 -51.1 -10.33 q-24.26 -10.33 -41.81 -28.38 q-17.55 -18.06 -27.87 -42.32 q-10.33 -24.26 -10.33 -52.13 q0 -13.42 2.06 -25.81 q2.06 -12.39 7.23 -24.77 l121.81 -293.16 l0 -476.91 q0 -7.22 0.52 -14.45 q0.51 -7.22 0.51 -14.45 q4.13 -105.29 35.62 -201.29 q31.48 -96 84.64 -177.55 q53.16 -81.55 125.94 -147.61 q72.77 -66.07 159.49 -112.52 q86.71 -46.45 184.26 -71.74 q97.55 -25.29 201.8 -25.29 q100.13 0 195.1 23.23 q94.97 23.23 180.64 68.13 q85.68 44.91 159.49 109.94 q73.81 65.03 129.55 147.61 q52.64 77.42 86.71 170.33 q34.06 92.9 39.22 187.88 q1.04 14.45 1.55 29.93 q0.52 15.49 0.52 29.94 l0 474.84 l121.8 293.16 q10.33 23.74 10.33 51.61 q0 26.84 -10.84 50.58 q-10.84 23.74 -28.91 41.81 q-18.07 18.06 -42.33 28.9 q-24.26 10.84 -50.06 10.84 l-462.45 0 q-3.1 69.16 -28.39 129.03 q-25.29 59.87 -69.16 104.26 q-43.87 44.39 -103.23 70.2 q-59.36 25.8 -129.56 25.8 q-70.19 0 -129.55 -25.8 q-59.35 -25.81 -103.22 -70.2 q-43.87 -44.39 -69.16 -104.26 q-25.29 -59.87 -28.39 -129.03 ZM1816.26 1586.58 q-4.13 -10.32 -16 -37.16 q-11.87 -26.84 -26.33 -61.42 q-14.45 -34.58 -30.45 -72.78 q-16 -38.19 -28.9 -71.22 q-12.9 -33.03 -21.67 -57.29 q-8.78 -24.26 -8.78 -31.48 l0 -487.23 q0 -88.77 -23.74 -170.84 q-23.74 -82.06 -67.1 -153.29 q-43.36 -71.23 -105.81 -129.55 q-62.46 -58.32 -139.88 -100.64 q-150.71 -81.55 -324.13 -81.55 q-82.58 0 -162.06 19.09 q-79.48 19.09 -150.71 55.74 q-71.23 36.65 -132.64 90.33 q-61.42 53.68 -108.91 121.81 q-43.35 64 -71.23 139.35 q-27.88 75.36 -33.04 152.78 q-1.03 14.45 -1.54 27.87 q-0.52 13.42 -0.52 27.87 l0 488.26 q0 7.22 -8.77 31.48 q-8.77 24.26 -21.68 57.29 q-12.9 33.03 -28.9 71.22 q-16 38.2 -30.45 72.78 q-14.45 34.58 -26.32 61.42 q-11.87 26.84 -16 37.16 l1585.55 0 ZM1023.48 1915.87 q41.29 0 76.9 -15.48 q35.62 -15.48 61.94 -42.32 q26.33 -26.84 41.81 -62.45 q15.48 -35.62 17.55 -76.9 l-396.39 0 q1.03 41.29 16.52 76.9 q15.48 35.62 41.81 62.45 q26.33 26.84 62.45 42.32 q36.13 15.48 77.41 15.48 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M409.6 1774.93 l293.33 0 l-34.13 136.54 l-401.07 0 q-53.33 0 -101.87 -21.87 q-48.54 -21.87 -85.34 -58.67 q-36.8 -36.8 -58.67 -85.33 q-21.86 -48.53 -21.86 -101.87 l0 -1376 q0 -53.33 21.86 -101.87 q21.86 -48.54 58.67 -85.34 q36.8 -36.8 85.34 -58.67 q48.53 -21.86 101.87 -21.86 l1081.6 0 q54.4 0 104.54 20.8 q50.13 20.8 88.54 59.2 l289.07 289.07 q26.66 26.66 42.66 53.86 q16 27.2 24 56 q8 28.8 10.67 60.8 q2.67 32 2.67 68.27 l0 54.4 q-51.2 -13.87 -106.67 -13.87 q-8.53 0 -15.46 0 q-6.93 0 -14.4 1.07 q0 -14.93 0.54 -29.33 q0.53 -14.4 0.53 -29.34 q0 -34.13 -7.47 -66.66 q-7.46 -32.53 -33.06 -58.13 l-290.14 -290.13 q-33.06 -33.07 -80 -38.4 l0 340.27 q0 41.6 -16 78.93 q-16 37.33 -44.26 65.6 q-28.27 28.27 -65.6 44.27 q-37.34 16 -78.94 16 l-546.13 0 q-41.6 0 -78.94 -16 q-37.33 -16 -65.6 -44.27 q-28.26 -28.27 -44.26 -65.6 q-16 -37.33 -16 -78.93 l0 -341.34 l-136.53 0 q-28.8 0 -53.33 10.67 q-24.54 10.67 -43.2 29.34 q-18.66 18.66 -29.34 43.2 q-10.67 24.53 -10.67 53.33 l0 1365.33 q0 28.8 10.67 53.86 q10.67 25.07 28.8 43.2 q18.13 18.13 43.2 28.8 q25.07 10.67 53.87 10.67 l0 -614.4 q0 -41.6 16 -78.93 q16 -37.33 44.27 -65.6 q28.26 -28.27 65.6 -44.27 q37.33 -16 78.94 -16 l845.86 0 q-34.13 34.14 -66.66 68.81 q-32.54 34.66 -67.74 67.73 l-711.46 0 q-27.74 0 -48 20.26 q-20.26 20.27 -20.26 48 l0 614.4 ZM1160.53 546.13 q27.74 0 48 -20.26 q20.27 -20.26 20.27 -48 l0 -341.34 l-682.67 0 l0 341.34 q0 27.73 20.27 48 q20.27 20.26 48 20.26 l546.13 0 ZM2048 1063.47 q0 35.2 -6.93 64 q-6.93 28.8 -20.26 54.4 q-13.33 25.6 -32.53 49.07 q-19.2 23.47 -42.67 48 l-352 -352 q23.47 -24.53 45.87 -44.79 q22.4 -20.26 46.93 -34.13 q24.53 -13.87 53.33 -21.34 q28.8 -7.46 64 -7.46 q51.2 0 96 18.66 q44.8 18.66 77.87 51.73 q33.07 33.07 51.74 77.87 q18.66 44.8 18.66 96 ZM1473.07 1047.47 l352 352 l-530.14 530.13 q-10.66 10.67 -20.8 16 q-10.13 5.33 -24 9.6 q-13.86 4.27 -44.26 12.8 q-30.4 8.53 -69.34 18.66 q-38.93 10.13 -82.13 20.8 q-43.2 10.66 -80.54 19.73 q-37.34 9.07 -65.07 14.93 q-27.73 5.87 -37.33 5.87 q-18.14 0 -32.54 -14.4 q-14.4 -14.4 -14.4 -32.53 q0 -8.54 5.87 -36.27 q5.87 -27.73 14.94 -66.13 q9.06 -38.4 19.73 -81.6 q10.66 -43.2 20.8 -82.67 q10.13 -39.47 18.67 -69.87 q8.53 -30.4 12.79 -43.2 q8.54 -26.66 25.6 -43.73 l530.14 -530.13 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M409.6 1774.93 l293.33 0 l-34.13 136.54 l-401.07 0 q-53.33 0 -101.87 -21.87 q-48.54 -21.87 -85.34 -58.67 q-36.8 -36.8 -58.67 -85.33 q-21.86 -48.53 -21.86 -101.87 l0 -1376 q0 -53.33 21.86 -101.87 q21.86 -48.54 58.67 -85.34 q36.8 -36.8 85.34 -58.67 q48.53 -21.86 101.87 -21.86 l1081.6 0 q54.4 0 104.54 20.8 q50.13 20.8 88.54 59.2 l289.07 289.07 q26.66 26.66 42.66 53.86 q16 27.2 24 56 q8 28.8 10.67 60.8 q2.67 32 2.67 68.27 l0 54.4 q-51.2 -13.87 -106.67 -13.87 q-8.53 0 -15.46 0 q-6.93 0 -14.4 1.07 q0 -14.93 0.54 -29.33 q0.53 -14.4 0.53 -29.34 q0 -34.13 -7.47 -66.66 q-7.46 -32.53 -33.06 -58.13 l-290.14 -290.13 q-33.06 -33.07 -80 -38.4 l0 340.27 q0 41.6 -16 78.93 q-16 37.33 -44.26 65.6 q-28.27 28.27 -65.6 44.27 q-37.34 16 -78.94 16 l-546.13 0 q-41.6 0 -78.94 -16 q-37.33 -16 -65.6 -44.27 q-28.26 -28.27 -44.26 -65.6 q-16 -37.33 -16 -78.93 l0 -341.34 l-136.53 0 q-28.8 0 -53.33 10.67 q-24.54 10.67 -43.2 29.34 q-18.66 18.66 -29.34 43.2 q-10.67 24.53 -10.67 53.33 l0 1365.33 q0 28.8 10.67 53.86 q10.67 25.07 28.8 43.2 q18.13 18.13 43.2 28.8 q25.07 10.67 53.87 10.67 l0 -614.4 q0 -41.6 16 -78.93 q16 -37.33 44.27 -65.6 q28.26 -28.27 65.6 -44.27 q37.33 -16 78.94 -16 l845.86 0 q-34.13 34.14 -66.66 68.81 q-32.54 34.66 -67.74 67.73 l-711.46 0 q-27.74 0 -48 20.26 q-20.26 20.27 -20.26 48 l0 614.4 ZM1160.53 546.13 q27.74 0 48 -20.26 q20.27 -20.26 20.27 -48 l0 -341.34 l-682.67 0 l0 341.34 q0 27.73 20.27 48 q20.27 20.26 48 20.26 l546.13 0 ZM2048 1063.47 q0 35.2 -6.93 64 q-6.93 28.8 -20.26 54.4 q-13.33 25.6 -32.53 49.07 q-19.2 23.47 -42.67 48 l-352 -352 q23.47 -24.53 45.87 -44.79 q22.4 -20.26 46.93 -34.13 q24.53 -13.87 53.33 -21.34 q28.8 -7.46 64 -7.46 q51.2 0 96 18.66 q44.8 18.66 77.87 51.73 q33.07 33.07 51.74 77.87 q18.66 44.8 18.66 96 ZM1473.07 1047.47 l352 352 l-530.14 530.13 q-10.66 10.67 -20.8 16 q-10.13 5.33 -24 9.6 q-13.86 4.27 -44.26 12.8 q-30.4 8.53 -69.34 18.66 q-38.93 10.13 -82.13 20.8 q-43.2 10.66 -80.54 19.73 q-37.34 9.07 -65.07 14.93 q-27.73 5.87 -37.33 5.87 q-18.14 0 -32.54 -14.4 q-14.4 -14.4 -14.4 -32.53 q0 -8.54 5.87 -36.27 q5.87 -27.73 14.94 -66.13 q9.06 -38.4 19.73 -81.6 q10.66 -43.2 20.8 -82.67 q10.13 -39.47 18.67 -69.87 q8.53 -30.4 12.79 -43.2 q8.54 -26.66 25.6 -43.73 l530.14 -530.13 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M2048 603.43 l0 1152 q0 58.28 -22.86 111.42 q-22.86 53.14 -61.72 93.14 q-38.86 40 -90.86 64 q-52 24 -111.43 24 l-1468.57 0 q-58.28 0 -111.43 -22.86 q-53.14 -22.86 -93.14 -61.72 q-40 -38.86 -64 -90.86 q-24 -52 -24 -111.43 l0 -1468.57 q0 -58.28 22.86 -111.43 q22.86 -53.14 61.72 -93.14 q38.86 -40 90.86 -64 q52 -24 111.43 -24 l1157.71 0 q58.29 0 112 22.29 q53.72 22.29 94.86 63.42 l310.86 310.86 q41.14 41.14 63.43 94.85 q22.28 53.72 22.28 112 ZM1901.71 603.43 q0 -61.72 -42.28 -104 l-310.86 -310.86 q-35.43 -35.43 -85.71 -41.14 l0 364.57 q0 44.57 -17.14 84.57 q-17.14 40 -47.43 70.28 q-30.28 30.28 -70.28 47.43 q-40 17.14 -84.57 17.14 l-585.14 0 q-44.58 0 -84.58 -17.14 q-40 -17.14 -70.29 -47.43 q-30.29 -30.28 -47.43 -70.28 q-17.14 -40 -17.14 -84.57 l0 -365.71 l-146.29 0 q-30.86 0 -57.15 11.42 q-26.28 11.43 -46.28 31.43 q-20 20 -31.43 46.28 q-11.42 26.28 -11.42 57.15 l0 1462.86 q0 30.86 11.42 57.71 q11.43 26.86 30.86 46.28 q19.43 19.43 46.28 30.86 q26.85 11.43 57.72 11.43 l0 -658.28 q0 -44.57 17.15 -84.57 q17.14 -40 47.43 -70.29 q30.29 -30.28 70.29 -47.43 q40 -17.14 84.57 -17.14 l1024 0 q44.57 0 84.57 17.14 q40 17.14 70.29 47.43 q30.29 30.29 47.43 70.29 q17.14 40 17.14 84.57 l0 658.28 q30.86 0 57.14 -11.43 q26.29 -11.42 46.29 -31.42 q20 -20 31.42 -46.29 q11.43 -26.28 11.43 -57.14 l0 -1152 ZM585.14 146.29 l0 365.71 q0 29.71 21.72 51.42 q21.72 21.72 51.43 21.72 l585.14 0 q29.71 0 51.42 -21.72 q21.71 -21.71 21.71 -51.42 l0 -365.71 l-731.43 0 ZM1609.14 1901.71 l0 -658.28 q0 -29.72 -21.71 -51.43 q-21.72 -21.71 -51.43 -21.71 l-1024 0 q-29.71 0 -51.42 21.71 q-21.72 21.71 -21.72 51.43 l0 658.28 l1170.28 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M2048 603.43 l0 1152 q0 58.28 -22.86 111.42 q-22.86 53.14 -61.72 93.14 q-38.86 40 -90.86 64 q-52 24 -111.43 24 l-1468.57 0 q-58.28 0 -111.43 -22.86 q-53.14 -22.86 -93.14 -61.72 q-40 -38.86 -64 -90.86 q-24 -52 -24 -111.43 l0 -1468.57 q0 -58.28 22.86 -111.43 q22.86 -53.14 61.72 -93.14 q38.86 -40 90.86 -64 q52 -24 111.43 -24 l1157.71 0 q58.29 0 112 22.29 q53.72 22.29 94.86 63.42 l310.86 310.86 q41.14 41.14 63.43 94.85 q22.28 53.72 22.28 112 ZM1901.71 603.43 q0 -61.72 -42.28 -104 l-310.86 -310.86 q-35.43 -35.43 -85.71 -41.14 l0 364.57 q0 44.57 -17.14 84.57 q-17.14 40 -47.43 70.28 q-30.28 30.28 -70.28 47.43 q-40 17.14 -84.57 17.14 l-585.14 0 q-44.58 0 -84.58 -17.14 q-40 -17.14 -70.29 -47.43 q-30.29 -30.28 -47.43 -70.28 q-17.14 -40 -17.14 -84.57 l0 -365.71 l-146.29 0 q-30.86 0 -57.15 11.42 q-26.28 11.43 -46.28 31.43 q-20 20 -31.43 46.28 q-11.42 26.28 -11.42 57.15 l0 1462.86 q0 30.86 11.42 57.71 q11.43 26.86 30.86 46.28 q19.43 19.43 46.28 30.86 q26.85 11.43 57.72 11.43 l0 -658.28 q0 -44.57 17.15 -84.57 q17.14 -40 47.43 -70.29 q30.29 -30.28 70.29 -47.43 q40 -17.14 84.57 -17.14 l1024 0 q44.57 0 84.57 17.14 q40 17.14 70.29 47.43 q30.29 30.29 47.43 70.29 q17.14 40 17.14 84.57 l0 658.28 q30.86 0 57.14 -11.43 q26.29 -11.42 46.29 -31.42 q20 -20 31.42 -46.29 q11.43 -26.28 11.43 -57.14 l0 -1152 ZM585.14 146.29 l0 365.71 q0 29.71 21.72 51.42 q21.72 21.72 51.43 21.72 l585.14 0 q29.71 0 51.42 -21.72 q21.71 -21.71 21.71 -51.42 l0 -365.71 l-731.43 0 ZM1609.14 1901.71 l0 -658.28 q0 -29.72 -21.71 -51.43 q-21.72 -21.71 -51.43 -21.71 l-1024 0 q-29.71 0 -51.42 21.71 q-21.72 21.71 -21.72 51.43 l0 658.28 l1170.28 0 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" transform="translate(0, 30)" d="M1339.79 1400 q-33.93 0 -56.37 -24.09 q-22.44 -24.09 -22.44 -56.91 l0 -293.36 q-35.03 3.29 -70.05 7.12 q-35.03 3.83 -70.06 12.58 q-93.04 21.9 -174.58 52.55 q-81.54 30.64 -156.53 71.69 q-74.99 41.05 -146.13 92.5 q-71.14 51.44 -141.2 113.84 q-12.04 9.86 -25.18 15.88 q-13.13 6.02 -28.45 6.02 q-35.03 0 -58.02 -24.63 q-22.98 -24.63 -22.98 -58.56 l0 -6.57 q25.17 -198.12 88.11 -364.5 q62.94 -166.38 171.31 -287.88 q108.37 -121.5 264.9 -193.75 q156.53 -72.24 368.88 -83.19 l0 -298.82 q0 -32.84 21.89 -56.38 q21.89 -23.54 55.83 -23.54 q33.93 0 55.82 21.89 l630.49 619.55 q12.04 12.04 17.52 27.91 q5.47 15.87 5.47 32.29 q0 32.84 -22.99 55.82 l-630.49 619.55 q-22.98 22.99 -54.73 22.99 ZM342.61 1960.43 q-68.96 0 -131.35 -27.91 q-62.39 -27.91 -108.91 -74.43 q-46.52 -46.52 -74.44 -108.91 q-27.91 -62.39 -27.91 -131.36 l0 -1136.2 q0 -68.96 27.91 -131.35 q27.91 -62.39 74.44 -108.91 q46.53 -46.52 108.91 -74.44 q62.39 -27.92 131.35 -27.92 l427.99 0 q28.46 0 49.25 20.8 q20.79 20.8 20.79 49.26 q0 28.46 -20.79 49.25 q-20.8 20.8 -49.25 20.8 l-420.33 0 q-42.69 0 -81 16.42 q-38.31 16.42 -67.31 45.43 q-29 29.01 -45.42 67.32 q-16.42 38.31 -16.42 81 l0 1120.87 q0 42.69 16.42 81 q16.42 38.31 45.42 67.32 q29.01 29.01 67.31 45.43 q38.31 16.42 81 16.42 l1120.87 0 q42.69 0 81 -16.42 q38.32 -16.42 67.32 -45.43 q29 -29 45.42 -67.32 q16.42 -38.31 16.42 -81 l0 -140.11 q0 -28.46 20.8 -49.25 q20.8 -20.8 49.25 -20.8 q28.46 0 49.26 20.8 q20.8 20.79 20.8 49.25 l0 140.11 q0 70.05 -26.82 133.54 q-26.82 63.49 -73.34 111.65 q-46.52 48.16 -108.91 76.62 q-62.39 28.46 -133.54 28.46 l-1136.2 0 ZM1401.09 1174.51 l482.72 -475.06 l-482.72 -475.06 l0 284.6 l-160.91 10.95 q-142.29 8.75 -271.46 61.29 q-129.17 52.54 -227.68 158.72 q-39.41 42.69 -72.79 93.59 q-33.38 50.9 -59.65 106.73 q-26.27 55.82 -45.43 114.38 q-19.15 58.56 -29 115.48 q148.86 -118.22 318.52 -187.18 q169.67 -68.96 356.85 -94.13 q47.06 -6.57 95.22 -9.31 q48.17 -2.74 96.33 -7.12 l0 302.11 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" transform="translate(0, 30)" d="M1339.79 1400 q-33.93 0 -56.37 -24.09 q-22.44 -24.09 -22.44 -56.91 l0 -293.36 q-35.03 3.29 -70.05 7.12 q-35.03 3.83 -70.06 12.58 q-93.04 21.9 -174.58 52.55 q-81.54 30.64 -156.53 71.69 q-74.99 41.05 -146.13 92.5 q-71.14 51.44 -141.2 113.84 q-12.04 9.86 -25.18 15.88 q-13.13 6.02 -28.45 6.02 q-35.03 0 -58.02 -24.63 q-22.98 -24.63 -22.98 -58.56 l0 -6.57 q25.17 -198.12 88.11 -364.5 q62.94 -166.38 171.31 -287.88 q108.37 -121.5 264.9 -193.75 q156.53 -72.24 368.88 -83.19 l0 -298.82 q0 -32.84 21.89 -56.38 q21.89 -23.54 55.83 -23.54 q33.93 0 55.82 21.89 l630.49 619.55 q12.04 12.04 17.52 27.91 q5.47 15.87 5.47 32.29 q0 32.84 -22.99 55.82 l-630.49 619.55 q-22.98 22.99 -54.73 22.99 ZM342.61 1960.43 q-68.96 0 -131.35 -27.91 q-62.39 -27.91 -108.91 -74.43 q-46.52 -46.52 -74.44 -108.91 q-27.91 -62.39 -27.91 -131.36 l0 -1136.2 q0 -68.96 27.91 -131.35 q27.91 -62.39 74.44 -108.91 q46.53 -46.52 108.91 -74.44 q62.39 -27.92 131.35 -27.92 l427.99 0 q28.46 0 49.25 20.8 q20.79 20.8 20.79 49.26 q0 28.46 -20.79 49.25 q-20.8 20.8 -49.25 20.8 l-420.33 0 q-42.69 0 -81 16.42 q-38.31 16.42 -67.31 45.43 q-29 29.01 -45.42 67.32 q-16.42 38.31 -16.42 81 l0 1120.87 q0 42.69 16.42 81 q16.42 38.31 45.42 67.32 q29.01 29.01 67.31 45.43 q38.31 16.42 81 16.42 l1120.87 0 q42.69 0 81 -16.42 q38.32 -16.42 67.32 -45.43 q29 -29 45.42 -67.32 q16.42 -38.31 16.42 -81 l0 -140.11 q0 -28.46 20.8 -49.25 q20.8 -20.8 49.25 -20.8 q28.46 0 49.26 20.8 q20.8 20.79 20.8 49.25 l0 140.11 q0 70.05 -26.82 133.54 q-26.82 63.49 -73.34 111.65 q-46.52 48.16 -108.91 76.62 q-62.39 28.46 -133.54 28.46 l-1136.2 0 ZM1401.09 1174.51 l482.72 -475.06 l-482.72 -475.06 l0 284.6 l-160.91 10.95 q-142.29 8.75 -271.46 61.29 q-129.17 52.54 -227.68 158.72 q-39.41 42.69 -72.79 93.59 q-33.38 50.9 -59.65 106.73 q-26.27 55.82 -45.43 114.38 q-19.15 58.56 -29 115.48 q148.86 -118.22 318.52 -187.18 q169.67 -68.96 356.85 -94.13 q47.06 -6.57 95.22 -9.31 q48.17 -2.74 96.33 -7.12 l0 302.11 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" d="M2048 1983.03 q0 25.99 -18.99 44.98 q-18.99 18.99 -44.98 18.99 q-26.99 0 -45.98 -18.99 l-642.68 -642.69 l-146.93 487.77 q-6 19.99 -22.49 32.98 q-16.49 12.99 -38.48 12.99 q-25.99 0 -44.98 -18.99 l-402.8 -402.8 l-549.73 549.73 l-89.96 0 l0 -90.96 l549.73 -548.73 l-402.8 -402.8 q-18.99 -18.99 -18.99 -45.98 q0 -19.99 11 -34.98 q11 -14.99 28.98 -22.99 l458.77 -183.91 l-607.7 -607.7 q-18.99 -18.99 -18.99 -44.98 q0 -26.99 19.49 -45.48 q19.49 -18.49 45.48 -18.49 q25.99 0 44.98 18.99 l1919.06 1919.06 q18.99 18.99 18.99 44.98 ZM924.55 652.68 l-95.95 -95.95 l187.9 -414.8 q22.99 -51.97 70.47 -82.46 q47.48 -30.48 104.45 -30.48 q37.98 0 73.46 14.49 q35.48 14.49 62.46 41.48 l629.69 630.69 q26.99 26.99 41.49 62.97 q14.49 35.98 14.49 73.96 q0 56.98 -32.49 105.45 q-32.48 48.48 -85.46 70.47 l-419.79 174.91 l-97.95 -97.95 l468.77 -195.9 q17.99 -8 28.49 -23.49 q10.49 -15.5 10.49 -35.49 q0 -26.98 -17.99 -44.97 l-630.69 -629.7 q-8 -7.99 -20.99 -13.49 q-13 -5.5 -23.99 -5.5 q-18.99 0 -34.49 10.5 q-15.49 10.5 -23.48 27.49 l-208.9 457.78 ZM305.85 982.52 l750.63 751.63 l135.94 -451.78 l-467.77 -467.77 l-418.8 167.92 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" d="M2048 1983.03 q0 25.99 -18.99 44.98 q-18.99 18.99 -44.98 18.99 q-26.99 0 -45.98 -18.99 l-642.68 -642.69 l-146.93 487.77 q-6 19.99 -22.49 32.98 q-16.49 12.99 -38.48 12.99 q-25.99 0 -44.98 -18.99 l-402.8 -402.8 l-549.73 549.73 l-89.96 0 l0 -90.96 l549.73 -548.73 l-402.8 -402.8 q-18.99 -18.99 -18.99 -45.98 q0 -19.99 11 -34.98 q11 -14.99 28.98 -22.99 l458.77 -183.91 l-607.7 -607.7 q-18.99 -18.99 -18.99 -44.98 q0 -26.99 19.49 -45.48 q19.49 -18.49 45.48 -18.49 q25.99 0 44.98 18.99 l1919.06 1919.06 q18.99 18.99 18.99 44.98 ZM924.55 652.68 l-95.95 -95.95 l187.9 -414.8 q22.99 -51.97 70.47 -82.46 q47.48 -30.48 104.45 -30.48 q37.98 0 73.46 14.49 q35.48 14.49 62.46 41.48 l629.69 630.69 q26.99 26.99 41.49 62.97 q14.49 35.98 14.49 73.96 q0 56.98 -32.49 105.45 q-32.48 48.48 -85.46 70.47 l-419.79 174.91 l-97.95 -97.95 l468.77 -195.9 q17.99 -8 28.49 -23.49 q10.49 -15.5 10.49 -35.49 q0 -26.98 -17.99 -44.97 l-630.69 -629.7 q-8 -7.99 -20.99 -13.49 q-13 -5.5 -23.99 -5.5 q-18.99 0 -34.49 10.5 q-15.49 10.5 -23.48 27.49 l-208.9 457.78 ZM305.85 982.52 l750.63 751.63 l135.94 -451.78 l-467.77 -467.77 l-418.8 167.92 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" transform="translate(0,400)" d="M0 859.17 q0 -6.18 2.06 -16.48 q31.94 -119.5 83.96 -228.7 q52.02 -109.2 123.11 -202.94 q71.08 -93.75 159.16 -169.47 q88.08 -75.72 191.1 -129.81 q103.02 -54.09 219.95 -82.93 q116.92 -28.84 244.66 -28.84 q148.35 0 285.88 42.23 q137.53 42.23 257.03 118.47 q119.5 76.24 217.37 182.86 q97.87 106.63 165.86 236.43 q10.3 19.58 26.78 57.69 q16.49 38.12 32.45 80.35 q15.97 42.24 27.3 80.87 q11.33 38.63 11.33 58.21 q0 26.79 -19.58 46.36 q-19.58 19.57 -46.36 19.57 q-26.79 0 -40.18 -13.9 q-13.39 -13.9 -23.69 -36.58 q-11.33 -23.69 -16.49 -49.44 q-5.15 -25.75 -13.39 -50.48 q-23.69 -75.21 -64.38 -148.35 q-40.69 -73.14 -90.14 -134.95 q-65.93 -84.48 -146.28 -150.92 q-80.36 -66.44 -172.04 -112.29 q-91.69 -45.84 -192.64 -70.06 q-100.95 -24.21 -209.12 -24.21 q-127.74 0 -246.22 38.12 q-118.48 38.12 -221.49 105.59 q-103.01 67.48 -187.49 160.7 q-84.48 93.23 -143.19 203.46 q-7.21 13.39 -19.57 40.17 q-12.37 26.79 -24.73 56.66 q-12.36 29.88 -21.12 56.66 q-8.76 26.78 -8.76 40.18 q0 15.45 -5.66 31.42 q-5.66 15.96 -15.45 28.84 q-9.79 12.88 -23.7 21.64 q-13.91 8.75 -30.39 8.75 q-26.78 0 -46.36 -18.54 q-19.57 -18.54 -19.57 -46.36 ZM562.48 848.87 q0 -92.72 37.6 -175.13 q37.6 -82.41 100.96 -144.23 q63.36 -61.81 146.8 -97.87 q83.44 -36.06 176.16 -36.06 q94.78 0 178.74 36.57 q83.96 36.57 146.8 99.41 q62.84 62.84 99.41 146.8 q36.57 83.96 36.57 178.74 q0 94.78 -36.57 178.74 q-36.57 83.96 -99.41 146.8 q-62.84 62.84 -146.8 99.41 q-83.96 36.57 -178.74 36.57 q-97.87 0 -182.35 -37.09 q-84.48 -37.09 -146.29 -100.95 q-61.81 -63.87 -97.35 -149.38 q-35.54 -85.51 -35.54 -182.35 ZM1353.66 849.9 q0 -66.96 -26.79 -125.68 q-26.79 -58.72 -72.12 -102.51 q-45.33 -43.78 -105.08 -69.02 q-59.75 -25.24 -125.68 -25.24 q-69.02 0 -128.77 25.75 q-59.75 25.75 -104.57 70.57 q-44.81 44.81 -70.57 104.56 q-25.75 59.75 -25.75 128.77 q0 69.02 25.75 128.77 q25.75 59.75 70.57 104.57 q44.82 44.81 104.57 70.57 q59.75 25.76 128.77 25.76 q71.08 0 131.34 -26.27 q60.27 -26.27 104.05 -72.12 q43.79 -45.85 69.03 -107.14 q25.24 -61.29 25.24 -131.35 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" transform="translate(0,400)" d="M0 859.17 q0 -6.18 2.06 -16.48 q31.94 -119.5 83.96 -228.7 q52.02 -109.2 123.11 -202.94 q71.08 -93.75 159.16 -169.47 q88.08 -75.72 191.1 -129.81 q103.02 -54.09 219.95 -82.93 q116.92 -28.84 244.66 -28.84 q148.35 0 285.88 42.23 q137.53 42.23 257.03 118.47 q119.5 76.24 217.37 182.86 q97.87 106.63 165.86 236.43 q10.3 19.58 26.78 57.69 q16.49 38.12 32.45 80.35 q15.97 42.24 27.3 80.87 q11.33 38.63 11.33 58.21 q0 26.79 -19.58 46.36 q-19.58 19.57 -46.36 19.57 q-26.79 0 -40.18 -13.9 q-13.39 -13.9 -23.69 -36.58 q-11.33 -23.69 -16.49 -49.44 q-5.15 -25.75 -13.39 -50.48 q-23.69 -75.21 -64.38 -148.35 q-40.69 -73.14 -90.14 -134.95 q-65.93 -84.48 -146.28 -150.92 q-80.36 -66.44 -172.04 -112.29 q-91.69 -45.84 -192.64 -70.06 q-100.95 -24.21 -209.12 -24.21 q-127.74 0 -246.22 38.12 q-118.48 38.12 -221.49 105.59 q-103.01 67.48 -187.49 160.7 q-84.48 93.23 -143.19 203.46 q-7.21 13.39 -19.57 40.17 q-12.37 26.79 -24.73 56.66 q-12.36 29.88 -21.12 56.66 q-8.76 26.78 -8.76 40.18 q0 15.45 -5.66 31.42 q-5.66 15.96 -15.45 28.84 q-9.79 12.88 -23.7 21.64 q-13.91 8.75 -30.39 8.75 q-26.78 0 -46.36 -18.54 q-19.57 -18.54 -19.57 -46.36 ZM562.48 848.87 q0 -92.72 37.6 -175.13 q37.6 -82.41 100.96 -144.23 q63.36 -61.81 146.8 -97.87 q83.44 -36.06 176.16 -36.06 q94.78 0 178.74 36.57 q83.96 36.57 146.8 99.41 q62.84 62.84 99.41 146.8 q36.57 83.96 36.57 178.74 q0 94.78 -36.57 178.74 q-36.57 83.96 -99.41 146.8 q-62.84 62.84 -146.8 99.41 q-83.96 36.57 -178.74 36.57 q-97.87 0 -182.35 -37.09 q-84.48 -37.09 -146.29 -100.95 q-61.81 -63.87 -97.35 -149.38 q-35.54 -85.51 -35.54 -182.35 ZM1353.66 849.9 q0 -66.96 -26.79 -125.68 q-26.79 -58.72 -72.12 -102.51 q-45.33 -43.78 -105.08 -69.02 q-59.75 -25.24 -125.68 -25.24 q-69.02 0 -128.77 25.75 q-59.75 25.75 -104.57 70.57 q-44.81 44.81 -70.57 104.56 q-25.75 59.75 -25.75 128.77 q0 69.02 25.75 128.77 q25.75 59.75 70.57 104.57 q44.82 44.81 104.57 70.57 q59.75 25.76 128.77 25.76 q71.08 0 131.34 -26.27 q60.27 -26.27 104.05 -72.12 q43.79 -45.85 69.03 -107.14 q25.24 -61.29 25.24 -131.35 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#000000" transform="translate(0,125)" d="M2048 1479 q0 63 -25.5 120 q-25.5 57 -68 99.5 q-42.5 42.5 -99.5 68 q-57 25.5 -120 25.5 l-1422 0 q-63 0 -120 -25.5 q-57 -25.5 -99.5 -68 q-42.5 -42.5 -68 -99.5 q-25.5 -57 -25.5 -120 l0 -1166 q0 -63 25.5 -120 q25.5 -57 68 -99.5 q42.5 -42.5 99.5 -68 q57 -25.5 120 -25.5 l391 0 q77 0 143.5 33.5 q66.5 33.5 112.5 94.5 l96 128 l679 0 q63 0 120 25.5 q57 25.5 99.5 68 q42.5 42.5 68 99.5 q25.5 57 25.5 120 l0 910 ZM128 384 l626 0 q27 0 50.5 -7 q23.5 -7 44.5 -18.5 q21 -11.5 41.5 -25.5 q20.5 -14 41.5 -29 q-24 -32 -46 -63.5 q-22 -31.5 -47.5 -56.5 q-25.5 -25 -58 -40.5 q-32.5 -15.5 -76.5 -15.5 l-384 0 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 64 ZM128 1472 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 l1088 0 l0 -128 q-8 0 -16.5 0.5 q-8.5 0.5 -17.5 0.5 q-17 0 -33.5 -2 q-16.5 -2 -30 -8.5 q-13.5 -6.5 -22 -19.5 q-8.5 -13 -8.5 -35 q0 -22 8.5 -34.5 q8.5 -12.5 22 -19 q13.5 -6.5 30 -8.5 q16.5 -2 33.5 -2 l34 0 l0 -384 q-8 0 -16.5 0.5 q-8.5 0.5 -17.5 0.5 q-17 0 -33.5 -2 q-16.5 -2 -30 -8.5 q-13.5 -6.5 -22 -19.5 q-8.5 -13 -8.5 -35 q0 -22 8.5 -34.5 q8.5 -12.5 22 -19 q13.5 -6.5 30 -8.5 q16.5 -2 33.5 -2 l34 0 l0 -128 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 l0 -256 l-237 0 q-36 24 -69 47 q-33 23 -67 41 q-34 18 -71 29 q-37 11 -82 11 l-626 0 l0 960 ZM1536 640 l0 -256 l-128 0 l0 256 l128 0 ZM1920 576 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 l-64 0 l0 256 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 l0 384 l34 0 q17 0 33.5 2 q16.5 2 30 8.5 q13.5 6.5 22 19 q8.5 12.5 8.5 34.5 q0 22 -8.5 35 q-8.5 13 -22 19.5 q-13.5 6.5 -30 8.5 q-16.5 2 -33.5 2 q-9 0 -17.5 -0.5 q-8.5 -0.5 -16.5 -0.5 l0 384 l192 0 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -896 Z"/></svg>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<svg id="" width="16" height="16" style="width:16px;height:16px;" version="1.1"
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" enable-background="new 0 0 2048 2048"
xml:space="preserve"><path fill="#ffffff" transform="translate(0,125)" d="M2048 1479 q0 63 -25.5 120 q-25.5 57 -68 99.5 q-42.5 42.5 -99.5 68 q-57 25.5 -120 25.5 l-1422 0 q-63 0 -120 -25.5 q-57 -25.5 -99.5 -68 q-42.5 -42.5 -68 -99.5 q-25.5 -57 -25.5 -120 l0 -1166 q0 -63 25.5 -120 q25.5 -57 68 -99.5 q42.5 -42.5 99.5 -68 q57 -25.5 120 -25.5 l391 0 q77 0 143.5 33.5 q66.5 33.5 112.5 94.5 l96 128 l679 0 q63 0 120 25.5 q57 25.5 99.5 68 q42.5 42.5 68 99.5 q25.5 57 25.5 120 l0 910 ZM128 384 l626 0 q27 0 50.5 -7 q23.5 -7 44.5 -18.5 q21 -11.5 41.5 -25.5 q20.5 -14 41.5 -29 q-24 -32 -46 -63.5 q-22 -31.5 -47.5 -56.5 q-25.5 -25 -58 -40.5 q-32.5 -15.5 -76.5 -15.5 l-384 0 q-39 0 -74 15 q-35 15 -61.5 41.5 q-26.5 26.5 -41.5 61.5 q-15 35 -15 74 l0 64 ZM128 1472 q0 39 15 74 q15 35 41.5 61.5 q26.5 26.5 61.5 41.5 q35 15 74 15 l1088 0 l0 -128 q-8 0 -16.5 0.5 q-8.5 0.5 -17.5 0.5 q-17 0 -33.5 -2 q-16.5 -2 -30 -8.5 q-13.5 -6.5 -22 -19.5 q-8.5 -13 -8.5 -35 q0 -22 8.5 -34.5 q8.5 -12.5 22 -19 q13.5 -6.5 30 -8.5 q16.5 -2 33.5 -2 l34 0 l0 -384 q-8 0 -16.5 0.5 q-8.5 0.5 -17.5 0.5 q-17 0 -33.5 -2 q-16.5 -2 -30 -8.5 q-13.5 -6.5 -22 -19.5 q-8.5 -13 -8.5 -35 q0 -22 8.5 -34.5 q8.5 -12.5 22 -19 q13.5 -6.5 30 -8.5 q16.5 -2 33.5 -2 l34 0 l0 -128 q-27 0 -50.5 -10 q-23.5 -10 -40.5 -27 q-17 -17 -27 -40.5 q-10 -23.5 -10 -50.5 l0 -256 l-237 0 q-36 24 -69 47 q-33 23 -67 41 q-34 18 -71 29 q-37 11 -82 11 l-626 0 l0 960 ZM1536 640 l0 -256 l-128 0 l0 256 l128 0 ZM1920 576 q0 -39 -15 -74 q-15 -35 -41.5 -61.5 q-26.5 -26.5 -61.5 -41.5 q-35 -15 -74 -15 l-64 0 l0 256 q0 27 -10 50 q-10 23 -27.5 40.5 q-17.5 17.5 -40.5 27.5 q-23 10 -50 10 l0 384 l34 0 q17 0 33.5 2 q16.5 2 30 8.5 q13.5 6.5 22 19 q8.5 12.5 8.5 34.5 q0 22 -8.5 35 q-8.5 13 -22 19.5 q-13.5 6.5 -30 8.5 q-16.5 2 -33.5 2 q-9 0 -17.5 -0.5 q-8.5 -0.5 -16.5 -0.5 l0 384 l192 0 q39 0 74 -15 q35 -15 61.5 -41.5 q26.5 -26.5 41.5 -61.5 q15 -35 15 -74 l0 -896 Z"/></svg>
\ No newline at end of file
此差异已折叠。
...@@ -69,8 +69,8 @@ ...@@ -69,8 +69,8 @@
<file>images/icons/Update_white.svg</file> <file>images/icons/Update_white.svg</file>
<file>images/icons/Video_black.svg</file> <file>images/icons/Video_black.svg</file>
<file>images/icons/Video_white.svg</file> <file>images/icons/Video_white.svg</file>
<file>images/icons/Web_black.svg</file> <file>images/icons/Globe_black.svg</file>
<file>images/icons/Web_white.svg</file> <file>images/icons/Globe_white.svg</file>
<file>images/icons/Zoom_black.svg</file> <file>images/icons/Zoom_black.svg</file>
<file>images/icons/Zoom_white.svg</file> <file>images/icons/Zoom_white.svg</file>
<file>images/icons/Language_black.svg</file> <file>images/icons/Language_black.svg</file>
...@@ -135,6 +135,30 @@ ...@@ -135,6 +135,30 @@
<file>images/icons/Send_white.svg</file> <file>images/icons/Send_white.svg</file>
<file>images/icons/SendFill_black.svg</file> <file>images/icons/SendFill_black.svg</file>
<file>images/icons/SendFill_white.svg</file> <file>images/icons/SendFill_white.svg</file>
<file>images/icons/Share_black.svg</file>
<file>images/icons/Share_white.svg</file>
<file>images/icons/Unpin_black.svg</file>
<file>images/icons/Unpin_white.svg</file>
<file>images/icons/SaveAs_black.svg</file>
<file>images/icons/SaveAs_white.svg</file>
<file>images/icons/Save_black.svg</file>
<file>images/icons/Save_white.svg</file>
<file>images/icons/Ringer_black.svg</file>
<file>images/icons/Ringer_white.svg</file>
<file>images/icons/ZipFolder_black.svg</file>
<file>images/icons/ZipFolder_white.svg</file>
<file>images/icons/History_black.svg</file>
<file>images/icons/History_white.svg</file>
<file>images/icons/Print_black.svg</file>
<file>images/icons/Print_white.svg</file>
<file>images/icons/Media_black.svg</file>
<file>images/icons/Media_white.svg</file>
<file>images/icons/View_black.svg</file>
<file>images/icons/View_white.svg</file>
<file>images/icons/Hide_black.svg</file>
<file>images/icons/Hide_white.svg</file>
<file>images/icons/Delete_black.svg</file>
<file>images/icons/Delete_white.svg</file>
<file>images/acrylic/noise.png</file> <file>images/acrylic/noise.png</file>
<file>images/folder_list_dialog/Close_white.png</file> <file>images/folder_list_dialog/Close_white.png</file>
<file>images/folder_list_dialog/Close_black.png</file> <file>images/folder_list_dialog/Close_black.png</file>
......
from .config import * from .config import *
from .auto_wrap import TextWrap from .auto_wrap import TextWrap
from .icon import Icon, getIconColor, drawSvgIcon, FluentIcon, drawIcon, FluentIconBase, writeSvg from .icon import Icon, getIconColor, drawSvgIcon, FluentIcon, drawIcon, FluentIconBase, writeSvg
from .style_sheet import setStyleSheet, getStyleSheet, setTheme, ThemeColor, themeColor, setThemeColor, applyThemeColor from .style_sheet import (setStyleSheet, getStyleSheet, setTheme, ThemeColor, themeColor,
setThemeColor, applyThemeColor, FluentStyleSheet, StyleSheetBase)
from .smooth_scroll import SmoothScroll, SmoothMode from .smooth_scroll import SmoothScroll, SmoothMode
\ No newline at end of file
...@@ -192,43 +192,54 @@ class FluentIcon(FluentIconBase, Enum): ...@@ -192,43 +192,54 @@ class FluentIcon(FluentIconBase, Enum):
CUT = "Cut" CUT = "Cut"
PIN = "Pin" PIN = "Pin"
TAG = "Tag" TAG = "Tag"
WEB = "Web"
CHAT = "Chat" CHAT = "Chat"
COPY = "Copy" COPY = "Copy"
CODE = "Code" CODE = "Code"
EDIT = "Edit" EDIT = "Edit"
FONT = "Font" FONT = "Font"
HELP = "Help" HELP = "Help"
HIDE = "Hide"
HOME = "Home" HOME = "Home"
INFO = "Info" INFO = "Info"
LINK = "Link" LINK = "Link"
MAIL = "Mail" MAIL = "Mail"
MENU = "Menu" MENU = "Menu"
MORE = "More" MORE = "More"
SAVE = "Save"
SEND = "Send" SEND = "Send"
SYNC = "Sync" SYNC = "Sync"
VIEW = "View"
ZOOM = "Zoom" ZOOM = "Zoom"
ALBUM = "Album" ALBUM = "Album"
BRUSH = "Brush" BRUSH = "Brush"
CLOSE = "Close" CLOSE = "Close"
EMBED = "Embed" EMBED = "Embed"
GLOBE = "Globe"
HEART = "Heart" HEART = "Heart"
MEDIA = "Media"
MOVIE = "Movie" MOVIE = "Movie"
MUSIC = "Music" MUSIC = "Music"
PASTE = "Paste"
PHOTO = "Photo" PHOTO = "Photo"
PHONE = "Phone" PHONE = "Phone"
PRINT = "Print"
SHARE = "Share"
UNPIN = "Unpin"
VIDEO = "Video" VIDEO = "Video"
PASTE = "Paste"
CAMERA = "Camera" CAMERA = "Camera"
CANCEL = "Cancel" CANCEL = "Cancel"
DELETE = "Delete"
FOLDER = "Folder" FOLDER = "Folder"
SCROLL = "Scroll" SCROLL = "Scroll"
LAYOUT = "Layout" LAYOUT = "Layout"
GITHUB = "GitHub" GITHUB = "GitHub"
SEARCH = "Search"
UPDATE = "Update" UPDATE = "Update"
RETURN = "Return" RETURN = "Return"
RINGER = "Ringer"
SEARCH = "Search"
SAVE_AS = "SaveAs"
ZOOM_IN = "ZoomIn" ZOOM_IN = "ZoomIn"
HISTORY = "History"
SETTING = "Setting" SETTING = "Setting"
PALETTE = "Palette" PALETTE = "Palette"
MESSAGE = "Message" MESSAGE = "Message"
...@@ -248,6 +259,7 @@ class FluentIcon(FluentIconBase, Enum): ...@@ -248,6 +259,7 @@ class FluentIcon(FluentIconBase, Enum):
HIGHTLIGHT = "Highlight" HIGHTLIGHT = "Highlight"
FOLDER_ADD = "FolderAdd" FOLDER_ADD = "FolderAdd"
PENCIL_INK = "PencilInk" PENCIL_INK = "PencilInk"
ZIP_FOLDER = "ZipFolder"
MICROPHONE = "Microphone" MICROPHONE = "Microphone"
ARROW_DOWN = "ChevronDown" ARROW_DOWN = "ChevronDown"
TRANSPARENT = "Transparent" TRANSPARENT = "Transparent"
......
# coding:utf-8 # coding:utf-8
from enum import Enum from enum import Enum
from string import Template from string import Template
from typing import Union
import weakref import weakref
from PyQt5.QtCore import QFile, QObject from PyQt5.QtCore import QFile, QObject
...@@ -66,19 +67,65 @@ def applyThemeColor(qss: str): ...@@ -66,19 +67,65 @@ def applyThemeColor(qss: str):
return template.safe_substitute(mappings) return template.safe_substitute(mappings)
def getStyleSheet(file, theme=Theme.AUTO): class StyleSheetBase:
""" Style sheet base class """
def path(self, theme=Theme.AUTO):
""" get the path of style sheet """
raise NotImplementedError
def content(self, theme=Theme.AUTO):
""" get the content of style sheet """
return getStyleSheet(self, theme)
def apply(self, widget: QWidget, theme=Theme.AUTO):
""" apply style sheet to widget """
setStyleSheet(widget, self, theme)
class FluentStyleSheet(StyleSheetBase, Enum):
""" Fluent style sheet """
MENU = "menu"
BUTTON = "button"
DIALOG = "dialog"
SLIDER = "slider"
INFO_BAR = "info_bar"
SPIN_BOX = "spin_box"
TOOL_TIP = "tool_tip"
CHECK_BOX = "check_box"
COMBO_BOX = "combo_box"
LINE_EDIT = "line_edit"
SETTING_CARD = "setting_card"
COLOR_DIALOG = "color_dialog"
SWITCH_BUTTON = "switch_button"
MESSAGE_DIALOG = "message_dialog"
STATE_TOOL_TIP = "state_tool_tip"
FOLDER_LIST_DIALOG = "folder_list_dialog"
SETTING_CARD_GROUP = "setting_card_group"
EXPAND_SETTING_CARD = "expand_setting_card"
NAVIGATION_INTERFACE = "navigation_interface"
def path(self, theme=Theme.AUTO):
theme = qconfig.theme if theme == Theme.AUTO else theme
return f":/qfluentwidgets/qss/{theme.value.lower()}/{self.value}.qss"
def getStyleSheet(file: Union[str, StyleSheetBase], theme=Theme.AUTO):
""" get style sheet from `qfluentwidgets` embedded qss file """ get style sheet from `qfluentwidgets` embedded qss file
Parameters Parameters
---------- ----------
file: str file: str | StyleSheetBase
qss file name, without `.qss` suffix qss file
theme: Theme theme: Theme
the theme of style sheet the theme of style sheet
""" """
theme = qconfig.theme if theme == Theme.AUTO else theme if isinstance(file, StyleSheetBase):
f = QFile(f":/qfluentwidgets/qss/{theme.value.lower()}/{file}.qss") file = file.path(theme)
f = QFile(file)
f.open(QFile.ReadOnly) f.open(QFile.ReadOnly)
qss = str(f.readAll(), encoding='utf-8') qss = str(f.readAll(), encoding='utf-8')
f.close() f.close()
...@@ -86,16 +133,16 @@ def getStyleSheet(file, theme=Theme.AUTO): ...@@ -86,16 +133,16 @@ def getStyleSheet(file, theme=Theme.AUTO):
return applyThemeColor(qss) return applyThemeColor(qss)
def setStyleSheet(widget, file, theme=Theme.AUTO, register=True): def setStyleSheet(widget, file: Union[str, StyleSheetBase], theme=Theme.AUTO, register=True):
""" set the style sheet of widget using `qfluentwidgets` embedded qss file """ set the style sheet of widget
Parameters Parameters
---------- ----------
widget: QWidget widget: QWidget
the widget to set style sheet the widget to set style sheet
file: str file: str | StyleSheetBase
qss file name, without `.qss` suffix qss file
theme: Theme theme: Theme
the theme of style sheet the theme of style sheet
......
...@@ -4,7 +4,7 @@ from PyQt5.QtGui import (QBrush, QColor, QPixmap, ...@@ -4,7 +4,7 @@ from PyQt5.QtGui import (QBrush, QColor, QPixmap,
QPainter, QPen, QIntValidator, QRegExpValidator, QIcon) QPainter, QPen, QIntValidator, QRegExpValidator, QIcon)
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QPushButton, QFrame, QVBoxLayout from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QPushButton, QFrame, QVBoxLayout
from ...common.style_sheet import setStyleSheet, getStyleSheet from ...common.style_sheet import FluentStyleSheet
from ..widgets import Slider, ScrollArea, PushButton, PrimaryPushButton from ..widgets import Slider, ScrollArea, PushButton, PrimaryPushButton
from ..widgets.line_edit import LineEdit from ..widgets.line_edit import LineEdit
from .mask_dialog_base import MaskDialogBase from .mask_dialog_base import MaskDialogBase
...@@ -94,7 +94,7 @@ class BrightnessSlider(Slider): ...@@ -94,7 +94,7 @@ class BrightnessSlider(Slider):
""" set color """ """ set color """
self.color = QColor(color) self.color = QColor(color)
self.setValue(self.color.value()) self.setValue(self.color.value())
qss = getStyleSheet('color_dialog') qss = FluentStyleSheet.COLOR_DIALOG.content()
qss = qss.replace('--slider-hue', str(self.color.hue())) qss = qss.replace('--slider-hue', str(self.color.hue()))
qss = qss.replace('--slider-saturation', str(self.color.saturation())) qss = qss.replace('--slider-saturation', str(self.color.saturation()))
self.setStyleSheet(qss) self.setStyleSheet(qss)
...@@ -156,7 +156,7 @@ class HexColorLineEdit(ColorLineEdit): ...@@ -156,7 +156,7 @@ class HexColorLineEdit(ColorLineEdit):
self.setValidator(QRegExpValidator(QRegExp(r'[A-Fa-f0-9]{6}'))) self.setValidator(QRegExpValidator(QRegExp(r'[A-Fa-f0-9]{6}')))
self.setTextMargins(4, 0, 33, 0) self.setTextMargins(4, 0, 33, 0)
self.prefixLabel = QLabel('#', self) self.prefixLabel = QLabel('#', self)
self.prefixLabel.move(10, 7) self.prefixLabel.move(7, 2)
self.prefixLabel.setObjectName('prefixLabel') self.prefixLabel.setObjectName('prefixLabel')
def setColor(self, color): def setColor(self, color):
...@@ -261,7 +261,7 @@ class ColorDialog(MaskDialogBase): ...@@ -261,7 +261,7 @@ class ColorDialog(MaskDialogBase):
self.yesButton.setObjectName('yesButton') self.yesButton.setObjectName('yesButton')
self.cancelButton.setObjectName('cancelButton') self.cancelButton.setObjectName('cancelButton')
self.buttonGroup.setObjectName('buttonGroup') self.buttonGroup.setObjectName('buttonGroup')
setStyleSheet(self, 'color_dialog') FluentStyleSheet.COLOR_DIALOG.apply(self)
self.titleLabel.adjustSize() self.titleLabel.adjustSize()
self.editLabel.adjustSize() self.editLabel.adjustSize()
......
...@@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QLabel, QFrame, QVBoxLayout, QHBoxLayout, QPushButto ...@@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QLabel, QFrame, QVBoxLayout, QHBoxLayout, QPushButto
from qframelesswindow import FramelessDialog from qframelesswindow import FramelessDialog
from ...common.auto_wrap import TextWrap from ...common.auto_wrap import TextWrap
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from ..widgets.button import PrimaryPushButton from ..widgets.button import PrimaryPushButton
from .mask_dialog_base import MaskDialogBase from .mask_dialog_base import MaskDialogBase
...@@ -93,7 +93,7 @@ class Ui_MessageBox: ...@@ -93,7 +93,7 @@ class Ui_MessageBox:
self.buttonGroup.setObjectName('buttonGroup') self.buttonGroup.setObjectName('buttonGroup')
self.cancelButton.setObjectName('cancelButton') self.cancelButton.setObjectName('cancelButton')
setStyleSheet(self, 'dialog') FluentStyleSheet.DIALOG.apply(self)
self.yesButton.adjustSize() self.yesButton.adjustSize()
self.cancelButton.adjustSize() self.cancelButton.adjustSize()
...@@ -117,7 +117,7 @@ class Dialog(FramelessDialog, Ui_MessageBox): ...@@ -117,7 +117,7 @@ class Dialog(FramelessDialog, Ui_MessageBox):
self.vBoxLayout.insertWidget(0, self.windowTitleLabel, 0, Qt.AlignTop) self.vBoxLayout.insertWidget(0, self.windowTitleLabel, 0, Qt.AlignTop)
self.windowTitleLabel.setObjectName('windowTitleLabel') self.windowTitleLabel.setObjectName('windowTitleLabel')
setStyleSheet(self, 'dialog') FluentStyleSheet.DIALOG.apply(self)
self.setFixedSize(self.size()) self.setFixedSize(self.size())
......
...@@ -9,7 +9,7 @@ from PyQt5.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel, ...@@ -9,7 +9,7 @@ from PyQt5.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel,
from ...common.config import isDarkTheme from ...common.config import isDarkTheme
from ...common.icon import getIconColor from ...common.icon import getIconColor
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from .dialog import Dialog from .dialog import Dialog
from .mask_dialog_base import MaskDialogBase from .mask_dialog_base import MaskDialogBase
from ..widgets.scroll_area import ScrollArea from ..widgets.scroll_area import ScrollArea
...@@ -150,7 +150,7 @@ class FolderListDialog(MaskDialogBase): ...@@ -150,7 +150,7 @@ class FolderListDialog(MaskDialogBase):
self.completeButton.setObjectName('completeButton') self.completeButton.setObjectName('completeButton')
self.scrollWidget.setObjectName('scrollWidget') self.scrollWidget.setObjectName('scrollWidget')
setStyleSheet(self, 'folder_list_dialog') FluentStyleSheet.FOLDER_LIST_DIALOG.apply(self)
self.setStyle(QApplication.style()) self.setStyle(QApplication.style())
self.titleLabel.adjustSize() self.titleLabel.adjustSize()
......
...@@ -3,7 +3,7 @@ from PyQt5.QtCore import pyqtSignal ...@@ -3,7 +3,7 @@ from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QLabel, QPushButton from PyQt5.QtWidgets import QLabel, QPushButton
from ...common.auto_wrap import TextWrap from ...common.auto_wrap import TextWrap
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from .mask_dialog_base import MaskDialogBase from .mask_dialog_base import MaskDialogBase
...@@ -64,4 +64,4 @@ class MessageDialog(MaskDialogBase): ...@@ -64,4 +64,4 @@ class MessageDialog(MaskDialogBase):
self.windowMask.setObjectName('windowMask') self.windowMask.setObjectName('windowMask')
self.titleLabel.setObjectName('titleLabel') self.titleLabel.setObjectName('titleLabel')
self.contentLabel.setObjectName('contentLabel') self.contentLabel.setObjectName('contentLabel')
setStyleSheet(self, 'message_dialog') FluentStyleSheet.MESSAGE_DIALOG.apply(self)
...@@ -6,7 +6,7 @@ from PyQt5.QtGui import QResizeEvent, QIcon ...@@ -6,7 +6,7 @@ from PyQt5.QtGui import QResizeEvent, QIcon
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget
from .navigation_panel import NavigationPanel, NavigationItemPostion, NavigationWidget, NavigationDisplayMode from .navigation_panel import NavigationPanel, NavigationItemPostion, NavigationWidget, NavigationDisplayMode
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from ...common.icon import FluentIconBase from ...common.icon import FluentIconBase
...@@ -38,9 +38,10 @@ class NavigationInterface(QWidget): ...@@ -38,9 +38,10 @@ class NavigationInterface(QWidget):
self.resize(48, self.height()) self.resize(48, self.height())
self.setMinimumWidth(48) self.setMinimumWidth(48)
self.setAttribute(Qt.WA_StyledBackground) self.setAttribute(Qt.WA_StyledBackground)
setStyleSheet(self, 'navigation_interface') FluentStyleSheet.NAVIGATION_INTERFACE.apply(self)
def addItem(self, routeKey: str, icon: Union[str, QIcon, FluentIconBase], text: str, onClick, selectable=True, position=NavigationItemPostion.TOP): def addItem(self, routeKey: str, icon: Union[str, QIcon, FluentIconBase], text: str, onClick, selectable=True,
position=NavigationItemPostion.TOP):
""" add navigation item """ add navigation item
Parameters Parameters
......
...@@ -8,7 +8,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QFrame, QApplication ...@@ -8,7 +8,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QFrame, QApplication
from .navigation_widget import NavigationPushButton, NavigationToolButton, NavigationWidget, NavigationSeparator from .navigation_widget import NavigationPushButton, NavigationToolButton, NavigationWidget, NavigationSeparator
from ..widgets.scroll_area import ScrollArea from ..widgets.scroll_area import ScrollArea
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from ...common.icon import FluentIconBase from ...common.icon import FluentIconBase
from ...common.icon import FluentIcon as FIF from ...common.icon import FluentIcon as FIF
...@@ -87,7 +87,7 @@ class NavigationPanel(QFrame): ...@@ -87,7 +87,7 @@ class NavigationPanel(QFrame):
self.setProperty('menu', False) self.setProperty('menu', False)
self.scrollWidget.setObjectName('scrollWidget') self.scrollWidget.setObjectName('scrollWidget')
setStyleSheet(self, 'navigation_interface') FluentStyleSheet.NAVIGATION_INTERFACE.apply(self)
self.__initLayout() self.__initLayout()
def __initLayout(self): def __initLayout(self):
......
...@@ -8,7 +8,7 @@ from PyQt5.QtWidgets import QFrame, QWidget, QAbstractButton, QApplication ...@@ -8,7 +8,7 @@ from PyQt5.QtWidgets import QFrame, QWidget, QAbstractButton, QApplication
from ...common.config import isDarkTheme from ...common.config import isDarkTheme
from ...common.icon import FluentIcon as FIF from ...common.icon import FluentIcon as FIF
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from .setting_card import SettingCard from .setting_card import SettingCard
from ..layout.v_box_layout import VBoxLayout from ..layout.v_box_layout import VBoxLayout
...@@ -119,8 +119,8 @@ class ExpandSettingCard(QFrame): ...@@ -119,8 +119,8 @@ class ExpandSettingCard(QFrame):
# initialize style sheet # initialize style sheet
self.view.setObjectName('view') self.view.setObjectName('view')
self.setProperty('isExpand', False) self.setProperty('isExpand', False)
setStyleSheet(self.card, 'expand_setting_card') FluentStyleSheet.EXPAND_SETTING_CARD.apply(self.card)
setStyleSheet(self, 'expand_setting_card') FluentStyleSheet.EXPAND_SETTING_CARD.apply(self)
self.card.installEventFilter(self) self.card.installEventFilter(self)
self.aniGroup.finished.connect(self.__onAniFinished) self.aniGroup.finished.connect(self.__onAniFinished)
......
...@@ -12,7 +12,7 @@ from ..widgets.switch_button import SwitchButton, IndicatorPosition ...@@ -12,7 +12,7 @@ from ..widgets.switch_button import SwitchButton, IndicatorPosition
from ..widgets.slider import Slider from ..widgets.slider import Slider
from ..widgets.icon_widget import IconWidget from ..widgets.icon_widget import IconWidget
from ..widgets.button import HyperlinkButton from ..widgets.button import HyperlinkButton
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from ...common.config import qconfig, isDarkTheme, ConfigItem from ...common.config import qconfig, isDarkTheme, ConfigItem
from ...common.icon import FluentIconBase from ...common.icon import FluentIconBase
...@@ -68,7 +68,7 @@ class SettingCard(QFrame): ...@@ -68,7 +68,7 @@ class SettingCard(QFrame):
self.hBoxLayout.addStretch(1) self.hBoxLayout.addStretch(1)
self.contentLabel.setObjectName('contentLabel') self.contentLabel.setObjectName('contentLabel')
setStyleSheet(self, 'setting_card') FluentStyleSheet.SETTING_CARD.apply(self)
def setTitle(self, title: str): def setTitle(self, title: str):
""" set the title of card """ """ set the title of card """
......
...@@ -4,7 +4,7 @@ from typing import List ...@@ -4,7 +4,7 @@ from typing import List
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from ..layout.expand_layout import ExpandLayout from ..layout.expand_layout import ExpandLayout
...@@ -27,7 +27,7 @@ class SettingCardGroup(QWidget): ...@@ -27,7 +27,7 @@ class SettingCardGroup(QWidget):
self.vBoxLayout.addSpacing(12) self.vBoxLayout.addSpacing(12)
self.vBoxLayout.addLayout(self.cardLayout, 1) self.vBoxLayout.addLayout(self.cardLayout, 1)
setStyleSheet(self, 'setting_card_group') FluentStyleSheet.SETTING_CARD_GROUP.apply(self)
self.titleLabel.adjustSize() self.titleLabel.adjustSize()
def addSettingCard(self, card: QWidget): def addSettingCard(self, card: QWidget):
......
...@@ -3,10 +3,10 @@ from typing import Union ...@@ -3,10 +3,10 @@ from typing import Union
from PyQt5.QtCore import QUrl, Qt, QRectF, QSize from PyQt5.QtCore import QUrl, Qt, QRectF, QSize
from PyQt5.QtGui import QDesktopServices, QIcon, QPainter from PyQt5.QtGui import QDesktopServices, QIcon, QPainter
from PyQt5.QtWidgets import QPushButton, QRadioButton, QToolButton, QAbstractButton from PyQt5.QtWidgets import QPushButton, QRadioButton, QToolButton
from ...common.icon import FluentIconBase, drawIcon, isDarkTheme, Theme from ...common.icon import FluentIconBase, drawIcon, isDarkTheme, Theme
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
class PushButton(QPushButton): class PushButton(QPushButton):
...@@ -14,7 +14,7 @@ class PushButton(QPushButton): ...@@ -14,7 +14,7 @@ class PushButton(QPushButton):
def __init__(self, text: str, parent=None, icon: Union[QIcon, str, FluentIconBase] = None): def __init__(self, text: str, parent=None, icon: Union[QIcon, str, FluentIconBase] = None):
super().__init__(text=text, parent=parent) super().__init__(text=text, parent=parent)
setStyleSheet(self, 'button') FluentStyleSheet.BUTTON.apply(self)
self._icon = icon self._icon = icon
self.isPressed = False self.isPressed = False
self.setProperty('hasIcon', icon is not None) self.setProperty('hasIcon', icon is not None)
...@@ -84,7 +84,7 @@ class HyperlinkButton(QPushButton): ...@@ -84,7 +84,7 @@ class HyperlinkButton(QPushButton):
super().__init__(text, parent) super().__init__(text, parent)
self.url = QUrl(url) self.url = QUrl(url)
self.clicked.connect(lambda i: QDesktopServices.openUrl(self.url)) self.clicked.connect(lambda i: QDesktopServices.openUrl(self.url))
setStyleSheet(self, 'button') FluentStyleSheet.BUTTON.apply(self)
self.setCursor(Qt.PointingHandCursor) self.setCursor(Qt.PointingHandCursor)
...@@ -93,7 +93,7 @@ class RadioButton(QRadioButton): ...@@ -93,7 +93,7 @@ class RadioButton(QRadioButton):
def __init__(self, text: str, parent=None): def __init__(self, text: str, parent=None):
super().__init__(text, parent) super().__init__(text, parent)
setStyleSheet(self, 'button') FluentStyleSheet.BUTTON.apply(self)
class ToolButton(QToolButton): class ToolButton(QToolButton):
...@@ -103,7 +103,7 @@ class ToolButton(QToolButton): ...@@ -103,7 +103,7 @@ class ToolButton(QToolButton):
super().__init__(parent) super().__init__(parent)
self._icon = icon self._icon = icon
self.isPressed = False self.isPressed = False
setStyleSheet(self, 'button') FluentStyleSheet.BUTTON.apply(self)
def setIcon(self, icon: Union[QIcon, str, FluentIconBase]): def setIcon(self, icon: Union[QIcon, str, FluentIconBase]):
self._icon = icon self._icon = icon
......
# coding: utf-8 # coding: utf-8
from PyQt5.QtWidgets import QCheckBox from PyQt5.QtWidgets import QCheckBox
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
class CheckBox(QCheckBox): class CheckBox(QCheckBox):
...@@ -9,4 +9,4 @@ class CheckBox(QCheckBox): ...@@ -9,4 +9,4 @@ class CheckBox(QCheckBox):
def __init__(self, text: str, parent=None): def __init__(self, text: str, parent=None):
super().__init__(text, parent) super().__init__(text, parent)
setStyleSheet(self, 'check_box') FluentStyleSheet.CHECK_BOX.apply(self)
...@@ -6,7 +6,7 @@ from PyQt5.QtWidgets import QAction, QPushButton, QWidget ...@@ -6,7 +6,7 @@ from PyQt5.QtWidgets import QAction, QPushButton, QWidget
from .menu import RoundMenu from .menu import RoundMenu
from ...common.config import isDarkTheme from ...common.config import isDarkTheme
from ...common.icon import FluentIcon as FIF from ...common.icon import FluentIcon as FIF
from ...common.style_sheet import setStyleSheet, themeColor from ...common.style_sheet import FluentStyleSheet, themeColor
class ComboBox(QPushButton): class ComboBox(QPushButton):
...@@ -22,7 +22,7 @@ class ComboBox(QPushButton): ...@@ -22,7 +22,7 @@ class ComboBox(QPushButton):
self.items = [] self.items = []
self._currentIndex = -1 self._currentIndex = -1
self.dropMenu = None self.dropMenu = None
setStyleSheet(self, 'combo_box') FluentStyleSheet.COMBO_BOX.apply(self)
def addItem(self, text): def addItem(self, text):
""" add item """ add item
...@@ -232,7 +232,7 @@ class ComboBoxMenu(RoundMenu): ...@@ -232,7 +232,7 @@ class ComboBoxMenu(RoundMenu):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(title="", parent=parent) super().__init__(title="", parent=parent)
self.view.setViewportMargins(5, 2, 5, 6) self.view.setViewportMargins(5, 2, 5, 6)
setStyleSheet(self, 'combo_box') FluentStyleSheet.COMBO_BOX.apply(self)
self.setItemHeight(33) self.setItemHeight(33)
def addAction(self, action): def addAction(self, action):
......
...@@ -10,7 +10,7 @@ from PyQt5.QtWidgets import (QWidget, QFrame, QLabel, QHBoxLayout, QVBoxLayout, ...@@ -10,7 +10,7 @@ from PyQt5.QtWidgets import (QWidget, QFrame, QLabel, QHBoxLayout, QVBoxLayout,
QToolButton, QGraphicsOpacityEffect) QToolButton, QGraphicsOpacityEffect)
from ...common.auto_wrap import TextWrap from ...common.auto_wrap import TextWrap
from ...common.style_sheet import setStyleSheet, themeColor from ...common.style_sheet import FluentStyleSheet, themeColor
from ...common.icon import FluentIconBase, Theme, isDarkTheme, writeSvg, drawSvgIcon, drawIcon from ...common.icon import FluentIconBase, Theme, isDarkTheme, writeSvg, drawSvgIcon, drawIcon
from ...common.icon import FluentIcon as FIF from ...common.icon import FluentIcon as FIF
...@@ -24,7 +24,7 @@ class InfoBarCloseButton(QToolButton): ...@@ -24,7 +24,7 @@ class InfoBarCloseButton(QToolButton):
self.setIconSize(QSize(12, 12)) self.setIconSize(QSize(12, 12))
self.setCursor(Qt.PointingHandCursor) self.setCursor(Qt.PointingHandCursor)
self.setObjectName('infoBarCloseButton') self.setObjectName('infoBarCloseButton')
setStyleSheet(self, 'info_bar') FluentStyleSheet.INFO_BAR.apply(self)
def paintEvent(self, e): def paintEvent(self, e):
super().paintEvent(e) super().paintEvent(e)
...@@ -201,7 +201,7 @@ class InfoBar(QFrame): ...@@ -201,7 +201,7 @@ class InfoBar(QFrame):
if isinstance(self.icon, Enum): if isinstance(self.icon, Enum):
self.setProperty('type', self.icon.value) self.setProperty('type', self.icon.value)
setStyleSheet(self, 'info_bar') FluentStyleSheet.INFO_BAR.apply(self)
def __fadeOut(self): def __fadeOut(self):
""" fade out """ """ fade out """
......
...@@ -4,7 +4,7 @@ from PyQt5.QtCore import QSize, Qt, QRectF, pyqtSignal ...@@ -4,7 +4,7 @@ from PyQt5.QtCore import QSize, Qt, QRectF, pyqtSignal
from PyQt5.QtGui import QPainter, QPainterPath, QIcon from PyQt5.QtGui import QPainter, QPainterPath, QIcon
from PyQt5.QtWidgets import QHBoxLayout, QLineEdit, QToolButton, QTextEdit, QPlainTextEdit from PyQt5.QtWidgets import QHBoxLayout, QLineEdit, QToolButton, QTextEdit, QPlainTextEdit
from ...common.style_sheet import setStyleSheet, themeColor from ...common.style_sheet import FluentStyleSheet, themeColor
from ...common.icon import writeSvg, isDarkTheme, drawSvgIcon, FluentIconBase from ...common.icon import writeSvg, isDarkTheme, drawSvgIcon, FluentIconBase
from ...common.icon import FluentIcon as FIF from ...common.icon import FluentIcon as FIF
from ...common.smooth_scroll import SmoothMode, SmoothScroll from ...common.smooth_scroll import SmoothMode, SmoothScroll
...@@ -21,7 +21,7 @@ class LineEditButton(QToolButton): ...@@ -21,7 +21,7 @@ class LineEditButton(QToolButton):
self.setIconSize(QSize(10, 10)) self.setIconSize(QSize(10, 10))
self.setCursor(Qt.PointingHandCursor) self.setCursor(Qt.PointingHandCursor)
self.setObjectName('lineEditButton') self.setObjectName('lineEditButton')
setStyleSheet(self, 'line_edit') FluentStyleSheet.LINE_EDIT.apply(self)
def paintEvent(self, e): def paintEvent(self, e):
super().paintEvent(e) super().paintEvent(e)
...@@ -47,7 +47,7 @@ class LineEdit(QLineEdit): ...@@ -47,7 +47,7 @@ class LineEdit(QLineEdit):
super().__init__(contents, parent) super().__init__(contents, parent)
self._isClearButtonEnabled = False self._isClearButtonEnabled = False
setStyleSheet(self, 'line_edit') FluentStyleSheet.LINE_EDIT.apply(self)
self.setFixedHeight(33) self.setFixedHeight(33)
self.setAttribute(Qt.WA_MacShowFocusRect, False) self.setAttribute(Qt.WA_MacShowFocusRect, False)
...@@ -143,7 +143,7 @@ class TextEdit(QTextEdit): ...@@ -143,7 +143,7 @@ class TextEdit(QTextEdit):
super().__init__(parent=parent) super().__init__(parent=parent)
self.verticalSmoothScroll = SmoothScroll(self, Qt.Vertical) self.verticalSmoothScroll = SmoothScroll(self, Qt.Vertical)
self.horizonSmoothScroll = SmoothScroll(self, Qt.Horizontal) self.horizonSmoothScroll = SmoothScroll(self, Qt.Horizontal)
setStyleSheet(self, 'line_edit') FluentStyleSheet.LINE_EDIT.apply(self)
def contextMenuEvent(self, e): def contextMenuEvent(self, e):
menu = TextEditMenu(self) menu = TextEditMenu(self)
...@@ -163,7 +163,7 @@ class PlainTextEdit(QPlainTextEdit): ...@@ -163,7 +163,7 @@ class PlainTextEdit(QPlainTextEdit):
super().__init__(parent=parent) super().__init__(parent=parent)
self.verticalSmoothScroll = SmoothScroll(self, Qt.Vertical) self.verticalSmoothScroll = SmoothScroll(self, Qt.Vertical)
self.horizonSmoothScroll = SmoothScroll(self, Qt.Horizontal) self.horizonSmoothScroll = SmoothScroll(self, Qt.Horizontal)
setStyleSheet(self, 'line_edit') FluentStyleSheet.LINE_EDIT.apply(self)
def contextMenuEvent(self, e): def contextMenuEvent(self, e):
menu = TextEditMenu(self) menu = TextEditMenu(self)
......
...@@ -10,7 +10,7 @@ from PyQt5.QtWidgets import (QAction, QApplication, QMenu, QProxyStyle, QStyle, ...@@ -10,7 +10,7 @@ from PyQt5.QtWidgets import (QAction, QApplication, QMenu, QProxyStyle, QStyle,
from ...common.smooth_scroll import SmoothScroll from ...common.smooth_scroll import SmoothScroll
from ...common.icon import FluentIcon as FIF from ...common.icon import FluentIcon as FIF
from ...common.icon import MenuIconEngine from ...common.icon import MenuIconEngine
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
from ...common.config import isDarkTheme from ...common.config import isDarkTheme
...@@ -44,7 +44,7 @@ class DWMMenu(QMenu): ...@@ -44,7 +44,7 @@ class DWMMenu(QMenu):
Qt.FramelessWindowHint | Qt.Popup | Qt.NoDropShadowWindowHint) Qt.FramelessWindowHint | Qt.Popup | Qt.NoDropShadowWindowHint)
self.setAttribute(Qt.WA_StyledBackground) self.setAttribute(Qt.WA_StyledBackground)
self.setStyle(CustomMenuStyle()) self.setStyle(CustomMenuStyle())
setStyleSheet(self, 'menu') FluentStyleSheet.MENU.apply(self)
def event(self, e: QEvent): def event(self, e: QEvent):
if e.type() == QEvent.WinIdChange: if e.type() == QEvent.WinIdChange:
...@@ -208,7 +208,7 @@ class RoundMenu(QWidget): ...@@ -208,7 +208,7 @@ class RoundMenu(QWidget):
self.hBoxLayout.addWidget(self.view, 1, Qt.AlignCenter) self.hBoxLayout.addWidget(self.view, 1, Qt.AlignCenter)
self.hBoxLayout.setContentsMargins(12, 8, 12, 20) self.hBoxLayout.setContentsMargins(12, 8, 12, 20)
setStyleSheet(self, 'menu') FluentStyleSheet.MENU.apply(self)
self.view.itemClicked.connect(self._onItemClicked) self.view.itemClicked.connect(self._onItemClicked)
self.view.itemEntered.connect(self._onItemEntered) self.view.itemEntered.connect(self._onItemEntered)
...@@ -425,12 +425,12 @@ class RoundMenu(QWidget): ...@@ -425,12 +425,12 @@ class RoundMenu(QWidget):
def _onShowMenuTimeOut(self): def _onShowMenuTimeOut(self):
if self.lastHoverSubMenuItem is None or not self.lastHoverItem is self.lastHoverSubMenuItem: if self.lastHoverSubMenuItem is None or not self.lastHoverItem is self.lastHoverSubMenuItem:
return return
w = self.view.itemWidget(self.lastHoverSubMenuItem) w = self.view.itemWidget(self.lastHoverSubMenuItem)
if w.menu.parentMenu.isHidden(): if w.menu.parentMenu.isHidden():
return return
pos = w.mapToGlobal(QPoint(w.width()+5, -5)) pos = w.mapToGlobal(QPoint(w.width()+5, -5))
w.menu.exec(pos) w.menu.exec(pos)
......
...@@ -151,3 +151,5 @@ class SmoothScrollArea(QScrollArea): ...@@ -151,3 +151,5 @@ class SmoothScrollArea(QScrollArea):
self.vScrollBar.scrollValue(-e.angleDelta().y()) self.vScrollBar.scrollValue(-e.angleDelta().y())
else: else:
self.hScrollBar.scrollValue(-e.angleDelta().x()) self.hScrollBar.scrollValue(-e.angleDelta().x())
e.setAccepted(True)
...@@ -4,7 +4,7 @@ from PyQt5.QtGui import QColor, QMouseEvent, QPainter, QPainterPath ...@@ -4,7 +4,7 @@ from PyQt5.QtGui import QColor, QMouseEvent, QPainter, QPainterPath
from PyQt5.QtWidgets import (QProxyStyle, QSlider, QStyle, QStyleOptionSlider, from PyQt5.QtWidgets import (QProxyStyle, QSlider, QStyle, QStyleOptionSlider,
QWidget) QWidget)
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
class Slider(QSlider): class Slider(QSlider):
...@@ -14,7 +14,7 @@ class Slider(QSlider): ...@@ -14,7 +14,7 @@ class Slider(QSlider):
def __init__(self, orientation, parent=None): def __init__(self, orientation, parent=None):
super().__init__(orientation, parent=parent) super().__init__(orientation, parent=parent)
setStyleSheet(self, 'slider') FluentStyleSheet.SLIDER.apply(self)
def mousePressEvent(self, e: QMouseEvent): def mousePressEvent(self, e: QMouseEvent):
super().mousePressEvent(e) super().mousePressEvent(e)
......
...@@ -6,7 +6,7 @@ from PyQt5.QtGui import QPainter, QPainterPath ...@@ -6,7 +6,7 @@ from PyQt5.QtGui import QPainter, QPainterPath
from PyQt5.QtWidgets import (QSpinBox, QDoubleSpinBox, QToolButton, QHBoxLayout, from PyQt5.QtWidgets import (QSpinBox, QDoubleSpinBox, QToolButton, QHBoxLayout,
QDateEdit, QDateTimeEdit, QTimeEdit, QLineEdit, QAbstractSpinBox) QDateEdit, QDateTimeEdit, QTimeEdit, QLineEdit, QAbstractSpinBox)
from ...common.style_sheet import setStyleSheet, themeColor from ...common.style_sheet import FluentStyleSheet, themeColor
from ...common.icon import FluentIconBase, Theme, getIconColor from ...common.icon import FluentIconBase, Theme, getIconColor
from ...components.widgets import LineEditMenu from ...components.widgets import LineEditMenu
...@@ -34,7 +34,7 @@ class SpinButton(QToolButton): ...@@ -34,7 +34,7 @@ class SpinButton(QToolButton):
self._icon = icon self._icon = icon
self.setFixedSize(31, 23) self.setFixedSize(31, 23)
self.setIconSize(QSize(10, 10)) self.setIconSize(QSize(10, 10))
setStyleSheet(self, 'spin_box') FluentStyleSheet.SPIN_BOX.apply(self)
def paintEvent(self, e): def paintEvent(self, e):
super().paintEvent(e) super().paintEvent(e)
...@@ -52,7 +52,7 @@ class Ui_SpinBox: ...@@ -52,7 +52,7 @@ class Ui_SpinBox:
pass pass
def _setUpUi(self): def _setUpUi(self):
setStyleSheet(self, 'spin_box') FluentStyleSheet.SPIN_BOX.apply(self)
self.setButtonSymbols(QSpinBox.NoButtons) self.setButtonSymbols(QSpinBox.NoButtons)
self.setFixedHeight(33) self.setFixedHeight(33)
......
# coding:utf-8 # coding:utf-8
from PyQt5.QtCore import QEasingCurve, QPropertyAnimation, Qt, QTimer, pyqtSignal, QSize, QPoint, QRectF from PyQt5.QtCore import QPropertyAnimation, Qt, QTimer, pyqtSignal, QPoint, QRectF
from PyQt5.QtGui import QPainter from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QLabel, QWidget, QToolButton, QGraphicsOpacityEffect from PyQt5.QtWidgets import QLabel, QWidget, QToolButton, QGraphicsOpacityEffect
from PyQt5.QtSvg import QSvgWidget
from ...common import setStyleSheet, drawSvgIcon, isDarkTheme, Theme from ...common import FluentStyleSheet, isDarkTheme, Theme
from ...common.icon import FluentIcon as FIF from ...common.icon import FluentIcon as FIF
...@@ -113,7 +112,7 @@ class StateToolTip(QWidget): ...@@ -113,7 +112,7 @@ class StateToolTip(QWidget):
self.titleLabel.setObjectName("titleLabel") self.titleLabel.setObjectName("titleLabel")
self.contentLabel.setObjectName("contentLabel") self.contentLabel.setObjectName("contentLabel")
setStyleSheet(self, 'state_tool_tip') FluentStyleSheet.STATE_TOOL_TIP.apply(self)
self.titleLabel.adjustSize() self.titleLabel.adjustSize()
self.contentLabel.adjustSize() self.contentLabel.adjustSize()
......
...@@ -5,7 +5,7 @@ from PyQt5.QtCore import Qt, QTimer, pyqtProperty, pyqtSignal ...@@ -5,7 +5,7 @@ from PyQt5.QtCore import Qt, QTimer, pyqtProperty, pyqtSignal
from PyQt5.QtGui import QColor, QPainter from PyQt5.QtGui import QColor, QPainter
from PyQt5.QtWidgets import QHBoxLayout, QLabel, QToolButton, QWidget from PyQt5.QtWidgets import QHBoxLayout, QLabel, QToolButton, QWidget
from ...common.style_sheet import setStyleSheet from ...common.style_sheet import FluentStyleSheet
class Indicator(QToolButton): class Indicator(QToolButton):
...@@ -169,7 +169,7 @@ class SwitchButton(QWidget): ...@@ -169,7 +169,7 @@ class SwitchButton(QWidget):
self.hBox.setAlignment(Qt.AlignRight) self.hBox.setAlignment(Qt.AlignRight)
# set default style sheet # set default style sheet
setStyleSheet(self, 'switch_button') FluentStyleSheet.SWITCH_BUTTON.apply(self)
# connect signal to slot # connect signal to slot
self.indicator.checkedChanged.connect(self.checkedChanged) self.indicator.checkedChanged.connect(self.checkedChanged)
......
...@@ -4,7 +4,7 @@ from PyQt5.QtGui import QColor, QCursor ...@@ -4,7 +4,7 @@ from PyQt5.QtGui import QColor, QCursor
from PyQt5.QtWidgets import (QApplication, QFrame, QGraphicsDropShadowEffect, from PyQt5.QtWidgets import (QApplication, QFrame, QGraphicsDropShadowEffect,
QHBoxLayout, QLabel, QWidget) QHBoxLayout, QLabel, QWidget)
from ...common import setStyleSheet from ...common import FluentStyleSheet
class ToolTip(QFrame): class ToolTip(QFrame):
...@@ -64,7 +64,7 @@ class ToolTip(QFrame): ...@@ -64,7 +64,7 @@ class ToolTip(QFrame):
""" set style sheet """ """ set style sheet """
self.container.setObjectName("container") self.container.setObjectName("container")
self.label.setObjectName("contentLabel") self.label.setObjectName("contentLabel")
setStyleSheet(self, 'tool_tip') FluentStyleSheet.TOOL_TIP.apply(self)
self.label.adjustSize() self.label.adjustSize()
self.adjustSize() self.adjustSize()
......
...@@ -6,7 +6,7 @@ with open('README.md', encoding='utf-8') as f: ...@@ -6,7 +6,7 @@ with open('README.md', encoding='utf-8') as f:
setuptools.setup( setuptools.setup(
name="PyQt-Fluent-Widgets", name="PyQt-Fluent-Widgets",
version="0.5.7", version="0.6.0",
keywords="pyqt fluent widgets", keywords="pyqt fluent widgets",
author="zhiyiYo", author="zhiyiYo",
author_email="shokokawaii@outlook.com", author_email="shokokawaii@outlook.com",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册