PageSetupUI.xaml.vb 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. Public Class PageSetupUI
  2. Private Sub PageSetupUI_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  3. '重复加载部分
  4. PanBack.ScrollToHome()
  5. ThemeCheckAll(True)
  6. If ThemeDontClick <> 0 Then
  7. Dim NewText As String = Nothing
  8. Select Case ThemeDontClick
  9. Case 1
  10. NewText = "眼瞎白"
  11. Case 2
  12. NewText = "真·滑稽彩"
  13. End Select
  14. For Each Control In PanLauncherTheme.Children
  15. If (TypeOf Control Is MyRadioBox) AndAlso CType(Control, MyRadioBox).IsEnabled Then CType(Control, MyRadioBox).Text = NewText
  16. Next
  17. End If
  18. AniControlEnabled += 1
  19. Refresh() '#4826
  20. AniControlEnabled -= 1
  21. '非重复加载部分
  22. Static Reloaded As Boolean = False
  23. If Reloaded Then Return
  24. Reloaded = True
  25. SliderLoad()
  26. If BuildType = BuildTypes.Release Then PanLauncherHide.Visibility = Visibility.Visible
  27. '设置解锁
  28. If Not RadioLauncherTheme8.IsEnabled Then LabLauncherTheme8Copy.ToolTip = $"累积赞助达到 ¥23.33 后,在爱发电私信发送【土豆 {Identify}】以解锁。" & vbCrLf & "右键打开赞助页面,如果觉得 PCL 做得还不错就支持一下吧 =w=!"
  29. RadioLauncherTheme8.ToolTip = $"累积赞助达到 ¥23.33 后,在爱发电私信发送【土豆 {Identify}】以解锁"
  30. If Not RadioLauncherTheme9.IsEnabled Then LabLauncherTheme9Copy.ToolTip = "· 反馈一个 Bug,在标记为 [完成] 后回复识别码要求解锁(右键打开反馈页面)" & vbCrLf & "· 提交一个 Pull Request 或主页预设,在标记为 [完成] 后回复识别码要求解锁"
  31. RadioLauncherTheme9.ToolTip = "· 反馈一个 Bug,在标记为 [完成] 后回复识别码要求解锁" & vbCrLf & "· 提交一个 Pull Request 或主页预设,在标记为 [完成] 后回复识别码要求解锁"
  32. '极客蓝的处理在 ThemeCheck 中
  33. End Sub
  34. Public Sub Refresh()
  35. Try
  36. SettingService.RefreshSettings(Me)
  37. BackgroundRefresh(False, False)
  38. '标题栏
  39. CheckLogoLeft.Visibility = If(RadioLogoType0.Checked, Visibility.Visible, Visibility.Collapsed)
  40. PanLogoText.Visibility = If(RadioLogoType2.Checked, Visibility.Visible, Visibility.Collapsed)
  41. PanLogoChange.Visibility = If(RadioLogoType3.Checked, Visibility.Visible, Visibility.Collapsed)
  42. '背景音乐
  43. MusicRefreshUI()
  44. '主页
  45. OnMainPageTypeChanged()
  46. Catch ex As NullReferenceException
  47. Logger.Error(ex, "个性化设置项存在异常,已被自动重置", LogBehavior.Alert)
  48. Reset()
  49. Catch ex As Exception
  50. Logger.Error(ex, "重载个性化设置时出错")
  51. End Try
  52. End Sub
  53. Public Sub Reset()
  54. Try
  55. SettingService.ResetSettings(Me)
  56. Logger.Info("已初始化个性化设置!")
  57. Hint("已初始化个性化设置", HintType.Green, False)
  58. Catch ex As Exception
  59. Logger.Error(ex, "初始化个性化设置失败", LogBehavior.Alert)
  60. End Try
  61. Refresh()
  62. End Sub
  63. '背景图片
  64. Private Sub BtnUIBgOpen_Click(sender As Object, e As EventArgs) Handles BtnBackgroundOpen.Click
  65. OpenExplorer(Paths.Base & "PCL\Pictures\")
  66. End Sub
  67. Private Sub BtnBackgroundRefresh_Click(sender As Object, e As EventArgs) Handles BtnBackgroundRefresh.Click
  68. BackgroundRefresh(True, True)
  69. End Sub
  70. Public Sub BackgroundRefreshUI(Show As Boolean, Count As Integer)
  71. If IsNothing(PanBackgroundOpacity) Then Return
  72. If Show Then
  73. PanBackgroundOpacity.Visibility = Visibility.Visible
  74. PanBackgroundBlur.Visibility = Visibility.Visible
  75. PanBackgroundSuit.Visibility = Visibility.Visible
  76. BtnBackgroundClear.Visibility = Visibility.Visible
  77. CardBackground.Title = "背景图片(" & Count & " 张)"
  78. Else
  79. PanBackgroundOpacity.Visibility = Visibility.Collapsed
  80. PanBackgroundBlur.Visibility = Visibility.Collapsed
  81. PanBackgroundSuit.Visibility = Visibility.Collapsed
  82. BtnBackgroundClear.Visibility = Visibility.Collapsed
  83. CardBackground.Title = "背景图片"
  84. End If
  85. CardBackground.TriggerForceResize()
  86. End Sub
  87. Private Sub BtnBackgroundClear_Click(sender As Object, e As EventArgs) Handles BtnBackgroundClear.Click
  88. If MyMsgBox("即将删除背景图片文件夹中的所有文件。" & vbCrLf & "此操作不可撤销,是否确定?", "警告",, "取消", IsWarn:=True) = 1 Then
  89. DirectoryUtils.Delete(Paths.Base & "PCL\Pictures")
  90. BackgroundRefresh(False, True)
  91. Hint("背景图片已清空!", HintType.Green)
  92. End If
  93. End Sub
  94. ''' <summary>
  95. ''' 刷新背景图片及设置页 UI。
  96. ''' </summary>
  97. ''' <param name="IsHint">是否显示刷新提示。</param>
  98. ''' <param name="Refresh">是否刷新图片显示。</param>
  99. Public Shared Sub BackgroundRefresh(IsHint As Boolean, Refresh As Boolean)
  100. Try
  101. '获取可用的图片文件
  102. DirectoryUtils.Create(Paths.Base & "PCL\Pictures\")
  103. Dim Pic As New List(Of String)
  104. For Each File In DirectoryUtils.EnumerateFiles(Paths.Base & "PCL\Pictures\", True)
  105. Dim Extension As String = PathUtils.GetExtension(File)
  106. If Extension <> "ini" AndAlso Extension <> "db" Then Pic.Add(File) '文件夹可能会被加入 .ini 和 thumbs.db
  107. Next
  108. '加载
  109. If Not Pic.Any() Then
  110. If Refresh Then
  111. If FrmMain.ImgBack.Visibility = Visibility.Collapsed Then
  112. If IsHint Then Hint("未检测到可用背景图片!", HintType.Red)
  113. Else
  114. FrmMain.ImgBack.Visibility = Visibility.Collapsed
  115. If IsHint Then Hint("背景图片已清除!", HintType.Green)
  116. End If
  117. End If
  118. If Not IsNothing(FrmSetupUI) Then FrmSetupUI.BackgroundRefreshUI(False, 0)
  119. Else
  120. If Refresh Then
  121. Dim Address As String = RandomOne(Pic)
  122. Try
  123. Logger.Info($"加载背景图片:{Address}")
  124. FrmMain.ImgBack.Background = New MyBitmap(Address)
  125. FrmMain.ImgBack.Visibility = Visibility.Visible
  126. FrmMain.UpdateBackgroundAndTitleBar()
  127. If IsHint Then Hint("背景图片已刷新:" & PathUtils.GetLastPart(Address), HintType.Green, False)
  128. Catch ex As Exception
  129. If ex.Message.Contains("参数无效") Then
  130. Logger.Error($"刷新背景图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{Address}", LogBehavior.Alert)
  131. Else
  132. Logger.Error(ex, $"刷新背景图片失败({Address})", LogBehavior.Alert)
  133. End If
  134. End Try
  135. End If
  136. If Not IsNothing(FrmSetupUI) Then FrmSetupUI.BackgroundRefreshUI(True, Pic.Count)
  137. End If
  138. Catch ex As Exception
  139. Logger.Error(ex, "刷新背景图片时出现未知错误")
  140. End Try
  141. End Sub
  142. '顶部栏
  143. Private Sub BtnLogoChange_Click(sender As Object, e As EventArgs) Handles BtnLogoChange.Click
  144. Dim FileName As String = Dialogs.SelectFile("选择图片", False, filter:={({"png", "jpg", "jpeg", "gif", "webp"}, "常用图片文件")}).FirstOrDefault()
  145. If String.IsNullOrEmpty(FileName) Then Return
  146. Dim TargetPath As String = Paths.Base & "PCL\Logo.png"
  147. Try
  148. '复制文件
  149. FileUtils.Copy(FileName, TargetPath)
  150. '设置当前显示
  151. FrmMain.ImageTitleLogo.Source = Nothing '防止因为 Source 属性前后的值相同而不更新 (#5628)
  152. FrmMain.ImageTitleLogo.Source = TargetPath
  153. Catch ex As Exception
  154. If ex.Message.Contains("参数无效") Then
  155. Logger.Error($"改变标题栏图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{TargetPath}", LogBehavior.Alert)
  156. Else
  157. Logger.Error(ex, "设置标题栏图片失败", LogBehavior.Alert)
  158. End If
  159. FrmMain.ImageTitleLogo.Source = Nothing
  160. End Try
  161. End Sub
  162. Private Sub RadioLogoType3_Check(sender As Object, e As RouteEventArgs) Handles RadioLogoType3.PreviewCheck
  163. If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Return
  164. Refresh:
  165. '已有图片则不再选择
  166. Dim TargetPath As String = Paths.Base & "PCL\Logo.png"
  167. If FileUtils.Exists(TargetPath) Then
  168. Try
  169. FrmMain.ImageTitleLogo.Source = Nothing '防止因为 Source 属性前后的值相同而不更新 (#5628)
  170. FrmMain.ImageTitleLogo.Source = TargetPath
  171. Catch ex As Exception
  172. If ex.Message.Contains("参数无效") Then
  173. Logger.Error($"改变标题栏图片失败,该图片文件可能并非标准格式。{vbCrLf}你可以尝试使用画图打开该文件并重新保存,这会让图片变为标准格式。{vbCrLf}文件:{TargetPath}", LogBehavior.Alert)
  174. Else
  175. Logger.Error(ex, "调整标题栏图片失败", LogBehavior.Alert)
  176. End If
  177. FrmMain.ImageTitleLogo.Source = Nothing
  178. e.Handled = True
  179. Try
  180. FileUtils.Delete(TargetPath)
  181. Catch exx As Exception
  182. Logger.Error(exx, "清理错误的标题栏图片失败", LogBehavior.Alert)
  183. End Try
  184. End Try
  185. Return
  186. End If
  187. '没有图片则要求选择
  188. Dim FileName As String = Dialogs.SelectFile("选择图片", False, filter:={({"png", "jpeg", "jpg", "gif", "webp"}, "常用图片文件")}).FirstOrDefault()
  189. If String.IsNullOrEmpty(FileName) Then
  190. FrmMain.ImageTitleLogo.Source = Nothing
  191. e.Handled = True
  192. Else
  193. Try
  194. FileUtils.Copy(FileName, TargetPath)
  195. GoTo Refresh
  196. Catch ex As Exception
  197. Logger.Error(ex, "复制标题栏图片失败", LogBehavior.Alert)
  198. End Try
  199. End If
  200. End Sub
  201. Private Sub BtnLogoDelete_Click(sender As Object, e As EventArgs) Handles BtnLogoDelete.Click
  202. Try
  203. FileUtils.Delete(Paths.Base & "PCL\Logo.png")
  204. RadioLogoType1.SetChecked(True, True)
  205. Hint("标题栏图片已清空!", HintType.Green)
  206. Catch ex As Exception
  207. Logger.Error(ex, "清空标题栏图片失败", LogBehavior.Alert)
  208. End Try
  209. End Sub
  210. '背景音乐
  211. Private Sub BtnMusicOpen_Click(sender As Object, e As EventArgs) Handles BtnMusicOpen.Click
  212. OpenExplorer(Paths.Base & "PCL\Musics\")
  213. End Sub
  214. Private Sub BtnMusicRefresh_Click(sender As Object, e As EventArgs) Handles BtnMusicRefresh.Click
  215. MusicRefreshPlay(True)
  216. End Sub
  217. Public Sub MusicRefreshUI()
  218. If PanBackgroundOpacity Is Nothing Then Return
  219. If MusicAllList.Any Then
  220. PanMusicVolume.Visibility = Visibility.Visible
  221. PanMusicDetail.Visibility = Visibility.Visible
  222. BtnMusicClear.Visibility = Visibility.Visible
  223. CardMusic.Title = "背景音乐(" &
  224. DirectoryUtils.EnumerateFiles(Paths.Base & "PCL\Musics\", True).Count(Function(f) Not {"ini", "jpg", "txt", "cfg", "lrc", "db", "png"}.Contains(PathUtils.GetExtension(f))) &
  225. " 首)"
  226. Else
  227. PanMusicVolume.Visibility = Visibility.Collapsed
  228. PanMusicDetail.Visibility = Visibility.Collapsed
  229. BtnMusicClear.Visibility = Visibility.Collapsed
  230. CardMusic.Title = "背景音乐"
  231. End If
  232. CardMusic.TriggerForceResize()
  233. End Sub
  234. Private Sub BtnMusicClear_Click(sender As Object, e As EventArgs) Handles BtnMusicClear.Click
  235. If MyMsgBox("即将删除背景音乐文件夹中的所有文件。" & vbCrLf & "此操作不可撤销,是否确定?", "警告",, "取消", IsWarn:=True) = 1 Then
  236. RunInThread(
  237. Sub()
  238. Hint("正在删除背景音乐……")
  239. '停止播放音乐
  240. MusicNAudio = Nothing
  241. MusicWaitingList = New List(Of String)
  242. MusicAllList = New List(Of String)
  243. Thread.Sleep(200)
  244. '删除文件
  245. Try
  246. DirectoryUtils.Delete(Paths.Base & "PCL\Musics")
  247. Hint("背景音乐已删除!", HintType.Green)
  248. Catch ex As Exception
  249. Logger.Error(ex, "删除背景音乐失败", LogBehavior.Alert)
  250. End Try
  251. Try
  252. DirectoryUtils.Create(Paths.Base & "PCL\Musics\")
  253. RunInUi(Sub() MusicRefreshPlay(False))
  254. Catch ex As Exception
  255. Logger.Error(ex, "重建背景音乐文件夹失败", LogBehavior.Alert)
  256. End Try
  257. End Sub)
  258. End If
  259. End Sub
  260. Private Sub CheckMusicStart_Change() Handles CheckMusicStart.Change
  261. If AniControlEnabled <> 0 Then Return
  262. If CheckMusicStart.Checked Then CheckMusicStop.Checked = False
  263. End Sub
  264. Private Sub CheckMusicStop_Change() Handles CheckMusicStop.Change
  265. If AniControlEnabled <> 0 Then Return
  266. If CheckMusicStop.Checked Then CheckMusicStart.Checked = False
  267. End Sub
  268. '主页
  269. Private Sub BtnCustomFile_Click(sender As Object, e As EventArgs) Handles BtnCustomFile.Click
  270. Try
  271. If FileUtils.Exists(Paths.Base & "PCL\Custom.xaml") Then
  272. If MyMsgBox("当前已存在布局文件,继续生成教学文件将会覆盖现有布局文件!", "覆盖确认", "继续", "取消", IsWarn:=True) = 2 Then Return
  273. End If
  274. ExtractResources(Paths.Base & "PCL\Custom.xaml", "Custom")
  275. Hint("教学文件已生成!", HintType.Green)
  276. OpenExplorer(Paths.Base & "PCL\Custom.xaml")
  277. Catch ex As Exception
  278. Logger.Error(ex, "生成教学文件失败")
  279. End Try
  280. End Sub
  281. Private Sub BtnCustomRefresh_Click() Handles BtnCustomRefresh.Click
  282. FrmLaunchRight.ForceRefresh()
  283. Hint("已刷新主页!", HintType.Green)
  284. End Sub
  285. Private Sub BtnCustomTutorial_Click(sender As Object, e As EventArgs) Handles BtnCustomTutorial.Click
  286. MyMsgBox("1. 点击 生成教学文件 按钮,这会在 PCL 文件夹下生成 Custom.xaml 布局文件。" & vbCrLf &
  287. "2. 使用记事本等工具打开这个文件并进行修改,修改完记得保存。" & vbCrLf &
  288. "3. 点击 刷新主页 按钮,查看主页现在长啥样了。" & vbCrLf &
  289. vbCrLf &
  290. "你可以在生成教学文件后直接刷新主页,对照着进行修改,更有助于理解。" & vbCrLf &
  291. "直接将主页文件拖进 PCL 窗口也可以快捷加载。", "主页自定义教程")
  292. End Sub
  293. Private Sub BtnCustomOpen_Click(sender As Object, e As EventArgs) Handles BtnCustomOpen.Click
  294. Try
  295. Dim CustomPath As String = Paths.Base & "PCL\Custom.xaml"
  296. If FileUtils.Exists(CustomPath) Then
  297. OpenExplorer(CustomPath)
  298. Else
  299. OpenExplorer(Paths.Base & "PCL\")
  300. Hint("未找到 Custom.xaml,已打开 PCL 文件夹。", HintType.Blue)
  301. End If
  302. Catch ex As Exception
  303. Logger.Error(ex, "打开主页文件失败")
  304. End Try
  305. End Sub
  306. Public Shared Sub OnMainPageTypeChanged()
  307. If FrmSetupUI Is Nothing Then Return
  308. Select Case CInt(Settings.Get(Of Integer)("UiCustomType"))
  309. Case 0 '无
  310. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
  311. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
  312. FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
  313. FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
  314. FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
  315. Case 1 '本地
  316. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
  317. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Visible
  318. FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
  319. FrmSetupUI.HintCustom.Visibility = Visibility.Visible
  320. FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get(Of Boolean)("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
  321. FrmSetupUI.HintCustom.Text = $"从 PCL 文件夹下的 Custom.xaml 读取主页内容。{vbCrLf}你可以手动编辑该文件,向主页添加文本、图片、常用网站、快捷启动等功能。"
  322. CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.None)
  323. Case 2 '联网
  324. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
  325. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
  326. FrmSetupUI.PanCustomNet.Visibility = Visibility.Visible
  327. FrmSetupUI.HintCustom.Visibility = Visibility.Visible
  328. FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get(Of Boolean)("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
  329. FrmSetupUI.HintCustom.Text = $"从指定网址联网获取主页内容。服主也可以用于动态更新服务器公告。{vbCrLf}如果你制作了稳定运行的联网主页,可以点击这条提示投稿,若合格即可加入预设!"
  330. CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.打开网页)
  331. CustomEventService.SetEventData(FrmSetupUI.HintCustom, "https://github.com/Meloong-Git/PCL/discussions/2528")
  332. Case 3 '预设
  333. FrmSetupUI.PanCustomPreset.Visibility = Visibility.Visible
  334. FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
  335. FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
  336. FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
  337. FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
  338. End Select
  339. FrmSetupUI.CardCustom.TriggerForceResize()
  340. End Sub
  341. '主题
  342. Private Sub LabLauncherTheme5Unlock_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles LabLauncherTheme5Unlock.MouseLeftButtonUp
  343. RadioLauncherTheme5Gray.Opacity -= 0.7
  344. RadioLauncherTheme5.Opacity += 0.7
  345. AniStart({
  346. AaOpacity(RadioLauncherTheme5Gray, 1, 1000 * AniSpeed, 500 * AniSpeed, New AniEaseInFluent),
  347. AaOpacity(RadioLauncherTheme5, -1, 1000 * AniSpeed, 500 * AniSpeed, New AniEaseInFluent)
  348. }, "ThemeUnlock")
  349. If RadioLauncherTheme5Gray.Opacity < 0.02 Then
  350. ThemeUnlock(5, UnlockHint:="隐藏主题 玄素黑 已解锁!")
  351. AniStop("ThemeUnlock")
  352. RadioLauncherTheme5.Checked = True
  353. End If
  354. End Sub
  355. Private Sub LabLauncherTheme11Click_MouseLeftButtonUp() Handles LabLauncherTheme11Click.MouseLeftButtonUp, RadioLauncherTheme11.MouseRightButtonUp
  356. If LabLauncherTheme11Click.Visibility = Visibility.Collapsed OrElse If(LabLauncherTheme11Click.ToolTip, "").ToString.Contains("点击") Then
  357. If MyMsgBox(
  358. "1. 不爬取或攻击相关服务或网站,不盗取相关账号,没有谜题可以或需要以此来解决。" & vbCrLf &
  359. "2. 不得篡改或损毁相关公开信息,请尽量让它们保持原状。" & vbCrLf &
  360. "3. 在你感到迷茫的时候,看看回声洞可能会给你带来惊喜。" & vbCrLf & vbCrLf &
  361. "若违规,可能会被从任意相关群中踢出!",
  362. "解密游戏的基本规则", "我知道了", "恕我拒绝") = 1 Then
  363. MyMsgBox("你需要用自己的智慧来找到下一步的线索……" & vbCrLf &
  364. "初始线索:gnp.dorC61\60\20\0202\moc.x1xa.2s\\:sp" & "T".Lower & "th", "解密游戏") '防止触发病毒检测规则
  365. End If
  366. End If
  367. End Sub
  368. Private Sub LabLauncherTheme8Copy_MouseRightButtonUp() Handles LabLauncherTheme8Copy.MouseRightButtonUp, RadioLauncherTheme8.MouseRightButtonUp
  369. OpenWebsite("https://meloong.com/afd/a/LTCat")
  370. End Sub
  371. Private Sub LabLauncherTheme9Copy_MouseRightButtonUp() Handles LabLauncherTheme9Copy.MouseRightButtonUp, RadioLauncherTheme9.MouseRightButtonUp
  372. PageOtherLeft.TryFeedback()
  373. End Sub
  374. '主题自定义
  375. Private Sub RadioLauncherTheme14_Change(sender As Object, e As RouteEventArgs) Handles RadioLauncherTheme14.Changed
  376. If RadioLauncherTheme14.Checked Then
  377. If LabLauncherHue.Visibility = Visibility.Visible Then Return
  378. LabLauncherHue.Visibility = Visibility.Visible
  379. SliderLauncherHue.Visibility = Visibility.Visible
  380. LabLauncherSat.Visibility = Visibility.Visible
  381. SliderLauncherSat.Visibility = Visibility.Visible
  382. LabLauncherDelta.Visibility = Visibility.Visible
  383. SliderLauncherDelta.Visibility = Visibility.Visible
  384. LabLauncherLight.Visibility = Visibility.Visible
  385. SliderLauncherLight.Visibility = Visibility.Visible
  386. Else
  387. If LabLauncherHue.Visibility = Visibility.Collapsed Then Return
  388. LabLauncherHue.Visibility = Visibility.Collapsed
  389. SliderLauncherHue.Visibility = Visibility.Collapsed
  390. LabLauncherSat.Visibility = Visibility.Collapsed
  391. SliderLauncherSat.Visibility = Visibility.Collapsed
  392. LabLauncherDelta.Visibility = Visibility.Collapsed
  393. SliderLauncherDelta.Visibility = Visibility.Collapsed
  394. LabLauncherLight.Visibility = Visibility.Collapsed
  395. SliderLauncherLight.Visibility = Visibility.Collapsed
  396. End If
  397. CardLauncher.TriggerForceResize()
  398. End Sub
  399. Private Sub HSL_Change() Handles SliderLauncherHue.Change, SliderLauncherLight.Change, SliderLauncherSat.Change, SliderLauncherDelta.Change
  400. If AniControlEnabled <> 0 OrElse SliderLauncherSat Is Nothing OrElse Not SliderLauncherSat.IsLoaded Then Return
  401. ThemeRefresh()
  402. End Sub
  403. #Region "功能隐藏"
  404. Private Shared _HiddenForceShow As Boolean = False
  405. ''' <summary>
  406. ''' 是否强制显示被禁用的功能。
  407. ''' </summary>
  408. Public Shared Property HiddenForceShow As Boolean
  409. Get
  410. Return _HiddenForceShow
  411. End Get
  412. Set(value As Boolean)
  413. _HiddenForceShow = value
  414. HiddenRefresh()
  415. End Set
  416. End Property
  417. ''' <summary>
  418. ''' 更新功能隐藏带来的显示变化。
  419. ''' </summary>
  420. Public Shared Sub HiddenRefresh() Handles Me.Loaded
  421. If FrmMain.PanTitleSelect Is Nothing OrElse Not FrmMain.PanTitleSelect.IsLoaded Then Return
  422. Try
  423. '顶部栏
  424. If Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageDownload") AndAlso Settings.Get(Of Boolean)("UiHiddenPageLink") AndAlso Settings.Get(Of Boolean)("UiHiddenPageSetup") AndAlso Settings.Get(Of Boolean)("UiHiddenPageOther") Then
  425. '顶部栏已被全部隐藏
  426. FrmMain.PanTitleSelect.Visibility = Visibility.Collapsed
  427. Else
  428. '顶部栏未被全部隐藏
  429. FrmMain.PanTitleSelect.Visibility = Visibility.Visible
  430. FrmMain.BtnTitleSelect1.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageDownload"), Visibility.Collapsed, Visibility.Visible)
  431. FrmMain.BtnTitleSelect2.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageLink"), Visibility.Collapsed, Visibility.Visible)
  432. FrmMain.BtnTitleSelect3.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageSetup"), Visibility.Collapsed, Visibility.Visible)
  433. FrmMain.BtnTitleSelect4.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenPageOther"), Visibility.Collapsed, Visibility.Visible)
  434. End If
  435. '功能
  436. FrmLaunchLeft.RefreshButtonsUI()
  437. If FrmSetupUI IsNot Nothing Then
  438. FrmSetupUI.CardSwitch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenFunctionHidden"), Visibility.Collapsed, Visibility.Visible)
  439. End If
  440. '设置子页面
  441. If FrmSetupLeft IsNot Nothing Then
  442. FrmSetupLeft.ItemLaunch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLaunch"), Visibility.Collapsed, Visibility.Visible)
  443. FrmSetupLeft.ItemUI.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi"), Visibility.Collapsed, Visibility.Visible)
  444. FrmSetupLeft.ItemLink.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink"), Visibility.Collapsed, Visibility.Visible)
  445. FrmSetupLeft.ItemSystem.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem"), Visibility.Collapsed, Visibility.Visible)
  446. '隐藏左边选择卡
  447. Dim AvaliableCount As Integer = 0
  448. If Not Settings.Get(Of Boolean)("UiHiddenSetupLaunch") Then AvaliableCount += 1
  449. If Not Settings.Get(Of Boolean)("UiHiddenSetupUi") Then AvaliableCount += 1
  450. 'If Not Settings.Get(Of Boolean)("UiHiddenSetupLink") Then AvaliableCount += 1
  451. If Not Settings.Get(Of Boolean)("UiHiddenSetupSystem") Then AvaliableCount += 1
  452. FrmSetupLeft.PanItem.Visibility = If(AvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
  453. End If
  454. '更多子页面
  455. Dim OtherAvaliableCount As Integer = 0
  456. If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then OtherAvaliableCount += 1
  457. If Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then OtherAvaliableCount += 1
  458. If Not Settings.Get(Of Boolean)("UiHiddenOtherTest") Then OtherAvaliableCount += 1
  459. If Not Settings.Get(Of Boolean)("UiHiddenOtherFeedback") Then OtherAvaliableCount += 1
  460. If Not Settings.Get(Of Boolean)("UiHiddenOtherVote") Then OtherAvaliableCount += 1
  461. If FrmOtherLeft IsNot Nothing Then
  462. FrmOtherLeft.ItemHelp.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherHelp"), Visibility.Collapsed, Visibility.Visible)
  463. FrmOtherLeft.ItemFeedback.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherFeedback"), Visibility.Collapsed, Visibility.Visible)
  464. FrmOtherLeft.ItemVote.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherVote"), Visibility.Collapsed, Visibility.Visible)
  465. FrmOtherLeft.ItemAbout.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout"), Visibility.Collapsed, Visibility.Visible)
  466. FrmOtherLeft.ItemTest.Visibility = If(Not HiddenForceShow AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest"), Visibility.Collapsed, Visibility.Visible)
  467. '隐藏左边选择卡
  468. FrmOtherLeft.PanItem.Visibility = If(OtherAvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
  469. End If
  470. If OtherAvaliableCount = 1 AndAlso Not HiddenForceShow Then
  471. If Not Settings.Get(Of Boolean)("UiHiddenOtherHelp") Then
  472. FrmMain.BtnTitleSelect4.Text = "帮助"
  473. ElseIf Not Settings.Get(Of Boolean)("UiHiddenOtherAbout") Then
  474. FrmMain.BtnTitleSelect4.Text = "关于"
  475. Else
  476. FrmMain.BtnTitleSelect4.Text = "百宝箱"
  477. End If
  478. Else
  479. FrmMain.BtnTitleSelect4.Text = "更多"
  480. End If
  481. '各个页面的入口
  482. If FrmMain.PageCurrent = FormMain.PageType.InstanceSelect Then FrmSelectRight.BtnEmptyDownload_Loaded()
  483. If FrmMain.PageCurrent = FormMain.PageType.Launch Then FrmLaunchLeft.RefreshButtonsUI()
  484. If FrmMain.PageCurrent = FormMain.PageType.InstanceSetup AndAlso FrmInstanceModDisabled IsNot Nothing Then FrmInstanceModDisabled.BtnDownload_Loaded()
  485. '备注
  486. If FrmSetupUI IsNot Nothing Then FrmSetupUI.CardSwitch.Title = If(HiddenForceShow, "功能隐藏(已暂时关闭,按 F12 以重新启用)", "功能隐藏")
  487. Catch ex As Exception
  488. Logger.Error(ex, "刷新功能隐藏项目失败")
  489. End Try
  490. End Sub
  491. 'UI 协同改变
  492. Private Sub HiddenSetupMain() Handles CheckHiddenPageSetup.Change
  493. '设置主页面
  494. If CheckHiddenPageSetup.Checked Then
  495. '开启
  496. CheckHiddenSetupLaunch.Checked = True
  497. CheckHiddenSetupSystem.Checked = True
  498. CheckHiddenSetupLink.Checked = True
  499. CheckHiddenSetupUI.Checked = True
  500. Else
  501. '关闭
  502. If Settings.Get(Of Boolean)("UiHiddenSetupLaunch") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
  503. CheckHiddenSetupLaunch.Checked = False
  504. CheckHiddenSetupSystem.Checked = False
  505. CheckHiddenSetupLink.Checked = False
  506. CheckHiddenSetupUI.Checked = False
  507. End If
  508. End If
  509. End Sub
  510. Private Sub HiddenSetupSub() Handles CheckHiddenSetupLaunch.Change, CheckHiddenSetupSystem.Change, CheckHiddenSetupLink.Change, CheckHiddenSetupUI.Change
  511. '设置子页面
  512. If Settings.Get(Of Boolean)("UiHiddenSetupLaunch") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupUi") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupSystem") AndAlso Settings.Get(Of Boolean)("UiHiddenSetupLink") Then
  513. '已被全部隐藏
  514. CheckHiddenPageSetup.Checked = True
  515. Else
  516. '未被全部隐藏
  517. CheckHiddenPageSetup.Checked = False
  518. End If
  519. End Sub
  520. Private Sub HiddenOtherMain() Handles CheckHiddenPageOther.Change
  521. '更多主页面
  522. If CheckHiddenPageOther.Checked Then
  523. '开启
  524. CheckHiddenOtherAbout.Checked = True
  525. CheckHiddenOtherTest.Checked = True
  526. CheckHiddenOtherFeedback.Checked = True
  527. CheckHiddenOtherVote.Checked = True
  528. CheckHiddenOtherHelp.Checked = True
  529. Else
  530. '关闭
  531. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") AndAlso
  532. Settings.Get(Of Boolean)("UiHiddenOtherVote") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherFeedback") Then
  533. CheckHiddenOtherAbout.Checked = False
  534. CheckHiddenOtherTest.Checked = False
  535. CheckHiddenOtherFeedback.Checked = False
  536. CheckHiddenOtherVote.Checked = False
  537. CheckHiddenOtherHelp.Checked = False
  538. End If
  539. End If
  540. End Sub
  541. Private Sub HiddenOtherSub(sender As Object, user As Boolean) Handles CheckHiddenOtherHelp.Change, CheckHiddenOtherAbout.Change, CheckHiddenOtherTest.Change
  542. '更多子页面(有具体内容的)
  543. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") Then
  544. '已被全部隐藏
  545. CheckHiddenPageOther.Checked = True
  546. Else
  547. '未被全部隐藏
  548. CheckHiddenPageOther.Checked = False
  549. End If
  550. '修改无具体内容的项
  551. If Not user Then Return
  552. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") Then
  553. CheckHiddenOtherFeedback.Checked = True
  554. CheckHiddenOtherVote.Checked = True
  555. End If
  556. End Sub
  557. Private Sub HiddenOtherNet(sender As Object, user As Boolean) Handles CheckHiddenOtherFeedback.Change, CheckHiddenOtherVote.Change
  558. '更多子页面(无具体内容的)
  559. If Not user Then Return
  560. If Settings.Get(Of Boolean)("UiHiddenOtherHelp") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherAbout") AndAlso Settings.Get(Of Boolean)("UiHiddenOtherTest") AndAlso
  561. (Not Settings.Get(Of Boolean)("UiHiddenOtherFeedback") OrElse Not Settings.Get(Of Boolean)("UiHiddenOtherVote")) Then
  562. CheckHiddenOtherAbout.Checked = False
  563. CheckHiddenOtherTest.Checked = False
  564. CheckHiddenOtherHelp.Checked = False
  565. End If
  566. End Sub
  567. '警告提示
  568. Private Sub HiddenHint(sender As Object, user As Boolean) Handles CheckHiddenFunctionHidden.Change, CheckHiddenPageSetup.Change, CheckHiddenSetupUI.Change
  569. If AniControlEnabled = 0 AndAlso sender.Checked Then Hint("按 F12 即可暂时关闭功能隐藏设置。千万别忘了,要不然设置就改不回来了……")
  570. End Sub
  571. #End Region
  572. '滑动条
  573. Private Sub SliderLoad()
  574. SliderMusicVolume.GetHintText = Function(v) Math.Ceiling(v * 0.1) & "%"
  575. SliderLauncherTransparent.GetHintText = Function(v) Math.Round(40 + v * 0.1) & "%"
  576. SliderLauncherHue.GetHintText = Function(v) v & "°"
  577. SliderLauncherSat.GetHintText = Function(v) v & "%"
  578. SliderLauncherDelta.GetHintText =
  579. Function(Value As Integer) As String
  580. If Value > 90 Then
  581. Return "+" & (Value - 90)
  582. ElseIf Value = 90 Then
  583. Return 0
  584. Else
  585. Return Value - 90
  586. End If
  587. End Function
  588. SliderLauncherLight.GetHintText =
  589. Function(Value As Integer) As String
  590. If Value > 20 Then
  591. Return "+" & (Value - 20)
  592. ElseIf Value = 20 Then
  593. Return 0
  594. Else
  595. Return Value - 20
  596. End If
  597. End Function
  598. SliderBackgroundOpacity.GetHintText = Function(v) Math.Round(v * 0.1) & "%"
  599. SliderBackgroundBlur.GetHintText = Function(v) v & " 像素"
  600. End Sub
  601. End Class