单个会话已经完善

This commit is contained in:
JackLee 2025-02-28 18:16:59 +08:00
parent 897716417b
commit 692eade472
26 changed files with 4914 additions and 4908 deletions

View File

@ -75,12 +75,12 @@ FILE(GLOB src_sui "${PROJECT_SOURCE_DIR}/src/*.*")
SET(PROJECT_SOURCES ${src_sui})
# qFatalqDebug
#LIST(APPEND CMAKE_CXX_FLAGS "-DQT_NO_DEBUG_OUTPUT")
LIST(APPEND CMAKE_CXX_FLAGS "-DQT_NO_DEBUG_OUTPUT")
#
QT6_ADD_RESOURCES(RCFILES res.qrc)
#WIN32
add_executable(${PROJECT_NAME} ${PROJECT_SOURCES} ${RCFILES} sui.rc)
add_executable(${PROJECT_NAME} WIN32 ${PROJECT_SOURCES} ${RCFILES} sui.rc)
#
#RPATH

Binary file not shown.

View File

@ -1,92 +1,33 @@
# ninja log v6
4501 15130 7624289797507401 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 22d5a962360b4db1
4497 15105 7624289797472510 CMakeFiles/ctai.dir/src/ctai.cpp.obj c7f0e07034d2e115
3560 6938 7621113173344145 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj ddca150b42c8a71b
271 3693 7624285805190042 CMakeFiles/ctai.dir/qrc_res.cpp.obj 9f74f1f5e59b5b50
4504 14422 7624289797539868 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 6fa8a641137702e0
4083 4223 7620828272305402 CMakeFiles/ctai.dir/sui.rc.obj e30df163c9cbe567
4506 8698 7624289797557265 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 336256b01143e240
3983 7575 7621872533460841 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj d8ac6cde8856dc5e
22 271 7624285805089132 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
4075 7860 7620828272226167 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj 3bdd07348bd84970
4503 14424 7624289797522441 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 578ff58396e1bb80
18 4495 7624289796400275 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
4509 15173 7624289797589397 CMakeFiles/ctai.dir/src/main.cpp.obj 77280178abb968fc
4903 17025 7621792026943581 CMakeFiles/ctai.dir/src/sui_title.cpp.obj e026b4b712cf9da4
4901 21734 7621792026923538 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 476c94d1f2c8cfea
4499 8754 7624289797490010 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj 401ec36492365540
18 4495 7624289796400275 ctai_autogen/timestamp da3870ebc94b983e
4608 24241 7623525557809941 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj b2496aab435c15c7
18 4495 7624289796400275 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
3987 7703 7621872533500869 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj d0b22ffae77b23cf
16088 28616 7624289913392694 F:/SourceCode/ctai/release/ctai.exe ae7e31831665e5d8
18 4495 7624289796400275 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
218 7564 7621848927853957 CMakeFiles/ctai.dir/src/sui.cpp.obj e1630d781a04e855
22 271 7624285805089132 qrc_res.cpp 9794859fafc6825
4495 16088 7624289797452486 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 696927afe9114740
4063 8329 7620828272105475 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj 41b68d110b3c0daf
4058 8712 7620828272053173 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj 80d6964d23a3e9c5
4262 7998 7622710864828185 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj c7ba770f3578d195
18 328 7624291679345090 ctai_autogen/timestamp da3870ebc94b983e
18 328 7624291679345090 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 328 7624291679345090 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 328 7624291679345090 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
329 586 7624291684888404 qrc_res.cpp 9794859fafc6825
329 586 7624291684888404 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
588 3376 7624291685041670 CMakeFiles/ctai.dir/qrc_res.cpp.obj 9f74f1f5e59b5b50
586 3472 7624291685024264 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 336256b01143e240
3472 15124 7624291713887227 F:/SourceCode/ctai/release/ctai.exe ae7e31831665e5d8
19 4526 7624294101787086 ctai_autogen/timestamp da3870ebc94b983e
19 4526 7624294101787086 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
19 4526 7624294101787086 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
19 4526 7624294101787086 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4530 8686 7624294102749764 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj 401ec36492365540
4534 14208 7624294102787224 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 578ff58396e1bb80
4536 14261 7624294102810729 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 6fa8a641137702e0
4532 14788 7624294102769797 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 22d5a962360b4db1
4529 14835 7624294102732372 CMakeFiles/ctai.dir/src/ctai.cpp.obj c7f0e07034d2e115
4540 14949 7624294102843591 CMakeFiles/ctai.dir/src/main.cpp.obj 77280178abb968fc
4527 15935 7624294102714974 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 696927afe9114740
18 4401 7624294569714531 ctai_autogen/timestamp da3870ebc94b983e
18 4401 7624294569714531 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 4401 7624294569714531 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 4401 7624294569714531 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4406 8778 7624294570806174 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj 401ec36492365540
4413 8898 7624294570885962 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 336256b01143e240
4409 13812 7624294570840964 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 578ff58396e1bb80
4410 13875 7624294570858353 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 6fa8a641137702e0
4407 14469 7624294570823568 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 22d5a962360b4db1
4404 14507 7624294570788784 CMakeFiles/ctai.dir/src/ctai.cpp.obj c7f0e07034d2e115
4414 14574 7624294570903354 CMakeFiles/ctai.dir/src/main.cpp.obj 77280178abb968fc
4402 15555 7624294570771284 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 696927afe9114740
15556 28618 7624294682307483 F:/SourceCode/ctai/release/ctai.exe ae7e31831665e5d8
21 282 7624296521674681 ctai_autogen/timestamp da3870ebc94b983e
21 282 7624296521674681 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
21 282 7624296521674681 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
21 282 7624296521674681 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
283 3801 7624296524286482 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 336256b01143e240
3801 14185 7624296559480681 F:/SourceCode/ctai/release/ctai.exe ae7e31831665e5d8
18 4395 7624299878221066 ctai_autogen/timestamp da3870ebc94b983e
18 4395 7624299878221066 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 4395 7624299878221066 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 4395 7624299878221066 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4400 9002 7624299879374727 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj 401ec36492365540
4407 9082 7624299879444291 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 336256b01143e240
4403 14387 7624299879392112 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 578ff58396e1bb80
4405 14433 7624299879426896 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 6fa8a641137702e0
4401 14918 7624299879392112 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 22d5a962360b4db1
4409 15048 7624299879465365 CMakeFiles/ctai.dir/src/main.cpp.obj 77280178abb968fc
4398 15090 7624299879357327 CMakeFiles/ctai.dir/src/ctai.cpp.obj c7f0e07034d2e115
4396 15872 7624299879322538 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 696927afe9114740
25 270 7624300042319316 ctai_autogen/timestamp da3870ebc94b983e
25 270 7624300042319316 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
25 270 7624300042319316 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
25 270 7624300042319316 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
271 3671 7624300044768612 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 336256b01143e240
3671 14743 7624300078771429 F:/SourceCode/ctai/release/ctai.exe ae7e31831665e5d8
18 351 7624301811503015 ctai_autogen/timestamp da3870ebc94b983e
18 351 7624301811503015 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 351 7624301811503015 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 351 7624301811503015 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
352 3945 7624301814838613 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 336256b01143e240
3945 14905 7624301850760942 F:/SourceCode/ctai/release/ctai.exe ae7e31831665e5d8
4424 9535 7624404759365303 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj e15b530df9d9d77c
17 285 7624406103518392 ctai_autogen/timestamp da3870ebc94b983e
7084 36108 7624392729024371 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 6249f33e823d8399
17 285 7624406103518392 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
3769 15558 7624406141021337 F:/SourceCode/ctai/release/ctai.exe 5bbcc239c00bb3a9
17 285 7624406103518392 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
13031 29305 7624392788487480 CMakeFiles/ctai.dir/src/sui.cpp.obj 4473bc703c38ef48
286 498 7624406108211182 qrc_res.cpp 9794859fafc6825
4420 16045 7624404759315326 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 9024cb90a9e8c9bc
7103 13415 7624392729205083 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj ca09550e1ecd0
7081 13948 7624392728989606 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj f4713b73c1c6e0d5
7089 11741 7624392729079367 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj ee65172c0996dd64
13415 33956 7624392792339446 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 419a299317dee38c
13484 29551 7624392793022469 CMakeFiles/ctai.dir/src/sui_title.cpp.obj f63cb863fd4bb908
4435 15352 7624404759462490 CMakeFiles/ctai.dir/src/main.cpp.obj 413b9816064f9d57
17 285 7624406103518392 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
4428 14292 7624404759400089 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 4e60e53557e3d9df
13419 18692 7624392792374462 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj 60b8b6c16c71de62
286 498 7624406108211182 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
499 3769 7624406108332925 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 97631ab5de89dd57
14853 15670 7624392806712393 CMakeFiles/ctai.dir/sui.rc.obj 222e0b180d90e3cd
4430 14320 7624404759427528 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj f5aadec87761fa2
501 3197 7624406108350329 CMakeFiles/ctai.dir/qrc_res.cpp.obj a369fd70be247e68
7101 13419 7624392729187697 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj 73976d0d057b09cb
4422 15061 7624404759347914 CMakeFiles/ctai.dir/src/ctai.cpp.obj 94cd69a700aed52c
4426 15149 7624404759382694 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 53e501d667fcd97a
17 271 7624406980833829 qrc_res.cpp 9794859fafc6825
17 271 7624406980833829 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
272 3225 7624406980913454 CMakeFiles/ctai.dir/qrc_res.cpp.obj a369fd70be247e68
3225 15258 7624407010444222 F:/SourceCode/ctai/release/ctai.exe 5bbcc239c00bb3a9

View File

@ -538,6 +538,7 @@
"QT_CORE_LIB",
"QT_GUI_LIB",
"QT_MESSAGELOGCONTEXT",
"QT_NEEDS_QMAIN",
"QT_NO_DEBUG",
"QT_WIDGETS_LIB",
"UNICODE",

View File

@ -1,2 +1,2 @@
moc:bb4d30678b1bf3eca1f81cded7600ffcfcf423848ebd94aa89870db496840ace
moc:38fc75f3632ac0bbe5969d9adcde880deb5228df9694eaddd5b87451c7dba86b
uic:112cbdb5924982d8a55bab754383a3ad4ae11fd691919828dbe5441faa671856

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -36,6 +36,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QObject \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QProcess \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRect \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRegularExpression \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSettings \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSize \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSizeF \
@ -473,6 +474,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -518,6 +520,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \
@ -1068,6 +1071,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai.cpp: F:/SourceCode/cta
F:/SourceCode/ctai/src/ctai_cmd.h \
F:/SourceCode/ctai/src/ctai_curl.h \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_table.h \
F:/SourceCode/ctai/src/ctai_session_widget.h \

View File

@ -30,6 +30,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QMutex \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QObject \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRect \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRegularExpression \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSize \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSizeF \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QString \
@ -367,6 +368,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QScrollBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QSplitter \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -405,6 +407,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \
@ -941,6 +944,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_session_widget.cpp: F:
F:/SourceCode/ctai/src/ctai_base.h \
F:/SourceCode/ctai/src/ctai_curl.h \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_table.h \
F:/SourceCode/ctai/src/ctai_switch_control.h \

View File

@ -31,6 +31,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QObject \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QProcess \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRect \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRegularExpression \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSize \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSizeF \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QString \
@ -380,6 +381,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -420,6 +422,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \
@ -957,6 +960,7 @@ F:/SourceCode/ctai/build/ctai_autogen/UVLADIE3JM/moc_ctai_tabwidget.cpp: F:/Sour
F:/SourceCode/ctai/src/ctai_cmd.h \
F:/SourceCode/ctai/src/ctai_curl.h \
F:/SourceCode/ctai/src/ctai_msg_table.h \
F:/SourceCode/ctai/src/ctai_parsestring.h \
F:/SourceCode/ctai/src/ctai_session_info.h \
F:/SourceCode/ctai/src/ctai_session_table.h \
F:/SourceCode/ctai/src/ctai_session_widget.h \

View File

@ -35,6 +35,7 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QObject \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QProcess \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRect \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QRegularExpression \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSettings \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSize \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtCore/QSizeF \
@ -474,6 +475,7 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabBar \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTabWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTableWidget \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextBrowser \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QTextEdit \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QVBoxLayout \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/QWidget \
@ -520,6 +522,7 @@ ctai_autogen/timestamp: \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtableview.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtablewidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtabwidget.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextbrowser.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtextedit.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgets-config.h \
D:/Dev/Qt/6.8.0/mingw1310_static_x64/include/QtWidgets/qtwidgetsexports.h \

View File

@ -20,6 +20,7 @@
#define __FLT32_MIN_EXP__ (-125)
#define __cpp_static_assert 201411L
#define __BFLT16_MIN_10_EXP__ (-37)
#define QT_NEEDS_QMAIN 1
#define QT_GUI_LIB 1
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __WCHAR_MAX__ 0xffff

View File

@ -65378,67 +65378,68 @@ static const unsigned char qt_resource_data[] = {
0x3b,0xd,0xa,0x20,0x70,0x61,0x64,0x64,0x69,0x6e,0x67,0x2d,0x74,0x6f,0x70,0x3a,
0x31,0x70,0x78,0x3b,0xd,0xa,0x7d,0xd,0xa,
// light_style.qss
0x0,0x0,0x3,0xa5,
0x0,0x0,0x3,0xb4,
0x0,
0x0,0xe,0x76,0x78,0xda,0xb5,0x56,0xdd,0x6b,0xd4,0x40,0x10,0x7f,0x6e,0xa1,0xff,
0x43,0xf0,0x1e,0x6a,0xe5,0xce,0x6b,0xaf,0x15,0x25,0xc5,0x87,0x3b,0x7b,0x15,0xa1,
0xf6,0x3,0x4f,0x7d,0x10,0x9,0x7b,0xc9,0x5c,0x6e,0x69,0xb2,0x1b,0x92,0x4d,0xef,
0xea,0x21,0x14,0x45,0x44,0x10,0xfa,0xe4,0x27,0x3e,0x14,0x11,0x7c,0x52,0xb,0x3e,
0x88,0xe0,0x9f,0xe3,0x1d,0xf6,0xbf,0x70,0x77,0x73,0x49,0x2f,0x97,0x8f,0xda,0x7a,
0x4d,0x48,0x48,0x66,0x66,0xe7,0xf7,0xdb,0xdd,0x99,0xd9,0xd9,0xba,0x8f,0xd,0x13,
0x58,0xc1,0xd6,0x3a,0xf2,0xa3,0x37,0x33,0xad,0x28,0x4d,0xea,0x1a,0xe0,0x96,0x5c,
0x64,0x60,0xdf,0x53,0x17,0xe6,0x9d,0xee,0xb2,0x14,0x23,0x7d,0xdb,0x74,0xa9,0x4f,
0x8c,0x92,0x4e,0x2d,0xea,0xaa,0x8a,0x6b,0x36,0xd1,0xc5,0xca,0xd2,0x62,0x31,0x7c,
0x16,0xe6,0xa4,0x65,0xa0,0x2e,0x54,0x56,0x97,0xf8,0xcd,0x25,0x8f,0x67,0xa6,0x67,
0xa6,0xb7,0x36,0x7d,0xaf,0x5d,0xf3,0x19,0xa3,0xa4,0xd0,0x64,0x44,0xa3,0x8e,0x44,
0xc3,0x36,0x32,0x41,0xf5,0x5d,0xeb,0xa2,0x5a,0x76,0xc1,0x2b,0x63,0xdb,0x2c,0x7b,
0x3e,0xbe,0xec,0x10,0x53,0x3a,0xe3,0xbc,0x58,0x5b,0x5d,0xbc,0x12,0x90,0x68,0x3,
0x36,0xdb,0x2c,0xfa,0xd,0x98,0xaa,0x84,0x12,0x88,0x60,0xd6,0x50,0x13,0xac,0xde,
0x8,0x8d,0xa5,0x79,0x71,0xa7,0xd1,0xb0,0x35,0x2,0x1d,0x4d,0x6f,0x23,0xa6,0x71,
0x46,0xc5,0x71,0xa5,0x60,0xe9,0x1,0x93,0x6,0xa9,0x4a,0x3,0x2c,0xa9,0x9c,0x99,
0x96,0x78,0x43,0xaa,0xe1,0x7a,0x85,0x5c,0x83,0xff,0xc7,0xc9,0x15,0xf0,0x3d,0x70,
0x23,0x6,0xc5,0xc,0xbd,0xd7,0xc1,0x4c,0x6f,0x6b,0x36,0xe5,0x60,0x27,0xd8,0x6c,
0x13,0xda,0xb1,0x80,0x6f,0x63,0x96,0x9d,0xef,0x58,0x14,0x19,0x5a,0xb,0x5b,0x99,
0x26,0xba,0x5,0x88,0xbf,0x29,0x61,0xd0,0xcd,0xe6,0x4,0xc4,0xc0,0xc4,0xd4,0x30,
0x69,0xd1,0x91,0x99,0x57,0xae,0xc4,0x67,0x1e,0xfd,0x27,0xb6,0x69,0xeb,0x6,0xb5,
0x9b,0xb4,0x46,0xbb,0xbd,0xa4,0x79,0x7c,0xa1,0xd4,0x36,0xdd,0x1,0x57,0x98,0x39,
0xc8,0x10,0xa0,0x25,0xb,0x5a,0x4c,0x5d,0x8,0x3c,0x87,0x32,0x46,0x9d,0xa1,0x68,
0x18,0x3,0xd8,0x63,0x41,0x64,0x2b,0x7c,0x6f,0x94,0x78,0xf4,0xaa,0x4a,0x61,0x55,
0x5e,0xcb,0x21,0x31,0x45,0x32,0x53,0x2,0xec,0xe3,0xb1,0xaa,0x8a,0x19,0xd8,0xf9,
0x1e,0xd2,0xc7,0x4,0xac,0xcf,0x34,0xd2,0x3,0xb,0x74,0x6,0x46,0xee,0xe0,0x8c,
0xb1,0x2d,0xaa,0xfb,0xde,0x3f,0xa0,0xca,0xb1,0x4,0xea,0x6,0x66,0x5,0xb1,0xcf,
0x9a,0xed,0x99,0x5a,0x1b,0x10,0x5f,0x8b,0x62,0x8a,0x86,0xd1,0x6d,0x20,0x5e,0xef,
0x38,0xfd,0x2a,0xa9,0xe9,0x97,0x52,0x20,0xe2,0x7c,0x1b,0xdc,0xa1,0xf4,0x6c,0x7,
0x80,0x9c,0x3e,0x75,0x77,0x7b,0xa7,0x76,0x34,0x9e,0x8a,0xc7,0xec,0x35,0xac,0xd3,
0x5e,0x32,0xe2,0x94,0x5c,0x8f,0xca,0x48,0xd,0xba,0x70,0x5c,0x84,0x78,0xb4,0x97,
0xd,0x68,0x21,0xdf,0x62,0x43,0xef,0xa2,0x26,0x5d,0x98,0x4b,0xe6,0x72,0xc0,0xc0,
0x18,0x56,0x9d,0x9,0x41,0x8b,0x64,0x13,0xf9,0x25,0xfc,0x2,0x83,0x7c,0x6c,0x9d,
0x3a,0xbb,0xe7,0x2,0x2e,0x1c,0xe7,0x43,0x7b,0x68,0x7,0xce,0x5,0x5a,0x38,0xce,
0x87,0xb6,0x81,0xf8,0x93,0x86,0xe,0xfd,0x66,0x21,0xd7,0x1a,0xeb,0xda,0xca,0xc6,
0xfd,0xf5,0xb5,0x8d,0xea,0x4a,0x2f,0x3a,0x9e,0x2a,0xf1,0xe3,0x29,0x23,0x3f,0x72,
0x81,0xd,0xda,0x21,0xa2,0x3a,0xe7,0x1,0xdf,0xa9,0x37,0xee,0x4c,0x14,0x94,0x9f,
0x6e,0x8c,0xd7,0xcf,0x3c,0xcc,0xbb,0x9b,0x2b,0xd5,0x46,0x7d,0xa2,0xa8,0xbe,0x63,
0xa0,0xec,0x88,0x16,0xa0,0xd5,0xda,0xc6,0xdd,0xc6,0x44,0x31,0x51,0x93,0xfa,0x2c,
0x6,0xd9,0x40,0x4d,0xb,0xee,0x61,0xe8,0x14,0x6e,0x56,0x6f,0xd7,0xb5,0x5b,0xeb,
0xab,0x1b,0x5a,0xa3,0x5a,0x5b,0xab,0x8f,0x17,0x62,0x51,0x4d,0xa7,0x52,0x42,0x6a,
0x7e,0xfe,0xea,0x35,0x63,0x29,0x2a,0xa9,0xe5,0x4b,0xa5,0xc4,0x35,0x38,0x78,0x7e,
0xf4,0xf1,0xed,0xe0,0x60,0x7f,0x70,0xf0,0xa3,0xff,0x6b,0x5f,0x19,0x7c,0xd8,0xeb,
0x1f,0xee,0xf7,0x5f,0xbe,0x96,0x5f,0x9f,0x3e,0x8b,0xaf,0xfe,0xb3,0xef,0x47,0x6f,
0xbe,0x94,0xd2,0xae,0x4b,0x65,0xe1,0x36,0x72,0xd2,0xdf,0x7f,0x7b,0xf4,0x9c,0xbf,
0x9f,0xc,0x5e,0x1d,0xf6,0xf7,0x7e,0xf5,0xbf,0xbe,0xff,0xfd,0xf3,0xc5,0x98,0xcd,
0x9f,0xa7,0x2f,0x7,0xef,0xbe,0x9,0xe1,0xd6,0xb0,0xb5,0xe3,0xcd,0x94,0xc6,0x30,
0xb3,0x64,0x96,0xa6,0x4c,0xa3,0x25,0x2f,0xb1,0x80,0x36,0x72,0x4d,0x4c,0x46,0xe,
0xd3,0x50,0xe2,0xca,0x65,0x8f,0xcb,0x9a,0x94,0xef,0x96,0x3d,0x26,0x1c,0x39,0x9b,
0x53,0xfa,0x1d,0x1b,0x93,0x62,0x42,0x86,0xba,0x9,0x99,0x6e,0x51,0x4f,0xb0,0x9d,
0x8a,0xc1,0x2f,0x4a,0xb7,0x53,0x71,0xf8,0xa0,0xb7,0x9a,0x8a,0x77,0xac,0xd7,0x46,
0x3a,0x81,0x24,0x85,0xde,0x49,0xa1,0xc2,0x6d,0xa2,0x40,0x49,0x94,0x96,0x30,0x22,
0xc3,0x26,0x2f,0x8a,0xc9,0xcc,0x2e,0x8f,0xcf,0xf0,0x64,0x48,0xd4,0x9d,0x30,0xe4,
0x3,0xfe,0x60,0x1b,0x3f,0x82,0x4d,0x97,0x3a,0xe0,0xb2,0xdd,0xeb,0xb3,0xa1,0x64,
0xf6,0xa1,0x22,0xab,0xe6,0x29,0x28,0x29,0xe7,0x46,0x8a,0xc3,0xf2,0x26,0xe0,0xdf,
0x39,0x69,0xc3,0x1,0x93,0xe5,0x16,0x46,0xdc,0x49,0x4,0xa4,0xdd,0xff,0x41,0xa7,
0xc6,0x64,0xd0,0x2f,0xa6,0x25,0x47,0x86,0x46,0x12,0x39,0x5b,0x6f,0x9c,0x82,0xee,
0xf0,0x79,0x7a,0x60,0xa4,0xe2,0x67,0xe9,0x2,0x6,0x43,0xed,0x29,0x39,0xfc,0x5,
0xd3,0xd1,0xc6,0x7c,
0x0,0xe,0xc2,0x78,0xda,0xb5,0x56,0x5b,0x6b,0xdb,0x48,0x14,0x7e,0x4e,0x20,0xff,
0x41,0xd4,0xf,0xbd,0x60,0xaf,0x13,0x27,0xa1,0x45,0x65,0x1f,0xec,0x8d,0xb3,0x2c,
0xa4,0x71,0x42,0xdc,0xed,0x43,0x29,0x62,0xac,0x39,0x96,0x87,0x48,0x33,0x42,0x1a,
0xd5,0x4e,0x4d,0xa1,0xec,0xb2,0x84,0x85,0x40,0x9e,0x7a,0x5b,0xfa,0x10,0x96,0x85,
0x3e,0xf5,0x2,0x7d,0x28,0xb,0xf9,0x39,0x6b,0xb3,0xf9,0x17,0x3b,0x33,0xb2,0x14,
0xcb,0xba,0x24,0xe9,0x3a,0x12,0x12,0xd2,0x39,0x67,0xce,0xf7,0xcd,0xcc,0x39,0x67,
0xce,0xee,0x23,0x82,0x2d,0xe0,0x25,0xc7,0xe8,0xab,0x8f,0xe1,0xd2,0xa2,0xa6,0x75,
0x98,0x87,0xc1,0xab,0x78,0x8,0x93,0xc0,0xd7,0x57,0x96,0xdd,0xc1,0x7d,0x25,0x46,
0xe6,0xbe,0xe5,0xb1,0x80,0xe2,0x8a,0xc9,0x6c,0xe6,0xe9,0x9a,0x67,0x75,0xd0,0xad,
0xda,0xda,0x6a,0x39,0x7a,0x56,0x6e,0x2b,0xcb,0x50,0x5d,0xaa,0x6d,0xae,0x89,0x5b,
0x48,0x9e,0x2f,0x2d,0x2e,0x2d,0xee,0xee,0x4,0x7e,0xaf,0x11,0x70,0xce,0x68,0xa9,
0xc3,0xa9,0xc1,0x5c,0x85,0x46,0x1c,0x64,0x81,0x1e,0x78,0xf6,0x2d,0xbd,0xea,0x81,
0x5f,0x25,0x8e,0x55,0xf5,0x3,0xf2,0x9d,0x4b,0x2d,0xe5,0x4c,0xf0,0xe2,0x3d,0x7d,
0x75,0x3d,0x24,0xd1,0x3,0x62,0xf5,0x78,0xfc,0x1b,0x32,0xd5,0x29,0xa3,0x10,0xc3,
0x6c,0xa1,0xe,0xd8,0xc3,0x29,0x1a,0x6b,0xcb,0xf2,0xce,0xa2,0xe1,0x18,0x14,0xfa,
0x86,0xd9,0x43,0xdc,0x10,0x8c,0xca,0xb3,0x4a,0xc9,0xd2,0x7,0xae,0xc,0x32,0x95,
0x18,0x6c,0xa5,0x5c,0x5a,0x54,0x78,0x13,0xaa,0xd1,0x7a,0x45,0x5c,0xc3,0xff,0xe7,
0xe9,0x15,0x8,0x7c,0xf0,0x62,0x6,0xe5,0x1c,0xbd,0xdf,0x27,0xdc,0xec,0x19,0xe,
0x13,0x60,0x17,0xd8,0xec,0x53,0xd6,0xb7,0x41,0x6c,0x63,0x9e,0x5d,0xe0,0xda,0xc,
0x61,0xa3,0x4b,0xec,0x5c,0x13,0xd3,0x6,0x24,0xde,0x8c,0x72,0x18,0xe4,0x73,0x2,
0x8a,0x9,0xb5,0xc,0x42,0xbb,0x6c,0x6a,0xe6,0xb5,0xf5,0xe4,0xcc,0xe3,0xff,0xd4,
0x36,0xed,0xfe,0xc0,0x9c,0xe,0x6b,0xb0,0xc1,0x30,0x6d,0x9e,0x5c,0x28,0xbd,0xc7,
0x9e,0x82,0x27,0xcd,0x5c,0x84,0x25,0x68,0xc5,0x86,0x2e,0xd7,0x57,0x42,0xcf,0x91,
0x8c,0x33,0x77,0x22,0x9a,0xc4,0x0,0xf1,0x79,0x18,0xd9,0x9a,0xd8,0x1b,0x2d,0x19,
0xbd,0xba,0x56,0xda,0x54,0xd7,0xfd,0x88,0x98,0xa6,0x98,0x69,0x21,0xf6,0xf9,0x58,
0x5d,0x27,0x1c,0x9c,0x62,0xf,0xd9,0x63,0x42,0xd6,0xdf,0x34,0xd2,0x7,0x1b,0x4c,
0xe,0xb8,0x70,0x70,0xce,0xd8,0x2e,0x33,0x3,0xff,0x12,0xa8,0x6a,0x2c,0x85,0x26,
0x26,0xbc,0x24,0xf7,0xd9,0x70,0x7c,0xcb,0xe8,0x1,0x12,0x6b,0x51,0xce,0xd0,0x70,
0xb6,0xf,0xd4,0x1f,0x9e,0xa7,0x5f,0x2d,0x33,0xfd,0x32,0xa,0x44,0x92,0x6f,0x5b,
0x38,0x54,0x9e,0x9d,0x10,0x50,0xd0,0x67,0xde,0xc1,0xf0,0xca,0x8e,0x66,0x53,0xf1,
0x9c,0xbd,0x41,0x4c,0x36,0x4c,0x47,0x9c,0x56,0xe8,0x51,0x9b,0xaa,0x41,0x37,0xce,
0x8b,0x90,0x88,0xf6,0x2a,0x86,0x2e,0xa,0x6c,0x3e,0xf1,0x2e,0x6b,0xd2,0x8d,0xdb,
0xe9,0x5c,0xe,0x19,0xe0,0x49,0xd5,0x99,0x13,0xb4,0x4c,0x36,0x99,0x5f,0xd2,0x2f,
0x70,0x28,0xc6,0x36,0x99,0x7b,0x70,0x2d,0xe0,0xd2,0x71,0x31,0xb4,0x8f,0x9e,0xc2,
0xb5,0x40,0x4b,0xc7,0xc5,0xd0,0xe,0xd0,0x60,0xde,0xd0,0x91,0xdf,0x62,0xe4,0x2e,
0xb3,0xf1,0x95,0x91,0x53,0x91,0xdb,0x68,0x6f,0x1b,0x1b,0xad,0x47,0xdb,0x5b,0xad,
0xfa,0xc6,0x30,0x3e,0xea,0x6a,0xc9,0xa3,0x2e,0x27,0xd7,0xa,0x27,0x81,0x59,0x9f,
0xca,0x4a,0x9f,0x37,0x9,0x9,0xbc,0xd7,0x6c,0xef,0xcd,0x15,0x54,0x9c,0x94,0x5c,
0xd4,0xe2,0x22,0xcc,0x87,0x3b,0x1b,0xf5,0x76,0x73,0xae,0xa8,0x81,0x8b,0x51,0x7e,
0x76,0x48,0xd0,0x7a,0xa3,0xf5,0xb0,0x3d,0x57,0x4c,0xd4,0x61,0x1,0x4f,0x40,0xb6,
0x51,0xc7,0x86,0x9f,0x9,0xf4,0x4b,0x3f,0xd6,0x1f,0x34,0x8d,0x9f,0xb6,0x37,0x5b,
0x46,0xbb,0xde,0xd8,0x6a,0xce,0x16,0x75,0x59,0x99,0x17,0x32,0x82,0x64,0x79,0xf9,
0xee,0x3d,0xbc,0x16,0x97,0xe7,0xea,0x9d,0x4a,0xea,0x1a,0x9f,0x1c,0x9e,0xfd,0xf9,
0x66,0x7c,0x72,0x3c,0x3e,0xf9,0x3a,0x3a,0x3d,0xd6,0xc6,0xef,0x5e,0x8c,0x3e,0x1f,
0x8f,0x8e,0x5e,0xa9,0xaf,0xbf,0xde,0xcb,0xaf,0xd1,0x6f,0x5f,0xce,0x5e,0x7f,0xa8,
0x64,0x5d,0x77,0xaa,0xd2,0x6d,0xec,0x64,0x74,0xfc,0xe6,0xec,0x50,0xbc,0x7f,0x19,
0xbf,0xfc,0x3c,0x7a,0x71,0x3a,0xfa,0xf8,0xc7,0x3f,0x7f,0xff,0x3e,0x63,0xf3,0xef,
0xaf,0x47,0xe3,0xb7,0x9f,0xa4,0x70,0x77,0xd2,0x26,0x8a,0xc6,0xcc,0xe0,0x84,0xdb,
0x2a,0xe3,0x33,0xa6,0xd1,0x55,0x97,0x5c,0x40,0x7,0x79,0x16,0xa1,0x53,0x7,0x73,
0x24,0xf1,0xd4,0xb2,0x27,0x65,0x1d,0x26,0x76,0xcb,0x99,0x11,0x4e,0x9d,0xf3,0x19,
0xbd,0x93,0x43,0x68,0x39,0x25,0x43,0x83,0x94,0xcc,0xb4,0x99,0x2f,0xd9,0x2e,0x24,
0xe0,0x57,0x95,0xdb,0x85,0x24,0x7c,0xd8,0xa7,0x2d,0x24,0xbb,0xdf,0x7b,0x53,0x5d,
0x45,0x9a,0xc2,0xf0,0xa2,0x50,0x11,0x36,0x71,0xa0,0xa4,0x8a,0x45,0x14,0x91,0x51,
0xc3,0x18,0xc7,0x64,0x6e,0xc7,0x28,0x66,0x78,0x31,0x24,0x1a,0xcc,0x19,0xf2,0xb1,
0x78,0x88,0x43,0x9e,0xc1,0x8e,0xc7,0x5c,0xf0,0xf8,0xc1,0xf7,0x37,0x23,0xc9,0xcd,
0x27,0x9a,0xaa,0x83,0x57,0xa0,0xa4,0x5d,0x1b,0x29,0x1,0x2b,0x1a,0x8a,0xcb,0x73,
0x32,0x26,0x3,0xe6,0xcb,0x2d,0x8a,0xb8,0x8b,0x8,0x28,0xbb,0xff,0x7,0x9d,0x19,
0x93,0x61,0xef,0x99,0x95,0x1c,0x39,0x1a,0x45,0xe4,0xdb,0xfa,0xec,0xc,0x74,0x57,
0xcc,0xd3,0x7,0x9c,0x89,0x9f,0xa7,0xb,0x19,0x4c,0xb4,0x57,0xe4,0xf0,0x1f,0xca,
0x72,0xde,0x79,
// message_style.css
0x0,0x0,0x2,0xeb,
0x0,
@ -65772,11 +65773,11 @@ static const unsigned char qt_resource_struct[] = {
0x0,0x0,0x5,0x1a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xe3,0x8c,
0x0,0x0,0x1,0x93,0xf6,0xae,0x2c,0x84,
// :/res/qss/message_style.css
0x0,0x0,0x5,0x60,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0xf,0xf2,0x3,
0x0,0x0,0x5,0x60,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0xf,0xf2,0x12,
0x0,0x0,0x1,0x95,0x41,0xc6,0x3,0x63,
// :/res/qss/light_style.qss
0x0,0x0,0x5,0x3c,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0xf,0xee,0x5a,
0x0,0x0,0x1,0x95,0x4b,0x5a,0x5b,0x62,
0x0,0x0,0x1,0x95,0x4c,0xa,0x4a,0x16,
// :/res/img/btn
0x0,0x0,0x0,0xb4,0x0,0x2,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x11,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

Binary file not shown.

View File

@ -1,6 +1,6 @@
{
"sui": {
"font": 5,
"font": 0,
"font_bold": 0,
"style": 1,
"style_system": 0

View File

@ -96,6 +96,11 @@ QPushButton#m_msg_menu{
background-color: #FFFFFF;
image:url(":/res/img/btn/btn_msg_menu.png");
}
QPushButton#m_msg_fold{
border:none;
background-color: #FFFFFF;
}
QPushButton#BTN_DOWNLOAD{
width:25px;
height:25px;

View File

@ -3,93 +3,148 @@
ctai_msg_table::ctai_msg_table(QWidget *parent)
: QListWidget(parent)
{
// 设置项的默认高度
setSpacing(1);
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
// 连接点击信号
connect(this, &QListWidget::itemClicked, this, &ctai_msg_table::on_item_clicked);
}
ctai_msg_table::~ctai_msg_table()
{
clear();
for (auto &pair : message_map_)
{
delete pair.second.first; // 删除model_data
}
clear(); // 清理QListWidget的内容
}
void ctai_msg_table::add_message(const model_data &message)
{
// 创建新的消息显示widget
ctai_textedit* message_widget = new ctai_textedit();
message_widget->add_message(message);
// 创建并添加到列表
QListWidgetItem* item = create_message_item(message_widget);
addItem(item);
setItemWidget(item, message_widget);
// 连接高度变化信号
connect(message_widget, &ctai_textedit::content_height_changed,
[this, item, message_widget]() {
update_item_height(item, message_widget);
});
// 连接删除信号
connect(message_widget, &ctai_textedit::delete_requested,
[this, item]() {
// 获取item的行号
int row = this->row(item);
if (row >= 0) {
// 移除并删除该项
QListWidgetItem* removed_item = takeItem(row);
delete removed_item;
QString send_id = QSL(message.postback_send_id);
// 检查是否存在相同send_id的消息
auto it = message_map_.find(send_id);
if (it != message_map_.end())
{
// 存在相同send_id追加内容
model_data *stored_data = it->second.first;
QListWidgetItem *stored_item = it->second.second;
// 更新存储的数据
if (!QSL(message.postback_model_data).isEmpty()||!QSL(message.postback_model_data).contains("[]"))
{
stored_data->postback_model_data += message.postback_model_data;
}else{
update_stored_data(stored_data, message);
}
});
// 初始设置高度和宽度
update_item_height(item, message_widget);
update_items_width();
// 自动滚动到最新消息
scrollToItem(item);
// 更新显示
ctai_textedit *message_widget = qobject_cast<ctai_textedit *>(itemWidget(stored_item));
if (message_widget)
{
message_widget->add_message(*stored_data);
update_item_height(stored_item, message_widget);
}
}
else
{
// 新消息
model_data *new_data = new model_data(message);
// 创建新的消息显示widget
ctai_textedit *message_widget = new ctai_textedit();
message_widget->add_message(*new_data);
// 创建并添加到列表
QListWidgetItem *item = create_message_item(message_widget);
addItem(item);
setItemWidget(item, message_widget);
// 存储到map中
message_map_[send_id] = std::make_pair(new_data, item);
// 连接高度变化信号
connect(message_widget, &ctai_textedit::content_height_changed,
[this, item, message_widget]()
{
update_item_height(item, message_widget);
});
// 连接删除信号
connect(message_widget, &ctai_textedit::delete_requested,
[this, item, send_id]()
{
int row = this->row(item);
if (row >= 0)
{
// 从map中删除
auto it = message_map_.find(send_id);
if (it != message_map_.end())
{
delete it->second.first; // 删除model_data
message_map_.erase(it);
}
// 移除并删除该项
QListWidgetItem *removed_item = takeItem(row);
delete removed_item;
}
});
// 初始设置高度和宽度
update_item_height(item, message_widget);
update_items_width();
// 自动滚动到最新消息
scrollToItem(item);
}
last_send_id_ = send_id;
}
// 添加新的私有方法
void ctai_msg_table::update_item_height(QListWidgetItem* item, ctai_textedit* widget)
void ctai_msg_table::update_item_height(QListWidgetItem *item, ctai_textedit *widget)
{
if (item && widget) {
if (item && widget)
{
int content_height = widget->get_content_height();
// 设置最小高度
content_height = qMax(content_height, 100);
item->setSizeHint(QSize(width(), content_height));
}
}
QListWidgetItem* ctai_msg_table::create_message_item(ctai_textedit* message_widget)
QListWidgetItem *ctai_msg_table::create_message_item(ctai_textedit *message_widget)
{
QListWidgetItem* item = new QListWidgetItem();
QListWidgetItem *item = new QListWidgetItem();
// 设置初始大小,宽度使用视口宽度
int width = viewport()->width();
if (verticalScrollBar() && verticalScrollBar()->isVisible()) {
if (verticalScrollBar() && verticalScrollBar()->isVisible())
{
width -= verticalScrollBar()->width();
}
message_widget->setFixedWidth(width);
item->setSizeHint(QSize(width, 200));
return item;
}
void ctai_msg_table::on_item_clicked(QListWidgetItem *item)
{
if (item) {
ctai_textedit* message_widget = qobject_cast<ctai_textedit*>(itemWidget(item));
if (message_widget) {
if (item)
{
ctai_textedit *message_widget = qobject_cast<ctai_textedit *>(itemWidget(item));
if (message_widget)
{
// 可以在这里处理消息被点击的事件
}
}
}
ctai_textedit* ctai_msg_table::current_message() const
ctai_textedit *ctai_msg_table::current_message() const
{
QListWidgetItem* current_item = currentItem();
if (current_item) {
return qobject_cast<ctai_textedit*>(itemWidget(current_item));
QListWidgetItem *current_item = currentItem();
if (current_item)
{
return qobject_cast<ctai_textedit *>(itemWidget(current_item));
}
return nullptr;
}
@ -110,21 +165,48 @@ void ctai_msg_table::update_items_width()
{
// 获取视口宽度
int viewport_width = viewport()->width();
// 考虑垂直滚动条的宽度
if (verticalScrollBar() && verticalScrollBar()->isVisible()) {
if (verticalScrollBar() && verticalScrollBar()->isVisible())
{
viewport_width -= verticalScrollBar()->width();
}
// 更新所有项的宽度
for (int i = 0; i < count(); ++i) {
QListWidgetItem* item = this->item(i);
if (item) {
ctai_textedit* widget = qobject_cast<ctai_textedit*>(itemWidget(item));
if (widget) {
for (int i = 0; i < count(); ++i)
{
QListWidgetItem *item = this->item(i);
if (item)
{
ctai_textedit *widget = qobject_cast<ctai_textedit *>(itemWidget(item));
if (widget)
{
widget->setFixedWidth(viewport_width);
item->setSizeHint(QSize(viewport_width, item->sizeHint().height()));
}
}
}
}
void ctai_msg_table::update_stored_data(model_data* stored_data, const model_data& message)
{
stored_data->api_key = message.api_key;
stored_data->api_url = message.api_url;
stored_data->postback_completion_tokens = message.postback_completion_tokens;
stored_data->postback_finish_reason = message.postback_finish_reason;
stored_data->postback_prompt_cache_hit_tokens = message.postback_prompt_cache_hit_tokens;
stored_data->postback_prompt_cache_miss_tokens = message.postback_prompt_cache_miss_tokens;
stored_data->postback_prompt_tokens = message.postback_prompt_tokens;
stored_data->postback_send_id = message.postback_send_id;
stored_data->postback_server_model = message.postback_server_model;
stored_data->postback_stream_mode = message.postback_stream_mode;
stored_data->postback_system_fingerprint = message.postback_system_fingerprint;
stored_data->postback_time = message.postback_time;
stored_data->postback_total_tokens = message.postback_total_tokens;
stored_data->request_body = message.request_body;
stored_data->send_accept_header = message.send_accept_header;
stored_data->send_content_header = message.send_content_header;
stored_data->send_user_data = message.send_user_data;
stored_data->user_model = message.user_model;
// postback_model_data 不在这里赋值
}

View File

@ -3,7 +3,9 @@
#include <QListWidget>
#include <QScrollBar>
#include <map>
#include "ctai_textedit.h"
class ctai_msg_table : public QListWidget
{
Q_OBJECT
@ -24,9 +26,14 @@ private slots:
void on_item_clicked(QListWidgetItem *item);
private:
// 存储消息的map
std::map<QString, std::pair<model_data*, QListWidgetItem*>> message_map_;
QString last_send_id_; // 存储上一次的send_id
// 创建新的消息项
QListWidgetItem *create_message_item(ctai_textedit *message_widget);
void update_stored_data(model_data* stored_data, const model_data& message);
void update_item_height(QListWidgetItem* item, ctai_textedit* widget);
void update_items_width();
};
#endif

View File

@ -2,154 +2,62 @@
namespace ctai_parse {
QString parseMathInline(const QString& text) {
QString result = text;
QRegularExpression regex("\\$([^\\$]+)\\$");
result.replace(regex, "<span class='math-inline'>\\1</span>");
return result;
}
QString parseMathBlock(const QString& text) {
QString result = text;
QRegularExpression regex("\\$\\$([^\\$]+)\\$\\$");
result.replace(regex, "<div class='math-block'>\\1</div>");
return result;
}
QString parseMathSymbols(const QString& text) {
QString result = text;
// 希腊字母
result.replace("\\alpha", "α");
result.replace("\\beta", "β");
result.replace("\\gamma", "γ");
result.replace("\\delta", "δ");
result.replace("\\theta", "θ");
result.replace("\\sigma", "σ");
// 数学运算符
result.replace("\\sum", "");
result.replace("\\prod", "");
result.replace("\\int", "");
result.replace("\\times", "×");
result.replace("\\div", "÷");
result.replace("\\pm", "±");
// 比较符号
result.replace("\\leq", "");
result.replace("\\geq", "");
result.replace("\\neq", "");
result.replace("\\approx", "");
// 常用常数
result.replace("\\infty", "");
result.replace("\\pi", "π");
return result;
}
QString parseSubSuper(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\\^\\{([^\\}]+)\\}"), "<sup>\\1</sup>");
result.replace(QRegularExpression("\\_\\{([^\\}]+)\\}"), "<sub>\\1</sub>");
return result;
}
QString parseFraction(const QString& text) {
QString result = text;
QRegularExpression regex("\\\\frac\\{([^\\}]+)\\}\\{([^\\}]+)\\}");
result.replace(regex,
"<span class='fraction'>"
"<span class='numerator'>\\1</span>"
"<span class='denominator'>\\2</span>"
"</span>");
return result;
}
QString parseCodeBlockPython(const QString& text) {
QString result = text;
QRegularExpression regex("```python\n([^`]+)```");
result.replace(regex,
"<pre class='python-code'>"
"<code class='language-python'>\\1</code>"
"</pre>");
return result;
}
QString parseCodeBlock(const QString& text) {
QString result = text;
QRegularExpression regex("```([^\\n]*)\n([^`]+)```");
result.replace(regex,
"<pre class='code-block'>"
"<code class='language-\\1'>\\2</code>"
"</pre>");
return result;
}
QString parseInlineCode(const QString& text) {
QString result = text;
result.replace(QRegularExpression("`([^`]+)`"), "<code>\\1</code>");
return result;
}
QString parseHeaders(const QString& text) {
QString result = text;
result.replace(QRegularExpression("^# (.+)$", QRegularExpression::MultilineOption),
"<h1>\\1</h1>");
result.replace(QRegularExpression("^## (.+)$", QRegularExpression::MultilineOption),
"<h2>\\1</h2>");
result.replace(QRegularExpression("^### (.+)$", QRegularExpression::MultilineOption),
"<h3>\\1</h3>");
// 处理标题 h1-h6
QRegularExpression h1Regex("^# (.+)$", QRegularExpression::MultilineOption);
QRegularExpression h2Regex("^## (.+)$", QRegularExpression::MultilineOption);
QRegularExpression h3Regex("^### (.+)$", QRegularExpression::MultilineOption);
result.replace(h1Regex, "<h1>\\1</h1>");
result.replace(h2Regex, "<h2>\\1</h2>");
result.replace(h3Regex, "<h3>\\1</h3>");
return result;
}
QString parseEmphasis(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\\*\\*([^\\*]+)\\*\\*"), "<strong>\\1</strong>");
result.replace(QRegularExpression("\\*([^\\*]+)\\*"), "<em>\\1</em>");
return result;
}
QString parseLinks(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\\[([^\\]]+)\\]\\(([^\\)]+)\\)"),
"<a href=\"\\2\">\\1</a>");
// 处理粗体和斜体
QRegularExpression boldRegex("\\*\\*(.+?)\\*\\*");
QRegularExpression italicRegex("\\*(.+?)\\*");
QRegularExpression boldUnderRegex("__(.+?)__");
QRegularExpression italicUnderRegex("_(.+?)_");
result.replace(boldRegex, "<strong>\\1</strong>");
result.replace(italicRegex, "<em>\\1</em>");
result.replace(boldUnderRegex, "<strong>\\1</strong>");
result.replace(italicUnderRegex, "<em>\\1</em>");
return result;
}
QString parseLists(const QString& text) {
QString result = text;
result.replace(QRegularExpression("^- (.+)$", QRegularExpression::MultilineOption),
"<li>\\1</li>");
return result;
}
QString parseLineBreaks(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\n"), "<br>");
// 处理无序列表
QRegularExpression listItemRegex("^[\\*\\-\\+] (.+)$", QRegularExpression::MultilineOption);
result.replace(listItemRegex, "<li>\\1</li>");
// 将连续的<li>包装在<ul>中
QRegularExpression consecutiveListItems("(<li>.+</li>\\n?)+");
result.replace(consecutiveListItems, "<ul>\\1</ul>");
return result;
}
QString parseMarkdown(const QString& text) {
QString result = text;
// 处理数学相关
result = parseMathBlock(result);
result = parseMathInline(result);
result = parseMathSymbols(result);
result = parseSubSuper(result);
result = parseFraction(result);
// 处理代码块
result = parseCodeBlockPython(result);
result = parseCodeBlock(result);
result = parseInlineCode(result);
// 处理Markdown基本语法
// 按顺序应用所有解析器
result = parseHeaders(result);
result = parseEmphasis(result);
result = parseLinks(result);
result = parseLists(result);
result = parseLineBreaks(result);
// 处理段落
result.replace(QRegularExpression("\\n\\n(.+?)\\n"), "<p>\\1</p>\n");
return result;
}

View File

@ -5,27 +5,13 @@
#include <QRegularExpression>
namespace ctai_parse {
// 数学公式处理
QString parseMathInline(const QString& text); // 处理行内公式 $...$
QString parseMathBlock(const QString& text); // 处理块级公式 $$...$$
QString parseMathSymbols(const QString& text); // 处理数学符号 \alpha 等
QString parseSubSuper(const QString& text); // 处理上标下标
QString parseFraction(const QString& text); // 处理分数
// 代码块处理
QString parseCodeBlockPython(const QString& text); // 处理Python代码块
QString parseCodeBlock(const QString& text); // 处理其他代码块
QString parseInlineCode(const QString& text); // 处理行内代码
// Markdown基本语法处理
QString parseHeaders(const QString& text); // 处理标题 #
QString parseEmphasis(const QString& text); // 处理强调 ** *
QString parseLinks(const QString& text); // 处理链接 []()
QString parseLists(const QString& text); // 处理列表 -
QString parseLineBreaks(const QString& text); // 处理换行
// 统一处理函数
QString parseMarkdown(const QString& text); // 整合所有处理
// Markdown解析辅助函数
QString parseHeaders(const QString& text); // 解析标题
QString parseEmphasis(const QString& text); // 解析粗体和斜体
QString parseLists(const QString& text); // 解析列表
}
#endif // CTAI_PARSESTRING_H

View File

@ -25,16 +25,20 @@ void ctai_textedit::init_layout()
m_msg_copy= new QPushButton();
m_msg_save = new QPushButton();
m_msg_menu = new QPushButton();
m_msg_fold = new QPushButton();
m_msg_del->setObjectName("m_msg_del");
m_msg_copy->setObjectName("m_msg_copy");
m_msg_save->setObjectName("m_msg_save");
m_msg_menu->setObjectName("m_msg_menu");
m_msg_fold->setObjectName("m_msg_fold");
m_msg_fold->setIcon(QIcon(":res/img/btn/btn_info_up.png"));
header_info_Layout->addWidget(m_msg_header_ico);
header_info_Layout->addWidget(m_msg_header);
header_info_Layout->addWidget(m_msg_del);
header_info_Layout->addWidget(m_msg_copy);
header_info_Layout->addWidget(m_msg_save);
header_info_Layout->addWidget(m_msg_menu);
header_info_Layout->addWidget(m_msg_fold);
header_info_Layout->setContentsMargins(0, 0, 0, 0);
headerLayout->addLayout(header_info_Layout);
@ -59,16 +63,38 @@ void ctai_textedit::init_layout()
// 3. 历史信息QTextEdit
historyLayout=new QVBoxLayout();
m_msg_history = new QTextEdit();
m_msg_history = new QTextBrowser(this);
m_msg_history->setOpenExternalLinks(true); // 允许打开外部链接
m_msg_history->setOpenLinks(true); // 允许打开链接
m_msg_history->setTextInteractionFlags(
Qt::TextSelectableByMouse |
Qt::TextSelectableByKeyboard |
Qt::LinksAccessibleByMouse |
Qt::LinksAccessibleByKeyboard
);
m_msg_history->setObjectName("m_msg_history");
m_msg_history->setReadOnly(true);
historyLayout->addWidget(m_msg_history);
historyLayout->setContentsMargins(0, 0, 0, 0);
// 设置样式表
m_msg_history->setStyleSheet(
"QTextBrowser {"
" background-color: transparent;"
" border: none;"
" padding: 5px;"
"}"
);
// 设置字体
QFont font = m_msg_history->font();
font.setPointSize(10); // 设置字体大小
m_msg_history->setFont(font);
// 组合布局
mainLayout->addLayout(headerLayout);
mainLayout->addLayout(historyLayout);
mainLayout->addItem(bottom_spacer);
mainLayout->setStretch(0, 2);
mainLayout->setStretch(1, 8);
mainLayout->setSpacing(1);
@ -81,18 +107,26 @@ void ctai_textedit::connect_signals()
connect(m_msg_copy, &QPushButton::clicked, this, &ctai_textedit::on_copy_clicked);
connect(m_msg_save, &QPushButton::clicked, this, &ctai_textedit::on_save_clicked);
connect(m_msg_menu, &QPushButton::clicked, this, &ctai_textedit::on_menu_clicked);
connect(m_msg_fold, &QPushButton::clicked, this, &ctai_textedit::on_fold_clicked);
}
// 实现折叠功能的槽函数
void ctai_textedit::on_fold_clicked()
{
m_is_folded = !m_is_folded;
if (m_is_folded) {
m_msg_history->setMaximumHeight(0);
} else {
m_msg_history->setMaximumHeight(QWIDGETSIZE_MAX);
}
// 更新按钮图标
m_msg_fold->setIcon(QIcon(m_is_folded ? ":res/img/btn/btn_info_up.png" : ":res/img/btn/btn_info_down.png"));
}
void ctai_textedit::add_message(const model_data &message)
{
if (message.postback_stream_mode)
{
stream_message(message);
}
else
{
stream_message_ex(message);
}
stream_message(message);
emit content_height_changed();
}
int ctai_textedit::get_content_height() const
@ -104,15 +138,10 @@ int ctai_textedit::get_content_height() const
// 添加一些边距
return header_height + history_height + token_height + mainLayout->spacing() * 2;
}
void ctai_textedit::stream_message(const model_data &message)
}void ctai_textedit::stream_message(const model_data &message)
{
}
void ctai_textedit::stream_message_ex(const model_data &message)
{
m_msg_history->setText(QSL(message.postback_model_data));
m_msg_header->setText("ID:" + QSL(message.postback_send_id) + " | FP:" + QSL(message.postback_system_fingerprint) + " | Time" + QSL(message.postback_time));
m_msg_history->setText(ctai_parse::parseMarkdown(QSL(message.postback_model_data)));
m_msg_tokens->setText("prompt tokens:" + QSN(message.postback_prompt_tokens) +" | "+
"completion tokens:" + QSN(message.postback_completion_tokens) +" | "+
"total tokens:" + QSN(message.postback_total_tokens) +" | "+

View File

@ -17,7 +17,9 @@
#include <QMenu>
#include <QFileDialog>
#include <QMessageBox>
#include <QTextBrowser>
#include "ctai_base.h"
#include "ctai_parsestring.h"
class ctai_textedit : public QWidget
{
@ -33,6 +35,7 @@ private slots:
void on_copy_clicked(); // 复制按钮
void on_save_clicked(); // 保存按钮
void on_menu_clicked(); // 菜单按钮
void on_fold_clicked(); // 折叠按钮
signals:
// 内容高度变化信号
@ -57,11 +60,14 @@ private:
QPushButton *m_msg_header_ico;
QLineEdit *m_msg_header;
QLineEdit *m_msg_tokens;
QTextEdit *m_msg_history;
QTextBrowser *m_msg_history;
QPushButton *m_msg_del;
QPushButton *m_msg_copy;
QPushButton *m_msg_save;
QPushButton *m_msg_menu;
QPushButton *m_msg_fold; // 折叠按钮
bool m_is_folded = false; // 折叠状态
QSpacerItem *bottom_spacer = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
};
#endif // CTAI_TEXTEDIT_H