/***************************************************************************
                          KTfxWidget.h  -  main widget header
                             -------------------                                         
    begin                : Tue Sep 21 13:07:04 MEST 1999
                                           
    copyright            : (C) 1999 by David Banz                         
    email                : neo@sakura-audio.cx
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   * 
 *                                                                         *
 ***************************************************************************/

#ifndef KTFXWIDGET_H
#define KTFXWIDGET_H

// internal name of this release
#define INTERNAL_DESIGNATION "Amiga no Tomodachi VI"
// version number parts - here 2.7(.0)
#define MAJOR 2
#define MINOR 7
#define PATCH 0

// KDE includes
#include <kapp.h>
#include <kfiledialog.h>
#include <kmsgbox.h>
#include <kconfig.h>
#include <klocale.h>
#include <kurl.h>
#include <drag.h>
#include <kprocess.h>
// Qt includes
#include <qfileinfo.h>
#include <qtextstream.h>
#include <qtooltip.h>
#include <qaccel.h>
#include <qmessagebox.h>
// C++ includes
#include <iostream.h>
// local includes
#include "TfxControlData.h"
#include "C_includes.h"
#include "ktfxsplash.h"

/**
 * This class adds some real functionality to KTfxControlData.
 *
 * It contains all the slots and other functions necessary
 * to to control TFMX-PLAY via the widgets provided by
 * KTfxControlData.
 *
 * @short Core class to control TFMX-PLAY via KTfxControlData
 * @author David Banz
 * @version 2.7
 * @see KTfxControlData
 */
class KTfxWidget : public KTfxControlData
{
Q_OBJECT

public:

/**
 */
	KTfxWidget(QWidget* parent = NULL, const char* name = NULL );

/**
 */
	virtual ~KTfxWidget();

/**
 *	make sure application is closed when top widget is closed
 */
	void closeEvent(QCloseEvent*);

/**
 * helper for the SIGINT handler
 */
	void signalHelperINT();

protected:
	KTfxSplash* splashScreen;	// startup splash-screen
  bool showSplash;					// if true, show splash-screen
	
	KShellProcess* p;		// process for tfmx-play		
	int song;						// subsong number
	int open;						// file open? 0=no
	int playing;				// file playing? 0=no
	int freq;						// frequency (44/32/22/16/11 kHz)
	int bits;						// bits per sample (8/16)
	int separation;			// 0=mono, 1=headphones, 2=stereo
	QString	browseDir;	// start dir for the file browser
	QString preloadSong;// songfile to preload
	QString tfmxFile;		// filename of the tfmx song (mdat.)
	int preloadSubsong;	// subsong to preselect
	QAccel* acc;				// accelerator for keyboard events
	
	KDNDDropZone *dropzone;	// here we can Drag-and-Drop our files
  	
	// tool tip texts (for i18n)
	QString tipFileBar;
	QString tipSongLcd;
	QString tipFreqLcd;
	QString tipBitLcd;
	QString tipStatusBar[2];	//  [0]=stopped, [1]=playing
	QString tipPlayButton;
	QString tipStopButton;
	QString tipOpenButton;
	QString tipQuitButton;
	QString tipUpButton;
	QString tipDownButton;
	QString tipEightButton;
	QString tipSixteenButton;
	QString tipHiButton;
	QString tipLoButton;
	QString tipHelpButton;
	QString tipAboutButton;
	QString tipToolTipCheck;
	QString aboutStr[4];		// translations for "about"-box
	QString noTfxStr[4];		// translations for "no tfmx-play error"-box
	QString tipSeparation[3]; // [0]=mono, [1]=headphones, [2]=stereo
	QString showSeparation[3];	// same here
	QString tipMonoButton;
	QString tipHeadphonesButton;
	QString tipStereoButton;
	QString tipOversampling;

/**
 * This turns on tooltips and unchecks the checkbox.
 *
 * @see #tipOff
 * @see #toggleCheckTip
 * @see #addTipBulk
 */
	void tipOn();

/**
 * This turns off tooltips and unchecks the checkbox.
 *
 * @see #tipOn
 * @see #toggleCheckTip
 * @see #removeTipBulk
 */
	void tipOff();

/**
 *	This updated the three LCDs.
 *
 * @see #playCore
 *
 */
	void updateLcd();
	
/**
 * This sets the song, tfmxFile, freq, bits, etc.,
 * updates the display and, if /dev/dsp is free, invokes TFMX-PLAY.
 *
 * @see #updateLcd
 */
	void playCore();

/**
 * This stops the player, neccessary display updates are also made.
 *
 * @see #stopTfx
 */
	void stopCore();

/**
 * This reads the configuration, determines whether to show the splash-screen,
 * sets up preloading of song from previous session
 *
 * @see #saveConfig
 */
	void readConfig();

/**
 * This saves the configuration.
 *
 * @see #readConfig
 */
	void saveConfig();

// --------------- these are mainly used by the constructor -----------------

/**
 * Check if tfmx-play can be executed, exit with error message otherwise.
 * This method does the i18n init for the error box on its own!
 *
 * @see #i18nInitBulk
 */
	void checkTfx();

/**
 * This creates an accelerator and adds all the keyboard shortcuts.
 *
 * @see #buttonInit
 */
	void accInit(); 

/**
 * This connects all the buttons to the various slots.
 *
 * @see #buttonInit
 */
	void buttonInit();

/**
 * This sets all the initial defaults for the player, just to be safe...
 *
 * @see #buttonInit
 */
	void initParanoia();
	
/**
 * This evaluates the command-line arguments and, if valid, overrides the
 * current tfmxFile || ( tfmxFile && song ) settings.
 *
 * @see #initPreload
 */
	void evalComm();

/**
 * This updates the display and starts the player, if a song is
 * preloaded via the config file or command-line argument.
 *
 * @see #readConfig
 * @see #evalComm
 */
	void initPreload();

/**
 * Set up the drop zone for drag-and-drop
 *
 * @see KTfxControlData#dropAction
 */
	void setupDropzone();

/**
 * Here we initialize most of the translations for buttons,
 * tooltips, message-boxes, etc.
 *
 * @see #checkTfx
 */
	void i18nInitBulk();
	
// ------------------------ enter the slots -------------------------

protected slots:

/**
 * Toggle oversampling on/off.
 */
	void toggleOversampling();
	
/**
 * Toggle oversampling and button on/off.
 */
 void toggleOsampButton();

/**
 * Called to cleanup the KShellProcess after the player has been stopped,
 * by means of the stop button, for example.
 */
	void done(KProcess*);

/**
 * This slot stops the player, then quits the application.
 *
 * @see KTfxControlData
 * @see #stopTfx
 */
	void quitTfx();

/**
 * This slot opens a KFileDialog to get a new tfmxFile to play,
 * if myFile is 0. Otherwise, the path given in myFile is used instead.
 * Valid selections are played, config is saved.
 *
 * @param myFile is the path to the file to be opened.
 * @see KTfxControlData
 * @see #playTfx
 */
	void openTfx(QString myFile);

/**
 * Overloaded w/o paramter.
 */
	void openTfx();
	
/**
 * This slot stops the player, then saves the config.
 *
 * @see KTfxControlData
 * @see #playTfx
 * @see #saveConfig
 * @see #stopCore
 */
	void stopTfx();

/**
 * This slot plays the current file, otherwise openTfx is called
 * to get a file. Config is saved.
 *
 * @see KTfxControlData
 * @see #openTfx
 * @see #playCore
 * @see #saveConfig
 */
	void playTfx();

/**
 * This slot increases song num. and calls stopTfx and playTfx if necessary.
 * Config is saved.
 *
 * @see KTfxControlData
 * @see #songDown
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void songUp();

/**
 * This slot decreases song num. and calls stopTfx and playTfx if necessary.
 * Config is saved.
 *
 * @see KTfxControlData
 * @see #songUp
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void songDown();

/**
 * This slot increases freq and calls stopTfx and playTfx if necessary.
 * Config is saved.
 *
 * @see KTfxControlData
 * @see #freqDown
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void freqUp();
	
/**
 * This slot decreases freq and calls stopTfx and playTfx if necessary.
 * Config is saved.
 *
 * @see KTfxControlData
 * @see #freqUp
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void freqDown();

/**
 * This slot switches to 16 bits and calls stopTfx and playTfx if necessary.
 * Config is saved.
 *
 * @see KTfxControlData
 * @see #bitsLo
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void bitsHi();

/**
 * This slot switches to 8 bits and calls stopTfx and playTfx if necessary.
 * Config is saved.
 *
 * @see KTfxControlData
 * @see #bitsHi
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void bitsLo();

/**
 * Set stereo output mode, stop/restart/save config works as usual.
 *
 * @see #setMono
 * @see #setHeadphones
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void setStereo();
	
/**
 * Set headphone output mode, stop/restart/save config works as usual.
 * If you want to use headphones with a stereo soundcard,
 * this mode usually sounds better than reguar stereo.
 *
 * @see #setStereo
 * @see #setMono
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void setHeadphones();
	
/**
 * Set mono output mode, stop/restart/save config works as usual.
 *
 * @see #setHeadphones
 * @see #setStereo
 * @see #playTfx
 * @see #stopTfx
 * @see #saveConfig
 */
	void setMono();

/**
 * This slot toggles tooltips on/off, depending on current status
 * of the checkbox. Config is saved.
 *
 * @see KTfxControlData
 * @see #toggleCheckTip
 * @see #tipOff
 * @see #tipOn
 * @see #saveConfig
 * @see #addTipBulk
 * @see #removeTipBulk
 */
	void toggleTip();

/**
 * This slot turns tooltips off if are on and vice versa.
 * The checkbox is (un)checked, config is saved.
 *
 * @see KTfxControlData
 * @see #toggleTip
 * @see #tipOff
 * @see #tipOn
 * @see #saveConfig
 */
	void toggleCheckTip();

/**
 * This does the real work of adding all the tooltips, nothing else.
 */
	void addTipBulk();
	
/**
 * This does the real work of removing all the tooltips, nothing else.
 */
	void removeTipBulk();
		
/**
 * This slot invokes the HTML online help.
 *
 * @see KTfxControlData
 * @see #about
 */
	void help();

/**
 * This slot shows the "about" box.
 * I just couldn't resist putting the new application
 * into the about box, it's just too "kawaii"!
 *
 * @see KTfxControlData
 * @see #help
 */
	void about();

/**
 * DND slot, activated when something is dropped on the dropzone.
 *
 * @param dz the dropzone that activated this slot
 * @see #setupDropzone
 */
	void dropAction(KDNDDropZone *dz);

/**
 * Returns path of smpl.-file for given mdat.-filepath,
 * if smpl.-file exists. Returns 0 otherwise.
 *
 * @param mdatPath a string containing the path of the mdat. file
 */
	QString samplePath(QString mdatPath);

 	
};

#endif // KTFXWIDGET_H







Documentation generated by neo@san on Mon May 1 11:29:54 MEST 2000