formSetup.xaml.vb 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165
  1. Public Class formSetup
  2. ''' <summary>
  3. ''' 是否可以写入设置。
  4. ''' </summary>
  5. ''' <remarks></remarks>
  6. Private CanWrite As Boolean = False
  7. #Region "窗体初始化"
  8. ''' <summary>
  9. ''' 是否已经初始化过了。
  10. ''' </summary>
  11. ''' <remarks></remarks>
  12. Private IsFirstLoaded As Boolean = False
  13. '初始化
  14. Private Sub FormSystemSetup_ContentRendered(ByVal sender As Object, ByVal e As System.EventArgs) Handles panMain.Loaded
  15. Try
  16. RefreshHidden()
  17. If IsFirstLoaded Then Exit Sub
  18. '初始化
  19. Log("[Setup] 读取设置开始")
  20. UseControlAnimation = False
  21. CanWrite = False
  22. panMain.UpdateLayout()
  23. panBack.Margin = New Thickness(0)
  24. selecter.ShowList = {"启动设置", "界面设置", "下载设置", "主页设置", "系统设置", "关于"}
  25. selecter.SelectIndex = 0
  26. selecterHide.HintList = {"仅显示少量最常用的设置。", "显示所有普通设置。", "显示所有普通设置与高级设置。高级设置均以 * 标注,且只建议服主、整合作者和熟悉游戏的玩家打开。"}
  27. selecterHide.ShowList = {"简洁模式", "普通模式", "高级模式"}
  28. selecterHide.SelectIndex = ReadReg("SysLevel", "0")
  29. '读取设置:系统设置
  30. chSysTest.Checked = ReadReg("SysTest", "False")
  31. chSysFeed.Checked = ReadReg("SysFeed", "True")
  32. chSysOffline.Checked = ReadIni("setup", "SysOffline", "False")
  33. chSysUpdate.Checked = ReadIni("setup", "SysUpdate", "True")
  34. raSysUpdateHint.Checked = ReadIni("setup", "SysUpdateHint", "True")
  35. raSysUpdateSetup.Checked = Not raSysUpdateHint.Checked
  36. CType(FindName("raSystemWarn" & ReadReg("SystemWarn", "100")), Radiobox).Checked = True
  37. chSysUpdateTest.Checked = ReadIni("setup", "SysUpdateTest", "False")
  38. '读取设置:界面设置
  39. chLaunchMending.Checked = ReadIni("setup", "LaunchMending", "True")
  40. chUiShowLogo.Checked = ReadIni("setup", "UiShowLogo", "True")
  41. textUiLauncherOpacity.Text = ReadIni("setup", "UiLauncherOpacity", "100")
  42. CType(FindName("raUiTheme" & ReadIni("setup", "UiTheme", "0")), Radiobox).Checked = True
  43. chUiBackground.Checked = File.Exists(PATH & "PCL\back.png")
  44. btnUiBarReset.Visibility = If(File.Exists(PATH & "PCL\top.png"), Visibility.Visible, Visibility.Collapsed)
  45. Dim IsBgm As Boolean = File.Exists(PATH & "PCL\bgm.mp3") Or File.Exists(PATH & "PCL\bgm.wav")
  46. btnUiBgmReset.Visibility = If(IsBgm, Visibility.Visible, Visibility.Collapsed)
  47. chUiBgm.Checked = IsBgm
  48. chUiBgmAuto.Checked = ReadIni("setup", "UiBgmAuto", "True")
  49. CType(FindName("raUiBackgroundShow" & ReadIni("setup", "UiBackgroundShow", "0")), Radiobox).Checked = True
  50. textUiBackgroundOpacity.Text = ReadIni("setup", "UiBackgroundOpacity", "50")
  51. textUiBackgroundURL.Text = ReadIni("setup", "UiBackgroundURL", "")
  52. textUiBarURL.Text = ReadIni("setup", "UiBarURL", "")
  53. chUiHiddenDownload.Checked = ReadIni("setup", "UiHiddenDownload", "False")
  54. chUiHiddenForge.Checked = ReadIni("setup", "UiHiddenForge", "False")
  55. chUiHiddenMinecraft.Checked = ReadIni("setup", "UiHiddenMinecraft", "False")
  56. chUiHiddenOptiFine.Checked = ReadIni("setup", "UiHiddenOptiFine", "False")
  57. chUiHiddenSetup.Checked = ReadIni("setup", "UiHiddenSetup", "False")
  58. '读取设置:启动设置
  59. chLaunchTopmost.Checked = ReadReg("LaunchTopmost", "False")
  60. chLaunchNatives.Checked = ReadIni("setup", "LaunchNatives", "True")
  61. CType(FindName("raLaunchVisibility" & ReadIni("setup", "LaunchVisibility", "3")), Radiobox).Checked = True
  62. CType(FindName("raLaunchLevel" & ReadReg("LaunchLevel", "1")), Radiobox).Checked = True
  63. chLaunchLog.Checked = ReadIni("setup", "LaunchLog", "False")
  64. chLaunchLogWarn.Checked = ReadIni("setup", "LaunchLogWarn", "False")
  65. CType(FindName("raLaunchSkin" & ReadReg("LaunchSkin", "3")), Radiobox).Checked = True
  66. textLaunchSkinName.Text = ReadReg("LaunchSkinName", "")
  67. textLaunchServer.Text = ReadIni("setup", "LaunchServer", "")
  68. CType(FindName("raLaunchSplit" & ReadIni("setup", "LaunchSplit", "0")), Radiobox).Checked = True
  69. CType(FindName("raLaunchMode" & ReadIni("setup", "LaunchMode", "0")), Radiobox).Checked = True
  70. textLaunchModeWindowHeight.Text = ReadIni("setup", "LaunchModeWindowHeight", "480")
  71. textLaunchModeWindowWidth.Text = ReadIni("setup", "LaunchModeWindowWidth", "854")
  72. textLaunchJava.Text = ReadReg("SetupJavaPath", "")
  73. textLaunchMaxRam.Text = ReadReg("LaunchMaxRam", "1024")
  74. textLaunchShow.Text = ReadIni("setup", "LaunchShow", APPLICATION_FULL_NAME)
  75. textLaunchTitle.Text = ReadIni("setup", "LaunchTitle", "")
  76. textLaunchTitle.ToolTip = "Minecraft 游戏窗口的标题。留空为不更改。" & vbCrLf & "你可以使用以下通配符:" & vbCrLf & " \\v 对应版本的版本号(如 1.9.4)" & vbCrLf & " \\r 从 PCL 文件夹中的 RandomTitle.txt 中随机读取一行"
  77. textLaunchJVM.Text = ReadIni("setup", "LaunchJVM", "-XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True")
  78. LoadMinecraftFolderList()
  79. '读取设置:下载设置
  80. chDownProcess.Checked = ReadIni("setup", "DownProcess", "True")
  81. CType(FindName("raDownVersion" & ReadIni("setup", "DownVersion", "0")), Radiobox).Checked = True
  82. CType(FindName("raDownAssets" & ReadIni("setup", "DownAssets", "0")), Radiobox).Checked = True
  83. CType(FindName("raDownMinecraft" & ReadIni("setup", "DownMinecraft", "1")), Radiobox).Checked = True
  84. CType(FindName("raDownOptiFine" & ReadIni("setup", "DownOptiFine", "1")), Radiobox).Checked = True
  85. CType(FindName("raDownForge" & ReadIni("setup", "DownForge", "1")), Radiobox).Checked = True
  86. CType(FindName("raDownForgeAction" & ReadIni("setup", "DownForgeAction", "1")), Radiobox).Checked = True
  87. chDownMinecraftAssetsHint.Checked = ReadIni("setup", "DownMinecraftAssetsHint", "True")
  88. chDownMinecraftAssetsAuto.Checked = ReadIni("setup", "DownMinecraftAssetsAuto", "True")
  89. chDownOptiFineOpen.Checked = ReadIni("setup", "DownOptiFineOpen", "False")
  90. chDownOptiFineFolder.Checked = ReadIni("setup", "DownOptiFineFolder", "True")
  91. textDownFolder.Text = ReadIni("setup", "DownFolder", "")
  92. textDownMaxinum.Text = ReadIni("setup", "DownMaxinum", "20")
  93. '读取设置:主页设置
  94. chHomeUpdate.Checked = ReadIni("setup", "HomeUpdate", "True")
  95. chHomeUpdateRelease.Checked = ReadIni("setup", "HomeUpdateRelease", "False")
  96. chHomeSave.Checked = ReadReg("HomeSave", "True")
  97. chHomeEnabled.Checked = ReadIni("setup", "HomeEnabled", "True")
  98. chHomeAutologin.Checked = ReadIni("setup", "HomeAutologin", "True")
  99. chHomeAutoplay.Checked = ReadIni("setup", "HomeAutoplay", "True")
  100. chHomeHide.Checked = ReadIni("setup", "HomeHide", "True")
  101. chHomeFull.Checked = ReadIni("setup", "HomeFull", "True")
  102. CType(FindName("raHomeAutoplaySpeed" & ReadIni("setup", "raHomeAutoplaySpeed", "1")), Radiobox).Checked = True
  103. chHomePCLPush.Checked = ReadIni("setup", "HomePCLPush", "True")
  104. chHomeMCBBSPush.Checked = ReadIni("setup", "HomeMCBBSPush", "True")
  105. chHomeTbPush.Checked = ReadIni("setup", "HomeTbPush", "True")
  106. chHomeForumPush.Checked = ReadIni("setup", "HomeForumPush", "False")
  107. chHomeMojangPush.Checked = ReadIni("setup", "HomeMojangPush", "True")
  108. For i As Integer = 0 To 100
  109. Dim SourceString As String = ReadIni("setup", "HomeSource" & i)
  110. If SourceString = "" Then Exit For
  111. '分解字符串
  112. Dim URL As String = SourceString.Split("|")(0)
  113. Dim IsUsing As String = SourceString.Split("|")(1)
  114. Dim Source As String = SourceString.Split("|")(2)
  115. Dim Desc As String = SourceString.Split("|")(3)
  116. Dim item = New ListItem With {.CanCheck = False, .Width = 500, .ButtonLogo = New BitmapImage(New Uri("/Images/appbar.settings.png", UriKind.Relative)), .UseLayoutRounding = True, .Name = "itemLaunchMain" & Rnd.NextDouble.ToString.Replace(".", ""), .MainText = Source, .SubText = If(Desc = "", URL, Desc), .Logo = New BitmapImage(New Uri("/Images/Block-" & IsUsing & ".png", UriKind.Relative))}
  117. item.Version.LoadedByFile = IsUsing
  118. 'AddHandler item.ButtonClick, AddressOf SourceClick
  119. 'AddHandler item.IconClick, AddressOf IconClick
  120. panHomeSourceList.Children.Insert(panHomeSourceList.Children.Count - 1, item)
  121. Next i
  122. chHomeVersionSwap.Checked = ReadIni("setup", "HomeVersionSwap", "True")
  123. chHomeVersionOld.Checked = ReadIni("setup", "HomeVersionOld", "True")
  124. Log("[Setup] 读取设置成功")
  125. Catch ex As Exception
  126. ExShow(ex, "读取设置失败", ErrorLevel.MsgboxAndFeedback)
  127. Finally
  128. '初始化结束
  129. CanWrite = True
  130. IsFirstLoaded = True
  131. UseControlAnimation = True
  132. End Try
  133. End Sub
  134. '绑定滚动条
  135. Private Sub panSetupHost_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles panSetupHost.Loaded
  136. If scroll.SetControl(panBack, False) Then AddHandler panMain.MouseWheel, AddressOf scroll.RunMouseWheel
  137. End Sub
  138. '刷新隐藏主题
  139. Private Sub RefreshHidden()
  140. If ReadReg("ThemeHunluan", "False") = "True" Then
  141. raUiTheme100.IsEnabled = True
  142. raUiTheme100.Context = "混乱黄"
  143. End If
  144. If ReadReg("ThemeDeathBlue", "False") = "True" Then
  145. raUiTheme101.IsEnabled = True
  146. raUiTheme101.Context = "死机蓝"
  147. End If
  148. End Sub
  149. #End Region
  150. #Region "通用设置更改"
  151. Private Sub CheckBox_Change(ByVal sender As Checkbox, ByVal raiseByMouse As Boolean) Handles chSysTest.Change, chSysOffline.Change, chSysUpdate.Change, chSysUpdateTest.Change, chUiShowLogo.Change, chUiHiddenDownload.Change, chUiHiddenForge.Change, chUiHiddenMinecraft.Change, chUiHiddenOptiFine.Change, chUiHiddenSetup.Change, chHomeEnabled.Change, chLaunchNatives.Change, chDownMinecraftAssetsAuto.Change, chDownMinecraftAssetsHint.Change, chDownOptiFineFolder.Change, chDownOptiFineOpen.Change, chDownProcess.Change, chHomeAutologin.Change, chHomeAutoplay.Change, chHomePCLPush.Change, chHomeSave.Change, chHomeUpdate.Change, chHomeUpdateRelease.Change, chHomeVersionOld.Change, chHomeVersionSwap.Change, chLaunchLog.Change, chLaunchMending.Change, chLaunchLogWarn.Change, chLaunchTopmost.Change, chHomeMCBBSPush.Change, chHomeMojangPush.Change, chHomeTbPush.Change, chHomeForumPush.Change, chHomeHide.Change, chHomeFull.Change, chUiBgmAuto.Change, chSysFeed.Change
  152. If Not CanWrite Then Exit Sub
  153. '读取数据
  154. Dim Target As String = sender.Tag
  155. Dim IsReg As Boolean = False
  156. If Target.StartsWith("*") Then
  157. IsReg = True
  158. Target = Mid(Target, 2)
  159. End If
  160. '写入设置
  161. Try
  162. If IsReg Then
  163. WriteReg(Target, sender.Checked, True)
  164. Else
  165. WriteIni("setup", Target, sender.Checked)
  166. End If
  167. Catch ex As Exception
  168. ExShow(ex, "写入设置失败:" & Target, ErrorLevel.AllUsers)
  169. End Try
  170. '引发各自事件
  171. Select Case sender.Name
  172. Case "chSysOffline"
  173. If CanWrite Then RefreshOffline()
  174. Case "chUiHiddenDownload", "chUiHiddenMinecraft", "chUiHiddenOptiFine", "chUiHiddenForge"
  175. If CanWrite Then SetupRefreshHidden()
  176. Case "chUiHiddenSetup"
  177. If CanWrite Then
  178. SetupRefreshHidden()
  179. If ReadIni("setup", "UiHiddenSetup", "False") = "True" Then ShowHint("双击版本号可以进入被隐藏的设置页")
  180. End If
  181. Case "chLaunchMending"
  182. File.Delete(PATH_MC & "PCL.ini") '强制重载版本列表
  183. Pool.Add(New Thread(AddressOf PoolVersionList))
  184. Case "chHomeVersionSwap", "chHomeVersionOld"
  185. Pool.Add(New Thread(AddressOf PoolVersionList))
  186. Case "chDownProcess"
  187. WebTaskbarShow = sender.Checked
  188. Case "chHomePCLPush"
  189. If CanWrite Then
  190. If Not sender.Checked Then
  191. If MyMsgbox("PCL 推荐包含关于启动器的重要内容,并且不会含有任何商业广告,仅仅作为启动器通知和传播优秀作品的平台(如果你有任何优秀作品,都可以免费在 PCL 推荐上推广),确认要关闭吗?", "关闭确认", "算了不关闭了", "我还是要关闭") = 1 Then
  192. sender.Checked = True
  193. Exit Sub
  194. End If
  195. End If
  196. ShowHint(New HintConverter("该设置将在重启后生效", HintState.Finish))
  197. End If
  198. Case "chHomeMCBBSPush", "chHomeTbPush", "chHomeMojangPush", "chHomeAdPush", "chHomeForumPush", "chHomeHide", "chSysUpdateTest", "chHomeEnabled"
  199. If CanWrite Then ShowHint(New HintConverter("该设置将在重启后生效", HintState.Finish))
  200. Case "chHomeAutoplay"
  201. If CanWrite Then frmHomeLeft.ChangeSetup()
  202. Case "chHomeFull"
  203. If CanWrite Then
  204. frmHomeLeft.ChangeSetup()
  205. ShowHint(New HintConverter("该设置将在重启后生效", HintState.Finish))
  206. End If
  207. Case "chSysFeed"
  208. AllowFeedback = chSysFeed.Checked
  209. End Select
  210. End Sub
  211. Private Sub RadioBox_Change(ByVal sender As Radiobox, ByVal raiseByMouse As Boolean) Handles raSysUpdateHint.Change, raSysUpdateSetup.Change, raUiTheme0.Change, raUiTheme1.Change, raUiTheme100.Change, raUiTheme101.Change, raUiTheme2.Change, raUiTheme3.Change, raUiTheme4.Change, raUiBackgroundShow0.Change, raUiBackgroundShow1.Change, raUiBackgroundShow2.Change, raUiBackgroundShow3.Change, raUiBackgroundShow4.Change, raUiBackgroundShow5.Change, raLaunchMode0.Change, raLaunchMode1.Change, raLaunchVisibility0.Change, raLaunchVisibility1.Change, raLaunchVisibility4.Change, raLaunchVisibility2.Change, raLaunchVisibility3.Change, raDownAssets0.Change, raDownAssets1.Change, raDownMinecraft0.Change, raDownMinecraft1.Change, raDownOptiFine0.Change, raDownOptiFine1.Change, raDownVersion0.Change, raDownVersion1.Change, raHomeAutoplaySpeed0.Change, raHomeAutoplaySpeed1.Change, raHomeAutoplaySpeed2.Change, raDownForge0.Change, raDownForge1.Change, raLaunchLevel0.Change, raLaunchLevel1.Change, raLaunchLevel2.Change, raSystemWarn0.Change, raSystemWarn100.Change, raSystemWarn300.Change, raLaunchSplit0.Change, raLaunchSplit1.Change, raLaunchSplit2.Change, raLaunchSkin0.Change, raLaunchSkin1.Change, raLaunchSkin2.Change, raLaunchSkin3.Change, raDownForgeAction0.Change, raDownForgeAction1.Change
  212. If Not CanWrite Then Exit Sub
  213. If Not sender.Checked Then Exit Sub
  214. '引发各自前置事件
  215. Select Case sender.Name
  216. Case "raLaunchVisibility0"
  217. If MyMsgbox("如果设置为打开游戏后关闭启动器,更改游戏窗口标题、游戏崩溃诊断、日志分析、低内存警告等功能额可能会失效。如果你担心 PCL 后台运行影响游戏性能,可以设置为隐藏启动器 2 分钟后自动关闭。" & vbCrLf & "确定要继续设置为直接关闭吗?", "设置确认", "确定", "取消", , True) = 2 Then
  218. raLaunchVisibility3.Checked = True
  219. raLaunchVisibility0.Checked = False
  220. Exit Sub
  221. End If
  222. End Select
  223. '读取数据
  224. Dim Data As String = sender.Tag
  225. Dim IsReg As Boolean = False
  226. If Data.StartsWith("*") Then
  227. IsReg = True
  228. Data = Mid(Data, 2)
  229. End If
  230. Dim Target As String = Data.Split("/")(0)
  231. Dim NewValue As String = Data.Replace(Target & "/", "")
  232. '写入设置
  233. Try
  234. If IsReg Then
  235. WriteReg(Target, NewValue, True)
  236. Else
  237. WriteIni("setup", Target, NewValue)
  238. End If
  239. Catch ex As Exception
  240. ExShow(ex, "写入设置失败:" & Target, ErrorLevel.AllUsers)
  241. End Try
  242. '引发各自事件
  243. Select Case Target
  244. Case "UiTheme"
  245. raUiThemes_Change(sender)
  246. Case "UiBackgroundShow"
  247. SetupRefreshBackground()
  248. Case "LaunchVisibility"
  249. If NewValue = 0 Then chLaunchLog.Checked = False
  250. Case "LaunchFolderSelect"
  251. Dim th As New Thread(Sub()
  252. PoolMinecraftFolder()
  253. frmMain.Dispatcher.Invoke(Sub() LoadMinecraftFolderList())
  254. End Sub)
  255. th.Start()
  256. Case "LaunchSkin"
  257. Dim UserName As String = frmHomeRight.textLegacyUsername.Text
  258. Dim th As New Thread(Sub() frmHomeRight.RefreshLegacySkin(UserName))
  259. th.Start()
  260. Case "HomeAutoplaySpeed"
  261. If CanWrite Then frmHomeLeft.ChangeSetup()
  262. End Select
  263. End Sub
  264. Private Sub TextBox_Change(ByVal sender As TextBox, ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles textUiBackgroundURL.TextChanged, textUiBackgroundOpacity.TextChanged, textUiBarURL.TextChanged, textUiLauncherOpacity.TextChanged, textLaunchJava.TextChanged, textLaunchJVM.TextChanged, textLaunchMaxRam.TextChanged, textLaunchMaxRam.TextChanged, textLaunchModeWindowHeight.TextChanged, textLaunchModeWindowWidth.TextChanged, textLaunchShow.TextChanged, textDownFolder.TextChanged, textDownMaxinum.TextChanged, textLaunchTitle.TextChanged, textLaunchSkinName.TextChanged, textLaunchServer.TextChanged
  265. If Not CanWrite Then Exit Sub
  266. '读取数据
  267. Dim Data As String = sender.Tag
  268. Dim IsReg As Boolean = False
  269. Dim IsNotReturn As Boolean = False
  270. If Data.StartsWith("*") Then
  271. IsReg = True
  272. Data = Mid(Data, 2)
  273. End If
  274. If Data.StartsWith("=") Then
  275. IsNotReturn = True
  276. Data = Mid(Data, 2)
  277. End If
  278. Dim Target As String = Data.Split("/")(0)
  279. Dim CheckMethod As String = Data.Split("/")(1)
  280. Dim CheckResult As String = If(IsNotReturn, "", sender.Name.Replace("text", "lab"))
  281. Dim CheckData() As String = {}
  282. If Len(Data) > Len(Target) + Len(CheckMethod) + 1 Then
  283. CheckData = (Mid(Data, Len(Target) + Len(CheckMethod) + 3)).Split("/")
  284. End If
  285. '至此提取出的有用信息:
  286. ' IsReg:是否写入注册表,为 False 时写入 setup.ini
  287. ' Target:设置项的 Key
  288. ' CheckMethod:输入检查的方式
  289. ' CheckResult:输入检查返回的目标 Label 名称
  290. ' CheckData():输入检查的额外数据
  291. '输入检查
  292. Try
  293. Select Case CheckMethod
  294. Case "Integer"
  295. '类型为整数
  296. Dim UserInput As Integer = GetDoubleFromString(sender.Text)
  297. If Not UserInput.ToString = sender.Text Then
  298. SetCheckResult("必须为一个整数", CheckResult, sender)
  299. Exit Sub
  300. ElseIf UserInput < Int(Val(CheckData(0))) Then
  301. SetCheckResult("最小为 " & Int(Val(CheckData(0))), CheckResult, sender)
  302. Exit Sub
  303. ElseIf UserInput > Int(Val(CheckData(1))) Then
  304. SetCheckResult("最大为 " & Int(Val(CheckData(1))), CheckResult, sender)
  305. Exit Sub
  306. End If
  307. Case "URL"
  308. '类型为网址
  309. If sender.Text = "" Then
  310. '为空不检查
  311. ElseIf sender.Text.StartsWith("://") Or Not sender.Text.Contains("://") Then
  312. SetCheckResult("必须为一个网址", CheckResult, sender)
  313. Exit Sub
  314. End If
  315. Case "UUID"
  316. '类型为 UUID
  317. Dim UserInput = sender.Text.Replace("-", "").Replace(" ", "").ToUpper
  318. If UserInput = "" Then GoTo NoError
  319. Dim reg = RegexSearch(UserInput, "[0-9A-F]{32}")
  320. If Not Len(UserInput) = 32 Then
  321. SetCheckResult("长度应为 32 位", CheckResult, sender)
  322. Exit Sub
  323. ElseIf Not reg.Count = 1 Then
  324. SetCheckResult("格式不正确", CheckResult, sender)
  325. Exit Sub
  326. End If
  327. NoError:
  328. Case "Ram"
  329. '类型为 Ram(MB)
  330. Dim UserInput As Integer = GetDoubleFromString(sender.Text)
  331. If Not UserInput.ToString = sender.Text Then
  332. SetCheckResult("必须为一个整数", CheckResult, sender)
  333. Exit Sub
  334. ElseIf UserInput < Int(Val(CheckData(0))) Then
  335. SetCheckResult("最小为 256 M", CheckResult, sender)
  336. Exit Sub
  337. ElseIf UserInput > 1024 And Not Environment.Is64BitOperatingSystem Then
  338. SetCheckResult("32 位系统最大为 1024 M", CheckResult, sender)
  339. Exit Sub
  340. ElseIf UserInput > Int((New Devices.ComputerInfo).TotalPhysicalMemory / 1024 / 1024) - 512 Then
  341. SetCheckResult("最大为 " & Int((New Devices.ComputerInfo).TotalPhysicalMemory / 1024 / 1024) - 512 & " M", CheckResult, sender)
  342. Exit Sub
  343. End If
  344. Case "Java"
  345. sender.Text = sender.Text.Replace("javaw.exe", "")
  346. '类型为 Java 路径
  347. If Not Directory.Exists(sender.Text) Then
  348. SetCheckResult("文件夹不存在", CheckResult, sender)
  349. Exit Sub
  350. End If
  351. If Not CheckDirectoryPermission(sender.Text) Then
  352. SetCheckResult("文件夹无法访问", CheckResult, sender)
  353. Exit Sub
  354. ElseIf Not (File.Exists(sender.Text & "\javaw.exe") And (File.Exists(sender.Text & "\jli.dll") Or sender.Text.Contains("javapath"))) Then
  355. SetCheckResult("未找到 Java", CheckResult, sender)
  356. Exit Sub
  357. End If
  358. '去“\”
  359. Dim NewText As String = (New RegularExpressions.Regex("[\\]{2,10000}")).Replace(sender.Text, "\")
  360. If NewText.EndsWith("\") Then NewText = Mid(NewText, 1, Len(NewText) - 1)
  361. If Not NewText = sender.Text Then
  362. sender.Text = NewText
  363. sender.SelectionStart = sender.Text.Length
  364. End If
  365. Case "Folder"
  366. '类型为文件夹
  367. If sender.Text = "" Then
  368. '为空不检查
  369. Else
  370. '检查
  371. If sender.Text = "\" Or Not Directory.Exists(sender.Text) Then '莫名其妙的问题:Directory.Exists("\") = True
  372. SetCheckResult("文件夹不存在", CheckResult, sender)
  373. Exit Sub
  374. End If
  375. If Not CheckDirectoryPermission(sender.Text) Then
  376. SetCheckResult("文件夹无法访问", CheckResult, sender)
  377. Exit Sub
  378. End If
  379. '去“\”
  380. Dim NewText As String = (New RegularExpressions.Regex("[\\]{2,10000}")).Replace(sender.Text, "\")
  381. If Not NewText = sender.Text Then
  382. sender.Text = NewText
  383. sender.SelectionStart = sender.Text.Length
  384. End If
  385. End If
  386. Case "UserName"
  387. '类型为用户名
  388. Dim SafeCheck = RegexSearch(sender.Text, "[^0-9A-Za-z_]+")
  389. If SafeCheck.Count > 0 Then
  390. SetCheckResult("用户名不合法", CheckResult, sender)
  391. Exit Sub
  392. End If
  393. Case "NoPush"
  394. '禁用英文单引号
  395. If sender.Text.Contains("""") Then
  396. SetCheckResult("不能包含英文单引号", CheckResult, sender)
  397. Exit Sub
  398. End If
  399. Case "Any"
  400. '不管了
  401. End Select
  402. SetCheckResult("", CheckResult, sender)
  403. Catch ex As Exception
  404. ExShow(ex, "进行输入检查失败:" & sender.Text)
  405. End Try
  406. '写入设置
  407. Try
  408. If IsReg Then
  409. WriteReg(Target, sender.Text, True)
  410. Else
  411. WriteIni("setup", Target, sender.Text)
  412. End If
  413. Catch ex As Exception
  414. ExShow(ex, "写入设置失败:" & Target, ErrorLevel.AllUsers)
  415. End Try
  416. '引发各自事件
  417. Select Case sender.Name
  418. Case "textUiLauncherOpacity"
  419. If CanWrite Then frmMain.Opacity = ReadIni("setup", "UiLauncherOpacity", "100") / 100
  420. Case "textUiBackgroundOpacity"
  421. If CanWrite Then frmMain.imgMainBg.Opacity = ReadIni("setup", "UiBackgroundOpacity", "100") / 100
  422. Case "textLaunchShow"
  423. If CanWrite Then
  424. If textLaunchShow.Text = "Searge" Then
  425. textLaunchShow.Text = "#itzlipofutzli"
  426. textLaunchShow.SelectionStart = textLaunchShow.Text.Length
  427. End If
  428. End If
  429. Case "textLaunchSkinName"
  430. Dim UserName As String = frmHomeRight.textLegacyUsername.Text
  431. Dim th As New Thread(Sub() frmHomeRight.RefreshLegacySkin(UserName))
  432. th.Start()
  433. Case "textLaunchJava"
  434. Dim th As New Thread(Sub() PoolJavaFolder(False))
  435. th.Start()
  436. Case "textDownMaxinum"
  437. WebDownloadCountMax = sender.Text
  438. Case "textDownFolder"
  439. If Not (ReadIni("setup", "DownFolder", "\").EndsWith("\") Or ReadIni("setup", "DownFolder", "\") = "") Then
  440. WriteIni("setup", "DownFolder", ReadIni("setup", "DownFolder", "") & "\")
  441. End If
  442. PATH_DOWNLOAD = ReadIni("setup", "DownFolder", "")
  443. If Not PATH_DOWNLOAD.Contains("\") Then
  444. PATH_DOWNLOAD = PATH & "PCL\download\"
  445. WriteIni("setup", "DownFolder", "")
  446. End If
  447. Log("[Setup] 新的下载文件夹目录:" & PATH_DOWNLOAD)
  448. End Select
  449. End Sub
  450. Private Sub ShowHide_Change(ByVal sender As Object, ByVal raiseByMouse As Boolean) Handles chSysUpdate.Change, raUiTheme4.Change, chUiBackground.Change, raLaunchMode1.Change, chDownMinecraftAssetsHint.Change, chHomeUpdate.Change, chHomeSave.Change, chHomeAutoplay.Change, raLaunchVisibility0.Change, raLaunchSkin3.Change, chUiBgm.Change
  451. '判定是否显示
  452. Dim IsShow As Boolean = sender.Checked
  453. If sender.Name = "raLaunchVisibility0" Or sender.Name = "raLaunchMode1" Then IsShow = Not IsShow
  454. '获取控件
  455. Dim ChangeGrid As Grid = FindName("pan" & Mid(sender.Name, 3))
  456. '改变高度
  457. If IsShow Then
  458. If UseControlAnimation Then
  459. AniStart({AaHeight(ChangeGrid, CType(ChangeGrid.Children(0), Object).Height - ChangeGrid.Height, 200, , New AniEaseJumpEnd(0.7)), AaOpacity(ChangeGrid, 1 - ChangeGrid.Opacity, 200)}, ChangeGrid.Name)
  460. Else
  461. ChangeGrid.Height = CType(ChangeGrid.Children(0), Object).Height
  462. ChangeGrid.Opacity = 1
  463. End If
  464. Else
  465. If UseControlAnimation Then
  466. AniStart({AaHeight(ChangeGrid, -ChangeGrid.Height, 150, , New AniEaseEnd), AaOpacity(ChangeGrid, -ChangeGrid.Opacity, 150)}, ChangeGrid.Name)
  467. Else
  468. ChangeGrid.Height = 0
  469. ChangeGrid.Opacity = 0
  470. End If
  471. End If
  472. End Sub
  473. Private Sub levelChange(ByVal Selection As String) Handles selecterHide.SelectionChange
  474. log("[Setup] 更改设置隐藏等级:" & Selection)
  475. If CanWrite Then WriteReg("SysLevel", selecterHide.SelectIndex)
  476. '变色
  477. Select Case Selection
  478. Case "简洁模式"
  479. AniStart({
  480. AaForeGround(selecterHide, New MyColor(29, 141, 40) - selecterHide.Foreground)
  481. }, "SelecterHideChangeColor")
  482. Case "普通模式"
  483. AniStart({
  484. AaForeGround(selecterHide, New MyColor(182, 182, 20) - selecterHide.Foreground)
  485. }, "SelecterHideChangeColor")
  486. Case "高级模式"
  487. AniStart({
  488. AaForeGround(selecterHide, New MyColor(191, 86, 0) - selecterHide.Foreground)
  489. }, "SelecterHideChangeColor")
  490. End Select
  491. '在 N 与 A 下显示的部分
  492. If Selection = "普通模式" Or Selection = "高级模式" Then
  493. chSysFeed.Visibility = Visibility.Visible
  494. chSysUpdateTest.Visibility = Visibility.Visible
  495. panSysUpdate2.Height = 56
  496. If panSysUpdate.Height > 1 And panSysUpdate.Height < 55 Then panSysUpdate.Height = panSysUpdate.Height + 28
  497. labSysLowMem.Visibility = Visibility.Visible
  498. panSysLowMem.Visibility = Visibility.Visible
  499. chUiShowLogo.Visibility = Visibility.Visible
  500. labUiLauncherOpacity.Visibility = Visibility.Visible
  501. textUiLauncherOpacity.Visibility = Visibility.Visible
  502. labDownSource.Visibility = Visibility.Visible
  503. panDownAssets.Visibility = Visibility.Visible
  504. panDownForge.Visibility = Visibility.Visible
  505. panDownMinecraft.Visibility = Visibility.Visible
  506. panDownOptiFine.Visibility = Visibility.Visible
  507. panDownVersion.Visibility = Visibility.Visible
  508. labDownMinecraft.Visibility = Visibility.Visible
  509. chDownMinecraftAssetsHint.Visibility = Visibility.Visible
  510. panDownMinecraftAssetsHint.Visibility = Visibility.Visible
  511. labDownMaxinum.Visibility = Visibility.Visible
  512. panDownMaxinum.Visibility = Visibility.Visible
  513. chHomeAutoplay.Visibility = Visibility.Visible
  514. panHomeAutoplay.Visibility = Visibility.Visible
  515. Else
  516. chSysFeed.Visibility = Visibility.Collapsed
  517. chSysUpdateTest.Visibility = Visibility.Collapsed
  518. panSysUpdate2.Height = 28
  519. If panSysUpdate.Height > 28 Then panSysUpdate.Height = panSysUpdate.Height - 28
  520. labSysLowMem.Visibility = Visibility.Collapsed
  521. panSysLowMem.Visibility = Visibility.Collapsed
  522. chUiShowLogo.Visibility = Visibility.Collapsed
  523. labUiLauncherOpacity.Visibility = Visibility.Collapsed
  524. textUiLauncherOpacity.Visibility = Visibility.Collapsed
  525. labDownSource.Visibility = Visibility.Collapsed
  526. panDownAssets.Visibility = Visibility.Collapsed
  527. panDownForge.Visibility = Visibility.Collapsed
  528. panDownMinecraft.Visibility = Visibility.Collapsed
  529. panDownOptiFine.Visibility = Visibility.Collapsed
  530. panDownVersion.Visibility = Visibility.Collapsed
  531. labDownMinecraft.Visibility = Visibility.Collapsed
  532. chDownMinecraftAssetsHint.Visibility = Visibility.Collapsed
  533. panDownMinecraftAssetsHint.Visibility = Visibility.Collapsed
  534. labDownMaxinum.Visibility = Visibility.Collapsed
  535. panDownMaxinum.Visibility = Visibility.Collapsed
  536. chHomeAutoplay.Visibility = Visibility.Collapsed
  537. panHomeAutoplay.Visibility = Visibility.Collapsed
  538. End If
  539. '只在 A 下显示的部分
  540. If Selection = "高级模式" Then
  541. chSysOffline.Visibility = Visibility.Visible
  542. labUiBackgroundURL.Visibility = Visibility.Visible
  543. textUiBackgroundURL.Visibility = Visibility.Visible
  544. labUiBarURL.Visibility = Visibility.Visible
  545. textUiBarURL.Visibility = Visibility.Visible
  546. labUiHide.Visibility = Visibility.Visible
  547. panUiHide1.Visibility = Visibility.Visible
  548. panUiHide2.Visibility = Visibility.Visible
  549. chLaunchNatives.Visibility = Visibility.Visible
  550. labLaunchJVM.Visibility = Visibility.Visible
  551. panLaunchJVM.Visibility = Visibility.Visible
  552. chLaunchLogWarn.Visibility = Visibility.Visible
  553. panLaunchVisibility02.Height = 56
  554. labLaunchServer.Visibility = Visibility.Visible
  555. textLaunchServer.Visibility = Visibility.Visible
  556. If panLaunchVisibility0.Height > 1 And panLaunchVisibility0.Height < 55 Then panLaunchVisibility0.Height = panLaunchVisibility0.Height + 28
  557. chLaunchMending.Visibility = Visibility.Visible
  558. chDownProcess.Visibility = Visibility.Visible
  559. labHomeVersion.Visibility = Visibility.Visible
  560. chHomeVersionOld.Visibility = Visibility.Visible
  561. chHomeVersionSwap.Visibility = Visibility.Visible
  562. chHomeHide.Visibility = Visibility.Visible
  563. chHomeFull.Visibility = Visibility.Visible
  564. chSysTest.Visibility = Visibility.Visible
  565. Else
  566. chSysOffline.Visibility = Visibility.Collapsed
  567. labUiBackgroundURL.Visibility = Visibility.Collapsed
  568. textUiBackgroundURL.Visibility = Visibility.Collapsed
  569. labUiBarURL.Visibility = Visibility.Collapsed
  570. textUiBarURL.Visibility = Visibility.Collapsed
  571. labUiHide.Visibility = Visibility.Collapsed
  572. panUiHide1.Visibility = Visibility.Collapsed
  573. panUiHide2.Visibility = Visibility.Collapsed
  574. chLaunchNatives.Visibility = Visibility.Collapsed
  575. labLaunchJVM.Visibility = Visibility.Collapsed
  576. panLaunchJVM.Visibility = Visibility.Collapsed
  577. panLaunchVisibility02.Height = 28
  578. chLaunchLogWarn.Visibility = Visibility.Collapsed
  579. labLaunchServer.Visibility = Visibility.Collapsed
  580. textLaunchServer.Visibility = Visibility.Collapsed
  581. If panLaunchVisibility0.Height > 28 Then panLaunchVisibility0.Height = panLaunchVisibility0.Height - 28
  582. chLaunchMending.Visibility = Visibility.Collapsed
  583. chDownProcess.Visibility = Visibility.Collapsed
  584. labHomeVersion.Visibility = Visibility.Collapsed
  585. chHomeVersionOld.Visibility = Visibility.Collapsed
  586. chHomeVersionSwap.Visibility = Visibility.Collapsed
  587. chHomeHide.Visibility = Visibility.Collapsed
  588. chHomeFull.Visibility = Visibility.Collapsed
  589. chSysTest.Visibility = Visibility.Collapsed
  590. End If
  591. End Sub
  592. Private Sub Reset_Change(ByVal sender As TextBox, ByVal e As Controls.TextChangedEventArgs) Handles textLaunchJVM.TextChanged, textDownMaxinum.TextChanged
  593. Dim ShouldReset As Boolean = sender.Text = FindName(sender.Name.Replace("text", "btn") & "Reset").Tag
  594. AniStart({
  595. AaWidth(sender, 455 + If(ShouldReset, 45, 0) - sender.Width, 150, , New AniEaseEnd)
  596. }, sender.Name & "Reset")
  597. End Sub
  598. Private Sub Reset_Click(ByVal sender As Label, ByVal e As EventArgs) Handles btnLaunchJVMReset.MouseLeftButtonUp, btnDownMaxinumReset.MouseLeftButtonUp
  599. FindName(sender.Name.Replace("btn", "text").Replace("Reset", "")).Text = sender.Tag
  600. End Sub
  601. ''' <summary>
  602. ''' 设置输入检查结果。
  603. ''' </summary>
  604. ''' <param name="Reason">错误原因。如果没有错误则设置为空。</param>
  605. ''' <param name="TargetLabelName">作为显示目标的 Label 的名称。</param>
  606. ''' <param name="TargetTextBox">作为显示目标的 TextBox。</param>
  607. ''' <remarks></remarks>
  608. Private Sub SetCheckResult(ByVal Reason As String, ByVal TargetLabelName As String, ByVal TargetTextBox As TextBox)
  609. Dim TargetLabel As Label = Nothing
  610. If Not TargetLabelName = "" Then TargetLabel = FindName(TargetLabelName)
  611. If Reason = "" Then
  612. If Not IsNothing(TargetLabel) Then TargetLabel.Content = TargetLabel.Tag
  613. AniStart({
  614. AaBorderBrush(TargetTextBox, New MyColor(Application.Current.Resources("ColorE4")) - New MyColor(CType(TargetTextBox.BorderBrush, SolidColorBrush).Color), 150),
  615. AaForeGround(TargetTextBox, New MyColor(0, 0, 0) - New MyColor(CType(TargetTextBox.Foreground, SolidColorBrush).Color), 150)
  616. }, TargetTextBox.Name)
  617. Else
  618. If Not IsNothing(TargetLabel) Then TargetLabel.Content = TargetLabel.Tag & " - " & Reason
  619. AniStart({
  620. AaBorderBrush(TargetTextBox, New MyColor(255, 0, 0) - New MyColor(CType(TargetTextBox.BorderBrush, SolidColorBrush).Color), 150),
  621. AaForeGround(TargetTextBox, New MyColor(255, 0, 0) - New MyColor(CType(TargetTextBox.Foreground, SolidColorBrush).Color), 150)
  622. }, TargetTextBox.Name)
  623. End If
  624. End Sub
  625. #End Region
  626. #Region "左边栏"
  627. Private Sub selecter_Click(ByVal Selection As String, ByVal Index As Integer) Handles Selecter.Click
  628. AniStart({
  629. AaValue(scroll, FindName("line" & Selection).TranslatePoint(New Point(0, 0), panSetupHost).Y - 33, 150, , New AniEaseEnd)
  630. }, "SelecterChange" & GetUUID())
  631. End Sub
  632. Private Sub timerLeft_Tick() Handles timerLeft.Tick
  633. Dim FindIndex As Byte = 0
  634. For i = selecter.ShowList.Length - 1 To 0 Step -1
  635. Dim lab As Rectangle = FindName("line" & selecter.ShowList(i))
  636. If lab.TranslatePoint(New Point(0, 0), panSetupHost).Y <= 150 Then
  637. FindIndex = i
  638. Exit For
  639. End If
  640. Next
  641. If Not FindIndex = selecter.SelectIndex Then selecter.SelectIndex = FindIndex
  642. End Sub
  643. #End Region
  644. #Region "系统设置"
  645. '调试模式
  646. Private Sub chSysTest_Change() Handles chSysTest.Change
  647. MODE_DEBUG = chSysTest.Checked Or MODE_DEVELOPER
  648. frmMain.labTopVer.Content = VERSION_NAME & If(MODE_DEVELOPER, " | 开发者模式", If(MODE_DEBUG, " | 调试模式", "")) & If(MODE_OFFLINE, " | 离线模式", "")
  649. End Sub
  650. '清理缓存
  651. Private Sub btnSysCache_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSysCache.Click
  652. On Error Resume Next
  653. Dim TotalSize As FileSize = 0
  654. Dim Files As ArrayList = GetFilesFromPath(PATH & "PCL\cache")
  655. For Each File As String In Files
  656. TotalSize = TotalSize + GetFileSize(File)
  657. IO.File.Delete(File)
  658. Next
  659. If TotalSize = 0 Then
  660. ShowHint(New HintConverter("没有可清除的缓存", HintState.Finish))
  661. Else
  662. ShowHint(New HintConverter("已清除 " & TotalSize.ToString & " 缓存", HintState.Finish))
  663. End If
  664. End Sub
  665. '清理支持库
  666. Private Sub btnSysLib_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSysLib.Click
  667. Try
  668. Dim TotalSize As FileSize = 0
  669. '删除libraries
  670. Dim Files As ArrayList = GetFilesFromPath(PATH_MC & "libraries")
  671. For Each File As String In Files
  672. Try
  673. If Not (File.ToLower.Contains("forge") Or File.ToLower.Contains("optifine")) Then
  674. TotalSize = TotalSize + GetFileSize(File)
  675. IO.File.Delete(File)
  676. End If
  677. Catch
  678. End Try
  679. Next
  680. '返回
  681. If TotalSize = 0 Then
  682. ShowHint(New HintConverter("没有可清除的支持库", HintState.Finish))
  683. Else
  684. ShowHint(New HintConverter("已清除 " & TotalSize.ToString & " 支持库", HintState.Finish))
  685. End If
  686. Catch ex As Exception
  687. ExShow(ex, "清除支持库失败", ErrorLevel.MsgboxAndFeedback)
  688. End Try
  689. End Sub
  690. '清理版本信息
  691. Private Sub btnSysVersion_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSysVersion.Click
  692. Try
  693. '删除各版本信息
  694. If Directory.Exists(PATH_MC & "versions\") Then
  695. 'versions文件夹存在
  696. For Each Folder As DirectoryInfo In (New DirectoryInfo(PATH_MC & "versions")).GetDirectories
  697. If Directory.Exists(Folder.FullName & "\PCL") Then Directory.Delete(Folder.FullName & "\PCL", True)
  698. Next
  699. File.Delete(PATH_MC & "PCL.ini")
  700. End If
  701. '返回
  702. ShowHint(New HintConverter("已清除版本信息", HintState.Finish))
  703. Pool.Add(New Thread(AddressOf PoolVersionList))
  704. Catch ex As Exception
  705. ExShow(ex, "清除版本信息失败", ErrorLevel.MsgboxAndFeedback)
  706. End Try
  707. End Sub
  708. '打开日志
  709. Private Sub btnSysLog_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSysLog.Click
  710. Shell("notepad", """" & PATH & "PCL\log.txt""")
  711. End Sub
  712. '打开文件夹
  713. Private Sub btnSysFolder_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSysFolder.Click
  714. Process.Start(PATH & "PCL\")
  715. End Sub
  716. '意见反馈
  717. Private Sub btnSysBack_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSysBack.Click, btnAboutFolder.Click
  718. Feedback()
  719. End Sub
  720. '重置启动器
  721. Private Sub ReloadPCL(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSysAll.Click
  722. If Not CanWrite Then Exit Sub
  723. If MyMsgbox("重置将会删除 PCL 的所有文件(主程序与 Minecraft 的文件不受影响),你确定要重置吗?重置后 PCL 将会自动关闭。", "重置警告", "确定", "取消", IsWarn:=True) = 2 Then Exit Sub
  724. StartReload:
  725. On Error Resume Next
  726. frmMain.Visibility = Visibility.Collapsed
  727. frmMain.UpdateLayout()
  728. '清除注册表信息
  729. 'My.Computer.Registry.CurrentUser.DeleteSubKey("Software\" & APPLICATION_SHORT_NAME, False)
  730. '读取各版本信息
  731. If Directory.Exists(PATH_MC & "versions\") Then
  732. 'versions文件夹存在
  733. For Each Folder As DirectoryInfo In (New DirectoryInfo(PATH_MC & "versions")).GetDirectories
  734. If Directory.Exists(Folder.FullName & "\PCL") Then Directory.Delete(Folder.FullName & "\PCL", True)
  735. Next
  736. File.Delete(PATH_MC & "PCL.ini")
  737. End If
  738. '删除PCL存档目录
  739. Directory.Delete(PATH & "PCL", True)
  740. File.Delete(PATH_MC & "PCL.ini")
  741. '结束程序
  742. EndForce()
  743. End Sub
  744. #End Region
  745. #Region "界面设置"
  746. '主题
  747. Private Sub raUiThemes_Change(ByVal sender As Radiobox)
  748. If CanWrite And sender.Checked Then RefreshTheme()
  749. End Sub
  750. '自定义
  751. Private Sub ThemeCustomChange(ByVal sender As StackPanel, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles btnUiCustom1.MouseDown, btnUiCustom2.MouseDown, btnUiCustom3.MouseDown, btnUiCustom4.MouseDown, btnUiCustom5.MouseDown
  752. If Not CanWrite Then Exit Sub
  753. On Error Resume Next
  754. Dim selector As New Forms.ColorDialog
  755. selector.Color = System.Drawing.Color.FromArgb(ReadIni("setup", sender.Name.Replace("btnUiCustom", "UiThemeColorR"), CType(FindResource("ColorE" & Right(sender.Name, 1)), Color).R), ReadIni("setup", sender.Name.Replace("btnUiCustom", "UiThemeColorG"), CType(FindResource("ColorE" & Right(sender.Name, 1)), Color).G), ReadIni("setup", sender.Name.Replace("btnUiCustom", "UiThemeColorB"), CType(FindResource("ColorE" & Right(sender.Name, 1)), Color).B))
  756. selector.ShowDialog()
  757. If Not selector.Color = CType(FindResource("ColorE" & Right(sender.Name, 1)), MyColor) Then
  758. WriteIni("setup", sender.Name.Replace("btnUiCustom", "UiThemeColorR"), selector.Color.R)
  759. WriteIni("setup", sender.Name.Replace("btnUiCustom", "UiThemeColorG"), selector.Color.G)
  760. WriteIni("setup", sender.Name.Replace("btnUiCustom", "UiThemeColorB"), selector.Color.B)
  761. RefreshTheme()
  762. End If
  763. selector.Dispose()
  764. End Sub
  765. '设置背景图片
  766. Private Sub btnUiCustomBackground_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUiBackgroundSet.Click
  767. If CanWrite Then
  768. '试图启用
  769. Dim fileName As String = SelectFile("常用图片文件(*.png;*.jpg;*.gif;*.jpeg)|*.png;*.jpg;*.gif;*.jpeg", "选择作为背景的图片(最适宜大小为 740×323)")
  770. '选择文件结束
  771. If fileName = "" Then Exit Sub
  772. Try
  773. '设置当前显示
  774. frmMain.imgMainBg.Source = New MyBitmap(fileName)
  775. '拷贝文件
  776. File.Delete(PATH & "PCL\back.png")
  777. File.Copy(fileName, PATH & "PCL\back.png")
  778. Catch ex As Exception
  779. ExShow(ex, "切换背景图片失败", ErrorLevel.MsgboxAndFeedback)
  780. Finally
  781. chUiBackground.Checked = File.Exists(PATH & "PCL\back.png")
  782. End Try
  783. End If
  784. End Sub
  785. '清除背景图片
  786. Private Sub btnUiBackgroundReset_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUiBackgroundReset.Click
  787. File.Delete(PATH & "PCL\back.png")
  788. chUiBackground.Checked = File.Exists(PATH & "PCL\back.png")
  789. RefreshTheme()
  790. End Sub
  791. '背景图片框显示
  792. Private Sub chUiBackground_Change() Handles chUiBackground.Change
  793. btnUiBackgroundReset.Visibility = If(chUiBackground.Checked, Visibility.Visible, Visibility.Collapsed)
  794. End Sub
  795. '设置顶栏图片
  796. Private Sub btnUiBarSet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUiBarSet.Click
  797. If CanWrite Then
  798. '试图启用
  799. Dim fileName As String = SelectFile("常用图片文件(*.png;*.jpg;*.gif;*.jpeg)|*.png;*.jpg;*.gif;*.jpeg", "选择作为顶栏的图片(最适宜大小为 740×92)")
  800. '选择文件结束
  801. If fileName = "" Then Exit Sub
  802. Try
  803. '拷贝文件
  804. File.Delete(PATH & "PCL\top.png")
  805. File.Copy(fileName, PATH & "PCL\top.png")
  806. '设置当前显示
  807. CType(CType(frmMain.panTop.Background, Object), ImageBrush).ImageSource = New MyBitmap(fileName)
  808. CType(frmMain.panTop.Background, Object).Stretch = Stretch.None
  809. CType(frmMain.panTop.Background, Object).TileMode = TileMode.Tile
  810. CType(CType(frmMain.panTop.Background, Object), ImageBrush).Viewport = (New RectConverter()).ConvertFromString("0,0," & CType(CType(frmMain.panTop.Background, Object).ImageSource, ImageSource).Width & "," & CType(CType(frmMain.panTop.Background, Object).ImageSource, ImageSource).Height)
  811. Catch ex As Exception
  812. ExShow(ex, "切换顶栏图片失败", ErrorLevel.MsgboxAndFeedback)
  813. Finally
  814. btnUiBarReset.Visibility = If(File.Exists(PATH & "PCL\top.png"), Visibility.Visible, Visibility.Collapsed)
  815. End Try
  816. End If
  817. End Sub
  818. '清除顶栏图片
  819. Private Sub btnUiBarReset_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUiBarReset.Click
  820. File.Delete(PATH & "PCL\top.png")
  821. btnUiBarReset.Visibility = If(File.Exists(PATH & "PCL\top.png"), Visibility.Visible, Visibility.Collapsed)
  822. RefreshTheme()
  823. End Sub
  824. '设置BGM
  825. Private Sub btnUiBgmSet_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUiBgmSet.Click
  826. If CanWrite Then
  827. '试图启用
  828. Dim fileName As String = SelectFile("音乐(*.wav; .mp3)|*.wav;*.mp3", "选择背景音乐文件")
  829. '选择文件结束
  830. If fileName = "" Then Exit Sub
  831. Try
  832. btnUiBgmReset_Click(Nothing, Nothing)
  833. '拷贝文件
  834. Dim currentPath As String = PATH & "PCL\bgm" & If(fileName.EndsWith(".wav"), ".wav", ".mp3")
  835. File.Copy(fileName, currentPath)
  836. '设置当前音乐
  837. PlayBgm(currentPath, False, True)
  838. IsPlayingMusic = True
  839. Catch ex As Exception
  840. ExShow(ex, "设置背景音乐失败", ErrorLevel.AllUsers)
  841. Finally
  842. Dim IsRight As Boolean = File.Exists(PATH & "PCL\bgm.mp3") Or File.Exists(PATH & "PCL\bgm.wav")
  843. chUiBgm.Checked = IsRight
  844. btnUiBgmReset.Visibility = If(IsRight, Visibility.Visible, Visibility.Collapsed)
  845. frmMain.imgTopMusic.Visibility = If(IsRight, Visibility.Visible, Visibility.Collapsed)
  846. End Try
  847. End If
  848. End Sub
  849. '清除背景音乐
  850. Private Sub btnUiBgmReset_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUiBgmReset.Click
  851. If File.Exists(PATH & "PCL\bgm.wav") Then
  852. PlayBgm(PATH & "PCL\bgm.wav", True)
  853. File.Delete(PATH & "PCL\bgm.wav")
  854. End If
  855. If File.Exists(PATH & "PCL\bgm.mp3") Then
  856. PlayBgm(PATH & "PCL\bgm.mp3", True)
  857. File.Delete(PATH & "PCL\bgm.mp3")
  858. End If
  859. btnUiBgmReset.Visibility = Visibility.Collapsed
  860. frmMain.imgTopMusic.Visibility = Windows.Visibility.Collapsed
  861. chUiBgm.Checked = False
  862. IsPlayingMusic = False
  863. End Sub
  864. #End Region
  865. #Region "启动设置"
  866. '重新加载 MC 文件夹列表显示
  867. Private Sub LoadMinecraftFolderList()
  868. Try
  869. panLaunchFolderList.Children.Clear()
  870. Dim SelectingFolder = ReadIni("setup", "LaunchFolderSelect", "")
  871. Dim AllFoldersList As New ArrayList From {PATH & ".minecraft\"}
  872. Dim MojangPath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\"
  873. If CheckDirectoryPermission(MojangPath & "versions\") Then AllFoldersList.Add(MojangPath)
  874. AllFoldersList.AddRange(ReadIni("setup", "LaunchFolders", "").Split("|"))
  875. AllFoldersList = ArrayNoDouble(AllFoldersList.ToArray)
  876. For Each Folder As String In AllFoldersList
  877. If Not Folder.Replace(" ", "") = "" Then
  878. Dim Disc As String
  879. Select Case Folder
  880. Case PATH & ".minecraft\"
  881. Disc = "当前文件夹(" & Folder & ")"
  882. Case MojangPath
  883. Disc = "官方启动器文件夹(" & Folder & ")"
  884. Case Else
  885. Disc = Folder
  886. End Select
  887. Dim Radio As New Radiobox With {.Context = Disc, .Checked = Folder = SelectingFolder, .Tag = "LaunchFolderSelect/" & Folder, .Name = "LaunchFolderSelectUUID" & GetUUID()}
  888. AddHandler Radio.Change, AddressOf RadioBox_Change
  889. If Disc = Folder Then AddHandler Radio.MouseRightButtonUp, AddressOf LaunchFolderRemove
  890. panLaunchFolderList.Children.Add(Radio)
  891. End If
  892. Next
  893. Catch ex As Exception
  894. ExShow(ex, "重载文件夹列表失败", ErrorLevel.MsgboxAndFeedback)
  895. End Try
  896. End Sub
  897. '重置窗口尺寸可见性
  898. Private Sub LaunchSizeResetVisible() Handles textLaunchModeWindowHeight.TextChanged, textLaunchModeWindowWidth.TextChanged
  899. Dim ShouldReset As Boolean = Not (textLaunchModeWindowHeight.Text = "480" And textLaunchModeWindowWidth.Text = "854")
  900. AniStart({
  901. AaWidth(btnLaunchModeWindowReset, If(ShouldReset, 45, 0) - btnLaunchModeWindowReset.Width, 300, , New AniEaseEnd)
  902. }, "btnLaunchModeWindowResetReset")
  903. End Sub
  904. '重置窗口尺寸
  905. Private Sub btnLaunchModeWindowReset_MouseLeftButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles btnLaunchModeWindowReset.MouseLeftButtonUp
  906. textLaunchModeWindowHeight.Text = "480"
  907. textLaunchModeWindowWidth.Text = "854"
  908. End Sub
  909. '添加 MC 文件夹
  910. Private Sub btnLaunchFolderAdd_MouseLeftButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles btnLaunchFolderAdd.MouseLeftButtonUp
  911. Try
  912. Dim NewFolder As String = SelectFolder("选择 Minecraft 文件夹。" & vbCrLf & "(这个文件夹可以不叫 .minecraft)")
  913. If NewFolder = "" Then Exit Sub
  914. '检测文件夹
  915. If CheckDirectoryPermission(NewFolder) Then
  916. NewFolder = NewFolder & "\" '加上斜杠……
  917. '检测通过,判断是否重复
  918. If NewFolder = PATH & ".minecraft\" Or NewFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\" Then
  919. ShowHint(New HintConverter("选择的文件夹有误", HintState.Warn))
  920. Exit Sub
  921. End If
  922. '判断是否已经添加过
  923. Dim AllFoldersList As New ArrayList
  924. Dim ResentFolder As String = ReadIni("setup", "LaunchFolders", "")
  925. If Not ResentFolder = "" Then AllFoldersList.AddRange(ResentFolder.Split("|"))
  926. If AllFoldersList.Contains(NewFolder) Then
  927. ShowHint(New HintConverter("列表中已经存在本文件夹", HintState.Warn))
  928. Exit Sub
  929. End If
  930. '判断是否含有Versions文件夹
  931. If Not Directory.Exists(NewFolder & "versions") Then
  932. If MyMsgbox("该文件夹中不包含任何 Minecraft 版本,是否继续添加?", "添加确认", "确定", "取消") = 2 Then Exit Sub
  933. End If
  934. '添加到文件夹列表
  935. AllFoldersList.Add(NewFolder)
  936. WriteIni("setup", "LaunchFolders", Join(AllFoldersList.ToArray, "|"))
  937. ShowHint("右键即可从列表中移除该文件夹")
  938. LoadMinecraftFolderList()
  939. Else
  940. '没有检测通过
  941. ShowHint(New HintConverter("选择的文件夹有误", HintState.Warn))
  942. End If
  943. Catch ex As Exception
  944. ExShow(ex, "添加文件夹失败", ErrorLevel.MsgboxAndFeedback)
  945. End Try
  946. End Sub
  947. '移除 MC 文件夹
  948. Private Sub LaunchFolderRemove(ByVal sender As Radiobox, ByVal e As System.Windows.Input.MouseButtonEventArgs)
  949. If MyMsgbox("是否要将该文件夹从 Minecraft 文件夹列表移除?" & vbCrLf & " " & sender.Context, "移除确认", , "取消") = 1 Then
  950. Dim CurrentList As New ArrayList(ReadIni("setup", "LaunchFolders", "").Split("|"))
  951. CurrentList.Remove(sender.Context)
  952. WriteIni("setup", "LaunchFolders", Join(CurrentList.ToArray, "|"))
  953. If ReadIni("setup", "LaunchFolderSelect", "") = sender.Context Then
  954. WriteIni("setup", "LaunchFolderSelect", PATH & ".minecraft\")
  955. PoolMinecraftFolder()
  956. End If
  957. LoadMinecraftFolderList()
  958. End If
  959. End Sub
  960. '显示最大内存
  961. Private Sub textLaunchMaxRam_MouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs) Handles textLaunchMaxRam.MouseEnter
  962. textLaunchMaxRam.ToolTip =
  963. "当前内存剩余:" & Int((New Devices.ComputerInfo).AvailablePhysicalMemory / 1024 / 1024) & "M / " & Int((New Devices.ComputerInfo).TotalPhysicalMemory / 1024 / 1024) & "M" & vbCrLf &
  964. "可设置范围:256M ~ " & Math.Min(If(Environment.Is64BitOperatingSystem, Double.PositiveInfinity, 1024), Int((New Devices.ComputerInfo).TotalPhysicalMemory / 1024 / 1024) - 512) & "M"
  965. End Sub
  966. '手动选择
  967. Private Sub btnLaunchJavaHand_MouseUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs) Handles btnLaunchJavaHand.MouseLeftButtonDown
  968. Using fileDialog As New Forms.OpenFileDialog
  969. fileDialog.AddExtension = True
  970. fileDialog.AutoUpgradeEnabled = True
  971. fileDialog.CheckFileExists = True
  972. fileDialog.Filter = "JavaW|javaw.exe"
  973. fileDialog.Multiselect = False
  974. fileDialog.Title = "选择 javaw.exe"
  975. fileDialog.ShowDialog()
  976. '选择文件结束
  977. If Not fileDialog.FileName = "" Then
  978. textLaunchJava.Text = Mid(fileDialog.FileName, 1, fileDialog.FileName.LastIndexOf("\"))
  979. End If
  980. End Using
  981. End Sub
  982. '自动查找
  983. Private Sub btnLaunchJavaAuto_MouseUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs) Handles btnLaunchJavaAuto.MouseLeftButtonDown
  984. PoolJavaFolder(True)
  985. textLaunchJava.Text = PATH_JAVA
  986. End Sub
  987. #End Region
  988. #Region "关于"
  989. 'Logo 彩蛋
  990. Private AboutClickCount As Double = 0
  991. Private Sub imgAboutLogo_MouseUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs) Handles imgAboutLogo.MouseLeftButtonDown
  992. If imgAboutLogo.Opacity < 0.5 Then Exit Sub
  993. Dim x As Double
  994. Dim y As Double
  995. Do
  996. x = RandomInteger(-5, 5)
  997. y = RandomInteger(-5, 5)
  998. Loop Until Math.Abs(x) + Math.Abs(y) > 3
  999. AniStart({
  1000. AaX(imgAboutLogo, x, 40, , New AniEaseEnd),
  1001. AaY(imgAboutLogo, y, 40, , New AniEaseEnd),
  1002. AaX(imgAboutLogo, -x, 40, 40, New AniEaseStart),
  1003. AaY(imgAboutLogo, -y, 40, 40, New AniEaseStart)
  1004. }, "EasterEgg" & GetUUID())
  1005. AboutClickCount = AboutClickCount + 1
  1006. Select Case AboutClickCount
  1007. Case 5
  1008. If ReadReg("ThemeHunluan", "False") = "True" Then
  1009. ShowHint("真的真的什么也没了,就一个隐藏主题而已啦,点啊点有意思么……")
  1010. AboutClickCount = 170
  1011. Else
  1012. ShowHint("点这个很好玩么……")
  1013. End If
  1014. Case 25
  1015. If MyMsgbox("你现在是不是超无聊的?", "确认一下", "是的", "并不是") = 2 Then
  1016. ShowHint("那你还点啥……真是搞不懂。")
  1017. End If
  1018. Case 50
  1019. ShowHint("嗯,加油吧,嗯……")
  1020. Case 75
  1021. MyMsgbox("隐藏主题 混乱黄 已解锁,请到设置页面查看!", "主题已解锁", "我知道了")
  1022. SendStat("彩蛋", "主题", "混乱黄")
  1023. WriteReg("ThemeHunluan", "True")
  1024. RefreshHidden()
  1025. Case 95
  1026. ShowHint("你咋还这么无聊啊?")
  1027. Case 130
  1028. ShowHint("后面什么都没有了哦!")
  1029. Case 155
  1030. Select Case MyMsgbox("你真的不累么?", "温馨提示", "累死了", "真的不累")
  1031. Case 1
  1032. ShowHint("那你就别点了喂……后面真的真的真的什么都没有了!")
  1033. Case 2
  1034. If MyMsgbox("你真的真的不累么?", "超温馨的温馨提示", "累死了", "真的真的不累") = 2 Then
  1035. If MyMsgbox("你真的真的真的不累么?", "超超超温馨的温馨提示", "累死了", "真的真的真的不累") = 2 Then
  1036. ShowHint("好吧……不过后面是真的啥也没了,不用点了真的。")
  1037. Else
  1038. ShowHint("那你就别点了喂……后面真的真的真的什么都没有了!")
  1039. End If
  1040. Else
  1041. ShowHint("那你就别点了喂……后面真的真的真的什么都没有了!")
  1042. End If
  1043. End Select
  1044. Case 200
  1045. ShowHint("还点,还点,我不让你点了……")
  1046. imgAboutLogo.IsHitTestVisible = False
  1047. End Select
  1048. End Sub
  1049. '加群
  1050. Private Sub btnSysQQ_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAboutQQ.Click
  1051. Process.Start("http://shang.qq.com/wpa/qunwpa?idkey=f003df7898678e4bdeb53061d8f9b04445c9ff206b0515fdab9bfbd5cb3eaec0")
  1052. End Sub
  1053. '捐助
  1054. Private Sub btnAboutDonate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAboutDonate.Click
  1055. Try
  1056. Process.Start("https://afdian.net/@LTCat")
  1057. Catch ex As Exception
  1058. ExShow(ex, "捐助失败", ErrorLevel.DebugOnly)
  1059. End Try
  1060. End Sub
  1061. #End Region
  1062. ' Private Sub SourceClick(ByVal sender As ListItem, ByVal e As System.Windows.Input.MouseButtonEventArgs)
  1063. ' Dim setup As New msgSource(sender)
  1064. ' If Not IsNothing(setup.panMain.Parent) Then setup.panMain.Parent.SetValue(ContentPresenter.ContentProperty, Nothing)
  1065. ' If MyMsgbox("推荐源设置", setup.panMain, , "保存", "删除") = 2 Or sender.MainText = "" Or sender.SubText = "" Then
  1066. ' '删除
  1067. ' panHomeSourceList.Children.Remove(sender)
  1068. ' End If
  1069. ' Dim sources As New ArrayList
  1070. ' Dim urls As New ArrayList
  1071. ' Dim uses As New ArrayList
  1072. ' If panHomeSourceList.Children.Count > 1 Then
  1073. ' For i = 0 To panHomeSourceList.Children.Count - 1
  1074. ' If panHomeSourceList.Children(i).GetType.Name = "ListItem" Then
  1075. ' Dim item As ListItem = panHomeSourceList.Children(i)
  1076. ' sources.Add(item.MainText)
  1077. ' urls.Add(item.SubText)
  1078. ' uses.Add(item.Version.LoadedByFile)
  1079. ' End If
  1080. ' Next
  1081. ' End If
  1082. ' WriteIni("setup", "LaunchMainSource", Join(sources.ToArray, "|"))
  1083. ' WriteIni("setup", "LaunchMainURL", Join(urls.ToArray, "|"))
  1084. ' WriteIni("setup", "LaunchMainUse", Join(uses.ToArray, "|"))
  1085. ' End Sub
  1086. ' Private Sub IconClick(ByVal sender As ListItem, ByVal e As System.Windows.Input.MouseButtonEventArgs)
  1087. ' sender.Version.LoadedByFile = Not sender.Version.LoadedByFile
  1088. ' sender.Logo = New BitmapImage(New Uri("/Images/Block-" & sender.Version.LoadedByFile & ".png", UriKind.Relative))
  1089. ' Dim uses As New ArrayList
  1090. ' If panHomeSourceList.Children.Count > 1 Then
  1091. ' For i = 0 To panHomeSourceList.Children.Count - 2
  1092. ' If panHomeSourceList.Children(i).GetType.Name = "ListItem" Then
  1093. ' Dim item As ListItem = panHomeSourceList.Children(i)
  1094. ' uses.Add(item.Version.LoadedByFile)
  1095. ' End If
  1096. ' Next
  1097. ' End If
  1098. ' WriteIni("setup", "LaunchMainUse", Join(uses.ToArray, "|"))
  1099. ' End Sub
  1100. ' Private Sub labPageMainAdd_MouseUp(ByVal sender As Object, ByVal e As EventArgs) Handles itemHomeSourceAdd.MouseLeftButtonUp
  1101. ' Dim item = New ListItem With {.MainText = "", .SubText = "", .CanCheck = False, .Width = 363, .ButtonLogo = New BitmapImage(New Uri("/Images/appbar.settings.png", UriKind.Relative)), .UseLayoutRounding = True, .Name = "itemLaunchMain" & Rnd.NextDouble.ToString.Replace(".", ""), .Logo = New BitmapImage(New Uri("/Images/Block-True.png", UriKind.Relative))}
  1102. ' item.Version.LoadedByFile = True
  1103. ' panHomeSourceList.Children.Insert(panHomeSourceList.Children.Count - 1, item)
  1104. ' AddHandler item.ButtonClick, AddressOf SourceClick
  1105. ' AddHandler item.IconClick, AddressOf IconClick
  1106. ' SourceClick(item, e)
  1107. ' End Sub
  1108. End Class