File: StarEditor.pm

package info (click to toggle)
qt4-perl 4.8.4-1.2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 8,636 kB
  • ctags: 8,100
  • sloc: perl: 42,963; cpp: 28,039; makefile: 160; xml: 98; sh: 4
file content (87 lines) | stat: -rw-r--r-- 1,490 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package StarEditor;

use strict;
use warnings;
use QtCore4;
use QtGui4;

use StarRating;

# [0]
use QtCore4::isa qw( Qt::Widget );

use QtCore4::signals
    editingFinished => [];

sub setStarRating
{
    my ($starRating) = @_;
    this->{myStarRating} = $starRating;
}

sub starRating {
    return this->{myStarRating}
}

# [0]
sub NEW
{
    my ($class, $parent) = @_;
    $class->SUPER::NEW($parent);
    this->setMouseTracking(1);
    this->setAutoFillBackground(1);
}
# [0]

sub sizeHint
{
    return this->{myStarRating}->sizeHint();
}

# [1]
sub paintEvent
{
    my $painter = Qt::Painter(this);
    this->{myStarRating}->paint($painter, this->rect(), this->palette(),
                       StarRating::Editable);
    $painter->end();
}
# [1]

# [2]
sub mouseMoveEvent
{
    my ($event) = @_;
    my $star = this->starAtPosition($event->x());

    if ($star != this->{myStarRating}->starCount() && $star != -1) {
        this->{myStarRating}->setStarCount($star);
        this->update();
    }
}
# [2]

# [3]
sub mouseReleaseEvent
{
    emit this->editingFinished();
}
# [3]

# [4]
sub starAtPosition
{
    my ($x) = @_;
    # C++ code does operation on ints.  Use sprintf '%d' to emulate this.
    my $star = sprintf( '%d',
               ($x / (this->{myStarRating}->sizeHint()->width()
                     / this->{myStarRating}->maxStarCount()))) + 1;
    if ($star <= 0 || $star > this->{myStarRating}->maxStarCount()) {
        return -1;
    }

    return $star;
}
# [4]

1;