PageSetupUI.xaml.vb 39 KB

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