Turntable/TurntableDialog.cpp

//**************************************************************************/
// Copyright (c) 2008 Autodesk, Inc.
// All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk license
// agreement provided at the time of installation or download, or which
// otherwise accompanies this software in either electronic or hard copy form.
//
//**************************************************************************/
// DESCRIPTION:
// CREATED: December 2008
//**************************************************************************/

#include "TurntableDialog.h"
#include <QtGui/QGridLayout>
#include <QtGui/QFileDialog>

TurntableDialog::TurntableDialog(
                        QWidget  *parent, 
                        int width,
                        int height,
                        int frames,
                        bool antialias,
                        const QString& folderPath )
    : QDialog( parent )
    , m_pWidthField(NULL)
    , m_pHeightField(NULL)
    , m_pFramesField(NULL)
    , m_pAntiAliasCheckBox(NULL)
    , m_pFolderField(NULL)
    , m_pButtonBox(NULL)
{

    setWindowTitle(QString("Create a Turntable"));
    
    // Grid Layout
    QGridLayout *gl = new QGridLayout;
    
    gl->addWidget( new QLabel("Width:",  this), 0, 0, Qt::AlignRight );
    gl->addWidget( new QLabel("Height:", this), 1, 0, Qt::AlignRight );
    gl->addWidget( new QLabel("pixels",  this), 0, 2, Qt::AlignLeft );
    gl->addWidget( new QLabel("pixels",  this), 1, 2, Qt::AlignLeft );

    gl->addWidget( new QLabel("Frames:", this), 2, 0, Qt::AlignRight );

    m_pWidthField  = new QLineEdit(this);
    m_pHeightField = new QLineEdit(this);
    m_pFramesField = new QLineEdit(this);
    m_pFolderField = new QLineEdit(this);

    // allow no size entry bigger than 99999.
    m_pWidthField->setMaxLength(4); 
    m_pHeightField->setMaxLength(4);
    m_pFramesField->setMaxLength(3);
    m_pWidthField->setMaximumWidth(50); 
    m_pHeightField->setMaximumWidth(50);
    m_pFramesField->setMaximumWidth(50);
    
    // only allow numeric characters
    m_pWidthField->setInputMask("9999");    
    m_pHeightField->setInputMask("9999");
    m_pFramesField->setInputMask("999");
    
    gl->addWidget( m_pWidthField,  0, 1 );
    gl->addWidget( m_pHeightField, 1, 1 );
    gl->addWidget( m_pFramesField, 2, 1 );

    // Vertical Layout
    QVBoxLayout *topLayout = new QVBoxLayout;
    topLayout->addLayout(gl);
    
    QPushButton *browseBtn = new QPushButton( "Select folder for output frames...", this );
    connect( browseBtn, SIGNAL(clicked()), SLOT(OnBrowse()) );
    topLayout->addWidget( browseBtn );

    // folder field is not editable
    m_pFolderField->setReadOnly(true);
    
    topLayout->addWidget( m_pFolderField );
    
    m_pAntiAliasCheckBox = new QCheckBox(this);
    m_pAntiAliasCheckBox->setText(QString("Anti-alias (better quality but slower)"));
    m_pAntiAliasCheckBox->setChecked(antialias);
    
    topLayout->addWidget(m_pAntiAliasCheckBox);
        
    // Button box
    m_pButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
    m_pButtonBox->button(QDialogButtonBox::Ok)->setText("Create Frames");

    connect( m_pButtonBox, SIGNAL(accepted()), this, SLOT(accept()) );
    connect( m_pButtonBox, SIGNAL(rejected()), this, SLOT(reject()) );

    m_pWidthField->setText(QString::number(width)); 
    m_pHeightField->setText(QString::number(height));
    m_pFramesField->setText(QString::number(frames));
    
    // if the user has not selected a folder, don't allow her to create frames
    m_pFolderField->setText(folderPath);
    if ( m_pFolderField->text() == "" ){
        m_pFolderField->setText(QString("<no folder selected>"));
        m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
    }

    
    m_pButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
    topLayout->addWidget(m_pButtonBox);
    
    setLayout(topLayout);
};


int TurntableDialog::Width() const
{
    return m_pWidthField->text().toInt();
};


int TurntableDialog::Height() const
{
    return m_pHeightField->text().toInt();
};

int TurntableDialog::Frames() const
{
    return m_pFramesField->text().toInt();
};

bool TurntableDialog::Antialias() const
{
    return m_pAntiAliasCheckBox->isChecked();
};

QString TurntableDialog::FolderPath() const
{
    return m_pFolderField->text();
};


 void TurntableDialog::OnBrowse(void)
{
    // pop up a folder browser, and fill the field with whatever the 
    // user selects
    QString path = Kernel()->GetDirectoryDialog( QString("Choose a Folder"),m_pFolderField->text() );
    if ( path != "" )
    {
        m_pFolderField->setText(path);
        m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
    }
}