PageSetupUI.xaml.vb 35 KB

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