Skip to content

Commit bf08d0b

Browse files
committed
fix: 功能小修复调整;
1 parent 3fdd627 commit bf08d0b

9 files changed

Lines changed: 716 additions & 466 deletions

File tree

lang/en_US/winghex_en_US.ts

Lines changed: 128 additions & 120 deletions
Large diffs are not rendered by default.

lang/zh_CN/winghex_zh_CN.ts

Lines changed: 128 additions & 120 deletions
Large diffs are not rendered by default.

lang/zh_TW/winghex_zh_TW.ts

Lines changed: 128 additions & 120 deletions
Large diffs are not rendered by default.

src/class/wingcstruct.cpp

Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,35 @@ void WingCStruct::onRegisterScriptObj(WingHex::IWingAngel *o) {
566566
&WingCStruct::getParsedWarns),
567567
this, std::placeholders::_1),
568568
QStringLiteral("getParsedWarns"));
569+
570+
o->registerGlobalFunction(
571+
WingHex::Meta_String | WingHex::Meta_Array,
572+
std::bind(QOverload<const QVariantList &>::of(
573+
&WingCStruct::structOrUnionMemberNames),
574+
this, std::placeholders::_1),
575+
QStringLiteral("structOrUnionMemberNames"),
576+
{qMakePair(WingHex::Meta_String, QStringLiteral("type"))});
577+
o->registerGlobalFunction(
578+
WingHex::Meta_String | WingHex::Meta_Array,
579+
std::bind(QOverload<const QVariantList &>::of(
580+
&WingCStruct::structOrUnionMemberDataTypes),
581+
this, std::placeholders::_1),
582+
QStringLiteral("structOrUnionMemberDataTypes"),
583+
{qMakePair(WingHex::Meta_String, QStringLiteral("type"))});
584+
o->registerGlobalFunction(
585+
WingHex::Meta_String | WingHex::Meta_Array,
586+
std::bind(QOverload<const QVariantList &>::of(
587+
&WingCStruct::structOrUnionMemberDecls),
588+
this, std::placeholders::_1),
589+
QStringLiteral("structOrUnionMemberDecls"),
590+
{qMakePair(WingHex::Meta_String, QStringLiteral("type"))});
591+
o->registerGlobalFunction(
592+
WingHex::Meta_String | WingHex::Meta_Array,
593+
std::bind(QOverload<const QVariantList &>::of(
594+
&WingCStruct::structOrUnionMemberDeclWithoutNames),
595+
this, std::placeholders::_1),
596+
QStringLiteral("structOrUnionMemberDeclWithoutNames"),
597+
{qMakePair(WingHex::Meta_String, QStringLiteral("type"))});
569598
}
570599

571600
bool WingCStruct::parseFromSource(const QString &header) {
@@ -793,6 +822,126 @@ QStringList WingCStruct::getParsedErrors() const { return _errors; }
793822

794823
QStringList WingCStruct::getParsedWarns() const { return _warns; }
795824

825+
QStringList WingCStruct::structOrUnionMemberNames(const QString &type) const {
826+
QStringList buffer;
827+
auto t = _parser->resolveTypeName(type);
828+
if (_parser->containsStruct(t)) {
829+
auto r = _parser->structMembers(t);
830+
for (auto &m : r) {
831+
buffer.append(m.var_name);
832+
}
833+
} else if (_parser->containsUnion(t)) {
834+
auto r = _parser->unionMembers(t);
835+
for (auto &m : r) {
836+
buffer.append(m.var_name);
837+
}
838+
}
839+
840+
return buffer;
841+
}
842+
843+
QStringList
844+
WingCStruct::structOrUnionMemberDataTypes(const QString &type) const {
845+
QStringList buffer;
846+
auto t = _parser->resolveTypeName(type);
847+
if (_parser->containsStruct(t)) {
848+
auto r = _parser->structMembers(t);
849+
for (auto &m : r) {
850+
buffer.append(m.data_type);
851+
}
852+
} else if (_parser->containsUnion(t)) {
853+
auto r = _parser->unionMembers(t);
854+
for (auto &m : r) {
855+
buffer.append(m.data_type);
856+
}
857+
}
858+
return buffer;
859+
}
860+
861+
QStringList WingCStruct::structOrUnionMemberDecls(const QString &type) const {
862+
QStringList buffer;
863+
static QString padding(4, ' ');
864+
auto t = _parser->resolveTypeName(type);
865+
866+
auto op = [](const VariableDeclaration &m) -> QString {
867+
QString buffer;
868+
QTextStream output(&buffer);
869+
output << m.data_type;
870+
871+
if (m.is_pointer)
872+
output << QStringLiteral("* ");
873+
874+
output << padding;
875+
if (m.var_name.isEmpty()) {
876+
output << '?';
877+
} else {
878+
output << m.var_name;
879+
}
880+
881+
for (auto &dim : m.array_dims) {
882+
output << '[' << dim << ']';
883+
}
884+
885+
if (m.bit_size) {
886+
output << QStringLiteral(" : ") << m.bit_size;
887+
}
888+
return buffer;
889+
};
890+
891+
if (_parser->containsStruct(t)) {
892+
auto r = _parser->structMembers(t);
893+
for (auto &m : r) {
894+
buffer.append(op(m));
895+
}
896+
} else if (_parser->containsUnion(t)) {
897+
auto r = _parser->unionMembers(t);
898+
for (auto &m : r) {
899+
buffer.append(op(m));
900+
}
901+
}
902+
return buffer;
903+
}
904+
905+
QStringList
906+
WingCStruct::structOrUnionMemberDeclWithoutNames(const QString &type) const {
907+
QStringList buffer;
908+
static QString padding(4, ' ');
909+
auto t = _parser->resolveTypeName(type);
910+
911+
auto op = [](const VariableDeclaration &m) -> QString {
912+
QString buffer;
913+
QTextStream output(&buffer);
914+
output << m.data_type;
915+
916+
if (m.is_pointer)
917+
output << QStringLiteral("* ");
918+
919+
output << padding;
920+
921+
for (auto &dim : m.array_dims) {
922+
output << '[' << dim << ']';
923+
}
924+
925+
if (m.bit_size) {
926+
output << QStringLiteral(" : ") << m.bit_size;
927+
}
928+
return buffer;
929+
};
930+
931+
if (_parser->containsStruct(t)) {
932+
auto r = _parser->structMembers(t);
933+
for (auto &m : r) {
934+
buffer.append(op(m));
935+
}
936+
} else if (_parser->containsUnion(t)) {
937+
auto r = _parser->unionMembers(t);
938+
for (auto &m : r) {
939+
buffer.append(op(m));
940+
}
941+
}
942+
return buffer;
943+
}
944+
796945
bool WingCStruct::parseFromSource(const WingHex::SenderInfo &sender,
797946
const QString &header) {
798947
Q_UNUSED(sender);
@@ -1006,6 +1155,33 @@ QStringList WingCStruct::getParsedWarns(const WingHex::SenderInfo &sender) {
10061155
return getParsedWarns();
10071156
}
10081157

1158+
QStringList
1159+
WingCStruct::structOrUnionMemberNames(const WingHex::SenderInfo &sender,
1160+
const QString &type) {
1161+
Q_UNUSED(sender);
1162+
return structOrUnionMemberNames(type);
1163+
}
1164+
1165+
QStringList
1166+
WingCStruct::structOrUnionMemberDataTypes(const WingHex::SenderInfo &sender,
1167+
const QString &type) {
1168+
Q_UNUSED(sender);
1169+
return structOrUnionMemberDataTypes(type);
1170+
}
1171+
1172+
QStringList
1173+
WingCStruct::structOrUnionMemberDecls(const WingHex::SenderInfo &sender,
1174+
const QString &type) {
1175+
Q_UNUSED(sender);
1176+
return structOrUnionMemberDecls(type);
1177+
}
1178+
1179+
QStringList WingCStruct::structOrUnionMemberDeclWithoutNames(
1180+
const WingHex::SenderInfo &sender, const QString &type) {
1181+
Q_UNUSED(sender);
1182+
return structOrUnionMemberDeclWithoutNames(type);
1183+
}
1184+
10091185
QString WingCStruct::getqsizeTypeAsString() const {
10101186
return sizeof(qsizetype) == sizeof(quint64) ? QStringLiteral("int64")
10111187
: QStringLiteral("int32");
@@ -1947,6 +2123,55 @@ QVariant WingCStruct::getParsedWarns(const QVariantList &params) {
19472123
return getParsedWarns();
19482124
}
19492125

2126+
QVariant WingCStruct::structOrUnionMemberNames(const QVariantList &params) {
2127+
if (params.size() != 1) {
2128+
return getScriptCallError(-1, tr("InvalidParamsCount"));
2129+
}
2130+
auto type_v = params.at(0);
2131+
if (!type_v.canConvert<QString>()) {
2132+
return getScriptCallError(-2, tr("InvalidParam"));
2133+
}
2134+
auto type = type_v.toString();
2135+
return structOrUnionMemberNames(type);
2136+
}
2137+
2138+
QVariant WingCStruct::structOrUnionMemberDataTypes(const QVariantList &params) {
2139+
if (params.size() != 1) {
2140+
return getScriptCallError(-1, tr("InvalidParamsCount"));
2141+
}
2142+
auto type_v = params.at(0);
2143+
if (!type_v.canConvert<QString>()) {
2144+
return getScriptCallError(-2, tr("InvalidParam"));
2145+
}
2146+
auto type = type_v.toString();
2147+
return structOrUnionMemberDataTypes(type);
2148+
}
2149+
2150+
QVariant WingCStruct::structOrUnionMemberDecls(const QVariantList &params) {
2151+
if (params.size() != 1) {
2152+
return getScriptCallError(-1, tr("InvalidParamsCount"));
2153+
}
2154+
auto type_v = params.at(0);
2155+
if (!type_v.canConvert<QString>()) {
2156+
return getScriptCallError(-2, tr("InvalidParam"));
2157+
}
2158+
auto type = type_v.toString();
2159+
return structOrUnionMemberDecls(type);
2160+
}
2161+
2162+
QVariant
2163+
WingCStruct::structOrUnionMemberDeclWithoutNames(const QVariantList &params) {
2164+
if (params.size() != 1) {
2165+
return getScriptCallError(-1, tr("InvalidParamsCount"));
2166+
}
2167+
auto type_v = params.at(0);
2168+
if (!type_v.canConvert<QString>()) {
2169+
return getScriptCallError(-2, tr("InvalidParam"));
2170+
}
2171+
auto type = type_v.toString();
2172+
return structOrUnionMemberDeclWithoutNames(type);
2173+
}
2174+
19502175
bool WingCStruct::isLittleEndian() const { return m_islittle; }
19512176

19522177
void WingCStruct::setIsLittleEndian(bool newIslittle) {

src/class/wingcstruct.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,11 @@ class WingCStruct : public WingHex::IWingPlugin {
214214
QStringList getParsedErrors() const;
215215
QStringList getParsedWarns() const;
216216

217+
QStringList structOrUnionMemberNames(const QString &type) const;
218+
QStringList structOrUnionMemberDataTypes(const QString &type) const;
219+
QStringList structOrUnionMemberDecls(const QString &type) const;
220+
QStringList structOrUnionMemberDeclWithoutNames(const QString &type) const;
221+
217222
// services
218223
private:
219224
// basic
@@ -291,6 +296,16 @@ class WingCStruct : public WingHex::IWingPlugin {
291296
WING_SERVICE QStringList getParsedErrors(const WingHex::SenderInfo &sender);
292297
WING_SERVICE QStringList getParsedWarns(const WingHex::SenderInfo &sender);
293298

299+
// for query struct/union internals
300+
WING_SERVICE QStringList structOrUnionMemberNames(
301+
const WingHex::SenderInfo &sender, const QString &type);
302+
WING_SERVICE QStringList structOrUnionMemberDataTypes(
303+
const WingHex::SenderInfo &sender, const QString &type);
304+
WING_SERVICE QStringList structOrUnionMemberDecls(
305+
const WingHex::SenderInfo &sender, const QString &type);
306+
WING_SERVICE QStringList structOrUnionMemberDeclWithoutNames(
307+
const WingHex::SenderInfo &sender, const QString &type);
308+
294309
private:
295310
WingHex::MetaType getqsizetypeMetaType() const;
296311

@@ -358,6 +373,11 @@ class WingCStruct : public WingHex::IWingPlugin {
358373
QVariant getParsedErrors(const QVariantList &params);
359374
QVariant getParsedWarns(const QVariantList &params);
360375

376+
QVariant structOrUnionMemberNames(const QVariantList &params);
377+
QVariant structOrUnionMemberDataTypes(const QVariantList &params);
378+
QVariant structOrUnionMemberDecls(const QVariantList &params);
379+
QVariant structOrUnionMemberDeclWithoutNames(const QVariantList &params);
380+
361381
private:
362382
CTypeParser *_parser = nullptr;
363383
QList<WingHex::SettingPage *> _setpgs;

src/control/toast.cpp

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@
2727
#include <QTimerEvent>
2828
#include <QWindow>
2929

30-
#include "class/eventfilter.h"
31-
3230
int Toast::LENGTH_LONG = 4000;
3331
int Toast::LENGTH_SHORT = 1500;
3432
static const int TIMER_INTERVAL = 50;
@@ -59,23 +57,8 @@ void Toast::toast(QWidget *parent, const QPixmap &icon,
5957
auto str = strContent;
6058
str.remove(regex);
6159
toast = new Toast(str, icon, nToastInterval, parent);
62-
6360
connect(toast, &Toast::destroyed, toast, [&] { toast = nullptr; });
6461

65-
auto e0 = new EventFilter(QEvent::Move, toast);
66-
auto e1 = new EventFilter(QEvent::Resize, toast);
67-
68-
auto callback = [](QObject *, QEvent *) {
69-
if (toast) {
70-
toast->setToastPos(toast->lastToastPos());
71-
}
72-
};
73-
connect(e0, &EventFilter::eventTriggered, toast, callback);
74-
connect(e1, &EventFilter::eventTriggered, toast, callback);
75-
76-
parent->installEventFilter(e0);
77-
parent->installEventFilter(e1);
78-
7962
toast->show();
8063
}
8164

@@ -89,12 +72,8 @@ QSize Toast::calculateTextSize() {
8972
}
9073

9174
void Toast::init() {
92-
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint |
93-
Qt::WindowSystemMenuHint | Qt::BypassWindowManagerHint |
94-
Qt::WindowTransparentForInput);
95-
setAttribute(Qt::WA_TranslucentBackground);
75+
setWindowFlags(Qt::Popup);
9676
setAttribute(Qt::WA_ShowWithoutActivating);
97-
9877
setToastPos(TOAST_POS::BOTTOM);
9978
auto w = _parent->width();
10079
constexpr auto PADDING = 100;
@@ -146,16 +125,9 @@ void Toast::paintEvent(QPaintEvent *) {
146125
QSize widgetSize = size();
147126

148127
QPen textPen(Qt::PenStyle::SolidLine);
149-
150128
textPen.setColor(m_textColor);
151129
textPen.setJoinStyle(Qt::PenJoinStyle::RoundJoin);
152-
153-
QPen emptyPen(Qt::PenStyle::NoPen);
154-
155-
painter.setPen(emptyPen);
156-
painter.setBrush(m_backColor);
157-
painter.drawRoundedRect(0, 0, widgetSize.width(), widgetSize.height(), 10,
158-
10);
130+
painter.fillRect(this->rect(), m_backColor);
159131

160132
auto font = this->displayFont();
161133
painter.setFont(font);

0 commit comments

Comments
 (0)