|
|
|
/***************************************************** vim:set ts=4 sw=4 sts=4:
|
|
|
|
A KPart to display running jobs in KTTSD and permit user to stop, rewind,
|
|
|
|
advance, change Talker, etc.
|
|
|
|
-------------------
|
|
|
|
Copyright : (C) 2004 by Gary Cramblitt <garycramblitt@comcast.net>
|
|
|
|
-------------------
|
|
|
|
Current Maintainer: Gary Cramblitt <garycramblitt@comcast.net>
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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; version 2 of the License. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef _KTTSJOBMGRPART_H_
|
|
|
|
#define _KTTSJOBMGRPART_H_
|
|
|
|
|
|
|
|
// KDE includes.
|
|
|
|
#include <kparts/browserextension.h>
|
|
|
|
#include <klibloader.h>
|
|
|
|
|
|
|
|
// KTTS includes.
|
|
|
|
#include "kspeech_stub.h"
|
|
|
|
#include "kspeechsink.h"
|
|
|
|
|
|
|
|
class KAboutData;
|
|
|
|
class KInstance;
|
|
|
|
class KttsJobMgrBrowserExtension;
|
|
|
|
class KListView;
|
|
|
|
class TQListViewItem;
|
|
|
|
class TQVBox;
|
|
|
|
class KTextEdit;
|
|
|
|
|
|
|
|
class KttsJobMgrFactory : public KLibFactory
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
public:
|
|
|
|
KttsJobMgrFactory() {};
|
|
|
|
virtual ~KttsJobMgrFactory();
|
|
|
|
|
|
|
|
virtual TQObject* createObject(TQObject* parent = 0, const char* name = 0,
|
|
|
|
const char* classname = TQOBJECT_OBJECT_NAME_STRING,
|
|
|
|
const TQStringList &args = TQStringList());
|
|
|
|
|
|
|
|
static KInstance *instance();
|
|
|
|
static KAboutData *aboutData();
|
|
|
|
|
|
|
|
private:
|
|
|
|
static KInstance *s_instance;
|
|
|
|
};
|
|
|
|
|
|
|
|
class KttsJobMgrPart:
|
|
|
|
public KParts::ReadOnlyPart,
|
|
|
|
public KSpeech_stub,
|
|
|
|
virtual public KSpeechSink
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
public:
|
|
|
|
KttsJobMgrPart(TQWidget *parent, const char *name);
|
|
|
|
virtual ~KttsJobMgrPart();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual bool openFile();
|
|
|
|
virtual bool closeURL();
|
|
|
|
|
|
|
|
/** DCOP Methods connected to DCOP Signals emitted by KTTSD. */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This signal is emitted when KTTSD starts or restarts after a call to reinit.
|
|
|
|
*/
|
|
|
|
ASYNC kttsdStarted();
|
|
|
|
/**
|
|
|
|
* This signal is emitted when the speech engine/plugin encounters a marker in the text.
|
|
|
|
* @param appId DCOP application ID of the application that queued the text.
|
|
|
|
* @param markerName The name of the marker seen.
|
|
|
|
* @see markers
|
|
|
|
*/
|
|
|
|
ASYNC markerSeen(const TQCString& appId, const TQString& markerName);
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever a sentence begins speaking.
|
|
|
|
* @param appId DCOP application ID of the application that queued the text.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
* @param seq Sequence number of the text.
|
|
|
|
* @see getTextCount
|
|
|
|
*/
|
|
|
|
ASYNC sentenceStarted(const TQCString& appId, const uint jobNum, const uint seq);
|
|
|
|
/**
|
|
|
|
* This signal is emitted when a sentence has finished speaking.
|
|
|
|
* @param appId DCOP application ID of the application that queued the text.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
* @param seq Sequence number of the text.
|
|
|
|
* @see getTextCount
|
|
|
|
*/
|
|
|
|
ASYNC sentenceFinished(const TQCString& appId, const uint jobNum, const uint seq);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever a new text job is added to the queue.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job. NULL if kttsd.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
*/
|
|
|
|
ASYNC textSet(const TQCString& appId, const uint jobNum);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever a new part is appended to a text job.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
* @param partNum Part number of the new part. Parts are numbered starting
|
|
|
|
* at 1.
|
|
|
|
*/
|
|
|
|
ASYNC textAppended(const TQCString& appId, const uint jobNum, const int partNum);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever speaking of a text job begins.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job. NULL if kttsd.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
*/
|
|
|
|
ASYNC textStarted(const TQCString& appId, const uint jobNum);
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever a text job is finished. The job has
|
|
|
|
* been marked for deletion from the queue and will be deleted when another
|
|
|
|
* job reaches the Finished state. (Only one job in the text queue may be
|
|
|
|
* in state Finished at one time.) If @ref startText or @ref resumeText is
|
|
|
|
* called before the job is deleted, it will remain in the queue for speaking.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job. NULL if kttsd.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
*/
|
|
|
|
ASYNC textFinished(const TQCString& appId, const uint jobNum);
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever a speaking text job stops speaking.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job. NULL if kttsd.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
*/
|
|
|
|
ASYNC textStopped(const TQCString& appId, const uint jobNum);
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever a speaking text job is paused.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job. NULL if kttsd.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
*/
|
|
|
|
ASYNC textPaused(const TQCString& appId, const uint jobNum);
|
|
|
|
/**
|
|
|
|
* This signal is emitted when a text job, that was previously paused, resumes speaking.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job. NULL if kttsd.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
*/
|
|
|
|
ASYNC textResumed(const TQCString& appId, const uint jobNum);
|
|
|
|
/**
|
|
|
|
* This signal is emitted whenever a text job is deleted from the queue.
|
|
|
|
* The job is no longer in the queue when this signal is emitted.
|
|
|
|
* @param appId The DCOP senderId of the application that created the job. NULL if kttsd.
|
|
|
|
* @param jobNum Job number of the text job.
|
|
|
|
*/
|
|
|
|
ASYNC textRemoved(const TQCString& appId, const uint jobNum);
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
/**
|
|
|
|
* This slot is connected to the Job List View selectionChanged signal.
|
|
|
|
*/
|
|
|
|
void slot_selectionChanged(TQListViewItem* item);
|
|
|
|
/**
|
|
|
|
* Slots connected to buttons.
|
|
|
|
*/
|
|
|
|
void slot_job_hold();
|
|
|
|
void slot_job_resume();
|
|
|
|
void slot_job_restart();
|
|
|
|
void slot_job_remove();
|
|
|
|
void slot_job_move();
|
|
|
|
void slot_job_change_talker();
|
|
|
|
void slot_speak_clipboard();
|
|
|
|
void slot_speak_file();
|
|
|
|
void slot_refresh();
|
|
|
|
void slot_job_prev_par();
|
|
|
|
void slot_job_prev_sen();
|
|
|
|
void slot_job_next_sen();
|
|
|
|
void slot_job_next_par();
|
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* @enum JobListViewColumn
|
|
|
|
* Columns in the Job List View.
|
|
|
|
*/
|
|
|
|
enum JobListViewColumn
|
|
|
|
{
|
|
|
|
jlvcJobNum = 0, /**< Job Number. */
|
|
|
|
jlvcOwner = 1, /**< AppId of job owner */
|
|
|
|
jlvcTalkerID = 2, /**< Job Talker ID */
|
|
|
|
jlvcState = 3, /**< Job State */
|
|
|
|
jlvcPosition = 4, /**< Current sentence of job. */
|
|
|
|
jlvcSentences = 5, /**< Number of sentences in job. */
|
|
|
|
jlvcPartNum = 6, /**< Current part of the job. */
|
|
|
|
jlvcPartCount = 7 /**< Number of parts in job. */
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Convert a KTTSD job state integer into a display string.
|
|
|
|
* @param state KTTSD job state
|
|
|
|
* @return Display string for the state.
|
|
|
|
*/
|
|
|
|
TQString stateToStr(int state);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Job Number of the currently-selected job in the Job List View.
|
|
|
|
* @return Job Number of currently-selected job.
|
|
|
|
* 0 if no currently-selected job.
|
|
|
|
*/
|
|
|
|
uint getCurrentJobNum();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the number of parts in the currently-selected job in the Job List View.
|
|
|
|
* @return Number of parts in currently-selected job.
|
|
|
|
* 0 if no currently-selected job.
|
|
|
|
*/
|
|
|
|
int getCurrentJobPartCount();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Given a Job Number, returns the Job List View item containing the job.
|
|
|
|
* @param jobNum Job Number.
|
|
|
|
* @return TQListViewItem containing the job or 0 if not found.
|
|
|
|
*/
|
|
|
|
TQListViewItem* findItemByJobNum(const uint jobNum);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Enables or disables all the job-related buttons.
|
|
|
|
* @param enable True to enable the job-related butons. False to disable.
|
|
|
|
*/
|
|
|
|
void enableJobActions(bool enable);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Enables or disables all the job part-related buttons.
|
|
|
|
* @param enable True to enable the job par-related butons. False to disable.
|
|
|
|
*/
|
|
|
|
void enableJobPartActions(bool enable);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Refresh display of a single job in the JobListView.
|
|
|
|
* @param jobNum Job Number.
|
|
|
|
*/
|
|
|
|
void refreshJob(uint jobNum);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fill the Job List View.
|
|
|
|
*/
|
|
|
|
void refreshJobListView();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If nothing selected in Job List View and list not empty, select top item.
|
|
|
|
* If nothing selected and list is empty, disable job buttons.
|
|
|
|
*/
|
|
|
|
void autoSelectInJobListView();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the Talker ID corresponding to a Talker Code, retrieving from cached list if present.
|
|
|
|
* @param talkerCode Talker Code.
|
|
|
|
* @return Talker ID.
|
|
|
|
*/
|
|
|
|
TQString cachedTalkerCodeToTalkerID(const TQString& talkerCode);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Job ListView.
|
|
|
|
*/
|
|
|
|
KListView* m_jobListView;
|
|
|
|
KttsJobMgrBrowserExtension *m_extension;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Current sentence box.
|
|
|
|
*/
|
|
|
|
KTextEdit* m_currentSentence;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Box containing buttons.
|
|
|
|
*/
|
|
|
|
TQVBox* m_buttonBox;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This flag is set to True whenever we want to select the next job that
|
|
|
|
* is announced in a textSet signal.
|
|
|
|
*/
|
|
|
|
bool m_selectOnTextSet;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Cache mapping Talker Codes to Talker IDs.
|
|
|
|
*/
|
|
|
|
TQMap<TQString,TQString> m_talkerCodesToTalkerIDs;
|
|
|
|
};
|
|
|
|
|
|
|
|
class KttsJobMgrBrowserExtension : public KParts::BrowserExtension
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
friend class KttsJobMgrPart;
|
|
|
|
public:
|
|
|
|
KttsJobMgrBrowserExtension(KttsJobMgrPart *parent);
|
|
|
|
virtual ~KttsJobMgrBrowserExtension();
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _KTTSJOBMGRPART_H_
|
|
|
|
|