PageSetupUI.xaml.vb 38 KB

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