view widgets/PluginParameterDialog.h @ 163:dd6dd983e8ef

* Tidy up plugin parameter dialog by switching it to a simple constructor with separate methods for passing in the additional options if necessary * Fix sizing problem on advanced pane toggle in plugin parameter dialog * Make a start on passing in list of candidate input models for transform
author Chris Cannam
date Wed, 11 Oct 2006 16:18:51 +0000
parents 8c730f49b9b3
children 11949d0b2739
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

/*
    Sonic Visualiser
    An audio file viewer and annotation editor.
    Centre for Digital Music, Queen Mary, University of London.
    This file copyright 2006 Chris Cannam.
    
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of the
    License, or (at your option) any later version.  See the file
    COPYING included with this distribution for more information.
*/

#ifndef _PLUGIN_PARAMETER_DIALOG_H_
#define _PLUGIN_PARAMETER_DIALOG_H_

#include <QDialog>

#include "base/Window.h"

namespace Vamp { class PluginBase; }
class PluginParameterBox;
class QWidget;
class QPushButton;
class QLabel;
class QGroupBox;

/**
 * A dialog for editing the parameters of a given plugin, using a
 * PluginParameterBox.  This dialog does not contain any mechanism for
 * selecting the plugin in the first place.  Note that the dialog
 * directly modifies the parameters of the plugin, so they will remain
 * modified even if the dialog is then cancelled.
 */

class PluginParameterDialog : public QDialog
{
    Q_OBJECT
    
public:
    PluginParameterDialog(Vamp::PluginBase *, QWidget *parent = 0);
    ~PluginParameterDialog();

    void setChannelArrangement(int sourceChannels,
                               int targetChannels,
                               int defaultChannel);

    void setOutputLabel(QString output);

    void setShowProcessingOptions(bool showWindowSize,
                                  bool showFrequencyDomainOptions);

    Vamp::PluginBase *getPlugin() { return m_plugin; }

    int getChannel() const { return m_channel; }

    //!!! merge with PluginTransform::ExecutionContext

    void getProcessingParameters(size_t &blockSize) const;
    void getProcessingParameters(size_t &stepSize, size_t &blockSize,
                                 WindowType &windowType) const;

signals:
    void pluginConfigurationChanged(QString);

protected slots:
    void channelComboChanged(int);
    void blockSizeComboChanged(const QString &);
    void incrementComboChanged(const QString &);
    void windowTypeChanged(WindowType type);
    void advancedToggled();
    void setAdvancedVisible(bool);

protected:
    Vamp::PluginBase *m_plugin;

    int m_channel;
    size_t m_stepSize;
    size_t m_blockSize;

    WindowType m_windowType;
    PluginParameterBox *m_parameterBox;

    QLabel *m_outputLabel;
    QLabel *m_outputValue;
    QGroupBox *m_channelBox;
    bool m_haveChannelBoxData;
    QGroupBox *m_windowBox;
    bool m_haveWindowBoxData;

    QPushButton *m_advancedButton;
    QWidget *m_advanced;
    bool m_advancedVisible;
};

#endif