SoundInputConfig::SoundInputConfig(int _frameSize, int _hopSize, int _samplingRate, int _microphoneNumber)
{

    int dialogWidth, dialogHeight;
    int buttonLeft, buttonTop, buttonWidth, buttonHeight;
    int groupBox1Left, groupBox1Top, groupBox1Width, groupBox1Height;
    int groupBox2Left, groupBox2Top, groupBox2Width, groupBox2Height;
    int listWidgetLeft, listWidgetTop, listWidgetWidth, listWidgetHeight;
    int label1Left, label1Top, label1Width, label1Height;
    int label2Left, label2Top, label2Width, label2Height;
    int label3Left, label3Top, label3Width, label3Height;
    int label4Left, label4Top, label4Width, label4Height;
    int label5Left, label5Top, label5Width, label5Height;
    int label6Left, label6Top, label6Width, label6Height;
    int label7Left, label7Top, label7Width, label7Height;
    int label8Left, label8Top, label8Width, label8Height;

    int labelsTitleWidth, labelsTitleHeight;
    int labelsValueWidth, labelsValueHeight;

    int verticalMargin, horizontalMargin;
    int inBoxVerticalMargin, inBoxHorizontalMargin;

    QString label1Title;
    QString label2Title;
    QString label3Title;
    QString label4Title;
    QString label5Title;
    QString label6Title;
    QString label7Title;
    QString label8Title;

    QString groupBox1Title;
    QString groupBox2Title;

    // +-------------------------------------------------------+
    // | Save parameters                                       |
    // +-------------------------------------------------------+

    this->frameSize = _frameSize;
    this->hopSize = _hopSize;
    this->samplingRate = _samplingRate;
    this->microphoneNumber = _microphoneNumber;

    // +-------------------------------------------------------+
    // | Create audio object                                   |
    // +-------------------------------------------------------+

    this->audioInput = new AudioManager();

    // +-------------------------------------------------------+
    // | Margins                                               |
    // +-------------------------------------------------------+

    // Set the margins
    verticalMargin = 10;
    horizontalMargin = 10;
    inBoxVerticalMargin = 30;
    inBoxHorizontalMargin = 20;

    // +-------------------------------------------------------+
    // | Sizes                                                 |
    // +-------------------------------------------------------+

    // Size of the labels
    labelsTitleWidth = 150;
    labelsTitleHeight = 15;
    labelsValueWidth = 100;
    labelsValueHeight = 15;

    label1Width = labelsTitleWidth;
    label1Height = labelsTitleHeight;
    label2Width = labelsValueWidth;
    label2Height = labelsValueHeight;
    label3Width = labelsTitleWidth;
    label3Height = labelsTitleHeight;
    label4Width = labelsValueWidth;
    label4Height = labelsValueHeight;
    label5Width = labelsTitleWidth;
    label5Height = labelsTitleHeight;
    label6Width = labelsValueWidth;
    label6Height = labelsValueHeight;
    label7Width = labelsTitleWidth;
    label7Height = labelsTitleHeight;
    label8Width = labelsValueWidth;
    label8Height = labelsValueHeight;

    // Size of the list for sound cards
    listWidgetWidth = 390;
    listWidgetHeight = 160;

    // Size of the group box for sound cards
    groupBox2Width = inBoxHorizontalMargin + listWidgetWidth ;
    groupBox2Height = inBoxVerticalMargin + listWidgetHeight + verticalMargin;

    // Size of the group box for parameters
    groupBox1Width = groupBox2Width;
    groupBox1Height = inBoxVerticalMargin + label1Height + verticalMargin + label3Height + verticalMargin + label5Height + verticalMargin + label7Height;

    // Size of the button
    buttonWidth = groupBox2Width;
    buttonHeight = 30;

    // Size of dialog
    dialogWidth = horizontalMargin + groupBox1Width + horizontalMargin;
    dialogHeight = verticalMargin + groupBox1Height + verticalMargin + groupBox2Height + verticalMargin + buttonHeight + verticalMargin;

    // +-------------------------------------------------------+
    // | Positions                                             |
    // +-------------------------------------------------------+

    // Position of the group box for parameters
    groupBox1Left = horizontalMargin;
    groupBox1Top = verticalMargin;

    // Position of the group box for sound cards
    groupBox2Left = horizontalMargin;
    groupBox2Top = groupBox1Top + groupBox1Height + verticalMargin;

    // Position of the labels
    label1Left = inBoxHorizontalMargin;
    label2Left = label1Left + label1Width + horizontalMargin;
    label3Left = inBoxHorizontalMargin;
    label4Left = label3Left + label3Width + horizontalMargin;
    label5Left = inBoxHorizontalMargin;
    label6Left = label5Left + label5Width + horizontalMargin;
    label7Left = inBoxHorizontalMargin;
    label8Left = label7Left + label7Width + horizontalMargin;

    label1Top = inBoxVerticalMargin;
    label2Top = inBoxVerticalMargin;
    label3Top = label1Top + label1Height + verticalMargin;
    label4Top = label2Top + label2Height + verticalMargin;
    label5Top = label3Top + label3Height + verticalMargin;
    label6Top = label4Top + label4Height + verticalMargin;
    label7Top = label5Top + label5Height + verticalMargin;
    label8Top = label6Top + label6Height + verticalMargin;

    // Position of the list for sound cards
    listWidgetLeft = horizontalMargin;
    listWidgetTop = inBoxVerticalMargin;

    // Positin of the button
    buttonLeft = horizontalMargin;
    buttonTop = groupBox2Top + groupBox2Height + verticalMargin;

    // +-------------------------------------------------------+
    // | Titles                                                |
    // +-------------------------------------------------------+

    label1Title = "Samples per frame";
    label2Title = QString::number(this->frameSize);
    label3Title = "Samples per hop";
    label4Title = QString::number(this->hopSize);
    label5Title = "Sampling rate";
    label6Title = QString::number(this->samplingRate);
    label7Title = "Number of microphones";
    label8Title = QString::number(this->microphoneNumber);

    groupBox1Title = "Fixed parameters";
    groupBox2Title = "Select a recording device";


    // +-------------------------------------------------------+
    // | Instantiation                                         |
    // +-------------------------------------------------------+

    this->dialogWindow = new QDialog();
    this->dialogWindow->setFixedSize(dialogWidth,dialogHeight);

    this->groupBox1 = new QGroupBox(this->dialogWindow);
    this->groupBox1->setGeometry(QRect(groupBox1Left, groupBox1Top, groupBox1Width, groupBox1Height));
    this->groupBox1->setTitle(groupBox1Title);
    this->groupBox1->setFont(QFont("MS Shell Dlg 2",8,QFont::Bold,false));

    this->groupBox2 = new QGroupBox(this->dialogWindow);
    this->groupBox2->setGeometry(QRect(groupBox2Left, groupBox2Top, groupBox2Width, groupBox2Height));
    this->groupBox2->setTitle(groupBox2Title);
    this->groupBox2->setFont(QFont("MS Shell Dlg 2",8,QFont::Bold,false));

    this->buttonBox = new QDialogButtonBox(this->dialogWindow);
    this->buttonBox->setGeometry(QRect(buttonLeft, buttonTop, buttonWidth, buttonHeight));
    this->buttonBox->setOrientation(Qt::Horizontal);
    this->buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);

    this->frameSizeTitle = new QLabel(this->dialogWindow);
    this->frameSizeTitle->setGeometry(QRect(label1Left, label1Top, label1Width, label1Height));
    this->frameSizeTitle->setText(label1Title);
    this->frameSizeValue = new QLabel(this->dialogWindow);
    this->frameSizeValue->setGeometry(QRect(label2Left, label2Top, label2Width, label2Height));
    this->frameSizeValue->setText(label2Title);
    this->hopSizeTitle = new QLabel(this->dialogWindow);
    this->hopSizeTitle->setGeometry(QRect(label3Left, label3Top, label3Width, label3Height));
    this->hopSizeTitle->setText(label3Title);
    this->hopSizeValue = new QLabel(this->dialogWindow);
    this->hopSizeValue->setGeometry(QRect(label4Left, label4Top, label4Width, label4Height));
    this->hopSizeValue->setText(label4Title);
    this->samplingRateTitle = new QLabel(this->dialogWindow);
    this->samplingRateTitle->setGeometry(QRect(label5Left, label5Top, label5Width, label5Height));
    this->samplingRateTitle->setText(label5Title);
    this->samplingRateValue = new QLabel(this->dialogWindow);
    this->samplingRateValue->setGeometry(QRect(label6Left, label6Top, label6Width, label6Height));
    this->samplingRateValue->setText(label6Title);
    this->microphoneTitle = new QLabel(this->dialogWindow);
    this->microphoneTitle->setGeometry(QRect(label7Left, label7Top, label7Width, label7Height));
    this->microphoneTitle->setText(label7Title);
    this->microphoneValue = new QLabel(this->dialogWindow);
    this->microphoneValue->setGeometry(QRect(label8Left, label8Top, label8Width, label8Height));
    this->microphoneValue->setText(label8Title);


    this->listWidget = new QListWidget(this->groupBox2);
    this->listWidget->setGeometry(QRect(listWidgetLeft, listWidgetTop, listWidgetWidth, listWidgetHeight));

    // +-------------------------------------------------------+
    // | Populate list view with available recording device    |
    // +-------------------------------------------------------+

    this->listWidget->setSelectionMode(QAbstractItemView::SingleSelection);

    for (unsigned int indexDevice = 0; indexDevice < this->audioInput->getAudioDevicesCount(); indexDevice++)
    {
        this->listWidget->addItem(this->audioInput->getAudioDeviceName(indexDevice));
        this->listWidget->setItemSelected(this->listWidget->item(indexDevice),false);
    }

    this->listWidget->addItem(LOADFROMFILE);

    this->itemChanged();

    this->deviceIndexTmp = -1;
    this->deviceIndex = -1;

    // +-------------------------------------------------------+
    // | Connect signals and slots                             |
    // +-------------------------------------------------------+

    QObject::connect(this->listWidget,SIGNAL(itemSelectionChanged()),this,SLOT(itemChanged()));
    QObject::connect(this->buttonBox,SIGNAL(accepted()),this,SLOT(buttonAccepted()));
    QObject::connect(this->buttonBox,SIGNAL(rejected()),this,SLOT(buttonRejected()));

}
MySliderDialog::MySliderDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MySliderDialog)
{
    ui->setupUi(this);

    ui->radioButton->setChecked(false);

    connect(ui->redValueSlider,
            SIGNAL(valueChanged(int)),
            this,
            SIGNAL(rValueChanged(int)));

    connect(ui->greenValueSlider,
            SIGNAL(valueChanged(int)),
            this,
            SIGNAL(gValueChanged(int)));

    connect(ui->blueValueSlider,
            SIGNAL(valueChanged(int)),
            this,
            SIGNAL(bValueChanged(int)));

    connect(ui->yValueSlider,
            SIGNAL(valueChanged(int)),
            this,
            SIGNAL(yValueChanged(int)));

    connect(ui->uValueSlider,
            SIGNAL(valueChanged(int)),
            this,
            SIGNAL(uValueChanged(int)));

    connect(ui->vValueSlider,
            SIGNAL(valueChanged(int)),
            this,
            SIGNAL(vValueChanged(int)));

    connect(ui->radioButton,
            SIGNAL(clicked(bool)),
            this,
            SIGNAL(previewChanged(bool)));

    connect(ui->buttonBox,
            SIGNAL(accepted()),
            this,
            SIGNAL(buttonAccepted()));
    connect(ui->buttonBox,
            SIGNAL(rejected()),
            this,
            SIGNAL(buttonRejected()));
    connect(ui->rgbRadioButton,
            SIGNAL(toggled(bool)),
            this,
            SIGNAL(rgbRadio(bool)));
    connect(ui->yuvRadioButton,
            SIGNAL(toggled(bool)),
            this,
            SIGNAL(yuvRadio(bool)));

    enableRGBSliders(true);
}