PageSetupUI.xaml.vb 38 KB

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