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 )