Browse Source

fix #2194

cl-refactor
yann300 10 years ago
parent
commit
63ad962041
  1. 16
      mix/ContractCallDataEncoder.cpp
  2. 15
      mix/qml/QStringTypeView.qml
  3. 10
      mix/qml/js/InputValidator.js

16
mix/ContractCallDataEncoder.cpp

@ -80,10 +80,7 @@ void ContractCallDataEncoder::encodeArray(QJsonArray const& _array, QList<int> _
if (c.isArray()) if (c.isArray())
{ {
if (_dim[0] == -1) if (_dim[0] == -1)
{ m_dynamicOffsetMap.push_back(std::make_pair(m_dynamicData.size() + offsetStart + 32 + k * 32, m_dynamicData.size() + _content.size()));
m_dynamicOffsetMap.push_back(std::make_pair(m_dynamicData.size() + offsetStart + 32 + k * 32,
m_dynamicData.size() + _content.size()));
}
encodeArray(c.toArray(), _dim, _type, _content); encodeArray(c.toArray(), _dim, _type, _content);
} }
else else
@ -183,6 +180,11 @@ unsigned ContractCallDataEncoder::encodeSingleItem(QString const& _data, Solidit
catch (std::exception const&) catch (std::exception const&)
{ {
// manage input as a string. // manage input as a string.
QRegExp strExtract("\"(.*)\""); //check if contains both string and hex value, keep the string.
int i = strExtract.indexIn(src);
if (i != -1)
src = strExtract.cap(0);
src = src.replace("\"", "");
result = encodeStringParam(src, alignSize); result = encodeStringParam(src, alignSize);
} }
} }
@ -249,7 +251,11 @@ dev::bytes ContractCallDataEncoder::decodeBytes(dev::bytes const& _rawValue)
QString ContractCallDataEncoder::toString(dev::bytes const& _b) QString ContractCallDataEncoder::toString(dev::bytes const& _b)
{ {
return QString::fromStdString(dev::toJS(_b)); QString str;
if (asString(_b, str))
return "\"" + str + "\" " + QString::fromStdString(dev::toJS(_b));
else
return QString::fromStdString(dev::toJS(_b));
} }
QString ContractCallDataEncoder::toChar(dev::bytes const& _b) QString ContractCallDataEncoder::toChar(dev::bytes const& _b)

15
mix/qml/QStringTypeView.qml

@ -2,11 +2,15 @@ import QtQuick 2.0
Item Item
{ {
property alias value: textinput.text property string value
property alias readOnly: textinput.readOnly property alias readOnly: textinput.readOnly
id: editRoot id: editRoot
height: 20 height: 20
width: readOnly ? textinput.implicitWidth : 150 width: readOnly ? textinput.implicitWidth : 150
onValueChanged:
{
textinput.text = value
}
SourceSansProBold SourceSansProBold
{ {
@ -18,12 +22,19 @@ Item
radius: 4 radius: 4
TextInput { TextInput {
id: textinput id: textinput
text: value
clip: true clip: true
anchors.fill: parent anchors.fill: parent
wrapMode: Text.WrapAnywhere wrapMode: Text.WrapAnywhere
font.family: boldFont.name font.family: boldFont.name
selectByMouse: true selectByMouse: true
onTextChanged: {
var stringRegEx = new RegExp('"^\\"*', "g")
var str = stringRegEx.exec(text)
if (str && str.length > 0)
value = str[0]
else
value = text
}
} }
} }
} }

10
mix/qml/js/InputValidator.js

@ -187,7 +187,15 @@ function validateAddress(_type, _value)
function validateBytes(_type, _value) function validateBytes(_type, _value)
{ {
var ret = { valid: true, message: "" } var ret = { valid: true, message: "" }
if (_value.length > parseInt(_type.replace("bytes", "")) ) if (_value.indexOf("\"") === 0 && _value.indexOf("0x") !== -1)
{
//this is a different fomatting
var stringRegEx = new RegExp('".*"', "g");
var matches = _value.match(stringRegEx);
if (matches.length === 1)
_value = matches[0]
}
if (_type !== "bytes" && _value.length > parseInt(_type.replace("bytes", "")) )
{ {
ret.valid = false; ret.valid = false;
ret.message = _type + " should not contains more than " + _type.replace("bytes", "") + " characters"; ret.message = _type + " should not contains more than " + _type.replace("bytes", "") + " characters";

Loading…
Cancel
Save