| 1007 | } |
| 1008 | |
| 1009 | bool RichResourceTextMouseEvent(const QWidget *owner, const QVariant &var, QRect rect, |
| 1010 | const QFont &font, QMouseEvent *event) |
| 1011 | { |
| 1012 | // only process clicks or moves |
| 1013 | if(event->type() != QEvent::MouseButtonRelease && event->type() != QEvent::MouseMove) |
| 1014 | return false; |
| 1015 | |
| 1016 | // only process left button clicks |
| 1017 | if(event->type() == QEvent::MouseButtonRelease && event->button() != Qt::LeftButton) |
| 1018 | return false; |
| 1019 | |
| 1020 | // special case handling for ResourceId/GPUAddress on its own |
| 1021 | if(var.userType() == qMetaTypeId<ResourceId>() || var.userType() == qMetaTypeId<GPUAddressPtr>()) |
| 1022 | { |
| 1023 | ResourceId id; |
| 1024 | GPUAddressPtr ptr; |
| 1025 | const ICaptureContext *ctxptr = NULL; |
| 1026 | |
| 1027 | if(var.userType() == qMetaTypeId<ResourceId>()) |
| 1028 | { |
| 1029 | id = var.value<ResourceId>(); |
| 1030 | |
| 1031 | // empty resource ids are not clickable or hover-highlighted. |
| 1032 | if(id == ResourceId()) |
| 1033 | return false; |
| 1034 | } |
| 1035 | |
| 1036 | if(var.userType() == qMetaTypeId<GPUAddressPtr>()) |
| 1037 | { |
| 1038 | ptr = var.value<GPUAddressPtr>(); |
| 1039 | |
| 1040 | ptr->cacheAddress(owner); |
| 1041 | |
| 1042 | // NULL or unknown addresses also are not clickable |
| 1043 | if(ptr->val.pointer == 0 || ptr->base == ResourceId()) |
| 1044 | return false; |
| 1045 | } |
| 1046 | |
| 1047 | QFont f = font; |
| 1048 | f.setBold(true); |
| 1049 | |
| 1050 | static const int margin = RichResourceTextMargin; |
| 1051 | |
| 1052 | rect.adjust(margin, 0, -margin * 2, 0); |
| 1053 | |
| 1054 | QString name; |
| 1055 | |
| 1056 | if(var.userType() == qMetaTypeId<ResourceId>()) |
| 1057 | { |
| 1058 | ctxptr = getCaptureContext(owner); |
| 1059 | |
| 1060 | if(ctxptr) |
| 1061 | name = GetTruncatedResourceName(*ctxptr, id); |
| 1062 | else |
| 1063 | name = ToQStr(id); |
| 1064 | } |
| 1065 | else |
| 1066 | { |
no test coverage detected