1
0

PageSetupUI.xaml.vb 38 KB

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