Workaround for OverflowError

OverflowError results from Python `long` not converting to `QVariant` correctly.

Pass TAG_Long values through Qt models as `str` (eww).
This commit is contained in:
David Vierra 2015-09-06 10:36:58 -10:00
parent 6ccd462333
commit ffcbc3d52c
2 changed files with 10 additions and 3 deletions

View File

@ -24,7 +24,9 @@ class LongLongValidator(QtGui.QValidator):
def validate(self, input, pos): def validate(self, input, pos):
matches = longlongPattern.match(input) matches = longlongPattern.match(input)
if matches is not None: if matches is not None:
return QtGui.QValidator.Acceptable value = long(input)
if (-1<<63) < value < (1<<63) - 1:
return QtGui.QValidator.Acceptable
return QtGui.QValidator.Invalid return QtGui.QValidator.Invalid
class LongLongLineEdit(QtGui.QLineEdit): class LongLongLineEdit(QtGui.QLineEdit):
@ -33,10 +35,10 @@ class LongLongLineEdit(QtGui.QLineEdit):
self.setValidator(LongLongValidator()) self.setValidator(LongLongValidator())
def getValue(self): def getValue(self):
return long(self.text()) return self.text()
def setValue(self, val): def setValue(self, val):
self.setText(str(val)) self.setText(val)
value = QtCore.Property(long, getValue, setValue, user=True) value = QtCore.Property(long, getValue, setValue, user=True)

View File

@ -259,12 +259,17 @@ class NBTTreeItem(object):
if size > maxsize: if size > maxsize:
hexdata += "..." hexdata += "..."
return "(size=%d) %s" % (size, hexdata) return "(size=%d) %s" % (size, hexdata)
if self.tag.tagID == nbt.ID_LONG:
# Workaround for OverflowError on Linux
return str(self.tag.value)
return self.tag.value return self.tag.value
def parent(self): def parent(self):
return self.parentItem return self.parentItem
def setValue(self, value): def setValue(self, value):
if self.tag.tagID == nbt.ID_LONG:
value = long(value)
self.tag.value = value self.tag.value = value
return True return True