goldendict-ng/texttospeechsource.hh

111 lines
3.1 KiB
C++

/* This file is (c) 2013 Timon Wong <timon86.wang@gmail.com>
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#ifndef __TEXTTOSPEECHSOURCE_HH_INCLUDED__
#define __TEXTTOSPEECHSOURCE_HH_INCLUDED__
#include "ui_texttospeechsource.h"
#include "config.hh"
#include "speechclient.hh"
#include <QComboBox>
#include <QStyledItemDelegate>
/// A model to be projected into the text to speech view, according to Qt's MVC model
class VoiceEnginesModel: public QAbstractItemModel
{
Q_OBJECT
public:
enum {
kColumnEnabled = 0,
kColumnEngineId,
kColumnEngineName,
kColumnIcon,
kColumnCount
};
VoiceEnginesModel( QWidget * parent, Config::VoiceEngines const & voiceEngines );
void removeVoiceEngine( int index );
void addNewVoiceEngine( QString const & id, QString const & name,
int volume, int rate );
Config::VoiceEngines const & getCurrentVoiceEngines() const
{ return voiceEngines; }
void setEngineParams( QModelIndex idx, int volume, int rate );
QModelIndex index( int row, int column, QModelIndex const & parent ) const;
QModelIndex parent( QModelIndex const & parent ) const;
Qt::ItemFlags flags( QModelIndex const & index ) const;
int rowCount( QModelIndex const & parent ) const;
int columnCount( QModelIndex const & parent ) const;
QVariant headerData( int section, Qt::Orientation orientation, int role ) const;
QVariant data( QModelIndex const & index, int role ) const;
bool setData( QModelIndex const & index, const QVariant & value, int role );
private:
Config::VoiceEngines voiceEngines;
};
class VoiceEngineEditor: public QComboBox
{
Q_OBJECT
public:
VoiceEngineEditor( SpeechClient::Engines const & engines, QWidget * parent = 0 );
public:
QString engineName() const;
QString engineId() const;
void setEngineId( QString const & engineId );
};
class VoiceEngineItemDelegate: public QStyledItemDelegate
{
Q_OBJECT
public:
VoiceEngineItemDelegate( SpeechClient::Engines const & engines, QObject * parent = 0 );
virtual QWidget * createEditor( QWidget *parent,
QStyleOptionViewItem const & option,
QModelIndex const & index ) const;
virtual void setEditorData( QWidget *uncastedEditor, const QModelIndex & index ) const;
virtual void setModelData( QWidget *uncastedEditor, QAbstractItemModel * model,
const QModelIndex & index ) const;
private:
SpeechClient::Engines engines;
};
class TextToSpeechSource: public QWidget
{
Q_OBJECT
public:
TextToSpeechSource( QWidget * parent, Config::VoiceEngines voiceEngines );
const VoiceEnginesModel & getVoiceEnginesModel() const
{ return voiceEnginesModel; }
private slots:
void on_addVoiceEngine_clicked();
void on_removeVoiceEngine_clicked();
void on_previewVoice_clicked();
void previewVoiceFinished();
void slidersChanged();
void selectionChanged();
private:
Ui::TextToSpeechSource ui;
VoiceEnginesModel voiceEnginesModel;
void fitSelectedVoiceEnginesColumns();
void adjustSliders();
};
#endif // __TEXTTOSPEECHSOURCE_HH_INCLUDED__