10 Commits

Author SHA1 Message Date
EillesWan
4791dcd63d ok、 2024-05-02 01:59:32 +08:00
EillesWan
67ca76f408 Merge branch 'master' of https://gitee.com/TriM-Organization/Linglun-Converter 2024-05-02 00:29:30 +08:00
EillesWan
a56e85a043 支持WebSocket播放…… 2024-05-02 00:29:21 +08:00
Eilles Wan
bccfd1841d update docs/功能使用说明.md.没事没事
Signed-off-by: Eilles Wan <w-yi_doctoryi@outlook.com>
2024-04-05 04:11:57 +00:00
Eilles Wan
9ec33845f4 update llc_cli.py. 这次应该OK了
Signed-off-by: Eilles Wan <w-yi_doctoryi@outlook.com>
2024-03-08 11:14:59 +00:00
Eilles Wan
d18e636278 update llc_cli.py. 修复mcpack生成错误
Signed-off-by: Eilles Wan <w-yi_doctoryi@outlook.com>
2024-03-08 11:10:17 +00:00
EillesWan
2f08ef99f9 修复手机上无法使用的bug 2024-02-24 21:44:38 +08:00
EillesWan
3d3213363c 修复更新时崩溃的问题 2024-02-08 18:12:06 +08:00
EillesWan
c64d9c440f 支持自动更新音·创库,支持更优美的错误提示,支持选择输出目录 2024-02-08 04:36:42 +08:00
EillesWan
28ec743b86 格式化了一下代码 2024-02-02 18:10:12 +08:00
26 changed files with 8786 additions and 468 deletions

2
.gitignore vendored
View File

@@ -14,6 +14,8 @@ __pycache__/
/TrimLog /TrimLog
/logs /logs
*.llc.config *.llc.config
/MSCT
/fcwslib
salt.py salt.py

View File

@@ -14,16 +14,15 @@
**Note, The TERMS AND CONDITIONS below should and must be above all others in this repository** **Note, The TERMS AND CONDITIONS below should and must be above all others in this repository**
1. *Linglun Studio* is fully copyrighted by all its developers, the developers have the right to make *Linglun Studio* close sourced at any time. Operations are permitted under specific terms instructed by its developer(s). 1. _Linglun Studio_ is fully copyrighted by all its developers, the developers have the right to make _Linglun Studio_ close sourced at any time. Operations are permitted under specific terms instructed by its developer(s).
2. Non-commercial use of *Linglun Studio* and(or) its source code is permitted under Apache License 2.0. 2. Non-commercial use of _Linglun Studio_ and(or) its source code is permitted under Apache License 2.0.
3. Commercial use of *Linglun Studio* is permitted under Apache License 2.0 with the unanimous permission of the steering developers of *Linglun Studio* (*bgArray*诸葛亮与八卦阵 and *Eilles*金羿). 3. Commercial use of _Linglun Studio_ is permitted under Apache License 2.0 with the unanimous permission of the steering developers of _Linglun Studio_ (*bgArray*诸葛亮与八卦阵 and *Eilles*金羿).
4. *Linglun Studio* is open sourced under priority given: 4. _Linglun Studio_ is open sourced under priority given:
1. License granted by the core developer(s) of a section after negotiation. 1. License granted by the core developer(s) of a section after negotiation.
2. Explicitly stated license. 2. Explicitly stated license.
3. Apache 2.0 License. 3. Apache 2.0 License.
5. A copy of the original Apache Lisence 2.0 can be found below. 5. A copy of the original Apache Lisence 2.0 can be found below.
```text ```text
Apache License Apache License
Version 2.0, January 2004 Version 2.0, January 2004

View File

@@ -1,6 +1,5 @@
<h1 align="center">伶伦转换器</h1> <h1 align="center">伶伦转换器</h1>
<p align="center"> <p align="center">
<img width="128" height="128" src="https://gitee.com/TriM-Organization/Linglun-Converter/raw/master/resources/LLC_LOGO_OK_PLAIN_BANNER.png"> <img width="128" height="128" src="https://gitee.com/TriM-Organization/Linglun-Converter/raw/master/resources/LLC_LOGO_OK_PLAIN_BANNER.png">
</img> </img>
@@ -12,18 +11,16 @@
<img src="https://img.shields.io/badge/BUILD%20WITH%20LOVE-FF3432?style=for-the-badge"> <img src="https://img.shields.io/badge/BUILD%20WITH%20LOVE-FF3432?style=for-the-badge">
<p> <p>
[![][Bilibili: 金羿ELS]](https://space.bilibili.com/397369002/) [![][Bilibili: 金羿ELS]](https://space.bilibili.com/397369002/)
[![][Bilibili: 诸葛亮与八卦阵]](https://space.bilibili.com/604072474) [![][Bilibili: 诸葛亮与八卦阵]](https://space.bilibili.com/604072474)
[![CodeStyle: black]](https://github.com/psf/black) [![CodeStyle: black]](https://github.com/psf/black)
[![][python]](https://www.python.org/) [![][python]](https://www.python.org/)
[![][license]](LICENSE) [![][license]](LICENSE)
<!-- [![][release]](../../releases) --> <!-- [![][release]](../../releases) -->
<!-- 简体中文 | [English](README_EN.md) --> <!-- 简体中文 | [English](README_EN.md) -->
## 介绍 🚀 ## 介绍 🚀
**伶伦** 是一款免费开源的 **《我的世界》** 数字音频工作站 **伶伦** 是一款免费开源的 **《我的世界》** 数字音频工作站
@@ -56,10 +53,11 @@ QQ群 [861684859](https://jq.qq.com/?_wv=1027&k=hpeRxrYr)
电邮 [TriM-Organization@hotmail.com](mailto:TriM-Organization@hotmail.com) 电邮 [TriM-Organization@hotmail.com](mailto:TriM-Organization@hotmail.com)
[Bilibili: 金羿ELS]: https://img.shields.io/badge/Bilibili-%E9%87%91%E7%BE%BFELS-00A1E7?style=for-the-badge [Bilibili: 金羿ELS]: https://img.shields.io/badge/Bilibili-%E9%87%91%E7%BE%BFELS-00A1E7?style=for-the-badge
[Bilibili: 诸葛亮与八卦阵]: https://img.shields.io/badge/Bilibili-%E8%AF%B8%E8%91%9B%E4%BA%AE%E4%B8%8E%E5%85%AB%E5%8D%A6%E9%98%B5-00A1E7?style=for-the-badge [Bilibili: 诸葛亮与八卦阵]: https://img.shields.io/badge/Bilibili-%E8%AF%B8%E8%91%9B%E4%BA%AE%E4%B8%8E%E5%85%AB%E5%8D%A6%E9%98%B5-00A1E7?style=for-the-badge
[CodeStyle: black]: https://img.shields.io/badge/code%20style-black-121110.svg?style=for-the-badge [CodeStyle: black]: https://img.shields.io/badge/code%20style-black-121110.svg?style=for-the-badge
[python]: https://img.shields.io/badge/python-3.6-AB70FF?style=for-the-badge [python]: https://img.shields.io/badge/python-3.6-AB70FF?style=for-the-badge
<!-- [release]: https://img.shields.io//TriM-Organization/Linglun-Converter?style=for-the-badge --> <!-- [release]: https://img.shields.io//TriM-Organization/Linglun-Converter?style=for-the-badge -->
[license]: https://img.shields.io/badge/Licence-Apache-228B22?style=for-the-badge [license]: https://img.shields.io/badge/Licence-Apache-228B22?style=for-the-badge

View File

@@ -8,7 +8,9 @@
### [林纳克斯(Linux)与其衍生操作系统](./download%26start/Linux.md) ### [林纳克斯(Linux)与其衍生操作系统](./download%26start/Linux.md)
### [安卓(Android)与其衍生操作系统](./download%26start/Android.md) ### [安卓(Android)与其衍生操作系统](./download%26start/Android.md)
## 使用教程 ## 命令行版本的使用教程
> 注意,图形用户界面版本无需查看此内容。
1. 参数说明 1. 参数说明

View File

@@ -7,19 +7,20 @@
伶伦转换器 命令行 伶伦转换器 命令行
Linglun Converter CLI Linglun Converter CLI
版权所有 © 2024 金羿 & 睿开发组 版权所有 © 2024 金羿 & 睿开发组
Copyright © 2024 EillesWan & TriM Org. Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md 开源相关声明请见 ./License.md
Terms & Conditions: ./Lisense.md Terms & Conditions: ./Lisense.md
""" """
__version__ = "0.0.6" __version__ = "0.0.7"
import datetime import datetime
import os import os
import random import random
import sys
# import sys
import Musicreater import Musicreater
from Musicreater.constants import DEFAULT_PROGRESSBAR_STYLE from Musicreater.constants import DEFAULT_PROGRESSBAR_STYLE
@@ -29,38 +30,48 @@ from Musicreater.plugin.addonpack import (
to_addon_pack_in_repeater, to_addon_pack_in_repeater,
to_addon_pack_in_score, to_addon_pack_in_score,
) )
from Musicreater.plugin.mcstructfile import (
to_mcstructure_file_in_delay,
to_mcstructure_file_in_repeater,
# to_mcstructure_file_in_score,
)
from Musicreater.plugin.bdxfile import to_BDX_file_in_delay, to_BDX_file_in_score from Musicreater.plugin.bdxfile import to_BDX_file_in_delay, to_BDX_file_in_score
from utils.io import * from utils.io import logger, int_str, prt, ipt, myWords, isin, bool_str, float_str
# from Musicreater.plugin.mcstructure import commands_to_structure, commands_to_redstone_delay_structure # from Musicreater.plugin.mcstructure import commands_to_structure, commands_to_redstone_delay_structure
MainConsole.print( logger.console.print(
"[#121110 on #F0F2F4] ", "[#121110 on #F0F2F4] ",
style="#121110 on #F0F2F4", style="#121110 on #F0F2F4",
justify="center", justify="center",
) )
osc.project_name = "伶伦转换器" # osc.project_name = "伶伦转换器"
osc.version = __version__ # osc.version = __version__
if len(sys.argv) > 0: # if len(sys.argv) > 0:
def go_for_args(debugMode: str = "False", logfile: str = "True"): # def go_for_args(debugMode: str = "False", logfile: str = "True"):
global logger # global logger
osc.isRelease = False if debugMode.lower() in ("true", "1") else True # osc.isRelease = False if debugMode.lower() in ("true", "1") else True
logger.printing = not osc.isRelease # logger.printing = not osc.isRelease
logger.writing = True if logfile.lower() in ("true", "1") else False # logger.writing = True if logfile.lower() in ("true", "1") else False
go_for_args(*sys.argv) # go_for_args(*sys.argv)
# 显示大标题 # 显示大标题
MainConsole.rule(title="[bold #AB70FF]欢迎使用伶伦独立转换器", characters="=", style="#26E2FF") logger.console.rule(
title="[bold #AB70FF]欢迎使用伶伦独立转换器", characters="=", style="#26E2FF"
)
# MainConsole.rule(title="[bold #AB70FF]Welcome to Linglun Converter", characters="-") # MainConsole.rule(title="[bold #AB70FF]Welcome to Linglun Converter", characters="-")
MainConsole.rule( logger.console.rule(
title="[#AB70FF]版本{} | 音·创内核版本{}".format(__version__, Musicreater.__version__), title="[#AB70FF]版本{} | 音·创内核版本{}".format(
__version__, Musicreater.__version__
),
characters="-", characters="-",
style="#26E2FF", style="#26E2FF",
) )
@@ -69,21 +80,25 @@ nowYang = datetime.datetime.now()
if nowYang.month == 8 and nowYang.day == 6: if nowYang.month == 8 and nowYang.day == 6:
# 诸葛八卦生日 # 诸葛八卦生日
MainConsole.print( logger.console.print(
"[#7DB5F0 on #121110]今天可不是催更的日子!\n诸葛亮与八卦阵{}岁生日快乐!".format(nowYang.year - 2008), "[#7DB5F0 on #121110]今天可不是催更的日子!\n诸葛亮与八卦阵{}岁生日快乐!".format(
nowYang.year - 2008
),
style="#7DB5F0 on #121110", style="#7DB5F0 on #121110",
justify="center", justify="center",
) )
elif nowYang.month == 4 and nowYang.day == 3: elif nowYang.month == 4 and nowYang.day == 3:
# 金羿生日快乐 # 金羿生日快乐
MainConsole.print( logger.console.print(
"[#0089F2 on #F0F2F4]今天就不要催更啦!\n金羿{}岁生日快乐!".format(nowYang.year - 2006), "[#0089F2 on #F0F2F4]今天就不要催更啦!\n金羿{}岁生日快乐!".format(
nowYang.year - 2006
),
style="#0089F2 on #F0F2F4", style="#0089F2 on #F0F2F4",
justify="center", justify="center",
) )
else: else:
# 显示箴言部分 # 显示箴言部分
MainConsole.print( logger.console.print(
"[#121110 on #F0F2F4]{}".format(random.choice(myWords)), "[#121110 on #F0F2F4]{}".format(random.choice(myWords)),
style="#121110 on #F0F2F4", style="#121110 on #F0F2F4",
justify="center", justify="center",
@@ -155,20 +170,36 @@ while True:
def is_in_bdx_mcpack(sth: str): def is_in_bdx_mcpack(sth: str):
return isin(sth, {1: ("bdx", "1", "币帝查", "币帝·艾克斯"), 0: ("mcpack", "0", "唉姆西·派克")})
def is_in_player(sth: str):
return isin( return isin(
sth, sth,
{ {
0: ("delay", "0", "延迟", "帝蕾"), 1: ("bdx", "1", "币帝查", "币帝·艾克斯", "", ""),
1: ("score", "1", "计分板", "积分", "积分板", "计分", "斯阔尔"), 0: ("mcpack", "0", "唉姆西·派克", "", ""),
2: ("repeater", "2", "中继器", "瑞皮特"), 2: ("MCSTRUCTURE", "2", "", "麦块结构", "MC结构", "", "我的世界结构"),
}, },
) )
def is_in_player(sth: str, in_ok: tuple = (0,1,2)):
return isin(
sth,
dict(
[
(i, v)
for i, v in [
(0,
("delay", "0", "延迟", "帝蕾"),),
(1,
("score", "1", "计分板", "积分", "积分板", "计分", "斯阔尔"),),
(2,
("repeater", "2", "中继器", "瑞皮特"),),
]
if i in in_ok
]
),
)
output_file_format = format_ipt( output_file_format = format_ipt(
"输出文件类型 (mcpack/0|bdx/1)", "输出文件类型 (mcpack/0|bdx/1)",
is_in_bdx_mcpack, is_in_bdx_mcpack,
@@ -181,15 +212,23 @@ if output_file_format == 0:
is_in_player, is_in_player,
"输入内容有误,请重新输入。", "输入内容有误,请重新输入。",
)[1] )[1]
else: elif output_file_format == 1:
player_format = format_ipt( player_format = format_ipt(
"播放器类型 (延迟/0|计分板/1)", "播放器类型 (延迟/0|计分板/1)",
is_in_player, lambda a: is_in_player(a, (0, 1)),
"输入内容有误,请重新输入。",
)[1]
else:
player_format = format_ipt(
"播放器类型 (延迟/0|中继器/2)",
lambda a: is_in_player(a, (0, 2)),
"输入内容有误,请重新输入。", "输入内容有误,请重新输入。",
)[1] )[1]
old_exe_enabled = not format_ipt( old_exe_enabled = not format_ipt(
"启用新版代执行指令 (否/0|是/1)", bool_str, "输入内容格式错误,应为 是/1/真/t/y 或 否/0/假/f/n" "启用新版代执行指令 (否/0|是/1)",
bool_str,
"输入内容格式错误,应为 是/1/真/t/y 或 否/0/假/f/n",
)[1] )[1]
@@ -215,6 +254,7 @@ else:
"自动生成进度条 (否/0|是/1)", "自动生成进度条 (否/0|是/1)",
bool_str, bool_str,
), ),
(
( (
"计分板名称:", "计分板名称:",
str, str,
@@ -223,34 +263,67 @@ else:
else ( else (
"受播放玩家的选择器:", "受播放玩家的选择器:",
str, str,
)
), ),
(
( (
"自动重置计分板 (否/0|是/1)", "自动重置计分板 (否/0|是/1)",
bool_str, bool_str,
) )
if player_format == 1 if player_format == 1
else (), else ()
),
(
( (
"BDX作者署名", "BDX作者署名",
str, str,
) )
if output_file_format == 1 if output_file_format == 1
else (), else (
(
"结构延展方向x+|z+|x-|z-",
lambda a: isin(
a,
{
"z+": ["z+", "Z+"],
"x+": ["X+", "x+"],
"z-": ["Z-", "z-"],
"x-": ["x-", "X-"],
},
),
)
if (player_format == 2 and output_file_format == 2)
else ()
)
),
(
( (
"结构生成最大高度 (0,+∞)", "结构生成最大高度 (0,+∞)",
int, int_str,
) )
if player_format == 0 if player_format == 0
else (), else (
(
"基础空白方块concrete",
str,
)
if (player_format == 2 and output_file_format == 2)
else ()
)
),
]: ]:
if args: if args:
prompts.append( prompts.append(
format_ipt(*args, err_note="输入内容格式错误,应符合 {}".format(args[1]))[1] format_ipt(
*args, err_note="输入内容格式错误,应符合 {}".format(args[1])
)[1]
) )
if prompts[2]: if prompts[2]:
costom_pgb_enabled = format_ipt( costom_pgb_enabled = format_ipt(
"自定义进度条样式 (否/0|是/1)", bool_str, "输入内容格式错误,应为 是/1/真/t/y 或 否/0/假/f/n" "自定义进度条样式 (否/0|是/1)",
bool_str,
"输入内容格式错误,应为 是/1/真/t/y 或 否/0/假/f/n",
)[1] )[1]
if costom_pgb_enabled: if costom_pgb_enabled:
style = ipt("基本样式组 (回车默认)") style = ipt("基本样式组 (回车默认)")
@@ -263,12 +336,20 @@ if prompts[2]:
if not done_part: if not done_part:
done_part = DEFAULT_PROGRESSBAR_STYLE[1][0] done_part = DEFAULT_PROGRESSBAR_STYLE[1][0]
if output_file_format == 0:
if player_format == 1: if player_format == 1:
cvt_method = to_addon_pack_in_score cvt_method = to_addon_pack_in_score
elif player_format == 0: elif player_format == 0:
cvt_method = to_addon_pack_in_delay cvt_method = to_addon_pack_in_delay
elif player_format == 2: elif player_format == 2:
cvt_method = to_addon_pack_in_repeater cvt_method = to_addon_pack_in_repeater
elif output_file_format == 2:
# if player_format == 1:
# cvt_method = to_mcstructure_file_in_score
if player_format == 0:
cvt_method = to_mcstructure_file_in_delay
elif player_format == 2:
cvt_method = to_mcstructure_file_in_repeater
for singleMidi in midis: for singleMidi in midis:
@@ -276,20 +357,34 @@ for singleMidi in midis:
cvt_mid = Musicreater.MidiConvert.from_midi_file( cvt_mid = Musicreater.MidiConvert.from_midi_file(
singleMidi, old_exe_format=old_exe_enabled singleMidi, old_exe_format=old_exe_enabled
) )
cvt_cfg = ConvertConfig(out_path, *prompts[:2], progressbar=((style, (done_part, yet_part)) if costom_pgb_enabled else True) if prompts[2] else False) # type: ignore cvt_cfg = ConvertConfig(
out_path,
*prompts[:2],
progressbar=(
((style, (done_part, yet_part)) if costom_pgb_enabled else True) # type: ignore
if prompts[2]
else False
),
)
conversion_result = ( conversion_result = (
(cvt_method(cvt_mid, cvt_cfg, *prompts[3:])) # type: ignore (cvt_method(cvt_mid, cvt_cfg, *prompts[3:])) # type: ignore
if output_file_format == 0 if output_file_format == 0
else ( else (
(
to_BDX_file_in_score(cvt_mid, cvt_cfg, *prompts[3:]) to_BDX_file_in_score(cvt_mid, cvt_cfg, *prompts[3:])
if player_format == 1 if player_format == 1
else to_BDX_file_in_delay(cvt_mid, cvt_cfg, *prompts[3:]) else to_BDX_file_in_delay(cvt_mid, cvt_cfg, *prompts[3:])
) )
if output_file_format == 1
else (cvt_method(cvt_mid, cvt_cfg, *prompts[3:])) # type: ignore
)
) )
prt( prt(
f" 指令总长{conversion_result[0]},播放刻数:{conversion_result[1]}{f''',结构大小:{conversion_result[2]},末点坐标:{conversion_result[3]}''' if output_file_format == 1 else ''}" # type: ignore f" 结构大小{conversion_result[0]},播放刻数:{conversion_result[1]}"
if output_file_format == 2
else f" 指令总长:{conversion_result[0]},播放刻数:{conversion_result[1]}{f''',结构大小:{conversion_result[2]},末点坐标:{conversion_result[3]}''' if output_file_format == 1 else ''}" # type: ignore
) )
exitSth = ipt("结束。换行以退出程序。") exitSth = ipt("结束。换行以退出程序。")

View File

@@ -7,7 +7,7 @@
伶伦转换器暨模组特用奇巧 伶伦转换器暨模组特用奇巧
Linglun Converter for Special Use with addons Linglun Converter for Special Use with addons
版权所有 © 2024 金羿 & 睿开发组 版权所有 © 2024 金羿 & 睿开发组
Copyright © 2024 EillesWan & TriM Org. Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md 开源相关声明请见 ./License.md
@@ -55,7 +55,9 @@ MainConsole.rule(
) )
# MainConsole.rule(title="[bold #AB70FF]Welcome to Linglun Converter", characters="-") # MainConsole.rule(title="[bold #AB70FF]Welcome to Linglun Converter", characters="-")
MainConsole.rule( MainConsole.rule(
title="[#AB70FF]版本{} | 音·创内核版本{}".format(__version__, Musicreater.__version__), title="[#AB70FF]版本{} | 音·创内核版本{}".format(
__version__, Musicreater.__version__
),
characters="-", characters="-",
style="#26E2FF", style="#26E2FF",
) )
@@ -95,7 +97,9 @@ while True:
# "仅处理打击乐器 (否/0|是/1)", bool_str, "输入内容格式错误,应为 是/1/真/t/y 或 否/0/假/f/n" # "仅处理打击乐器 (否/0|是/1)", bool_str, "输入内容格式错误,应为 是/1/真/t/y 或 否/0/假/f/n"
# )[1] # )[1]
speed: float = format_ipt("播放速度", float_str, "错误,需要浮点型数据;请重新输入。")[1] speed: float = format_ipt("播放速度", float_str, "错误,需要浮点型数据;请重新输入。")[
1
]
final_result: Dict[str, Dict[int, List[Tuple[str, int, str]]]] = {} final_result: Dict[str, Dict[int, List[Tuple[str, int, str]]]] = {}

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,10 @@
Musicreater>=1.7.1 Musicreater>=2.1.0.1
TrimLog>=0.8.3 TrimLog>=0.8.3
requests>=2.0.0
TrimMCStruct>=1.0.0
rich
wxPython
dill
brotli
fcwslib=3.0.1
zhDateTime>=1.0.3

BIN
resources/TriMO_LOGO.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

BIN
resources/TriMO_Theme.mp4 Normal file

Binary file not shown.

View File

@@ -0,0 +1,29 @@
# 资源文件权益声明
请注意,本仓库中 resource 目录、res 目录等一众可以明显觉知的资源目录内所含之文件应遵循以下之版权声明。
### 商业标记及专有标记
**睿乐组织**、**睿乐**、**TriMO**、**TriM**、**TriM-Org.**、**TriM-Orgnization**等一众组织名称皆为专用商业标记,未经该组织允许不得擅自使用。
**金羿ELS**、**金羿**、**Eilles Wan**、**丌幂**、**诸葛亮与八卦阵**、**诸葛八卦**、**BgArray**、**鸣凤鸽子**、**鱼旧梦**、**ElapsingDreams**等一众具有显著特征的自然人网名、自然人姓名、自然人专有名称之类之辞皆为专有标记,未经其本人允许不得擅自使用。
**伶伦工作站**、**伶伦转换器**、**LingLun Studio**、**LingLun Converter**、**音·创**、**Musicreater**等一众项目、软件、需求库之名称皆为专用之商业标记,未经其所有者允许不得擅自使用。
睿乐组织的徽标[**【木制展框上的惊异媒体】(睿思乐发)**](https://gitee.com/TriM-Organization/Linglun-Converter/raw/master/resources/TriMO_Theme.mp4)之图案及相关动画是**丌幂**所作的、**睿乐组织**的共同标志,其著作权归属**丌幂**所有,并授权给**睿乐组织**使用。其相关声像信息、睿乐组织的主题音[**【悦搏音符之回响】(睿思乐发)**](https://gitee.com/TriM-Organization/Linglun-Converter/raw/master/resources/TriMO_Theme.mp4)是**诸葛亮与八卦阵**所制作的、**睿乐组织**的共同标记,其著作权归属**诸葛亮与八卦阵**所有,并授权给**睿乐组织**使用。上述之图形、动画、声音等相关媒体信息皆为**睿乐组织**所专用的商业标记,未经**睿乐组织**之允许不得使用。
[**木制框架中的乐灵**](https://gitee.com/TriM-Organization/Linglun-Converter/raw/master/resources/LLC_LOGO_OK_PLAIN_BANNER.png)之图案及相关动画、声音均为**伶伦工作站**之专用标记,未经**睿乐组织**之允许不得使用。
[**瓷板上的方块音符**](https://gitee.com/TriM-Organization/Musicreater/raw/master/resources/msctIcon.png)之图案及相关动画、声音均为**音·创库**之专用标记,未经**睿乐组织**之允许不得使用。
### 图片、视讯与声像信息
若无特殊注明,一众本仓库内公开的图片、视频、影视、声音等媒体信息
皆系本项目所用之连带软件
禁止在本项目之外传播
不允许独立发行、独立副本
不允许未经允许的二次使用与创作
不允许脱离于本项目而独立存在
不得随任何其他非本项目之内的软件连带发布
不得用于商业用途
若本项目之源码被用于商业用途,应当将其从中剔除

BIN
resources/金羿ELSV4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

279
utils/authorp.py Normal file
View File

@@ -0,0 +1,279 @@
# -*- coding: utf-8 -*-
"""
伶伦转换器 作者信息组件
Linglun Converter Author Page Component
版权所有 © 2024 金羿 & 睿乐开发组
Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md
Terms & Conditions: ./Lisense.md
"""
import wx
import wx.xrc
import wx.media
###########################################################################
## Class LingLunAuthorPageFrame
###########################################################################
class LingLunAuthorPageFrame(wx.Frame):
def __init__(self, parent, trim_vdo, trim_pic, eilles_pic):
wx.Frame.__init__(
self,
parent,
id=wx.ID_ANY,
title="伶伦作者页",
pos=wx.DefaultPosition,
size=wx.Size(610, 560),
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL | wx.STAY_ON_TOP,
)
self.trim_pic = trim_pic
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
mian_sizer = wx.BoxSizer(wx.VERTICAL)
self.m_listbook1 = wx.Listbook(
self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LB_RIGHT
)
self.trim_pannel = wx.Panel(
self.m_listbook1,
wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.TAB_TRAVERSAL,
)
what_we_called_trim_org = wx.BoxSizer(wx.VERTICAL)
bSizer2 = wx.BoxSizer(wx.HORIZONTAL)
self.m_TriMO_Theme_mediaCtrl1 = wx.media.MediaCtrl(
self.trim_pannel,
wx.ID_ANY,
wx.EmptyString,
wx.DefaultPosition,
wx.DefaultSize,
)
# self.m_TriMO_Theme_mediaCtrl1.Hide()
self.m_TriMO_Theme_mediaCtrl1.Load(trim_vdo)
self.m_TriMO_Theme_mediaCtrl1.SetPlaybackRate(1)
self.m_TriMO_Theme_mediaCtrl1.SetVolume(1)
self.m_TriMO_Theme_mediaCtrl1.ShowPlayerControls(
wx.media.MEDIACTRLPLAYERCONTROLS_NONE
)
bSizer2.Add(self.m_TriMO_Theme_mediaCtrl1, 1, wx.ALL | wx.EXPAND, 5)
# self.m_bitmap1k = wx.StaticBitmap(
# self.trim_pannel,
# wx.ID_ANY,
# wx.Bitmap(trim_pic, wx.BITMAP_TYPE_ANY),
# wx.DefaultPosition,
# wx.DefaultSize,
# 0,
# )
# bSizer2.Add(self.m_bitmap1k, 1, wx.ALL, 5)
self.m_staticText1 = wx.StaticText(
self.trim_pannel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0
)
self.m_staticText1.Wrap(-1)
bSizer2.Add(self.m_staticText1, 0, wx.ALL, 5)
what_we_called_trim_org.Add(bSizer2, 1, wx.EXPAND, 5)
self.m_staticText2 = wx.StaticText(
self.trim_pannel,
wx.ID_ANY,
"睿乐 - 我的世界多媒体组织\nTriM Org - Minecraft Muti-Media Organization ",
wx.DefaultPosition,
wx.DefaultSize,
wx.ALIGN_CENTER_HORIZONTAL,
)
self.m_staticText2.Wrap(-1)
what_we_called_trim_org.Add(self.m_staticText2, 0, wx.ALL | wx.EXPAND, 5)
self.m_textCtrl1 = wx.TextCtrl(
self.trim_pannel,
wx.ID_ANY,
"\t嗨~\n\t我们是 睿乐组织TriMO, 全称 Minecraft Muti-Media Organization意为“我的世界多媒体组织”。\n\t我们组织的主要活动是一些有关我的世界与多媒体相关的程序项目例如伶伦我的世界数字音频工作站我的世界视频播放制作器MVP等。\n\t我们组织也会尝试开发一些跟人工智能、音乐、数字音频工作站DAW等相关的内容不仅限于我的世界相关内容的开发。\n\t我们欢迎任何有相关兴趣的同志加入组织或者提交你的PR、创建你的issues、提出意见和建议\n\n电邮mailto:TriM-Organization@hotmail.com\nQ群861684859 https://jq.qq.com/?_wv=1027&k=hpeRxrYr",
wx.DefaultPosition,
wx.DefaultSize,
wx.TE_AUTO_URL | wx.TE_BESTWRAP | wx.TE_MULTILINE | wx.TE_READONLY,
)
what_we_called_trim_org.Add(self.m_textCtrl1, 0, wx.ALL | wx.EXPAND, 5)
self.trim_pannel.SetSizer(what_we_called_trim_org)
self.trim_pannel.Layout()
what_we_called_trim_org.Fit(self.trim_pannel)
self.m_listbook1.AddPage(self.trim_pannel, "睿乐组织", True)
self.eilles_pannel = wx.Panel(
self.m_listbook1,
wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.TAB_TRAVERSAL,
)
bSizer3 = wx.BoxSizer(wx.HORIZONTAL)
bSizer4 = wx.BoxSizer(wx.VERTICAL)
self.m_bitmap1 = wx.StaticBitmap(
self.eilles_pannel,
wx.ID_ANY,
wx.Bitmap(eilles_pic, wx.BITMAP_TYPE_ANY),
wx.DefaultPosition,
wx.DefaultSize,
0,
)
bSizer4.Add(self.m_bitmap1, 1, wx.ALL, 5)
self.m_staticText21 = wx.StaticText(
self.eilles_pannel,
wx.ID_ANY,
"金羿ELS\nEilles ",
wx.DefaultPosition,
wx.DefaultSize,
wx.ALIGN_CENTER_HORIZONTAL,
)
self.m_staticText21.Wrap(-1)
bSizer4.Add(self.m_staticText21, 0, wx.ALL | wx.EXPAND, 5)
self.m_textCtrl11 = wx.TextCtrl(
self.eilles_pannel,
wx.ID_ANY,
"我的世界基岩版指令作者个人开发者B 站不知名 UP 主……",
wx.DefaultPosition,
wx.DefaultSize,
wx.TE_AUTO_URL | wx.TE_BESTWRAP | wx.TE_READONLY,
)
bSizer4.Add(self.m_textCtrl11, 0, wx.ALL | wx.EXPAND, 5)
bSizer3.Add(bSizer4, 1, wx.EXPAND, 5)
self.m_staticText11 = wx.StaticText(
self.eilles_pannel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0
)
self.m_staticText11.Wrap(-1)
bSizer3.Add(self.m_staticText11, 0, wx.ALL | wx.EXPAND, 5)
self.eilles_pannel.SetSizer(bSizer3)
self.eilles_pannel.Layout()
bSizer3.Fit(self.eilles_pannel)
self.m_listbook1.AddPage(self.eilles_pannel, "金羿ELS", False)
self.bgarray_pannel = wx.Panel(
self.m_listbook1,
wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.TAB_TRAVERSAL,
)
bSizer31 = wx.BoxSizer(wx.HORIZONTAL)
bSizer41 = wx.BoxSizer(wx.VERTICAL)
bSizer41.Add((0, 0), 1, wx.EXPAND, 5)
self.m_staticText211 = wx.StaticText(
self.bgarray_pannel,
wx.ID_ANY,
"诸葛亮与八卦阵\nBgArray",
wx.DefaultPosition,
wx.DefaultSize,
wx.ALIGN_CENTER_HORIZONTAL,
)
self.m_staticText211.Wrap(-1)
bSizer41.Add(self.m_staticText211, 0, wx.ALL | wx.EXPAND, 5)
self.m_textCtrl111 = wx.TextCtrl(
self.bgarray_pannel,
wx.ID_ANY,
"我的世界基岩版玩家,喜欢编程和音乐。",
wx.DefaultPosition,
wx.DefaultSize,
wx.TE_AUTO_URL | wx.TE_BESTWRAP | wx.TE_READONLY,
)
bSizer41.Add(self.m_textCtrl111, 0, wx.ALL | wx.EXPAND, 5)
bSizer31.Add(bSizer41, 1, wx.EXPAND, 5)
self.m_staticText111 = wx.StaticText(
self.bgarray_pannel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0
)
self.m_staticText111.Wrap(-1)
bSizer31.Add(self.m_staticText111, 0, wx.ALL | wx.EXPAND, 5)
self.bgarray_pannel.SetSizer(bSizer31)
self.bgarray_pannel.Layout()
bSizer31.Fit(self.bgarray_pannel)
self.m_listbook1.AddPage(self.bgarray_pannel, "诸葛八卦", False)
mian_sizer.Add(self.m_listbook1, 1, wx.EXPAND | wx.ALL, 5)
self.SetSizer(mian_sizer)
self.Layout()
self.Centre(wx.BOTH)
# Connect Events
self.m_listbook1.Bind(wx.EVT_LISTBOOK_PAGE_CHANGED, self.book_changed)
def __del__(self):
self.Destroy()
# Virtual event handlers, override them in your derived class
def book_changed(self, event):
if event.GetSelection() == 0:
# self.m_bitmap1k.HideWithEffect(wx.SHOW_EFFECT_BLEND,)
# self.m_bitmap1k.SetBitmap(wx.Bitmap())
# self.m_bitmap1k.Update()
# self.trim_pannel.Update()
# self.m_TriMO_Theme_mediaCtrl1.Show()
# self.m_TriMO_Theme_mediaCtrl1.SetMinSize(wx.DefaultSize)
# self.trim_pannel.SetFocus()
# self.trim_pannel.Update()
self.m_TriMO_Theme_mediaCtrl1.Play()
# self.m_TriMO_Theme_mediaCtrl1.HideWithEffect(wx.SHOW_EFFECT_BLEND)
# self.m_bitmap1k.ShowWithEffect(wx.SHOW_EFFECT_BLEND)
# self.m_bitmap1k.Update()
# self.trim_pannel.SetFocus()
# self.trim_pannel.Update()
else:
self.m_TriMO_Theme_mediaCtrl1.Stop()
def go_author_page(
res_list: list = [
"./resources/TriMO_Theme.mp4",
"./resources/TriMO_LOGO.png",
"./resources/金羿ELSV4.png",
]
):
app = wx.App()
frame = LingLunAuthorPageFrame(None, *res_list)
frame.Show()
# frame.m_TriMO_Theme_mediaCtrl1.Load("./resources/TriMO_Theme.mp4")
# frame.m_TriMO_Theme_mediaCtrl1.Play()
app.MainLoop()
# 启动应用程序
if __name__ == "__main__":
go_author_page()

View File

@@ -4,7 +4,7 @@
伶伦转换器 命令行组件 伶伦转换器 命令行组件
Linglun Converter Command Line IO Component Linglun Converter Command Line IO Component
版权所有 © 2024 金羿 & 睿开发组 版权所有 © 2024 金羿 & 睿开发组
Copyright © 2024 EillesWan & TriM Org. Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md 开源相关声明请见 ./License.md
@@ -12,8 +12,6 @@ Terms & Conditions: ./Lisense.md
""" """
import urllib.error
import urllib.request
from typing import ( from typing import (
Any, Any,
Callable, Callable,
@@ -26,38 +24,19 @@ from typing import (
Tuple, Tuple,
Iterable, Iterable,
Sequence, Sequence,
Union,
) )
import TrimLog import TrimLog
from TrimLog import object_constants, logger from TrimLog import object_constants, logger, log__init__
is_logging: bool = True
MainConsole = logger.console
logger.is_logging = True logger.is_logging = True
logger.suffix = ".llc" logger.suffix = ".llc"
logger.is_tips = True logger.is_tips = True
try: logger.info("注册出入方法……")
myWords = (
urllib.request.urlopen(
"https://gitee.com/TriM-Organization/LinglunStudio/raw/master/resources/myWords.txt"
)
.read()
.decode("utf-8")
.strip("\n")
.split("\n")
)
except (ConnectionError, urllib.error.HTTPError) as E:
logger.warning(f"读取言·论信息发生 互联网连接 错误:\n{E}")
myWords = ["以梦想为驱使 创造属于自己的未来"]
# noinspection PyBroadException
except BaseException as E:
logger.warning(f"读取言·论信息发生 未知 错误:\n{E}")
myWords = ["灵光焕发 深艺献心"]
JustifyMethod = Literal["default", "left", "center", "right", "full"] JustifyMethod = Literal["default", "left", "center", "right", "full"]
OverflowMethod = Literal["fold", "crop", "ellipsis", "ignore"] OverflowMethod = Literal["fold", "crop", "ellipsis", "ignore"]
@@ -98,7 +77,7 @@ def prt(
soft_wrap (bool, 可选): 启用软包装模式,禁止文字包装和裁剪,或`None``用于 控制台默认值。默认为`None`。 soft_wrap (bool, 可选): 启用软包装模式,禁止文字包装和裁剪,或`None``用于 控制台默认值。默认为`None`。
new_line_start (bool, False): 如果输出包含多行,在开始时插入一个新行。默认值为`False`。 new_line_start (bool, False): 如果输出包含多行,在开始时插入一个新行。默认值为`False`。
""" """
MainConsole.print( logger.console.print(
*objects, *objects,
sep=sep, sep=sep,
end=end, end=end,
@@ -159,7 +138,7 @@ def ipt(
Returns: Returns:
str: 从stdin读取的字符串 str: 从stdin读取的字符串
""" """
MainConsole.print( logger.console.print(
*objects, *objects,
sep=sep, sep=sep,
end="", end="",
@@ -177,7 +156,7 @@ def ipt(
new_line_start=new_line_start, new_line_start=new_line_start,
) )
return MainConsole.input(password=password, stream=stream) return logger.console.input(password=password, stream=stream)
def format_ipt( def format_ipt(
@@ -213,27 +192,28 @@ def isin(sth: str, range_list: dict):
for bool_value, res_list in range_list.items(): for bool_value, res_list in range_list.items():
if sth in res_list: if sth in res_list:
return bool_value return bool_value
raise ValueError raise ValueError(
"不在可选范围内:{}".format([j for i in range_list.values() for j in i])
)
# 真假字符串判断 # 真假字符串判断
def bool_str(sth: str): def bool_str(sth: str):
try: try:
return bool(float(sth)) return bool(float(sth))
except: except ValueError:
if str(sth).lower() in ("true", "", "", "y", "t"): if str(sth).lower() in ("true", "", "", "y", "t"):
return True return True
elif str(sth).lower() in ("false", "", "", "f", "n"): elif str(sth).lower() in ("false", "", "", "f", "n"):
return False return False
else: else:
raise ValueError raise ValueError("非法逻辑字串")
def float_str(sth: str): def float_str(sth: str):
try: try:
return float(sth) return float(sth)
except ValueError: except ValueError:
try:
return float( return float(
sth.replace("", "1") sth.replace("", "1")
.replace("", "2") .replace("", "2")
@@ -262,12 +242,7 @@ def float_str(sth: str):
.replace("", "7") .replace("", "7")
.replace("", ".") .replace("", ".")
) )
except:
raise ValueError
def int_str(sth: str): def int_str(sth: str):
try:
return int(float_str(sth)) return int(float_str(sth))
except ValueError:
raise ValueError

View File

@@ -4,7 +4,7 @@
伶伦转换器 本地化组件 伶伦转换器 本地化组件
Linglun Converter Language Localization Component Linglun Converter Language Localization Component
版权所有 © 2024 金羿 & 睿开发组 版权所有 © 2024 金羿 & 睿开发组
Copyright © 2024 EillesWan & TriM Org. Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md 开源相关声明请见 ./License.md
@@ -12,18 +12,16 @@ Terms & Conditions: ./Lisense.md
""" """
from .io import logger, Any from .io import logger, Any
def _() -> str: def _() -> str:
return "" return ""
def main(): def main():
pass pass
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -4,7 +4,7 @@
伶伦转换器 打包存档组件 伶伦转换器 打包存档组件
Linglun Converter Language Localization Component Linglun Converter Language Localization Component
版权所有 © 2024 金羿 & 睿开发组 版权所有 © 2024 金羿 & 睿开发组
Copyright © 2024 EillesWan & TriM Org. Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md 开源相关声明请见 ./License.md
@@ -12,7 +12,6 @@ Terms & Conditions: ./Lisense.md
""" """
import hashlib import hashlib
import dill import dill
@@ -62,3 +61,60 @@ def enpack_llc_pack(sth: Any, to_dist: str):
f.write(md5_value) f.write(md5_value)
f.write(b" | \n") f.write(b" | \n")
f.write(packing_bytes) f.write(packing_bytes)
def enpack_msct_pack(sth, to_dist: str):
packing_bytes = brotli.compress(
dill.dumps(
sth,
)
)
with open(
to_dist,
"wb",
) as f:
f.write(packing_bytes)
return hashlib.sha256(packing_bytes)
def unpack_msct_pack(from_dist: str, hash_value: str, raise_error: bool = True):
with open(from_dist, "rb") as f:
packed_data = f.read()
now_hash = hashlib.sha256(packed_data).hexdigest()
if now_hash == hash_value:
return dill.loads(brotli.decompress(packed_data))
else:
if raise_error:
raise ValueError(
"文件读取失败:\n传入:{}\n需求:{}\n签名不一致,可能存在注入风险。".format(
now_hash, hash_value
)
)
else:
return ValueError(
"文件读取失败:\n传入:{}\n需求:{}\n签名不一致,可能存在注入风险。".format(
now_hash, hash_value
)
)
def load_msct_packed_data(
packed_data: bytes, hash_value: str, raise_error: bool = True
):
now_hash = hashlib.sha256(packed_data).hexdigest()
if now_hash == hash_value:
return dill.loads(brotli.decompress(packed_data))
else:
if raise_error:
raise ValueError(
"文件读取失败:\n传入:{}\n需求:{}\n签名不一致,可能存在注入风险。".format(
now_hash, hash_value
)
)
else:
return ValueError(
"文件读取失败:\n传入:{}\n需求:{}\n签名不一致,可能存在注入风险。".format(
now_hash, hash_value
)
)

View File

@@ -4,14 +4,16 @@
伶伦转换器 版本检查组件 伶伦转换器 版本检查组件
Linglun Converter Version Checking Component Linglun Converter Version Checking Component
版权所有 © 2024 金羿 & 睿开发组 版权所有 © 2024 金羿 & 睿开发组
Copyright © 2024 EillesWan & TriM Org. Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md 开源相关声明请见 ./License.md
Terms & Conditions: ./Lisense.md Terms & Conditions: ./Lisense.md
""" """
from .io import TrimLog, urllib, Sequence, Iterable, Callable, Optional import requests
from .io import TrimLog, Sequence, Iterable, Callable, Optional, Dict, Union
def is_ver_char(text: str) -> bool: def is_ver_char(text: str) -> bool:
@@ -64,20 +66,21 @@ def is_ver_bigger(ver_1: Sequence[int], ver_2: Sequence[int]) -> bool:
return len_v1 > len_v2 return len_v1 > len_v2
def check_update( def check_update_repo(
appname: str, appname: str,
get_text_url: str, get_text_url: str,
version_now: str, version_now: str,
message_show_fun: Callable, message_show_fun: Callable,
logger: TrimLog.Logger, logger: TrimLog.Logger,
version_disp: Optional[str] = None, version_disp: Optional[str] = None,
version_renew_tip: str = "!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,您可以前往下载地址更新。",
): ):
if not version_disp: if not version_disp:
version_disp = version_now version_disp = version_now
logger.info("当前版本信息{}".format(version_now)) logger.info("当前 {} 版本:{}".format(appname,version_now))
try: try:
code_content: str = urllib.request.urlopen(get_text_url).read().decode("utf-8") code_content: str = requests.get(get_text_url).text
except Exception as E: # noinspection PyBroadException except Exception as E: # noinspection PyBroadException
logger.warning("无法获取更新版本信息:{}".format(E)) logger.warning("无法获取更新版本信息:{}".format(E))
return return
@@ -86,7 +89,7 @@ def check_update(
code_content = code_content[code_content.find('"') + 1 :] code_content = code_content[code_content.find('"') + 1 :]
version_content = code_content[: code_content.find('"')] version_content = code_content[: code_content.find('"')]
logger.info("已获取新版本信息:{}".format(version_content)) logger.info("已获取 {} 新版本信息:{}".format(appname,version_content))
if is_ver_bigger( if is_ver_bigger(
[int(v) for v in cut_ver_str(version_content).split(".")], [int(v) for v in cut_ver_str(version_content).split(".")],
@@ -98,7 +101,7 @@ def check_update(
version_content = code_content[: code_content.find('"')] version_content = code_content[: code_content.find('"')]
message_show_fun( message_show_fun(
"!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,您可以前往下载地址更新。".format( version_renew_tip.format(
app=appname, latest=version_content, current=version_disp app=appname, latest=version_content, current=version_disp
) )
) )
@@ -116,3 +119,42 @@ def check_update(
# return version_content[i:j] # return version_content[i:j]
# "".join([version_content[i] for i in range(version_content.__len__()) if is_ver_char(version_content[i]) and ((version_content[i-1] if i > 0 else False) or (version_content[i+1] if i < version_content.__len__() else False))]).split('.') # "".join([version_content[i] for i in range(version_content.__len__()) if is_ver_char(version_content[i]) and ((version_content[i-1] if i > 0 else False) or (version_content[i+1] if i < version_content.__len__() else False))]).split('.')
def check_update_release(
appname: str,
get_release_url: str,
version_now: str,
notice_fun: Callable[[str, str], bool],
logger: TrimLog.Logger,
version_renew_tip: str = "!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,是否更新?",
) -> Union[None, Dict[str, str]]:
logger.info("当前 {} 版本:{}".format(appname,version_now))
try:
code_content: Dict = requests.get(get_release_url).json()
except Exception as E: # noinspection PyBroadException
logger.warning("无法获取更新版本信息:{}".format(E))
return
version_content = code_content["release"]["tag"]["name"]
logger.info("已获取 {} 新版本信息:{}".format(appname,version_content))
if is_ver_bigger(
[int(v) for v in cut_ver_str(version_content).split(".")],
[int(v) for v in cut_ver_str(version_now).split(".")],
):
if notice_fun(
version_renew_tip.format(
app=appname, latest=version_content, current=version_now
),
code_content["release"]["release"]["description"],
):
return dict(
[
(d["name"], d["download_url"])
for d in code_content["release"]["release"]["attach_files"]
]
)

161
utils/webview.py Normal file
View File

@@ -0,0 +1,161 @@
# -*- coding: utf-8 -*-
"""
伶伦转换器 HTML页组件
Linglun Converter HTML Component
版权所有 © 2024 金羿 & 睿乐开发组
Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md
Terms & Conditions: ./Lisense.md
"""
import wx
import wx.html
class HTMLFrame(wx.Frame):
"""桌面程序主窗口类"""
def __init__(
self,
parent,
tip_text,
web_text,
window_title: str = "新版本已发布",
bg_colour: tuple = (0, 0, 0),
window_size: tuple = (800, 480),
):
"""构造函数"""
wx.Frame.__init__(
self,
parent,
id=wx.ID_ANY,
title=window_title,
pos=wx.DefaultPosition,
size=window_size,
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
)
# self.SetIcon(wx.Icon('', wx.BITMAP_TYPE_ICO))
self.SetBackgroundColour(bg_colour)
self.Center()
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
bSizer1 = wx.BoxSizer(wx.VERTICAL)
self.m_staticText1 = wx.StaticText(
self,
wx.ID_ANY,
tip_text,
wx.DefaultPosition,
wx.DefaultSize,
wx.ALIGN_CENTER_HORIZONTAL,
)
self.m_staticText1.Wrap(-1)
self.m_staticText1.SetFont(
wx.Font(
wx.NORMAL_FONT.GetPointSize() * 2,
wx.FONTFAMILY_DEFAULT,
wx.FONTSTYLE_NORMAL,
wx.FONTWEIGHT_NORMAL,
False,
"OPPOSans M",
)
)
bSizer1.Add(self.m_staticText1, 3, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)
self.m_htmlWin1 = wx.html.HtmlWindow(
self,
wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.html.HW_SCROLLBAR_AUTO,
)
self.m_htmlWin1.SetFont(
wx.Font(
wx.NORMAL_FONT.GetPointSize(),
wx.FONTFAMILY_DEFAULT,
wx.FONTSTYLE_NORMAL,
wx.FONTWEIGHT_NORMAL,
False,
"OPPOSans R",
)
)
self.m_htmlWin1.SetStandardFonts(normal_face="OPPOSans R")
bSizer1.Add(self.m_htmlWin1, 5, wx.EXPAND | wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 5)
bSizer2 = wx.BoxSizer(wx.HORIZONTAL)
self.m_button1 = wx.Button(
self, wx.ID_ANY, "取消", wx.DefaultPosition, wx.DefaultSize, 0
)
bSizer2.Add(self.m_button1, 0, wx.ALL, 5)
self.m_button2 = wx.Button(
self, wx.ID_ANY, "更新", wx.DefaultPosition, wx.DefaultSize, 0
)
bSizer2.Add(self.m_button2, 0, wx.ALL, 5)
bSizer1.Add(bSizer2, 0, wx.ALIGN_RIGHT, 5)
self.SetSizer(bSizer1)
self.Layout()
self.Centre(wx.BOTH)
self.m_htmlWin1.SetPage(web_text)
# Connect Events
self.m_button1.Bind(wx.EVT_BUTTON, self.on_Cancel_Click)
self.m_button2.Bind(wx.EVT_BUTTON, self.on_Update_Click)
self.ok = False
def __del__(self):
# return self.ok
pass
def getok(self) -> bool:
return self.ok
# Virtual event handlers, override them in your derived class
def on_Cancel_Click(self, event):
self.ok = False
self.Destroy()
def on_Update_Click(self, event):
self.ok = True
self.Destroy()
def go_update_tip(tip_text: str, html_context: str) -> bool:
app = wx.App()
frame = HTMLFrame(
None,
tip_text,
html_context,
bg_colour=wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENU),
)
frame.Show()
app.MainLoop()
return frame.getok()
if __name__ == "__main__":
go_update_tip(
"!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,是否更新?",
'<ol>\n<li>\n<strong>[修复]</strong> 完成<ahref="https://gitee.com/TriM-Organization/Linglun-Converter/issues/I8YN22" rel="nofollow noreferrer noopener"target="_blank">#I8YN22</a>问题的修复,解决转换错误的问题</li>\n<li>\n<strong>[新增]</strong>支持选择自定的乐器对照表</li>\n<li>\n<strong>[新增]</strong>支持自选距离音量算法</li>\n<li>\n<strong>[新增]</strong>使用Packer以打包发行版详情如下方说明</li>\n<li>\n<strong>[优化]</strong>提高调用效率,优化代码结构</li>\n<li>\n<strong>[优化]</strong>提升部分注释可读性</li>\n</ol>\n',
)
go_update_tip(
"!有新版本!\n最新的 音·创 已经是 1.7.3 版本,当前您正在使用的仍是 1.7.0 版本,是否更新?",
'<ol>\n<li>\n<strong>[修复]</strong> 完成<a href="https://gitee.com/TriM-Organization/Linglun-Converter/issues/I8YN22" rel="nofollow noreferrer noopener" target="_blank">#I8YN22</a>问题的修复,解决转换错误的问题</li>\n<li>\n<strong>[新增]</strong> 支持选择自定的乐器对照表</li>\n<li>\n<strong>[新增]</strong> 支持自选距离音量算法</li>\n<li>\n<strong>[新增]</strong> 使用Packer以打包发行版详情如下方说明</li>\n<li>\n<strong>[优化]</strong> 提高调用效率,优 化代码结构</li>\n<li>\n<strong>[优化]</strong> 提升部分注释可读性</li>\n</ol>\n<h2>打包文件结构</h2>\n<p>我们使用Python库 <code>dill</code> 和 <code>Brotli</code> 对整个库的包体进行打包,方式如下:</p>\n<div class="markdown-code-block">\n<pre lang="python" class="python"><code>packing_bytes = brotli.compress(dill.dumps(sth,))\n</code></pre>\n<div class="markdown-code-block-copy-btn"></div>\n</div>\n<p>每个包中的内容为:</p>\n<div class="markdown-code-block">\n<pre lang="python" class="python"><code>MSCT_MAIN = (\n Musicreater,\n Musicreater.experiment,\n Musicreater.previous,\n)\n\nMSCT_PLUGIN = (Musicreater.plugin,)\n\nMSCT_PLUGIN_FUNCTION = (\n to_addon_pack_in_delay,\n to_addon_pack_in_repeater,\n to_addon_pack_in_score,\n to_mcstructure_file_in_delay,\n to_mcstructure_file_in_repeater,\n to_mcstructure_file_in_score,\n to_BDX_file_in_delay,\n to_BDX_file_in_score,\n)\n</code></pre>\n<div class="markdown-code-block-copy-btn"></div>\n</div>',
)

52
utils/yanlun.py Normal file
View File

@@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
"""
伶伦转换器 言论版组件
Linglun Converter Yan Lun Component
版权所有 © 2024 金羿 & 睿乐开发组
Copyright © 2024 EillesWan & TriM Org.
开源相关声明请见 ./License.md
Terms & Conditions: ./Lisense.md
"""
import requests
import zhDateTime
from .io import logger, prt
STANDARD_WHITE = (242, 244, 246)
STANDART_BLACK = (18, 17, 16)
yanlun_fg_colour = STANDARD_WHITE
yanlun_bg_colour = STANDART_BLACK
logger.info("获取 言·论 信息……")
solar_datetime = zhDateTime.DateTime.now()
lunar_datetime = solar_datetime.to_lunar()
solar_date = (solar_datetime.month, solar_datetime.day)
lunar_date = (lunar_datetime.lunar_month, lunar_datetime.lunar_day)
if solar_date == (4, 3):
yanlun_texts = ["金羿ELS 生日快乐~"]
elif solar_date == (8, 6):
yanlun_texts = ["诸葛八卦 生日快乐~"]
else:
try:
yanlun_texts = (
requests.get(
"https://gitee.com/TriM-Organization/LinglunStudio/raw/master/resources/myWords.txt",
)
.text.strip("\n")
.split("\n")
)
except (ConnectionError, requests.HTTPError, requests.RequestException) as E:
logger.warning(f"读取言·论信息发生 互联网连接 错误:\n{E}")
yanlun_texts = ["以梦想为驱使 创造属于自己的未来"]
# noinspection PyBroadException
except BaseException as E:
logger.warning(f"读取言·论信息发生 未知 错误:\n{E}")
yanlun_texts = ["灵光焕发 深艺献心"]

File diff suppressed because it is too large Load Diff

View File

@@ -408,7 +408,7 @@
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">ConvertPagePanel</property> <property name="name">ConvertPagePanel</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size">565,540</property> <property name="size">652,588</property>
<property name="subclass">; ; forward_declare</property> <property name="subclass">; ; forward_declare</property>
<property name="tooltip"></property> <property name="tooltip"></property>
<property name="two_step_creation">0</property> <property name="two_step_creation">0</property>
@@ -420,18 +420,27 @@
<property name="name">main_page_sizer</property> <property name="name">main_page_sizer</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size">-1,-1</property> <property name="minimum_size">-1,-1</property>
<property name="name">s_midiChooseSizer</property> <property name="name">s_midiChooseSizer</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">0</property>
<property name="flag">wxSHAPED|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">MidiChooser_Delete_and_Tips_bSizer15</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property> <property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticText" expanded="0"> <object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
@@ -491,6 +500,73 @@
<event name="OnLeftDClick">MidiEasterEgg</event> <event name="OnLeftDClick">MidiEasterEgg</event>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">完成后移除</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_done_then_remove_checkBox6</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnCheckBox">on_Done_Then_Remove_Clicked</event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
@@ -503,7 +579,7 @@
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">0</property> <property name="border">0</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">1</property>
<object class="wxListBox" expanded="0"> <object class="wxListBox" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
@@ -567,9 +643,18 @@
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxSHAPED</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">MidiChooser_Open_and_Clear_Buttons_bSizer16</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxButton" expanded="0"> <object class="wxButton" expanded="0">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
@@ -641,6 +726,82 @@
<event name="OnButtonClick">openFile</event> <event name="OnButtonClick">openFile</event>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="auth_needed">0</property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmap"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="current"></property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="disabled"></property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="focus"></property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">清空文件</property>
<property name="margins"></property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_midiChooser_Clear_button3</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="pressed"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">on_Chooer_Clear_Button_Pressed</event>
</object>
</object>
</object>
</object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
@@ -814,7 +975,7 @@
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxSHAPED|wxEXPAND|wxALIGN_CENTER_HORIZONTAL</property> <property name="flag">wxALL|wxEXPAND|wxSHAPED</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="0"> <object class="wxStaticBoxSizer" expanded="0">
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
@@ -835,7 +996,7 @@
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND|wxSHAPED|wxALIGN_CENTER_VERTICAL</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="0"> <object class="wxStaticBoxSizer" expanded="0">
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
@@ -980,7 +1141,7 @@
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND|wxSHAPED|wxALIGN_CENTER_VERTICAL</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="0"> <object class="wxStaticBoxSizer" expanded="0">
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
@@ -2064,11 +2225,11 @@
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND|wxRESERVE_SPACE_EVEN_IF_HIDDEN</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="0"> <object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property> <property name="id">wxID_ANY</property>
<property name="label">开始转换</property> <property name="label">开始转换</property>
<property name="minimum_size">-1,100</property> <property name="minimum_size">-1,100</property>
@@ -2076,14 +2237,218 @@
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
<property name="parent">1</property> <property name="parent">1</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="spacer" expanded="0"> <object class="wxBoxSizer" expanded="1">
<property name="height">0</property> <property name="minimum_size"></property>
<property name="name">ss_Midi_Convert_distPath_bSizer17</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">ss_Dest_chooser_Sizer_in_bSizer18</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">指定输出路径</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_tip_Change_Dest_staticText7</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property> <property name="permission">protected</property>
<property name="width">0</property> <property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnLeftDClick">on_Change_to_Default_Path</event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxDirPickerCtrl" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="message">选择目标目录</property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_Convertion_Destination_Picker_dirPicker1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxDIRP_DEFAULT_STYLE</property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value">./</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnDirChanged">on_Convert_Dest_Changed</event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">1</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">输出到每个文件所在目录</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_Check_Every_Their_Path_checkBox7</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnCheckBox">On_Their_Path_Checked</event>
</object>
</object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,612 @@
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
import wx.propgrid as pg
###########################################################################
## Class LingLunMainFrame
###########################################################################
class LingLunMainFrame ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 660,723 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL, name = u"LingLunConverter" )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
self.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
self.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT ) )
self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
self.m_statusBar2 = self.CreateStatusBar( 1, wx.STB_SIZEGRIP, wx.ID_ANY )
self.m_statusBar2.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
self.m_menubar1 = wx.MenuBar( 0 )
self.m_menubar1.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
self.FileMenu = wx.Menu()
self.m_ClearSetting_menuItem2 = wx.MenuItem( self.FileMenu, wx.ID_ANY, u"重置设置", u"将全部数据设置重置为默认值(下次启动时生效)", wx.ITEM_CHECK )
self.FileMenu.Append( self.m_ClearSetting_menuItem2 )
self.m_Exit_menuItem1 = wx.MenuItem( self.FileMenu, wx.ID_ANY, u"退出", u"这是退出按钮", wx.ITEM_NORMAL )
self.FileMenu.Append( self.m_Exit_menuItem1 )
self.m_menubar1.Append( self.FileMenu, u"文件" )
self.SetMenuBar( self.m_menubar1 )
m_mainBoxSizer = wx.BoxSizer( wx.VERTICAL )
s_yanLunbarSizer = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"言·论" ), wx.VERTICAL )
self.m_LinglunWords_staticText1 = wx.StaticText( s_yanLunbarSizer.GetStaticBox(), wx.ID_ANY, u"灵光焕发 深艺献心", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTER_HORIZONTAL|wx.ST_ELLIPSIZE_MIDDLE|wx.ST_NO_AUTORESIZE )
self.m_LinglunWords_staticText1.Wrap( -1 )
self.m_LinglunWords_staticText1.SetFont( wx.Font( 12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans B" ) )
self.m_LinglunWords_staticText1.SetForegroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHTTEXT ) )
self.m_LinglunWords_staticText1.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOWTEXT ) )
s_yanLunbarSizer.Add( self.m_LinglunWords_staticText1, 0, wx.EXPAND, 5 )
m_mainBoxSizer.Add( s_yanLunbarSizer, 0, wx.ALL|wx.EXPAND|wx.RESERVE_SPACE_EVEN_IF_HIDDEN|wx.TOP, 2 )
self.mian_notebook = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
self.mian_notebook.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
self.convert_page = wx.Panel( self.mian_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
self.mian_notebook.AddPage( self.convert_page, u"开始转换", True )
self.setting_page = wx.Panel( self.mian_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
self.mian_notebook.AddPage( self.setting_page, u"数据设置", False )
m_mainBoxSizer.Add( self.mian_notebook, 1, wx.EXPAND |wx.ALL, 5 )
self.SetSizer( m_mainBoxSizer )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.Bind( wx.EVT_MENU, self.onResetSettingButtonSelection, id = self.m_ClearSetting_menuItem2.GetId() )
self.Bind( wx.EVT_MENU, self.onExitButtonPressed, id = self.m_Exit_menuItem1.GetId() )
self.m_LinglunWords_staticText1.Bind( wx.EVT_LEFT_DCLICK, self.onYanlunDClicked )
self.m_LinglunWords_staticText1.Bind( wx.EVT_MOUSEWHEEL, self.onYanlunWheeled )
def __del__( self ):
pass
# Virtual event handlers, override them in your derived class
def onResetSettingButtonSelection( self, event ):
event.Skip()
def onExitButtonPressed( self, event ):
event.Skip()
def onYanlunDClicked( self, event ):
event.Skip()
def onYanlunWheeled( self, event ):
event.Skip()
###########################################################################
## Class ConvertPagePanel
###########################################################################
class ConvertPagePanel ( wx.Panel ):
def __init__( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 652,588 ), style = wx.TAB_TRAVERSAL, name = wx.EmptyString ):
wx.Panel.__init__ ( self, parent, id = id, pos = pos, size = size, style = style, name = name )
self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
main_page_sizer = wx.BoxSizer( wx.VERTICAL )
s_midiChooseSizer = wx.BoxSizer( wx.HORIZONTAL )
MidiChooser_Delete_and_Tips_bSizer15 = wx.BoxSizer( wx.VERTICAL )
self.m_ChooseMidiTips_staticText3 = wx.StaticText( self, wx.ID_ANY, u"选择MIDI文件\n(双击移除)", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_ChooseMidiTips_staticText3.Wrap( -1 )
MidiChooser_Delete_and_Tips_bSizer15.Add( self.m_ChooseMidiTips_staticText3, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.m_done_then_remove_checkBox6 = wx.CheckBox( self, wx.ID_ANY, u"完成后移除", wx.DefaultPosition, wx.DefaultSize, 0 )
MidiChooser_Delete_and_Tips_bSizer15.Add( self.m_done_then_remove_checkBox6, 0, wx.ALL, 5 )
s_midiChooseSizer.Add( MidiChooser_Delete_and_Tips_bSizer15, 0, wx.SHAPED|wx.EXPAND, 0 )
ss_MidiChooserSizer_bSizer9 = wx.BoxSizer( wx.VERTICAL )
m_midiFilesList_listBox2Choices = []
self.m_midiFilesList_listBox2 = wx.ListBox( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_midiFilesList_listBox2Choices, wx.LB_HSCROLL|wx.LB_SORT )
ss_MidiChooserSizer_bSizer9.Add( self.m_midiFilesList_listBox2, 1, wx.EXPAND, 0 )
s_midiChooseSizer.Add( ss_MidiChooserSizer_bSizer9, 1, wx.EXPAND, 5 )
MidiChooser_Open_and_Clear_Buttons_bSizer16 = wx.BoxSizer( wx.VERTICAL )
self.m_midiBroseButton_button21 = wx.Button( self, wx.ID_ANY, u"打开…", wx.DefaultPosition, wx.DefaultSize, 0 )
MidiChooser_Open_and_Clear_Buttons_bSizer16.Add( self.m_midiBroseButton_button21, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_midiChooser_Clear_button3 = wx.Button( self, wx.ID_ANY, u"清空文件", wx.DefaultPosition, wx.DefaultSize, 0 )
MidiChooser_Open_and_Clear_Buttons_bSizer16.Add( self.m_midiChooser_Clear_button3, 0, wx.ALL, 5 )
s_midiChooseSizer.Add( MidiChooser_Open_and_Clear_Buttons_bSizer16, 0, wx.EXPAND, 5 )
main_page_sizer.Add( s_midiChooseSizer, 0, wx.EXPAND, 5 )
s_formatChooseSizer = wx.BoxSizer( wx.HORIZONTAL )
ss_outputFormatChooseSizer = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"选择输出格式" ), wx.VERTICAL )
m_outformatChoice_choice1Choices = [ u"附加包", u"BDX结构" ]
self.m_outformatChoice_choice1 = wx.Choice( ss_outputFormatChooseSizer.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_outformatChoice_choice1Choices, 0 )
self.m_outformatChoice_choice1.SetSelection( 0 )
ss_outputFormatChooseSizer.Add( self.m_outformatChoice_choice1, 0, wx.ALL|wx.EXPAND, 5 )
s_formatChooseSizer.Add( ss_outputFormatChooseSizer, 1, wx.ALL|wx.EXPAND, 5 )
ss_playerChooseSizer = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"选择播放器" ), wx.VERTICAL )
m_playerChoice_choice2Choices = [ u"计分板", u"延时", u"中继器" ]
self.m_playerChoice_choice2 = wx.Choice( ss_playerChooseSizer.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_playerChoice_choice2Choices, 0 )
self.m_playerChoice_choice2.SetSelection( 2 )
ss_playerChooseSizer.Add( self.m_playerChoice_choice2, 0, wx.ALL|wx.EXPAND, 5 )
s_formatChooseSizer.Add( ss_playerChooseSizer, 1, wx.ALL|wx.EXPAND, 5 )
main_page_sizer.Add( s_formatChooseSizer, 0, wx.EXPAND, 5 )
s_promptSizer = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"转换参数" ), wx.VERTICAL )
ss_regularPromoptsEnteringSizer1 = wx.BoxSizer( wx.HORIZONTAL )
sss_VolumnPersentageEnteringSizer = wx.StaticBoxSizer( wx.StaticBox( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"音量大小" ), wx.HORIZONTAL )
self.m_volumn_slider = wx.Slider( sss_VolumnPersentageEnteringSizer.GetStaticBox(), wx.ID_ANY, 1000, 0, 1000, wx.DefaultPosition, wx.DefaultSize, wx.SL_HORIZONTAL )
sss_VolumnPersentageEnteringSizer.Add( self.m_volumn_slider, 0, wx.ALL, 5 )
self.m_volumn_spinCtrlDouble1 = wx.SpinCtrlDouble( sss_VolumnPersentageEnteringSizer.GetStaticBox(), wx.ID_ANY, u"100", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTER_HORIZONTAL|wx.SP_ARROW_KEYS|wx.TE_PROCESS_ENTER, 0, 100, 100.000000, 0.5 )
self.m_volumn_spinCtrlDouble1.SetDigits( 2 )
sss_VolumnPersentageEnteringSizer.Add( self.m_volumn_spinCtrlDouble1, 0, wx.ALL, 5 )
ss_regularPromoptsEnteringSizer1.Add( sss_VolumnPersentageEnteringSizer, 0, wx.ALL|wx.EXPAND, 5 )
sss_SpeedEnteringSizer = wx.StaticBoxSizer( wx.StaticBox( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"播放倍速" ), wx.HORIZONTAL )
self.m_speed_slider = wx.Slider( sss_SpeedEnteringSizer.GetStaticBox(), wx.ID_ANY, 50, 0, 100, wx.DefaultPosition, wx.DefaultSize, wx.SL_HORIZONTAL )
sss_SpeedEnteringSizer.Add( self.m_speed_slider, 0, wx.ALL, 5 )
self.m_speed_spinCtrlDouble = wx.SpinCtrlDouble( sss_SpeedEnteringSizer.GetStaticBox(), wx.ID_ANY, u"1", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_CENTER_HORIZONTAL|wx.SP_ARROW_KEYS|wx.TE_PROCESS_ENTER, 0.01, 10, 1, 0.1 )
self.m_speed_spinCtrlDouble.SetDigits( 2 )
sss_SpeedEnteringSizer.Add( self.m_speed_spinCtrlDouble, 0, wx.ALL, 5 )
ss_regularPromoptsEnteringSizer1.Add( sss_SpeedEnteringSizer, 0, wx.ALL|wx.EXPAND, 5 )
s_promptSizer.Add( ss_regularPromoptsEnteringSizer1, 0, wx.EXPAND, 5 )
ss_commandCheckingSizer = wx.StaticBoxSizer( wx.StaticBox( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"指令设置" ), wx.HORIZONTAL )
self.m_progressBarEnablingCheckBox1 = wx.CheckBox( ss_commandCheckingSizer.GetStaticBox(), wx.ID_ANY, u"启用进度条", wx.DefaultPosition, wx.DefaultSize, 0 )
ss_commandCheckingSizer.Add( self.m_progressBarEnablingCheckBox1, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_oldExeFormatChecker_checkBox3 = wx.CheckBox( ss_commandCheckingSizer.GetStaticBox(), wx.ID_ANY, u"启用旧版执行指令格式", wx.DefaultPosition, wx.DefaultSize, 0 )
ss_commandCheckingSizer.Add( self.m_oldExeFormatChecker_checkBox3, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
s_promptSizer.Add( ss_commandCheckingSizer, 0, wx.EXPAND, 5 )
ss_HideAndSeekSizer_bSizer15 = wx.BoxSizer( wx.VERTICAL )
sss_ScoreboardPlayerPromptsSizer_bSizer7 = wx.BoxSizer( wx.HORIZONTAL )
self.m_EnterScoreboardNameTip_staticText4 = wx.StaticText( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"播放计分板名称", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_EnterScoreboardNameTip_staticText4.Wrap( -1 )
sss_ScoreboardPlayerPromptsSizer_bSizer7.Add( self.m_EnterScoreboardNameTip_staticText4, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_ScoreboardNameEntering_textCtrl9 = wx.TextCtrl( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"mscplay", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_ScoreboardNameEntering_textCtrl9.SetMaxLength( 10 )
sss_ScoreboardPlayerPromptsSizer_bSizer7.Add( self.m_ScoreboardNameEntering_textCtrl9, 0, wx.ALL, 5 )
self.m_staticline1 = wx.StaticLine( s_promptSizer.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
self.m_staticline1.SetMinSize( wx.Size( 2,-1 ) )
sss_ScoreboardPlayerPromptsSizer_bSizer7.Add( self.m_staticline1, 0, wx.ALL|wx.EXPAND, 5 )
self.m_IsAutoResetScoreboard_checkBox2 = wx.CheckBox( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"自动重置计分板", wx.DefaultPosition, wx.DefaultSize, wx.ALIGN_RIGHT )
sss_ScoreboardPlayerPromptsSizer_bSizer7.Add( self.m_IsAutoResetScoreboard_checkBox2, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
ss_HideAndSeekSizer_bSizer15.Add( sss_ScoreboardPlayerPromptsSizer_bSizer7, 0, wx.SHAPED|wx.EXPAND, 5 )
sss_StructurePlayerPromptsSizer_bSizer8 = wx.BoxSizer( wx.HORIZONTAL )
self.m_PlayerSelectorEnteringTips_staticText41 = wx.StaticText( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"玩家选择器", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_PlayerSelectorEnteringTips_staticText41.Wrap( -1 )
sss_StructurePlayerPromptsSizer_bSizer8.Add( self.m_PlayerSelectorEnteringTips_staticText41, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
m_PlayerSelectorEntering_comboBox1Choices = [ u"@a", u"@p", u"@e[type=player]" ]
self.m_PlayerSelectorEntering_comboBox1 = wx.ComboBox( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"@a", wx.DefaultPosition, wx.DefaultSize, m_PlayerSelectorEntering_comboBox1Choices, wx.CB_DROPDOWN|wx.TE_PROCESS_ENTER )
self.m_PlayerSelectorEntering_comboBox1.SetSelection( 0 )
sss_StructurePlayerPromptsSizer_bSizer8.Add( self.m_PlayerSelectorEntering_comboBox1, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_staticline2 = wx.StaticLine( s_promptSizer.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
self.m_staticline2.SetMinSize( wx.Size( 2,-1 ) )
sss_StructurePlayerPromptsSizer_bSizer8.Add( self.m_staticline2, 0, wx.ALL|wx.EXPAND, 5 )
self.StructureMaxHeoghtTips_ = wx.StaticText( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"结构生成最大高度", wx.DefaultPosition, wx.DefaultSize, 0 )
self.StructureMaxHeoghtTips_.Wrap( -1 )
sss_StructurePlayerPromptsSizer_bSizer8.Add( self.StructureMaxHeoghtTips_, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_StructureHeight_slider7 = wx.Slider( s_promptSizer.GetStaticBox(), wx.ID_ANY, 50, 3, 1024, wx.DefaultPosition, wx.DefaultSize, wx.SL_HORIZONTAL )
sss_StructurePlayerPromptsSizer_bSizer8.Add( self.m_StructureHeight_slider7, 0, wx.ALL, 5 )
self.m_enteringStructureMaxHeight_spinCtrl1 = wx.SpinCtrl( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"50", wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 3, 1024, 50 )
sss_StructurePlayerPromptsSizer_bSizer8.Add( self.m_enteringStructureMaxHeight_spinCtrl1, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
ss_HideAndSeekSizer_bSizer15.Add( sss_StructurePlayerPromptsSizer_bSizer8, 0, wx.SHAPED|wx.EXPAND, 5 )
sss_BDXfileSignNameSizer_bSizer13 = wx.BoxSizer( wx.HORIZONTAL )
self.m_BDXfileSignNameTips_staticText8 = wx.StaticText( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"BDX作者署名", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_BDXfileSignNameTips_staticText8.Wrap( -1 )
sss_BDXfileSignNameSizer_bSizer13.Add( self.m_BDXfileSignNameTips_staticText8, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_EnteringBDXfileSignName_textCtrl12 = wx.TextCtrl( s_promptSizer.GetStaticBox(), wx.ID_ANY, u"UserYou", wx.DefaultPosition, wx.DefaultSize, 0 )
sss_BDXfileSignNameSizer_bSizer13.Add( self.m_EnteringBDXfileSignName_textCtrl12, 0, wx.ALL, 5 )
ss_HideAndSeekSizer_bSizer15.Add( sss_BDXfileSignNameSizer_bSizer13, 0, wx.SHAPED|wx.EXPAND, 5 )
s_promptSizer.Add( ss_HideAndSeekSizer_bSizer15, 0, wx.EXPAND, 5 )
main_page_sizer.Add( s_promptSizer, 0, wx.ALL|wx.EXPAND|wx.SHAPED, 5 )
s_StartSizer_sbSizer18 = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"开始转换" ), wx.HORIZONTAL )
s_StartSizer_sbSizer18.SetMinSize( wx.Size( -1,100 ) )
ss_Midi_Convert_distPath_bSizer17 = wx.BoxSizer( wx.VERTICAL )
ss_Dest_chooser_Sizer_in_bSizer18 = wx.BoxSizer( wx.HORIZONTAL )
self.m_tip_Change_Dest_staticText7 = wx.StaticText( s_StartSizer_sbSizer18.GetStaticBox(), wx.ID_ANY, u"指定输出路径", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_tip_Change_Dest_staticText7.Wrap( -1 )
ss_Dest_chooser_Sizer_in_bSizer18.Add( self.m_tip_Change_Dest_staticText7, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_Convertion_Destination_Picker_dirPicker1 = wx.DirPickerCtrl( s_StartSizer_sbSizer18.GetStaticBox(), wx.ID_ANY, u"./", u"选择目标目录", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
ss_Dest_chooser_Sizer_in_bSizer18.Add( self.m_Convertion_Destination_Picker_dirPicker1, 1, wx.ALL|wx.EXPAND, 5 )
ss_Midi_Convert_distPath_bSizer17.Add( ss_Dest_chooser_Sizer_in_bSizer18, 0, wx.ALL|wx.EXPAND, 5 )
self.m_Check_Every_Their_Path_checkBox7 = wx.CheckBox( s_StartSizer_sbSizer18.GetStaticBox(), wx.ID_ANY, u"输出到每个文件所在目录", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_Check_Every_Their_Path_checkBox7.SetValue(True)
ss_Midi_Convert_distPath_bSizer17.Add( self.m_Check_Every_Their_Path_checkBox7, 0, wx.ALL, 5 )
s_StartSizer_sbSizer18.Add( ss_Midi_Convert_distPath_bSizer17, 1, wx.EXPAND, 5 )
self.m_start_button2 = wx.Button( s_StartSizer_sbSizer18.GetStaticBox(), wx.ID_ANY, u"开始转换", wx.DefaultPosition, wx.DefaultSize, 0 )
s_StartSizer_sbSizer18.Add( self.m_start_button2, 0, wx.ALIGN_CENTER|wx.ALL, 5 )
main_page_sizer.Add( s_StartSizer_sbSizer18, 1, wx.ALL|wx.EXPAND, 5 )
self.SetSizer( main_page_sizer )
self.Layout()
# Connect Events
self.m_ChooseMidiTips_staticText3.Bind( wx.EVT_LEFT_DCLICK, self.MidiEasterEgg )
self.m_done_then_remove_checkBox6.Bind( wx.EVT_CHECKBOX, self.on_Done_Then_Remove_Clicked )
self.m_midiFilesList_listBox2.Bind( wx.EVT_LISTBOX, self.onFileListUpdated )
self.m_midiFilesList_listBox2.Bind( wx.EVT_LISTBOX_DCLICK, self.onFileDoubleClicked )
self.m_midiBroseButton_button21.Bind( wx.EVT_BUTTON, self.openFile )
self.m_midiChooser_Clear_button3.Bind( wx.EVT_BUTTON, self.on_Chooer_Clear_Button_Pressed )
self.m_outformatChoice_choice1.Bind( wx.EVT_CHOICE, self.onOutputFormatChosen )
self.m_playerChoice_choice2.Bind( wx.EVT_CHOICE, self.onPlayerChosen )
self.m_volumn_slider.Bind( wx.EVT_SCROLL, self.onVolumeScrolling )
self.m_volumn_spinCtrlDouble1.Bind( wx.EVT_SPINCTRLDOUBLE, self.onVolumeSpinChanged )
self.m_speed_slider.Bind( wx.EVT_SCROLL, self.onSpeedScrolling )
self.m_speed_spinCtrlDouble.Bind( wx.EVT_SPINCTRLDOUBLE, self.onSpeedSpinChanged )
self.m_progressBarEnablingCheckBox1.Bind( wx.EVT_CHECKBOX, self.onProgressbarChecked )
self.m_ScoreboardNameEntering_textCtrl9.Bind( wx.EVT_TEXT, self.onScoreboredNameUpdating )
self.m_IsAutoResetScoreboard_checkBox2.Bind( wx.EVT_CHECKBOX, self.onAutoResetScoreboardChecked )
self.m_PlayerSelectorEntering_comboBox1.Bind( wx.EVT_TEXT, self.onPlayerSelectorUpdating )
self.m_StructureHeight_slider7.Bind( wx.EVT_SCROLL, self.onStructureMaxHeightScrolling )
self.m_enteringStructureMaxHeight_spinCtrl1.Bind( wx.EVT_SPINCTRL, self.onStructureMaxHeightSpinChanged )
self.m_EnteringBDXfileSignName_textCtrl12.Bind( wx.EVT_TEXT, self.onBDXfileSignNameUpdating )
self.m_tip_Change_Dest_staticText7.Bind( wx.EVT_LEFT_DCLICK, self.on_Change_to_Default_Path )
self.m_Convertion_Destination_Picker_dirPicker1.Bind( wx.EVT_DIRPICKER_CHANGED, self.on_Convert_Dest_Changed )
self.m_Check_Every_Their_Path_checkBox7.Bind( wx.EVT_CHECKBOX, self.On_Their_Path_Checked )
self.m_start_button2.Bind( wx.EVT_BUTTON, self.onStartButtonPressed )
def __del__( self ):
pass
# Virtual event handlers, override them in your derived class
def MidiEasterEgg( self, event ):
event.Skip()
def on_Done_Then_Remove_Clicked( self, event ):
event.Skip()
def onFileListUpdated( self, event ):
event.Skip()
def onFileDoubleClicked( self, event ):
event.Skip()
def openFile( self, event ):
event.Skip()
def on_Chooer_Clear_Button_Pressed( self, event ):
event.Skip()
def onOutputFormatChosen( self, event ):
event.Skip()
def onPlayerChosen( self, event ):
event.Skip()
def onVolumeScrolling( self, event ):
event.Skip()
def onVolumeSpinChanged( self, event ):
event.Skip()
def onSpeedScrolling( self, event ):
event.Skip()
def onSpeedSpinChanged( self, event ):
event.Skip()
def onProgressbarChecked( self, event ):
event.Skip()
def onScoreboredNameUpdating( self, event ):
event.Skip()
def onAutoResetScoreboardChecked( self, event ):
event.Skip()
def onPlayerSelectorUpdating( self, event ):
event.Skip()
def onStructureMaxHeightScrolling( self, event ):
event.Skip()
def onStructureMaxHeightSpinChanged( self, event ):
event.Skip()
def onBDXfileSignNameUpdating( self, event ):
event.Skip()
def on_Change_to_Default_Path( self, event ):
event.Skip()
def on_Convert_Dest_Changed( self, event ):
event.Skip()
def On_Their_Path_Checked( self, event ):
event.Skip()
def onStartButtonPressed( self, event ):
event.Skip()
###########################################################################
## Class SettingPagePannel
###########################################################################
class SettingPagePannel ( wx.Panel ):
def __init__( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 565,540 ), style = wx.TAB_TRAVERSAL, name = wx.EmptyString ):
wx.Panel.__init__ ( self, parent, id = id, pos = pos, size = size, style = style, name = name )
setting_page_sizer = wx.BoxSizer( wx.VERTICAL )
self.setting_notebook = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.NB_FIXEDWIDTH|wx.NB_MULTILINE|wx.NB_RIGHT )
self.setting_notebook.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "@OPPOSans R" ) )
self.setting_notebook.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
self.setting_page1 = wx.Panel( self.setting_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
self.setting_page1.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
setting_page1_box_sizer = wx.BoxSizer( wx.VERTICAL )
sss_customProgressBarSizer_wSizer6 = wx.WrapSizer( wx.HORIZONTAL, wx.WRAPSIZER_DEFAULT_FLAGS )
setting_page1_progressbar_style = wx.StaticBoxSizer( wx.StaticBox( self.setting_page1, wx.ID_ANY, u"进度条" ), wx.HORIZONTAL )
ssss_basicProgressStylePattle_sbSizer9 = wx.StaticBoxSizer( wx.StaticBox( setting_page1_progressbar_style.GetStaticBox(), wx.ID_ANY, u"基本样式组" ), wx.VERTICAL )
self.m_BasicProgressBarStyleEntering_textCtrl4 = wx.TextCtrl( ssss_basicProgressStylePattle_sbSizer9.GetStaticBox(), wx.ID_ANY, u"%%N [ %%s/%^s %%% __________ %%t|%^t ]", wx.DefaultPosition, wx.DefaultSize, wx.TE_LEFT|wx.TE_NO_VSCROLL )
ssss_basicProgressStylePattle_sbSizer9.Add( self.m_BasicProgressBarStyleEntering_textCtrl4, 0, wx.ALL|wx.EXPAND, 5 )
setting_page1_progressbar_style.Add( ssss_basicProgressStylePattle_sbSizer9, 1, wx.ALL|wx.EXPAND, 5 )
ssss_UnplayedPartProgressbarPattle_sbSizer10 = wx.StaticBoxSizer( wx.StaticBox( setting_page1_progressbar_style.GetStaticBox(), wx.ID_ANY, u"未播放之样式" ), wx.VERTICAL )
self.m_unplayedProgressbarStyleEntering_textCtrl5 = wx.TextCtrl( ssss_UnplayedPartProgressbarPattle_sbSizer10.GetStaticBox(), wx.ID_ANY, u"§7=§r", wx.DefaultPosition, wx.DefaultSize, wx.TE_LEFT|wx.TE_NO_VSCROLL )
ssss_UnplayedPartProgressbarPattle_sbSizer10.Add( self.m_unplayedProgressbarStyleEntering_textCtrl5, 0, wx.ALL, 5 )
setting_page1_progressbar_style.Add( ssss_UnplayedPartProgressbarPattle_sbSizer10, 1, wx.ALL|wx.EXPAND, 5 )
ssss_PlayedPartProgressbarPattle_sbSizer11 = wx.StaticBoxSizer( wx.StaticBox( setting_page1_progressbar_style.GetStaticBox(), wx.ID_ANY, u"已播放之样式" ), wx.VERTICAL )
self.m_playedProgressbarStyleEntering_textCtrl5 = wx.TextCtrl( ssss_PlayedPartProgressbarPattle_sbSizer11.GetStaticBox(), wx.ID_ANY, u"§e=§r", wx.DefaultPosition, wx.DefaultSize, wx.TE_LEFT|wx.TE_NO_VSCROLL )
ssss_PlayedPartProgressbarPattle_sbSizer11.Add( self.m_playedProgressbarStyleEntering_textCtrl5, 0, wx.ALL, 5 )
setting_page1_progressbar_style.Add( ssss_PlayedPartProgressbarPattle_sbSizer11, 1, wx.ALL|wx.EXPAND, 5 )
sss_customProgressBarSizer_wSizer6.Add( setting_page1_progressbar_style, 1, wx.ALL|wx.EXPAND, 5 )
setting_page1_experiment_style = wx.StaticBoxSizer( wx.StaticBox( self.setting_page1, wx.ID_ANY, u"实验性功能" ), wx.HORIZONTAL )
self.m_enable_experiment_checkBox = wx.CheckBox( setting_page1_experiment_style.GetStaticBox(), wx.ID_ANY, u"启用实验性功能", wx.DefaultPosition, wx.DefaultSize, 0 )
setting_page1_experiment_style.Add( self.m_enable_experiment_checkBox, 1, wx.ALL|wx.EXPAND, 5 )
experiment_type_choiceChoices = [ u"常规转换", u"长音插值", u"同刻偏移" ]
self.experiment_type_choice = wx.Choice( setting_page1_experiment_style.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, experiment_type_choiceChoices, 0 )
self.experiment_type_choice.SetSelection( 0 )
setting_page1_experiment_style.Add( self.experiment_type_choice, 2, wx.ALL|wx.EXPAND, 5 )
self.m_ignore_midi_error_checkBox = wx.CheckBox( setting_page1_experiment_style.GetStaticBox(), wx.ID_ANY, u"忽略MIDI错误", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_ignore_midi_error_checkBox.SetValue(True)
setting_page1_experiment_style.Add( self.m_ignore_midi_error_checkBox, 1, wx.ALL, 5 )
sss_customProgressBarSizer_wSizer6.Add( setting_page1_experiment_style, 1, wx.ALL|wx.EXPAND, 5 )
setting_page1_box_sizer.Add( sss_customProgressBarSizer_wSizer6, 1, wx.ALL|wx.EXPAND, 5 )
self.setting_page1.SetSizer( setting_page1_box_sizer )
self.setting_page1.Layout()
setting_page1_box_sizer.Fit( self.setting_page1 )
self.setting_notebook.AddPage( self.setting_page1, u"基本信息", True )
self.setting_page2 = wx.Panel( self.setting_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
self.setting_page2.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, wx.EmptyString ) )
setting_page2_box_sizer = wx.BoxSizer( wx.VERTICAL )
m_pitched_instrument_table_choiceChoices = [ u"“偷吃”的对照表", u"“经典”对照表" ]
self.m_pitched_instrument_table_choice = wx.Choice( self.setting_page2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_pitched_instrument_table_choiceChoices, 0 )
self.m_pitched_instrument_table_choice.SetSelection( 0 )
self.m_pitched_instrument_table_choice.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
setting_page2_box_sizer.Add( self.m_pitched_instrument_table_choice, 0, wx.ALL|wx.EXPAND, 5 )
self.m_pitched_notes_table_propertyGrid1 = pg.PropertyGrid(self.setting_page2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.propgrid.PG_BOLD_MODIFIED|wx.propgrid.PG_DEFAULT_STYLE)
self.m_pitched_notes_table_propertyGrid1.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
self.m_propertyGridItem1 = self.m_pitched_notes_table_propertyGrid1.Append( pg.StringProperty( u"乐音乐器1", u"乐音乐器1" ) )
self.m_propertyGridItem2 = self.m_pitched_notes_table_propertyGrid1.Append( pg.StringProperty( u"乐音乐器2", u"乐音乐器2" ) )
setting_page2_box_sizer.Add( self.m_pitched_notes_table_propertyGrid1, 1, wx.ALL|wx.EXPAND, 5 )
self.setting_page2.SetSizer( setting_page2_box_sizer )
self.setting_page2.Layout()
setting_page2_box_sizer.Fit( self.setting_page2 )
self.setting_notebook.AddPage( self.setting_page2, u"乐音乐器对照表", False )
self.setting_page3 = wx.Panel( self.setting_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
setting_page3_box_sizer = wx.BoxSizer( wx.VERTICAL )
m_percussion_instrument_table_choice1Choices = [ u"“偷吃”的对照表", u"“经典”对照表" ]
self.m_percussion_instrument_table_choice1 = wx.Choice( self.setting_page3, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_percussion_instrument_table_choice1Choices, 0 )
self.m_percussion_instrument_table_choice1.SetSelection( 0 )
self.m_percussion_instrument_table_choice1.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
setting_page3_box_sizer.Add( self.m_percussion_instrument_table_choice1, 0, wx.ALL|wx.EXPAND, 5 )
self.m_percussion_notes_table_propertyGrid11 = pg.PropertyGrid(self.setting_page3, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.propgrid.PG_BOLD_MODIFIED|wx.propgrid.PG_DEFAULT_STYLE)
self.m_percussion_notes_table_propertyGrid11.SetFont( wx.Font( wx.NORMAL_FONT.GetPointSize(), wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "OPPOSans R" ) )
self.m_propertyGridItem11 = self.m_percussion_notes_table_propertyGrid11.Append( pg.StringProperty( u"打击乐器1", u"打击乐器1" ) )
self.m_propertyGridItem21 = self.m_percussion_notes_table_propertyGrid11.Append( pg.StringProperty( u"打击乐器2", u"打击乐器2" ) )
setting_page3_box_sizer.Add( self.m_percussion_notes_table_propertyGrid11, 1, wx.ALL|wx.EXPAND, 5 )
self.setting_page3.SetSizer( setting_page3_box_sizer )
self.setting_page3.Layout()
setting_page3_box_sizer.Fit( self.setting_page3 )
self.setting_notebook.AddPage( self.setting_page3, u"打击乐器对照表", False )
setting_page_sizer.Add( self.setting_notebook, 1, wx.EXPAND |wx.ALL, 5 )
self.SetSizer( setting_page_sizer )
self.Layout()
# Connect Events
self.m_BasicProgressBarStyleEntering_textCtrl4.Bind( wx.EVT_TEXT, self.onProgressbarBasicStyleUpdating )
self.m_unplayedProgressbarStyleEntering_textCtrl5.Bind( wx.EVT_TEXT, self.onProgressbarUnplayedStyleUpdating )
self.m_playedProgressbarStyleEntering_textCtrl5.Bind( wx.EVT_TEXT, self.onProgressbarPlayedStyleUpdating )
self.m_enable_experiment_checkBox.Bind( wx.EVT_CHECKBOX, self.onExperimentEnableUpdating )
self.experiment_type_choice.Bind( wx.EVT_CHOICE, self.onConvertMethodUpdating )
self.m_ignore_midi_error_checkBox.Bind( wx.EVT_CHECKBOX, self.onMidiFaultIgnoranceChecking )
self.m_pitched_instrument_table_choice.Bind( wx.EVT_CHOICE, self.onPitchedInstListChanging )
self.m_pitched_notes_table_propertyGrid1.Bind( pg.EVT_PG_CHANGED, self.onPitchedInstTableChanged )
self.m_pitched_notes_table_propertyGrid1.Bind( pg.EVT_PG_CHANGING, self.onPitchedInstTableChanging )
self.m_percussion_instrument_table_choice1.Bind( wx.EVT_CHOICE, self.onPercussionInstListChanging )
self.m_percussion_notes_table_propertyGrid11.Bind( pg.EVT_PG_CHANGED, self.onPercussionInstTableChanged )
self.m_percussion_notes_table_propertyGrid11.Bind( pg.EVT_PG_CHANGING, self.onPercussionInstTableChanging )
def __del__( self ):
pass
# Virtual event handlers, override them in your derived class
def onProgressbarBasicStyleUpdating( self, event ):
event.Skip()
def onProgressbarUnplayedStyleUpdating( self, event ):
event.Skip()
def onProgressbarPlayedStyleUpdating( self, event ):
event.Skip()
def onExperimentEnableUpdating( self, event ):
event.Skip()
def onConvertMethodUpdating( self, event ):
event.Skip()
def onMidiFaultIgnoranceChecking( self, event ):
event.Skip()
def onPitchedInstListChanging( self, event ):
event.Skip()
def onPitchedInstTableChanged( self, event ):
event.Skip()
def onPitchedInstTableChanging( self, event ):
event.Skip()
def onPercussionInstListChanging( self, event ):
event.Skip()
def onPercussionInstTableChanged( self, event ):
event.Skip()
def onPercussionInstTableChanging( self, event ):
event.Skip()

215
wxFB_Project/noname-ap.py Normal file
View File

@@ -0,0 +1,215 @@
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3)
## http://www.wxformbuilder.org/
##
## PLEASE DO *NOT* EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
import wx.media
###########################################################################
## Class LingLunAuthorPageFrame
###########################################################################
class LingLunAuthorPageFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(
self,
parent,
id=wx.ID_ANY,
title=wx.EmptyString,
pos=wx.DefaultPosition,
size=wx.Size(610, 560),
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
)
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
mian_sizer = wx.BoxSizer(wx.VERTICAL)
self.m_listbook1 = wx.Listbook(
self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LB_RIGHT
)
self.trim_pannel = wx.Panel(
self.m_listbook1,
wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.TAB_TRAVERSAL,
)
what_we_called_trim_org = wx.BoxSizer(wx.VERTICAL)
bSizer2 = wx.BoxSizer(wx.HORIZONTAL)
self.m_TriMO_Theme_mediaCtrl1 = wx.media.MediaCtrl(
self.trim_pannel,
wx.ID_ANY,
wx.EmptyString,
wx.DefaultPosition,
wx.DefaultSize,
)
self.m_TriMO_Theme_mediaCtrl1.Load("TriMO_Theme.mp4")
self.m_TriMO_Theme_mediaCtrl1.SetPlaybackRate(1)
self.m_TriMO_Theme_mediaCtrl1.SetVolume(1)
self.m_TriMO_Theme_mediaCtrl1.ShowPlayerControls(
wx.media.MEDIACTRLPLAYERCONTROLS_VOLUME
)
self.m_TriMO_Theme_mediaCtrl1.Play()
bSizer2.Add(self.m_TriMO_Theme_mediaCtrl1, 1, wx.ALL | wx.EXPAND, 5)
self.m_staticText1 = wx.StaticText(
self.trim_pannel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0
)
self.m_staticText1.Wrap(-1)
bSizer2.Add(self.m_staticText1, 0, wx.ALL, 5)
what_we_called_trim_org.Add(bSizer2, 1, wx.EXPAND, 5)
self.m_staticText2 = wx.StaticText(
self.trim_pannel,
wx.ID_ANY,
"睿乐 - 我的世界多媒体组织\nTriM Org - Minecraft Muti-Media Organization ",
wx.DefaultPosition,
wx.DefaultSize,
wx.ALIGN_CENTER_HORIZONTAL,
)
self.m_staticText2.Wrap(-1)
what_we_called_trim_org.Add(self.m_staticText2, 0, wx.ALL | wx.EXPAND, 5)
self.m_textCtrl1 = wx.TextCtrl(
self.trim_pannel,
wx.ID_ANY,
"\t嗨~\n\t我们是 睿乐组织TriMO, 全称 Minecraft Muti-Media Organization意为“我的世界多媒体组织”。\n\t我们组织的主要活动是一些有关我的世界与多媒体相关的程序项目例如伶伦我的世界数字音频工作站我的世界视频播放制作器MVP等。\n\t我们组织也会尝试开发一些跟人工智能、音乐、数字音频工作站DAW等相关的内容不仅限于我的世界相关内容的开发。\n\t我们欢迎任何有相关兴趣的同志加入组织或者提交你的PR、创建你的issues、提出意见和建议\n\n电邮mailto:TriM-Organization@hotmail.com\nQ群861684859 https://jq.qq.com/?_wv=1027&k=hpeRxrYr",
wx.DefaultPosition,
wx.DefaultSize,
wx.TE_AUTO_URL | wx.TE_BESTWRAP | wx.TE_MULTILINE | wx.TE_READONLY,
)
what_we_called_trim_org.Add(self.m_textCtrl1, 0, wx.ALL | wx.EXPAND, 5)
self.trim_pannel.SetSizer(what_we_called_trim_org)
self.trim_pannel.Layout()
what_we_called_trim_org.Fit(self.trim_pannel)
self.m_listbook1.AddPage(self.trim_pannel, "睿乐组织", True)
self.eilles_pannel = wx.Panel(
self.m_listbook1,
wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.TAB_TRAVERSAL,
)
bSizer3 = wx.BoxSizer(wx.HORIZONTAL)
bSizer4 = wx.BoxSizer(wx.VERTICAL)
self.m_bitmap1 = wx.StaticBitmap(
self.eilles_pannel,
wx.ID_ANY,
wx.Bitmap("../resources/金羿ELSV4.png", wx.BITMAP_TYPE_ANY),
wx.DefaultPosition,
wx.DefaultSize,
0,
)
bSizer4.Add(self.m_bitmap1, 1, wx.ALL, 5)
self.m_staticText21 = wx.StaticText(
self.eilles_pannel,
wx.ID_ANY,
"金羿ELS\nEilles ",
wx.DefaultPosition,
wx.DefaultSize,
wx.ALIGN_CENTER_HORIZONTAL,
)
self.m_staticText21.Wrap(-1)
bSizer4.Add(self.m_staticText21, 0, wx.ALL | wx.EXPAND, 5)
self.m_textCtrl11 = wx.TextCtrl(
self.eilles_pannel,
wx.ID_ANY,
"我的世界基岩版指令作者个人开发者B 站不知名 UP 主……",
wx.DefaultPosition,
wx.DefaultSize,
wx.TE_AUTO_URL | wx.TE_BESTWRAP | wx.TE_READONLY,
)
bSizer4.Add(self.m_textCtrl11, 0, wx.ALL | wx.EXPAND, 5)
bSizer3.Add(bSizer4, 1, wx.EXPAND, 5)
self.m_staticText11 = wx.StaticText(
self.eilles_pannel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0
)
self.m_staticText11.Wrap(-1)
bSizer3.Add(self.m_staticText11, 0, wx.ALL | wx.EXPAND, 5)
self.eilles_pannel.SetSizer(bSizer3)
self.eilles_pannel.Layout()
bSizer3.Fit(self.eilles_pannel)
self.m_listbook1.AddPage(self.eilles_pannel, "金羿ELS", False)
self.bgarray_pannel = wx.Panel(
self.m_listbook1,
wx.ID_ANY,
wx.DefaultPosition,
wx.DefaultSize,
wx.TAB_TRAVERSAL,
)
bSizer31 = wx.BoxSizer(wx.HORIZONTAL)
bSizer41 = wx.BoxSizer(wx.VERTICAL)
bSizer41.Add((0, 0), 1, wx.EXPAND, 5)
self.m_staticText211 = wx.StaticText(
self.bgarray_pannel,
wx.ID_ANY,
"诸葛亮与八卦阵\nBgArray",
wx.DefaultPosition,
wx.DefaultSize,
wx.ALIGN_CENTER_HORIZONTAL,
)
self.m_staticText211.Wrap(-1)
bSizer41.Add(self.m_staticText211, 0, wx.ALL | wx.EXPAND, 5)
self.m_textCtrl111 = wx.TextCtrl(
self.bgarray_pannel,
wx.ID_ANY,
"我的世界基岩版玩家,喜欢编程和音乐。",
wx.DefaultPosition,
wx.DefaultSize,
wx.TE_AUTO_URL | wx.TE_BESTWRAP | wx.TE_READONLY,
)
bSizer41.Add(self.m_textCtrl111, 0, wx.ALL | wx.EXPAND, 5)
bSizer31.Add(bSizer41, 1, wx.EXPAND, 5)
self.m_staticText111 = wx.StaticText(
self.bgarray_pannel, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0
)
self.m_staticText111.Wrap(-1)
bSizer31.Add(self.m_staticText111, 0, wx.ALL | wx.EXPAND, 5)
self.bgarray_pannel.SetSizer(bSizer31)
self.bgarray_pannel.Layout()
bSizer31.Fit(self.bgarray_pannel)
self.m_listbook1.AddPage(self.bgarray_pannel, "诸葛八卦", False)
mian_sizer.Add(self.m_listbook1, 1, wx.EXPAND | wx.ALL, 5)
self.SetSizer(mian_sizer)
self.Layout()
self.Centre(wx.BOTH)
def __del__(self):
pass

1318
wxFB_Project/noname.py Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -5,14 +5,16 @@ import os
m = 0 m = 0
for path, dir_list, file_list in os.walk(r"./"): for path, dir_list, file_list in os.walk(r"./"):
if (r".venv" in path) or (r"wxFB_Project" in path):
continue
for file_name in file_list: for file_name in file_list:
if file_name.endswith('.py'): if file_name.endswith(".py"):
file = os.path.join(path, file_name) file = os.path.join(path, file_name)
print("得到文件名:" + str(file)) print("得到文件名:" + str(file))
for i in open(file, 'r', encoding="utf-8"): for i in open(file, "r", encoding="utf-8"):
code = i.strip() code = i.strip()
if code.startswith('#'): if code.startswith("#"):
pass pass
elif code: elif code:
print("\t" + code) print("\t" + code)