package Assistant;

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

sub proc() {
    return shift->{proc};
}

sub new
{
    my ($class) = @_;
    my $self = {
        proc => undef
    };
    return bless $self, $class;
}

# [0]
sub DESTROY
{
    my ($self) = @_;
    if (defined $self->proc() && $self->proc()->state() == Qt::Process::Running()) {
        $self->proc()->terminate();
        $self->proc()->waitForFinished(3000);
    }
    $self->{proc} = undef;
}
# [0]

# [1]
sub showDocumentation
{
    my ($self, $page) = @_;
    if (!$self->startAssistant()) {
        return;
    }

    my $ba = Qt::ByteArray('SetSource ');
    $ba->append('qthelp://com.trolltech.examples.simpletextviewer/doc/');
    $ba->append($page);
    $ba->append("\0", 1);

    $self->proc->write($ba);
}
# [1]

# [2]
sub startAssistant
{
    my ($self) = @_;
    if (!defined $self->proc) {
        $self->{proc} = Qt::Process();
    }

    if ($self->proc->state() != Qt::Process::Running()) {
        my $app = Qt::LibraryInfo::location(Qt::LibraryInfo::BinariesPath()) . chr(Qt::Dir::separator()->toAscii());
#if !defined(Q_OS_MAC)
        $app .= 'assistant';
#else
        # TODO
        #app += Qt::Latin1String('Assistant.app/Contents/MacOS/Assistant');
#endif

        my $args = [
            '-collectionFile',
            Qt::LibraryInfo::location(Qt::LibraryInfo::ExamplesPath())
            . '/help/simpletextviewer/documentation/simpletextviewer.qhc',
            '-enableRemoteControl' ];

        $self->proc->start($app, $args);

        if (!$self->proc->waitForStarted()) {
            Qt::MessageBox::critical(undef, Qt::Object::tr('Simple Text Viewer'),
                sprintf Qt::Object::tr('Unable to launch Qt Assistant (%s)'), $app);
            return 0;
        }
    }
    return 1;
}
# [2]

1;