class MoviePlayer

Public Class Methods

new(parent = nil) click to toggle source
Calls superclass method
# File examples/widgets/movie/movieplayer.rb, line 36
def initialize(parent = nil)
    super(parent)
    @movie = Qt::Movie.new(self)
    @movie.cacheMode = Qt::Movie::CacheAll

    @movieLabel = Qt::Label.new(tr("No movie loaded")) do |m|
        m.alignment = Qt::AlignCenter
        m.setSizePolicy(Qt::SizePolicy::Ignored, Qt::SizePolicy::Ignored)
        m.backgroundRole = Qt::Palette::Dark
        m.autoFillBackground = true
    end

    @currentMovieDirectory = "@movies"

    createControls()
    createButtons()

    connect(@movie, SIGNAL('frameChanged(int)'), self, SLOT('updateFrameSlider()'))
    connect(@movie, SIGNAL('stateChanged(QMovie::MovieState)'),
            self, SLOT('updateButtons()'))
    connect(@fitCheckBox, SIGNAL('clicked()'), self, SLOT('fitToWindow()'))
    connect(@frameSlider, SIGNAL('valueChanged(int)'), self, SLOT('goToFrame(int)'))
    connect(@speedSpinBox, SIGNAL('valueChanged(int)'),
            @movie, SLOT('setSpeed(int)'))

    self.layout = Qt::VBoxLayout.new do |m|
        m.addWidget(@movieLabel)
        m.addLayout(@controlsLayout)
        m.addLayout(@buttonsLayout)
    end

    updateFrameSlider()
    updateButtons()

    setWindowTitle(tr("Movie Player"))
    resize(400, 400)
end

Public Instance Methods

createButtons() click to toggle source
# File examples/widgets/movie/movieplayer.rb, line 152
def createButtons()
    iconSize = Qt::Size.new(36, 36)

    @openButton = Qt::ToolButton.new do |o|
        o.icon = Qt::Icon.new("images/open.png")
        o.iconSize = iconSize
        o.toolTip = tr("Open File")
    end
    connect(@openButton, SIGNAL('clicked()'), self, SLOT('open()'))

    @playButton = Qt::ToolButton.new do |p|
        p.icon = Qt::Icon.new("images/play.png")
        p.iconSize = iconSize
        p.toolTip = tr("Play")
    end
    connect(@playButton, SIGNAL('clicked()'), @movie, SLOT('start()'))

    @pauseButton = Qt::ToolButton.new do |p|
        p.checkable = true
        p.icon = Qt::Icon.new("images/pause.png")
        p.iconSize = iconSize
        p.toolTip = tr("Pause")
    end
    connect(@pauseButton, SIGNAL('clicked(bool)'), @movie, SLOT('setPaused(bool)'))

    @stopButton = Qt::ToolButton.new do |s|
        s.icon = Qt::Icon.new("images/stop.png")
        s.iconSize = iconSize
        s.toolTip = tr("Stop")
    end
    connect(@stopButton, SIGNAL('clicked()'), @movie, SLOT('stop()'))

    @quitButton = Qt::ToolButton.new do |q|
        q.icon = Qt::Icon.new("images/quit.png")
        q.iconSize = iconSize
        q.toolTip = tr("Quit")
    end
    connect(@quitButton, SIGNAL('clicked()'), self, SLOT('close()'))

    @buttonsLayout = Qt::HBoxLayout.new do |b|
        b.addStretch()
        b.addWidget(@openButton)
        b.addWidget(@playButton)
        b.addWidget(@pauseButton)
        b.addWidget(@stopButton)
        b.addWidget(@quitButton)
        b.addStretch()
    end
end
createControls() click to toggle source
# File examples/widgets/movie/movieplayer.rb, line 125
def createControls()
    @fitCheckBox = Qt::CheckBox.new(tr("Fit to Window"))

    @frameLabel = Qt::Label.new(tr("Current frame:"))

    @frameSlider = Qt::Slider.new(Qt::Horizontal) do |f|
        f.tickPosition = Qt::Slider::TicksBelow
        f.tickInterval = 10
    end

    @speedLabel = Qt::Label.new(tr("Speed:"))

    @speedSpinBox = Qt::SpinBox.new do |s|
        s.range = 1..9999
        s.value = 100
        s.suffix = tr("%")
    end

    @controlsLayout = Qt::GridLayout.new do |c|
        c.addWidget(@fitCheckBox, 0, 0, 1, 2)
        c.addWidget(@frameLabel, 1, 0)
        c.addWidget(@frameSlider, 1, 1, 1, 2)
        c.addWidget(@speedLabel, 2, 0)
        c.addWidget(@speedSpinBox, 2, 1)
    end
end
fitToWindow() click to toggle source
# File examples/widgets/movie/movieplayer.rb, line 94
def fitToWindow()
    @movieLabel.scaledContents = @fitCheckBox.checked?
end
goToFrame(frame) click to toggle source
# File examples/widgets/movie/movieplayer.rb, line 90
def goToFrame(frame)
    @movie.jumpToFrame(frame)
end
open() click to toggle source
# File examples/widgets/movie/movieplayer.rb, line 74
def open()
    fileName = Qt::FileDialog.getOpenFileName(self, tr("Open a Movie"),
                               @currentMovieDirectory)
    if !fileName.empty?
        @currentMovieDirectory = Qt::FileInfo.new(fileName).path()

        @movie.stop()
        @movieLabel.movie = @movie
        @movie.fileName = fileName
        @movie.start()

        updateFrameSlider()
        updateButtons()
    end
end
updateButtons() click to toggle source
# File examples/widgets/movie/movieplayer.rb, line 117
def updateButtons()
    @playButton.enabled = @movie.valid? && @movie.frameCount != 1 &&
                           @movie.state == Qt::Movie::NotRunning
    @pauseButton.enabled = @movie.state != Qt::Movie::NotRunning
    @pauseButton.checked = @movie.state == Qt::Movie::Paused
    @stopButton.enabled = @movie.state != Qt::Movie::NotRunning
end
updateFrameSlider() click to toggle source
# File examples/widgets/movie/movieplayer.rb, line 98
def updateFrameSlider()
    hasFrames = (@movie.currentFrameNumber() >= 0)

    if hasFrames
        if @movie.frameCount > 0
            @frameSlider.maximum = @movie.frameCount - 1
        else
            if @movie.currentFrameNumber > @frameSlider.maximum
                @frameSlider.maximum = @movie.currentFrameNumber
            end
        end
        @frameSlider.value = @movie.currentFrameNumber
    else
        @frameSlider.maximum = 0
    end
    @frameLabel.enabled = hasFrames
    @frameSlider.enabled = hasFrames
end