Skip to content

Commit 09fe57e

Browse files
committed
修改字符串后,显示页的一些属性值和tooltip没有更新的问题。
1 parent 1318a97 commit 09fe57e

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

src/QResArscEditor.cpp

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,13 @@ void QResArscEditor::refreshResTableType(const TTablePackage& _tablePackage, qui
8282
QSharedPointer<ResTable_entry> t_ptrEntry = t_type.entryValue[i];
8383
if (t_ptrEntry.isNull())
8484
continue;
85+
QVariant t_vEntry;
86+
t_vEntry.setValue(t_ptrEntry);
8587
if ((*t_ptrEntry).size == sizeof(ResTable_entry))
8688
{
8789
TTableValueEntry* t_pValueEntry = reinterpret_cast<TTableValueEntry*>(t_ptrEntry.get());
8890
QTreeWidgetItem* t_valueItem = new QTreeWidgetItem(m_TW_value);
91+
t_valueItem->setData(0, eValueItemRole_entry, t_vEntry);
8992
widgetItemSetData(t_valueItem, eValueItemType_value, t_pValueEntry->value.data,
9093
(uint32_t)t_pValueEntry->value.dataType, i, QString("0x7f%1%2").arg(_typeid, 2, 16, QChar('0')).arg(i, 4, 16, QChar('0')));
9194
t_valueItem->setText(1, _tablePackage.getKeyString(t_pValueEntry->key.index));
@@ -100,6 +103,7 @@ void QResArscEditor::refreshResTableType(const TTablePackage& _tablePackage, qui
100103
{
101104
TTableMapEntry* t_pMapValue = reinterpret_cast<TTableMapEntry*>(t_ptrEntry.get());
102105
QTreeWidgetItem* t_mapItem = new QTreeWidgetItem(m_TW_value);
106+
t_mapItem->setData(0, eValueItemRole_entry, t_vEntry);
103107
widgetItemSetData(t_mapItem, eValueItemType_array, t_pMapValue->key.index,
104108
(uint32_t)Res_value::_DataType::TYPE_NULL, i, QString("0x7f%1%2").arg(_typeid, 2, 16, QChar('0')).arg(i, 4, 16, QChar('0')));
105109
t_mapItem->setText(1, _tablePackage.getKeyString(t_pMapValue->key.index));
@@ -122,6 +126,39 @@ void QResArscEditor::refreshResTableType(const TTablePackage& _tablePackage, qui
122126
}
123127
}
124128
}
129+
void QResArscEditor::refreshAllValueDataTooltip(void)
130+
{
131+
for (int i = 0; i < m_TW_value->topLevelItemCount(); ++i)
132+
{
133+
QTreeWidgetItem* t_entryItem = m_TW_value->topLevelItem(i);
134+
if (t_entryItem->data(0, eValueItemRole_type).toUInt() == eValueItemType_value)
135+
{
136+
TTableValueEntry* t_pValueEntry = reinterpret_cast<TTableValueEntry*>(t_entryItem->data(0, eValueItemRole_entry).value<QSharedPointer<ResTable_entry>>().get());
137+
if (t_pValueEntry->value.dataType == Res_value::_DataType::TYPE_STRING)
138+
{
139+
t_entryItem->setData(0, eValueItemRole_data, t_pValueEntry->value.data);
140+
t_entryItem->setToolTip(2, QString("0x%1(refCount:%2)").arg(t_pValueEntry->value.data, 8, 16, QChar('0')).
141+
arg(QString::number(m_Parser->getReferenceCount(t_pValueEntry->value.data))));
142+
}
143+
}
144+
else
145+
{
146+
TTableMapEntry* t_pMapValue = reinterpret_cast<TTableMapEntry*>(t_entryItem->data(0, eValueItemRole_entry).value<QSharedPointer<ResTable_entry>>().get());
147+
Q_ASSERT(t_pMapValue->count == t_entryItem->childCount());
148+
for (quint32 j = 0; j < t_pMapValue->count; ++j)
149+
{
150+
ResTable_map& t_tableMap = t_pMapValue->tablemap[j];
151+
QTreeWidgetItem* t_mapValueItem = t_entryItem->child(j);
152+
if (t_tableMap.value.dataType == Res_value::_DataType::TYPE_STRING)
153+
{
154+
t_mapValueItem->setData(0, eValueItemRole_data, t_tableMap.value.data);
155+
t_mapValueItem->setToolTip(2, QString("0x%1(refCount:%2)").arg(t_tableMap.value.data, 8, 16, QChar('0')).
156+
arg(QString::number(m_Parser->getReferenceCount(t_tableMap.value.data))));
157+
}
158+
}
159+
}
160+
}
161+
}
125162
void QResArscEditor::onOpenReleased_Slot(void)
126163
{
127164
QString t_FileName = QFileDialog::getOpenFileName(this, tr("Open ARSC File"), m_BasePath,
@@ -370,8 +407,10 @@ void QResArscEditor::onEditValueTriggered_slot(void)
370407
else
371408
t_newValue = m_Parser->setValue(t_tablePackage, t_typeid, t_specid, t_item->data(0, eValueItemRole_id).toUInt(), t_newType, t_value);
372409
}
373-
t_item->setData(0, eValueItemRole_datatype, (uint32_t)t_newValue->dataType);
374410
t_item->setText(2, t_tablePackage.resValue2String(*t_newValue));
411+
//如果改的是字符串,则需要重新刷新当前页的字符串的data和tooltip,因为插入删除字符串后,这两个的数据都有可能改变
412+
if (t_dataType == (uint32_t)Res_value::_DataType::TYPE_STRING || t_newType == Res_value::_DataType::TYPE_STRING)
413+
refreshAllValueDataTooltip();
375414
}
376415
void QResArscEditor::onAddLocaleTriggered_slot(void)
377416
{
@@ -561,7 +600,7 @@ void QResArscEditor::onImportLocaleTriggered_slot(void)
561600
{
562601
TTableMapEntry* t_pMapValue = reinterpret_cast<TTableMapEntry*>(t_ptrEntry.get());
563602
QString t_name = t_tablePackage.getKeyString(t_pMapValue->key.index);
564-
if (!t_arrayMap.contains(t_name))// || t_arrayMap[t_name].size() != t_pMapValue->tablemap.size())
603+
if (!t_arrayMap.contains(t_name))
565604
continue;
566605
const QMap<uint32_t, TValue>& t_values = t_arrayMap[t_name];
567606
for (int j = 0; j < t_pMapValue->tablemap.size(); ++j)

src/QResArscEditor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ enum EValueItemType
2626
enum EValueItemRole
2727
{
2828
eValueItemRole_type = Qt::UserRole, //是什么节点,数据,数组还是数组元素
29+
eValueItemRole_entry,
2930
eValueItemRole_data,
3031
eValueItemRole_datatype,
3132
eValueItemRole_id,
@@ -45,7 +46,7 @@ class QResArscEditor : public QResArscEditorUI
4546
void onRefreshTablePackage(const QString& _name, const TTablePackage& _package);
4647
void onRefreshTablePackageData(const QString& _packageName, ETreeItemType _type, uint32_t _id1, uint32_t _id2, const QString& _name);
4748
void refreshResTableType(const TTablePackage& _tablePackage, quint32 _typeid, quint32 _specid);
48-
49+
void refreshAllValueDataTooltip(void);
4950
void onOpenReleased_Slot(void);
5051
void onSaveReleased_Slot(void);
5152
void onTreeCurrentItemChanged_slot(QTreeWidgetItem* _current, QTreeWidgetItem* _previous);

src/ResArscStruct.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@ struct TTableTypeEx :public ResTable_type
529529
return *this;
530530
}
531531
};
532+
Q_DECLARE_METATYPE(QSharedPointer<ResTable_entry>)
532533

533534
struct TRichString
534535
{

0 commit comments

Comments
 (0)