Qt
view release on metacpan or search on metacpan
qtgui/examples/tools/settingseditor/VariantDelegate.pm view on Meta::CPAN
sub setModelData
{
my ($editor, $model, $index) = @_;
my $lineEdit = $editor;
if ($lineEdit->isa('Qt::LineEdit') && !$lineEdit->isModified()) {
return;
}
my $text = $lineEdit->text();
$DB::single=1;
my $validator = $lineEdit->validator();
if ($validator) {
my $pos;
if ($validator->validate($text, $pos) != Qt::Validator::Acceptable()) {
return;
}
}
my $originalValue = $index->model()->data($index, Qt::UserRole());
my $value;
if ( $originalValue->type() == Qt::Variant::Char() ) {
$value = Qt::Variant( Qt::Char( substr $text, 0, 1 ) );
}
elsif ( $originalValue->type() == Qt::Variant::Color() ) {
colorExp->exactMatch($text);
$value = Qt::Variant( Qt::Color(min(colorExp->cap(1), 255),
min(colorExp->cap(2), 255),
min(colorExp->cap(3), 255),
min(colorExp->cap(4), 255)) );
}
elsif ( $originalValue->type() == Qt::Variant::Date() ) {
my $date = Qt::Date::fromString($text, Qt::ISODate());
if (!$date->isValid()) {
return;
}
$value = Qt::Variant( $date );
}
elsif ( $originalValue->type() == Qt::Variant::DateTime() ) {
my $dateTime = Qt::DateTime::fromString($text, Qt::ISODate());
if (!$dateTime->isValid()) {
return;
}
$value = Qt::Variant( $dateTime );
}
elsif ( $originalValue->type() == Qt::Variant::Point() ) {
pointExp->exactMatch($text);
$value = Qt::Variant( Qt::Point(pointExp->cap(1), pointExp->cap(2)) );
}
elsif ( $originalValue->type() == Qt::Variant::Rect() ) {
rectExp->exactMatch($text);
$value = Qt::Variant( Qt::Rect(rectExp->cap(1), rectExp->cap(2),
rectExp->cap(3), rectExp->cap(4)) );
}
elsif ( $originalValue->type() == Qt::Variant::Size() ) {
sizeExp->exactMatch($text);
$value = Qt::Variant( Qt::Size(sizeExp->cap(1), sizeExp->cap(2)) );
}
elsif ( $originalValue->type() == Qt::Variant::StringList() ) {
$value = Qt::Variant( [split m/,/, $text] );
}
elsif ( $originalValue->type() == Qt::Variant::Time() ) {
my $time = Qt::Time::fromString($text, Qt::ISODate());
if (!$time->isValid()) {
return;
}
$value = Qt::Variant( $time );
}
else {
$value = Qt::Variant( Qt::String( $text ) );
$value->convert($originalValue->type());
}
$model->setData($index, Qt::Variant(Qt::String(displayText($value))), Qt::DisplayRole());
$model->setData($index, $value, Qt::UserRole());
}
sub isSupportedType
{
my ($type) = @_;
if ( $type == Qt::Variant::Bool() ||
$type == Qt::Variant::ByteArray() ||
$type == Qt::Variant::Char() ||
$type == Qt::Variant::Color() ||
$type == Qt::Variant::Date() ||
$type == Qt::Variant::DateTime() ||
$type == Qt::Variant::Double() ||
$type == Qt::Variant::Int() ||
$type == Qt::Variant::LongLong() ||
$type == Qt::Variant::Point() ||
$type == Qt::Variant::Rect() ||
$type == Qt::Variant::Size() ||
$type == Qt::Variant::String() ||
$type == Qt::Variant::StringList() ||
$type == Qt::Variant::Time() ||
$type == Qt::Variant::UInt() ||
$type == Qt::Variant::ULongLong() ) {
return 1;
}
else {
return 0;
}
}
sub displayText
{
my ($value) = @_;
if ( $value->type() == Qt::Variant::Bool() ||
$value->type() == Qt::Variant::ByteArray() ||
$value->type() == Qt::Variant::Char() ||
$value->type() == Qt::Variant::Double() ||
$value->type() == Qt::Variant::Int() ||
$value->type() == Qt::Variant::LongLong() ||
$value->type() == Qt::Variant::String() ||
$value->type() == Qt::Variant::UInt() ||
$value->type() == Qt::Variant::ULongLong() ) {
return $value->toString();
}
elsif( $value->type() == Qt::Variant::Color() ) {
my $color = $value->value();
( run in 0.462 second using v1.01-cache-2.11-cpan-71847e10f99 )