This commit is contained in:
恍兮惚兮 2024-12-25 16:05:42 +08:00
parent 2b1e8f322f
commit b1385a9e74
24 changed files with 309 additions and 382 deletions

View File

@ -522,6 +522,16 @@ namespace
last = s;
buffer->from(s);
}
void PCSG01036(TextBuffer *buffer, HookParam *hp)
{
auto s = buffer->strA();
static std::string last;
if (last == s)
return buffer->clear();
last = s;
strReplace(s, "#n", "");
buffer->from(s);
}
void FPCSG00815(TextBuffer *buffer, HookParam *hp)
{
auto s = buffer->strA();
@ -795,6 +805,10 @@ namespace
{0x8005426C, {CODEC_UTF8, 0, 0, 0, PCSG01068, "PCSG01068"}},
// スカーレッドライダーゼクス Rev.
{0x800BEE38, {CODEC_UTF8, 0, 0, 0, PCSG00787, "PCSG00745"}},
// 緋色の欠片 ~おもいいろの記憶~
{0x8007838c, {CODEC_UTF8, 5, 0, 0, PCSG01036, "PCSG01036"}},
{0x8001154c, {CODEC_UTF8, 8, 0, 0, PCSG01036, "PCSG01036"}},
{0x800879ee, {CODEC_UTF8, 2, 0, 0, PCSG01036, "PCSG01036"}},
};
return 1;
}();

View File

@ -1,7 +1,7 @@
set(VERSION_MAJOR 6)
set(VERSION_MINOR 15)
set(VERSION_PATCH 2)
set(VERSION_PATCH 3)
set(VERSION_REVISION 0)
set(LUNA_VERSION "{${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_REVISION}}")
add_library(VERSION_DEF ${CMAKE_CURRENT_LIST_DIR}/version_def.cpp)

View File

@ -96,8 +96,8 @@
N无视上下文
寄存器的data_offset
* 32位 -4 for EAX, -8 for ECX, -C for EDX, -10 for EBX, -14 for ESP, -18 for EBP, -1C for ESI, -20 for EDI
* 64位 -C for RAX, -14 for RBX, -1C for RCX, -24 for RDX, and so on for RSP, RBP, RSI, RDI, R8-R15
* 32位 EAX -4, ECX -8, EDX -C, EBX -10, ESP -14, EBP -18, ESI -1C, EDI -20
* 64位 RAX -C, RBX -14, RCX -1C, RDX -24, RSP -2C, RBP -34, RSI -3C, RDI -44, R8 -4C, R9 -54, R10 -5C, R11 -64, R12 -6C, R13 -74, R14 -7C, R15 -84
1. #### JIT HOOK

View File

@ -1089,6 +1089,7 @@ class MAINUI:
fontsize=globalconfig["settingfontsize"] + 4,
fonttype=globalconfig["settingfonttype"],
)
style+="QGroupBox#notitle{ margin-top:0px;} QGroupBox#notitle:title {margin-top: 0px;}"
self.commonstylebase.setStyleSheet(style)
font = QFont()
font.setFamily(globalconfig["settingfonttype"])

View File

@ -2378,12 +2378,11 @@ class mdict(cishubase):
csscollect: dict,
):
base = os.path.dirname(fn)
src_pattern = r'src="([^"]+)"'
href_pattern = r'href="([^"]+)"'
src_matches = re.findall(src_pattern, html_content)
href_matches = re.findall(href_pattern, html_content)
for url in src_matches + href_matches:
matches = re.findall('src="([^"]+)"', html_content)
matches += re.findall('href="([^"]+)"', html_content)
matches += re.findall("""href='([^']+)'""", html_content)
matches += re.findall("""src='([^']+)'""", html_content)
for url in matches:
if url.startswith("#"): # a href # 页内跳转
continue
try:
@ -2468,11 +2467,11 @@ class mdict(cishubase):
contents = []
idx = 0
for _, foldflow, title, res in allres:
klass2='tab-pane_mdict_internal'
klass1='tab-button_mdict_internal'
if idx==0:
klass2+=' active'
klass1+=' active'
klass2 = "tab-pane_mdict_internal"
klass1 = "tab-button_mdict_internal"
if idx == 0:
klass2 += " active"
klass1 += " active"
btns.append(
"""<button type="button" onclick="onclickbtn_mdict_internal('buttonid_mdict_internal{idx}')" id="buttonid_mdict_internal{idx}" class="{klass}" data-tab="tab_mdict_internal{idx}">{title}</button>""".format(
idx=idx, title=title, klass=klass1

View File

@ -4,6 +4,7 @@ from qtsymbols import *
import os, functools, uuid
from traceback import print_exc
import gobject, qtawesome
from gui.inputdialog import autoinitdialog
from gui.dynalang import LAction
from gui.dialog_savedgame_v3 import dialog_savedgame_v3
from gui.dialog_savedgame_legacy import dialog_savedgame_legacy
@ -22,7 +23,6 @@ from gui.usefulwidget import (
saveposwindow,
getboxlayout,
MySwitch,
Prompt_dialog,
IconButton,
getsimplecombobox,
FQLineEdit,
@ -414,25 +414,16 @@ class dialog_savedgame_new(QWidget):
self.clicked3_batch()
elif action == editname or action == addlist:
_dia = Prompt_dialog(
self,
"修改列表名称" if action == editname else "创建列表",
"",
[
[
"名称",
(
savegametaged[calculatetagidx(self.reftagid)]["title"]
if action == editname
else ""
),
],
],
)
__d = {
"k": (
savegametaged[calculatetagidx(self.reftagid)]["title"]
if action == editname
else ""
)
}
if _dia.exec():
title = _dia.text[0].text()
def cb(__d):
title = __d["k"]
if title != "":
i = calculatetagidx(self.reftagid)
if action == addlist:
@ -448,6 +439,25 @@ class dialog_savedgame_new(QWidget):
savegametaged[i]["title"] = title
self.loadcombo(False)
autoinitdialog(
self,
__d,
"修改列表名称" if action == editname else "创建列表",
600,
[
{
"type": "lineedit",
"name": "名称",
"k": "k",
},
{
"type": "okcancel",
"callback": functools.partial(cb, __d),
},
],
exec_=True,
)
elif action == dellist:
i = calculatetagidx(self.reftagid)
savegametaged.pop(i)

View File

@ -487,6 +487,7 @@ def getalistname(parent, callback, skipid=False, skipidid=None, title="添加到
"callback": functools.partial(__wrap, callback, __d, __uid),
},
],
exec_=True
)
elif len(__uid):

View File

@ -49,10 +49,12 @@ from gui.usefulwidget import (
getsimpleswitch,
threebuttons,
getspinbox,
CollapsibleBox,
getsmalllabel,
listediterline,
editswitchTextBrowser,
FocusCombo,
VisLFormLayout,
)
from gui.dynalang import (
LFormLayout,
@ -345,14 +347,15 @@ class dialog_setting_game_internal(QWidget):
print_exc()
def metadataorigin(self, formLayout: LFormLayout, gameuid):
vislf = VisLFormLayout()
formLayout.addRow(vislf)
combo = getsimplecombobox(
[""] + list(targetmod.keys()),
globalconfig,
"primitivtemetaorigin",
internal=[None] + list(targetmod.keys()),
)
formLayout.addRow("首选的", combo)
formLayout.addRow(None, QLabel())
vislf.addRow("首选的", combo)
def valid(idx, x):
if x:
@ -363,6 +366,8 @@ class dialog_setting_game_internal(QWidget):
combo.setCurrentIndex(0)
combo.setRowVisible(idx + 1, x)
linei = 1
notvislineis = []
for i, key in enumerate(targetmod):
try:
idname = targetmod[key].idname
@ -402,18 +407,37 @@ class dialog_setting_game_internal(QWidget):
continue
try:
__settting = targetmod[key].querysettingwindow
coll = CollapsibleBox(
functools.partial(__settting, gameuid), self, margin0=False
)
def _revert(c, li):
vis = c.isVisible()
vislf.setRowVisible(li, not vis)
c.toggle(not vis)
_vbox_internal.insert(
2,
getIconButton(
functools.partial(__settting, self, gameuid), icon="fa.gear"
functools.partial(_revert, coll, linei + 1),
icon="fa.gear",
),
)
vislf.addRow(
key,
getboxlayout(_vbox_internal),
)
vislf.addRow(coll)
notvislineis.append(linei + 1)
linei += 2
except:
pass
formLayout.addRow(
key,
getboxlayout(_vbox_internal),
)
vislf.addRow(
key,
getboxlayout(_vbox_internal),
)
linei += 1
for _ in notvislineis:
vislf.setRowVisible(_, False)
def doaddtab(self, wfunct, exe, layout):
w, do = wfunct(exe)
@ -1032,6 +1056,7 @@ class dialog_setting_game_internal(QWidget):
"callback": functools.partial(__callback, _internal, __d),
},
],
exec_=True,
)
def getlangtab(self, formLayout: LFormLayout, gameuid):

View File

@ -1,7 +1,7 @@
from qtsymbols import *
import os, functools, uuid, threading, shutil, time
from traceback import print_exc
import gobject, base64
import gobject
from myutils.config import (
savehook_new_list,
savehook_new_data,
@ -18,7 +18,6 @@ from gui.specialwidget import stackedlist, shrinkableitem, shownumQPushButton
from gui.usefulwidget import (
pixmapviewer,
statusbutton,
Prompt_dialog,
makesubtab_lazy,
tabadd_lazy,
listediter,
@ -744,32 +743,8 @@ class dialog_savedgame_v3(QWidget):
if action == startgame:
startgamecheck(self, getreflist(self.reftagid), self.currentfocusuid)
elif addlist == action:
_dia = Prompt_dialog(
self,
"创建列表",
"",
[
["名称", ""],
],
)
if _dia.exec():
title = _dia.text[0].text()
if title != "":
i = calculatetagidx(None)
if action == addlist:
tag = {
"title": title,
"games": [],
"uid": str(uuid.uuid4()),
"opened": True,
}
savegametaged.insert(i, tag)
group0, btn = self.createtaglist(
self.stack, title, tag["uid"], True
)
self.stack.insertw(i, group0)
self.createlist(True, None)
elif action == delgame:
self.shanchuyouxi()
@ -1002,42 +977,7 @@ class dialog_savedgame_v3(QWidget):
elif action == Downaction:
self.taglistrerank(tagid, 1)
elif action == editname or action == addlist:
_dia = Prompt_dialog(
self,
"修改列表名称" if action == editname else "创建列表",
"",
[
[
"名称",
(
savegametaged[calculatetagidx(tagid)]["title"]
if action == editname
else ""
),
],
],
)
if _dia.exec():
title = _dia.text[0].text()
if title != "":
i = calculatetagidx(tagid)
if action == addlist:
tag = {
"title": title,
"games": [],
"uid": str(uuid.uuid4()),
"opened": True,
}
savegametaged.insert(i, tag)
group0, btn = self.createtaglist(
self.stack, title, tag["uid"], True
)
self.stack.insertw(i, group0)
elif action == editname:
self.stack.w(i).settitle(title)
savegametaged[i]["title"] = title
self.createlist(action == addlist, tagid)
elif action == dellist:
i = calculatetagidx(tagid)
@ -1045,6 +985,47 @@ class dialog_savedgame_v3(QWidget):
self.stack.popw(i)
self.reallist.pop(tagid)
def createlist(self, create, tagid):
__d = {"k": ("" if create else savegametaged[calculatetagidx(tagid)]["title"])}
def cb(__d):
title = __d["k"]
if not title:
return
i = calculatetagidx(tagid)
if create:
tag = {
"title": title,
"games": [],
"uid": str(uuid.uuid4()),
"opened": True,
}
savegametaged.insert(i, tag)
group0, btn = self.createtaglist(self.stack, title, tag["uid"], True)
self.stack.insertw(i, group0)
else:
self.stack.w(i).settitle(title)
savegametaged[i]["title"] = title
autoinitdialog(
self,
__d,
"创建列表" if create else "修改列表名称",
600,
[
{
"type": "lineedit",
"name": "名称",
"k": "k",
},
{
"type": "okcancel",
"callback": functools.partial(cb, __d),
},
],
exec_=True,
)
def createtaglist(self, p, title, tagid, opened):
self.reallist[tagid] = []

View File

@ -265,3 +265,18 @@ class LStandardItemModel(QStandardItemModel):
def removeColumn(self, col):
self.__ls.pop(col)
super().removeColumn(col)
class LToolButton(QToolButton):
def __init__(self, *argc, **kwarg):
super().__init__(*argc, **kwarg)
self._text = self.text()
super().setText(_TR(self._text))
def setText(self, t):
self._text = t
super().setText(_TR(t))
def updatelangtext(self):
if self._text:
super().setText(_TR(self._text))

View File

@ -445,9 +445,17 @@ def autoinitdialog_items(dic):
@Singleton_close
class autoinitdialog__(LDialog):
class autoinitdialog(LDialog):
def __init__(
self, parent, dd, title, width, lines, modelfile=None, maybehasextrainfo=None
self,
parent,
dd,
title,
width,
lines,
modelfile=None,
maybehasextrainfo=None,
exec_=False,
) -> None:
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
self.setWindowTitle(title)
@ -695,18 +703,10 @@ class autoinitdialog__(LDialog):
cachecombo[comboname].currentIndexChanged.emit(
cachecombo[comboname].currentIndex()
)
self.show()
def autoinitdialogx(
parent, dd, title, width, lines, modelfile, maybehasextrainfo, _=None
):
autoinitdialog__(parent, dd, title, width, lines, modelfile, maybehasextrainfo)
def autoinitdialog(parent, dd, title, width, lines, _=None):
autoinitdialog__(parent, dd, title, width, lines)
if exec_:
self.exec_()
else:
self.show()
def getsomepath1(

View File

@ -13,7 +13,7 @@ import subprocess
from gui.usefulwidget import (
D_getsimpleswitch,
makescrollgrid,
CollapsibleBox,
CollapsibleBoxWithButton,
makesubtab_lazy,
D_getsimplecombobox,
makegrid,
@ -276,7 +276,7 @@ def changelog(self, basel: QHBoxLayout):
basel.addWidget(_)
def delayloadlinks(key, box):
def delayloadlinks(key, lay):
sources = static_data["aboutsource"][key]
grid = []
for source in sources:
@ -303,24 +303,13 @@ def delayloadlinks(key, box):
)
]
)
grid = [
[
(
dict(type="grid", grid=grid),
0,
"group",
)
]
]
w, do = makegrid(grid, delay=True, w=False)
w.setContentsMargins(0, 0, 0, 0)
box.content_area.setLayout(w)
w, do = makegrid(grid, delay=True)
lay.addWidget(w)
do()
def offlinelinks(key):
box = CollapsibleBox("下载")
box.setdelayload(functools.partial(delayloadlinks, key))
box = CollapsibleBoxWithButton(functools.partial(delayloadlinks, key), "下载")
return box

View File

@ -4,7 +4,6 @@ from myutils.utils import splitocrtypes
from myutils.config import globalconfig, _TR, get_platform
from gui.inputdialog import (
multicolorset,
autoinitdialogx,
autoinitdialog_items,
autoinitdialog,
)
@ -147,7 +146,7 @@ def initinternal(self, names):
line += [
D_getIconButton(
callback=functools.partial(
autoinitdialogx,
autoinitdialog,
self,
globalconfig["cishu"][cishu]["args"],
globalconfig["cishu"][cishu]["name"],

View File

@ -172,42 +172,6 @@ def createinternalfontsettings(self, forml: LFormLayout, group, _type):
)
def doinstallqweb(self, dd, base):
if not dd["k"].endswith(base):
getQMessageBox(self, "错误", "请选择_" + base)
return
with zipfile.ZipFile(dd["k"]) as zipf:
target = gobject.gettempdir("QWebEngine/")
zipf.extractall(target)
bit = ["x86", "x64"][platform.architecture()[0] == "64bit"]
copytree("{}/{}/PyQt5".format(target, bit), "files/runtime/PyQt5")
getQMessageBox(self, "成功", "安装成功")
def installqwebdialog(self, link):
dd = {"k": ""}
base = link.split("/")[-1]
autoinitdialog(
self,
dd,
"安装_QWebEngine",
800,
[
{
"type": "file",
"name": "路径",
"k": "k",
"dir": False,
"filter": base,
},
{
"type": "okcancel",
"callback": functools.partial(doinstallqweb, self, dd, base),
},
],
)
def resetgroudswitchcallback(self, group):
if group == "QWebEngine":
group = "webview"

View File

@ -2,7 +2,7 @@ from qtsymbols import *
import functools, os
from myutils.config import globalconfig, ocrsetting, ocrerrorfix, static_data
from myutils.utils import splitocrtypes, dynamiclink, getimagefilefilter
from gui.inputdialog import autoinitdialogx, postconfigdialog, autoinitdialog_items
from gui.inputdialog import postconfigdialog, autoinitdialog_items, autoinitdialog
from gui.usefulwidget import (
D_getsimplecombobox,
D_getspinbox,
@ -142,7 +142,7 @@ def initgridsources(self, names):
items = autoinitdialog_items(ocrsetting[name])
_3 = D_getIconButton(
callback=functools.partial(
autoinitdialogx,
autoinitdialog,
self,
ocrsetting[name]["args"],
globalconfig["ocr"][name]["name"],

View File

@ -1,7 +1,7 @@
from qtsymbols import *
import functools, os
import gobject, qtawesome, uuid, shutil
from myutils.config import globalconfig, translatorsetting, static_data
from myutils.config import globalconfig, translatorsetting
from myutils.utils import (
selectdebugfile,
splittranslatortypes,
@ -10,12 +10,11 @@ from myutils.utils import (
dynamicapiname,
)
from gui.pretransfile import sqlite2json
from gui.inputdialog import autoinitdialog, autoinitdialog_items, autoinitdialogx
from gui.inputdialog import autoinitdialog, autoinitdialog_items
from gui.usefulwidget import (
D_getspinbox,
getIconButton,
D_getcolorbutton,
Prompt_dialog,
getcolorbutton,
getsimpleswitch,
D_getIconButton,
@ -114,44 +113,57 @@ def getalistname(parent, copy, btnplus, callback):
}
)
autoinitdialog(
parent,
__d,
("删除" if copy else "复制") + "接口",
600,
__,
parent, __d, ("删除" if copy else "复制") + "接口", 600, __, exec_=True
)
def renameapi(qlabel: QLabel, apiuid, _):
def renameapi(qlabel: QLabel, apiuid, self, countnum, btnplus, _):
menu = QMenu(qlabel)
editname = LAction("重命名")
delete = LAction("删除")
menu.addAction(editname)
which = translate_exits(apiuid, which=True)
if which == 1:
menu.addAction(delete)
action = menu.exec(qlabel.mapToGlobal(_))
if action == delete:
selectllmcallback_2(self, countnum, btnplus, apiuid, None)
if action == editname:
before = dynamicapiname(apiuid)
_dia = Prompt_dialog(
qlabel,
"重命名",
"",
[
[
"名称",
before,
],
],
)
__d = {"k": before}
if _dia.exec():
title = _dia.text[0].text()
def cb(__d):
title = __d["k"]
if title not in ("", before):
globalconfig["fanyi"][apiuid]["name_self_set"] = title
qlabel.setText(title)
autoinitdialog(
self,
__d,
"重命名",
600,
[
{
"type": "lineedit",
"name": "名称",
"k": "k",
},
{
"type": "okcancel",
"callback": functools.partial(cb, __d),
},
],
exec_=True,
)
def getrenameablellabel(uid):
def getrenameablellabel(uid, self, countnum, btnplus):
name = LLabel(dynamicapiname(uid))
name.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
name.customContextMenuRequested.connect(functools.partial(renameapi, name, uid))
name.customContextMenuRequested.connect(
functools.partial(renameapi, name, uid, self, countnum, btnplus)
)
return name
@ -164,7 +176,7 @@ def loadbutton(self, fanyi):
aclass = "userconfig.copyed." + fanyi
else:
return
return autoinitdialogx(
return autoinitdialog(
self,
translatorsetting[fanyi]["args"],
dynamicapiname(fanyi),
@ -203,7 +215,7 @@ def selectllmcallback(self, countnum, btnplus, fanyi, name):
icon="fa.gear",
)
name = getrenameablellabel(uid)
name = getrenameablellabel(uid, self, countnum, btnplus)
swc = getsimpleswitch(
globalconfig["fanyi"][uid],
"use",
@ -364,7 +376,7 @@ def initsome11(self, l, label=None, btnplus=False):
else:
last = ""
line += [
functools.partial(getrenameablellabel, fanyi),
functools.partial(getrenameablellabel, fanyi, self, countnum, btnplus),
D_getsimpleswitch(
globalconfig["fanyi"][fanyi],
"use",

View File

@ -34,7 +34,6 @@ from gui.usefulwidget import (
getIconButton,
saveposwindow,
tabadd_lazy,
LRButton,
)
from gui.dynalang import (
LPushButton,
@ -516,9 +515,10 @@ class AnkiWindow(QWidget):
folder_open3.clicked.connect(functools.partial(self.selecfile2, self.editpath))
def createadd():
btn = LRButton("添加")
btn = QPushButton("添加")
btn.clicked.connect(functools.partial(self.errorwrap, False))
btn.rightclick.connect(functools.partial(self.errorwrap, True))
btn.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
btn.customContextMenuRequested.connect(functools.partial(self.errorwrap, True))
return btn
layout.addLayout(

View File

@ -93,9 +93,9 @@ class transhist(closeashidewindow):
def refresh(self):
with self.lock:
self.textOutput.clear()
for line in self.trace:
self.textOutput.appendPlainText(self.visline(line))
self.textOutput.setPlainText(
"\n".join(self.visline(line) for line in self.trace)
)
def visline(self, line):
ii, line = line

View File

@ -17,6 +17,7 @@ from gui.dynalang import (
LStandardItemModel,
LDialog,
LMainWindow,
LToolButton,
)
@ -855,42 +856,6 @@ class resizableframeless(saveposwindow):
return x, y, width, height
class Prompt_dialog(LDialog):
def __init__(self, parent, title, info, items) -> None:
super().__init__(parent)
self.setWindowFlags(
self.windowFlags()
& ~Qt.WindowType.WindowContextHelpButtonHint
& ~Qt.WindowType.WindowCloseButtonHint
| Qt.WindowType.WindowStaysOnTopHint
)
self.setWindowTitle(title)
self.setWindowIcon(qtawesome.icon("fa-question"))
_layout = QVBoxLayout()
_layout.addWidget(LLabel(info))
self.text = []
for _ in items:
le = QLineEdit()
le.setText(_[1])
self.text.append((le))
hl = QHBoxLayout()
hl.addWidget(LLabel(_[0]))
hl.addWidget(le)
_layout.addLayout(hl)
button = QDialogButtonBox(
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel
)
button.accepted.connect(self.accept)
button.rejected.connect(self.reject)
_layout.addWidget(button)
self.setLayout(_layout)
self.resize(400, 1)
def callbackwrap(d, k, call, _):
d[k] = _
@ -1783,15 +1748,7 @@ def makegroupingrid(args):
if title:
group.setTitle(title)
else:
_id = "luna" + str(uuid.uuid4())
group.setObjectName(_id)
group.setStyleSheet(
"QGroupBox#"
+ _id
+ "{ margin-top:0px;} QGroupBox#"
+ _id
+ ":title {margin-top: 0px;}"
)
group.setObjectName('notitle')
if _type == "grid":
grid = QGridLayout()
@ -1875,18 +1832,18 @@ def automakegrid(grid: QGridLayout, lis, save=False, savelist=None):
grid.setRowMinimumHeight(nowr, 25)
def makegrid(grid=None, save=False, savelist=None, savelay=None, delay=False, w=True):
def makegrid(
grid=None, save=False, savelist=None, savelay=None, delay=False
):
class gridwidget(QWidget):
pass
if w:
gridlayoutwidget = gridwidget()
gridlayoutwidget = gridwidget()
gridlay = QGridLayout()
gridlay.setAlignment(Qt.AlignmentFlag.AlignTop)
if w:
gridlayoutwidget.setLayout(gridlay)
gridlayoutwidget.setStyleSheet("gridwidget{background-color:transparent;}")
gridlayoutwidget.setLayout(gridlay)
gridlayoutwidget.setStyleSheet("gridwidget{background-color:transparent;}")
def do(gridlay, grid, save, savelist, savelay):
automakegrid(gridlay, grid, save, savelist)
@ -1894,8 +1851,7 @@ def makegrid(grid=None, save=False, savelist=None, savelay=None, delay=False, w=
savelay.append(gridlay)
__do = functools.partial(do, gridlay, grid, save, savelist, savelay)
if not w:
gridlayoutwidget = gridlay
if not delay:
__do()
return gridlayoutwidget
@ -2536,16 +2492,6 @@ class FQLineEdit(QLineEdit):
return super().mousePressEvent(a0)
class LRButton(LPushButton):
rightclick = pyqtSignal()
def mouseReleaseEvent(self, ev: QMouseEvent) -> None:
if self.rect().contains(ev.pos()):
if ev.button() == Qt.MouseButton.RightButton:
self.rightclick.emit()
return super().mouseReleaseEvent(ev)
class VisLFormLayout(LFormLayout):
# 简易实现
def __init__(self, *args, **kwargs):
@ -2593,45 +2539,47 @@ class VisLFormLayout(LFormLayout):
self._row_vis[row_index] = visible
class CollapsibleBox(QWidget):
def setdelayload(self, func):
self.func = func
def __init__(self, title="", parent=None):
class CollapsibleBox(QGroupBox):
def __init__(self, delayloadfunction=None, parent=None, margin0=True):
super(CollapsibleBox, self).__init__(parent)
self.setObjectName('notitle')
lay = QVBoxLayout(self)
if margin0:
lay.setContentsMargins(0, 0, 0, 0)
self.setLayout(lay)
self.func = delayloadfunction
self.toggle(False)
self.toggle_button = QToolButton(text=title, checkable=True, checked=False)
def toggle(self, checked):
if checked and self.func:
self.func(self.layout())
self.func = None
self.setVisible(checked)
class CollapsibleBoxWithButton(QWidget):
def __init__(self, delayloadfunction=None, title="", parent=None):
super(CollapsibleBoxWithButton, self).__init__(parent)
self.toggle_button = LToolButton(text=title, checkable=True, checked=False)
self.toggle_button.setToolButtonStyle(
Qt.ToolButtonStyle.ToolButtonTextBesideIcon
)
self.toggle_button.toggled.connect(self.on_toggled)
self.content_area = QWidget()
self.toggle_button.toggled.connect(self.toggled)
self.content_area = CollapsibleBox(delayloadfunction, self)
lay = QVBoxLayout(self)
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
lay.addWidget(self.toggle_button)
lay.addWidget(self.content_area)
self.func = None
self.collapse()
self.toggled(False)
def on_toggled(self, checked):
if checked:
if self.func:
self.func(self)
self.func = None
self.toggle_button.setIcon(qtawesome.icon("fa.chevron-down"))
self.content_area.setVisible(True)
else:
self.toggle_button.setIcon(qtawesome.icon("fa.chevron-right"))
self.content_area.setVisible(False)
def expand(self):
self.toggle_button.setChecked(True)
self.on_toggled(True)
def collapse(self):
self.toggle_button.setChecked(False)
self.on_toggled(False)
def toggled(self, checked):
self.toggle_button.setChecked(checked)
self.content_area.toggle(checked)
self.toggle_button.setIcon(
qtawesome.icon("fa.chevron-down" if checked else "fa.chevron-right")
)
class editswitchTextBrowser(QWidget):

View File

@ -5,12 +5,11 @@ import functools, time, json, gobject
from qtsymbols import *
from metadata.abstract import common
from gui.dialog_savedgame import getreflist, getalistname
from myutils.wrapper import Singleton_close, threader
from gui.dynalang import LPushButton
from myutils.wrapper import threader
from gui.usefulwidget import threebuttons
@Singleton_close
class bgmsettings(QDialog):
class bgmsettings(QFormLayout):
@property
def headers(self):
@ -118,10 +117,6 @@ class bgmsettings(QDialog):
except:
pass
def __getalistname(self, title, callback, _):
getalistname(self, callback, title=title)
infosig = pyqtSignal(str)
showhide = pyqtSignal(bool)
@threader
@ -229,18 +224,17 @@ class bgmsettings(QDialog):
print(self._ref.config)
break
def __init__(self, parent, _ref: common, gameuid: str) -> None:
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
def __init__(self, layout: QVBoxLayout, _ref: common, gameuid: str) -> None:
super().__init__(None)
layout.addLayout(self)
self.tm = None
self._ref = _ref
self.resize(QSize(800, 10))
self.setWindowTitle(self._ref.config_all["name"])
fl = QFormLayout(self)
vbox = QVBoxLayout()
hbox = QHBoxLayout()
s = QLineEdit()
self.lbinfo = QLabel()
s.textChanged.connect(self.checkvalid)
s.setText(_ref.config["access-token"])
fl2 = QFormLayout()
fl2.setContentsMargins(0, 0, 0, 0)
ww = QWidget()
@ -255,29 +249,24 @@ class bgmsettings(QDialog):
hbox.addWidget(oauth)
oauth.clicked.connect(self.__oauth)
vbox.addWidget(self.lbinfo)
fl.addRow("access-token", vbox)
btn = LPushButton("上传游戏")
btn.clicked.connect(
self.addRow("access-token", vbox)
btn = threebuttons(["上传游戏", "上传游戏列表", "获取游戏列表"])
btn.btn1clicked.connect(
functools.partial(self.singleupload_existsoverride, gameuid)
)
fl2.addRow(btn)
btn = LPushButton("上传游戏列表")
btn.clicked.connect(
btn.btn2clicked.connect(
functools.partial(
self.__getalistname, "上传游戏列表", self.getalistname_upload
getalistname, btn, self.getalistname_upload, "上传游戏列表"
)
)
btn.btn3clicked.connect(
functools.partial(
getalistname, btn, self.getalistname_download, "添加到列表"
)
)
fl2.addRow(btn)
btn = LPushButton("获取游戏列表")
btn.clicked.connect(
functools.partial(
self.__getalistname, "添加到列表", self.getalistname_download
)
)
fl2.addRow(btn)
fl.addRow(ww)
s.setText(_ref.config["access-token"])
self.show()
self.addRow(ww)
class searcher(common):
@ -305,8 +294,8 @@ class searcher(common):
print(resp)
self.config["refresh_token"] = ""
def querysettingwindow(self, parent, gameuid):
bgmsettings(parent, self, gameuid)
def querysettingwindow(self, gameuid, layout):
bgmsettings(layout, self, gameuid)
def getidbytitle(self, title):

View File

@ -1,7 +1,6 @@
import requests, re
from myutils.utils import (
simplehtmlparser,
simplehtmlparser_all,
initanewitem,
gamdidchangedtask,
)
@ -11,11 +10,9 @@ import functools
from qtsymbols import *
from gui.usefulwidget import getlineedit
from gui.dialog_savedgame import getreflist, getalistname
from myutils.wrapper import Singleton_close
@Singleton_close
class steamsettings(QDialog):
class steamsettings(QFormLayout):
def querylist(self):
@ -76,32 +73,26 @@ class steamsettings(QDialog):
gamdidchangedtask(self._ref.typename, self._ref.idname, gameuid)
reflist.insert(0, gameuid)
def __getalistname(self, callback, _):
getalistname(self, callback)
def __init__(self, parent, _ref: common, gameuid: str) -> None:
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
def __init__(self, layout:QVBoxLayout, _ref: common, gameuid: str) -> None:
super().__init__(None)
layout.addLayout(self)
self._ref = _ref
self.resize(QSize(800, 10))
self.setWindowTitle(self._ref.config_all["name"])
fl = QFormLayout(self)
fl.addRow("userid", getlineedit(_ref.config, "userid"))
fl.addRow(
self.addRow("userid", getlineedit(_ref.config, "userid"))
self.addRow(
"cookie:steamLoginSecure", getlineedit(_ref.config, "steamLoginSecure")
)
btn = QPushButton("wishlist")
btn.clicked.connect(
functools.partial(self.__getalistname, self.getalistname_download)
functools.partial(getalistname, btn, self.getalistname_download)
)
fl.addRow(btn)
self.show()
self.addRow(btn)
class searcher(common):
def querysettingwindow(self, parent, gameuid):
steamsettings(parent, self, gameuid)
def querysettingwindow(self, gameuid, layout):
steamsettings(layout, self, gameuid)
def getidbytitle(self, title):
response = requests.get(

View File

@ -6,8 +6,8 @@ import time
from qtsymbols import *
from metadata.abstract import common
from gui.dialog_savedgame import getreflist, getalistname
from myutils.wrapper import Singleton_close, threader
from gui.dynalang import LPushButton
from myutils.wrapper import threader
from gui.usefulwidget import threebuttons
def saferequestvndb(proxy, method, url, json=None, headers=None, failnone=True):
@ -156,8 +156,7 @@ def getinfosbyvid(proxy, vid):
)
@Singleton_close
class vndbsettings(QDialog):
class vndbsettings(QFormLayout):
@property
def headers(self):
@ -259,9 +258,6 @@ class vndbsettings(QDialog):
headers=self.headers,
)
def __getalistname(self, title, callback, _):
getalistname(self, callback, title=title)
showhide = pyqtSignal(bool)
@threader
@ -286,17 +282,16 @@ class vndbsettings(QDialog):
self.showhide.emit(False)
self.lbinfo.setText(info)
def __init__(self, parent, _ref: common, gameuid: str) -> None:
super().__init__(parent, Qt.WindowType.WindowCloseButtonHint)
def __init__(self, layout: QVBoxLayout, _ref: common, gameuid: str) -> None:
super().__init__(None)
layout.addLayout(self)
self.tm = None
self._ref = _ref
self.resize(QSize(800, 10))
self.setWindowTitle(self._ref.config_all["name"])
fl = QFormLayout(self)
vbox = QVBoxLayout()
s = QLineEdit()
self.lbinfo = QLabel()
s.textChanged.connect(self.checkvalid)
s.setText(_ref.config["Token"])
fl2 = QFormLayout()
fl2.setContentsMargins(0, 0, 0, 0)
ww = QWidget()
@ -307,35 +302,29 @@ class vndbsettings(QDialog):
self._token = s
vbox.addWidget(s)
vbox.addWidget(self.lbinfo)
fl.addRow("Token", vbox)
btn = LPushButton("上传游戏")
btn.clicked.connect(
self.addRow("Token", vbox)
btn = threebuttons(["上传游戏", "上传游戏列表", "获取游戏列表"])
btn.btn1clicked.connect(
functools.partial(self.singleupload_existsoverride, gameuid)
)
fl2.addRow(btn)
btn = LPushButton("上传游戏列表")
btn.clicked.connect(
btn.btn2clicked.connect(
functools.partial(
self.__getalistname, "上传游戏列表", self.getalistname_upload
getalistname, btn, self.getalistname_upload, "上传游戏列表"
)
)
btn.btn3clicked.connect(
functools.partial(
getalistname, btn, self.getalistname_download, "添加到列表"
)
)
fl2.addRow(btn)
btn = LPushButton("获取游戏列表")
btn.clicked.connect(
functools.partial(
self.__getalistname, "添加到列表", self.getalistname_download
)
)
fl2.addRow(btn)
fl.addRow(ww)
s.setText(_ref.config["Token"])
self.show()
self.addRow(ww)
class searcher(common):
def querysettingwindow(self, parent, gameuid):
vndbsettings(parent, self, gameuid)
def querysettingwindow(self, gameuid, layout):
vndbsettings(layout, self, gameuid)
def refmainpage(self, _id):
return "https://vndb.org/v{}".format(_id)

View File

@ -1438,7 +1438,7 @@
"max_num": {
"type": "intspin",
"name": "最大结果条数",
"min": 0,
"min": 1,
"max": 9999,
"step": 1
},

View File

@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>...</title>
<title>年度总结</title>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/wordcloud@1.1.1/src/wordcloud2.js"></script>