PageSetupUI.xaml.vb 34 KB

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