mirror of
https://github.com/TriM-Organization/Linglun-Converter.git
synced 2025-12-22 20:37:02 +00:00
Compare commits
13 Commits
LLC_GUI_v0
...
v1.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c64d9c440f | ||
|
|
28ec743b86 | ||
|
|
0139d0f130 | ||
|
|
24cf054cf0 | ||
|
|
81b824feed | ||
|
|
cb3c84d4ef | ||
|
|
264d1ec11c | ||
|
|
eaefb6f987 | ||
|
|
67ea8e1bf5 | ||
|
|
5c2a56dd50 | ||
|
|
0e36dd2418 | ||
|
|
50f1b08fc7 | ||
|
|
68d93068bb |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -11,7 +11,12 @@ __pycache__/
|
|||||||
*.bdx
|
*.bdx
|
||||||
*.json
|
*.json
|
||||||
/Musicreater
|
/Musicreater
|
||||||
|
/TrimLog
|
||||||
/logs
|
/logs
|
||||||
|
*.llc.config
|
||||||
|
/MSCT
|
||||||
|
|
||||||
|
salt.py
|
||||||
|
|
||||||
# C extensions
|
# C extensions
|
||||||
*.so
|
*.so
|
||||||
|
|||||||
@@ -203,7 +203,7 @@
|
|||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
|
||||||
Copyright 2022 Team-Ryoun 金羿("Eilles Wan") & 诸葛亮与八卦阵("bgArray")
|
Copyright © 2024 Team-Ryoun 金羿("Eilles Wan") & 诸葛亮与八卦阵("bgArray")
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
[![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) -->
|
||||||
@@ -61,5 +61,5 @@ QQ群 [861684859](https://jq.qq.com/?_wv=1027&k=hpeRxrYr)
|
|||||||
[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/github/v/release/EillesWan/Musicreater?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
|
||||||
|
|||||||
@@ -1,8 +1,32 @@
|
|||||||
## Install Runtime Environment
|
## Use a Pre-Built Release (Recommended)
|
||||||
|
|
||||||
### Install Python 3.6+
|
### 一、Download the Packed Program
|
||||||
|
|
||||||
1. First of all, you need to install the runtime environment of this library, *Python*. And a Installation Pack maybe the best choice:
|
1. Fne the newest release in [The Release Page](https://gitee.com/TriM-Organization/Linglun-Converter/releases)
|
||||||
|
|
||||||
|
<img src=https://foruda.gitee.com/images/1699105959996885442/be19644e_9911226.png>
|
||||||
|
|
||||||
|
Please consider a proper build release that satisfy your device.
|
||||||
|
|
||||||
|
### 二、Start Using
|
||||||
|
|
||||||
|
2. After downloading, extract the files and then double click `llc_win_wxPython.exe` to run.
|
||||||
|
|
||||||
|
<img src=https://foruda.gitee.com/images/1699106497816902973/48dc0942_9911226.png>
|
||||||
|
<img src=https://foruda.gitee.com/images/1699106542397488143/5638cd3e_9911226.png>
|
||||||
|
<img src=https://foruda.gitee.com/images/1699106557013748881/70f90fac_9911226.png>
|
||||||
|
|
||||||
|
3. Start to use now.
|
||||||
|
|
||||||
|
<img src=https://foruda.gitee.com/images/1699106948861444130/30c156bc_9911226.png>
|
||||||
|
|
||||||
|
## Run From Source Code (latest functions provided)
|
||||||
|
|
||||||
|
### Install Runtime Environment
|
||||||
|
|
||||||
|
#### Install Python 3.8+
|
||||||
|
|
||||||
|
1. First of all, you need to install the runtime environment of this library, *Python*. But please ensure that the version is above 3.8. Maybe a Installation Pack could be one of the choices:
|
||||||
|
|
||||||
> [Downloading Python 64-bit](https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe)
|
> [Downloading Python 64-bit](https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe)
|
||||||
> [Downloading Python 32-bit](https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe)
|
> [Downloading Python 32-bit](https://www.python.org/ftp/python/3.8.10/python-3.8.10.exe)
|
||||||
@@ -22,7 +46,7 @@
|
|||||||
<img src=https://foruda.gitee.com/images/1659972669907359295/cmd.png>
|
<img src=https://foruda.gitee.com/images/1659972669907359295/cmd.png>
|
||||||
|
|
||||||
|
|
||||||
### Installing Requirements
|
#### Installing Requirements
|
||||||
|
|
||||||
1. It's better to open your *Terminal*(CMD/PowerShell/Bash/etc) under Administrator Mode.
|
1. It's better to open your *Terminal*(CMD/PowerShell/Bash/etc) under Administrator Mode.
|
||||||
|
|
||||||
@@ -42,14 +66,14 @@
|
|||||||
<img src="https://foruda.gitee.com/images/1662737676719454287/f61a70f7_9911226.png">
|
<img src="https://foruda.gitee.com/images/1662737676719454287/f61a70f7_9911226.png">
|
||||||
|
|
||||||
|
|
||||||
## Downloading & Using of this tool
|
### Downloading & Using of this tool
|
||||||
|
|
||||||
1. Download This Package and Demo(s)
|
1. Download This Package
|
||||||
|
|
||||||
- If you use Git, you can clone this lib via the following commands:
|
- If you use Git, you can clone this lib via the following commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone -b pkgver https://github.com/TriM-Organization/Musicreater.git
|
git clone https://github.com/TriM-Organization/Linglun-Converter.git
|
||||||
```
|
```
|
||||||
|
|
||||||
- If Git is not installed, you can download the zip package from the code page(from [GitHub](https://github.com/TriM-Organization/Musicreater.git) or [Gitee](https://gitee.com/TriM-Organization/Musicreater.git)). Or you are a Chinese fan having a QQ account, you can [Join the QQ Group 861684859](https://jq.qq.com/?_wv=1027&k=hpeRxrYr) and get it from our GroupFiles.
|
- If Git is not installed, you can download the zip package from the code page(from [GitHub](https://github.com/TriM-Organization/Musicreater.git) or [Gitee](https://gitee.com/TriM-Organization/Musicreater.git)). Or you are a Chinese fan having a QQ account, you can [Join the QQ Group 861684859](https://jq.qq.com/?_wv=1027&k=hpeRxrYr) and get it from our GroupFiles.
|
||||||
@@ -59,9 +83,9 @@
|
|||||||
But it should be noticed that you're clear instructed to choose the branch "pkgver" first instead of downloading it directly from the "master" branch, the master branch is now under developing and has no practical use.
|
But it should be noticed that you're clear instructed to choose the branch "pkgver" first instead of downloading it directly from the "master" branch, the master branch is now under developing and has no practical use.
|
||||||
|
|
||||||
|
|
||||||
2. Start Using Demo(s)
|
2. Start Using
|
||||||
|
|
||||||
You can directly double click `magicDemo.py` to run the demo, or follow instructions below using Terminal APP to run it.
|
You can directly double click `llc_xxx(_xxx).py` to run the demo, or follow instructions below using Terminal APP to run it.
|
||||||
|
|
||||||
Open your terminal in the directory of this, taking CMD, for example, just enter the directory and enter `cmd` in the path box:
|
Open your terminal in the directory of this, taking CMD, for example, just enter the directory and enter `cmd` in the path box:
|
||||||
|
|
||||||
@@ -71,11 +95,11 @@
|
|||||||
And enter the commands below:
|
And enter the commands below:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python ./magicDemo.py
|
python ./llc_win_wxPython.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Addition for Error(s) Using or Installing
|
### Addition for Error(s) Using or Installing
|
||||||
|
|
||||||
1. Environment Error of Microsoft Visual C++ Redistributable
|
1. Environment Error of Microsoft Visual C++ Redistributable
|
||||||
|
|
||||||
|
|||||||
171
llc_cli.py
171
llc_cli.py
@@ -4,22 +4,23 @@
|
|||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
伶伦转换器
|
伶伦转换器 命令行
|
||||||
Linglun Converter
|
Linglun Converter CLI
|
||||||
|
|
||||||
版权所有 © 2023 金羿 & 睿穆开发组
|
版权所有 © 2024 金羿 & 睿乐开发组
|
||||||
Copyright © 2023 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,8 +30,14 @@ 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 MainConsole, 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
|
||||||
|
|
||||||
@@ -41,26 +48,30 @@ MainConsole.print(
|
|||||||
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")
|
MainConsole.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(
|
MainConsole.rule(
|
||||||
title="[#AB70FF]版本{} | 音·创内核版本{}".format(__version__, Musicreater.__version__),
|
title="[#AB70FF]版本{} | 音·创内核版本{}".format(
|
||||||
|
__version__, Musicreater.__version__
|
||||||
|
),
|
||||||
characters="-",
|
characters="-",
|
||||||
style="#26E2FF",
|
style="#26E2FF",
|
||||||
)
|
)
|
||||||
@@ -70,14 +81,18 @@ nowYang = datetime.datetime.now()
|
|||||||
if nowYang.month == 8 and nowYang.day == 6:
|
if nowYang.month == 8 and nowYang.day == 6:
|
||||||
# 诸葛八卦生日
|
# 诸葛八卦生日
|
||||||
MainConsole.print(
|
MainConsole.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(
|
MainConsole.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",
|
||||||
)
|
)
|
||||||
@@ -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):
|
||||||
|
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("结束。换行以退出程序。")
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
伶伦转换器暨模组特用奇巧
|
伶伦转换器暨模组特用奇巧
|
||||||
Linglun Converter for Special Use with addons
|
Linglun Converter for Special Use with addons
|
||||||
|
|
||||||
版权所有 © 2023 金羿 & 睿穆开发组
|
版权所有 © 2024 金羿 & 睿乐开发组
|
||||||
Copyright © 2023 EillesWan & TriM Org.
|
Copyright © 2024 EillesWan & TriM Org.
|
||||||
|
|
||||||
开源相关声明请见 ./License.md
|
开源相关声明请见 ./License.md
|
||||||
Terms & Conditions: ./Lisense.md
|
Terms & Conditions: ./Lisense.md
|
||||||
|
|||||||
1561
llc_win_wxPython.py
1561
llc_win_wxPython.py
File diff suppressed because it is too large
Load Diff
@@ -1,2 +1,3 @@
|
|||||||
Musicreater>=1.0.0
|
Musicreater>=1.7.2.1
|
||||||
TrimLog>=0.7.2
|
TrimLog>=0.8.3
|
||||||
|
requests>=2.0.0
|
||||||
79
utils/io.py
79
utils/io.py
@@ -1,32 +1,52 @@
|
|||||||
import urllib.error
|
# -*- coding: utf-8 -*-
|
||||||
import urllib.request
|
|
||||||
from typing import Any, Callable, Dict, List, Literal, Optional, Set, TextIO, Tuple
|
|
||||||
|
|
||||||
import TrimLog
|
"""
|
||||||
from TrimLog import Console, object_constants
|
伶伦转换器 命令行组件
|
||||||
|
Linglun Converter Command Line IO Component
|
||||||
|
|
||||||
is_logging: bool = True
|
版权所有 © 2024 金羿 & 睿乐开发组
|
||||||
|
Copyright © 2024 EillesWan & TriM Org.
|
||||||
|
|
||||||
MainConsole = Console()
|
开源相关声明请见 ./License.md
|
||||||
osc = object_constants.ObjectStateConstant()
|
Terms & Conditions: ./Lisense.md
|
||||||
logger = TrimLog.Logger(
|
"""
|
||||||
is_logging=is_logging,
|
|
||||||
printing=not osc.isRelease,
|
|
||||||
in_suffix=".llc",
|
import requests
|
||||||
|
from typing import (
|
||||||
|
Any,
|
||||||
|
Callable,
|
||||||
|
Dict,
|
||||||
|
List,
|
||||||
|
Literal,
|
||||||
|
Optional,
|
||||||
|
Set,
|
||||||
|
TextIO,
|
||||||
|
Tuple,
|
||||||
|
Iterable,
|
||||||
|
Sequence,
|
||||||
|
Union,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
import TrimLog
|
||||||
|
from TrimLog import object_constants, logger, log__init__
|
||||||
|
|
||||||
|
|
||||||
|
logger.is_logging = True
|
||||||
|
logger.suffix = ".llc"
|
||||||
|
logger.is_tips = True
|
||||||
|
|
||||||
|
logger.info("读取 言·论 信息……")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
myWords = (
|
myWords = (
|
||||||
urllib.request.urlopen(
|
requests.get(
|
||||||
"https://gitee.com/TriM-Organization/LinglunStudio/raw/master/resources/myWords.txt"
|
"https://gitee.com/TriM-Organization/LinglunStudio/raw/master/resources/myWords.txt",
|
||||||
)
|
).text
|
||||||
.read()
|
|
||||||
.decode("utf-8")
|
|
||||||
.strip("\n")
|
.strip("\n")
|
||||||
.split("\n")
|
.split("\n")
|
||||||
)
|
)
|
||||||
except (ConnectionError, urllib.error.HTTPError) as E:
|
except (ConnectionError, requests.HTTPError, requests.RequestException) as E:
|
||||||
logger.warning(f"读取言·论信息发生 互联网连接 错误:\n{E}")
|
logger.warning(f"读取言·论信息发生 互联网连接 错误:\n{E}")
|
||||||
myWords = ["以梦想为驱使 创造属于自己的未来"]
|
myWords = ["以梦想为驱使 创造属于自己的未来"]
|
||||||
# noinspection PyBroadException
|
# noinspection PyBroadException
|
||||||
@@ -35,6 +55,9 @@ except BaseException as E:
|
|||||||
myWords = ["灵光焕发 深艺献心"]
|
myWords = ["灵光焕发 深艺献心"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
logger.info("注册出入方法……")
|
||||||
|
|
||||||
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"]
|
||||||
|
|
||||||
@@ -74,7 +97,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,
|
||||||
@@ -135,7 +158,7 @@ def ipt(
|
|||||||
Returns:
|
Returns:
|
||||||
str: 从stdin读取的字符串
|
str: 从stdin读取的字符串
|
||||||
"""
|
"""
|
||||||
MainConsole.print(
|
logger.console.print(
|
||||||
*objects,
|
*objects,
|
||||||
sep=sep,
|
sep=sep,
|
||||||
end="",
|
end="",
|
||||||
@@ -153,7 +176,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(
|
||||||
@@ -189,27 +212,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")
|
||||||
@@ -238,12 +262,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
|
|
||||||
|
|||||||
29
utils/localize.py
Normal file
29
utils/localize.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
伶伦转换器 本地化组件
|
||||||
|
Linglun Converter Language Localization Component
|
||||||
|
|
||||||
|
版权所有 © 2024 金羿 & 睿乐开发组
|
||||||
|
Copyright © 2024 EillesWan & TriM Org.
|
||||||
|
|
||||||
|
开源相关声明请见 ./License.md
|
||||||
|
Terms & Conditions: ./Lisense.md
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
from .io import logger, Any
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def _() -> str:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def main():
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
120
utils/packdata.py
Normal file
120
utils/packdata.py
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
伶伦转换器 打包存档组件
|
||||||
|
Linglun Converter Language Localization Component
|
||||||
|
|
||||||
|
版权所有 © 2024 金羿 & 睿乐开发组
|
||||||
|
Copyright © 2024 EillesWan & TriM Org.
|
||||||
|
|
||||||
|
开源相关声明请见 ./License.md
|
||||||
|
Terms & Conditions: ./Lisense.md
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
import dill
|
||||||
|
import brotli
|
||||||
|
|
||||||
|
from .salt import salt
|
||||||
|
from .io import Any
|
||||||
|
|
||||||
|
|
||||||
|
def unpack_llc_pack(from_dist: str, raise_error: bool = True):
|
||||||
|
with open(from_dist, "rb") as f:
|
||||||
|
salty_sha256_value, md5_value, packed_bytes = f.read().split(b" | \n", 2)
|
||||||
|
|
||||||
|
if (md5_value == hashlib.md5(packed_bytes).digest()) and (
|
||||||
|
salty_sha256_value
|
||||||
|
== hashlib.pbkdf2_hmac("sha256", md5_value + packed_bytes, salt, 16)
|
||||||
|
):
|
||||||
|
return dill.loads(
|
||||||
|
brotli.decompress(packed_bytes),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if raise_error:
|
||||||
|
raise ValueError("文件读取失败:签名不一致,可能存在注入风险。")
|
||||||
|
else:
|
||||||
|
return ValueError("文件读取失败:签名不一致,可能存在注入风险。")
|
||||||
|
|
||||||
|
|
||||||
|
def enpack_llc_pack(sth: Any, to_dist: str):
|
||||||
|
packing_bytes = brotli.compress(
|
||||||
|
dill.dumps(
|
||||||
|
sth,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
md5_value = hashlib.md5(packing_bytes).digest() # 长度 16
|
||||||
|
|
||||||
|
salty_sha256_value = hashlib.pbkdf2_hmac(
|
||||||
|
"sha256", md5_value + packing_bytes, salt, 16
|
||||||
|
) # 长度 32
|
||||||
|
|
||||||
|
with open(
|
||||||
|
to_dist,
|
||||||
|
"wb",
|
||||||
|
) as f:
|
||||||
|
f.write(salty_sha256_value)
|
||||||
|
f.write(b" | \n")
|
||||||
|
f.write(md5_value)
|
||||||
|
f.write(b" | \n")
|
||||||
|
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
|
||||||
|
)
|
||||||
|
)
|
||||||
158
utils/update_check.py
Normal file
158
utils/update_check.py
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
伶伦转换器 版本检查组件
|
||||||
|
Linglun Converter Version Checking Component
|
||||||
|
|
||||||
|
版权所有 © 2024 金羿 & 睿乐开发组
|
||||||
|
Copyright © 2024 EillesWan & TriM Org.
|
||||||
|
|
||||||
|
开源相关声明请见 ./License.md
|
||||||
|
Terms & Conditions: ./Lisense.md
|
||||||
|
"""
|
||||||
|
|
||||||
|
from .io import TrimLog, requests, Sequence, Iterable, Callable, Optional, Dict, Union
|
||||||
|
|
||||||
|
|
||||||
|
def is_ver_char(text: str) -> bool:
|
||||||
|
return text.isnumeric() or text == "."
|
||||||
|
|
||||||
|
|
||||||
|
def cut_ver_str(text: str) -> str:
|
||||||
|
text += " "
|
||||||
|
len_of_text = len(text) - 1
|
||||||
|
i = 0
|
||||||
|
while i <= len_of_text:
|
||||||
|
if is_ver_char(text[i]) and (text[i + 1] if i < len_of_text else False):
|
||||||
|
j = i
|
||||||
|
while is_ver_char(text[j]) and j < len_of_text:
|
||||||
|
j += 1
|
||||||
|
temp_str = text[i:j].strip()
|
||||||
|
if ("." in temp_str) and (temp_str[0] != ".") and (temp_str[-1] != "."):
|
||||||
|
return temp_str
|
||||||
|
i = j
|
||||||
|
i += 1
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
def get_ver_str(text: str) -> Iterable[str]:
|
||||||
|
text += " "
|
||||||
|
all_ver_str = []
|
||||||
|
len_of_text = len(text) - 1
|
||||||
|
i = 0
|
||||||
|
while i <= len_of_text:
|
||||||
|
if is_ver_char(text[i]) and (text[i + 1] if i < len_of_text else False):
|
||||||
|
j = i
|
||||||
|
while is_ver_char(text[j]) and j < len_of_text:
|
||||||
|
j += 1
|
||||||
|
temp_str = text[i:j].strip()
|
||||||
|
if ("." in temp_str) and (temp_str[0] != ".") and (temp_str[-1] != "."):
|
||||||
|
all_ver_str.append(temp_str)
|
||||||
|
i = j
|
||||||
|
i += 1
|
||||||
|
return all_ver_str
|
||||||
|
|
||||||
|
|
||||||
|
def is_ver_bigger(ver_1: Sequence[int], ver_2: Sequence[int]) -> bool:
|
||||||
|
len_v1 = len(ver_1)
|
||||||
|
len_v2 = len(ver_2)
|
||||||
|
for i in range(min(len_v1, len_v2)):
|
||||||
|
if ver_1[i] == ver_2[i]:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
return ver_1[i] > ver_2[i]
|
||||||
|
return len_v1 > len_v2
|
||||||
|
|
||||||
|
|
||||||
|
def check_update_repo(
|
||||||
|
appname: str,
|
||||||
|
get_text_url: str,
|
||||||
|
version_now: str,
|
||||||
|
message_show_fun: Callable,
|
||||||
|
logger: TrimLog.Logger,
|
||||||
|
version_disp: Optional[str] = None,
|
||||||
|
version_renew_tip: str = "!有新版本!\n最新的 {app} 已经是 {latest} 版本,当前您正在使用的仍是 {current} 版本,您可以前往下载地址更新。",
|
||||||
|
):
|
||||||
|
if not version_disp:
|
||||||
|
version_disp = version_now
|
||||||
|
|
||||||
|
logger.info("当前 {} 版本:{}".format(appname,version_now))
|
||||||
|
try:
|
||||||
|
code_content: str = requests.get(get_text_url).text
|
||||||
|
except Exception as E: # noinspection PyBroadException
|
||||||
|
logger.warning("无法获取更新版本信息:{}".format(E))
|
||||||
|
return
|
||||||
|
|
||||||
|
code_content = code_content[code_content.find("__version__") :]
|
||||||
|
code_content = code_content[code_content.find('"') + 1 :]
|
||||||
|
version_content = code_content[: code_content.find('"')]
|
||||||
|
|
||||||
|
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 "__zhver__" in code_content:
|
||||||
|
code_content = code_content[code_content.find("__zhver__") :]
|
||||||
|
code_content = code_content[code_content.find('"') + 1 :]
|
||||||
|
version_content = code_content[: code_content.find('"')]
|
||||||
|
|
||||||
|
message_show_fun(
|
||||||
|
version_renew_tip.format(
|
||||||
|
app=appname, latest=version_content, current=version_disp
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# code_content = code_content[code_content.find('"')+1:]
|
||||||
|
|
||||||
|
# version_content = code_content[:code_content.find('"')]
|
||||||
|
|
||||||
|
# version_content_len = len(version_content)
|
||||||
|
|
||||||
|
# for i in range(version_content_len):
|
||||||
|
# if is_ver_char(version_content[i]) and (version_content[i+1] if i < version_content.__len__() else False):
|
||||||
|
# j = i
|
||||||
|
# while is_ver_char(version_content[j]):j+=1
|
||||||
|
# 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('.')
|
||||||
|
|
||||||
|
|
||||||
|
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"]
|
||||||
|
]
|
||||||
|
)
|
||||||
147
utils/webview.py
Normal file
147
utils/webview.py
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
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>',
|
||||||
|
)
|
||||||
3131
wxFB_Project/LingLunConverter1.fbp
Normal file
3131
wxFB_Project/LingLunConverter1.fbp
Normal file
File diff suppressed because it is too large
Load Diff
3567
wxFB_Project/LingLunConverter1_1.fbp
Normal file
3567
wxFB_Project/LingLunConverter1_1.fbp
Normal file
File diff suppressed because it is too large
Load Diff
478
wxFB_Project/generated1.py
Normal file
478
wxFB_Project/generated1.py
Normal file
@@ -0,0 +1,478 @@
|
|||||||
|
# -*- 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_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 )
|
||||||
|
main_page_sizer = wx.BoxSizer( wx.VERTICAL )
|
||||||
|
|
||||||
|
s_midiChooseSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||||
|
|
||||||
|
self.m_ChooseMidiTips_staticText3 = wx.StaticText( self.convert_page, wx.ID_ANY, u"选择MIDI文件\n(双击移除)", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
self.m_ChooseMidiTips_staticText3.Wrap( -1 )
|
||||||
|
|
||||||
|
s_midiChooseSizer.Add( self.m_ChooseMidiTips_staticText3, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||||
|
|
||||||
|
ss_MidiChooserSizer_bSizer9 = wx.BoxSizer( wx.VERTICAL )
|
||||||
|
|
||||||
|
m_midiFilesList_listBox2Choices = []
|
||||||
|
self.m_midiFilesList_listBox2 = wx.ListBox( self.convert_page, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_midiFilesList_listBox2Choices, wx.LB_HSCROLL|wx.LB_SORT )
|
||||||
|
ss_MidiChooserSizer_bSizer9.Add( self.m_midiFilesList_listBox2, 0, wx.EXPAND, 0 )
|
||||||
|
|
||||||
|
|
||||||
|
s_midiChooseSizer.Add( ss_MidiChooserSizer_bSizer9, 1, wx.EXPAND, 5 )
|
||||||
|
|
||||||
|
self.m_midiBroseButton_button21 = wx.Button( self.convert_page, wx.ID_ANY, u"打开…", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
s_midiChooseSizer.Add( self.m_midiBroseButton_button21, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||||
|
|
||||||
|
|
||||||
|
main_page_sizer.Add( s_midiChooseSizer, 0, wx.EXPAND, 5 )
|
||||||
|
|
||||||
|
s_formatChooseSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||||
|
|
||||||
|
ss_outputFormatChooseSizer = wx.StaticBoxSizer( wx.StaticBox( self.convert_page, 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.convert_page, 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.convert_page, 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|wx.SHAPED|wx.ALIGN_CENTER_VERTICAL, 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|wx.SHAPED|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||||
|
|
||||||
|
|
||||||
|
s_promptSizer.Add( ss_regularPromoptsEnteringSizer1, 0, wx.ALIGN_CENTER_HORIZONTAL|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.SHAPED|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 5 )
|
||||||
|
|
||||||
|
s_StartSizer_sbSizer18 = wx.StaticBoxSizer( wx.StaticBox( self.convert_page, wx.ID_ANY, u"开始转换" ), wx.HORIZONTAL )
|
||||||
|
|
||||||
|
s_StartSizer_sbSizer18.SetMinSize( wx.Size( -1,100 ) )
|
||||||
|
|
||||||
|
s_StartSizer_sbSizer18.Add( ( 0, 0), 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|wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 5 )
|
||||||
|
|
||||||
|
|
||||||
|
self.convert_page.SetSizer( main_page_sizer )
|
||||||
|
self.convert_page.Layout()
|
||||||
|
main_page_sizer.Fit( self.convert_page )
|
||||||
|
self.mian_notebook.AddPage( self.convert_page, u"开始转换", False )
|
||||||
|
self.setting_page = wx.Panel( self.mian_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
|
||||||
|
setting_page_sizer = wx.BoxSizer( wx.VERTICAL )
|
||||||
|
|
||||||
|
self.setting_notebook = wx.Notebook( self.setting_page, 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.ALIGN_CENTER_VERTICAL|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|wx.ALIGN_CENTER_VERTICAL, 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.ALIGN_CENTER_VERTICAL|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.ALIGN_CENTER_HORIZONTAL|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|wx.ALIGN_CENTER_HORIZONTAL, 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|wx.ALIGN_CENTER_HORIZONTAL, 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|wx.ALIGN_CENTER_HORIZONTAL, 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.setting_page.SetSizer( setting_page_sizer )
|
||||||
|
self.setting_page.Layout()
|
||||||
|
setting_page_sizer.Fit( self.setting_page )
|
||||||
|
self.mian_notebook.AddPage( self.setting_page, u"数据设置", True )
|
||||||
|
|
||||||
|
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.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 )
|
||||||
|
self.m_ChooseMidiTips_staticText3.Bind( wx.EVT_LEFT_DCLICK, self.MidiEasterEgg )
|
||||||
|
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_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_start_button2.Bind( wx.EVT_BUTTON, self.onStartButtonPressed )
|
||||||
|
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 )
|
||||||
|
|
||||||
|
def __del__( self ):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# Virtual event handlers, override them in your derived class
|
||||||
|
def onExitButtonPressed( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onYanlunDClicked( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onYanlunWheeled( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def MidiEasterEgg( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onFileListUpdated( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onFileDoubleClicked( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def openFile( 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 onStartButtonPressed( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onProgressbarBasicStyleUpdating( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onProgressbarUnplayedStyleUpdating( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onProgressbarPlayedStyleUpdating( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
|
||||||
514
wxFB_Project/generated1_1.py
Normal file
514
wxFB_Project/generated1_1.py
Normal file
@@ -0,0 +1,514 @@
|
|||||||
|
# -*- 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_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"开始转换", False )
|
||||||
|
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"数据设置", True )
|
||||||
|
|
||||||
|
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.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 onExitButtonPressed( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onYanlunDClicked( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onYanlunWheeled( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
|
||||||
|
###########################################################################
|
||||||
|
## Class convert_page_panel
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
class convert_page_panel ( 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 )
|
||||||
|
|
||||||
|
self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_WINDOW ) )
|
||||||
|
|
||||||
|
main_page_sizer = wx.BoxSizer( wx.VERTICAL )
|
||||||
|
|
||||||
|
s_midiChooseSizer = wx.BoxSizer( wx.HORIZONTAL )
|
||||||
|
|
||||||
|
self.m_ChooseMidiTips_staticText3 = wx.StaticText( self, wx.ID_ANY, u"选择MIDI文件\n(双击移除)", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
self.m_ChooseMidiTips_staticText3.Wrap( -1 )
|
||||||
|
|
||||||
|
s_midiChooseSizer.Add( self.m_ChooseMidiTips_staticText3, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||||
|
|
||||||
|
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, 0, wx.EXPAND, 0 )
|
||||||
|
|
||||||
|
|
||||||
|
s_midiChooseSizer.Add( ss_MidiChooserSizer_bSizer9, 1, wx.EXPAND, 5 )
|
||||||
|
|
||||||
|
self.m_midiBroseButton_button21 = wx.Button( self, wx.ID_ANY, u"打开…", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||||
|
s_midiChooseSizer.Add( self.m_midiBroseButton_button21, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 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|wx.SHAPED|wx.ALIGN_CENTER_VERTICAL, 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|wx.SHAPED|wx.ALIGN_CENTER_VERTICAL, 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.SHAPED|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 5 )
|
||||||
|
|
||||||
|
s_StartSizer_sbSizer18 = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"开始转换" ), wx.HORIZONTAL )
|
||||||
|
|
||||||
|
s_StartSizer_sbSizer18.SetMinSize( wx.Size( -1,100 ) )
|
||||||
|
|
||||||
|
s_StartSizer_sbSizer18.Add( ( 0, 0), 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|wx.RESERVE_SPACE_EVEN_IF_HIDDEN, 5 )
|
||||||
|
|
||||||
|
|
||||||
|
self.SetSizer( main_page_sizer )
|
||||||
|
self.Layout()
|
||||||
|
|
||||||
|
# Connect Events
|
||||||
|
self.m_ChooseMidiTips_staticText3.Bind( wx.EVT_LEFT_DCLICK, self.MidiEasterEgg )
|
||||||
|
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_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_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 onFileListUpdated( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def onFileDoubleClicked( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
def openFile( 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 onStartButtonPressed( self, event ):
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
|
|
||||||
|
###########################################################################
|
||||||
|
## Class setting_page_pannel
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
class setting_page_pannel ( 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.ALIGN_CENTER_VERTICAL|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|wx.ALIGN_CENTER_VERTICAL, 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.ALIGN_CENTER_VERTICAL|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.ALIGN_CENTER_HORIZONTAL|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|wx.ALIGN_CENTER_HORIZONTAL, 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|wx.ALIGN_CENTER_HORIZONTAL, 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|wx.ALIGN_CENTER_HORIZONTAL, 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 )
|
||||||
|
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
612
wxFB_Project/noname.py
Normal file
612
wxFB_Project/noname.py
Normal 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()
|
||||||
|
|
||||||
|
|
||||||
23
自我陶醉.py
Normal file
23
自我陶醉.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# -*- conding: utf8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
m = 0
|
||||||
|
|
||||||
|
for path, dir_list, file_list in os.walk(r"./"):
|
||||||
|
for file_name in file_list:
|
||||||
|
if file_name.endswith('.py'):
|
||||||
|
file = os.path.join(path, file_name)
|
||||||
|
print("得到文件名:" + str(file))
|
||||||
|
for i in open(file, 'r', encoding="utf-8"):
|
||||||
|
code = i.strip()
|
||||||
|
|
||||||
|
if code.startswith('#'):
|
||||||
|
pass
|
||||||
|
elif code:
|
||||||
|
print("\t" + code)
|
||||||
|
m += 1
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
|
input("\n最终代码行数为:" + str(m))
|
||||||
Reference in New Issue
Block a user