This commit is contained in:
朱子楚\zhuzi 2024-03-27 14:13:36 +08:00
parent b6c3f0eda9
commit f616a2da6a
19 changed files with 299 additions and 256 deletions

View File

@ -535,104 +535,104 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="318"/> <location filename="qml/window/MainWindow.qml" line="315"/>
<source>Dark Mode</source> <source>Dark Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="94"/> <location filename="qml/window/MainWindow.qml" line="91"/>
<location filename="qml/window/MainWindow.qml" line="102"/> <location filename="qml/window/MainWindow.qml" line="99"/>
<source>Quit</source> <source>Quit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="95"/> <location filename="qml/window/MainWindow.qml" line="92"/>
<source>Are you sure you want to exit the program?</source> <source>Are you sure you want to exit the program?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="96"/> <location filename="qml/window/MainWindow.qml" line="93"/>
<source>Minimize</source> <source>Minimize</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="99"/> <location filename="qml/window/MainWindow.qml" line="96"/>
<source>Friendly Reminder</source> <source>Friendly Reminder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="99"/> <location filename="qml/window/MainWindow.qml" line="96"/>
<source>FluentUI is hidden from the tray, click on the tray to activate the window again</source> <source>FluentUI is hidden from the tray, click on the tray to activate the window again</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="103"/> <location filename="qml/window/MainWindow.qml" line="100"/>
<location filename="qml/window/MainWindow.qml" line="347"/> <location filename="qml/window/MainWindow.qml" line="344"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="114"/> <location filename="qml/window/MainWindow.qml" line="111"/>
<source>Open in Separate Window</source> <source>Open in Separate Window</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="211"/> <location filename="qml/window/MainWindow.qml" line="208"/>
<source>Click Time</source> <source>Click Time</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="221"/> <location filename="qml/window/MainWindow.qml" line="218"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="312"/> <location filename="qml/window/MainWindow.qml" line="309"/>
<source>Finish</source> <source>Finish</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="313"/> <location filename="qml/window/MainWindow.qml" line="310"/>
<source>Next</source> <source>Next</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="314"/> <location filename="qml/window/MainWindow.qml" line="311"/>
<source>Previous</source> <source>Previous</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="318"/> <location filename="qml/window/MainWindow.qml" line="315"/>
<source>Here you can switch to night mode.</source> <source>Here you can switch to night mode.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="320"/> <location filename="qml/window/MainWindow.qml" line="317"/>
<source>Hide Easter eggs</source> <source>Hide Easter eggs</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="320"/> <location filename="qml/window/MainWindow.qml" line="317"/>
<source>Try a few more clicks!!</source> <source>Try a few more clicks!!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="344"/> <location filename="qml/window/MainWindow.qml" line="341"/>
<source>Upgrade Tips</source> <source>Upgrade Tips</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="345"/> <location filename="qml/window/MainWindow.qml" line="342"/>
<source>FluentUI is currently up to date </source> <source>FluentUI is currently up to date </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="345"/> <location filename="qml/window/MainWindow.qml" line="342"/>
<source> -- The current app version</source> <source> -- The current app version</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="345"/> <location filename="qml/window/MainWindow.qml" line="342"/>
<source> <source>
Now go and download the new version Now go and download the new version
@ -641,17 +641,17 @@ Updated content:
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="348"/> <location filename="qml/window/MainWindow.qml" line="345"/>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="375"/> <location filename="qml/window/MainWindow.qml" line="372"/>
<source>The current version is already the latest</source> <source>The current version is already the latest</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="382"/> <location filename="qml/window/MainWindow.qml" line="379"/>
<source>The network is abnormal</source> <source>The network is abnormal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1741,92 +1741,92 @@ My only desire is to be permitted to drive out the traitors and restore the Han.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="38"/> <location filename="qml/page/T_Settings.qml" line="29"/>
<source>Current Version</source> <source>Current Version</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="44"/> <location filename="qml/page/T_Settings.qml" line="35"/>
<source>Check for Updates</source> <source>Check for Updates</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="60"/> <location filename="qml/page/T_Settings.qml" line="51"/>
<source>Use System AppBar</source> <source>Use System AppBar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="76"/> <location filename="qml/page/T_Settings.qml" line="67"/>
<source>Fits AppBar Windows</source> <source>Fits AppBar Windows</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="87"/> <location filename="qml/page/T_Settings.qml" line="78"/>
<source>Friendly Reminder</source> <source>Friendly Reminder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="88"/> <location filename="qml/page/T_Settings.qml" line="79"/>
<source>This action requires a restart of the program to take effect, is it restarted?</source> <source>This action requires a restart of the program to take effect, is it restarted?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="90"/> <location filename="qml/page/T_Settings.qml" line="81"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="91"/> <location filename="qml/page/T_Settings.qml" line="82"/>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="110"/> <location filename="qml/page/T_Settings.qml" line="101"/>
<source>Dark Mode</source> <source>Dark Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="115"/> <location filename="qml/page/T_Settings.qml" line="106"/>
<source>System</source> <source>System</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="115"/> <location filename="qml/page/T_Settings.qml" line="106"/>
<source>Light</source> <source>Light</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="115"/> <location filename="qml/page/T_Settings.qml" line="106"/>
<source>Dark</source> <source>Dark</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="140"/> <location filename="qml/page/T_Settings.qml" line="131"/>
<source>Navigation View Display Mode</source> <source>Navigation View Display Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Open</source> <source>Open</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Compact</source> <source>Compact</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Minimal</source> <source>Minimal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Auto</source> <source>Auto</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="180"/> <location filename="qml/page/T_Settings.qml" line="171"/>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -535,104 +535,104 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="318"/> <location filename="qml/window/MainWindow.qml" line="315"/>
<source>Dark Mode</source> <source>Dark Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="94"/> <location filename="qml/window/MainWindow.qml" line="91"/>
<location filename="qml/window/MainWindow.qml" line="102"/> <location filename="qml/window/MainWindow.qml" line="99"/>
<source>Quit</source> <source>Quit</source>
<translation type="unfinished">退</translation> <translation type="unfinished">退</translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="95"/> <location filename="qml/window/MainWindow.qml" line="92"/>
<source>Are you sure you want to exit the program?</source> <source>Are you sure you want to exit the program?</source>
<translation type="unfinished">退</translation> <translation type="unfinished">退</translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="96"/> <location filename="qml/window/MainWindow.qml" line="93"/>
<source>Minimize</source> <source>Minimize</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="99"/> <location filename="qml/window/MainWindow.qml" line="96"/>
<source>Friendly Reminder</source> <source>Friendly Reminder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="99"/> <location filename="qml/window/MainWindow.qml" line="96"/>
<source>FluentUI is hidden from the tray, click on the tray to activate the window again</source> <source>FluentUI is hidden from the tray, click on the tray to activate the window again</source>
<translation type="unfinished">FluentUI </translation> <translation type="unfinished">FluentUI </translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="103"/> <location filename="qml/window/MainWindow.qml" line="100"/>
<location filename="qml/window/MainWindow.qml" line="347"/> <location filename="qml/window/MainWindow.qml" line="344"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="114"/> <location filename="qml/window/MainWindow.qml" line="111"/>
<source>Open in Separate Window</source> <source>Open in Separate Window</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="211"/> <location filename="qml/window/MainWindow.qml" line="208"/>
<source>Click Time</source> <source>Click Time</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="221"/> <location filename="qml/window/MainWindow.qml" line="218"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="312"/> <location filename="qml/window/MainWindow.qml" line="309"/>
<source>Finish</source> <source>Finish</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="313"/> <location filename="qml/window/MainWindow.qml" line="310"/>
<source>Next</source> <source>Next</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="314"/> <location filename="qml/window/MainWindow.qml" line="311"/>
<source>Previous</source> <source>Previous</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="318"/> <location filename="qml/window/MainWindow.qml" line="315"/>
<source>Here you can switch to night mode.</source> <source>Here you can switch to night mode.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="320"/> <location filename="qml/window/MainWindow.qml" line="317"/>
<source>Hide Easter eggs</source> <source>Hide Easter eggs</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="320"/> <location filename="qml/window/MainWindow.qml" line="317"/>
<source>Try a few more clicks!!</source> <source>Try a few more clicks!!</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="344"/> <location filename="qml/window/MainWindow.qml" line="341"/>
<source>Upgrade Tips</source> <source>Upgrade Tips</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="345"/> <location filename="qml/window/MainWindow.qml" line="342"/>
<source>FluentUI is currently up to date </source> <source>FluentUI is currently up to date </source>
<translation type="unfinished">FluentUI </translation> <translation type="unfinished">FluentUI </translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="345"/> <location filename="qml/window/MainWindow.qml" line="342"/>
<source> -- The current app version</source> <source> -- The current app version</source>
<translation type="unfinished"> -- </translation> <translation type="unfinished"> -- </translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="345"/> <location filename="qml/window/MainWindow.qml" line="342"/>
<source> <source>
Now go and download the new version Now go and download the new version
@ -645,17 +645,17 @@ Updated content:
</translation> </translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="348"/> <location filename="qml/window/MainWindow.qml" line="345"/>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="375"/> <location filename="qml/window/MainWindow.qml" line="372"/>
<source>The current version is already the latest</source> <source>The current version is already the latest</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/window/MainWindow.qml" line="382"/> <location filename="qml/window/MainWindow.qml" line="379"/>
<source>The network is abnormal</source> <source>The network is abnormal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1790,92 +1790,92 @@ My only desire is to be permitted to drive out the traitors and restore the Han.
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="38"/> <location filename="qml/page/T_Settings.qml" line="29"/>
<source>Current Version</source> <source>Current Version</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="44"/> <location filename="qml/page/T_Settings.qml" line="35"/>
<source>Check for Updates</source> <source>Check for Updates</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="60"/> <location filename="qml/page/T_Settings.qml" line="51"/>
<source>Use System AppBar</source> <source>Use System AppBar</source>
<translation type="unfinished">使</translation> <translation type="unfinished">使</translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="76"/> <location filename="qml/page/T_Settings.qml" line="67"/>
<source>Fits AppBar Windows</source> <source>Fits AppBar Windows</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="87"/> <location filename="qml/page/T_Settings.qml" line="78"/>
<source>Friendly Reminder</source> <source>Friendly Reminder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="88"/> <location filename="qml/page/T_Settings.qml" line="79"/>
<source>This action requires a restart of the program to take effect, is it restarted?</source> <source>This action requires a restart of the program to take effect, is it restarted?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="90"/> <location filename="qml/page/T_Settings.qml" line="81"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="91"/> <location filename="qml/page/T_Settings.qml" line="82"/>
<source>OK</source> <source>OK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="110"/> <location filename="qml/page/T_Settings.qml" line="101"/>
<source>Dark Mode</source> <source>Dark Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="115"/> <location filename="qml/page/T_Settings.qml" line="106"/>
<source>System</source> <source>System</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="115"/> <location filename="qml/page/T_Settings.qml" line="106"/>
<source>Light</source> <source>Light</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="115"/> <location filename="qml/page/T_Settings.qml" line="106"/>
<source>Dark</source> <source>Dark</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="140"/> <location filename="qml/page/T_Settings.qml" line="131"/>
<source>Navigation View Display Mode</source> <source>Navigation View Display Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Open</source> <source>Open</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Compact</source> <source>Compact</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Minimal</source> <source>Minimal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="145"/> <location filename="qml/page/T_Settings.qml" line="136"/>
<source>Auto</source> <source>Auto</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="qml/page/T_Settings.qml" line="180"/> <location filename="qml/page/T_Settings.qml" line="171"/>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -11,21 +11,12 @@ FluScrollablePage{
title: qsTr("Settings") title: qsTr("Settings")
FluEvent{ FluEvent{
id:event_checkupdate_finish
name: "checkUpdateFinish" name: "checkUpdateFinish"
onTriggered: { onTriggered: {
btn_checkupdate.loading = false btn_checkupdate.loading = false
} }
} }
Component.onCompleted: {
FluEventBus.registerEvent(event_checkupdate_finish)
}
Component.onDestruction: {
FluEventBus.unRegisterEvent(event_checkupdate_finish)
}
FluArea{ FluArea{
Layout.fillWidth: true Layout.fillWidth: true
Layout.topMargin: 20 Layout.topMargin: 20

View File

@ -29,7 +29,6 @@ FluWindow {
} }
FluEvent{ FluEvent{
id:event_checkupdate
name: "checkUpdate" name: "checkUpdate"
onTriggered: { onTriggered: {
checkUpdate(false) checkUpdate(false)
@ -50,11 +49,9 @@ FluWindow {
Component.onCompleted: { Component.onCompleted: {
checkUpdate(true) checkUpdate(true)
FluEventBus.registerEvent(event_checkupdate)
} }
Component.onDestruction: { Component.onDestruction: {
FluEventBus.unRegisterEvent(event_checkupdate)
FluRouter.exit() FluRouter.exit()
} }

View File

@ -4,12 +4,12 @@ import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import FluentUI 1.0 import FluentUI 1.0
Item { FluLauncher {
id: app id: app
Component.onCompleted: { Component.onCompleted: {
FluApp.init(app) FluApp.init(app)
FluApp.windowIcon = "qrc:/logo.ico" FluApp.windowIcon = "qrc:/logo.ico"
FluApp.routes = { FluRouter.routes = {
"/":"qrc:/main.qml", "/":"qrc:/main.qml",
} }
FluRouter.navigate("/") FluRouter.navigate("/")

View File

@ -1,23 +0,0 @@
#include "FluEventBus.h"
FluEvent::FluEvent(QObject *parent):QObject{parent}{
}
FluEventBus::FluEventBus(QObject *parent):QObject{parent}{
}
void FluEventBus::registerEvent(FluEvent* event){
_eventData.append(event);
}
void FluEventBus::unRegisterEvent(FluEvent* event){
_eventData.removeOne(event);
}
void FluEventBus::post(const QString& name,const QMap<QString, QVariant>& data){
foreach (auto event, _eventData) {
if(event->name()==name){
Q_EMIT event->triggered(data);
}
}
}

View File

@ -1,41 +0,0 @@
#ifndef FLUEVENTBUS_H
#define FLUEVENTBUS_H
#include <QObject>
#include <QtQml/qqml.h>
#include "stdafx.h"
#include "singleton.h"
/**
* @brief The FluEvent class
*/
class FluEvent : public QObject{
Q_OBJECT
Q_PROPERTY_AUTO(QString,name);
QML_NAMED_ELEMENT(FluEvent)
public:
explicit FluEvent(QObject *parent = nullptr);
Q_SIGNAL void triggered(QMap<QString, QVariant> data);
};
/**
* @brief The FluEventBus class
*/
class FluEventBus : public QObject
{
Q_OBJECT
QML_NAMED_ELEMENT(FluEventBus)
QML_SINGLETON
private:
explicit FluEventBus(QObject *parent = nullptr);
public:
SINGLETON(FluEventBus)
static FluEventBus *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();}
Q_INVOKABLE void registerEvent(FluEvent* event);
Q_INVOKABLE void unRegisterEvent(FluEvent* event);
Q_INVOKABLE void post(const QString& name,const QMap<QString, QVariant>& params = {});
private:
QList<FluEvent*> _eventData;
};
#endif // FLUEVENTBUS_H

View File

@ -39,12 +39,12 @@ static inline bool isCompositionEnabled(){
FramelessEventFilter::FramelessEventFilter(FluFramelessHelper* helper){ FramelessEventFilter::FramelessEventFilter(FluFramelessHelper* helper){
_helper = helper; _helper = helper;
_current = _helper->window->winId(); _current = _helper->window_->winId();
} }
bool FramelessEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result){ bool FramelessEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, QT_NATIVE_EVENT_RESULT_TYPE *result){
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
if ((eventType != qtNativeEventType()) || !message || _helper.isNull() || _helper->window.isNull()) { if ((eventType != qtNativeEventType()) || !message || _helper.isNull() || _helper->window_.isNull()) {
return false; return false;
} }
const auto msg = static_cast<const MSG *>(message); const auto msg = static_cast<const MSG *>(message);
@ -174,8 +174,8 @@ bool FramelessEventFilter::nativeEventFilter(const QByteArray &eventType, void *
minmaxInfo->ptMaxSize.x = 0; minmaxInfo->ptMaxSize.x = 0;
minmaxInfo->ptMaxSize.y = 0; minmaxInfo->ptMaxSize.y = 0;
#else #else
auto pixelRatio = _helper->window->devicePixelRatio(); auto pixelRatio = _helper->window_->devicePixelRatio();
auto geometry = _helper->window->screen()->availableGeometry(); auto geometry = _helper->window_->screen()->availableGeometry();
RECT rect; RECT rect;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0); SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
minmaxInfo->ptMaxPosition.x = rect.left - offsetXY.x(); minmaxInfo->ptMaxPosition.x = rect.left - offsetXY.x();
@ -192,15 +192,15 @@ bool FramelessEventFilter::nativeEventFilter(const QByteArray &eventType, void *
const bool altPressed = ((wParam == VK_MENU) || (::GetKeyState(VK_MENU) < 0)); const bool altPressed = ((wParam == VK_MENU) || (::GetKeyState(VK_MENU) < 0));
const bool spacePressed = ((wParam == VK_SPACE) || (::GetKeyState(VK_SPACE) < 0)); const bool spacePressed = ((wParam == VK_SPACE) || (::GetKeyState(VK_SPACE) < 0));
if (altPressed && spacePressed) { if (altPressed && spacePressed) {
auto pos = _helper->window->position(); auto pos = _helper->window_->position();
_helper->showSystemMenu(QPoint(pos.x(),pos.y()+_helper->getAppBarHeight())); _helper->showSystemMenu(QPoint(pos.x(),pos.y()+_helper->getAppBarHeight()));
} }
}else if(uMsg == WM_SYSCOMMAND){ }else if(uMsg == WM_SYSCOMMAND){
if(wParam == SC_MINIMIZE){ if(wParam == SC_MINIMIZE){
if(_helper->window->transientParent()){ if(_helper->window_->transientParent()){
_helper->window->transientParent()->showMinimized(); _helper->window_->transientParent()->showMinimized();
}else{ }else{
_helper->window->showMinimized(); _helper->window_->showMinimized();
} }
return true; return true;
} }
@ -211,8 +211,8 @@ bool FramelessEventFilter::nativeEventFilter(const QByteArray &eventType, void *
return false; return false;
} }
FluFramelessHelper::FluFramelessHelper(QObject *parent) FluFramelessHelper::FluFramelessHelper(QQuickItem *parent)
: QObject{parent} : QQuickItem{parent}
{ {
} }
@ -222,36 +222,36 @@ void FluFramelessHelper::classBegin(){
void FluFramelessHelper::_updateCursor(int edges){ void FluFramelessHelper::_updateCursor(int edges){
switch (edges) { switch (edges) {
case 0: case 0:
window->setCursor(Qt::ArrowCursor); window_->setCursor(Qt::ArrowCursor);
break; break;
case Qt::LeftEdge: case Qt::LeftEdge:
case Qt::RightEdge: case Qt::RightEdge:
window->setCursor(Qt::SizeHorCursor); window_->setCursor(Qt::SizeHorCursor);
break; break;
case Qt::TopEdge: case Qt::TopEdge:
case Qt::BottomEdge: case Qt::BottomEdge:
window->setCursor(Qt::SizeVerCursor); window_->setCursor(Qt::SizeVerCursor);
break; break;
case Qt::LeftEdge | Qt::TopEdge: case Qt::LeftEdge | Qt::TopEdge:
case Qt::RightEdge | Qt::BottomEdge: case Qt::RightEdge | Qt::BottomEdge:
window->setCursor(Qt::SizeFDiagCursor); window_->setCursor(Qt::SizeFDiagCursor);
break; break;
case Qt::RightEdge | Qt::TopEdge: case Qt::RightEdge | Qt::TopEdge:
case Qt::LeftEdge | Qt::BottomEdge: case Qt::LeftEdge | Qt::BottomEdge:
window->setCursor(Qt::SizeBDiagCursor); window_->setCursor(Qt::SizeBDiagCursor);
break; break;
} }
} }
bool FluFramelessHelper::eventFilter(QObject *obj, QEvent *ev){ bool FluFramelessHelper::eventFilter(QObject *obj, QEvent *ev){
if (!window.isNull() && window->flags()) { if (!window_.isNull() && window_->flags()) {
switch (ev->type()) { switch (ev->type()) {
case QEvent::MouseButtonPress: case QEvent::MouseButtonPress:
if(_edges!=0){ if(_edges!=0){
QMouseEvent *event = static_cast<QMouseEvent*>(ev); QMouseEvent *event = static_cast<QMouseEvent*>(ev);
if(event->button() == Qt::LeftButton){ if(event->button() == Qt::LeftButton){
_updateCursor(_edges); _updateCursor(_edges);
window->startSystemResize(Qt::Edges(_edges)); window_->startSystemResize(Qt::Edges(_edges));
} }
} }
break; break;
@ -272,7 +272,7 @@ bool FluFramelessHelper::eventFilter(QObject *obj, QEvent *ev){
#else #else
event->position().toPoint(); event->position().toPoint();
#endif #endif
if(p.x() >= _margins && p.x() <= (window->width() - _margins) && p.y() >= _margins && p.y() <= (window->height() - _margins)){ if(p.x() >= _margins && p.x() <= (window_->width() - _margins) && p.y() >= _margins && p.y() <= (window_->height() - _margins)){
if(_edges != 0){ if(_edges != 0){
_edges = 0; _edges = 0;
_updateCursor(_edges); _updateCursor(_edges);
@ -283,13 +283,13 @@ bool FluFramelessHelper::eventFilter(QObject *obj, QEvent *ev){
if ( p.x() < _margins ) { if ( p.x() < _margins ) {
_edges |= Qt::LeftEdge; _edges |= Qt::LeftEdge;
} }
if ( p.x() > (window->width() - _margins) ) { if ( p.x() > (window_->width() - _margins) ) {
_edges |= Qt::RightEdge; _edges |= Qt::RightEdge;
} }
if ( p.y() < _margins ) { if ( p.y() < _margins ) {
_edges |= Qt::TopEdge; _edges |= Qt::TopEdge;
} }
if ( p.y() > (window->height() - _margins) ) { if ( p.y() > (window_->height() - _margins) ) {
_edges |= Qt::BottomEdge; _edges |= Qt::BottomEdge;
} }
_updateCursor(_edges); _updateCursor(_edges);
@ -303,38 +303,31 @@ bool FluFramelessHelper::eventFilter(QObject *obj, QEvent *ev){
} }
void FluFramelessHelper::componentComplete(){ void FluFramelessHelper::componentComplete(){
auto o = parent(); this->window_ = window();
do { if(!window_.isNull()){
window = qobject_cast<QQuickWindow *>(o); _stayTop = QQmlProperty(window_,"stayTop");
if (window) { _screen = QQmlProperty(window_,"screen");
break; _fixSize = QQmlProperty(window_,"fixSize");
} _realHeight = QQmlProperty(window_,"_realHeight");
o = o->parent(); _realWidth = QQmlProperty(window_,"_realWidth");
} while (nullptr != o); _appBarHeight = QQmlProperty(window_,"_appBarHeight");
if(!window.isNull()){ _appBar = window_->property("appBar");
_stayTop = QQmlProperty(window,"stayTop");
_screen = QQmlProperty(window,"screen");
_fixSize = QQmlProperty(window,"fixSize");
_realHeight = QQmlProperty(window,"_realHeight");
_realWidth = QQmlProperty(window,"_realWidth");
_appBarHeight = QQmlProperty(window,"_appBarHeight");
_appBar = window->property("appBar");
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
if(!_appBar.isNull()){ if(!_appBar.isNull()){
_appBar.value<QObject*>()->setProperty("systemMoveEnable",false); _appBar.value<QObject*>()->setProperty("systemMoveEnable",false);
} }
window->setFlags((window->flags()) | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint | Qt::FramelessWindowHint); window_->setFlags((window_->flags()) | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowCloseButtonHint | Qt::FramelessWindowHint);
#if QT_VERSION < QT_VERSION_CHECK(6,0,0) #if QT_VERSION < QT_VERSION_CHECK(6,0,0)
if(FluTools::getInstance()->isSoftware()){ if(FluTools::getInstance()->isSoftware()){
window->setFlag(Qt::FramelessWindowHint,false); window_->setFlag(Qt::FramelessWindowHint,false);
} }
#endif #endif
if(resizeable()){ if(resizeable()){
window->setFlag(Qt::WindowMaximizeButtonHint); window_->setFlag(Qt::WindowMaximizeButtonHint);
} }
_nativeEvent =new FramelessEventFilter(this); _nativeEvent =new FramelessEventFilter(this);
qApp->installNativeEventFilter(_nativeEvent); qApp->installNativeEventFilter(_nativeEvent);
HWND hwnd = reinterpret_cast<HWND>(window->winId()); HWND hwnd = reinterpret_cast<HWND>(window_->winId());
DWORD style = ::GetWindowLongPtr(hwnd, GWL_STYLE); DWORD style = ::GetWindowLongPtr(hwnd, GWL_STYLE);
if(resizeable()){ if(resizeable()){
::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX | WS_THICKFRAME); ::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX | WS_THICKFRAME);
@ -348,16 +341,16 @@ void FluFramelessHelper::componentComplete(){
} }
SetWindowPos(hwnd,nullptr,0,0,0,0,SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); SetWindowPos(hwnd,nullptr,0,0,0,0,SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
#else #else
window->setFlags((window->flags() & (~Qt::WindowMinMaxButtonsHint) & (~Qt::Dialog)) | Qt::FramelessWindowHint | Qt::Window); window_->setFlags((window_->flags() & (~Qt::WindowMinMaxButtonsHint) & (~Qt::Dialog)) | Qt::FramelessWindowHint | Qt::Window);
window->installEventFilter(this); window_->installEventFilter(this);
#endif #endif
int w = _realWidth.read().toInt(); int w = _realWidth.read().toInt();
int h = _realHeight.read().toInt()+_appBarHeight.read().toInt(); int h = _realHeight.read().toInt()+_appBarHeight.read().toInt();
if(!resizeable()){ if(!resizeable()){
window->setMaximumSize(QSize(w,h)); window_->setMaximumSize(QSize(w,h));
window->setMinimumSize(QSize(w,h)); window_->setMinimumSize(QSize(w,h));
} }
window->resize(QSize(w,h)); window_->resize(QSize(w,h));
_onStayTopChange(); _onStayTopChange();
_stayTop.connectNotifySignal(this,SLOT(_onStayTopChange())); _stayTop.connectNotifySignal(this,SLOT(_onStayTopChange()));
_screen.connectNotifySignal(this,SLOT(_onScreenChanged())); _screen.connectNotifySignal(this,SLOT(_onScreenChanged()));
@ -367,7 +360,7 @@ void FluFramelessHelper::componentComplete(){
void FluFramelessHelper::_onScreenChanged(){ void FluFramelessHelper::_onScreenChanged(){
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
HWND hwnd = reinterpret_cast<HWND>(window->winId()); HWND hwnd = reinterpret_cast<HWND>(window_->winId());
::SetWindowPos(hwnd,0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOOWNERZORDER); ::SetWindowPos(hwnd,0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOOWNERZORDER);
::RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW); ::RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
#endif #endif
@ -375,7 +368,7 @@ void FluFramelessHelper::_onScreenChanged(){
void FluFramelessHelper::showSystemMenu(QPoint point){ void FluFramelessHelper::showSystemMenu(QPoint point){
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
HWND hwnd = reinterpret_cast<HWND>(window->winId()); HWND hwnd = reinterpret_cast<HWND>(window_->winId());
DWORD style = ::GetWindowLongPtr(hwnd,GWL_STYLE); DWORD style = ::GetWindowLongPtr(hwnd,GWL_STYLE);
::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_SYSMENU); ::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_SYSMENU);
const HMENU hMenu = ::GetSystemMenu(hwnd, FALSE); const HMENU hMenu = ::GetSystemMenu(hwnd, FALSE);
@ -393,7 +386,7 @@ void FluFramelessHelper::showSystemMenu(QPoint point){
::EnableMenuItem(hMenu,SC_SIZE,MFS_DISABLED); ::EnableMenuItem(hMenu,SC_SIZE,MFS_DISABLED);
::EnableMenuItem(hMenu,SC_MAXIMIZE,MFS_DISABLED); ::EnableMenuItem(hMenu,SC_MAXIMIZE,MFS_DISABLED);
} }
const int result = ::TrackPopupMenu(hMenu, (TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), point.x()*window->devicePixelRatio(), point.y()*window->devicePixelRatio(), 0, hwnd, nullptr); const int result = ::TrackPopupMenu(hMenu, (TPM_RETURNCMD | (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN)), point.x()*window_->devicePixelRatio(), point.y()*window_->devicePixelRatio(), 0, hwnd, nullptr);
if (result != FALSE) { if (result != FALSE) {
::PostMessageW(hwnd, WM_SYSCOMMAND, result, 0); ::PostMessageW(hwnd, WM_SYSCOMMAND, result, 0);
} }
@ -403,7 +396,7 @@ void FluFramelessHelper::showSystemMenu(QPoint point){
void FluFramelessHelper::showMaximized(){ void FluFramelessHelper::showMaximized(){
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
HWND hwnd = reinterpret_cast<HWND>(window->winId()); HWND hwnd = reinterpret_cast<HWND>(window_->winId());
::ShowWindow(hwnd,3); ::ShowWindow(hwnd,3);
#endif #endif
} }
@ -411,25 +404,25 @@ void FluFramelessHelper::showMaximized(){
void FluFramelessHelper::_onStayTopChange(){ void FluFramelessHelper::_onStayTopChange(){
bool isStayTop = _stayTop.read().toBool(); bool isStayTop = _stayTop.read().toBool();
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
HWND hwnd = reinterpret_cast<HWND>(window->winId()); HWND hwnd = reinterpret_cast<HWND>(window_->winId());
if(isStayTop){ if(isStayTop){
::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); ::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}else{ }else{
::SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); ::SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
} }
#else #else
window->setFlag(Qt::WindowStaysOnTopHint,isStayTop); window_->setFlag(Qt::WindowStaysOnTopHint,isStayTop);
#endif #endif
} }
FluFramelessHelper::~FluFramelessHelper(){ FluFramelessHelper::~FluFramelessHelper(){
if (!window.isNull()) { if (!window_.isNull()) {
window->setFlags(Qt::Window); window_->setFlags(Qt::Window);
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
qApp->removeNativeEventFilter(_nativeEvent); qApp->removeNativeEventFilter(_nativeEvent);
delete _nativeEvent; delete _nativeEvent;
#endif #endif
window->removeEventFilter(this); window_->removeEventFilter(this);
} }
} }
@ -488,11 +481,11 @@ bool FluFramelessHelper::resizeable(){
} }
bool FluFramelessHelper::maximized(){ bool FluFramelessHelper::maximized(){
return window->visibility() == QWindow::Maximized; return window_->visibility() == QWindow::Maximized;
} }
bool FluFramelessHelper::fullScreen(){ bool FluFramelessHelper::fullScreen(){
return window->visibility() == QWindow::FullScreen; return window_->visibility() == QWindow::FullScreen;
} }
int FluFramelessHelper::getMargins(){ int FluFramelessHelper::getMargins(){

View File

@ -6,6 +6,7 @@
#include <QtQml/qqml.h> #include <QtQml/qqml.h>
#include <QAbstractNativeEventFilter> #include <QAbstractNativeEventFilter>
#include <QQmlProperty> #include <QQmlProperty>
#include <QQuickItem>
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
using QT_NATIVE_EVENT_RESULT_TYPE = qintptr; using QT_NATIVE_EVENT_RESULT_TYPE = qintptr;
@ -33,13 +34,12 @@ public:
/** /**
* @brief The FluFramelessHelper class * @brief The FluFramelessHelper class
*/ */
class FluFramelessHelper : public QObject, public QQmlParserStatus class FluFramelessHelper : public QQuickItem
{ {
Q_OBJECT Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
QML_NAMED_ELEMENT(FluFramelessHelper) QML_NAMED_ELEMENT(FluFramelessHelper)
public: public:
explicit FluFramelessHelper(QObject *parent = nullptr); explicit FluFramelessHelper(QQuickItem *parent = nullptr);
~FluFramelessHelper(); ~FluFramelessHelper();
void classBegin() override; void classBegin() override;
void componentComplete() override; void componentComplete() override;
@ -62,7 +62,7 @@ private:
Q_SLOT void _onStayTopChange(); Q_SLOT void _onStayTopChange();
Q_SLOT void _onScreenChanged(); Q_SLOT void _onScreenChanged();
public: public:
QPointer<QQuickWindow> window = nullptr; QPointer<QQuickWindow> window_ = nullptr;
private: private:
FramelessEventFilter* _nativeEvent = nullptr; FramelessEventFilter* _nativeEvent = nullptr;
QQmlProperty _stayTop; QQmlProperty _stayTop;

View File

@ -9,7 +9,6 @@
#include "FluTextStyle.h" #include "FluTextStyle.h"
#include "FluWatermark.h" #include "FluWatermark.h"
#include "FluCaptcha.h" #include "FluCaptcha.h"
#include "FluEventBus.h"
#include "FluTreeModel.h" #include "FluTreeModel.h"
#include "FluRectangle.h" #include "FluRectangle.h"
#include "FluFramelessHelper.h" #include "FluFramelessHelper.h"
@ -24,11 +23,12 @@ void FluentUI::registerTypes(QQmlEngine *engine){
void FluentUI::registerTypes(const char *uri){ void FluentUI::registerTypes(const char *uri){
#if (QT_VERSION < QT_VERSION_CHECK(6, 2, 0)) #if (QT_VERSION < QT_VERSION_CHECK(6, 2, 0))
Q_INIT_RESOURCE(fluentui); Q_INIT_RESOURCE(fluentui);
//@uri FluentUI
qmlRegisterType<FluQrCodeItem>(uri,major,minor,"FluQrCodeItem"); qmlRegisterType<FluQrCodeItem>(uri,major,minor,"FluQrCodeItem");
qmlRegisterType<FluCaptcha>(uri,major,minor,"FluCaptcha"); qmlRegisterType<FluCaptcha>(uri,major,minor,"FluCaptcha");
qmlRegisterType<FluWatermark>(uri,major,minor,"FluWatermark"); qmlRegisterType<FluWatermark>(uri,major,minor,"FluWatermark");
qmlRegisterType<FluAccentColor>(uri,major,minor,"FluAccentColor"); qmlRegisterType<FluAccentColor>(uri,major,minor,"FluAccentColor");
qmlRegisterType<FluEvent>(uri,major,minor,"FluEvent");
qmlRegisterType<FluTreeModel>(uri,major,minor,"FluTreeModel"); qmlRegisterType<FluTreeModel>(uri,major,minor,"FluTreeModel");
qmlRegisterType<FluRectangle>(uri,major,minor,"FluRectangle"); qmlRegisterType<FluRectangle>(uri,major,minor,"FluRectangle");
qmlRegisterType<FluFramelessHelper>(uri,major,minor,"FluFramelessHelper"); qmlRegisterType<FluFramelessHelper>(uri,major,minor,"FluFramelessHelper");
@ -123,7 +123,9 @@ void FluentUI::registerTypes(const char *uri){
qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSplitLayout.qml"),uri,major,minor,"FluSplitLayout"); qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluSplitLayout.qml"),uri,major,minor,"FluSplitLayout");
qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindowResultLauncher.qml"),uri,major,minor,"FluWindowResultLauncher"); qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluWindowResultLauncher.qml"),uri,major,minor,"FluWindowResultLauncher");
qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLauncher.qml"),uri,major,minor,"FluLauncher"); qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluLauncher.qml"),uri,major,minor,"FluLauncher");
qmlRegisterType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluEvent.qml"),uri,major,minor,"FluEvent");
qmlRegisterSingletonType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRouter.qml"),uri,major,minor,"FluRouter"); qmlRegisterSingletonType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluRouter.qml"),uri,major,minor,"FluRouter");
qmlRegisterSingletonType(QUrl("qrc:/qt/qml/FluentUI/Controls/FluEventBus.qml"),uri,major,minor,"FluEventBus");
qmlRegisterUncreatableMetaObject(Fluent_Awesome::staticMetaObject, uri,major,minor,"FluentIcons", "Access to enums & flags only"); qmlRegisterUncreatableMetaObject(Fluent_Awesome::staticMetaObject, uri,major,minor,"FluentIcons", "Access to enums & flags only");
qmlRegisterUncreatableMetaObject(FluThemeType::staticMetaObject, uri,major,minor,"FluThemeType", "Access to enums & flags only"); qmlRegisterUncreatableMetaObject(FluThemeType::staticMetaObject, uri,major,minor,"FluThemeType", "Access to enums & flags only");
@ -153,5 +155,4 @@ void FluentUI::initializeEngine(QQmlEngine *engine, const char *uri){
engine->rootContext()->setContextProperty("FluTheme",FluTheme::getInstance()); engine->rootContext()->setContextProperty("FluTheme",FluTheme::getInstance());
engine->rootContext()->setContextProperty("FluTools",FluTools::getInstance()); engine->rootContext()->setContextProperty("FluTools",FluTools::getInstance());
engine->rootContext()->setContextProperty("FluTextStyle",FluTextStyle::getInstance()); engine->rootContext()->setContextProperty("FluTextStyle",FluTextStyle::getInstance());
engine->rootContext()->setContextProperty("FluEventBus",FluEventBus::getInstance());
} }

View File

@ -0,0 +1,15 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import FluentUI 1.0
QtObject {
id:control
property string name
signal triggered(var data)
Component.onCompleted: {
FluEventBus.register(control)
}
Component.onDestruction: {
FluEventBus.unregister(control)
}
}

View File

@ -0,0 +1,24 @@
pragma Singleton
import QtQuick 2.15
QtObject {
property var events: []
function register(event){
events.push(event)
}
function unregister(event){
var index = events.indexOf(event)
if (index !== -1) {
events.splice(index, 1)
}
}
function post(name,data = {}){
for(var i =0 ;i< events.length; i++){
var item = events[i]
if(item.name === name){
item.triggered(data)
}
}
}
}

View File

@ -1 +1,2 @@
singleton FluRouter 1.0 FluRouter.qml singleton FluRouter 1.0 FluRouter.qml
singleton FluEventBus 1.0 FluEventBus.qml

View File

@ -64,20 +64,10 @@ Module {
} }
} }
} }
Component {
name: "FluEvent"
prototype: "QObject"
exports: ["FluentUI/FluEvent 1.0"]
exportMetaObjectRevisions: [0]
Property { name: "name"; type: "string" }
Signal {
name: "triggered"
Parameter { name: "data"; type: "QVariantMap" }
}
}
Component { Component {
name: "FluFramelessHelper" name: "FluFramelessHelper"
prototype: "QObject" defaultProperty: "data"
prototype: "QQuickItem"
exports: ["FluentUI/FluFramelessHelper 1.0"] exports: ["FluentUI/FluFramelessHelper 1.0"]
exportMetaObjectRevisions: [0] exportMetaObjectRevisions: [0]
Signal { name: "loadCompleted" } Signal { name: "loadCompleted" }
@ -2329,23 +2319,27 @@ Module {
Property { name: "normalColor"; type: "QColor" } Property { name: "normalColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" } Property { name: "hoverColor"; type: "QColor" }
Property { name: "disableColor"; type: "QColor" } Property { name: "disableColor"; type: "QColor" }
Property { name: "dividerColor"; type: "QColor" }
Property { name: "textColor"; type: "QColor" } Property { name: "textColor"; type: "QColor" }
} }
Component { Component {
prototype: "QQuickRectangle" prototype: "QQuickButton"
name: "FluentUI/FluCalendarPicker 1.0" name: "FluentUI/FluCalendarPicker 1.0"
exports: ["FluentUI/FluCalendarPicker 1.0"] exports: ["FluentUI/FluCalendarPicker 1.0"]
exportMetaObjectRevisions: [0] exportMetaObjectRevisions: [0]
isComposite: true isComposite: true
defaultProperty: "data" defaultProperty: "data"
Property { name: "dividerColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" }
Property { name: "normalColor"; type: "QColor" }
Property { name: "text"; type: "string" }
Property { name: "from"; type: "QDateTime" } Property { name: "from"; type: "QDateTime" }
Property { name: "to"; type: "QDateTime" } Property { name: "to"; type: "QDateTime" }
Property { name: "current"; type: "QVariant" } Property { name: "current"; type: "QVariant" }
Signal { name: "accepted" } Signal { name: "accepted" }
Property { name: "disabled"; type: "bool" }
Property { name: "contentDescription"; type: "string" }
Property { name: "normalColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" }
Property { name: "disableColor"; type: "QColor" }
Property { name: "dividerColor"; type: "QColor" }
Property { name: "textColor"; type: "QColor" }
} }
Component { Component {
prototype: "QQuickItem" prototype: "QQuickItem"
@ -2531,15 +2525,12 @@ Module {
Property { name: "textColor"; type: "QColor" } Property { name: "textColor"; type: "QColor" }
} }
Component { Component {
prototype: "QQuickRectangle" prototype: "QQuickButton"
name: "FluentUI/FluDatePicker 1.0" name: "FluentUI/FluDatePicker 1.0"
exports: ["FluentUI/FluDatePicker 1.0"] exports: ["FluentUI/FluDatePicker 1.0"]
exportMetaObjectRevisions: [0] exportMetaObjectRevisions: [0]
isComposite: true isComposite: true
defaultProperty: "data" defaultProperty: "data"
Property { name: "dividerColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" }
Property { name: "normalColor"; type: "QColor" }
Property { name: "showYear"; type: "bool" } Property { name: "showYear"; type: "bool" }
Property { name: "current"; type: "QVariant" } Property { name: "current"; type: "QVariant" }
Property { name: "yearText"; type: "string" } Property { name: "yearText"; type: "string" }
@ -2566,6 +2557,13 @@ Module {
Parameter { name: "year"; type: "QVariant" } Parameter { name: "year"; type: "QVariant" }
Parameter { name: "month"; type: "QVariant" } Parameter { name: "month"; type: "QVariant" }
} }
Property { name: "disabled"; type: "bool" }
Property { name: "contentDescription"; type: "string" }
Property { name: "normalColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" }
Property { name: "disableColor"; type: "QColor" }
Property { name: "dividerColor"; type: "QColor" }
Property { name: "textColor"; type: "QColor" }
} }
Component { Component {
prototype: "QQuickItem" prototype: "QQuickItem"
@ -2594,6 +2592,44 @@ Module {
Property { name: "window"; type: "QVariant" } Property { name: "window"; type: "QVariant" }
Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true } Property { name: "contentData"; type: "QObject"; isList: true; isReadonly: true }
} }
Component {
prototype: "QObject"
name: "FluentUI/FluEvent 1.0"
exports: ["FluentUI/FluEvent 1.0"]
exportMetaObjectRevisions: [0]
isComposite: true
Property { name: "name"; type: "string" }
Signal {
name: "triggered"
Parameter { name: "data"; type: "QVariant" }
}
}
Component {
prototype: "QObject"
name: "FluentUI/FluEventBus 1.0"
exports: ["FluentUI/FluEventBus 1.0"]
exportMetaObjectRevisions: [0]
isComposite: true
isCreatable: false
isSingleton: true
Property { name: "events"; type: "QVariant" }
Method {
name: "register"
type: "QVariant"
Parameter { name: "event"; type: "QVariant" }
}
Method {
name: "unregister"
type: "QVariant"
Parameter { name: "event"; type: "QVariant" }
}
Method {
name: "post"
type: "QVariant"
Parameter { name: "name"; type: "QVariant" }
Parameter { name: "data"; type: "QVariant" }
}
}
Component { Component {
prototype: "QQuickItem" prototype: "QQuickItem"
name: "FluentUI/FluExpander 1.0" name: "FluentUI/FluExpander 1.0"
@ -2779,6 +2815,7 @@ Module {
Property { name: "normalColor"; type: "QColor" } Property { name: "normalColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" } Property { name: "hoverColor"; type: "QColor" }
Property { name: "disableColor"; type: "QColor" } Property { name: "disableColor"; type: "QColor" }
Property { name: "dividerColor"; type: "QColor" }
Property { name: "textColor"; type: "QColor" } Property { name: "textColor"; type: "QColor" }
} }
Component { Component {
@ -2857,15 +2894,15 @@ Module {
defaultProperty: "data" defaultProperty: "data"
Property { name: "logo"; type: "QUrl" } Property { name: "logo"; type: "QUrl" }
Property { name: "title"; type: "string" } Property { name: "title"; type: "string" }
Property { name: "items"; type: "FluObject_QMLTYPE_126"; isPointer: true } Property { name: "items"; type: "FluObject_QMLTYPE_128"; isPointer: true }
Property { name: "footerItems"; type: "FluObject_QMLTYPE_126"; isPointer: true } Property { name: "footerItems"; type: "FluObject_QMLTYPE_128"; isPointer: true }
Property { name: "displayMode"; type: "int" } Property { name: "displayMode"; type: "int" }
Property { name: "autoSuggestBox"; type: "QQmlComponent"; isPointer: true } Property { name: "autoSuggestBox"; type: "QQmlComponent"; isPointer: true }
Property { name: "actionItem"; type: "QQmlComponent"; isPointer: true } Property { name: "actionItem"; type: "QQmlComponent"; isPointer: true }
Property { name: "topPadding"; type: "int" } Property { name: "topPadding"; type: "int" }
Property { name: "pageMode"; type: "int" } Property { name: "pageMode"; type: "int" }
Property { name: "navItemRightMenu"; type: "FluMenu_QMLTYPE_39"; isPointer: true } Property { name: "navItemRightMenu"; type: "FluMenu_QMLTYPE_34"; isPointer: true }
Property { name: "navItemExpanderRightMenu"; type: "FluMenu_QMLTYPE_39"; isPointer: true } Property { name: "navItemExpanderRightMenu"; type: "FluMenu_QMLTYPE_34"; isPointer: true }
Property { name: "navCompactWidth"; type: "int" } Property { name: "navCompactWidth"; type: "int" }
Property { name: "navTopMargin"; type: "int" } Property { name: "navTopMargin"; type: "int" }
Property { name: "cellHeight"; type: "int" } Property { name: "cellHeight"; type: "int" }
@ -3575,15 +3612,12 @@ Module {
Property { name: "textColor"; type: "QColor" } Property { name: "textColor"; type: "QColor" }
} }
Component { Component {
prototype: "QQuickRectangle" prototype: "QQuickButton"
name: "FluentUI/FluTimePicker 1.0" name: "FluentUI/FluTimePicker 1.0"
exports: ["FluentUI/FluTimePicker 1.0"] exports: ["FluentUI/FluTimePicker 1.0"]
exportMetaObjectRevisions: [0] exportMetaObjectRevisions: [0]
isComposite: true isComposite: true
defaultProperty: "data" defaultProperty: "data"
Property { name: "dividerColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" }
Property { name: "normalColor"; type: "QColor" }
Property { name: "hourFormat"; type: "int" } Property { name: "hourFormat"; type: "int" }
Property { name: "isH"; type: "int" } Property { name: "isH"; type: "int" }
Property { name: "current"; type: "QVariant" } Property { name: "current"; type: "QVariant" }
@ -3600,6 +3634,13 @@ Module {
Parameter { name: "start"; type: "QVariant" } Parameter { name: "start"; type: "QVariant" }
Parameter { name: "n"; type: "QVariant" } Parameter { name: "n"; type: "QVariant" }
} }
Property { name: "disabled"; type: "bool" }
Property { name: "contentDescription"; type: "string" }
Property { name: "normalColor"; type: "QColor" }
Property { name: "hoverColor"; type: "QColor" }
Property { name: "disableColor"; type: "QColor" }
Property { name: "dividerColor"; type: "QColor" }
Property { name: "textColor"; type: "QColor" }
} }
Component { Component {
prototype: "QQuickItem" prototype: "QQuickItem"

View File

@ -24,6 +24,8 @@ FluCopyableText 1.0 Controls/FluCopyableText.qml
FluDatePicker 1.0 Controls/FluDatePicker.qml FluDatePicker 1.0 Controls/FluDatePicker.qml
FluDivider 1.0 Controls/FluDivider.qml FluDivider 1.0 Controls/FluDivider.qml
FluDropDownButton 1.0 Controls/FluDropDownButton.qml FluDropDownButton 1.0 Controls/FluDropDownButton.qml
FluEvent 1.0 Controls/FluEvent.qml
FluEventBus 1.0 Controls/FluEventBus.qml
FluExpander 1.0 Controls/FluExpander.qml FluExpander 1.0 Controls/FluExpander.qml
FluFilledButton 1.0 Controls/FluFilledButton.qml FluFilledButton 1.0 Controls/FluFilledButton.qml
FluFlipView 1.0 Controls/FluFlipView.qml FluFlipView 1.0 Controls/FluFlipView.qml

View File

@ -105,5 +105,7 @@
<file>FluentUI/Controls/FluRouter.qml</file> <file>FluentUI/Controls/FluRouter.qml</file>
<file>FluentUI/Controls/FluWindowResultLauncher.qml</file> <file>FluentUI/Controls/FluWindowResultLauncher.qml</file>
<file>FluentUI/Controls/qmldir</file> <file>FluentUI/Controls/qmldir</file>
<file>FluentUI/Controls/FluEvent.qml</file>
<file>FluentUI/Controls/FluEventBus.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -0,0 +1,15 @@
import QtQuick
import QtQuick.Controls
import FluentUI
QtObject {
id:control
property string name
signal triggered(var data)
Component.onCompleted: {
FluEventBus.register(control)
}
Component.onDestruction: {
FluEventBus.unregister(control)
}
}

View File

@ -0,0 +1,24 @@
pragma Singleton
import QtQuick
QtObject {
property var events: []
function register(event){
events.push(event)
}
function unregister(event){
var index = events.indexOf(event)
if (index !== -1) {
events.splice(index, 1)
}
}
function post(name,data = {}){
for(var i =0 ;i< events.length; i++){
var item = events[i]
if(item.name === name){
item.triggered(data)
}
}
}
}

View File

@ -1 +1,2 @@
singleton FluRouter FluRouter.qml singleton FluRouter FluRouter.qml
singleton FluEventBus FluEventBus.qml