Merge pull request #12 from jackoalan/id-select
Make InstanceID label selectable and add parsing tooltip
This commit is contained in:
commit
cecf16849e
|
@ -16,6 +16,19 @@ enum class ELinkType
|
|||
Outgoing
|
||||
};
|
||||
|
||||
class CInstanceID
|
||||
{
|
||||
uint32 mId = 0;
|
||||
public:
|
||||
operator uint32() const { return mId; }
|
||||
CInstanceID() = default;
|
||||
CInstanceID(uint32 id) : mId(id) {}
|
||||
CInstanceID& operator=(uint32 id) { mId = id; return *this; }
|
||||
uint8 Layer() const { return uint8((mId >> 26u) & 0x3fu); }
|
||||
uint16 Area() const { return uint16((mId >> 16u) & 0x3ffu); }
|
||||
uint16 Id() const { return uint16(mId & 0xffffu); }
|
||||
};
|
||||
|
||||
class CScriptObject
|
||||
{
|
||||
friend class CScriptLoader;
|
||||
|
@ -26,7 +39,7 @@ class CScriptObject
|
|||
CScriptLayer *mpLayer;
|
||||
uint32 mVersion;
|
||||
|
||||
uint32 mInstanceID;
|
||||
CInstanceID mInstanceID;
|
||||
std::vector<CLink*> mOutLinks;
|
||||
std::vector<CLink*> mInLinks;
|
||||
std::vector<char> mPropertyData;
|
||||
|
@ -75,7 +88,7 @@ public:
|
|||
CScriptLayer* Layer() const { return mpLayer; }
|
||||
uint32 Version() const { return mVersion; }
|
||||
uint32 ObjectTypeID() const { return mpTemplate->ObjectID(); }
|
||||
uint32 InstanceID() const { return mInstanceID; }
|
||||
CInstanceID InstanceID() const { return mInstanceID; }
|
||||
uint32 NumLinks(ELinkType Type) const { return (Type == ELinkType::Incoming ? mInLinks.size() : mOutLinks.size()); }
|
||||
CLink* Link(ELinkType Type, uint32 Index) const { return (Type == ELinkType::Incoming ? mInLinks[Index] : mOutLinks[Index]); }
|
||||
void* PropertyData() const { return (void*) mPropertyData.data(); }
|
||||
|
|
|
@ -84,7 +84,7 @@ public:
|
|||
|
||||
class CInstancePtr
|
||||
{
|
||||
uint32 mInstanceID;
|
||||
CInstanceID mInstanceID;
|
||||
CGameArea *mpArea;
|
||||
bool mValid;
|
||||
|
||||
|
@ -94,12 +94,12 @@ public:
|
|||
|
||||
inline void SetInstance(CScriptObject *pInst)
|
||||
{
|
||||
mInstanceID = pInst ? pInst->InstanceID() : 0;
|
||||
mInstanceID = pInst ? pInst->InstanceID() : CInstanceID();
|
||||
mpArea = pInst ? pInst->Area() : nullptr;
|
||||
mValid = pInst ? true : false;
|
||||
}
|
||||
|
||||
inline uint32 InstanceID() const { return mInstanceID; }
|
||||
inline CInstanceID InstanceID() const { return mInstanceID; }
|
||||
inline CGameArea* Area() const { return mpArea; }
|
||||
inline CScriptObject* operator* () const { return mValid ? mpArea->InstanceByID(mInstanceID) : nullptr; }
|
||||
inline CScriptObject* operator->() const { return mValid ? mpArea->InstanceByID(mInstanceID) : nullptr; }
|
||||
|
|
|
@ -10,6 +10,7 @@ WEditorProperties::WEditorProperties(QWidget *pParent /*= 0*/)
|
|||
{
|
||||
mpInstanceInfoLabel = new QLabel;
|
||||
mpInstanceInfoLabel->setText("<i>[No selection]</i>");
|
||||
mpInstanceInfoLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||
mpInstanceInfoLayout = new QHBoxLayout;
|
||||
mpInstanceInfoLayout->addWidget(mpInstanceInfoLabel);
|
||||
|
||||
|
@ -124,14 +125,22 @@ void WEditorProperties::OnSelectionModified()
|
|||
mpInstanceInfoLabel->setText(QString("<i>[%1 objects selected]</i>").arg(pSelection->Size()));
|
||||
mpInstanceNameLineEdit->clear();
|
||||
}
|
||||
|
||||
mpInstanceInfoLabel->setToolTip({});
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
CScriptNode *pScript = static_cast<CScriptNode*>(mpDisplayNode);
|
||||
TString InstanceID = TString::HexString(pScript->Instance()->InstanceID(), 8, false);
|
||||
CInstanceID InstanceID = pScript->Instance()->InstanceID();
|
||||
TString ObjectType = pScript->Template()->Name();
|
||||
mpInstanceInfoLabel->setText(QString("[%1] [%2]").arg( TO_QSTRING(ObjectType) ).arg( TO_QSTRING(InstanceID) ));
|
||||
mpInstanceInfoLabel->setText(QString("[%1] [%2]").
|
||||
arg( TO_QSTRING(ObjectType) ).
|
||||
arg( TO_QSTRING(TString::HexString(InstanceID, 8, false)) ));
|
||||
mpInstanceInfoLabel->setToolTip(QString("[Layer: %1] [Area: %2] [ID: %3]").
|
||||
arg( InstanceID.Layer() ).
|
||||
arg( InstanceID.Area() ).
|
||||
arg( TO_QSTRING(TString::HexString(InstanceID.Id(), 4, false)) ));
|
||||
|
||||
UpdatePropertyValues();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue